Skip to content

Commit 0eff50e

Browse files
authored
Revert "Redesign SDK to get rid of "exports =" and export more types." (#81)
1 parent bd61e90 commit 0eff50e

36 files changed

+1536
-900
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"@types/sinon": "^1.16.29",
3434
"chai": "^3.5.0",
3535
"chai-as-promised": "^5.2.0",
36-
"firebase-admin": "^4.0.5",
36+
"firebase": "^3.3",
3737
"istanbul": "^0.4.2",
3838
"mocha": "^2.4.5",
3939
"nock": "^8.0.0",
@@ -42,12 +42,12 @@
4242
"typescript": "^2.0.0"
4343
},
4444
"peerDependencies": {
45-
"firebase-admin": "^4.0.5"
45+
"firebase": "^3.3"
4646
},
4747
"dependencies": {
4848
"@types/bluebird": "^3.0.32",
49-
"@types/express": "^4.0.33",
5049
"@types/jsonwebtoken": "^7.1.32",
50+
"@types/express": "^4.0.33",
5151
"@types/lodash": "^4.14.34",
5252
"@types/node": "^6.0.38",
5353
"@types/request": "0.0.30",

spec/apps.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { expect } from 'chai';
22

33
import { FakeEnv } from './support/helpers';
4-
import { apps as appsNamespace } from '../src/apps';
5-
import * as firebase from 'firebase-admin';
4+
import Apps from '../src/apps';
5+
import * as firebase from 'firebase';
66

77
describe('apps', () => {
8-
let apps: appsNamespace.Apps;
8+
let apps;
99
beforeEach(() => {
10-
apps = new appsNamespace.Apps(new FakeEnv());
10+
apps = new Apps(new FakeEnv());
1111
});
1212

1313
it('should load the admin app for admin impersonation', function () {

spec/providers/base.spec.ts renamed to spec/builder.spec.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
import * as sinon from 'sinon';
2-
import * as Promise from 'bluebird';
32
import { expect } from 'chai';
4-
import { FakeEnv } from '../support/helpers';
5-
import { AbstractFunctionBuilder } from '../../src/providers/base';
6-
import { RawEvent } from '../../src/event';
3+
import { FakeEnv, async } from './support/helpers';
4+
import { FunctionBuilder } from '../src/builder';
5+
import { RawEvent } from '../src/event';
76

8-
describe('AbstractFunctionBuilder', () => {
7+
describe('FunctionBuilder', () => {
98
let subject;
109
let env;
1110

1211
beforeEach(() => {
1312
env = new FakeEnv();
14-
subject = new AbstractFunctionBuilder(env);
13+
subject = new FunctionBuilder(env);
1514
});
1615

1716
describe('_makeHandler(handler: Function, event: string)', () => {
@@ -33,7 +32,7 @@ describe('AbstractFunctionBuilder', () => {
3332
called = true;
3433
});
3534
handler();
36-
return Promise.resolve().then(() => {
35+
return async().then(() => {
3736
expect(called).to.be.false;
3837
});
3938
});
@@ -46,7 +45,7 @@ describe('AbstractFunctionBuilder', () => {
4645
});
4746
handler({});
4847
env.makeReady();
49-
return Promise.resolve().then(() => {
48+
return async().then(() => {
5049
expect(called).to.be.true;
5150
});
5251
});

spec/providers/auth.spec.ts renamed to spec/builders/auth-builder.spec.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
import { auth } from '../../src/providers/auth';
2-
import { expect } from 'chai';
1+
import AuthBuilder from '../../src/builders/auth-builder';
2+
import { expect as expect } from 'chai';
33
import { FakeEnv } from '../support/helpers';
4+
import { AuthEventData } from '../../src/builders/auth-builder';
45
import { Event } from '../../src/event';
56
import * as Promise from 'bluebird';
67

78
describe('AuthBuilder', () => {
8-
let subject: auth.FunctionBuilder;
9-
let handler: (e: Event<auth.UserRecord>) => PromiseLike<any> | any;
9+
let subject: AuthBuilder;
10+
let handler: (e: Event<AuthEventData>) => PromiseLike<any> | any;
1011
let env: FakeEnv;
1112

1213
beforeEach(() => {
1314
env = new FakeEnv();
14-
subject = new auth.FunctionBuilder(env);
15+
subject = new AuthBuilder(env);
1516
handler = () => {
1617
return true;
1718
};
@@ -48,7 +49,7 @@ describe('AuthBuilder', () => {
4849

4950
describe('#_dataConstructor', () => {
5051
it('should handle an event with the appropriate fields', () => {
51-
let func = subject.onCreate((ev: Event<auth.UserRecord>) => {
52+
let func = subject.onCreate((ev: Event<AuthEventData>) => {
5253
return Promise.resolve(ev.data);
5354
});
5455
env.makeReady();
@@ -88,7 +89,7 @@ describe('AuthBuilder', () => {
8889
// This isn't expected to happen in production, but if it does we should
8990
// handle it gracefully.
9091
it('should tolerate missing fields in the payload', () => {
91-
let func = subject.onCreate((ev: Event<auth.UserRecord>) => {
92+
let func = subject.onCreate((ev: Event<AuthEventData>) => {
9293
return Promise.resolve(ev.data);
9394
});
9495
env.makeReady();
@@ -102,7 +103,7 @@ describe('AuthBuilder', () => {
102103
},
103104
};
104105

105-
return expect(func(event as Event<auth.UserRecord>)).to.eventually.deep.equal(event.data);
106+
return expect(func(<Event<AuthEventData>>event)).to.eventually.deep.equal(event.data);
106107
});
107108
});
108109
});
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import DatabaseBuilder from '../../src/builders/database-builder';
2+
import { expect as expect } from 'chai';
3+
import { FakeEnv } from '../support/helpers';
4+
import Apps from '../../src/apps';
5+
import * as _ from 'lodash';
6+
7+
describe('DatabaseBuilder', () => {
8+
let subject: DatabaseBuilder;
9+
let env: FakeEnv;
10+
let apps: Apps;
11+
12+
beforeEach(() => {
13+
env = new FakeEnv();
14+
apps = new Apps(env);
15+
subject = new DatabaseBuilder(env, apps);
16+
});
17+
18+
describe('#path()', () => {
19+
it('should append paths if called multiple times', () => {
20+
subject.path('first/bit');
21+
subject.path('{id}/second/bit');
22+
return expect(subject['_toTrigger']('data.write').eventTrigger.path).to.equal('/first/bit/{id}/second/bit');
23+
});
24+
});
25+
26+
describe('#_toTrigger()', () => {
27+
it('should return "write" as the default event type', () => {
28+
let eventType = subject['_toTrigger']('data.write').eventTrigger.eventType;
29+
expect(eventType).to.eq('providers/firebase.database/eventTypes/data.write');
30+
});
31+
});
32+
33+
describe('#onWrite()', () => {
34+
it('should throw if path has not been called', () => {
35+
expect(() => {
36+
subject.onWrite(evt => _.noop());
37+
}).to.throw('Must call .path(pathValue)');
38+
});
39+
40+
it('should return a handler that emits events with a proper DatabaseDeltaSnapshot', () => {
41+
let handler = subject.path('/users/{id}').onWrite(event => {
42+
expect(event.data.val()).to.deep.equal({foo: 'bar'});
43+
});
44+
45+
env.makeReady();
46+
return handler(<any>{data: {
47+
data: null,
48+
delta: {foo: 'bar'},
49+
}});
50+
});
51+
});
52+
});

spec/providers/https.spec.ts renamed to spec/builders/https-builder.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
import { https } from '../../src/providers/https';
1+
import { default as CloudHttpsBuilder } from '../../src/builders/https-builder';
22
import { expect as expect } from 'chai';
33
import { FakeEnv } from '../support/helpers';
44

55
describe('CloudHttpsBuilder', () => {
6-
let subject: https.FunctionBuilder;
6+
let subject: CloudHttpsBuilder;
77
let env: FakeEnv;
88

99
beforeEach(() => {
1010
env = new FakeEnv();
11-
subject = new https.FunctionBuilder(env);
11+
subject = new CloudHttpsBuilder(env);
1212
});
1313

1414
describe('#onRequest', () => {
15-
it('should return a Trigger with appropriate values', () => {
15+
it('should return a TriggerDefinition with appropriate values', () => {
1616
let result = subject.onRequest((req, resp) => {
1717
resp.send(200);
1818
});

spec/providers/pubsub.spec.ts renamed to spec/builders/pubsub-builder.spec.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
import { pubsub } from '../../src/providers/pubsub';
1+
import { PubsubMessage, default as CloudPubsubBuilder } from '../../src/builders/pubsub-builder';
22
import { expect } from 'chai';
33
import { FakeEnv } from '../support/helpers';
44
import { Event } from '../../src/event';
55

6-
describe('pubsub.Message', () => {
6+
describe('PubsubMessage', () => {
77
describe('#json', () => {
88
it('should return json decoded from base64', () => {
9-
let message = new pubsub.Message({
9+
let message = new PubsubMessage({
1010
data: new Buffer('{"hello":"world"}', 'utf8').toString('base64'),
1111
});
1212

1313
expect(message.json.hello).to.equal('world');
1414
});
1515

1616
it('should preserve passed in json', () => {
17-
let message = new pubsub.Message({
17+
let message = new PubsubMessage({
1818
data: new Buffer('{"hello":"world"}', 'utf8').toString('base64'),
1919
json: {goodbye: 'world'},
2020
});
@@ -26,7 +26,7 @@ describe('pubsub.Message', () => {
2626
describe('#toJSON', () => {
2727
it('should be JSON stringify-able', () => {
2828
let encoded = new Buffer('{"hello":"world"}', 'utf8').toString('base64');
29-
let message = new pubsub.Message({
29+
let message = new PubsubMessage({
3030
data: encoded,
3131
});
3232

@@ -38,14 +38,14 @@ describe('pubsub.Message', () => {
3838
});
3939
});
4040

41-
describe('pubsub.FunctionBuilder', () => {
42-
let subject: pubsub.FunctionBuilder;
41+
describe('CloudPubsubBuilder', () => {
42+
let subject: CloudPubsubBuilder;
4343
let env: FakeEnv;
4444
let handler: (any) => any;
4545

4646
beforeEach(() => {
4747
env = new FakeEnv();
48-
subject = new pubsub.FunctionBuilder(env, 'toppy');
48+
subject = new CloudPubsubBuilder(env, 'toppy');
4949
handler = (data: Object) => {
5050
return true;
5151
};
@@ -68,7 +68,7 @@ describe('pubsub.FunctionBuilder', () => {
6868
});
6969

7070
it ('should allow fully qualified topic names', () => {
71-
let subjectQualified = new pubsub.FunctionBuilder(env, 'projects/project1/topics/toppy');
71+
let subjectQualified = new CloudPubsubBuilder(env, 'projects/project1/topics/toppy');
7272
let result = subjectQualified.onPublish(handler);
7373
expect(result.__trigger).to.deep.equal({
7474
eventTrigger: {
@@ -80,22 +80,22 @@ describe('pubsub.FunctionBuilder', () => {
8080

8181
it ('should throw with improperly formatted topics', () => {
8282
let func = () => {
83-
let badSubject = new pubsub.FunctionBuilder(env, 'bad/topic/format');
83+
let badSubject = new CloudPubsubBuilder(env, 'bad/topic/format');
8484
return badSubject.onPublish(handler);
8585
};
8686
expect(func).to.throw(Error);
8787
});
8888

8989
it ('should throw with when using topic in another project', () => {
9090
let func = () => {
91-
let badSubject = new pubsub.FunctionBuilder(env, 'projects/anotherProject/topics/toppy');
91+
let badSubject = new CloudPubsubBuilder(env, 'projects/anotherProject/topics/toppy');
9292
return badSubject.onPublish(handler);
9393
};
9494
expect(func).to.throw(Error);
9595
});
9696

9797
it('should properly handle a new-style event', () => {
98-
let handler2 = (ev: Event<pubsub.Message>) => {
98+
let handler2 = (ev: Event<PubsubMessage>) => {
9999
return {
100100
raw: ev.data.data,
101101
json: ev.data.json,

spec/providers/storage.spec.ts renamed to spec/builders/storage-builder.spec.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import { storage } from '../../src/providers/storage';
1+
import CloudStorageBuilder from '../../src/builders/storage-builder';
22
import { expect as expect } from 'chai';
33
import { FakeEnv } from '../support/helpers';
4+
import { StorageObject } from '../../src/builders/storage-builder';
45
import { Event } from '../../src/event';
56

6-
describe('storage.FunctionBuilder', () => {
7-
let subject: storage.FunctionBuilder;
8-
let handler: (e: Event<storage.Object>) => PromiseLike<any> | any;
7+
describe('CloudHttpBuilder', () => {
8+
let subject: CloudStorageBuilder;
9+
let handler: (e: Event<StorageObject>) => PromiseLike<any> | any;
910
let env: FakeEnv;
1011

1112
beforeEach(() => {
1213
env = new FakeEnv();
13-
subject = new storage.FunctionBuilder(env, 'bucky');
14+
subject = new CloudStorageBuilder(env, 'bucky');
1415
handler = (data) => {
1516
return true;
1617
};
@@ -28,7 +29,7 @@ describe('storage.FunctionBuilder', () => {
2829
});
2930

3031
it ('should allow fully qualified bucket names', () => {
31-
let subjectQualified = new storage.FunctionBuilder(env, 'projects/_/buckets/bucky');
32+
let subjectQualified = new CloudStorageBuilder(env, 'projects/_/buckets/bucky');
3233
let result = subjectQualified.onChange(handler);
3334
expect(result.__trigger).to.deep.equal({
3435
eventTrigger: {
@@ -40,15 +41,15 @@ describe('storage.FunctionBuilder', () => {
4041

4142
it ('should throw with improperly formatted buckets', () => {
4243
let func = () => {
43-
let badSubject = new storage.FunctionBuilder(env, 'bad/bucket/format');
44+
let badSubject = new CloudStorageBuilder(env, 'bad/bucket/format');
4445
return badSubject.onChange(handler);
4546
};
4647
expect(func).to.throw(Error);
4748
});
4849

4950
it ('should throw with when using bucket not in _ project', () => {
5051
let func = () => {
51-
let badSubject = new storage.FunctionBuilder(env, 'projects/anotherProject/buckets/bucky');
52+
let badSubject = new CloudStorageBuilder(env, 'projects/anotherProject/buckets/bucky');
5253
return badSubject.onChange(handler);
5354
};
5455
expect(func).to.throw(Error);

0 commit comments

Comments
 (0)