Skip to content

Commit ca57d26

Browse files
Use delegation
1 parent 2194d03 commit ca57d26

File tree

8 files changed

+93
-113
lines changed

8 files changed

+93
-113
lines changed

packages/storage-types/index.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export interface Reference {
4747
metadata?: UploadMetadata
4848
): UploadTask;
4949
root: Reference;
50-
storage: Storage;
50+
storage: FirebaseStorage;
5151
toString(): string;
5252
updateMetadata(metadata: SettableMetadata): Promise<FullMetadata>;
5353
listAll(): Promise<ListResult>;
@@ -85,7 +85,7 @@ export interface UploadMetadata extends SettableMetadata {
8585
}
8686

8787
export type NextFn<T> = (value: T) => void;
88-
export type ErrorFn = (error: Error | FirebaseStorageError) => void;
88+
export type ErrorFn = (error: Error | Error) => void;
8989
export type CompleteFn = () => void;
9090
export type Unsubscribe = () => void;
9191
export interface StorageObserver<T> {

packages/storage/compat/list.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export class ListResultCompat implements types.ListResult {
2525
constructor(private readonly delegate: ListResult) {
2626
}
2727

28-
prefixes = this.delegate.prefixes.map(v => ReferenceCompat.fromReference(v));
29-
items = this.delegate.items.map(v => ReferenceCompat.fromReference(v));
28+
prefixes = this.delegate.prefixes.map(v => new ReferenceCompat(v));
29+
items = this.delegate.items.map(v => new ReferenceCompat(v));
3030
nextPageToken = this.delegate.nextPageToken;
3131

3232
}

packages/storage/compat/reference.ts

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,22 @@ import { UploadTaskCompat } from './task';
4343
import {ListResultCompat} from "./list";
4444
import {Location} from "../src/implementation/location";
4545
import {StorageServiceCompat} from "./service";
46+
import * as errorsExports from "../src/implementation/error";
4647

47-
export class ReferenceCompat extends Reference implements types.Reference {
48-
static fromReference(ref: Reference): types.Reference {
49-
return new ReferenceCompat(ref.service, ref.location);
50-
}
48+
export class ReferenceCompat implements types.Reference {
5149

52-
get root() : any {
53-
const location = new Location(this.location.bucket, '');
54-
return new ReferenceCompat(this.service, location);
55-
}
56-
57-
get storage(): any {
58-
return StorageServiceCompat.fromService(this.service);
50+
constructor(private readonly delegate: Reference) {
5951
}
6052

53+
root = new ReferenceCompat(this.delegate.root);
54+
storage = new StorageServiceCompat(this.delegate.storage);
55+
name = this.delegate.name;
56+
bucket = this.delegate.bucket;
57+
fullPath = this.delegate.fullPath;
58+
6159
toString(): string {
6260
validate('toString', [], arguments);
63-
return super.toString();
61+
return this.delegate.toString();
6462
}
6563

6664
/**
@@ -70,8 +68,8 @@ export class ReferenceCompat extends Reference implements types.Reference {
7068
*/
7169
child(childPath: string): types.Reference {
7270
validate('child', [stringSpec()], arguments);
73-
const reference = getChild(this, childPath);
74-
return ReferenceCompat.fromReference(reference);
71+
const reference = getChild(this.delegate, childPath);
72+
return new ReferenceCompat(reference);
7573
}
7674

7775
/**
@@ -80,11 +78,11 @@ export class ReferenceCompat extends Reference implements types.Reference {
8078
*/
8179
get parent(): types.Reference | null {
8280
validate('parent', [], arguments);
83-
const reference = getParent(this);
81+
const reference = getParent(this.delegate);
8482
if (reference == null) {
8583
return null;
8684
}
87-
return ReferenceCompat.fromReference(reference);
85+
return new ReferenceCompat(reference);
8886
}
8987

9088
/**
@@ -96,10 +94,10 @@ export class ReferenceCompat extends Reference implements types.Reference {
9694
put(
9795
data: Blob | Uint8Array | ArrayBuffer,
9896
metadata?: Metadata
99-
): any {
97+
): types.UploadTask {
10098
validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);
10199
this.throwIfRoot_('put');
102-
return uploadBytes(this, data, metadata) as UploadTaskCompat;
100+
return new UploadTaskCompat(uploadBytes(this.delegate, data, metadata));
103101
}
104102
/**
105103
* Uploads a string to this object's location.
@@ -112,15 +110,16 @@ export class ReferenceCompat extends Reference implements types.Reference {
112110
value: string,
113111
format: StringFormat = StringFormat.RAW,
114112
metadata?: Metadata
115-
): any {
113+
): types.UploadTask {
116114
validate(
117115
'putString',
118116
[stringSpec(), stringSpec(formatValidator, true), metadataSpec(true)],
119117
arguments
120118
);
121119
this.throwIfRoot_('putString');
122-
return uploadString(this, value, format, metadata);
120+
return new UploadTaskCompat(uploadString(this.delegate, value, format, metadata));
123121
}
122+
124123
/**
125124
* List all items (files) and prefixes (folders) under this storage reference.
126125
*
@@ -140,8 +139,9 @@ export class ReferenceCompat extends Reference implements types.Reference {
140139
*/
141140
listAll(): Promise<types.ListResult> {
142141
validate('listAll', [], arguments);
143-
return listAll(this).then(r => new ListResultCompat(r));
142+
return listAll(this.delegate).then(r => new ListResultCompat(r));
144143
}
144+
145145
/**
146146
* List items (files) and prefixes (folders) under this storage reference.
147147
*
@@ -164,7 +164,7 @@ export class ReferenceCompat extends Reference implements types.Reference {
164164
*/
165165
list(options?: ListOptions | null): Promise<types.ListResult> {
166166
validate('list', [listOptionSpec(true)], arguments);
167-
return list(this, options).then(r => new ListResultCompat(r));
167+
return list(this.delegate, options).then(r => new ListResultCompat(r));
168168
}
169169

170170
/**
@@ -174,7 +174,7 @@ export class ReferenceCompat extends Reference implements types.Reference {
174174
*/
175175
getMetadata(): Promise<Metadata> {
176176
validate('getMetadata', [], arguments);
177-
return getMetadata(this);
177+
return getMetadata(this.delegate);
178178
}
179179

180180
/**
@@ -188,7 +188,7 @@ export class ReferenceCompat extends Reference implements types.Reference {
188188
*/
189189
updateMetadata(metadata: Metadata): Promise<Metadata> {
190190
validate('updateMetadata', [metadataSpec()], arguments);
191-
return updateMetadata(this, metadata);
191+
return updateMetadata(this.delegate, metadata);
192192
}
193193

194194
/**
@@ -197,7 +197,7 @@ export class ReferenceCompat extends Reference implements types.Reference {
197197
*/
198198
getDownloadURL(): Promise<string> {
199199
validate('getDownloadURL', [], arguments);
200-
return getDownloadURL(this);
200+
return getDownloadURL(this.delegate);
201201
}
202202

203203
/**
@@ -207,6 +207,12 @@ export class ReferenceCompat extends Reference implements types.Reference {
207207
delete(): Promise<void> {
208208
validate('delete', [], arguments);
209209
this.throwIfRoot_('delete');
210-
return deleteObject(this);
210+
return deleteObject(this.delegate);
211+
}
212+
213+
private throwIfRoot_(name: string): void {
214+
if (this.delegate.location.path === '') {
215+
throw errorsExports.invalidRootOperation(name);
216+
}
211217
}
212218
}

packages/storage/compat/service.ts

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,8 @@
1616
*/
1717

1818
import * as types from '@firebase/storage-types';
19-
import { StorageService, isUrl } from '../src/service';
19+
import { StorageService, isUrl, ref } from '../src/service';
2020
import { Location } from '../src/implementation/location';
21-
import { FirebaseApp } from '@firebase/app-types';
22-
import { Provider } from '@firebase/component';
23-
import { FirebaseAuthInternalName } from '@firebase/auth-interop-types';
24-
import { XhrIoPool } from '../src/implementation/xhriopool';
2521
import * as args from '../src/implementation/args';
2622
import { ReferenceCompat } from './reference';
2723

@@ -54,37 +50,22 @@ export function pathValidator(path: unknown): void {
5450
*
5551
* @struct
5652
*/
57-
export class StorageServiceCompat extends StorageService implements types.FirebaseStorage {
58-
private readonly internals_: ServiceInternals;
53+
export class StorageServiceCompat implements types.FirebaseStorage {
5954

60-
constructor(
61-
app: FirebaseApp,
62-
authProvider: Provider<FirebaseAuthInternalName>,
63-
pool: XhrIoPool,
64-
url?: string
65-
) {
66-
super(app, authProvider, pool, url);
67-
this.internals_ = new ServiceInternals(this);
55+
constructor(readonly delegate: StorageService) {
6856
}
6957

70-
71-
static fromService(service: StorageService) : StorageServiceCompat {
72-
return new StorageServiceCompat(service.app, service.authProvider_, service.pool_, service.url_);
73-
}
58+
app = this.delegate.app;
59+
maxOperationRetryTime = this.delegate.maxOperationRetryTime;
60+
maxUploadRetryTime = this.delegate.maxUploadRetryTime
7461

7562
/**
7663
* Returns a firebaseStorage.Reference for the given path in the default
7764
* bucket.
7865
*/
79-
ref(path?: string): types.Reference {
66+
ref(path?: string): types.Reference {
8067
args.validate('ref', [args.stringSpec(pathValidator, true)], arguments);
81-
82-
const reference = new ReferenceCompat(this, this.bucket_!);
83-
if (path != null) {
84-
return reference.child(path);
85-
} else {
86-
return reference;
87-
}
68+
return new ReferenceCompat(ref(this.delegate, path));
8869
}
8970

9071
/**
@@ -97,7 +78,7 @@ export class StorageServiceCompat extends StorageService implements types.Fireba
9778
[args.stringSpec(urlValidator, false)],
9879
arguments
9980
);
100-
return new ReferenceCompat(this, url);
81+
return new ReferenceCompat(ref(this.delegate, url)) as types.Reference;
10182
}
10283

10384
setMaxUploadRetryTime(time: number): void {
@@ -106,8 +87,7 @@ export class StorageServiceCompat extends StorageService implements types.Fireba
10687
[args.nonNegativeNumberSpec()],
10788
arguments
10889
);
109-
// Can't call get/set on super class.
110-
this.maxUploadRetryTime_ = time;
90+
this.delegate.maxUploadRetryTime = time;
11191
}
11292

11393
setMaxOperationRetryTime(time: number): void {
@@ -116,14 +96,8 @@ export class StorageServiceCompat extends StorageService implements types.Fireba
11696
[args.nonNegativeNumberSpec()],
11797
arguments
11898
);
119-
// Can't call get/set on super class.
120-
this.maxOperationRetryTime_ = time;
99+
this.delegate.maxOperationRetryTime = time;
121100
}
122-
123-
get INTERNAL(): ServiceInternals {
124-
return this.internals_;
125-
}
126-
127101
}
128102

129103
/**

packages/storage/compat/task.ts

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,32 @@ import { Metadata } from '../src/metadata';
2828
import { ErrorFn, CompleteFn, Unsubscribe, Subscribe } from '@firebase/util';
2929
import * as types from '@firebase/storage-types';
3030
import { StorageObserver } from '../src/implementation/observer';
31+
import * as typeUtils from "../src/implementation/type";
3132

32-
export class UploadTaskCompat extends UploadTask<UploadTaskSnapshotCompat>
33-
implements types.UploadTask {
33+
export class UploadTaskCompat implements types.UploadTask {
3434
constructor(
35-
private refCompat_: ReferenceCompat,
36-
blob: FbsBlob,
37-
metadata: Metadata | null = null
35+
private readonly delegate : UploadTask
3836
) {
39-
super(refCompat_, blob, metadata);
4037
}
4138

42-
get snapshot(): UploadTaskSnapshotCompat {
43-
const externalState = taskStateFromInternalTaskState(this.state_);
44-
return new UploadTaskSnapshotCompat(
45-
this.transferred_,
46-
this.blob_.size(),
47-
externalState,
48-
this.metadata_!, // VERIFY
49-
this,
50-
this.refCompat_
51-
);
39+
snapshot = new UploadTaskSnapshotCompat(this.delegate.snapshot);
40+
41+
cancel = this.delegate.cancel;
42+
catch = this.delegate.catch;
43+
pause = this.delegate.pause;
44+
resume = this.delegate.pause;
45+
46+
then(
47+
onFulfilled?: ((a: UploadTaskSnapshotCompat) => any) | null,
48+
onRejected?: ((a: Error) => any) | null
49+
): Promise<any> {
50+
return this.delegate.then((snapshot) => {
51+
if (onFulfilled) {
52+
return onFulfilled(new UploadTaskSnapshotCompat(snapshot));
53+
}
54+
}, onRejected)
5255
}
53-
56+
5457
on(
5558
type: TaskEvent,
5659
nextOrObserver?:
@@ -60,12 +63,7 @@ export class UploadTaskCompat extends UploadTask<UploadTaskSnapshotCompat>
6063
error?: ErrorFn | null,
6164
completed?: CompleteFn | null
6265
): Unsubscribe | Subscribe<UploadTaskSnapshotCompat> {
63-
const castNextOrObserver = nextOrObserver as
64-
| Partial<StorageObserver<UploadTaskSnapshot>>
65-
| null
66-
| ((a: UploadTaskSnapshot) => unknown);
67-
return super.on(type, castNextOrObserver, error, completed) as
68-
| Unsubscribe
69-
| Subscribe<types.UploadTaskSnapshot>;
66+
// TODO: Wrap all returned values in new snapshot
67+
return this.delegate.on(type, nextOrObserver as any, error, completed);
7068
}
7169
}

packages/storage/compat/tasksnapshot.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ import { TaskState } from '../src/implementation/taskenums';
2121
import { Metadata } from '../src/metadata';
2222
import { ReferenceCompat } from './reference';
2323
import { UploadTaskCompat } from './task';
24+
import {UploadTaskSnapshot} from "../src/tasksnapshot";
2425

2526
export class UploadTaskSnapshotCompat implements types.UploadTaskSnapshot{
26-
constructor(
27-
readonly bytesTransferred: number,
28-
readonly totalBytes: number,
29-
readonly state: TaskState,
30-
readonly metadata: Metadata,
31-
readonly task: UploadTaskCompat,
32-
readonly ref: ReferenceCompat
33-
) {}
27+
28+
constructor(readonly delegate: UploadTaskSnapshot) {}
29+
30+
bytesTransferred = this.delegate.bytesTransferred;
31+
metadata = this.delegate.metadata;
32+
ref = new ReferenceCompat(this.delegate.ref);
33+
state = this.delegate.state;
34+
task = new UploadTaskCompat(this.delegate.task);
35+
totalBytes = this.delegate.bytesTransferred;
3436
}

0 commit comments

Comments
 (0)