Skip to content

Commit fb27e02

Browse files
committed
Move old validation scheme to compat, fix some tests
1 parent 38ca3bb commit fb27e02

File tree

12 files changed

+172
-189
lines changed

12 files changed

+172
-189
lines changed

packages/storage/exp-types/index.d.ts renamed to packages/storage-types/exp/index.d.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,4 @@ export class FirebaseStorage {
104104
app: FirebaseApp | null;
105105
maxOperationRetryTime: number;
106106
maxUploadRetryTime: number;
107-
setMaxOperationRetryTime(time: number): void;
108-
setMaxUploadRetryTime(time: number): void;
109-
}
110-
111-
declare module '@firebase/component' {
112-
interface NameServiceMapping {
113-
'storage-exp': FirebaseStorage;
114-
}
115107
}

packages/storage/.eslintrc.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ module.exports = {
3737
'import/no-extraneous-dependencies': [
3838
'error',
3939
{
40-
'packageDir': [path.resolve(__dirname, '../../'), __dirname]
40+
'packageDir': [
41+
path.resolve(__dirname, '../../'),
42+
__dirname,
43+
path.resolve(__dirname, 'exp')
44+
]
4145
}
4246
]
4347
}

packages/storage/compat/reference.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,26 @@ import {
2828
updateMetadata,
2929
deleteObject
3030
} from '../src/reference';
31-
import { validate, stringSpec } from '../src/implementation/args';
31+
import {
32+
validate,
33+
stringSpec,
34+
listOptionSpec,
35+
metadataSpec,
36+
uploadDataSpec
37+
} from '../src/implementation/args';
3238
import { Metadata } from '../src/metadata';
3339
import { UploadTask } from '../src/task';
34-
import { StringFormat } from '../src/implementation/string';
40+
import { StringFormat, formatValidator } from '../src/implementation/string';
3541
import { ListResult, ListOptions } from '../src/list';
3642

