UNPKG

osascript-tag

Version:

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

217 lines (155 loc) 6.82 kB
<h1 align="center"> <img src="https://user-images.githubusercontent.com/2100222/57056048-ddcdd500-6c6d-11e9-8f69-e4c1d3eb4f24.png" width="76" alt="osascript-tag logo" /> <br /> osascript-tag </h1> <p align="center"> <a href="https://www.npmjs.com/package/osascript-tag"> <img src="https://img.shields.io/npm/v/osascript-tag.svg" alt="Current Release" /> </a> <a href="https://travis-ci.org/wsmd/osascript-tag"> <img src="https://travis-ci.org/wsmd/osascript-tag.svg?branch=master" alt="CI Build"> </a> <a href="https://coveralls.io/github/wsmd/osascript-tag?branch=master"> <img src="https://coveralls.io/repos/github/wsmd/osascript-tag/badge.svg?branch=master" alt="Coverage Status"> </a> <a href="https://github.com/wsmd/osascript-tag/blob/master/LICENSE"> <img src="https://img.shields.io/github/license/wsmd/osascript-tag.svg" alt="Licence"> </a> </p> A JavaScript template literal tag that executes AppleScript and other OSA (Open Scripting Architecture) scripts. Compatible with JXA (JavaScript for Automation). ## Why? > Every time I get a script it's a matter of trying to know what I could do with it. I see colors, imagery. It has to have a smell. It's like falling in love. You can't give a reason why. > > — Paul Newman ## Installation To get started, add `osascript-tag` to your project: ``` npm i --save osascript-tag ``` ## Usage ### Running AppleScript It can be used as template literal tag to asynchronously run an AppleScript within your code. It returns a promise that resolves with the output of the script, and rejects with an error if running the script was not successful. ```js const osascript = require('osascript-tag'); async function main() { const result = await osascript` tell application "iTunes" get { artist, name } of current track end tell `; console.log(result); // "King Gizzard & The Lizard Wizard, This Thing" } ``` ### Running JXA (JavaScript for Automation) To run a JXA (JavaScript for Automation) script, use the `osascript.jxa` template tag (also available as the named export: `jxa`) . Please note that `osascript.jxa` requires macOS 10.10 or greater. ```js const osascript = require('osascript-tag'); async function main() { await osascript.jxa` const app = Application.currentApplication(); app.includeStandardAdditions = true; app.displayNotification("All graphics have been converted.", { withTitle: "My Graphic Processing Script", subtitle: "Processing is complete.", soundName: "Glass", }); `; } ``` ### Parsing Values Returned from JXA Scripts By default all calls to `osascript.jxa` will resolve with the stdout result as a string. If your script, however, is expected to return parsable values, you can pass a `parse` option to `osascript.jxa` to return parsed values ready for consumption in your JavaScript code. ```js const osascript = require('osascript-tag'); async function main() { const { artist, title } = await osascript.jxa({ parse: true })` const iTunes = Application('iTunes'); return { artist: iTunes.currentTrack.artist(), title: iTunes.currentTrack.name(), } `; console.log(artist); // "King Gizzard & The Lizard Wizard" console.log(title); // "This Thing" } ``` ## API The `osascript-tag` can be used in one of the following ways: - [`osascript`](#osascript) - [`osascript(options: Options)`](#osascriptoptions-options) - [`osascript.jxa`](#osascriptjxa) - [`osascript.jxa(options: JXAOptions)`](#osascriptjxaoptions-jxaoptions) ### `osascript` Executes the given OSA script. ##### Example ```js const result = await osascript` tell application "Finder" name of every file of the desktop end tell `; ``` ##### Arguments 1. `script: string` - A string repressing the AppleScript code to execute 2. `...replacements: any[]` - The replacements values ##### Returns A `Promise` that resolves with the script's standard output, or rejects with an error if the scripts was not successful. ### `osascript(options: Options)` Executes the given OSA script with custom options. ##### Example ```js const result = await osascript({ flags: 'so' })` tell application "Finder" name of every file of the desktop end tell `; ``` ##### Arguments 1. `options: Options` - An object with the following keys: - `flags?: string` - The flags used to modify the output of the script. It is a string consisting of any of the of the modifier characters `e`, `h`, `o`, and `s`. Defaults to `"eh"`. The meanings of the modifier characters are as follows: - `h` Return values in human-readable form (default). - `s` Return values in recompilable source form. - `e` Redirect script errors to stderr (default) - `o` Redirect script errors to stdout. - `language?: string` - The language of the OSA script to be executed. Defaults to `"AppleScript"`. ##### Returns An instance of [`osascript`](#osascript) configured with the provided options. ### `osascript.jxa` A convenient wrapper for `osascript` configured to run JXA. ##### Example ```js await osascript.jxa` const app = Application.currentApplication(); app.includeStandardAdditions = true; app.displayAlert('This is a message'); `; ``` ##### Returns An instance of [`osascript`](#osascript) configured to run JXA. ### `osascript.jxa(options: JXAOptions)` Executes a JXA script with custom options. ##### Example ```js const result = await osascript.jxa({ parse: true })` const app = Application('iTunes'); return { artist: app.currentTrack.artist(), title: app.currentTrack.name(), }; `; ``` ##### Arguments 1. `options: JXAOptions` - An object with the following keys: - `flags?: string` - The flags used to modify the output of the script. It is a string consisting of any of the of the modifier characters `e`, `h`, `o`, and `s`. Defaults to `"eh"`. The meanings of the modifier characters are as follows: - `h` Return values in human-readable form (default). - `s` Return values in recompilable source form. - `e` Redirect script errors to stderr (default) - `o` Redirect script errors to stdout. - `parse?: boolean` - A boolean indicating whether the standard output of the script is parsed for consumption in JavaScript. This uses `JSON.parse` under the hood. **Note that setting this option to true will automatically set the `flags` option to `"se"` if not set explicitly otherwise**. Defaults to `false`. - `argv?: any[]` - An array of arguments to be passed to the script. This array will be available in the JXA script itself as a global variable `argv`. Please note that all values will be serialized to strings. ##### Returns An instance of [`osascript`](#osascript) configured to run JXA with custom options. ## Licence MIT