Skip to content

Commit 69cbd0c

Browse files
authored
Optionally use one-var payload if present. (#44)
1 parent a1305b1 commit 69cbd0c

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
.idea
22
.tmp
33
.npm
4+
npm-debug.log
45
lib
56

67
coverage

src/env.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface FirebaseEnvData {
1717
interface FirebaseEnvMetadata {
1818
version: string;
1919
reserved?: FirebaseEnvData;
20+
latest?: FirebaseEnvData;
2021
}
2122

2223
export class AbstractEnv implements FirebaseEnv {
@@ -57,6 +58,7 @@ export class RuntimeConfigEnv extends AbstractEnv {
5758
projectId: string;
5859
version: string;
5960
private _custom: FirebaseEnvData;
61+
private _customFromMeta: FirebaseEnvData;
6062
private _reserved: FirebaseEnvData;
6163
private _merged: FirebaseEnvData;
6264
private _watching: boolean;
@@ -97,7 +99,7 @@ export class RuntimeConfigEnv extends AbstractEnv {
9799
this._meta = JSON.parse(response.text);
98100
this.lastUpdated = response.updateTime;
99101

100-
console.log(`Firebase: detected new environment version ${this.version}, fetching...`);
102+
console.log(`Firebase: detected environment version ${this.version}, activating...`);
101103
this.fetch();
102104
} else if (response.state === 'DELETED') {
103105
this._custom = {};
@@ -119,8 +121,10 @@ export class RuntimeConfigEnv extends AbstractEnv {
119121
}
120122

121123
private fetch(): PromiseLike<FirebaseEnv> {
122-
return this.fetchVar(this.version).then((data: FirebaseEnvData) => {
123-
console.log('Firebase: updated environment configuration, now using', this.version);
124+
let fetched = Promise.resolve(this._customFromMeta || this.fetchVar(this.version));
125+
126+
return fetched.then((data: FirebaseEnvData) => {
127+
console.log('Firebase: activated environment configuration', this.version);
124128
this._merged = null;
125129
this._custom = data || {};
126130
this._notifyReady();
@@ -158,6 +162,10 @@ export class RuntimeConfigEnv extends AbstractEnv {
158162
this.version = meta.version || 'v0';
159163
this._reserved = meta.reserved || {};
160164
this._merged = null;
165+
166+
if (meta.latest) {
167+
this._customFromMeta = meta.latest;
168+
}
161169
}
162170

163171
get data(): FirebaseEnvData {

test/env.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,15 @@ describe('RuntimeConfigEnv', () => {
122122
});
123123
});
124124

125+
it('should use "latest" from meta if available', () => {
126+
nocks.push(mockMetaVariableWatch('example', {version: 'v1', latest: {foo: 'bar', baz: 'qux'}}));
127+
mockMetaVariableWatchTimeout('example', 10000);
128+
return subject.ready().then(() => {
129+
expect(subject.data['foo']).to.equal('bar');
130+
expect(subject.data['baz']).to.equal('qux');
131+
});
132+
});
133+
125134
it('should merge in reserved data returned by meta', () => {
126135
nocks.push(mockMetaVariableWatch('example', {version: 'v1', reserved: {foo: 'bar'}}));
127136
nocks.push(mockRCVariableFetch('example', 'v1', {baz: 'qux'}));

0 commit comments

Comments
 (0)