Skip to content

Commit 4ee298c

Browse files
committed
Auto it impl and tested
1 parent a058309 commit 4ee298c

File tree

4 files changed

+117
-18
lines changed

4 files changed

+117
-18
lines changed

common/api-review/app.api.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,18 @@ export function initializeApp(): FirebaseApp;
112112
// @public
113113
export function initializeServerApp(options: FirebaseOptions | FirebaseApp, config: FirebaseServerAppSettings): FirebaseServerApp;
114114

115+
// @public
116+
export function initializeServerApp(_serverAppConfig?: FirebaseServerAppSettings): FirebaseServerApp;
117+
115118
// @internal (undocumented)
116-
export function _isFirebaseApp(obj: FirebaseApp | FirebaseOptions): obj is FirebaseApp;
119+
export function _isFirebaseApp(obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings): obj is FirebaseApp;
117120

118121
// @internal (undocumented)
119122
export function _isFirebaseServerApp(obj: FirebaseApp | FirebaseServerApp | null | undefined): obj is FirebaseServerApp;
120123

124+
// @internal (undocumented)
125+
export function _isFirebaseServerAppSettings(obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings): obj is FirebaseServerAppSettings;
126+
121127
// @public
122128
export function onLog(logCallback: LogCallback | null, options?: LogOptions): void;
123129

