@@ -40,97 +40,121 @@ const EMULATOR_UPDATE_DETAILS: {
4040 } ;
4141 dataconnect : {
4242 darwin : EmulatorUpdateDetails ;
43+ darwin_arm64 : EmulatorUpdateDetails ;
4344 win32 : EmulatorUpdateDetails ;
4445 linux : EmulatorUpdateDetails ;
4546 } ;
4647} = emulatorUpdateDetails ;
4748
48- const emulatorUiDetails = experiments . isEnabled ( "emulatoruisnapshot" )
49- ? EMULATOR_UPDATE_DETAILS . ui . snapshot
50- : EMULATOR_UPDATE_DETAILS . ui . main ;
51- const dataconnectDetails =
52- process . platform === "darwin"
53- ? EMULATOR_UPDATE_DETAILS . dataconnect . darwin
54- : process . platform === "win32"
55- ? EMULATOR_UPDATE_DETAILS . dataconnect . win32
56- : EMULATOR_UPDATE_DETAILS . dataconnect . linux ;
57- export const DownloadDetails : { [ s in DownloadableEmulators ] : EmulatorDownloadDetails } = {
58- database : {
59- downloadPath : path . join (
60- CACHE_DIR ,
61- EMULATOR_UPDATE_DETAILS . database . downloadPathRelativeToCacheDir ,
62- ) ,
63- version : EMULATOR_UPDATE_DETAILS . database . version ,
64- opts : {
65- ...EMULATOR_UPDATE_DETAILS . database ,
66- cacheDir : CACHE_DIR ,
67- namePrefix : "firebase-database-emulator" ,
68- } ,
69- } ,
70- firestore : {
71- downloadPath : path . join (
72- CACHE_DIR ,
73- EMULATOR_UPDATE_DETAILS . firestore . downloadPathRelativeToCacheDir ,
74- ) ,
75- version : EMULATOR_UPDATE_DETAILS . firestore . version ,
76- opts : {
77- ...EMULATOR_UPDATE_DETAILS . firestore ,
78- cacheDir : CACHE_DIR ,
79- namePrefix : "cloud-firestore-emulator" ,
80- } ,
81- } ,
82- storage : {
83- downloadPath : path . join (
84- CACHE_DIR ,
85- EMULATOR_UPDATE_DETAILS . storage . downloadPathRelativeToCacheDir ,
86- ) ,
87- version : EMULATOR_UPDATE_DETAILS . storage . version ,
88- opts : {
89- ...EMULATOR_UPDATE_DETAILS . storage ,
90- cacheDir : CACHE_DIR ,
91- namePrefix : "cloud-storage-rules-emulator" ,
92- } ,
93- } ,
94- ui : {
95- version : emulatorUiDetails . version ,
96- downloadPath : path . join ( CACHE_DIR , emulatorUiDetails . downloadPathRelativeToCacheDir ) ,
97- unzipDir : path . join ( CACHE_DIR , `ui-v${ emulatorUiDetails . version } ` ) ,
98- binaryPath : path . join ( CACHE_DIR , emulatorUiDetails . binaryPathRelativeToCacheDir ! ) ,
99- opts : {
100- ...emulatorUiDetails ,
101- cacheDir : CACHE_DIR ,
102- skipCache : experiments . isEnabled ( "emulatoruisnapshot" ) ,
103- skipChecksumAndSize : experiments . isEnabled ( "emulatoruisnapshot" ) ,
104- namePrefix : "ui" ,
105- } ,
106- } ,
107- pubsub : {
108- downloadPath : path . join (
109- CACHE_DIR ,
110- EMULATOR_UPDATE_DETAILS . pubsub . downloadPathRelativeToCacheDir ,
111- ) ,
112- version : EMULATOR_UPDATE_DETAILS . pubsub . version ,
113- unzipDir : path . join ( CACHE_DIR , `pubsub-emulator-${ EMULATOR_UPDATE_DETAILS . pubsub . version } ` ) ,
114- binaryPath : path . join ( CACHE_DIR , EMULATOR_UPDATE_DETAILS . pubsub . binaryPathRelativeToCacheDir ! ) ,
115- opts : {
116- ...EMULATOR_UPDATE_DETAILS . pubsub ,
117- cacheDir : CACHE_DIR ,
118- namePrefix : "pubsub-emulator" ,
119- } ,
120- } ,
121- dataconnect : {
122- downloadPath : path . join ( CACHE_DIR , dataconnectDetails . downloadPathRelativeToCacheDir ) ,
123- version : dataconnectDetails . version ,
124- binaryPath : path . join ( CACHE_DIR , dataconnectDetails . downloadPathRelativeToCacheDir ) ,
125- opts : {
126- ...dataconnectDetails ,
127- cacheDir : CACHE_DIR ,
128- skipChecksumAndSize : false ,
129- namePrefix : "dataconnect-emulator" ,
130- auth : false ,
131- } ,
132- } ,
133- } ;
49+ /**
50+ * generate download details for a single emulator, based on the host environment.
51+ * pulls data from `downloadableEmulatorInfo.json`.
52+ * @param emulator The name of the downloadable emulator to get details for.
53+ * @returns The download details for the specified emulator.
54+ */
55+ function generateDownloadDetails ( emulator : DownloadableEmulators ) : EmulatorDownloadDetails {
56+ const emulatorUiDetails = experiments . isEnabled ( "emulatoruisnapshot" )
57+ ? EMULATOR_UPDATE_DETAILS . ui . snapshot
58+ : EMULATOR_UPDATE_DETAILS . ui . main ;
59+
60+ const dataconnectDetails =
61+ process . platform === "darwin"
62+ ? process . arch === "arm64"
63+ ? EMULATOR_UPDATE_DETAILS . dataconnect . darwin_arm64
64+ : EMULATOR_UPDATE_DETAILS . dataconnect . darwin
65+ : process . platform === "win32"
66+ ? EMULATOR_UPDATE_DETAILS . dataconnect . win32
67+ : EMULATOR_UPDATE_DETAILS . dataconnect . linux ;
68+
69+ switch ( emulator ) {
70+ case "database" :
71+ return {
72+ downloadPath : path . join (
73+ CACHE_DIR ,
74+ EMULATOR_UPDATE_DETAILS . database . downloadPathRelativeToCacheDir ,
75+ ) ,
76+ version : EMULATOR_UPDATE_DETAILS . database . version ,
77+ opts : {
78+ ...EMULATOR_UPDATE_DETAILS . database ,
79+ cacheDir : CACHE_DIR ,
80+ namePrefix : "firebase-database-emulator" ,
81+ } ,
82+ } ;
83+ case "firestore" :
84+ return {
85+ downloadPath : path . join (
86+ CACHE_DIR ,
87+ EMULATOR_UPDATE_DETAILS . firestore . downloadPathRelativeToCacheDir ,
88+ ) ,
89+ version : EMULATOR_UPDATE_DETAILS . firestore . version ,
90+ opts : {
91+ ...EMULATOR_UPDATE_DETAILS . firestore ,
92+ cacheDir : CACHE_DIR ,
93+ namePrefix : "cloud-firestore-emulator" ,
94+ } ,
95+ } ;
96+ case "storage" :
97+ return {
98+ downloadPath : path . join (
99+ CACHE_DIR ,
100+ EMULATOR_UPDATE_DETAILS . storage . downloadPathRelativeToCacheDir ,
101+ ) ,
102+ version : EMULATOR_UPDATE_DETAILS . storage . version ,
103+ opts : {
104+ ...EMULATOR_UPDATE_DETAILS . storage ,
105+ cacheDir : CACHE_DIR ,
106+ namePrefix : "cloud-storage-rules-emulator" ,
107+ } ,
108+ } ;
109+ case "ui" :
110+ return {
111+ version : emulatorUiDetails . version ,
112+ downloadPath : path . join ( CACHE_DIR , emulatorUiDetails . downloadPathRelativeToCacheDir ) ,
113+ unzipDir : path . join ( CACHE_DIR , `ui-v${ emulatorUiDetails . version } ` ) ,
114+ binaryPath : path . join ( CACHE_DIR , emulatorUiDetails . binaryPathRelativeToCacheDir ! ) ,
115+ opts : {
116+ ...emulatorUiDetails ,
117+ cacheDir : CACHE_DIR ,
118+ skipCache : experiments . isEnabled ( "emulatoruisnapshot" ) ,
119+ skipChecksumAndSize : experiments . isEnabled ( "emulatoruisnapshot" ) ,
120+ namePrefix : "ui" ,
121+ } ,
122+ } ;
123+ case "pubsub" :
124+ return {
125+ downloadPath : path . join (
126+ CACHE_DIR ,
127+ EMULATOR_UPDATE_DETAILS . pubsub . downloadPathRelativeToCacheDir ,
128+ ) ,
129+ version : EMULATOR_UPDATE_DETAILS . pubsub . version ,
130+ unzipDir : path . join ( CACHE_DIR , `pubsub-emulator-${ EMULATOR_UPDATE_DETAILS . pubsub . version } ` ) ,
131+ binaryPath : path . join (
132+ CACHE_DIR ,
133+ EMULATOR_UPDATE_DETAILS . pubsub . binaryPathRelativeToCacheDir ! ,
134+ ) ,
135+ opts : {
136+ ...EMULATOR_UPDATE_DETAILS . pubsub ,
137+ cacheDir : CACHE_DIR ,
138+ namePrefix : "pubsub-emulator" ,
139+ } ,
140+ } ;
141+ case "dataconnect" :
142+ return {
143+ downloadPath : path . join ( CACHE_DIR , dataconnectDetails . downloadPathRelativeToCacheDir ) ,
144+ version : dataconnectDetails . version ,
145+ binaryPath : path . join ( CACHE_DIR , dataconnectDetails . downloadPathRelativeToCacheDir ) ,
146+ opts : {
147+ ...dataconnectDetails ,
148+ cacheDir : CACHE_DIR ,
149+ skipChecksumAndSize : false ,
150+ namePrefix : "dataconnect-emulator" ,
151+ auth : false ,
152+ } ,
153+ } ;
154+ default :
155+ throw new Error ( `Invalid downloadable emulator: ${ emulator } ` ) ;
156+ }
157+ }
134158
135159const EmulatorDetails : { [ s in DownloadableEmulators ] : DownloadableEmulatorDetails } = {
136160 database : {
@@ -480,7 +504,7 @@ async function _runBinary(
480504 * @param emulator
481505 */
482506export function getDownloadDetails ( emulator : DownloadableEmulators ) : EmulatorDownloadDetails {
483- const details = DownloadDetails [ emulator ] ;
507+ const details = generateDownloadDetails ( emulator ) ;
484508 const pathOverride = process . env [ `${ emulator . toUpperCase ( ) } _EMULATOR_BINARY_PATH` ] ;
485509 if ( pathOverride ) {
486510 const logger = EmulatorLogger . forEmulator ( emulator ) ;
0 commit comments