clumsy-graphics
Version:
a tool for rapidly developing animations where frames are described using svg elements à la react 🙃
75 lines (74 loc) • 3.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSpawnedGraphicsRendererProcessEventChannel = void 0;
const redux_saga_1 = require("redux-saga");
function getSpawnedGraphicsRendererProcessEventChannel(api) {
const { spawnedGraphicsRendererProcess } = api;
const spawnedGraphicsRendererProcessEventChannel = (0, redux_saga_1.eventChannel)((emitGraphicsRendererProcessEvent) => {
let spawnedGraphicsRendererProcessLog = '';
spawnedGraphicsRendererProcess.stdout.setEncoding('utf-8');
spawnedGraphicsRendererProcess.stdout.on('data', (someStdoutData) => {
if (typeof someStdoutData === 'string') {
spawnedGraphicsRendererProcessLog = `${spawnedGraphicsRendererProcessLog}${someStdoutData}`;
emitGraphicsRendererProcessEvent({
eventType: 'graphicsRendererProcessStdoutLogUpdated',
eventPayload: {
updatedGraphicsRendererProcessStdoutLog: spawnedGraphicsRendererProcessLog,
},
});
}
else {
throw new Error('wtf? graphicsRendererProcessMessageTokens');
}
});
const spawnedGraphicsRendererProcessErrorMessagePromise = new Promise((resolve) => {
let graphicsRendererProcessErrorMessage = null;
spawnedGraphicsRendererProcess.stderr.setEncoding('utf-8');
spawnedGraphicsRendererProcess.stderr.on('data', (someStderrData) => {
if (typeof someStderrData === 'string') {
graphicsRendererProcessErrorMessage =
graphicsRendererProcessErrorMessage
? `${spawnedGraphicsRendererProcess}${someStderrData}`
: someStderrData;
}
else {
throw new Error('wtf? spawnedGraphicsRendererProcess.stderr');
}
});
spawnedGraphicsRendererProcess.stderr.once('end', () => {
resolve({
graphicsRendererProcessErrorMessage: graphicsRendererProcessErrorMessage ||
'wtf? graphicsRendererProcessErrorMessage',
});
});
});
spawnedGraphicsRendererProcess.once('exit', async (graphicsRendererProcessExitCode) => {
switch (graphicsRendererProcessExitCode) {
case 0:
emitGraphicsRendererProcessEvent({
eventType: 'graphicsRendererProcessSuccessful',
eventPayload: {},
});
break;
case 1:
const { graphicsRendererProcessErrorMessage } = await spawnedGraphicsRendererProcessErrorMessagePromise;
emitGraphicsRendererProcessEvent({
eventType: 'graphicsRendererProcessFailed',
eventPayload: {
graphicsRendererProcessErrorMessage,
},
});
break;
case null:
emitGraphicsRendererProcessEvent({
eventType: 'graphicsRendererProcessTerminated',
eventPayload: {},
});
break;
}
});
return () => { };
}, redux_saga_1.buffers.expanding(10));
return { spawnedGraphicsRendererProcessEventChannel };
}
exports.getSpawnedGraphicsRendererProcessEventChannel = getSpawnedGraphicsRendererProcessEventChannel;