canonical_id: "try_catch"
display_name: "錯誤處理"
category: "logic"
version: "v1"
wasi_target: "preview1"
stability: "floating"
runtime_compat:
  - "cf-workers"
  - "workerd"
  - "wazero"
constraints:
  max_size_kb: 2048
  max_cold_start_ms: 50
  no_network_syscall: true
  no_filesystem_syscall: true
  io_model: "stdin_stdout_json"
input_schema:
  type: object
  properties:
    result: {}
    error:
      type: string
      description: 上游錯誤訊息，非空則走 catch 分支
output_schema:
  type: object
  properties:
    success:
      type: boolean
    data:
      type: object
      properties:
        branch:
          type: string
          enum: [try, catch]
        result: {}
        error:
          type: string
gherkin_tests:
  - scenario: "無錯誤走 try"
    given: '{"result":{"value":42},"error":""}'
    then_contains: '"branch":"try"'
  - scenario: "有錯誤走 catch"
    given: '{"result":null,"error":"something went wrong"}'
    then_contains: '"branch":"catch"'
  - scenario: "無效 JSON"
    given: 'not-json'
    then_contains: '{"success":false'
tags: [builtin, control, try, catch, error, handling]
description: "判斷上游結果是否有 error，決定走 try 或 catch 分支。"
config_example: |
  my_try_catch:                       # 節點名稱（可自訂）
    result: "{{upstream.data}}"       # 上游回傳的結果，任意型別（選填）
    error: "{{upstream.error}}"       # 上游錯誤訊息，非空則走 catch 分支（選填）