3743
export class ReferenceCompat extends Reference {
3844
static fromReference(ref: Reference): ReferenceCompat {
3945
return new ReferenceCompat(ref.service, ref.location);
4046
}
47+
toString(): string {
48+
validate('toString', [], arguments);
49+
return super.toString();
50+
}
4151
/**
4252
* @return A reference to the object obtained by
4353
* appending childPath, removing any duplicate, beginning, or trailing
@@ -54,6 +64,7 @@ export class ReferenceCompat extends Reference {
5464
* current object, or null if the current object is the root.
5565
*/
5666
get parent(): ReferenceCompat | null {
67+
validate('parent', [], arguments);
5768
const reference = getParent(this);
5869
if (reference == null) {
5970
return null;
@@ -71,6 +82,8 @@ export class ReferenceCompat extends Reference {
7182
data: Blob | Uint8Array | ArrayBuffer,
7283
metadata: Metadata | null = null
7384
): UploadTask {
85+
validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);
86+
this.throwIfRoot_('put');
7487
return uploadBytes(this, data, metadata);
7588
}
7689
/**
@@ -85,6 +98,12 @@ export class ReferenceCompat extends Reference {
8598
format: StringFormat = StringFormat.RAW,
8699
metadata?: Metadata
87100
): UploadTask {
101+
validate(
102+
'putString',
103+
[stringSpec(), stringSpec(formatValidator, true), metadataSpec(true)],
104+
arguments
105+
);
106+
this.throwIfRoot_('putString');
88107
return uploadString(this, value, format, metadata);
89108
}
90109
/**
@@ -105,6 +124,7 @@ export class ReferenceCompat extends Reference {
105124
* folder. `nextPageToken` is never returned.
106125
*/
107126
listAll(): Promise<ListResult> {
127+
validate('listAll', [], arguments);
108128
return listAll(this);
109129
}
110130
/**
@@ -128,6 +148,7 @@ export class ReferenceCompat extends Reference {
128148
* can be used to get the rest of the results.
129149
*/
130150
list(options?: ListOptions | null): Promise<ListResult> {
151+
validate('list', [listOptionSpec(true)], arguments);
131152
return list(this, options);
132153
}
133154

@@ -137,6 +158,7 @@ export class ReferenceCompat extends Reference {
137158
* rejected.
138159
*/
139160
getMetadata(): Promise<Metadata> {
161+
validate('getMetadata', [], arguments);
140162
return getMetadata(this);
141163
}
142164

@@ -150,6 +172,7 @@ export class ReferenceCompat extends Reference {
150172
* @see firebaseStorage.Reference.prototype.getMetadata
151173
*/
152174
updateMetadata(metadata: Metadata): Promise<Metadata> {
175+
validate('updateMetadata', [metadataSpec()], arguments);
153176
return updateMetadata(this, metadata);
154177
}
155178

@@ -158,6 +181,7 @@ export class ReferenceCompat extends Reference {
158181
* URL for this object.
159182
*/
160183
getDownloadURL(): Promise<string> {
184+
validate('getDownloadURL', [], arguments);
161185
return getDownloadURL(this);
162186
}
163187

@@ -166,6 +190,8 @@ export class ReferenceCompat extends Reference {
166190
* @return A promise that resolves if the deletion succeeds.
167191
*/
168192
delete(): Promise<void> {
193+
validate('delete', [], arguments);
194+
this.throwIfRoot_('delete');
169195
return deleteObject(this);
170196
}
171197
}

packages/storage/compat/service.ts

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

18-
import { StorageService, pathValidator, urlValidator } from '../src/service';
18+
import { StorageService, isUrl } from '../src/service';
19+
import { Location } from '../src/implementation/location';
1920
import { FirebaseApp } from '@firebase/app-types';
2021
import { Provider } from '@firebase/component';
2122
import { FirebaseAuthInternalName } from '@firebase/auth-interop-types';
2223
import { XhrIoPool } from '../src/implementation/xhriopool';
23-
import { Reference } from '../src/reference';
2424
import * as args from '../src/implementation/args';
2525
import { ReferenceCompat } from './reference';
2626

27+
export function urlValidator(maybeUrl: unknown): void {
28+
if (typeof maybeUrl !== 'string') {
29+
throw 'Path is not a string.';
30+
}
31+
if (!isUrl) {
32+
throw 'Expected full URL but got a child path, use ref instead.';
33+
}
34+
try {
35+
Location.makeFromUrl(maybeUrl as string);
36+
} catch (e) {
37+
throw 'Expected valid full URL but got an invalid one.';
38+
}
39+
}
40+
41+
export function pathValidator(path: unknown): void {
42+
if (typeof path !== 'string') {
43+
throw 'Path is not a string.';
44+
}
45+
if (isUrl(path)) {
46+
throw 'Expected child path but got a URL, use refFromURL instead.';
47+
}
48+
}
49+
2750
/**
2851
* A service that provides firebaseStorage.Reference instances.
2952
* @param opt_url gs:// url to a custom Storage Bucket
@@ -62,13 +85,33 @@ export class StorageServiceCompat extends StorageService {
6285
* Returns a firebaseStorage.Reference object for the given absolute URL,
6386
* which must be a gs:// or http[s]:// URL.
6487
*/
65-
refFromURL(url: string): Reference {
88+
refFromURL(url: string): ReferenceCompat {
6689
args.validate(
6790
'refFromURL',
6891
[args.stringSpec(urlValidator, false)],
6992
arguments
7093
);
71-
return new Reference(this, url);
94+
return new ReferenceCompat(this, url);
95+
}
96+
97+
setMaxUploadRetryTime(time: number): void {
98+
args.validate(
99+
'setMaxUploadRetryTime',
100+
[args.nonNegativeNumberSpec()],
101+
arguments
102+
);
103+
// Can't call get/set on super class.
104+
this.maxUploadRetryTime_ = time;
105+
}
106+
107+
setMaxOperationRetryTime(time: number): void {
108+
args.validate(
109+
'setMaxOperationRetryTime',
110+
[args.nonNegativeNumberSpec()],
111+
arguments
112+
);
113+
// Can't call get/set on super class.
114+
this.maxOperationRetryTime_ = time;
72115
}
73116

74117
get app(): FirebaseApp | null {

packages/storage/exp/api.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

packages/storage/exp/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
} from '@firebase/component';
3030

3131
import { name, version } from '../package.json';
32+
import { FirebaseStorage } from '@firebase/storage-types/exp';
3233

3334
export { ref } from '../src/service';
3435
export {
@@ -79,3 +80,9 @@ export function registerStorage(): void {
7980
}
8081

8182
registerStorage();
83+
84+
declare module '@firebase/component' {
85+
interface NameServiceMapping {
86+
'storage-exp': FirebaseStorage;
87+
}
88+
}

packages/storage/exp/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
"main": "../dist/exp/index.cjs.js",
55
"module": "../dist/exp/index.esm2017.js",
66
"browser": "../dist/exp/index.esm2017.js",
7-
"typings": "../exp-types/index.d.ts",
8-
"private": true
7+
"typings": "./dist/exp/index.d.ts",
8+
"private": true,
9+
"dependencies": {
10+
"@firebase/app-exp": "0.0.800"
11+
}
912
}

0 commit comments

Comments
 (0)