Skip to content

Commit 0fa52a5

Browse files
Use fetch() in v9 Firestore
1 parent cc2132c commit 0fa52a5

File tree

12 files changed

+69
-68
lines changed

12 files changed

+69
-68
lines changed

packages/firestore/exp/register.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { name, version } from '../package.json';
2626
import { setSDKVersion } from '../src/core/version';
2727
import { FirebaseFirestore } from '../src/exp/database';
2828
import { Settings } from '../src/exp/settings';
29+
import { PrivateSettings } from '../src/lite/settings';
2930

3031
declare module '@firebase/component' {
3132
interface NameServiceMapping {
@@ -38,15 +39,14 @@ export function registerFirestore(variant?: string): void {
3839
_registerComponent(
3940
new Component(
4041
'firestore-exp',
41-
(container, { options: settings }: { options?: Settings }) => {
42+
(container, { options: settings }: { options?: PrivateSettings }) => {
4243
const app = container.getProvider('app-exp').getImmediate()!;
4344
const firestoreInstance = new FirebaseFirestore(
4445
app,
4546
container.getProvider('auth-internal')
4647
);
47-
if (settings) {
48-
firestoreInstance._setSettings(settings);
49-
}
48+
settings = { useFetchStreams: true, ...settings };
49+
firestoreInstance._setSettings(settings);
5050
return firestoreInstance;
5151
},
5252
ComponentType.PUBLIC

packages/firestore/rollup.config.exp.js

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ const browserPlugins = function () {
7777
]
7878
}),
7979
json({ preferConst: true }),
80-
terser(util.manglePrivatePropertiesOptions)
80+
terser()
8181
];
8282
};
8383

@@ -97,20 +97,6 @@ const allBuilds = [
9797
},
9898
onwarn: util.onwarn
9999
},
100-
// Node CJS build
101-
{
102-
input: path.resolve('./exp', pkg['main-esm']),
103-
output: {
104-
file: path.resolve('./exp', pkg.main),
105-
format: 'cjs',
106-
sourcemap: true
107-
},
108-
plugins: util.es2017ToEs5Plugins(/* mangled= */ false),
109-
external: util.resolveNodeExterns,
110-
treeshake: {
111-
moduleSideEffects: false
112-
}
113-
},
114100
// Browser build
115101
{
116102
input: './exp/index.ts',
@@ -135,21 +121,7 @@ const allBuilds = [
135121
sourcemap: true
136122
}
137123
],
138-
plugins: util.es2017ToEs5Plugins(/* mangled= */ true),
139-
external: util.resolveBrowserExterns,
140-
treeshake: {
141-
moduleSideEffects: false
142-
}
143-
},
144-
// RN build
145-
{
146-
input: './exp/index.rn.ts',
147-
output: {
148-
file: path.resolve('./exp', pkg['react-native']),
149-
format: 'es',
150-
sourcemap: true
151-
},
152-
plugins: [alias(util.generateAliasConfig('rn')), ...browserPlugins()],
124+
plugins: util.es2017ToEs5Plugins(/* mangled= */ false),
153125
external: util.resolveBrowserExterns,
154126
treeshake: {
155127
moduleSideEffects: false

packages/firestore/src/core/database_info.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ export class DatabaseInfo {
3030
* when using WebChannel as the network transport.
3131
* @param autoDetectLongPolling - Whether to use the detectBufferingProxy
3232
* option when using WebChannel as the network transport.
33+
* @param useFetchStreams Whether to use the Fetch API instead of
34+
* XMLHTTPRequest
3335
*/
3436
constructor(
3537
readonly databaseId: DatabaseId,
@@ -38,7 +40,8 @@ export class DatabaseInfo {
3840
readonly host: string,
3941
readonly ssl: boolean,
4042
readonly forceLongPolling: boolean,
41-
readonly autoDetectLongPolling: boolean
43+
readonly autoDetectLongPolling: boolean,
44+
readonly useFetchStreams: boolean
4245
) {}
4346
}
4447

packages/firestore/src/lite/components.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ export function makeDatabaseInfo(
113113
settings.host,
114114
settings.ssl,
115115
settings.experimentalForceLongPolling,
116-
settings.experimentalAutoDetectLongPolling
116+
settings.experimentalAutoDetectLongPolling,
117+
settings.useFetchStreams
117118
);
118119
}

packages/firestore/src/lite/settings.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ export interface PrivateSettings extends Settings {
5858
experimentalForceLongPolling?: boolean;
5959
// Used in firestore@exp
6060
experimentalAutoDetectLongPolling?: boolean;
61+
// Used in firestore@exp
62+
useFetchStreams?: boolean;
6163
}
6264

6365
/**
@@ -80,6 +82,8 @@ export class FirestoreSettings {
8082

8183
readonly ignoreUndefinedProperties: boolean;
8284

85+
readonly useFetchStreams: boolean;
86+
8387
// Can be a google-auth-library or gapi client.
8488
// eslint-disable-next-line @typescript-eslint/no-explicit-any
8589
credentials?: any;
@@ -120,6 +124,7 @@ export class FirestoreSettings {
120124

121125
this.experimentalForceLongPolling = !!settings.experimentalForceLongPolling;
122126
this.experimentalAutoDetectLongPolling = !!settings.experimentalAutoDetectLongPolling;
127+
this.useFetchStreams = !!settings.useFetchStreams;
123128

124129
validateIsNotUsedTogether(
125130
'experimentalForceLongPolling',
@@ -139,7 +144,8 @@ export class FirestoreSettings {
139144
other.experimentalForceLongPolling &&
140145
this.experimentalAutoDetectLongPolling ===
141146
other.experimentalAutoDetectLongPolling &&
142-
this.ignoreUndefinedProperties === other.ignoreUndefinedProperties
147+
this.ignoreUndefinedProperties === other.ignoreUndefinedProperties &&
148+
this.useFetchStreams === other.useFetchStreams
143149
);
144150
}
145151
}

packages/firestore/src/platform/browser/webchannel_connection.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
WebChannel,
3131
WebChannelError,
3232
WebChannelOptions,
33+
FetchXmlHttpFactory,
3334
XhrIo,
3435
getStatEventTarget,
3536
EventTarget,
@@ -62,11 +63,13 @@ const XHR_TIMEOUT_SECS = 15;
6263
export class WebChannelConnection extends RestConnection {
6364
private readonly forceLongPolling: boolean;
6465
private readonly autoDetectLongPolling: boolean;
66+
private readonly useFetchStreams: boolean;
6567

6668
constructor(info: DatabaseInfo) {
6769
super(info);
6870
this.forceLongPolling = info.forceLongPolling;
6971
this.autoDetectLongPolling = info.autoDetectLongPolling;
72+
this.useFetchStreams = info.useFetchStreams;
7073
}
7174

7275
protected performRPCRequest<Req, Resp>(
@@ -194,6 +197,10 @@ export class WebChannelConnection extends RestConnection {
194197
detectBufferingProxy: this.autoDetectLongPolling
195198
};
196199

200+
if (this.useFetchStreams) {
201+
request.xmlHttpFactory = new FetchXmlHttpFactory({});
202+
}
203+
197204
this.modifyHeadersForRequest(request.initMessageHeaders!, token);
198205

199206
// Sending the custom headers we just added to request.initMessageHeaders

packages/webchannel-wrapper/externs/overrides.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ goog.net.WebChannel.Options.forceLongPolling;
6868
/** @type {boolean|undefined} */
6969
goog.net.WebChannel.Options.detectBufferingProxy;
7070

71+
/** @type {boolean|undefined} */
72+
goog.net.WebChannel.Options.useFetchStreams;
73+
74+
/** @type {unknown} */
75+
goog.net.WebChannel.Options.xmlHttpFactory;
76+
7177
goog.labs.net.webChannel.requestStats.Event = {};
7278
goog.labs.net.webChannel.requestStats.Event.STAT_EVENT;
7379

packages/webchannel-wrapper/gulpfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const closureDefines = [
4646
// Avoid unsafe eval() calls (https://github.com/firebase/firebase-js-sdk/issues/798)
4747
'goog.json.USE_NATIVE_JSON=true',
4848
// Disable debug logging (saves 8780 bytes).
49-
'goog.DEBUG=false',
49+
'goog.DEBUG=true',
5050
// Disable fallbacks for running async code (saves 1472 bytes).
5151
'goog.ASSUME_NATIVE_PROMISE=true',
5252
// Disables IE8-specific event fallback code (saves 523 bytes).

packages/webchannel-wrapper/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
},
1616
"license": "Apache-2.0",
1717
"devDependencies": {
18-
"google-closure-compiler": "20201102.0.1",
19-
"google-closure-library": "20201006.0.0",
18+
"google-closure-compiler": "20210505.0.0",
19+
"google-closure-library": "20210406.0.0",
2020
"gulp": "4.0.2",
2121
"gulp-sourcemaps": "3.0.0",
2222
"rollup": "2.35.1",

packages/webchannel-wrapper/src/index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,7 @@ export interface WebChannelTransport {
130130
export function createWebChannelTransport(): WebChannelTransport;
131131

132132
export function getStatEventTarget(): EventTarget;
133+
134+
export class FetchXmlHttpFactory {
135+
constructor(options: {});
136+
}

packages/webchannel-wrapper/src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ goog.provide('firebase.webchannel.wrapper');
2323

2424
// goog.net.WebChannelTransport
2525
goog.require('goog.net.createWebChannelTransport');
26+
goog.require('goog.net.FetchXmlHttpFactory');
2627
goog.require('goog.labs.net.webChannel.requestStats');
2728
goog.require('goog.labs.net.webChannel.WebChannelBaseTransport');
2829

@@ -83,5 +84,6 @@ module['exports']['ErrorCode'] = goog.net.ErrorCode;
8384
module['exports']['EventType'] = goog.net.EventType;
8485
module['exports']['Event'] = goog.labs.net.webChannel.requestStats.Event;
8586
module['exports']['Stat'] = goog.labs.net.webChannel.requestStats.Stat;
87+
module['exports']['FetchXmlHttpFactory'] = goog.net.FetchXmlHttpFactory;
8688
module['exports']['WebChannel'] = goog.net.WebChannel;
8789
module['exports']['XhrIo'] = goog.net.XhrIo;

yarn.lock

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8654,10 +8654,10 @@ google-closure-compiler-java@^20200112.0.0:
86548654
resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20200112.0.0.tgz#2b99f5e2869a573a1b35558ff3b6e6bc054a116f"
86558655
integrity sha512-h/ExDCXAw88nOniQSbbK6et31kOwmaDxl6t52dnETCIzituQtGToPzy21vUel1o8o+FvWUybLoap+dEYBam1pA==
86568656

8657-
google-closure-compiler-java@^20201102.0.1:
8658-
version "20201102.0.1"
8659-
resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20201102.0.1.tgz#15fa3e0701ee1a756168fdaf3b53fe61425b1b64"
8660-
integrity sha512-pXJIlyqepHhih0HCbShkAZJyViIxdyd4V7MnCUZEXLIIlygw92e2dC+5XiONDQZgRlF93BPmWCy9jr7wYoW1hQ==
8657+
google-closure-compiler-java@^20210505.0.0:
8658+
version "20210505.0.0"
8659+
resolved "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20210505.0.0.tgz#f1acdedbff960ad9c81a6b39d3d02876e33b2141"
8660+
integrity sha512-h+DfQAaaCLFmmtasOS8eyh0M4D+JInTJfEP4byV5R1cnMninpGGLHOG3PNgLLzkXkIO/fu4ILEcVzoGmgJEoMA==
86618661

86628662
google-closure-compiler-js@^20200112.0.0:
86638663
version "20200112.0.0"
@@ -8669,30 +8669,30 @@ google-closure-compiler-linux@^20200112.0.0:
86698669
resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20200112.0.0.tgz#e6c7943cc0114046dbe9fc685e4d7d4eb536c1dc"
86708670
integrity sha512-imTfdYP7BVTzzp3y7MuZP+98nEkbX7LZsZtxalNpl56vd+Ysc9/vOHXS14CdSoThaXIVlzX/lfjOlBRqPow+ew==
86718671

8672-
google-closure-compiler-linux@^20201102.0.1:
8673-
version "20201102.0.1"
8674-
resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20201102.0.1.tgz#a66f18142866c5d3186d0d0c0809538d38f7b998"
8675-
integrity sha512-aRbyTGnQoFXchcpEFNrP1p/WIvYOgN3hYKI+MOHWkvwVJBY2P8gpb07hAigO8fj+QKD/SFCl+2pXP+JniWOEqw==
8672+
google-closure-compiler-linux@^20210505.0.0:
8673+
version "20210505.0.0"
8674+
resolved "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20210505.0.0.tgz#87ceaa5750d447725b2dd556b01a2e36e5cbf9cd"
8675+
integrity sha512-ADN2kFfIR1NiR24kLYb4YkX4MeXDJaT5OfRQEkiuIdZMtd28oEkm80LxCGuC7ftKEixoMm3f9/OG01B4U+xsnA==
86768676

86778677
google-closure-compiler-osx@^20200112.0.0:
86788678
version "20200112.0.0"
86798679
resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20200112.0.0.tgz#df7a22c0dc32702b47c8ac4521f79bbe439effad"
86808680
integrity sha512-E3S1KqZw4+Zov0VXCkjomPrYhyuuV6jH9InBchQ7cZfipFJjhQmSRf39u4Mu0sINW7GXfODZbzBwOXhEIquFQw==
86818681

8682-
google-closure-compiler-osx@^20201102.0.1:
8683-
version "20201102.0.1"
8684-
resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20201102.0.1.tgz#5099b29a7db553ded849e06cbbce194ecf9cd231"
8685-
integrity sha512-VguqEAOYI6XYZN6JcLMP8fpsoXk1Z9YuntMjv0IDVydkbZaHYOI4zE39FJhMuWiN7gOzSX2b/BBC6GsSh1F3fw==
8682+
google-closure-compiler-osx@^20210505.0.0:
8683+
version "20210505.0.0"
8684+
resolved "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20210505.0.0.tgz#1c31cd460cb6b8357a94add25b3500436c69ce26"
8685+
integrity sha512-JTwdh23aD2pwRU4QZjujxp/+rGfhex3utNWEdUDRMNpUGstUK7XPCDG8jNBtUpyuRiXFnpZa90qButqRgotQBA==
86868686

86878687
google-closure-compiler-windows@^20200112.0.0:
86888688
version "20200112.0.0"
86898689
resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20200112.0.0.tgz#8300d1e651f2c84ed565e729ccf40d6ed7e63771"
86908690
integrity sha512-+5+UJFKXH0LGnYEHSVJxWwhtvX/MI6uebkAQkhma0057QsKs8fOToWuHL8/UbJULB4WUPa3DlHy0+Izs5z6lCQ==
86918691

8692-
google-closure-compiler-windows@^20201102.0.1:
8693-
version "20201102.0.1"
8694-
resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20201102.0.1.tgz#8b6c5c3f7050a738b71c59f9dd9863fb6cca282a"
8695-
integrity sha512-LlynipQi/iP76mjkOu6Rc1mCRuxTAhRvLjq10aGfVjKwpbCAF0Jq2a5k2ygr4xYiINNi2/L2qUw6ObPm9wQCOw==
8692+
google-closure-compiler-windows@^20210505.0.0:
8693+
version "20210505.0.0"
8694+
resolved "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20210505.0.0.tgz#45559acde54d1b85973c9984253c15bfa98b5cfb"
8695+
integrity sha512-bKTbg/f4ak72OggEMaH/7oExqOO9dS+TxwGhoovYOt/YaVR/8MDfGdxsOhqoiboiFwYysTPz8bwINjYQK6AwnA==
86968696

86978697
86988698
version "20200112.0.0"
@@ -8710,30 +8710,30 @@ [email protected]:
87108710
google-closure-compiler-osx "^20200112.0.0"
87118711
google-closure-compiler-windows "^20200112.0.0"
87128712

8713-
google-closure-compiler@20201102.0.1:
8714-
version "20201102.0.1"
8715-
resolved "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20201102.0.1.tgz#372670b1b047969d12de663698593e31944ad1bf"
8716-
integrity sha512-Cz+1jOswH0MwMVPu1rRH1xD4KYuY5XW2ox5aXwqaAxevqmirhr36f8wgKPHuVRSovFejW640r6UFwyrOT6U0CA==
8713+
google-closure-compiler@20210505.0.0:
8714+
version "20210505.0.0"
8715+
resolved "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20210505.0.0.tgz#8a321ac49c9d3f0df30d7e15c2adbb2b11c5dd89"
8716+
integrity sha512-moeYaj4S6YTdOOvjv1ZLdUld/2YXw7q1GqUUHJJd+rE/uViyesozg8yKQZWcB3tvurhb+qEvFFet8CYoeaQHng==
87178717
dependencies:
87188718
chalk "2.x"
8719-
google-closure-compiler-java "^20201102.0.1"
8719+
google-closure-compiler-java "^20210505.0.0"
87208720
minimist "1.x"
87218721
vinyl "2.x"
87228722
vinyl-sourcemaps-apply "^0.2.0"
87238723
optionalDependencies:
8724-
google-closure-compiler-linux "^20201102.0.1"
8725-
google-closure-compiler-osx "^20201102.0.1"
8726-
google-closure-compiler-windows "^20201102.0.1"
8724+
google-closure-compiler-linux "^20210505.0.0"
8725+
google-closure-compiler-osx "^20210505.0.0"
8726+
google-closure-compiler-windows "^20210505.0.0"
87278727

87288728
87298729
version "20200830.0.0"
87308730
resolved "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20200830.0.0.tgz#9f3807e5a4af55ebf2c8a22853d53b8da39a48e8"
87318731
integrity sha512-s4ma73K+FTeVywSMjVOxQ435t6kPfSlxEtIflq7Gabp2fxAnc9i8vUpvT8ZP/GH89LwSJReIaBGtrn72rfNC5Q==
87328732

8733-
google-closure-library@20201006.0.0:
8734-
version "20201006.0.0"
8735-
resolved "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20201006.0.0.tgz#5b2f325309566a63b97e22e57c71263fa98f22b4"
8736-
integrity sha512-jYTKvUBUkTFCO+PJLcqJrh4BNMHlInzPYpijg8lty/HIF1rH+qutHchlFdiSNad8HBVKIlMf3UzXRPXvmujrIg==
8733+
google-closure-library@20210406.0.0:
8734+
version "20210406.0.0"
8735+
resolved "https://registry.npmjs.org/google-closure-library/-/google-closure-library-20210406.0.0.tgz#47d6036c1704661ad47cde2e35f19cc55e33e775"
8736+
integrity sha512-1lAC/KC9R2QM6nygniM0pRcGrv5bkCUrIZb2hXFxLtAkA+zRiVeWtRYpFWDHXXJzkavKjsn9upiffL4x/nmmVg==
87378737

87388738
google-gax@^2.12.0, google-gax@^2.9.2:
87398739
version "2.13.0"

0 commit comments

Comments
 (0)