()
| 9 | } |
| 10 | |
| 11 | export const getFirebaseTools = () => globalThis.firebaseTools ? |
| 12 | Promise.resolve(globalThis.firebaseTools) : |
| 13 | new Promise<FirebaseTools>((resolve, reject) => { |
| 14 | process.env.FIREBASE_CLI_EXPERIMENTS ||= 'webframeworks'; |
| 15 | try { |
| 16 | resolve(require('firebase-tools')); |
| 17 | } catch (e) { |
| 18 | try { |
| 19 | const root = execSync('npm root --location=global').toString().trim(); |
| 20 | resolve(require(`${root}/firebase-tools`)); |
| 21 | } catch (e) { |
| 22 | const spinner = ora({ |
| 23 | text: `Installing firebase-tools...`, |
| 24 | // Workaround for https://github.com/sindresorhus/ora/issues/136. |
| 25 | discardStdin: process.platform !== 'win32', |
| 26 | }).start(); |
| 27 | spawn('npm', ['i', '--location=global', 'firebase-tools'], { |
| 28 | stdio: 'pipe', |
| 29 | shell: true, |
| 30 | }).on('close', (code) => { |
| 31 | if (code === 0) { |
| 32 | spinner.succeed('firebase-tools installed globally.'); |
| 33 | spinner.stop(); |
| 34 | const root = execSync('npm root -g').toString().trim(); |
| 35 | resolve(require(`${root}/firebase-tools`)); |
| 36 | } else { |
| 37 | spinner.fail('Package install failed.'); |
| 38 | reject(); |
| 39 | } |
| 40 | }); |
| 41 | } |
| 42 | } |
| 43 | }).then(firebaseTools => { |
| 44 | globalThis.firebaseTools = firebaseTools; |
| 45 | const version = firebaseTools.cli.version(); |
| 46 | console.log(`Using firebase-tools version ${version}`); |
| 47 | if (semverCompare(version, '14.0.0') === -1) { |
| 48 | console.error('firebase-tools version 13.0.0+ is required, please upgrade and run again'); |
| 49 | return Promise.reject(); |
| 50 | } |
| 51 | return firebaseTools; |
| 52 | }); |
no test coverage detected