Document Phase 0 scaffold and architecture
This commit is contained in:
116
forge.config.ts
Normal file
116
forge.config.ts
Normal file
@@ -0,0 +1,116 @@
|
||||
import fs from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import type { ForgeConfig } from '@electron-forge/shared-types';
|
||||
import { MakerDeb } from '@electron-forge/maker-deb';
|
||||
import { MakerDMG } from '@electron-forge/maker-dmg';
|
||||
import { MakerRpm } from '@electron-forge/maker-rpm';
|
||||
import { MakerSquirrel } from '@electron-forge/maker-squirrel';
|
||||
import { MakerZIP } from '@electron-forge/maker-zip';
|
||||
import { VitePlugin } from '@electron-forge/plugin-vite';
|
||||
import { FusesPlugin } from '@electron-forge/plugin-fuses';
|
||||
import { FuseV1Options, FuseVersion } from '@electron/fuses';
|
||||
import plist from 'plist';
|
||||
|
||||
const unusedMacPermissionDescriptions = [
|
||||
'NSAudioCaptureUsageDescription',
|
||||
'NSBluetoothAlwaysUsageDescription',
|
||||
'NSBluetoothPeripheralUsageDescription',
|
||||
'NSCameraUsageDescription',
|
||||
] as const;
|
||||
|
||||
const stripUnusedMacPermissionDescriptions = (
|
||||
buildPath: string,
|
||||
_electronVersion: string,
|
||||
platform: string,
|
||||
_arch: string,
|
||||
callback: (error?: Error | null) => void,
|
||||
): void => {
|
||||
if (platform !== 'darwin') {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
const infoPath = path.join(
|
||||
buildPath,
|
||||
'Electron.app',
|
||||
'Contents',
|
||||
'Info.plist',
|
||||
);
|
||||
|
||||
void (async () => {
|
||||
const info = plist.parse(await fs.readFile(infoPath, 'utf8'));
|
||||
|
||||
for (const key of unusedMacPermissionDescriptions) {
|
||||
delete info[key];
|
||||
}
|
||||
|
||||
await fs.writeFile(infoPath, plist.build(info), 'utf8');
|
||||
})().then(
|
||||
() => callback(),
|
||||
(error: unknown) =>
|
||||
callback(error instanceof Error ? error : new Error(String(error))),
|
||||
);
|
||||
};
|
||||
|
||||
const config: ForgeConfig = {
|
||||
packagerConfig: {
|
||||
appBundleId: 'dev.dokril.max-index',
|
||||
appCategoryType: 'public.app-category.productivity',
|
||||
asar: true,
|
||||
afterExtract: [stripUnusedMacPermissionDescriptions],
|
||||
extendInfo: {
|
||||
NSAppTransportSecurity: {
|
||||
NSAllowsArbitraryLoads: false,
|
||||
},
|
||||
},
|
||||
usageDescription: {
|
||||
Microphone:
|
||||
'Max Index использует микрофон для локального распознавания речи.',
|
||||
},
|
||||
},
|
||||
rebuildConfig: {},
|
||||
makers: [
|
||||
new MakerSquirrel({}, ['win32']),
|
||||
new MakerDMG({}, ['darwin']),
|
||||
new MakerZIP({}, ['darwin']),
|
||||
new MakerDeb({}, ['linux']),
|
||||
new MakerRpm({}, ['linux']),
|
||||
],
|
||||
plugins: [
|
||||
new VitePlugin({
|
||||
build: [
|
||||
{
|
||||
entry: 'src/main/main.ts',
|
||||
config: 'vite.main.config.ts',
|
||||
target: 'main',
|
||||
},
|
||||
{
|
||||
entry: 'src/preload/preload.ts',
|
||||
config: 'vite.preload.config.ts',
|
||||
target: 'preload',
|
||||
},
|
||||
],
|
||||
renderer: [
|
||||
{
|
||||
name: 'main_window',
|
||||
config: 'vite.renderer.config.ts',
|
||||
},
|
||||
],
|
||||
}),
|
||||
{
|
||||
name: '@electron-forge/plugin-auto-unpack-natives',
|
||||
config: {},
|
||||
},
|
||||
new FusesPlugin({
|
||||
version: FuseVersion.V1,
|
||||
[FuseV1Options.RunAsNode]: false,
|
||||
[FuseV1Options.EnableCookieEncryption]: true,
|
||||
[FuseV1Options.EnableNodeOptionsEnvironmentVariable]: false,
|
||||
[FuseV1Options.EnableNodeCliInspectArguments]: false,
|
||||
[FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: true,
|
||||
[FuseV1Options.OnlyLoadAppFromAsar]: true,
|
||||
}),
|
||||
],
|
||||
};
|
||||
|
||||
export default config;
|
||||
Reference in New Issue
Block a user