Skip to content

Commit af26847

Browse files
committed
Merge branch 'master' into release
2 parents ba4dd56 + 4091720 commit af26847

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2077
-1260
lines changed

.changeset/blue-hairs-scream.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@firebase/firestore': patch
3+
---
4+
5+
Added a warning message when the host settings are overridden without `{merge: true}`.

.changeset/rotten-wombats-shop.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@firebase/database': patch
3+
---
4+
5+
Fix `index not defined` errors for orderByChild get requests

.github/CODEOWNERS

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,11 @@ packages/remote-config @erikeldridge @firebase/jssdk-global-approvers
8282
packages/remote-config-types @erikeldridge @firebase/jssdk-global-approvers
8383

8484
# Documentation Changes
85-
packages/firebase/index.d.ts @firebase/firebase-techwriters @firebase/jssdk-global-approvers
86-
scripts/docgen/content-sources/ @firebase/firebase-techwriters @firebase/jssdk-global-approvers
85+
packages/firebase/index.d.ts @egilmorez @firebase/jssdk-global-approvers
86+
scripts/docgen/content-sources/ @egilmorez @firebase/jssdk-global-approvers
8787

8888
# Changeset
89-
.changeset @firebase/firebase-techwriters @firebase/jssdk-changeset-approvers @firebase/firestore-js-team @firebase/jssdk-global-approvers
89+
.changeset @egilmorez @firebase/jssdk-changeset-approvers @firebase/firestore-js-team @firebase/jssdk-global-approvers
9090

9191
# Auth-Exp Code
9292
packages-exp/auth-exp @avolkovi @sam-gc @yuchenshi @firebase/jssdk-global-approvers

common/api-review/messaging-exp.api.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,6 @@ export interface NotificationPayload {
5959

6060
export { Observer }
6161

62-
// Warning: (ae-internal-missing-underscore) The name "onBackgroundMessage" should be prefixed with an underscore because the declaration is marked as @internal
63-
//
64-
// @internal
65-
export function onBackgroundMessage(messaging: FirebaseMessaging, nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>): Unsubscribe;
66-
6762
// @public
6863
export function onMessage(messaging: FirebaseMessaging, nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>): Unsubscribe;
6964

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@
5454
"docgen:exp": "ts-node-script scripts/exp/docgen.ts",
5555
"postinstall": "yarn --cwd repo-scripts/changelog-generator build",
5656
"sa": "ts-node-script repo-scripts/size-analysis/cli.ts",
57-
"api-documenter-devsite": "ts-node-script repo-scripts/api-documenter/src/start.ts",
58-
"toc-devsite": "ts-node-script scripts/exp/generate-devsite-toc.ts -i temp"
57+
"api-documenter-devsite": "ts-node-script repo-scripts/api-documenter/src/start.ts"
5958
},
6059
"repository": {
6160
"type": "git",
@@ -77,7 +76,7 @@
7776
"@types/chai-as-promised": "7.1.3",
7877
"@types/child-process-promise": "2.2.1",
7978
"@types/clone": "2.1.0",
80-
"@types/eslint": "7.2.6",
79+
"@types/eslint": "7.2.10",
8180
"@types/inquirer": "7.3.1",
8281
"@types/listr": "0.14.2",
8382
"@types/long": "4.0.1",
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@firebase/auth-exp/cordova",
3+
"description": "A Cordova-specific build of the Firebase Auth JS SDK",
4+
"browser": "../dist/cordova/index.js",
5+
"typings": "../dist/cordova/index.cordova.d.ts"
6+
}

packages-exp/auth-exp/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
"webworker": "dist/index.webworker.esm5.js",
1313
"files": [
1414
"dist",
15-
"internal/package.json"
15+
"cordova/package.json",
16+
"internal/package.json",
17+
"react-native/package.json"
1618
],
1719
"scripts": {
1820
"lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'",
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "@firebase/auth-exp/react-native",
3+
"description": "A React Native-specific build of the Firebase Auth JS SDK",
4+
"browser": "../dist/rn/index.js",
5+
"typings": "../dist/rn/index.rn.d.ts"
6+
}