docs-devsite/app.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ This package coordinates the communication between the different Firebase compon
2323
| <b>function()</b> |
2424
| [getApps()](./app.md#getapps) | A (read-only) array of all initialized apps. |
2525
| [initializeApp()](./app.md#initializeapp) | Creates and initializes a FirebaseApp instance. |
26+
| <b>function(\_serverAppConfig, ...)</b> |
27+
| [initializeServerApp(\_serverAppConfig)](./app.md#initializeserverapp_b13f0eb) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. |
2628
| <b>function(libraryKeyOrName, ...)</b> |
2729
| [registerVersion(libraryKeyOrName, version, variant)](./app.md#registerversion_f673248) | Registers a library's name and version for platform logging purposes. |
2830
| <b>function(logCallback, ...)</b> |
@@ -116,6 +118,30 @@ export declare function initializeApp(): FirebaseApp;
116118

117119
[FirebaseApp](./app.firebaseapp.md#firebaseapp_interface)
118120

121+
## function(\_serverAppConfig, ...)
122+
123+
### initializeServerApp(\_serverAppConfig) {:#initializeserverapp_b13f0eb}
124+
125+
Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance.
126+
127+
<b>Signature:</b>
128+
129+
```typescript
130+
export declare function initializeServerApp(_serverAppConfig?: FirebaseServerAppSettings): FirebaseServerApp;
131+
```
132+
133+
#### Parameters
134+
135+
| Parameter | Type | Description |
136+
| --- | --- | --- |
137+
| \_serverAppConfig | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | |
138+
139+
<b>Returns:</b>
140+
141+
[FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface)
142+
143+
The initialized `FirebaseServerApp` with default app configuration.
144+
119145
## function(libraryKeyOrName, ...)
120146

121147
### registerVersion(libraryKeyOrName, version, variant) {:#registerversion_f673248}

packages/app/src/api.ts

Lines changed: 58 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
_apps,
3838
_components,
3939
_isFirebaseApp,
40+
_isFirebaseServerAppSettings,
4041
_registerComponent,
4142
_serverApps
4243
} from './internal';
@@ -231,32 +232,74 @@ export function initializeServerApp(
231232
config: FirebaseServerAppSettings
232233
): FirebaseServerApp;
233234

235+
/**
236+
* Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance.
237+
*
238+
* @param config - Optional `FirebaseServerApp` configuration.
239+
*
240+
* @returns The initialized `FirebaseServerApp` with default app configuration.
241+
*
242+
* @public
243+
*/
234244
export function initializeServerApp(
235-
_options: FirebaseOptions | FirebaseApp,
236-
_serverAppConfig: FirebaseServerAppSettings
245+
_serverAppConfig?: FirebaseServerAppSettings
246+
): FirebaseServerApp;
247+
248+
export function initializeServerApp(
249+
_options?: FirebaseApp | FirebaseServerAppSettings | FirebaseOptions,
250+
_serverAppConfig: FirebaseServerAppSettings = {}
237251
): FirebaseServerApp {
238252
if (isBrowser() && !isWebWorker()) {
239253
// FirebaseServerApp isn't designed to be run in browsers.
240254
throw ERROR_FACTORY.create(AppError.INVALID_SERVER_APP_ENVIRONMENT);
241255
}
242256

243-
if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {
244-
_serverAppConfig.automaticDataCollectionEnabled = true;
257+
let app: FirebaseApp;
258+
let firebaseOptions: FirebaseOptions | undefined;
259+
//let serverAppSettings: FirebaseServerAppSettings = _serverAppConfig || { };
260+
let serverAppSettings: FirebaseServerAppSettings = _serverAppConfig || {};
261+
262+
console.log('options: ', _options);
263+
console.log('_serverAppConfig: ', _serverAppConfig);
264+
265+
if (_options) {
266+
if (_isFirebaseApp(_options)) {
267+
console.log('_isFirebaseApp');
268+
app = _options;
269+
firebaseOptions = app.options;
270+
/*serverAppSettings = {
271+
...serverAppSettings,
272+
..._serverAppConfig
273+
};*/
274+
} else if (_isFirebaseServerAppSettings(_options)) {
275+
console.log('_isFirebaseServerAppSettings');
276+
serverAppSettings = _options;
277+
/*serverAppSettings = {
278+
...serverAppSettings,
279+
..._options
280+
};*/
281+
} else {
282+
console.log('isFirebaseOptions');
283+
firebaseOptions = _options;
284+
}
245285
}
246286

247-
let appOptions: FirebaseOptions;
248-
if (_isFirebaseApp(_options)) {
249-
appOptions = _options.options;
250-
} else {
251-
appOptions = _options;
287+
firebaseOptions ||= getDefaultAppConfig();
288+
if (!firebaseOptions) {
289+
throw ERROR_FACTORY.create(AppError.NO_OPTIONS);
252290
}
253291

254292
// Build an app name based on a hash of the configuration options.
255293
const nameObj = {
256-
..._serverAppConfig,
257-
...appOptions
294+
...serverAppSettings,
295+
...firebaseOptions
258296
};
259297

298+
console.log('Final:');
299+
console.log('app: ', app!);
300+
console.log('firebaseOptions: ', firebaseOptions);
301+
console.log('serverAppSettings: ', serverAppSettings);
302+
260303
// However, Do not mangle the name based on releaseOnDeref, since it will vary between the
261304
// construction of FirebaseServerApp instances. For example, if the object is the request headers.
262305
if (nameObj.releaseOnDeref !== undefined) {
@@ -270,7 +313,7 @@ export function initializeServerApp(
270313
);
271314
};
272315

273-
if (_serverAppConfig.releaseOnDeref !== undefined) {
316+
if (serverAppSettings.releaseOnDeref !== undefined) {
274317
if (typeof FinalizationRegistry === 'undefined') {
275318
throw ERROR_FACTORY.create(
276319
AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED,
@@ -283,7 +326,7 @@ export function initializeServerApp(
283326
const existingApp = _serverApps.get(nameString) as FirebaseServerApp;
284327
if (existingApp) {
285328
(existingApp as FirebaseServerAppImpl).incRefCount(
286-
_serverAppConfig.releaseOnDeref
329+
serverAppSettings.releaseOnDeref
287330
);
288331
return existingApp;
289332
}
@@ -294,8 +337,8 @@ export function initializeServerApp(
294337
}
295338

296339
const newApp = new FirebaseServerAppImpl(
297-
appOptions,
298-
_serverAppConfig,
340+
firebaseOptions,
341+
serverAppSettings,
299342
nameString,
300343
container
301344
);

packages/app/src/internal.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
import {
1919
FirebaseApp,
20+
FirebaseAppSettings,
21+
FirebaseServerAppSettings,
2022
FirebaseOptions,
2123
FirebaseServerApp
2224
} from './public-types';
@@ -147,18 +149,40 @@ export function _removeServiceInstance<T extends Name>(
147149

148150
/**
149151
*
150-
* @param obj - an object of type FirebaseApp or FirebaseOptions.
152+
* @param obj - an object of type FirebaseApp, FirebaseOptions or FirebaseAppSettings.
151153
*
152154
* @returns true if the provide object is of type FirebaseApp.
153155
*
154156
* @internal
155157
*/
156158
export function _isFirebaseApp(
157-
obj: FirebaseApp | FirebaseOptions
159+
obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings
158160
): obj is FirebaseApp {
159161
return (obj as FirebaseApp).options !== undefined;
160162
}
161163

164+
/**
165+
*
166+
* @param obj - an object of type FirebaseApp, FirebaseOptions or FirebaseAppSettings.
167+
*
168+
* @returns true if the provided object is of type FirebaseServerAppImpl.
169+
*
170+
* @internal
171+
*/
172+
export function _isFirebaseServerAppSettings(
173+
obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings
174+
): obj is FirebaseServerAppSettings {
175+
if (_isFirebaseApp(obj)) {
176+
return false;
177+
}
178+
return (
179+
'authIdToken' in obj ||
180+
'appCheckToken' in obj ||
181+
'releaseOnDeref' in obj ||
182+
'automaticDataCollectionEnabled' in obj
183+
);
184+
}
185+
162186
/**
163187
*
164188
* @param obj - an object of type FirebaseApp.

0 commit comments

Comments
 (0)