From 555f38eb835074882a124e5ac121705f0979c2fd Mon Sep 17 00:00:00 2001 From: Davi Leal Date: Thu, 1 May 2025 11:22:18 -0300 Subject: [PATCH 1/2] Add initializeServerApp() without args --- packages/app/src/api.ts | 69 +++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index b8ec25fc509..6e7a19e2567 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -203,7 +203,7 @@ export function initializeApp( * @example * ```javascript * - * // Initialize an instance of `FirebaseServerApp`. + * // Initialize an instance of `FirebaseServerApp` with explicit options. * // Retrieve your own options values by adding a web app on * // https://console.firebase.google.com * initializeServerApp({ @@ -231,29 +231,52 @@ export function initializeServerApp( config: FirebaseServerAppSettings ): FirebaseServerApp; +/** + * Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance with default configuration. + * + * @example + * ```javascript + * // Initialize with default configuration + * initializeServerApp(); + * ``` + * + * @returns The initialized `FirebaseServerApp` with default configuration. + * + * @public + */ +export function initializeServerApp(): FirebaseServerApp; + export function initializeServerApp( - _options: FirebaseOptions | FirebaseApp, - _serverAppConfig: FirebaseServerAppSettings + _options?: FirebaseOptions | FirebaseApp, + _serverAppConfig: FirebaseServerAppSettings = {} ): FirebaseServerApp { if (isBrowser() && !isWebWorker()) { // FirebaseServerApp isn't designed to be run in browsers. throw ERROR_FACTORY.create(AppError.INVALID_SERVER_APP_ENVIRONMENT); } - if (_serverAppConfig.automaticDataCollectionEnabled === undefined) { - _serverAppConfig.automaticDataCollectionEnabled = false; + let options = _options; + const config: FirebaseServerAppSettings = { + automaticDataCollectionEnabled: false, + ..._serverAppConfig + }; + + options ||= getDefaultAppConfig(); + + if (!options) { + throw ERROR_FACTORY.create(AppError.NO_OPTIONS); } let appOptions: FirebaseOptions; - if (_isFirebaseApp(_options)) { - appOptions = _options.options; + if (_isFirebaseApp(options)) { + appOptions = options.options; } else { - appOptions = _options; + appOptions = options; } // Build an app name based on a hash of the configuration options. const nameObj = { - ..._serverAppConfig, + ...config, ...appOptions }; @@ -270,7 +293,7 @@ export function initializeServerApp( ); }; - if (_serverAppConfig.releaseOnDeref !== undefined) { + if (config.releaseOnDeref !== undefined) { if (typeof FinalizationRegistry === 'undefined') { throw ERROR_FACTORY.create( AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED, @@ -283,7 +306,7 @@ export function initializeServerApp( const existingApp = _serverApps.get(nameString) as FirebaseServerApp; if (existingApp) { (existingApp as FirebaseServerAppImpl).incRefCount( - _serverAppConfig.releaseOnDeref + config.releaseOnDeref ); return existingApp; } @@ -295,7 +318,7 @@ export function initializeServerApp( const newApp = new FirebaseServerAppImpl( appOptions, - _serverAppConfig, + config, nameString, container ); @@ -375,22 +398,22 @@ export async function deleteApp(app: FirebaseApp): Promise { let cleanupProviders = false; const name = app.name; if (_apps.has(name)) { - cleanupProviders = true; - _apps.delete(name); - } else if (_serverApps.has(name)) { - const firebaseServerApp = app as FirebaseServerAppImpl; - if (firebaseServerApp.decRefCount() <= 0) { - _serverApps.delete(name); cleanupProviders = true; - } + _apps.delete(name); + } else if (_serverApps.has(name)) { + const firebaseServerApp = app as FirebaseServerAppImpl; + if (firebaseServerApp.decRefCount() <= 0) { + _serverApps.delete(name); + cleanupProviders = true; + } } if (cleanupProviders) { - await Promise.all( + await Promise.all( (app as FirebaseAppImpl).container - .getProviders() - .map(provider => provider.delete()) - ); + .getProviders() + .map(provider => provider.delete()) + ); (app as FirebaseAppImpl).isDeleted = true; } } From d50d0e1889873f1e9a59b61e3ef0d24861bf4802 Mon Sep 17 00:00:00 2001 From: Davi Leal Date: Thu, 1 May 2025 11:48:48 -0300 Subject: [PATCH 2/2] docs(changeset): add patch notes for initializeServerApp --- .changeset/poor-penguins-play.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/poor-penguins-play.md diff --git a/.changeset/poor-penguins-play.md b/.changeset/poor-penguins-play.md new file mode 100644 index 00000000000..75f7cd7e399 --- /dev/null +++ b/.changeset/poor-penguins-play.md @@ -0,0 +1,7 @@ +--- +'@firebase/app': patch +--- + +Support zero-args `initializeServerApp()` + +* Added overloads to allow initializeServerApp() without parameters. \ No newline at end of file