From 12060ea59f843fec43c30b9c0a588fe40c4fe494 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Mon, 30 Dec 2024 09:08:47 +0000 Subject: [PATCH] build: lock file maintenance --- .github/local-actions/branch-manager/main.js | 156 +++++++++++++- .github/local-actions/labels-sync/main.js | 156 +++++++++++++- .github/local-actions/lock-closed/main.js | 156 +++++++++++++- .github/ng-renovate/yarn.lock | 88 ++++---- github-actions/branch-manager/main.js | 156 +++++++++++++- .../commit-message-based-labels/main.js | 156 +++++++++++++- github-actions/create-pr-for-changes/main.js | 120 ++++++++++- github-actions/feature-request/main.js | 190 +++++++++++++++++- github-actions/google-internal-tests/main.js | 120 ++++++++++- github-actions/org-file-sync/main.js | 156 +++++++++++++- github-actions/post-approval-changes/main.js | 156 +++++++++++++- .../fetch-workflow-artifact.js | 140 ++++++++++++- github-actions/unified-status-check/main.js | 156 +++++++++++++- yarn.lock | 67 +++--- 14 files changed, 1815 insertions(+), 158 deletions(-) diff --git a/.github/local-actions/branch-manager/main.js b/.github/local-actions/branch-manager/main.js index b945a904a..9a4391bb7 100644 --- a/.github/local-actions/branch-manager/main.js +++ b/.github/local-actions/branch-manager/main.js @@ -32698,6 +32698,102 @@ var require_dist = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse4(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match2; + let value; + paramRE.lastIndex = index; + while (match2 = paramRE.exec(header)) { + if (match2.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match2[0].length; + key = match2[1].toLowerCase(); + value = match2[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match2; + let value; + paramRE.lastIndex = index; + while (match2 = paramRE.exec(header)) { + if (match2.index !== index) { + return defaultContentType; + } + index += match2[0].length; + key = match2[1].toLowerCase(); + value = match2[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse4, safeParse: safeParse2 }; + module.exports.parse = parse4; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var require_parser = __commonJS({ ""(exports, module) { @@ -54634,14 +54730,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -61624,6 +61720,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -61770,14 +61869,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -67172,6 +67282,36 @@ AuthenticatedGitClient._authenticatedInstance = null; // var import_core17 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -67187,7 +67327,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error2 = new RequestError( + const error2 = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/.github/local-actions/labels-sync/main.js b/.github/local-actions/labels-sync/main.js index d4ea8c240..d9e808d99 100644 --- a/.github/local-actions/labels-sync/main.js +++ b/.github/local-actions/labels-sync/main.js @@ -39157,14 +39157,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -42427,6 +42427,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var core = __toESM(require_core()); var import_github2 = __toESM(require_github()); @@ -42868,6 +42964,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43014,14 +43113,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -45802,6 +45912,36 @@ var allLabels = { // var import_core2 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -45817,7 +45957,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error = new RequestError( + const error = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/.github/local-actions/lock-closed/main.js b/.github/local-actions/lock-closed/main.js index e58b9247f..0c630e8f5 100644 --- a/.github/local-actions/lock-closed/main.js +++ b/.github/local-actions/lock-closed/main.js @@ -39157,14 +39157,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -42427,6 +42427,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var core = __toESM(require_core()); var import_github2 = __toESM(require_github()); @@ -42868,6 +42964,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43014,14 +43113,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -45558,6 +45668,36 @@ var Octokit2 = Octokit.plugin(requestLog, legacyRestEndpointMethods, paginateRes // var import_core2 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -45573,7 +45713,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error2 = new RequestError( + const error2 = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/.github/ng-renovate/yarn.lock b/.github/ng-renovate/yarn.lock index 7c5a886d1..00391b0b1 100644 --- a/.github/ng-renovate/yarn.lock +++ b/.github/ng-renovate/yarn.lock @@ -1960,19 +1960,19 @@ __metadata: languageName: node linkType: hard -"@smithy/core@npm:^2.5.3, @smithy/core@npm:^2.5.5": - version: 2.5.5 - resolution: "@smithy/core@npm:2.5.5" +"@smithy/core@npm:^2.5.3, @smithy/core@npm:^2.5.6": + version: 2.5.6 + resolution: "@smithy/core@npm:2.5.6" dependencies: "@smithy/middleware-serde": "npm:^3.0.11" "@smithy/protocol-http": "npm:^4.1.8" "@smithy/types": "npm:^3.7.2" "@smithy/util-body-length-browser": "npm:^3.0.0" "@smithy/util-middleware": "npm:^3.0.11" - "@smithy/util-stream": "npm:^3.3.2" + "@smithy/util-stream": "npm:^3.3.3" "@smithy/util-utf8": "npm:^3.0.0" tslib: "npm:^2.6.2" - checksum: 10c0/7b05af10073eaa6353bf0da4de5862ba3651ffa1abdd2f3a0dc874ace03c4e3dd9137d38dd876f8dde7f5f7a94371328ffde01ae67b5f6651ac31d29cb87beeb + checksum: 10c0/e184b6224c910161840a5f794217a8c862f78adb7c56c8b788cf3bb80be6812dd52b1a4217eb320de38d84a7a54050151ba75b08e826639c0243e5377ec3185c languageName: node linkType: hard @@ -2142,11 +2142,11 @@ __metadata: languageName: node linkType: hard -"@smithy/middleware-endpoint@npm:^3.2.3, @smithy/middleware-endpoint@npm:^3.2.6": - version: 3.2.6 - resolution: "@smithy/middleware-endpoint@npm:3.2.6" +"@smithy/middleware-endpoint@npm:^3.2.3, @smithy/middleware-endpoint@npm:^3.2.7": + version: 3.2.7 + resolution: "@smithy/middleware-endpoint@npm:3.2.7" dependencies: - "@smithy/core": "npm:^2.5.5" + "@smithy/core": "npm:^2.5.6" "@smithy/middleware-serde": "npm:^3.0.11" "@smithy/node-config-provider": "npm:^3.1.12" "@smithy/shared-ini-file-loader": "npm:^3.1.12" @@ -2154,24 +2154,24 @@ __metadata: "@smithy/url-parser": "npm:^3.0.11" "@smithy/util-middleware": "npm:^3.0.11" tslib: "npm:^2.6.2" - checksum: 10c0/746ff6427969c99f99f57dc2f0cb79d62deb984435fa63869110cc95a4d393129f9a5f7f55c2d7fc95891ab88dff15ebec93c52490f7b84594a2a0190ab9b11f + checksum: 10c0/bc197e4b63ea212c4a309dbc54f70096050b8b94d9e7961682d343fa35433319f121c7a09bd0ea92c1884c7255c9cc342988f6e17d943c8065c6ef331a35f55a languageName: node linkType: hard "@smithy/middleware-retry@npm:^3.0.27": - version: 3.0.31 - resolution: "@smithy/middleware-retry@npm:3.0.31" + version: 3.0.32 + resolution: "@smithy/middleware-retry@npm:3.0.32" dependencies: "@smithy/node-config-provider": "npm:^3.1.12" "@smithy/protocol-http": "npm:^4.1.8" "@smithy/service-error-classification": "npm:^3.0.11" - "@smithy/smithy-client": "npm:^3.5.1" + "@smithy/smithy-client": "npm:^3.5.2" "@smithy/types": "npm:^3.7.2" "@smithy/util-middleware": "npm:^3.0.11" "@smithy/util-retry": "npm:^3.0.11" tslib: "npm:^2.6.2" uuid: "npm:^9.0.1" - checksum: 10c0/d87f06ace545195eb776b92caf2be63539b22dd2c3687b12f19ec3aae88d0fdf41345435c964eb30ba2bfb7b6c4a159245a2f383305127137434bede80e7b694 + checksum: 10c0/bfb429fc101fe864bb1c78c1ffabd99eabb60b3a7c082b646cc8196356cffc577216a1fd10bc4be9ad349e7482c59fac004be375aa810845a7265649f00be4a2 languageName: node linkType: hard @@ -2207,16 +2207,16 @@ __metadata: languageName: node linkType: hard -"@smithy/node-http-handler@npm:^3.3.1, @smithy/node-http-handler@npm:^3.3.2": - version: 3.3.2 - resolution: "@smithy/node-http-handler@npm:3.3.2" +"@smithy/node-http-handler@npm:^3.3.1, @smithy/node-http-handler@npm:^3.3.3": + version: 3.3.3 + resolution: "@smithy/node-http-handler@npm:3.3.3" dependencies: "@smithy/abort-controller": "npm:^3.1.9" "@smithy/protocol-http": "npm:^4.1.8" "@smithy/querystring-builder": "npm:^3.0.11" "@smithy/types": "npm:^3.7.2" tslib: "npm:^2.6.2" - checksum: 10c0/8229f61d83df62d68f94e816520b368e9f8566426741a05134c650ee65079eddd235faa01e046e71ca8238cfc911d0d0f48820b278ce5ba81a439435d1377222 + checksum: 10c0/b95ac887388f5698583855a430ca6e727bff4fc32bc4143debbdde70061685174fde132c0475f9a5128cf7522d553e108e859b41b01b3e58843f0f9cf48acd3e languageName: node linkType: hard @@ -2296,18 +2296,18 @@ __metadata: languageName: node linkType: hard -"@smithy/smithy-client@npm:^3.4.4, @smithy/smithy-client@npm:^3.5.1": - version: 3.5.1 - resolution: "@smithy/smithy-client@npm:3.5.1" +"@smithy/smithy-client@npm:^3.4.4, @smithy/smithy-client@npm:^3.5.2": + version: 3.5.2 + resolution: "@smithy/smithy-client@npm:3.5.2" dependencies: - "@smithy/core": "npm:^2.5.5" - "@smithy/middleware-endpoint": "npm:^3.2.6" + "@smithy/core": "npm:^2.5.6" + "@smithy/middleware-endpoint": "npm:^3.2.7" "@smithy/middleware-stack": "npm:^3.0.11" "@smithy/protocol-http": "npm:^4.1.8" "@smithy/types": "npm:^3.7.2" - "@smithy/util-stream": "npm:^3.3.2" + "@smithy/util-stream": "npm:^3.3.3" tslib: "npm:^2.6.2" - checksum: 10c0/b3e9a0dfe4f0292b1a50c55c74d49352115039c18a1ae4b306281174ca301ec46e6bb0ae347fa5cce87bdc625bc56b7fdef959199ed6dc3ffae6e978f92d7728 + checksum: 10c0/8cacf513141c31b40e9a3839fe46736b9f54c4dc328536e2c0310edbbb2b43c386dc019d121252b6c6365015e08b11caf327d04e1d4704b102b04c785f2589b0 languageName: node linkType: hard @@ -2390,30 +2390,30 @@ __metadata: linkType: hard "@smithy/util-defaults-mode-browser@npm:^3.0.27": - version: 3.0.31 - resolution: "@smithy/util-defaults-mode-browser@npm:3.0.31" + version: 3.0.32 + resolution: "@smithy/util-defaults-mode-browser@npm:3.0.32" dependencies: "@smithy/property-provider": "npm:^3.1.11" - "@smithy/smithy-client": "npm:^3.5.1" + "@smithy/smithy-client": "npm:^3.5.2" "@smithy/types": "npm:^3.7.2" bowser: "npm:^2.11.0" tslib: "npm:^2.6.2" - checksum: 10c0/149fa857b139dcde150a0b7475dbefcaa5c4c0a1501879690dca924cd60494bb6f85eaa4c78cd40d9723a3c3faa094629ed08e94855928100326fd7ae3c980e9 + checksum: 10c0/71a2e16219c14d0eead0e563dd2ce244778d22518a1a438a7c97e2fca2f2974fa06441fbfe068885422b5304e9499e1ea9be92bae28c509a1dc19b9d47bc1a98 languageName: node linkType: hard "@smithy/util-defaults-mode-node@npm:^3.0.27": - version: 3.0.31 - resolution: "@smithy/util-defaults-mode-node@npm:3.0.31" + version: 3.0.32 + resolution: "@smithy/util-defaults-mode-node@npm:3.0.32" dependencies: "@smithy/config-resolver": "npm:^3.0.13" "@smithy/credential-provider-imds": "npm:^3.2.8" "@smithy/node-config-provider": "npm:^3.1.12" "@smithy/property-provider": "npm:^3.1.11" - "@smithy/smithy-client": "npm:^3.5.1" + "@smithy/smithy-client": "npm:^3.5.2" "@smithy/types": "npm:^3.7.2" tslib: "npm:^2.6.2" - checksum: 10c0/825159cbadd4a8bf17cdbabd9872683c027c3655645db8fc9ef902d83de5c8a574dc174b4d31edad98fc7aafe5c6ebc017bbc04cee43390d2ca49ec59e4264b3 + checksum: 10c0/de7b29b9f2f1b9ca2eed8e7b30d0ab06423d184f6017d004d11e77ab3993272573119e867ccc4bfd6779b913a1ab032a638937ff91d03eec5dafbfdcf3b3ddbe languageName: node linkType: hard @@ -2458,19 +2458,19 @@ __metadata: languageName: node linkType: hard -"@smithy/util-stream@npm:^3.3.1, @smithy/util-stream@npm:^3.3.2": - version: 3.3.2 - resolution: "@smithy/util-stream@npm:3.3.2" +"@smithy/util-stream@npm:^3.3.1, @smithy/util-stream@npm:^3.3.3": + version: 3.3.3 + resolution: "@smithy/util-stream@npm:3.3.3" dependencies: "@smithy/fetch-http-handler": "npm:^4.1.2" - "@smithy/node-http-handler": "npm:^3.3.2" + "@smithy/node-http-handler": "npm:^3.3.3" "@smithy/types": "npm:^3.7.2" "@smithy/util-base64": "npm:^3.0.0" "@smithy/util-buffer-from": "npm:^3.0.0" "@smithy/util-hex-encoding": "npm:^3.0.0" "@smithy/util-utf8": "npm:^3.0.0" tslib: "npm:^2.6.2" - checksum: 10c0/13d2c7f2209e3f1b2e94c48ca17b82e4080851613673ad29bcea1435688866509132f774269a78c8ed2b6bddc732f59bb17e678e246f678618c552eaad22c84a + checksum: 10c0/cadcf9e0b03affd89a0adfa47a61d9a6b9c226a7e794ed8fbe16be674ed44cb2ee1f97b1a4f5e26aad102e381caed51a43bcfec3dfb67d7cbeac2289d53394b9 languageName: node linkType: hard @@ -3698,13 +3698,13 @@ __metadata: linkType: hard "domutils@npm:^3.0.1": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" + version: 3.2.1 + resolution: "domutils@npm:3.2.1" dependencies: dom-serializer: "npm:^2.0.0" domelementtype: "npm:^2.3.0" domhandler: "npm:^5.0.3" - checksum: 10c0/342d64cf4d07b8a0573fb51e0a6312a88fb520c7fefd751870bf72fa5fc0f2e0cb9a3958a573610b1d608c6e2a69b8e9b4b40f0bfb8f87a71bce4f180cca1887 + checksum: 10c0/af2a8e28fe51137307d2400c4b6483a3294ac8f784b14fc74b67f3aca3aa53a63144bd9e2bb96f23174c0c1aa680544bf2d77b4cc94e6f90f33314ed65c12a4f languageName: node linkType: hard @@ -3987,11 +3987,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" + version: 1.18.0 + resolution: "fastq@npm:1.18.0" dependencies: reusify: "npm:^1.0.4" - checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 languageName: node linkType: hard diff --git a/github-actions/branch-manager/main.js b/github-actions/branch-manager/main.js index 95f237704..998fb5eb7 100644 --- a/github-actions/branch-manager/main.js +++ b/github-actions/branch-manager/main.js @@ -39157,14 +39157,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -42427,6 +42427,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var core = __toESM(require_core()); var import_github2 = __toESM(require_github()); @@ -42868,6 +42964,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43014,14 +43113,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -45802,6 +45912,36 @@ var allLabels = { // var import_core2 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -45817,7 +45957,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error = new RequestError( + const error = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/github-actions/commit-message-based-labels/main.js b/github-actions/commit-message-based-labels/main.js index 42ae9a4ac..edf30ea5e 100644 --- a/github-actions/commit-message-based-labels/main.js +++ b/github-actions/commit-message-based-labels/main.js @@ -39157,14 +39157,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -42427,6 +42427,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse3(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse3, safeParse: safeParse2 }; + module.exports.parse = parse3; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var require_parser = __commonJS({ ""(exports, module) { @@ -43271,6 +43367,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43417,14 +43516,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a2; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a2 = mimetype.parameters.charset) == null ? void 0 : _a2.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -46267,6 +46377,36 @@ var allLabels = { // var import_core2 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -46282,7 +46422,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error2 = new RequestError( + const error2 = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/github-actions/create-pr-for-changes/main.js b/github-actions/create-pr-for-changes/main.js index 5ad21e092..14990e5f2 100644 --- a/github-actions/create-pr-for-changes/main.js +++ b/github-actions/create-pr-for-changes/main.js @@ -42710,6 +42710,102 @@ var require_dist = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var core = __toESM(require_core()); var import_github3 = __toESM(require_github()); @@ -44042,6 +44138,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -44188,14 +44287,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { diff --git a/github-actions/feature-request/main.js b/github-actions/feature-request/main.js index 1b9106806..f474c3cfa 100644 --- a/github-actions/feature-request/main.js +++ b/github-actions/feature-request/main.js @@ -39157,14 +39157,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError4 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError4 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -42427,6 +42427,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var core2 = __toESM(require_core()); var import_github2 = __toESM(require_github()); @@ -42871,6 +42967,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43017,14 +43116,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -45558,6 +45668,36 @@ var Octokit2 = Octokit.plugin(requestLog, legacyRestEndpointMethods, paginateRes } ); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -45573,7 +45713,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error = new RequestError( + const error = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { @@ -47017,6 +47157,36 @@ var getInputValue = (name, _core = core) => { return num; }; +// +var RequestError3 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // var OctoKit = class { constructor(token, params, options = { readonly: false }) { @@ -47091,7 +47261,7 @@ var OctoKit = class { await this.octokit.issues.getLabel({ ...this.params, name }); return true; } catch (e) { - if (e instanceof RequestError && e.status === 404) { + if (e instanceof RequestError3 && e.status === 404) { return this.options.readonly && this.mockLabels.has(name); } throw e; @@ -47185,7 +47355,7 @@ var OctoKitIssue = class extends OctoKit { name }); } catch (e) { - if (e instanceof RequestError && e.status === 404) { + if (e instanceof RequestError3 && e.status === 404) { log(`Label ${name} not found on issue`); return; } diff --git a/github-actions/google-internal-tests/main.js b/github-actions/google-internal-tests/main.js index 2263612d1..ce518650a 100644 --- a/github-actions/google-internal-tests/main.js +++ b/github-actions/google-internal-tests/main.js @@ -42426,6 +42426,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse3(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match2; + let value; + paramRE.lastIndex = index; + while (match2 = paramRE.exec(header)) { + if (match2.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match2[0].length; + key = match2[1].toLowerCase(); + value = match2[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match2; + let value; + paramRE.lastIndex = index; + while (match2 = paramRE.exec(header)) { + if (match2.index !== index) { + return defaultContentType; + } + index += match2[0].length; + key = match2[1].toLowerCase(); + value = match2[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse3, safeParse: safeParse2 }; + module.exports.parse = parse3; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var require_balanced_match = __commonJS({ ""(exports, module) { @@ -44660,6 +44756,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -44806,14 +44905,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { diff --git a/github-actions/org-file-sync/main.js b/github-actions/org-file-sync/main.js index 4d83c803a..8f9af6bd3 100644 --- a/github-actions/org-file-sync/main.js +++ b/github-actions/org-file-sync/main.js @@ -39157,14 +39157,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -42427,6 +42427,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var core = __toESM(require_core()); var import_github2 = __toESM(require_github()); @@ -42868,6 +42964,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43014,14 +43113,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -45558,6 +45668,36 @@ var Octokit2 = Octokit.plugin(requestLog, legacyRestEndpointMethods, paginateRes // var import_core2 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -45573,7 +45713,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error = new RequestError( + const error = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/github-actions/post-approval-changes/main.js b/github-actions/post-approval-changes/main.js index 8144ba0d9..ee2dee9d7 100644 --- a/github-actions/post-approval-changes/main.js +++ b/github-actions/post-approval-changes/main.js @@ -39157,14 +39157,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -42427,6 +42427,102 @@ var require_github = __commonJS({ } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var core = __toESM(require_core()); var import_github2 = __toESM(require_github()); @@ -42868,6 +42964,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43014,14 +43113,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -45558,6 +45668,36 @@ var Octokit2 = Octokit.plugin(requestLog, legacyRestEndpointMethods, paginateRes // var import_core2 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -45573,7 +45713,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error = new RequestError( + const error = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/github-actions/previews/upload-artifacts-to-firebase/fetch-workflow-artifact.js b/github-actions/previews/upload-artifacts-to-firebase/fetch-workflow-artifact.js index 05941c539..33ce661bc 100644 --- a/github-actions/previews/upload-artifacts-to-firebase/fetch-workflow-artifact.js +++ b/github-actions/previews/upload-artifacts-to-firebase/fetch-workflow-artifact.js @@ -2,13 +2,129 @@ import {createRequire as __cjsCompatRequire} from 'module'; const require = __cjsCompatRequire(import.meta.url); +var __create = Object.create; var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // function getUserAgent() { if (typeof navigator === "object" && "userAgent" in navigator) { @@ -446,6 +562,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -592,14 +711,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { diff --git a/github-actions/unified-status-check/main.js b/github-actions/unified-status-check/main.js index 1fc35824c..57741678d 100644 --- a/github-actions/unified-status-check/main.js +++ b/github-actions/unified-status-check/main.js @@ -19417,6 +19417,102 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); } }); +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + // var require_context = __commonJS({ ""(exports) { @@ -39157,14 +39253,14 @@ var require_dist_node5 = __commonJS({ var __toCommonJS = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); var dist_src_exports = {}; __export2(dist_src_exports, { - RequestError: () => RequestError2 + RequestError: () => RequestError3 }); module.exports = __toCommonJS(dist_src_exports); var import_deprecation = require_dist_node4(); var import_once = __toESM2(require_once()); var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); - var RequestError2 = class extends Error { + var RequestError3 = class extends Error { constructor(message, statusCode, options) { super(message); if (Error.captureStackTrace) { @@ -43155,6 +43251,9 @@ function withDefaults(oldDefaults, newDefaults) { } var endpoint = withDefaults(null, DEFAULTS); +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse(), 1); + // var RequestError = class extends Error { name; @@ -43301,14 +43400,25 @@ async function fetchWrapper(requestOptions) { return octokitResponse; } async function getResponseData(response) { + var _a; const contentType = response.headers.get("content-type"); - if (/application\/json/.test(contentType)) { - return response.json().catch(() => response.text()).catch(() => ""); + if (!contentType) { + return response.text().catch(() => ""); } - if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { - return response.text(); + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (mimetype.type === "application/json") { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || ((_a = mimetype.parameters.charset) == null ? void 0 : _a.toLowerCase()) === "utf-8") { + return response.text().catch(() => ""); + } else { + return response.arrayBuffer().catch(() => new ArrayBuffer(0)); } - return response.arrayBuffer(); } function toErrorMessage(data) { if (typeof data === "string") { @@ -45845,6 +45955,36 @@ var Octokit2 = Octokit.plugin(requestLog, legacyRestEndpointMethods, paginateRes // var import_core2 = __toESM(require_core()); +// +var RequestError2 = class extends Error { + name; + status; + request; + response; + constructor(message, statusCode, options) { + super(message); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + / .*$/, + " [REDACTED]" + ) + }); + } + requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } +}; + // function requestToOAuthBaseUrl(request2) { const endpointDefaults = request2.endpoint.DEFAULTS; @@ -45860,7 +46000,7 @@ async function oauthRequest(request2, route, parameters) { }; const response = await request2(route, withOAuthParameters); if ("error" in response.data) { - const error = new RequestError( + const error = new RequestError2( `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, 400, { diff --git a/yarn.lock b/yarn.lock index 9c2ae52a8..44822791e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3520,7 +3520,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request-error@npm:6.1.5, @octokit/request-error@npm:^6.0.1, @octokit/request-error@npm:^6.1.0, @octokit/request-error@npm:^6.1.1": +"@octokit/request-error@npm:6.1.5": version: 6.1.5 resolution: "@octokit/request-error@npm:6.1.5" dependencies: @@ -3540,6 +3540,15 @@ __metadata: languageName: node linkType: hard +"@octokit/request-error@npm:^6.0.1, @octokit/request-error@npm:^6.1.0, @octokit/request-error@npm:^6.1.1": + version: 6.1.6 + resolution: "@octokit/request-error@npm:6.1.6" + dependencies: + "@octokit/types": "npm:^13.6.2" + checksum: 10c0/cbbed77ddd1d40a1bed36224667c2fac4c20ce375a78d4648745ad1fedc8c2b1d01343b5908979d5b6557736245637eb58efc65d0cd1ef047ea6be74b46c47d2 + languageName: node + linkType: hard + "@octokit/request@npm:^8.3.0, @octokit/request@npm:^8.3.1": version: 8.4.0 resolution: "@octokit/request@npm:8.4.0" @@ -3553,14 +3562,15 @@ __metadata: linkType: hard "@octokit/request@npm:^9.0.0, @octokit/request@npm:^9.0.1, @octokit/request@npm:^9.1.0, @octokit/request@npm:^9.1.1": - version: 9.1.3 - resolution: "@octokit/request@npm:9.1.3" + version: 9.1.4 + resolution: "@octokit/request@npm:9.1.4" dependencies: "@octokit/endpoint": "npm:^10.0.0" "@octokit/request-error": "npm:^6.0.1" - "@octokit/types": "npm:^13.1.0" + "@octokit/types": "npm:^13.6.2" + fast-content-type-parse: "npm:^2.0.0" universal-user-agent: "npm:^7.0.2" - checksum: 10c0/41c26387ca9b5b3081a17eebea0c7d6b0122f6b2cb21c2fd7ef63ca587a828448e40b33973416f615fed139c659598f2ae7a1370cc103738f0f6f3297b5fc4ab + checksum: 10c0/a5ebfeb1ed185aed5422f5d407153f9c43450051cf99b7da0c4d185926af84efc5ff9b3338a58c7229b4e69b9b4c951045212ef13516433e5e2c21cb1a4cbb54 languageName: node linkType: hard @@ -7180,13 +7190,13 @@ __metadata: linkType: hard "domutils@npm:^3.0.1, domutils@npm:^3.1.0": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" + version: 3.2.1 + resolution: "domutils@npm:3.2.1" dependencies: dom-serializer: "npm:^2.0.0" domelementtype: "npm:^2.3.0" domhandler: "npm:^5.0.3" - checksum: 10c0/342d64cf4d07b8a0573fb51e0a6312a88fb520c7fefd751870bf72fa5fc0f2e0cb9a3958a573610b1d608c6e2a69b8e9b4b40f0bfb8f87a71bce4f180cca1887 + checksum: 10c0/af2a8e28fe51137307d2400c4b6483a3294ac8f784b14fc74b67f3aca3aa53a63144bd9e2bb96f23174c0c1aa680544bf2d77b4cc94e6f90f33314ed65c12a4f languageName: node linkType: hard @@ -7297,9 +7307,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.73": - version: 1.5.75 - resolution: "electron-to-chromium@npm:1.5.75" - checksum: 10c0/df769b7a5e9895a8ba8eb7f31b9525a0e00b8aef6e3ecab3faebe90756fc9ac008dddb8d9a2a78d2079cbaebd27da6e1379f77e910163f405bb1a3d622ec4276 + version: 1.5.76 + resolution: "electron-to-chromium@npm:1.5.76" + checksum: 10c0/5a977be9fd5810769a7b4eae0e4b41b6beca65f2b3f3b7442819f6c93366d767d183cfbf408714f944a9bf3aa304f8c9ab9d0cdfd8e878ab8f2cbb61f8b22acd languageName: node linkType: hard @@ -8000,6 +8010,13 @@ __metadata: languageName: node linkType: hard +"fast-content-type-parse@npm:^2.0.0": + version: 2.0.0 + resolution: "fast-content-type-parse@npm:2.0.0" + checksum: 10c0/13fbe7beb744fa6c521c12954d06753d0557e3bc970a3941515ada2bffdd8eb73095a8c4ab7b0f2078c295f6f639e9d0fbd0601e47ff57bc043f2a099d63d8b8 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -8069,11 +8086,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" + version: 1.18.0 + resolution: "fastq@npm:1.18.0" dependencies: reusify: "npm:^1.0.4" - checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 languageName: node linkType: hard @@ -9062,9 +9079,9 @@ __metadata: linkType: hard "heap-js@npm:^2.2.0": - version: 2.5.0 - resolution: "heap-js@npm:2.5.0" - checksum: 10c0/11a8ff8abdea5087770d62bcf235fc5b7ffcb832d328264e91034cac1a898fb18259386f3cc12003ef49189d82e216498fdf8c486da197b36c44cda3e12ff3ac + version: 2.6.0 + resolution: "heap-js@npm:2.6.0" + checksum: 10c0/49fad329f38987ee5cf76841e504b5a6b537781718997a7f4922a706be80afc07f6d92c77ae7036c7ed16ceaa6258d0d294793a120c12389926138edcb73876e languageName: node linkType: hard @@ -14937,21 +14954,21 @@ __metadata: languageName: node linkType: hard -"tldts-core@npm:^6.1.69": - version: 6.1.69 - resolution: "tldts-core@npm:6.1.69" - checksum: 10c0/654b7ca5e349c89613b99179c5a3f55870be0b77d4ce062eaf6cdda7b160dc454a79a48e825e711f89e93588e62cbb6b166171a044a7427f5987ae9602d68328 +"tldts-core@npm:^6.1.70": + version: 6.1.70 + resolution: "tldts-core@npm:6.1.70" + checksum: 10c0/befad5eb9888e7b05db6cbe22d43750ec01615a9a26253b76400c367614429f860d0a49e752e257e9b2583f647413ac0599c27923f5b8d4d91af78bba0d6f984 languageName: node linkType: hard "tldts@npm:^6.1.32": - version: 6.1.69 - resolution: "tldts@npm:6.1.69" + version: 6.1.70 + resolution: "tldts@npm:6.1.70" dependencies: - tldts-core: "npm:^6.1.69" + tldts-core: "npm:^6.1.70" bin: tldts: bin/cli.js - checksum: 10c0/47ca3c435f3fbe325a263e07417079551911afce45be0cc8b4a1c9ba14b8e9e6c493c6260dc5f34d3c4b396671fe641b2ebea9646e34c4a4d03223da848c7658 + checksum: 10c0/acfa49cab55242fe55ccb995e0a31d6bbed3cc1d52b0acd18c5ea0520fd44b3e85b850455dea566fbfca65cd9bce667f4922e827fbc216e4cd53585bcf633665 languageName: node linkType: hard