Skip to content

Commit 388fa14

Browse files
committed
Clean up composition refactor
1 parent ca57d26 commit 388fa14

File tree

13 files changed

+128
-89
lines changed

13 files changed

+128
-89
lines changed

packages/storage/compat/index.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ import { StringFormat } from '../src/implementation/string';
2121
import { TaskEvent, TaskState } from '../src/implementation/taskenums';
2222

2323
import { XhrIoPool } from '../src/implementation/xhriopool';
24-
import { ReferenceCompat as Reference } from './reference';
25-
import { StorageServiceCompat as StorageService } from './service';
24+
import { ReferenceCompat as Reference, ReferenceCompat } from './reference';
25+
import { StorageServiceCompat } from './service';
26+
import { StorageService } from '../src/service';
2627
import * as types from '@firebase/storage-types';
2728
import {
2829
Component,
@@ -45,12 +46,10 @@ function factory(
4546
const app = container.getProvider('app').getImmediate();
4647
const authProvider = container.getProvider('auth-internal');
4748

48-
return (new StorageService(
49-
app,
50-
authProvider,
51-
new XhrIoPool(),
52-
url
53-
) as unknown) as types.FirebaseStorage;
49+
return new StorageServiceCompat(
50+
new StorageService(app, authProvider, new XhrIoPool(), url),
51+
ref => new ReferenceCompat(ref)
52+
) as types.FirebaseStorage;
5453
}
5554

5655
export function registerStorage(instance: _FirebaseNamespace): void {

packages/storage/compat/list.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
* limitations under the License.
1616
*/
1717

18-
1918
import * as types from '@firebase/storage-types';
20-
import {ListResult} from "../src/list";
21-
import {ReferenceCompat} from "./reference";
22-
19+
import { ListResult } from '../src/list';
20+
import { ReferenceCompat } from './reference';
21+
import { Reference } from '../src/reference';
2322

2423
export class ListResultCompat implements types.ListResult {
25-
constructor(private readonly delegate: ListResult) {
26-
}
27-
28-
prefixes = this.delegate.prefixes.map(v => new ReferenceCompat(v));
29-
items = this.delegate.items.map(v => new ReferenceCompat(v));
24+
constructor(
25+
private readonly delegate: ListResult,
26+
private converter: (ref: Reference) => ReferenceCompat
27+
) {}
28+
29+
prefixes = this.delegate.prefixes.map(v => this.converter(v));
30+
items = this.delegate.items.map(v => this.converter(v));
3031
nextPageToken = this.delegate.nextPageToken;
31-
3232
}

packages/storage/compat/reference.ts

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,20 @@ import {
3838
} from '../src/implementation/args';
3939
import { Metadata } from '../src/metadata';
4040
import { StringFormat, formatValidator } from '../src/implementation/string';
41-
import { ListOptions } from '../src/list';
41+
import { ListOptions } from '../src/list';
4242
import { UploadTaskCompat } from './task';
43-
import {ListResultCompat} from "./list";
44-
import {Location} from "../src/implementation/location";
45-
import {StorageServiceCompat} from "./service";
46-
import * as errorsExports from "../src/implementation/error";
43+
import { ListResultCompat } from './list';
44+
import { StorageServiceCompat } from './service';
45+
import * as errorsExports from '../src/implementation/error';
4746

4847
export class ReferenceCompat implements types.Reference {
49-
50-
constructor(private readonly delegate: Reference) {
51-
}
52-
53-
root = new ReferenceCompat(this.delegate.root);
54-
storage = new StorageServiceCompat(this.delegate.storage);
48+
constructor(private readonly delegate: Reference) {}
49+
50+
root = new ReferenceCompat(this.delegate.root) as types.Reference;
51+
storage = new StorageServiceCompat(
52+
this.delegate.storage,
53+
ref => new ReferenceCompat(ref)
54+
) as types.FirebaseStorage;
5555
name = this.delegate.name;
5656
bucket = this.delegate.bucket;
5757
fullPath = this.delegate.fullPath;
@@ -60,7 +60,7 @@ export class ReferenceCompat implements types.Reference {
6060
validate('toString', [], arguments);
6161
return this.delegate.toString();
6262
}
63-
63+
6464
/**
6565
* @return A reference to the object obtained by
6666
* appending childPath, removing any duplicate, beginning, or trailing
@@ -97,7 +97,10 @@ export class ReferenceCompat implements types.Reference {
9797
): types.UploadTask {
9898
validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);
9999
this.throwIfRoot_('put');
100-
return new UploadTaskCompat(uploadBytes(this.delegate, data, metadata));
100+
return new UploadTaskCompat(
101+
uploadBytes(this.delegate, data, metadata),
102+
this
103+
);
101104
}
102105
/**
103106
* Uploads a string to this object's location.
@@ -117,9 +120,12 @@ export class ReferenceCompat implements types.Reference {
117120
arguments
118121
);
119122
this.throwIfRoot_('putString');
120-
return new UploadTaskCompat(uploadString(this.delegate, value, format, metadata));
123+
return new UploadTaskCompat(
124+
uploadString(this.delegate, value, format, metadata),
125+
this
126+
);
121127
}
122-
128+
123129
/**
124130
* List all items (files) and prefixes (folders) under this storage reference.
125131
*
@@ -139,9 +145,11 @@ export class ReferenceCompat implements types.Reference {
139145
*/
140146
listAll(): Promise<types.ListResult> {
141147
validate('listAll', [], arguments);
142-
return listAll(this.delegate).then(r => new ListResultCompat(r));
148+
return listAll(this.delegate).then(
149+
r => new ListResultCompat(r, ref => new ReferenceCompat(ref))
150+
);
143151
}
144-
152+
145153
/**
146154
* List items (files) and prefixes (folders) under this storage reference.
147155
*
@@ -164,7 +172,9 @@ export class ReferenceCompat implements types.Reference {
164172
*/
165173
list(options?: ListOptions | null): Promise<types.ListResult> {
166174
validate('list', [listOptionSpec(true)], arguments);
167-
return list(this.delegate, options).then(r => new ListResultCompat(r));
175+
return list(this.delegate, options).then(
176+
r => new ListResultCompat(r, ref => new ReferenceCompat(ref))
177+
);
168178
}
169179

170180
/**

packages/storage/compat/service.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { StorageService, isUrl, ref } from '../src/service';
2020
import { Location } from '../src/implementation/location';
2121
import * as args from '../src/implementation/args';
2222
import { ReferenceCompat } from './reference';
23+
import { Reference } from '../src/reference';
2324

2425
export function urlValidator(maybeUrl: unknown): void {
2526
if (typeof maybeUrl !== 'string') {
@@ -51,21 +52,22 @@ export function pathValidator(path: unknown): void {
5152
* @struct
5253
*/
5354
export class StorageServiceCompat implements types.FirebaseStorage {
54-
55-
constructor(readonly delegate: StorageService) {
56-
}
55+
constructor(
56+
readonly delegate: StorageService,
57+
private converter: (ref: Reference) => ReferenceCompat
58+
) {}
5759

5860
app = this.delegate.app;
5961
maxOperationRetryTime = this.delegate.maxOperationRetryTime;
60-
maxUploadRetryTime = this.delegate.maxUploadRetryTime
61-
62+
maxUploadRetryTime = this.delegate.maxUploadRetryTime;
63+
6264
/**
6365
* Returns a firebaseStorage.Reference for the given path in the default
6466
* bucket.
6567
*/
6668
ref(path?: string): types.Reference {
6769
args.validate('ref', [args.stringSpec(pathValidator, true)], arguments);
68-
return new ReferenceCompat(ref(this.delegate, path));
70+
return this.converter(ref(this.delegate, path));
6971
}
7072

7173
/**
@@ -78,7 +80,7 @@ export class StorageServiceCompat implements types.FirebaseStorage {
7880
[args.stringSpec(urlValidator, false)],
7981
arguments
8082
);
81-
return new ReferenceCompat(ref(this.delegate, url)) as types.Reference;
83+
return this.converter(ref(this.delegate, url)) as types.Reference;
8284
}
8385

8486
setMaxUploadRetryTime(time: number): void {

packages/storage/compat/task.ts

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,41 @@
1717

1818
import { UploadTask } from '../src/task';
1919
import { UploadTaskSnapshotCompat } from './tasksnapshot';
20-
import { UploadTaskSnapshot } from '../src/tasksnapshot';
21-
import {
22-
taskStateFromInternalTaskState,
23-
TaskEvent
24-
} from '../src/implementation/taskenums';
25-
import { ReferenceCompat } from './reference';
26-
import { FbsBlob } from '../src/implementation/blob';
27-
import { Metadata } from '../src/metadata';
20+
import { TaskEvent } from '../src/implementation/taskenums';
2821
import { ErrorFn, CompleteFn, Unsubscribe, Subscribe } from '@firebase/util';
2922
import * as types from '@firebase/storage-types';
3023
import { StorageObserver } from '../src/implementation/observer';
31-
import * as typeUtils from "../src/implementation/type";
24+
import { UploadTaskSnapshot } from '../src/tasksnapshot';
25+
import { ReferenceCompat } from './reference';
3226

3327
export class UploadTaskCompat implements types.UploadTask {
3428
constructor(
35-
private readonly delegate : UploadTask
36-
) {
37-
}
38-
39-
snapshot = new UploadTaskSnapshotCompat(this.delegate.snapshot);
29+
private readonly delegate: UploadTask,
30+
private readonly ref: ReferenceCompat
31+
) {}
32+
33+
snapshot = new UploadTaskSnapshotCompat(
34+
this.delegate.snapshot,
35+
this,
36+
this.ref
37+
);
4038

4139
cancel = this.delegate.cancel;
4240
catch = this.delegate.catch;
4341
pause = this.delegate.pause;
44-
resume = this.delegate.pause;
42+
resume = this.delegate.resume;
4543

4644
then(
47-
onFulfilled?: ((a: UploadTaskSnapshotCompat) => any) | null,
48-
onRejected?: ((a: Error) => any) | null
49-
): Promise<any> {
50-
return this.delegate.then((snapshot) => {
45+
onFulfilled?: ((a: UploadTaskSnapshotCompat) => unknown) | null,
46+
onRejected?: ((a: Error) => unknown) | null
47+
): Promise<unknown> {
48+
return this.delegate.then(snapshot => {
5149
if (onFulfilled) {
52-
return onFulfilled(new UploadTaskSnapshotCompat(snapshot));
50+
return onFulfilled(
51+
new UploadTaskSnapshotCompat(snapshot, this, this.ref)
52+
);
5353
}
54-
}, onRejected)
54+
}, onRejected);
5555
}
5656

5757
on(
@@ -64,6 +64,11 @@ export class UploadTaskCompat implements types.UploadTask {
6464
completed?: CompleteFn | null
6565
): Unsubscribe | Subscribe<UploadTaskSnapshotCompat> {
6666
// TODO: Wrap all returned values in new snapshot
67-
return this.delegate.on(type, nextOrObserver as any, error, completed);
67+
return this.delegate.on(
68+
type,
69+
nextOrObserver as Partial<StorageObserver<UploadTaskSnapshot>>,
70+
error,
71+
completed
72+
);
6873
}
6974
}

packages/storage/compat/tasksnapshot.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,21 @@
1515
* limitations under the License.
1616
*/
1717

18-
1918
import * as types from '@firebase/storage-types';
20-
import { TaskState } from '../src/implementation/taskenums';
21-
import { Metadata } from '../src/metadata';
2219
import { ReferenceCompat } from './reference';
2320
import { UploadTaskCompat } from './task';
24-
import {UploadTaskSnapshot} from "../src/tasksnapshot";
21+
import { UploadTaskSnapshot } from '../src/tasksnapshot';
2522

26-
export class UploadTaskSnapshotCompat implements types.UploadTaskSnapshot{
27-
28-
constructor(readonly delegate: UploadTaskSnapshot) {}
23+
export class UploadTaskSnapshotCompat implements types.UploadTaskSnapshot {
24+
constructor(
25+
readonly delegate: UploadTaskSnapshot,
26+
public task: UploadTaskCompat,
27+
public ref: ReferenceCompat
28+
) {}
2929

3030
bytesTransferred = this.delegate.bytesTransferred;
3131
metadata = this.delegate.metadata;
32-
ref = new ReferenceCompat(this.delegate.ref);
3332
state = this.delegate.state;
34-
task = new UploadTaskCompat(this.delegate.task);
33+
// task = new UploadTaskCompat(this.delegate.task);
3534
totalBytes = this.delegate.bytesTransferred;
3635
}

packages/storage/src/implementation/list.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function fromBackendResponse(
5757
const listResult: ListResult = {
5858
prefixes: [],
5959
items: [],
60-
nextPageToken: resource['nextPageToken']
60+
nextPageToken: resource['nextPageToken'] || null
6161
};
6262
if (resource[PREFIXES_KEY]) {
6363
for (const path of resource[PREFIXES_KEY]) {

packages/storage/src/list.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,16 @@
1515
* limitations under the License.
1616
*/
1717

18-
1918
import * as types from '@firebase/storage-types';
2019
import { Reference } from './reference';
2120

2221
/**
2322
* @fileoverview Documentation for ListOptions and ListResult format.
2423
*/
25-
export interface ListOptions extends types.ListOptions {
26-
}
24+
export interface ListOptions extends types.ListOptions {}
2725

28-
export interface ListResult {
29-
prefixes: Reference[];
26+
export interface ListResult {
27+
prefixes: Reference[];
3028
items: Reference[];
3129
nextPageToken: string | null;
3230
}

packages/storage/src/metadata.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ import { Reference } from './reference';
2222
* @fileoverview Documentation for the metadata format.
2323
*/
2424
interface Metadata extends types.FullMetadata {
25+
type: string | undefined;
26+
md5Hash: string | undefined;
27+
cacheControl: string | undefined;
28+
contentDisposition: string | undefined;
29+
contentEncoding: string | undefined;
30+
contentLanguage: string | undefined;
31+
contentType: string | undefined;
32+
downloadTokens: string[] | undefined;
33+
customMetadata: { [key: string]: string } | undefined;
34+
ref: Reference | undefined;
35+
36+
[prop: string]: unknown;
2537
}
2638

2739
export { Metadata };

packages/storage/src/reference.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,10 @@ export function uploadString(
207207
* folder. `nextPageToken` is never returned.
208208
*/
209209
export function listAll(ref: Reference): Promise<ListResult> {
210-
const accumulator = {
210+
const accumulator: ListResult = {
211211
prefixes: [],
212-
items: []
212+
items: [],
213+
nextPageToken: null
213214
};
214215
return listAllHelper(ref, accumulator).then(() => accumulator);
215216
}

0 commit comments

Comments
 (0)