diff --git a/demos/example-electron-node/config.ts b/demos/example-electron-node/config.ts index 2685c7091..d1c269bf6 100644 --- a/demos/example-electron-node/config.ts +++ b/demos/example-electron-node/config.ts @@ -85,7 +85,7 @@ const mainConfig: Configuration = { new CopyPlugin({ patterns: [{ from: path.resolve(require.resolve('@powersync/node/package.json'), `../lib/${extensionPath}`), - to: extensionPath, + to: path.join('powersync', extensionPath), }], }), new DefinePluginImpl({ @@ -95,7 +95,8 @@ const mainConfig: Configuration = { ], resolve: { extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'] - } + }, + target: "electron-main", }; const rendererConfig: Configuration = { @@ -116,7 +117,9 @@ const rendererConfig: Configuration = { const config: ForgeConfig = { packagerConfig: { - asar: true + asar: { + unpack: '**/{.**,**}/**/powersync/*' + }, }, rebuildConfig: { force: true, diff --git a/demos/example-electron-node/src/main/index.ts b/demos/example-electron-node/src/main/index.ts index 89361ef6b..c17951a1e 100644 --- a/demos/example-electron-node/src/main/index.ts +++ b/demos/example-electron-node/src/main/index.ts @@ -1,3 +1,4 @@ +import fs from 'node:fs'; import { Worker } from 'node:worker_threads'; import { PowerSyncDatabase, SyncStreamConnectionMethod } from '@powersync/node'; @@ -19,10 +20,22 @@ if (require('electron-squirrel-startup')) { app.quit(); } +const userDataDirectory = app.getPath('userData'); +try { + if (!fs.existsSync(userDataDirectory)) { + fs.mkdirSync(userDataDirectory); + } +} catch (e) { + console.error('Could not create database directory', e); +} + +console.log('Storing data in ', userDataDirectory); + const database = new PowerSyncDatabase({ schema: AppSchema, database: { dbFilename: 'test.db', + dbLocation: userDataDirectory, openWorker(_, options) { return new Worker(new URL('./worker.ts', import.meta.url), options); } diff --git a/demos/example-electron-node/src/main/worker.ts b/demos/example-electron-node/src/main/worker.ts index 6949e84f1..a7c292b58 100644 --- a/demos/example-electron-node/src/main/worker.ts +++ b/demos/example-electron-node/src/main/worker.ts @@ -18,7 +18,14 @@ function resolvePowerSyncCoreExtension() { // This example uses copy-webpack-plugin to copy the prebuilt library over. This ensures that it is // available in packaged release builds. - return path.resolve(__dirname, extensionPath); + let libraryPath = path.resolve(__dirname, 'powersync', extensionPath); + + if (__dirname.indexOf('app.asar') != -1) { + // Our build configuration ensures the extension is always available outside of the archive too. + libraryPath = libraryPath.replace('app.asar', 'app.asar.unpacked'); + } + + return libraryPath; } startPowerSyncWorker({ extensionPath: resolvePowerSyncCoreExtension });