mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-10-14 08:02:58 +00:00
* feat: WAC workflow diagram visualization in script editor Add WASM-powered workflow diagram for WAC scripts in the script editor, inspired by Cloudflare's workflow diagrams approach. Parses WAC code client-side via WASM and renders an interactive DAG using @xyflow/svelte. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: show WAC diagram on script detail page Show the workflow diagram below the run form on the script detail page for WAC scripts, matching how flows display their graph. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: handle try/catch and while loops in WAC diagram Instead of rejecting these patterns with validation errors, render them as graph nodes: - try/catch → Branch node with "try"/"catch" edge labels - while loops → LoopStart/LoopEnd with condition as iter_source Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: remove dead code from WAC parser and add pkg-wac to publish script Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: use published windmill-parser-wasm-wac@1.668.5 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: handle undefined language prop in WacDiagram usage Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: resolve windmill-parser-wasm-wac from npm registry in lockfile Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: create actual merge nodes for branch/try-catch convergence points Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
39 lines
1.1 KiB
Rust
39 lines
1.1 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Debug, Serialize, Deserialize, Clone)]
|
|
pub struct CompileError {
|
|
pub message: String,
|
|
pub line: usize,
|
|
}
|
|
|
|
impl std::fmt::Display for CompileError {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
write!(f, "line {}: {}", self.line, self.message)
|
|
}
|
|
}
|
|
|
|
pub fn error_step_in_nested_function(line: usize) -> CompileError {
|
|
CompileError {
|
|
message: "Task calls inside nested functions, closures, or lambdas are not allowed."
|
|
.to_string(),
|
|
line,
|
|
}
|
|
}
|
|
|
|
pub fn error_step_in_comprehension(line: usize) -> CompileError {
|
|
CompileError { message: "Task calls inside comprehensions are not allowed.".to_string(), line }
|
|
}
|
|
|
|
pub fn error_not_async(line: usize) -> CompileError {
|
|
CompileError { message: "Workflow function must be async.".to_string(), line }
|
|
}
|
|
|
|
pub fn error_missing_await(line: usize) -> CompileError {
|
|
CompileError {
|
|
message:
|
|
"Task calls must be awaited directly or used inside asyncio.gather()/Promise.all()."
|
|
.to_string(),
|
|
line,
|
|
}
|
|
}
|