{
  "version": 1,
  "workflows": [
    {
      "id": "7252AB4B-982F-4217-91FA-552251E4C40E",
      "defaultIntroducedVersion": 5,
      "name": "URL Encode / Decode",
      "nameLocalizationKey": "url_encode_decode",
      "summary": "Encode or decode a URL",
      "symbolName": "link",
      "isEnabled": true,
      "requiresTrustConfirmation": false,
      "sortOrder": 4,
      "mode": "scriptFilter",
      "supportedTypes": [
        "url"
      ],
      "script": {
        "source": "inline",
        "code": "ObjC.import(\"Foundation\");\n\nfunction readJSON() {\n    var data = $.NSFileHandle.fileHandleWithStandardInput.readDataToEndOfFile;\n    var text = $.NSString.alloc.initWithDataEncoding(data, $.NSUTF8StringEncoding).js;\n    return JSON.parse(text);\n}\n\nfunction writeJSON(value) {\n    var text = JSON.stringify(value);\n    var data = $(text).dataUsingEncoding($.NSUTF8StringEncoding);\n    $.NSFileHandle.fileHandleWithStandardOutput.writeData(data);\n}\n\nfunction encodeURL(value) {\n    var encoded = $(value).stringByAddingPercentEncodingWithAllowedCharacters(\n        $.NSCharacterSet.URLQueryAllowedCharacterSet\n    );\n    return encoded ? encoded.js : value;\n}\n\nfunction decodeURL(value) {\n    var decoded = $(value).stringByRemovingPercentEncoding;\n    return decoded ? decoded.js : value;\n}\n\nfunction main() {\n    var payload = readJSON();\n    var value = (payload.paste && payload.paste.text) || \"\";\n    if (value.length === 0) {\n        throw new Error(\"URL is empty\");\n    }\n\n    if (payload.phase === \"filter\") {\n        writeJSON({\n            version: 1,\n            actions: [\n                {\n                    id: \"encode\",\n                    title: \"Encode URL\",\n                    subtitle: encodeURL(value),\n                    icon: \"e.square.fill\",\n                    argument: null\n                },\n                {\n                    id: \"decode\",\n                    title: \"Decode URL\",\n                    subtitle: decodeURL(value),\n                    icon: \"d.square.fill\",\n                    argument: null\n                }\n            ]\n        });\n        return;\n    }\n\n    if (payload.phase !== \"execute\") {\n        throw new Error(\"Unsupported phase\");\n    }\n\n    var result;\n    if (payload.actionID === \"encode\") {\n        result = encodeURL(value);\n    } else if (payload.actionID === \"decode\") {\n        result = decodeURL(value);\n    } else {\n        throw new Error(\"Unknown URL action\");\n    }\n\n    writeJSON({\n        version: 1,\n        result: {\n            type: \"text\",\n            value: result\n        }\n    });\n}\n\nmain();\n",
        "scriptPath": "",
        "interpreterPath": "/usr/bin/osascript",
        "arguments": [
          "-l",
          "JavaScript"
        ],
        "workingDirectory": "",
        "filterTimeout": 5,
        "executeTimeout": 5
      },
      "workflowVersion": 1
    }
  ]
}
