-
Notifications
You must be signed in to change notification settings - Fork 4
/
index.js
50 lines (44 loc) · 1.32 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
var exec = require('child_process').execFile
var transform = require('babel-core').transform
function osa(fn) {
var code = transform(`
ObjC.import('stdlib')
var fn = (${fn.toString()})
var args = JSON.parse($.getenv('OSA_ARGS'))
var out = fn.apply(null, args)
JSON.stringify(out)
`, { presets: ['env'] }).code
var osafn = function(...args) {
return new Promise((res, rej) => {
var child = exec(
'/usr/bin/osascript',
['-l', 'JavaScript'],
{
env: {
OSA_ARGS: JSON.stringify(args),
},
},
(err, stdout, stderr) => {
if (err) {
return rej(err)
}
if (stderr) {
console.log(stderr)
}
if (!stdout) {
res(undefined)
}
try {
res(JSON.parse(stdout.toString()))
} catch (e) {
rej(e)
}
}
)
child.stdin.write(code)
child.stdin.end()
})
}
return osafn
}
module.exports = osa