canonical_id: "validate_json"
display_name: "JSON 格式驗證器"
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:
    - json_string
  properties:
    json_string:
      type: string
      description: "待驗證的 JSON 字串"

output_schema:
  type: object
  required:
    - valid
  properties:
    valid:
      type: boolean
      description: "是否為合法 JSON"
    error:
      type: string
      description: "驗證失敗時的錯誤訊息（valid=false 時存在）"

gherkin_tests:
  - scenario: "合法 JSON 物件通過驗證"
    given: '{"json_string":"{\"key\":\"value\"}"}'
    then_contains: '{"valid":true}'

  - scenario: "合法 JSON 陣列通過驗證"
    given: '{"json_string":"[1,2,3]"}'
    then_contains: '{"valid":true}'

  - scenario: "非法 JSON 字串回傳錯誤"
    given: '{"json_string":"not-json"}'
    then_contains: '{"valid":false,"error":'

  - scenario: "空字串回傳錯誤"
    given: '{"json_string":""}'
    then_contains: '{"valid":false,"error":"json_string is required"}'

  - scenario: "缺少 json_string 欄位回傳錯誤"
    given: '{}'
    then_contains: '{"valid":false,"error":"json_string is required"}'

tags:
  - "validation"
  - "json"
  - "utility"
  - "logic"

description: "驗證輸入字串是否為合法 JSON 格式。輸入 json_string 欄位，回傳 valid（布林值）與 error（失敗時的錯誤訊息）。"
config_example: |
  my_validate_json:                       # 節點名稱（可自訂）
    json_string: '{"key":"value"}'        # 待驗證的 JSON 字串（必填）
