diff --git a/package-lock.json b/package-lock.json index 54ab20b..51e5897 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adobe-node", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -24,6 +24,12 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "typescript": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.2.tgz", + "integrity": "sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ==", + "dev": true } } } diff --git a/package.json b/package.json index ad5be6a..43ac003 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ }, "homepage": "https://github.com/rkamysz/adobe-node#readme", "devDependencies": { - "@types/node": "^12.12.5" + "@types/node": "^12.12.5", + "typescript": "^3.8.2" }, "dependencies": { "@types/minimist": "^1.2.0", diff --git a/src/broadcast.ts b/src/broadcast.ts index 484586b..9c92860 100644 --- a/src/broadcast.ts +++ b/src/broadcast.ts @@ -1,23 +1,49 @@ import { AdobeAppName, BroadcastBuilder, BroadcastMessage, Config } from "./api"; import { exec } from 'child_process'; -const broadcastMethods: Map string> = new Map string>([ - [AdobeAppName.Animate, (cmd: string) => `FLfile.runCommandLine("${cmd}");`], - [AdobeAppName.Photoshop, (cmd: string) => `app.system("${cmd}");`], - [AdobeAppName.Illustrator, (cmd: string) => `app.system("${cmd}");`], -]); +const createPayload = (command: string): string => { + return `{\\"command\\":\\"${command}\\",\\"stdout\\":\\"" + __stdout + "\\", \\"stderr\\":\\"" + __stderr + "\\" }`; +}; + +const buildBroadcastCommand = (host: string, port: number, message: string): string => { + return `adobe-broadcast --host='${host}' --port=${port} --msg='${message}'`; +} -const buildBroadcastCommand = (host: string, port: number, message: string) => - `adobe-broadcast --host='${host}' --port=${port} --msg='${message}'`; +const broadcastMethods: Map string> = new Map string>([ + [AdobeAppName.Animate, (host: string, port: number, command: string) => `FLfile.runCommandLine("${buildBroadcastCommand(host, port, createPayload(command))}");`], + [AdobeAppName.Photoshop, (host: string, port: number, command: string) => `app.system("${buildBroadcastCommand(host, port, createPayload(command))}");`], + [AdobeAppName.Illustrator, (host: string, port: number, command: string) => { + const cmd = `adobe-broadcast --host='${host}' --port=${port}`; + return ` + if (!__stdout) { + __stdout = "{}"; + } + if (!__stderr) { + __stderr = ""; + } + const bt = new BridgeTalk(); + bt.target = 'bridge'; + const btCmd = '${cmd.replace(/'/g, "\\'")}'; + bt.body = 'const cmd = "' + btCmd + '";'; + bt.body += 'const msg = \\\'{"command": "${command}", "stdout": ' + __stdout + ', "stderr": "' + __stderr + '"}\\\';'; + bt.body += 'const sys = cmd + " --msg=\\\'" + msg + "\\\'";'; + bt.body += 'app.system(sys);'; + bt.onError = function(bt) + { + alert("Error from BridgeTalk: " + bt.body); + }; + bt.send(); + ` + } + ] +]); export const newBroadcastBuilder = (config: Config): BroadcastBuilder => { return { build(command: string) { - const payload: string = `{\\"command\\":\\"${command}\\",\\"stdout\\":\\"" + __stdout + "\\", \\"stderr\\":\\"" + __stderr + "\\" }`; - const broadcast: (msg: string) => string = broadcastMethods.get(config.app.name); - const cmd: string = buildBroadcastCommand(config.host, config.port, payload); - return broadcast(cmd); + const broadcast = broadcastMethods.get(config.app.name); + return broadcast(config.host, config.port, command); } } } diff --git a/src/listener.ts b/src/listener.ts index e9f397b..6b1fa0d 100644 --- a/src/listener.ts +++ b/src/listener.ts @@ -2,26 +2,30 @@ import { AdobeEventListener, BroadcastMessage } from './api'; import { Socket, Server, createServer } from 'net'; const newAdobeAppListener = (host: string, port: number, callback: (commandName: string) => void): AdobeEventListener => { - + const callbacks: Map = new Map(); let server: Server; - let client:Socket; + let client: Socket; function connectionListener(socket: Socket) { client = socket; socket.on('data', (buffer: Buffer) => { - const data: BroadcastMessage = JSON.parse(buffer.toString()); - - if (callbacks.has(data.command)) { - callbacks.get(data.command)(data.stdout, data.stderr); + try { + const dataString = buffer.toString(); + const data: any = JSON.parse(dataString); + if (callbacks.has(data.command)) { + const callback = callbacks.get(data.command); + callback(data.stdout, data.stderr); + } + callback(data.command); + } catch (error) { + console.error("Failed to convert data: " + error); } - - callback(data.command); }); } function disposeServer() { - if(client) { + if (client) { client.end(); } server = null; diff --git a/src/script-builder.ts b/src/script-builder.ts index 52b733a..3104388 100644 --- a/src/script-builder.ts +++ b/src/script-builder.ts @@ -10,9 +10,8 @@ var ___{{__command__}} = (function() { __stdout = {{__fn__}} } catch (e) { __stderr = e; - } finally { - {{__broadcast__}} - } + } + {{__broadcast__}} })();`; const newAdobeScriptBuilder = (): AdobeScriptBuilder => {