UNPKG

osascript-tag

Version:

A JavaScript template literal tag that executes OSA scripts (AppleScript, JavaScript, etc.)

122 lines (121 loc) 4.27 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var ChildProcess = __importStar(require("child_process")); function isTemplateString(value) { return Array.isArray(value) && Object.prototype.hasOwnProperty.call(value, 'raw'); } function buildString(strings, replacements) { var result = ''; var totalStrings = strings.length; for (var i = 0; i < totalStrings; i++) { var value = i < totalStrings - 1 ? replacements[i] : ''; result += strings[i] + value; } return result.trim(); } function runScript(strings, replacements, options) { if (options === void 0) { options = {}; } if (process.platform !== 'darwin') { return Promise.reject(new Error('osascript-tag requires macOS')); } return new Promise(function (resolve, reject) { var argv = options.argv || []; var flags = []; var script = buildString(strings, replacements); var language = 'AppleScript'; if (options.language === 'JavaScript') { language = options.language; script = "(function(...argv){" + script + "})(" + argv.map(function (value) { return JSON.stringify(value); }) + ")"; } if (options.parse) { flags = ['-s', 's']; } if (typeof options.flags === 'string') { flags = ['-s', options.flags]; } var child = ChildProcess.spawn('osascript', ['-l', language].concat(flags, ['-e', script])); var errorString = ''; child.stderr.on('data', function (error) { errorString += error.toString(); }); var dataString = ''; child.stdout.on('data', function (data) { dataString += data.toString(); }); child.on('close', function () { if (errorString) { reject(errorString); } else { var result = dataString; if (options.parse) { try { result = JSON.parse(dataString); } catch (error) { reject(error); } } resolve(result); } }); child.on('error', function (error) { reject(error); }); }); } function osascript(scriptOrOptions) { var replacementsArray = []; for (var _i = 1; _i < arguments.length; _i++) { replacementsArray[_i - 1] = arguments[_i]; } if (isTemplateString(scriptOrOptions)) { return runScript(scriptOrOptions, replacementsArray, {}); } return function (script) { var replacements = []; for (var _i = 1; _i < arguments.length; _i++) { replacements[_i - 1] = arguments[_i]; } return runScript(script, replacements, scriptOrOptions); }; } function execJXA(scriptOrOptions) { var replacementsArray = []; for (var _i = 1; _i < arguments.length; _i++) { replacementsArray[_i - 1] = arguments[_i]; } if (isTemplateString(scriptOrOptions)) { return runScript(scriptOrOptions, replacementsArray, { language: 'JavaScript', }); } return function (strings) { var replacements = []; for (var _i = 1; _i < arguments.length; _i++) { replacements[_i - 1] = arguments[_i]; } return runScript(strings, replacements, __assign({ language: 'JavaScript' }, scriptOrOptions)); }; } osascript.jxa = execJXA; exports.jxa = execJXA; exports.default = osascript;