Skip to content

Conversation

biw
Copy link

@biw biw commented Mar 23, 2023

Hey @andywer, thanks for the great repo. As described in #425, electron now supports spawning threads from asar bundles. This PR adds support for asar bundles.

In order to keep the default behavior the same (no breaking changes), I added an opt-in value electronAsarUnpacked to the worker constructor, which when set to false passes the raw value to NativeWorker.

For anyone reading this (other than @andywer) who needs this behavior before the PR is merged in, here is a patch (for use with patch-package):

diff --git a/node_modules/threads/dist/master/implementation.node.js b/node_modules/threads/dist/master/implementation.node.js
index df93ca1..218f4fd 100644
--- a/node_modules/threads/dist/master/implementation.node.js
+++ b/node_modules/threads/dist/master/implementation.node.js
@@ -108,8 +108,15 @@ function initWorkerThreadsWorker() {
                 super(createTsNodeModule(resolvedScriptPath), Object.assign(Object.assign({}, options), { eval: true }));
             }
             else if (resolvedScriptPath.match(/\.asar[\/\\]/)) {
+              const electronPath =
+              options?.electronAsarUnpacked === false
+                ? resolvedScriptPath
                 // See <https://github.com/andywer/threads-plugin/issues/17>
-                super(resolvedScriptPath.replace(/\.asar([\/\\])/, ".asar.unpacked$1"), options);
+                : resolvedScriptPath.replace(/\.asar([\/\\])/, ".asar.unpacked$1")
+
+              super(electronPath, options)
+                // See <https://github.com/andywer/threads-plugin/issues/17>
+                // super(resolvedScriptPath.replace(/\.asar([\/\\])/, ".asar.unpacked$1"), options);
             }
             else {
                 super(resolvedScriptPath, options);
diff --git a/node_modules/threads/dist/types/master.d.ts b/node_modules/threads/dist/types/master.d.ts
index a9c9044..768c302 100644
--- a/node_modules/threads/dist/types/master.d.ts
+++ b/node_modules/threads/dist/types/master.d.ts
@@ -62,6 +62,9 @@ export interface ThreadsWorkerOptions extends WorkerOptions {
     workerData?: any;
     /** Whether to apply CORS protection workaround. Defaults to true. */
     CORSWorkaround?: boolean;
+    /** If Electron workers should use the asar.unpacked path. Defaults to true.
+     *  See <https://github.com/andywer/threads-plugin/issues/17> */
+    electronAsarUnpacked?: boolean
 }
 /** Worker implementation. Either web worker or a node.js Worker class. */
 export declare class WorkerImplementation extends EventTarget implements Worker {

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant