1+ import browserslist from 'browserslist' ;
12import MiniCssExtractPlugin from 'mini-css-extract-plugin' ;
3+ import { execSync } from 'child_process' ;
4+
25import type { ConfigArgs } from './args' ;
36import { isServe } from './args' ;
7+ import chalk from 'chalk' ;
8+
9+ function isLatestBrowserslist ( ) {
10+ // eslint-disable-next-line @typescript-eslint/no-var-requires
11+ const browserslistVersion = require ( 'browserslist/package.json' ) . version ;
12+ const command = `npm view browserslist version --json` ;
13+ const latestBrowserslistVersion = JSON . parse (
14+ execSync ( command ) . toString ( ) . trim ( )
15+ ) ;
16+
17+ return browserslistVersion === latestBrowserslistVersion ;
18+ }
419
520const electronVersion = ( ( ) => {
621 // eslint-disable-next-line @typescript-eslint/no-var-requires
722 const [ maj , min ] = require ( 'electron/package.json' ) . version . split (
823 '.'
924 ) as string [ ] ;
25+
1026 return `${ maj } .${ min } ` ;
1127} ) ( ) ;
1228
29+ const browserslistElectronVersion = ( ( ) => {
30+ const installedElectronVersion = `electron ${ electronVersion } ` ;
31+ try {
32+ // Occasionally it may happen that browserslist does not catch up with
33+ // Electron versions.
34+
35+ // If we discover that our version of Electron is not supported by browserslist
36+ // we first try to determine if a new version of browserslist is avaliable.
37+ //
38+ // If a new version of browserslist is available we throw an error and prompt to update
39+ // browserslist, otherwise we ignore the error and we use the last known electron version.
40+ browserslist ( installedElectronVersion ) ;
41+ return installedElectronVersion ;
42+ } catch ( e ) {
43+ if ( ! isLatestBrowserslist ( ) ) {
44+ const errorMessage = `${ ( e as Error ) . message } .
45+ Please update browserslist in webpack-config-compass:
46+ npm i -S -w @mongodb-js/webpack-config-compass browserslist@latest` ;
47+ throw new Error ( chalk . red ( errorMessage ) ) ;
48+ }
49+
50+ return 'last 1 electron version' ;
51+ }
52+ } ) ( ) ;
53+
1354/**
1455 * "Cloud Manager can be accessed on your computer through Chrome, Firefox, Safari and Edge. We no longer support IE."
1556 * @see {@link https://wiki.corp.mongodb.com/x/n5kVBQ }
@@ -36,7 +77,7 @@ export const javascriptLoader = (args: ConfigArgs, web = false) => ({
3677 {
3778 targets : web
3879 ? cloudSupportedBrowserslistConfig
39- : { electron : electronVersion } ,
80+ : browserslistElectronVersion ,
4081 useBuiltIns : 'usage' ,
4182 corejs : { version : '3.12' , proposals : true } ,
4283 } ,
@@ -110,7 +151,7 @@ export const cssLoader = (args: ConfigArgs, web = false) => ({
110151 {
111152 browsers : web
112153 ? cloudSupportedBrowserslistConfig
113- : `electron ${ electronVersion } ` ,
154+ : browserslistElectronVersion ,
114155 } ,
115156 ] ,
116157 ] ,
0 commit comments