1
0
mirror of https://github.com/S2-/minifyfromhtml.git synced 2025-08-02 12:00:03 +02:00

update node modules

This commit is contained in:
s2
2021-06-19 01:25:45 +02:00
parent ef3070bdb7
commit cea9885dde
658 changed files with 5044 additions and 80808 deletions

6
node_modules/jsdom/Changelog.md generated vendored
View File

@@ -26,6 +26,12 @@ Other guidelines:
* Roughly order changes within those groupings by impact.
-->
## 16.6.0
* Added `parentNode.replaceChildren()`. (ninevra)
* Fixed jsdom's handling of when code running inside the jsdom throws `null` or `undefined` as an exception. (mbest)
* Removed the dependency on the deprecated [`request`](https://www.npmjs.com/package/request) package, in the process fixing several issues with the `XMLHttpRequest` implementation around header processing. Special thanks to vegardbb for completing this months-long effort!
## 16.5.3
* Fixed infinite recursion when using `MutationObserver`s to observe elements inside a `MutationObserver` callback.

View File

@@ -3,9 +3,10 @@ const fs = require("fs");
const { fileURLToPath } = require("url");
const { parseURL } = require("whatwg-url");
const dataURLFromRecord = require("data-urls").fromURLRecord;
const request = require("request-promise-native");
const wrapCookieJarForRequest = require("../../living/helpers/wrap-cookie-jar-for-request");
const packageVersion = require("../../../../package.json").version;
const agentFactory = require("../../living/helpers/agent-factory");
const Request = require("../../living/helpers/http-request");
const IS_BROWSER = Object.prototype.toString.call(process) !== "[object process]";
module.exports = class ResourceLoader {
@@ -67,29 +68,7 @@ module.exports = class ResourceLoader {
return promise;
}
_getRequestOptions({ cookieJar, referrer, accept = "*/*" }) {
const requestOptions = {
encoding: null,
gzip: true,
jar: wrapCookieJarForRequest(cookieJar),
strictSSL: this._strictSSL,
proxy: this._proxy,
forever: true,
headers: {
"User-Agent": this._userAgent,
"Accept-Language": "en",
"Accept": accept
}
};
if (referrer && !IS_BROWSER) {
requestOptions.headers.referer = referrer;
}
return requestOptions;
}
fetch(urlString, options = {}) {
fetch(urlString, { accept, cookieJar, referrer } = {}) {
const url = parseURL(urlString);
if (!url) {
@@ -103,8 +82,48 @@ module.exports = class ResourceLoader {
case "http":
case "https": {
const requestOptions = this._getRequestOptions(options);
return request(urlString, requestOptions);
const agents = agentFactory(this._proxy, this._strictSSL);
const headers = {
"User-Agent": this._userAgent,
"Accept-Language": "en",
"Accept-Encoding": "gzip",
"Accept": accept || "*/*"
};
if (referrer && !IS_BROWSER) {
headers.Referer = referrer;
}
const requestClient = new Request(
urlString,
{ followRedirects: true, cookieJar, agents },
{ headers }
);
const promise = new Promise((resolve, reject) => {
const accumulated = [];
requestClient.once("response", res => {
promise.response = res;
const { statusCode } = res;
// TODO This deviates from the spec when it comes to
// loading resources such as images
if (statusCode < 200 || statusCode > 299) {
requestClient.abort();
reject(new Error(`Resource was not loaded. Status: ${statusCode}`));
}
});
requestClient.on("data", chunk => {
accumulated.push(chunk);
});
requestClient.on("end", () => resolve(Buffer.concat(accumulated)));
requestClient.on("error", reject);
});
// The method fromURL in lib/api.js crashes without the following four
// properties defined on the Promise instance, causing the test suite to halt
requestClient.on("end", () => {
promise.href = requestClient.currentURL;
});
promise.abort = requestClient.abort.bind(requestClient);
promise.getHeader = name => headers[name] || requestClient.getHeader(name);
requestClient.end();
return promise;
}
case "file": {

View File

@@ -919,6 +919,31 @@ exports.install = (globalObject, globalNames) => {
}
}
replaceChildren() {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
throw new TypeError("'replaceChildren' called on an object that is not a valid instance of Document.");
}
const args = [];
for (let i = 0; i < arguments.length; i++) {
let curArg = arguments[i];
if (Node.is(curArg)) {
curArg = utils.implForWrapper(curArg);
} else {
curArg = conversions["DOMString"](curArg, {
context: "Failed to execute 'replaceChildren' on 'Document': parameter " + (i + 1)
});
}
args.push(curArg);
}
ceReactionsPreSteps_helpers_custom_elements(globalObject);
try {
return utils.tryWrapperForImpl(esValue[implSymbol].replaceChildren(...args));
} finally {
ceReactionsPostSteps_helpers_custom_elements(globalObject);
}
}
querySelector(selectors) {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
@@ -3174,6 +3199,7 @@ exports.install = (globalObject, globalNames) => {
getElementById: { enumerable: true },
prepend: { enumerable: true },
append: { enumerable: true },
replaceChildren: { enumerable: true },
querySelector: { enumerable: true },
querySelectorAll: { enumerable: true },
implementation: { enumerable: true },
@@ -3276,7 +3302,10 @@ exports.install = (globalObject, globalNames) => {
lastElementChild: { enumerable: true },
childElementCount: { enumerable: true },
[Symbol.toStringTag]: { value: "Document", configurable: true },
[Symbol.unscopables]: { value: { prepend: true, append: true, __proto__: null }, configurable: true }
[Symbol.unscopables]: {
value: { prepend: true, append: true, replaceChildren: true, __proto__: null },
configurable: true
}
});
if (globalObject[ctorRegistrySymbol] === undefined) {
globalObject[ctorRegistrySymbol] = Object.create(null);

View File

@@ -172,6 +172,31 @@ exports.install = (globalObject, globalNames) => {
}
}
replaceChildren() {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
throw new TypeError("'replaceChildren' called on an object that is not a valid instance of DocumentFragment.");
}
const args = [];
for (let i = 0; i < arguments.length; i++) {
let curArg = arguments[i];
if (Node.is(curArg)) {
curArg = utils.implForWrapper(curArg);
} else {
curArg = conversions["DOMString"](curArg, {
context: "Failed to execute 'replaceChildren' on 'DocumentFragment': parameter " + (i + 1)
});
}
args.push(curArg);
}
ceReactionsPreSteps_helpers_custom_elements(globalObject);
try {
return utils.tryWrapperForImpl(esValue[implSymbol].replaceChildren(...args));
} finally {
ceReactionsPostSteps_helpers_custom_elements(globalObject);
}
}
querySelector(selectors) {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
@@ -272,6 +297,7 @@ exports.install = (globalObject, globalNames) => {
getElementById: { enumerable: true },
prepend: { enumerable: true },
append: { enumerable: true },
replaceChildren: { enumerable: true },
querySelector: { enumerable: true },
querySelectorAll: { enumerable: true },
children: { enumerable: true },
@@ -279,7 +305,10 @@ exports.install = (globalObject, globalNames) => {
lastElementChild: { enumerable: true },
childElementCount: { enumerable: true },
[Symbol.toStringTag]: { value: "DocumentFragment", configurable: true },
[Symbol.unscopables]: { value: { prepend: true, append: true, __proto__: null }, configurable: true }
[Symbol.unscopables]: {
value: { prepend: true, append: true, replaceChildren: true, __proto__: null },
configurable: true
}
});
if (globalObject[ctorRegistrySymbol] === undefined) {
globalObject[ctorRegistrySymbol] = Object.create(null);

View File

@@ -997,6 +997,31 @@ exports.install = (globalObject, globalNames) => {
}
}
replaceChildren() {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
throw new TypeError("'replaceChildren' called on an object that is not a valid instance of Element.");
}
const args = [];
for (let i = 0; i < arguments.length; i++) {
let curArg = arguments[i];
if (Node.is(curArg)) {
curArg = utils.implForWrapper(curArg);
} else {
curArg = conversions["DOMString"](curArg, {
context: "Failed to execute 'replaceChildren' on 'Element': parameter " + (i + 1)
});
}
args.push(curArg);
}
ceReactionsPreSteps_helpers_custom_elements(globalObject);
try {
return utils.tryWrapperForImpl(esValue[implSymbol].replaceChildren(...args));
} finally {
ceReactionsPostSteps_helpers_custom_elements(globalObject);
}
}
querySelector(selectors) {
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
@@ -1523,6 +1548,7 @@ exports.install = (globalObject, globalNames) => {
remove: { enumerable: true },
prepend: { enumerable: true },
append: { enumerable: true },
replaceChildren: { enumerable: true },
querySelector: { enumerable: true },
querySelectorAll: { enumerable: true },
namespaceURI: { enumerable: true },
@@ -1562,6 +1588,7 @@ exports.install = (globalObject, globalNames) => {
remove: true,
prepend: true,
append: true,
replaceChildren: true,
__proto__: null
},
configurable: true

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -6,8 +6,8 @@ const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const implSymbol = utils.implSymbol;
const ctorRegistrySymbol = utils.ctorRegistrySymbol;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -6,8 +6,8 @@ const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const parseNonNegativeInteger_helpers_strings = require("../helpers/strings.js").parseNonNegativeInteger;
const implSymbol = utils.implSymbol;

View File

@@ -8,8 +8,8 @@ const SelectionMode = require("./SelectionMode.js");
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;
const FileList = require("./FileList.js");
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const implSymbol = utils.implSymbol;
const ctorRegistrySymbol = utils.ctorRegistrySymbol;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const TextTrackKind = require("./TextTrackKind.js");
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -4,8 +4,8 @@ const conversions = require("webidl-conversions");
const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;

View File

@@ -6,8 +6,8 @@ const utils = require("./utils.js");
const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constructor.js").HTMLConstructor;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const implSymbol = utils.implSymbol;
const ctorRegistrySymbol = utils.ctorRegistrySymbol;

View File

@@ -7,8 +7,8 @@ const HTMLConstructor_helpers_html_constructor = require("../helpers/html-constr
const parseNonNegativeInteger_helpers_strings = require("../helpers/strings.js").parseNonNegativeInteger;
const ceReactionsPreSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPreSteps;
const ceReactionsPostSteps_helpers_custom_elements = require("../helpers/custom-elements.js").ceReactionsPostSteps;
const parseURLToResultingURLRecord_helpers_document_base_url = require("../helpers/document-base-url.js")
.parseURLToResultingURLRecord;
const parseURLToResultingURLRecord_helpers_document_base_url =
require("../helpers/document-base-url.js").parseURLToResultingURLRecord;
const serializeURLwhatwg_url = require("whatwg-url").serializeURL;
const implSymbol = utils.implSymbol;
const ctorRegistrySymbol = utils.ctorRegistrySymbol;

View File

@@ -0,0 +1,15 @@
"use strict";
const http = require("http");
const https = require("https");
const { parse: parseURLToNodeOptions } = require("url");
const HttpProxyAgent = require("http-proxy-agent");
const HttpsProxyAgent = require("https-proxy-agent");
module.exports = function agentFactory(proxy, rejectUnauthorized) {
const agentOpts = { keepAlive: true, rejectUnauthorized };
if (proxy) {
const proxyOpts = { ...parseURLToNodeOptions(proxy), ...agentOpts };
return { https: new HttpsProxyAgent(proxyOpts), http: new HttpProxyAgent(proxyOpts) };
}
return { http: new http.Agent(agentOpts), https: new https.Agent(agentOpts) };
};

View File

@@ -0,0 +1,254 @@
"use strict";
const http = require("http");
const https = require("https");
const { Writable } = require("stream");
const zlib = require("zlib");
const ver = process.version.replace("v", "").split(".");
const majorNodeVersion = Number.parseInt(ver[0]);
function abortRequest(clientRequest) {
// clientRequest.destroy breaks the test suite for versions 10 and 12,
// hence the version check
if (majorNodeVersion > 13) {
clientRequest.destroy();
} else {
clientRequest.abort();
}
clientRequest.removeAllListeners();
clientRequest.on("error", () => {});
}
module.exports = class Request extends Writable {
constructor(url, clientOptions, requestOptions) {
super();
Object.assign(this, clientOptions);
this.currentURL = url;
this._requestOptions = requestOptions;
this.headers = requestOptions.headers;
this._ended = false;
this._redirectCount = 0;
this._requestBodyBuffers = [];
this._bufferIndex = 0;
this._performRequest();
}
abort() {
abortRequest(this._currentRequest);
this.emit("abort");
this.removeAllListeners();
}
pipeRequest(form) {
form.pipe(this._currentRequest);
}
write(data, encoding) {
if (data.length > 0) {
this._requestBodyBuffers.push({ data, encoding });
this._currentRequest.write(data, encoding);
}
}
end() {
this.emit("request", this._currentRequest);
this._ended = true;
this._currentRequest.end();
}
setHeader(name, value) {
this.headers[name] = value;
this._currentRequest.setHeader(name, value);
}
removeHeader(name) {
delete this.headers[name];
this._currentRequest.removeHeader(name);
}
// Without this method, the test send-redirect-infinite-sync will halt the test suite
// TODO: investigate this further and ideally remove
toJSON() {
const { method, headers } = this._requestOptions;
return { uri: new URL(this.currentURL), method, headers };
}
_writeNext(error) {
if (this._currentRequest) {
if (error) {
this.emit("error", error);
} else if (this._bufferIndex < this._requestBodyBuffers.length) {
const buffer = this._requestBodyBuffers[this._bufferIndex++];
if (!this._currentRequest.writableEnded) {
this._currentRequest.write(
buffer.data,
buffer.encoding,
this._writeNext.bind(this)
);
}
} else if (this._ended) {
this._currentRequest.end();
}
}
}
_performRequest() {
const urlOptions = new URL(this.currentURL);
const scheme = urlOptions.protocol;
this._requestOptions.agent = this.agents[scheme.substring(0, scheme.length - 1)];
const { request } = scheme === "https:" ? https : http;
this._currentRequest = request(this.currentURL, this._requestOptions, response => {
this._processResponse(response);
});
let cookies;
if (this._redirectCount === 0) {
this.originalCookieHeader = this.getHeader("Cookie");
}
if (this.cookieJar) {
cookies = this.cookieJar.getCookieStringSync(this.currentURL);
}
if (cookies && cookies.length) {
if (this.originalCookieHeader) {
this.setHeader("Cookie", this.originalCookieHeader + "; " + cookies);
} else {
this.setHeader("Cookie", cookies);
}
}
for (const event of ["connect", "error", "socket", "timeout"]) {
this._currentRequest.on(event, (...args) => {
this.emit(event, ...args);
});
}
if (this._isRedirect) {
this._bufferIndex = 0;
this._writeNext();
}
}
_processResponse(response) {
const cookies = response.headers["set-cookie"];
if (this.cookieJar && Array.isArray(cookies)) {
try {
cookies.forEach(cookie => {
this.cookieJar.setCookieSync(cookie, this.currentURL, { ignoreError: true });
});
} catch (e) {
this.emit("error", e);
}
}
const { statusCode } = response;
const { location } = response.headers;
// In Node v15, aborting a message with remaining data causes an error to be thrown,
// hence the version check
const catchResErrors = err => {
if (!(majorNodeVersion >= 15 && err.message === "aborted")) {
this.emit("error", err);
}
};
response.on("error", catchResErrors);
let redirectAddress = null;
let resendWithAuth = false;
if (typeof location === "string" &&
location.length &&
this.followRedirects &&
statusCode >= 300 &&
statusCode < 400) {
redirectAddress = location;
} else if (statusCode === 401 &&
/^Basic /i.test(response.headers["www-authenticate"] || "") &&
(this.user && this.user.length)) {
this._requestOptions.auth = `${this.user}:${this.pass}`;
resendWithAuth = true;
}
if (redirectAddress || resendWithAuth) {
if (++this._redirectCount > 21) {
const redirectError = new Error("Maximum number of redirects exceeded");
redirectError.code = "ERR_TOO_MANY_REDIRECTS";
this.emit("error", redirectError);
return;
}
abortRequest(this._currentRequest);
response.destroy();
this._isRedirect = true;
if (((statusCode === 301 || statusCode === 302) && this._requestOptions.method === "POST") ||
(statusCode === 303 && !/^(?:GET|HEAD)$/.test(this._requestOptions.method))) {
this._requestOptions.method = "GET";
this._requestBodyBuffers = [];
}
let previousHostName = this._removeMatchingHeaders(/^host$/i);
if (!previousHostName) {
previousHostName = new URL(this.currentURL).hostname;
}
const previousURL = this.currentURL;
if (!resendWithAuth) {
const nextURL = redirectAddress.startsWith("https:") ?
new URL(redirectAddress) :
new URL(redirectAddress, this.currentURL);
if (nextURL.hostname !== previousHostName) {
this._removeMatchingHeaders(/^authorization$/i);
}
this.currentURL = nextURL.toString();
}
this.headers.Referer = previousURL;
this.emit("redirect", response, this.headers, this.currentURL);
try {
this._performRequest();
} catch (cause) {
this.emit("error", cause);
}
} else {
let pipeline = response;
const acceptEncoding = this.headers["Accept-Encoding"];
const requestCompressed = typeof acceptEncoding === "string" &&
(acceptEncoding.includes("gzip") || acceptEncoding.includes("deflate"));
if (
requestCompressed &&
this._requestOptions.method !== "HEAD" &&
statusCode >= 200 &&
statusCode !== 204 &&
statusCode !== 304
) {
const zlibOptions = {
flush: zlib.constants.Z_SYNC_FLUSH,
finishFlush: zlib.constants.Z_SYNC_FLUSH
};
const contentEncoding = (response.headers["content-encoding"] || "identity").trim().toLowerCase();
if (contentEncoding === "gzip") {
pipeline = zlib.createGunzip(zlibOptions);
response.pipe(pipeline);
} else if (contentEncoding === "deflate") {
pipeline = zlib.createInflate(zlibOptions);
response.pipe(pipeline);
}
}
pipeline.removeAllListeners("error");
this.emit("response", response, this.currentURL);
pipeline.on("data", bytes => this.emit("data", bytes));
pipeline.once("end", bytes => this.emit("end", bytes));
pipeline.on("error", catchResErrors);
pipeline.on("close", () => this.emit("close"));
this._requestBodyBuffers = [];
}
}
getHeader(key, value) {
if (this._currentRequest) {
return this._currentRequest.getHeader(key, value);
}
return null;
}
_removeMatchingHeaders(regex) {
let lastValue;
for (const header in this.headers) {
if (regex.test(header)) {
lastValue = this.headers[header];
delete this.headers[header];
}
}
return lastValue;
}
};

View File

@@ -18,6 +18,10 @@ function reportAnError(line, col, target, errorObject, message, location) {
target[errorReportingMode] = true;
if (typeof message !== "string") {
message = "uncaught exception: " + util.inspect(errorObject);
}
const event = createAnEvent("error", target._globalObject, ErrorEvent, {
cancelable: true,
message,
@@ -55,7 +59,7 @@ module.exports = function reportException(window, error, filenameHint) {
const windowImpl = idlUtils.implForWrapper(window);
const handled = reportAnError(lineNumber, columnNumber, windowImpl, error, error.message, fileName);
const handled = reportAnError(lineNumber, columnNumber, windowImpl, error, error && error.message, fileName);
if (!handled) {
const errorString = shouldBeDisplayedAsError(error) ? `[${error.name}: ${error.message}]` : util.inspect(error);
@@ -68,5 +72,5 @@ module.exports = function reportException(window, error, filenameHint) {
};
function shouldBeDisplayedAsError(x) {
return x.name && x.message !== undefined && x.stack;
return x && x.name && x.message !== undefined && x.stack;
}

View File

@@ -1,8 +0,0 @@
"use strict";
const request = require("request");
module.exports = cookieJar => {
const jarWrapper = request.jar();
jarWrapper._jar = cookieJar;
return jarWrapper;
};

View File

@@ -55,6 +55,12 @@ class ParentNodeImpl {
this._append(convertNodesIntoNode(this._ownerDocument, nodes));
}
replaceChildren(...nodes) {
const node = convertNodesIntoNode(this._ownerDocument, nodes);
this._preInsertValidity(node, null);
this._replaceAll(node);
}
querySelector(selectors) {
if (shouldAlwaysSelectNothing(this)) {
return null;

View File

@@ -655,19 +655,17 @@ class XMLHttpRequestImpl extends XMLHttpRequestEventTargetImpl {
xhrUtils.dispatchError(this);
});
client.on("response", res => receiveResponse(this, res));
client.on("response", (res, url) => receiveResponse(this, res, url));
client.on("redirect", () => {
const { response } = client;
const destUrlObj = new URL(response.request.headers.Referer);
const urlObj = new URL(response.request.uri.href);
client.on("redirect", (response, requestHeaders, currentURL) => {
const destUrlObj = new URL(requestHeaders.Referer);
const urlObj = new URL(currentURL);
if (destUrlObj.origin !== urlObj.origin && destUrlObj.origin !== flag.origin) {
properties.origin = "null";
}
response.request.headers.Origin = properties.origin;
requestHeaders.Origin = properties.origin;
if (flag.origin !== destUrlObj.origin &&
destUrlObj.protocol !== "data:") {
@@ -763,16 +761,15 @@ function readyStateChange(xhr, readyState) {
fireAnEvent("readystatechange", xhr);
}
function receiveResponse(xhr, response) {
function receiveResponse(xhr, response, currentURL) {
const { flag, properties } = xhr;
const { statusCode } = response;
const { rawHeaders, statusCode } = response;
let byteOffset = 0;
const headers = {};
const filteredResponseHeaders = [];
const headerMap = {};
const { rawHeaders } = response;
const n = Number(rawHeaders.length);
for (let i = 0; i < n; i += 2) {
const k = rawHeaders[i];
@@ -791,7 +788,7 @@ function receiveResponse(xhr, response) {
headerMap[kl] = k;
}
const destUrlObj = new URL(response.request.uri.href);
const destUrlObj = new URL(currentURL);
if (properties.origin !== destUrlObj.origin &&
destUrlObj.protocol !== "data:") {
if (!xhrUtils.validCORSHeaders(xhr, response, flag, properties, properties.origin)) {

View File

@@ -1,6 +1,5 @@
"use strict";
const fs = require("fs");
const request = require("request");
const { EventEmitter } = require("events");
const { URL } = require("whatwg-url");
const parseDataURL = require("data-urls");
@@ -8,7 +7,9 @@ const DOMException = require("domexception/webidl2js-wrapper");
const ProgressEvent = require("../generated/ProgressEvent");
const wrapCookieJarForRequest = require("../helpers/wrap-cookie-jar-for-request");
const agentFactory = require("../helpers/agent-factory");
const Request = require("../helpers/http-request");
const FormData = require("form-data");
const { fireAnEvent } = require("../helpers/events");
const headerListSeparatorRegexp = /,[ \t]*/;
@@ -159,7 +160,6 @@ function createClient(xhr) {
response.statusCode = 200;
response.rawHeaders = [];
response.headers = {};
response.request = { uri: urlObj };
const filePath = urlObj.pathname
.replace(/^file:\/\//, "")
.replace(/^\/([a-z]):\//i, "$1:/")
@@ -202,7 +202,7 @@ function createClient(xhr) {
client.on("end", rmReq);
}
process.nextTick(() => client.emit("response", response));
process.nextTick(() => client.emit("response", response, urlObj.href));
return client;
}
@@ -210,8 +210,6 @@ function createClient(xhr) {
if (urlObj.protocol === "data:") {
const response = new EventEmitter();
response.request = { uri: urlObj };
const client = new EventEmitter();
let buffer;
@@ -232,7 +230,7 @@ function createClient(xhr) {
};
process.nextTick(() => {
client.emit("response", response);
client.emit("response", response, urlObj.href);
process.nextTick(() => {
response.emit("data", buffer);
client.emit("data", buffer);
@@ -243,7 +241,7 @@ function createClient(xhr) {
return client;
}
const agents = agentFactory(flag.proxy, flag.strictSSL);
const requestHeaders = {};
for (const header in flag.requestHeaders) {
@@ -268,27 +266,13 @@ function createClient(xhr) {
requestHeaders.Origin = flag.origin;
}
const options = {
uri,
method: flag.method,
headers: requestHeaders,
gzip: true,
maxRedirects: 21,
followAllRedirects: true,
encoding: null,
strictSSL: flag.strictSSL,
proxy: flag.proxy,
forever: true
};
const options = { rejectUnauthorized: flag.strictSSL, agents, followRedirects: true };
if (flag.auth) {
options.auth = {
user: flag.auth.user || "",
pass: flag.auth.pass || "",
sendImmediately: false
};
options.user = flag.auth.user || "";
options.pass = flag.auth.pass || "";
}
if (flag.cookieJar && (!crossOrigin || flag.withCredentials)) {
options.jar = wrapCookieJarForRequest(flag.cookieJar);
options.cookieJar = flag.cookieJar;
}
const { body } = flag;
@@ -297,30 +281,53 @@ function createClient(xhr) {
body !== "" &&
!(ucMethod === "HEAD" || ucMethod === "GET");
if (hasBody && !flag.formData) {
options.body = body;
}
if (hasBody && getRequestHeader(flag.requestHeaders, "content-type") === null) {
requestHeaders["Content-Type"] = "text/plain;charset=UTF-8";
}
function doRequest() {
try {
const client = request(options);
if (hasBody && flag.formData) {
const form = client.form();
for (const entry of body) {
form.append(entry.name, entry.value, entry.options);
let requestBody = body;
let len = 0;
if (hasBody) {
if (flag.formData) {
// TODO: implement https://html.spec.whatwg.org/#multipart-form-data
// directly instead of using an external library
requestBody = new FormData();
for (const entry of body) {
requestBody.append(entry.name, entry.value, entry.options);
}
len = requestBody.getLengthSync();
requestHeaders["Content-Type"] = `multipart/form-data; boundary=${requestBody.getBoundary()}`;
} else {
if (typeof body === "string") {
len = Buffer.byteLength(body);
} else {
len = body.length;
}
requestBody = Buffer.isBuffer(requestBody) ? requestBody : Buffer.from(requestBody);
}
requestHeaders["Content-Length"] = len;
}
requestHeaders["Accept-Encoding"] = "gzip, deflate";
const requestClient = new Request(uri, options, { method: flag.method, headers: requestHeaders });
if (hasBody) {
if (flag.formData) {
requestBody.on("error", err => {
requestClient.emit("error", err);
requestClient.abort();
});
requestClient.pipeRequest(requestBody);
} else {
requestClient.write(requestBody);
}
}
return client;
return requestClient;
} catch (e) {
const client = new EventEmitter();
process.nextTick(() => client.emit("error", e));
return client;
const eventEmitterclient = new EventEmitter();
process.nextTick(() => eventEmitterclient.emit("error", e));
eventEmitterclient.end = () => {};
return eventEmitterclient;
}
}
@@ -332,11 +339,11 @@ function createClient(xhr) {
if (crossOrigin && (!simpleMethods.has(ucMethod) || nonSimpleHeaders.length > 0 || properties.uploadListener)) {
client = new EventEmitter();
const preflightRequestHeaders = [];
const preflightRequestHeaders = {};
for (const header in requestHeaders) {
// the only existing request headers the cors spec allows on the preflight request are Origin and Referrer
// the only existing request headers the cors spec allows on the preflight request are Origin and Referer
const lcHeader = header.toLowerCase();
if (lcHeader === "origin" || lcHeader === "referrer") {
if (lcHeader === "origin" || lcHeader === "referer") {
preflightRequestHeaders[header] = requestHeaders[header];
}
}
@@ -350,19 +357,12 @@ function createClient(xhr) {
flag.preflight = true;
const preflightOptions = {
const rejectUnauthorized = flag.strictSSL;
const preflightClient = new Request(
uri,
method: "OPTIONS",
headers: preflightRequestHeaders,
followRedirect: false,
encoding: null,
pool: flag.pool,
strictSSL: flag.strictSSL,
proxy: flag.proxy,
forever: true
};
const preflightClient = request(preflightOptions);
{ agents, followRedirects: false },
{ method: "OPTIONS", headers: preflightRequestHeaders, rejectUnauthorized }
);
preflightClient.on("response", resp => {
// don't send the real request if the preflight request returned an error
@@ -375,8 +375,9 @@ function createClient(xhr) {
setResponseToNetworkError(xhr);
return;
}
// Set request gzip option right before headers are set
const realClient = doRequest();
realClient.on("response", res => client.emit("response", res));
realClient.on("response", (...args) => client.emit("response", ...args));
realClient.on("data", chunk => client.emit("data", chunk));
realClient.on("end", () => client.emit("end"));
realClient.on("abort", () => client.emit("abort"));
@@ -384,23 +385,29 @@ function createClient(xhr) {
client.headers = realClient.headers;
client.emit("request", req);
});
realClient.on("redirect", () => {
client.response = realClient.response;
client.emit("redirect");
realClient.on("redirect", (...args) => {
client.emit("redirect", ...args);
});
realClient.on("error", err => {
client.emit("error", err);
});
realClient.on("error", err => client.emit("error", err));
client.abort = () => {
realClient.abort();
};
setImmediate(() => realClient.end());
});
preflightClient.on("error", err => client.emit("error", err));
preflightClient.on("error", err => {
client.emit("error", err);
});
client.abort = () => {
preflightClient.abort();
};
setImmediate(() => preflightClient.end());
} else {
client = doRequest();
setImmediate(() => client.end());
}
if (requestManager) {
@@ -416,7 +423,6 @@ function createClient(xhr) {
client.on("error", rmReq);
client.on("end", rmReq);
}
return client;
}

44
node_modules/jsdom/package.json generated vendored
View File

@@ -2,29 +2,29 @@
"_dependenciesComments": {
"parse5": "Pinned to exact version number because we monkeypatch its internals (see htmltodom.js)"
},
"_from": "jsdom@16.5.3",
"_id": "jsdom@16.5.3",
"_from": "jsdom@latest",
"_id": "jsdom@16.6.0",
"_inBundle": false,
"_integrity": "sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA==",
"_integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==",
"_location": "/jsdom",
"_phantomChildren": {},
"_requested": {
"type": "version",
"type": "tag",
"registry": true,
"raw": "jsdom@16.5.3",
"raw": "jsdom@latest",
"name": "jsdom",
"escapedName": "jsdom",
"rawSpec": "16.5.3",
"rawSpec": "latest",
"saveSpec": null,
"fetchSpec": "16.5.3"
"fetchSpec": "latest"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.5.3.tgz",
"_shasum": "13a755b3950eb938b4482c407238ddf16f0d2136",
"_spec": "jsdom@16.5.3",
"_resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz",
"_shasum": "f79b3786682065492a3da6a60a4695da983805ac",
"_spec": "jsdom@latest",
"_where": "D:\\Projects\\minifyfromhtml",
"browser": {
"canvas": false,
@@ -37,7 +37,7 @@
"bundleDependencies": false,
"dependencies": {
"abab": "^2.0.5",
"acorn": "^8.1.0",
"acorn": "^8.2.4",
"acorn-globals": "^6.0.0",
"cssom": "^0.4.4",
"cssstyle": "^2.3.0",
@@ -45,12 +45,13 @@
"decimal.js": "^10.2.1",
"domexception": "^2.0.1",
"escodegen": "^2.0.0",
"form-data": "^3.0.0",
"html-encoding-sniffer": "^2.0.1",
"is-potential-custom-element-name": "^1.0.0",
"http-proxy-agent": "^4.0.1",
"https-proxy-agent": "^5.0.0",
"is-potential-custom-element-name": "^1.0.1",
"nwsapi": "^2.2.0",
"parse5": "6.0.1",
"request": "^2.88.2",
"request-promise-native": "^1.0.9",
"saxes": "^5.0.1",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.0.0",
@@ -60,32 +61,31 @@
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.5.0",
"ws": "^7.4.4",
"ws": "^7.4.5",
"xml-name-validator": "^3.0.0"
},
"deprecated": false,
"description": "A JavaScript implementation of many web standards",
"devDependencies": {
"@domenic/eslint-config": "^1.1.0",
"@domenic/eslint-config": "^1.2.0",
"benchmark": "^2.1.4",
"browserify": "^17.0.0",
"chai": "^4.3.4",
"eslint": "^7.23.0",
"eslint": "^7.27.0",
"eslint-plugin-html": "^6.1.2",
"eslint-plugin-jsdom-internal": "link:./scripts/eslint-plugin",
"js-yaml": "^4.0.0",
"karma": "^6.3.1",
"js-yaml": "^4.1.0",
"karma": "^6.3.2",
"karma-browserify": "^8.0.0",
"karma-chrome-launcher": "^3.1.0",
"karma-mocha": "^2.0.1",
"karma-mocha-webworker": "^1.3.0",
"minimatch": "^3.0.4",
"mocha": "^8.3.2",
"mocha": "^8.4.0",
"mocha-sugar-free": "^1.4.0",
"optimist": "0.6.1",
"rimraf": "^3.0.2",
"server-destroy": "^1.0.1",
"st": "^2.0.0",
"watchify": "^4.0.0",
"wd": "^1.14.0",
"webidl2js": "^16.2.0"
@@ -171,5 +171,5 @@
"update-authors": "git log --format=\"%aN <%aE>\" | sort -f | uniq > AUTHORS.txt",
"update-wpt": "git submodule update --recursive --remote && cd test/web-platform-tests/tests && python3 wpt.py manifest --path ../wpt-manifest.json"
},
"version": "16.5.3"
"version": "16.6.0"
}