Skip to content

Commit 653d87b

Browse files
committed
Saving work in progress
1 parent 4c3c7aa commit 653d87b

File tree

20 files changed

+656
-903
lines changed

20 files changed

+656
-903
lines changed

packages/storage-types/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export interface UploadTask {
107107
on(
108108
event: TaskEvent,
109109
nextOrObserver?:
110-
| Partial<StorageObserver<UploadTaskSnapshot>>
110+
| StorageObserver<UploadTaskSnapshot>
111111
| null
112112
| ((a: UploadTaskSnapshot) => unknown),
113113
error?: ((a: FirebaseStorageError) => any) | null,

packages/storage/compat/index.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,18 @@ function factory(
4343
url?: string
4444
): types.FirebaseStorage {
4545
// Dependencies
46+
// TODO: This should eventually be 'app-compat'
4647
const app = container.getProvider('app').getImmediate();
4748
const authProvider = container.getProvider('auth-internal');
4849

49-
return new StorageServiceCompat(
50+
// TODO: get StorageService instance from component framework instead
51+
// of creating a new one.
52+
const storageServiceCompat: StorageServiceCompat = new StorageServiceCompat(
53+
app,
5054
new StorageService(app, authProvider, new XhrIoPool(), url),
51-
ref => new ReferenceCompat(ref)
55+
ref => new ReferenceCompat(ref, storageServiceCompat)
5256
);
57+
return storageServiceCompat;
5358
}
5459

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

packages/storage/compat/list.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ import { Reference } from '../src/reference';
2222

2323
export class ListResultCompat implements types.ListResult {
2424
constructor(
25-
private readonly delegate: ListResult,
26-
private converter: (ref: Reference) => ReferenceCompat
25+
private readonly _delegate: ListResult,
26+
private _referenceConverter: (ref: Reference) => ReferenceCompat
2727
) {}
2828

29-
prefixes = this.delegate.prefixes.map(v => this.converter(v));
30-
items = this.delegate.items.map(v => this.converter(v));
31-
nextPageToken = this.delegate.nextPageToken;
29+
prefixes = this._delegate.prefixes.map(v => this._referenceConverter(v));
30+
items = this._delegate.items.map(v => this._referenceConverter(v));
31+
nextPageToken = this._delegate.nextPageToken || null;
3232
}

packages/storage/compat/reference.ts

Lines changed: 42 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -29,102 +29,86 @@ import {
2929
deleteObject
3030
} from '../src/reference';
3131
import * as types from '@firebase/storage-types';
32-
import {
33-
validate,
34-
stringSpec,
35-
listOptionSpec,
36-
metadataSpec,
37-
uploadDataSpec
38-
} from '../src/implementation/args';
3932
import { Metadata } from '../src/metadata';
40-
import { StringFormat, formatValidator } from '../src/implementation/string';
33+
import { StringFormat } from '../src/implementation/string';
4134
import { ListOptions } from '../src/list';
4235
import { UploadTaskCompat } from './task';
4336
import { ListResultCompat } from './list';
4437
import { StorageServiceCompat } from './service';
4538
import { invalidRootOperation } from '../src/implementation/error';
4639

4740
export class ReferenceCompat implements types.Reference {
48-
constructor(private readonly delegate: Reference) {}
41+
constructor(
42+
private readonly _delegate: Reference,
43+
public storage: StorageServiceCompat
44+
) {}
4945

50-
storage = new StorageServiceCompat(
51-
this.delegate.storage,
52-
ref => new ReferenceCompat(ref)
53-
) as types.FirebaseStorage;
54-
name = this.delegate.name;
55-
bucket = this.delegate.bucket;
56-
fullPath = this.delegate.fullPath;
46+
name = this._delegate.name;
47+
bucket = this._delegate.bucket;
48+
fullPath = this._delegate.fullPath;
5749

5850
toString(): string {
59-
validate('toString', [], arguments);
60-
return this.delegate.toString();
51+
return this._delegate.toString();
6152
}
6253

6354
/**
64-
* @return A reference to the object obtained by
55+
* @returns A reference to the object obtained by
6556
* appending childPath, removing any duplicate, beginning, or trailing
6657
* slashes.
6758
*/
6859
child(childPath: string): types.Reference {
69-
validate('child', [stringSpec()], arguments);
70-
const reference = getChild(this.delegate, childPath);
71-
return new ReferenceCompat(reference);
60+
const reference = getChild(this._delegate, childPath);
61+
return new ReferenceCompat(reference, this.storage);
7262
}
7363

7464
get root(): types.Reference {
75-
return new ReferenceCompat(this.delegate.root) as types.Reference;
65+
return new ReferenceCompat(this._delegate.root, this.storage);
7666
}
7767

7868
/**
79-
* @return A reference to the parent of the
69+
* @returns A reference to the parent of the
8070
* current object, or null if the current object is the root.
8171
*/
8272
get parent(): types.Reference | null {
83-
const reference = getParent(this.delegate);
73+
const reference = getParent(this._delegate);
8474
if (reference == null) {
8575
return null;
8676
}
87-
return new ReferenceCompat(reference);
77+
return new ReferenceCompat(reference, this.storage);
8878
}
8979

9080
/**
9181
* Uploads a blob to this object's location.
92-
* @param data The blob to upload.
93-
* @return An UploadTask that lets you control and
82+
* @param data - The blob to upload.
83+
* @returns An UploadTask that lets you control and
9484
* observe the upload.
9585
*/
9686
put(
9787
data: Blob | Uint8Array | ArrayBuffer,
9888
metadata?: Metadata
9989
): types.UploadTask {
100-
validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);
10190
this._throwIfRoot('put');
10291
return new UploadTaskCompat(
103-
uploadBytes(this.delegate, data, metadata),
92+
uploadBytes(this._delegate, data, metadata),
10493
this
10594
);
10695
}
10796

10897
/**
10998
* Uploads a string to this object's location.
110-
* @param value The string to upload.
111-
* @param format The format of the string to upload.
112-
* @return An UploadTask that lets you control and
99+
* @param value - The string to upload.
100+
* @param format - The format of the string to upload.
101+
* @returns An UploadTask that lets you control and
113102
* observe the upload.
114103
*/
115104
putString(
116105
value: string,
117106
format: StringFormat = StringFormat.RAW,
118107
metadata?: Metadata
119108
): types.UploadTask {
120-
validate(
121-
'putString',
122-
[stringSpec(), stringSpec(formatValidator, true), metadataSpec(true)],
123-
arguments
124-
);
125109
this._throwIfRoot('putString');
126110
return new UploadTaskCompat(
127-
uploadString(this.delegate, value, format, metadata),
111+
uploadString(this._delegate, value, format, metadata),
128112
this
129113
);
130114
}
@@ -141,15 +125,15 @@ export class ReferenceCompat implements types.Reference {
141125
* Warning: listAll may potentially consume too many resources if there are
142126
* too many results.
143127
*
144-
* @return A Promise that resolves with all the items and prefixes under
128+
* @returns A Promise that resolves with all the items and prefixes under
145129
* the current storage reference. `prefixes` contains references to
146130
* sub-directories and `items` contains references to objects in this
147131
* folder. `nextPageToken` is never returned.
148132
*/
149133
listAll(): Promise<types.ListResult> {
150-
validate('listAll', [], arguments);
151-
return listAll(this.delegate).then(
152-
r => new ListResultCompat(r, ref => new ReferenceCompat(ref))
134+
return listAll(this._delegate).then(
135+
r =>
136+
new ListResultCompat(r, ref => new ReferenceCompat(ref, this.storage))
153137
);
154138
}
155139

@@ -159,24 +143,23 @@ export class ReferenceCompat implements types.Reference {
159143
* List API is only available for Firebase Rules Version 2.
160144
*
161145
* GCS is a key-blob store. Firebase Storage imposes the semantic of '/'
162-
* delimited folder structure.
163-
* Refer to GCS's List API if you want to learn more.
146+
* delimited folder structure. Refer to GCS's List API if you want to learn more.
164147
*
165148
* To adhere to Firebase Rules's Semantics, Firebase Storage does not
166149
* support objects whose paths end with "/" or contain two consecutive
167150
* "/"s. Firebase Storage List API will filter these unsupported objects.
168151
* list() may fail if there are too many unsupported objects in the bucket.
169152
*
170-
* @param options See ListOptions for details.
171-
* @return A Promise that resolves with the items and prefixes.
153+
* @param options - See ListOptions for details.
154+
* @returns A Promise that resolves with the items and prefixes.
172155
* `prefixes` contains references to sub-folders and `items`
173156
* contains references to objects in this folder. `nextPageToken`
174157
* can be used to get the rest of the results.
175158
*/
176159
list(options?: ListOptions | null): Promise<types.ListResult> {
177-
validate('list', [listOptionSpec(true)], arguments);
178-
return list(this.delegate, options).then(
179-
r => new ListResultCompat(r, ref => new ReferenceCompat(ref))
160+
return list(this._delegate, options).then(
161+
r =>
162+
new ListResultCompat(r, ref => new ReferenceCompat(ref, this.storage))
180163
);
181164
}
182165

@@ -186,45 +169,41 @@ export class ReferenceCompat implements types.Reference {
186169
* rejected.
187170
*/
188171
getMetadata(): Promise<Metadata> {
189-
validate('getMetadata', [], arguments);
190-
return getMetadata(this.delegate);
172+
return getMetadata(this._delegate);
191173
}
192174

193175
/**
194176
* Updates the metadata for this object.
195-
* @param metadata The new metadata for the object.
177+
* @param metadata - The new metadata for the object.
196178
* Only values that have been explicitly set will be changed. Explicitly
197179
* setting a value to null will remove the metadata.
198-
* @return A promise that resolves
180+
* @returns A promise that resolves
199181
* with the new metadata for this object.
200182
* @see firebaseStorage.Reference.prototype.getMetadata
201183
*/
202184
updateMetadata(metadata: Metadata): Promise<Metadata> {
203-
validate('updateMetadata', [metadataSpec()], arguments);
204-
return updateMetadata(this.delegate, metadata);
185+
return updateMetadata(this._delegate, metadata);
205186
}
206187

207188
/**
208-
* @return A promise that resolves with the download
189+
* @returns A promise that resolves with the download
209190
* URL for this object.
210191
*/
211192
getDownloadURL(): Promise<string> {
212-
validate('getDownloadURL', [], arguments);
213-
return getDownloadURL(this.delegate);
193+
return getDownloadURL(this._delegate);
214194
}
215195

216196
/**
217197
* Deletes the object at this location.
218-
* @return A promise that resolves if the deletion succeeds.
198+
* @returns A promise that resolves if the deletion succeeds.
219199
*/
220200
delete(): Promise<void> {
221-
validate('delete', [], arguments);
222201
this._throwIfRoot('delete');
223-
return deleteObject(this.delegate);
202+
return deleteObject(this._delegate);
224203
}
225204

226205
private _throwIfRoot(name: string): void {
227-
if (this.delegate.location.path === '') {
206+
if (this._delegate.location.path === '') {
228207
throw invalidRootOperation(name);
229208
}
230209
}

0 commit comments

Comments
 (0)