@temelj/workflow 0.0.0-alpha.3 → 0.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +394 -2
- package/dist/attributes.d.mts +11 -9
- package/dist/attributes.mjs +23 -5
- package/dist/bundle.d.mts +5 -23
- package/dist/bundle.mjs +2 -18
- package/dist/client/create.d.mts +26 -23
- package/dist/client/create.mjs +26 -32
- package/dist/client/facades.d.mts +12 -18
- package/dist/client/facades.mjs +102 -93
- package/dist/client/mod.mjs +1 -2
- package/dist/client/run-handle.d.mts +17 -54
- package/dist/client/run-handle.mjs +35 -105
- package/dist/client/worker-options.d.mts +8 -8
- package/dist/client/worker-options.mjs +11 -11
- package/dist/cloudflare/cloudflare.d.mts +4 -5
- package/dist/cloudflare/codec.d.mts +28 -13
- package/dist/cloudflare/codec.mjs +40 -17
- package/dist/cloudflare/entrypoint.d.mts +3 -4
- package/dist/cloudflare/entrypoint.mjs +4 -3
- package/dist/cloudflare/execution.d.mts +3 -4
- package/dist/cloudflare/execution.mjs +20 -13
- package/dist/cloudflare/host.d.mts +6 -7
- package/dist/cloudflare/host.mjs +7 -6
- package/dist/cloudflare/mod.d.mts +4 -4
- package/dist/cloudflare/mod.mjs +2 -2
- package/dist/cloudflare/name.d.mts +3 -4
- package/dist/cloudflare/name.mjs +3 -3
- package/dist/cloudflare/registry.d.mts +3 -23
- package/dist/cloudflare/registry.mjs +2 -20
- package/dist/cloudflare/runtime.d.mts +11 -18
- package/dist/cloudflare/runtime.mjs +52 -73
- package/dist/cloudflare/step.d.mts +6 -6
- package/dist/cloudflare/step.mjs +69 -57
- package/dist/cloudflare/types.d.mts +17 -36
- package/dist/collection.d.mts +8 -11
- package/dist/collection.mjs +10 -14
- package/dist/compiled-function.d.mts +14 -19
- package/dist/compiled-function.mjs +12 -24
- package/dist/compiled.d.mts +4 -0
- package/dist/compiled.mjs +4 -0
- package/dist/compiler/ast.d.mts +26 -0
- package/dist/{vite → compiler}/ast.mjs +24 -16
- package/dist/{vite → compiler}/error.d.mts +4 -6
- package/dist/{vite → compiler}/error.mjs +14 -16
- package/dist/compiler/manifest.d.mts +6 -0
- package/dist/{vite → compiler}/manifest.mjs +9 -7
- package/dist/compiler/plugin.d.mts +7 -0
- package/dist/{vite → compiler}/plugin.mjs +45 -46
- package/dist/compiler/safety.d.mts +12 -0
- package/dist/{vite → compiler}/safety.mjs +5 -11
- package/dist/{vite → compiler}/source-edit.d.mts +3 -4
- package/dist/{vite → compiler}/source-edit.mjs +1 -1
- package/dist/{vite → compiler}/source-map.d.mts +4 -3
- package/dist/{vite → compiler}/source-map.mjs +3 -3
- package/dist/compiler/source.d.mts +7 -0
- package/dist/{vite → compiler}/source.mjs +1 -1
- package/dist/compiler/transform.d.mts +12 -0
- package/dist/{vite → compiler}/transform.mjs +37 -38
- package/dist/definition.d.mts +17 -25
- package/dist/definition.mjs +19 -35
- package/dist/engine/child-workflow.d.mts +5 -9
- package/dist/engine/child-workflow.mjs +46 -67
- package/dist/engine/command-identity.d.mts +5 -6
- package/dist/engine/command-identity.mjs +9 -5
- package/dist/engine/context.d.mts +17 -0
- package/dist/engine/create.d.mts +36 -94
- package/dist/engine/create.mjs +55 -260
- package/dist/engine/deterministic.d.mts +6 -11
- package/dist/engine/deterministic.mjs +47 -68
- package/dist/engine/durable-command.d.mts +5 -5
- package/dist/engine/durable-command.mjs +2 -2
- package/dist/engine/execution-service.d.mts +20 -24
- package/dist/engine/execution-service.mjs +54 -52
- package/dist/engine/hooks.d.mts +17 -39
- package/dist/engine/hooks.mjs +73 -94
- package/dist/engine/inspection.d.mts +23 -15
- package/dist/engine/inspection.mjs +55 -29
- package/dist/engine/lifecycle.d.mts +6 -12
- package/dist/engine/lifecycle.mjs +5 -5
- package/dist/engine/lock-replay.d.mts +8 -15
- package/dist/engine/lock-replay.mjs +12 -25
- package/dist/engine/lock.d.mts +10 -15
- package/dist/engine/lock.mjs +65 -51
- package/dist/engine/message.d.mts +14 -34
- package/dist/engine/message.mjs +94 -127
- package/dist/engine/observation.d.mts +9 -11
- package/dist/engine/observation.mjs +18 -27
- package/dist/engine/replay.d.mts +18 -19
- package/dist/engine/replay.mjs +32 -56
- package/dist/engine/resume.d.mts +16 -0
- package/dist/engine/resume.mjs +24 -0
- package/dist/engine/retry.d.mts +15 -19
- package/dist/engine/retry.mjs +17 -17
- package/dist/engine/run-data.d.mts +4 -8
- package/dist/engine/run-data.mjs +24 -22
- package/dist/engine/run-service.d.mts +24 -33
- package/dist/engine/run-service.mjs +125 -93
- package/dist/engine/run-utils.d.mts +11 -13
- package/dist/engine/run-utils.mjs +23 -46
- package/dist/engine/schedule.d.mts +8 -22
- package/dist/engine/schedule.mjs +37 -34
- package/dist/engine/serialization.d.mts +9 -6
- package/dist/engine/serialization.mjs +30 -21
- package/dist/engine/signals.d.mts +23 -0
- package/dist/engine/signals.mjs +41 -0
- package/dist/engine/start.d.mts +18 -0
- package/dist/engine/start.mjs +88 -0
- package/dist/engine/state.d.mts +37 -67
- package/dist/engine/state.mjs +119 -280
- package/dist/engine/step-api.d.mts +5 -8
- package/dist/engine/step-api.mjs +16 -16
- package/dist/engine/stream-reader.d.mts +12 -0
- package/dist/engine/stream-reader.mjs +154 -0
- package/dist/engine/stream.d.mts +9 -54
- package/dist/engine/stream.mjs +54 -196
- package/dist/engine/summary/recovery.d.mts +35 -0
- package/dist/engine/summary/recovery.mjs +363 -0
- package/dist/engine/summary/runs.d.mts +43 -0
- package/dist/engine/summary/runs.mjs +294 -0
- package/dist/engine/summary/step-attempts.d.mts +5 -10
- package/dist/engine/summary/step-attempts.mjs +157 -36
- package/dist/engine/summary/tally.d.mts +44 -0
- package/dist/engine/summary/tally.mjs +142 -0
- package/dist/engine/task.d.mts +4 -5
- package/dist/engine/task.mjs +40 -48
- package/dist/errors/base.d.mts +17 -77
- package/dist/errors/base.mjs +26 -327
- package/dist/errors/capability.d.mts +3 -6
- package/dist/errors/capability.mjs +4 -8
- package/dist/errors/codes.d.mts +116 -0
- package/dist/{types/error-code.mjs → errors/codes.mjs} +2 -17
- package/dist/errors/definition.d.mts +3 -17
- package/dist/errors/definition.mjs +5 -42
- package/dist/errors/failures.d.mts +17 -51
- package/dist/errors/failures.mjs +35 -102
- package/dist/errors/hook.d.mts +5 -9
- package/dist/errors/hook.mjs +4 -16
- package/dist/errors/implementation.d.mts +3 -6
- package/dist/errors/implementation.mjs +7 -12
- package/dist/errors/lock.d.mts +7 -20
- package/dist/errors/lock.mjs +8 -44
- package/dist/errors/message.d.mts +14 -59
- package/dist/errors/message.mjs +13 -39
- package/dist/errors/mod.d.mts +4 -5
- package/dist/errors/mod.mjs +5 -7
- package/dist/errors/records.d.mts +10 -4
- package/dist/errors/records.mjs +256 -256
- package/dist/errors/run.d.mts +27 -68
- package/dist/errors/run.mjs +31 -85
- package/dist/errors/schedule.d.mts +7 -18
- package/dist/errors/schedule.mjs +7 -39
- package/dist/errors/step.d.mts +12 -45
- package/dist/errors/step.mjs +13 -34
- package/dist/errors/stream.d.mts +8 -16
- package/dist/errors/stream.mjs +7 -41
- package/dist/esbuild.d.mts +6 -4
- package/dist/esbuild.mjs +2 -1
- package/dist/events/descriptors.d.mts +12 -241
- package/dist/events/descriptors.mjs +12 -5
- package/dist/history/projection.d.mts +4 -6
- package/dist/history/projection.mjs +22 -26
- package/dist/history/replay-projection.d.mts +44 -48
- package/dist/history/replay-projection.mjs +41 -50
- package/dist/history/{mod.d.mts → replay.d.mts} +16 -21
- package/dist/history/{mod.mjs → replay.mjs} +21 -25
- package/dist/history/sequencer.d.mts +10 -11
- package/dist/history/sequencer.mjs +11 -7
- package/dist/history/step-attempts.d.mts +4 -7
- package/dist/history/step-attempts.mjs +8 -9
- package/dist/history/timeline.d.mts +4 -13
- package/dist/history/timeline.mjs +46 -265
- package/dist/history/validator.d.mts +5 -7
- package/dist/history/validator.mjs +9 -24
- package/dist/hook-token.d.mts +7 -0
- package/dist/hook-token.mjs +32 -0
- package/dist/ids.d.mts +8 -0
- package/dist/ids.mjs +21 -0
- package/dist/message-options.d.mts +11 -5
- package/dist/message-options.mjs +9 -7
- package/dist/mod.d.mts +32 -36
- package/dist/mod.mjs +9 -13
- package/dist/otel/metrics.d.mts +31 -0
- package/dist/otel/metrics.mjs +60 -0
- package/dist/otel/mod.d.mts +3 -0
- package/dist/otel/mod.mjs +3 -0
- package/dist/otel/spans.d.mts +24 -0
- package/dist/otel/spans.mjs +218 -0
- package/dist/otel/support.d.mts +15 -8
- package/dist/otel/support.mjs +18 -40
- package/dist/{otel.d.mts → otel/telemetry.d.mts} +5 -6
- package/dist/otel/telemetry.mjs +305 -0
- package/dist/pagination.d.mts +6 -12
- package/dist/pagination.mjs +10 -14
- package/dist/registry.d.mts +8 -5
- package/dist/registry.mjs +19 -10
- package/dist/rolldown.d.mts +6 -4
- package/dist/rolldown.mjs +2 -1
- package/dist/rollup.d.mts +6 -4
- package/dist/rollup.mjs +2 -1
- package/dist/rspack.d.mts +6 -4
- package/dist/rspack.mjs +2 -1
- package/dist/run-status.d.mts +29 -0
- package/dist/run-status.mjs +42 -0
- package/dist/schema/common.d.mts +22 -0
- package/dist/schema/common.mjs +54 -0
- package/dist/schema/error.d.mts +17 -0
- package/dist/schema/error.mjs +39 -0
- package/dist/schema/events.d.mts +446 -0
- package/dist/schema/events.mjs +235 -0
- package/dist/schema/pagination.d.mts +5 -0
- package/dist/schema/pagination.mjs +11 -0
- package/dist/schema/persisted-value.d.mts +8 -0
- package/dist/schema/persisted-value.mjs +94 -0
- package/dist/schema/run.d.mts +51 -0
- package/dist/schema/run.mjs +88 -0
- package/dist/schema/store.d.mts +94 -0
- package/dist/schema/store.mjs +116 -0
- package/dist/step-definition.d.mts +4 -9
- package/dist/step-definition.mjs +2 -2
- package/dist/store/capabilities.d.mts +8 -9
- package/dist/store/capabilities.mjs +7 -7
- package/dist/store/cleanup.d.mts +9 -14
- package/dist/store/cleanup.mjs +86 -85
- package/dist/store/create.d.mts +28 -29
- package/dist/store/create.mjs +10 -11
- package/dist/store/events.d.mts +48 -0
- package/dist/store/events.mjs +263 -0
- package/dist/store/indexes.d.mts +25 -0
- package/dist/store/indexes.mjs +282 -0
- package/dist/store/instrumentation.d.mts +2 -3
- package/dist/store/instrumentation.mjs +30 -30
- package/dist/store/lock.d.mts +4 -5
- package/dist/store/lock.mjs +5 -7
- package/dist/store/materialization.d.mts +10 -17
- package/dist/store/materialization.mjs +39 -33
- package/dist/store/mod.d.mts +3 -3
- package/dist/store/mod.mjs +2 -2
- package/dist/store/query.d.mts +13 -17
- package/dist/store/query.mjs +13 -13
- package/dist/store/run.d.mts +25 -34
- package/dist/store/run.mjs +67 -108
- package/dist/store/schedule.d.mts +6 -8
- package/dist/store/schedule.mjs +11 -11
- package/dist/store/step-attempt.d.mts +9 -12
- package/dist/store/step-attempt.mjs +9 -9
- package/dist/store/storage-value.d.mts +3 -3
- package/dist/store/storage-value.mjs +17 -1
- package/dist/store/validation.d.mts +17 -20
- package/dist/store/validation.mjs +30 -33
- package/dist/store-keys.d.mts +35 -47
- package/dist/store-keys.mjs +9 -17
- package/dist/telemetry.d.mts +16 -16
- package/dist/telemetry.mjs +3 -3
- package/dist/temporal.d.mts +11 -16
- package/dist/temporal.mjs +8 -9
- package/dist/timer.d.mts +12 -10
- package/dist/timer.mjs +11 -3
- package/dist/types/cleanup.d.mts +13 -50
- package/dist/types/cleanup.mjs +1 -22
- package/dist/types/client.d.mts +101 -162
- package/dist/types/{vite.d.mts → compiler.d.mts} +17 -24
- package/dist/types/compiler.mjs +1 -0
- package/dist/types/definition.d.mts +22 -34
- package/dist/types/engine-options.d.mts +10 -17
- package/dist/types/engine.d.mts +15 -274
- package/dist/types/error.d.mts +15 -217
- package/dist/types/error.mjs +1 -48
- package/dist/types/events.d.mts +59 -2730
- package/dist/types/events.mjs +1 -283
- package/dist/types/hook.d.mts +27 -85
- package/dist/types/hook.mjs +1 -66
- package/dist/types/ids.d.mts +9 -0
- package/dist/types/ids.mjs +1 -0
- package/dist/types/lock.d.mts +8 -26
- package/dist/types/lock.mjs +1 -18
- package/dist/types/message.d.mts +29 -43
- package/dist/types/observation.d.mts +43 -58
- package/dist/types/pagination.d.mts +6 -22
- package/dist/types/pagination.mjs +1 -13
- package/dist/types/result.d.mts +11 -43
- package/dist/types/retry.d.mts +7 -14
- package/dist/types/run-list.d.mts +9 -11
- package/dist/types/run-options.d.mts +25 -32
- package/dist/types/run.d.mts +35 -315
- package/dist/types/run.mjs +1 -207
- package/dist/types/runtime.d.mts +33 -145
- package/dist/types/runtime.mjs +1 -21
- package/dist/types/schedule.d.mts +13 -72
- package/dist/types/schedule.mjs +1 -48
- package/dist/types/step-attempts.d.mts +65 -261
- package/dist/types/step-attempts.mjs +1 -43
- package/dist/types/step.d.mts +66 -77
- package/dist/types/step.mjs +1 -5
- package/dist/types/store.d.mts +50 -182
- package/dist/types/stream.d.mts +19 -40
- package/dist/types/summary.d.mts +174 -278
- package/dist/types/telemetry.d.mts +23 -28
- package/dist/types/telemetry.mjs +1 -9
- package/dist/types/timeline.d.mts +46 -233
- package/dist/types/worker.d.mts +22 -29
- package/dist/values.d.mts +15 -0
- package/dist/values.mjs +57 -0
- package/dist/vite.d.mts +5 -6
- package/dist/vite.mjs +3 -4
- package/dist/webpack.d.mts +6 -4
- package/dist/webpack.mjs +2 -1
- package/dist/worker/error.d.mts +2 -9
- package/dist/worker/error.mjs +20 -32
- package/dist/worker/missing-implementation.d.mts +19 -0
- package/dist/worker/missing-implementation.mjs +62 -0
- package/dist/worker/worker.d.mts +18 -0
- package/dist/{worker.mjs → worker/worker.mjs} +64 -118
- package/package.json +28 -47
- package/dist/engine/execution-api.d.mts +0 -29
- package/dist/engine/execution-api.mjs +0 -33
- package/dist/engine/inspection-api.d.mts +0 -34
- package/dist/engine/inspection-api.mjs +0 -78
- package/dist/engine/mod.d.mts +0 -4
- package/dist/engine/mod.mjs +0 -2
- package/dist/engine/recovery.d.mts +0 -26
- package/dist/engine/recovery.mjs +0 -92
- package/dist/engine/retry-policy.d.mts +0 -4
- package/dist/engine/retry-policy.mjs +0 -4
- package/dist/engine/start-api.d.mts +0 -30
- package/dist/engine/start-api.mjs +0 -99
- package/dist/engine/summary/active-events.d.mts +0 -34
- package/dist/engine/summary/active-events.mjs +0 -69
- package/dist/engine/summary/child-workflow-runs.d.mts +0 -24
- package/dist/engine/summary/child-workflow-runs.mjs +0 -138
- package/dist/engine/summary/child-workflow-waits.d.mts +0 -21
- package/dist/engine/summary/child-workflow-waits.mjs +0 -67
- package/dist/engine/summary/recovery-child-workflow-waits.d.mts +0 -11
- package/dist/engine/summary/recovery-child-workflow-waits.mjs +0 -89
- package/dist/engine/summary/recovery-due-runs.d.mts +0 -16
- package/dist/engine/summary/recovery-due-runs.mjs +0 -52
- package/dist/engine/summary/recovery-failed-runs.d.mts +0 -14
- package/dist/engine/summary/recovery-failed-runs.mjs +0 -33
- package/dist/engine/summary/recovery-lease-runs.d.mts +0 -16
- package/dist/engine/summary/recovery-lease-runs.mjs +0 -69
- package/dist/engine/summary/recovery-locks.d.mts +0 -18
- package/dist/engine/summary/recovery-locks.mjs +0 -100
- package/dist/engine/summary/recovery-message-waits.d.mts +0 -11
- package/dist/engine/summary/recovery-message-waits.mjs +0 -74
- package/dist/engine/summary/recovery-retry-runs.d.mts +0 -17
- package/dist/engine/summary/recovery-retry-runs.mjs +0 -65
- package/dist/engine/summary/recovery-run-timestamps.d.mts +0 -13
- package/dist/engine/summary/recovery-run-timestamps.mjs +0 -18
- package/dist/engine/summary/recovery-runs.d.mts +0 -23
- package/dist/engine/summary/recovery-runs.mjs +0 -54
- package/dist/engine/summary/recovery-schedules.d.mts +0 -10
- package/dist/engine/summary/recovery-schedules.mjs +0 -46
- package/dist/engine/summary/recovery-sleep-waits.d.mts +0 -10
- package/dist/engine/summary/recovery-sleep-waits.mjs +0 -53
- package/dist/engine/summary/recovery-waits.d.mts +0 -21
- package/dist/engine/summary/recovery-waits.mjs +0 -29
- package/dist/engine/summary/run-availability.d.mts +0 -13
- package/dist/engine/summary/run-availability.mjs +0 -37
- package/dist/engine/summary/run-cleanup.d.mts +0 -14
- package/dist/engine/summary/run-cleanup.mjs +0 -44
- package/dist/engine/summary/run-failure.d.mts +0 -14
- package/dist/engine/summary/run-failure.mjs +0 -62
- package/dist/engine/summary/run-hooks.d.mts +0 -14
- package/dist/engine/summary/run-hooks.mjs +0 -63
- package/dist/engine/summary/run-lease.d.mts +0 -11
- package/dist/engine/summary/run-lease.mjs +0 -64
- package/dist/engine/summary/run-message-waits.d.mts +0 -15
- package/dist/engine/summary/run-message-waits.mjs +0 -62
- package/dist/engine/summary/run-metrics.d.mts +0 -31
- package/dist/engine/summary/run-metrics.mjs +0 -93
- package/dist/engine/summary/run-retry.d.mts +0 -9
- package/dist/engine/summary/run-retry.mjs +0 -69
- package/dist/engine/summary/run-sleeps.d.mts +0 -15
- package/dist/engine/summary/run-sleeps.mjs +0 -61
- package/dist/engine/summary/run-state.d.mts +0 -26
- package/dist/engine/summary/run-state.mjs +0 -48
- package/dist/engine/summary/run-status.d.mts +0 -16
- package/dist/engine/summary/run-status.mjs +0 -35
- package/dist/engine/summary/run-streams.d.mts +0 -14
- package/dist/engine/summary/run-streams.mjs +0 -46
- package/dist/engine/summary/run-transition.d.mts +0 -9
- package/dist/engine/summary/run-transition.mjs +0 -39
- package/dist/engine/summary/run-workflow.d.mts +0 -9
- package/dist/engine/summary/run-workflow.mjs +0 -47
- package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +0 -13
- package/dist/engine/summary/step-attempt-active-child-workflows.mjs +0 -55
- package/dist/engine/summary/step-attempt-active-fields.d.mts +0 -23
- package/dist/engine/summary/step-attempt-active-fields.mjs +0 -14
- package/dist/engine/summary/step-attempt-active-message-waits.d.mts +0 -12
- package/dist/engine/summary/step-attempt-active-message-waits.mjs +0 -47
- package/dist/engine/summary/step-attempt-active-sleeps.d.mts +0 -19
- package/dist/engine/summary/step-attempt-active-sleeps.mjs +0 -44
- package/dist/engine/summary/step-attempt-buckets.d.mts +0 -22
- package/dist/engine/summary/step-attempt-buckets.mjs +0 -152
- package/dist/engine/summary/step-attempt-failure.d.mts +0 -12
- package/dist/engine/summary/step-attempt-failure.mjs +0 -61
- package/dist/engine/summary/step-attempt-lifecycle.d.mts +0 -13
- package/dist/engine/summary/step-attempt-lifecycle.mjs +0 -19
- package/dist/engine/summary.d.mts +0 -32
- package/dist/engine/summary.mjs +0 -37
- package/dist/errors/details.d.mts +0 -13
- package/dist/errors/details.mjs +0 -66
- package/dist/errors/record-view.d.mts +0 -11
- package/dist/errors/record-view.mjs +0 -24
- package/dist/errors/runtime.d.mts +0 -12
- package/dist/errors/runtime.mjs +0 -24
- package/dist/events/mod.d.mts +0 -3
- package/dist/events/mod.mjs +0 -2
- package/dist/history/attempt-key.d.mts +0 -6
- package/dist/history/attempt-key.mjs +0 -7
- package/dist/inspection/mod.d.mts +0 -5
- package/dist/inspection/mod.mjs +0 -3
- package/dist/otel.mjs +0 -590
- package/dist/runtime.d.mts +0 -35
- package/dist/runtime.mjs +0 -198
- package/dist/store/append-projection.d.mts +0 -15
- package/dist/store/append-projection.mjs +0 -26
- package/dist/store/compaction.d.mts +0 -5
- package/dist/store/compaction.mjs +0 -8
- package/dist/store/event-append-project.d.mts +0 -15
- package/dist/store/event-append-project.mjs +0 -77
- package/dist/store/event-append.d.mts +0 -37
- package/dist/store/event-append.mjs +0 -80
- package/dist/store/event-history.d.mts +0 -22
- package/dist/store/event-history.mjs +0 -75
- package/dist/store/event.d.mts +0 -10
- package/dist/store/event.mjs +0 -28
- package/dist/store/idempotency.d.mts +0 -10
- package/dist/store/idempotency.mjs +0 -167
- package/dist/store/message-index.d.mts +0 -21
- package/dist/store/message-index.mjs +0 -122
- package/dist/store/revision.d.mts +0 -4
- package/dist/store/revision.mjs +0 -7
- package/dist/store/schema.d.mts +0 -14
- package/dist/store/schema.mjs +0 -17
- package/dist/types/common.d.mts +0 -20
- package/dist/types/common.mjs +0 -16
- package/dist/types/error-code.d.mts +0 -256
- package/dist/types/message-id.d.mts +0 -7
- package/dist/types/message-id.mjs +0 -5
- package/dist/types/run-id.d.mts +0 -7
- package/dist/types/run-id.mjs +0 -5
- package/dist/types/step-id.d.mts +0 -7
- package/dist/types/step-id.mjs +0 -5
- package/dist/types/stream-id.d.mts +0 -7
- package/dist/types/stream-id.mjs +0 -5
- package/dist/types/worker-id.d.mts +0 -7
- package/dist/types/worker-id.mjs +0 -5
- package/dist/utility.d.mts +0 -49
- package/dist/utility.mjs +0 -122
- package/dist/vite/ast.d.mts +0 -23
- package/dist/vite/generated-name.d.mts +0 -7
- package/dist/vite/generated-name.mjs +0 -9
- package/dist/vite/manifest.d.mts +0 -7
- package/dist/vite/plugin.d.mts +0 -7
- package/dist/vite/safety.d.mts +0 -12
- package/dist/vite/source.d.mts +0 -7
- package/dist/vite/transform.d.mts +0 -7
- package/dist/webhook.d.mts +0 -16
- package/dist/webhook.mjs +0 -17
- package/dist/worker.d.mts +0 -19
- /package/dist/{types/vite.mjs → engine/context.mjs} +0 -0
package/dist/collection.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isPlainObject } from "@temelj/value";
|
|
1
2
|
//#region src/collection.ts
|
|
2
3
|
/** Returns whether a value matches one expected value or any value in an expected list. */
|
|
3
4
|
function matchesOptionalValue(value, expected) {
|
|
@@ -13,21 +14,16 @@ function uniqueBy(items, key) {
|
|
|
13
14
|
return true;
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
|
-
/**
|
|
17
|
+
/** Copies the defined own enumerable fields of a plain record. */
|
|
17
18
|
function omitUndefined(value) {
|
|
18
|
-
|
|
19
|
+
if (!isPlainObject(value)) throw new TypeError("Expected a plain record");
|
|
20
|
+
const result = { ...value };
|
|
21
|
+
for (const key of Reflect.ownKeys(result)) if (Object.getOwnPropertyDescriptor(result, key)?.value === void 0) Reflect.deleteProperty(result, key);
|
|
22
|
+
return result;
|
|
19
23
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return
|
|
23
|
-
}
|
|
24
|
-
/** Returns sorted string values from a set. */
|
|
25
|
-
function sortedStringSet(values) {
|
|
26
|
-
return [...values].sort();
|
|
27
|
-
}
|
|
28
|
-
/** Returns an object containing a sorted string set only when the set is not empty. */
|
|
29
|
-
function optionalSortedStringSetProperty(key, values) {
|
|
30
|
-
return values.size === 0 ? {} : { [key]: sortedStringSet(values) };
|
|
24
|
+
function limitItems(items, limit) {
|
|
25
|
+
if (limit === void 0) return items;
|
|
26
|
+
return items.slice(0, limit);
|
|
31
27
|
}
|
|
32
28
|
//#endregion
|
|
33
|
-
export { matchesOptionalValue, omitUndefined,
|
|
29
|
+
export { limitItems, matchesOptionalValue, omitUndefined, uniqueBy };
|
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
import { RegistryLike, WorkflowImplementation } from "./types/definition.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { CompiledWorkflowFunction
|
|
2
|
+
import { StepApi, StepDefinition } from "./types/step.mjs";
|
|
3
|
+
import { CompiledWorkflowFunction } from "./types/client.mjs";
|
|
4
4
|
//#region src/compiled-function.d.ts
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
type
|
|
5
|
+
export declare const COMPILED_WORKFLOW: unique symbol;
|
|
6
|
+
export declare const COMPILED_STEP: unique symbol;
|
|
7
|
+
type AnyCompiledImplementation = WorkflowImplementation<readonly unknown[], unknown, readonly unknown[]>;
|
|
8
8
|
/** Attaches compiled workflow metadata to a directive-authored function. */
|
|
9
|
-
declare function attachWorkflowDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>, definition: WorkflowImplementation<TArgs
|
|
9
|
+
export declare function attachWorkflowDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>, definition: WorkflowImplementation<NoInfer<TArgs>, Awaited<NoInfer<TOutput>>, NoInfer<TArgs>>): CompiledWorkflowFunction<TArgs, TOutput>;
|
|
10
10
|
/** Attaches compiled step metadata to a directive-authored function. */
|
|
11
|
-
declare function attachWorkflowStepDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>, definition:
|
|
11
|
+
export declare function attachWorkflowStepDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>, definition: StepDefinition<NoInfer<TArgs>, Awaited<NoInfer<TOutput>>>): CompiledWorkflowFunction<TArgs, TOutput>;
|
|
12
12
|
/** Reads workflow metadata previously attached to a compiled workflow function. */
|
|
13
|
-
declare function getWorkflowFunctionDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>): WorkflowImplementation<TArgs, Awaited<TOutput>, TArgs> | undefined;
|
|
13
|
+
export declare function getWorkflowFunctionDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>): WorkflowImplementation<TArgs, Awaited<TOutput>, TArgs> | undefined;
|
|
14
14
|
/** Reads step metadata previously attached to a compiled step function. */
|
|
15
|
-
declare function getWorkflowStepFunctionDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>):
|
|
16
|
-
/** Reads
|
|
17
|
-
declare function
|
|
18
|
-
|
|
19
|
-
declare function getCompiledWorkflowStepDefinition(fn: AnyCompiledWorkflowFunction): AnyCompiledWorkflowStepDefinition | undefined;
|
|
20
|
-
/** Registers compiled workflow functions with a workflow registry. */
|
|
21
|
-
declare function registerWorkflowFunctions(registry: RegistryLike, workflows: readonly AnyCompiledWorkflowFunction[]): void;
|
|
22
|
-
/** Starts a compiled workflow function through a workflow client. */
|
|
23
|
-
declare function runWorkflowFunction<TArgs extends readonly unknown[], TOutput>(client: WorkflowClient, workflow: CompiledWorkflowFunction<TArgs, TOutput>, ...args: TArgs): Promise<WorkflowRunHandle<Awaited<TOutput>>>;
|
|
15
|
+
export declare function getWorkflowStepFunctionDefinition<TArgs extends readonly unknown[], TOutput>(fn: CompiledWorkflowFunction<TArgs, TOutput>): StepDefinition<TArgs, Awaited<TOutput>> | undefined;
|
|
16
|
+
/** Reads compiler-owned metadata for heterogeneous workflow registration. */
|
|
17
|
+
export declare function getCompiledDefinition(fn: Function): AnyCompiledImplementation | undefined;
|
|
18
|
+
export declare function registerWorkflowFunctions(registry: RegistryLike, workflows: readonly Function[]): void;
|
|
24
19
|
/** Calls a compiled step function through the durable step API when metadata is present. */
|
|
25
|
-
declare function callWorkflowStepFunction<TArgs extends readonly unknown[], TOutput>(step:
|
|
20
|
+
export declare function callWorkflowStepFunction<TArgs extends readonly unknown[], TOutput>(step: StepApi, fn: CompiledWorkflowFunction<TArgs, TOutput>, ...args: TArgs): Promise<Awaited<TOutput>>;
|
|
26
21
|
//#endregion
|
|
27
|
-
export {
|
|
22
|
+
export {};
|
|
@@ -1,54 +1,42 @@
|
|
|
1
1
|
import { WorkflowDefinitionError } from "./errors/definition.mjs";
|
|
2
2
|
import "./errors/mod.mjs";
|
|
3
3
|
//#region src/compiled-function.ts
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const COMPILED_WORKFLOW = Symbol("temelj.workflow.definition");
|
|
5
|
+
const COMPILED_STEP = Symbol("temelj.workflow.step");
|
|
6
6
|
/** Attaches compiled workflow metadata to a directive-authored function. */
|
|
7
7
|
function attachWorkflowDefinition(fn, definition) {
|
|
8
|
-
|
|
8
|
+
Object.defineProperty(fn, COMPILED_WORKFLOW, { value: definition });
|
|
9
9
|
return fn;
|
|
10
10
|
}
|
|
11
11
|
/** Attaches compiled step metadata to a directive-authored function. */
|
|
12
12
|
function attachWorkflowStepDefinition(fn, definition) {
|
|
13
|
-
|
|
13
|
+
Object.defineProperty(fn, COMPILED_STEP, { value: definition });
|
|
14
14
|
return fn;
|
|
15
15
|
}
|
|
16
16
|
/** Reads workflow metadata previously attached to a compiled workflow function. */
|
|
17
17
|
function getWorkflowFunctionDefinition(fn) {
|
|
18
|
-
return
|
|
18
|
+
return fn[COMPILED_WORKFLOW];
|
|
19
19
|
}
|
|
20
20
|
/** Reads step metadata previously attached to a compiled step function. */
|
|
21
21
|
function getWorkflowStepFunctionDefinition(fn) {
|
|
22
|
-
return
|
|
22
|
+
return fn[COMPILED_STEP];
|
|
23
23
|
}
|
|
24
|
-
/** Reads
|
|
25
|
-
function
|
|
26
|
-
return
|
|
24
|
+
/** Reads compiler-owned metadata for heterogeneous workflow registration. */
|
|
25
|
+
function getCompiledDefinition(fn) {
|
|
26
|
+
return Object.getOwnPropertyDescriptor(fn, COMPILED_WORKFLOW)?.value;
|
|
27
27
|
}
|
|
28
|
-
/** Reads erased step metadata from a function after runtime validation. */
|
|
29
|
-
function getCompiledWorkflowStepDefinition(fn) {
|
|
30
|
-
return stepDefinitions.get(fn);
|
|
31
|
-
}
|
|
32
|
-
/** Registers compiled workflow functions with a workflow registry. */
|
|
33
28
|
function registerWorkflowFunctions(registry, workflows) {
|
|
34
29
|
for (const workflow of workflows) {
|
|
35
|
-
const definition =
|
|
30
|
+
const definition = getCompiledDefinition(workflow);
|
|
36
31
|
if (definition === void 0) WorkflowDefinitionError.compiledMetadataMissing();
|
|
37
32
|
registry.register(definition);
|
|
38
33
|
}
|
|
39
34
|
}
|
|
40
|
-
/** Starts a compiled workflow function through a workflow client. */
|
|
41
|
-
async function runWorkflowFunction(client, workflow, ...args) {
|
|
42
|
-
const definition = getWorkflowFunctionDefinition(workflow);
|
|
43
|
-
if (definition === void 0) WorkflowDefinitionError.compiledMetadataMissing();
|
|
44
|
-
client.register(definition);
|
|
45
|
-
return await client.runs.start(definition.definition, args);
|
|
46
|
-
}
|
|
47
35
|
/** Calls a compiled step function through the durable step API when metadata is present. */
|
|
48
36
|
async function callWorkflowStepFunction(step, fn, ...args) {
|
|
49
37
|
const definition = getWorkflowStepFunctionDefinition(fn);
|
|
50
38
|
if (definition === void 0) return await fn(...args);
|
|
51
|
-
return await step.
|
|
39
|
+
return await step.call(definition, ...args);
|
|
52
40
|
}
|
|
53
41
|
//#endregion
|
|
54
|
-
export { attachWorkflowDefinition, attachWorkflowStepDefinition, callWorkflowStepFunction,
|
|
42
|
+
export { COMPILED_STEP, COMPILED_WORKFLOW, attachWorkflowDefinition, attachWorkflowStepDefinition, callWorkflowStepFunction, getCompiledDefinition, getWorkflowFunctionDefinition, getWorkflowStepFunctionDefinition, registerWorkflowFunctions };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { attachWorkflowDefinition, attachWorkflowStepDefinition, callWorkflowStepFunction } from "./compiled-function.mjs";
|
|
2
|
+
import { implementWorkflow } from "./definition.mjs";
|
|
3
|
+
import { defineWorkflowStep } from "./step-definition.mjs";
|
|
4
|
+
export { attachWorkflowDefinition, attachWorkflowStepDefinition, callWorkflowStepFunction, defineWorkflowStep, implementWorkflow };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { attachWorkflowDefinition, attachWorkflowStepDefinition, callWorkflowStepFunction } from "./compiled-function.mjs";
|
|
2
|
+
import { implementWorkflow } from "./definition.mjs";
|
|
3
|
+
import { defineWorkflowStep } from "./step-definition.mjs";
|
|
4
|
+
export { attachWorkflowDefinition, attachWorkflowStepDefinition, callWorkflowStepFunction, defineWorkflowStep, implementWorkflow };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BindingIdentifier, CallExpression, Node, Program } from "oxc-parser";
|
|
2
|
+
//#region src/compiler/ast.d.ts
|
|
3
|
+
type AstNode = Node | Program;
|
|
4
|
+
export interface SourceFile {
|
|
5
|
+
readonly fileName: string;
|
|
6
|
+
readonly text: string;
|
|
7
|
+
readonly program: Program;
|
|
8
|
+
}
|
|
9
|
+
interface WorkflowSpan {
|
|
10
|
+
readonly start: number;
|
|
11
|
+
readonly end: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function parseSource(fileName: string, text: string): SourceFile;
|
|
14
|
+
export declare function spanText(sourceFile: SourceFile, node: WorkflowSpan): string;
|
|
15
|
+
export declare function leadingTriviaStart(text: string, start: number): number;
|
|
16
|
+
interface SourcePosition {
|
|
17
|
+
readonly line: number;
|
|
18
|
+
readonly column: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function lineAndColumnOfPosition(text: string, position: number): SourcePosition;
|
|
21
|
+
export declare function visitNode(node: AstNode, visitor: (node: AstNode) => void): void;
|
|
22
|
+
export declare function workflowNodeChildren(node: AstNode): readonly AstNode[];
|
|
23
|
+
export declare function isIdentifier(node: Node): node is BindingIdentifier;
|
|
24
|
+
export declare function isCallExpression(node: Node): node is CallExpression;
|
|
25
|
+
//#endregion
|
|
26
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { workflowSourceKindForId } from "./source.mjs";
|
|
2
|
-
import { parseSync } from "oxc-parser";
|
|
3
|
-
//#region src/
|
|
2
|
+
import { parseSync, visitorKeys } from "oxc-parser";
|
|
3
|
+
//#region src/compiler/ast.ts
|
|
4
4
|
const PARSER_OPTIONS_BY_SOURCE_KIND = {
|
|
5
5
|
js: {
|
|
6
6
|
lang: "js",
|
|
@@ -19,7 +19,7 @@ const PARSER_OPTIONS_BY_SOURCE_KIND = {
|
|
|
19
19
|
astType: "ts"
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
function
|
|
22
|
+
function parseSource(fileName, text) {
|
|
23
23
|
const result = parseSync(fileName, text, {
|
|
24
24
|
...PARSER_OPTIONS_BY_SOURCE_KIND[workflowSourceKindForId(fileName)],
|
|
25
25
|
sourceType: "module"
|
|
@@ -46,28 +46,36 @@ function lineAndColumnOfPosition(text, position) {
|
|
|
46
46
|
column: lines.at(-1).length + 1
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
function visitNode(node, visitor) {
|
|
50
50
|
for (const child of workflowNodeChildren(node)) {
|
|
51
51
|
visitor(child);
|
|
52
|
-
|
|
52
|
+
visitNode(child, visitor);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
function workflowNodeChildren(node) {
|
|
56
56
|
const children = [];
|
|
57
|
+
const keys = visitorKeys[node.type] ?? [];
|
|
57
58
|
for (const [key, value] of Object.entries(node)) {
|
|
58
|
-
if (key
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
if (Array.isArray(value)) {
|
|
64
|
-
for (const item of value) if (isWorkflowAstNode(item)) children.push(item);
|
|
65
|
-
}
|
|
59
|
+
if (!keys.includes(key) || NON_RUNTIME_AST_KEYS.has(key)) continue;
|
|
60
|
+
const child = value;
|
|
61
|
+
if (Array.isArray(child)) {
|
|
62
|
+
for (const item of child) if (item !== null) children.push(item);
|
|
63
|
+
} else if (child !== null && child !== void 0) children.push(child);
|
|
66
64
|
}
|
|
67
65
|
return children;
|
|
68
66
|
}
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
const NON_RUNTIME_AST_KEYS = /* @__PURE__ */ new Set([
|
|
68
|
+
"decorators",
|
|
69
|
+
"typeAnnotation",
|
|
70
|
+
"typeArguments",
|
|
71
|
+
"typeParameters",
|
|
72
|
+
"returnType"
|
|
73
|
+
]);
|
|
74
|
+
function isIdentifier(node) {
|
|
75
|
+
return node.type === "Identifier";
|
|
76
|
+
}
|
|
77
|
+
function isCallExpression(node) {
|
|
78
|
+
return node.type === "CallExpression";
|
|
71
79
|
}
|
|
72
80
|
//#endregion
|
|
73
|
-
export { leadingTriviaStart, lineAndColumnOfPosition,
|
|
81
|
+
export { isCallExpression, isIdentifier, leadingTriviaStart, lineAndColumnOfPosition, parseSource, spanText, visitNode, workflowNodeChildren };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
//#region src/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
constructor(message: string, context?: Function);
|
|
1
|
+
//#region src/compiler/error.d.ts
|
|
2
|
+
export declare class WorkflowTransformError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
5
4
|
static directiveParametersMustBeIdentifiers(this: void): never;
|
|
6
5
|
static metadataMissing(this: void, name: string): never;
|
|
7
6
|
static directiveFunctionMustBeNamed(this: void): never;
|
|
@@ -15,5 +14,4 @@ declare class WorkflowTransformError extends Error {
|
|
|
15
14
|
static invalidSourceReadRange(this: void, start: number, end: number): never;
|
|
16
15
|
static overlappingSourceReplacementRanges(this: void, currentStart: number, currentEnd: number, previousStart: number, previousEnd: number): never;
|
|
17
16
|
}
|
|
18
|
-
//#endregion
|
|
19
|
-
export { WorkflowTransformError };
|
|
17
|
+
//#endregion
|
|
@@ -1,46 +1,44 @@
|
|
|
1
|
-
//#region src/
|
|
2
|
-
/** Error thrown for transform failures. */
|
|
1
|
+
//#region src/compiler/error.ts
|
|
3
2
|
var WorkflowTransformError = class WorkflowTransformError extends Error {
|
|
4
|
-
constructor(message
|
|
3
|
+
constructor(message) {
|
|
5
4
|
super(message);
|
|
6
5
|
this.name = "WorkflowTransformError";
|
|
7
|
-
if (Error.captureStackTrace !== void 0) Error.captureStackTrace(this, context ?? this.constructor);
|
|
8
6
|
}
|
|
9
7
|
static directiveParametersMustBeIdentifiers() {
|
|
10
|
-
throw new WorkflowTransformError("Workflow directive parameters must be identifiers"
|
|
8
|
+
throw new WorkflowTransformError("Workflow directive parameters must be identifiers");
|
|
11
9
|
}
|
|
12
10
|
static metadataMissing(name) {
|
|
13
|
-
throw new WorkflowTransformError(`Workflow metadata was not collected for ${name}
|
|
11
|
+
throw new WorkflowTransformError(`Workflow metadata was not collected for ${name}`);
|
|
14
12
|
}
|
|
15
13
|
static directiveFunctionMustBeNamed() {
|
|
16
|
-
throw new WorkflowTransformError("Directive function declarations must be named"
|
|
14
|
+
throw new WorkflowTransformError("Directive function declarations must be named");
|
|
17
15
|
}
|
|
18
16
|
static directiveFunctionCannotBeGenerator(directive, name) {
|
|
19
|
-
throw new WorkflowTransformError(`"${directive}" function ${name} cannot be a generator
|
|
17
|
+
throw new WorkflowTransformError(`"${directive}" function ${name} cannot be a generator`);
|
|
20
18
|
}
|
|
21
19
|
static workflowFunctionMustBeAsync(name) {
|
|
22
|
-
throw new WorkflowTransformError(`"use workflow" function ${name} must be async
|
|
20
|
+
throw new WorkflowTransformError(`"use workflow" function ${name} must be async`);
|
|
23
21
|
}
|
|
24
22
|
static directivesMustBeTopLevel() {
|
|
25
|
-
throw new WorkflowTransformError("Workflow directives are only supported on top-level functions"
|
|
23
|
+
throw new WorkflowTransformError("Workflow directives are only supported on top-level functions");
|
|
26
24
|
}
|
|
27
25
|
static directiveImportsMustBeNamed(specifier) {
|
|
28
|
-
throw new WorkflowTransformError(`Workflow directive imports from ${specifier} must use named imports
|
|
26
|
+
throw new WorkflowTransformError(`Workflow directive imports from ${specifier} must use named imports`);
|
|
29
27
|
}
|
|
30
28
|
static directiveReExportsMustBeNamed(specifier) {
|
|
31
|
-
throw new WorkflowTransformError(`Workflow directive re-exports from ${specifier} must use named exports
|
|
29
|
+
throw new WorkflowTransformError(`Workflow directive re-exports from ${specifier} must use named exports`);
|
|
32
30
|
}
|
|
33
31
|
static nondeterministicGlobal(workflowName, globalName, line, character) {
|
|
34
|
-
throw new WorkflowTransformError(`"use workflow" function ${workflowName} uses nondeterministic global ${globalName} at ${line}:${character}; use deterministic workflow helpers or durable steps
|
|
32
|
+
throw new WorkflowTransformError(`"use workflow" function ${workflowName} uses nondeterministic global ${globalName} at ${line}:${character}; use deterministic workflow helpers or durable steps`);
|
|
35
33
|
}
|
|
36
34
|
static invalidSourceReplacementRange(start, end) {
|
|
37
|
-
throw new WorkflowTransformError(`Invalid source replacement range: ${start}..${end}
|
|
35
|
+
throw new WorkflowTransformError(`Invalid source replacement range: ${start}..${end}`);
|
|
38
36
|
}
|
|
39
37
|
static invalidSourceReadRange(start, end) {
|
|
40
|
-
throw new WorkflowTransformError(`Invalid source read range: ${start}..${end}
|
|
38
|
+
throw new WorkflowTransformError(`Invalid source read range: ${start}..${end}`);
|
|
41
39
|
}
|
|
42
40
|
static overlappingSourceReplacementRanges(currentStart, currentEnd, previousStart, previousEnd) {
|
|
43
|
-
throw new WorkflowTransformError(`Overlapping source replacement ranges: ${currentStart}..${currentEnd} and ${previousStart}..${previousEnd}
|
|
41
|
+
throw new WorkflowTransformError(`Overlapping source replacement ranges: ${currentStart}..${currentEnd} and ${previousStart}..${previousEnd}`);
|
|
44
42
|
}
|
|
45
43
|
};
|
|
46
44
|
//#endregion
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TransformManifest, TransformManifestFunction, TransformManifestImportEdge } from "../types/compiler.mjs";
|
|
2
|
+
import { Program } from "oxc-parser";
|
|
3
|
+
//#region src/compiler/manifest.d.ts
|
|
4
|
+
export declare function collectImportedStepBindings(sourceFile: Program, file: string, manifests: readonly TransformManifest[]): ReadonlyMap<string, TransformManifestImportEdge>;
|
|
5
|
+
export declare function collectReExportedManifestFunctions(sourceFile: Program, file: string, manifests: readonly TransformManifest[]): readonly TransformManifestFunction[];
|
|
6
|
+
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { WorkflowTransformError } from "./error.mjs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/compiler/manifest.ts
|
|
4
4
|
const JS_TS_EXTENSION_PATTERN = /\.[cm]?[jt]sx?$/;
|
|
5
5
|
function collectImportedStepBindings(sourceFile, file, manifests) {
|
|
6
6
|
const manifestBySource = new Map(manifests.map((manifest) => [manifest.file, manifest]));
|
|
@@ -16,14 +16,15 @@ function collectImportedStepBindings(sourceFile, file, manifests) {
|
|
|
16
16
|
const importName = moduleExportNameText(element.imported);
|
|
17
17
|
const step = exportedSteps.get(importName);
|
|
18
18
|
if (step === void 0) continue;
|
|
19
|
-
|
|
19
|
+
const binding = {
|
|
20
20
|
source: resolved.source,
|
|
21
21
|
importName,
|
|
22
22
|
localName: element.local.name,
|
|
23
23
|
kind: "step",
|
|
24
24
|
workflowName: step.workflowName,
|
|
25
|
-
|
|
26
|
-
}
|
|
25
|
+
version: step.version
|
|
26
|
+
};
|
|
27
|
+
importedSteps.set(element.local.name, binding);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
return importedSteps;
|
|
@@ -46,14 +47,15 @@ function collectReExportedManifestFunctions(sourceFile, file, manifests) {
|
|
|
46
47
|
const importName = moduleExportNameText(element.local);
|
|
47
48
|
const entry = exported.get(importName);
|
|
48
49
|
if (entry === void 0) continue;
|
|
49
|
-
|
|
50
|
+
const reExport = {
|
|
50
51
|
kind: entry.kind,
|
|
51
52
|
exportName: moduleExportNameText(element.exported),
|
|
52
53
|
localName: entry.localName,
|
|
53
54
|
generatedName: entry.generatedName,
|
|
54
55
|
workflowName: entry.workflowName,
|
|
55
|
-
|
|
56
|
-
}
|
|
56
|
+
version: entry.version
|
|
57
|
+
};
|
|
58
|
+
functions.push(reExport);
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
return functions;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PluginOptions } from "../types/compiler.mjs";
|
|
2
|
+
//#region src/compiler/plugin.d.ts
|
|
3
|
+
export declare const workflowPlugin: import("unplugin").UnpluginInstance<PluginOptions | undefined, false>;
|
|
4
|
+
/** Creates the Vite plugin that compiles workflow and step directives. */
|
|
5
|
+
export declare const workflow: (options?: PluginOptions) => ReturnType<typeof workflowPlugin.vite>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export type { PluginOptions };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { stripQuery } from "./source.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { transformWorkflowSource } from "./transform.mjs";
|
|
2
|
+
import { parseSource } from "./ast.mjs";
|
|
3
|
+
import { hasDirectiveCandidate, transformWorkflowSource } from "./transform.mjs";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { createUnplugin } from "unplugin";
|
|
7
|
-
//#region src/
|
|
7
|
+
//#region src/compiler/plugin.ts
|
|
8
8
|
const workflowUnpluginFactory = (options = {}) => {
|
|
9
9
|
const include = options.include?.map((pattern) => new RegExp(pattern));
|
|
10
10
|
const exclude = options.exclude?.map((pattern) => new RegExp(pattern));
|
|
@@ -17,49 +17,54 @@ const workflowUnpluginFactory = (options = {}) => {
|
|
|
17
17
|
transformInclude(id) {
|
|
18
18
|
return matchesFilters(id, include, exclude);
|
|
19
19
|
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
context: this,
|
|
23
|
-
code,
|
|
24
|
-
id,
|
|
25
|
-
options,
|
|
26
|
-
include,
|
|
27
|
-
exclude,
|
|
28
|
-
manifests,
|
|
29
|
-
manifestFileById,
|
|
30
|
-
loadingManifests
|
|
31
|
-
});
|
|
32
|
-
const result = transformAndStoreWorkflowManifest(code, id, options, manifests, manifestFileById);
|
|
33
|
-
if (result === void 0) return null;
|
|
34
|
-
return {
|
|
35
|
-
code: result.code,
|
|
36
|
-
...result.map === void 0 ? {} : { map: toUnpluginSourceMap(result.map) }
|
|
37
|
-
};
|
|
20
|
+
transform(code, id) {
|
|
21
|
+
return transformWithImports(void 0, code, id);
|
|
38
22
|
},
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
23
|
+
rollup: { transform: transformWithNativeContext },
|
|
24
|
+
rolldown: { transform: transformWithNativeContext },
|
|
25
|
+
unloader: { transform: transformWithNativeContext },
|
|
26
|
+
vite: {
|
|
27
|
+
transform: transformWithNativeContext,
|
|
28
|
+
handleHotUpdate(context) {
|
|
29
|
+
if (!matchesFilters(context.file, include, exclude)) return;
|
|
30
|
+
const modules = context.modules.filter((module) => module.id !== null);
|
|
31
|
+
if (modules.length === 0) return;
|
|
32
|
+
return modules;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
45
35
|
};
|
|
36
|
+
async function transformWithImports(context, code, id) {
|
|
37
|
+
if (!matchesFilters(id, include, exclude)) return null;
|
|
38
|
+
await loadImportManifests({
|
|
39
|
+
context,
|
|
40
|
+
code,
|
|
41
|
+
id,
|
|
42
|
+
options,
|
|
43
|
+
include,
|
|
44
|
+
exclude,
|
|
45
|
+
manifests,
|
|
46
|
+
manifestFileById,
|
|
47
|
+
loadingManifests
|
|
48
|
+
});
|
|
49
|
+
return transformAndStoreManifest(code, id, options, manifests, manifestFileById) ?? null;
|
|
50
|
+
}
|
|
51
|
+
function transformWithNativeContext(code, id) {
|
|
52
|
+
return transformWithImports(this, code, id);
|
|
53
|
+
}
|
|
46
54
|
};
|
|
47
55
|
const JS_TS_EXTENSION_PATTERN = /\.[cm]?[jt]sx?$/;
|
|
48
|
-
function toUnpluginSourceMap(map) {
|
|
49
|
-
return map;
|
|
50
|
-
}
|
|
51
56
|
const workflowPlugin = createUnplugin(workflowUnpluginFactory);
|
|
52
57
|
/** Creates the Vite plugin that compiles workflow and step directives. */
|
|
53
58
|
const workflow = workflowPlugin.vite;
|
|
54
|
-
async function
|
|
55
|
-
if (!
|
|
59
|
+
async function loadImportManifests({ context, code, id, options, include, exclude, manifests, manifestFileById, loadingManifests }) {
|
|
60
|
+
if (!hasDirectiveCandidate(code) || loadingManifests.has(id)) return;
|
|
56
61
|
loadingManifests.add(id);
|
|
57
62
|
try {
|
|
58
|
-
for (const source of collectRelativeImportSources(code, id)) if (
|
|
63
|
+
for (const source of collectRelativeImportSources(code, id)) if (context !== void 0) {
|
|
59
64
|
const resolved = await context.resolve(source, id, { skipSelf: true });
|
|
60
65
|
if (resolved === null || !matchesFilters(resolved.id, include, exclude)) continue;
|
|
61
66
|
await context.load({ id: resolved.id });
|
|
62
|
-
await
|
|
67
|
+
await preloadImportFile({
|
|
63
68
|
context,
|
|
64
69
|
id: resolved.id,
|
|
65
70
|
options,
|
|
@@ -72,7 +77,7 @@ async function loadWorkflowImportManifests({ context, code, id, options, include
|
|
|
72
77
|
} else {
|
|
73
78
|
const resolved = await resolveRelativeImportFile(source, id);
|
|
74
79
|
if (resolved === void 0 || !matchesFilters(resolved, include, exclude)) continue;
|
|
75
|
-
await
|
|
80
|
+
await preloadImportFile({
|
|
76
81
|
context,
|
|
77
82
|
id: resolved,
|
|
78
83
|
options,
|
|
@@ -87,11 +92,11 @@ async function loadWorkflowImportManifests({ context, code, id, options, include
|
|
|
87
92
|
loadingManifests.delete(id);
|
|
88
93
|
}
|
|
89
94
|
}
|
|
90
|
-
async function
|
|
95
|
+
async function preloadImportFile({ context, id, options, include, exclude, manifests, manifestFileById, loadingManifests }) {
|
|
91
96
|
const cleanId = stripQuery(id);
|
|
92
97
|
const importedCode = await fs.readFile(cleanId, "utf8").catch(() => void 0);
|
|
93
98
|
if (importedCode === void 0) return;
|
|
94
|
-
await
|
|
99
|
+
await loadImportManifests({
|
|
95
100
|
context,
|
|
96
101
|
code: importedCode,
|
|
97
102
|
id: cleanId,
|
|
@@ -102,9 +107,9 @@ async function preloadWorkflowImportFile({ context, id, options, include, exclud
|
|
|
102
107
|
manifestFileById,
|
|
103
108
|
loadingManifests
|
|
104
109
|
});
|
|
105
|
-
|
|
110
|
+
transformAndStoreManifest(importedCode, cleanId, options, manifests, manifestFileById);
|
|
106
111
|
}
|
|
107
|
-
function
|
|
112
|
+
function transformAndStoreManifest(code, id, options, manifests, manifestFileById) {
|
|
108
113
|
const result = transformWorkflowSource(code, id, {
|
|
109
114
|
...options,
|
|
110
115
|
manifests: [...options.manifests ?? [], ...manifests.values()]
|
|
@@ -123,15 +128,9 @@ function transformAndStoreWorkflowManifest(code, id, options, manifests, manifes
|
|
|
123
128
|
manifestFileById.set(id, result.manifest.file);
|
|
124
129
|
return result;
|
|
125
130
|
}
|
|
126
|
-
function canLoadWorkflowImportManifests(context) {
|
|
127
|
-
return typeof context.resolve === "function" && typeof context.load === "function";
|
|
128
|
-
}
|
|
129
|
-
function hasWorkflowManifestCandidate(code) {
|
|
130
|
-
return code.includes("\"use workflow\"") || code.includes("'use workflow'") || code.includes("\"use step\"") || code.includes("'use step'") || code.includes(" from ");
|
|
131
|
-
}
|
|
132
131
|
function collectRelativeImportSources(code, id) {
|
|
133
132
|
if (!JS_TS_EXTENSION_PATTERN.test(stripQuery(id))) return [];
|
|
134
|
-
const sourceFile =
|
|
133
|
+
const sourceFile = parseSource(id, code);
|
|
135
134
|
const sources = /* @__PURE__ */ new Set();
|
|
136
135
|
for (const statement of sourceFile.program.body) if ((statement.type === "ImportDeclaration" || statement.type === "ExportNamedDeclaration" || statement.type === "ExportAllDeclaration") && statement.source !== null && isRelativeImportSource(statement.source.value)) sources.add(statement.source.value);
|
|
137
136
|
return [...sources];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FunctionBody, Program } from "oxc-parser";
|
|
2
|
+
//#region src/compiler/safety.d.ts
|
|
3
|
+
interface SafetyTarget {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly body: FunctionBody;
|
|
6
|
+
}
|
|
7
|
+
export declare function rejectObviousNondeterministicGlobals(entry: SafetyTarget, sourceFile: {
|
|
8
|
+
readonly text: string;
|
|
9
|
+
readonly program: Program;
|
|
10
|
+
}): void;
|
|
11
|
+
//#endregion
|
|
12
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { lineAndColumnOfPosition,
|
|
1
|
+
import { isCallExpression, isIdentifier, lineAndColumnOfPosition, visitNode } from "./ast.mjs";
|
|
2
2
|
import { WorkflowTransformError } from "./error.mjs";
|
|
3
3
|
import { builtinModules } from "node:module";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/compiler/safety.ts
|
|
5
5
|
const unsafeGlobalCallNames = /* @__PURE__ */ new Set([
|
|
6
6
|
"Date",
|
|
7
7
|
"fetch",
|
|
@@ -11,8 +11,8 @@ const unsafeGlobalCallNames = /* @__PURE__ */ new Set([
|
|
|
11
11
|
"queueMicrotask"
|
|
12
12
|
]);
|
|
13
13
|
function rejectObviousNondeterministicGlobals(entry, sourceFile) {
|
|
14
|
-
const unsafeImports =
|
|
15
|
-
|
|
14
|
+
const unsafeImports = collectUnsafeImportBindings(sourceFile.program);
|
|
15
|
+
visitNode(entry.body, (node) => {
|
|
16
16
|
if (isIdentifier(node) && unsafeImports.has(node.name)) throwNondeterministicGlobalError(entry.name, unsafeImports.get(node.name), node, sourceFile);
|
|
17
17
|
if (isNewExpression(node) && isIdentifier(node.callee) && node.callee.name === "Date") throwNondeterministicGlobalError(entry.name, "Date", node, sourceFile);
|
|
18
18
|
if (isCallExpression(node) && isIdentifier(node.callee) && unsafeGlobalCallNames.has(node.callee.name)) throwNondeterministicGlobalError(entry.name, node.callee.name, node, sourceFile);
|
|
@@ -22,7 +22,7 @@ function rejectObviousNondeterministicGlobals(entry, sourceFile) {
|
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function collectUnsafeImportBindings(sourceFile) {
|
|
26
26
|
const bindings = /* @__PURE__ */ new Map();
|
|
27
27
|
for (const statement of sourceFile.body) {
|
|
28
28
|
if (statement.type !== "ImportDeclaration") continue;
|
|
@@ -77,12 +77,6 @@ function stripGlobalQualifier(path) {
|
|
|
77
77
|
if (path.startsWith("window.")) return path.slice(7);
|
|
78
78
|
return path;
|
|
79
79
|
}
|
|
80
|
-
function isIdentifier(node) {
|
|
81
|
-
return node.type === "Identifier";
|
|
82
|
-
}
|
|
83
|
-
function isCallExpression(node) {
|
|
84
|
-
return node.type === "CallExpression";
|
|
85
|
-
}
|
|
86
80
|
function isNewExpression(node) {
|
|
87
81
|
return node.type === "NewExpression";
|
|
88
82
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
//#region src/
|
|
1
|
+
//#region src/compiler/source-edit.d.ts
|
|
2
2
|
/** Small source rewriting helper for AST-position based transforms. */
|
|
3
|
-
declare class SourceEditor {
|
|
3
|
+
export declare class SourceEditor {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(source: string);
|
|
6
6
|
remove(start: number, end: number): void;
|
|
@@ -8,5 +8,4 @@ declare class SourceEditor {
|
|
|
8
8
|
read(start: number, end: number): string;
|
|
9
9
|
toString(): string;
|
|
10
10
|
}
|
|
11
|
-
//#endregion
|
|
12
|
-
export { SourceEditor };
|
|
11
|
+
//#endregion
|