1
1
const path = require ( "path" ) ;
2
2
const fs = require ( "fs-extra" ) ;
3
3
const { LOCALES } = require ( "@triliumnext/commons" ) ;
4
- const setLanguages = require ( 'electron-packager-languages' ) ;
5
4
6
5
const ELECTRON_FORGE_DIR = __dirname ;
7
6
@@ -30,10 +29,6 @@ const macosSignConfiguration = process.env.APPLE_ID ? {
30
29
}
31
30
} : undefined ;
32
31
33
- const localesToKeep = LOCALES
34
- . filter ( locale => ! locale . contentOnly )
35
- . map ( locale => locale . electronLocale ) ;
36
-
37
32
module . exports = {
38
33
outDir : "out" ,
39
34
// Documentation of `packagerConfig` options: https://electron.github.io/packager/main/interfaces/Options.html
@@ -50,9 +45,6 @@ module.exports = {
50
45
...( process . platform === "darwin" ? [ ] : extraResourcesForPlatform )
51
46
] ,
52
47
prune : false ,
53
- afterCopy : [
54
- setLanguages ( localesToKeep )
55
- ] ,
56
48
afterComplete : [
57
49
( buildPath , _electronVersion , platform , _arch , callback ) => {
58
50
// Only move resources on non-macOS platforms
@@ -150,6 +142,53 @@ module.exports = {
150
142
}
151
143
] ,
152
144
hooks : {
145
+ // Remove unused locales from the packaged app to save some space.
146
+ postPackage ( _ , packageResult ) {
147
+ const localesToKeep = LOCALES
148
+ . filter ( locale => ! locale . contentOnly )
149
+ . map ( locale => locale . electronLocale . replace ( "_" , "-" ) ) ;
150
+ const keptLocales = new Set ( ) ;
151
+ const removedLocales = [ ] ;
152
+
153
+ for ( const outputPath of packageResult . outputPaths ) {
154
+ const localesDir = path . join ( outputPath , 'locales' ) ;
155
+
156
+ if ( ! fs . existsSync ( localesDir ) ) {
157
+ console . log ( 'No locales directory found. Skipping cleanup.' ) ;
158
+ return ;
159
+ }
160
+
161
+ const files = fs . readdirSync ( localesDir ) ;
162
+
163
+ for ( const file of files ) {
164
+ let localeName = path . basename ( file , ".pak" ) ;
165
+ if ( localeName === "en-US" && process . platform === "win32" ) {
166
+ // If the locale is "en-US" on Windows, we treat it as "en".
167
+ // This is because the Windows version of Electron uses "en-US.pak" instead of "en.pak".
168
+ localeName = "en" ;
169
+ }
170
+
171
+ if ( localesToKeep . includes ( localeName ) ) {
172
+ keptLocales . add ( localeName ) ;
173
+ continue ;
174
+ }
175
+
176
+ const filePath = path . join ( localesDir , file ) ;
177
+ fs . unlinkSync ( filePath ) ;
178
+ removedLocales . push ( file ) ;
179
+ }
180
+ }
181
+
182
+ console . log ( `Removed unused locale files: ${ removedLocales . join ( ", " ) } ` ) ;
183
+
184
+ // Ensure all locales that should be kept are actually present.
185
+ for ( const locale of localesToKeep ) {
186
+ if ( ! keptLocales . has ( locale ) ) {
187
+ console . error ( `Locale ${ locale } was not found in the packaged app.` ) ;
188
+ process . exit ( 1 ) ;
189
+ }
190
+ }
191
+ } ,
153
192
// Gather all the artifacts produced by the makers and copy them to a common upload directory.
154
193
postMake ( _ , makeResults ) {
155
194
const outputDir = path . join ( __dirname , ".." , "upload" ) ;
0 commit comments