osascript-tag
Version:
A JavaScript template literal tag that executes OSA scripts (AppleScript, JavaScript, etc.)
122 lines (121 loc) • 4.27 kB
JavaScript
;
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;