packages-exp/messaging-compat/src/messaging-compat.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ import {
2424
MessagePayload,
2525
deleteToken,
2626
getToken,
27-
onBackgroundMessage,
2827
onMessage
2928
} from '@firebase/messaging-exp';
3029
import { NextFn, Observer, Unsubscribe } from '@firebase/util';
3130

31+
import { onBackgroundMessage } from '@firebase/messaging-exp/sw';
32+
3233
export interface MessagingCompat {
3334
getToken(options?: {
3435
vapidKey?: string;
@@ -88,19 +89,6 @@ function isSwSupported(): boolean {
8889
}
8990

9091
export class MessagingCompatImpl implements MessagingCompat, _FirebaseService {
91-
swRegistration?: ServiceWorkerRegistration;
92-
vapidKey?: string;
93-
94-
onBackgroundMessageHandler:
95-
| NextFn<MessagePayload>
96-
| Observer<MessagePayload>
97-
| null = null;
98-
99-
onMessageHandler:
100-
| NextFn<MessagePayload>
101-
| Observer<MessagePayload>
102-
| null = null;
103-
10492
constructor(readonly app: AppCompat, readonly _delegate: FirebaseMessaging) {
10593
this.app = app;
10694
this._delegate = _delegate;

packages-exp/messaging-compat/src/registerMessagingCompat.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
InstanceFactory
2323
} from '@firebase/component';
2424
import firebase, { _FirebaseNamespace } from '@firebase/app-compat';
25+
2526
import { MessagingCompatImpl } from './messaging-compat';
2627

2728
declare module '@firebase/component' {
@@ -33,10 +34,19 @@ declare module '@firebase/component' {
3334
const messagingCompatFactory: InstanceFactory<'messaging-compat'> = (
3435
container: ComponentContainer
3536
) => {
36-
return new MessagingCompatImpl(
37-
container.getProvider('app-compat').getImmediate(),
38-
container.getProvider('messaging-exp').getImmediate()
39-
);
37+
if (!!navigator) {
38+
// in window
39+
return new MessagingCompatImpl(
40+
container.getProvider('app-compat').getImmediate(),
41+
container.getProvider('messaging-exp').getImmediate()
42+
);
43+
} else {
44+
// in sw
45+
return new MessagingCompatImpl(
46+
container.getProvider('app-compat').getImmediate(),
47+
container.getProvider('messaging-sw-exp').getImmediate()
48+
);
49+
}
4050
};
4151

4252
export function registerMessagingCompat(): void {

packages-exp/messaging-compat/test/messaging-compat.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
import * as messagingModule from '@firebase/messaging-exp';
19+
import * as messagingModuleInSw from '@firebase/messaging-exp/sw';
1920

2021
import { getFakeApp, getFakeModularMessaging } from './fakes';
2122

@@ -33,7 +34,10 @@ describe('messagingCompat', () => {
3334
const getTokenStub = stub(messagingModule, 'getToken');
3435
const deleteTokenStub = stub(messagingModule, 'deleteToken');
3536
const onMessageStub = stub(messagingModule, 'onMessage');
36-
const onBackgroundMessageStub = stub(messagingModule, 'onBackgroundMessage');
37+
const onBackgroundMessageStub = stub(
38+
messagingModuleInSw,
39+
'onBackgroundMessage'
40+
);
3741

3842
it('routes messagingCompat.getToken to modular SDK', () => {
3943
void messagingCompat.getToken();

packages-exp/messaging-exp/src/api.ts

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,12 @@ import {
2323
Unsubscribe,
2424
getModularInstance
2525
} from '@firebase/util';
26-
import {
27-
onNotificationClick,
28-
onPush,
29-
onSubChange
30-
} from './listeners/sw-listeners';
3126

3227
import { MessagingService } from './messaging-service';
33-
import { Provider } from '@firebase/component';
34-
import { ServiceWorkerGlobalScope } from './util/sw-types';
3528
import { deleteToken as _deleteToken } from './api/deleteToken';
3629
import { getToken as _getToken } from './api/getToken';
3730
import { onBackgroundMessage as _onBackgroundMessage } from './api/onBackgroundMessage';
3831
import { onMessage as _onMessage } from './api/onMessage';
39-
import { messageEventListener } from './listeners/window-listener';
4032

4133
/**
4234
* Retrieves a Firebase Cloud Messaging instance.
@@ -48,45 +40,23 @@ import { messageEventListener } from './listeners/window-listener';
4840
export function getMessagingInWindow(
4941
app: FirebaseApp = getApp()
5042
): FirebaseMessaging {
51-
app = getModularInstance(app);
52-
const messagingProvider: Provider<'messaging-exp'> = _getProvider(
53-
app,
54-
'messaging-exp'
55-
);
56-
const messaging = messagingProvider.getImmediate();
57-
58-
navigator.serviceWorker.addEventListener('message', e =>
59-
messageEventListener(messaging as MessagingService, e)
60-
);
61-
62-
return messaging;
43+
return _getProvider(getModularInstance(app), 'messaging-exp').getImmediate();
6344
}
6445

6546
/**
66-
* Retrieves a firebase messaging instance.
47+
* Retrieves a Firebase Cloud Messaging instance.
6748
*
68-
* @returns the firebase messaging instance associated with the provided firebase app.
49+
* @returns The Firebase Cloud Messaging instance associated with the provided firebase app.
6950
*
51+
* @public
7052
*/
71-
declare const self: ServiceWorkerGlobalScope;
72-
export function getMessagingInSw(app: FirebaseApp): FirebaseMessaging {
73-
const messagingProvider: Provider<'messaging-exp'> = _getProvider(
74-
app,
75-
'messaging-exp'
76-
);
77-
const messaging = messagingProvider.getImmediate();
78-
79-
self.addEventListener('push', e => {
80-
e.waitUntil(onPush(e, messaging as MessagingService));
81-
});
82-
self.addEventListener('pushsubscriptionchange', e => {
83-
e.waitUntil(onSubChange(e, messaging as MessagingService));
84-
});
85-
self.addEventListener('notificationclick', e => {
86-
e.waitUntil(onNotificationClick(e));
87-
});
88-
89-
return messagingProvider.getImmediate();
53+
export function getMessagingInSw(
54+
app: FirebaseApp = getApp()
55+
): FirebaseMessaging {
56+
return _getProvider(
57+
getModularInstance(app),
58+
'messaging-sw-exp'
59+
).getImmediate();
9060
}
9161

9262
/**
@@ -172,8 +142,7 @@ export function onMessage(
172142
*
173143
* @returns To stop listening for messages execute this returned function
174144
*
175-
* make it internal to hide it from the browser entry point.
176-
* @internal
145+
* @public
177146
*/
178147
export function onBackgroundMessage(
179148
messaging: FirebaseMessaging,

packages-exp/messaging-exp/src/helpers/register.ts

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,16 @@ import {
2323
} from '@firebase/component';
2424
import { ERROR_FACTORY, ErrorCode } from '../util/errors';
2525
import { isSwSupported, isWindowSupported } from '../api/isSupported';
26+
import {
27+
onNotificationClick,
28+
onPush,
29+
onSubChange
30+
} from '../listeners/sw-listeners';
2631

2732
import { MessagingService } from '../messaging-service';
33+
import { ServiceWorkerGlobalScope } from '../util/sw-types';
2834
import { _registerComponent } from '@firebase/app-exp';
35+
import { messageEventListener } from '../listeners/window-listener';
2936

3037
const WindowMessagingFactory: InstanceFactory<'messaging-exp'> = (
3138
container: ComponentContainer
@@ -44,13 +51,20 @@ const WindowMessagingFactory: InstanceFactory<'messaging-exp'> = (
4451
throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);
4552
});
4653

47-
return new MessagingService(
54+
const messaging = new MessagingService(
4855
container.getProvider('app-exp').getImmediate(),
4956
container.getProvider('installations-exp-internal').getImmediate(),
5057
container.getProvider('analytics-internal')
5158
);
59+
60+
navigator.serviceWorker.addEventListener('message', e =>
61+
messageEventListener(messaging as MessagingService, e)
62+
);
63+
64+
return messaging;
5265
};
5366

67+
declare const self: ServiceWorkerGlobalScope;
5468
const SwMessagingFactory: InstanceFactory<'messaging-exp'> = (
5569
container: ComponentContainer
5670
) => {
@@ -68,11 +82,23 @@ const SwMessagingFactory: InstanceFactory<'messaging-exp'> = (
6882
throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);
6983
});
7084

71-
return new MessagingService(
85+
const messaging = new MessagingService(
7286
container.getProvider('app-exp').getImmediate(),
7387
container.getProvider('installations-exp-internal').getImmediate(),
7488
container.getProvider('analytics-internal')
7589
);
90+
91+
self.addEventListener('push', e => {
92+
e.waitUntil(onPush(e, messaging as MessagingService));
93+
});
94+
self.addEventListener('pushsubscriptionchange', e => {
95+
e.waitUntil(onSubChange(e, messaging as MessagingService));
96+
});
97+
self.addEventListener('notificationclick', e => {
98+
e.waitUntil(onNotificationClick(e));
99+
});
100+
101+
return messaging;
76102
};
77103

78104
export function registerMessagingInWindow(): void {
@@ -81,8 +107,13 @@ export function registerMessagingInWindow(): void {
81107
);
82108
}
83109

110+
/**
111+
* The messaging instance registered in sw is named differently than that of in client. This is
112+
* because both `registerMessagingInWindow` and `registerMessagingInSw` would be called in
113+
* `messaging-compat` and component with the same name can only be registered once.
114+
*/
84115
export function registerMessagingInSw(): void {
85116
_registerComponent(
86-
new Component('messaging-exp', SwMessagingFactory, ComponentType.PUBLIC)
117+
new Component('messaging-sw-exp', SwMessagingFactory, ComponentType.PUBLIC)
87118
);
88119
}

packages-exp/messaging-exp/src/index.sw.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export { isSwSupported as isSupported } from './api/isSupported';
2525

2626
declare module '@firebase/component' {
2727
interface NameServiceMapping {
28-
'messaging-exp': FirebaseMessaging;
28+
'messaging-sw-exp': FirebaseMessaging;
2929
}
3030
}
3131

packages-exp/messaging-exp/src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ export {
3030
getToken,
3131
deleteToken,
3232
onMessage,
33-
getMessagingInWindow as getMessaging,
34-
onBackgroundMessage
33+
getMessagingInWindow as getMessaging
3534
} from './api';
3635
export { isWindowSupported as isSupported } from './api/isSupported';
3736
export * from './interfaces/public-types';

packages/database/src/core/Repo.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,9 @@ export function repoGetValue(repo: Repo, query: QueryContext): Promise<Node> {
466466
}
467467
return repo.server_.get(query).then(
468468
payload => {
469-
const node = nodeFromJSON(payload as string);
469+
const node = nodeFromJSON(payload as string).withIndex(
470+
query._queryParams.getIndex()
471+
);
470472
const events = syncTreeApplyServerOverwrite(
471473
repo.serverSyncTree_,
472474
query._path,

packages/firestore/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"@firebase/logger": "0.2.6",
7272
"@firebase/util": "1.1.0",
7373
"@firebase/webchannel-wrapper": "0.4.1",
74-
"@grpc/grpc-js": "^1.0.0",
74+
"@grpc/grpc-js": "^1.3.2",
7575
"@grpc/proto-loader": "^0.5.0",
7676
"node-fetch": "2.6.1",
7777
"tslib": "^2.1.0"
@@ -85,7 +85,7 @@
8585
"@rollup/plugin-alias": "3.1.1",
8686
"@rollup/plugin-json": "4.1.0",
8787
"@rollup/plugin-node-resolve": "11.2.0",
88-
"@types/eslint": "7.2.6",
88+
"@types/eslint": "7.2.10",
8989
"@types/json-stable-stringify": "1.0.32",
9090
"json-stable-stringify": "1.0.1",
9191
"protobufjs": "6.10.2",

0 commit comments

Comments
 (0)