From 5b697f458abf2df683e5d62ab0d9de4dc85ade9e Mon Sep 17 00:00:00 2001 From: 4gray Date: Sun, 23 Nov 2025 22:16:33 +0100 Subject: [PATCH] feat(electron): load epg worker from asar.unpacked in prod Update EPG worker path handling and unpack worker files for production builds so the worker can be spawned when the app is packaged with ASAR. - Change workerPath to let and, when the resolved path includes app.asar, replace it with app.asar.unpacked. This ensures the spawned worker points to the unpacked resource in production. - Add electron-builder asarUnpack pattern for workers/** so worker files are packaged outside the ASAR archive. These changes fix runtime errors where worker threads cannot be started from inside app.asar and ensure the EPG parser can run in packaged apps. --- apps/electron-backend/src/app/events/epg.events.ts | 7 ++++++- package.json | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/electron-backend/src/app/events/epg.events.ts b/apps/electron-backend/src/app/events/epg.events.ts index 3f13fa26e..554e3e0c0 100644 --- a/apps/electron-backend/src/app/events/epg.events.ts +++ b/apps/electron-backend/src/app/events/epg.events.ts @@ -97,12 +97,17 @@ export default class EpgEvents { } return new Promise((resolve, reject) => { - const workerPath = path.join( + let workerPath = path.join( __dirname, 'workers', 'epg-parser.worker.js' ); + // Handle asar unpacked files in production + if (workerPath.includes('app.asar')) { + workerPath = workerPath.replace('app.asar', 'app.asar.unpacked'); + } + console.log(this.loggerLabel, 'Creating worker for:', url); console.log(this.loggerLabel, 'Worker path:', workerPath); diff --git a/package.json b/package.json index f80c824d2..c70d7b87c 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,9 @@ "appId": "com.fourgray.iptvnator", "productName": "IPTVnator", "artifactName": "${name}-${version}-${os}-${arch}.${ext}", + "asarUnpack": [ + "**/workers/**" + ], "mac": { "target": { "target": "dmg",