clumsy-graphics
Version:
a tool for rapidly developing animations where frames are described using svg elements à la react 🙃
53 lines (52 loc) • 2.33 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const worker_threads_1 = require("worker_threads");
const decodeData_1 = require("../helpers/decodeData");
const getAnimationModule_1 = require("../helpers/getAnimationModule");
const renderAnimationFrame_1 = require("../helpers/renderAnimationFrame");
const FrameRendererWorkerData_1 = require("./models/FrameRendererWorkerData");
const RenderFrameMessage_1 = require("./models/RenderFrameMessage");
startFrameRendererWorker();
async function startFrameRendererWorker() {
const frameRendererParentSagaMessageChannel = worker_threads_1.parentPort;
const { animationModuleBundle } = await (0, decodeData_1.decodeData)({
targetCodec: FrameRendererWorkerData_1.FrameRendererWorkerDataCodec,
inputData: worker_threads_1.workerData,
});
const animationModule = await (0, getAnimationModule_1.getAnimationModule)({
animationModuleBundle,
});
frameRendererParentSagaMessageChannel.on('message', async (someRenderFrameMessageData) => {
const someRenderFrameMessage = await (0, decodeData_1.decodeData)({
targetCodec: RenderFrameMessage_1.RenderAnimationFrameMessageCodec,
inputData: someRenderFrameMessageData,
});
const { frameIndex, framePngOutputPath } = someRenderFrameMessage.messagePayload;
try {
await (0, renderAnimationFrame_1.renderAnimationFrame)({
animationModule,
frameIndex,
frameFileOutputPath: framePngOutputPath,
});
const renderedFrameMessage = {
messageType: 'workerRenderedFrame',
messagePayload: {},
};
frameRendererParentSagaMessageChannel.postMessage(renderedFrameMessage);
}
catch (renderError) {
const renderErrorMessage = {
messageType: 'workerRenderError',
messagePayload: {
renderError,
},
};
frameRendererParentSagaMessageChannel.postMessage(renderErrorMessage);
}
});
const initializedMessage = {
messageType: 'workerInitialized',
messagePayload: {},
};
frameRendererParentSagaMessageChannel.postMessage(initializedMessage);
}