diff --git a/packages/analytics/index.test.ts b/packages/analytics/index.test.ts index e0d1b7bc423..5dbb7faf4f5 100644 --- a/packages/analytics/index.test.ts +++ b/packages/analytics/index.test.ts @@ -64,7 +64,9 @@ describe('FirebaseAnalytics instance tests', () => { resetGlobalVars(); app = getFakeApp(analyticsId); fidDeferred = new Deferred(); - const installations = getFakeInstallations('fid-1234', () => fidDeferred.resolve()); + const installations = getFakeInstallations('fid-1234', () => + fidDeferred.resolve() + ); window['gtag'] = gtagStub; window['dataLayer'] = []; @@ -132,7 +134,9 @@ describe('FirebaseAnalytics instance tests', () => { resetGlobalVars(); const app = getFakeApp(analyticsId); fidDeferred = new Deferred(); - const installations = getFakeInstallations('fid-1234', () => fidDeferred.resolve()); + const installations = getFakeInstallations('fid-1234', () => + fidDeferred.resolve() + ); window[customGtagName] = gtagStub; window[customDataLayerName] = []; analyticsSettings({ diff --git a/packages/analytics/index.ts b/packages/analytics/index.ts index faf57b44d21..879e019d0b9 100644 --- a/packages/analytics/index.ts +++ b/packages/analytics/index.ts @@ -19,7 +19,12 @@ import '@firebase/installations'; import { FirebaseAnalytics } from '@firebase/analytics-types'; import { FirebaseAnalyticsInternal } from '@firebase/analytics-interop-types'; import { _FirebaseNamespace } from '@firebase/app-types/private'; -import { factory, settings, resetGlobalVars, getGlobalVars } from './src/factory'; +import { + factory, + settings, + resetGlobalVars, + getGlobalVars +} from './src/factory'; import { EventName } from './src/constants'; import { Component, diff --git a/packages/analytics/src/factory.ts b/packages/analytics/src/factory.ts index b597e7a772e..d4d525d2801 100644 --- a/packages/analytics/src/factory.ts +++ b/packages/analytics/src/factory.ts @@ -88,7 +88,9 @@ export function resetGlobalVars( /** * For testing */ -export function getGlobalVars(): { initializedIdPromisesMap: { [gaId: string]: Promise }} { +export function getGlobalVars(): { + initializedIdPromisesMap: { [gaId: string]: Promise }; +} { return { initializedIdPromisesMap }; diff --git a/packages/analytics/src/helpers.test.ts b/packages/analytics/src/helpers.test.ts index 96a19500fc1..c5f8c87e559 100644 --- a/packages/analytics/src/helpers.test.ts +++ b/packages/analytics/src/helpers.test.ts @@ -83,7 +83,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); @@ -110,7 +113,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); @@ -138,7 +144,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); @@ -165,7 +174,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); @@ -249,7 +261,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); @@ -278,7 +293,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); @@ -312,7 +330,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); @@ -342,7 +363,10 @@ describe('FirebaseAnalytics methods', () => { const initPromise1 = new Deferred(); const initPromise2 = new Deferred(); wrapOrCreateGtag( - { [mockAnalyticsId]: initPromise1.promise, otherId: initPromise2.promise }, + { + [mockAnalyticsId]: initPromise1.promise, + otherId: initPromise2.promise + }, 'dataLayer', 'gtag' ); diff --git a/packages/analytics/testing/get-fake-firebase-services.ts b/packages/analytics/testing/get-fake-firebase-services.ts index 5c0cbde961f..dd1443685e6 100644 --- a/packages/analytics/testing/get-fake-firebase-services.ts +++ b/packages/analytics/testing/get-fake-firebase-services.ts @@ -45,7 +45,10 @@ export function getFakeInstallations( onFidResolve?: Function ): FirebaseInstallations { return { - getId: async () => { onFidResolve && onFidResolve(); return fid; }, + getId: async () => { + onFidResolve && onFidResolve(); + return fid; + }, getToken: async () => 'authToken', onIdChange: () => () => undefined, delete: async () => undefined diff --git a/packages/app/src/errors.ts b/packages/app/src/errors.ts index 0224b34c6ff..980522951c7 100644 --- a/packages/app/src/errors.ts +++ b/packages/app/src/errors.ts @@ -36,7 +36,8 @@ const ERRORS: ErrorMap = { [AppError.INVALID_APP_ARGUMENT]: 'firebase.{$appName}() takes either no argument or a ' + 'Firebase App instance.', - [AppError.INVALID_LOG_ARGUMENT]: 'First argument to `onLog` must be null or a function.' + [AppError.INVALID_LOG_ARGUMENT]: + 'First argument to `onLog` must be null or a function.' }; type ErrorParams = { [key in AppError]: { appName: string } }; diff --git a/packages/app/test/clientLogger.test.ts b/packages/app/test/clientLogger.test.ts index 06726fefd34..bda4cdb64be 100644 --- a/packages/app/test/clientLogger.test.ts +++ b/packages/app/test/clientLogger.test.ts @@ -23,10 +23,7 @@ import { spy as Spy } from 'sinon'; import './setup'; import { Logger } from '@firebase/logger'; import { registerCoreComponents } from '../src/registerCoreComponents'; -import { - Component, - ComponentType -} from '@firebase/component'; +import { Component, ComponentType } from '@firebase/component'; declare module '@firebase/component' { interface NameServiceMapping { @@ -86,7 +83,7 @@ describe('User Log Methods', () => { 'test-shell', async () => { const logger = new Logger('@firebase/logger-test'); - (firebase as _FirebaseNamespace).onLog((logData) => { + (firebase as _FirebaseNamespace).onLog(logData => { result = logData; }); logger.info('hi'); diff --git a/packages/firebase/firestore/memory/index.ts b/packages/firebase/firestore/memory/index.ts index d871b1714be..5a831af95a4 100644 --- a/packages/firebase/firestore/memory/index.ts +++ b/packages/firebase/firestore/memory/index.ts @@ -16,7 +16,7 @@ */ /** - * This file serves as the public entrypoint for users that import + * This file serves as the public entrypoint for users that import * `firebase/firestore/memory`. */ diff --git a/packages/firestore/src/local/memory_persistence.ts b/packages/firestore/src/local/memory_persistence.ts index 207326fbdec..83207ccdc08 100644 --- a/packages/firestore/src/local/memory_persistence.ts +++ b/packages/firestore/src/local/memory_persistence.ts @@ -88,7 +88,7 @@ export class MemoryPersistence implements Persistence { private _started = false; readonly referenceDelegate: MemoryReferenceDelegate; - + /** * The constructor accepts a factory for creating a reference delegate. This * allows both the delegate and this instance to have strong references to diff --git a/packages/installations/src/util/errors.ts b/packages/installations/src/util/errors.ts index ea27444fc66..87f49aa1151 100644 --- a/packages/installations/src/util/errors.ts +++ b/packages/installations/src/util/errors.ts @@ -45,7 +45,7 @@ interface ErrorParams { }; [ErrorCode.REQUEST_FAILED]: { requestName: string; - [index: string] : string | number; // to make Typescript 3.8 happy + [index: string]: string | number; // to make Typescript 3.8 happy } & ServerErrorData; } diff --git a/packages/logger/src/logger.ts b/packages/logger/src/logger.ts index 14e7ab88ae6..2d1450eccf8 100644 --- a/packages/logger/src/logger.ts +++ b/packages/logger/src/logger.ts @@ -34,7 +34,7 @@ export interface LogCallbackParams { message: string; args: unknown[]; type: string; -}; +} /** * A container for all of the Logger instances diff --git a/packages/logger/test/custom-logger.test.ts b/packages/logger/test/custom-logger.test.ts index ffd4257f586..18dc8165018 100644 --- a/packages/logger/test/custom-logger.test.ts +++ b/packages/logger/test/custom-logger.test.ts @@ -28,11 +28,11 @@ describe(`Custom log handler`, () => { describe('Callback log level set to INFO (default)', () => { before(() => { - setUserLogHandler((callbackParams) => { + setUserLogHandler(callbackParams => { result = callbackParams; }); }); - + beforeEach(() => { result = null; spies = { @@ -71,7 +71,12 @@ describe(`Custom log handler`, () => { // Default log level is INFO. client1.info('info message!', ['hello'], 1, { a: 3 }); expect(result.message).to.equal('info message! ["hello"] 1 {"a":3}'); - expect(result.args).to.deep.equal(['info message!', ['hello'], 1, { a: 3 }]); + expect(result.args).to.deep.equal([ + 'info message!', + ['hello'], + 1, + { a: 3 } + ]); expect(result.level).to.equal('info'); expect(result.type).to.equal('@firebase/test-logger'); }); @@ -88,7 +93,7 @@ describe(`Custom log handler`, () => { expect(result.level).to.equal('error'); expect(spies.errorSpy.called).to.be.true; }); - + it('does not call custom callback when log call is not above set log level', () => { // Default log level is INFO. client1.log('message you should not see'); @@ -102,11 +107,14 @@ describe(`Custom log handler`, () => { describe('Callback log level set to WARN with options', () => { before(() => { - setUserLogHandler((callbackParams) => { - result = callbackParams; - }, { level: 'warn' }); + setUserLogHandler( + callbackParams => { + result = callbackParams; + }, + { level: 'warn' } + ); }); - + beforeEach(() => { result = null; spies = { @@ -136,7 +144,7 @@ describe(`Custom log handler`, () => { expect(result.level).to.equal('error'); expect(spies.errorSpy.called).to.be.true; }); - + it('does not call custom callback when log call is not above set log level', () => { client1.debug('message you should not see'); expect(result).to.be.null; @@ -158,11 +166,11 @@ describe(`Custom log handler`, () => { describe('Global log level set to VERBOSE with setLogLevel()', () => { before(() => { setLogLevel('verbose'); - setUserLogHandler((callbackParams) => { + setUserLogHandler(callbackParams => { result = callbackParams; }); }); - + beforeEach(() => { result = null; spies = { @@ -198,7 +206,7 @@ describe(`Custom log handler`, () => { expect(result.level).to.equal('error'); expect(spies.errorSpy.called).to.be.true; }); - + it('does not call custom callback when log call is not above set log level', () => { client1.debug('message you should not see'); expect(result).to.be.null; diff --git a/scripts/release/utils/npm.js b/scripts/release/utils/npm.js index 0ce90326f34..0229c0c184c 100644 --- a/scripts/release/utils/npm.js +++ b/scripts/release/utils/npm.js @@ -60,7 +60,11 @@ async function publishPackage(pkg, releaseType) { args = [...args, '--tag', 'next']; } else if (releaseType === 'Canary') { // Write proxy registry token for this package to .npmrc. - await exec(`echo "//wombat-dressing-room.appspot.com/:_authToken=${process.env[getEnvTokenKey(pkg)]}" >> ~/.npmrc`); + await exec( + `echo "//wombat-dressing-room.appspot.com/:_authToken=${ + process.env[getEnvTokenKey(pkg)] + }" >> ~/.npmrc` + ); args = [ ...args, '--tag', diff --git a/scripts/report_binary_size.js b/scripts/report_binary_size.js index bdb01c92664..843f8e42b8e 100644 --- a/scripts/report_binary_size.js +++ b/scripts/report_binary_size.js @@ -12,149 +12,157 @@ const METRICS_SERVICE_URL = process.env.METRICS_SERVICE_URL; // CDN scripts function generateReportForCDNScripts() { - const reports = []; - const firebaseRoot = resolve(__dirname, '../packages/firebase'); - const pkgJson = require(`${firebaseRoot}/package.json`); - - const special_files = [ - 'firebase-performance-standalone.es2017.js', - 'firebase-performance-standalone.js', - 'firebase.js' - ]; - - const files = [ - ...special_files.map(file => `${firebaseRoot}/${file}`), - ...pkgJson.components.map(component => `${firebaseRoot}/firebase-${component}.js`) - ]; - - for (const file of files) { - const { size } = fs.statSync(file); - const fileName = file.split('/').slice(-1)[0]; - reports.push(makeReportObject('firebase', fileName, size)); - } - - return reports; + const reports = []; + const firebaseRoot = resolve(__dirname, '../packages/firebase'); + const pkgJson = require(`${firebaseRoot}/package.json`); + + const special_files = [ + 'firebase-performance-standalone.es2017.js', + 'firebase-performance-standalone.js', + 'firebase.js' + ]; + + const files = [ + ...special_files.map(file => `${firebaseRoot}/${file}`), + ...pkgJson.components.map( + component => `${firebaseRoot}/firebase-${component}.js` + ) + ]; + + for (const file of files) { + const { size } = fs.statSync(file); + const fileName = file.split('/').slice(-1)[0]; + reports.push(makeReportObject('firebase', fileName, size)); + } + + return reports; } // NPM packages function generateReportForNPMPackages() { - const reports = []; - const fields = [ - 'main', - 'module', - 'esm2017', - 'browser', - 'react-native', - 'lite', - 'lite-esm2017' - ]; - - const packageInfo = JSON.parse( - execSync('npx lerna ls --json --scope @firebase/*', { cwd: repoRoot }).toString() - ); - - for (const package of packageInfo) { - const packageJson = require(`${package.location}/package.json`); - - for (const field of fields) { - if (packageJson[field]) { - const filePath = `${package.location}/${packageJson[field]}`; - - const rawCode = fs.readFileSync(filePath, 'utf-8'); - - // remove comments and whitespaces, then get size - const { code } = terser.minify(rawCode, { - output: { - comments: false - }, - mangle: false, - compress: false - }); - - const size = Buffer.byteLength(code, 'utf-8') - reports.push(makeReportObject(packageJson.name, field, size)); - } - } + const reports = []; + const fields = [ + 'main', + 'module', + 'esm2017', + 'browser', + 'react-native', + 'lite', + 'lite-esm2017' + ]; + + const packageInfo = JSON.parse( + execSync('npx lerna ls --json --scope @firebase/*', { + cwd: repoRoot + }).toString() + ); + + for (const package of packageInfo) { + const packageJson = require(`${package.location}/package.json`); + + for (const field of fields) { + if (packageJson[field]) { + const filePath = `${package.location}/${packageJson[field]}`; + + const rawCode = fs.readFileSync(filePath, 'utf-8'); + + // remove comments and whitespaces, then get size + const { code } = terser.minify(rawCode, { + output: { + comments: false + }, + mangle: false, + compress: false + }); + + const size = Buffer.byteLength(code, 'utf-8'); + reports.push(makeReportObject(packageJson.name, field, size)); + } } + } - return reports; + return reports; } function makeReportObject(sdk, type, value) { - return { - sdk, - type, - value - }; + return { + sdk, + type, + value + }; } function generateSizeReport() { - const reports = [ - ...generateReportForCDNScripts(), - ...generateReportForNPMPackages() - ]; - - for (const r of reports) { - console.log(r.sdk, r.type, r.value); - } - - console.log(`Github Action URL: https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${runId}`); - - return { - log: `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${runId}`, - metric: "BinarySize", - results: reports - }; + const reports = [ + ...generateReportForCDNScripts(), + ...generateReportForNPMPackages() + ]; + + for (const r of reports) { + console.log(r.sdk, r.type, r.value); + } + + console.log( + `Github Action URL: https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${runId}` + ); + + return { + log: `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${runId}`, + metric: 'BinarySize', + results: reports + }; } function constructRequestPath() { - const repo = process.env.GITHUB_REPOSITORY; - const commit = process.env.GITHUB_SHA; - let path = `/repos/${repo}/commits/${commit}/reports`; - if (process.env.GITHUB_EVENT_NAME === 'pull_request') { - const pullRequestNumber = process.env.GITHUB_PULL_REQUEST_NUMBER; - const pullRequestBaseSha = process.env.GITHUB_PULL_REQUEST_BASE_SHA; - path += `?pull_request=${pullRequestNumber}&base_commit=${pullRequestBaseSha}`; - } - return path; + const repo = process.env.GITHUB_REPOSITORY; + const commit = process.env.GITHUB_SHA; + let path = `/repos/${repo}/commits/${commit}/reports`; + if (process.env.GITHUB_EVENT_NAME === 'pull_request') { + const pullRequestNumber = process.env.GITHUB_PULL_REQUEST_NUMBER; + const pullRequestBaseSha = process.env.GITHUB_PULL_REQUEST_BASE_SHA; + path += `?pull_request=${pullRequestNumber}&base_commit=${pullRequestBaseSha}`; + } + return path; } function constructRequestOptions(path) { - const accessToken = execSync('gcloud auth print-identity-token', { encoding: 'utf8' }).trim(); - return { - path: path, - method: 'POST', - headers: { - 'Authorization': `Bearer ${accessToken}`, - 'Content-Type': 'application/json' - } - }; + const accessToken = execSync('gcloud auth print-identity-token', { + encoding: 'utf8' + }).trim(); + return { + path: path, + method: 'POST', + headers: { + 'Authorization': `Bearer ${accessToken}`, + 'Content-Type': 'application/json' + } + }; } function upload(report) { - if (!process.env.GITHUB_ACTIONS) { - console.log('Metrics upload is only enabled on CI.'); - return; - } - - const path = constructRequestPath(); - const options = constructRequestOptions(path); - - console.log(`${report.metric} report:`, report); - console.log(`Posting to metrics service endpoint: ${path} ...`); - - const request = https.request(METRICS_SERVICE_URL, options, response => { - response.setEncoding('utf8'); - console.log(`Response status code: ${response.statusCode}`); - response.on('data', console.log); - response.on('end', () => { - if (response.statusCode !== 202) { - process.exit(1); - } - }) + if (!process.env.GITHUB_ACTIONS) { + console.log('Metrics upload is only enabled on CI.'); + return; + } + + const path = constructRequestPath(); + const options = constructRequestOptions(path); + + console.log(`${report.metric} report:`, report); + console.log(`Posting to metrics service endpoint: ${path} ...`); + + const request = https.request(METRICS_SERVICE_URL, options, response => { + response.setEncoding('utf8'); + console.log(`Response status code: ${response.statusCode}`); + response.on('data', console.log); + response.on('end', () => { + if (response.statusCode !== 202) { + process.exit(1); + } }); - request.write(JSON.stringify(report)); - request.end(); + }); + request.write(JSON.stringify(report)); + request.end(); } const report = generateSizeReport();