canonical_id: "switch" 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 required: [value, cases] properties: value: type: string description: 要比對的值 cases: type: array items: type: object properties: match: type: string branch: type: string default_branch: type: string description: 無匹配時的預設分支 output_schema: type: object properties: success: type: boolean data: type: object properties: branch: type: string gherkin_tests: - scenario: "匹配到 case" given: '{"value":"a","cases":[{"match":"a","branch":"branch_a"}],"default_branch":"default"}' then_contains: '"branch":"branch_a"' - scenario: "走 default 分支" given: '{"value":"z","cases":[{"match":"a","branch":"branch_a"}],"default_branch":"fallback"}' then_contains: '"branch":"fallback"' - scenario: "無效 JSON" given: 'not-json' then_contains: '{"success":false' tags: [builtin, switch, branch, route, condition] description: "依值路由到對應分支,支援多個 case 和 default 分支。" config_example: | my_switch: # 節點名稱(可自訂) value: "{{upstream.status}}" # 要比對的值(必填) cases: # case 清單(必填) - match: active # 比對值 branch: branch_active # 對應分支名稱 - match: inactive branch: branch_inactive default_branch: branch_default # 無匹配時的預設分支(選填)