canonical_id: "string_ops"
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: [operation, input]
  properties:
    operation:
      type: string
      enum: [upper, lower, trim, capitalize, replace, split, join, includes, starts_with, ends_with, length, substring]
    input:
      type: string
    args:
      type: object
      description: 操作參數（依 operation 而定）
output_schema:
  type: object
  properties:
    success:
      type: boolean
    data:
      type: object
      properties:
        result: {}
        operation:
          type: string
gherkin_tests:
  - scenario: "upper 操作"
    given: '{"operation":"upper","input":"hello"}'
    then_contains: '"result":"HELLO"'
  - scenario: "replace 操作"
    given: '{"operation":"replace","input":"hello world","args":{"from":"world","to":"u6u"}}'
    then_contains: '"result":"hello u6u"'
  - scenario: "不支援的 operation"
    given: '{"operation":"unknown","input":"test"}'
    then_contains: '{"success":false'
tags: [builtin, data, string, transform, text]
description: "字串操作：upper/lower/trim/capitalize/replace/split/join/includes/starts_with/ends_with/length/substring。"
config_example: |
  my_string_op:                           # 節點名稱（可自訂）
    operation: "replace"                  # 運算類型（必填），可選值：upper/lower/trim/capitalize/replace/split/join/includes/starts_with/ends_with/length/substring
    input: "hello world"                  # 輸入字串（必填）
    args:                                 # 操作參數，依 operation 而定（選填）
      from: "world"                       # replace 用：要被取代的子字串
      to: "arcrun"                        # replace 用：取代後的字串
