Skip to content

Commit 7632da1

Browse files
committed
[js][internals] internals re-write to generalise app()/ModuleBase arguments - now uses customUrlOrRegion - meaning support for custom functions() regions, custom database() shard urls and custom storage() bucket urls internally use the same logic
1 parent 098edb3 commit 7632da1

File tree

21 files changed

+104
-70
lines changed

21 files changed

+104
-70
lines changed

src/modules/admob/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ export default class AdMob extends ModuleBase {
4141
super(app, {
4242
events: NATIVE_EVENTS,
4343
moduleName: MODULE_NAME,
44-
multiApp: false,
45-
hasShards: false,
44+
hasMultiAppSupport: false,
45+
hasCustomUrlSupport: false,
4646
namespace: NAMESPACE,
4747
});
4848

src/modules/analytics/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ export default class Analytics extends ModuleBase {
3333
constructor(app: App) {
3434
super(app, {
3535
moduleName: MODULE_NAME,
36-
multiApp: false,
37-
hasShards: false,
36+
hasMultiAppSupport: false,
37+
hasCustomUrlSupport: false,
3838
namespace: NAMESPACE,
3939
});
4040
}

src/modules/auth/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ export default class Auth extends ModuleBase {
5555
super(app, {
5656
events: NATIVE_EVENTS,
5757
moduleName: MODULE_NAME,
58-
multiApp: true,
59-
hasShards: false,
58+
hasMultiAppSupport: true,
59+
hasCustomUrlSupport: false,
6060
namespace: NAMESPACE,
6161
});
6262
this._user = null;

src/modules/config/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ export default class RemoteConfig extends ModuleBase {
3636
constructor(app: App) {
3737
super(app, {
3838
moduleName: MODULE_NAME,
39-
multiApp: false,
40-
hasShards: false,
39+
hasMultiAppSupport: false,
40+
hasCustomUrlSupport: false,
4141
namespace: NAMESPACE,
4242
});
4343
this._developerModeEnabled = false;

src/modules/crashlytics/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export default class Crashlytics extends ModuleBase {
1414
constructor(app: App) {
1515
super(app, {
1616
moduleName: MODULE_NAME,
17-
multiApp: false,
18-
hasShards: false,
17+
hasMultiAppSupport: false,
18+
hasCustomUrlSupport: false,
1919
namespace: NAMESPACE,
2020
});
2121
}

src/modules/database/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ export default class Database extends ModuleBase {
4848
{
4949
events: NATIVE_EVENTS,
5050
moduleName: MODULE_NAME,
51-
multiApp: true,
52-
hasShards: true,
51+
hasMultiAppSupport: true,
52+
hasCustomUrlSupport: true,
5353
namespace: NAMESPACE,
5454
},
5555
serviceUrl

src/modules/firestore/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ export default class Firestore extends ModuleBase {
6969
super(app, {
7070
events: NATIVE_EVENTS,
7171
moduleName: MODULE_NAME,
72-
multiApp: true,
73-
hasShards: false,
72+
hasMultiAppSupport: true,
73+
hasCustomUrlSupport: false,
7474
namespace: NAMESPACE,
7575
});
7676

src/modules/iid/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ export const MODULE_NAME = 'RNFirebaseInstanceId';
1313
export default class InstanceId extends ModuleBase {
1414
constructor(app: App) {
1515
super(app, {
16-
hasShards: false,
16+
hasCustomUrlSupport: false,
1717
moduleName: MODULE_NAME,
18-
multiApp: false,
18+
hasMultiAppSupport: false,
1919
namespace: NAMESPACE,
2020
});
2121
}

src/modules/invites/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ export default class Invites extends ModuleBase {
2424
constructor(app: App) {
2525
super(app, {
2626
events: NATIVE_EVENTS,
27-
hasShards: false,
27+
hasCustomUrlSupport: false,
2828
moduleName: MODULE_NAME,
29-
multiApp: false,
29+
hasMultiAppSupport: false,
3030
namespace: NAMESPACE,
3131
});
3232

src/modules/links/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export default class Links extends ModuleBase {
2424
super(app, {
2525
events: NATIVE_EVENTS,
2626
moduleName: MODULE_NAME,
27-
multiApp: false,
28-
hasShards: false,
27+
hasMultiAppSupport: false,
28+
hasCustomUrlSupport: false,
2929
namespace: NAMESPACE,
3030
});
3131

src/modules/messaging/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ export default class Messaging extends ModuleBase {
4242
super(app, {
4343
events: NATIVE_EVENTS,
4444
moduleName: MODULE_NAME,
45-
multiApp: false,
46-
hasShards: false,
45+
hasMultiAppSupport: false,
46+
hasCustomUrlSupport: false,
4747
namespace: NAMESPACE,
4848
});
4949

src/modules/notifications/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ export default class Notifications extends ModuleBase {
7777
constructor(app: App) {
7878
super(app, {
7979
events: NATIVE_EVENTS,
80-
hasShards: false,
80+
hasCustomUrlSupport: false,
8181
moduleName: MODULE_NAME,
82-
multiApp: false,
82+
hasMultiAppSupport: false,
8383
namespace: NAMESPACE,
8484
});
8585
this._android = new AndroidNotifications(this);

src/modules/perf/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ export default class PerformanceMonitoring extends ModuleBase {
3939
constructor(app: App) {
4040
super(app, {
4141
moduleName: MODULE_NAME,
42-
multiApp: false,
43-
hasShards: false,
42+
hasMultiAppSupport: false,
43+
hasCustomUrlSupport: false,
4444
namespace: NAMESPACE,
4545
});
4646
}

src/modules/storage/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ export default class Storage extends ModuleBase {
3030
super(app, {
3131
events: NATIVE_EVENTS,
3232
moduleName: MODULE_NAME,
33-
multiApp: true,
34-
hasShards: false,
33+
hasMultiAppSupport: true,
34+
hasCustomUrlSupport: false,
3535
namespace: NAMESPACE,
3636
});
3737

src/modules/utils/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ export default class RNFirebaseUtils extends ModuleBase {
2222
constructor(app: App) {
2323
super(app, {
2424
moduleName: MODULE_NAME,
25-
multiApp: false,
26-
hasShards: false,
25+
hasMultiAppSupport: false,
26+
hasCustomUrlSupport: false,
2727
namespace: NAMESPACE,
2828
});
2929
}

src/types/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ export type FirebaseModule = $Subtype<ModuleBase>;
4949
export type FirebaseModuleConfig = {
5050
events?: string[],
5151
moduleName: FirebaseModuleName,
52-
multiApp: boolean,
53-
hasShards: boolean,
52+
hasMultiAppSupport: boolean,
53+
hasCustomUrlSupport: boolean,
54+
hasRegionsSupport: boolean,
5455
namespace: FirebaseNamespace,
5556
};
5657

src/utils/ModuleBase.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,37 @@ import type { FirebaseModuleConfig, FirebaseNamespace } from '../types';
1010
export default class ModuleBase {
1111
_app: App;
1212

13-
_serviceUrl: ?string;
13+
_customUrlOrRegion: ?string;
1414

1515
namespace: FirebaseNamespace;
1616

1717
/**
1818
*
1919
* @param app
2020
* @param config
21+
* @param customUrlOrRegion
2122
*/
22-
constructor(app: App, config: FirebaseModuleConfig, serviceUrl: ?string) {
23+
constructor(
24+
app: App,
25+
config: FirebaseModuleConfig,
26+
customUrlOrRegion: ?string
27+
) {
2328
if (!config.moduleName) {
2429
throw new Error('Missing module name');
2530
}
31+
2632
if (!config.namespace) {
2733
throw new Error('Missing namespace');
2834
}
35+
2936
const { moduleName } = config;
3037
this._app = app;
31-
this._serviceUrl = serviceUrl;
38+
this._customUrlOrRegion = customUrlOrRegion;
3239
this.namespace = config.namespace;
3340

3441
// check if native module exists as all native
35-
initialiseNativeModule(this, config, serviceUrl);
42+
initialiseNativeModule(this, config, customUrlOrRegion);
43+
3644
initialiseLogger(
3745
this,
3846
`${app.name}:${moduleName.replace('RNFirebase', '')}`

src/utils/apps.js

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -49,38 +49,50 @@ export default {
4949
namespace: FirebaseNamespace,
5050
InstanceClass: Class<M>
5151
): () => FirebaseModule {
52-
return (serviceUrl: ?string = null): M => {
53-
if (serviceUrl && namespace !== 'database') {
52+
return (customUrlOrRegion: ?string = null): M => {
53+
if (
54+
customUrlOrRegion &&
55+
(namespace !== 'database' || namespace !== 'functions')
56+
) {
5457
throw new Error(
55-
INTERNALS.STRINGS.ERROR_INIT_SERVICE_URL_UNSUPPORTED(namespace)
58+
INTERNALS.STRINGS.ERROR_INIT_SERVICE_URL_OR_REGION_UNSUPPORTED(
59+
namespace
60+
)
5661
);
5762
}
5863

59-
const appOrShardName = serviceUrl || app.name;
60-
if (!APP_MODULES[appOrShardName]) {
61-
APP_MODULES[appOrShardName] = {};
62-
}
64+
const appInstanceIdentifier = `${app.name}${customUrlOrRegion || ''}`;
6365

64-
if (
65-
isAndroid &&
66-
namespace !== 'utils' &&
67-
!INTERNALS.FLAGS.checkedPlayServices
68-
) {
69-
INTERNALS.FLAGS.checkedPlayServices = true;
70-
app.utils().checkPlayServicesAvailability();
66+
if (!APP_MODULES[appInstanceIdentifier]) {
67+
APP_MODULES[appInstanceIdentifier] = {};
7168
}
7269

73-
if (!APP_MODULES[appOrShardName][namespace]) {
74-
APP_MODULES[appOrShardName][namespace] = new InstanceClass(
75-
serviceUrl || app,
70+
if (!APP_MODULES[appInstanceIdentifier][namespace]) {
71+
APP_MODULES[appInstanceIdentifier][namespace] = new InstanceClass(
72+
customUrlOrRegion || app,
7673
app.options
7774
);
75+
76+
// only check once on new app namespace instance
77+
if (
78+
isAndroid &&
79+
namespace !== 'utils' &&
80+
!INTERNALS.FLAGS.checkedPlayServices
81+
) {
82+
INTERNALS.FLAGS.checkedPlayServices = true;
83+
app.utils().checkPlayServicesAvailability();
84+
}
7885
}
7986

80-
return APP_MODULES[appOrShardName][namespace];
87+
return APP_MODULES[appInstanceIdentifier][namespace];
8188
};
8289
},
8390

91+
/**
92+
*
93+
* @param name
94+
* @returns {*}
95+
*/
8496
deleteApp(name: string): Promise<boolean> {
8597
const app = APPS[name];
8698
if (!app) return Promise.resolve(true);
@@ -173,24 +185,31 @@ export default {
173185
statics: S,
174186
moduleName: FirebaseModuleName
175187
): FirebaseModuleAndStatics<M, S> {
176-
const getModule = (appOrUrl?: App | string): FirebaseModule => {
177-
let _app = appOrUrl;
178-
let _serviceUrl: ?string = null;
179-
if (typeof appOrUrl === 'string' && namespace === 'database') {
188+
const getModule = (appOrUrlOrRegion?: App | string): FirebaseModule => {
189+
let _app = appOrUrlOrRegion;
190+
let _customUrlOrRegion: ?string = null;
191+
192+
if (typeof appOrUrlOrRegion === 'string' && namespace === 'database') {
180193
_app = null;
181-
_serviceUrl = appOrUrl;
194+
_customUrlOrRegion = appOrUrlOrRegion;
195+
}
196+
197+
if (typeof appOrUrlOrRegion === 'string' && namespace === 'functions') {
198+
_app = null;
199+
_customUrlOrRegion = appOrUrlOrRegion;
182200
}
183201

184202
// throw an error if it's not a valid app instance
185-
if (_app && !(_app instanceof App))
203+
if (_app && !(_app instanceof App)) {
186204
throw new Error(INTERNALS.STRINGS.ERROR_NOT_APP(namespace));
187-
else if (!_app)
205+
} else if (!_app) {
188206
// default to the 'DEFAULT' app if no arg provided - will throw an error
189207
// if default app not initialized
190208
_app = this.app(DEFAULT_APP_NAME);
209+
}
191210
// $FlowExpectedError: Flow doesn't support indexable signatures on classes: https://github.com/facebook/flow/issues/1323
192211
const module = _app[namespace];
193-
return module(_serviceUrl);
212+
return module(_customUrlOrRegion);
194213
};
195214

196215
return Object.assign(getModule, statics, {

src/utils/events.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ const getNativeEmitter = (
2323
): NativeEventEmitter => {
2424
const name = `${module.app.name}-${moduleName}`;
2525
const nativeModule = NativeModules[moduleName];
26+
2627
if (!NATIVE_EMITTERS[name]) {
2728
NATIVE_EMITTERS[name] = new NativeEventEmitter(nativeModule);
2829
}
30+
2931
return NATIVE_EMITTERS[name];
3032
};
3133

@@ -35,6 +37,7 @@ const getNativeEmitter = (
3537
* so we use a single event send it to js and js then internally can prefix it
3638
* and distribute dynamically.
3739
*
40+
* @param moduleName
3841
* @param module
3942
* @param eventName
4043
* @private
@@ -65,6 +68,7 @@ export const initialiseNativeModuleEventEmitter = (
6568
config: FirebaseModuleConfig
6669
): void => {
6770
const { events, moduleName } = config;
71+
6872
if (events && events.length) {
6973
for (let i = 0, len = events.length; i < len; i++) {
7074
subscribeToNativeModuleEvents(moduleName, module, events[i]);

src/utils/internals.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ export default {
100100
/**
101101
* @return {string}
102102
*/
103-
ERROR_INIT_SERVICE_URL_UNSUPPORTED(namespace: string) {
104-
return `${namespace} does not support URL as a param, please pass in an app.`;
103+
ERROR_INIT_SERVICE_URL_OR_REGION_UNSUPPORTED(namespace: string) {
104+
return `${namespace} does not support a URL or region as a param, please pass in an app.`;
105105
},
106106

107107
/**

0 commit comments

Comments
 (0)