Skip to content

Commit 0ac2d10

Browse files
committed
feat(storage): Implement AngularFireStorage
1 parent 25815cc commit 0ac2d10

File tree

13 files changed

+209
-6
lines changed

13 files changed

+209
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angularfire2",
3-
"version": "5.0.0-rc.4",
3+
"version": "5.0.0-rc.5",
44
"description": "The official library of Firebase and Angular.",
55
"private": true,
66
"scripts": {

src/storage/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './public_api';

src/storage/observable/fromTask.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { storage } from 'firebase/app';
2+
import 'firebase/storage';
3+
import { Observable } from 'rxjs/Observable';
4+
5+
export function fromTask(task: storage.UploadTask) {
6+
return new Observable<storage.UploadTaskSnapshot>(subscriber => {
7+
task.on('state_changed', subscriber);
8+
return { unsubscribe: task.cancel };
9+
});
10+
}

src/storage/package.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "angularfire2/storage",
3+
"version": "ANGULARFIRE2_VERSION",
4+
"description": "The storage module",
5+
"main": "../bundles/storage.umd.js",
6+
"module": "index.js",
7+
"es2015": "./es2015/index.js",
8+
"keywords": [
9+
"angular",
10+
"firebase",
11+
"rxjs"
12+
],
13+
"repository": {
14+
"type": "git",
15+
"url": "git+https://github.com/angular/angularfire2.git"
16+
},
17+
"author": "angular,firebase",
18+
"license": "MIT",
19+
"peerDependencies": {
20+
"angularfire2": "ANGULARFIRE2_VERSION",
21+
"@angular/common": "ANGULAR_VERSION",
22+
"@angular/core": "ANGULAR_VERSION",
23+
"@angular/platform-browser": "ANGULAR_VERSION",
24+
"@angular/platform-browser-dynamic": "ANGULAR_VERSION",
25+
"firebase": "FIREBASE_VERSION",
26+
"rxjs": "RXJS_VERSION",
27+
"zone.js": "ZONEJS_VERSION"
28+
},
29+
"typings": "index.d.ts"
30+
}

src/storage/public_api.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export * from './ref';
2+
export * from './storage';
3+
export * from './task';
4+
export * from './observable/fromTask';
5+
export * from './storage.module';

src/storage/ref.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { storage } from 'firebase/app';
2+
import { AngularFireUploadTask } from './task';
3+
4+
export class AngularFireStorageRef {
5+
constructor(public ref: storage.Reference) { }
6+
put(data: any, metadata: storage.UploadMetadata | undefined) {
7+
const task = this.ref.put(data, metadata);
8+
return new AngularFireUploadTask(task);
9+
}
10+
}
11+

src/storage/storage.module.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { NgModule } from '@angular/core';
2+
import * as firebase from 'firebase/app';
3+
import 'firebase/storage';
4+
import { AngularFireModule, FirebaseApp } from 'angularfire2';
5+
import { AngularFireStorage } from './storage';
6+
7+
export function _getAngularFireStorage(app: FirebaseApp) {
8+
return new AngularFireStorage(app);
9+
}
10+
11+
export const AngularFireStorageProvider = {
12+
provide: AngularFireStorage,
13+
useFactory: _getAngularFireStorage,
14+
deps: [ FirebaseApp ]
15+
};
16+
17+
export const STORAGE_PROVIDERS = [
18+
AngularFireStorageProvider,
19+
];
20+
21+
@NgModule({
22+
imports: [ AngularFireModule ],
23+
providers: [ STORAGE_PROVIDERS ]
24+
})
25+
export class AngularFireStorageModule { }

src/storage/storage.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Injectable } from '@angular/core';
2+
import { storage } from 'firebase/app';
3+
import 'firebase/storage';
4+
import { FirebaseApp } from 'angularfire2';
5+
import { AngularFireStorageRef } from './ref';
6+
import { AngularFireUploadTask } from './task';
7+
8+
@Injectable()
9+
export class AngularFireStorage {
10+
storage: storage.Storage;
11+
12+
constructor(public app: FirebaseApp) {
13+
this.storage = app.storage();
14+
}
15+
16+
ref(path: string) {
17+
return new AngularFireStorageRef(this.storage.ref(path));
18+
}
19+
20+
upload(pathOrRef: string, data: any, metadata: storage.UploadMetadata | undefined) {
21+
const storageRef = this.storage.ref(pathOrRef);
22+
const ref = new AngularFireStorageRef(storageRef);
23+
return ref.put(data, metadata);
24+
}
25+
26+
}

src/storage/task.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { storage } from 'firebase/app';
2+
import { fromTask } from './observable/fromTask';
3+
import { Observable } from 'rxjs/Observable';
4+
5+
export class AngularFireUploadTask {
6+
constructor(public task: storage.UploadTask) {}
7+
8+
snapshotChanges() { return fromTask(this.task); }
9+
10+
pause() { return this.task.pause(); }
11+
12+
cancel() { return this.task.cancel(); }
13+
14+
resume() { return this.task.resume(); }
15+
16+
then() { return this.task.then(); }
17+
18+
catch(onRejected: (a: Error) => any) { return this.task.catch(onRejected); }
19+
}

src/storage/tsconfig-build.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"compilerOptions": {
3+
"baseUrl": ".",
4+
"experimentalDecorators": true,
5+
"emitDecoratorMetadata": true,
6+
"module": "es2015",
7+
"target": "es2015",
8+
"noImplicitAny": false,
9+
"outDir": "../../dist/packages-dist/storage/es2015",
10+
"rootDir": ".",
11+
"sourceMap": true,
12+
"inlineSources": true,
13+
"declaration": false,
14+
"removeComments": true,
15+
"strictNullChecks": true,
16+
"lib": ["es2015", "dom", "es2015.promise", "es2015.collection", "es2015.iterable"],
17+
"skipLibCheck": true,
18+
"moduleResolution": "node",
19+
"paths": {
20+
"angularfire2": ["../../dist/packages-dist"]
21+
}
22+
},
23+
"files": [
24+
"index.ts",
25+
"../../node_modules/zone.js/dist/zone.js.d.ts"
26+
],
27+
"angularCompilerOptions": {
28+
"skipTemplateCodegen": true,
29+
"strictMetadataEmit": true,
30+
"enableSummariesForJit": false
31+
}
32+
}
33+

0 commit comments

Comments
 (0)