--- name: wails_stream_data kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "WailsStreamData[T any](ctx context.Context, cfg WailsStreamConfig, data []T) error" description: "Envía datos como stream Go→TS con protocolo {name}/{name}:complete/{name}:error. Incluye WailsStreamFunc para generadores." tags: [wails, stream, ipc, realtime, chunks, infra] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [context, fmt, time, github.com/wailsapp/wails/v2/pkg/runtime] params: - name: ctx desc: "context de Wails" - name: cfg desc: "estructura WailsStreamConfig con StreamName y ChunkDelay" - name: data desc: "slice de datos genericos a enviar en chunks" output: "nil si el stream se completo exitosamente, error en caso contrario" tested: false tests: [] test_file_path: "" file_path: "functions/infra/wails_stream_data.go" --- ## Ejemplo ```go // Stream de slice WailsStreamData(ctx, WailsStreamConfig{ StreamName: "logs", ChunkDelay: 10 * time.Millisecond, }, logLines) // Stream con generador WailsStreamFunc(ctx, "metrics", func(ctx context.Context, ch chan<- Metric) error { for { select { case <-ctx.Done(): return nil case <-time.After(time.Second): ch <- collectMetric() } } }) // Frontend lo recibe con useWailsStream: // useWailsStream({ streamName: 'metrics', autoStart: true }) ``` ## Notas Protocolo: chunks en `{streamName}`, fin en `{streamName}:complete`, error en `{streamName}:error`. Compatible con `use_wails_stream` del lado TS. WailsStreamFunc usa goroutine + canal para datos asíncronos. Requiere Go 1.18+ (generics) y la dependencia `github.com/wailsapp/wails/v2` en el proyecto destino.