UNPKG

clumsy-graphics

Version:

a tool for rapidly developing animations where frames are described using svg elements à la react 🙃

184 lines (183 loc) 11.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.spawnGraphicsRendererProcess = exports.graphicsRendererProcessManagerSaga = void 0; const child_process_1 = require("child_process"); const getSpawnedGraphicsRendererProcessEventChannel_1 = require("../externals/getSpawnedGraphicsRendererProcessEventChannel"); const storeEffects_1 = require("../helpers/storeEffects"); function* graphicsRendererProcessManagerSaga(api) { const { graphicsRendererProcessManagerActionChannel } = api; while (true) { const someGraphicsRendererProcessManagerAction = yield* (0, storeEffects_1.takeActionFromChannel)(graphicsRendererProcessManagerActionChannel); const currentAnimationModuleBundlerState = yield* (0, storeEffects_1.select)((currentAnimationDevelopmentState) => currentAnimationDevelopmentState.animationModuleBundlerState); if (someGraphicsRendererProcessManagerAction.type === 'animationModuleBundler_initialBuildSucceeded' || someGraphicsRendererProcessManagerAction.type === 'animationModuleBundler_rebuildSucceeded') { yield* (0, storeEffects_1.call)(function* () { if (currentAnimationModuleBundlerState.bundlerStatus === 'bundlerActive') { terminateActiveGraphicsRendererProcesses({ currentAnimationModuleBundlerState, }); } yield* (0, storeEffects_1.put)({ type: 'animationModuleBundlerStateUpdated', actionPayload: { nextAnimationModuleBundlerState: { bundlerStatus: 'bundlerActive', buildVersion: someGraphicsRendererProcessManagerAction.actionPayload .nextBuildSessionVersion, buildStatus: someGraphicsRendererProcessManagerAction.actionPayload .nextBuildStatus, animationModule: someGraphicsRendererProcessManagerAction.actionPayload .nextAnimationModule, graphicsRendererProcessStates: {}, }, }, }); }); } else if (someGraphicsRendererProcessManagerAction.type === 'animationModuleBundler_rebuildFailed') { yield* (0, storeEffects_1.call)(function* () { if ( // ??? dont think this check is necessary with better types currentAnimationModuleBundlerState.bundlerStatus === 'bundlerActive') { terminateActiveGraphicsRendererProcesses({ currentAnimationModuleBundlerState, }); } yield* (0, storeEffects_1.put)({ type: 'animationModuleBundlerStateUpdated', actionPayload: { nextAnimationModuleBundlerState: { bundlerStatus: 'bundlerActive', buildVersion: someGraphicsRendererProcessManagerAction.actionPayload .nextBuildSessionVersion, buildStatus: someGraphicsRendererProcessManagerAction.actionPayload .nextBuildStatus, buildErrorMessage: someGraphicsRendererProcessManagerAction.actionPayload .nextBuildErrorMessage, graphicsRendererProcessStates: {}, }, }, }); }); } else if (currentAnimationModuleBundlerState.bundlerStatus === 'bundlerActive' && someGraphicsRendererProcessManagerAction.type === 'spawnGraphicsRendererProcess' && currentAnimationModuleBundlerState.buildVersion === someGraphicsRendererProcessManagerAction.actionPayload.buildVersion && currentAnimationModuleBundlerState.graphicsRendererProcessStates[someGraphicsRendererProcessManagerAction.actionPayload .graphicsRendererProcessKey] === undefined) { yield* (0, storeEffects_1.call)(function* () { const { spawnedGraphicsRendererProcess } = spawnGraphicsRendererProcess({ graphicsRendererProcessCommandString: someGraphicsRendererProcessManagerAction.actionPayload .graphicsRendererProcessCommandString, }); const { spawnedGraphicsRendererProcessEventChannel } = (0, getSpawnedGraphicsRendererProcessEventChannel_1.getSpawnedGraphicsRendererProcessEventChannel)({ spawnedGraphicsRendererProcess, }); yield* (0, storeEffects_1.put)({ type: 'graphicsRendererProcessActive', actionPayload: { newGraphicsRendererProcessKey: someGraphicsRendererProcessManagerAction.actionPayload .graphicsRendererProcessKey, newGraphicsRendererProcessState: { graphicsRendererProcessKey: someGraphicsRendererProcessManagerAction.actionPayload .graphicsRendererProcessKey, spawnedGraphicsRendererProcess: spawnedGraphicsRendererProcess, graphicsRendererProcessStatus: 'processActive', graphicsRendererProcessStdoutLog: '', }, }, }); yield* (0, storeEffects_1.spawn)(function* () { let graphicsRendererProcessRunning = true; while (graphicsRendererProcessRunning) { const someSpawnedGraphicsRendererProcessEvent = yield* (0, storeEffects_1.takeEvent)(spawnedGraphicsRendererProcessEventChannel); switch (someSpawnedGraphicsRendererProcessEvent.eventType) { case 'graphicsRendererProcessStdoutLogUpdated': yield* (0, storeEffects_1.put)({ type: 'graphicsRendererProcessStdoutLogUpdated', actionPayload: { targetGraphicsRendererProcessKey: someGraphicsRendererProcessManagerAction.actionPayload .graphicsRendererProcessKey, buildVersion: currentAnimationModuleBundlerState.buildVersion, targetGraphicsRendererProcessStateUpdates: { graphicsRendererProcessStdoutLog: someSpawnedGraphicsRendererProcessEvent.eventPayload .updatedGraphicsRendererProcessStdoutLog, }, }, }); break; case 'graphicsRendererProcessSuccessful': yield* (0, storeEffects_1.put)({ type: 'graphicsRendererProcessSuccessful', actionPayload: { targetGraphicAssetKey: someGraphicsRendererProcessManagerAction.actionPayload .graphicAssetPathKey, targetGraphicAssetPath: someGraphicsRendererProcessManagerAction.actionPayload .graphicAssetPath, targetGraphicsRendererProcessKey: someGraphicsRendererProcessManagerAction.actionPayload .graphicsRendererProcessKey, buildVersion: currentAnimationModuleBundlerState.buildVersion, targetGraphicsRendererProcessStateUpdates: { graphicAssetUrl: someGraphicsRendererProcessManagerAction.actionPayload .graphicAssetUrlResult, graphicsRendererProcessStatus: 'processSuccessful', }, }, }); break; case 'graphicsRendererProcessFailed': yield* (0, storeEffects_1.put)({ type: 'graphicsRendererProcessFailed', actionPayload: { targetGraphicsRendererProcessKey: someGraphicsRendererProcessManagerAction.actionPayload .graphicsRendererProcessKey, buildVersion: currentAnimationModuleBundlerState.buildVersion, targetGraphicsRendererProcessStateUpdates: { graphicsRendererProcessErrorMessage: someSpawnedGraphicsRendererProcessEvent.eventPayload .graphicsRendererProcessErrorMessage, graphicsRendererProcessStatus: 'processFailed', }, }, }); break; case 'graphicsRendererProcessTerminated': break; } if (someSpawnedGraphicsRendererProcessEvent.eventType === 'graphicsRendererProcessSuccessful' || someSpawnedGraphicsRendererProcessEvent.eventType === 'graphicsRendererProcessFailed' || someSpawnedGraphicsRendererProcessEvent.eventType === 'graphicsRendererProcessTerminated') { graphicsRendererProcessRunning = false; } } }); }); } } } exports.graphicsRendererProcessManagerSaga = graphicsRendererProcessManagerSaga; function terminateActiveGraphicsRendererProcesses(api) { const { currentAnimationModuleBundlerState } = api; Object.values(currentAnimationModuleBundlerState.graphicsRendererProcessStates).forEach((someGraphicsRendererProcessState) => { someGraphicsRendererProcessState.spawnedGraphicsRendererProcess.kill('SIGINT'); }); } function spawnGraphicsRendererProcess(api) { const { graphicsRendererProcessCommandString } = api; const graphicsRendererCommandTokens = graphicsRendererProcessCommandString.split(' '); const [mainGraphicsRendererCommandToken, ...graphicsRendererCommandArgumentTokens] = graphicsRendererCommandTokens; const spawnedGraphicsRendererProcess = (0, child_process_1.spawn)(mainGraphicsRendererCommandToken, graphicsRendererCommandArgumentTokens, { stdio: 'pipe', }); return { spawnedGraphicsRendererProcess, }; } exports.spawnGraphicsRendererProcess = spawnGraphicsRendererProcess;