-
-
Notifications
You must be signed in to change notification settings - Fork 620
Expand file tree
/
Copy pathvite.config.safari.ts
More file actions
77 lines (72 loc) · 2.4 KB
/
Copy pathvite.config.safari.ts
File metadata and controls
77 lines (72 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { ManifestV3Export, crx } from '@crxjs/vite-plugin';
import { resolve } from 'path';
import { defineConfig, mergeConfig } from 'vite';
import manifest from './manifest.json';
import baseConfig, { baseBuildOptions, baseManifest } from './vite.config.base';
const outDir = resolve(__dirname, 'dist_safari');
// Environment variable to control Safari update check
// Set to 'true' to enable update reminders for Safari builds
// Default: 'false' (disabled)
const enableSafariUpdateCheck = process.env.ENABLE_SAFARI_UPDATE_CHECK === 'true';
export const safariManifest = {
...baseManifest,
browser_specific_settings: {
safari: {
// Manifest V3 support starts at Safari 15.4. The Vite target controls
// syntax only, so the compatibility floor must also live in manifest.
strict_min_version: '15.4',
},
},
// Safari renders toolbar icons as template images (monochrome).
// Use a transparent-background version so it doesn't appear as a solid square.
action: {
...manifest.action,
default_icon: {
'32': 'icon-32-template.png',
},
},
permissions: manifest.permissions.filter((permission) => permission !== 'notifications'),
optional_permissions: Array.from(
new Set([
...(manifest.optional_permissions ?? []).filter(
(permission) => permission !== 'notifications',
),
'unlimitedStorage',
]),
),
// Safari-specific adjustments
background: {
// Safari supports both service_worker and scripts
// Using scripts for better compatibility
scripts: ['src/pages/background/index.ts'],
},
} as unknown as ManifestV3Export;
export default mergeConfig(
baseConfig,
defineConfig({
define: {
// Inject flag into the build
'import.meta.env.ENABLE_SAFARI_UPDATE_CHECK': JSON.stringify(
enableSafariUpdateCheck ? 'true' : 'false',
),
'import.meta.env.VOYAGER_BUILD_TARGET': JSON.stringify('safari'),
},
plugins: [
crx({
manifest: safariManifest,
browser: 'chrome', // Use 'chrome' mode as Safari uses WebKit
contentScripts: {
injectCss: true,
},
}),
],
build: {
...baseBuildOptions,
outDir,
// Safari-specific build optimizations
// JavaScript syntax floor only. It does not imply Safari 14 can run MV3;
// runtime quota messaging uses the actual Safari product version.
target: 'safari14',
},
}),
);