From 30b48604f5a7fb171ddf7ee1d04ade01a20cb3a0 Mon Sep 17 00:00:00 2001 From: Mas0nShi Date: Sun, 26 Jun 2022 13:18:46 +0800 Subject: [PATCH] #463@minor: Continue added partial support for XMLHttpRequest. --- .../src/xml-http-request/XMLHttpRequest.ts | 15 ++++++++++----- .../src/xml-http-request/XMLHttpRequestUpload.ts | 6 +++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/happy-dom/src/xml-http-request/XMLHttpRequest.ts b/packages/happy-dom/src/xml-http-request/XMLHttpRequest.ts index 510f9ea9b..8bdadd0ef 100644 --- a/packages/happy-dom/src/xml-http-request/XMLHttpRequest.ts +++ b/packages/happy-dom/src/xml-http-request/XMLHttpRequest.ts @@ -57,6 +57,8 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget { private mimeOverride: string | null = null; // TODO: is type right? private _request: ClientRequest | null = null; private _response: IncomingMessage | null = null; + // @ts-ignore + private _error: Error | null = null; private responseParts: Buffer[] | null = null; private responseHeaders: { [lowercaseHeader: string]: string } | null = null; private loadedBytes = 0; @@ -72,6 +74,7 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget { connection: true, 'content-length': true, cookie: true, + cookie2: true, date: true, dnt: true, expect: true, @@ -86,7 +89,7 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget { 'user-agent': true, via: true }; - private privateHeaders = { 'set-cookie': true }; + private privateHeaders = { 'set-cookie': true, 'set-cookie2': true }; private userAgent = XMLHttpRequest._defaultView.navigator.userAgent; /** @@ -409,7 +412,7 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget { return; } - this.responseParts.push(new Buffer(data)); + this.responseParts.push(Buffer.from(data)); this.loadedBytes += data.length; if (this.readyState !== XMLHttpRequest.LOADING) { @@ -475,9 +478,10 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget { /** * * @param request - * @param _error + * @param error */ - private onHttpRequestError(request: ClientRequest, _error: Error): void { + private onHttpRequestError(request: ClientRequest, error: Error): void { + this._error = error; if (this._request !== request) { return; } @@ -575,6 +579,7 @@ export default class XMLHttpRequest extends XMLHttpRequestEventTarget { * */ private parseResponseEncoding(): string { - return /;\s*charset=(.*)$/.exec(this.responseHeaders['content-type'] || '')[1] || 'utf-8'; + const charset = /;\s*charset=(.*)$/.exec(this.responseHeaders['content-type'] || ''); + return Array.isArray(charset) ? charset[1] : 'utf-8'; } } diff --git a/packages/happy-dom/src/xml-http-request/XMLHttpRequestUpload.ts b/packages/happy-dom/src/xml-http-request/XMLHttpRequestUpload.ts index 62ccff252..1e418792d 100644 --- a/packages/happy-dom/src/xml-http-request/XMLHttpRequestUpload.ts +++ b/packages/happy-dom/src/xml-http-request/XMLHttpRequestUpload.ts @@ -37,18 +37,18 @@ export default class XMLHttpRequestUpload extends XMLHttpRequestEventTarget { if (data.length !== 0) { this._contentType = 'text/plain;charset=UTF-8'; } - this._body = new Buffer(data, 'utf-8'); + this._body = Buffer.from(data, 'utf-8'); } else if (Buffer.isBuffer(data)) { this._body = data; } else if (data instanceof ArrayBuffer) { - const body = new Buffer(data.byteLength); + const body = Buffer.alloc(data.byteLength); const view = new Uint8Array(data); for (let i = 0; i < data.byteLength; i++) { body[i] = view[i]; } this._body = body; } else if (data.buffer && data.buffer instanceof ArrayBuffer) { - const body = new Buffer(data.byteLength); + const body = Buffer.alloc(data.byteLength); const offset = data.byteOffset; const view = new Uint8Array(data.buffer); for (let i = 0; i < data.byteLength; i++) {