{
  "version": 1,
  "workflows": [
    {
      "id": "8BB4AE4E-D42D-470F-8A9B-8490BD168423",
      "defaultIntroducedVersion": 10,
      "name": "Convert Time",
      "nameLocalizationKey": "convert_time",
      "summary": "Seconds · Milliseconds · Date",
      "symbolName": "clock.arrow.trianglehead.2.counterclockwise.rotate.90",
      "isEnabled": true,
      "requiresTrustConfirmation": false,
      "sortOrder": 10,
      "mode": "scriptFilter",
      "supportedTypes": [
        "date",
        "timestamp"
      ],
      "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 parseDate(value) {\n    var formats = [\n        \"yyyy-MM-dd'T'HH:mm:ssZ\",\n        \"yyyy-MM-dd'T'HH:mm:ss.SSSZ\",\n        \"yyyy-MM-dd HH:mm:ss\",\n        \"yyyy-MM-dd\",\n        \"MM/dd/yyyy\",\n        \"dd/MM/yyyy\",\n        \"MMM dd, yyyy\",\n        \"yyyy/MM/dd HH:mm\",\n        \"HH:mm:ss\",\n        \"HH:mm\"\n    ];\n    var formatter = $.NSDateFormatter.alloc.init;\n    formatter.locale = $.NSLocale.alloc.initWithLocaleIdentifier(\"en_US_POSIX\");\n\n    for (var index = 0; index < formats.length; index++) {\n        formatter.dateFormat = formats[index];\n        var date = formatter.dateFromString(value);\n        if (!date.isNil()) {\n            return date;\n        }\n    }\n    return null;\n}\n\nfunction dateFromTimestamp(value) {\n    if (!/^\\d+$/.test(value) || (value.length !== 10 && value.length !== 13)) {\n        return null;\n    }\n    var timestamp = Number(value);\n    var seconds = value.length === 13 ? timestamp / 1000 : timestamp;\n    return $.NSDate.dateWithTimeIntervalSince1970(seconds);\n}\n\nfunction formatDate(date) {\n    var formatter = $.NSDateFormatter.alloc.init;\n    formatter.locale = $.NSLocale.alloc.initWithLocaleIdentifier(\"en_US_POSIX\");\n    formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\";\n    return formatter.stringFromDate(date).js;\n}\n\nfunction availableActions(type, value) {\n    var actions = [];\n\n    if (type === \"timestamp\") {\n        var date = dateFromTimestamp(value);\n        if (!date) {\n            return [];\n        }\n        var timestamp = Number(value);\n        if (value.length === 13) {\n            actions.push({\n                id: \"seconds\",\n                title: \"To Seconds\",\n                subtitle: String(Math.trunc(timestamp / 1000)),\n                icon: \"s.square.fill\"\n            });\n        } else {\n            actions.push({\n                id: \"milliseconds\",\n                title: \"To Milliseconds\",\n                subtitle: String(Math.trunc(timestamp * 1000)),\n                icon: \"m.square.fill\"\n            });\n        }\n        actions.push({\n            id: \"date\",\n            title: \"To Date\",\n            subtitle: formatDate(date),\n            icon: \"calendar\"\n        });\n        return actions;\n    }\n\n    if (type === \"date\") {\n        var parsedDate = parseDate(value);\n        if (!parsedDate) {\n            return [];\n        }\n        var seconds = Math.trunc(Number(parsedDate.timeIntervalSince1970));\n        actions.push({\n            id: \"seconds\",\n            title: \"To Seconds\",\n            subtitle: String(seconds),\n            icon: \"s.square.fill\"\n        });\n        actions.push({\n            id: \"milliseconds\",\n            title: \"To Milliseconds\",\n            subtitle: String(seconds * 1000),\n            icon: \"m.square.fill\"\n        });\n    }\n\n    return actions;\n}\n\nfunction main() {\n    var payload = readJSON();\n    var type = payload.paste ? payload.paste.type : \"\";\n    var value = ((payload.paste && payload.paste.text) || \"\").trim();\n    var actions = availableActions(type, value);\n\n    if (payload.phase === \"filter\") {\n        writeJSON({\n            version: 1,\n            actions: actions.map(function (action) {\n                return {\n                    id: action.id,\n                    title: action.title,\n                    subtitle: action.subtitle,\n                    icon: action.icon,\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 selected = actions.find(function (action) {\n        return action.id === payload.actionID;\n    });\n    if (!selected) {\n        throw new Error(\"Unknown time action\");\n    }\n\n    writeJSON({\n        version: 1,\n        result: {\n            type: \"text\",\n            value: selected.subtitle\n        }\n    });\n}\n\nmain();\n",
        "scriptPath": "",
        "interpreterPath": "/usr/bin/osascript",
        "arguments": [
          "-l",
          "JavaScript"
        ],
        "workingDirectory": "",
        "filterTimeout": 5,
        "executeTimeout": 5
      },
      "workflowVersion": 1
    }
  ]
}
