From 1e3f19e1842e025e7a405ae3cdffb646b788c89e Mon Sep 17 00:00:00 2001 From: Igor Gudelj Date: Wed, 4 Mar 2026 11:08:50 +0100 Subject: [PATCH 1/2] Make deleteAppDataOnUninstall configurable Add a `nsis.delete_app_data_on_uninstall` option to config/nativephp.php (defaults to false) so app developers can opt in to deleting app data on Windows uninstall without changing the default behavior for existing applications. Co-Authored-By: Claude Opus 4.6 --- config/nativephp.php | 9 +++++++++ resources/electron/electron-builder.mjs | 2 ++ src/Drivers/Electron/Commands/BuildCommand.php | 1 + 3 files changed, 12 insertions(+) diff --git a/config/nativephp.php b/config/nativephp.php index bc0f12c..08ed417 100644 --- a/config/nativephp.php +++ b/config/nativephp.php @@ -170,6 +170,15 @@ // 'rm -rf public/build', ], + /** + * The NSIS installer configuration for Windows builds. + * + * @see https://www.electron.build/generated/nsisoptions + */ + 'nsis' => [ + 'delete_app_data_on_uninstall' => env('NATIVEPHP_NSIS_DELETE_APP_DATA', false), + ], + /** * Custom PHP binary path. */ diff --git a/resources/electron/electron-builder.mjs b/resources/electron/electron-builder.mjs index d0f6bc6..2914ae3 100644 --- a/resources/electron/electron-builder.mjs +++ b/resources/electron/electron-builder.mjs @@ -11,6 +11,7 @@ const appVersion = process.env.NATIVEPHP_APP_VERSION; const appCopyright = process.env.NATIVEPHP_APP_COPYRIGHT; const deepLinkProtocol = process.env.NATIVEPHP_DEEPLINK_SCHEME; const updaterEnabled = process.env.NATIVEPHP_UPDATER_ENABLED === 'true'; +const deleteAppDataOnUninstall = process.env.NATIVEPHP_NSIS_DELETE_APP_DATA === 'true'; // Azure signing configuration const azureEndpoint = process.env.NATIVEPHP_AZURE_ENDPOINT; @@ -95,6 +96,7 @@ export default { shortcutName: '${productName}', uninstallDisplayName: '${productName}', createDesktopShortcut: 'always', + deleteAppDataOnUninstall: deleteAppDataOnUninstall, }, protocols: { name: deepLinkProtocol, diff --git a/src/Drivers/Electron/Commands/BuildCommand.php b/src/Drivers/Electron/Commands/BuildCommand.php index 5fb4518..2fc107b 100644 --- a/src/Drivers/Electron/Commands/BuildCommand.php +++ b/src/Drivers/Electron/Commands/BuildCommand.php @@ -142,6 +142,7 @@ protected function getEnvironmentVariables(): array 'NATIVEPHP_APP_FILENAME' => Str::slug(config('app.name')), 'NATIVEPHP_APP_AUTHOR' => config('nativephp.author'), 'NATIVEPHP_UPDATER_CONFIG' => json_encode(Updater::builderOptions()), + 'NATIVEPHP_NSIS_DELETE_APP_DATA' => config('nativephp.nsis.delete_app_data_on_uninstall') ? 'true' : 'false', 'NATIVEPHP_DEEPLINK_SCHEME' => config('nativephp.deeplink_scheme'), // Notarization 'NATIVEPHP_APPLE_ID' => config('nativephp-internal.notarization.apple_id'), From 787e227954e3738c787b38a9d1b69bee255a012c Mon Sep 17 00:00:00 2001 From: Igor Gudelj Date: Wed, 4 Mar 2026 12:45:20 +0100 Subject: [PATCH 2/2] Add test for NSIS delete app data env variable passthrough Co-Authored-By: Claude Opus 4.6 --- .../BuildCommandEnvironmentVariablesTest.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 tests/Build/BuildCommandEnvironmentVariablesTest.php diff --git a/tests/Build/BuildCommandEnvironmentVariablesTest.php b/tests/Build/BuildCommandEnvironmentVariablesTest.php new file mode 100644 index 0000000..bda0ab9 --- /dev/null +++ b/tests/Build/BuildCommandEnvironmentVariablesTest.php @@ -0,0 +1,31 @@ +invoke($command); + + expect($envVars['NATIVEPHP_NSIS_DELETE_APP_DATA'])->toBe('true'); +}); + +it('passes NSIS delete app data flag as false when config is disabled', function () { + Config::set('nativephp.nsis.delete_app_data_on_uninstall', false); + + $command = app(BuildCommand::class); + $envVars = (new ReflectionMethod($command, 'getEnvironmentVariables'))->invoke($command); + + expect($envVars['NATIVEPHP_NSIS_DELETE_APP_DATA'])->toBe('false'); +}); + +it('defaults NSIS delete app data flag to false when config is not set', function () { + Config::set('nativephp.nsis.delete_app_data_on_uninstall', null); + + $command = app(BuildCommand::class); + $envVars = (new ReflectionMethod($command, 'getEnvironmentVariables'))->invoke($command); + + expect($envVars['NATIVEPHP_NSIS_DELETE_APP_DATA'])->toBe('false'); +});