{"version":3,"file":"NodeThreadExecutionService.cjs","sourceRoot":"","sources":["../../../src/services/node-js/NodeThreadExecutionService.ts"],"names":[],"mappings":";;;AACA,6DAA+E;AAC/E,mDAAwC;AAExC,8DAAuD;AAGvD,MAAa,0BAA2B,SAAQ,mCAAwB;IAC5D,KAAK,CAAC,aAAa,CAAC,MAAc;QAI1C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,IAAI,uBAAM,CACvB,OAAO,CAAC,OAAO,CAAC,oDAAoD,CAAC,EACrE;YACE,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb,CACF,CAAC;QAEF,2EAA2E;QAC3E,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,gCAAyB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAES,KAAK,CAAC,YAAY,CAC1B,UAAoC;QAEpC,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IACvC,CAAC;CACF;AApCD,gEAoCC","sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { ThreadParentMessageStream } from '@metamask/post-message-stream/node';\nimport { Worker } from 'worker_threads';\n\nimport { ExecutionService } from '../ExecutionService';\nimport type { TerminateJobArgs } from '../ExecutionService';\n\nexport class NodeThreadExecutionService extends ExecutionService<Worker> {\n  protected async initEnvStream(snapId: string): Promise<{\n    worker: Worker;\n    stream: BasePostMessageStream;\n  }> {\n    this.setSnapStatus(snapId, 'initializing');\n\n    const worker = new Worker(\n      require.resolve('@metamask/snaps-execution-environments/node-thread'),\n      {\n        stdout: true,\n        stderr: true,\n      },\n    );\n\n    // Capturing `stdout` and `stderr` from the worker prevents the worker from\n    // writing to them directly, making it easier to capture them Jest.\n    worker.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.toString());\n    });\n\n    worker.stderr.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.error(data.toString());\n    });\n\n    const stream = new ThreadParentMessageStream({ thread: worker });\n    return Promise.resolve({ worker, stream });\n  }\n\n  protected async terminateJob(\n    jobWrapper: TerminateJobArgs<Worker>,\n  ): Promise<void> {\n    await jobWrapper.worker?.terminate();\n  }\n}\n"]}