fix(http): Update types for TypeScript nullability support
This reverts commit 268884296a
.
This commit is contained in:
parent
014594fe8f
commit
ec028b8109
|
@ -10,7 +10,7 @@ import {Injectable} from '@angular/core';
|
||||||
|
|
||||||
let _nextRequestId = 0;
|
let _nextRequestId = 0;
|
||||||
export const JSONP_HOME = '__ng_jsonp__';
|
export const JSONP_HOME = '__ng_jsonp__';
|
||||||
let _jsonpConnections: {[key: string]: any} = null;
|
let _jsonpConnections: {[key: string]: any}|null = null;
|
||||||
|
|
||||||
function _getJsonpConnections(): {[key: string]: any} {
|
function _getJsonpConnections(): {[key: string]: any} {
|
||||||
const w: {[key: string]: any} = typeof window == 'object' ? window : {};
|
const w: {[key: string]: any} = typeof window == 'object' ? window : {};
|
||||||
|
|
|
@ -115,7 +115,7 @@ export class XHRConnection implements Connection {
|
||||||
if (!req.headers.has('Accept')) {
|
if (!req.headers.has('Accept')) {
|
||||||
req.headers.append('Accept', 'application/json, text/plain, */*');
|
req.headers.append('Accept', 'application/json, text/plain, */*');
|
||||||
}
|
}
|
||||||
req.headers.forEach((values, name) => _xhr.setRequestHeader(name, values.join(',')));
|
req.headers.forEach((values, name) => _xhr.setRequestHeader(name !, values.join(',')));
|
||||||
|
|
||||||
// Select the correct buffer type to store the response
|
// Select the correct buffer type to store the response
|
||||||
if (req.responseType != null && _xhr.responseType != null) {
|
if (req.responseType != null && _xhr.responseType != null) {
|
||||||
|
|
|
@ -44,11 +44,11 @@ export class RequestOptions {
|
||||||
* Http method with which to execute a {@link Request}.
|
* Http method with which to execute a {@link Request}.
|
||||||
* Acceptable methods are defined in the {@link RequestMethod} enum.
|
* Acceptable methods are defined in the {@link RequestMethod} enum.
|
||||||
*/
|
*/
|
||||||
method: RequestMethod|string;
|
method: RequestMethod|string|null;
|
||||||
/**
|
/**
|
||||||
* {@link Headers} to be attached to a {@link Request}.
|
* {@link Headers} to be attached to a {@link Request}.
|
||||||
*/
|
*/
|
||||||
headers: Headers;
|
headers: Headers|null;
|
||||||
/**
|
/**
|
||||||
* Body to be used when creating a {@link Request}.
|
* Body to be used when creating a {@link Request}.
|
||||||
*/
|
*/
|
||||||
|
@ -56,7 +56,7 @@ export class RequestOptions {
|
||||||
/**
|
/**
|
||||||
* Url with which to perform a {@link Request}.
|
* Url with which to perform a {@link Request}.
|
||||||
*/
|
*/
|
||||||
url: string;
|
url: string|null;
|
||||||
/**
|
/**
|
||||||
* Search parameters to be included in a {@link Request}.
|
* Search parameters to be included in a {@link Request}.
|
||||||
*/
|
*/
|
||||||
|
@ -72,11 +72,11 @@ export class RequestOptions {
|
||||||
/**
|
/**
|
||||||
* Enable use credentials for a {@link Request}.
|
* Enable use credentials for a {@link Request}.
|
||||||
*/
|
*/
|
||||||
withCredentials: boolean;
|
withCredentials: boolean|null;
|
||||||
/*
|
/*
|
||||||
* Select a buffer to store the response, such as ArrayBuffer, Blob, Json (or Document)
|
* Select a buffer to store the response, such as ArrayBuffer, Blob, Json (or Document)
|
||||||
*/
|
*/
|
||||||
responseType: ResponseContentType;
|
responseType: ResponseContentType|null;
|
||||||
|
|
||||||
// TODO(Dzmitry): remove search when this.search is removed
|
// TODO(Dzmitry): remove search when this.search is removed
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -128,8 +128,8 @@ export class RequestOptions {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private _mergeSearchParams(params: string|URLSearchParams|
|
private _mergeSearchParams(params?: string|URLSearchParams|{[key: string]: any | any[]}|
|
||||||
{[key: string]: any | any[]}): URLSearchParams {
|
null): URLSearchParams {
|
||||||
if (!params) return this.params;
|
if (!params) return this.params;
|
||||||
|
|
||||||
if (params instanceof URLSearchParams) {
|
if (params instanceof URLSearchParams) {
|
||||||
|
|
|
@ -46,25 +46,25 @@ export class ResponseOptions {
|
||||||
/**
|
/**
|
||||||
* String, Object, ArrayBuffer or Blob representing the body of the {@link Response}.
|
* String, Object, ArrayBuffer or Blob representing the body of the {@link Response}.
|
||||||
*/
|
*/
|
||||||
body: string|Object|ArrayBuffer|Blob;
|
body: string|Object|ArrayBuffer|Blob|null;
|
||||||
/**
|
/**
|
||||||
* Http {@link http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html status code}
|
* Http {@link http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html status code}
|
||||||
* associated with the response.
|
* associated with the response.
|
||||||
*/
|
*/
|
||||||
status: number;
|
status: number|null;
|
||||||
/**
|
/**
|
||||||
* Response {@link Headers headers}
|
* Response {@link Headers headers}
|
||||||
*/
|
*/
|
||||||
headers: Headers;
|
headers: Headers|null;
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
statusText: string;
|
statusText: string|null;
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
type: ResponseType;
|
type: ResponseType|null;
|
||||||
url: string;
|
url: string|null;
|
||||||
constructor({body, status, headers, statusText, type, url}: ResponseOptionsArgs = {}) {
|
constructor({body, status, headers, statusText, type, url}: ResponseOptionsArgs = {}) {
|
||||||
this.body = body != null ? body : null;
|
this.body = body != null ? body : null;
|
||||||
this.status = status != null ? status : null;
|
this.status = status != null ? status : null;
|
||||||
|
|
|
@ -41,7 +41,7 @@ export class Headers {
|
||||||
_normalizedNames: Map<string, string> = new Map();
|
_normalizedNames: Map<string, string> = new Map();
|
||||||
|
|
||||||
// TODO(vicb): any -> string|string[]
|
// TODO(vicb): any -> string|string[]
|
||||||
constructor(headers?: Headers|{[name: string]: any}) {
|
constructor(headers?: Headers|{[name: string]: any}|null) {
|
||||||
if (!headers) {
|
if (!headers) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,8 @@ export class Headers {
|
||||||
this._headers.delete(lcName);
|
this._headers.delete(lcName);
|
||||||
}
|
}
|
||||||
|
|
||||||
forEach(fn: (values: string[], name: string, headers: Map<string, string[]>) => void): void {
|
forEach(fn: (values: string[], name: string|undefined, headers: Map<string, string[]>) => void):
|
||||||
|
void {
|
||||||
this._headers.forEach(
|
this._headers.forEach(
|
||||||
(values, lcName) => fn(values, this._normalizedNames.get(lcName), this._headers));
|
(values, lcName) => fn(values, this._normalizedNames.get(lcName), this._headers));
|
||||||
}
|
}
|
||||||
|
@ -108,7 +109,7 @@ export class Headers {
|
||||||
/**
|
/**
|
||||||
* Returns first header that matches given name.
|
* Returns first header that matches given name.
|
||||||
*/
|
*/
|
||||||
get(name: string): string {
|
get(name: string): string|null {
|
||||||
const values = this.getAll(name);
|
const values = this.getAll(name);
|
||||||
|
|
||||||
if (values === null) {
|
if (values === null) {
|
||||||
|
@ -157,7 +158,7 @@ export class Headers {
|
||||||
this._headers.forEach((values: string[], name: string) => {
|
this._headers.forEach((values: string[], name: string) => {
|
||||||
const split: string[] = [];
|
const split: string[] = [];
|
||||||
values.forEach(v => split.push(...v.split(',')));
|
values.forEach(v => split.push(...v.split(',')));
|
||||||
serialized[this._normalizedNames.get(name)] = split;
|
serialized[this._normalizedNames.get(name) !] = split;
|
||||||
});
|
});
|
||||||
|
|
||||||
return serialized;
|
return serialized;
|
||||||
|
@ -166,8 +167,8 @@ export class Headers {
|
||||||
/**
|
/**
|
||||||
* Returns list of header values for a given name.
|
* Returns list of header values for a given name.
|
||||||
*/
|
*/
|
||||||
getAll(name: string): string[] {
|
getAll(name: string): string[]|null {
|
||||||
return this.has(name) ? this._headers.get(name.toLowerCase()) : null;
|
return this.has(name) ? this._headers.get(name.toLowerCase()) || null : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -8,9 +8,10 @@
|
||||||
|
|
||||||
import {Injectable} from '@angular/core';
|
import {Injectable} from '@angular/core';
|
||||||
import {Observable} from 'rxjs/Observable';
|
import {Observable} from 'rxjs/Observable';
|
||||||
|
|
||||||
import {BaseRequestOptions, RequestOptions} from './base_request_options';
|
import {BaseRequestOptions, RequestOptions} from './base_request_options';
|
||||||
import {RequestMethod} from './enums';
|
import {RequestMethod} from './enums';
|
||||||
import {ConnectionBackend, RequestOptionsArgs} from './interfaces';
|
import {ConnectionBackend, RequestArgs, RequestOptionsArgs} from './interfaces';
|
||||||
import {Request} from './static_request';
|
import {Request} from './static_request';
|
||||||
import {Response} from './static_response';
|
import {Response} from './static_response';
|
||||||
|
|
||||||
|
@ -19,8 +20,8 @@ function httpRequest(backend: ConnectionBackend, request: Request): Observable<R
|
||||||
}
|
}
|
||||||
|
|
||||||
function mergeOptions(
|
function mergeOptions(
|
||||||
defaultOpts: BaseRequestOptions, providedOpts: RequestOptionsArgs, method: RequestMethod,
|
defaultOpts: BaseRequestOptions, providedOpts: RequestOptionsArgs | undefined,
|
||||||
url: string): RequestOptions {
|
method: RequestMethod, url: string): RequestArgs {
|
||||||
const newOptions = defaultOpts;
|
const newOptions = defaultOpts;
|
||||||
if (providedOpts) {
|
if (providedOpts) {
|
||||||
// Hack so Dart can used named parameters
|
// Hack so Dart can used named parameters
|
||||||
|
@ -33,10 +34,10 @@ function mergeOptions(
|
||||||
body: providedOpts.body,
|
body: providedOpts.body,
|
||||||
withCredentials: providedOpts.withCredentials,
|
withCredentials: providedOpts.withCredentials,
|
||||||
responseType: providedOpts.responseType
|
responseType: providedOpts.responseType
|
||||||
}));
|
})) as RequestArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
return newOptions.merge(new RequestOptions({method, url}));
|
return newOptions.merge(new RequestOptions({method, url})) as RequestArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -32,14 +32,14 @@ export function normalizeMethodName(method: string | RequestMethod): RequestMeth
|
||||||
|
|
||||||
export const isSuccess = (status: number): boolean => (status >= 200 && status < 300);
|
export const isSuccess = (status: number): boolean => (status >= 200 && status < 300);
|
||||||
|
|
||||||
export function getResponseURL(xhr: any): string {
|
export function getResponseURL(xhr: any): string|null {
|
||||||
if ('responseURL' in xhr) {
|
if ('responseURL' in xhr) {
|
||||||
return xhr.responseURL;
|
return xhr.responseURL;
|
||||||
}
|
}
|
||||||
if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
|
if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
|
||||||
return xhr.getResponseHeader('X-Request-URL');
|
return xhr.getResponseHeader('X-Request-URL');
|
||||||
}
|
}
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function stringToArrayBuffer(input: String): ArrayBuffer {
|
export function stringToArrayBuffer(input: String): ArrayBuffer {
|
||||||
|
|
|
@ -46,21 +46,21 @@ export abstract class XSRFStrategy { abstract configureRequest(req: Request): vo
|
||||||
* @experimental
|
* @experimental
|
||||||
*/
|
*/
|
||||||
export interface RequestOptionsArgs {
|
export interface RequestOptionsArgs {
|
||||||
url?: string;
|
url?: string|null;
|
||||||
method?: string|RequestMethod;
|
method?: string|RequestMethod|null;
|
||||||
/** @deprecated from 4.0.0. Use params instead. */
|
/** @deprecated from 4.0.0. Use params instead. */
|
||||||
search?: string|URLSearchParams|{[key: string]: any | any[]};
|
search?: string|URLSearchParams|{[key: string]: any | any[]}|null;
|
||||||
params?: string|URLSearchParams|{[key: string]: any | any[]};
|
params?: string|URLSearchParams|{[key: string]: any | any[]}|null;
|
||||||
headers?: Headers;
|
headers?: Headers|null;
|
||||||
body?: any;
|
body?: any;
|
||||||
withCredentials?: boolean;
|
withCredentials?: boolean|null;
|
||||||
responseType?: ResponseContentType;
|
responseType?: ResponseContentType|null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required structure when constructing new Request();
|
* Required structure when constructing new Request();
|
||||||
*/
|
*/
|
||||||
export interface RequestArgs extends RequestOptionsArgs { url: string; }
|
export interface RequestArgs extends RequestOptionsArgs { url: string|null; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for options to construct a Response, based on
|
* Interface for options to construct a Response, based on
|
||||||
|
@ -69,10 +69,10 @@ export interface RequestArgs extends RequestOptionsArgs { url: string; }
|
||||||
* @experimental
|
* @experimental
|
||||||
*/
|
*/
|
||||||
export interface ResponseOptionsArgs {
|
export interface ResponseOptionsArgs {
|
||||||
body?: string|Object|FormData|ArrayBuffer|Blob;
|
body?: string|Object|FormData|ArrayBuffer|Blob|null;
|
||||||
status?: number;
|
status?: number|null;
|
||||||
statusText?: string;
|
statusText?: string|null;
|
||||||
headers?: Headers;
|
headers?: Headers|null;
|
||||||
type?: ResponseType;
|
type?: ResponseType|null;
|
||||||
url?: string;
|
url?: string|null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ export class Request extends Body {
|
||||||
super();
|
super();
|
||||||
// TODO: assert that url is present
|
// TODO: assert that url is present
|
||||||
const url = requestOptions.url;
|
const url = requestOptions.url;
|
||||||
this.url = requestOptions.url;
|
this.url = requestOptions.url !;
|
||||||
if (requestOptions.params) {
|
if (requestOptions.params) {
|
||||||
const params = requestOptions.params.toString();
|
const params = requestOptions.params.toString();
|
||||||
if (params.length > 0) {
|
if (params.length > 0) {
|
||||||
|
@ -88,13 +88,13 @@ export class Request extends Body {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this._body = requestOptions.body;
|
this._body = requestOptions.body;
|
||||||
this.method = normalizeMethodName(requestOptions.method);
|
this.method = normalizeMethodName(requestOptions.method !);
|
||||||
// TODO(jeffbcross): implement behavior
|
// TODO(jeffbcross): implement behavior
|
||||||
// Defaults to 'omit', consistent with browser
|
// Defaults to 'omit', consistent with browser
|
||||||
this.headers = new Headers(requestOptions.headers);
|
this.headers = new Headers(requestOptions.headers);
|
||||||
this.contentType = this.detectContentType();
|
this.contentType = this.detectContentType();
|
||||||
this.withCredentials = requestOptions.withCredentials;
|
this.withCredentials = requestOptions.withCredentials !;
|
||||||
this.responseType = requestOptions.responseType;
|
this.responseType = requestOptions.responseType !;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -63,7 +63,7 @@ export class Response extends Body {
|
||||||
*
|
*
|
||||||
* Defaults to "OK"
|
* Defaults to "OK"
|
||||||
*/
|
*/
|
||||||
statusText: string;
|
statusText: string|null;
|
||||||
/**
|
/**
|
||||||
* Non-standard property
|
* Non-standard property
|
||||||
*
|
*
|
||||||
|
@ -81,17 +81,17 @@ export class Response extends Body {
|
||||||
* Headers object based on the `Headers` class in the [Fetch
|
* Headers object based on the `Headers` class in the [Fetch
|
||||||
* Spec](https://fetch.spec.whatwg.org/#headers-class).
|
* Spec](https://fetch.spec.whatwg.org/#headers-class).
|
||||||
*/
|
*/
|
||||||
headers: Headers;
|
headers: Headers|null;
|
||||||
|
|
||||||
constructor(responseOptions: ResponseOptions) {
|
constructor(responseOptions: ResponseOptions) {
|
||||||
super();
|
super();
|
||||||
this._body = responseOptions.body;
|
this._body = responseOptions.body;
|
||||||
this.status = responseOptions.status;
|
this.status = responseOptions.status !;
|
||||||
this.ok = (this.status >= 200 && this.status <= 299);
|
this.ok = (this.status >= 200 && this.status <= 299);
|
||||||
this.statusText = responseOptions.statusText;
|
this.statusText = responseOptions.statusText;
|
||||||
this.headers = responseOptions.headers;
|
this.headers = responseOptions.headers;
|
||||||
this.type = responseOptions.type;
|
this.type = responseOptions.type !;
|
||||||
this.url = responseOptions.url;
|
this.url = responseOptions.url !;
|
||||||
}
|
}
|
||||||
|
|
||||||
toString(): string {
|
toString(): string {
|
||||||
|
|
|
@ -93,7 +93,7 @@ export class URLSearchParams {
|
||||||
|
|
||||||
has(param: string): boolean { return this.paramsMap.has(param); }
|
has(param: string): boolean { return this.paramsMap.has(param); }
|
||||||
|
|
||||||
get(param: string): string {
|
get(param: string): string|null {
|
||||||
const storedParam = this.paramsMap.get(param);
|
const storedParam = this.paramsMap.get(param);
|
||||||
|
|
||||||
return Array.isArray(storedParam) ? storedParam[0] : null;
|
return Array.isArray(storedParam) ? storedParam[0] : null;
|
||||||
|
|
|
@ -59,13 +59,14 @@ export function main() {
|
||||||
]);
|
]);
|
||||||
backend = injector.get(JSONPBackend);
|
backend = injector.get(JSONPBackend);
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
sampleRequest = new Request(base.merge(new RequestOptions({url: 'https://google.com'})));
|
sampleRequest =
|
||||||
|
new Request(base.merge(new RequestOptions({url: 'https://google.com'})) as any);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => { existingScripts = []; });
|
afterEach(() => { existingScripts = []; });
|
||||||
|
|
||||||
it('should create a connection', () => {
|
it('should create a connection', () => {
|
||||||
let instance: JSONPConnection;
|
let instance: JSONPConnection = undefined !;
|
||||||
expect(() => instance = backend.createConnection(sampleRequest)).not.toThrow();
|
expect(() => instance = backend.createConnection(sampleRequest)).not.toThrow();
|
||||||
expect(instance).toBeAnInstanceOf(JSONPConnection);
|
expect(instance).toBeAnInstanceOf(JSONPConnection);
|
||||||
});
|
});
|
||||||
|
@ -146,8 +147,8 @@ export function main() {
|
||||||
RequestMethod.Head, RequestMethod.Patch]
|
RequestMethod.Head, RequestMethod.Patch]
|
||||||
.forEach(method => {
|
.forEach(method => {
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const req = new Request(
|
const req = new Request(base.merge(
|
||||||
base.merge(new RequestOptions({url: 'https://google.com', method: method})));
|
new RequestOptions({url: 'https://google.com', method: method})) as any);
|
||||||
expect(() => new JSONPConnection_(req, new MockBrowserJsonp()).response.subscribe())
|
expect(() => new JSONPConnection_(req, new MockBrowserJsonp()).response.subscribe())
|
||||||
.toThrowError();
|
.toThrowError();
|
||||||
});
|
});
|
||||||
|
|
|
@ -31,9 +31,11 @@ export function main() {
|
||||||
[{provide: ResponseOptions, useClass: BaseResponseOptions}, MockBackend]);
|
[{provide: ResponseOptions, useClass: BaseResponseOptions}, MockBackend]);
|
||||||
backend = injector.get(MockBackend);
|
backend = injector.get(MockBackend);
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
sampleRequest1 = new Request(base.merge(new RequestOptions({url: 'https://google.com'})));
|
sampleRequest1 =
|
||||||
|
new Request(base.merge(new RequestOptions({url: 'https://google.com'})) as any);
|
||||||
sampleResponse1 = new Response(new ResponseOptions({body: 'response1'}));
|
sampleResponse1 = new Response(new ResponseOptions({body: 'response1'}));
|
||||||
sampleRequest2 = new Request(base.merge(new RequestOptions({url: 'https://google.com'})));
|
sampleRequest2 =
|
||||||
|
new Request(base.merge(new RequestOptions({url: 'https://google.com'})) as any);
|
||||||
sampleResponse2 = new Response(new ResponseOptions({body: 'response2'}));
|
sampleResponse2 = new Response(new ResponseOptions({body: 'response2'}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -65,7 +67,7 @@ export function main() {
|
||||||
it('should allow responding after subscription with an error',
|
it('should allow responding after subscription with an error',
|
||||||
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
||||||
const connection: MockConnection = backend.createConnection(sampleRequest1);
|
const connection: MockConnection = backend.createConnection(sampleRequest1);
|
||||||
connection.response.subscribe(null, () => { async.done(); });
|
connection.response.subscribe(null !, () => { async.done(); });
|
||||||
connection.mockError(new Error('nope'));
|
connection.mockError(new Error('nope'));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@ -98,12 +100,12 @@ export function main() {
|
||||||
xit('should allow double subscribing',
|
xit('should allow double subscribing',
|
||||||
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
||||||
const responses: Response[] = [sampleResponse1, sampleResponse2];
|
const responses: Response[] = [sampleResponse1, sampleResponse2];
|
||||||
backend.connections.subscribe((c: MockConnection) => c.mockRespond(responses.shift()));
|
backend.connections.subscribe((c: MockConnection) => c.mockRespond(responses.shift() !));
|
||||||
const responseObservable: ReplaySubject<Response> =
|
const responseObservable: ReplaySubject<Response> =
|
||||||
backend.createConnection(sampleRequest1).response;
|
backend.createConnection(sampleRequest1).response;
|
||||||
responseObservable.subscribe(res => expect(res.text()).toBe('response1'));
|
responseObservable.subscribe(res => expect(res.text()).toBe('response1'));
|
||||||
responseObservable.subscribe(
|
responseObservable.subscribe(
|
||||||
res => expect(res.text()).toBe('response2'), null, async.done);
|
res => expect(res.text()).toBe('response2'), null !, async.done);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// TODO(robwormald): readyStates are leaving?
|
// TODO(robwormald): readyStates are leaving?
|
||||||
|
|
|
@ -75,7 +75,7 @@ class MockBrowserXHR extends BrowserXhr {
|
||||||
|
|
||||||
removeEventListener(type: string, cb: Function) { this.callbacks.delete(type); }
|
removeEventListener(type: string, cb: Function) { this.callbacks.delete(type); }
|
||||||
|
|
||||||
dispatchEvent(type: string) { this.callbacks.get(type)({}); }
|
dispatchEvent(type: string) { this.callbacks.get(type) !({}); }
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
const xhr = new MockBrowserXHR();
|
const xhr = new MockBrowserXHR();
|
||||||
|
@ -99,7 +99,8 @@ export function main() {
|
||||||
beforeEach(inject([XHRBackend], (be: XHRBackend) => {
|
beforeEach(inject([XHRBackend], (be: XHRBackend) => {
|
||||||
backend = be;
|
backend = be;
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
sampleRequest = new Request(base.merge(new RequestOptions({url: 'https://google.com'})));
|
sampleRequest =
|
||||||
|
new Request(base.merge(new RequestOptions({url: 'https://google.com'})) as any);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
afterEach(() => { existingXHRs = []; });
|
afterEach(() => { existingXHRs = []; });
|
||||||
|
@ -163,7 +164,7 @@ export function main() {
|
||||||
sampleRequest, new MockBrowserXHR(),
|
sampleRequest, new MockBrowserXHR(),
|
||||||
new ResponseOptions({type: ResponseType.Error}));
|
new ResponseOptions({type: ResponseType.Error}));
|
||||||
connection.response.subscribe(
|
connection.response.subscribe(
|
||||||
(res: Response) => { expect(res.type).toBe(ResponseType.Error); }, null,
|
(res: Response) => { expect(res.type).toBe(ResponseType.Error); }, null !,
|
||||||
() => { async.done(); });
|
() => { async.done(); });
|
||||||
existingXHRs[0].setStatusCode(200);
|
existingXHRs[0].setStatusCode(200);
|
||||||
existingXHRs[0].dispatchEvent('load');
|
existingXHRs[0].dispatchEvent('load');
|
||||||
|
@ -181,7 +182,7 @@ export function main() {
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
sampleRequest, new MockBrowserXHR(),
|
sampleRequest, new MockBrowserXHR(),
|
||||||
new ResponseOptions({type: ResponseType.Error}));
|
new ResponseOptions({type: ResponseType.Error}));
|
||||||
connection.response.subscribe(null, (res: Response) => {
|
connection.response.subscribe(null !, (res: Response) => {
|
||||||
expect(res.type).toBe(ResponseType.Error);
|
expect(res.type).toBe(ResponseType.Error);
|
||||||
async.done();
|
async.done();
|
||||||
});
|
});
|
||||||
|
@ -193,7 +194,7 @@ export function main() {
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
sampleRequest, new MockBrowserXHR(),
|
sampleRequest, new MockBrowserXHR(),
|
||||||
new ResponseOptions({type: ResponseType.Error}));
|
new ResponseOptions({type: ResponseType.Error}));
|
||||||
connection.response.subscribe(null, (res: Response) => {
|
connection.response.subscribe(null !, (res: Response) => {
|
||||||
expect(res.type).toBe(ResponseType.Error);
|
expect(res.type).toBe(ResponseType.Error);
|
||||||
expect(res.status).toEqual(0);
|
expect(res.status).toEqual(0);
|
||||||
expect(res.statusText).toEqual('');
|
expect(res.statusText).toEqual('');
|
||||||
|
@ -217,7 +218,7 @@ export function main() {
|
||||||
const body = 'Some body to love';
|
const body = 'Some body to love';
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body})) as any), new MockBrowserXHR());
|
||||||
expect(sendSpy).not.toHaveBeenCalled();
|
expect(sendSpy).not.toHaveBeenCalled();
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(sendSpy).toHaveBeenCalledWith(body);
|
expect(sendSpy).toHaveBeenCalledWith(body);
|
||||||
|
@ -229,7 +230,8 @@ export function main() {
|
||||||
|
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({headers: headers}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({headers: headers})) as any),
|
||||||
|
new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Content-Type', 'text/xml');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Content-Type', 'text/xml');
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Breaking-Bad', '<3');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Breaking-Bad', '<3');
|
||||||
|
@ -240,7 +242,7 @@ export function main() {
|
||||||
const headers = new Headers();
|
const headers = new Headers();
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({headers}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({headers})) as any), new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(setRequestHeaderSpy)
|
expect(setRequestHeaderSpy)
|
||||||
.toHaveBeenCalledWith('Accept', 'application/json, text/plain, */*');
|
.toHaveBeenCalledWith('Accept', 'application/json, text/plain, */*');
|
||||||
|
@ -250,7 +252,7 @@ export function main() {
|
||||||
const headers = new Headers({'Accept': 'text/xml'});
|
const headers = new Headers({'Accept': 'text/xml'});
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({headers}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({headers})) as any), new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Accept', 'text/xml');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Accept', 'text/xml');
|
||||||
});
|
});
|
||||||
|
@ -260,7 +262,7 @@ export function main() {
|
||||||
const body = {test: 'val'};
|
const body = {test: 'val'};
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body, headers: headers}))),
|
new Request(base.merge(new RequestOptions({body: body, headers: headers})) as any),
|
||||||
new MockBrowserXHR());
|
new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Content-Type', 'text/plain');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('Content-Type', 'text/plain');
|
||||||
|
@ -272,7 +274,7 @@ export function main() {
|
||||||
const body = {test: 'val'};
|
const body = {test: 'val'};
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body})) as any), new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(sendSpy).toHaveBeenCalledWith(JSON.stringify(body, null, 2));
|
expect(sendSpy).toHaveBeenCalledWith(JSON.stringify(body, null, 2));
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'application/json');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'application/json');
|
||||||
|
@ -282,7 +284,7 @@ export function main() {
|
||||||
const body = 23;
|
const body = 23;
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body})) as any), new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(sendSpy).toHaveBeenCalledWith('23');
|
expect(sendSpy).toHaveBeenCalledWith('23');
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'text/plain');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'text/plain');
|
||||||
|
@ -292,7 +294,7 @@ export function main() {
|
||||||
const body = 'some string';
|
const body = 'some string';
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body})) as any), new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(sendSpy).toHaveBeenCalledWith(body);
|
expect(sendSpy).toHaveBeenCalledWith(body);
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'text/plain');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'text/plain');
|
||||||
|
@ -304,7 +306,7 @@ export function main() {
|
||||||
body.set('test2', 'val2');
|
body.set('test2', 'val2');
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body})) as any), new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(sendSpy).toHaveBeenCalledWith('test1=val1&test2=val2');
|
expect(sendSpy).toHaveBeenCalledWith('test1=val1&test2=val2');
|
||||||
expect(setRequestHeaderSpy)
|
expect(setRequestHeaderSpy)
|
||||||
|
@ -337,7 +339,8 @@ export function main() {
|
||||||
body.append('userfile', blob);
|
body.append('userfile', blob);
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body})) as any),
|
||||||
|
new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(sendSpy).toHaveBeenCalledWith(body);
|
expect(sendSpy).toHaveBeenCalledWith(body);
|
||||||
expect(setRequestHeaderSpy).not.toHaveBeenCalledWith();
|
expect(setRequestHeaderSpy).not.toHaveBeenCalledWith();
|
||||||
|
@ -347,14 +350,15 @@ export function main() {
|
||||||
const body = createBlob(['body { color: red; }'], 'text/css');
|
const body = createBlob(['body { color: red; }'], 'text/css');
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body})) as any),
|
||||||
|
new MockBrowserXHR());
|
||||||
connection.response.subscribe();
|
connection.response.subscribe();
|
||||||
expect(sendSpy).toHaveBeenCalledWith(body);
|
expect(sendSpy).toHaveBeenCalledWith(body);
|
||||||
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'text/css');
|
expect(setRequestHeaderSpy).toHaveBeenCalledWith('content-type', 'text/css');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should use blob body without type to the request', () => {
|
it('should use blob body without type to the request', () => {
|
||||||
const body = createBlob(['body { color: red; }'], null);
|
const body = createBlob(['body { color: red; }'], null !);
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
new Request(base.merge(new RequestOptions({body: body}))), new MockBrowserXHR());
|
||||||
|
@ -366,7 +370,7 @@ export function main() {
|
||||||
it('should use blob body without type with custom content type header to the request',
|
it('should use blob body without type with custom content type header to the request',
|
||||||
() => {
|
() => {
|
||||||
const headers = new Headers({'Content-Type': 'text/css'});
|
const headers = new Headers({'Content-Type': 'text/css'});
|
||||||
const body = createBlob(['body { color: red; }'], null);
|
const body = createBlob(['body { color: red; }'], null !);
|
||||||
const base = new BaseRequestOptions();
|
const base = new BaseRequestOptions();
|
||||||
const connection = new XHRConnection(
|
const connection = new XHRConnection(
|
||||||
new Request(base.merge(new RequestOptions({body: body, headers: headers}))),
|
new Request(base.merge(new RequestOptions({body: body, headers: headers}))),
|
||||||
|
@ -590,7 +594,7 @@ export function main() {
|
||||||
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
||||||
const conn =
|
const conn =
|
||||||
new XHRConnection(sampleRequest, new MockBrowserXHR(), new ResponseOptions());
|
new XHRConnection(sampleRequest, new MockBrowserXHR(), new ResponseOptions());
|
||||||
conn.response.subscribe(null, (res: Response) => {
|
conn.response.subscribe(null !, (res: Response) => {
|
||||||
expect(res.text()).toBe('{json: "object"}');
|
expect(res.text()).toBe('{json: "object"}');
|
||||||
async.done();
|
async.done();
|
||||||
});
|
});
|
||||||
|
@ -611,10 +615,10 @@ Transfer-Encoding: chunked
|
||||||
Connection: keep-alive`;
|
Connection: keep-alive`;
|
||||||
|
|
||||||
connection.response.subscribe((res: Response) => {
|
connection.response.subscribe((res: Response) => {
|
||||||
expect(res.headers.get('Date')).toEqual('Fri, 20 Nov 2015 01:45:26 GMT');
|
expect(res.headers !.get('Date')).toEqual('Fri, 20 Nov 2015 01:45:26 GMT');
|
||||||
expect(res.headers.get('Content-Type')).toEqual('application/json; charset=utf-8');
|
expect(res.headers !.get('Content-Type')).toEqual('application/json; charset=utf-8');
|
||||||
expect(res.headers.get('Transfer-Encoding')).toEqual('chunked');
|
expect(res.headers !.get('Transfer-Encoding')).toEqual('chunked');
|
||||||
expect(res.headers.get('Connection')).toEqual('keep-alive');
|
expect(res.headers !.get('Connection')).toEqual('keep-alive');
|
||||||
async.done();
|
async.done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,7 @@ export function main() {
|
||||||
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
|
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
|
||||||
http.request('http://basic.connection')
|
http.request('http://basic.connection')
|
||||||
.subscribe(
|
.subscribe(
|
||||||
(res: Response) => { expect(res.text()).toBe('base response'); }, null,
|
(res: Response) => { expect(res.text()).toBe('base response'); }, null !,
|
||||||
() => { async.done(); });
|
() => { async.done(); });
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ export function main() {
|
||||||
});
|
});
|
||||||
http.request('http://basic.connection')
|
http.request('http://basic.connection')
|
||||||
.subscribe(
|
.subscribe(
|
||||||
(res: Response) => { expect(res.text()).toBe('base response'); }, null,
|
(res: Response) => { expect(res.text()).toBe('base response'); }, null !,
|
||||||
() => { async.done(); });
|
() => { async.done(); });
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,8 @@ export function main() {
|
||||||
describe('Request', () => {
|
describe('Request', () => {
|
||||||
describe('detectContentType', () => {
|
describe('detectContentType', () => {
|
||||||
it('should return ContentType.NONE', () => {
|
it('should return ContentType.NONE', () => {
|
||||||
const req = new Request(new RequestOptions({url: 'test', method: 'GET', body: null}));
|
const req =
|
||||||
|
new Request(new RequestOptions({url: 'test', method: 'GET', body: null}) as any);
|
||||||
|
|
||||||
expect(req.detectContentType()).toEqual(ContentType.NONE);
|
expect(req.detectContentType()).toEqual(ContentType.NONE);
|
||||||
});
|
});
|
||||||
|
@ -28,7 +29,7 @@ export function main() {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
body: null,
|
body: null,
|
||||||
headers: new Headers({'content-type': 'application/json'})
|
headers: new Headers({'content-type': 'application/json'})
|
||||||
}));
|
}) as any);
|
||||||
|
|
||||||
expect(req.detectContentType()).toEqual(ContentType.JSON);
|
expect(req.detectContentType()).toEqual(ContentType.JSON);
|
||||||
});
|
});
|
||||||
|
@ -39,7 +40,7 @@ export function main() {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
body: null,
|
body: null,
|
||||||
headers: new Headers({'content-type': 'application/x-www-form-urlencoded'})
|
headers: new Headers({'content-type': 'application/x-www-form-urlencoded'})
|
||||||
}));
|
}) as any);
|
||||||
|
|
||||||
expect(req.detectContentType()).toEqual(ContentType.FORM);
|
expect(req.detectContentType()).toEqual(ContentType.FORM);
|
||||||
});
|
});
|
||||||
|
@ -50,7 +51,7 @@ export function main() {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
body: null,
|
body: null,
|
||||||
headers: new Headers({'content-type': 'multipart/form-data'})
|
headers: new Headers({'content-type': 'multipart/form-data'})
|
||||||
}));
|
}) as any);
|
||||||
|
|
||||||
expect(req.detectContentType()).toEqual(ContentType.FORM_DATA);
|
expect(req.detectContentType()).toEqual(ContentType.FORM_DATA);
|
||||||
});
|
});
|
||||||
|
@ -61,7 +62,7 @@ export function main() {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
body: null,
|
body: null,
|
||||||
headers: new Headers({'content-type': 'text/plain'})
|
headers: new Headers({'content-type': 'text/plain'})
|
||||||
}));
|
}) as any);
|
||||||
|
|
||||||
expect(req.detectContentType()).toEqual(ContentType.TEXT);
|
expect(req.detectContentType()).toEqual(ContentType.TEXT);
|
||||||
});
|
});
|
||||||
|
@ -72,7 +73,7 @@ export function main() {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
body: null,
|
body: null,
|
||||||
headers: new Headers({'content-type': 'application/octet-stream'})
|
headers: new Headers({'content-type': 'application/octet-stream'})
|
||||||
}));
|
}) as any);
|
||||||
|
|
||||||
expect(req.detectContentType()).toEqual(ContentType.BLOB);
|
expect(req.detectContentType()).toEqual(ContentType.BLOB);
|
||||||
});
|
});
|
||||||
|
@ -83,7 +84,7 @@ export function main() {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
body: new ArrayBuffer(1),
|
body: new ArrayBuffer(1),
|
||||||
headers: new Headers({'content-type': 'application/octet-stream'})
|
headers: new Headers({'content-type': 'application/octet-stream'})
|
||||||
}));
|
}) as any);
|
||||||
|
|
||||||
expect(req.detectContentType()).toEqual(ContentType.ARRAY_BUFFER);
|
expect(req.detectContentType()).toEqual(ContentType.ARRAY_BUFFER);
|
||||||
});
|
});
|
||||||
|
@ -95,7 +96,7 @@ export function main() {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
body: null,
|
body: null,
|
||||||
headers: new Headers({'content-type': 'application/json'})
|
headers: new Headers({'content-type': 'application/json'})
|
||||||
}));
|
}) as any);
|
||||||
|
|
||||||
expect(req.text()).toEqual('');
|
expect(req.text()).toEqual('');
|
||||||
});
|
});
|
||||||
|
@ -104,7 +105,7 @@ export function main() {
|
||||||
const reqOptions = new RequestOptions(
|
const reqOptions = new RequestOptions(
|
||||||
{url: 'test', method: 'GET', headers: new Headers({'content-type': 'application/json'})});
|
{url: 'test', method: 'GET', headers: new Headers({'content-type': 'application/json'})});
|
||||||
delete reqOptions.body;
|
delete reqOptions.body;
|
||||||
const req = new Request(reqOptions);
|
const req = new Request(reqOptions as any);
|
||||||
|
|
||||||
expect(req.text()).toEqual('');
|
expect(req.text()).toEqual('');
|
||||||
});
|
});
|
||||||
|
|
|
@ -151,19 +151,19 @@ export function main() {
|
||||||
|
|
||||||
it('should remove the parameter when set to undefined or null', () => {
|
it('should remove the parameter when set to undefined or null', () => {
|
||||||
const params = new URLSearchParams('q=Q');
|
const params = new URLSearchParams('q=Q');
|
||||||
params.set('q', undefined);
|
params.set('q', undefined !);
|
||||||
expect(params.has('q')).toBe(false);
|
expect(params.has('q')).toBe(false);
|
||||||
expect(params.toString()).toEqual('');
|
expect(params.toString()).toEqual('');
|
||||||
params.set('q', null);
|
params.set('q', null !);
|
||||||
expect(params.has('q')).toBe(false);
|
expect(params.has('q')).toBe(false);
|
||||||
expect(params.toString()).toEqual('');
|
expect(params.toString()).toEqual('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should ignore the value when append undefined or null', () => {
|
it('should ignore the value when append undefined or null', () => {
|
||||||
const params = new URLSearchParams('q=Q');
|
const params = new URLSearchParams('q=Q');
|
||||||
params.append('q', undefined);
|
params.append('q', undefined !);
|
||||||
expect(params.toString()).toEqual('q=Q');
|
expect(params.toString()).toEqual('q=Q');
|
||||||
params.append('q', null);
|
params.append('q', null !);
|
||||||
expect(params.toString()).toEqual('q=Q');
|
expect(params.toString()).toEqual('q=Q');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -36,13 +36,13 @@ export declare class CookieXSRFStrategy implements XSRFStrategy {
|
||||||
export declare class Headers {
|
export declare class Headers {
|
||||||
constructor(headers?: Headers | {
|
constructor(headers?: Headers | {
|
||||||
[name: string]: any;
|
[name: string]: any;
|
||||||
});
|
} | null);
|
||||||
append(name: string, value: string): void;
|
append(name: string, value: string): void;
|
||||||
delete(name: string): void;
|
delete(name: string): void;
|
||||||
entries(): void;
|
entries(): void;
|
||||||
forEach(fn: (values: string[], name: string, headers: Map<string, string[]>) => void): void;
|
forEach(fn: (values: string[], name: string | undefined, headers: Map<string, string[]>) => void): void;
|
||||||
get(name: string): string;
|
get(name: string): string | null;
|
||||||
getAll(name: string): string[];
|
getAll(name: string): string[] | null;
|
||||||
has(name: string): boolean;
|
has(name: string): boolean;
|
||||||
keys(): string[];
|
keys(): string[];
|
||||||
set(name: string, value: string | string[]): void;
|
set(name: string, value: string | string[]): void;
|
||||||
|
@ -137,13 +137,13 @@ export declare enum RequestMethod {
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export declare class RequestOptions {
|
export declare class RequestOptions {
|
||||||
body: any;
|
body: any;
|
||||||
headers: Headers;
|
headers: Headers | null;
|
||||||
method: RequestMethod | string;
|
method: RequestMethod | string | null;
|
||||||
params: URLSearchParams;
|
params: URLSearchParams;
|
||||||
responseType: ResponseContentType;
|
responseType: ResponseContentType | null;
|
||||||
/** @deprecated */ search: URLSearchParams;
|
/** @deprecated */ search: URLSearchParams;
|
||||||
url: string;
|
url: string | null;
|
||||||
withCredentials: boolean;
|
withCredentials: boolean | null;
|
||||||
constructor({method, headers, body, url, search, params, withCredentials, responseType}?: RequestOptionsArgs);
|
constructor({method, headers, body, url, search, params, withCredentials, responseType}?: RequestOptionsArgs);
|
||||||
merge(options?: RequestOptionsArgs): RequestOptions;
|
merge(options?: RequestOptionsArgs): RequestOptions;
|
||||||
}
|
}
|
||||||
|
@ -151,26 +151,26 @@ export declare class RequestOptions {
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export interface RequestOptionsArgs {
|
export interface RequestOptionsArgs {
|
||||||
body?: any;
|
body?: any;
|
||||||
headers?: Headers;
|
headers?: Headers | null;
|
||||||
method?: string | RequestMethod;
|
method?: string | RequestMethod | null;
|
||||||
params?: string | URLSearchParams | {
|
params?: string | URLSearchParams | {
|
||||||
[key: string]: any | any[];
|
[key: string]: any | any[];
|
||||||
};
|
} | null;
|
||||||
responseType?: ResponseContentType;
|
responseType?: ResponseContentType | null;
|
||||||
/** @deprecated */ search?: string | URLSearchParams | {
|
/** @deprecated */ search?: string | URLSearchParams | {
|
||||||
[key: string]: any | any[];
|
[key: string]: any | any[];
|
||||||
};
|
} | null;
|
||||||
url?: string;
|
url?: string | null;
|
||||||
withCredentials?: boolean;
|
withCredentials?: boolean | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export declare class Response extends Body {
|
export declare class Response extends Body {
|
||||||
bytesLoaded: number;
|
bytesLoaded: number;
|
||||||
headers: Headers;
|
headers: Headers | null;
|
||||||
ok: boolean;
|
ok: boolean;
|
||||||
status: number;
|
status: number;
|
||||||
statusText: string;
|
statusText: string | null;
|
||||||
totalBytes: number;
|
totalBytes: number;
|
||||||
type: ResponseType;
|
type: ResponseType;
|
||||||
url: string;
|
url: string;
|
||||||
|
@ -188,22 +188,22 @@ export declare enum ResponseContentType {
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export declare class ResponseOptions {
|
export declare class ResponseOptions {
|
||||||
body: string | Object | ArrayBuffer | Blob;
|
body: string | Object | ArrayBuffer | Blob | null;
|
||||||
headers: Headers;
|
headers: Headers | null;
|
||||||
status: number;
|
status: number | null;
|
||||||
url: string;
|
url: string | null;
|
||||||
constructor({body, status, headers, statusText, type, url}?: ResponseOptionsArgs);
|
constructor({body, status, headers, statusText, type, url}?: ResponseOptionsArgs);
|
||||||
merge(options?: ResponseOptionsArgs): ResponseOptions;
|
merge(options?: ResponseOptionsArgs): ResponseOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export interface ResponseOptionsArgs {
|
export interface ResponseOptionsArgs {
|
||||||
body?: string | Object | FormData | ArrayBuffer | Blob;
|
body?: string | Object | FormData | ArrayBuffer | Blob | null;
|
||||||
headers?: Headers;
|
headers?: Headers | null;
|
||||||
status?: number;
|
status?: number | null;
|
||||||
statusText?: string;
|
statusText?: string | null;
|
||||||
type?: ResponseType;
|
type?: ResponseType | null;
|
||||||
url?: string;
|
url?: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
|
@ -224,7 +224,7 @@ export declare class URLSearchParams {
|
||||||
appendAll(searchParams: URLSearchParams): void;
|
appendAll(searchParams: URLSearchParams): void;
|
||||||
clone(): URLSearchParams;
|
clone(): URLSearchParams;
|
||||||
delete(param: string): void;
|
delete(param: string): void;
|
||||||
get(param: string): string;
|
get(param: string): string | null;
|
||||||
getAll(param: string): string[];
|
getAll(param: string): string[];
|
||||||
has(param: string): boolean;
|
has(param: string): boolean;
|
||||||
replaceAll(searchParams: URLSearchParams): void;
|
replaceAll(searchParams: URLSearchParams): void;
|
||||||
|
|
Loading…
Reference in New Issue