You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "guan404ming (via GitHub)" <gi...@apache.org> on 2026/08/03 02:24:59 UTC

Re: [I] TypeScript SDK: native TypeScript Dag declaration [airflow]

guan404ming commented on issue #69288:
URL: https://github.com/apache/airflow/issues/69288#issuecomment-5161675825

   ▎ How should the coordinator know that this TypeScript object is only registering handlers and should not be serialized?
   
   I'd prefer to avoid a mode string on Dag and make the distinction type-level instead:
   
   ```ts
   // native: TS owns schedule + dependencies, gets serialized
   const pipeline = new Dag({ dagId: "sales_pipeline", schedule: "@daily" });
   pipeline.task("extract", { run: extractFn, spec: { retries: 3 } });
   
   // handler-only: a reference to a Python-owned Dag, never serialized
   const external = Dag.external("sales_pipeline");
   external.task("transform", { run: transformFn });
   ```
   
   - The type returned by `Dag.external()` simply doesn't have schedule/spec/dependency fields, so "TypeScript does not own this Dag" is enforced at compile time rather than ignored at runtime.
   - The coordinator needs no flag check: Dag instances serialize; external refs only register (dagId, taskId) → handler.
   - This keeps the single authoring interface — new Dag() remains the only way to author a Dag, and .task() feels identical on both. Handler-only is binding, not authoring.
   - Compared to a registerHandlers("id", { extract: fn }) map, the .task() form still has room for a per-task args schema to validate the resolved input object.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org