mirror of
https://github.com/hernikplays/freelo-action.git
synced 2024-11-10 02:38:06 +01:00
45440 lines
1.6 MiB
45440 lines
1.6 MiB
import {createRequire} from "node:module";
|
|
var __create = Object.create;
|
|
var __defProp = Object.defineProperty;
|
|
var __getProtoOf = Object.getPrototypeOf;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __toESM = (mod, isNodeMode, target) => {
|
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
for (let key of __getOwnPropNames(mod))
|
|
if (!__hasOwnProp.call(to, key))
|
|
__defProp(to, key, {
|
|
get: () => mod[key],
|
|
enumerable: true
|
|
});
|
|
return to;
|
|
};
|
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, {
|
|
get: all[name],
|
|
enumerable: true,
|
|
configurable: true,
|
|
set: (newValue) => all[name] = () => newValue
|
|
});
|
|
};
|
|
var __require = createRequire(import.meta.url);
|
|
|
|
// node_modules/@actions/core/lib/utils.js
|
|
var require_utils = __commonJS((exports) => {
|
|
var toCommandValue = function(input) {
|
|
if (input === null || input === undefined) {
|
|
return "";
|
|
} else if (typeof input === "string" || input instanceof String) {
|
|
return input;
|
|
}
|
|
return JSON.stringify(input);
|
|
};
|
|
var toCommandProperties = function(annotationProperties) {
|
|
if (!Object.keys(annotationProperties).length) {
|
|
return {};
|
|
}
|
|
return {
|
|
title: annotationProperties.title,
|
|
file: annotationProperties.file,
|
|
line: annotationProperties.startLine,
|
|
endLine: annotationProperties.endLine,
|
|
col: annotationProperties.startColumn,
|
|
endColumn: annotationProperties.endColumn
|
|
};
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.toCommandProperties = exports.toCommandValue = undefined;
|
|
exports.toCommandValue = toCommandValue;
|
|
exports.toCommandProperties = toCommandProperties;
|
|
});
|
|
|
|
// node_modules/@actions/core/lib/command.js
|
|
var require_command = __commonJS((exports) => {
|
|
var issueCommand = function(command, properties, message) {
|
|
const cmd = new Command(command, properties, message);
|
|
process.stdout.write(cmd.toString() + os.EOL);
|
|
};
|
|
var issue = function(name, message = "") {
|
|
issueCommand(name, {}, message);
|
|
};
|
|
var escapeData = function(s) {
|
|
return utils_1.toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A");
|
|
};
|
|
var escapeProperty = function(s) {
|
|
return utils_1.toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C");
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() {
|
|
return m[k];
|
|
} });
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.issue = exports.issueCommand = undefined;
|
|
var os = __importStar(__require("os"));
|
|
var utils_1 = require_utils();
|
|
exports.issueCommand = issueCommand;
|
|
exports.issue = issue;
|
|
var CMD_STRING = "::";
|
|
|
|
class Command {
|
|
constructor(command, properties, message) {
|
|
if (!command) {
|
|
command = "missing.command";
|
|
}
|
|
this.command = command;
|
|
this.properties = properties;
|
|
this.message = message;
|
|
}
|
|
toString() {
|
|
let cmdStr = CMD_STRING + this.command;
|
|
if (this.properties && Object.keys(this.properties).length > 0) {
|
|
cmdStr += " ";
|
|
let first = true;
|
|
for (const key in this.properties) {
|
|
if (this.properties.hasOwnProperty(key)) {
|
|
const val = this.properties[key];
|
|
if (val) {
|
|
if (first) {
|
|
first = false;
|
|
} else {
|
|
cmdStr += ",";
|
|
}
|
|
cmdStr += `${key}=${escapeProperty(val)}`;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
|
return cmdStr;
|
|
}
|
|
}
|
|
});
|
|
|
|
// node_modules/uuid/dist/rng.js
|
|
var require_rng = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var rng = function() {
|
|
if (poolPtr > rnds8Pool.length - 16) {
|
|
_crypto.default.randomFillSync(rnds8Pool);
|
|
poolPtr = 0;
|
|
}
|
|
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = rng;
|
|
var _crypto = _interopRequireDefault(__require("crypto"));
|
|
var rnds8Pool = new Uint8Array(256);
|
|
var poolPtr = rnds8Pool.length;
|
|
});
|
|
|
|
// node_modules/uuid/dist/regex.js
|
|
var require_regex = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/validate.js
|
|
var require_validate = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var validate = function(uuid) {
|
|
return typeof uuid === "string" && _regex.default.test(uuid);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _regex = _interopRequireDefault(require_regex());
|
|
var _default = validate;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/stringify.js
|
|
var require_stringify = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var stringify = function(arr, offset = 0) {
|
|
const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError("Stringified UUID is invalid");
|
|
}
|
|
return uuid;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _validate = _interopRequireDefault(require_validate());
|
|
var byteToHex = [];
|
|
for (let i = 0;i < 256; ++i) {
|
|
byteToHex.push((i + 256).toString(16).substr(1));
|
|
}
|
|
var _default = stringify;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/v1.js
|
|
var require_v1 = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var v1 = function(options, buf, offset) {
|
|
let i = buf && offset || 0;
|
|
const b = buf || new Array(16);
|
|
options = options || {};
|
|
let node = options.node || _nodeId;
|
|
let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;
|
|
if (node == null || clockseq == null) {
|
|
const seedBytes = options.random || (options.rng || _rng.default)();
|
|
if (node == null) {
|
|
node = _nodeId = [seedBytes[0] | 1, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
|
|
}
|
|
if (clockseq == null) {
|
|
clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 16383;
|
|
}
|
|
}
|
|
let msecs = options.msecs !== undefined ? options.msecs : Date.now();
|
|
let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
|
|
const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 1e4;
|
|
if (dt < 0 && options.clockseq === undefined) {
|
|
clockseq = clockseq + 1 & 16383;
|
|
}
|
|
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
nsecs = 0;
|
|
}
|
|
if (nsecs >= 1e4) {
|
|
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
|
|
}
|
|
_lastMSecs = msecs;
|
|
_lastNSecs = nsecs;
|
|
_clockseq = clockseq;
|
|
msecs += 12219292800000;
|
|
const tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296;
|
|
b[i++] = tl >>> 24 & 255;
|
|
b[i++] = tl >>> 16 & 255;
|
|
b[i++] = tl >>> 8 & 255;
|
|
b[i++] = tl & 255;
|
|
const tmh = msecs / 4294967296 * 1e4 & 268435455;
|
|
b[i++] = tmh >>> 8 & 255;
|
|
b[i++] = tmh & 255;
|
|
b[i++] = tmh >>> 24 & 15 | 16;
|
|
b[i++] = tmh >>> 16 & 255;
|
|
b[i++] = clockseq >>> 8 | 128;
|
|
b[i++] = clockseq & 255;
|
|
for (let n = 0;n < 6; ++n) {
|
|
b[i + n] = node[n];
|
|
}
|
|
return buf || (0, _stringify.default)(b);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _rng = _interopRequireDefault(require_rng());
|
|
var _stringify = _interopRequireDefault(require_stringify());
|
|
var _nodeId;
|
|
var _clockseq;
|
|
var _lastMSecs = 0;
|
|
var _lastNSecs = 0;
|
|
var _default = v1;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/parse.js
|
|
var require_parse = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var parse = function(uuid) {
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError("Invalid UUID");
|
|
}
|
|
let v;
|
|
const arr = new Uint8Array(16);
|
|
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
arr[1] = v >>> 16 & 255;
|
|
arr[2] = v >>> 8 & 255;
|
|
arr[3] = v & 255;
|
|
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
arr[5] = v & 255;
|
|
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
arr[7] = v & 255;
|
|
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
arr[9] = v & 255;
|
|
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 1099511627776 & 255;
|
|
arr[11] = v / 4294967296 & 255;
|
|
arr[12] = v >>> 24 & 255;
|
|
arr[13] = v >>> 16 & 255;
|
|
arr[14] = v >>> 8 & 255;
|
|
arr[15] = v & 255;
|
|
return arr;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _validate = _interopRequireDefault(require_validate());
|
|
var _default = parse;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/v35.js
|
|
var require_v35 = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var stringToBytes = function(str) {
|
|
str = unescape(encodeURIComponent(str));
|
|
const bytes = [];
|
|
for (let i = 0;i < str.length; ++i) {
|
|
bytes.push(str.charCodeAt(i));
|
|
}
|
|
return bytes;
|
|
};
|
|
var _default = function(name, version, hashfunc) {
|
|
function generateUUID(value, namespace, buf, offset) {
|
|
if (typeof value === "string") {
|
|
value = stringToBytes(value);
|
|
}
|
|
if (typeof namespace === "string") {
|
|
namespace = (0, _parse.default)(namespace);
|
|
}
|
|
if (namespace.length !== 16) {
|
|
throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");
|
|
}
|
|
let bytes = new Uint8Array(16 + value.length);
|
|
bytes.set(namespace);
|
|
bytes.set(value, namespace.length);
|
|
bytes = hashfunc(bytes);
|
|
bytes[6] = bytes[6] & 15 | version;
|
|
bytes[8] = bytes[8] & 63 | 128;
|
|
if (buf) {
|
|
offset = offset || 0;
|
|
for (let i = 0;i < 16; ++i) {
|
|
buf[offset + i] = bytes[i];
|
|
}
|
|
return buf;
|
|
}
|
|
return (0, _stringify.default)(bytes);
|
|
}
|
|
try {
|
|
generateUUID.name = name;
|
|
} catch (err) {
|
|
}
|
|
generateUUID.DNS = DNS;
|
|
generateUUID.URL = URL2;
|
|
return generateUUID;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = _default;
|
|
exports.URL = exports.DNS = undefined;
|
|
var _stringify = _interopRequireDefault(require_stringify());
|
|
var _parse = _interopRequireDefault(require_parse());
|
|
var DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
|
|
exports.DNS = DNS;
|
|
var URL2 = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
|
|
exports.URL = URL2;
|
|
});
|
|
|
|
// node_modules/uuid/dist/md5.js
|
|
var require_md5 = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var md5 = function(bytes) {
|
|
if (Array.isArray(bytes)) {
|
|
bytes = Buffer.from(bytes);
|
|
} else if (typeof bytes === "string") {
|
|
bytes = Buffer.from(bytes, "utf8");
|
|
}
|
|
return _crypto.default.createHash("md5").update(bytes).digest();
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _crypto = _interopRequireDefault(__require("crypto"));
|
|
var _default = md5;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/v3.js
|
|
var require_v3 = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _v = _interopRequireDefault(require_v35());
|
|
var _md = _interopRequireDefault(require_md5());
|
|
var v3 = (0, _v.default)("v3", 48, _md.default);
|
|
var _default = v3;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/v4.js
|
|
var require_v4 = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var v4 = function(options, buf, offset) {
|
|
options = options || {};
|
|
const rnds = options.random || (options.rng || _rng.default)();
|
|
rnds[6] = rnds[6] & 15 | 64;
|
|
rnds[8] = rnds[8] & 63 | 128;
|
|
if (buf) {
|
|
offset = offset || 0;
|
|
for (let i = 0;i < 16; ++i) {
|
|
buf[offset + i] = rnds[i];
|
|
}
|
|
return buf;
|
|
}
|
|
return (0, _stringify.default)(rnds);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _rng = _interopRequireDefault(require_rng());
|
|
var _stringify = _interopRequireDefault(require_stringify());
|
|
var _default = v4;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/sha1.js
|
|
var require_sha1 = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var sha1 = function(bytes) {
|
|
if (Array.isArray(bytes)) {
|
|
bytes = Buffer.from(bytes);
|
|
} else if (typeof bytes === "string") {
|
|
bytes = Buffer.from(bytes, "utf8");
|
|
}
|
|
return _crypto.default.createHash("sha1").update(bytes).digest();
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _crypto = _interopRequireDefault(__require("crypto"));
|
|
var _default = sha1;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/v5.js
|
|
var require_v5 = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _v = _interopRequireDefault(require_v35());
|
|
var _sha = _interopRequireDefault(require_sha1());
|
|
var v5 = (0, _v.default)("v5", 80, _sha.default);
|
|
var _default = v5;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/nil.js
|
|
var require_nil = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _default = "00000000-0000-0000-0000-000000000000";
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/version.js
|
|
var require_version = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
var version = function(uuid) {
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError("Invalid UUID");
|
|
}
|
|
return parseInt(uuid.substr(14, 1), 16);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = undefined;
|
|
var _validate = _interopRequireDefault(require_validate());
|
|
var _default = version;
|
|
exports.default = _default;
|
|
});
|
|
|
|
// node_modules/uuid/dist/index.js
|
|
var require_dist = __commonJS((exports) => {
|
|
var _interopRequireDefault = function(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "v1", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _v.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "v3", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _v2.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "v4", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _v3.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "v5", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _v4.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "NIL", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _nil.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "version", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _version.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "validate", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _validate.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "stringify", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _stringify.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "parse", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _parse.default;
|
|
}
|
|
});
|
|
var _v = _interopRequireDefault(require_v1());
|
|
var _v2 = _interopRequireDefault(require_v3());
|
|
var _v3 = _interopRequireDefault(require_v4());
|
|
var _v4 = _interopRequireDefault(require_v5());
|
|
var _nil = _interopRequireDefault(require_nil());
|
|
var _version = _interopRequireDefault(require_version());
|
|
var _validate = _interopRequireDefault(require_validate());
|
|
var _stringify = _interopRequireDefault(require_stringify());
|
|
var _parse = _interopRequireDefault(require_parse());
|
|
});
|
|
|
|
// node_modules/@actions/core/lib/file-command.js
|
|
var require_file_command = __commonJS((exports) => {
|
|
var issueFileCommand = function(command, message) {
|
|
const filePath = process.env[`GITHUB_${command}`];
|
|
if (!filePath) {
|
|
throw new Error(`Unable to find environment variable for file command ${command}`);
|
|
}
|
|
if (!fs.existsSync(filePath)) {
|
|
throw new Error(`Missing file at path: ${filePath}`);
|
|
}
|
|
fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
|
|
encoding: "utf8"
|
|
});
|
|
};
|
|
var prepareKeyValueMessage = function(key, value) {
|
|
const delimiter = `ghadelimiter_${uuid_1.v4()}`;
|
|
const convertedValue = utils_1.toCommandValue(value);
|
|
if (key.includes(delimiter)) {
|
|
throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`);
|
|
}
|
|
if (convertedValue.includes(delimiter)) {
|
|
throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`);
|
|
}
|
|
return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`;
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() {
|
|
return m[k];
|
|
} });
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.prepareKeyValueMessage = exports.issueFileCommand = undefined;
|
|
var fs = __importStar(__require("fs"));
|
|
var os = __importStar(__require("os"));
|
|
var uuid_1 = require_dist();
|
|
var utils_1 = require_utils();
|
|
exports.issueFileCommand = issueFileCommand;
|
|
exports.prepareKeyValueMessage = prepareKeyValueMessage;
|
|
});
|
|
|
|
// node_modules/@actions/http-client/lib/proxy.js
|
|
var require_proxy = __commonJS((exports) => {
|
|
var getProxyUrl = function(reqUrl) {
|
|
const usingSsl = reqUrl.protocol === "https:";
|
|
if (checkBypass(reqUrl)) {
|
|
return;
|
|
}
|
|
const proxyVar = (() => {
|
|
if (usingSsl) {
|
|
return process.env["https_proxy"] || process.env["HTTPS_PROXY"];
|
|
} else {
|
|
return process.env["http_proxy"] || process.env["HTTP_PROXY"];
|
|
}
|
|
})();
|
|
if (proxyVar) {
|
|
try {
|
|
return new URL(proxyVar);
|
|
} catch (_a) {
|
|
if (!proxyVar.startsWith("http://") && !proxyVar.startsWith("https://"))
|
|
return new URL(`http://${proxyVar}`);
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
};
|
|
var checkBypass = function(reqUrl) {
|
|
if (!reqUrl.hostname) {
|
|
return false;
|
|
}
|
|
const reqHost = reqUrl.hostname;
|
|
if (isLoopbackAddress(reqHost)) {
|
|
return true;
|
|
}
|
|
const noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || "";
|
|
if (!noProxy) {
|
|
return false;
|
|
}
|
|
let reqPort;
|
|
if (reqUrl.port) {
|
|
reqPort = Number(reqUrl.port);
|
|
} else if (reqUrl.protocol === "http:") {
|
|
reqPort = 80;
|
|
} else if (reqUrl.protocol === "https:") {
|
|
reqPort = 443;
|
|
}
|
|
const upperReqHosts = [reqUrl.hostname.toUpperCase()];
|
|
if (typeof reqPort === "number") {
|
|
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
|
|
}
|
|
for (const upperNoProxyItem of noProxy.split(",").map((x) => x.trim().toUpperCase()).filter((x) => x)) {
|
|
if (upperNoProxyItem === "*" || upperReqHosts.some((x) => x === upperNoProxyItem || x.endsWith(`.${upperNoProxyItem}`) || upperNoProxyItem.startsWith(".") && x.endsWith(`${upperNoProxyItem}`))) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
var isLoopbackAddress = function(host) {
|
|
const hostLower = host.toLowerCase();
|
|
return hostLower === "localhost" || hostLower.startsWith("127.") || hostLower.startsWith("[::1]") || hostLower.startsWith("[0:0:0:0:0:0:0:1]");
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.checkBypass = exports.getProxyUrl = undefined;
|
|
exports.getProxyUrl = getProxyUrl;
|
|
exports.checkBypass = checkBypass;
|
|
});
|
|
|
|
// node_modules/tunnel/lib/tunnel.js
|
|
var require_tunnel = __commonJS((exports) => {
|
|
var httpOverHttp = function(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = http.request;
|
|
return agent;
|
|
};
|
|
var httpsOverHttp = function(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = http.request;
|
|
agent.createSocket = createSecureSocket;
|
|
agent.defaultPort = 443;
|
|
return agent;
|
|
};
|
|
var httpOverHttps = function(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = https.request;
|
|
return agent;
|
|
};
|
|
var httpsOverHttps = function(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = https.request;
|
|
agent.createSocket = createSecureSocket;
|
|
agent.defaultPort = 443;
|
|
return agent;
|
|
};
|
|
var TunnelingAgent = function(options) {
|
|
var self2 = this;
|
|
self2.options = options || {};
|
|
self2.proxyOptions = self2.options.proxy || {};
|
|
self2.maxSockets = self2.options.maxSockets || http.Agent.defaultMaxSockets;
|
|
self2.requests = [];
|
|
self2.sockets = [];
|
|
self2.on("free", function onFree(socket, host, port, localAddress) {
|
|
var options2 = toOptions(host, port, localAddress);
|
|
for (var i = 0, len = self2.requests.length;i < len; ++i) {
|
|
var pending = self2.requests[i];
|
|
if (pending.host === options2.host && pending.port === options2.port) {
|
|
self2.requests.splice(i, 1);
|
|
pending.request.onSocket(socket);
|
|
return;
|
|
}
|
|
}
|
|
socket.destroy();
|
|
self2.removeSocket(socket);
|
|
});
|
|
};
|
|
var createSecureSocket = function(options, cb) {
|
|
var self2 = this;
|
|
TunnelingAgent.prototype.createSocket.call(self2, options, function(socket) {
|
|
var hostHeader = options.request.getHeader("host");
|
|
var tlsOptions = mergeOptions({}, self2.options, {
|
|
socket,
|
|
servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host
|
|
});
|
|
var secureSocket = tls.connect(0, tlsOptions);
|
|
self2.sockets[self2.sockets.indexOf(socket)] = secureSocket;
|
|
cb(secureSocket);
|
|
});
|
|
};
|
|
var toOptions = function(host, port, localAddress) {
|
|
if (typeof host === "string") {
|
|
return {
|
|
host,
|
|
port,
|
|
localAddress
|
|
};
|
|
}
|
|
return host;
|
|
};
|
|
var mergeOptions = function(target) {
|
|
for (var i = 1, len = arguments.length;i < len; ++i) {
|
|
var overrides = arguments[i];
|
|
if (typeof overrides === "object") {
|
|
var keys = Object.keys(overrides);
|
|
for (var j = 0, keyLen = keys.length;j < keyLen; ++j) {
|
|
var k = keys[j];
|
|
if (overrides[k] !== undefined) {
|
|
target[k] = overrides[k];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return target;
|
|
};
|
|
var net = __require("net");
|
|
var tls = __require("tls");
|
|
var http = __require("http");
|
|
var https = __require("https");
|
|
var events = __require("events");
|
|
var assert = __require("assert");
|
|
var util = __require("util");
|
|
exports.httpOverHttp = httpOverHttp;
|
|
exports.httpsOverHttp = httpsOverHttp;
|
|
exports.httpOverHttps = httpOverHttps;
|
|
exports.httpsOverHttps = httpsOverHttps;
|
|
util.inherits(TunnelingAgent, events.EventEmitter);
|
|
TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
|
|
var self2 = this;
|
|
var options = mergeOptions({ request: req }, self2.options, toOptions(host, port, localAddress));
|
|
if (self2.sockets.length >= this.maxSockets) {
|
|
self2.requests.push(options);
|
|
return;
|
|
}
|
|
self2.createSocket(options, function(socket) {
|
|
socket.on("free", onFree);
|
|
socket.on("close", onCloseOrRemove);
|
|
socket.on("agentRemove", onCloseOrRemove);
|
|
req.onSocket(socket);
|
|
function onFree() {
|
|
self2.emit("free", socket, options);
|
|
}
|
|
function onCloseOrRemove(err) {
|
|
self2.removeSocket(socket);
|
|
socket.removeListener("free", onFree);
|
|
socket.removeListener("close", onCloseOrRemove);
|
|
socket.removeListener("agentRemove", onCloseOrRemove);
|
|
}
|
|
});
|
|
};
|
|
TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
|
|
var self2 = this;
|
|
var placeholder = {};
|
|
self2.sockets.push(placeholder);
|
|
var connectOptions = mergeOptions({}, self2.proxyOptions, {
|
|
method: "CONNECT",
|
|
path: options.host + ":" + options.port,
|
|
agent: false,
|
|
headers: {
|
|
host: options.host + ":" + options.port
|
|
}
|
|
});
|
|
if (options.localAddress) {
|
|
connectOptions.localAddress = options.localAddress;
|
|
}
|
|
if (connectOptions.proxyAuth) {
|
|
connectOptions.headers = connectOptions.headers || {};
|
|
connectOptions.headers["Proxy-Authorization"] = "Basic " + new Buffer(connectOptions.proxyAuth).toString("base64");
|
|
}
|
|
debug("making CONNECT request");
|
|
var connectReq = self2.request(connectOptions);
|
|
connectReq.useChunkedEncodingByDefault = false;
|
|
connectReq.once("response", onResponse);
|
|
connectReq.once("upgrade", onUpgrade);
|
|
connectReq.once("connect", onConnect);
|
|
connectReq.once("error", onError);
|
|
connectReq.end();
|
|
function onResponse(res) {
|
|
res.upgrade = true;
|
|
}
|
|
function onUpgrade(res, socket, head) {
|
|
process.nextTick(function() {
|
|
onConnect(res, socket, head);
|
|
});
|
|
}
|
|
function onConnect(res, socket, head) {
|
|
connectReq.removeAllListeners();
|
|
socket.removeAllListeners();
|
|
if (res.statusCode !== 200) {
|
|
debug("tunneling socket could not be established, statusCode=%d", res.statusCode);
|
|
socket.destroy();
|
|
var error = new Error("tunneling socket could not be established, " + "statusCode=" + res.statusCode);
|
|
error.code = "ECONNRESET";
|
|
options.request.emit("error", error);
|
|
self2.removeSocket(placeholder);
|
|
return;
|
|
}
|
|
if (head.length > 0) {
|
|
debug("got illegal response body from proxy");
|
|
socket.destroy();
|
|
var error = new Error("got illegal response body from proxy");
|
|
error.code = "ECONNRESET";
|
|
options.request.emit("error", error);
|
|
self2.removeSocket(placeholder);
|
|
return;
|
|
}
|
|
debug("tunneling connection has established");
|
|
self2.sockets[self2.sockets.indexOf(placeholder)] = socket;
|
|
return cb(socket);
|
|
}
|
|
function onError(cause) {
|
|
connectReq.removeAllListeners();
|
|
debug("tunneling socket could not be established, cause=%s\n", cause.message, cause.stack);
|
|
var error = new Error("tunneling socket could not be established, " + "cause=" + cause.message);
|
|
error.code = "ECONNRESET";
|
|
options.request.emit("error", error);
|
|
self2.removeSocket(placeholder);
|
|
}
|
|
};
|
|
TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
|
|
var pos = this.sockets.indexOf(socket);
|
|
if (pos === -1) {
|
|
return;
|
|
}
|
|
this.sockets.splice(pos, 1);
|
|
var pending = this.requests.shift();
|
|
if (pending) {
|
|
this.createSocket(pending, function(socket2) {
|
|
pending.request.onSocket(socket2);
|
|
});
|
|
}
|
|
};
|
|
var debug;
|
|
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
|
|
debug = function() {
|
|
var args = Array.prototype.slice.call(arguments);
|
|
if (typeof args[0] === "string") {
|
|
args[0] = "TUNNEL: " + args[0];
|
|
} else {
|
|
args.unshift("TUNNEL:");
|
|
}
|
|
console.error.apply(console, args);
|
|
};
|
|
} else {
|
|
debug = function() {
|
|
};
|
|
}
|
|
exports.debug = debug;
|
|
});
|
|
|
|
// node_modules/undici/lib/llhttp/llhttp-wasm.js
|
|
var require_llhttp_wasm = __commonJS((exports, module) => {
|
|
module.exports = "AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8=";
|
|
});
|
|
|
|
// node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
|
|
var require_llhttp_simd_wasm = __commonJS((exports, module) => {
|
|
module.exports = "AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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IAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB4fICEjJSg/QEFERUZHSElKS0xNT1BRUlPeA1dZW1xdYGJlZmdoaWprbG1vcHFyc3R1dnd4eXp7fH1+gAGCAYUBhgGHAYkBiwGMAY0BjgGPAZABkQGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMBmQKkArAC/gL+AgsgASIEIAJHDfMBQd0BIRAM/wMLIAEiECACRw3dAUHDASEQDP4DCyABIgEgAkcNkAFB9wAhEAz9AwsgASIBIAJHDYYBQe8AIRAM/AMLIAEiASACRw1/QeoAIRAM+wMLIAEiASACRw17QegAIRAM+gMLIAEiASACRw14QeYAIRAM+QMLIAEiASACRw0aQRghEAz4AwsgASIBIAJHDRRBEiEQDPcDCyABIgEgAkcNWUHFACEQDPYDCyABIgEgAkcNSkE/IRAM9QMLIAEiASACRw1IQTwhEAz0AwsgASIBIAJHDUFBMSEQDPMDCyAALQAuQQFGDesDDIcCCyAAIAEiASACEMCAgIAAQQFHDeYBIABCADcDIAznAQsgACABIgEgAhC0gICAACIQDecBIAEhAQz1AgsCQCABIgEgAkcNAEEGIRAM8AMLIAAgAUEBaiIBIAIQu4CAgAAiEA3oASABIQEMMQsgAEIANwMgQRIhEAzVAwsgASIQIAJHDStBHSEQDO0DCwJAIAEiASACRg0AIAFBAWohAUEQIRAM1AMLQQchEAzsAwsgAEIAIAApAyAiESACIAEiEGutIhJ9IhMgEyARVhs3AyAgESASViIURQ3lAUEIIRAM6wMLAkAgASIBIAJGDQAgAEGJgICAADYCCCAAIAE2AgQgASEBQRQhEAzSAwtBCSEQDOoDCyABIQEgACkDIFAN5AEgASEBDPICCwJAIAEiASACRw0AQQshEAzpAwsgACABQQFqIgEgAhC2gICAACIQDeUBIAEhAQzyAgsgACABIgEgAhC4gICAACIQDeUBIAEhAQzyAgsgACABIgEgAhC4gICAACIQDeYBIAEhAQwNCyAAIAEiASACELqAgIAAIhAN5wEgASEBDPACCwJAIAEiASACRw0AQQ8hEAzlAwsgAS0AACIQQTtGDQggEEENRw3oASABQQFqIQEM7wILIAAgASIBIAIQuoCAgAAiEA3oASABIQEM8gILA0ACQCABLQAAQfC1gIAAai0AACIQQQFGDQAgEEECRw3rASAAKAIEIRAgAEEANgIEIAAgECABQQFqIgEQuYCAgAAiEA3qASABIQEM9AILIAFBAWoiASACRw0AC0ESIRAM4gMLIAAgASIBIAIQuoCAgAAiEA3pASABIQEMCgsgASIBIAJHDQZBGyEQDOADCwJAIAEiASACRw0AQRYhEAzgAwsgAEGKgICAADYCCCAAIAE2AgQgACABIAIQuICAgAAiEA3qASABIQFBICEQDMYDCwJAIAEiASACRg0AA0ACQCABLQAAQfC3gIAAai0AACIQQQJGDQACQCAQQX9qDgTlAewBAOsB7AELIAFBAWohAUEIIRAMyAMLIAFBAWoiASACRw0AC0EVIRAM3wMLQRUhEAzeAwsDQAJAIAEtAABB8LmAgABqLQAAIhBBAkYNACAQQX9qDgTeAewB4AHrAewBCyABQQFqIgEgAkcNAAtBGCEQDN0DCwJAIAEiASACRg0AIABBi4CAgAA2AgggACABNgIEIAEhAUEHIRAMxAMLQRkhEAzcAwsgAUEBaiEBDAILAkAgASIUIAJHDQBBGiEQDNsDCyAUIQECQCAULQAAQXNqDhTdAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAgDuAgtBACEQIABBADYCHCAAQa+LgIAANgIQIABBAjYCDCAAIBRBAWo2AhQM2gMLAkAgAS0AACIQQTtGDQAgEEENRw3oASABQQFqIQEM5QILIAFBAWohAQtBIiEQDL8DCwJAIAEiECACRw0AQRwhEAzYAwtCACERIBAhASAQLQAAQVBqDjfnAeYBAQIDBAUGBwgAAAAAAAAACQoLDA0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPEBESExQAC0EeIRAMvQMLQgIhEQzlAQtCAyERDOQBC0IEIREM4wELQgUhEQziAQtCBiERDOEBC0IHIREM4AELQgghEQzfAQtCCSERDN4BC0IKIREM3QELQgshEQzcAQtCDCERDNsBC0INIREM2gELQg4hEQzZAQtCDyERDNgBC0IKIREM1wELQgshEQzWAQtCDCERDNUBC0INIREM1AELQg4hEQzTAQtCDyERDNIBC0IAIRECQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAtAABBUGoON+UB5AEAAQIDBAUGB+YB5gHmAeYB5gHmAeYBCAkKCwwN5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAQ4PEBESE+YBC0ICIREM5AELQgMhEQzjAQtCBCERDOIBC0IFIREM4QELQgYhEQzgAQtCByERDN8BC0IIIREM3gELQgkhEQzdAQtCCiERDNwBC0ILIREM2wELQgwhEQzaAQtCDSERDNkBC0IOIREM2AELQg8hEQzXAQtCCiERDNYBC0ILIREM1QELQgwhEQzUAQtCDSERDNMBC0IOIREM0gELQg8hEQzRAQsgAEIAIAApAyAiESACIAEiEGutIhJ9IhMgEyARVhs3AyAgESASViIURQ3SAUEfIRAMwAMLAkAgASIBIAJGDQAgAEGJgICAADYCCCAAIAE2AgQgASEBQSQhEAynAwtBICEQDL8DCyAAIAEiECACEL6AgIAAQX9qDgW2AQDFAgHRAdIBC0ERIRAMpAMLIABBAToALyAQIQEMuwMLIAEiASACRw3SAUEkIRAMuwMLIAEiDSACRw0eQcYAIRAMugMLIAAgASIBIAIQsoCAgAAiEA3UASABIQEMtQELIAEiECACRw0mQdAAIRAMuAMLAkAgASIBIAJHDQBBKCEQDLgDCyAAQQA2AgQgAEGMgICAADYCCCAAIAEgARCxgICAACIQDdMBIAEhAQzYAQsCQCABIhAgAkcNAEEpIRAMtwMLIBAtAAAiAUEgRg0UIAFBCUcN0wEgEEEBaiEBDBULAkAgASIBIAJGDQAgAUEBaiEBDBcLQSohEAy1AwsCQCABIhAgAkcNAEErIRAMtQMLAkAgEC0AACIBQQlGDQAgAUEgRw3VAQsgAC0ALEEIRg3TASAQIQEMkQMLAkAgASIBIAJHDQBBLCEQDLQDCyABLQAAQQpHDdUBIAFBAWohAQzJAgsgASIOIAJHDdUBQS8hEAyyAwsDQAJAIAEtAAAiEEEgRg0AAkAgEEF2ag4EANwB3AEA2gELIAEhAQzgAQsgAUEBaiIBIAJHDQALQTEhEAyxAwtBMiEQIAEiFCACRg2wAyACIBRrIAAoAgAiAWohFSAUIAFrQQNqIRYCQANAIBQtAAAiF0EgciAXIBdBv39qQf8BcUEaSRtB/wFxIAFB8LuAgABqLQAARw0BAkAgAUEDRw0AQQYhAQyWAwsgAUEBaiEBIBRBAWoiFCACRw0ACyAAIBU2AgAMsQMLIABBADYCACAUIQEM2QELQTMhECABIhQgAkYNrwMgAiAUayAAKAIAIgFqIRUgFCABa0EIaiEWAkADQCAULQAAIhdBIHIgFyAXQb9/akH/AXFBGkkbQf8BcSABQfS7gIAAai0AAEcNAQJAIAFBCEcNAEEFIQEMlQMLIAFBAWohASAUQQFqIhQgAkcNAAsgACAVNgIADLADCyAAQQA2AgAgFCEBDNgBC0E0IRAgASIUIAJGDa4DIAIgFGsgACgCACIBaiEVIBQgAWtBBWohFgJAA0AgFC0AACIXQSByIBcgF0G/f2pB/wFxQRpJG0H/AXEgAUHQwoCAAGotAABHDQECQCABQQVHDQBBByEBDJQDCyABQQFqIQEgFEEBaiIUIAJHDQALIAAgFTYCAAyvAwsgAEEANgIAIBQhAQzXAQsCQCABIgEgAkYNAANAAkAgAS0AAEGAvoCAAGotAAAiEEEBRg0AIBBBAkYNCiABIQEM3QELIAFBAWoiASACRw0AC0EwIRAMrgMLQTAhEAytAwsCQCABIgEgAkYNAANAAkAgAS0AACIQQSBGDQAgEEF2ag4E2QHaAdoB2QHaAQsgAUEBaiIBIAJHDQALQTghEAytAwtBOCEQDKwDCwNAAkAgAS0AACIQQSBGDQAgEEEJRw0DCyABQQFqIgEgAkcNAAtBPCEQDKsDCwNAAkAgAS0AACIQQSBGDQACQAJAIBBBdmoOBNoBAQHaAQALIBBBLEYN2wELIAEhAQwECyABQQFqIgEgAkcNAAtBPyEQDKoDCyABIQEM2wELQcAAIRAgASIUIAJGDagDIAIgFGsgACgCACIBaiEWIBQgAWtBBmohFwJAA0AgFC0AAEEgciABQYDAgIAAai0AAEcNASABQQZGDY4DIAFBAWohASAUQQFqIhQgAkcNAAsgACAWNgIADKkDCyAAQQA2AgAgFCEBC0E2IRAMjgMLAkAgASIPIAJHDQBBwQAhEAynAwsgAEGMgICAADYCCCAAIA82AgQgDyEBIAAtACxBf2oOBM0B1QHXAdkBhwMLIAFBAWohAQzMAQsCQCABIgEgAkYNAANAAkAgAS0AACIQQSByIBAgEEG/f2pB/wFxQRpJG0H/AXEiEEEJRg0AIBBBIEYNAAJAAkACQAJAIBBBnX9qDhMAAwMDAwMDAwEDAwMDAwMDAwMCAwsgAUEBaiEBQTEhEAyRAwsgAUEBaiEBQTIhEAyQAwsgAUEBaiEBQTMhEAyPAwsgASEBDNABCyABQQFqIgEgAkcNAAtBNSEQDKUDC0E1IRAMpAMLAkAgASIBIAJGDQADQAJAIAEtAABBgLyAgABqLQAAQQFGDQAgASEBDNMBCyABQQFqIgEgAkcNAAtBPSEQDKQDC0E9IRAMowMLIAAgASIBIAIQsICAgAAiEA3WASABIQEMAQsgEEEBaiEBC0E8IRAMhwMLAkAgASIBIAJHDQBBwgAhEAygAwsCQANAAkAgAS0AAEF3ag4YAAL+Av4ChAP+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gIA/gILIAFBAWoiASACRw0AC0HCACEQDKADCyABQQFqIQEgAC0ALUEBcUUNvQEgASEBC0EsIRAMhQMLIAEiASACRw3TAUHEACEQDJ0DCwNAAkAgAS0AAEGQwICAAGotAABBAUYNACABIQEMtwILIAFBAWoiASACRw0AC0HFACEQDJwDCyANLQAAIhBBIEYNswEgEEE6Rw2BAyAAKAIEIQEgAEEANgIEIAAgASANEK+AgIAAIgEN0AEgDUEBaiEBDLMCC0HHACEQIAEiDSACRg2aAyACIA1rIAAoAgAiAWohFiANIAFrQQVqIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQZDCgIAAai0AAEcNgAMgAUEFRg30AiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyaAwtByAAhECABIg0gAkYNmQMgAiANayAAKAIAIgFqIRYgDSABa0EJaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUGWwoCAAGotAABHDf8CAkAgAUEJRw0AQQIhAQz1AgsgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMmQMLAkAgASINIAJHDQBByQAhEAyZAwsCQAJAIA0tAAAiAUEgciABIAFBv39qQf8BcUEaSRtB/wFxQZJ/ag4HAIADgAOAA4ADgAMBgAMLIA1BAWohAUE+IRAMgAMLIA1BAWohAUE/IRAM/wILQcoAIRAgASINIAJGDZcDIAIgDWsgACgCACIBaiEWIA0gAWtBAWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFBoMKAgABqLQAARw39AiABQQFGDfACIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJcDC0HLACEQIAEiDSACRg2WAyACIA1rIAAoAgAiAWohFiANIAFrQQ5qIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQaLCgIAAai0AAEcN/AIgAUEORg3wAiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyWAwtBzAAhECABIg0gAkYNlQMgAiANayAAKAIAIgFqIRYgDSABa0EPaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUHAwoCAAGotAABHDfsCAkAgAUEPRw0AQQMhAQzxAgsgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMlQMLQc0AIRAgASINIAJGDZQDIAIgDWsgACgCACIBaiEWIA0gAWtBBWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFB0MKAgABqLQAARw36AgJAIAFBBUcNAEEEIQEM8AILIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJQDCwJAIAEiDSACRw0AQc4AIRAMlAMLAkACQAJAAkAgDS0AACIBQSByIAEgAUG/f2pB/wFxQRpJG0H/AXFBnX9qDhMA/QL9Av0C/QL9Av0C/QL9Av0C/QL9Av0CAf0C/QL9AgID/QILIA1BAWohAUHBACEQDP0CCyANQQFqIQFBwgAhEAz8AgsgDUEBaiEBQcMAIRAM+wILIA1BAWohAUHEACEQDPoCCwJAIAEiASACRg0AIABBjYCAgAA2AgggACABNgIEIAEhAUHFACEQDPoCC0HPACEQDJIDCyAQIQECQAJAIBAtAABBdmoOBAGoAqgCAKgCCyAQQQFqIQELQSchEAz4AgsCQCABIgEgAkcNAEHRACEQDJEDCwJAIAEtAABBIEYNACABIQEMjQELIAFBAWohASAALQAtQQFxRQ3HASABIQEMjAELIAEiFyACRw3IAUHSACEQDI8DC0HTACEQIAEiFCACRg2OAyACIBRrIAAoAgAiAWohFiAUIAFrQQFqIRcDQCAULQAAIAFB1sKAgABqLQAARw3MASABQQFGDccBIAFBAWohASAUQQFqIhQgAkcNAAsgACAWNgIADI4DCwJAIAEiASACRw0AQdUAIRAMjgMLIAEtAABBCkcNzAEgAUEBaiEBDMcBCwJAIAEiASACRw0AQdYAIRAMjQMLAkACQCABLQAAQXZqDgQAzQHNAQHNAQsgAUEBaiEBDMcBCyABQQFqIQFBygAhEAzzAgsgACABIgEgAhCugICAACIQDcsBIAEhAUHNACEQDPICCyAALQApQSJGDYUDDKYCCwJAIAEiASACRw0AQdsAIRAMigMLQQAhFEEBIRdBASEWQQAhEAJAAkACQAJAAkACQAJAAkACQCABLQAAQVBqDgrUAdMBAAECAwQFBgjVAQtBAiEQDAYLQQMhEAwFC0EEIRAMBAtBBSEQDAMLQQYhEAwCC0EHIRAMAQtBCCEQC0EAIRdBACEWQQAhFAzMAQtBCSEQQQEhFEEAIRdBACEWDMsBCwJAIAEiASACRw0AQd0AIRAMiQMLIAEtAABBLkcNzAEgAUEBaiEBDKYCCyABIgEgAkcNzAFB3wAhEAyHAwsCQCABIgEgAkYNACAAQY6AgIAANgIIIAAgATYCBCABIQFB0AAhEAzuAgtB4AAhEAyGAwtB4QAhECABIgEgAkYNhQMgAiABayAAKAIAIhRqIRYgASAUa0EDaiEXA0AgAS0AACAUQeLCgIAAai0AAEcNzQEgFEEDRg3MASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyFAwtB4gAhECABIgEgAkYNhAMgAiABayAAKAIAIhRqIRYgASAUa0ECaiEXA0AgAS0AACAUQebCgIAAai0AAEcNzAEgFEECRg3OASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyEAwtB4wAhECABIgEgAkYNgwMgAiABayAAKAIAIhRqIRYgASAUa0EDaiEXA0AgAS0AACAUQenCgIAAai0AAEcNywEgFEEDRg3OASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyDAwsCQCABIgEgAkcNAEHlACEQDIMDCyAAIAFBAWoiASACEKiAgIAAIhANzQEgASEBQdYAIRAM6QILAkAgASIBIAJGDQADQAJAIAEtAAAiEEEgRg0AAkACQAJAIBBBuH9qDgsAAc8BzwHPAc8BzwHPAc8BzwECzwELIAFBAWohAUHSACEQDO0CCyABQQFqIQFB0wAhEAzsAgsgAUEBaiEBQdQAIRAM6wILIAFBAWoiASACRw0AC0HkACEQDIIDC0HkACEQDIEDCwNAAkAgAS0AAEHwwoCAAGotAAAiEEEBRg0AIBBBfmoOA88B0AHRAdIBCyABQQFqIgEgAkcNAAtB5gAhEAyAAwsCQCABIgEgAkYNACABQQFqIQEMAwtB5wAhEAz/AgsDQAJAIAEtAABB8MSAgABqLQAAIhBBAUYNAAJAIBBBfmoOBNIB0wHUAQDVAQsgASEBQdcAIRAM5wILIAFBAWoiASACRw0AC0HoACEQDP4CCwJAIAEiASACRw0AQekAIRAM/gILAkAgAS0AACIQQXZqDhq6AdUB1QG8AdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAcoB1QHVAQDTAQsgAUEBaiEBC0EGIRAM4wILA0ACQCABLQAAQfDGgIAAai0AAEEBRg0AIAEhAQyeAgsgAUEBaiIBIAJHDQALQeoAIRAM+wILAkAgASIBIAJGDQAgAUEBaiEBDAMLQesAIRAM+gILAkAgASIBIAJHDQBB7AAhEAz6AgsgAUEBaiEBDAELAkAgASIBIAJHDQBB7QAhEAz5AgsgAUEBaiEBC0EEIRAM3gILAkAgASIUIAJHDQBB7gAhEAz3AgsgFCEBAkACQAJAIBQtAABB8MiAgABqLQAAQX9qDgfUAdUB1gEAnAIBAtcBCyAUQQFqIQEMCgsgFEEBaiEBDM0BC0EAIRAgAEEANgIcIABBm5KAgAA2AhAgAEEHNgIMIAAgFEEBajYCFAz2AgsCQANAAkAgAS0AAEHwyICAAGotAAAiEEEERg0AAkACQCAQQX9qDgfSAdMB1AHZAQAEAdkBCyABIQFB2gAhEAzgAgsgAUEBaiEBQdwAIRAM3wILIAFBAWoiASACRw0AC0HvACEQDPYCCyABQQFqIQEMywELAkAgASIUIAJHDQBB8AAhEAz1AgsgFC0AAEEvRw3UASAUQQFqIQEMBgsCQCABIhQgAkcNAEHxACEQDPQCCwJAIBQtAAAiAUEvRw0AIBRBAWohAUHdACEQDNsCCyABQXZqIgRBFksN0wFBASAEdEGJgIACcUUN0wEMygILAkAgASIBIAJGDQAgAUEBaiEBQd4AIRAM2gILQfIAIRAM8gILAkAgASIUIAJHDQBB9AAhEAzyAgsgFCEBAkAgFC0AAEHwzICAAGotAABBf2oOA8kClAIA1AELQeEAIRAM2AILAkAgASIUIAJGDQADQAJAIBQtAABB8MqAgABqLQAAIgFBA0YNAAJAIAFBf2oOAssCANUBCyAUIQFB3wAhEAzaAgsgFEEBaiIUIAJHDQALQfMAIRAM8QILQfMAIRAM8AILAkAgASIBIAJGDQAgAEGPgICAADYCCCAAIAE2AgQgASEBQeAAIRAM1wILQfUAIRAM7wILAkAgASIBIAJHDQBB9gAhEAzvAgsgAEGPgICAADYCCCAAIAE2AgQgASEBC0EDIRAM1AILA0AgAS0AAEEgRw3DAiABQQFqIgEgAkcNAAtB9wAhEAzsAgsCQCABIgEgAkcNAEH4ACEQDOwCCyABLQAAQSBHDc4BIAFBAWohAQzvAQsgACABIgEgAhCsgICAACIQDc4BIAEhAQyOAgsCQCABIgQgAkcNAEH6ACEQDOoCCyAELQAAQcwARw3RASAEQQFqIQFBEyEQDM8BCwJAIAEiBCACRw0AQfsAIRAM6QILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEANAIAQtAAAgAUHwzoCAAGotAABHDdABIAFBBUYNzgEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBB+wAhEAzoAgsCQCABIgQgAkcNAEH8ACEQDOgCCwJAAkAgBC0AAEG9f2oODADRAdEB0QHRAdEB0QHRAdEB0QHRAQHRAQsgBEEBaiEBQeYAIRAMzwILIARBAWohAUHnACEQDM4CCwJAIAEiBCACRw0AQf0AIRAM5wILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNzwEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf0AIRAM5wILIABBADYCACAQQQFqIQFBECEQDMwBCwJAIAEiBCACRw0AQf4AIRAM5gILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQfbOgIAAai0AAEcNzgEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf4AIRAM5gILIABBADYCACAQQQFqIQFBFiEQDMsBCwJAIAEiBCACRw0AQf8AIRAM5QILIAIgBGsgACgCACIBaiEUIAQgAWtBA2ohEAJAA0AgBC0AACABQfzOgIAAai0AAEcNzQEgAUEDRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf8AIRAM5QILIABBADYCACAQQQFqIQFBBSEQDMoBCwJAIAEiBCACRw0AQYABIRAM5AILIAQtAABB2QBHDcsBIARBAWohAUEIIRAMyQELAkAgASIEIAJHDQBBgQEhEAzjAgsCQAJAIAQtAABBsn9qDgMAzAEBzAELIARBAWohAUHrACEQDMoCCyAEQQFqIQFB7AAhEAzJAgsCQCABIgQgAkcNAEGCASEQDOICCwJAAkAgBC0AAEG4f2oOCADLAcsBywHLAcsBywEBywELIARBAWohAUHqACEQDMkCCyAEQQFqIQFB7QAhEAzIAgsCQCABIgQgAkcNAEGDASEQDOECCyACIARrIAAoAgAiAWohECAEIAFrQQJqIRQCQANAIAQtAAAgAUGAz4CAAGotAABHDckBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgEDYCAEGDASEQDOECC0EAIRAgAEEANgIAIBRBAWohAQzGAQsCQCABIgQgAkcNAEGEASEQDOACCyACIARrIAAoAgAiAWohFCAEIAFrQQRqIRACQANAIAQtAAAgAUGDz4CAAGotAABHDcgBIAFBBEYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGEASEQDOACCyAAQQA2AgAgEEEBaiEBQSMhEAzFAQsCQCABIgQgAkcNAEGFASEQDN8CCwJAAkAgBC0AAEG0f2oOCADIAcgByAHIAcgByAEByAELIARBAWohAUHvACEQDMYCCyAEQQFqIQFB8AAhEAzFAgsCQCABIgQgAkcNAEGGASEQDN4CCyAELQAAQcUARw3FASAEQQFqIQEMgwILAkAgASIEIAJHDQBBhwEhEAzdAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFBiM+AgABqLQAARw3FASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBhwEhEAzdAgsgAEEANgIAIBBBAWohAUEtIRAMwgELAkAgASIEIAJHDQBBiAEhEAzcAgsgAiAEayAAKAIAIgFqIRQgBCABa0EIaiEQAkADQCAELQAAIAFB0M+AgABqLQAARw3EASABQQhGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBiAEhEAzcAgsgAEEANgIAIBBBAWohAUEpIRAMwQELAkAgASIBIAJHDQBBiQEhEAzbAgtBASEQIAEtAABB3wBHDcABIAFBAWohAQyBAgsCQCABIgQgAkcNAEGKASEQDNoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRADQCAELQAAIAFBjM+AgABqLQAARw3BASABQQFGDa8CIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYoBIRAM2QILAkAgASIEIAJHDQBBiwEhEAzZAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFBjs+AgABqLQAARw3BASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBiwEhEAzZAgsgAEEANgIAIBBBAWohAUECIRAMvgELAkAgASIEIAJHDQBBjAEhEAzYAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8M+AgABqLQAARw3AASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBjAEhEAzYAgsgAEEANgIAIBBBAWohAUEfIRAMvQELAkAgASIEIAJHDQBBjQEhEAzXAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8s+AgABqLQAARw2/ASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBjQEhEAzXAgsgAEEANgIAIBBBAWohAUEJIRAMvAELAkAgASIEIAJHDQBBjgEhEAzWAgsCQAJAIAQtAABBt39qDgcAvwG/Ab8BvwG/AQG/AQsgBEEBaiEBQfgAIRAMvQILIARBAWohAUH5ACEQDLwCCwJAIAEiBCACRw0AQY8BIRAM1QILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQZHPgIAAai0AAEcNvQEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQY8BIRAM1QILIABBADYCACAQQQFqIQFBGCEQDLoBCwJAIAEiBCACRw0AQZABIRAM1AILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQZfPgIAAai0AAEcNvAEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZABIRAM1AILIABBADYCACAQQQFqIQFBFyEQDLkBCwJAIAEiBCACRw0AQZEBIRAM0wILIAIgBGsgACgCACIBaiEUIAQgAWtBBmohEAJAA0AgBC0AACABQZrPgIAAai0AAEcNuwEgAUEGRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZEBIRAM0wILIABBADYCACAQQQFqIQFBFSEQDLgBCwJAIAEiBCACRw0AQZIBIRAM0gILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQaHPgIAAai0AAEcNugEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZIBIRAM0gILIABBADYCACAQQQFqIQFBHiEQDLcBCwJAIAEiBCACRw0AQZMBIRAM0QILIAQtAABBzABHDbgBIARBAWohAUEKIRAMtgELAkAgBCACRw0AQZQBIRAM0AILAkACQCAELQAAQb9/ag4PALkBuQG5AbkBuQG5AbkBuQG5AbkBuQG5AbkBAbkBCyAEQQFqIQFB/gAhEAy3AgsgBEEBaiEBQf8AIRAMtgILAkAgBCACRw0AQZUBIRAMzwILAkACQCAELQAAQb9/ag4DALgBAbgBCyAEQQFqIQFB/QAhEAy2AgsgBEEBaiEEQYABIRAMtQILAkAgBCACRw0AQZYBIRAMzgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQafPgIAAai0AAEcNtgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZYBIRAMzgILIABBADYCACAQQQFqIQFBCyEQDLMBCwJAIAQgAkcNAEGXASEQDM0CCwJAAkACQAJAIAQtAABBU2oOIwC4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBAbgBuAG4AbgBuAECuAG4AbgBA7gBCyAEQQFqIQFB+wAhEAy2AgsgBEEBaiEBQfwAIRAMtQILIARBAWohBEGBASEQDLQCCyAEQQFqIQRBggEhEAyzAgsCQCAEIAJHDQBBmAEhEAzMAgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBqc+AgABqLQAARw20ASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmAEhEAzMAgsgAEEANgIAIBBBAWohAUEZIRAMsQELAkAgBCACRw0AQZkBIRAMywILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQa7PgIAAai0AAEcNswEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZkBIRAMywILIABBADYCACAQQQFqIQFBBiEQDLABCwJAIAQgAkcNAEGaASEQDMoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUG0z4CAAGotAABHDbIBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGaASEQDMoCCyAAQQA2AgAgEEEBaiEBQRwhEAyvAQsCQCAEIAJHDQBBmwEhEAzJAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBts+AgABqLQAARw2xASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmwEhEAzJAgsgAEEANgIAIBBBAWohAUEnIRAMrgELAkAgBCACRw0AQZwBIRAMyAILAkACQCAELQAAQax/ag4CAAGxAQsgBEEBaiEEQYYBIRAMrwILIARBAWohBEGHASEQDK4CCwJAIAQgAkcNAEGdASEQDMcCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUG4z4CAAGotAABHDa8BIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGdASEQDMcCCyAAQQA2AgAgEEEBaiEBQSYhEAysAQsCQCAEIAJHDQBBngEhEAzGAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBus+AgABqLQAARw2uASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBngEhEAzGAgsgAEEANgIAIBBBAWohAUEDIRAMqwELAkAgBCACRw0AQZ8BIRAMxQILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNrQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZ8BIRAMxQILIABBADYCACAQQQFqIQFBDCEQDKoBCwJAIAQgAkcNAEGgASEQDMQCCyACIARrIAAoAgAiAWohFCAEIAFrQQNqIRACQANAIAQtAAAgAUG8z4CAAGotAABHDawBIAFBA0YNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGgASEQDMQCCyAAQQA2AgAgEEEBaiEBQQ0hEAypAQsCQCAEIAJHDQBBoQEhEAzDAgsCQAJAIAQtAABBun9qDgsArAGsAawBrAGsAawBrAGsAawBAawBCyAEQQFqIQRBiwEhEAyqAgsgBEEBaiEEQYwBIRAMqQILAkAgBCACRw0AQaIBIRAMwgILIAQtAABB0ABHDakBIARBAWohBAzpAQsCQCAEIAJHDQBBowEhEAzBAgsCQAJAIAQtAABBt39qDgcBqgGqAaoBqgGqAQCqAQsgBEEBaiEEQY4BIRAMqAILIARBAWohAUEiIRAMpgELAkAgBCACRw0AQaQBIRAMwAILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQcDPgIAAai0AAEcNqAEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQaQBIRAMwAILIABBADYCACAQQQFqIQFBHSEQDKUBCwJAIAQgAkcNAEGlASEQDL8CCwJAAkAgBC0AAEGuf2oOAwCoAQGoAQsgBEEBaiEEQZABIRAMpgILIARBAWohAUEEIRAMpAELAkAgBCACRw0AQaYBIRAMvgILAkACQAJAAkACQCAELQAAQb9/ag4VAKoBqgGqAaoBqgGqAaoBqgGqAaoBAaoBqgECqgGqAQOqAaoBBKoBCyAEQQFqIQRBiAEhEAyoAgsgBEEBaiEEQYkBIRAMpwILIARBAWohBEGKASEQDKYCCyAEQQFqIQRBjwEhEAylAgsgBEEBaiEEQZEBIRAMpAILAkAgBCACRw0AQacBIRAMvQILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNpQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQacBIRAMvQILIABBADYCACAQQQFqIQFBESEQDKIBCwJAIAQgAkcNAEGoASEQDLwCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHCz4CAAGotAABHDaQBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGoASEQDLwCCyAAQQA2AgAgEEEBaiEBQSwhEAyhAQsCQCAEIAJHDQBBqQEhEAy7AgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBxc+AgABqLQAARw2jASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBqQEhEAy7AgsgAEEANgIAIBBBAWohAUErIRAMoAELAkAgBCACRw0AQaoBIRAMugILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQcrPgIAAai0AAEcNogEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQaoBIRAMugILIABBADYCACAQQQFqIQFBFCEQDJ8BCwJAIAQgAkcNAEGrASEQDLkCCwJAAkACQAJAIAQtAABBvn9qDg8AAQKkAaQBpAGkAaQBpAGkAaQBpAGkAaQBA6QBCyAEQQFqIQRBkwEhEAyiAgsgBEEBaiEEQZQBIRAMoQILIARBAWohBEGVASEQDKACCyAEQQFqIQRBlgEhEAyfAgsCQCAEIAJHDQBBrAEhEAy4AgsgBC0AAEHFAEcNnwEgBEEBaiEEDOABCwJAIAQgAkcNAEGtASEQDLcCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHNz4CAAGotAABHDZ8BIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGtASEQDLcCCyAAQQA2AgAgEEEBaiEBQQ4hEAycAQsCQCAEIAJHDQBBrgEhEAy2AgsgBC0AAEHQAEcNnQEgBEEBaiEBQSUhEAybAQsCQCAEIAJHDQBBrwEhEAy1AgsgAiAEayAAKAIAIgFqIRQgBCABa0EIaiEQAkADQCAELQAAIAFB0M+AgABqLQAARw2dASABQQhGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBrwEhEAy1AgsgAEEANgIAIBBBAWohAUEqIRAMmgELAkAgBCACRw0AQbABIRAMtAILAkACQCAELQAAQat/ag4LAJ0BnQGdAZ0BnQGdAZ0BnQGdAQGdAQsgBEEBaiEEQZoBIRAMmwILIARBAWohBEGbASEQDJoCCwJAIAQgAkcNAEGxASEQDLMCCwJAAkAgBC0AAEG/f2oOFACcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAEBnAELIARBAWohBEGZASEQDJoCCyAEQQFqIQRBnAEhEAyZAgsCQCAEIAJHDQBBsgEhEAyyAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFB2c+AgABqLQAARw2aASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBsgEhEAyyAgsgAEEANgIAIBBBAWohAUEhIRAMlwELAkAgBCACRw0AQbMBIRAMsQILIAIgBGsgACgCACIBaiEUIAQgAWtBBmohEAJAA0AgBC0AACABQd3PgIAAai0AAEcNmQEgAUEGRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbMBIRAMsQILIABBADYCACAQQQFqIQFBGiEQDJYBCwJAIAQgAkcNAEG0ASEQDLACCwJAAkACQCAELQAAQbt/ag4RAJoBmgGaAZoBmgGaAZoBmgGaAQGaAZoBmgGaAZoBApoBCyAEQQFqIQRBnQEhEAyYAgsgBEEBaiEEQZ4BIRAMlwILIARBAWohBEGfASEQDJYCCwJAIAQgAkcNAEG1ASEQDK8CCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUHkz4CAAGotAABHDZcBIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG1ASEQDK8CCyAAQQA2AgAgEEEBaiEBQSghEAyUAQsCQCAEIAJHDQBBtgEhEAyuAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFB6s+AgABqLQAARw2WASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBtgEhEAyuAgsgAEEANgIAIBBBAWohAUEHIRAMkwELAkAgBCACRw0AQbcBIRAMrQILAkACQCAELQAAQbt/ag4OAJYBlgGWAZYBlgGWAZYBlgGWAZYBlgGWAQGWAQsgBEEBaiEEQaEBIRAMlAILIARBAWohBEGiASEQDJMCCwJAIAQgAkcNAEG4ASEQDKwCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDZQBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG4ASEQDKwCCyAAQQA2AgAgEEEBaiEBQRIhEAyRAQsCQCAEIAJHDQBBuQEhEAyrAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8M+AgABqLQAARw2TASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBuQEhEAyrAgsgAEEANgIAIBBBAWohAUEgIRAMkAELAkAgBCACRw0AQboBIRAMqgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfLPgIAAai0AAEcNkgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQboBIRAMqgILIABBADYCACAQQQFqIQFBDyEQDI8BCwJAIAQgAkcNAEG7ASEQDKkCCwJAAkAgBC0AAEG3f2oOBwCSAZIBkgGSAZIBAZIBCyAEQQFqIQRBpQEhEAyQAgsgBEEBaiEEQaYBIRAMjwILAkAgBCACRw0AQbwBIRAMqAILIAIgBGsgACgCACIBaiEUIAQgAWtBB2ohEAJAA0AgBC0AACABQfTPgIAAai0AAEcNkAEgAUEHRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbwBIRAMqAILIABBADYCACAQQQFqIQFBGyEQDI0BCwJAIAQgAkcNAEG9ASEQDKcCCwJAAkACQCAELQAAQb5/ag4SAJEBkQGRAZEBkQGRAZEBkQGRAQGRAZEBkQGRAZEBkQECkQELIARBAWohBEGkASEQDI8CCyAEQQFqIQRBpwEhEAyOAgsgBEEBaiEEQagBIRAMjQILAkAgBCACRw0AQb4BIRAMpgILIAQtAABBzgBHDY0BIARBAWohBAzPAQsCQCAEIAJHDQBBvwEhEAylAgsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAELQAAQb9/ag4VAAECA5wBBAUGnAGcAZwBBwgJCgucAQwNDg+cAQsgBEEBaiEBQegAIRAMmgILIARBAWohAUHpACEQDJkCCyAEQQFqIQFB7gAhEAyYAgsgBEEBaiEBQfIAIRAMlwILIARBAWohAUHzACEQDJYCCyAEQQFqIQFB9gAhEAyVAgsgBEEBaiEBQfcAIRAMlAILIARBAWohAUH6ACEQDJMCCyAEQQFqIQRBgwEhEAySAgsgBEEBaiEEQYQBIRAMkQILIARBAWohBEGFASEQDJACCyAEQQFqIQRBkgEhEAyPAgsgBEEBaiEEQZgBIRAMjgILIARBAWohBEGgASEQDI0CCyAEQQFqIQRBowEhEAyMAgsgBEEBaiEEQaoBIRAMiwILAkAgBCACRg0AIABBkICAgAA2AgggACAENgIEQasBIRAMiwILQcABIRAMowILIAAgBSACEKqAgIAAIgENiwEgBSEBDFwLAkAgBiACRg0AIAZBAWohBQyNAQtBwgEhEAyhAgsDQAJAIBAtAABBdmoOBIwBAACPAQALIBBBAWoiECACRw0AC0HDASEQDKACCwJAIAcgAkYNACAAQZGAgIAANgIIIAAgBzYCBCAHIQFBASEQDIcCC0HEASEQDJ8CCwJAIAcgAkcNAEHFASEQDJ8CCwJAAkAgBy0AAEF2ag4EAc4BzgEAzgELIAdBAWohBgyNAQsgB0EBaiEFDIkBCwJAIAcgAkcNAEHGASEQDJ4CCwJAAkAgBy0AAEF2ag4XAY8BjwEBjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BAI8BCyAHQQFqIQcLQbABIRAMhAILAkAgCCACRw0AQcgBIRAMnQILIAgtAABBIEcNjQEgAEEAOwEyIAhBAWohAUGzASEQDIMCCyABIRcCQANAIBciByACRg0BIActAABBUGpB/wFxIhBBCk8NzAECQCAALwEyIhRBmTNLDQAgACAUQQpsIhQ7ATIgEEH//wNzIBRB/v8DcUkNACAHQQFqIRcgACAUIBBqIhA7ATIgEEH//wNxQegHSQ0BCwtBACEQIABBADYCHCAAQcGJgIAANgIQIABBDTYCDCAAIAdBAWo2AhQMnAILQccBIRAMmwILIAAgCCACEK6AgIAAIhBFDcoBIBBBFUcNjAEgAEHIATYCHCAAIAg2AhQgAEHJl4CAADYCECAAQRU2AgxBACEQDJoCCwJAIAkgAkcNAEHMASEQDJoCC0EAIRRBASEXQQEhFkEAIRACQAJAAkACQAJAAkACQAJAAkAgCS0AAEFQag4KlgGVAQABAgMEBQYIlwELQQIhEAwGC0EDIRAMBQtBBCEQDAQLQQUhEAwDC0EGIRAMAgtBByEQDAELQQghEAtBACEXQQAhFkEAIRQMjgELQQkhEEEBIRRBACEXQQAhFgyNAQsCQCAKIAJHDQBBzgEhEAyZAgsgCi0AAEEuRw2OASAKQQFqIQkMygELIAsgAkcNjgFB0AEhEAyXAgsCQCALIAJGDQAgAEGOgICAADYCCCAAIAs2AgRBtwEhEAz+AQtB0QEhEAyWAgsCQCAEIAJHDQBB0gEhEAyWAgsgAiAEayAAKAIAIhBqIRQgBCAQa0EEaiELA0AgBC0AACAQQfzPgIAAai0AAEcNjgEgEEEERg3pASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHSASEQDJUCCyAAIAwgAhCsgICAACIBDY0BIAwhAQy4AQsCQCAEIAJHDQBB1AEhEAyUAgsgAiAEayAAKAIAIhBqIRQgBCAQa0EBaiEMA0AgBC0AACAQQYHQgIAAai0AAEcNjwEgEEEBRg2OASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHUASEQDJMCCwJAIAQgAkcNAEHWASEQDJMCCyACIARrIAAoAgAiEGohFCAEIBBrQQJqIQsDQCAELQAAIBBBg9CAgABqLQAARw2OASAQQQJGDZABIBBBAWohECAEQQFqIgQgAkcNAAsgACAUNgIAQdYBIRAMkgILAkAgBCACRw0AQdcBIRAMkgILAkACQCAELQAAQbt/ag4QAI8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwEBjwELIARBAWohBEG7ASEQDPkBCyAEQQFqIQRBvAEhEAz4AQsCQCAEIAJHDQBB2AEhEAyRAgsgBC0AAEHIAEcNjAEgBEEBaiEEDMQBCwJAIAQgAkYNACAAQZCAgIAANgIIIAAgBDYCBEG+ASEQDPcBC0HZASEQDI8CCwJAIAQgAkcNAEHaASEQDI8CCyAELQAAQcgARg3DASAAQQE6ACgMuQELIABBAjoALyAAIAQgAhCmgICAACIQDY0BQcIBIRAM9AELIAAtAChBf2oOArcBuQG4AQsDQAJAIAQtAABBdmoOBACOAY4BAI4BCyAEQQFqIgQgAkcNAAtB3QEhEAyLAgsgAEEAOgAvIAAtAC1BBHFFDYQCCyAAQQA6AC8gAEEBOgA0IAEhAQyMAQsgEEEVRg3aASAAQQA2AhwgACABNgIUIABBp46AgAA2AhAgAEESNgIMQQAhEAyIAgsCQCAAIBAgAhC0gICAACIEDQAgECEBDIECCwJAIARBFUcNACAAQQM2AhwgACAQNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAyIAgsgAEEANgIcIAAgEDYCFCAAQaeOgIAANgIQIABBEjYCDEEAIRAMhwILIBBBFUYN1gEgAEEANgIcIAAgATYCFCAAQdqNgIAANgIQIABBFDYCDEEAIRAMhgILIAAoAgQhFyAAQQA2AgQgECARp2oiFiEBIAAgFyAQIBYgFBsiEBC1gICAACIURQ2NASAAQQc2AhwgACAQNgIUIAAgFDYCDEEAIRAMhQILIAAgAC8BMEGAAXI7ATAgASEBC0EqIRAM6gELIBBBFUYN0QEgAEEANgIcIAAgATYCFCAAQYOMgIAANgIQIABBEzYCDEEAIRAMggILIBBBFUYNzwEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAMgQILIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDI0BCyAAQQw2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAMgAILIBBBFUYNzAEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAM/wELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDIwBCyAAQQ02AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM/gELIBBBFUYNyQEgAEEANgIcIAAgATYCFCAAQcaMgIAANgIQIABBIzYCDEEAIRAM/QELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC5gICAACIQDQAgAUEBaiEBDIsBCyAAQQ42AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM/AELIABBADYCHCAAIAE2AhQgAEHAlYCAADYCECAAQQI2AgxBACEQDPsBCyAQQRVGDcUBIABBADYCHCAAIAE2AhQgAEHGjICAADYCECAAQSM2AgxBACEQDPoBCyAAQRA2AhwgACABNgIUIAAgEDYCDEEAIRAM+QELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC5gICAACIEDQAgAUEBaiEBDPEBCyAAQRE2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM+AELIBBBFUYNwQEgAEEANgIcIAAgATYCFCAAQcaMgIAANgIQIABBIzYCDEEAIRAM9wELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC5gICAACIQDQAgAUEBaiEBDIgBCyAAQRM2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM9gELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC5gICAACIEDQAgAUEBaiEBDO0BCyAAQRQ2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM9QELIBBBFUYNvQEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAM9AELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDIYBCyAAQRY2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM8wELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC3gICAACIEDQAgAUEBaiEBDOkBCyAAQRc2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM8gELIABBADYCHCAAIAE2AhQgAEHNk4CAADYCECAAQQw2AgxBACEQDPEBC0IBIRELIBBBAWohAQJAIAApAyAiEkL//////////w9WDQAgACASQgSGIBGENwMgIAEhAQyEAQsgAEEANgIcIAAgATYCFCAAQa2JgIAANgIQIABBDDYCDEEAIRAM7wELIABBADYCHCAAIBA2AhQgAEHNk4CAADYCECAAQQw2AgxBACEQDO4BCyAAKAIEIRcgAEEANgIEIBAgEadqIhYhASAAIBcgECAWIBQbIhAQtYCAgAAiFEUNcyAAQQU2AhwgACAQNgIUIAAgFDYCDEEAIRAM7QELIABBADYCHCAAIBA2AhQgAEGqnICAADYCECAAQQ82AgxBACEQDOwBCyAAIBAgAhC0gICAACIBDQEgECEBC0EOIRAM0QELAkAgAUEVRw0AIABBAjYCHCAAIBA2AhQgAEGwmICAADYCECAAQRU2AgxBACEQDOoBCyAAQQA2AhwgACAQNgIUIABBp46AgAA2AhAgAEESNgIMQQAhEAzpAQsgAUEBaiEQAkAgAC8BMCIBQYABcUUNAAJAIAAgECACELuAgIAAIgENACAQIQEMcAsgAUEVRw26ASAAQQU2AhwgACAQNgIUIABB+ZeAgAA2AhAgAEEVNgIMQQAhEAzpAQsCQCABQaAEcUGgBEcNACAALQAtQQJxDQAgAEEANgIcIAAgEDYCFCAAQZaTgIAANgIQIABBBDYCDEEAIRAM6QELIAAgECACEL2AgIAAGiAQIQECQAJAAkACQAJAIAAgECACELOAgIAADhYCAQAEBAQEBAQEBAQEBAQEBAQEBAQDBAsgAEEBOgAuCyAAIAAvATBBwAByOwEwIBAhAQtBJiEQDNEBCyAAQSM2AhwgACAQNgIUIABBpZaAgAA2AhAgAEEVNgIMQQAhEAzpAQsgAEEANgIcIAAgEDYCFCAAQdWLgIAANgIQIABBETYCDEEAIRAM6AELIAAtAC1BAXFFDQFBwwEhEAzOAQsCQCANIAJGDQADQAJAIA0tAABBIEYNACANIQEMxAELIA1BAWoiDSACRw0AC0ElIRAM5wELQSUhEAzmAQsgACgCBCEEIABBADYCBCAAIAQgDRCvgICAACIERQ2tASAAQSY2AhwgACAENgIMIAAgDUEBajYCFEEAIRAM5QELIBBBFUYNqwEgAEEANgIcIAAgATYCFCAAQf2NgIAANgIQIABBHTYCDEEAIRAM5AELIABBJzYCHCAAIAE2AhQgACAQNgIMQQAhEAzjAQsgECEBQQEhFAJAAkACQAJAAkACQAJAIAAtACxBfmoOBwYFBQMBAgAFCyAAIAAvATBBCHI7ATAMAwtBAiEUDAELQQQhFAsgAEEBOgAsIAAgAC8BMCAUcjsBMAsgECEBC0ErIRAMygELIABBADYCHCAAIBA2AhQgAEGrkoCAADYCECAAQQs2AgxBACEQDOIBCyAAQQA2AhwgACABNgIUIABB4Y+AgAA2AhAgAEEKNgIMQQAhEAzhAQsgAEEAOgAsIBAhAQy9AQsgECEBQQEhFAJAAkACQAJAAkAgAC0ALEF7ag4EAwECAAULIAAgAC8BMEEIcjsBMAwDC0ECIRQMAQtBBCEUCyAAQQE6ACwgACAALwEwIBRyOwEwCyAQIQELQSkhEAzFAQsgAEEANgIcIAAgATYCFCAAQfCUgIAANgIQIABBAzYCDEEAIRAM3QELAkAgDi0AAEENRw0AIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDkEBaiEBDHULIABBLDYCHCAAIAE2AgwgACAOQQFqNgIUQQAhEAzdAQsgAC0ALUEBcUUNAUHEASEQDMMBCwJAIA4gAkcNAEEtIRAM3AELAkACQANAAkAgDi0AAEF2ag4EAgAAAwALIA5BAWoiDiACRw0AC0EtIRAM3QELIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDiEBDHQLIABBLDYCHCAAIA42AhQgACABNgIMQQAhEAzcAQsgACgCBCEBIABBADYCBAJAIAAgASAOELGAgIAAIgENACAOQQFqIQEMcwsgAEEsNgIcIAAgATYCDCAAIA5BAWo2AhRBACEQDNsBCyAAKAIEIQQgAEEANgIEIAAgBCAOELGAgIAAIgQNoAEgDiEBDM4BCyAQQSxHDQEgAUEBaiEQQQEhAQJAAkACQAJAAkAgAC0ALEF7ag4EAwECBAALIBAhAQwEC0ECIQEMAQtBBCEBCyAAQQE6ACwgACAALwEwIAFyOwEwIBAhAQwBCyAAIAAvATBBCHI7ATAgECEBC0E5IRAMvwELIABBADoALCABIQELQTQhEAy9AQsgACAALwEwQSByOwEwIAEhAQwCCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQsYCAgAAiBA0AIAEhAQzHAQsgAEE3NgIcIAAgATYCFCAAIAQ2AgxBACEQDNQBCyAAQQg6ACwgASEBC0EwIRAMuQELAkAgAC0AKEEBRg0AIAEhAQwECyAALQAtQQhxRQ2TASABIQEMAwsgAC0AMEEgcQ2UAUHFASEQDLcBCwJAIA8gAkYNAAJAA0ACQCAPLQAAQVBqIgFB/wFxQQpJDQAgDyEBQTUhEAy6AQsgACkDICIRQpmz5syZs+bMGVYNASAAIBFCCn4iETcDICARIAGtQv8BgyISQn+FVg0BIAAgESASfDcDICAPQQFqIg8gAkcNAAtBOSEQDNEBCyAAKAIEIQIgAEEANgIEIAAgAiAPQQFqIgQQsYCAgAAiAg2VASAEIQEMwwELQTkhEAzPAQsCQCAALwEwIgFBCHFFDQAgAC0AKEEBRw0AIAAtAC1BCHFFDZABCyAAIAFB9/sDcUGABHI7ATAgDyEBC0E3IRAMtAELIAAgAC8BMEEQcjsBMAyrAQsgEEEVRg2LASAAQQA2AhwgACABNgIUIABB8I6AgAA2AhAgAEEcNgIMQQAhEAzLAQsgAEHDADYCHCAAIAE2AgwgACANQQFqNgIUQQAhEAzKAQsCQCABLQAAQTpHDQAgACgCBCEQIABBADYCBAJAIAAgECABEK+AgIAAIhANACABQQFqIQEMYwsgAEHDADYCHCAAIBA2AgwgACABQQFqNgIUQQAhEAzKAQsgAEEANgIcIAAgATYCFCAAQbGRgIAANgIQIABBCjYCDEEAIRAMyQELIABBADYCHCAAIAE2AhQgAEGgmYCAADYCECAAQR42AgxBACEQDMgBCyAAQQA2AgALIABBgBI7ASogACAXQQFqIgEgAhCogICAACIQDQEgASEBC0HHACEQDKwBCyAQQRVHDYMBIABB0QA2AhwgACABNgIUIABB45eAgAA2AhAgAEEVNgIMQQAhEAzEAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMXgsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAzDAQsgAEEANgIcIAAgFDYCFCAAQcGogIAANgIQIABBBzYCDCAAQQA2AgBBACEQDMIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxdCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDMEBC0EAIRAgAEEANgIcIAAgATYCFCAAQYCRgIAANgIQIABBCTYCDAzAAQsgEEEVRg19IABBADYCHCAAIAE2AhQgAEGUjYCAADYCECAAQSE2AgxBACEQDL8BC0EBIRZBACEXQQAhFEEBIRALIAAgEDoAKyABQQFqIQECQAJAIAAtAC1BEHENAAJAAkACQCAALQAqDgMBAAIECyAWRQ0DDAILIBQNAQwCCyAXRQ0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQrYCAgAAiEA0AIAEhAQxcCyAAQdgANgIcIAAgATYCFCAAIBA2AgxBACEQDL4BCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQrYCAgAAiBA0AIAEhAQytAQsgAEHZADYCHCAAIAE2AhQgACAENgIMQQAhEAy9AQsgACgCBCEEIABBADYCBAJAIAAgBCABEK2AgIAAIgQNACABIQEMqwELIABB2gA2AhwgACABNgIUIAAgBDYCDEEAIRAMvAELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKkBCyAAQdwANgIcIAAgATYCFCAAIAQ2AgxBACEQDLsBCwJAIAEtAABBUGoiEEH/AXFBCk8NACAAIBA6ACogAUEBaiEBQc8AIRAMogELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKcBCyAAQd4ANgIcIAAgATYCFCAAIAQ2AgxBACEQDLoBCyAAQQA2AgAgF0EBaiEBAkAgAC0AKUEjTw0AIAEhAQxZCyAAQQA2AhwgACABNgIUIABB04mAgAA2AhAgAEEINgIMQQAhEAy5AQsgAEEANgIAC0EAIRAgAEEANgIcIAAgATYCFCAAQZCzgIAANgIQIABBCDYCDAy3AQsgAEEANgIAIBdBAWohAQJAIAAtAClBIUcNACABIQEMVgsgAEEANgIcIAAgATYCFCAAQZuKgIAANgIQIABBCDYCDEEAIRAMtgELIABBADYCACAXQQFqIQECQCAALQApIhBBXWpBC08NACABIQEMVQsCQCAQQQZLDQBBASAQdEHKAHFFDQAgASEBDFULQQAhECAAQQA2AhwgACABNgIUIABB94mAgAA2AhAgAEEINgIMDLUBCyAQQRVGDXEgAEEANgIcIAAgATYCFCAAQbmNgIAANgIQIABBGjYCDEEAIRAMtAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDFQLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMswELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDE0LIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMsgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDE0LIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMsQELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDFELIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMsAELIABBADYCHCAAIAE2AhQgAEHGioCAADYCECAAQQc2AgxBACEQDK8BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxJCyAAQdIANgIcIAAgATYCFCAAIBA2AgxBACEQDK4BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxJCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDK0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDKwBCyAAQQA2AhwgACABNgIUIABB3IiAgAA2AhAgAEEHNgIMQQAhEAyrAQsgEEE/Rw0BIAFBAWohAQtBBSEQDJABC0EAIRAgAEEANgIcIAAgATYCFCAAQf2SgIAANgIQIABBBzYCDAyoAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMQgsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAynAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMQgsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAymAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMRgsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAylAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMPwsgAEHSADYCHCAAIBQ2AhQgACABNgIMQQAhEAykAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMPwsgAEHTADYCHCAAIBQ2AhQgACABNgIMQQAhEAyjAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMQwsgAEHlADYCHCAAIBQ2AhQgACABNgIMQQAhEAyiAQsgAEEANgIcIAAgFDYCFCAAQcOPgIAANgIQIABBBzYCDEEAIRAMoQELIABBADYCHCAAIAE2AhQgAEHDj4CAADYCECAAQQc2AgxBACEQDKABC0EAIRAgAEEANgIcIAAgFDYCFCAAQYycgIAANgIQIABBBzYCDAyfAQsgAEEANgIcIAAgFDYCFCAAQYycgIAANgIQIABBBzYCDEEAIRAMngELIABBADYCHCAAIBQ2AhQgAEH+kYCAADYCECAAQQc2AgxBACEQDJ0BCyAAQQA2AhwgACABNgIUIABBjpuAgAA2AhAgAEEGNgIMQQAhEAycAQsgEEEVRg1XIABBADYCHCAAIAE2AhQgAEHMjoCAADYCECAAQSA2AgxBACEQDJsBCyAAQQA2AgAgEEEBaiEBQSQhEAsgACAQOgApIAAoAgQhECAAQQA2AgQgACAQIAEQq4CAgAAiEA1UIAEhAQw+CyAAQQA2AgALQQAhECAAQQA2AhwgACAENgIUIABB8ZuAgAA2AhAgAEEGNgIMDJcBCyABQRVGDVAgAEEANgIcIAAgBTYCFCAAQfCMgIAANgIQIABBGzYCDEEAIRAMlgELIAAoAgQhBSAAQQA2AgQgACAFIBAQqYCAgAAiBQ0BIBBBAWohBQtBrQEhEAx7CyAAQcEBNgIcIAAgBTYCDCAAIBBBAWo2AhRBACEQDJMBCyAAKAIEIQYgAEEANgIEIAAgBiAQEKmAgIAAIgYNASAQQQFqIQYLQa4BIRAMeAsgAEHCATYCHCAAIAY2AgwgACAQQQFqNgIUQQAhEAyQAQsgAEEANgIcIAAgBzYCFCAAQZeLgIAANgIQIABBDTYCDEEAIRAMjwELIABBADYCHCAAIAg2AhQgAEHjkICAADYCECAAQQk2AgxBACEQDI4BCyAAQQA2AhwgACAINgIUIABBlI2AgAA2AhAgAEEhNgIMQQAhEAyNAQtBASEWQQAhF0EAIRRBASEQCyAAIBA6ACsgCUEBaiEIAkACQCAALQAtQRBxDQACQAJAAkAgAC0AKg4DAQACBAsgFkUNAwwCCyAUDQEMAgsgF0UNAQsgACgCBCEQIABBADYCBCAAIBAgCBCtgICAACIQRQ09IABByQE2AhwgACAINgIUIAAgEDYCDEEAIRAMjAELIAAoAgQhBCAAQQA2AgQgACAEIAgQrYCAgAAiBEUNdiAAQcoBNgIcIAAgCDYCFCAAIAQ2AgxBACEQDIsBCyAAKAIEIQQgAEEANgIEIAAgBCAJEK2AgIAAIgRFDXQgAEHLATYCHCAAIAk2AhQgACAENgIMQQAhEAyKAQsgACgCBCEEIABBADYCBCAAIAQgChCtgICAACIERQ1yIABBzQE2AhwgACAKNgIUIAAgBDYCDEEAIRAMiQELAkAgCy0AAEFQaiIQQf8BcUEKTw0AIAAgEDoAKiALQQFqIQpBtgEhEAxwCyAAKAIEIQQgAEEANgIEIAAgBCALEK2AgIAAIgRFDXAgAEHPATYCHCAAIAs2AhQgACAENgIMQQAhEAyIAQsgAEEANgIcIAAgBDYCFCAAQZCzgIAANgIQIABBCDYCDCAAQQA2AgBBACEQDIcBCyABQRVGDT8gAEEANgIcIAAgDDYCFCAAQcyOgIAANgIQIABBIDYCDEEAIRAMhgELIABBgQQ7ASggACgCBCEQIABCADcDACAAIBAgDEEBaiIMEKuAgIAAIhBFDTggAEHTATYCHCAAIAw2AhQgACAQNgIMQQAhEAyFAQsgAEEANgIAC0EAIRAgAEEANgIcIAAgBDYCFCAAQdibgIAANgIQIABBCDYCDAyDAQsgACgCBCEQIABCADcDACAAIBAgC0EBaiILEKuAgIAAIhANAUHGASEQDGkLIABBAjoAKAxVCyAAQdUBNgIcIAAgCzYCFCAAIBA2AgxBACEQDIABCyAQQRVGDTcgAEEANgIcIAAgBDYCFCAAQaSMgIAANgIQIABBEDYCDEEAIRAMfwsgAC0ANEEBRw00IAAgBCACELyAgIAAIhBFDTQgEEEVRw01IABB3AE2AhwgACAENgIUIABB1ZaAgAA2AhAgAEEVNgIMQQAhEAx+C0EAIRAgAEEANgIcIABBr4uAgAA2AhAgAEECNgIMIAAgFEEBajYCFAx9C0EAIRAMYwtBAiEQDGILQQ0hEAxhC0EPIRAMYAtBJSEQDF8LQRMhEAxeC0EVIRAMXQtBFiEQDFwLQRchEAxbC0EYIRAMWgtBGSEQDFkLQRohEAxYC0EbIRAMVwtBHCEQDFYLQR0hEAxVC0EfIRAMVAtBISEQDFMLQSMhEAxSC0HGACEQDFELQS4hEAxQC0EvIRAMTwtBOyEQDE4LQT0hEAxNC0HIACEQDEwLQckAIRAMSwtBywAhEAxKC0HMACEQDEkLQc4AIRAMSAtB0QAhEAxHC0HVACEQDEYLQdgAIRAMRQtB2QAhEAxEC0HbACEQDEMLQeQAIRAMQgtB5QAhEAxBC0HxACEQDEALQfQAIRAMPwtBjQEhEAw+C0GXASEQDD0LQakBIRAMPAtBrAEhEAw7C0HAASEQDDoLQbkBIRAMOQtBrwEhEAw4C0GxASEQDDcLQbIBIRAMNgtBtAEhEAw1C0G1ASEQDDQLQboBIRAMMwtBvQEhEAwyC0G/ASEQDDELQcEBIRAMMAsgAEEANgIcIAAgBDYCFCAAQemLgIAANgIQIABBHzYCDEEAIRAMSAsgAEHbATYCHCAAIAQ2AhQgAEH6loCAADYCECAAQRU2AgxBACEQDEcLIABB+AA2AhwgACAMNgIUIABBypiAgAA2AhAgAEEVNgIMQQAhEAxGCyAAQdEANgIcIAAgBTYCFCAAQbCXgIAANgIQIABBFTYCDEEAIRAMRQsgAEH5ADYCHCAAIAE2AhQgACAQNgIMQQAhEAxECyAAQfgANgIcIAAgATYCFCAAQcqYgIAANgIQIABBFTYCDEEAIRAMQwsgAEHkADYCHCAAIAE2AhQgAEHjl4CAADYCECAAQRU2AgxBACEQDEILIABB1wA2AhwgACABNgIUIABByZeAgAA2AhAgAEEVNgIMQQAhEAxBCyAAQQA2AhwgACABNgIUIABBuY2AgAA2AhAgAEEaNgIMQQAhEAxACyAAQcIANgIcIAAgATYCFCAAQeOYgIAANgIQIABBFTYCDEEAIRAMPwsgAEEANgIEIAAgDyAPELGAgIAAIgRFDQEgAEE6NgIcIAAgBDYCDCAAIA9BAWo2AhRBACEQDD4LIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCxgICAACIERQ0AIABBOzYCHCAAIAQ2AgwgACABQQFqNgIUQQAhEAw+CyABQQFqIQEMLQsgD0EBaiEBDC0LIABBADYCHCAAIA82AhQgAEHkkoCAADYCECAAQQQ2AgxBACEQDDsLIABBNjYCHCAAIAQ2AhQgACACNgIMQQAhEAw6CyAAQS42AhwgACAONgIUIAAgBDYCDEEAIRAMOQsgAEHQADYCHCAAIAE2AhQgAEGRmICAADYCECAAQRU2AgxBACEQDDgLIA1BAWohAQwsCyAAQRU2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAw2CyAAQRs2AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAw1CyAAQQ82AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAw0CyAAQQs2AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAwzCyAAQRo2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAwyCyAAQQs2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAwxCyAAQQo2AhwgACABNgIUIABB5JaAgAA2AhAgAEEVNgIMQQAhEAwwCyAAQR42AhwgACABNgIUIABB+ZeAgAA2AhAgAEEVNgIMQQAhEAwvCyAAQQA2AhwgACAQNgIUIABB2o2AgAA2AhAgAEEUNgIMQQAhEAwuCyAAQQQ2AhwgACABNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAwtCyAAQQA2AgAgC0EBaiELC0G4ASEQDBILIABBADYCACAQQQFqIQFB9QAhEAwRCyABIQECQCAALQApQQVHDQBB4wAhEAwRC0HiACEQDBALQQAhECAAQQA2AhwgAEHkkYCAADYCECAAQQc2AgwgACAUQQFqNgIUDCgLIABBADYCACAXQQFqIQFBwAAhEAwOC0EBIQELIAAgAToALCAAQQA2AgAgF0EBaiEBC0EoIRAMCwsgASEBC0E4IRAMCQsCQCABIg8gAkYNAANAAkAgDy0AAEGAvoCAAGotAAAiAUEBRg0AIAFBAkcNAyAPQQFqIQEMBAsgD0EBaiIPIAJHDQALQT4hEAwiC0E+IRAMIQsgAEEAOgAsIA8hAQwBC0ELIRAMBgtBOiEQDAULIAFBAWohAUEtIRAMBAsgACABOgAsIABBADYCACAWQQFqIQFBDCEQDAMLIABBADYCACAXQQFqIQFBCiEQDAILIABBADYCAAsgAEEAOgAsIA0hAUEJIRAMAAsLQQAhECAAQQA2AhwgACALNgIUIABBzZCAgAA2AhAgAEEJNgIMDBcLQQAhECAAQQA2AhwgACAKNgIUIABB6YqAgAA2AhAgAEEJNgIMDBYLQQAhECAAQQA2AhwgACAJNgIUIABBt5CAgAA2AhAgAEEJNgIMDBULQQAhECAAQQA2AhwgACAINgIUIABBnJGAgAA2AhAgAEEJNgIMDBQLQQAhECAAQQA2AhwgACABNgIUIABBzZCAgAA2AhAgAEEJNgIMDBMLQQAhECAAQQA2AhwgACABNgIUIABB6YqAgAA2AhAgAEEJNgIMDBILQQAhECAAQQA2AhwgACABNgIUIABBt5CAgAA2AhAgAEEJNgIMDBELQQAhECAAQQA2AhwgACABNgIUIABBnJGAgAA2AhAgAEEJNgIMDBALQQAhECAAQQA2AhwgACABNgIUIABBl5WAgAA2AhAgAEEPNgIMDA8LQQAhECAAQQA2AhwgACABNgIUIABBl5WAgAA2AhAgAEEPNgIMDA4LQQAhECAAQQA2AhwgACABNgIUIABBwJKAgAA2AhAgAEELNgIMDA0LQQAhECAAQQA2AhwgACABNgIUIABBlYmAgAA2AhAgAEELNgIMDAwLQQAhECAAQQA2AhwgACABNgIUIABB4Y+AgAA2AhAgAEEKNgIMDAsLQQAhECAAQQA2AhwgACABNgIUIABB+4+AgAA2AhAgAEEKNgIMDAoLQQAhECAAQQA2AhwgACABNgIUIABB8ZmAgAA2AhAgAEECNgIMDAkLQQAhECAAQQA2AhwgACABNgIUIABBxJSAgAA2AhAgAEECNgIMDAgLQQAhECAAQQA2AhwgACABNgIUIABB8pWAgAA2AhAgAEECNgIMDAcLIABBAjYCHCAAIAE2AhQgAEGcmoCAADYCECAAQRY2AgxBACEQDAYLQQEhEAwFC0HUACEQIAEiBCACRg0EIANBCGogACAEIAJB2MKAgABBChDFgICAACADKAIMIQQgAygCCA4DAQQCAAsQyoCAgAAACyAAQQA2AhwgAEG1moCAADYCECAAQRc2AgwgACAEQQFqNgIUQQAhEAwCCyAAQQA2AhwgACAENgIUIABBypqAgAA2AhAgAEEJNgIMQQAhEAwBCwJAIAEiBCACRw0AQSIhEAwBCyAAQYmAgIAANgIIIAAgBDYCBEEhIRALIANBEGokgICAgAAgEAuvAQECfyABKAIAIQYCQAJAIAIgA0YNACAEIAZqIQQgBiADaiACayEHIAIgBkF/cyAFaiIGaiEFA0ACQCACLQAAIAQtAABGDQBBAiEEDAMLAkAgBg0AQQAhBCAFIQIMAwsgBkF/aiEGIARBAWohBCACQQFqIgIgA0cNAAsgByEGIAMhAgsgAEEBNgIAIAEgBjYCACAAIAI2AgQPCyABQQA2AgAgACAENgIAIAAgAjYCBAsKACAAEMeAgIAAC/I2AQt/I4CAgIAAQRBrIgEkgICAgAACQEEAKAKg0ICAAA0AQQAQy4CAgABBgNSEgABrIgJB2QBJDQBBACEDAkBBACgC4NOAgAAiBA0AQQBCfzcC7NOAgABBAEKAgISAgIDAADcC5NOAgABBACABQQhqQXBxQdiq1aoFcyIENgLg04CAAEEAQQA2AvTTgIAAQQBBADYCxNOAgAALQQAgAjYCzNOAgABBAEGA1ISAADYCyNOAgABBAEGA1ISAADYCmNCAgABBACAENgKs0ICAAEEAQX82AqjQgIAAA0AgA0HE0ICAAGogA0G40ICAAGoiBDYCACAEIANBsNCAgABqIgU2AgAgA0G80ICAAGogBTYCACADQczQgIAAaiADQcDQgIAAaiIFNgIAIAUgBDYCACADQdTQgIAAaiADQcjQgIAAaiIENgIAIAQgBTYCACADQdDQgIAAaiAENgIAIANBIGoiA0GAAkcNAAtBgNSEgABBeEGA1ISAAGtBD3FBAEGA1ISAAEEIakEPcRsiA2oiBEEEaiACQUhqIgUgA2siA0EBcjYCAEEAQQAoAvDTgIAANgKk0ICAAEEAIAM2ApTQgIAAQQAgBDYCoNCAgABBgNSEgAAgBWpBODYCBAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEHsAUsNAAJAQQAoAojQgIAAIgZBECAAQRNqQXBxIABBC0kbIgJBA3YiBHYiA0EDcUUNAAJAAkAgA0EBcSAEckEBcyIFQQN0IgRBsNCAgABqIgMgBEG40ICAAGooAgAiBCgCCCICRw0AQQAgBkF+IAV3cTYCiNCAgAAMAQsgAyACNgIIIAIgAzYCDAsgBEEIaiEDIAQgBUEDdCIFQQNyNgIEIAQgBWoiBCAEKAIEQQFyNgIEDAwLIAJBACgCkNCAgAAiB00NAQJAIANFDQACQAJAIAMgBHRBAiAEdCIDQQAgA2tycSIDQQAgA2txQX9qIgMgA0EMdkEQcSIDdiIEQQV2QQhxIgUgA3IgBCAFdiIDQQJ2QQRxIgRyIAMgBHYiA0EBdkECcSIEciADIAR2IgNBAXZBAXEiBHIgAyAEdmoiBEEDdCIDQbDQgIAAaiIFIANBuNCAgABqKAIAIgMoAggiAEcNAEEAIAZBfiAEd3EiBjYCiNCAgAAMAQsgBSAANgIIIAAgBTYCDAsgAyACQQNyNgIEIAMgBEEDdCIEaiAEIAJrIgU2AgAgAyACaiIAIAVBAXI2AgQCQCAHRQ0AIAdBeHFBsNCAgABqIQJBACgCnNCAgAAhBAJAAkAgBkEBIAdBA3Z0IghxDQBBACAGIAhyNgKI0ICAACACIQgMAQsgAigCCCEICyAIIAQ2AgwgAiAENgIIIAQgAjYCDCAEIAg2AggLIANBCGohA0EAIAA2ApzQgIAAQQAgBTYCkNCAgAAMDAtBACgCjNCAgAAiCUUNASAJQQAgCWtxQX9qIgMgA0EMdkEQcSIDdiIEQQV2QQhxIgUgA3IgBCAFdiIDQQJ2QQRxIgRyIAMgBHYiA0EBdkECcSIEciADIAR2IgNBAXZBAXEiBHIgAyAEdmpBAnRBuNKAgABqKAIAIgAoAgRBeHEgAmshBCAAIQUCQANAAkAgBSgCECIDDQAgBUEUaigCACIDRQ0CCyADKAIEQXhxIAJrIgUgBCAFIARJIgUbIQQgAyAAIAUbIQAgAyEFDAALCyAAKAIYIQoCQCAAKAIMIgggAEYNACAAKAIIIgNBACgCmNCAgABJGiAIIAM2AgggAyAINgIMDAsLAkAgAEEUaiIFKAIAIgMNACAAKAIQIgNFDQMgAEEQaiEFCwNAIAUhCyADIghBFGoiBSgCACIDDQAgCEEQaiEFIAgoAhAiAw0ACyALQQA2AgAMCgtBfyECIABBv39LDQAgAEETaiIDQXBxIQJBACgCjNCAgAAiB0UNAEEAIQsCQCACQYACSQ0AQR8hCyACQf///wdLDQAgA0EIdiIDIANBgP4/akEQdkEIcSIDdCIEIARBgOAfakEQdkEEcSIEdCIFIAVBgIAPakEQdkECcSIFdEEPdiADIARyIAVyayIDQQF0IAIgA0EVanZBAXFyQRxqIQsLQQAgAmshBAJAAkACQAJAIAtBAnRBuNKAgABqKAIAIgUNAEEAIQNBACEIDAELQQAhAyACQQBBGSALQQF2ayALQR9GG3QhAEEAIQgDQAJAIAUoAgRBeHEgAmsiBiAETw0AIAYhBCAFIQggBg0AQQAhBCAFIQggBSEDDAMLIAMgBUEUaigCACIGIAYgBSAAQR12QQRxakEQaigCACIFRhsgAyAGGyEDIABBAXQhACAFDQALCwJAIAMgCHINAEEAIQhBAiALdCIDQQAgA2tyIAdxIgNFDQMgA0EAIANrcUF/aiIDIANBDHZBEHEiA3YiBUEFdkEIcSIAIANyIAUgAHYiA0ECdkEEcSIFciADIAV2IgNBAXZBAnEiBXIgAyAFdiIDQQF2QQFxIgVyIAMgBXZqQQJ0QbjSgIAAaigCACEDCyADRQ0BCwNAIAMoAgRBeHEgAmsiBiAESSEAAkAgAygCECIFDQAgA0EUaigCACEFCyAGIAQgABshBCADIAggABshCCAFIQMgBQ0ACwsgCEUNACAEQQAoApDQgIAAIAJrTw0AIAgoAhghCwJAIAgoAgwiACAIRg0AIAgoAggiA0EAKAKY0ICAAEkaIAAgAzYCCCADIAA2AgwMCQsCQCAIQRRqIgUoAgAiAw0AIAgoAhAiA0UNAyAIQRBqIQULA0AgBSEGIAMiAEEUaiIFKAIAIgMNACAAQRBqIQUgACgCECIDDQALIAZBADYCAAwICwJAQQAoApDQgIAAIgMgAkkNAEEAKAKc0ICAACEEAkACQCADIAJrIgVBEEkNACAEIAJqIgAgBUEBcjYCBEEAIAU2ApDQgIAAQQAgADYCnNCAgAAgBCADaiAFNgIAIAQgAkEDcjYCBAwBCyAEIANBA3I2AgQgBCADaiIDIAMoAgRBAXI2AgRBAEEANgKc0ICAAEEAQQA2ApDQgIAACyAEQQhqIQMMCgsCQEEAKAKU0ICAACIAIAJNDQBBACgCoNCAgAAiAyACaiIEIAAgAmsiBUEBcjYCBEEAIAU2ApTQgIAAQQAgBDYCoNCAgAAgAyACQQNyNgIEIANBCGohAwwKCwJAAkBBACgC4NOAgABFDQBBACgC6NOAgAAhBAwBC0EAQn83AuzTgIAAQQBCgICEgICAwAA3AuTTgIAAQQAgAUEMakFwcUHYqtWqBXM2AuDTgIAAQQBBADYC9NOAgABBAEEANgLE04CAAEGAgAQhBAtBACEDAkAgBCACQccAaiIHaiIGQQAgBGsiC3EiCCACSw0AQQBBMDYC+NOAgAAMCgsCQEEAKALA04CAACIDRQ0AAkBBACgCuNOAgAAiBCAIaiIFIARNDQAgBSADTQ0BC0EAIQNBAEEwNgL404CAAAwKC0EALQDE04CAAEEEcQ0EAkACQAJAQQAoAqDQgIAAIgRFDQBByNOAgAAhAwNAAkAgAygCACIFIARLDQAgBSADKAIEaiAESw0DCyADKAIIIgMNAAsLQQAQy4CAgAAiAEF/Rg0FIAghBgJAQQAoAuTTgIAAIgNBf2oiBCAAcUUNACAIIABrIAQgAGpBACADa3FqIQYLIAYgAk0NBSAGQf7///8HSw0FAkBBACgCwNOAgAAiA0UNAEEAKAK404CAACIEIAZqIgUgBE0NBiAFIANLDQYLIAYQy4CAgAAiAyAARw0BDAcLIAYgAGsgC3EiBkH+////B0sNBCAGEMuAgIAAIgAgAygCACADKAIEakYNAyAAIQMLAkAgA0F/Rg0AIAJByABqIAZNDQACQCAHIAZrQQAoAujTgIAAIgRqQQAgBGtxIgRB/v///wdNDQAgAyEADAcLAkAgBBDLgICAAEF/Rg0AIAQgBmohBiADIQAMBwtBACAGaxDLgICAABoMBAsgAyEAIANBf0cNBQwDC0EAIQgMBwtBACEADAULIABBf0cNAgtBAEEAKALE04CAAEEEcjYCxNOAgAALIAhB/v///wdLDQEgCBDLgICAACEAQQAQy4CAgAAhAyAAQX9GDQEgA0F/Rg0BIAAgA08NASADIABrIgYgAkE4ak0NAQtBAEEAKAK404CAACAGaiIDNgK404CAAAJAIANBACgCvNOAgABNDQBBACADNgK804CAAAsCQAJAAkACQEEAKAKg0ICAACIERQ0AQcjTgIAAIQMDQCAAIAMoAgAiBSADKAIEIghqRg0CIAMoAggiAw0ADAMLCwJAAkBBACgCmNCAgAAiA0UNACAAIANPDQELQQAgADYCmNCAgAALQQAhA0EAIAY2AszTgIAAQQAgADYCyNOAgABBAEF/NgKo0ICAAEEAQQAoAuDTgIAANgKs0ICAAEEAQQA2AtTTgIAAA0AgA0HE0ICAAGogA0G40ICAAGoiBDYCACAEIANBsNCAgABqIgU2AgAgA0G80ICAAGogBTYCACADQczQgIAAaiADQcDQgIAAaiIFNgIAIAUgBDYCACADQdTQgIAAaiADQcjQgIAAaiIENgIAIAQgBTYCACADQdDQgIAAaiAENgIAIANBIGoiA0GAAkcNAAsgAEF4IABrQQ9xQQAgAEEIakEPcRsiA2oiBCAGQUhqIgUgA2siA0EBcjYCBEEAQQAoAvDTgIAANgKk0ICAAEEAIAM2ApTQgIAAQQAgBDYCoNCAgAAgACAFakE4NgIEDAILIAMtAAxBCHENACAEIAVJDQAgBCAATw0AIARBeCAEa0EPcUEAIARBCGpBD3EbIgVqIgBBACgClNCAgAAgBmoiCyAFayIFQQFyNgIEIAMgCCAGajYCBEEAQQAoAvDTgIAANgKk0ICAAEEAIAU2ApTQgIAAQQAgADYCoNCAgAAgBCALakE4NgIEDAELAkAgAEEAKAKY0ICAACIITw0AQQAgADYCmNCAgAAgACEICyAAIAZqIQVByNOAgAAhAwJAAkACQAJAAkACQAJAA0AgAygCACAFRg0BIAMoAggiAw0ADAILCyADLQAMQQhxRQ0BC0HI04CAACEDA0ACQCADKAIAIgUgBEsNACAFIAMoAgRqIgUgBEsNAwsgAygCCCEDDAALCyADIAA2AgAgAyADKAIEIAZqNgIEIABBeCAAa0EPcUEAIABBCGpBD3EbaiILIAJBA3I2AgQgBUF4IAVrQQ9xQQAgBUEIakEPcRtqIgYgCyACaiICayEDAkAgBiAERw0AQQAgAjYCoNCAgABBAEEAKAKU0ICAACADaiIDNgKU0ICAACACIANBAXI2AgQMAwsCQCAGQQAoApzQgIAARw0AQQAgAjYCnNCAgABBAEEAKAKQ0ICAACADaiIDNgKQ0ICAACACIANBAXI2AgQgAiADaiADNgIADAMLAkAgBigCBCIEQQNxQQFHDQAgBEF4cSEHAkACQCAEQf8BSw0AIAYoAggiBSAEQQN2IghBA3RBsNCAgABqIgBGGgJAIAYoAgwiBCAFRw0AQQBBACgCiNCAgABBfiAId3E2AojQgIAADAILIAQgAEYaIAQgBTYCCCAFIAQ2AgwMAQsgBigCGCEJAkACQCAGKAIMIgAgBkYNACAGKAIIIgQgCEkaIAAgBDYCCCAEIAA2AgwMAQsCQCAGQRRqIgQoAgAiBQ0AIAZBEGoiBCgCACIFDQBBACEADAELA0AgBCEIIAUiAEEUaiIEKAIAIgUNACAAQRBqIQQgACgCECIFDQALIAhBADYCAAsgCUUNAAJAAkAgBiAGKAIcIgVBAnRBuNKAgABqIgQoAgBHDQAgBCAANgIAIAANAUEAQQAoAozQgIAAQX4gBXdxNgKM0ICAAAwCCyAJQRBBFCAJKAIQIAZGG2ogADYCACAARQ0BCyAAIAk2AhgCQCAGKAIQIgRFDQAgACAENgIQIAQgADYCGAsgBigCFCIERQ0AIABBFGogBDYCACAEIAA2AhgLIAcgA2ohAyAGIAdqIgYoAgQhBAsgBiAEQX5xNgIEIAIgA2ogAzYCACACIANBAXI2AgQCQCADQf8BSw0AIANBeHFBsNCAgABqIQQCQAJAQQAoAojQgIAAIgVBASADQQN2dCIDcQ0AQQAgBSADcjYCiNCAgAAgBCEDDAELIAQoAgghAwsgAyACNgIMIAQgAjYCCCACIAQ2AgwgAiADNgIIDAMLQR8hBAJAIANB////B0sNACADQQh2IgQgBEGA/j9qQRB2QQhxIgR0IgUgBUGA4B9qQRB2QQRxIgV0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAQgBXIgAHJrIgRBAXQgAyAEQRVqdkEBcXJBHGohBAsgAiAENgIcIAJCADcCECAEQQJ0QbjSgIAAaiEFAkBBACgCjNCAgAAiAEEBIAR0IghxDQAgBSACNgIAQQAgACAIcjYCjNCAgAAgAiAFNgIYIAIgAjYCCCACIAI2AgwMAwsgA0EAQRkgBEEBdmsgBEEfRht0IQQgBSgCACEAA0AgACIFKAIEQXhxIANGDQIgBEEddiEAIARBAXQhBCAFIABBBHFqQRBqIggoAgAiAA0ACyAIIAI2AgAgAiAFNgIYIAIgAjYCDCACIAI2AggMAgsgAEF4IABrQQ9xQQAgAEEIakEPcRsiA2oiCyAGQUhqIgggA2siA0EBcjYCBCAAIAhqQTg2AgQgBCAFQTcgBWtBD3FBACAFQUlqQQ9xG2pBQWoiCCAIIARBEGpJGyIIQSM2AgRBAEEAKALw04CAADYCpNCAgABBACADNgKU0ICAAEEAIAs2AqDQgIAAIAhBEGpBACkC0NOAgAA3AgAgCEEAKQLI04CAADcCCEEAIAhBCGo2AtDTgIAAQQAgBjYCzNOAgABBACAANgLI04CAAEEAQQA2AtTTgIAAIAhBJGohAwNAIANBBzYCACADQQRqIgMgBUkNAAsgCCAERg0DIAggCCgCBEF+cTYCBCAIIAggBGsiADYCACAEIABBAXI2AgQCQCAAQf8BSw0AIABBeHFBsNCAgABqIQMCQAJAQQAoAojQgIAAIgVBASAAQQN2dCIAcQ0AQQAgBSAAcjYCiNCAgAAgAyEFDAELIAMoAgghBQsgBSAENgIMIAMgBDYCCCAEIAM2AgwgBCAFNgIIDAQLQR8hAwJAIABB////B0sNACAAQQh2IgMgA0GA/j9qQRB2QQhxIgN0IgUgBUGA4B9qQRB2QQRxIgV0IgggCEGAgA9qQRB2QQJxIgh0QQ92IAMgBXIgCHJrIgNBAXQgACADQRVqdkEBcXJBHGohAwsgBCADNgIcIARCADcCECADQQJ0QbjSgIAAaiEFAkBBACgCjNCAgAAiCEEBIAN0IgZxDQAgBSAENgIAQQAgCCAGcjYCjNCAgAAgBCAFNgIYIAQgBDYCCCAEIAQ2AgwMBAsgAEEAQRkgA0EBdmsgA0EfRht0IQMgBSgCACEIA0AgCCIFKAIEQXhxIABGDQMgA0EddiEIIANBAXQhAyAFIAhBBHFqQRBqIgYoAgAiCA0ACyAGIAQ2AgAgBCAFNgIYIAQgBDYCDCAEIAQ2AggMAwsgBSgCCCIDIAI2AgwgBSACNgIIIAJBADYCGCACIAU2AgwgAiADNgIICyALQQhqIQMMBQsgBSgCCCIDIAQ2AgwgBSAENgIIIARBADYCGCAEIAU2AgwgBCADNgIIC0EAKAKU0ICAACIDIAJNDQBBACgCoNCAgAAiBCACaiIFIAMgAmsiA0EBcjYCBEEAIAM2ApTQgIAAQQAgBTYCoNCAgAAgBCACQQNyNgIEIARBCGohAwwDC0EAIQNBAEEwNgL404CAAAwCCwJAIAtFDQACQAJAIAggCCgCHCIFQQJ0QbjSgIAAaiIDKAIARw0AIAMgADYCACAADQFBACAHQX4gBXdxIgc2AozQgIAADAILIAtBEEEUIAsoAhAgCEYbaiAANgIAIABFDQELIAAgCzYCGAJAIAgoAhAiA0UNACAAIAM2AhAgAyAANgIYCyAIQRRqKAIAIgNFDQAgAEEUaiADNgIAIAMgADYCGAsCQAJAIARBD0sNACAIIAQgAmoiA0EDcjYCBCAIIANqIgMgAygCBEEBcjYCBAwBCyAIIAJqIgAgBEEBcjYCBCAIIAJBA3I2AgQgACAEaiAENgIAAkAgBEH/AUsNACAEQXhxQbDQgIAAaiEDAkACQEEAKAKI0ICAACIFQQEgBEEDdnQiBHENAEEAIAUgBHI2AojQgIAAIAMhBAwBCyADKAIIIQQLIAQgADYCDCADIAA2AgggACADNgIMIAAgBDYCCAwBC0EfIQMCQCAEQf///wdLDQAgBEEIdiIDIANBgP4/akEQdkEIcSIDdCIFIAVBgOAfakEQdkEEcSIFdCICIAJBgIAPakEQdkECcSICdEEPdiADIAVyIAJyayIDQQF0IAQgA0EVanZBAXFyQRxqIQMLIAAgAzYCHCAAQgA3AhAgA0ECdEG40oCAAGohBQJAIAdBASADdCICcQ0AIAUgADYCAEEAIAcgAnI2AozQgIAAIAAgBTYCGCAAIAA2AgggACAANgIMDAELIARBAEEZIANBAXZrIANBH0YbdCEDIAUoAgAhAgJAA0AgAiIFKAIEQXhxIARGDQEgA0EddiECIANBAXQhAyAFIAJBBHFqQRBqIgYoAgAiAg0ACyAGIAA2AgAgACAFNgIYIAAgADYCDCAAIAA2AggMAQsgBSgCCCIDIAA2AgwgBSAANgIIIABBADYCGCAAIAU2AgwgACADNgIICyAIQQhqIQMMAQsCQCAKRQ0AAkACQCAAIAAoAhwiBUECdEG40oCAAGoiAygCAEcNACADIAg2AgAgCA0BQQAgCUF+IAV3cTYCjNCAgAAMAgsgCkEQQRQgCigCECAARhtqIAg2AgAgCEUNAQsgCCAKNgIYAkAgACgCECIDRQ0AIAggAzYCECADIAg2AhgLIABBFGooAgAiA0UNACAIQRRqIAM2AgAgAyAINgIYCwJAAkAgBEEPSw0AIAAgBCACaiIDQQNyNgIEIAAgA2oiAyADKAIEQQFyNgIEDAELIAAgAmoiBSAEQQFyNgIEIAAgAkEDcjYCBCAFIARqIAQ2AgACQCAHRQ0AIAdBeHFBsNCAgABqIQJBACgCnNCAgAAhAwJAAkBBASAHQQN2dCIIIAZxDQBBACAIIAZyNgKI0ICAACACIQgMAQsgAigCCCEICyAIIAM2AgwgAiADNgIIIAMgAjYCDCADIAg2AggLQQAgBTYCnNCAgABBACAENgKQ0ICAAAsgAEEIaiEDCyABQRBqJICAgIAAIAMLCgAgABDJgICAAAviDQEHfwJAIABFDQAgAEF4aiIBIABBfGooAgAiAkF4cSIAaiEDAkAgAkEBcQ0AIAJBA3FFDQEgASABKAIAIgJrIgFBACgCmNCAgAAiBEkNASACIABqIQACQCABQQAoApzQgIAARg0AAkAgAkH/AUsNACABKAIIIgQgAkEDdiIFQQN0QbDQgIAAaiIGRhoCQCABKAIMIgIgBEcNAEEAQQAoAojQgIAAQX4gBXdxNgKI0ICAAAwDCyACIAZGGiACIAQ2AgggBCACNgIMDAILIAEoAhghBwJAAkAgASgCDCIGIAFGDQAgASgCCCICIARJGiAGIAI2AgggAiAGNgIMDAELAkAgAUEUaiICKAIAIgQNACABQRBqIgIoAgAiBA0AQQAhBgwBCwNAIAIhBSAEIgZBFGoiAigCACIEDQAgBkEQaiECIAYoAhAiBA0ACyAFQQA2AgALIAdFDQECQAJAIAEgASgCHCIEQQJ0QbjSgIAAaiICKAIARw0AIAIgBjYCACAGDQFBAEEAKAKM0ICAAEF+IAR3cTYCjNCAgAAMAwsgB0EQQRQgBygCECABRhtqIAY2AgAgBkUNAgsgBiAHNgIYAkAgASgCECICRQ0AIAYgAjYCECACIAY2AhgLIAEoAhQiAkUNASAGQRRqIAI2AgAgAiAGNgIYDAELIAMoAgQiAkEDcUEDRw0AIAMgAkF+cTYCBEEAIAA2ApDQgIAAIAEgAGogADYCACABIABBAXI2AgQPCyABIANPDQAgAygCBCICQQFxRQ0AAkACQCACQQJxDQACQCADQQAoAqDQgIAARw0AQQAgATYCoNCAgABBAEEAKAKU0ICAACAAaiIANgKU0ICAACABIABBAXI2AgQgAUEAKAKc0ICAAEcNA0EAQQA2ApDQgIAAQQBBADYCnNCAgAAPCwJAIANBACgCnNCAgABHDQBBACABNgKc0ICAAEEAQQAoApDQgIAAIABqIgA2ApDQgIAAIAEgAEEBcjYCBCABIABqIAA2AgAPCyACQXhxIABqIQACQAJAIAJB/wFLDQAgAygCCCIEIAJBA3YiBUEDdEGw0ICAAGoiBkYaAkAgAygCDCICIARHDQBBAEEAKAKI0ICAAEF+IAV3cTYCiNCAgAAMAgsgAiAGRhogAiAENgIIIAQgAjYCDAwBCyADKAIYIQcCQAJAIAMoAgwiBiADRg0AIAMoAggiAkEAKAKY0ICAAEkaIAYgAjYCCCACIAY2AgwMAQsCQCADQRRqIgIoAgAiBA0AIANBEGoiAigCACIEDQBBACEGDAELA0AgAiEFIAQiBkEUaiICKAIAIgQNACAGQRBqIQIgBigCECIEDQALIAVBADYCAAsgB0UNAAJAAkAgAyADKAIcIgRBAnRBuNKAgABqIgIoAgBHDQAgAiAGNgIAIAYNAUEAQQAoAozQgIAAQX4gBHdxNgKM0ICAAAwCCyAHQRBBFCAHKAIQIANGG2ogBjYCACAGRQ0BCyAGIAc2AhgCQCADKAIQIgJFDQAgBiACNgIQIAIgBjYCGAsgAygCFCICRQ0AIAZBFGogAjYCACACIAY2AhgLIAEgAGogADYCACABIABBAXI2AgQgAUEAKAKc0ICAAEcNAUEAIAA2ApDQgIAADwsgAyACQX5xNgIEIAEgAGogADYCACABIABBAXI2AgQLAkAgAEH/AUsNACAAQXhxQbDQgIAAaiECAkACQEEAKAKI0ICAACIEQQEgAEEDdnQiAHENAEEAIAQgAHI2AojQgIAAIAIhAAwBCyACKAIIIQALIAAgATYCDCACIAE2AgggASACNgIMIAEgADYCCA8LQR8hAgJAIABB////B0sNACAAQQh2IgIgAkGA/j9qQRB2QQhxIgJ0IgQgBEGA4B9qQRB2QQRxIgR0IgYgBkGAgA9qQRB2QQJxIgZ0QQ92IAIgBHIgBnJrIgJBAXQgACACQRVqdkEBcXJBHGohAgsgASACNgIcIAFCADcCECACQQJ0QbjSgIAAaiEEAkACQEEAKAKM0ICAACIGQQEgAnQiA3ENACAEIAE2AgBBACAGIANyNgKM0ICAACABIAQ2AhggASABNgIIIAEgATYCDAwBCyAAQQBBGSACQQF2ayACQR9GG3QhAiAEKAIAIQYCQANAIAYiBCgCBEF4cSAARg0BIAJBHXYhBiACQQF0IQIgBCAGQQRxakEQaiIDKAIAIgYNAAsgAyABNgIAIAEgBDYCGCABIAE2AgwgASABNgIIDAELIAQoAggiACABNgIMIAQgATYCCCABQQA2AhggASAENgIMIAEgADYCCAtBAEEAKAKo0ICAAEF/aiIBQX8gARs2AqjQgIAACwsEAAAAC04AAkAgAA0APwBBEHQPCwJAIABB//8DcQ0AIABBf0wNAAJAIABBEHZAACIAQX9HDQBBAEEwNgL404CAAEF/DwsgAEEQdA8LEMqAgIAAAAvyAgIDfwF+AkAgAkUNACAAIAE6AAAgAiAAaiIDQX9qIAE6AAAgAkEDSQ0AIAAgAToAAiAAIAE6AAEgA0F9aiABOgAAIANBfmogAToAACACQQdJDQAgACABOgADIANBfGogAToAACACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiATYCACADIAIgBGtBfHEiBGoiAkF8aiABNgIAIARBCUkNACADIAE2AgggAyABNgIEIAJBeGogATYCACACQXRqIAE2AgAgBEEZSQ0AIAMgATYCGCADIAE2AhQgAyABNgIQIAMgATYCDCACQXBqIAE2AgAgAkFsaiABNgIAIAJBaGogATYCACACQWRqIAE2AgAgBCADQQRxQRhyIgVrIgJBIEkNACABrUKBgICAEH4hBiADIAVqIQEDQCABIAY3AxggASAGNwMQIAEgBjcDCCABIAY3AwAgAUEgaiEBIAJBYGoiAkEfSw0ACwsgAAsLjkgBAEGACAuGSAEAAAACAAAAAwAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAYAAAAHAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==";
|
|
});
|
|
|
|
// node_modules/undici/lib/core/symbols.js
|
|
var require_symbols = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
kClose: Symbol("close"),
|
|
kDestroy: Symbol("destroy"),
|
|
kDispatch: Symbol("dispatch"),
|
|
kUrl: Symbol("url"),
|
|
kWriting: Symbol("writing"),
|
|
kResuming: Symbol("resuming"),
|
|
kQueue: Symbol("queue"),
|
|
kConnect: Symbol("connect"),
|
|
kConnecting: Symbol("connecting"),
|
|
kHeadersList: Symbol("headers list"),
|
|
kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"),
|
|
kKeepAliveMaxTimeout: Symbol("max keep alive timeout"),
|
|
kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"),
|
|
kKeepAliveTimeoutValue: Symbol("keep alive timeout"),
|
|
kKeepAlive: Symbol("keep alive"),
|
|
kHeadersTimeout: Symbol("headers timeout"),
|
|
kBodyTimeout: Symbol("body timeout"),
|
|
kServerName: Symbol("server name"),
|
|
kLocalAddress: Symbol("local address"),
|
|
kHost: Symbol("host"),
|
|
kNoRef: Symbol("no ref"),
|
|
kBodyUsed: Symbol("used"),
|
|
kRunning: Symbol("running"),
|
|
kBlocking: Symbol("blocking"),
|
|
kPending: Symbol("pending"),
|
|
kSize: Symbol("size"),
|
|
kBusy: Symbol("busy"),
|
|
kQueued: Symbol("queued"),
|
|
kFree: Symbol("free"),
|
|
kConnected: Symbol("connected"),
|
|
kClosed: Symbol("closed"),
|
|
kNeedDrain: Symbol("need drain"),
|
|
kReset: Symbol("reset"),
|
|
kDestroyed: Symbol.for("nodejs.stream.destroyed"),
|
|
kMaxHeadersSize: Symbol("max headers size"),
|
|
kRunningIdx: Symbol("running index"),
|
|
kPendingIdx: Symbol("pending index"),
|
|
kError: Symbol("error"),
|
|
kClients: Symbol("clients"),
|
|
kClient: Symbol("client"),
|
|
kParser: Symbol("parser"),
|
|
kOnDestroyed: Symbol("destroy callbacks"),
|
|
kPipelining: Symbol("pipelining"),
|
|
kSocket: Symbol("socket"),
|
|
kHostHeader: Symbol("host header"),
|
|
kConnector: Symbol("connector"),
|
|
kStrictContentLength: Symbol("strict content length"),
|
|
kMaxRedirections: Symbol("maxRedirections"),
|
|
kMaxRequests: Symbol("maxRequestsPerClient"),
|
|
kProxy: Symbol("proxy agent options"),
|
|
kCounter: Symbol("socket request counter"),
|
|
kInterceptors: Symbol("dispatch interceptors"),
|
|
kMaxResponseSize: Symbol("max response size"),
|
|
kHTTP2Session: Symbol("http2Session"),
|
|
kHTTP2SessionState: Symbol("http2Session state"),
|
|
kHTTP2BuildRequest: Symbol("http2 build request"),
|
|
kHTTP1BuildRequest: Symbol("http1 build request"),
|
|
kHTTP2CopyHeaders: Symbol("http2 copy headers"),
|
|
kHTTPConnVersion: Symbol("http connection version"),
|
|
kRetryHandlerDefaultRetry: Symbol("retry agent default retry"),
|
|
kConstruct: Symbol("constructable")
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/core/errors.js
|
|
var require_errors = __commonJS((exports, module) => {
|
|
class UndiciError extends Error {
|
|
constructor(message) {
|
|
super(message);
|
|
this.name = "UndiciError";
|
|
this.code = "UND_ERR";
|
|
}
|
|
}
|
|
|
|
class ConnectTimeoutError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, ConnectTimeoutError);
|
|
this.name = "ConnectTimeoutError";
|
|
this.message = message || "Connect Timeout Error";
|
|
this.code = "UND_ERR_CONNECT_TIMEOUT";
|
|
}
|
|
}
|
|
|
|
class HeadersTimeoutError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, HeadersTimeoutError);
|
|
this.name = "HeadersTimeoutError";
|
|
this.message = message || "Headers Timeout Error";
|
|
this.code = "UND_ERR_HEADERS_TIMEOUT";
|
|
}
|
|
}
|
|
|
|
class HeadersOverflowError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, HeadersOverflowError);
|
|
this.name = "HeadersOverflowError";
|
|
this.message = message || "Headers Overflow Error";
|
|
this.code = "UND_ERR_HEADERS_OVERFLOW";
|
|
}
|
|
}
|
|
|
|
class BodyTimeoutError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, BodyTimeoutError);
|
|
this.name = "BodyTimeoutError";
|
|
this.message = message || "Body Timeout Error";
|
|
this.code = "UND_ERR_BODY_TIMEOUT";
|
|
}
|
|
}
|
|
|
|
class ResponseStatusCodeError extends UndiciError {
|
|
constructor(message, statusCode, headers, body) {
|
|
super(message);
|
|
Error.captureStackTrace(this, ResponseStatusCodeError);
|
|
this.name = "ResponseStatusCodeError";
|
|
this.message = message || "Response Status Code Error";
|
|
this.code = "UND_ERR_RESPONSE_STATUS_CODE";
|
|
this.body = body;
|
|
this.status = statusCode;
|
|
this.statusCode = statusCode;
|
|
this.headers = headers;
|
|
}
|
|
}
|
|
|
|
class InvalidArgumentError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, InvalidArgumentError);
|
|
this.name = "InvalidArgumentError";
|
|
this.message = message || "Invalid Argument Error";
|
|
this.code = "UND_ERR_INVALID_ARG";
|
|
}
|
|
}
|
|
|
|
class InvalidReturnValueError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, InvalidReturnValueError);
|
|
this.name = "InvalidReturnValueError";
|
|
this.message = message || "Invalid Return Value Error";
|
|
this.code = "UND_ERR_INVALID_RETURN_VALUE";
|
|
}
|
|
}
|
|
|
|
class RequestAbortedError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, RequestAbortedError);
|
|
this.name = "AbortError";
|
|
this.message = message || "Request aborted";
|
|
this.code = "UND_ERR_ABORTED";
|
|
}
|
|
}
|
|
|
|
class InformationalError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, InformationalError);
|
|
this.name = "InformationalError";
|
|
this.message = message || "Request information";
|
|
this.code = "UND_ERR_INFO";
|
|
}
|
|
}
|
|
|
|
class RequestContentLengthMismatchError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, RequestContentLengthMismatchError);
|
|
this.name = "RequestContentLengthMismatchError";
|
|
this.message = message || "Request body length does not match content-length header";
|
|
this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH";
|
|
}
|
|
}
|
|
|
|
class ResponseContentLengthMismatchError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, ResponseContentLengthMismatchError);
|
|
this.name = "ResponseContentLengthMismatchError";
|
|
this.message = message || "Response body length does not match content-length header";
|
|
this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH";
|
|
}
|
|
}
|
|
|
|
class ClientDestroyedError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, ClientDestroyedError);
|
|
this.name = "ClientDestroyedError";
|
|
this.message = message || "The client is destroyed";
|
|
this.code = "UND_ERR_DESTROYED";
|
|
}
|
|
}
|
|
|
|
class ClientClosedError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, ClientClosedError);
|
|
this.name = "ClientClosedError";
|
|
this.message = message || "The client is closed";
|
|
this.code = "UND_ERR_CLOSED";
|
|
}
|
|
}
|
|
|
|
class SocketError extends UndiciError {
|
|
constructor(message, socket) {
|
|
super(message);
|
|
Error.captureStackTrace(this, SocketError);
|
|
this.name = "SocketError";
|
|
this.message = message || "Socket error";
|
|
this.code = "UND_ERR_SOCKET";
|
|
this.socket = socket;
|
|
}
|
|
}
|
|
|
|
class NotSupportedError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, NotSupportedError);
|
|
this.name = "NotSupportedError";
|
|
this.message = message || "Not supported error";
|
|
this.code = "UND_ERR_NOT_SUPPORTED";
|
|
}
|
|
}
|
|
|
|
class BalancedPoolMissingUpstreamError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, NotSupportedError);
|
|
this.name = "MissingUpstreamError";
|
|
this.message = message || "No upstream has been added to the BalancedPool";
|
|
this.code = "UND_ERR_BPL_MISSING_UPSTREAM";
|
|
}
|
|
}
|
|
|
|
class HTTPParserError extends Error {
|
|
constructor(message, code, data) {
|
|
super(message);
|
|
Error.captureStackTrace(this, HTTPParserError);
|
|
this.name = "HTTPParserError";
|
|
this.code = code ? `HPE_${code}` : undefined;
|
|
this.data = data ? data.toString() : undefined;
|
|
}
|
|
}
|
|
|
|
class ResponseExceededMaxSizeError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, ResponseExceededMaxSizeError);
|
|
this.name = "ResponseExceededMaxSizeError";
|
|
this.message = message || "Response content exceeded max size";
|
|
this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE";
|
|
}
|
|
}
|
|
|
|
class RequestRetryError extends UndiciError {
|
|
constructor(message, code, { headers, data }) {
|
|
super(message);
|
|
Error.captureStackTrace(this, RequestRetryError);
|
|
this.name = "RequestRetryError";
|
|
this.message = message || "Request retry error";
|
|
this.code = "UND_ERR_REQ_RETRY";
|
|
this.statusCode = code;
|
|
this.data = data;
|
|
this.headers = headers;
|
|
}
|
|
}
|
|
module.exports = {
|
|
HTTPParserError,
|
|
UndiciError,
|
|
HeadersTimeoutError,
|
|
HeadersOverflowError,
|
|
BodyTimeoutError,
|
|
RequestContentLengthMismatchError,
|
|
ConnectTimeoutError,
|
|
ResponseStatusCodeError,
|
|
InvalidArgumentError,
|
|
InvalidReturnValueError,
|
|
RequestAbortedError,
|
|
ClientDestroyedError,
|
|
ClientClosedError,
|
|
InformationalError,
|
|
SocketError,
|
|
NotSupportedError,
|
|
ResponseContentLengthMismatchError,
|
|
BalancedPoolMissingUpstreamError,
|
|
ResponseExceededMaxSizeError,
|
|
RequestRetryError
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/core/constants.js
|
|
var require_constants = __commonJS((exports, module) => {
|
|
var headerNameLowerCasedRecord = {};
|
|
var wellknownHeaderNames = [
|
|
"Accept",
|
|
"Accept-Encoding",
|
|
"Accept-Language",
|
|
"Accept-Ranges",
|
|
"Access-Control-Allow-Credentials",
|
|
"Access-Control-Allow-Headers",
|
|
"Access-Control-Allow-Methods",
|
|
"Access-Control-Allow-Origin",
|
|
"Access-Control-Expose-Headers",
|
|
"Access-Control-Max-Age",
|
|
"Access-Control-Request-Headers",
|
|
"Access-Control-Request-Method",
|
|
"Age",
|
|
"Allow",
|
|
"Alt-Svc",
|
|
"Alt-Used",
|
|
"Authorization",
|
|
"Cache-Control",
|
|
"Clear-Site-Data",
|
|
"Connection",
|
|
"Content-Disposition",
|
|
"Content-Encoding",
|
|
"Content-Language",
|
|
"Content-Length",
|
|
"Content-Location",
|
|
"Content-Range",
|
|
"Content-Security-Policy",
|
|
"Content-Security-Policy-Report-Only",
|
|
"Content-Type",
|
|
"Cookie",
|
|
"Cross-Origin-Embedder-Policy",
|
|
"Cross-Origin-Opener-Policy",
|
|
"Cross-Origin-Resource-Policy",
|
|
"Date",
|
|
"Device-Memory",
|
|
"Downlink",
|
|
"ECT",
|
|
"ETag",
|
|
"Expect",
|
|
"Expect-CT",
|
|
"Expires",
|
|
"Forwarded",
|
|
"From",
|
|
"Host",
|
|
"If-Match",
|
|
"If-Modified-Since",
|
|
"If-None-Match",
|
|
"If-Range",
|
|
"If-Unmodified-Since",
|
|
"Keep-Alive",
|
|
"Last-Modified",
|
|
"Link",
|
|
"Location",
|
|
"Max-Forwards",
|
|
"Origin",
|
|
"Permissions-Policy",
|
|
"Pragma",
|
|
"Proxy-Authenticate",
|
|
"Proxy-Authorization",
|
|
"RTT",
|
|
"Range",
|
|
"Referer",
|
|
"Referrer-Policy",
|
|
"Refresh",
|
|
"Retry-After",
|
|
"Sec-WebSocket-Accept",
|
|
"Sec-WebSocket-Extensions",
|
|
"Sec-WebSocket-Key",
|
|
"Sec-WebSocket-Protocol",
|
|
"Sec-WebSocket-Version",
|
|
"Server",
|
|
"Server-Timing",
|
|
"Service-Worker-Allowed",
|
|
"Service-Worker-Navigation-Preload",
|
|
"Set-Cookie",
|
|
"SourceMap",
|
|
"Strict-Transport-Security",
|
|
"Supports-Loading-Mode",
|
|
"TE",
|
|
"Timing-Allow-Origin",
|
|
"Trailer",
|
|
"Transfer-Encoding",
|
|
"Upgrade",
|
|
"Upgrade-Insecure-Requests",
|
|
"User-Agent",
|
|
"Vary",
|
|
"Via",
|
|
"WWW-Authenticate",
|
|
"X-Content-Type-Options",
|
|
"X-DNS-Prefetch-Control",
|
|
"X-Frame-Options",
|
|
"X-Permitted-Cross-Domain-Policies",
|
|
"X-Powered-By",
|
|
"X-Requested-With",
|
|
"X-XSS-Protection"
|
|
];
|
|
for (let i = 0;i < wellknownHeaderNames.length; ++i) {
|
|
const key = wellknownHeaderNames[i];
|
|
const lowerCasedKey = key.toLowerCase();
|
|
headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey;
|
|
}
|
|
Object.setPrototypeOf(headerNameLowerCasedRecord, null);
|
|
module.exports = {
|
|
wellknownHeaderNames,
|
|
headerNameLowerCasedRecord
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/core/util.js
|
|
var require_util = __commonJS((exports, module) => {
|
|
var nop = function() {
|
|
};
|
|
var isStream = function(obj) {
|
|
return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function";
|
|
};
|
|
var isBlobLike = function(object) {
|
|
return Blob2 && object instanceof Blob2 || object && typeof object === "object" && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && /^(Blob|File)$/.test(object[Symbol.toStringTag]);
|
|
};
|
|
var buildURL = function(url, queryParams) {
|
|
if (url.includes("?") || url.includes("#")) {
|
|
throw new Error('Query params cannot be passed when url already contains "?" or "#".');
|
|
}
|
|
const stringified = stringify(queryParams);
|
|
if (stringified) {
|
|
url += "?" + stringified;
|
|
}
|
|
return url;
|
|
};
|
|
var parseURL = function(url) {
|
|
if (typeof url === "string") {
|
|
url = new URL(url);
|
|
if (!/^https?:/.test(url.origin || url.protocol)) {
|
|
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
|
|
}
|
|
return url;
|
|
}
|
|
if (!url || typeof url !== "object") {
|
|
throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object.");
|
|
}
|
|
if (!/^https?:/.test(url.origin || url.protocol)) {
|
|
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
|
|
}
|
|
if (!(url instanceof URL)) {
|
|
if (url.port != null && url.port !== "" && !Number.isFinite(parseInt(url.port))) {
|
|
throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer.");
|
|
}
|
|
if (url.path != null && typeof url.path !== "string") {
|
|
throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined.");
|
|
}
|
|
if (url.pathname != null && typeof url.pathname !== "string") {
|
|
throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined.");
|
|
}
|
|
if (url.hostname != null && typeof url.hostname !== "string") {
|
|
throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined.");
|
|
}
|
|
if (url.origin != null && typeof url.origin !== "string") {
|
|
throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined.");
|
|
}
|
|
const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80;
|
|
let origin = url.origin != null ? url.origin : `${url.protocol}//${url.hostname}:${port}`;
|
|
let path = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`;
|
|
if (origin.endsWith("/")) {
|
|
origin = origin.substring(0, origin.length - 1);
|
|
}
|
|
if (path && !path.startsWith("/")) {
|
|
path = `/${path}`;
|
|
}
|
|
url = new URL(origin + path);
|
|
}
|
|
return url;
|
|
};
|
|
var parseOrigin = function(url) {
|
|
url = parseURL(url);
|
|
if (url.pathname !== "/" || url.search || url.hash) {
|
|
throw new InvalidArgumentError("invalid url");
|
|
}
|
|
return url;
|
|
};
|
|
var getHostname = function(host) {
|
|
if (host[0] === "[") {
|
|
const idx2 = host.indexOf("]");
|
|
assert(idx2 !== -1);
|
|
return host.substring(1, idx2);
|
|
}
|
|
const idx = host.indexOf(":");
|
|
if (idx === -1)
|
|
return host;
|
|
return host.substring(0, idx);
|
|
};
|
|
var getServerName = function(host) {
|
|
if (!host) {
|
|
return null;
|
|
}
|
|
assert.strictEqual(typeof host, "string");
|
|
const servername = getHostname(host);
|
|
if (net.isIP(servername)) {
|
|
return "";
|
|
}
|
|
return servername;
|
|
};
|
|
var deepClone = function(obj) {
|
|
return JSON.parse(JSON.stringify(obj));
|
|
};
|
|
var isAsyncIterable = function(obj) {
|
|
return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function");
|
|
};
|
|
var isIterable = function(obj) {
|
|
return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function"));
|
|
};
|
|
var bodyLength = function(body) {
|
|
if (body == null) {
|
|
return 0;
|
|
} else if (isStream(body)) {
|
|
const state = body._readableState;
|
|
return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null;
|
|
} else if (isBlobLike(body)) {
|
|
return body.size != null ? body.size : null;
|
|
} else if (isBuffer(body)) {
|
|
return body.byteLength;
|
|
}
|
|
return null;
|
|
};
|
|
var isDestroyed = function(stream2) {
|
|
return !stream2 || !!(stream2.destroyed || stream2[kDestroyed]);
|
|
};
|
|
var isReadableAborted = function(stream2) {
|
|
const state = stream2 && stream2._readableState;
|
|
return isDestroyed(stream2) && state && !state.endEmitted;
|
|
};
|
|
var destroy = function(stream2, err) {
|
|
if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) {
|
|
return;
|
|
}
|
|
if (typeof stream2.destroy === "function") {
|
|
if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) {
|
|
stream2.socket = null;
|
|
}
|
|
stream2.destroy(err);
|
|
} else if (err) {
|
|
process.nextTick((stream3, err2) => {
|
|
stream3.emit("error", err2);
|
|
}, stream2, err);
|
|
}
|
|
if (stream2.destroyed !== true) {
|
|
stream2[kDestroyed] = true;
|
|
}
|
|
};
|
|
var parseKeepAliveTimeout = function(val) {
|
|
const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR);
|
|
return m ? parseInt(m[1], 10) * 1000 : null;
|
|
};
|
|
var headerNameToString = function(value) {
|
|
return headerNameLowerCasedRecord[value] || value.toLowerCase();
|
|
};
|
|
var parseHeaders = function(headers, obj = {}) {
|
|
if (!Array.isArray(headers))
|
|
return headers;
|
|
for (let i = 0;i < headers.length; i += 2) {
|
|
const key = headers[i].toString().toLowerCase();
|
|
let val = obj[key];
|
|
if (!val) {
|
|
if (Array.isArray(headers[i + 1])) {
|
|
obj[key] = headers[i + 1].map((x) => x.toString("utf8"));
|
|
} else {
|
|
obj[key] = headers[i + 1].toString("utf8");
|
|
}
|
|
} else {
|
|
if (!Array.isArray(val)) {
|
|
val = [val];
|
|
obj[key] = val;
|
|
}
|
|
val.push(headers[i + 1].toString("utf8"));
|
|
}
|
|
}
|
|
if ("content-length" in obj && "content-disposition" in obj) {
|
|
obj["content-disposition"] = Buffer.from(obj["content-disposition"]).toString("latin1");
|
|
}
|
|
return obj;
|
|
};
|
|
var parseRawHeaders = function(headers) {
|
|
const ret = [];
|
|
let hasContentLength = false;
|
|
let contentDispositionIdx = -1;
|
|
for (let n = 0;n < headers.length; n += 2) {
|
|
const key = headers[n + 0].toString();
|
|
const val = headers[n + 1].toString("utf8");
|
|
if (key.length === 14 && (key === "content-length" || key.toLowerCase() === "content-length")) {
|
|
ret.push(key, val);
|
|
hasContentLength = true;
|
|
} else if (key.length === 19 && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) {
|
|
contentDispositionIdx = ret.push(key, val) - 1;
|
|
} else {
|
|
ret.push(key, val);
|
|
}
|
|
}
|
|
if (hasContentLength && contentDispositionIdx !== -1) {
|
|
ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1");
|
|
}
|
|
return ret;
|
|
};
|
|
var isBuffer = function(buffer) {
|
|
return buffer instanceof Uint8Array || Buffer.isBuffer(buffer);
|
|
};
|
|
var validateHandler = function(handler, method, upgrade) {
|
|
if (!handler || typeof handler !== "object") {
|
|
throw new InvalidArgumentError("handler must be an object");
|
|
}
|
|
if (typeof handler.onConnect !== "function") {
|
|
throw new InvalidArgumentError("invalid onConnect method");
|
|
}
|
|
if (typeof handler.onError !== "function") {
|
|
throw new InvalidArgumentError("invalid onError method");
|
|
}
|
|
if (typeof handler.onBodySent !== "function" && handler.onBodySent !== undefined) {
|
|
throw new InvalidArgumentError("invalid onBodySent method");
|
|
}
|
|
if (upgrade || method === "CONNECT") {
|
|
if (typeof handler.onUpgrade !== "function") {
|
|
throw new InvalidArgumentError("invalid onUpgrade method");
|
|
}
|
|
} else {
|
|
if (typeof handler.onHeaders !== "function") {
|
|
throw new InvalidArgumentError("invalid onHeaders method");
|
|
}
|
|
if (typeof handler.onData !== "function") {
|
|
throw new InvalidArgumentError("invalid onData method");
|
|
}
|
|
if (typeof handler.onComplete !== "function") {
|
|
throw new InvalidArgumentError("invalid onComplete method");
|
|
}
|
|
}
|
|
};
|
|
var isDisturbed = function(body) {
|
|
return !!(body && (stream.isDisturbed ? stream.isDisturbed(body) || body[kBodyUsed] : body[kBodyUsed] || body.readableDidRead || body._readableState && body._readableState.dataEmitted || isReadableAborted(body)));
|
|
};
|
|
var isErrored = function(body) {
|
|
return !!(body && (stream.isErrored ? stream.isErrored(body) : /state: 'errored'/.test(nodeUtil.inspect(body))));
|
|
};
|
|
var isReadable = function(body) {
|
|
return !!(body && (stream.isReadable ? stream.isReadable(body) : /state: 'readable'/.test(nodeUtil.inspect(body))));
|
|
};
|
|
var getSocketInfo = function(socket) {
|
|
return {
|
|
localAddress: socket.localAddress,
|
|
localPort: socket.localPort,
|
|
remoteAddress: socket.remoteAddress,
|
|
remotePort: socket.remotePort,
|
|
remoteFamily: socket.remoteFamily,
|
|
timeout: socket.timeout,
|
|
bytesWritten: socket.bytesWritten,
|
|
bytesRead: socket.bytesRead
|
|
};
|
|
};
|
|
async function* convertIterableToBuffer(iterable) {
|
|
for await (const chunk of iterable) {
|
|
yield Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
}
|
|
}
|
|
var ReadableStreamFrom = function(iterable) {
|
|
if (!ReadableStream2) {
|
|
ReadableStream2 = __require("stream/web").ReadableStream;
|
|
}
|
|
if (ReadableStream2.from) {
|
|
return ReadableStream2.from(convertIterableToBuffer(iterable));
|
|
}
|
|
let iterator;
|
|
return new ReadableStream2({
|
|
async start() {
|
|
iterator = iterable[Symbol.asyncIterator]();
|
|
},
|
|
async pull(controller) {
|
|
const { done, value } = await iterator.next();
|
|
if (done) {
|
|
queueMicrotask(() => {
|
|
controller.close();
|
|
});
|
|
} else {
|
|
const buf = Buffer.isBuffer(value) ? value : Buffer.from(value);
|
|
controller.enqueue(new Uint8Array(buf));
|
|
}
|
|
return controller.desiredSize > 0;
|
|
},
|
|
async cancel(reason) {
|
|
await iterator.return();
|
|
}
|
|
}, 0);
|
|
};
|
|
var isFormDataLike = function(object) {
|
|
return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData";
|
|
};
|
|
var throwIfAborted = function(signal) {
|
|
if (!signal) {
|
|
return;
|
|
}
|
|
if (typeof signal.throwIfAborted === "function") {
|
|
signal.throwIfAborted();
|
|
} else {
|
|
if (signal.aborted) {
|
|
const err = new Error("The operation was aborted");
|
|
err.name = "AbortError";
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
var addAbortListener = function(signal, listener) {
|
|
if ("addEventListener" in signal) {
|
|
signal.addEventListener("abort", listener, { once: true });
|
|
return () => signal.removeEventListener("abort", listener);
|
|
}
|
|
signal.addListener("abort", listener);
|
|
return () => signal.removeListener("abort", listener);
|
|
};
|
|
var toUSVString = function(val) {
|
|
if (hasToWellFormed) {
|
|
return `${val}`.toWellFormed();
|
|
} else if (nodeUtil.toUSVString) {
|
|
return nodeUtil.toUSVString(val);
|
|
}
|
|
return `${val}`;
|
|
};
|
|
var parseRangeHeader = function(range) {
|
|
if (range == null || range === "")
|
|
return { start: 0, end: null, size: null };
|
|
const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null;
|
|
return m ? {
|
|
start: parseInt(m[1]),
|
|
end: m[2] ? parseInt(m[2]) : null,
|
|
size: m[3] ? parseInt(m[3]) : null
|
|
} : null;
|
|
};
|
|
var assert = __require("assert");
|
|
var { kDestroyed, kBodyUsed } = require_symbols();
|
|
var { IncomingMessage } = __require("http");
|
|
var stream = __require("stream");
|
|
var net = __require("net");
|
|
var { InvalidArgumentError } = require_errors();
|
|
var { Blob: Blob2 } = __require("buffer");
|
|
var nodeUtil = __require("util");
|
|
var { stringify } = __require("querystring");
|
|
var { headerNameLowerCasedRecord } = require_constants();
|
|
var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v));
|
|
var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/;
|
|
var ReadableStream2;
|
|
var hasToWellFormed = !!String.prototype.toWellFormed;
|
|
var kEnumerableProperty = Object.create(null);
|
|
kEnumerableProperty.enumerable = true;
|
|
module.exports = {
|
|
kEnumerableProperty,
|
|
nop,
|
|
isDisturbed,
|
|
isErrored,
|
|
isReadable,
|
|
toUSVString,
|
|
isReadableAborted,
|
|
isBlobLike,
|
|
parseOrigin,
|
|
parseURL,
|
|
getServerName,
|
|
isStream,
|
|
isIterable,
|
|
isAsyncIterable,
|
|
isDestroyed,
|
|
headerNameToString,
|
|
parseRawHeaders,
|
|
parseHeaders,
|
|
parseKeepAliveTimeout,
|
|
destroy,
|
|
bodyLength,
|
|
deepClone,
|
|
ReadableStreamFrom,
|
|
isBuffer,
|
|
validateHandler,
|
|
getSocketInfo,
|
|
isFormDataLike,
|
|
buildURL,
|
|
throwIfAborted,
|
|
addAbortListener,
|
|
parseRangeHeader,
|
|
nodeMajor,
|
|
nodeMinor,
|
|
nodeHasAutoSelectFamily: nodeMajor > 18 || nodeMajor === 18 && nodeMinor >= 13,
|
|
safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"]
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/timers.js
|
|
var require_timers = __commonJS((exports, module) => {
|
|
var onTimeout = function() {
|
|
fastNow = Date.now();
|
|
let len = fastTimers.length;
|
|
let idx = 0;
|
|
while (idx < len) {
|
|
const timer = fastTimers[idx];
|
|
if (timer.state === 0) {
|
|
timer.state = fastNow + timer.delay;
|
|
} else if (timer.state > 0 && fastNow >= timer.state) {
|
|
timer.state = -1;
|
|
timer.callback(timer.opaque);
|
|
}
|
|
if (timer.state === -1) {
|
|
timer.state = -2;
|
|
if (idx !== len - 1) {
|
|
fastTimers[idx] = fastTimers.pop();
|
|
} else {
|
|
fastTimers.pop();
|
|
}
|
|
len -= 1;
|
|
} else {
|
|
idx += 1;
|
|
}
|
|
}
|
|
if (fastTimers.length > 0) {
|
|
refreshTimeout();
|
|
}
|
|
};
|
|
var refreshTimeout = function() {
|
|
if (fastNowTimeout && fastNowTimeout.refresh) {
|
|
fastNowTimeout.refresh();
|
|
} else {
|
|
clearTimeout(fastNowTimeout);
|
|
fastNowTimeout = setTimeout(onTimeout, 1000);
|
|
if (fastNowTimeout.unref) {
|
|
fastNowTimeout.unref();
|
|
}
|
|
}
|
|
};
|
|
var fastNow = Date.now();
|
|
var fastNowTimeout;
|
|
var fastTimers = [];
|
|
|
|
class Timeout {
|
|
constructor(callback, delay, opaque) {
|
|
this.callback = callback;
|
|
this.delay = delay;
|
|
this.opaque = opaque;
|
|
this.state = -2;
|
|
this.refresh();
|
|
}
|
|
refresh() {
|
|
if (this.state === -2) {
|
|
fastTimers.push(this);
|
|
if (!fastNowTimeout || fastTimers.length === 1) {
|
|
refreshTimeout();
|
|
}
|
|
}
|
|
this.state = 0;
|
|
}
|
|
clear() {
|
|
this.state = -1;
|
|
}
|
|
}
|
|
module.exports = {
|
|
setTimeout(callback, delay, opaque) {
|
|
return delay < 1000 ? setTimeout(callback, delay, opaque) : new Timeout(callback, delay, opaque);
|
|
},
|
|
clearTimeout(timeout) {
|
|
if (timeout instanceof Timeout) {
|
|
timeout.clear();
|
|
} else {
|
|
clearTimeout(timeout);
|
|
}
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/deps/streamsearch/sbmh.js
|
|
var require_sbmh = __commonJS((exports, module) => {
|
|
var SBMH = function(needle) {
|
|
if (typeof needle === "string") {
|
|
needle = Buffer.from(needle);
|
|
}
|
|
if (!Buffer.isBuffer(needle)) {
|
|
throw new TypeError("The needle has to be a String or a Buffer.");
|
|
}
|
|
const needleLength = needle.length;
|
|
if (needleLength === 0) {
|
|
throw new Error("The needle cannot be an empty String/Buffer.");
|
|
}
|
|
if (needleLength > 256) {
|
|
throw new Error("The needle cannot have a length bigger than 256.");
|
|
}
|
|
this.maxMatches = Infinity;
|
|
this.matches = 0;
|
|
this._occ = new Array(256).fill(needleLength);
|
|
this._lookbehind_size = 0;
|
|
this._needle = needle;
|
|
this._bufpos = 0;
|
|
this._lookbehind = Buffer.alloc(needleLength);
|
|
for (var i = 0;i < needleLength - 1; ++i) {
|
|
this._occ[needle[i]] = needleLength - 1 - i;
|
|
}
|
|
};
|
|
var EventEmitter = __require("node:events").EventEmitter;
|
|
var inherits = __require("node:util").inherits;
|
|
inherits(SBMH, EventEmitter);
|
|
SBMH.prototype.reset = function() {
|
|
this._lookbehind_size = 0;
|
|
this.matches = 0;
|
|
this._bufpos = 0;
|
|
};
|
|
SBMH.prototype.push = function(chunk, pos) {
|
|
if (!Buffer.isBuffer(chunk)) {
|
|
chunk = Buffer.from(chunk, "binary");
|
|
}
|
|
const chlen = chunk.length;
|
|
this._bufpos = pos || 0;
|
|
let r;
|
|
while (r !== chlen && this.matches < this.maxMatches) {
|
|
r = this._sbmh_feed(chunk);
|
|
}
|
|
return r;
|
|
};
|
|
SBMH.prototype._sbmh_feed = function(data) {
|
|
const len = data.length;
|
|
const needle = this._needle;
|
|
const needleLength = needle.length;
|
|
const lastNeedleChar = needle[needleLength - 1];
|
|
let pos = -this._lookbehind_size;
|
|
let ch;
|
|
if (pos < 0) {
|
|
while (pos < 0 && pos <= len - needleLength) {
|
|
ch = this._sbmh_lookup_char(data, pos + needleLength - 1);
|
|
if (ch === lastNeedleChar && this._sbmh_memcmp(data, pos, needleLength - 1)) {
|
|
this._lookbehind_size = 0;
|
|
++this.matches;
|
|
this.emit("info", true);
|
|
return this._bufpos = pos + needleLength;
|
|
}
|
|
pos += this._occ[ch];
|
|
}
|
|
if (pos < 0) {
|
|
while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) {
|
|
++pos;
|
|
}
|
|
}
|
|
if (pos >= 0) {
|
|
this.emit("info", false, this._lookbehind, 0, this._lookbehind_size);
|
|
this._lookbehind_size = 0;
|
|
} else {
|
|
const bytesToCutOff = this._lookbehind_size + pos;
|
|
if (bytesToCutOff > 0) {
|
|
this.emit("info", false, this._lookbehind, 0, bytesToCutOff);
|
|
}
|
|
this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, this._lookbehind_size - bytesToCutOff);
|
|
this._lookbehind_size -= bytesToCutOff;
|
|
data.copy(this._lookbehind, this._lookbehind_size);
|
|
this._lookbehind_size += len;
|
|
this._bufpos = len;
|
|
return len;
|
|
}
|
|
}
|
|
pos += (pos >= 0) * this._bufpos;
|
|
if (data.indexOf(needle, pos) !== -1) {
|
|
pos = data.indexOf(needle, pos);
|
|
++this.matches;
|
|
if (pos > 0) {
|
|
this.emit("info", true, data, this._bufpos, pos);
|
|
} else {
|
|
this.emit("info", true);
|
|
}
|
|
return this._bufpos = pos + needleLength;
|
|
} else {
|
|
pos = len - needleLength;
|
|
}
|
|
while (pos < len && (data[pos] !== needle[0] || Buffer.compare(data.subarray(pos, pos + len - pos), needle.subarray(0, len - pos)) !== 0)) {
|
|
++pos;
|
|
}
|
|
if (pos < len) {
|
|
data.copy(this._lookbehind, 0, pos, pos + (len - pos));
|
|
this._lookbehind_size = len - pos;
|
|
}
|
|
if (pos > 0) {
|
|
this.emit("info", false, data, this._bufpos, pos < len ? pos : len);
|
|
}
|
|
this._bufpos = len;
|
|
return len;
|
|
};
|
|
SBMH.prototype._sbmh_lookup_char = function(data, pos) {
|
|
return pos < 0 ? this._lookbehind[this._lookbehind_size + pos] : data[pos];
|
|
};
|
|
SBMH.prototype._sbmh_memcmp = function(data, pos, len) {
|
|
for (var i = 0;i < len; ++i) {
|
|
if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
module.exports = SBMH;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/deps/dicer/lib/PartStream.js
|
|
var require_PartStream = __commonJS((exports, module) => {
|
|
var PartStream = function(opts) {
|
|
ReadableStream2.call(this, opts);
|
|
};
|
|
var inherits = __require("node:util").inherits;
|
|
var ReadableStream2 = __require("node:stream").Readable;
|
|
inherits(PartStream, ReadableStream2);
|
|
PartStream.prototype._read = function(n) {
|
|
};
|
|
module.exports = PartStream;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/utils/getLimit.js
|
|
var require_getLimit = __commonJS((exports, module) => {
|
|
module.exports = function getLimit(limits, name, defaultLimit) {
|
|
if (!limits || limits[name] === undefined || limits[name] === null) {
|
|
return defaultLimit;
|
|
}
|
|
if (typeof limits[name] !== "number" || isNaN(limits[name])) {
|
|
throw new TypeError("Limit " + name + " is not a valid number");
|
|
}
|
|
return limits[name];
|
|
};
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/deps/dicer/lib/HeaderParser.js
|
|
var require_HeaderParser = __commonJS((exports, module) => {
|
|
var HeaderParser = function(cfg) {
|
|
EventEmitter.call(this);
|
|
cfg = cfg || {};
|
|
const self2 = this;
|
|
this.nread = 0;
|
|
this.maxed = false;
|
|
this.npairs = 0;
|
|
this.maxHeaderPairs = getLimit(cfg, "maxHeaderPairs", 2000);
|
|
this.maxHeaderSize = getLimit(cfg, "maxHeaderSize", 80 * 1024);
|
|
this.buffer = "";
|
|
this.header = {};
|
|
this.finished = false;
|
|
this.ss = new StreamSearch(B_DCRLF);
|
|
this.ss.on("info", function(isMatch, data, start, end) {
|
|
if (data && !self2.maxed) {
|
|
if (self2.nread + end - start >= self2.maxHeaderSize) {
|
|
end = self2.maxHeaderSize - self2.nread + start;
|
|
self2.nread = self2.maxHeaderSize;
|
|
self2.maxed = true;
|
|
} else {
|
|
self2.nread += end - start;
|
|
}
|
|
self2.buffer += data.toString("binary", start, end);
|
|
}
|
|
if (isMatch) {
|
|
self2._finish();
|
|
}
|
|
});
|
|
};
|
|
var EventEmitter = __require("node:events").EventEmitter;
|
|
var inherits = __require("node:util").inherits;
|
|
var getLimit = require_getLimit();
|
|
var StreamSearch = require_sbmh();
|
|
var B_DCRLF = Buffer.from("\r\n\r\n");
|
|
var RE_CRLF = /\r\n/g;
|
|
var RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/;
|
|
inherits(HeaderParser, EventEmitter);
|
|
HeaderParser.prototype.push = function(data) {
|
|
const r = this.ss.push(data);
|
|
if (this.finished) {
|
|
return r;
|
|
}
|
|
};
|
|
HeaderParser.prototype.reset = function() {
|
|
this.finished = false;
|
|
this.buffer = "";
|
|
this.header = {};
|
|
this.ss.reset();
|
|
};
|
|
HeaderParser.prototype._finish = function() {
|
|
if (this.buffer) {
|
|
this._parseHeader();
|
|
}
|
|
this.ss.matches = this.ss.maxMatches;
|
|
const header = this.header;
|
|
this.header = {};
|
|
this.buffer = "";
|
|
this.finished = true;
|
|
this.nread = this.npairs = 0;
|
|
this.maxed = false;
|
|
this.emit("header", header);
|
|
};
|
|
HeaderParser.prototype._parseHeader = function() {
|
|
if (this.npairs === this.maxHeaderPairs) {
|
|
return;
|
|
}
|
|
const lines = this.buffer.split(RE_CRLF);
|
|
const len = lines.length;
|
|
let m, h;
|
|
for (var i = 0;i < len; ++i) {
|
|
if (lines[i].length === 0) {
|
|
continue;
|
|
}
|
|
if (lines[i][0] === "\t" || lines[i][0] === " ") {
|
|
if (h) {
|
|
this.header[h][this.header[h].length - 1] += lines[i];
|
|
continue;
|
|
}
|
|
}
|
|
const posColon = lines[i].indexOf(":");
|
|
if (posColon === -1 || posColon === 0) {
|
|
return;
|
|
}
|
|
m = RE_HDR.exec(lines[i]);
|
|
h = m[1].toLowerCase();
|
|
this.header[h] = this.header[h] || [];
|
|
this.header[h].push(m[2] || "");
|
|
if (++this.npairs === this.maxHeaderPairs) {
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
module.exports = HeaderParser;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/deps/dicer/lib/Dicer.js
|
|
var require_Dicer = __commonJS((exports, module) => {
|
|
var Dicer = function(cfg) {
|
|
if (!(this instanceof Dicer)) {
|
|
return new Dicer(cfg);
|
|
}
|
|
WritableStream.call(this, cfg);
|
|
if (!cfg || !cfg.headerFirst && typeof cfg.boundary !== "string") {
|
|
throw new TypeError("Boundary required");
|
|
}
|
|
if (typeof cfg.boundary === "string") {
|
|
this.setBoundary(cfg.boundary);
|
|
} else {
|
|
this._bparser = undefined;
|
|
}
|
|
this._headerFirst = cfg.headerFirst;
|
|
this._dashes = 0;
|
|
this._parts = 0;
|
|
this._finished = false;
|
|
this._realFinish = false;
|
|
this._isPreamble = true;
|
|
this._justMatched = false;
|
|
this._firstWrite = true;
|
|
this._inHeader = true;
|
|
this._part = undefined;
|
|
this._cb = undefined;
|
|
this._ignoreData = false;
|
|
this._partOpts = { highWaterMark: cfg.partHwm };
|
|
this._pause = false;
|
|
const self2 = this;
|
|
this._hparser = new HeaderParser(cfg);
|
|
this._hparser.on("header", function(header) {
|
|
self2._inHeader = false;
|
|
self2._part.emit("header", header);
|
|
});
|
|
};
|
|
var WritableStream = __require("node:stream").Writable;
|
|
var inherits = __require("node:util").inherits;
|
|
var StreamSearch = require_sbmh();
|
|
var PartStream = require_PartStream();
|
|
var HeaderParser = require_HeaderParser();
|
|
var DASH = 45;
|
|
var B_ONEDASH = Buffer.from("-");
|
|
var B_CRLF = Buffer.from("\r\n");
|
|
var EMPTY_FN = function() {
|
|
};
|
|
inherits(Dicer, WritableStream);
|
|
Dicer.prototype.emit = function(ev) {
|
|
if (ev === "finish" && !this._realFinish) {
|
|
if (!this._finished) {
|
|
const self2 = this;
|
|
process.nextTick(function() {
|
|
self2.emit("error", new Error("Unexpected end of multipart data"));
|
|
if (self2._part && !self2._ignoreData) {
|
|
const type = self2._isPreamble ? "Preamble" : "Part";
|
|
self2._part.emit("error", new Error(type + " terminated early due to unexpected end of multipart data"));
|
|
self2._part.push(null);
|
|
process.nextTick(function() {
|
|
self2._realFinish = true;
|
|
self2.emit("finish");
|
|
self2._realFinish = false;
|
|
});
|
|
return;
|
|
}
|
|
self2._realFinish = true;
|
|
self2.emit("finish");
|
|
self2._realFinish = false;
|
|
});
|
|
}
|
|
} else {
|
|
WritableStream.prototype.emit.apply(this, arguments);
|
|
}
|
|
};
|
|
Dicer.prototype._write = function(data, encoding, cb) {
|
|
if (!this._hparser && !this._bparser) {
|
|
return cb();
|
|
}
|
|
if (this._headerFirst && this._isPreamble) {
|
|
if (!this._part) {
|
|
this._part = new PartStream(this._partOpts);
|
|
if (this.listenerCount("preamble") !== 0) {
|
|
this.emit("preamble", this._part);
|
|
} else {
|
|
this._ignore();
|
|
}
|
|
}
|
|
const r = this._hparser.push(data);
|
|
if (!this._inHeader && r !== undefined && r < data.length) {
|
|
data = data.slice(r);
|
|
} else {
|
|
return cb();
|
|
}
|
|
}
|
|
if (this._firstWrite) {
|
|
this._bparser.push(B_CRLF);
|
|
this._firstWrite = false;
|
|
}
|
|
this._bparser.push(data);
|
|
if (this._pause) {
|
|
this._cb = cb;
|
|
} else {
|
|
cb();
|
|
}
|
|
};
|
|
Dicer.prototype.reset = function() {
|
|
this._part = undefined;
|
|
this._bparser = undefined;
|
|
this._hparser = undefined;
|
|
};
|
|
Dicer.prototype.setBoundary = function(boundary) {
|
|
const self2 = this;
|
|
this._bparser = new StreamSearch("\r\n--" + boundary);
|
|
this._bparser.on("info", function(isMatch, data, start, end) {
|
|
self2._oninfo(isMatch, data, start, end);
|
|
});
|
|
};
|
|
Dicer.prototype._ignore = function() {
|
|
if (this._part && !this._ignoreData) {
|
|
this._ignoreData = true;
|
|
this._part.on("error", EMPTY_FN);
|
|
this._part.resume();
|
|
}
|
|
};
|
|
Dicer.prototype._oninfo = function(isMatch, data, start, end) {
|
|
let buf;
|
|
const self2 = this;
|
|
let i = 0;
|
|
let r;
|
|
let shouldWriteMore = true;
|
|
if (!this._part && this._justMatched && data) {
|
|
while (this._dashes < 2 && start + i < end) {
|
|
if (data[start + i] === DASH) {
|
|
++i;
|
|
++this._dashes;
|
|
} else {
|
|
if (this._dashes) {
|
|
buf = B_ONEDASH;
|
|
}
|
|
this._dashes = 0;
|
|
break;
|
|
}
|
|
}
|
|
if (this._dashes === 2) {
|
|
if (start + i < end && this.listenerCount("trailer") !== 0) {
|
|
this.emit("trailer", data.slice(start + i, end));
|
|
}
|
|
this.reset();
|
|
this._finished = true;
|
|
if (self2._parts === 0) {
|
|
self2._realFinish = true;
|
|
self2.emit("finish");
|
|
self2._realFinish = false;
|
|
}
|
|
}
|
|
if (this._dashes) {
|
|
return;
|
|
}
|
|
}
|
|
if (this._justMatched) {
|
|
this._justMatched = false;
|
|
}
|
|
if (!this._part) {
|
|
this._part = new PartStream(this._partOpts);
|
|
this._part._read = function(n) {
|
|
self2._unpause();
|
|
};
|
|
if (this._isPreamble && this.listenerCount("preamble") !== 0) {
|
|
this.emit("preamble", this._part);
|
|
} else if (this._isPreamble !== true && this.listenerCount("part") !== 0) {
|
|
this.emit("part", this._part);
|
|
} else {
|
|
this._ignore();
|
|
}
|
|
if (!this._isPreamble) {
|
|
this._inHeader = true;
|
|
}
|
|
}
|
|
if (data && start < end && !this._ignoreData) {
|
|
if (this._isPreamble || !this._inHeader) {
|
|
if (buf) {
|
|
shouldWriteMore = this._part.push(buf);
|
|
}
|
|
shouldWriteMore = this._part.push(data.slice(start, end));
|
|
if (!shouldWriteMore) {
|
|
this._pause = true;
|
|
}
|
|
} else if (!this._isPreamble && this._inHeader) {
|
|
if (buf) {
|
|
this._hparser.push(buf);
|
|
}
|
|
r = this._hparser.push(data.slice(start, end));
|
|
if (!this._inHeader && r !== undefined && r < end) {
|
|
this._oninfo(false, data, start + r, end);
|
|
}
|
|
}
|
|
}
|
|
if (isMatch) {
|
|
this._hparser.reset();
|
|
if (this._isPreamble) {
|
|
this._isPreamble = false;
|
|
} else {
|
|
if (start !== end) {
|
|
++this._parts;
|
|
this._part.on("end", function() {
|
|
if (--self2._parts === 0) {
|
|
if (self2._finished) {
|
|
self2._realFinish = true;
|
|
self2.emit("finish");
|
|
self2._realFinish = false;
|
|
} else {
|
|
self2._unpause();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
this._part.push(null);
|
|
this._part = undefined;
|
|
this._ignoreData = false;
|
|
this._justMatched = true;
|
|
this._dashes = 0;
|
|
}
|
|
};
|
|
Dicer.prototype._unpause = function() {
|
|
if (!this._pause) {
|
|
return;
|
|
}
|
|
this._pause = false;
|
|
if (this._cb) {
|
|
const cb = this._cb;
|
|
this._cb = undefined;
|
|
cb();
|
|
}
|
|
};
|
|
module.exports = Dicer;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/utils/decodeText.js
|
|
var require_decodeText = __commonJS((exports, module) => {
|
|
var getDecoder = function(charset) {
|
|
let lc;
|
|
while (true) {
|
|
switch (charset) {
|
|
case "utf-8":
|
|
case "utf8":
|
|
return decoders.utf8;
|
|
case "latin1":
|
|
case "ascii":
|
|
case "us-ascii":
|
|
case "iso-8859-1":
|
|
case "iso8859-1":
|
|
case "iso88591":
|
|
case "iso_8859-1":
|
|
case "windows-1252":
|
|
case "iso_8859-1:1987":
|
|
case "cp1252":
|
|
case "x-cp1252":
|
|
return decoders.latin1;
|
|
case "utf16le":
|
|
case "utf-16le":
|
|
case "ucs2":
|
|
case "ucs-2":
|
|
return decoders.utf16le;
|
|
case "base64":
|
|
return decoders.base64;
|
|
default:
|
|
if (lc === undefined) {
|
|
lc = true;
|
|
charset = charset.toLowerCase();
|
|
continue;
|
|
}
|
|
return decoders.other.bind(charset);
|
|
}
|
|
}
|
|
};
|
|
var decodeText = function(text, sourceEncoding, destEncoding) {
|
|
if (text) {
|
|
return getDecoder(destEncoding)(text, sourceEncoding);
|
|
}
|
|
return text;
|
|
};
|
|
var utf8Decoder = new TextDecoder("utf-8");
|
|
var textDecoders = new Map([
|
|
["utf-8", utf8Decoder],
|
|
["utf8", utf8Decoder]
|
|
]);
|
|
var decoders = {
|
|
utf8: (data, sourceEncoding) => {
|
|
if (data.length === 0) {
|
|
return "";
|
|
}
|
|
if (typeof data === "string") {
|
|
data = Buffer.from(data, sourceEncoding);
|
|
}
|
|
return data.utf8Slice(0, data.length);
|
|
},
|
|
latin1: (data, sourceEncoding) => {
|
|
if (data.length === 0) {
|
|
return "";
|
|
}
|
|
if (typeof data === "string") {
|
|
return data;
|
|
}
|
|
return data.latin1Slice(0, data.length);
|
|
},
|
|
utf16le: (data, sourceEncoding) => {
|
|
if (data.length === 0) {
|
|
return "";
|
|
}
|
|
if (typeof data === "string") {
|
|
data = Buffer.from(data, sourceEncoding);
|
|
}
|
|
return data.ucs2Slice(0, data.length);
|
|
},
|
|
base64: (data, sourceEncoding) => {
|
|
if (data.length === 0) {
|
|
return "";
|
|
}
|
|
if (typeof data === "string") {
|
|
data = Buffer.from(data, sourceEncoding);
|
|
}
|
|
return data.base64Slice(0, data.length);
|
|
},
|
|
other: (data, sourceEncoding) => {
|
|
if (data.length === 0) {
|
|
return "";
|
|
}
|
|
if (typeof data === "string") {
|
|
data = Buffer.from(data, sourceEncoding);
|
|
}
|
|
if (textDecoders.has(exports.toString())) {
|
|
try {
|
|
return textDecoders.get(exports).decode(data);
|
|
} catch {
|
|
}
|
|
}
|
|
return typeof data === "string" ? data : data.toString();
|
|
}
|
|
};
|
|
module.exports = decodeText;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/utils/parseParams.js
|
|
var require_parseParams = __commonJS((exports, module) => {
|
|
var encodedReplacer = function(match) {
|
|
return EncodedLookup[match];
|
|
};
|
|
var parseParams = function(str) {
|
|
const res = [];
|
|
let state = STATE_KEY;
|
|
let charset = "";
|
|
let inquote = false;
|
|
let escaping = false;
|
|
let p = 0;
|
|
let tmp = "";
|
|
const len = str.length;
|
|
for (var i = 0;i < len; ++i) {
|
|
const char = str[i];
|
|
if (char === "\\" && inquote) {
|
|
if (escaping) {
|
|
escaping = false;
|
|
} else {
|
|
escaping = true;
|
|
continue;
|
|
}
|
|
} else if (char === '"') {
|
|
if (!escaping) {
|
|
if (inquote) {
|
|
inquote = false;
|
|
state = STATE_KEY;
|
|
} else {
|
|
inquote = true;
|
|
}
|
|
continue;
|
|
} else {
|
|
escaping = false;
|
|
}
|
|
} else {
|
|
if (escaping && inquote) {
|
|
tmp += "\\";
|
|
}
|
|
escaping = false;
|
|
if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") {
|
|
if (state === STATE_CHARSET) {
|
|
state = STATE_LANG;
|
|
charset = tmp.substring(1);
|
|
} else {
|
|
state = STATE_VALUE;
|
|
}
|
|
tmp = "";
|
|
continue;
|
|
} else if (state === STATE_KEY && (char === "*" || char === "=") && res.length) {
|
|
state = char === "*" ? STATE_CHARSET : STATE_VALUE;
|
|
res[p] = [tmp, undefined];
|
|
tmp = "";
|
|
continue;
|
|
} else if (!inquote && char === ";") {
|
|
state = STATE_KEY;
|
|
if (charset) {
|
|
if (tmp.length) {
|
|
tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), "binary", charset);
|
|
}
|
|
charset = "";
|
|
} else if (tmp.length) {
|
|
tmp = decodeText(tmp, "binary", "utf8");
|
|
}
|
|
if (res[p] === undefined) {
|
|
res[p] = tmp;
|
|
} else {
|
|
res[p][1] = tmp;
|
|
}
|
|
tmp = "";
|
|
++p;
|
|
continue;
|
|
} else if (!inquote && (char === " " || char === "\t")) {
|
|
continue;
|
|
}
|
|
}
|
|
tmp += char;
|
|
}
|
|
if (charset && tmp.length) {
|
|
tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), "binary", charset);
|
|
} else if (tmp) {
|
|
tmp = decodeText(tmp, "binary", "utf8");
|
|
}
|
|
if (res[p] === undefined) {
|
|
if (tmp) {
|
|
res[p] = tmp;
|
|
}
|
|
} else {
|
|
res[p][1] = tmp;
|
|
}
|
|
return res;
|
|
};
|
|
var decodeText = require_decodeText();
|
|
var RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g;
|
|
var EncodedLookup = {
|
|
"%00": "\0",
|
|
"%01": "\x01",
|
|
"%02": "\x02",
|
|
"%03": "\x03",
|
|
"%04": "\x04",
|
|
"%05": "\x05",
|
|
"%06": "\x06",
|
|
"%07": "\x07",
|
|
"%08": "\b",
|
|
"%09": "\t",
|
|
"%0a": `
|
|
`,
|
|
"%0A": `
|
|
`,
|
|
"%0b": "\v",
|
|
"%0B": "\v",
|
|
"%0c": "\f",
|
|
"%0C": "\f",
|
|
"%0d": `\r`,
|
|
"%0D": `\r`,
|
|
"%0e": "\x0E",
|
|
"%0E": "\x0E",
|
|
"%0f": "\x0F",
|
|
"%0F": "\x0F",
|
|
"%10": "\x10",
|
|
"%11": "\x11",
|
|
"%12": "\x12",
|
|
"%13": "\x13",
|
|
"%14": "\x14",
|
|
"%15": "\x15",
|
|
"%16": "\x16",
|
|
"%17": "\x17",
|
|
"%18": "\x18",
|
|
"%19": "\x19",
|
|
"%1a": "\x1A",
|
|
"%1A": "\x1A",
|
|
"%1b": "\x1B",
|
|
"%1B": "\x1B",
|
|
"%1c": "\x1C",
|
|
"%1C": "\x1C",
|
|
"%1d": "\x1D",
|
|
"%1D": "\x1D",
|
|
"%1e": "\x1E",
|
|
"%1E": "\x1E",
|
|
"%1f": "\x1F",
|
|
"%1F": "\x1F",
|
|
"%20": " ",
|
|
"%21": "!",
|
|
"%22": '"',
|
|
"%23": "#",
|
|
"%24": "$",
|
|
"%25": "%",
|
|
"%26": "&",
|
|
"%27": "'",
|
|
"%28": "(",
|
|
"%29": ")",
|
|
"%2a": "*",
|
|
"%2A": "*",
|
|
"%2b": "+",
|
|
"%2B": "+",
|
|
"%2c": ",",
|
|
"%2C": ",",
|
|
"%2d": "-",
|
|
"%2D": "-",
|
|
"%2e": ".",
|
|
"%2E": ".",
|
|
"%2f": "/",
|
|
"%2F": "/",
|
|
"%30": "0",
|
|
"%31": "1",
|
|
"%32": "2",
|
|
"%33": "3",
|
|
"%34": "4",
|
|
"%35": "5",
|
|
"%36": "6",
|
|
"%37": "7",
|
|
"%38": "8",
|
|
"%39": "9",
|
|
"%3a": ":",
|
|
"%3A": ":",
|
|
"%3b": ";",
|
|
"%3B": ";",
|
|
"%3c": "<",
|
|
"%3C": "<",
|
|
"%3d": "=",
|
|
"%3D": "=",
|
|
"%3e": ">",
|
|
"%3E": ">",
|
|
"%3f": "?",
|
|
"%3F": "?",
|
|
"%40": "@",
|
|
"%41": "A",
|
|
"%42": "B",
|
|
"%43": "C",
|
|
"%44": "D",
|
|
"%45": "E",
|
|
"%46": "F",
|
|
"%47": "G",
|
|
"%48": "H",
|
|
"%49": "I",
|
|
"%4a": "J",
|
|
"%4A": "J",
|
|
"%4b": "K",
|
|
"%4B": "K",
|
|
"%4c": "L",
|
|
"%4C": "L",
|
|
"%4d": "M",
|
|
"%4D": "M",
|
|
"%4e": "N",
|
|
"%4E": "N",
|
|
"%4f": "O",
|
|
"%4F": "O",
|
|
"%50": "P",
|
|
"%51": "Q",
|
|
"%52": "R",
|
|
"%53": "S",
|
|
"%54": "T",
|
|
"%55": "U",
|
|
"%56": "V",
|
|
"%57": "W",
|
|
"%58": "X",
|
|
"%59": "Y",
|
|
"%5a": "Z",
|
|
"%5A": "Z",
|
|
"%5b": "[",
|
|
"%5B": "[",
|
|
"%5c": "\\",
|
|
"%5C": "\\",
|
|
"%5d": "]",
|
|
"%5D": "]",
|
|
"%5e": "^",
|
|
"%5E": "^",
|
|
"%5f": "_",
|
|
"%5F": "_",
|
|
"%60": "`",
|
|
"%61": "a",
|
|
"%62": "b",
|
|
"%63": "c",
|
|
"%64": "d",
|
|
"%65": "e",
|
|
"%66": "f",
|
|
"%67": "g",
|
|
"%68": "h",
|
|
"%69": "i",
|
|
"%6a": "j",
|
|
"%6A": "j",
|
|
"%6b": "k",
|
|
"%6B": "k",
|
|
"%6c": "l",
|
|
"%6C": "l",
|
|
"%6d": "m",
|
|
"%6D": "m",
|
|
"%6e": "n",
|
|
"%6E": "n",
|
|
"%6f": "o",
|
|
"%6F": "o",
|
|
"%70": "p",
|
|
"%71": "q",
|
|
"%72": "r",
|
|
"%73": "s",
|
|
"%74": "t",
|
|
"%75": "u",
|
|
"%76": "v",
|
|
"%77": "w",
|
|
"%78": "x",
|
|
"%79": "y",
|
|
"%7a": "z",
|
|
"%7A": "z",
|
|
"%7b": "{",
|
|
"%7B": "{",
|
|
"%7c": "|",
|
|
"%7C": "|",
|
|
"%7d": "}",
|
|
"%7D": "}",
|
|
"%7e": "~",
|
|
"%7E": "~",
|
|
"%7f": "\x7F",
|
|
"%7F": "\x7F",
|
|
"%80": "\x80",
|
|
"%81": "\x81",
|
|
"%82": "\x82",
|
|
"%83": "\x83",
|
|
"%84": "\x84",
|
|
"%85": "\x85",
|
|
"%86": "\x86",
|
|
"%87": "\x87",
|
|
"%88": "\x88",
|
|
"%89": "\x89",
|
|
"%8a": "\x8A",
|
|
"%8A": "\x8A",
|
|
"%8b": "\x8B",
|
|
"%8B": "\x8B",
|
|
"%8c": "\x8C",
|
|
"%8C": "\x8C",
|
|
"%8d": "\x8D",
|
|
"%8D": "\x8D",
|
|
"%8e": "\x8E",
|
|
"%8E": "\x8E",
|
|
"%8f": "\x8F",
|
|
"%8F": "\x8F",
|
|
"%90": "\x90",
|
|
"%91": "\x91",
|
|
"%92": "\x92",
|
|
"%93": "\x93",
|
|
"%94": "\x94",
|
|
"%95": "\x95",
|
|
"%96": "\x96",
|
|
"%97": "\x97",
|
|
"%98": "\x98",
|
|
"%99": "\x99",
|
|
"%9a": "\x9A",
|
|
"%9A": "\x9A",
|
|
"%9b": "\x9B",
|
|
"%9B": "\x9B",
|
|
"%9c": "\x9C",
|
|
"%9C": "\x9C",
|
|
"%9d": "\x9D",
|
|
"%9D": "\x9D",
|
|
"%9e": "\x9E",
|
|
"%9E": "\x9E",
|
|
"%9f": "\x9F",
|
|
"%9F": "\x9F",
|
|
"%a0": "\xA0",
|
|
"%A0": "\xA0",
|
|
"%a1": "\xA1",
|
|
"%A1": "\xA1",
|
|
"%a2": "\xA2",
|
|
"%A2": "\xA2",
|
|
"%a3": "\xA3",
|
|
"%A3": "\xA3",
|
|
"%a4": "\xA4",
|
|
"%A4": "\xA4",
|
|
"%a5": "\xA5",
|
|
"%A5": "\xA5",
|
|
"%a6": "\xA6",
|
|
"%A6": "\xA6",
|
|
"%a7": "\xA7",
|
|
"%A7": "\xA7",
|
|
"%a8": "\xA8",
|
|
"%A8": "\xA8",
|
|
"%a9": "\xA9",
|
|
"%A9": "\xA9",
|
|
"%aa": "\xAA",
|
|
"%Aa": "\xAA",
|
|
"%aA": "\xAA",
|
|
"%AA": "\xAA",
|
|
"%ab": "\xAB",
|
|
"%Ab": "\xAB",
|
|
"%aB": "\xAB",
|
|
"%AB": "\xAB",
|
|
"%ac": "\xAC",
|
|
"%Ac": "\xAC",
|
|
"%aC": "\xAC",
|
|
"%AC": "\xAC",
|
|
"%ad": "\xAD",
|
|
"%Ad": "\xAD",
|
|
"%aD": "\xAD",
|
|
"%AD": "\xAD",
|
|
"%ae": "\xAE",
|
|
"%Ae": "\xAE",
|
|
"%aE": "\xAE",
|
|
"%AE": "\xAE",
|
|
"%af": "\xAF",
|
|
"%Af": "\xAF",
|
|
"%aF": "\xAF",
|
|
"%AF": "\xAF",
|
|
"%b0": "\xB0",
|
|
"%B0": "\xB0",
|
|
"%b1": "\xB1",
|
|
"%B1": "\xB1",
|
|
"%b2": "\xB2",
|
|
"%B2": "\xB2",
|
|
"%b3": "\xB3",
|
|
"%B3": "\xB3",
|
|
"%b4": "\xB4",
|
|
"%B4": "\xB4",
|
|
"%b5": "\xB5",
|
|
"%B5": "\xB5",
|
|
"%b6": "\xB6",
|
|
"%B6": "\xB6",
|
|
"%b7": "\xB7",
|
|
"%B7": "\xB7",
|
|
"%b8": "\xB8",
|
|
"%B8": "\xB8",
|
|
"%b9": "\xB9",
|
|
"%B9": "\xB9",
|
|
"%ba": "\xBA",
|
|
"%Ba": "\xBA",
|
|
"%bA": "\xBA",
|
|
"%BA": "\xBA",
|
|
"%bb": "\xBB",
|
|
"%Bb": "\xBB",
|
|
"%bB": "\xBB",
|
|
"%BB": "\xBB",
|
|
"%bc": "\xBC",
|
|
"%Bc": "\xBC",
|
|
"%bC": "\xBC",
|
|
"%BC": "\xBC",
|
|
"%bd": "\xBD",
|
|
"%Bd": "\xBD",
|
|
"%bD": "\xBD",
|
|
"%BD": "\xBD",
|
|
"%be": "\xBE",
|
|
"%Be": "\xBE",
|
|
"%bE": "\xBE",
|
|
"%BE": "\xBE",
|
|
"%bf": "\xBF",
|
|
"%Bf": "\xBF",
|
|
"%bF": "\xBF",
|
|
"%BF": "\xBF",
|
|
"%c0": "\xC0",
|
|
"%C0": "\xC0",
|
|
"%c1": "\xC1",
|
|
"%C1": "\xC1",
|
|
"%c2": "\xC2",
|
|
"%C2": "\xC2",
|
|
"%c3": "\xC3",
|
|
"%C3": "\xC3",
|
|
"%c4": "\xC4",
|
|
"%C4": "\xC4",
|
|
"%c5": "\xC5",
|
|
"%C5": "\xC5",
|
|
"%c6": "\xC6",
|
|
"%C6": "\xC6",
|
|
"%c7": "\xC7",
|
|
"%C7": "\xC7",
|
|
"%c8": "\xC8",
|
|
"%C8": "\xC8",
|
|
"%c9": "\xC9",
|
|
"%C9": "\xC9",
|
|
"%ca": "\xCA",
|
|
"%Ca": "\xCA",
|
|
"%cA": "\xCA",
|
|
"%CA": "\xCA",
|
|
"%cb": "\xCB",
|
|
"%Cb": "\xCB",
|
|
"%cB": "\xCB",
|
|
"%CB": "\xCB",
|
|
"%cc": "\xCC",
|
|
"%Cc": "\xCC",
|
|
"%cC": "\xCC",
|
|
"%CC": "\xCC",
|
|
"%cd": "\xCD",
|
|
"%Cd": "\xCD",
|
|
"%cD": "\xCD",
|
|
"%CD": "\xCD",
|
|
"%ce": "\xCE",
|
|
"%Ce": "\xCE",
|
|
"%cE": "\xCE",
|
|
"%CE": "\xCE",
|
|
"%cf": "\xCF",
|
|
"%Cf": "\xCF",
|
|
"%cF": "\xCF",
|
|
"%CF": "\xCF",
|
|
"%d0": "\xD0",
|
|
"%D0": "\xD0",
|
|
"%d1": "\xD1",
|
|
"%D1": "\xD1",
|
|
"%d2": "\xD2",
|
|
"%D2": "\xD2",
|
|
"%d3": "\xD3",
|
|
"%D3": "\xD3",
|
|
"%d4": "\xD4",
|
|
"%D4": "\xD4",
|
|
"%d5": "\xD5",
|
|
"%D5": "\xD5",
|
|
"%d6": "\xD6",
|
|
"%D6": "\xD6",
|
|
"%d7": "\xD7",
|
|
"%D7": "\xD7",
|
|
"%d8": "\xD8",
|
|
"%D8": "\xD8",
|
|
"%d9": "\xD9",
|
|
"%D9": "\xD9",
|
|
"%da": "\xDA",
|
|
"%Da": "\xDA",
|
|
"%dA": "\xDA",
|
|
"%DA": "\xDA",
|
|
"%db": "\xDB",
|
|
"%Db": "\xDB",
|
|
"%dB": "\xDB",
|
|
"%DB": "\xDB",
|
|
"%dc": "\xDC",
|
|
"%Dc": "\xDC",
|
|
"%dC": "\xDC",
|
|
"%DC": "\xDC",
|
|
"%dd": "\xDD",
|
|
"%Dd": "\xDD",
|
|
"%dD": "\xDD",
|
|
"%DD": "\xDD",
|
|
"%de": "\xDE",
|
|
"%De": "\xDE",
|
|
"%dE": "\xDE",
|
|
"%DE": "\xDE",
|
|
"%df": "\xDF",
|
|
"%Df": "\xDF",
|
|
"%dF": "\xDF",
|
|
"%DF": "\xDF",
|
|
"%e0": "\xE0",
|
|
"%E0": "\xE0",
|
|
"%e1": "\xE1",
|
|
"%E1": "\xE1",
|
|
"%e2": "\xE2",
|
|
"%E2": "\xE2",
|
|
"%e3": "\xE3",
|
|
"%E3": "\xE3",
|
|
"%e4": "\xE4",
|
|
"%E4": "\xE4",
|
|
"%e5": "\xE5",
|
|
"%E5": "\xE5",
|
|
"%e6": "\xE6",
|
|
"%E6": "\xE6",
|
|
"%e7": "\xE7",
|
|
"%E7": "\xE7",
|
|
"%e8": "\xE8",
|
|
"%E8": "\xE8",
|
|
"%e9": "\xE9",
|
|
"%E9": "\xE9",
|
|
"%ea": "\xEA",
|
|
"%Ea": "\xEA",
|
|
"%eA": "\xEA",
|
|
"%EA": "\xEA",
|
|
"%eb": "\xEB",
|
|
"%Eb": "\xEB",
|
|
"%eB": "\xEB",
|
|
"%EB": "\xEB",
|
|
"%ec": "\xEC",
|
|
"%Ec": "\xEC",
|
|
"%eC": "\xEC",
|
|
"%EC": "\xEC",
|
|
"%ed": "\xED",
|
|
"%Ed": "\xED",
|
|
"%eD": "\xED",
|
|
"%ED": "\xED",
|
|
"%ee": "\xEE",
|
|
"%Ee": "\xEE",
|
|
"%eE": "\xEE",
|
|
"%EE": "\xEE",
|
|
"%ef": "\xEF",
|
|
"%Ef": "\xEF",
|
|
"%eF": "\xEF",
|
|
"%EF": "\xEF",
|
|
"%f0": "\xF0",
|
|
"%F0": "\xF0",
|
|
"%f1": "\xF1",
|
|
"%F1": "\xF1",
|
|
"%f2": "\xF2",
|
|
"%F2": "\xF2",
|
|
"%f3": "\xF3",
|
|
"%F3": "\xF3",
|
|
"%f4": "\xF4",
|
|
"%F4": "\xF4",
|
|
"%f5": "\xF5",
|
|
"%F5": "\xF5",
|
|
"%f6": "\xF6",
|
|
"%F6": "\xF6",
|
|
"%f7": "\xF7",
|
|
"%F7": "\xF7",
|
|
"%f8": "\xF8",
|
|
"%F8": "\xF8",
|
|
"%f9": "\xF9",
|
|
"%F9": "\xF9",
|
|
"%fa": "\xFA",
|
|
"%Fa": "\xFA",
|
|
"%fA": "\xFA",
|
|
"%FA": "\xFA",
|
|
"%fb": "\xFB",
|
|
"%Fb": "\xFB",
|
|
"%fB": "\xFB",
|
|
"%FB": "\xFB",
|
|
"%fc": "\xFC",
|
|
"%Fc": "\xFC",
|
|
"%fC": "\xFC",
|
|
"%FC": "\xFC",
|
|
"%fd": "\xFD",
|
|
"%Fd": "\xFD",
|
|
"%fD": "\xFD",
|
|
"%FD": "\xFD",
|
|
"%fe": "\xFE",
|
|
"%Fe": "\xFE",
|
|
"%fE": "\xFE",
|
|
"%FE": "\xFE",
|
|
"%ff": "\xFF",
|
|
"%Ff": "\xFF",
|
|
"%fF": "\xFF",
|
|
"%FF": "\xFF"
|
|
};
|
|
var STATE_KEY = 0;
|
|
var STATE_VALUE = 1;
|
|
var STATE_CHARSET = 2;
|
|
var STATE_LANG = 3;
|
|
module.exports = parseParams;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/utils/basename.js
|
|
var require_basename = __commonJS((exports, module) => {
|
|
module.exports = function basename(path) {
|
|
if (typeof path !== "string") {
|
|
return "";
|
|
}
|
|
for (var i = path.length - 1;i >= 0; --i) {
|
|
switch (path.charCodeAt(i)) {
|
|
case 47:
|
|
case 92:
|
|
path = path.slice(i + 1);
|
|
return path === ".." || path === "." ? "" : path;
|
|
}
|
|
}
|
|
return path === ".." || path === "." ? "" : path;
|
|
};
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/types/multipart.js
|
|
var require_multipart = __commonJS((exports, module) => {
|
|
var Multipart = function(boy, cfg) {
|
|
let i;
|
|
let len;
|
|
const self2 = this;
|
|
let boundary;
|
|
const limits = cfg.limits;
|
|
const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => contentType === "application/octet-stream" || fileName !== undefined);
|
|
const parsedConType = cfg.parsedConType || [];
|
|
const defCharset = cfg.defCharset || "utf8";
|
|
const preservePath = cfg.preservePath;
|
|
const fileOpts = { highWaterMark: cfg.fileHwm };
|
|
for (i = 0, len = parsedConType.length;i < len; ++i) {
|
|
if (Array.isArray(parsedConType[i]) && RE_BOUNDARY.test(parsedConType[i][0])) {
|
|
boundary = parsedConType[i][1];
|
|
break;
|
|
}
|
|
}
|
|
function checkFinished() {
|
|
if (nends === 0 && finished && !boy._done) {
|
|
finished = false;
|
|
self2.end();
|
|
}
|
|
}
|
|
if (typeof boundary !== "string") {
|
|
throw new Error("Multipart: Boundary not found");
|
|
}
|
|
const fieldSizeLimit = getLimit(limits, "fieldSize", 1 * 1024 * 1024);
|
|
const fileSizeLimit = getLimit(limits, "fileSize", Infinity);
|
|
const filesLimit = getLimit(limits, "files", Infinity);
|
|
const fieldsLimit = getLimit(limits, "fields", Infinity);
|
|
const partsLimit = getLimit(limits, "parts", Infinity);
|
|
const headerPairsLimit = getLimit(limits, "headerPairs", 2000);
|
|
const headerSizeLimit = getLimit(limits, "headerSize", 80 * 1024);
|
|
let nfiles = 0;
|
|
let nfields = 0;
|
|
let nends = 0;
|
|
let curFile;
|
|
let curField;
|
|
let finished = false;
|
|
this._needDrain = false;
|
|
this._pause = false;
|
|
this._cb = undefined;
|
|
this._nparts = 0;
|
|
this._boy = boy;
|
|
const parserCfg = {
|
|
boundary,
|
|
maxHeaderPairs: headerPairsLimit,
|
|
maxHeaderSize: headerSizeLimit,
|
|
partHwm: fileOpts.highWaterMark,
|
|
highWaterMark: cfg.highWaterMark
|
|
};
|
|
this.parser = new Dicer(parserCfg);
|
|
this.parser.on("drain", function() {
|
|
self2._needDrain = false;
|
|
if (self2._cb && !self2._pause) {
|
|
const cb = self2._cb;
|
|
self2._cb = undefined;
|
|
cb();
|
|
}
|
|
}).on("part", function onPart(part) {
|
|
if (++self2._nparts > partsLimit) {
|
|
self2.parser.removeListener("part", onPart);
|
|
self2.parser.on("part", skipPart);
|
|
boy.hitPartsLimit = true;
|
|
boy.emit("partsLimit");
|
|
return skipPart(part);
|
|
}
|
|
if (curField) {
|
|
const field = curField;
|
|
field.emit("end");
|
|
field.removeAllListeners("end");
|
|
}
|
|
part.on("header", function(header) {
|
|
let contype;
|
|
let fieldname;
|
|
let parsed;
|
|
let charset;
|
|
let encoding;
|
|
let filename;
|
|
let nsize = 0;
|
|
if (header["content-type"]) {
|
|
parsed = parseParams(header["content-type"][0]);
|
|
if (parsed[0]) {
|
|
contype = parsed[0].toLowerCase();
|
|
for (i = 0, len = parsed.length;i < len; ++i) {
|
|
if (RE_CHARSET.test(parsed[i][0])) {
|
|
charset = parsed[i][1].toLowerCase();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (contype === undefined) {
|
|
contype = "text/plain";
|
|
}
|
|
if (charset === undefined) {
|
|
charset = defCharset;
|
|
}
|
|
if (header["content-disposition"]) {
|
|
parsed = parseParams(header["content-disposition"][0]);
|
|
if (!RE_FIELD.test(parsed[0])) {
|
|
return skipPart(part);
|
|
}
|
|
for (i = 0, len = parsed.length;i < len; ++i) {
|
|
if (RE_NAME.test(parsed[i][0])) {
|
|
fieldname = parsed[i][1];
|
|
} else if (RE_FILENAME.test(parsed[i][0])) {
|
|
filename = parsed[i][1];
|
|
if (!preservePath) {
|
|
filename = basename(filename);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
return skipPart(part);
|
|
}
|
|
if (header["content-transfer-encoding"]) {
|
|
encoding = header["content-transfer-encoding"][0].toLowerCase();
|
|
} else {
|
|
encoding = "7bit";
|
|
}
|
|
let onData, onEnd;
|
|
if (isPartAFile(fieldname, contype, filename)) {
|
|
if (nfiles === filesLimit) {
|
|
if (!boy.hitFilesLimit) {
|
|
boy.hitFilesLimit = true;
|
|
boy.emit("filesLimit");
|
|
}
|
|
return skipPart(part);
|
|
}
|
|
++nfiles;
|
|
if (boy.listenerCount("file") === 0) {
|
|
self2.parser._ignore();
|
|
return;
|
|
}
|
|
++nends;
|
|
const file = new FileStream(fileOpts);
|
|
curFile = file;
|
|
file.on("end", function() {
|
|
--nends;
|
|
self2._pause = false;
|
|
checkFinished();
|
|
if (self2._cb && !self2._needDrain) {
|
|
const cb = self2._cb;
|
|
self2._cb = undefined;
|
|
cb();
|
|
}
|
|
});
|
|
file._read = function(n) {
|
|
if (!self2._pause) {
|
|
return;
|
|
}
|
|
self2._pause = false;
|
|
if (self2._cb && !self2._needDrain) {
|
|
const cb = self2._cb;
|
|
self2._cb = undefined;
|
|
cb();
|
|
}
|
|
};
|
|
boy.emit("file", fieldname, file, filename, encoding, contype);
|
|
onData = function(data) {
|
|
if ((nsize += data.length) > fileSizeLimit) {
|
|
const extralen = fileSizeLimit - nsize + data.length;
|
|
if (extralen > 0) {
|
|
file.push(data.slice(0, extralen));
|
|
}
|
|
file.truncated = true;
|
|
file.bytesRead = fileSizeLimit;
|
|
part.removeAllListeners("data");
|
|
file.emit("limit");
|
|
return;
|
|
} else if (!file.push(data)) {
|
|
self2._pause = true;
|
|
}
|
|
file.bytesRead = nsize;
|
|
};
|
|
onEnd = function() {
|
|
curFile = undefined;
|
|
file.push(null);
|
|
};
|
|
} else {
|
|
if (nfields === fieldsLimit) {
|
|
if (!boy.hitFieldsLimit) {
|
|
boy.hitFieldsLimit = true;
|
|
boy.emit("fieldsLimit");
|
|
}
|
|
return skipPart(part);
|
|
}
|
|
++nfields;
|
|
++nends;
|
|
let buffer = "";
|
|
let truncated = false;
|
|
curField = part;
|
|
onData = function(data) {
|
|
if ((nsize += data.length) > fieldSizeLimit) {
|
|
const extralen = fieldSizeLimit - (nsize - data.length);
|
|
buffer += data.toString("binary", 0, extralen);
|
|
truncated = true;
|
|
part.removeAllListeners("data");
|
|
} else {
|
|
buffer += data.toString("binary");
|
|
}
|
|
};
|
|
onEnd = function() {
|
|
curField = undefined;
|
|
if (buffer.length) {
|
|
buffer = decodeText(buffer, "binary", charset);
|
|
}
|
|
boy.emit("field", fieldname, buffer, false, truncated, encoding, contype);
|
|
--nends;
|
|
checkFinished();
|
|
};
|
|
}
|
|
part._readableState.sync = false;
|
|
part.on("data", onData);
|
|
part.on("end", onEnd);
|
|
}).on("error", function(err) {
|
|
if (curFile) {
|
|
curFile.emit("error", err);
|
|
}
|
|
});
|
|
}).on("error", function(err) {
|
|
boy.emit("error", err);
|
|
}).on("finish", function() {
|
|
finished = true;
|
|
checkFinished();
|
|
});
|
|
};
|
|
var skipPart = function(part) {
|
|
part.resume();
|
|
};
|
|
var FileStream = function(opts) {
|
|
Readable.call(this, opts);
|
|
this.bytesRead = 0;
|
|
this.truncated = false;
|
|
};
|
|
var { Readable } = __require("node:stream");
|
|
var { inherits } = __require("node:util");
|
|
var Dicer = require_Dicer();
|
|
var parseParams = require_parseParams();
|
|
var decodeText = require_decodeText();
|
|
var basename = require_basename();
|
|
var getLimit = require_getLimit();
|
|
var RE_BOUNDARY = /^boundary$/i;
|
|
var RE_FIELD = /^form-data$/i;
|
|
var RE_CHARSET = /^charset$/i;
|
|
var RE_FILENAME = /^filename$/i;
|
|
var RE_NAME = /^name$/i;
|
|
Multipart.detect = /^multipart\/form-data/i;
|
|
Multipart.prototype.write = function(chunk, cb) {
|
|
const r = this.parser.write(chunk);
|
|
if (r && !this._pause) {
|
|
cb();
|
|
} else {
|
|
this._needDrain = !r;
|
|
this._cb = cb;
|
|
}
|
|
};
|
|
Multipart.prototype.end = function() {
|
|
const self2 = this;
|
|
if (self2.parser.writable) {
|
|
self2.parser.end();
|
|
} else if (!self2._boy._done) {
|
|
process.nextTick(function() {
|
|
self2._boy._done = true;
|
|
self2._boy.emit("finish");
|
|
});
|
|
}
|
|
};
|
|
inherits(FileStream, Readable);
|
|
FileStream.prototype._read = function(n) {
|
|
};
|
|
module.exports = Multipart;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/utils/Decoder.js
|
|
var require_Decoder = __commonJS((exports, module) => {
|
|
var Decoder = function() {
|
|
this.buffer = undefined;
|
|
};
|
|
var RE_PLUS = /\+/g;
|
|
var HEX = [
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
];
|
|
Decoder.prototype.write = function(str) {
|
|
str = str.replace(RE_PLUS, " ");
|
|
let res = "";
|
|
let i = 0;
|
|
let p = 0;
|
|
const len = str.length;
|
|
for (;i < len; ++i) {
|
|
if (this.buffer !== undefined) {
|
|
if (!HEX[str.charCodeAt(i)]) {
|
|
res += "%" + this.buffer;
|
|
this.buffer = undefined;
|
|
--i;
|
|
} else {
|
|
this.buffer += str[i];
|
|
++p;
|
|
if (this.buffer.length === 2) {
|
|
res += String.fromCharCode(parseInt(this.buffer, 16));
|
|
this.buffer = undefined;
|
|
}
|
|
}
|
|
} else if (str[i] === "%") {
|
|
if (i > p) {
|
|
res += str.substring(p, i);
|
|
p = i;
|
|
}
|
|
this.buffer = "";
|
|
++p;
|
|
}
|
|
}
|
|
if (p < len && this.buffer === undefined) {
|
|
res += str.substring(p);
|
|
}
|
|
return res;
|
|
};
|
|
Decoder.prototype.reset = function() {
|
|
this.buffer = undefined;
|
|
};
|
|
module.exports = Decoder;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/types/urlencoded.js
|
|
var require_urlencoded = __commonJS((exports, module) => {
|
|
var UrlEncoded = function(boy, cfg) {
|
|
const limits = cfg.limits;
|
|
const parsedConType = cfg.parsedConType;
|
|
this.boy = boy;
|
|
this.fieldSizeLimit = getLimit(limits, "fieldSize", 1 * 1024 * 1024);
|
|
this.fieldNameSizeLimit = getLimit(limits, "fieldNameSize", 100);
|
|
this.fieldsLimit = getLimit(limits, "fields", Infinity);
|
|
let charset;
|
|
for (var i = 0, len = parsedConType.length;i < len; ++i) {
|
|
if (Array.isArray(parsedConType[i]) && RE_CHARSET.test(parsedConType[i][0])) {
|
|
charset = parsedConType[i][1].toLowerCase();
|
|
break;
|
|
}
|
|
}
|
|
if (charset === undefined) {
|
|
charset = cfg.defCharset || "utf8";
|
|
}
|
|
this.decoder = new Decoder;
|
|
this.charset = charset;
|
|
this._fields = 0;
|
|
this._state = "key";
|
|
this._checkingBytes = true;
|
|
this._bytesKey = 0;
|
|
this._bytesVal = 0;
|
|
this._key = "";
|
|
this._val = "";
|
|
this._keyTrunc = false;
|
|
this._valTrunc = false;
|
|
this._hitLimit = false;
|
|
};
|
|
var Decoder = require_Decoder();
|
|
var decodeText = require_decodeText();
|
|
var getLimit = require_getLimit();
|
|
var RE_CHARSET = /^charset$/i;
|
|
UrlEncoded.detect = /^application\/x-www-form-urlencoded/i;
|
|
UrlEncoded.prototype.write = function(data, cb) {
|
|
if (this._fields === this.fieldsLimit) {
|
|
if (!this.boy.hitFieldsLimit) {
|
|
this.boy.hitFieldsLimit = true;
|
|
this.boy.emit("fieldsLimit");
|
|
}
|
|
return cb();
|
|
}
|
|
let idxeq;
|
|
let idxamp;
|
|
let i;
|
|
let p = 0;
|
|
const len = data.length;
|
|
while (p < len) {
|
|
if (this._state === "key") {
|
|
idxeq = idxamp = undefined;
|
|
for (i = p;i < len; ++i) {
|
|
if (!this._checkingBytes) {
|
|
++p;
|
|
}
|
|
if (data[i] === 61) {
|
|
idxeq = i;
|
|
break;
|
|
} else if (data[i] === 38) {
|
|
idxamp = i;
|
|
break;
|
|
}
|
|
if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) {
|
|
this._hitLimit = true;
|
|
break;
|
|
} else if (this._checkingBytes) {
|
|
++this._bytesKey;
|
|
}
|
|
}
|
|
if (idxeq !== undefined) {
|
|
if (idxeq > p) {
|
|
this._key += this.decoder.write(data.toString("binary", p, idxeq));
|
|
}
|
|
this._state = "val";
|
|
this._hitLimit = false;
|
|
this._checkingBytes = true;
|
|
this._val = "";
|
|
this._bytesVal = 0;
|
|
this._valTrunc = false;
|
|
this.decoder.reset();
|
|
p = idxeq + 1;
|
|
} else if (idxamp !== undefined) {
|
|
++this._fields;
|
|
let key;
|
|
const keyTrunc = this._keyTrunc;
|
|
if (idxamp > p) {
|
|
key = this._key += this.decoder.write(data.toString("binary", p, idxamp));
|
|
} else {
|
|
key = this._key;
|
|
}
|
|
this._hitLimit = false;
|
|
this._checkingBytes = true;
|
|
this._key = "";
|
|
this._bytesKey = 0;
|
|
this._keyTrunc = false;
|
|
this.decoder.reset();
|
|
if (key.length) {
|
|
this.boy.emit("field", decodeText(key, "binary", this.charset), "", keyTrunc, false);
|
|
}
|
|
p = idxamp + 1;
|
|
if (this._fields === this.fieldsLimit) {
|
|
return cb();
|
|
}
|
|
} else if (this._hitLimit) {
|
|
if (i > p) {
|
|
this._key += this.decoder.write(data.toString("binary", p, i));
|
|
}
|
|
p = i;
|
|
if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) {
|
|
this._checkingBytes = false;
|
|
this._keyTrunc = true;
|
|
}
|
|
} else {
|
|
if (p < len) {
|
|
this._key += this.decoder.write(data.toString("binary", p));
|
|
}
|
|
p = len;
|
|
}
|
|
} else {
|
|
idxamp = undefined;
|
|
for (i = p;i < len; ++i) {
|
|
if (!this._checkingBytes) {
|
|
++p;
|
|
}
|
|
if (data[i] === 38) {
|
|
idxamp = i;
|
|
break;
|
|
}
|
|
if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) {
|
|
this._hitLimit = true;
|
|
break;
|
|
} else if (this._checkingBytes) {
|
|
++this._bytesVal;
|
|
}
|
|
}
|
|
if (idxamp !== undefined) {
|
|
++this._fields;
|
|
if (idxamp > p) {
|
|
this._val += this.decoder.write(data.toString("binary", p, idxamp));
|
|
}
|
|
this.boy.emit("field", decodeText(this._key, "binary", this.charset), decodeText(this._val, "binary", this.charset), this._keyTrunc, this._valTrunc);
|
|
this._state = "key";
|
|
this._hitLimit = false;
|
|
this._checkingBytes = true;
|
|
this._key = "";
|
|
this._bytesKey = 0;
|
|
this._keyTrunc = false;
|
|
this.decoder.reset();
|
|
p = idxamp + 1;
|
|
if (this._fields === this.fieldsLimit) {
|
|
return cb();
|
|
}
|
|
} else if (this._hitLimit) {
|
|
if (i > p) {
|
|
this._val += this.decoder.write(data.toString("binary", p, i));
|
|
}
|
|
p = i;
|
|
if (this._val === "" && this.fieldSizeLimit === 0 || (this._bytesVal = this._val.length) === this.fieldSizeLimit) {
|
|
this._checkingBytes = false;
|
|
this._valTrunc = true;
|
|
}
|
|
} else {
|
|
if (p < len) {
|
|
this._val += this.decoder.write(data.toString("binary", p));
|
|
}
|
|
p = len;
|
|
}
|
|
}
|
|
}
|
|
cb();
|
|
};
|
|
UrlEncoded.prototype.end = function() {
|
|
if (this.boy._done) {
|
|
return;
|
|
}
|
|
if (this._state === "key" && this._key.length > 0) {
|
|
this.boy.emit("field", decodeText(this._key, "binary", this.charset), "", this._keyTrunc, false);
|
|
} else if (this._state === "val") {
|
|
this.boy.emit("field", decodeText(this._key, "binary", this.charset), decodeText(this._val, "binary", this.charset), this._keyTrunc, this._valTrunc);
|
|
}
|
|
this.boy._done = true;
|
|
this.boy.emit("finish");
|
|
};
|
|
module.exports = UrlEncoded;
|
|
});
|
|
|
|
// node_modules/@fastify/busboy/lib/main.js
|
|
var require_main = __commonJS((exports, module) => {
|
|
var Busboy = function(opts) {
|
|
if (!(this instanceof Busboy)) {
|
|
return new Busboy(opts);
|
|
}
|
|
if (typeof opts !== "object") {
|
|
throw new TypeError("Busboy expected an options-Object.");
|
|
}
|
|
if (typeof opts.headers !== "object") {
|
|
throw new TypeError("Busboy expected an options-Object with headers-attribute.");
|
|
}
|
|
if (typeof opts.headers["content-type"] !== "string") {
|
|
throw new TypeError("Missing Content-Type-header.");
|
|
}
|
|
const {
|
|
headers,
|
|
...streamOptions
|
|
} = opts;
|
|
this.opts = {
|
|
autoDestroy: false,
|
|
...streamOptions
|
|
};
|
|
WritableStream.call(this, this.opts);
|
|
this._done = false;
|
|
this._parser = this.getParserByHeaders(headers);
|
|
this._finished = false;
|
|
};
|
|
var WritableStream = __require("node:stream").Writable;
|
|
var { inherits } = __require("node:util");
|
|
var Dicer = require_Dicer();
|
|
var MultipartParser = require_multipart();
|
|
var UrlencodedParser = require_urlencoded();
|
|
var parseParams = require_parseParams();
|
|
inherits(Busboy, WritableStream);
|
|
Busboy.prototype.emit = function(ev) {
|
|
if (ev === "finish") {
|
|
if (!this._done) {
|
|
this._parser?.end();
|
|
return;
|
|
} else if (this._finished) {
|
|
return;
|
|
}
|
|
this._finished = true;
|
|
}
|
|
WritableStream.prototype.emit.apply(this, arguments);
|
|
};
|
|
Busboy.prototype.getParserByHeaders = function(headers) {
|
|
const parsed = parseParams(headers["content-type"]);
|
|
const cfg = {
|
|
defCharset: this.opts.defCharset,
|
|
fileHwm: this.opts.fileHwm,
|
|
headers,
|
|
highWaterMark: this.opts.highWaterMark,
|
|
isPartAFile: this.opts.isPartAFile,
|
|
limits: this.opts.limits,
|
|
parsedConType: parsed,
|
|
preservePath: this.opts.preservePath
|
|
};
|
|
if (MultipartParser.detect.test(parsed[0])) {
|
|
return new MultipartParser(this, cfg);
|
|
}
|
|
if (UrlencodedParser.detect.test(parsed[0])) {
|
|
return new UrlencodedParser(this, cfg);
|
|
}
|
|
throw new Error("Unsupported Content-Type.");
|
|
};
|
|
Busboy.prototype._write = function(chunk, encoding, cb) {
|
|
this._parser.write(chunk, cb);
|
|
};
|
|
module.exports = Busboy;
|
|
module.exports.default = Busboy;
|
|
module.exports.Busboy = Busboy;
|
|
module.exports.Dicer = Dicer;
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/constants.js
|
|
var require_constants2 = __commonJS((exports, module) => {
|
|
var { MessageChannel, receiveMessageOnPort } = __require("worker_threads");
|
|
var corsSafeListedMethods = ["GET", "HEAD", "POST"];
|
|
var corsSafeListedMethodsSet = new Set(corsSafeListedMethods);
|
|
var nullBodyStatus = [101, 204, 205, 304];
|
|
var redirectStatus = [301, 302, 303, 307, 308];
|
|
var redirectStatusSet = new Set(redirectStatus);
|
|
var badPorts = [
|
|
"1",
|
|
"7",
|
|
"9",
|
|
"11",
|
|
"13",
|
|
"15",
|
|
"17",
|
|
"19",
|
|
"20",
|
|
"21",
|
|
"22",
|
|
"23",
|
|
"25",
|
|
"37",
|
|
"42",
|
|
"43",
|
|
"53",
|
|
"69",
|
|
"77",
|
|
"79",
|
|
"87",
|
|
"95",
|
|
"101",
|
|
"102",
|
|
"103",
|
|
"104",
|
|
"109",
|
|
"110",
|
|
"111",
|
|
"113",
|
|
"115",
|
|
"117",
|
|
"119",
|
|
"123",
|
|
"135",
|
|
"137",
|
|
"139",
|
|
"143",
|
|
"161",
|
|
"179",
|
|
"389",
|
|
"427",
|
|
"465",
|
|
"512",
|
|
"513",
|
|
"514",
|
|
"515",
|
|
"526",
|
|
"530",
|
|
"531",
|
|
"532",
|
|
"540",
|
|
"548",
|
|
"554",
|
|
"556",
|
|
"563",
|
|
"587",
|
|
"601",
|
|
"636",
|
|
"989",
|
|
"990",
|
|
"993",
|
|
"995",
|
|
"1719",
|
|
"1720",
|
|
"1723",
|
|
"2049",
|
|
"3659",
|
|
"4045",
|
|
"5060",
|
|
"5061",
|
|
"6000",
|
|
"6566",
|
|
"6665",
|
|
"6666",
|
|
"6667",
|
|
"6668",
|
|
"6669",
|
|
"6697",
|
|
"10080"
|
|
];
|
|
var badPortsSet = new Set(badPorts);
|
|
var referrerPolicy = [
|
|
"",
|
|
"no-referrer",
|
|
"no-referrer-when-downgrade",
|
|
"same-origin",
|
|
"origin",
|
|
"strict-origin",
|
|
"origin-when-cross-origin",
|
|
"strict-origin-when-cross-origin",
|
|
"unsafe-url"
|
|
];
|
|
var referrerPolicySet = new Set(referrerPolicy);
|
|
var requestRedirect = ["follow", "manual", "error"];
|
|
var safeMethods = ["GET", "HEAD", "OPTIONS", "TRACE"];
|
|
var safeMethodsSet = new Set(safeMethods);
|
|
var requestMode = ["navigate", "same-origin", "no-cors", "cors"];
|
|
var requestCredentials = ["omit", "same-origin", "include"];
|
|
var requestCache = [
|
|
"default",
|
|
"no-store",
|
|
"reload",
|
|
"no-cache",
|
|
"force-cache",
|
|
"only-if-cached"
|
|
];
|
|
var requestBodyHeader = [
|
|
"content-encoding",
|
|
"content-language",
|
|
"content-location",
|
|
"content-type",
|
|
"content-length"
|
|
];
|
|
var requestDuplex = [
|
|
"half"
|
|
];
|
|
var forbiddenMethods = ["CONNECT", "TRACE", "TRACK"];
|
|
var forbiddenMethodsSet = new Set(forbiddenMethods);
|
|
var subresource = [
|
|
"audio",
|
|
"audioworklet",
|
|
"font",
|
|
"image",
|
|
"manifest",
|
|
"paintworklet",
|
|
"script",
|
|
"style",
|
|
"track",
|
|
"video",
|
|
"xslt",
|
|
""
|
|
];
|
|
var subresourceSet = new Set(subresource);
|
|
var DOMException2 = globalThis.DOMException ?? (() => {
|
|
try {
|
|
atob("~");
|
|
} catch (err) {
|
|
return Object.getPrototypeOf(err).constructor;
|
|
}
|
|
})();
|
|
var channel;
|
|
var structuredClone = globalThis.structuredClone ?? function structuredClone(value, options = undefined) {
|
|
if (arguments.length === 0) {
|
|
throw new TypeError("missing argument");
|
|
}
|
|
if (!channel) {
|
|
channel = new MessageChannel;
|
|
}
|
|
channel.port1.unref();
|
|
channel.port2.unref();
|
|
channel.port1.postMessage(value, options?.transfer);
|
|
return receiveMessageOnPort(channel.port2).message;
|
|
};
|
|
module.exports = {
|
|
DOMException: DOMException2,
|
|
structuredClone,
|
|
subresource,
|
|
forbiddenMethods,
|
|
requestBodyHeader,
|
|
referrerPolicy,
|
|
requestRedirect,
|
|
requestMode,
|
|
requestCredentials,
|
|
requestCache,
|
|
redirectStatus,
|
|
corsSafeListedMethods,
|
|
nullBodyStatus,
|
|
safeMethods,
|
|
badPorts,
|
|
requestDuplex,
|
|
subresourceSet,
|
|
badPortsSet,
|
|
redirectStatusSet,
|
|
corsSafeListedMethodsSet,
|
|
safeMethodsSet,
|
|
forbiddenMethodsSet,
|
|
referrerPolicySet
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/global.js
|
|
var require_global = __commonJS((exports, module) => {
|
|
var getGlobalOrigin = function() {
|
|
return globalThis[globalOrigin];
|
|
};
|
|
var setGlobalOrigin = function(newOrigin) {
|
|
if (newOrigin === undefined) {
|
|
Object.defineProperty(globalThis, globalOrigin, {
|
|
value: undefined,
|
|
writable: true,
|
|
enumerable: false,
|
|
configurable: false
|
|
});
|
|
return;
|
|
}
|
|
const parsedURL = new URL(newOrigin);
|
|
if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") {
|
|
throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`);
|
|
}
|
|
Object.defineProperty(globalThis, globalOrigin, {
|
|
value: parsedURL,
|
|
writable: true,
|
|
enumerable: false,
|
|
configurable: false
|
|
});
|
|
};
|
|
var globalOrigin = Symbol.for("undici.globalOrigin.1");
|
|
module.exports = {
|
|
getGlobalOrigin,
|
|
setGlobalOrigin
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/util.js
|
|
var require_util2 = __commonJS((exports, module) => {
|
|
var responseURL = function(response) {
|
|
const urlList = response.urlList;
|
|
const length = urlList.length;
|
|
return length === 0 ? null : urlList[length - 1].toString();
|
|
};
|
|
var responseLocationURL = function(response, requestFragment) {
|
|
if (!redirectStatusSet.has(response.status)) {
|
|
return null;
|
|
}
|
|
let location = response.headersList.get("location");
|
|
if (location !== null && isValidHeaderValue(location)) {
|
|
location = new URL(location, responseURL(response));
|
|
}
|
|
if (location && !location.hash) {
|
|
location.hash = requestFragment;
|
|
}
|
|
return location;
|
|
};
|
|
var requestCurrentURL = function(request) {
|
|
return request.urlList[request.urlList.length - 1];
|
|
};
|
|
var requestBadPort = function(request) {
|
|
const url = requestCurrentURL(request);
|
|
if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {
|
|
return "blocked";
|
|
}
|
|
return "allowed";
|
|
};
|
|
var isErrorLike = function(object) {
|
|
return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException");
|
|
};
|
|
var isValidReasonPhrase = function(statusText) {
|
|
for (let i = 0;i < statusText.length; ++i) {
|
|
const c = statusText.charCodeAt(i);
|
|
if (!(c === 9 || c >= 32 && c <= 126 || c >= 128 && c <= 255)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
var isTokenCharCode = function(c) {
|
|
switch (c) {
|
|
case 34:
|
|
case 40:
|
|
case 41:
|
|
case 44:
|
|
case 47:
|
|
case 58:
|
|
case 59:
|
|
case 60:
|
|
case 61:
|
|
case 62:
|
|
case 63:
|
|
case 64:
|
|
case 91:
|
|
case 92:
|
|
case 93:
|
|
case 123:
|
|
case 125:
|
|
return false;
|
|
default:
|
|
return c >= 33 && c <= 126;
|
|
}
|
|
};
|
|
var isValidHTTPToken = function(characters) {
|
|
if (characters.length === 0) {
|
|
return false;
|
|
}
|
|
for (let i = 0;i < characters.length; ++i) {
|
|
if (!isTokenCharCode(characters.charCodeAt(i))) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
var isValidHeaderName = function(potentialValue) {
|
|
return isValidHTTPToken(potentialValue);
|
|
};
|
|
var isValidHeaderValue = function(potentialValue) {
|
|
if (potentialValue.startsWith("\t") || potentialValue.startsWith(" ") || potentialValue.endsWith("\t") || potentialValue.endsWith(" ")) {
|
|
return false;
|
|
}
|
|
if (potentialValue.includes("\0") || potentialValue.includes("\r") || potentialValue.includes("\n")) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
var setRequestReferrerPolicyOnRedirect = function(request, actualResponse) {
|
|
const { headersList } = actualResponse;
|
|
const policyHeader = (headersList.get("referrer-policy") ?? "").split(",");
|
|
let policy = "";
|
|
if (policyHeader.length > 0) {
|
|
for (let i = policyHeader.length;i !== 0; i--) {
|
|
const token = policyHeader[i - 1].trim();
|
|
if (referrerPolicyTokens.has(token)) {
|
|
policy = token;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (policy !== "") {
|
|
request.referrerPolicy = policy;
|
|
}
|
|
};
|
|
var crossOriginResourcePolicyCheck = function() {
|
|
return "allowed";
|
|
};
|
|
var corsCheck = function() {
|
|
return "success";
|
|
};
|
|
var TAOCheck = function() {
|
|
return "success";
|
|
};
|
|
var appendFetchMetadata = function(httpRequest) {
|
|
let header = null;
|
|
header = httpRequest.mode;
|
|
httpRequest.headersList.set("sec-fetch-mode", header);
|
|
};
|
|
var appendRequestOriginHeader = function(request) {
|
|
let serializedOrigin = request.origin;
|
|
if (request.responseTainting === "cors" || request.mode === "websocket") {
|
|
if (serializedOrigin) {
|
|
request.headersList.append("origin", serializedOrigin);
|
|
}
|
|
} else if (request.method !== "GET" && request.method !== "HEAD") {
|
|
switch (request.referrerPolicy) {
|
|
case "no-referrer":
|
|
serializedOrigin = null;
|
|
break;
|
|
case "no-referrer-when-downgrade":
|
|
case "strict-origin":
|
|
case "strict-origin-when-cross-origin":
|
|
if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {
|
|
serializedOrigin = null;
|
|
}
|
|
break;
|
|
case "same-origin":
|
|
if (!sameOrigin(request, requestCurrentURL(request))) {
|
|
serializedOrigin = null;
|
|
}
|
|
break;
|
|
default:
|
|
}
|
|
if (serializedOrigin) {
|
|
request.headersList.append("origin", serializedOrigin);
|
|
}
|
|
}
|
|
};
|
|
var coarsenedSharedCurrentTime = function(crossOriginIsolatedCapability) {
|
|
return performance2.now();
|
|
};
|
|
var createOpaqueTimingInfo = function(timingInfo) {
|
|
return {
|
|
startTime: timingInfo.startTime ?? 0,
|
|
redirectStartTime: 0,
|
|
redirectEndTime: 0,
|
|
postRedirectStartTime: timingInfo.startTime ?? 0,
|
|
finalServiceWorkerStartTime: 0,
|
|
finalNetworkResponseStartTime: 0,
|
|
finalNetworkRequestStartTime: 0,
|
|
endTime: 0,
|
|
encodedBodySize: 0,
|
|
decodedBodySize: 0,
|
|
finalConnectionTimingInfo: null
|
|
};
|
|
};
|
|
var makePolicyContainer = function() {
|
|
return {
|
|
referrerPolicy: "strict-origin-when-cross-origin"
|
|
};
|
|
};
|
|
var clonePolicyContainer = function(policyContainer) {
|
|
return {
|
|
referrerPolicy: policyContainer.referrerPolicy
|
|
};
|
|
};
|
|
var determineRequestsReferrer = function(request) {
|
|
const policy = request.referrerPolicy;
|
|
assert(policy);
|
|
let referrerSource = null;
|
|
if (request.referrer === "client") {
|
|
const globalOrigin = getGlobalOrigin();
|
|
if (!globalOrigin || globalOrigin.origin === "null") {
|
|
return "no-referrer";
|
|
}
|
|
referrerSource = new URL(globalOrigin);
|
|
} else if (request.referrer instanceof URL) {
|
|
referrerSource = request.referrer;
|
|
}
|
|
let referrerURL = stripURLForReferrer(referrerSource);
|
|
const referrerOrigin = stripURLForReferrer(referrerSource, true);
|
|
if (referrerURL.toString().length > 4096) {
|
|
referrerURL = referrerOrigin;
|
|
}
|
|
const areSameOrigin = sameOrigin(request, referrerURL);
|
|
const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url);
|
|
switch (policy) {
|
|
case "origin":
|
|
return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true);
|
|
case "unsafe-url":
|
|
return referrerURL;
|
|
case "same-origin":
|
|
return areSameOrigin ? referrerOrigin : "no-referrer";
|
|
case "origin-when-cross-origin":
|
|
return areSameOrigin ? referrerURL : referrerOrigin;
|
|
case "strict-origin-when-cross-origin": {
|
|
const currentURL = requestCurrentURL(request);
|
|
if (sameOrigin(referrerURL, currentURL)) {
|
|
return referrerURL;
|
|
}
|
|
if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {
|
|
return "no-referrer";
|
|
}
|
|
return referrerOrigin;
|
|
}
|
|
case "strict-origin":
|
|
case "no-referrer-when-downgrade":
|
|
default:
|
|
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
|
}
|
|
};
|
|
var stripURLForReferrer = function(url, originOnly) {
|
|
assert(url instanceof URL);
|
|
if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") {
|
|
return "no-referrer";
|
|
}
|
|
url.username = "";
|
|
url.password = "";
|
|
url.hash = "";
|
|
if (originOnly) {
|
|
url.pathname = "";
|
|
url.search = "";
|
|
}
|
|
return url;
|
|
};
|
|
var isURLPotentiallyTrustworthy = function(url) {
|
|
if (!(url instanceof URL)) {
|
|
return false;
|
|
}
|
|
if (url.href === "about:blank" || url.href === "about:srcdoc") {
|
|
return true;
|
|
}
|
|
if (url.protocol === "data:")
|
|
return true;
|
|
if (url.protocol === "file:")
|
|
return true;
|
|
return isOriginPotentiallyTrustworthy(url.origin);
|
|
function isOriginPotentiallyTrustworthy(origin) {
|
|
if (origin == null || origin === "null")
|
|
return false;
|
|
const originAsURL = new URL(origin);
|
|
if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") {
|
|
return true;
|
|
}
|
|
if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || (originAsURL.hostname === "localhost" || originAsURL.hostname.includes("localhost.")) || originAsURL.hostname.endsWith(".localhost")) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
};
|
|
var bytesMatch = function(bytes, metadataList) {
|
|
if (crypto === undefined) {
|
|
return true;
|
|
}
|
|
const parsedMetadata = parseMetadata(metadataList);
|
|
if (parsedMetadata === "no metadata") {
|
|
return true;
|
|
}
|
|
if (parsedMetadata.length === 0) {
|
|
return true;
|
|
}
|
|
const strongest = getStrongestMetadata(parsedMetadata);
|
|
const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest);
|
|
for (const item of metadata) {
|
|
const algorithm = item.algo;
|
|
const expectedValue = item.hash;
|
|
let actualValue = crypto.createHash(algorithm).update(bytes).digest("base64");
|
|
if (actualValue[actualValue.length - 1] === "=") {
|
|
if (actualValue[actualValue.length - 2] === "=") {
|
|
actualValue = actualValue.slice(0, -2);
|
|
} else {
|
|
actualValue = actualValue.slice(0, -1);
|
|
}
|
|
}
|
|
if (compareBase64Mixed(actualValue, expectedValue)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
var parseMetadata = function(metadata) {
|
|
const result = [];
|
|
let empty = true;
|
|
for (const token of metadata.split(" ")) {
|
|
empty = false;
|
|
const parsedToken = parseHashWithOptions.exec(token);
|
|
if (parsedToken === null || parsedToken.groups === undefined || parsedToken.groups.algo === undefined) {
|
|
continue;
|
|
}
|
|
const algorithm = parsedToken.groups.algo.toLowerCase();
|
|
if (supportedHashes.includes(algorithm)) {
|
|
result.push(parsedToken.groups);
|
|
}
|
|
}
|
|
if (empty === true) {
|
|
return "no metadata";
|
|
}
|
|
return result;
|
|
};
|
|
var getStrongestMetadata = function(metadataList) {
|
|
let algorithm = metadataList[0].algo;
|
|
if (algorithm[3] === "5") {
|
|
return algorithm;
|
|
}
|
|
for (let i = 1;i < metadataList.length; ++i) {
|
|
const metadata = metadataList[i];
|
|
if (metadata.algo[3] === "5") {
|
|
algorithm = "sha512";
|
|
break;
|
|
} else if (algorithm[3] === "3") {
|
|
continue;
|
|
} else if (metadata.algo[3] === "3") {
|
|
algorithm = "sha384";
|
|
}
|
|
}
|
|
return algorithm;
|
|
};
|
|
var filterMetadataListByAlgorithm = function(metadataList, algorithm) {
|
|
if (metadataList.length === 1) {
|
|
return metadataList;
|
|
}
|
|
let pos = 0;
|
|
for (let i = 0;i < metadataList.length; ++i) {
|
|
if (metadataList[i].algo === algorithm) {
|
|
metadataList[pos++] = metadataList[i];
|
|
}
|
|
}
|
|
metadataList.length = pos;
|
|
return metadataList;
|
|
};
|
|
var compareBase64Mixed = function(actualValue, expectedValue) {
|
|
if (actualValue.length !== expectedValue.length) {
|
|
return false;
|
|
}
|
|
for (let i = 0;i < actualValue.length; ++i) {
|
|
if (actualValue[i] !== expectedValue[i]) {
|
|
if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") {
|
|
continue;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
var tryUpgradeRequestToAPotentiallyTrustworthyURL = function(request) {
|
|
};
|
|
var sameOrigin = function(A, B) {
|
|
if (A.origin === B.origin && A.origin === "null") {
|
|
return true;
|
|
}
|
|
if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
var createDeferredPromise = function() {
|
|
let res;
|
|
let rej;
|
|
const promise = new Promise((resolve, reject) => {
|
|
res = resolve;
|
|
rej = reject;
|
|
});
|
|
return { promise, resolve: res, reject: rej };
|
|
};
|
|
var isAborted = function(fetchParams) {
|
|
return fetchParams.controller.state === "aborted";
|
|
};
|
|
var isCancelled = function(fetchParams) {
|
|
return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated";
|
|
};
|
|
var normalizeMethod = function(method) {
|
|
return normalizeMethodRecord[method.toLowerCase()] ?? method;
|
|
};
|
|
var serializeJavascriptValueToJSONString = function(value) {
|
|
const result = JSON.stringify(value);
|
|
if (result === undefined) {
|
|
throw new TypeError("Value is not JSON serializable");
|
|
}
|
|
assert(typeof result === "string");
|
|
return result;
|
|
};
|
|
var makeIterator = function(iterator, name, kind) {
|
|
const object = {
|
|
index: 0,
|
|
kind,
|
|
target: iterator
|
|
};
|
|
const i = {
|
|
next() {
|
|
if (Object.getPrototypeOf(this) !== i) {
|
|
throw new TypeError(`'next' called on an object that does not implement interface ${name} Iterator.`);
|
|
}
|
|
const { index, kind: kind2, target } = object;
|
|
const values = target();
|
|
const len = values.length;
|
|
if (index >= len) {
|
|
return { value: undefined, done: true };
|
|
}
|
|
const pair = values[index];
|
|
object.index = index + 1;
|
|
return iteratorResult(pair, kind2);
|
|
},
|
|
[Symbol.toStringTag]: `${name} Iterator`
|
|
};
|
|
Object.setPrototypeOf(i, esIteratorPrototype);
|
|
return Object.setPrototypeOf({}, i);
|
|
};
|
|
var iteratorResult = function(pair, kind) {
|
|
let result;
|
|
switch (kind) {
|
|
case "key": {
|
|
result = pair[0];
|
|
break;
|
|
}
|
|
case "value": {
|
|
result = pair[1];
|
|
break;
|
|
}
|
|
case "key+value": {
|
|
result = pair;
|
|
break;
|
|
}
|
|
}
|
|
return { value: result, done: false };
|
|
};
|
|
async function fullyReadBody(body, processBody, processBodyError) {
|
|
const successSteps = processBody;
|
|
const errorSteps = processBodyError;
|
|
let reader;
|
|
try {
|
|
reader = body.stream.getReader();
|
|
} catch (e) {
|
|
errorSteps(e);
|
|
return;
|
|
}
|
|
try {
|
|
const result = await readAllBytes(reader);
|
|
successSteps(result);
|
|
} catch (e) {
|
|
errorSteps(e);
|
|
}
|
|
}
|
|
var isReadableStreamLike = function(stream) {
|
|
if (!ReadableStream2) {
|
|
ReadableStream2 = __require("stream/web").ReadableStream;
|
|
}
|
|
return stream instanceof ReadableStream2 || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function";
|
|
};
|
|
var isomorphicDecode = function(input) {
|
|
if (input.length < MAXIMUM_ARGUMENT_LENGTH) {
|
|
return String.fromCharCode(...input);
|
|
}
|
|
return input.reduce((previous, current) => previous + String.fromCharCode(current), "");
|
|
};
|
|
var readableStreamClose = function(controller) {
|
|
try {
|
|
controller.close();
|
|
} catch (err) {
|
|
if (!err.message.includes("Controller is already closed")) {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
var isomorphicEncode = function(input) {
|
|
for (let i = 0;i < input.length; i++) {
|
|
assert(input.charCodeAt(i) <= 255);
|
|
}
|
|
return input;
|
|
};
|
|
async function readAllBytes(reader) {
|
|
const bytes = [];
|
|
let byteLength = 0;
|
|
while (true) {
|
|
const { done, value: chunk } = await reader.read();
|
|
if (done) {
|
|
return Buffer.concat(bytes, byteLength);
|
|
}
|
|
if (!isUint8Array(chunk)) {
|
|
throw new TypeError("Received non-Uint8Array chunk");
|
|
}
|
|
bytes.push(chunk);
|
|
byteLength += chunk.length;
|
|
}
|
|
}
|
|
var urlIsLocal = function(url) {
|
|
assert("protocol" in url);
|
|
const protocol = url.protocol;
|
|
return protocol === "about:" || protocol === "blob:" || protocol === "data:";
|
|
};
|
|
var urlHasHttpsScheme = function(url) {
|
|
if (typeof url === "string") {
|
|
return url.startsWith("https:");
|
|
}
|
|
return url.protocol === "https:";
|
|
};
|
|
var urlIsHttpHttpsScheme = function(url) {
|
|
assert("protocol" in url);
|
|
const protocol = url.protocol;
|
|
return protocol === "http:" || protocol === "https:";
|
|
};
|
|
var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants2();
|
|
var { getGlobalOrigin } = require_global();
|
|
var { performance: performance2 } = __require("perf_hooks");
|
|
var { isBlobLike, toUSVString, ReadableStreamFrom } = require_util();
|
|
var assert = __require("assert");
|
|
var { isUint8Array } = __require("util/types");
|
|
var supportedHashes = [];
|
|
var crypto;
|
|
try {
|
|
crypto = __require("crypto");
|
|
const possibleRelevantHashes = ["sha256", "sha384", "sha512"];
|
|
supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash));
|
|
} catch {
|
|
}
|
|
var parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;
|
|
var normalizeMethodRecord = {
|
|
delete: "DELETE",
|
|
DELETE: "DELETE",
|
|
get: "GET",
|
|
GET: "GET",
|
|
head: "HEAD",
|
|
HEAD: "HEAD",
|
|
options: "OPTIONS",
|
|
OPTIONS: "OPTIONS",
|
|
post: "POST",
|
|
POST: "POST",
|
|
put: "PUT",
|
|
PUT: "PUT"
|
|
};
|
|
Object.setPrototypeOf(normalizeMethodRecord, null);
|
|
var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
|
|
var ReadableStream2 = globalThis.ReadableStream;
|
|
var MAXIMUM_ARGUMENT_LENGTH = 65535;
|
|
var hasOwn = Object.hasOwn || ((dict, key) => Object.prototype.hasOwnProperty.call(dict, key));
|
|
module.exports = {
|
|
isAborted,
|
|
isCancelled,
|
|
createDeferredPromise,
|
|
ReadableStreamFrom,
|
|
toUSVString,
|
|
tryUpgradeRequestToAPotentiallyTrustworthyURL,
|
|
coarsenedSharedCurrentTime,
|
|
determineRequestsReferrer,
|
|
makePolicyContainer,
|
|
clonePolicyContainer,
|
|
appendFetchMetadata,
|
|
appendRequestOriginHeader,
|
|
TAOCheck,
|
|
corsCheck,
|
|
crossOriginResourcePolicyCheck,
|
|
createOpaqueTimingInfo,
|
|
setRequestReferrerPolicyOnRedirect,
|
|
isValidHTTPToken,
|
|
requestBadPort,
|
|
requestCurrentURL,
|
|
responseURL,
|
|
responseLocationURL,
|
|
isBlobLike,
|
|
isURLPotentiallyTrustworthy,
|
|
isValidReasonPhrase,
|
|
sameOrigin,
|
|
normalizeMethod,
|
|
serializeJavascriptValueToJSONString,
|
|
makeIterator,
|
|
isValidHeaderName,
|
|
isValidHeaderValue,
|
|
hasOwn,
|
|
isErrorLike,
|
|
fullyReadBody,
|
|
bytesMatch,
|
|
isReadableStreamLike,
|
|
readableStreamClose,
|
|
isomorphicEncode,
|
|
isomorphicDecode,
|
|
urlIsLocal,
|
|
urlHasHttpsScheme,
|
|
urlIsHttpHttpsScheme,
|
|
readAllBytes,
|
|
normalizeMethodRecord,
|
|
parseMetadata
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/symbols.js
|
|
var require_symbols2 = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
kUrl: Symbol("url"),
|
|
kHeaders: Symbol("headers"),
|
|
kSignal: Symbol("signal"),
|
|
kState: Symbol("state"),
|
|
kGuard: Symbol("guard"),
|
|
kRealm: Symbol("realm")
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/webidl.js
|
|
var require_webidl = __commonJS((exports, module) => {
|
|
var { types } = __require("util");
|
|
var { hasOwn, toUSVString } = require_util2();
|
|
var webidl = {};
|
|
webidl.converters = {};
|
|
webidl.util = {};
|
|
webidl.errors = {};
|
|
webidl.errors.exception = function(message) {
|
|
return new TypeError(`${message.header}: ${message.message}`);
|
|
};
|
|
webidl.errors.conversionFailed = function(context) {
|
|
const plural = context.types.length === 1 ? "" : " one of";
|
|
const message = `${context.argument} could not be converted to` + `${plural}: ${context.types.join(", ")}.`;
|
|
return webidl.errors.exception({
|
|
header: context.prefix,
|
|
message
|
|
});
|
|
};
|
|
webidl.errors.invalidArgument = function(context) {
|
|
return webidl.errors.exception({
|
|
header: context.prefix,
|
|
message: `"${context.value}" is an invalid ${context.type}.`
|
|
});
|
|
};
|
|
webidl.brandCheck = function(V, I, opts = undefined) {
|
|
if (opts?.strict !== false && !(V instanceof I)) {
|
|
throw new TypeError("Illegal invocation");
|
|
} else {
|
|
return V?.[Symbol.toStringTag] === I.prototype[Symbol.toStringTag];
|
|
}
|
|
};
|
|
webidl.argumentLengthCheck = function({ length }, min, ctx) {
|
|
if (length < min) {
|
|
throw webidl.errors.exception({
|
|
message: `${min} argument${min !== 1 ? "s" : ""} required, ` + `but${length ? " only" : ""} ${length} found.`,
|
|
...ctx
|
|
});
|
|
}
|
|
};
|
|
webidl.illegalConstructor = function() {
|
|
throw webidl.errors.exception({
|
|
header: "TypeError",
|
|
message: "Illegal constructor"
|
|
});
|
|
};
|
|
webidl.util.Type = function(V) {
|
|
switch (typeof V) {
|
|
case "undefined":
|
|
return "Undefined";
|
|
case "boolean":
|
|
return "Boolean";
|
|
case "string":
|
|
return "String";
|
|
case "symbol":
|
|
return "Symbol";
|
|
case "number":
|
|
return "Number";
|
|
case "bigint":
|
|
return "BigInt";
|
|
case "function":
|
|
case "object": {
|
|
if (V === null) {
|
|
return "Null";
|
|
}
|
|
return "Object";
|
|
}
|
|
}
|
|
};
|
|
webidl.util.ConvertToInt = function(V, bitLength, signedness, opts = {}) {
|
|
let upperBound;
|
|
let lowerBound;
|
|
if (bitLength === 64) {
|
|
upperBound = Math.pow(2, 53) - 1;
|
|
if (signedness === "unsigned") {
|
|
lowerBound = 0;
|
|
} else {
|
|
lowerBound = Math.pow(-2, 53) + 1;
|
|
}
|
|
} else if (signedness === "unsigned") {
|
|
lowerBound = 0;
|
|
upperBound = Math.pow(2, bitLength) - 1;
|
|
} else {
|
|
lowerBound = Math.pow(-2, bitLength) - 1;
|
|
upperBound = Math.pow(2, bitLength - 1) - 1;
|
|
}
|
|
let x = Number(V);
|
|
if (x === 0) {
|
|
x = 0;
|
|
}
|
|
if (opts.enforceRange === true) {
|
|
if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) {
|
|
throw webidl.errors.exception({
|
|
header: "Integer conversion",
|
|
message: `Could not convert ${V} to an integer.`
|
|
});
|
|
}
|
|
x = webidl.util.IntegerPart(x);
|
|
if (x < lowerBound || x > upperBound) {
|
|
throw webidl.errors.exception({
|
|
header: "Integer conversion",
|
|
message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`
|
|
});
|
|
}
|
|
return x;
|
|
}
|
|
if (!Number.isNaN(x) && opts.clamp === true) {
|
|
x = Math.min(Math.max(x, lowerBound), upperBound);
|
|
if (Math.floor(x) % 2 === 0) {
|
|
x = Math.floor(x);
|
|
} else {
|
|
x = Math.ceil(x);
|
|
}
|
|
return x;
|
|
}
|
|
if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) {
|
|
return 0;
|
|
}
|
|
x = webidl.util.IntegerPart(x);
|
|
x = x % Math.pow(2, bitLength);
|
|
if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) {
|
|
return x - Math.pow(2, bitLength);
|
|
}
|
|
return x;
|
|
};
|
|
webidl.util.IntegerPart = function(n) {
|
|
const r = Math.floor(Math.abs(n));
|
|
if (n < 0) {
|
|
return -1 * r;
|
|
}
|
|
return r;
|
|
};
|
|
webidl.sequenceConverter = function(converter) {
|
|
return (V) => {
|
|
if (webidl.util.Type(V) !== "Object") {
|
|
throw webidl.errors.exception({
|
|
header: "Sequence",
|
|
message: `Value of type ${webidl.util.Type(V)} is not an Object.`
|
|
});
|
|
}
|
|
const method = V?.[Symbol.iterator]?.();
|
|
const seq = [];
|
|
if (method === undefined || typeof method.next !== "function") {
|
|
throw webidl.errors.exception({
|
|
header: "Sequence",
|
|
message: "Object is not an iterator."
|
|
});
|
|
}
|
|
while (true) {
|
|
const { done, value } = method.next();
|
|
if (done) {
|
|
break;
|
|
}
|
|
seq.push(converter(value));
|
|
}
|
|
return seq;
|
|
};
|
|
};
|
|
webidl.recordConverter = function(keyConverter, valueConverter) {
|
|
return (O) => {
|
|
if (webidl.util.Type(O) !== "Object") {
|
|
throw webidl.errors.exception({
|
|
header: "Record",
|
|
message: `Value of type ${webidl.util.Type(O)} is not an Object.`
|
|
});
|
|
}
|
|
const result = {};
|
|
if (!types.isProxy(O)) {
|
|
const keys2 = Object.keys(O);
|
|
for (const key of keys2) {
|
|
const typedKey = keyConverter(key);
|
|
const typedValue = valueConverter(O[key]);
|
|
result[typedKey] = typedValue;
|
|
}
|
|
return result;
|
|
}
|
|
const keys = Reflect.ownKeys(O);
|
|
for (const key of keys) {
|
|
const desc = Reflect.getOwnPropertyDescriptor(O, key);
|
|
if (desc?.enumerable) {
|
|
const typedKey = keyConverter(key);
|
|
const typedValue = valueConverter(O[key]);
|
|
result[typedKey] = typedValue;
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
};
|
|
webidl.interfaceConverter = function(i) {
|
|
return (V, opts = {}) => {
|
|
if (opts.strict !== false && !(V instanceof i)) {
|
|
throw webidl.errors.exception({
|
|
header: i.name,
|
|
message: `Expected ${V} to be an instance of ${i.name}.`
|
|
});
|
|
}
|
|
return V;
|
|
};
|
|
};
|
|
webidl.dictionaryConverter = function(converters) {
|
|
return (dictionary) => {
|
|
const type = webidl.util.Type(dictionary);
|
|
const dict = {};
|
|
if (type === "Null" || type === "Undefined") {
|
|
return dict;
|
|
} else if (type !== "Object") {
|
|
throw webidl.errors.exception({
|
|
header: "Dictionary",
|
|
message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`
|
|
});
|
|
}
|
|
for (const options of converters) {
|
|
const { key, defaultValue, required, converter } = options;
|
|
if (required === true) {
|
|
if (!hasOwn(dictionary, key)) {
|
|
throw webidl.errors.exception({
|
|
header: "Dictionary",
|
|
message: `Missing required key "${key}".`
|
|
});
|
|
}
|
|
}
|
|
let value = dictionary[key];
|
|
const hasDefault = hasOwn(options, "defaultValue");
|
|
if (hasDefault && value !== null) {
|
|
value = value ?? defaultValue;
|
|
}
|
|
if (required || hasDefault || value !== undefined) {
|
|
value = converter(value);
|
|
if (options.allowedValues && !options.allowedValues.includes(value)) {
|
|
throw webidl.errors.exception({
|
|
header: "Dictionary",
|
|
message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.`
|
|
});
|
|
}
|
|
dict[key] = value;
|
|
}
|
|
}
|
|
return dict;
|
|
};
|
|
};
|
|
webidl.nullableConverter = function(converter) {
|
|
return (V) => {
|
|
if (V === null) {
|
|
return V;
|
|
}
|
|
return converter(V);
|
|
};
|
|
};
|
|
webidl.converters.DOMString = function(V, opts = {}) {
|
|
if (V === null && opts.legacyNullToEmptyString) {
|
|
return "";
|
|
}
|
|
if (typeof V === "symbol") {
|
|
throw new TypeError("Could not convert argument of type symbol to string.");
|
|
}
|
|
return String(V);
|
|
};
|
|
webidl.converters.ByteString = function(V) {
|
|
const x = webidl.converters.DOMString(V);
|
|
for (let index = 0;index < x.length; index++) {
|
|
if (x.charCodeAt(index) > 255) {
|
|
throw new TypeError("Cannot convert argument to a ByteString because the character at " + `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.`);
|
|
}
|
|
}
|
|
return x;
|
|
};
|
|
webidl.converters.USVString = toUSVString;
|
|
webidl.converters.boolean = function(V) {
|
|
const x = Boolean(V);
|
|
return x;
|
|
};
|
|
webidl.converters.any = function(V) {
|
|
return V;
|
|
};
|
|
webidl.converters["long long"] = function(V) {
|
|
const x = webidl.util.ConvertToInt(V, 64, "signed");
|
|
return x;
|
|
};
|
|
webidl.converters["unsigned long long"] = function(V) {
|
|
const x = webidl.util.ConvertToInt(V, 64, "unsigned");
|
|
return x;
|
|
};
|
|
webidl.converters["unsigned long"] = function(V) {
|
|
const x = webidl.util.ConvertToInt(V, 32, "unsigned");
|
|
return x;
|
|
};
|
|
webidl.converters["unsigned short"] = function(V, opts) {
|
|
const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts);
|
|
return x;
|
|
};
|
|
webidl.converters.ArrayBuffer = function(V, opts = {}) {
|
|
if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) {
|
|
throw webidl.errors.conversionFailed({
|
|
prefix: `${V}`,
|
|
argument: `${V}`,
|
|
types: ["ArrayBuffer"]
|
|
});
|
|
}
|
|
if (opts.allowShared === false && types.isSharedArrayBuffer(V)) {
|
|
throw webidl.errors.exception({
|
|
header: "ArrayBuffer",
|
|
message: "SharedArrayBuffer is not allowed."
|
|
});
|
|
}
|
|
return V;
|
|
};
|
|
webidl.converters.TypedArray = function(V, T, opts = {}) {
|
|
if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) {
|
|
throw webidl.errors.conversionFailed({
|
|
prefix: `${T.name}`,
|
|
argument: `${V}`,
|
|
types: [T.name]
|
|
});
|
|
}
|
|
if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
|
|
throw webidl.errors.exception({
|
|
header: "ArrayBuffer",
|
|
message: "SharedArrayBuffer is not allowed."
|
|
});
|
|
}
|
|
return V;
|
|
};
|
|
webidl.converters.DataView = function(V, opts = {}) {
|
|
if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) {
|
|
throw webidl.errors.exception({
|
|
header: "DataView",
|
|
message: "Object is not a DataView."
|
|
});
|
|
}
|
|
if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
|
|
throw webidl.errors.exception({
|
|
header: "ArrayBuffer",
|
|
message: "SharedArrayBuffer is not allowed."
|
|
});
|
|
}
|
|
return V;
|
|
};
|
|
webidl.converters.BufferSource = function(V, opts = {}) {
|
|
if (types.isAnyArrayBuffer(V)) {
|
|
return webidl.converters.ArrayBuffer(V, opts);
|
|
}
|
|
if (types.isTypedArray(V)) {
|
|
return webidl.converters.TypedArray(V, V.constructor);
|
|
}
|
|
if (types.isDataView(V)) {
|
|
return webidl.converters.DataView(V, opts);
|
|
}
|
|
throw new TypeError(`Could not convert ${V} to a BufferSource.`);
|
|
};
|
|
webidl.converters["sequence<ByteString>"] = webidl.sequenceConverter(webidl.converters.ByteString);
|
|
webidl.converters["sequence<sequence<ByteString>>"] = webidl.sequenceConverter(webidl.converters["sequence<ByteString>"]);
|
|
webidl.converters["record<ByteString, ByteString>"] = webidl.recordConverter(webidl.converters.ByteString, webidl.converters.ByteString);
|
|
module.exports = {
|
|
webidl
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/dataURL.js
|
|
var require_dataURL = __commonJS((exports, module) => {
|
|
var dataURLProcessor = function(dataURL) {
|
|
assert(dataURL.protocol === "data:");
|
|
let input = URLSerializer(dataURL, true);
|
|
input = input.slice(5);
|
|
const position = { position: 0 };
|
|
let mimeType = collectASequenceOfCodePointsFast(",", input, position);
|
|
const mimeTypeLength = mimeType.length;
|
|
mimeType = removeASCIIWhitespace(mimeType, true, true);
|
|
if (position.position >= input.length) {
|
|
return "failure";
|
|
}
|
|
position.position++;
|
|
const encodedBody = input.slice(mimeTypeLength + 1);
|
|
let body = stringPercentDecode(encodedBody);
|
|
if (/;(\u0020){0,}base64$/i.test(mimeType)) {
|
|
const stringBody = isomorphicDecode(body);
|
|
body = forgivingBase64(stringBody);
|
|
if (body === "failure") {
|
|
return "failure";
|
|
}
|
|
mimeType = mimeType.slice(0, -6);
|
|
mimeType = mimeType.replace(/(\u0020)+$/, "");
|
|
mimeType = mimeType.slice(0, -1);
|
|
}
|
|
if (mimeType.startsWith(";")) {
|
|
mimeType = "text/plain" + mimeType;
|
|
}
|
|
let mimeTypeRecord = parseMIMEType(mimeType);
|
|
if (mimeTypeRecord === "failure") {
|
|
mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII");
|
|
}
|
|
return { mimeType: mimeTypeRecord, body };
|
|
};
|
|
var URLSerializer = function(url, excludeFragment = false) {
|
|
if (!excludeFragment) {
|
|
return url.href;
|
|
}
|
|
const href = url.href;
|
|
const hashLength = url.hash.length;
|
|
return hashLength === 0 ? href : href.substring(0, href.length - hashLength);
|
|
};
|
|
var collectASequenceOfCodePoints = function(condition, input, position) {
|
|
let result = "";
|
|
while (position.position < input.length && condition(input[position.position])) {
|
|
result += input[position.position];
|
|
position.position++;
|
|
}
|
|
return result;
|
|
};
|
|
var collectASequenceOfCodePointsFast = function(char, input, position) {
|
|
const idx = input.indexOf(char, position.position);
|
|
const start = position.position;
|
|
if (idx === -1) {
|
|
position.position = input.length;
|
|
return input.slice(start);
|
|
}
|
|
position.position = idx;
|
|
return input.slice(start, position.position);
|
|
};
|
|
var stringPercentDecode = function(input) {
|
|
const bytes = encoder.encode(input);
|
|
return percentDecode(bytes);
|
|
};
|
|
var percentDecode = function(input) {
|
|
const output = [];
|
|
for (let i = 0;i < input.length; i++) {
|
|
const byte = input[i];
|
|
if (byte !== 37) {
|
|
output.push(byte);
|
|
} else if (byte === 37 && !/^[0-9A-Fa-f]{2}$/i.test(String.fromCharCode(input[i + 1], input[i + 2]))) {
|
|
output.push(37);
|
|
} else {
|
|
const nextTwoBytes = String.fromCharCode(input[i + 1], input[i + 2]);
|
|
const bytePoint = Number.parseInt(nextTwoBytes, 16);
|
|
output.push(bytePoint);
|
|
i += 2;
|
|
}
|
|
}
|
|
return Uint8Array.from(output);
|
|
};
|
|
var parseMIMEType = function(input) {
|
|
input = removeHTTPWhitespace(input, true, true);
|
|
const position = { position: 0 };
|
|
const type = collectASequenceOfCodePointsFast("/", input, position);
|
|
if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {
|
|
return "failure";
|
|
}
|
|
if (position.position > input.length) {
|
|
return "failure";
|
|
}
|
|
position.position++;
|
|
let subtype = collectASequenceOfCodePointsFast(";", input, position);
|
|
subtype = removeHTTPWhitespace(subtype, false, true);
|
|
if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {
|
|
return "failure";
|
|
}
|
|
const typeLowercase = type.toLowerCase();
|
|
const subtypeLowercase = subtype.toLowerCase();
|
|
const mimeType = {
|
|
type: typeLowercase,
|
|
subtype: subtypeLowercase,
|
|
parameters: new Map,
|
|
essence: `${typeLowercase}/${subtypeLowercase}`
|
|
};
|
|
while (position.position < input.length) {
|
|
position.position++;
|
|
collectASequenceOfCodePoints((char) => HTTP_WHITESPACE_REGEX.test(char), input, position);
|
|
let parameterName = collectASequenceOfCodePoints((char) => char !== ";" && char !== "=", input, position);
|
|
parameterName = parameterName.toLowerCase();
|
|
if (position.position < input.length) {
|
|
if (input[position.position] === ";") {
|
|
continue;
|
|
}
|
|
position.position++;
|
|
}
|
|
if (position.position > input.length) {
|
|
break;
|
|
}
|
|
let parameterValue = null;
|
|
if (input[position.position] === '"') {
|
|
parameterValue = collectAnHTTPQuotedString(input, position, true);
|
|
collectASequenceOfCodePointsFast(";", input, position);
|
|
} else {
|
|
parameterValue = collectASequenceOfCodePointsFast(";", input, position);
|
|
parameterValue = removeHTTPWhitespace(parameterValue, false, true);
|
|
if (parameterValue.length === 0) {
|
|
continue;
|
|
}
|
|
}
|
|
if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) {
|
|
mimeType.parameters.set(parameterName, parameterValue);
|
|
}
|
|
}
|
|
return mimeType;
|
|
};
|
|
var forgivingBase64 = function(data) {
|
|
data = data.replace(/[\u0009\u000A\u000C\u000D\u0020]/g, "");
|
|
if (data.length % 4 === 0) {
|
|
data = data.replace(/=?=$/, "");
|
|
}
|
|
if (data.length % 4 === 1) {
|
|
return "failure";
|
|
}
|
|
if (/[^+/0-9A-Za-z]/.test(data)) {
|
|
return "failure";
|
|
}
|
|
const binary = atob2(data);
|
|
const bytes = new Uint8Array(binary.length);
|
|
for (let byte = 0;byte < binary.length; byte++) {
|
|
bytes[byte] = binary.charCodeAt(byte);
|
|
}
|
|
return bytes;
|
|
};
|
|
var collectAnHTTPQuotedString = function(input, position, extractValue) {
|
|
const positionStart = position.position;
|
|
let value = "";
|
|
assert(input[position.position] === '"');
|
|
position.position++;
|
|
while (true) {
|
|
value += collectASequenceOfCodePoints((char) => char !== '"' && char !== "\\", input, position);
|
|
if (position.position >= input.length) {
|
|
break;
|
|
}
|
|
const quoteOrBackslash = input[position.position];
|
|
position.position++;
|
|
if (quoteOrBackslash === "\\") {
|
|
if (position.position >= input.length) {
|
|
value += "\\";
|
|
break;
|
|
}
|
|
value += input[position.position];
|
|
position.position++;
|
|
} else {
|
|
assert(quoteOrBackslash === '"');
|
|
break;
|
|
}
|
|
}
|
|
if (extractValue) {
|
|
return value;
|
|
}
|
|
return input.slice(positionStart, position.position);
|
|
};
|
|
var serializeAMimeType = function(mimeType) {
|
|
assert(mimeType !== "failure");
|
|
const { parameters, essence } = mimeType;
|
|
let serialization = essence;
|
|
for (let [name, value] of parameters.entries()) {
|
|
serialization += ";";
|
|
serialization += name;
|
|
serialization += "=";
|
|
if (!HTTP_TOKEN_CODEPOINTS.test(value)) {
|
|
value = value.replace(/(\\|")/g, "\\$1");
|
|
value = '"' + value;
|
|
value += '"';
|
|
}
|
|
serialization += value;
|
|
}
|
|
return serialization;
|
|
};
|
|
var isHTTPWhiteSpace = function(char) {
|
|
return char === "\r" || char === "\n" || char === "\t" || char === " ";
|
|
};
|
|
var removeHTTPWhitespace = function(str, leading = true, trailing = true) {
|
|
let lead = 0;
|
|
let trail = str.length - 1;
|
|
if (leading) {
|
|
for (;lead < str.length && isHTTPWhiteSpace(str[lead]); lead++)
|
|
;
|
|
}
|
|
if (trailing) {
|
|
for (;trail > 0 && isHTTPWhiteSpace(str[trail]); trail--)
|
|
;
|
|
}
|
|
return str.slice(lead, trail + 1);
|
|
};
|
|
var isASCIIWhitespace = function(char) {
|
|
return char === "\r" || char === "\n" || char === "\t" || char === "\f" || char === " ";
|
|
};
|
|
var removeASCIIWhitespace = function(str, leading = true, trailing = true) {
|
|
let lead = 0;
|
|
let trail = str.length - 1;
|
|
if (leading) {
|
|
for (;lead < str.length && isASCIIWhitespace(str[lead]); lead++)
|
|
;
|
|
}
|
|
if (trailing) {
|
|
for (;trail > 0 && isASCIIWhitespace(str[trail]); trail--)
|
|
;
|
|
}
|
|
return str.slice(lead, trail + 1);
|
|
};
|
|
var assert = __require("assert");
|
|
var { atob: atob2 } = __require("buffer");
|
|
var { isomorphicDecode } = require_util2();
|
|
var encoder = new TextEncoder;
|
|
var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/;
|
|
var HTTP_WHITESPACE_REGEX = /(\u000A|\u000D|\u0009|\u0020)/;
|
|
var HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/;
|
|
module.exports = {
|
|
dataURLProcessor,
|
|
URLSerializer,
|
|
collectASequenceOfCodePoints,
|
|
collectASequenceOfCodePointsFast,
|
|
stringPercentDecode,
|
|
parseMIMEType,
|
|
collectAnHTTPQuotedString,
|
|
serializeAMimeType
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/file.js
|
|
var require_file = __commonJS((exports, module) => {
|
|
var processBlobParts = function(parts, options) {
|
|
const bytes = [];
|
|
for (const element of parts) {
|
|
if (typeof element === "string") {
|
|
let s = element;
|
|
if (options.endings === "native") {
|
|
s = convertLineEndingsNative(s);
|
|
}
|
|
bytes.push(encoder.encode(s));
|
|
} else if (types.isAnyArrayBuffer(element) || types.isTypedArray(element)) {
|
|
if (!element.buffer) {
|
|
bytes.push(new Uint8Array(element));
|
|
} else {
|
|
bytes.push(new Uint8Array(element.buffer, element.byteOffset, element.byteLength));
|
|
}
|
|
} else if (isBlobLike(element)) {
|
|
bytes.push(element);
|
|
}
|
|
}
|
|
return bytes;
|
|
};
|
|
var convertLineEndingsNative = function(s) {
|
|
let nativeLineEnding = "\n";
|
|
if (process.platform === "win32") {
|
|
nativeLineEnding = "\r\n";
|
|
}
|
|
return s.replace(/\r?\n/g, nativeLineEnding);
|
|
};
|
|
var isFileLike = function(object) {
|
|
return NativeFile && object instanceof NativeFile || object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File";
|
|
};
|
|
var { Blob: Blob2, File: NativeFile } = __require("buffer");
|
|
var { types } = __require("util");
|
|
var { kState } = require_symbols2();
|
|
var { isBlobLike } = require_util2();
|
|
var { webidl } = require_webidl();
|
|
var { parseMIMEType, serializeAMimeType } = require_dataURL();
|
|
var { kEnumerableProperty } = require_util();
|
|
var encoder = new TextEncoder;
|
|
|
|
class File extends Blob2 {
|
|
constructor(fileBits, fileName, options = {}) {
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "File constructor" });
|
|
fileBits = webidl.converters["sequence<BlobPart>"](fileBits);
|
|
fileName = webidl.converters.USVString(fileName);
|
|
options = webidl.converters.FilePropertyBag(options);
|
|
const n = fileName;
|
|
let t = options.type;
|
|
let d;
|
|
substep: {
|
|
if (t) {
|
|
t = parseMIMEType(t);
|
|
if (t === "failure") {
|
|
t = "";
|
|
break substep;
|
|
}
|
|
t = serializeAMimeType(t).toLowerCase();
|
|
}
|
|
d = options.lastModified;
|
|
}
|
|
super(processBlobParts(fileBits, options), { type: t });
|
|
this[kState] = {
|
|
name: n,
|
|
lastModified: d,
|
|
type: t
|
|
};
|
|
}
|
|
get name() {
|
|
webidl.brandCheck(this, File);
|
|
return this[kState].name;
|
|
}
|
|
get lastModified() {
|
|
webidl.brandCheck(this, File);
|
|
return this[kState].lastModified;
|
|
}
|
|
get type() {
|
|
webidl.brandCheck(this, File);
|
|
return this[kState].type;
|
|
}
|
|
}
|
|
|
|
class FileLike {
|
|
constructor(blobLike, fileName, options = {}) {
|
|
const n = fileName;
|
|
const t = options.type;
|
|
const d = options.lastModified ?? Date.now();
|
|
this[kState] = {
|
|
blobLike,
|
|
name: n,
|
|
type: t,
|
|
lastModified: d
|
|
};
|
|
}
|
|
stream(...args) {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].blobLike.stream(...args);
|
|
}
|
|
arrayBuffer(...args) {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].blobLike.arrayBuffer(...args);
|
|
}
|
|
slice(...args) {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].blobLike.slice(...args);
|
|
}
|
|
text(...args) {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].blobLike.text(...args);
|
|
}
|
|
get size() {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].blobLike.size;
|
|
}
|
|
get type() {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].blobLike.type;
|
|
}
|
|
get name() {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].name;
|
|
}
|
|
get lastModified() {
|
|
webidl.brandCheck(this, FileLike);
|
|
return this[kState].lastModified;
|
|
}
|
|
get [Symbol.toStringTag]() {
|
|
return "File";
|
|
}
|
|
}
|
|
Object.defineProperties(File.prototype, {
|
|
[Symbol.toStringTag]: {
|
|
value: "File",
|
|
configurable: true
|
|
},
|
|
name: kEnumerableProperty,
|
|
lastModified: kEnumerableProperty
|
|
});
|
|
webidl.converters.Blob = webidl.interfaceConverter(Blob2);
|
|
webidl.converters.BlobPart = function(V, opts) {
|
|
if (webidl.util.Type(V) === "Object") {
|
|
if (isBlobLike(V)) {
|
|
return webidl.converters.Blob(V, { strict: false });
|
|
}
|
|
if (ArrayBuffer.isView(V) || types.isAnyArrayBuffer(V)) {
|
|
return webidl.converters.BufferSource(V, opts);
|
|
}
|
|
}
|
|
return webidl.converters.USVString(V, opts);
|
|
};
|
|
webidl.converters["sequence<BlobPart>"] = webidl.sequenceConverter(webidl.converters.BlobPart);
|
|
webidl.converters.FilePropertyBag = webidl.dictionaryConverter([
|
|
{
|
|
key: "lastModified",
|
|
converter: webidl.converters["long long"],
|
|
get defaultValue() {
|
|
return Date.now();
|
|
}
|
|
},
|
|
{
|
|
key: "type",
|
|
converter: webidl.converters.DOMString,
|
|
defaultValue: ""
|
|
},
|
|
{
|
|
key: "endings",
|
|
converter: (value) => {
|
|
value = webidl.converters.DOMString(value);
|
|
value = value.toLowerCase();
|
|
if (value !== "native") {
|
|
value = "transparent";
|
|
}
|
|
return value;
|
|
},
|
|
defaultValue: "transparent"
|
|
}
|
|
]);
|
|
module.exports = { File, FileLike, isFileLike };
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/formdata.js
|
|
var require_formdata = __commonJS((exports, module) => {
|
|
var makeEntry = function(name, value, filename) {
|
|
name = Buffer.from(name).toString("utf8");
|
|
if (typeof value === "string") {
|
|
value = Buffer.from(value).toString("utf8");
|
|
} else {
|
|
if (!isFileLike(value)) {
|
|
value = value instanceof Blob2 ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type });
|
|
}
|
|
if (filename !== undefined) {
|
|
const options = {
|
|
type: value.type,
|
|
lastModified: value.lastModified
|
|
};
|
|
value = NativeFile && value instanceof NativeFile || value instanceof UndiciFile ? new File([value], filename, options) : new FileLike(value, filename, options);
|
|
}
|
|
}
|
|
return { name, value };
|
|
};
|
|
var { isBlobLike, toUSVString, makeIterator } = require_util2();
|
|
var { kState } = require_symbols2();
|
|
var { File: UndiciFile, FileLike, isFileLike } = require_file();
|
|
var { webidl } = require_webidl();
|
|
var { Blob: Blob2, File: NativeFile } = __require("buffer");
|
|
var File = NativeFile ?? UndiciFile;
|
|
|
|
class FormData2 {
|
|
constructor(form) {
|
|
if (form !== undefined) {
|
|
throw webidl.errors.conversionFailed({
|
|
prefix: "FormData constructor",
|
|
argument: "Argument 1",
|
|
types: ["undefined"]
|
|
});
|
|
}
|
|
this[kState] = [];
|
|
}
|
|
append(name, value, filename = undefined) {
|
|
webidl.brandCheck(this, FormData2);
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "FormData.append" });
|
|
if (arguments.length === 3 && !isBlobLike(value)) {
|
|
throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'");
|
|
}
|
|
name = webidl.converters.USVString(name);
|
|
value = isBlobLike(value) ? webidl.converters.Blob(value, { strict: false }) : webidl.converters.USVString(value);
|
|
filename = arguments.length === 3 ? webidl.converters.USVString(filename) : undefined;
|
|
const entry = makeEntry(name, value, filename);
|
|
this[kState].push(entry);
|
|
}
|
|
delete(name) {
|
|
webidl.brandCheck(this, FormData2);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FormData.delete" });
|
|
name = webidl.converters.USVString(name);
|
|
this[kState] = this[kState].filter((entry) => entry.name !== name);
|
|
}
|
|
get(name) {
|
|
webidl.brandCheck(this, FormData2);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FormData.get" });
|
|
name = webidl.converters.USVString(name);
|
|
const idx = this[kState].findIndex((entry) => entry.name === name);
|
|
if (idx === -1) {
|
|
return null;
|
|
}
|
|
return this[kState][idx].value;
|
|
}
|
|
getAll(name) {
|
|
webidl.brandCheck(this, FormData2);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FormData.getAll" });
|
|
name = webidl.converters.USVString(name);
|
|
return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value);
|
|
}
|
|
has(name) {
|
|
webidl.brandCheck(this, FormData2);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FormData.has" });
|
|
name = webidl.converters.USVString(name);
|
|
return this[kState].findIndex((entry) => entry.name === name) !== -1;
|
|
}
|
|
set(name, value, filename = undefined) {
|
|
webidl.brandCheck(this, FormData2);
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "FormData.set" });
|
|
if (arguments.length === 3 && !isBlobLike(value)) {
|
|
throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'");
|
|
}
|
|
name = webidl.converters.USVString(name);
|
|
value = isBlobLike(value) ? webidl.converters.Blob(value, { strict: false }) : webidl.converters.USVString(value);
|
|
filename = arguments.length === 3 ? toUSVString(filename) : undefined;
|
|
const entry = makeEntry(name, value, filename);
|
|
const idx = this[kState].findIndex((entry2) => entry2.name === name);
|
|
if (idx !== -1) {
|
|
this[kState] = [
|
|
...this[kState].slice(0, idx),
|
|
entry,
|
|
...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name)
|
|
];
|
|
} else {
|
|
this[kState].push(entry);
|
|
}
|
|
}
|
|
entries() {
|
|
webidl.brandCheck(this, FormData2);
|
|
return makeIterator(() => this[kState].map((pair) => [pair.name, pair.value]), "FormData", "key+value");
|
|
}
|
|
keys() {
|
|
webidl.brandCheck(this, FormData2);
|
|
return makeIterator(() => this[kState].map((pair) => [pair.name, pair.value]), "FormData", "key");
|
|
}
|
|
values() {
|
|
webidl.brandCheck(this, FormData2);
|
|
return makeIterator(() => this[kState].map((pair) => [pair.name, pair.value]), "FormData", "value");
|
|
}
|
|
forEach(callbackFn, thisArg = globalThis) {
|
|
webidl.brandCheck(this, FormData2);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FormData.forEach" });
|
|
if (typeof callbackFn !== "function") {
|
|
throw new TypeError("Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'.");
|
|
}
|
|
for (const [key, value] of this) {
|
|
callbackFn.apply(thisArg, [value, key, this]);
|
|
}
|
|
}
|
|
}
|
|
FormData2.prototype[Symbol.iterator] = FormData2.prototype.entries;
|
|
Object.defineProperties(FormData2.prototype, {
|
|
[Symbol.toStringTag]: {
|
|
value: "FormData",
|
|
configurable: true
|
|
}
|
|
});
|
|
module.exports = { FormData: FormData2 };
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/body.js
|
|
var require_body = __commonJS((exports, module) => {
|
|
var extractBody = function(object, keepalive = false) {
|
|
if (!ReadableStream2) {
|
|
ReadableStream2 = __require("stream/web").ReadableStream;
|
|
}
|
|
let stream = null;
|
|
if (object instanceof ReadableStream2) {
|
|
stream = object;
|
|
} else if (isBlobLike(object)) {
|
|
stream = object.stream();
|
|
} else {
|
|
stream = new ReadableStream2({
|
|
async pull(controller) {
|
|
controller.enqueue(typeof source === "string" ? textEncoder.encode(source) : source);
|
|
queueMicrotask(() => readableStreamClose(controller));
|
|
},
|
|
start() {
|
|
},
|
|
type: undefined
|
|
});
|
|
}
|
|
assert(isReadableStreamLike(stream));
|
|
let action = null;
|
|
let source = null;
|
|
let length = null;
|
|
let type = null;
|
|
if (typeof object === "string") {
|
|
source = object;
|
|
type = "text/plain;charset=UTF-8";
|
|
} else if (object instanceof URLSearchParams) {
|
|
source = object.toString();
|
|
type = "application/x-www-form-urlencoded;charset=UTF-8";
|
|
} else if (isArrayBuffer(object)) {
|
|
source = new Uint8Array(object.slice());
|
|
} else if (ArrayBuffer.isView(object)) {
|
|
source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength));
|
|
} else if (util.isFormDataLike(object)) {
|
|
const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 100000000000)}`.padStart(11, "0")}`;
|
|
const prefix = `--${boundary}\r\nContent-Disposition: form-data`;
|
|
/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
|
|
const escape = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
|
|
const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n");
|
|
const blobParts = [];
|
|
const rn = new Uint8Array([13, 10]);
|
|
length = 0;
|
|
let hasUnknownSizeValue = false;
|
|
for (const [name, value] of object) {
|
|
if (typeof value === "string") {
|
|
const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"` + `\r\n\r\n${normalizeLinefeeds(value)}\r\n`);
|
|
blobParts.push(chunk2);
|
|
length += chunk2.byteLength;
|
|
} else {
|
|
const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + "\r\n" + `Content-Type: ${value.type || "application/octet-stream"}\r\n\r\n`);
|
|
blobParts.push(chunk2, value, rn);
|
|
if (typeof value.size === "number") {
|
|
length += chunk2.byteLength + value.size + rn.byteLength;
|
|
} else {
|
|
hasUnknownSizeValue = true;
|
|
}
|
|
}
|
|
}
|
|
const chunk = textEncoder.encode(`--${boundary}--`);
|
|
blobParts.push(chunk);
|
|
length += chunk.byteLength;
|
|
if (hasUnknownSizeValue) {
|
|
length = null;
|
|
}
|
|
source = object;
|
|
action = async function* () {
|
|
for (const part of blobParts) {
|
|
if (part.stream) {
|
|
yield* part.stream();
|
|
} else {
|
|
yield part;
|
|
}
|
|
}
|
|
};
|
|
type = "multipart/form-data; boundary=" + boundary;
|
|
} else if (isBlobLike(object)) {
|
|
source = object;
|
|
length = object.size;
|
|
if (object.type) {
|
|
type = object.type;
|
|
}
|
|
} else if (typeof object[Symbol.asyncIterator] === "function") {
|
|
if (keepalive) {
|
|
throw new TypeError("keepalive");
|
|
}
|
|
if (util.isDisturbed(object) || object.locked) {
|
|
throw new TypeError("Response body object should not be disturbed or locked");
|
|
}
|
|
stream = object instanceof ReadableStream2 ? object : ReadableStreamFrom(object);
|
|
}
|
|
if (typeof source === "string" || util.isBuffer(source)) {
|
|
length = Buffer.byteLength(source);
|
|
}
|
|
if (action != null) {
|
|
let iterator;
|
|
stream = new ReadableStream2({
|
|
async start() {
|
|
iterator = action(object)[Symbol.asyncIterator]();
|
|
},
|
|
async pull(controller) {
|
|
const { value, done } = await iterator.next();
|
|
if (done) {
|
|
queueMicrotask(() => {
|
|
controller.close();
|
|
});
|
|
} else {
|
|
if (!isErrored(stream)) {
|
|
controller.enqueue(new Uint8Array(value));
|
|
}
|
|
}
|
|
return controller.desiredSize > 0;
|
|
},
|
|
async cancel(reason) {
|
|
await iterator.return();
|
|
},
|
|
type: undefined
|
|
});
|
|
}
|
|
const body = { stream, source, length };
|
|
return [body, type];
|
|
};
|
|
var safelyExtractBody = function(object, keepalive = false) {
|
|
if (!ReadableStream2) {
|
|
ReadableStream2 = __require("stream/web").ReadableStream;
|
|
}
|
|
if (object instanceof ReadableStream2) {
|
|
assert(!util.isDisturbed(object), "The body has already been consumed.");
|
|
assert(!object.locked, "The stream is locked.");
|
|
}
|
|
return extractBody(object, keepalive);
|
|
};
|
|
var cloneBody = function(body) {
|
|
const [out1, out2] = body.stream.tee();
|
|
const out2Clone = structuredClone(out2, { transfer: [out2] });
|
|
const [, finalClone] = out2Clone.tee();
|
|
body.stream = out1;
|
|
return {
|
|
stream: finalClone,
|
|
length: body.length,
|
|
source: body.source
|
|
};
|
|
};
|
|
async function* consumeBody(body) {
|
|
if (body) {
|
|
if (isUint8Array(body)) {
|
|
yield body;
|
|
} else {
|
|
const stream = body.stream;
|
|
if (util.isDisturbed(stream)) {
|
|
throw new TypeError("The body has already been consumed.");
|
|
}
|
|
if (stream.locked) {
|
|
throw new TypeError("The stream is locked.");
|
|
}
|
|
stream[kBodyUsed] = true;
|
|
yield* stream;
|
|
}
|
|
}
|
|
}
|
|
var throwIfAborted = function(state) {
|
|
if (state.aborted) {
|
|
throw new DOMException2("The operation was aborted.", "AbortError");
|
|
}
|
|
};
|
|
var bodyMixinMethods = function(instance) {
|
|
const methods = {
|
|
blob() {
|
|
return specConsumeBody(this, (bytes) => {
|
|
let mimeType = bodyMimeType(this);
|
|
if (mimeType === "failure") {
|
|
mimeType = "";
|
|
} else if (mimeType) {
|
|
mimeType = serializeAMimeType(mimeType);
|
|
}
|
|
return new Blob2([bytes], { type: mimeType });
|
|
}, instance);
|
|
},
|
|
arrayBuffer() {
|
|
return specConsumeBody(this, (bytes) => {
|
|
return new Uint8Array(bytes).buffer;
|
|
}, instance);
|
|
},
|
|
text() {
|
|
return specConsumeBody(this, utf8DecodeBytes, instance);
|
|
},
|
|
json() {
|
|
return specConsumeBody(this, parseJSONFromBytes, instance);
|
|
},
|
|
async formData() {
|
|
webidl.brandCheck(this, instance);
|
|
throwIfAborted(this[kState]);
|
|
const contentType = this.headers.get("Content-Type");
|
|
if (/multipart\/form-data/.test(contentType)) {
|
|
const headers = {};
|
|
for (const [key, value] of this.headers)
|
|
headers[key.toLowerCase()] = value;
|
|
const responseFormData = new FormData2;
|
|
let busboy;
|
|
try {
|
|
busboy = new Busboy({
|
|
headers,
|
|
preservePath: true
|
|
});
|
|
} catch (err) {
|
|
throw new DOMException2(`${err}`, "AbortError");
|
|
}
|
|
busboy.on("field", (name, value) => {
|
|
responseFormData.append(name, value);
|
|
});
|
|
busboy.on("file", (name, value, filename, encoding, mimeType) => {
|
|
const chunks = [];
|
|
if (encoding === "base64" || encoding.toLowerCase() === "base64") {
|
|
let base64chunk = "";
|
|
value.on("data", (chunk) => {
|
|
base64chunk += chunk.toString().replace(/[\r\n]/gm, "");
|
|
const end = base64chunk.length - base64chunk.length % 4;
|
|
chunks.push(Buffer.from(base64chunk.slice(0, end), "base64"));
|
|
base64chunk = base64chunk.slice(end);
|
|
});
|
|
value.on("end", () => {
|
|
chunks.push(Buffer.from(base64chunk, "base64"));
|
|
responseFormData.append(name, new File(chunks, filename, { type: mimeType }));
|
|
});
|
|
} else {
|
|
value.on("data", (chunk) => {
|
|
chunks.push(chunk);
|
|
});
|
|
value.on("end", () => {
|
|
responseFormData.append(name, new File(chunks, filename, { type: mimeType }));
|
|
});
|
|
}
|
|
});
|
|
const busboyResolve = new Promise((resolve, reject) => {
|
|
busboy.on("finish", resolve);
|
|
busboy.on("error", (err) => reject(new TypeError(err)));
|
|
});
|
|
if (this.body !== null)
|
|
for await (const chunk of consumeBody(this[kState].body))
|
|
busboy.write(chunk);
|
|
busboy.end();
|
|
await busboyResolve;
|
|
return responseFormData;
|
|
} else if (/application\/x-www-form-urlencoded/.test(contentType)) {
|
|
let entries;
|
|
try {
|
|
let text = "";
|
|
const streamingDecoder = new TextDecoder("utf-8", { ignoreBOM: true });
|
|
for await (const chunk of consumeBody(this[kState].body)) {
|
|
if (!isUint8Array(chunk)) {
|
|
throw new TypeError("Expected Uint8Array chunk");
|
|
}
|
|
text += streamingDecoder.decode(chunk, { stream: true });
|
|
}
|
|
text += streamingDecoder.decode();
|
|
entries = new URLSearchParams(text);
|
|
} catch (err) {
|
|
throw Object.assign(new TypeError, { cause: err });
|
|
}
|
|
const formData = new FormData2;
|
|
for (const [name, value] of entries) {
|
|
formData.append(name, value);
|
|
}
|
|
return formData;
|
|
} else {
|
|
await Promise.resolve();
|
|
throwIfAborted(this[kState]);
|
|
throw webidl.errors.exception({
|
|
header: `${instance.name}.formData`,
|
|
message: "Could not parse content as FormData."
|
|
});
|
|
}
|
|
}
|
|
};
|
|
return methods;
|
|
};
|
|
var mixinBody = function(prototype) {
|
|
Object.assign(prototype.prototype, bodyMixinMethods(prototype));
|
|
};
|
|
async function specConsumeBody(object, convertBytesToJSValue, instance) {
|
|
webidl.brandCheck(object, instance);
|
|
throwIfAborted(object[kState]);
|
|
if (bodyUnusable(object[kState].body)) {
|
|
throw new TypeError("Body is unusable");
|
|
}
|
|
const promise = createDeferredPromise();
|
|
const errorSteps = (error) => promise.reject(error);
|
|
const successSteps = (data) => {
|
|
try {
|
|
promise.resolve(convertBytesToJSValue(data));
|
|
} catch (e) {
|
|
errorSteps(e);
|
|
}
|
|
};
|
|
if (object[kState].body == null) {
|
|
successSteps(new Uint8Array);
|
|
return promise.promise;
|
|
}
|
|
await fullyReadBody(object[kState].body, successSteps, errorSteps);
|
|
return promise.promise;
|
|
}
|
|
var bodyUnusable = function(body) {
|
|
return body != null && (body.stream.locked || util.isDisturbed(body.stream));
|
|
};
|
|
var utf8DecodeBytes = function(buffer) {
|
|
if (buffer.length === 0) {
|
|
return "";
|
|
}
|
|
if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) {
|
|
buffer = buffer.subarray(3);
|
|
}
|
|
const output = textDecoder.decode(buffer);
|
|
return output;
|
|
};
|
|
var parseJSONFromBytes = function(bytes) {
|
|
return JSON.parse(utf8DecodeBytes(bytes));
|
|
};
|
|
var bodyMimeType = function(object) {
|
|
const { headersList } = object[kState];
|
|
const contentType = headersList.get("content-type");
|
|
if (contentType === null) {
|
|
return "failure";
|
|
}
|
|
return parseMIMEType(contentType);
|
|
};
|
|
var Busboy = require_main();
|
|
var util = require_util();
|
|
var {
|
|
ReadableStreamFrom,
|
|
isBlobLike,
|
|
isReadableStreamLike,
|
|
readableStreamClose,
|
|
createDeferredPromise,
|
|
fullyReadBody
|
|
} = require_util2();
|
|
var { FormData: FormData2 } = require_formdata();
|
|
var { kState } = require_symbols2();
|
|
var { webidl } = require_webidl();
|
|
var { DOMException: DOMException2, structuredClone } = require_constants2();
|
|
var { Blob: Blob2, File: NativeFile } = __require("buffer");
|
|
var { kBodyUsed } = require_symbols();
|
|
var assert = __require("assert");
|
|
var { isErrored } = require_util();
|
|
var { isUint8Array, isArrayBuffer } = __require("util/types");
|
|
var { File: UndiciFile } = require_file();
|
|
var { parseMIMEType, serializeAMimeType } = require_dataURL();
|
|
var ReadableStream2 = globalThis.ReadableStream;
|
|
var File = NativeFile ?? UndiciFile;
|
|
var textEncoder = new TextEncoder;
|
|
var textDecoder = new TextDecoder;
|
|
module.exports = {
|
|
extractBody,
|
|
safelyExtractBody,
|
|
cloneBody,
|
|
mixinBody
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/core/request.js
|
|
var require_request = __commonJS((exports, module) => {
|
|
var processHeaderValue = function(key, val, skipAppend) {
|
|
if (val && typeof val === "object") {
|
|
throw new InvalidArgumentError(`invalid ${key} header`);
|
|
}
|
|
val = val != null ? `${val}` : "";
|
|
if (headerCharRegex.exec(val) !== null) {
|
|
throw new InvalidArgumentError(`invalid ${key} header`);
|
|
}
|
|
return skipAppend ? val : `${key}: ${val}\r\n`;
|
|
};
|
|
var processHeader = function(request, key, val, skipAppend = false) {
|
|
if (val && (typeof val === "object" && !Array.isArray(val))) {
|
|
throw new InvalidArgumentError(`invalid ${key} header`);
|
|
} else if (val === undefined) {
|
|
return;
|
|
}
|
|
if (request.host === null && key.length === 4 && key.toLowerCase() === "host") {
|
|
if (headerCharRegex.exec(val) !== null) {
|
|
throw new InvalidArgumentError(`invalid ${key} header`);
|
|
}
|
|
request.host = val;
|
|
} else if (request.contentLength === null && key.length === 14 && key.toLowerCase() === "content-length") {
|
|
request.contentLength = parseInt(val, 10);
|
|
if (!Number.isFinite(request.contentLength)) {
|
|
throw new InvalidArgumentError("invalid content-length header");
|
|
}
|
|
} else if (request.contentType === null && key.length === 12 && key.toLowerCase() === "content-type") {
|
|
request.contentType = val;
|
|
if (skipAppend)
|
|
request.headers[key] = processHeaderValue(key, val, skipAppend);
|
|
else
|
|
request.headers += processHeaderValue(key, val);
|
|
} else if (key.length === 17 && key.toLowerCase() === "transfer-encoding") {
|
|
throw new InvalidArgumentError("invalid transfer-encoding header");
|
|
} else if (key.length === 10 && key.toLowerCase() === "connection") {
|
|
const value = typeof val === "string" ? val.toLowerCase() : null;
|
|
if (value !== "close" && value !== "keep-alive") {
|
|
throw new InvalidArgumentError("invalid connection header");
|
|
} else if (value === "close") {
|
|
request.reset = true;
|
|
}
|
|
} else if (key.length === 10 && key.toLowerCase() === "keep-alive") {
|
|
throw new InvalidArgumentError("invalid keep-alive header");
|
|
} else if (key.length === 7 && key.toLowerCase() === "upgrade") {
|
|
throw new InvalidArgumentError("invalid upgrade header");
|
|
} else if (key.length === 6 && key.toLowerCase() === "expect") {
|
|
throw new NotSupportedError("expect header not supported");
|
|
} else if (tokenRegExp.exec(key) === null) {
|
|
throw new InvalidArgumentError("invalid header key");
|
|
} else {
|
|
if (Array.isArray(val)) {
|
|
for (let i = 0;i < val.length; i++) {
|
|
if (skipAppend) {
|
|
if (request.headers[key])
|
|
request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}`;
|
|
else
|
|
request.headers[key] = processHeaderValue(key, val[i], skipAppend);
|
|
} else {
|
|
request.headers += processHeaderValue(key, val[i]);
|
|
}
|
|
}
|
|
} else {
|
|
if (skipAppend)
|
|
request.headers[key] = processHeaderValue(key, val, skipAppend);
|
|
else
|
|
request.headers += processHeaderValue(key, val);
|
|
}
|
|
}
|
|
};
|
|
var {
|
|
InvalidArgumentError,
|
|
NotSupportedError
|
|
} = require_errors();
|
|
var assert = __require("assert");
|
|
var { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = require_symbols();
|
|
var util = require_util();
|
|
var tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;
|
|
var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
|
|
var invalidPathRegex = /[^\u0021-\u00ff]/;
|
|
var kHandler = Symbol("handler");
|
|
var channels = {};
|
|
var extractBody;
|
|
try {
|
|
const diagnosticsChannel = __require("diagnostics_channel");
|
|
channels.create = diagnosticsChannel.channel("undici:request:create");
|
|
channels.bodySent = diagnosticsChannel.channel("undici:request:bodySent");
|
|
channels.headers = diagnosticsChannel.channel("undici:request:headers");
|
|
channels.trailers = diagnosticsChannel.channel("undici:request:trailers");
|
|
channels.error = diagnosticsChannel.channel("undici:request:error");
|
|
} catch {
|
|
channels.create = { hasSubscribers: false };
|
|
channels.bodySent = { hasSubscribers: false };
|
|
channels.headers = { hasSubscribers: false };
|
|
channels.trailers = { hasSubscribers: false };
|
|
channels.error = { hasSubscribers: false };
|
|
}
|
|
|
|
class Request2 {
|
|
constructor(origin, {
|
|
path,
|
|
method,
|
|
body,
|
|
headers,
|
|
query,
|
|
idempotent,
|
|
blocking,
|
|
upgrade,
|
|
headersTimeout,
|
|
bodyTimeout,
|
|
reset,
|
|
throwOnError,
|
|
expectContinue
|
|
}, handler) {
|
|
if (typeof path !== "string") {
|
|
throw new InvalidArgumentError("path must be a string");
|
|
} else if (path[0] !== "/" && !(path.startsWith("http://") || path.startsWith("https://")) && method !== "CONNECT") {
|
|
throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
|
|
} else if (invalidPathRegex.exec(path) !== null) {
|
|
throw new InvalidArgumentError("invalid request path");
|
|
}
|
|
if (typeof method !== "string") {
|
|
throw new InvalidArgumentError("method must be a string");
|
|
} else if (tokenRegExp.exec(method) === null) {
|
|
throw new InvalidArgumentError("invalid request method");
|
|
}
|
|
if (upgrade && typeof upgrade !== "string") {
|
|
throw new InvalidArgumentError("upgrade must be a string");
|
|
}
|
|
if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {
|
|
throw new InvalidArgumentError("invalid headersTimeout");
|
|
}
|
|
if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {
|
|
throw new InvalidArgumentError("invalid bodyTimeout");
|
|
}
|
|
if (reset != null && typeof reset !== "boolean") {
|
|
throw new InvalidArgumentError("invalid reset");
|
|
}
|
|
if (expectContinue != null && typeof expectContinue !== "boolean") {
|
|
throw new InvalidArgumentError("invalid expectContinue");
|
|
}
|
|
this.headersTimeout = headersTimeout;
|
|
this.bodyTimeout = bodyTimeout;
|
|
this.throwOnError = throwOnError === true;
|
|
this.method = method;
|
|
this.abort = null;
|
|
if (body == null) {
|
|
this.body = null;
|
|
} else if (util.isStream(body)) {
|
|
this.body = body;
|
|
const rState = this.body._readableState;
|
|
if (!rState || !rState.autoDestroy) {
|
|
this.endHandler = function autoDestroy() {
|
|
util.destroy(this);
|
|
};
|
|
this.body.on("end", this.endHandler);
|
|
}
|
|
this.errorHandler = (err) => {
|
|
if (this.abort) {
|
|
this.abort(err);
|
|
} else {
|
|
this.error = err;
|
|
}
|
|
};
|
|
this.body.on("error", this.errorHandler);
|
|
} else if (util.isBuffer(body)) {
|
|
this.body = body.byteLength ? body : null;
|
|
} else if (ArrayBuffer.isView(body)) {
|
|
this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null;
|
|
} else if (body instanceof ArrayBuffer) {
|
|
this.body = body.byteLength ? Buffer.from(body) : null;
|
|
} else if (typeof body === "string") {
|
|
this.body = body.length ? Buffer.from(body) : null;
|
|
} else if (util.isFormDataLike(body) || util.isIterable(body) || util.isBlobLike(body)) {
|
|
this.body = body;
|
|
} else {
|
|
throw new InvalidArgumentError("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");
|
|
}
|
|
this.completed = false;
|
|
this.aborted = false;
|
|
this.upgrade = upgrade || null;
|
|
this.path = query ? util.buildURL(path, query) : path;
|
|
this.origin = origin;
|
|
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
|
|
this.blocking = blocking == null ? false : blocking;
|
|
this.reset = reset == null ? null : reset;
|
|
this.host = null;
|
|
this.contentLength = null;
|
|
this.contentType = null;
|
|
this.headers = "";
|
|
this.expectContinue = expectContinue != null ? expectContinue : false;
|
|
if (Array.isArray(headers)) {
|
|
if (headers.length % 2 !== 0) {
|
|
throw new InvalidArgumentError("headers array must be even");
|
|
}
|
|
for (let i = 0;i < headers.length; i += 2) {
|
|
processHeader(this, headers[i], headers[i + 1]);
|
|
}
|
|
} else if (headers && typeof headers === "object") {
|
|
const keys = Object.keys(headers);
|
|
for (let i = 0;i < keys.length; i++) {
|
|
const key = keys[i];
|
|
processHeader(this, key, headers[key]);
|
|
}
|
|
} else if (headers != null) {
|
|
throw new InvalidArgumentError("headers must be an object or an array");
|
|
}
|
|
if (util.isFormDataLike(this.body)) {
|
|
if (util.nodeMajor < 16 || util.nodeMajor === 16 && util.nodeMinor < 8) {
|
|
throw new InvalidArgumentError("Form-Data bodies are only supported in node v16.8 and newer.");
|
|
}
|
|
if (!extractBody) {
|
|
extractBody = require_body().extractBody;
|
|
}
|
|
const [bodyStream, contentType] = extractBody(body);
|
|
if (this.contentType == null) {
|
|
this.contentType = contentType;
|
|
this.headers += `content-type: ${contentType}\r\n`;
|
|
}
|
|
this.body = bodyStream.stream;
|
|
this.contentLength = bodyStream.length;
|
|
} else if (util.isBlobLike(body) && this.contentType == null && body.type) {
|
|
this.contentType = body.type;
|
|
this.headers += `content-type: ${body.type}\r\n`;
|
|
}
|
|
util.validateHandler(handler, method, upgrade);
|
|
this.servername = util.getServerName(this.host);
|
|
this[kHandler] = handler;
|
|
if (channels.create.hasSubscribers) {
|
|
channels.create.publish({ request: this });
|
|
}
|
|
}
|
|
onBodySent(chunk) {
|
|
if (this[kHandler].onBodySent) {
|
|
try {
|
|
return this[kHandler].onBodySent(chunk);
|
|
} catch (err) {
|
|
this.abort(err);
|
|
}
|
|
}
|
|
}
|
|
onRequestSent() {
|
|
if (channels.bodySent.hasSubscribers) {
|
|
channels.bodySent.publish({ request: this });
|
|
}
|
|
if (this[kHandler].onRequestSent) {
|
|
try {
|
|
return this[kHandler].onRequestSent();
|
|
} catch (err) {
|
|
this.abort(err);
|
|
}
|
|
}
|
|
}
|
|
onConnect(abort) {
|
|
assert(!this.aborted);
|
|
assert(!this.completed);
|
|
if (this.error) {
|
|
abort(this.error);
|
|
} else {
|
|
this.abort = abort;
|
|
return this[kHandler].onConnect(abort);
|
|
}
|
|
}
|
|
onHeaders(statusCode, headers, resume, statusText) {
|
|
assert(!this.aborted);
|
|
assert(!this.completed);
|
|
if (channels.headers.hasSubscribers) {
|
|
channels.headers.publish({ request: this, response: { statusCode, headers, statusText } });
|
|
}
|
|
try {
|
|
return this[kHandler].onHeaders(statusCode, headers, resume, statusText);
|
|
} catch (err) {
|
|
this.abort(err);
|
|
}
|
|
}
|
|
onData(chunk) {
|
|
assert(!this.aborted);
|
|
assert(!this.completed);
|
|
try {
|
|
return this[kHandler].onData(chunk);
|
|
} catch (err) {
|
|
this.abort(err);
|
|
return false;
|
|
}
|
|
}
|
|
onUpgrade(statusCode, headers, socket) {
|
|
assert(!this.aborted);
|
|
assert(!this.completed);
|
|
return this[kHandler].onUpgrade(statusCode, headers, socket);
|
|
}
|
|
onComplete(trailers) {
|
|
this.onFinally();
|
|
assert(!this.aborted);
|
|
this.completed = true;
|
|
if (channels.trailers.hasSubscribers) {
|
|
channels.trailers.publish({ request: this, trailers });
|
|
}
|
|
try {
|
|
return this[kHandler].onComplete(trailers);
|
|
} catch (err) {
|
|
this.onError(err);
|
|
}
|
|
}
|
|
onError(error) {
|
|
this.onFinally();
|
|
if (channels.error.hasSubscribers) {
|
|
channels.error.publish({ request: this, error });
|
|
}
|
|
if (this.aborted) {
|
|
return;
|
|
}
|
|
this.aborted = true;
|
|
return this[kHandler].onError(error);
|
|
}
|
|
onFinally() {
|
|
if (this.errorHandler) {
|
|
this.body.off("error", this.errorHandler);
|
|
this.errorHandler = null;
|
|
}
|
|
if (this.endHandler) {
|
|
this.body.off("end", this.endHandler);
|
|
this.endHandler = null;
|
|
}
|
|
}
|
|
addHeader(key, value) {
|
|
processHeader(this, key, value);
|
|
return this;
|
|
}
|
|
static [kHTTP1BuildRequest](origin, opts, handler) {
|
|
return new Request2(origin, opts, handler);
|
|
}
|
|
static [kHTTP2BuildRequest](origin, opts, handler) {
|
|
const headers = opts.headers;
|
|
opts = { ...opts, headers: null };
|
|
const request = new Request2(origin, opts, handler);
|
|
request.headers = {};
|
|
if (Array.isArray(headers)) {
|
|
if (headers.length % 2 !== 0) {
|
|
throw new InvalidArgumentError("headers array must be even");
|
|
}
|
|
for (let i = 0;i < headers.length; i += 2) {
|
|
processHeader(request, headers[i], headers[i + 1], true);
|
|
}
|
|
} else if (headers && typeof headers === "object") {
|
|
const keys = Object.keys(headers);
|
|
for (let i = 0;i < keys.length; i++) {
|
|
const key = keys[i];
|
|
processHeader(request, key, headers[key], true);
|
|
}
|
|
} else if (headers != null) {
|
|
throw new InvalidArgumentError("headers must be an object or an array");
|
|
}
|
|
return request;
|
|
}
|
|
static [kHTTP2CopyHeaders](raw) {
|
|
const rawHeaders = raw.split("\r\n");
|
|
const headers = {};
|
|
for (const header of rawHeaders) {
|
|
const [key, value] = header.split(": ");
|
|
if (value == null || value.length === 0)
|
|
continue;
|
|
if (headers[key])
|
|
headers[key] += `,${value}`;
|
|
else
|
|
headers[key] = value;
|
|
}
|
|
return headers;
|
|
}
|
|
}
|
|
module.exports = Request2;
|
|
});
|
|
|
|
// node_modules/undici/lib/dispatcher.js
|
|
var require_dispatcher = __commonJS((exports, module) => {
|
|
var EventEmitter = __require("events");
|
|
|
|
class Dispatcher extends EventEmitter {
|
|
dispatch() {
|
|
throw new Error("not implemented");
|
|
}
|
|
close() {
|
|
throw new Error("not implemented");
|
|
}
|
|
destroy() {
|
|
throw new Error("not implemented");
|
|
}
|
|
}
|
|
module.exports = Dispatcher;
|
|
});
|
|
|
|
// node_modules/undici/lib/dispatcher-base.js
|
|
var require_dispatcher_base = __commonJS((exports, module) => {
|
|
var Dispatcher = require_dispatcher();
|
|
var {
|
|
ClientDestroyedError,
|
|
ClientClosedError,
|
|
InvalidArgumentError
|
|
} = require_errors();
|
|
var { kDestroy, kClose, kDispatch, kInterceptors } = require_symbols();
|
|
var kDestroyed = Symbol("destroyed");
|
|
var kClosed = Symbol("closed");
|
|
var kOnDestroyed = Symbol("onDestroyed");
|
|
var kOnClosed = Symbol("onClosed");
|
|
var kInterceptedDispatch = Symbol("Intercepted Dispatch");
|
|
|
|
class DispatcherBase extends Dispatcher {
|
|
constructor() {
|
|
super();
|
|
this[kDestroyed] = false;
|
|
this[kOnDestroyed] = null;
|
|
this[kClosed] = false;
|
|
this[kOnClosed] = [];
|
|
}
|
|
get destroyed() {
|
|
return this[kDestroyed];
|
|
}
|
|
get closed() {
|
|
return this[kClosed];
|
|
}
|
|
get interceptors() {
|
|
return this[kInterceptors];
|
|
}
|
|
set interceptors(newInterceptors) {
|
|
if (newInterceptors) {
|
|
for (let i = newInterceptors.length - 1;i >= 0; i--) {
|
|
const interceptor = this[kInterceptors][i];
|
|
if (typeof interceptor !== "function") {
|
|
throw new InvalidArgumentError("interceptor must be an function");
|
|
}
|
|
}
|
|
}
|
|
this[kInterceptors] = newInterceptors;
|
|
}
|
|
close(callback) {
|
|
if (callback === undefined) {
|
|
return new Promise((resolve, reject) => {
|
|
this.close((err, data) => {
|
|
return err ? reject(err) : resolve(data);
|
|
});
|
|
});
|
|
}
|
|
if (typeof callback !== "function") {
|
|
throw new InvalidArgumentError("invalid callback");
|
|
}
|
|
if (this[kDestroyed]) {
|
|
queueMicrotask(() => callback(new ClientDestroyedError, null));
|
|
return;
|
|
}
|
|
if (this[kClosed]) {
|
|
if (this[kOnClosed]) {
|
|
this[kOnClosed].push(callback);
|
|
} else {
|
|
queueMicrotask(() => callback(null, null));
|
|
}
|
|
return;
|
|
}
|
|
this[kClosed] = true;
|
|
this[kOnClosed].push(callback);
|
|
const onClosed = () => {
|
|
const callbacks = this[kOnClosed];
|
|
this[kOnClosed] = null;
|
|
for (let i = 0;i < callbacks.length; i++) {
|
|
callbacks[i](null, null);
|
|
}
|
|
};
|
|
this[kClose]().then(() => this.destroy()).then(() => {
|
|
queueMicrotask(onClosed);
|
|
});
|
|
}
|
|
destroy(err, callback) {
|
|
if (typeof err === "function") {
|
|
callback = err;
|
|
err = null;
|
|
}
|
|
if (callback === undefined) {
|
|
return new Promise((resolve, reject) => {
|
|
this.destroy(err, (err2, data) => {
|
|
return err2 ? reject(err2) : resolve(data);
|
|
});
|
|
});
|
|
}
|
|
if (typeof callback !== "function") {
|
|
throw new InvalidArgumentError("invalid callback");
|
|
}
|
|
if (this[kDestroyed]) {
|
|
if (this[kOnDestroyed]) {
|
|
this[kOnDestroyed].push(callback);
|
|
} else {
|
|
queueMicrotask(() => callback(null, null));
|
|
}
|
|
return;
|
|
}
|
|
if (!err) {
|
|
err = new ClientDestroyedError;
|
|
}
|
|
this[kDestroyed] = true;
|
|
this[kOnDestroyed] = this[kOnDestroyed] || [];
|
|
this[kOnDestroyed].push(callback);
|
|
const onDestroyed = () => {
|
|
const callbacks = this[kOnDestroyed];
|
|
this[kOnDestroyed] = null;
|
|
for (let i = 0;i < callbacks.length; i++) {
|
|
callbacks[i](null, null);
|
|
}
|
|
};
|
|
this[kDestroy](err).then(() => {
|
|
queueMicrotask(onDestroyed);
|
|
});
|
|
}
|
|
[kInterceptedDispatch](opts, handler) {
|
|
if (!this[kInterceptors] || this[kInterceptors].length === 0) {
|
|
this[kInterceptedDispatch] = this[kDispatch];
|
|
return this[kDispatch](opts, handler);
|
|
}
|
|
let dispatch = this[kDispatch].bind(this);
|
|
for (let i = this[kInterceptors].length - 1;i >= 0; i--) {
|
|
dispatch = this[kInterceptors][i](dispatch);
|
|
}
|
|
this[kInterceptedDispatch] = dispatch;
|
|
return dispatch(opts, handler);
|
|
}
|
|
dispatch(opts, handler) {
|
|
if (!handler || typeof handler !== "object") {
|
|
throw new InvalidArgumentError("handler must be an object");
|
|
}
|
|
try {
|
|
if (!opts || typeof opts !== "object") {
|
|
throw new InvalidArgumentError("opts must be an object.");
|
|
}
|
|
if (this[kDestroyed] || this[kOnDestroyed]) {
|
|
throw new ClientDestroyedError;
|
|
}
|
|
if (this[kClosed]) {
|
|
throw new ClientClosedError;
|
|
}
|
|
return this[kInterceptedDispatch](opts, handler);
|
|
} catch (err) {
|
|
if (typeof handler.onError !== "function") {
|
|
throw new InvalidArgumentError("invalid onError method");
|
|
}
|
|
handler.onError(err);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
module.exports = DispatcherBase;
|
|
});
|
|
|
|
// node_modules/undici/lib/core/connect.js
|
|
var require_connect = __commonJS((exports, module) => {
|
|
var buildConnector = function({ allowH2, maxCachedSessions, socketPath, timeout, ...opts }) {
|
|
if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {
|
|
throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero");
|
|
}
|
|
const options = { path: socketPath, ...opts };
|
|
const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions);
|
|
timeout = timeout == null ? 1e4 : timeout;
|
|
allowH2 = allowH2 != null ? allowH2 : false;
|
|
return function connect({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {
|
|
let socket;
|
|
if (protocol === "https:") {
|
|
if (!tls) {
|
|
tls = __require("tls");
|
|
}
|
|
servername = servername || options.servername || util.getServerName(host) || null;
|
|
const sessionKey = servername || hostname;
|
|
const session = sessionCache.get(sessionKey) || null;
|
|
assert(sessionKey);
|
|
socket = tls.connect({
|
|
highWaterMark: 16384,
|
|
...options,
|
|
servername,
|
|
session,
|
|
localAddress,
|
|
ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"],
|
|
socket: httpSocket,
|
|
port: port || 443,
|
|
host: hostname
|
|
});
|
|
socket.on("session", function(session2) {
|
|
sessionCache.set(sessionKey, session2);
|
|
});
|
|
} else {
|
|
assert(!httpSocket, "httpSocket can only be sent on TLS update");
|
|
socket = net.connect({
|
|
highWaterMark: 64 * 1024,
|
|
...options,
|
|
localAddress,
|
|
port: port || 80,
|
|
host: hostname
|
|
});
|
|
}
|
|
if (options.keepAlive == null || options.keepAlive) {
|
|
const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60000 : options.keepAliveInitialDelay;
|
|
socket.setKeepAlive(true, keepAliveInitialDelay);
|
|
}
|
|
const cancelTimeout = setupTimeout(() => onConnectTimeout(socket), timeout);
|
|
socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() {
|
|
cancelTimeout();
|
|
if (callback) {
|
|
const cb = callback;
|
|
callback = null;
|
|
cb(null, this);
|
|
}
|
|
}).on("error", function(err) {
|
|
cancelTimeout();
|
|
if (callback) {
|
|
const cb = callback;
|
|
callback = null;
|
|
cb(err);
|
|
}
|
|
});
|
|
return socket;
|
|
};
|
|
};
|
|
var setupTimeout = function(onConnectTimeout2, timeout) {
|
|
if (!timeout) {
|
|
return () => {
|
|
};
|
|
}
|
|
let s1 = null;
|
|
let s2 = null;
|
|
const timeoutId = setTimeout(() => {
|
|
s1 = setImmediate(() => {
|
|
if (process.platform === "win32") {
|
|
s2 = setImmediate(() => onConnectTimeout2());
|
|
} else {
|
|
onConnectTimeout2();
|
|
}
|
|
});
|
|
}, timeout);
|
|
return () => {
|
|
clearTimeout(timeoutId);
|
|
clearImmediate(s1);
|
|
clearImmediate(s2);
|
|
};
|
|
};
|
|
var onConnectTimeout = function(socket) {
|
|
util.destroy(socket, new ConnectTimeoutError);
|
|
};
|
|
var net = __require("net");
|
|
var assert = __require("assert");
|
|
var util = require_util();
|
|
var { InvalidArgumentError, ConnectTimeoutError } = require_errors();
|
|
var tls;
|
|
var SessionCache;
|
|
if (global.FinalizationRegistry && !process.env.NODE_V8_COVERAGE) {
|
|
SessionCache = class WeakSessionCache {
|
|
constructor(maxCachedSessions) {
|
|
this._maxCachedSessions = maxCachedSessions;
|
|
this._sessionCache = new Map;
|
|
this._sessionRegistry = new global.FinalizationRegistry((key) => {
|
|
if (this._sessionCache.size < this._maxCachedSessions) {
|
|
return;
|
|
}
|
|
const ref = this._sessionCache.get(key);
|
|
if (ref !== undefined && ref.deref() === undefined) {
|
|
this._sessionCache.delete(key);
|
|
}
|
|
});
|
|
}
|
|
get(sessionKey) {
|
|
const ref = this._sessionCache.get(sessionKey);
|
|
return ref ? ref.deref() : null;
|
|
}
|
|
set(sessionKey, session) {
|
|
if (this._maxCachedSessions === 0) {
|
|
return;
|
|
}
|
|
this._sessionCache.set(sessionKey, new WeakRef(session));
|
|
this._sessionRegistry.register(session, sessionKey);
|
|
}
|
|
};
|
|
} else {
|
|
SessionCache = class SimpleSessionCache {
|
|
constructor(maxCachedSessions) {
|
|
this._maxCachedSessions = maxCachedSessions;
|
|
this._sessionCache = new Map;
|
|
}
|
|
get(sessionKey) {
|
|
return this._sessionCache.get(sessionKey);
|
|
}
|
|
set(sessionKey, session) {
|
|
if (this._maxCachedSessions === 0) {
|
|
return;
|
|
}
|
|
if (this._sessionCache.size >= this._maxCachedSessions) {
|
|
const { value: oldestKey } = this._sessionCache.keys().next();
|
|
this._sessionCache.delete(oldestKey);
|
|
}
|
|
this._sessionCache.set(sessionKey, session);
|
|
}
|
|
};
|
|
}
|
|
module.exports = buildConnector;
|
|
});
|
|
|
|
// node_modules/undici/lib/llhttp/utils.js
|
|
var require_utils2 = __commonJS((exports) => {
|
|
var enumToMap = function(obj) {
|
|
const res = {};
|
|
Object.keys(obj).forEach((key) => {
|
|
const value = obj[key];
|
|
if (typeof value === "number") {
|
|
res[key] = value;
|
|
}
|
|
});
|
|
return res;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.enumToMap = undefined;
|
|
exports.enumToMap = enumToMap;
|
|
});
|
|
|
|
// node_modules/undici/lib/llhttp/constants.js
|
|
var require_constants3 = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = undefined;
|
|
var utils_1 = require_utils2();
|
|
var ERROR;
|
|
(function(ERROR2) {
|
|
ERROR2[ERROR2["OK"] = 0] = "OK";
|
|
ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL";
|
|
ERROR2[ERROR2["STRICT"] = 2] = "STRICT";
|
|
ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED";
|
|
ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH";
|
|
ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION";
|
|
ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD";
|
|
ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL";
|
|
ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT";
|
|
ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION";
|
|
ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN";
|
|
ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH";
|
|
ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE";
|
|
ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS";
|
|
ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE";
|
|
ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING";
|
|
ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN";
|
|
ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE";
|
|
ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE";
|
|
ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER";
|
|
ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE";
|
|
ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED";
|
|
ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE";
|
|
ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE";
|
|
ERROR2[ERROR2["USER"] = 24] = "USER";
|
|
})(ERROR = exports.ERROR || (exports.ERROR = {}));
|
|
var TYPE;
|
|
(function(TYPE2) {
|
|
TYPE2[TYPE2["BOTH"] = 0] = "BOTH";
|
|
TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST";
|
|
TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE";
|
|
})(TYPE = exports.TYPE || (exports.TYPE = {}));
|
|
var FLAGS;
|
|
(function(FLAGS2) {
|
|
FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE";
|
|
FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE";
|
|
FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE";
|
|
FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED";
|
|
FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE";
|
|
FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH";
|
|
FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY";
|
|
FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING";
|
|
FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING";
|
|
})(FLAGS = exports.FLAGS || (exports.FLAGS = {}));
|
|
var LENIENT_FLAGS;
|
|
(function(LENIENT_FLAGS2) {
|
|
LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS";
|
|
LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH";
|
|
LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE";
|
|
})(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {}));
|
|
var METHODS;
|
|
(function(METHODS2) {
|
|
METHODS2[METHODS2["DELETE"] = 0] = "DELETE";
|
|
METHODS2[METHODS2["GET"] = 1] = "GET";
|
|
METHODS2[METHODS2["HEAD"] = 2] = "HEAD";
|
|
METHODS2[METHODS2["POST"] = 3] = "POST";
|
|
METHODS2[METHODS2["PUT"] = 4] = "PUT";
|
|
METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT";
|
|
METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS";
|
|
METHODS2[METHODS2["TRACE"] = 7] = "TRACE";
|
|
METHODS2[METHODS2["COPY"] = 8] = "COPY";
|
|
METHODS2[METHODS2["LOCK"] = 9] = "LOCK";
|
|
METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL";
|
|
METHODS2[METHODS2["MOVE"] = 11] = "MOVE";
|
|
METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND";
|
|
METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH";
|
|
METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH";
|
|
METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK";
|
|
METHODS2[METHODS2["BIND"] = 16] = "BIND";
|
|
METHODS2[METHODS2["REBIND"] = 17] = "REBIND";
|
|
METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND";
|
|
METHODS2[METHODS2["ACL"] = 19] = "ACL";
|
|
METHODS2[METHODS2["REPORT"] = 20] = "REPORT";
|
|
METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY";
|
|
METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT";
|
|
METHODS2[METHODS2["MERGE"] = 23] = "MERGE";
|
|
METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH";
|
|
METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY";
|
|
METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE";
|
|
METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE";
|
|
METHODS2[METHODS2["PATCH"] = 28] = "PATCH";
|
|
METHODS2[METHODS2["PURGE"] = 29] = "PURGE";
|
|
METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR";
|
|
METHODS2[METHODS2["LINK"] = 31] = "LINK";
|
|
METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK";
|
|
METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE";
|
|
METHODS2[METHODS2["PRI"] = 34] = "PRI";
|
|
METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE";
|
|
METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE";
|
|
METHODS2[METHODS2["SETUP"] = 37] = "SETUP";
|
|
METHODS2[METHODS2["PLAY"] = 38] = "PLAY";
|
|
METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE";
|
|
METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN";
|
|
METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER";
|
|
METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER";
|
|
METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT";
|
|
METHODS2[METHODS2["RECORD"] = 44] = "RECORD";
|
|
METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH";
|
|
})(METHODS = exports.METHODS || (exports.METHODS = {}));
|
|
exports.METHODS_HTTP = [
|
|
METHODS.DELETE,
|
|
METHODS.GET,
|
|
METHODS.HEAD,
|
|
METHODS.POST,
|
|
METHODS.PUT,
|
|
METHODS.CONNECT,
|
|
METHODS.OPTIONS,
|
|
METHODS.TRACE,
|
|
METHODS.COPY,
|
|
METHODS.LOCK,
|
|
METHODS.MKCOL,
|
|
METHODS.MOVE,
|
|
METHODS.PROPFIND,
|
|
METHODS.PROPPATCH,
|
|
METHODS.SEARCH,
|
|
METHODS.UNLOCK,
|
|
METHODS.BIND,
|
|
METHODS.REBIND,
|
|
METHODS.UNBIND,
|
|
METHODS.ACL,
|
|
METHODS.REPORT,
|
|
METHODS.MKACTIVITY,
|
|
METHODS.CHECKOUT,
|
|
METHODS.MERGE,
|
|
METHODS["M-SEARCH"],
|
|
METHODS.NOTIFY,
|
|
METHODS.SUBSCRIBE,
|
|
METHODS.UNSUBSCRIBE,
|
|
METHODS.PATCH,
|
|
METHODS.PURGE,
|
|
METHODS.MKCALENDAR,
|
|
METHODS.LINK,
|
|
METHODS.UNLINK,
|
|
METHODS.PRI,
|
|
METHODS.SOURCE
|
|
];
|
|
exports.METHODS_ICE = [
|
|
METHODS.SOURCE
|
|
];
|
|
exports.METHODS_RTSP = [
|
|
METHODS.OPTIONS,
|
|
METHODS.DESCRIBE,
|
|
METHODS.ANNOUNCE,
|
|
METHODS.SETUP,
|
|
METHODS.PLAY,
|
|
METHODS.PAUSE,
|
|
METHODS.TEARDOWN,
|
|
METHODS.GET_PARAMETER,
|
|
METHODS.SET_PARAMETER,
|
|
METHODS.REDIRECT,
|
|
METHODS.RECORD,
|
|
METHODS.FLUSH,
|
|
METHODS.GET,
|
|
METHODS.POST
|
|
];
|
|
exports.METHOD_MAP = utils_1.enumToMap(METHODS);
|
|
exports.H_METHOD_MAP = {};
|
|
Object.keys(exports.METHOD_MAP).forEach((key) => {
|
|
if (/^H/.test(key)) {
|
|
exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key];
|
|
}
|
|
});
|
|
var FINISH;
|
|
(function(FINISH2) {
|
|
FINISH2[FINISH2["SAFE"] = 0] = "SAFE";
|
|
FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB";
|
|
FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE";
|
|
})(FINISH = exports.FINISH || (exports.FINISH = {}));
|
|
exports.ALPHA = [];
|
|
for (let i = "A".charCodeAt(0);i <= "Z".charCodeAt(0); i++) {
|
|
exports.ALPHA.push(String.fromCharCode(i));
|
|
exports.ALPHA.push(String.fromCharCode(i + 32));
|
|
}
|
|
exports.NUM_MAP = {
|
|
0: 0,
|
|
1: 1,
|
|
2: 2,
|
|
3: 3,
|
|
4: 4,
|
|
5: 5,
|
|
6: 6,
|
|
7: 7,
|
|
8: 8,
|
|
9: 9
|
|
};
|
|
exports.HEX_MAP = {
|
|
0: 0,
|
|
1: 1,
|
|
2: 2,
|
|
3: 3,
|
|
4: 4,
|
|
5: 5,
|
|
6: 6,
|
|
7: 7,
|
|
8: 8,
|
|
9: 9,
|
|
A: 10,
|
|
B: 11,
|
|
C: 12,
|
|
D: 13,
|
|
E: 14,
|
|
F: 15,
|
|
a: 10,
|
|
b: 11,
|
|
c: 12,
|
|
d: 13,
|
|
e: 14,
|
|
f: 15
|
|
};
|
|
exports.NUM = [
|
|
"0",
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"5",
|
|
"6",
|
|
"7",
|
|
"8",
|
|
"9"
|
|
];
|
|
exports.ALPHANUM = exports.ALPHA.concat(exports.NUM);
|
|
exports.MARK = ["-", "_", ".", "!", "~", "*", "\'", "(", ")"];
|
|
exports.USERINFO_CHARS = exports.ALPHANUM.concat(exports.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]);
|
|
exports.STRICT_URL_CHAR = [
|
|
"!",
|
|
'"',
|
|
"$",
|
|
"%",
|
|
"&",
|
|
"\'",
|
|
"(",
|
|
")",
|
|
"*",
|
|
"+",
|
|
",",
|
|
"-",
|
|
".",
|
|
"/",
|
|
":",
|
|
";",
|
|
"<",
|
|
"=",
|
|
">",
|
|
"@",
|
|
"[",
|
|
"\\",
|
|
"]",
|
|
"^",
|
|
"_",
|
|
"`",
|
|
"{",
|
|
"|",
|
|
"}",
|
|
"~"
|
|
].concat(exports.ALPHANUM);
|
|
exports.URL_CHAR = exports.STRICT_URL_CHAR.concat(["\t", "\f"]);
|
|
for (let i = 128;i <= 255; i++) {
|
|
exports.URL_CHAR.push(i);
|
|
}
|
|
exports.HEX = exports.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]);
|
|
exports.STRICT_TOKEN = [
|
|
"!",
|
|
"#",
|
|
"$",
|
|
"%",
|
|
"&",
|
|
"\'",
|
|
"*",
|
|
"+",
|
|
"-",
|
|
".",
|
|
"^",
|
|
"_",
|
|
"`",
|
|
"|",
|
|
"~"
|
|
].concat(exports.ALPHANUM);
|
|
exports.TOKEN = exports.STRICT_TOKEN.concat([" "]);
|
|
exports.HEADER_CHARS = ["\t"];
|
|
for (let i = 32;i <= 255; i++) {
|
|
if (i !== 127) {
|
|
exports.HEADER_CHARS.push(i);
|
|
}
|
|
}
|
|
exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);
|
|
exports.MAJOR = exports.NUM_MAP;
|
|
exports.MINOR = exports.MAJOR;
|
|
var HEADER_STATE;
|
|
(function(HEADER_STATE2) {
|
|
HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL";
|
|
HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION";
|
|
HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH";
|
|
HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING";
|
|
HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE";
|
|
HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE";
|
|
HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE";
|
|
HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE";
|
|
HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED";
|
|
})(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {}));
|
|
exports.SPECIAL_HEADERS = {
|
|
connection: HEADER_STATE.CONNECTION,
|
|
"content-length": HEADER_STATE.CONTENT_LENGTH,
|
|
"proxy-connection": HEADER_STATE.CONNECTION,
|
|
"transfer-encoding": HEADER_STATE.TRANSFER_ENCODING,
|
|
upgrade: HEADER_STATE.UPGRADE
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/handler/RedirectHandler.js
|
|
var require_RedirectHandler = __commonJS((exports, module) => {
|
|
var parseLocation = function(statusCode, headers) {
|
|
if (redirectableStatusCodes.indexOf(statusCode) === -1) {
|
|
return null;
|
|
}
|
|
for (let i = 0;i < headers.length; i += 2) {
|
|
if (headers[i].toString().toLowerCase() === "location") {
|
|
return headers[i + 1];
|
|
}
|
|
}
|
|
};
|
|
var shouldRemoveHeader = function(header, removeContent, unknownOrigin) {
|
|
if (header.length === 4) {
|
|
return util.headerNameToString(header) === "host";
|
|
}
|
|
if (removeContent && util.headerNameToString(header).startsWith("content-")) {
|
|
return true;
|
|
}
|
|
if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {
|
|
const name = util.headerNameToString(header);
|
|
return name === "authorization" || name === "cookie" || name === "proxy-authorization";
|
|
}
|
|
return false;
|
|
};
|
|
var cleanRequestHeaders = function(headers, removeContent, unknownOrigin) {
|
|
const ret = [];
|
|
if (Array.isArray(headers)) {
|
|
for (let i = 0;i < headers.length; i += 2) {
|
|
if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {
|
|
ret.push(headers[i], headers[i + 1]);
|
|
}
|
|
}
|
|
} else if (headers && typeof headers === "object") {
|
|
for (const key of Object.keys(headers)) {
|
|
if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {
|
|
ret.push(key, headers[key]);
|
|
}
|
|
}
|
|
} else {
|
|
assert(headers == null, "headers must be an object or an array");
|
|
}
|
|
return ret;
|
|
};
|
|
var util = require_util();
|
|
var { kBodyUsed } = require_symbols();
|
|
var assert = __require("assert");
|
|
var { InvalidArgumentError } = require_errors();
|
|
var EE = __require("events");
|
|
var redirectableStatusCodes = [300, 301, 302, 303, 307, 308];
|
|
var kBody = Symbol("body");
|
|
|
|
class BodyAsyncIterable {
|
|
constructor(body) {
|
|
this[kBody] = body;
|
|
this[kBodyUsed] = false;
|
|
}
|
|
async* [Symbol.asyncIterator]() {
|
|
assert(!this[kBodyUsed], "disturbed");
|
|
this[kBodyUsed] = true;
|
|
yield* this[kBody];
|
|
}
|
|
}
|
|
|
|
class RedirectHandler {
|
|
constructor(dispatch, maxRedirections, opts, handler) {
|
|
if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
|
|
throw new InvalidArgumentError("maxRedirections must be a positive number");
|
|
}
|
|
util.validateHandler(handler, opts.method, opts.upgrade);
|
|
this.dispatch = dispatch;
|
|
this.location = null;
|
|
this.abort = null;
|
|
this.opts = { ...opts, maxRedirections: 0 };
|
|
this.maxRedirections = maxRedirections;
|
|
this.handler = handler;
|
|
this.history = [];
|
|
if (util.isStream(this.opts.body)) {
|
|
if (util.bodyLength(this.opts.body) === 0) {
|
|
this.opts.body.on("data", function() {
|
|
assert(false);
|
|
});
|
|
}
|
|
if (typeof this.opts.body.readableDidRead !== "boolean") {
|
|
this.opts.body[kBodyUsed] = false;
|
|
EE.prototype.on.call(this.opts.body, "data", function() {
|
|
this[kBodyUsed] = true;
|
|
});
|
|
}
|
|
} else if (this.opts.body && typeof this.opts.body.pipeTo === "function") {
|
|
this.opts.body = new BodyAsyncIterable(this.opts.body);
|
|
} else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util.isIterable(this.opts.body)) {
|
|
this.opts.body = new BodyAsyncIterable(this.opts.body);
|
|
}
|
|
}
|
|
onConnect(abort) {
|
|
this.abort = abort;
|
|
this.handler.onConnect(abort, { history: this.history });
|
|
}
|
|
onUpgrade(statusCode, headers, socket) {
|
|
this.handler.onUpgrade(statusCode, headers, socket);
|
|
}
|
|
onError(error) {
|
|
this.handler.onError(error);
|
|
}
|
|
onHeaders(statusCode, headers, resume, statusText) {
|
|
this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers);
|
|
if (this.opts.origin) {
|
|
this.history.push(new URL(this.opts.path, this.opts.origin));
|
|
}
|
|
if (!this.location) {
|
|
return this.handler.onHeaders(statusCode, headers, resume, statusText);
|
|
}
|
|
const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
|
|
const path = search ? `${pathname}${search}` : pathname;
|
|
this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin);
|
|
this.opts.path = path;
|
|
this.opts.origin = origin;
|
|
this.opts.maxRedirections = 0;
|
|
this.opts.query = null;
|
|
if (statusCode === 303 && this.opts.method !== "HEAD") {
|
|
this.opts.method = "GET";
|
|
this.opts.body = null;
|
|
}
|
|
}
|
|
onData(chunk) {
|
|
if (this.location) {
|
|
} else {
|
|
return this.handler.onData(chunk);
|
|
}
|
|
}
|
|
onComplete(trailers) {
|
|
if (this.location) {
|
|
this.location = null;
|
|
this.abort = null;
|
|
this.dispatch(this.opts, this);
|
|
} else {
|
|
this.handler.onComplete(trailers);
|
|
}
|
|
}
|
|
onBodySent(chunk) {
|
|
if (this.handler.onBodySent) {
|
|
this.handler.onBodySent(chunk);
|
|
}
|
|
}
|
|
}
|
|
module.exports = RedirectHandler;
|
|
});
|
|
|
|
// node_modules/undici/lib/interceptor/redirectInterceptor.js
|
|
var require_redirectInterceptor = __commonJS((exports, module) => {
|
|
var createRedirectInterceptor = function({ maxRedirections: defaultMaxRedirections }) {
|
|
return (dispatch) => {
|
|
return function Intercept(opts, handler) {
|
|
const { maxRedirections = defaultMaxRedirections } = opts;
|
|
if (!maxRedirections) {
|
|
return dispatch(opts, handler);
|
|
}
|
|
const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler);
|
|
opts = { ...opts, maxRedirections: 0 };
|
|
return dispatch(opts, redirectHandler);
|
|
};
|
|
};
|
|
};
|
|
var RedirectHandler = require_RedirectHandler();
|
|
module.exports = createRedirectInterceptor;
|
|
});
|
|
|
|
// node_modules/undici/lib/client.js
|
|
var require_client = __commonJS((exports, module) => {
|
|
var onHttp2SessionError = function(err) {
|
|
assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
this[kSocket][kError] = err;
|
|
onError(this[kClient], err);
|
|
};
|
|
var onHttp2FrameError = function(type, code, id) {
|
|
const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
|
|
if (id === 0) {
|
|
this[kSocket][kError] = err;
|
|
onError(this[kClient], err);
|
|
}
|
|
};
|
|
var onHttp2SessionEnd = function() {
|
|
util.destroy(this, new SocketError("other side closed"));
|
|
util.destroy(this[kSocket], new SocketError("other side closed"));
|
|
};
|
|
var onHTTP2GoAway = function(code) {
|
|
const client = this[kClient];
|
|
const err = new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${code}`);
|
|
client[kSocket] = null;
|
|
client[kHTTP2Session] = null;
|
|
if (client.destroyed) {
|
|
assert(this[kPending] === 0);
|
|
const requests = client[kQueue].splice(client[kRunningIdx]);
|
|
for (let i = 0;i < requests.length; i++) {
|
|
const request = requests[i];
|
|
errorRequest(this, request, err);
|
|
}
|
|
} else if (client[kRunning] > 0) {
|
|
const request = client[kQueue][client[kRunningIdx]];
|
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
errorRequest(client, request, err);
|
|
}
|
|
client[kPendingIdx] = client[kRunningIdx];
|
|
assert(client[kRunning] === 0);
|
|
client.emit("disconnect", client[kUrl], [client], err);
|
|
resume(client);
|
|
};
|
|
async function lazyllhttp() {
|
|
const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : undefined;
|
|
let mod;
|
|
try {
|
|
mod = await WebAssembly.compile(Buffer.from(require_llhttp_simd_wasm(), "base64"));
|
|
} catch (e) {
|
|
mod = await WebAssembly.compile(Buffer.from(llhttpWasmData || require_llhttp_wasm(), "base64"));
|
|
}
|
|
return await WebAssembly.instantiate(mod, {
|
|
env: {
|
|
wasm_on_url: (p, at, len) => {
|
|
return 0;
|
|
},
|
|
wasm_on_status: (p, at, len) => {
|
|
assert.strictEqual(currentParser.ptr, p);
|
|
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
|
|
return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
|
|
},
|
|
wasm_on_message_begin: (p) => {
|
|
assert.strictEqual(currentParser.ptr, p);
|
|
return currentParser.onMessageBegin() || 0;
|
|
},
|
|
wasm_on_header_field: (p, at, len) => {
|
|
assert.strictEqual(currentParser.ptr, p);
|
|
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
|
|
return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
|
|
},
|
|
wasm_on_header_value: (p, at, len) => {
|
|
assert.strictEqual(currentParser.ptr, p);
|
|
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
|
|
return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
|
|
},
|
|
wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {
|
|
assert.strictEqual(currentParser.ptr, p);
|
|
return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0;
|
|
},
|
|
wasm_on_body: (p, at, len) => {
|
|
assert.strictEqual(currentParser.ptr, p);
|
|
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
|
|
return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
|
|
},
|
|
wasm_on_message_complete: (p) => {
|
|
assert.strictEqual(currentParser.ptr, p);
|
|
return currentParser.onMessageComplete() || 0;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
var onParserTimeout = function(parser) {
|
|
const { socket, timeoutType, client } = parser;
|
|
if (timeoutType === TIMEOUT_HEADERS) {
|
|
if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {
|
|
assert(!parser.paused, "cannot be paused while waiting for headers");
|
|
util.destroy(socket, new HeadersTimeoutError);
|
|
}
|
|
} else if (timeoutType === TIMEOUT_BODY) {
|
|
if (!parser.paused) {
|
|
util.destroy(socket, new BodyTimeoutError);
|
|
}
|
|
} else if (timeoutType === TIMEOUT_IDLE) {
|
|
assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]);
|
|
util.destroy(socket, new InformationalError("socket idle timeout"));
|
|
}
|
|
};
|
|
var onSocketReadable = function() {
|
|
const { [kParser]: parser } = this;
|
|
if (parser) {
|
|
parser.readMore();
|
|
}
|
|
};
|
|
var onSocketError = function(err) {
|
|
const { [kClient]: client, [kParser]: parser } = this;
|
|
assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
|
if (client[kHTTPConnVersion] !== "h2") {
|
|
if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
|
|
parser.onMessageComplete();
|
|
return;
|
|
}
|
|
}
|
|
this[kError] = err;
|
|
onError(this[kClient], err);
|
|
};
|
|
var onError = function(client, err) {
|
|
if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") {
|
|
assert(client[kPendingIdx] === client[kRunningIdx]);
|
|
const requests = client[kQueue].splice(client[kRunningIdx]);
|
|
for (let i = 0;i < requests.length; i++) {
|
|
const request = requests[i];
|
|
errorRequest(client, request, err);
|
|
}
|
|
assert(client[kSize] === 0);
|
|
}
|
|
};
|
|
var onSocketEnd = function() {
|
|
const { [kParser]: parser, [kClient]: client } = this;
|
|
if (client[kHTTPConnVersion] !== "h2") {
|
|
if (parser.statusCode && !parser.shouldKeepAlive) {
|
|
parser.onMessageComplete();
|
|
return;
|
|
}
|
|
}
|
|
util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this)));
|
|
};
|
|
var onSocketClose = function() {
|
|
const { [kClient]: client, [kParser]: parser } = this;
|
|
if (client[kHTTPConnVersion] === "h1" && parser) {
|
|
if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
|
|
parser.onMessageComplete();
|
|
}
|
|
this[kParser].destroy();
|
|
this[kParser] = null;
|
|
}
|
|
const err = this[kError] || new SocketError("closed", util.getSocketInfo(this));
|
|
client[kSocket] = null;
|
|
if (client.destroyed) {
|
|
assert(client[kPending] === 0);
|
|
const requests = client[kQueue].splice(client[kRunningIdx]);
|
|
for (let i = 0;i < requests.length; i++) {
|
|
const request = requests[i];
|
|
errorRequest(client, request, err);
|
|
}
|
|
} else if (client[kRunning] > 0 && err.code !== "UND_ERR_INFO") {
|
|
const request = client[kQueue][client[kRunningIdx]];
|
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
errorRequest(client, request, err);
|
|
}
|
|
client[kPendingIdx] = client[kRunningIdx];
|
|
assert(client[kRunning] === 0);
|
|
client.emit("disconnect", client[kUrl], [client], err);
|
|
resume(client);
|
|
};
|
|
async function connect(client) {
|
|
assert(!client[kConnecting]);
|
|
assert(!client[kSocket]);
|
|
let { host, hostname, protocol, port } = client[kUrl];
|
|
if (hostname[0] === "[") {
|
|
const idx = hostname.indexOf("]");
|
|
assert(idx !== -1);
|
|
const ip = hostname.substring(1, idx);
|
|
assert(net.isIP(ip));
|
|
hostname = ip;
|
|
}
|
|
client[kConnecting] = true;
|
|
if (channels.beforeConnect.hasSubscribers) {
|
|
channels.beforeConnect.publish({
|
|
connectParams: {
|
|
host,
|
|
hostname,
|
|
protocol,
|
|
port,
|
|
servername: client[kServerName],
|
|
localAddress: client[kLocalAddress]
|
|
},
|
|
connector: client[kConnector]
|
|
});
|
|
}
|
|
try {
|
|
const socket = await new Promise((resolve, reject) => {
|
|
client[kConnector]({
|
|
host,
|
|
hostname,
|
|
protocol,
|
|
port,
|
|
servername: client[kServerName],
|
|
localAddress: client[kLocalAddress]
|
|
}, (err, socket2) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
resolve(socket2);
|
|
}
|
|
});
|
|
});
|
|
if (client.destroyed) {
|
|
util.destroy(socket.on("error", () => {
|
|
}), new ClientDestroyedError);
|
|
return;
|
|
}
|
|
client[kConnecting] = false;
|
|
assert(socket);
|
|
const isH2 = socket.alpnProtocol === "h2";
|
|
if (isH2) {
|
|
if (!h2ExperimentalWarned) {
|
|
h2ExperimentalWarned = true;
|
|
process.emitWarning("H2 support is experimental, expect them to change at any time.", {
|
|
code: "UNDICI-H2"
|
|
});
|
|
}
|
|
const session = http2.connect(client[kUrl], {
|
|
createConnection: () => socket,
|
|
peerMaxConcurrentStreams: client[kHTTP2SessionState].maxConcurrentStreams
|
|
});
|
|
client[kHTTPConnVersion] = "h2";
|
|
session[kClient] = client;
|
|
session[kSocket] = socket;
|
|
session.on("error", onHttp2SessionError);
|
|
session.on("frameError", onHttp2FrameError);
|
|
session.on("end", onHttp2SessionEnd);
|
|
session.on("goaway", onHTTP2GoAway);
|
|
session.on("close", onSocketClose);
|
|
session.unref();
|
|
client[kHTTP2Session] = session;
|
|
socket[kHTTP2Session] = session;
|
|
} else {
|
|
if (!llhttpInstance) {
|
|
llhttpInstance = await llhttpPromise;
|
|
llhttpPromise = null;
|
|
}
|
|
socket[kNoRef] = false;
|
|
socket[kWriting] = false;
|
|
socket[kReset] = false;
|
|
socket[kBlocking] = false;
|
|
socket[kParser] = new Parser(client, socket, llhttpInstance);
|
|
}
|
|
socket[kCounter] = 0;
|
|
socket[kMaxRequests] = client[kMaxRequests];
|
|
socket[kClient] = client;
|
|
socket[kError] = null;
|
|
socket.on("error", onSocketError).on("readable", onSocketReadable).on("end", onSocketEnd).on("close", onSocketClose);
|
|
client[kSocket] = socket;
|
|
if (channels.connected.hasSubscribers) {
|
|
channels.connected.publish({
|
|
connectParams: {
|
|
host,
|
|
hostname,
|
|
protocol,
|
|
port,
|
|
servername: client[kServerName],
|
|
localAddress: client[kLocalAddress]
|
|
},
|
|
connector: client[kConnector],
|
|
socket
|
|
});
|
|
}
|
|
client.emit("connect", client[kUrl], [client]);
|
|
} catch (err) {
|
|
if (client.destroyed) {
|
|
return;
|
|
}
|
|
client[kConnecting] = false;
|
|
if (channels.connectError.hasSubscribers) {
|
|
channels.connectError.publish({
|
|
connectParams: {
|
|
host,
|
|
hostname,
|
|
protocol,
|
|
port,
|
|
servername: client[kServerName],
|
|
localAddress: client[kLocalAddress]
|
|
},
|
|
connector: client[kConnector],
|
|
error: err
|
|
});
|
|
}
|
|
if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
|
|
assert(client[kRunning] === 0);
|
|
while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {
|
|
const request = client[kQueue][client[kPendingIdx]++];
|
|
errorRequest(client, request, err);
|
|
}
|
|
} else {
|
|
onError(client, err);
|
|
}
|
|
client.emit("connectionError", client[kUrl], [client], err);
|
|
}
|
|
resume(client);
|
|
}
|
|
var emitDrain = function(client) {
|
|
client[kNeedDrain] = 0;
|
|
client.emit("drain", client[kUrl], [client]);
|
|
};
|
|
var resume = function(client, sync) {
|
|
if (client[kResuming] === 2) {
|
|
return;
|
|
}
|
|
client[kResuming] = 2;
|
|
_resume(client, sync);
|
|
client[kResuming] = 0;
|
|
if (client[kRunningIdx] > 256) {
|
|
client[kQueue].splice(0, client[kRunningIdx]);
|
|
client[kPendingIdx] -= client[kRunningIdx];
|
|
client[kRunningIdx] = 0;
|
|
}
|
|
};
|
|
var _resume = function(client, sync) {
|
|
while (true) {
|
|
if (client.destroyed) {
|
|
assert(client[kPending] === 0);
|
|
return;
|
|
}
|
|
if (client[kClosedResolve] && !client[kSize]) {
|
|
client[kClosedResolve]();
|
|
client[kClosedResolve] = null;
|
|
return;
|
|
}
|
|
const socket = client[kSocket];
|
|
if (socket && !socket.destroyed && socket.alpnProtocol !== "h2") {
|
|
if (client[kSize] === 0) {
|
|
if (!socket[kNoRef] && socket.unref) {
|
|
socket.unref();
|
|
socket[kNoRef] = true;
|
|
}
|
|
} else if (socket[kNoRef] && socket.ref) {
|
|
socket.ref();
|
|
socket[kNoRef] = false;
|
|
}
|
|
if (client[kSize] === 0) {
|
|
if (socket[kParser].timeoutType !== TIMEOUT_IDLE) {
|
|
socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_IDLE);
|
|
}
|
|
} else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {
|
|
if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {
|
|
const request2 = client[kQueue][client[kRunningIdx]];
|
|
const headersTimeout = request2.headersTimeout != null ? request2.headersTimeout : client[kHeadersTimeout];
|
|
socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS);
|
|
}
|
|
}
|
|
}
|
|
if (client[kBusy]) {
|
|
client[kNeedDrain] = 2;
|
|
} else if (client[kNeedDrain] === 2) {
|
|
if (sync) {
|
|
client[kNeedDrain] = 1;
|
|
process.nextTick(emitDrain, client);
|
|
} else {
|
|
emitDrain(client);
|
|
}
|
|
continue;
|
|
}
|
|
if (client[kPending] === 0) {
|
|
return;
|
|
}
|
|
if (client[kRunning] >= (client[kPipelining] || 1)) {
|
|
return;
|
|
}
|
|
const request = client[kQueue][client[kPendingIdx]];
|
|
if (client[kUrl].protocol === "https:" && client[kServerName] !== request.servername) {
|
|
if (client[kRunning] > 0) {
|
|
return;
|
|
}
|
|
client[kServerName] = request.servername;
|
|
if (socket && socket.servername !== request.servername) {
|
|
util.destroy(socket, new InformationalError("servername changed"));
|
|
return;
|
|
}
|
|
}
|
|
if (client[kConnecting]) {
|
|
return;
|
|
}
|
|
if (!socket && !client[kHTTP2Session]) {
|
|
connect(client);
|
|
return;
|
|
}
|
|
if (socket.destroyed || socket[kWriting] || socket[kReset] || socket[kBlocking]) {
|
|
return;
|
|
}
|
|
if (client[kRunning] > 0 && !request.idempotent) {
|
|
return;
|
|
}
|
|
if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) {
|
|
return;
|
|
}
|
|
if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body))) {
|
|
return;
|
|
}
|
|
if (!request.aborted && write(client, request)) {
|
|
client[kPendingIdx]++;
|
|
} else {
|
|
client[kQueue].splice(client[kPendingIdx], 1);
|
|
}
|
|
}
|
|
};
|
|
var shouldSendContentLength = function(method) {
|
|
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
|
};
|
|
var write = function(client, request) {
|
|
if (client[kHTTPConnVersion] === "h2") {
|
|
writeH2(client, client[kHTTP2Session], request);
|
|
return;
|
|
}
|
|
const { body, method, path, host, upgrade, headers, blocking, reset } = request;
|
|
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
|
|
if (body && typeof body.read === "function") {
|
|
body.read(0);
|
|
}
|
|
const bodyLength = util.bodyLength(body);
|
|
let contentLength = bodyLength;
|
|
if (contentLength === null) {
|
|
contentLength = request.contentLength;
|
|
}
|
|
if (contentLength === 0 && !expectsPayload) {
|
|
contentLength = null;
|
|
}
|
|
if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {
|
|
if (client[kStrictContentLength]) {
|
|
errorRequest(client, request, new RequestContentLengthMismatchError);
|
|
return false;
|
|
}
|
|
process.emitWarning(new RequestContentLengthMismatchError);
|
|
}
|
|
const socket = client[kSocket];
|
|
try {
|
|
request.onConnect((err) => {
|
|
if (request.aborted || request.completed) {
|
|
return;
|
|
}
|
|
errorRequest(client, request, err || new RequestAbortedError);
|
|
util.destroy(socket, new InformationalError("aborted"));
|
|
});
|
|
} catch (err) {
|
|
errorRequest(client, request, err);
|
|
}
|
|
if (request.aborted) {
|
|
return false;
|
|
}
|
|
if (method === "HEAD") {
|
|
socket[kReset] = true;
|
|
}
|
|
if (upgrade || method === "CONNECT") {
|
|
socket[kReset] = true;
|
|
}
|
|
if (reset != null) {
|
|
socket[kReset] = reset;
|
|
}
|
|
if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {
|
|
socket[kReset] = true;
|
|
}
|
|
if (blocking) {
|
|
socket[kBlocking] = true;
|
|
}
|
|
let header = `${method} ${path} HTTP/1.1\r\n`;
|
|
if (typeof host === "string") {
|
|
header += `host: ${host}\r\n`;
|
|
} else {
|
|
header += client[kHostHeader];
|
|
}
|
|
if (upgrade) {
|
|
header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n`;
|
|
} else if (client[kPipelining] && !socket[kReset]) {
|
|
header += "connection: keep-alive\r\n";
|
|
} else {
|
|
header += "connection: close\r\n";
|
|
}
|
|
if (headers) {
|
|
header += headers;
|
|
}
|
|
if (channels.sendHeaders.hasSubscribers) {
|
|
channels.sendHeaders.publish({ request, headers: header, socket });
|
|
}
|
|
if (!body || bodyLength === 0) {
|
|
if (contentLength === 0) {
|
|
socket.write(`${header}content-length: 0\r\n\r\n`, "latin1");
|
|
} else {
|
|
assert(contentLength === null, "no body must not have content length");
|
|
socket.write(`${header}\r\n`, "latin1");
|
|
}
|
|
request.onRequestSent();
|
|
} else if (util.isBuffer(body)) {
|
|
assert(contentLength === body.byteLength, "buffer body must have content length");
|
|
socket.cork();
|
|
socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, "latin1");
|
|
socket.write(body);
|
|
socket.uncork();
|
|
request.onBodySent(body);
|
|
request.onRequestSent();
|
|
if (!expectsPayload) {
|
|
socket[kReset] = true;
|
|
}
|
|
} else if (util.isBlobLike(body)) {
|
|
if (typeof body.stream === "function") {
|
|
writeIterable({ body: body.stream(), client, request, socket, contentLength, header, expectsPayload });
|
|
} else {
|
|
writeBlob({ body, client, request, socket, contentLength, header, expectsPayload });
|
|
}
|
|
} else if (util.isStream(body)) {
|
|
writeStream({ body, client, request, socket, contentLength, header, expectsPayload });
|
|
} else if (util.isIterable(body)) {
|
|
writeIterable({ body, client, request, socket, contentLength, header, expectsPayload });
|
|
} else {
|
|
assert(false);
|
|
}
|
|
return true;
|
|
};
|
|
var writeH2 = function(client, session, request) {
|
|
const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
|
|
let headers;
|
|
if (typeof reqHeaders === "string")
|
|
headers = Request2[kHTTP2CopyHeaders](reqHeaders.trim());
|
|
else
|
|
headers = reqHeaders;
|
|
if (upgrade) {
|
|
errorRequest(client, request, new Error("Upgrade not supported for H2"));
|
|
return false;
|
|
}
|
|
try {
|
|
request.onConnect((err) => {
|
|
if (request.aborted || request.completed) {
|
|
return;
|
|
}
|
|
errorRequest(client, request, err || new RequestAbortedError);
|
|
});
|
|
} catch (err) {
|
|
errorRequest(client, request, err);
|
|
}
|
|
if (request.aborted) {
|
|
return false;
|
|
}
|
|
let stream;
|
|
const h2State = client[kHTTP2SessionState];
|
|
headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost];
|
|
headers[HTTP2_HEADER_METHOD] = method;
|
|
if (method === "CONNECT") {
|
|
session.ref();
|
|
stream = session.request(headers, { endStream: false, signal });
|
|
if (stream.id && !stream.pending) {
|
|
request.onUpgrade(null, null, stream);
|
|
++h2State.openStreams;
|
|
} else {
|
|
stream.once("ready", () => {
|
|
request.onUpgrade(null, null, stream);
|
|
++h2State.openStreams;
|
|
});
|
|
}
|
|
stream.once("close", () => {
|
|
h2State.openStreams -= 1;
|
|
if (h2State.openStreams === 0)
|
|
session.unref();
|
|
});
|
|
return true;
|
|
}
|
|
headers[HTTP2_HEADER_PATH] = path;
|
|
headers[HTTP2_HEADER_SCHEME] = "https";
|
|
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
|
|
if (body && typeof body.read === "function") {
|
|
body.read(0);
|
|
}
|
|
let contentLength = util.bodyLength(body);
|
|
if (contentLength == null) {
|
|
contentLength = request.contentLength;
|
|
}
|
|
if (contentLength === 0 || !expectsPayload) {
|
|
contentLength = null;
|
|
}
|
|
if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {
|
|
if (client[kStrictContentLength]) {
|
|
errorRequest(client, request, new RequestContentLengthMismatchError);
|
|
return false;
|
|
}
|
|
process.emitWarning(new RequestContentLengthMismatchError);
|
|
}
|
|
if (contentLength != null) {
|
|
assert(body, "no body must not have content length");
|
|
headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`;
|
|
}
|
|
session.ref();
|
|
const shouldEndStream = method === "GET" || method === "HEAD";
|
|
if (expectContinue) {
|
|
headers[HTTP2_HEADER_EXPECT] = "100-continue";
|
|
stream = session.request(headers, { endStream: shouldEndStream, signal });
|
|
stream.once("continue", writeBodyH2);
|
|
} else {
|
|
stream = session.request(headers, {
|
|
endStream: shouldEndStream,
|
|
signal
|
|
});
|
|
writeBodyH2();
|
|
}
|
|
++h2State.openStreams;
|
|
stream.once("response", (headers2) => {
|
|
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
|
|
if (request.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), "") === false) {
|
|
stream.pause();
|
|
}
|
|
});
|
|
stream.once("end", () => {
|
|
request.onComplete([]);
|
|
});
|
|
stream.on("data", (chunk) => {
|
|
if (request.onData(chunk) === false) {
|
|
stream.pause();
|
|
}
|
|
});
|
|
stream.once("close", () => {
|
|
h2State.openStreams -= 1;
|
|
if (h2State.openStreams === 0) {
|
|
session.unref();
|
|
}
|
|
});
|
|
stream.once("error", function(err) {
|
|
if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
|
|
h2State.streams -= 1;
|
|
util.destroy(stream, err);
|
|
}
|
|
});
|
|
stream.once("frameError", (type, code) => {
|
|
const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
|
|
errorRequest(client, request, err);
|
|
if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) {
|
|
h2State.streams -= 1;
|
|
util.destroy(stream, err);
|
|
}
|
|
});
|
|
return true;
|
|
function writeBodyH2() {
|
|
if (!body) {
|
|
request.onRequestSent();
|
|
} else if (util.isBuffer(body)) {
|
|
assert(contentLength === body.byteLength, "buffer body must have content length");
|
|
stream.cork();
|
|
stream.write(body);
|
|
stream.uncork();
|
|
stream.end();
|
|
request.onBodySent(body);
|
|
request.onRequestSent();
|
|
} else if (util.isBlobLike(body)) {
|
|
if (typeof body.stream === "function") {
|
|
writeIterable({
|
|
client,
|
|
request,
|
|
contentLength,
|
|
h2stream: stream,
|
|
expectsPayload,
|
|
body: body.stream(),
|
|
socket: client[kSocket],
|
|
header: ""
|
|
});
|
|
} else {
|
|
writeBlob({
|
|
body,
|
|
client,
|
|
request,
|
|
contentLength,
|
|
expectsPayload,
|
|
h2stream: stream,
|
|
header: "",
|
|
socket: client[kSocket]
|
|
});
|
|
}
|
|
} else if (util.isStream(body)) {
|
|
writeStream({
|
|
body,
|
|
client,
|
|
request,
|
|
contentLength,
|
|
expectsPayload,
|
|
socket: client[kSocket],
|
|
h2stream: stream,
|
|
header: ""
|
|
});
|
|
} else if (util.isIterable(body)) {
|
|
writeIterable({
|
|
body,
|
|
client,
|
|
request,
|
|
contentLength,
|
|
expectsPayload,
|
|
header: "",
|
|
h2stream: stream,
|
|
socket: client[kSocket]
|
|
});
|
|
} else {
|
|
assert(false);
|
|
}
|
|
}
|
|
};
|
|
var writeStream = function({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
|
|
assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
|
|
if (client[kHTTPConnVersion] === "h2") {
|
|
let onPipeData = function(chunk) {
|
|
request.onBodySent(chunk);
|
|
};
|
|
const pipe = pipeline(body, h2stream, (err) => {
|
|
if (err) {
|
|
util.destroy(body, err);
|
|
util.destroy(h2stream, err);
|
|
} else {
|
|
request.onRequestSent();
|
|
}
|
|
});
|
|
pipe.on("data", onPipeData);
|
|
pipe.once("end", () => {
|
|
pipe.removeListener("data", onPipeData);
|
|
util.destroy(pipe);
|
|
});
|
|
return;
|
|
}
|
|
let finished = false;
|
|
const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header });
|
|
const onData = function(chunk) {
|
|
if (finished) {
|
|
return;
|
|
}
|
|
try {
|
|
if (!writer.write(chunk) && this.pause) {
|
|
this.pause();
|
|
}
|
|
} catch (err) {
|
|
util.destroy(this, err);
|
|
}
|
|
};
|
|
const onDrain = function() {
|
|
if (finished) {
|
|
return;
|
|
}
|
|
if (body.resume) {
|
|
body.resume();
|
|
}
|
|
};
|
|
const onAbort = function() {
|
|
if (finished) {
|
|
return;
|
|
}
|
|
const err = new RequestAbortedError;
|
|
queueMicrotask(() => onFinished(err));
|
|
};
|
|
const onFinished = function(err) {
|
|
if (finished) {
|
|
return;
|
|
}
|
|
finished = true;
|
|
assert(socket.destroyed || socket[kWriting] && client[kRunning] <= 1);
|
|
socket.off("drain", onDrain).off("error", onFinished);
|
|
body.removeListener("data", onData).removeListener("end", onFinished).removeListener("error", onFinished).removeListener("close", onAbort);
|
|
if (!err) {
|
|
try {
|
|
writer.end();
|
|
} catch (er) {
|
|
err = er;
|
|
}
|
|
}
|
|
writer.destroy(err);
|
|
if (err && (err.code !== "UND_ERR_INFO" || err.message !== "reset")) {
|
|
util.destroy(body, err);
|
|
} else {
|
|
util.destroy(body);
|
|
}
|
|
};
|
|
body.on("data", onData).on("end", onFinished).on("error", onFinished).on("close", onAbort);
|
|
if (body.resume) {
|
|
body.resume();
|
|
}
|
|
socket.on("drain", onDrain).on("error", onFinished);
|
|
};
|
|
async function writeBlob({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
|
|
assert(contentLength === body.size, "blob body must have content length");
|
|
const isH2 = client[kHTTPConnVersion] === "h2";
|
|
try {
|
|
if (contentLength != null && contentLength !== body.size) {
|
|
throw new RequestContentLengthMismatchError;
|
|
}
|
|
const buffer = Buffer.from(await body.arrayBuffer());
|
|
if (isH2) {
|
|
h2stream.cork();
|
|
h2stream.write(buffer);
|
|
h2stream.uncork();
|
|
} else {
|
|
socket.cork();
|
|
socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, "latin1");
|
|
socket.write(buffer);
|
|
socket.uncork();
|
|
}
|
|
request.onBodySent(buffer);
|
|
request.onRequestSent();
|
|
if (!expectsPayload) {
|
|
socket[kReset] = true;
|
|
}
|
|
resume(client);
|
|
} catch (err) {
|
|
util.destroy(isH2 ? h2stream : socket, err);
|
|
}
|
|
}
|
|
async function writeIterable({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) {
|
|
assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined");
|
|
let callback = null;
|
|
function onDrain() {
|
|
if (callback) {
|
|
const cb = callback;
|
|
callback = null;
|
|
cb();
|
|
}
|
|
}
|
|
const waitForDrain = () => new Promise((resolve, reject) => {
|
|
assert(callback === null);
|
|
if (socket[kError]) {
|
|
reject(socket[kError]);
|
|
} else {
|
|
callback = resolve;
|
|
}
|
|
});
|
|
if (client[kHTTPConnVersion] === "h2") {
|
|
h2stream.on("close", onDrain).on("drain", onDrain);
|
|
try {
|
|
for await (const chunk of body) {
|
|
if (socket[kError]) {
|
|
throw socket[kError];
|
|
}
|
|
const res = h2stream.write(chunk);
|
|
request.onBodySent(chunk);
|
|
if (!res) {
|
|
await waitForDrain();
|
|
}
|
|
}
|
|
} catch (err) {
|
|
h2stream.destroy(err);
|
|
} finally {
|
|
request.onRequestSent();
|
|
h2stream.end();
|
|
h2stream.off("close", onDrain).off("drain", onDrain);
|
|
}
|
|
return;
|
|
}
|
|
socket.on("close", onDrain).on("drain", onDrain);
|
|
const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header });
|
|
try {
|
|
for await (const chunk of body) {
|
|
if (socket[kError]) {
|
|
throw socket[kError];
|
|
}
|
|
if (!writer.write(chunk)) {
|
|
await waitForDrain();
|
|
}
|
|
}
|
|
writer.end();
|
|
} catch (err) {
|
|
writer.destroy(err);
|
|
} finally {
|
|
socket.off("close", onDrain).off("drain", onDrain);
|
|
}
|
|
}
|
|
var errorRequest = function(client, request, err) {
|
|
try {
|
|
request.onError(err);
|
|
assert(request.aborted);
|
|
} catch (err2) {
|
|
client.emit("error", err2);
|
|
}
|
|
};
|
|
var assert = __require("assert");
|
|
var net = __require("net");
|
|
var http = __require("http");
|
|
var { pipeline } = __require("stream");
|
|
var util = require_util();
|
|
var timers = require_timers();
|
|
var Request2 = require_request();
|
|
var DispatcherBase = require_dispatcher_base();
|
|
var {
|
|
RequestContentLengthMismatchError,
|
|
ResponseContentLengthMismatchError,
|
|
InvalidArgumentError,
|
|
RequestAbortedError,
|
|
HeadersTimeoutError,
|
|
HeadersOverflowError,
|
|
SocketError,
|
|
InformationalError,
|
|
BodyTimeoutError,
|
|
HTTPParserError,
|
|
ResponseExceededMaxSizeError,
|
|
ClientDestroyedError
|
|
} = require_errors();
|
|
var buildConnector = require_connect();
|
|
var {
|
|
kUrl,
|
|
kReset,
|
|
kServerName,
|
|
kClient,
|
|
kBusy,
|
|
kParser,
|
|
kConnect,
|
|
kBlocking,
|
|
kResuming,
|
|
kRunning,
|
|
kPending,
|
|
kSize,
|
|
kWriting,
|
|
kQueue,
|
|
kConnected,
|
|
kConnecting,
|
|
kNeedDrain,
|
|
kNoRef,
|
|
kKeepAliveDefaultTimeout,
|
|
kHostHeader,
|
|
kPendingIdx,
|
|
kRunningIdx,
|
|
kError,
|
|
kPipelining,
|
|
kSocket,
|
|
kKeepAliveTimeoutValue,
|
|
kMaxHeadersSize,
|
|
kKeepAliveMaxTimeout,
|
|
kKeepAliveTimeoutThreshold,
|
|
kHeadersTimeout,
|
|
kBodyTimeout,
|
|
kStrictContentLength,
|
|
kConnector,
|
|
kMaxRedirections,
|
|
kMaxRequests,
|
|
kCounter,
|
|
kClose,
|
|
kDestroy,
|
|
kDispatch,
|
|
kInterceptors,
|
|
kLocalAddress,
|
|
kMaxResponseSize,
|
|
kHTTPConnVersion,
|
|
kHost,
|
|
kHTTP2Session,
|
|
kHTTP2SessionState,
|
|
kHTTP2BuildRequest,
|
|
kHTTP2CopyHeaders,
|
|
kHTTP1BuildRequest
|
|
} = require_symbols();
|
|
var http2;
|
|
try {
|
|
http2 = __require("http2");
|
|
} catch {
|
|
http2 = { constants: {} };
|
|
}
|
|
var {
|
|
constants: {
|
|
HTTP2_HEADER_AUTHORITY,
|
|
HTTP2_HEADER_METHOD,
|
|
HTTP2_HEADER_PATH,
|
|
HTTP2_HEADER_SCHEME,
|
|
HTTP2_HEADER_CONTENT_LENGTH,
|
|
HTTP2_HEADER_EXPECT,
|
|
HTTP2_HEADER_STATUS
|
|
}
|
|
} = http2;
|
|
var h2ExperimentalWarned = false;
|
|
var FastBuffer = Buffer[Symbol.species];
|
|
var kClosedResolve = Symbol("kClosedResolve");
|
|
var channels = {};
|
|
try {
|
|
const diagnosticsChannel = __require("diagnostics_channel");
|
|
channels.sendHeaders = diagnosticsChannel.channel("undici:client:sendHeaders");
|
|
channels.beforeConnect = diagnosticsChannel.channel("undici:client:beforeConnect");
|
|
channels.connectError = diagnosticsChannel.channel("undici:client:connectError");
|
|
channels.connected = diagnosticsChannel.channel("undici:client:connected");
|
|
} catch {
|
|
channels.sendHeaders = { hasSubscribers: false };
|
|
channels.beforeConnect = { hasSubscribers: false };
|
|
channels.connectError = { hasSubscribers: false };
|
|
channels.connected = { hasSubscribers: false };
|
|
}
|
|
|
|
class Client extends DispatcherBase {
|
|
constructor(url, {
|
|
interceptors,
|
|
maxHeaderSize,
|
|
headersTimeout,
|
|
socketTimeout,
|
|
requestTimeout,
|
|
connectTimeout,
|
|
bodyTimeout,
|
|
idleTimeout,
|
|
keepAlive,
|
|
keepAliveTimeout,
|
|
maxKeepAliveTimeout,
|
|
keepAliveMaxTimeout,
|
|
keepAliveTimeoutThreshold,
|
|
socketPath,
|
|
pipelining,
|
|
tls,
|
|
strictContentLength,
|
|
maxCachedSessions,
|
|
maxRedirections,
|
|
connect: connect2,
|
|
maxRequestsPerClient,
|
|
localAddress,
|
|
maxResponseSize,
|
|
autoSelectFamily,
|
|
autoSelectFamilyAttemptTimeout,
|
|
allowH2,
|
|
maxConcurrentStreams
|
|
} = {}) {
|
|
super();
|
|
if (keepAlive !== undefined) {
|
|
throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead");
|
|
}
|
|
if (socketTimeout !== undefined) {
|
|
throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");
|
|
}
|
|
if (requestTimeout !== undefined) {
|
|
throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");
|
|
}
|
|
if (idleTimeout !== undefined) {
|
|
throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead");
|
|
}
|
|
if (maxKeepAliveTimeout !== undefined) {
|
|
throw new InvalidArgumentError("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");
|
|
}
|
|
if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) {
|
|
throw new InvalidArgumentError("invalid maxHeaderSize");
|
|
}
|
|
if (socketPath != null && typeof socketPath !== "string") {
|
|
throw new InvalidArgumentError("invalid socketPath");
|
|
}
|
|
if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {
|
|
throw new InvalidArgumentError("invalid connectTimeout");
|
|
}
|
|
if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {
|
|
throw new InvalidArgumentError("invalid keepAliveTimeout");
|
|
}
|
|
if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {
|
|
throw new InvalidArgumentError("invalid keepAliveMaxTimeout");
|
|
}
|
|
if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {
|
|
throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold");
|
|
}
|
|
if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {
|
|
throw new InvalidArgumentError("headersTimeout must be a positive integer or zero");
|
|
}
|
|
if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {
|
|
throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero");
|
|
}
|
|
if (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") {
|
|
throw new InvalidArgumentError("connect must be a function or an object");
|
|
}
|
|
if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
|
|
throw new InvalidArgumentError("maxRedirections must be a positive number");
|
|
}
|
|
if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {
|
|
throw new InvalidArgumentError("maxRequestsPerClient must be a positive number");
|
|
}
|
|
if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) {
|
|
throw new InvalidArgumentError("localAddress must be valid string IP address");
|
|
}
|
|
if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {
|
|
throw new InvalidArgumentError("maxResponseSize must be a positive number");
|
|
}
|
|
if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) {
|
|
throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number");
|
|
}
|
|
if (allowH2 != null && typeof allowH2 !== "boolean") {
|
|
throw new InvalidArgumentError("allowH2 must be a valid boolean value");
|
|
}
|
|
if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) {
|
|
throw new InvalidArgumentError("maxConcurrentStreams must be a possitive integer, greater than 0");
|
|
}
|
|
if (typeof connect2 !== "function") {
|
|
connect2 = buildConnector({
|
|
...tls,
|
|
maxCachedSessions,
|
|
allowH2,
|
|
socketPath,
|
|
timeout: connectTimeout,
|
|
...util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined,
|
|
...connect2
|
|
});
|
|
}
|
|
this[kInterceptors] = interceptors && interceptors.Client && Array.isArray(interceptors.Client) ? interceptors.Client : [createRedirectInterceptor({ maxRedirections })];
|
|
this[kUrl] = util.parseOrigin(url);
|
|
this[kConnector] = connect2;
|
|
this[kSocket] = null;
|
|
this[kPipelining] = pipelining != null ? pipelining : 1;
|
|
this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize;
|
|
this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4000 : keepAliveTimeout;
|
|
this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600000 : keepAliveMaxTimeout;
|
|
this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1000 : keepAliveTimeoutThreshold;
|
|
this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout];
|
|
this[kServerName] = null;
|
|
this[kLocalAddress] = localAddress != null ? localAddress : null;
|
|
this[kResuming] = 0;
|
|
this[kNeedDrain] = 0;
|
|
this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r\n`;
|
|
this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300000;
|
|
this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300000;
|
|
this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength;
|
|
this[kMaxRedirections] = maxRedirections;
|
|
this[kMaxRequests] = maxRequestsPerClient;
|
|
this[kClosedResolve] = null;
|
|
this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1;
|
|
this[kHTTPConnVersion] = "h1";
|
|
this[kHTTP2Session] = null;
|
|
this[kHTTP2SessionState] = !allowH2 ? null : {
|
|
openStreams: 0,
|
|
maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100
|
|
};
|
|
this[kHost] = `${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}`;
|
|
this[kQueue] = [];
|
|
this[kRunningIdx] = 0;
|
|
this[kPendingIdx] = 0;
|
|
}
|
|
get pipelining() {
|
|
return this[kPipelining];
|
|
}
|
|
set pipelining(value) {
|
|
this[kPipelining] = value;
|
|
resume(this, true);
|
|
}
|
|
get [kPending]() {
|
|
return this[kQueue].length - this[kPendingIdx];
|
|
}
|
|
get [kRunning]() {
|
|
return this[kPendingIdx] - this[kRunningIdx];
|
|
}
|
|
get [kSize]() {
|
|
return this[kQueue].length - this[kRunningIdx];
|
|
}
|
|
get [kConnected]() {
|
|
return !!this[kSocket] && !this[kConnecting] && !this[kSocket].destroyed;
|
|
}
|
|
get [kBusy]() {
|
|
const socket = this[kSocket];
|
|
return socket && (socket[kReset] || socket[kWriting] || socket[kBlocking]) || this[kSize] >= (this[kPipelining] || 1) || this[kPending] > 0;
|
|
}
|
|
[kConnect](cb) {
|
|
connect(this);
|
|
this.once("connect", cb);
|
|
}
|
|
[kDispatch](opts, handler) {
|
|
const origin = opts.origin || this[kUrl].origin;
|
|
const request = this[kHTTPConnVersion] === "h2" ? Request2[kHTTP2BuildRequest](origin, opts, handler) : Request2[kHTTP1BuildRequest](origin, opts, handler);
|
|
this[kQueue].push(request);
|
|
if (this[kResuming]) {
|
|
} else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {
|
|
this[kResuming] = 1;
|
|
process.nextTick(resume, this);
|
|
} else {
|
|
resume(this, true);
|
|
}
|
|
if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {
|
|
this[kNeedDrain] = 2;
|
|
}
|
|
return this[kNeedDrain] < 2;
|
|
}
|
|
async[kClose]() {
|
|
return new Promise((resolve) => {
|
|
if (!this[kSize]) {
|
|
resolve(null);
|
|
} else {
|
|
this[kClosedResolve] = resolve;
|
|
}
|
|
});
|
|
}
|
|
async[kDestroy](err) {
|
|
return new Promise((resolve) => {
|
|
const requests = this[kQueue].splice(this[kPendingIdx]);
|
|
for (let i = 0;i < requests.length; i++) {
|
|
const request = requests[i];
|
|
errorRequest(this, request, err);
|
|
}
|
|
const callback = () => {
|
|
if (this[kClosedResolve]) {
|
|
this[kClosedResolve]();
|
|
this[kClosedResolve] = null;
|
|
}
|
|
resolve();
|
|
};
|
|
if (this[kHTTP2Session] != null) {
|
|
util.destroy(this[kHTTP2Session], err);
|
|
this[kHTTP2Session] = null;
|
|
this[kHTTP2SessionState] = null;
|
|
}
|
|
if (!this[kSocket]) {
|
|
queueMicrotask(callback);
|
|
} else {
|
|
util.destroy(this[kSocket].on("close", callback), err);
|
|
}
|
|
resume(this);
|
|
});
|
|
}
|
|
}
|
|
var constants = require_constants3();
|
|
var createRedirectInterceptor = require_redirectInterceptor();
|
|
var EMPTY_BUF = Buffer.alloc(0);
|
|
var llhttpInstance = null;
|
|
var llhttpPromise = lazyllhttp();
|
|
llhttpPromise.catch();
|
|
var currentParser = null;
|
|
var currentBufferRef = null;
|
|
var currentBufferSize = 0;
|
|
var currentBufferPtr = null;
|
|
var TIMEOUT_HEADERS = 1;
|
|
var TIMEOUT_BODY = 2;
|
|
var TIMEOUT_IDLE = 3;
|
|
|
|
class Parser {
|
|
constructor(client, socket, { exports: exports2 }) {
|
|
assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0);
|
|
this.llhttp = exports2;
|
|
this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE);
|
|
this.client = client;
|
|
this.socket = socket;
|
|
this.timeout = null;
|
|
this.timeoutValue = null;
|
|
this.timeoutType = null;
|
|
this.statusCode = null;
|
|
this.statusText = "";
|
|
this.upgrade = false;
|
|
this.headers = [];
|
|
this.headersSize = 0;
|
|
this.headersMaxSize = client[kMaxHeadersSize];
|
|
this.shouldKeepAlive = false;
|
|
this.paused = false;
|
|
this.resume = this.resume.bind(this);
|
|
this.bytesRead = 0;
|
|
this.keepAlive = "";
|
|
this.contentLength = "";
|
|
this.connection = "";
|
|
this.maxResponseSize = client[kMaxResponseSize];
|
|
}
|
|
setTimeout(value, type) {
|
|
this.timeoutType = type;
|
|
if (value !== this.timeoutValue) {
|
|
timers.clearTimeout(this.timeout);
|
|
if (value) {
|
|
this.timeout = timers.setTimeout(onParserTimeout, value, this);
|
|
if (this.timeout.unref) {
|
|
this.timeout.unref();
|
|
}
|
|
} else {
|
|
this.timeout = null;
|
|
}
|
|
this.timeoutValue = value;
|
|
} else if (this.timeout) {
|
|
if (this.timeout.refresh) {
|
|
this.timeout.refresh();
|
|
}
|
|
}
|
|
}
|
|
resume() {
|
|
if (this.socket.destroyed || !this.paused) {
|
|
return;
|
|
}
|
|
assert(this.ptr != null);
|
|
assert(currentParser == null);
|
|
this.llhttp.llhttp_resume(this.ptr);
|
|
assert(this.timeoutType === TIMEOUT_BODY);
|
|
if (this.timeout) {
|
|
if (this.timeout.refresh) {
|
|
this.timeout.refresh();
|
|
}
|
|
}
|
|
this.paused = false;
|
|
this.execute(this.socket.read() || EMPTY_BUF);
|
|
this.readMore();
|
|
}
|
|
readMore() {
|
|
while (!this.paused && this.ptr) {
|
|
const chunk = this.socket.read();
|
|
if (chunk === null) {
|
|
break;
|
|
}
|
|
this.execute(chunk);
|
|
}
|
|
}
|
|
execute(data) {
|
|
assert(this.ptr != null);
|
|
assert(currentParser == null);
|
|
assert(!this.paused);
|
|
const { socket, llhttp } = this;
|
|
if (data.length > currentBufferSize) {
|
|
if (currentBufferPtr) {
|
|
llhttp.free(currentBufferPtr);
|
|
}
|
|
currentBufferSize = Math.ceil(data.length / 4096) * 4096;
|
|
currentBufferPtr = llhttp.malloc(currentBufferSize);
|
|
}
|
|
new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data);
|
|
try {
|
|
let ret;
|
|
try {
|
|
currentBufferRef = data;
|
|
currentParser = this;
|
|
ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length);
|
|
} catch (err) {
|
|
throw err;
|
|
} finally {
|
|
currentParser = null;
|
|
currentBufferRef = null;
|
|
}
|
|
const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
|
|
if (ret === constants.ERROR.PAUSED_UPGRADE) {
|
|
this.onUpgrade(data.slice(offset));
|
|
} else if (ret === constants.ERROR.PAUSED) {
|
|
this.paused = true;
|
|
socket.unshift(data.slice(offset));
|
|
} else if (ret !== constants.ERROR.OK) {
|
|
const ptr = llhttp.llhttp_get_error_reason(this.ptr);
|
|
let message = "";
|
|
if (ptr) {
|
|
const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
|
|
message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
|
|
}
|
|
throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset));
|
|
}
|
|
} catch (err) {
|
|
util.destroy(socket, err);
|
|
}
|
|
}
|
|
destroy() {
|
|
assert(this.ptr != null);
|
|
assert(currentParser == null);
|
|
this.llhttp.llhttp_free(this.ptr);
|
|
this.ptr = null;
|
|
timers.clearTimeout(this.timeout);
|
|
this.timeout = null;
|
|
this.timeoutValue = null;
|
|
this.timeoutType = null;
|
|
this.paused = false;
|
|
}
|
|
onStatus(buf) {
|
|
this.statusText = buf.toString();
|
|
}
|
|
onMessageBegin() {
|
|
const { socket, client } = this;
|
|
if (socket.destroyed) {
|
|
return -1;
|
|
}
|
|
const request = client[kQueue][client[kRunningIdx]];
|
|
if (!request) {
|
|
return -1;
|
|
}
|
|
}
|
|
onHeaderField(buf) {
|
|
const len = this.headers.length;
|
|
if ((len & 1) === 0) {
|
|
this.headers.push(buf);
|
|
} else {
|
|
this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]);
|
|
}
|
|
this.trackHeader(buf.length);
|
|
}
|
|
onHeaderValue(buf) {
|
|
let len = this.headers.length;
|
|
if ((len & 1) === 1) {
|
|
this.headers.push(buf);
|
|
len += 1;
|
|
} else {
|
|
this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]);
|
|
}
|
|
const key = this.headers[len - 2];
|
|
if (key.length === 10 && key.toString().toLowerCase() === "keep-alive") {
|
|
this.keepAlive += buf.toString();
|
|
} else if (key.length === 10 && key.toString().toLowerCase() === "connection") {
|
|
this.connection += buf.toString();
|
|
} else if (key.length === 14 && key.toString().toLowerCase() === "content-length") {
|
|
this.contentLength += buf.toString();
|
|
}
|
|
this.trackHeader(buf.length);
|
|
}
|
|
trackHeader(len) {
|
|
this.headersSize += len;
|
|
if (this.headersSize >= this.headersMaxSize) {
|
|
util.destroy(this.socket, new HeadersOverflowError);
|
|
}
|
|
}
|
|
onUpgrade(head) {
|
|
const { upgrade, client, socket, headers, statusCode } = this;
|
|
assert(upgrade);
|
|
const request = client[kQueue][client[kRunningIdx]];
|
|
assert(request);
|
|
assert(!socket.destroyed);
|
|
assert(socket === client[kSocket]);
|
|
assert(!this.paused);
|
|
assert(request.upgrade || request.method === "CONNECT");
|
|
this.statusCode = null;
|
|
this.statusText = "";
|
|
this.shouldKeepAlive = null;
|
|
assert(this.headers.length % 2 === 0);
|
|
this.headers = [];
|
|
this.headersSize = 0;
|
|
socket.unshift(head);
|
|
socket[kParser].destroy();
|
|
socket[kParser] = null;
|
|
socket[kClient] = null;
|
|
socket[kError] = null;
|
|
socket.removeListener("error", onSocketError).removeListener("readable", onSocketReadable).removeListener("end", onSocketEnd).removeListener("close", onSocketClose);
|
|
client[kSocket] = null;
|
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade"));
|
|
try {
|
|
request.onUpgrade(statusCode, headers, socket);
|
|
} catch (err) {
|
|
util.destroy(socket, err);
|
|
}
|
|
resume(client);
|
|
}
|
|
onHeadersComplete(statusCode, upgrade, shouldKeepAlive) {
|
|
const { client, socket, headers, statusText } = this;
|
|
if (socket.destroyed) {
|
|
return -1;
|
|
}
|
|
const request = client[kQueue][client[kRunningIdx]];
|
|
if (!request) {
|
|
return -1;
|
|
}
|
|
assert(!this.upgrade);
|
|
assert(this.statusCode < 200);
|
|
if (statusCode === 100) {
|
|
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
|
return -1;
|
|
}
|
|
if (upgrade && !request.upgrade) {
|
|
util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket)));
|
|
return -1;
|
|
}
|
|
assert.strictEqual(this.timeoutType, TIMEOUT_HEADERS);
|
|
this.statusCode = statusCode;
|
|
this.shouldKeepAlive = shouldKeepAlive || request.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive";
|
|
if (this.statusCode >= 200) {
|
|
const bodyTimeout = request.bodyTimeout != null ? request.bodyTimeout : client[kBodyTimeout];
|
|
this.setTimeout(bodyTimeout, TIMEOUT_BODY);
|
|
} else if (this.timeout) {
|
|
if (this.timeout.refresh) {
|
|
this.timeout.refresh();
|
|
}
|
|
}
|
|
if (request.method === "CONNECT") {
|
|
assert(client[kRunning] === 1);
|
|
this.upgrade = true;
|
|
return 2;
|
|
}
|
|
if (upgrade) {
|
|
assert(client[kRunning] === 1);
|
|
this.upgrade = true;
|
|
return 2;
|
|
}
|
|
assert(this.headers.length % 2 === 0);
|
|
this.headers = [];
|
|
this.headersSize = 0;
|
|
if (this.shouldKeepAlive && client[kPipelining]) {
|
|
const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null;
|
|
if (keepAliveTimeout != null) {
|
|
const timeout = Math.min(keepAliveTimeout - client[kKeepAliveTimeoutThreshold], client[kKeepAliveMaxTimeout]);
|
|
if (timeout <= 0) {
|
|
socket[kReset] = true;
|
|
} else {
|
|
client[kKeepAliveTimeoutValue] = timeout;
|
|
}
|
|
} else {
|
|
client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout];
|
|
}
|
|
} else {
|
|
socket[kReset] = true;
|
|
}
|
|
const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false;
|
|
if (request.aborted) {
|
|
return -1;
|
|
}
|
|
if (request.method === "HEAD") {
|
|
return 1;
|
|
}
|
|
if (statusCode < 200) {
|
|
return 1;
|
|
}
|
|
if (socket[kBlocking]) {
|
|
socket[kBlocking] = false;
|
|
resume(client);
|
|
}
|
|
return pause ? constants.ERROR.PAUSED : 0;
|
|
}
|
|
onBody(buf) {
|
|
const { client, socket, statusCode, maxResponseSize } = this;
|
|
if (socket.destroyed) {
|
|
return -1;
|
|
}
|
|
const request = client[kQueue][client[kRunningIdx]];
|
|
assert(request);
|
|
assert.strictEqual(this.timeoutType, TIMEOUT_BODY);
|
|
if (this.timeout) {
|
|
if (this.timeout.refresh) {
|
|
this.timeout.refresh();
|
|
}
|
|
}
|
|
assert(statusCode >= 200);
|
|
if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {
|
|
util.destroy(socket, new ResponseExceededMaxSizeError);
|
|
return -1;
|
|
}
|
|
this.bytesRead += buf.length;
|
|
if (request.onData(buf) === false) {
|
|
return constants.ERROR.PAUSED;
|
|
}
|
|
}
|
|
onMessageComplete() {
|
|
const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this;
|
|
if (socket.destroyed && (!statusCode || shouldKeepAlive)) {
|
|
return -1;
|
|
}
|
|
if (upgrade) {
|
|
return;
|
|
}
|
|
const request = client[kQueue][client[kRunningIdx]];
|
|
assert(request);
|
|
assert(statusCode >= 100);
|
|
this.statusCode = null;
|
|
this.statusText = "";
|
|
this.bytesRead = 0;
|
|
this.contentLength = "";
|
|
this.keepAlive = "";
|
|
this.connection = "";
|
|
assert(this.headers.length % 2 === 0);
|
|
this.headers = [];
|
|
this.headersSize = 0;
|
|
if (statusCode < 200) {
|
|
return;
|
|
}
|
|
if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) {
|
|
util.destroy(socket, new ResponseContentLengthMismatchError);
|
|
return -1;
|
|
}
|
|
request.onComplete(headers);
|
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
if (socket[kWriting]) {
|
|
assert.strictEqual(client[kRunning], 0);
|
|
util.destroy(socket, new InformationalError("reset"));
|
|
return constants.ERROR.PAUSED;
|
|
} else if (!shouldKeepAlive) {
|
|
util.destroy(socket, new InformationalError("reset"));
|
|
return constants.ERROR.PAUSED;
|
|
} else if (socket[kReset] && client[kRunning] === 0) {
|
|
util.destroy(socket, new InformationalError("reset"));
|
|
return constants.ERROR.PAUSED;
|
|
} else if (client[kPipelining] === 1) {
|
|
setImmediate(resume, client);
|
|
} else {
|
|
resume(client);
|
|
}
|
|
}
|
|
}
|
|
|
|
class AsyncWriter {
|
|
constructor({ socket, request, contentLength, client, expectsPayload, header }) {
|
|
this.socket = socket;
|
|
this.request = request;
|
|
this.contentLength = contentLength;
|
|
this.client = client;
|
|
this.bytesWritten = 0;
|
|
this.expectsPayload = expectsPayload;
|
|
this.header = header;
|
|
socket[kWriting] = true;
|
|
}
|
|
write(chunk) {
|
|
const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this;
|
|
if (socket[kError]) {
|
|
throw socket[kError];
|
|
}
|
|
if (socket.destroyed) {
|
|
return false;
|
|
}
|
|
const len = Buffer.byteLength(chunk);
|
|
if (!len) {
|
|
return true;
|
|
}
|
|
if (contentLength !== null && bytesWritten + len > contentLength) {
|
|
if (client[kStrictContentLength]) {
|
|
throw new RequestContentLengthMismatchError;
|
|
}
|
|
process.emitWarning(new RequestContentLengthMismatchError);
|
|
}
|
|
socket.cork();
|
|
if (bytesWritten === 0) {
|
|
if (!expectsPayload) {
|
|
socket[kReset] = true;
|
|
}
|
|
if (contentLength === null) {
|
|
socket.write(`${header}transfer-encoding: chunked\r\n`, "latin1");
|
|
} else {
|
|
socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, "latin1");
|
|
}
|
|
}
|
|
if (contentLength === null) {
|
|
socket.write(`\r\n${len.toString(16)}\r\n`, "latin1");
|
|
}
|
|
this.bytesWritten += len;
|
|
const ret = socket.write(chunk);
|
|
socket.uncork();
|
|
request.onBodySent(chunk);
|
|
if (!ret) {
|
|
if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
|
|
if (socket[kParser].timeout.refresh) {
|
|
socket[kParser].timeout.refresh();
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
end() {
|
|
const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this;
|
|
request.onRequestSent();
|
|
socket[kWriting] = false;
|
|
if (socket[kError]) {
|
|
throw socket[kError];
|
|
}
|
|
if (socket.destroyed) {
|
|
return;
|
|
}
|
|
if (bytesWritten === 0) {
|
|
if (expectsPayload) {
|
|
socket.write(`${header}content-length: 0\r\n\r\n`, "latin1");
|
|
} else {
|
|
socket.write(`${header}\r\n`, "latin1");
|
|
}
|
|
} else if (contentLength === null) {
|
|
socket.write("\r\n0\r\n\r\n", "latin1");
|
|
}
|
|
if (contentLength !== null && bytesWritten !== contentLength) {
|
|
if (client[kStrictContentLength]) {
|
|
throw new RequestContentLengthMismatchError;
|
|
} else {
|
|
process.emitWarning(new RequestContentLengthMismatchError);
|
|
}
|
|
}
|
|
if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
|
|
if (socket[kParser].timeout.refresh) {
|
|
socket[kParser].timeout.refresh();
|
|
}
|
|
}
|
|
resume(client);
|
|
}
|
|
destroy(err) {
|
|
const { socket, client } = this;
|
|
socket[kWriting] = false;
|
|
if (err) {
|
|
assert(client[kRunning] <= 1, "pipeline should only contain this request");
|
|
util.destroy(socket, err);
|
|
}
|
|
}
|
|
}
|
|
module.exports = Client;
|
|
});
|
|
|
|
// node_modules/undici/lib/node/fixed-queue.js
|
|
var require_fixed_queue = __commonJS((exports, module) => {
|
|
var kSize = 2048;
|
|
var kMask = kSize - 1;
|
|
|
|
class FixedCircularBuffer {
|
|
constructor() {
|
|
this.bottom = 0;
|
|
this.top = 0;
|
|
this.list = new Array(kSize);
|
|
this.next = null;
|
|
}
|
|
isEmpty() {
|
|
return this.top === this.bottom;
|
|
}
|
|
isFull() {
|
|
return (this.top + 1 & kMask) === this.bottom;
|
|
}
|
|
push(data) {
|
|
this.list[this.top] = data;
|
|
this.top = this.top + 1 & kMask;
|
|
}
|
|
shift() {
|
|
const nextItem = this.list[this.bottom];
|
|
if (nextItem === undefined)
|
|
return null;
|
|
this.list[this.bottom] = undefined;
|
|
this.bottom = this.bottom + 1 & kMask;
|
|
return nextItem;
|
|
}
|
|
}
|
|
module.exports = class FixedQueue {
|
|
constructor() {
|
|
this.head = this.tail = new FixedCircularBuffer;
|
|
}
|
|
isEmpty() {
|
|
return this.head.isEmpty();
|
|
}
|
|
push(data) {
|
|
if (this.head.isFull()) {
|
|
this.head = this.head.next = new FixedCircularBuffer;
|
|
}
|
|
this.head.push(data);
|
|
}
|
|
shift() {
|
|
const tail = this.tail;
|
|
const next = tail.shift();
|
|
if (tail.isEmpty() && tail.next !== null) {
|
|
this.tail = tail.next;
|
|
}
|
|
return next;
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/pool-stats.js
|
|
var require_pool_stats = __commonJS((exports, module) => {
|
|
var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
|
|
var kPool = Symbol("pool");
|
|
|
|
class PoolStats {
|
|
constructor(pool) {
|
|
this[kPool] = pool;
|
|
}
|
|
get connected() {
|
|
return this[kPool][kConnected];
|
|
}
|
|
get free() {
|
|
return this[kPool][kFree];
|
|
}
|
|
get pending() {
|
|
return this[kPool][kPending];
|
|
}
|
|
get queued() {
|
|
return this[kPool][kQueued];
|
|
}
|
|
get running() {
|
|
return this[kPool][kRunning];
|
|
}
|
|
get size() {
|
|
return this[kPool][kSize];
|
|
}
|
|
}
|
|
module.exports = PoolStats;
|
|
});
|
|
|
|
// node_modules/undici/lib/pool-base.js
|
|
var require_pool_base = __commonJS((exports, module) => {
|
|
var DispatcherBase = require_dispatcher_base();
|
|
var FixedQueue = require_fixed_queue();
|
|
var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols();
|
|
var PoolStats = require_pool_stats();
|
|
var kClients = Symbol("clients");
|
|
var kNeedDrain = Symbol("needDrain");
|
|
var kQueue = Symbol("queue");
|
|
var kClosedResolve = Symbol("closed resolve");
|
|
var kOnDrain = Symbol("onDrain");
|
|
var kOnConnect = Symbol("onConnect");
|
|
var kOnDisconnect = Symbol("onDisconnect");
|
|
var kOnConnectionError = Symbol("onConnectionError");
|
|
var kGetDispatcher = Symbol("get dispatcher");
|
|
var kAddClient = Symbol("add client");
|
|
var kRemoveClient = Symbol("remove client");
|
|
var kStats = Symbol("stats");
|
|
|
|
class PoolBase extends DispatcherBase {
|
|
constructor() {
|
|
super();
|
|
this[kQueue] = new FixedQueue;
|
|
this[kClients] = [];
|
|
this[kQueued] = 0;
|
|
const pool = this;
|
|
this[kOnDrain] = function onDrain(origin, targets) {
|
|
const queue = pool[kQueue];
|
|
let needDrain = false;
|
|
while (!needDrain) {
|
|
const item = queue.shift();
|
|
if (!item) {
|
|
break;
|
|
}
|
|
pool[kQueued]--;
|
|
needDrain = !this.dispatch(item.opts, item.handler);
|
|
}
|
|
this[kNeedDrain] = needDrain;
|
|
if (!this[kNeedDrain] && pool[kNeedDrain]) {
|
|
pool[kNeedDrain] = false;
|
|
pool.emit("drain", origin, [pool, ...targets]);
|
|
}
|
|
if (pool[kClosedResolve] && queue.isEmpty()) {
|
|
Promise.all(pool[kClients].map((c) => c.close())).then(pool[kClosedResolve]);
|
|
}
|
|
};
|
|
this[kOnConnect] = (origin, targets) => {
|
|
pool.emit("connect", origin, [pool, ...targets]);
|
|
};
|
|
this[kOnDisconnect] = (origin, targets, err) => {
|
|
pool.emit("disconnect", origin, [pool, ...targets], err);
|
|
};
|
|
this[kOnConnectionError] = (origin, targets, err) => {
|
|
pool.emit("connectionError", origin, [pool, ...targets], err);
|
|
};
|
|
this[kStats] = new PoolStats(this);
|
|
}
|
|
get [kBusy]() {
|
|
return this[kNeedDrain];
|
|
}
|
|
get [kConnected]() {
|
|
return this[kClients].filter((client) => client[kConnected]).length;
|
|
}
|
|
get [kFree]() {
|
|
return this[kClients].filter((client) => client[kConnected] && !client[kNeedDrain]).length;
|
|
}
|
|
get [kPending]() {
|
|
let ret = this[kQueued];
|
|
for (const { [kPending]: pending } of this[kClients]) {
|
|
ret += pending;
|
|
}
|
|
return ret;
|
|
}
|
|
get [kRunning]() {
|
|
let ret = 0;
|
|
for (const { [kRunning]: running } of this[kClients]) {
|
|
ret += running;
|
|
}
|
|
return ret;
|
|
}
|
|
get [kSize]() {
|
|
let ret = this[kQueued];
|
|
for (const { [kSize]: size } of this[kClients]) {
|
|
ret += size;
|
|
}
|
|
return ret;
|
|
}
|
|
get stats() {
|
|
return this[kStats];
|
|
}
|
|
async[kClose]() {
|
|
if (this[kQueue].isEmpty()) {
|
|
return Promise.all(this[kClients].map((c) => c.close()));
|
|
} else {
|
|
return new Promise((resolve) => {
|
|
this[kClosedResolve] = resolve;
|
|
});
|
|
}
|
|
}
|
|
async[kDestroy](err) {
|
|
while (true) {
|
|
const item = this[kQueue].shift();
|
|
if (!item) {
|
|
break;
|
|
}
|
|
item.handler.onError(err);
|
|
}
|
|
return Promise.all(this[kClients].map((c) => c.destroy(err)));
|
|
}
|
|
[kDispatch](opts, handler) {
|
|
const dispatcher = this[kGetDispatcher]();
|
|
if (!dispatcher) {
|
|
this[kNeedDrain] = true;
|
|
this[kQueue].push({ opts, handler });
|
|
this[kQueued]++;
|
|
} else if (!dispatcher.dispatch(opts, handler)) {
|
|
dispatcher[kNeedDrain] = true;
|
|
this[kNeedDrain] = !this[kGetDispatcher]();
|
|
}
|
|
return !this[kNeedDrain];
|
|
}
|
|
[kAddClient](client) {
|
|
client.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]);
|
|
this[kClients].push(client);
|
|
if (this[kNeedDrain]) {
|
|
process.nextTick(() => {
|
|
if (this[kNeedDrain]) {
|
|
this[kOnDrain](client[kUrl], [this, client]);
|
|
}
|
|
});
|
|
}
|
|
return this;
|
|
}
|
|
[kRemoveClient](client) {
|
|
client.close(() => {
|
|
const idx = this[kClients].indexOf(client);
|
|
if (idx !== -1) {
|
|
this[kClients].splice(idx, 1);
|
|
}
|
|
});
|
|
this[kNeedDrain] = this[kClients].some((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true);
|
|
}
|
|
}
|
|
module.exports = {
|
|
PoolBase,
|
|
kClients,
|
|
kNeedDrain,
|
|
kAddClient,
|
|
kRemoveClient,
|
|
kGetDispatcher
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/pool.js
|
|
var require_pool = __commonJS((exports, module) => {
|
|
var defaultFactory = function(origin, opts) {
|
|
return new Client(origin, opts);
|
|
};
|
|
var {
|
|
PoolBase,
|
|
kClients,
|
|
kNeedDrain,
|
|
kAddClient,
|
|
kGetDispatcher
|
|
} = require_pool_base();
|
|
var Client = require_client();
|
|
var {
|
|
InvalidArgumentError
|
|
} = require_errors();
|
|
var util = require_util();
|
|
var { kUrl, kInterceptors } = require_symbols();
|
|
var buildConnector = require_connect();
|
|
var kOptions = Symbol("options");
|
|
var kConnections = Symbol("connections");
|
|
var kFactory = Symbol("factory");
|
|
|
|
class Pool extends PoolBase {
|
|
constructor(origin, {
|
|
connections,
|
|
factory = defaultFactory,
|
|
connect,
|
|
connectTimeout,
|
|
tls,
|
|
maxCachedSessions,
|
|
socketPath,
|
|
autoSelectFamily,
|
|
autoSelectFamilyAttemptTimeout,
|
|
allowH2,
|
|
...options
|
|
} = {}) {
|
|
super();
|
|
if (connections != null && (!Number.isFinite(connections) || connections < 0)) {
|
|
throw new InvalidArgumentError("invalid connections");
|
|
}
|
|
if (typeof factory !== "function") {
|
|
throw new InvalidArgumentError("factory must be a function.");
|
|
}
|
|
if (connect != null && typeof connect !== "function" && typeof connect !== "object") {
|
|
throw new InvalidArgumentError("connect must be a function or an object");
|
|
}
|
|
if (typeof connect !== "function") {
|
|
connect = buildConnector({
|
|
...tls,
|
|
maxCachedSessions,
|
|
allowH2,
|
|
socketPath,
|
|
timeout: connectTimeout,
|
|
...util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined,
|
|
...connect
|
|
});
|
|
}
|
|
this[kInterceptors] = options.interceptors && options.interceptors.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : [];
|
|
this[kConnections] = connections || null;
|
|
this[kUrl] = util.parseOrigin(origin);
|
|
this[kOptions] = { ...util.deepClone(options), connect, allowH2 };
|
|
this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : undefined;
|
|
this[kFactory] = factory;
|
|
}
|
|
[kGetDispatcher]() {
|
|
let dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain]);
|
|
if (dispatcher) {
|
|
return dispatcher;
|
|
}
|
|
if (!this[kConnections] || this[kClients].length < this[kConnections]) {
|
|
dispatcher = this[kFactory](this[kUrl], this[kOptions]);
|
|
this[kAddClient](dispatcher);
|
|
}
|
|
return dispatcher;
|
|
}
|
|
}
|
|
module.exports = Pool;
|
|
});
|
|
|
|
// node_modules/undici/lib/balanced-pool.js
|
|
var require_balanced_pool = __commonJS((exports, module) => {
|
|
var getGreatestCommonDivisor = function(a, b) {
|
|
if (b === 0)
|
|
return a;
|
|
return getGreatestCommonDivisor(b, a % b);
|
|
};
|
|
var defaultFactory = function(origin, opts) {
|
|
return new Pool(origin, opts);
|
|
};
|
|
var {
|
|
BalancedPoolMissingUpstreamError,
|
|
InvalidArgumentError
|
|
} = require_errors();
|
|
var {
|
|
PoolBase,
|
|
kClients,
|
|
kNeedDrain,
|
|
kAddClient,
|
|
kRemoveClient,
|
|
kGetDispatcher
|
|
} = require_pool_base();
|
|
var Pool = require_pool();
|
|
var { kUrl, kInterceptors } = require_symbols();
|
|
var { parseOrigin } = require_util();
|
|
var kFactory = Symbol("factory");
|
|
var kOptions = Symbol("options");
|
|
var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor");
|
|
var kCurrentWeight = Symbol("kCurrentWeight");
|
|
var kIndex = Symbol("kIndex");
|
|
var kWeight = Symbol("kWeight");
|
|
var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
|
|
var kErrorPenalty = Symbol("kErrorPenalty");
|
|
|
|
class BalancedPool extends PoolBase {
|
|
constructor(upstreams = [], { factory = defaultFactory, ...opts } = {}) {
|
|
super();
|
|
this[kOptions] = opts;
|
|
this[kIndex] = -1;
|
|
this[kCurrentWeight] = 0;
|
|
this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100;
|
|
this[kErrorPenalty] = this[kOptions].errorPenalty || 15;
|
|
if (!Array.isArray(upstreams)) {
|
|
upstreams = [upstreams];
|
|
}
|
|
if (typeof factory !== "function") {
|
|
throw new InvalidArgumentError("factory must be a function.");
|
|
}
|
|
this[kInterceptors] = opts.interceptors && opts.interceptors.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) ? opts.interceptors.BalancedPool : [];
|
|
this[kFactory] = factory;
|
|
for (const upstream of upstreams) {
|
|
this.addUpstream(upstream);
|
|
}
|
|
this._updateBalancedPoolStats();
|
|
}
|
|
addUpstream(upstream) {
|
|
const upstreamOrigin = parseOrigin(upstream).origin;
|
|
if (this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true)) {
|
|
return this;
|
|
}
|
|
const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions]));
|
|
this[kAddClient](pool);
|
|
pool.on("connect", () => {
|
|
pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]);
|
|
});
|
|
pool.on("connectionError", () => {
|
|
pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]);
|
|
this._updateBalancedPoolStats();
|
|
});
|
|
pool.on("disconnect", (...args) => {
|
|
const err = args[2];
|
|
if (err && err.code === "UND_ERR_SOCKET") {
|
|
pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]);
|
|
this._updateBalancedPoolStats();
|
|
}
|
|
});
|
|
for (const client of this[kClients]) {
|
|
client[kWeight] = this[kMaxWeightPerServer];
|
|
}
|
|
this._updateBalancedPoolStats();
|
|
return this;
|
|
}
|
|
_updateBalancedPoolStats() {
|
|
this[kGreatestCommonDivisor] = this[kClients].map((p) => p[kWeight]).reduce(getGreatestCommonDivisor, 0);
|
|
}
|
|
removeUpstream(upstream) {
|
|
const upstreamOrigin = parseOrigin(upstream).origin;
|
|
const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true);
|
|
if (pool) {
|
|
this[kRemoveClient](pool);
|
|
}
|
|
return this;
|
|
}
|
|
get upstreams() {
|
|
return this[kClients].filter((dispatcher) => dispatcher.closed !== true && dispatcher.destroyed !== true).map((p) => p[kUrl].origin);
|
|
}
|
|
[kGetDispatcher]() {
|
|
if (this[kClients].length === 0) {
|
|
throw new BalancedPoolMissingUpstreamError;
|
|
}
|
|
const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.destroyed !== true);
|
|
if (!dispatcher) {
|
|
return;
|
|
}
|
|
const allClientsBusy = this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true);
|
|
if (allClientsBusy) {
|
|
return;
|
|
}
|
|
let counter = 0;
|
|
let maxWeightIndex = this[kClients].findIndex((pool) => !pool[kNeedDrain]);
|
|
while (counter++ < this[kClients].length) {
|
|
this[kIndex] = (this[kIndex] + 1) % this[kClients].length;
|
|
const pool = this[kClients][this[kIndex]];
|
|
if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {
|
|
maxWeightIndex = this[kIndex];
|
|
}
|
|
if (this[kIndex] === 0) {
|
|
this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor];
|
|
if (this[kCurrentWeight] <= 0) {
|
|
this[kCurrentWeight] = this[kMaxWeightPerServer];
|
|
}
|
|
}
|
|
if (pool[kWeight] >= this[kCurrentWeight] && !pool[kNeedDrain]) {
|
|
return pool;
|
|
}
|
|
}
|
|
this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight];
|
|
this[kIndex] = maxWeightIndex;
|
|
return this[kClients][maxWeightIndex];
|
|
}
|
|
}
|
|
module.exports = BalancedPool;
|
|
});
|
|
|
|
// node_modules/undici/lib/compat/dispatcher-weakref.js
|
|
var require_dispatcher_weakref = __commonJS((exports, module) => {
|
|
var { kConnected, kSize } = require_symbols();
|
|
|
|
class CompatWeakRef {
|
|
constructor(value) {
|
|
this.value = value;
|
|
}
|
|
deref() {
|
|
return this.value[kConnected] === 0 && this.value[kSize] === 0 ? undefined : this.value;
|
|
}
|
|
}
|
|
|
|
class CompatFinalizer {
|
|
constructor(finalizer) {
|
|
this.finalizer = finalizer;
|
|
}
|
|
register(dispatcher, key) {
|
|
if (dispatcher.on) {
|
|
dispatcher.on("disconnect", () => {
|
|
if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) {
|
|
this.finalizer(key);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
module.exports = function() {
|
|
if (process.env.NODE_V8_COVERAGE) {
|
|
return {
|
|
WeakRef: CompatWeakRef,
|
|
FinalizationRegistry: CompatFinalizer
|
|
};
|
|
}
|
|
return {
|
|
WeakRef: global.WeakRef || CompatWeakRef,
|
|
FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer
|
|
};
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/agent.js
|
|
var require_agent = __commonJS((exports, module) => {
|
|
var defaultFactory = function(origin, opts) {
|
|
return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts);
|
|
};
|
|
var { InvalidArgumentError } = require_errors();
|
|
var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
|
|
var DispatcherBase = require_dispatcher_base();
|
|
var Pool = require_pool();
|
|
var Client = require_client();
|
|
var util = require_util();
|
|
var createRedirectInterceptor = require_redirectInterceptor();
|
|
var { WeakRef: WeakRef2, FinalizationRegistry } = require_dispatcher_weakref()();
|
|
var kOnConnect = Symbol("onConnect");
|
|
var kOnDisconnect = Symbol("onDisconnect");
|
|
var kOnConnectionError = Symbol("onConnectionError");
|
|
var kMaxRedirections = Symbol("maxRedirections");
|
|
var kOnDrain = Symbol("onDrain");
|
|
var kFactory = Symbol("factory");
|
|
var kFinalizer = Symbol("finalizer");
|
|
var kOptions = Symbol("options");
|
|
|
|
class Agent extends DispatcherBase {
|
|
constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) {
|
|
super();
|
|
if (typeof factory !== "function") {
|
|
throw new InvalidArgumentError("factory must be a function.");
|
|
}
|
|
if (connect != null && typeof connect !== "function" && typeof connect !== "object") {
|
|
throw new InvalidArgumentError("connect must be a function or an object");
|
|
}
|
|
if (!Number.isInteger(maxRedirections) || maxRedirections < 0) {
|
|
throw new InvalidArgumentError("maxRedirections must be a positive number");
|
|
}
|
|
if (connect && typeof connect !== "function") {
|
|
connect = { ...connect };
|
|
}
|
|
this[kInterceptors] = options.interceptors && options.interceptors.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })];
|
|
this[kOptions] = { ...util.deepClone(options), connect };
|
|
this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : undefined;
|
|
this[kMaxRedirections] = maxRedirections;
|
|
this[kFactory] = factory;
|
|
this[kClients] = new Map;
|
|
this[kFinalizer] = new FinalizationRegistry((key) => {
|
|
const ref = this[kClients].get(key);
|
|
if (ref !== undefined && ref.deref() === undefined) {
|
|
this[kClients].delete(key);
|
|
}
|
|
});
|
|
const agent = this;
|
|
this[kOnDrain] = (origin, targets) => {
|
|
agent.emit("drain", origin, [agent, ...targets]);
|
|
};
|
|
this[kOnConnect] = (origin, targets) => {
|
|
agent.emit("connect", origin, [agent, ...targets]);
|
|
};
|
|
this[kOnDisconnect] = (origin, targets, err) => {
|
|
agent.emit("disconnect", origin, [agent, ...targets], err);
|
|
};
|
|
this[kOnConnectionError] = (origin, targets, err) => {
|
|
agent.emit("connectionError", origin, [agent, ...targets], err);
|
|
};
|
|
}
|
|
get [kRunning]() {
|
|
let ret = 0;
|
|
for (const ref of this[kClients].values()) {
|
|
const client = ref.deref();
|
|
if (client) {
|
|
ret += client[kRunning];
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
[kDispatch](opts, handler) {
|
|
let key;
|
|
if (opts.origin && (typeof opts.origin === "string" || opts.origin instanceof URL)) {
|
|
key = String(opts.origin);
|
|
} else {
|
|
throw new InvalidArgumentError("opts.origin must be a non-empty string or URL.");
|
|
}
|
|
const ref = this[kClients].get(key);
|
|
let dispatcher = ref ? ref.deref() : null;
|
|
if (!dispatcher) {
|
|
dispatcher = this[kFactory](opts.origin, this[kOptions]).on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]);
|
|
this[kClients].set(key, new WeakRef2(dispatcher));
|
|
this[kFinalizer].register(dispatcher, key);
|
|
}
|
|
return dispatcher.dispatch(opts, handler);
|
|
}
|
|
async[kClose]() {
|
|
const closePromises = [];
|
|
for (const ref of this[kClients].values()) {
|
|
const client = ref.deref();
|
|
if (client) {
|
|
closePromises.push(client.close());
|
|
}
|
|
}
|
|
await Promise.all(closePromises);
|
|
}
|
|
async[kDestroy](err) {
|
|
const destroyPromises = [];
|
|
for (const ref of this[kClients].values()) {
|
|
const client = ref.deref();
|
|
if (client) {
|
|
destroyPromises.push(client.destroy(err));
|
|
}
|
|
}
|
|
await Promise.all(destroyPromises);
|
|
}
|
|
}
|
|
module.exports = Agent;
|
|
});
|
|
|
|
// node_modules/undici/lib/api/readable.js
|
|
var require_readable = __commonJS((exports, module) => {
|
|
var isLocked = function(self2) {
|
|
return self2[kBody] && self2[kBody].locked === true || self2[kConsume];
|
|
};
|
|
var isUnusable = function(self2) {
|
|
return util.isDisturbed(self2) || isLocked(self2);
|
|
};
|
|
async function consume(stream, type) {
|
|
if (isUnusable(stream)) {
|
|
throw new TypeError("unusable");
|
|
}
|
|
assert(!stream[kConsume]);
|
|
return new Promise((resolve, reject) => {
|
|
stream[kConsume] = {
|
|
type,
|
|
stream,
|
|
resolve,
|
|
reject,
|
|
length: 0,
|
|
body: []
|
|
};
|
|
stream.on("error", function(err) {
|
|
consumeFinish(this[kConsume], err);
|
|
}).on("close", function() {
|
|
if (this[kConsume].body !== null) {
|
|
consumeFinish(this[kConsume], new RequestAbortedError);
|
|
}
|
|
});
|
|
process.nextTick(consumeStart, stream[kConsume]);
|
|
});
|
|
}
|
|
var consumeStart = function(consume2) {
|
|
if (consume2.body === null) {
|
|
return;
|
|
}
|
|
const { _readableState: state } = consume2.stream;
|
|
for (const chunk of state.buffer) {
|
|
consumePush(consume2, chunk);
|
|
}
|
|
if (state.endEmitted) {
|
|
consumeEnd(this[kConsume]);
|
|
} else {
|
|
consume2.stream.on("end", function() {
|
|
consumeEnd(this[kConsume]);
|
|
});
|
|
}
|
|
consume2.stream.resume();
|
|
while (consume2.stream.read() != null) {
|
|
}
|
|
};
|
|
var consumeEnd = function(consume2) {
|
|
const { type, body, resolve, stream, length } = consume2;
|
|
try {
|
|
if (type === "text") {
|
|
resolve(toUSVString(Buffer.concat(body)));
|
|
} else if (type === "json") {
|
|
resolve(JSON.parse(Buffer.concat(body)));
|
|
} else if (type === "arrayBuffer") {
|
|
const dst = new Uint8Array(length);
|
|
let pos = 0;
|
|
for (const buf of body) {
|
|
dst.set(buf, pos);
|
|
pos += buf.byteLength;
|
|
}
|
|
resolve(dst.buffer);
|
|
} else if (type === "blob") {
|
|
if (!Blob2) {
|
|
Blob2 = __require("buffer").Blob;
|
|
}
|
|
resolve(new Blob2(body, { type: stream[kContentType] }));
|
|
}
|
|
consumeFinish(consume2);
|
|
} catch (err) {
|
|
stream.destroy(err);
|
|
}
|
|
};
|
|
var consumePush = function(consume2, chunk) {
|
|
consume2.length += chunk.length;
|
|
consume2.body.push(chunk);
|
|
};
|
|
var consumeFinish = function(consume2, err) {
|
|
if (consume2.body === null) {
|
|
return;
|
|
}
|
|
if (err) {
|
|
consume2.reject(err);
|
|
} else {
|
|
consume2.resolve();
|
|
}
|
|
consume2.type = null;
|
|
consume2.stream = null;
|
|
consume2.resolve = null;
|
|
consume2.reject = null;
|
|
consume2.length = 0;
|
|
consume2.body = null;
|
|
};
|
|
var assert = __require("assert");
|
|
var { Readable } = __require("stream");
|
|
var { RequestAbortedError, NotSupportedError, InvalidArgumentError } = require_errors();
|
|
var util = require_util();
|
|
var { ReadableStreamFrom, toUSVString } = require_util();
|
|
var Blob2;
|
|
var kConsume = Symbol("kConsume");
|
|
var kReading = Symbol("kReading");
|
|
var kBody = Symbol("kBody");
|
|
var kAbort = Symbol("abort");
|
|
var kContentType = Symbol("kContentType");
|
|
var noop = () => {
|
|
};
|
|
module.exports = class BodyReadable extends Readable {
|
|
constructor({
|
|
resume,
|
|
abort,
|
|
contentType = "",
|
|
highWaterMark = 64 * 1024
|
|
}) {
|
|
super({
|
|
autoDestroy: true,
|
|
read: resume,
|
|
highWaterMark
|
|
});
|
|
this._readableState.dataEmitted = false;
|
|
this[kAbort] = abort;
|
|
this[kConsume] = null;
|
|
this[kBody] = null;
|
|
this[kContentType] = contentType;
|
|
this[kReading] = false;
|
|
}
|
|
destroy(err) {
|
|
if (this.destroyed) {
|
|
return this;
|
|
}
|
|
if (!err && !this._readableState.endEmitted) {
|
|
err = new RequestAbortedError;
|
|
}
|
|
if (err) {
|
|
this[kAbort]();
|
|
}
|
|
return super.destroy(err);
|
|
}
|
|
emit(ev, ...args) {
|
|
if (ev === "data") {
|
|
this._readableState.dataEmitted = true;
|
|
} else if (ev === "error") {
|
|
this._readableState.errorEmitted = true;
|
|
}
|
|
return super.emit(ev, ...args);
|
|
}
|
|
on(ev, ...args) {
|
|
if (ev === "data" || ev === "readable") {
|
|
this[kReading] = true;
|
|
}
|
|
return super.on(ev, ...args);
|
|
}
|
|
addListener(ev, ...args) {
|
|
return this.on(ev, ...args);
|
|
}
|
|
off(ev, ...args) {
|
|
const ret = super.off(ev, ...args);
|
|
if (ev === "data" || ev === "readable") {
|
|
this[kReading] = this.listenerCount("data") > 0 || this.listenerCount("readable") > 0;
|
|
}
|
|
return ret;
|
|
}
|
|
removeListener(ev, ...args) {
|
|
return this.off(ev, ...args);
|
|
}
|
|
push(chunk) {
|
|
if (this[kConsume] && chunk !== null && this.readableLength === 0) {
|
|
consumePush(this[kConsume], chunk);
|
|
return this[kReading] ? super.push(chunk) : true;
|
|
}
|
|
return super.push(chunk);
|
|
}
|
|
async text() {
|
|
return consume(this, "text");
|
|
}
|
|
async json() {
|
|
return consume(this, "json");
|
|
}
|
|
async blob() {
|
|
return consume(this, "blob");
|
|
}
|
|
async arrayBuffer() {
|
|
return consume(this, "arrayBuffer");
|
|
}
|
|
async formData() {
|
|
throw new NotSupportedError;
|
|
}
|
|
get bodyUsed() {
|
|
return util.isDisturbed(this);
|
|
}
|
|
get body() {
|
|
if (!this[kBody]) {
|
|
this[kBody] = ReadableStreamFrom(this);
|
|
if (this[kConsume]) {
|
|
this[kBody].getReader();
|
|
assert(this[kBody].locked);
|
|
}
|
|
}
|
|
return this[kBody];
|
|
}
|
|
dump(opts) {
|
|
let limit = opts && Number.isFinite(opts.limit) ? opts.limit : 262144;
|
|
const signal = opts && opts.signal;
|
|
if (signal) {
|
|
try {
|
|
if (typeof signal !== "object" || !("aborted" in signal)) {
|
|
throw new InvalidArgumentError("signal must be an AbortSignal");
|
|
}
|
|
util.throwIfAborted(signal);
|
|
} catch (err) {
|
|
return Promise.reject(err);
|
|
}
|
|
}
|
|
if (this.closed) {
|
|
return Promise.resolve(null);
|
|
}
|
|
return new Promise((resolve, reject) => {
|
|
const signalListenerCleanup = signal ? util.addAbortListener(signal, () => {
|
|
this.destroy();
|
|
}) : noop;
|
|
this.on("close", function() {
|
|
signalListenerCleanup();
|
|
if (signal && signal.aborted) {
|
|
reject(signal.reason || Object.assign(new Error("The operation was aborted"), { name: "AbortError" }));
|
|
} else {
|
|
resolve(null);
|
|
}
|
|
}).on("error", noop).on("data", function(chunk) {
|
|
limit -= chunk.length;
|
|
if (limit <= 0) {
|
|
this.destroy();
|
|
}
|
|
}).resume();
|
|
});
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/api/util.js
|
|
var require_util3 = __commonJS((exports, module) => {
|
|
async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) {
|
|
assert(body);
|
|
let chunks = [];
|
|
let limit = 0;
|
|
for await (const chunk of body) {
|
|
chunks.push(chunk);
|
|
limit += chunk.length;
|
|
if (limit > 128 * 1024) {
|
|
chunks = null;
|
|
break;
|
|
}
|
|
}
|
|
if (statusCode === 204 || !contentType || !chunks) {
|
|
process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers));
|
|
return;
|
|
}
|
|
try {
|
|
if (contentType.startsWith("application/json")) {
|
|
const payload = JSON.parse(toUSVString(Buffer.concat(chunks)));
|
|
process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers, payload));
|
|
return;
|
|
}
|
|
if (contentType.startsWith("text/")) {
|
|
const payload = toUSVString(Buffer.concat(chunks));
|
|
process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers, payload));
|
|
return;
|
|
}
|
|
} catch (err) {
|
|
}
|
|
process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`, statusCode, headers));
|
|
}
|
|
var assert = __require("assert");
|
|
var {
|
|
ResponseStatusCodeError
|
|
} = require_errors();
|
|
var { toUSVString } = require_util();
|
|
module.exports = { getResolveErrorBodyCallback };
|
|
});
|
|
|
|
// node_modules/undici/lib/api/abort-signal.js
|
|
var require_abort_signal = __commonJS((exports, module) => {
|
|
var abort = function(self2) {
|
|
if (self2.abort) {
|
|
self2.abort();
|
|
} else {
|
|
self2.onError(new RequestAbortedError);
|
|
}
|
|
};
|
|
var addSignal = function(self2, signal) {
|
|
self2[kSignal] = null;
|
|
self2[kListener] = null;
|
|
if (!signal) {
|
|
return;
|
|
}
|
|
if (signal.aborted) {
|
|
abort(self2);
|
|
return;
|
|
}
|
|
self2[kSignal] = signal;
|
|
self2[kListener] = () => {
|
|
abort(self2);
|
|
};
|
|
addAbortListener(self2[kSignal], self2[kListener]);
|
|
};
|
|
var removeSignal = function(self2) {
|
|
if (!self2[kSignal]) {
|
|
return;
|
|
}
|
|
if ("removeEventListener" in self2[kSignal]) {
|
|
self2[kSignal].removeEventListener("abort", self2[kListener]);
|
|
} else {
|
|
self2[kSignal].removeListener("abort", self2[kListener]);
|
|
}
|
|
self2[kSignal] = null;
|
|
self2[kListener] = null;
|
|
};
|
|
var { addAbortListener } = require_util();
|
|
var { RequestAbortedError } = require_errors();
|
|
var kListener = Symbol("kListener");
|
|
var kSignal = Symbol("kSignal");
|
|
module.exports = {
|
|
addSignal,
|
|
removeSignal
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/api/api-request.js
|
|
var require_api_request = __commonJS((exports, module) => {
|
|
var request = function(opts, callback) {
|
|
if (callback === undefined) {
|
|
return new Promise((resolve, reject) => {
|
|
request.call(this, opts, (err, data) => {
|
|
return err ? reject(err) : resolve(data);
|
|
});
|
|
});
|
|
}
|
|
try {
|
|
this.dispatch(opts, new RequestHandler(opts, callback));
|
|
} catch (err) {
|
|
if (typeof callback !== "function") {
|
|
throw err;
|
|
}
|
|
const opaque = opts && opts.opaque;
|
|
queueMicrotask(() => callback(err, { opaque }));
|
|
}
|
|
};
|
|
var Readable = require_readable();
|
|
var {
|
|
InvalidArgumentError,
|
|
RequestAbortedError
|
|
} = require_errors();
|
|
var util = require_util();
|
|
var { getResolveErrorBodyCallback } = require_util3();
|
|
var { AsyncResource } = __require("async_hooks");
|
|
var { addSignal, removeSignal } = require_abort_signal();
|
|
|
|
class RequestHandler extends AsyncResource {
|
|
constructor(opts, callback) {
|
|
if (!opts || typeof opts !== "object") {
|
|
throw new InvalidArgumentError("invalid opts");
|
|
}
|
|
const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts;
|
|
try {
|
|
if (typeof callback !== "function") {
|
|
throw new InvalidArgumentError("invalid callback");
|
|
}
|
|
if (highWaterMark && (typeof highWaterMark !== "number" || highWaterMark < 0)) {
|
|
throw new InvalidArgumentError("invalid highWaterMark");
|
|
}
|
|
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
|
|
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
|
|
}
|
|
if (method === "CONNECT") {
|
|
throw new InvalidArgumentError("invalid method");
|
|
}
|
|
if (onInfo && typeof onInfo !== "function") {
|
|
throw new InvalidArgumentError("invalid onInfo callback");
|
|
}
|
|
super("UNDICI_REQUEST");
|
|
} catch (err) {
|
|
if (util.isStream(body)) {
|
|
util.destroy(body.on("error", util.nop), err);
|
|
}
|
|
throw err;
|
|
}
|
|
this.responseHeaders = responseHeaders || null;
|
|
this.opaque = opaque || null;
|
|
this.callback = callback;
|
|
this.res = null;
|
|
this.abort = null;
|
|
this.body = body;
|
|
this.trailers = {};
|
|
this.context = null;
|
|
this.onInfo = onInfo || null;
|
|
this.throwOnError = throwOnError;
|
|
this.highWaterMark = highWaterMark;
|
|
if (util.isStream(body)) {
|
|
body.on("error", (err) => {
|
|
this.onError(err);
|
|
});
|
|
}
|
|
addSignal(this, signal);
|
|
}
|
|
onConnect(abort, context) {
|
|
if (!this.callback) {
|
|
throw new RequestAbortedError;
|
|
}
|
|
this.abort = abort;
|
|
this.context = context;
|
|
}
|
|
onHeaders(statusCode, rawHeaders, resume, statusMessage) {
|
|
const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this;
|
|
const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
|
|
if (statusCode < 200) {
|
|
if (this.onInfo) {
|
|
this.onInfo({ statusCode, headers });
|
|
}
|
|
return;
|
|
}
|
|
const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers;
|
|
const contentType = parsedHeaders["content-type"];
|
|
const body = new Readable({ resume, abort, contentType, highWaterMark });
|
|
this.callback = null;
|
|
this.res = body;
|
|
if (callback !== null) {
|
|
if (this.throwOnError && statusCode >= 400) {
|
|
this.runInAsyncScope(getResolveErrorBodyCallback, null, { callback, body, contentType, statusCode, statusMessage, headers });
|
|
} else {
|
|
this.runInAsyncScope(callback, null, null, {
|
|
statusCode,
|
|
headers,
|
|
trailers: this.trailers,
|
|
opaque,
|
|
body,
|
|
context
|
|
});
|
|
}
|
|
}
|
|
}
|
|
onData(chunk) {
|
|
const { res } = this;
|
|
return res.push(chunk);
|
|
}
|
|
onComplete(trailers) {
|
|
const { res } = this;
|
|
removeSignal(this);
|
|
util.parseHeaders(trailers, this.trailers);
|
|
res.push(null);
|
|
}
|
|
onError(err) {
|
|
const { res, callback, body, opaque } = this;
|
|
removeSignal(this);
|
|
if (callback) {
|
|
this.callback = null;
|
|
queueMicrotask(() => {
|
|
this.runInAsyncScope(callback, null, err, { opaque });
|
|
});
|
|
}
|
|
if (res) {
|
|
this.res = null;
|
|
queueMicrotask(() => {
|
|
util.destroy(res, err);
|
|
});
|
|
}
|
|
if (body) {
|
|
this.body = null;
|
|
util.destroy(body, err);
|
|
}
|
|
}
|
|
}
|
|
module.exports = request;
|
|
module.exports.RequestHandler = RequestHandler;
|
|
});
|
|
|
|
// node_modules/undici/lib/api/api-stream.js
|
|
var require_api_stream = __commonJS((exports, module) => {
|
|
var stream = function(opts, factory, callback) {
|
|
if (callback === undefined) {
|
|
return new Promise((resolve, reject) => {
|
|
stream.call(this, opts, factory, (err, data) => {
|
|
return err ? reject(err) : resolve(data);
|
|
});
|
|
});
|
|
}
|
|
try {
|
|
this.dispatch(opts, new StreamHandler(opts, factory, callback));
|
|
} catch (err) {
|
|
if (typeof callback !== "function") {
|
|
throw err;
|
|
}
|
|
const opaque = opts && opts.opaque;
|
|
queueMicrotask(() => callback(err, { opaque }));
|
|
}
|
|
};
|
|
var { finished, PassThrough } = __require("stream");
|
|
var {
|
|
InvalidArgumentError,
|
|
InvalidReturnValueError,
|
|
RequestAbortedError
|
|
} = require_errors();
|
|
var util = require_util();
|
|
var { getResolveErrorBodyCallback } = require_util3();
|
|
var { AsyncResource } = __require("async_hooks");
|
|
var { addSignal, removeSignal } = require_abort_signal();
|
|
|
|
class StreamHandler extends AsyncResource {
|
|
constructor(opts, factory, callback) {
|
|
if (!opts || typeof opts !== "object") {
|
|
throw new InvalidArgumentError("invalid opts");
|
|
}
|
|
const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts;
|
|
try {
|
|
if (typeof callback !== "function") {
|
|
throw new InvalidArgumentError("invalid callback");
|
|
}
|
|
if (typeof factory !== "function") {
|
|
throw new InvalidArgumentError("invalid factory");
|
|
}
|
|
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
|
|
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
|
|
}
|
|
if (method === "CONNECT") {
|
|
throw new InvalidArgumentError("invalid method");
|
|
}
|
|
if (onInfo && typeof onInfo !== "function") {
|
|
throw new InvalidArgumentError("invalid onInfo callback");
|
|
}
|
|
super("UNDICI_STREAM");
|
|
} catch (err) {
|
|
if (util.isStream(body)) {
|
|
util.destroy(body.on("error", util.nop), err);
|
|
}
|
|
throw err;
|
|
}
|
|
this.responseHeaders = responseHeaders || null;
|
|
this.opaque = opaque || null;
|
|
this.factory = factory;
|
|
this.callback = callback;
|
|
this.res = null;
|
|
this.abort = null;
|
|
this.context = null;
|
|
this.trailers = null;
|
|
this.body = body;
|
|
this.onInfo = onInfo || null;
|
|
this.throwOnError = throwOnError || false;
|
|
if (util.isStream(body)) {
|
|
body.on("error", (err) => {
|
|
this.onError(err);
|
|
});
|
|
}
|
|
addSignal(this, signal);
|
|
}
|
|
onConnect(abort, context) {
|
|
if (!this.callback) {
|
|
throw new RequestAbortedError;
|
|
}
|
|
this.abort = abort;
|
|
this.context = context;
|
|
}
|
|
onHeaders(statusCode, rawHeaders, resume, statusMessage) {
|
|
const { factory, opaque, context, callback, responseHeaders } = this;
|
|
const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
|
|
if (statusCode < 200) {
|
|
if (this.onInfo) {
|
|
this.onInfo({ statusCode, headers });
|
|
}
|
|
return;
|
|
}
|
|
this.factory = null;
|
|
let res;
|
|
if (this.throwOnError && statusCode >= 400) {
|
|
const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers;
|
|
const contentType = parsedHeaders["content-type"];
|
|
res = new PassThrough;
|
|
this.callback = null;
|
|
this.runInAsyncScope(getResolveErrorBodyCallback, null, { callback, body: res, contentType, statusCode, statusMessage, headers });
|
|
} else {
|
|
if (factory === null) {
|
|
return;
|
|
}
|
|
res = this.runInAsyncScope(factory, null, {
|
|
statusCode,
|
|
headers,
|
|
opaque,
|
|
context
|
|
});
|
|
if (!res || typeof res.write !== "function" || typeof res.end !== "function" || typeof res.on !== "function") {
|
|
throw new InvalidReturnValueError("expected Writable");
|
|
}
|
|
finished(res, { readable: false }, (err) => {
|
|
const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this;
|
|
this.res = null;
|
|
if (err || !res2.readable) {
|
|
util.destroy(res2, err);
|
|
}
|
|
this.callback = null;
|
|
this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers });
|
|
if (err) {
|
|
abort();
|
|
}
|
|
});
|
|
}
|
|
res.on("drain", resume);
|
|
this.res = res;
|
|
const needDrain = res.writableNeedDrain !== undefined ? res.writableNeedDrain : res._writableState && res._writableState.needDrain;
|
|
return needDrain !== true;
|
|
}
|
|
onData(chunk) {
|
|
const { res } = this;
|
|
return res ? res.write(chunk) : true;
|
|
}
|
|
onComplete(trailers) {
|
|
const { res } = this;
|
|
removeSignal(this);
|
|
if (!res) {
|
|
return;
|
|
}
|
|
this.trailers = util.parseHeaders(trailers);
|
|
res.end();
|
|
}
|
|
onError(err) {
|
|
const { res, callback, opaque, body } = this;
|
|
removeSignal(this);
|
|
this.factory = null;
|
|
if (res) {
|
|
this.res = null;
|
|
util.destroy(res, err);
|
|
} else if (callback) {
|
|
this.callback = null;
|
|
queueMicrotask(() => {
|
|
this.runInAsyncScope(callback, null, err, { opaque });
|
|
});
|
|
}
|
|
if (body) {
|
|
this.body = null;
|
|
util.destroy(body, err);
|
|
}
|
|
}
|
|
}
|
|
module.exports = stream;
|
|
});
|
|
|
|
// node_modules/undici/lib/api/api-pipeline.js
|
|
var require_api_pipeline = __commonJS((exports, module) => {
|
|
var pipeline = function(opts, handler) {
|
|
try {
|
|
const pipelineHandler = new PipelineHandler(opts, handler);
|
|
this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler);
|
|
return pipelineHandler.ret;
|
|
} catch (err) {
|
|
return new PassThrough().destroy(err);
|
|
}
|
|
};
|
|
var {
|
|
Readable,
|
|
Duplex,
|
|
PassThrough
|
|
} = __require("stream");
|
|
var {
|
|
InvalidArgumentError,
|
|
InvalidReturnValueError,
|
|
RequestAbortedError
|
|
} = require_errors();
|
|
var util = require_util();
|
|
var { AsyncResource } = __require("async_hooks");
|
|
var { addSignal, removeSignal } = require_abort_signal();
|
|
var assert = __require("assert");
|
|
var kResume = Symbol("resume");
|
|
|
|
class PipelineRequest extends Readable {
|
|
constructor() {
|
|
super({ autoDestroy: true });
|
|
this[kResume] = null;
|
|
}
|
|
_read() {
|
|
const { [kResume]: resume } = this;
|
|
if (resume) {
|
|
this[kResume] = null;
|
|
resume();
|
|
}
|
|
}
|
|
_destroy(err, callback) {
|
|
this._read();
|
|
callback(err);
|
|
}
|
|
}
|
|
|
|
class PipelineResponse extends Readable {
|
|
constructor(resume) {
|
|
super({ autoDestroy: true });
|
|
this[kResume] = resume;
|
|
}
|
|
_read() {
|
|
this[kResume]();
|
|
}
|
|
_destroy(err, callback) {
|
|
if (!err && !this._readableState.endEmitted) {
|
|
err = new RequestAbortedError;
|
|
}
|
|
callback(err);
|
|
}
|
|
}
|
|
|
|
class PipelineHandler extends AsyncResource {
|
|
constructor(opts, handler) {
|
|
if (!opts || typeof opts !== "object") {
|
|
throw new InvalidArgumentError("invalid opts");
|
|
}
|
|
if (typeof handler !== "function") {
|
|
throw new InvalidArgumentError("invalid handler");
|
|
}
|
|
const { signal, method, opaque, onInfo, responseHeaders } = opts;
|
|
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
|
|
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
|
|
}
|
|
if (method === "CONNECT") {
|
|
throw new InvalidArgumentError("invalid method");
|
|
}
|
|
if (onInfo && typeof onInfo !== "function") {
|
|
throw new InvalidArgumentError("invalid onInfo callback");
|
|
}
|
|
super("UNDICI_PIPELINE");
|
|
this.opaque = opaque || null;
|
|
this.responseHeaders = responseHeaders || null;
|
|
this.handler = handler;
|
|
this.abort = null;
|
|
this.context = null;
|
|
this.onInfo = onInfo || null;
|
|
this.req = new PipelineRequest().on("error", util.nop);
|
|
this.ret = new Duplex({
|
|
readableObjectMode: opts.objectMode,
|
|
autoDestroy: true,
|
|
read: () => {
|
|
const { body } = this;
|
|
if (body && body.resume) {
|
|
body.resume();
|
|
}
|
|
},
|
|
write: (chunk, encoding, callback) => {
|
|
const { req } = this;
|
|
if (req.push(chunk, encoding) || req._readableState.destroyed) {
|
|
callback();
|
|
} else {
|
|
req[kResume] = callback;
|
|
}
|
|
},
|
|
destroy: (err, callback) => {
|
|
const { body, req, res, ret, abort } = this;
|
|
if (!err && !ret._readableState.endEmitted) {
|
|
err = new RequestAbortedError;
|
|
}
|
|
if (abort && err) {
|
|
abort();
|
|
}
|
|
util.destroy(body, err);
|
|
util.destroy(req, err);
|
|
util.destroy(res, err);
|
|
removeSignal(this);
|
|
callback(err);
|
|
}
|
|
}).on("prefinish", () => {
|
|
const { req } = this;
|
|
req.push(null);
|
|
});
|
|
this.res = null;
|
|
addSignal(this, signal);
|
|
}
|
|
onConnect(abort, context) {
|
|
const { ret, res } = this;
|
|
assert(!res, "pipeline cannot be retried");
|
|
if (ret.destroyed) {
|
|
throw new RequestAbortedError;
|
|
}
|
|
this.abort = abort;
|
|
this.context = context;
|
|
}
|
|
onHeaders(statusCode, rawHeaders, resume) {
|
|
const { opaque, handler, context } = this;
|
|
if (statusCode < 200) {
|
|
if (this.onInfo) {
|
|
const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
|
|
this.onInfo({ statusCode, headers });
|
|
}
|
|
return;
|
|
}
|
|
this.res = new PipelineResponse(resume);
|
|
let body;
|
|
try {
|
|
this.handler = null;
|
|
const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
|
|
body = this.runInAsyncScope(handler, null, {
|
|
statusCode,
|
|
headers,
|
|
opaque,
|
|
body: this.res,
|
|
context
|
|
});
|
|
} catch (err) {
|
|
this.res.on("error", util.nop);
|
|
throw err;
|
|
}
|
|
if (!body || typeof body.on !== "function") {
|
|
throw new InvalidReturnValueError("expected Readable");
|
|
}
|
|
body.on("data", (chunk) => {
|
|
const { ret, body: body2 } = this;
|
|
if (!ret.push(chunk) && body2.pause) {
|
|
body2.pause();
|
|
}
|
|
}).on("error", (err) => {
|
|
const { ret } = this;
|
|
util.destroy(ret, err);
|
|
}).on("end", () => {
|
|
const { ret } = this;
|
|
ret.push(null);
|
|
}).on("close", () => {
|
|
const { ret } = this;
|
|
if (!ret._readableState.ended) {
|
|
util.destroy(ret, new RequestAbortedError);
|
|
}
|
|
});
|
|
this.body = body;
|
|
}
|
|
onData(chunk) {
|
|
const { res } = this;
|
|
return res.push(chunk);
|
|
}
|
|
onComplete(trailers) {
|
|
const { res } = this;
|
|
res.push(null);
|
|
}
|
|
onError(err) {
|
|
const { ret } = this;
|
|
this.handler = null;
|
|
util.destroy(ret, err);
|
|
}
|
|
}
|
|
module.exports = pipeline;
|
|
});
|
|
|
|
// node_modules/undici/lib/api/api-upgrade.js
|
|
var require_api_upgrade = __commonJS((exports, module) => {
|
|
var upgrade = function(opts, callback) {
|
|
if (callback === undefined) {
|
|
return new Promise((resolve, reject) => {
|
|
upgrade.call(this, opts, (err, data) => {
|
|
return err ? reject(err) : resolve(data);
|
|
});
|
|
});
|
|
}
|
|
try {
|
|
const upgradeHandler = new UpgradeHandler(opts, callback);
|
|
this.dispatch({
|
|
...opts,
|
|
method: opts.method || "GET",
|
|
upgrade: opts.protocol || "Websocket"
|
|
}, upgradeHandler);
|
|
} catch (err) {
|
|
if (typeof callback !== "function") {
|
|
throw err;
|
|
}
|
|
const opaque = opts && opts.opaque;
|
|
queueMicrotask(() => callback(err, { opaque }));
|
|
}
|
|
};
|
|
var { InvalidArgumentError, RequestAbortedError, SocketError } = require_errors();
|
|
var { AsyncResource } = __require("async_hooks");
|
|
var util = require_util();
|
|
var { addSignal, removeSignal } = require_abort_signal();
|
|
var assert = __require("assert");
|
|
|
|
class UpgradeHandler extends AsyncResource {
|
|
constructor(opts, callback) {
|
|
if (!opts || typeof opts !== "object") {
|
|
throw new InvalidArgumentError("invalid opts");
|
|
}
|
|
if (typeof callback !== "function") {
|
|
throw new InvalidArgumentError("invalid callback");
|
|
}
|
|
const { signal, opaque, responseHeaders } = opts;
|
|
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
|
|
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
|
|
}
|
|
super("UNDICI_UPGRADE");
|
|
this.responseHeaders = responseHeaders || null;
|
|
this.opaque = opaque || null;
|
|
this.callback = callback;
|
|
this.abort = null;
|
|
this.context = null;
|
|
addSignal(this, signal);
|
|
}
|
|
onConnect(abort, context) {
|
|
if (!this.callback) {
|
|
throw new RequestAbortedError;
|
|
}
|
|
this.abort = abort;
|
|
this.context = null;
|
|
}
|
|
onHeaders() {
|
|
throw new SocketError("bad upgrade", null);
|
|
}
|
|
onUpgrade(statusCode, rawHeaders, socket) {
|
|
const { callback, opaque, context } = this;
|
|
assert.strictEqual(statusCode, 101);
|
|
removeSignal(this);
|
|
this.callback = null;
|
|
const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
|
|
this.runInAsyncScope(callback, null, null, {
|
|
headers,
|
|
socket,
|
|
opaque,
|
|
context
|
|
});
|
|
}
|
|
onError(err) {
|
|
const { callback, opaque } = this;
|
|
removeSignal(this);
|
|
if (callback) {
|
|
this.callback = null;
|
|
queueMicrotask(() => {
|
|
this.runInAsyncScope(callback, null, err, { opaque });
|
|
});
|
|
}
|
|
}
|
|
}
|
|
module.exports = upgrade;
|
|
});
|
|
|
|
// node_modules/undici/lib/api/api-connect.js
|
|
var require_api_connect = __commonJS((exports, module) => {
|
|
var connect = function(opts, callback) {
|
|
if (callback === undefined) {
|
|
return new Promise((resolve, reject) => {
|
|
connect.call(this, opts, (err, data) => {
|
|
return err ? reject(err) : resolve(data);
|
|
});
|
|
});
|
|
}
|
|
try {
|
|
const connectHandler = new ConnectHandler(opts, callback);
|
|
this.dispatch({ ...opts, method: "CONNECT" }, connectHandler);
|
|
} catch (err) {
|
|
if (typeof callback !== "function") {
|
|
throw err;
|
|
}
|
|
const opaque = opts && opts.opaque;
|
|
queueMicrotask(() => callback(err, { opaque }));
|
|
}
|
|
};
|
|
var { AsyncResource } = __require("async_hooks");
|
|
var { InvalidArgumentError, RequestAbortedError, SocketError } = require_errors();
|
|
var util = require_util();
|
|
var { addSignal, removeSignal } = require_abort_signal();
|
|
|
|
class ConnectHandler extends AsyncResource {
|
|
constructor(opts, callback) {
|
|
if (!opts || typeof opts !== "object") {
|
|
throw new InvalidArgumentError("invalid opts");
|
|
}
|
|
if (typeof callback !== "function") {
|
|
throw new InvalidArgumentError("invalid callback");
|
|
}
|
|
const { signal, opaque, responseHeaders } = opts;
|
|
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
|
|
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
|
|
}
|
|
super("UNDICI_CONNECT");
|
|
this.opaque = opaque || null;
|
|
this.responseHeaders = responseHeaders || null;
|
|
this.callback = callback;
|
|
this.abort = null;
|
|
addSignal(this, signal);
|
|
}
|
|
onConnect(abort, context) {
|
|
if (!this.callback) {
|
|
throw new RequestAbortedError;
|
|
}
|
|
this.abort = abort;
|
|
this.context = context;
|
|
}
|
|
onHeaders() {
|
|
throw new SocketError("bad connect", null);
|
|
}
|
|
onUpgrade(statusCode, rawHeaders, socket) {
|
|
const { callback, opaque, context } = this;
|
|
removeSignal(this);
|
|
this.callback = null;
|
|
let headers = rawHeaders;
|
|
if (headers != null) {
|
|
headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders);
|
|
}
|
|
this.runInAsyncScope(callback, null, null, {
|
|
statusCode,
|
|
headers,
|
|
socket,
|
|
opaque,
|
|
context
|
|
});
|
|
}
|
|
onError(err) {
|
|
const { callback, opaque } = this;
|
|
removeSignal(this);
|
|
if (callback) {
|
|
this.callback = null;
|
|
queueMicrotask(() => {
|
|
this.runInAsyncScope(callback, null, err, { opaque });
|
|
});
|
|
}
|
|
}
|
|
}
|
|
module.exports = connect;
|
|
});
|
|
|
|
// node_modules/undici/lib/api/index.js
|
|
var require_api = __commonJS((exports, module) => {
|
|
exports.request = require_api_request();
|
|
exports.stream = require_api_stream();
|
|
exports.pipeline = require_api_pipeline();
|
|
exports.upgrade = require_api_upgrade();
|
|
exports.connect = require_api_connect();
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/mock-errors.js
|
|
var require_mock_errors = __commonJS((exports, module) => {
|
|
var { UndiciError } = require_errors();
|
|
|
|
class MockNotMatchedError extends UndiciError {
|
|
constructor(message) {
|
|
super(message);
|
|
Error.captureStackTrace(this, MockNotMatchedError);
|
|
this.name = "MockNotMatchedError";
|
|
this.message = message || "The request does not match any registered mock dispatches";
|
|
this.code = "UND_MOCK_ERR_MOCK_NOT_MATCHED";
|
|
}
|
|
}
|
|
module.exports = {
|
|
MockNotMatchedError
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/mock-symbols.js
|
|
var require_mock_symbols = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
kAgent: Symbol("agent"),
|
|
kOptions: Symbol("options"),
|
|
kFactory: Symbol("factory"),
|
|
kDispatches: Symbol("dispatches"),
|
|
kDispatchKey: Symbol("dispatch key"),
|
|
kDefaultHeaders: Symbol("default headers"),
|
|
kDefaultTrailers: Symbol("default trailers"),
|
|
kContentLength: Symbol("content length"),
|
|
kMockAgent: Symbol("mock agent"),
|
|
kMockAgentSet: Symbol("mock agent set"),
|
|
kMockAgentGet: Symbol("mock agent get"),
|
|
kMockDispatch: Symbol("mock dispatch"),
|
|
kClose: Symbol("close"),
|
|
kOriginalClose: Symbol("original agent close"),
|
|
kOrigin: Symbol("origin"),
|
|
kIsMockActive: Symbol("is mock active"),
|
|
kNetConnect: Symbol("net connect"),
|
|
kGetNetConnect: Symbol("get net connect"),
|
|
kConnected: Symbol("connected")
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/mock-utils.js
|
|
var require_mock_utils = __commonJS((exports, module) => {
|
|
var matchValue = function(match, value) {
|
|
if (typeof match === "string") {
|
|
return match === value;
|
|
}
|
|
if (match instanceof RegExp) {
|
|
return match.test(value);
|
|
}
|
|
if (typeof match === "function") {
|
|
return match(value) === true;
|
|
}
|
|
return false;
|
|
};
|
|
var lowerCaseEntries = function(headers) {
|
|
return Object.fromEntries(Object.entries(headers).map(([headerName, headerValue]) => {
|
|
return [headerName.toLocaleLowerCase(), headerValue];
|
|
}));
|
|
};
|
|
var getHeaderByName = function(headers, key) {
|
|
if (Array.isArray(headers)) {
|
|
for (let i = 0;i < headers.length; i += 2) {
|
|
if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {
|
|
return headers[i + 1];
|
|
}
|
|
}
|
|
return;
|
|
} else if (typeof headers.get === "function") {
|
|
return headers.get(key);
|
|
} else {
|
|
return lowerCaseEntries(headers)[key.toLocaleLowerCase()];
|
|
}
|
|
};
|
|
var buildHeadersFromArray = function(headers) {
|
|
const clone = headers.slice();
|
|
const entries = [];
|
|
for (let index = 0;index < clone.length; index += 2) {
|
|
entries.push([clone[index], clone[index + 1]]);
|
|
}
|
|
return Object.fromEntries(entries);
|
|
};
|
|
var matchHeaders = function(mockDispatch2, headers) {
|
|
if (typeof mockDispatch2.headers === "function") {
|
|
if (Array.isArray(headers)) {
|
|
headers = buildHeadersFromArray(headers);
|
|
}
|
|
return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {});
|
|
}
|
|
if (typeof mockDispatch2.headers === "undefined") {
|
|
return true;
|
|
}
|
|
if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") {
|
|
return false;
|
|
}
|
|
for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) {
|
|
const headerValue = getHeaderByName(headers, matchHeaderName);
|
|
if (!matchValue(matchHeaderValue, headerValue)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
var safeUrl = function(path) {
|
|
if (typeof path !== "string") {
|
|
return path;
|
|
}
|
|
const pathSegments = path.split("?");
|
|
if (pathSegments.length !== 2) {
|
|
return path;
|
|
}
|
|
const qp = new URLSearchParams(pathSegments.pop());
|
|
qp.sort();
|
|
return [...pathSegments, qp.toString()].join("?");
|
|
};
|
|
var matchKey = function(mockDispatch2, { path, method, body, headers }) {
|
|
const pathMatch = matchValue(mockDispatch2.path, path);
|
|
const methodMatch = matchValue(mockDispatch2.method, method);
|
|
const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true;
|
|
const headersMatch = matchHeaders(mockDispatch2, headers);
|
|
return pathMatch && methodMatch && bodyMatch && headersMatch;
|
|
};
|
|
var getResponseData = function(data) {
|
|
if (Buffer.isBuffer(data)) {
|
|
return data;
|
|
} else if (typeof data === "object") {
|
|
return JSON.stringify(data);
|
|
} else {
|
|
return data.toString();
|
|
}
|
|
};
|
|
var getMockDispatch = function(mockDispatches, key) {
|
|
const basePath = key.query ? buildURL(key.path, key.query) : key.path;
|
|
const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath;
|
|
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath));
|
|
if (matchedMockDispatches.length === 0) {
|
|
throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`);
|
|
}
|
|
matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method));
|
|
if (matchedMockDispatches.length === 0) {
|
|
throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}'`);
|
|
}
|
|
matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== "undefined" ? matchValue(body, key.body) : true);
|
|
if (matchedMockDispatches.length === 0) {
|
|
throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}'`);
|
|
}
|
|
matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers));
|
|
if (matchedMockDispatches.length === 0) {
|
|
throw new MockNotMatchedError(`Mock dispatch not matched for headers '${typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers}'`);
|
|
}
|
|
return matchedMockDispatches[0];
|
|
};
|
|
var addMockDispatch = function(mockDispatches, key, data) {
|
|
const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false };
|
|
const replyData = typeof data === "function" ? { callback: data } : { ...data };
|
|
const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } };
|
|
mockDispatches.push(newMockDispatch);
|
|
return newMockDispatch;
|
|
};
|
|
var deleteMockDispatch = function(mockDispatches, key) {
|
|
const index = mockDispatches.findIndex((dispatch) => {
|
|
if (!dispatch.consumed) {
|
|
return false;
|
|
}
|
|
return matchKey(dispatch, key);
|
|
});
|
|
if (index !== -1) {
|
|
mockDispatches.splice(index, 1);
|
|
}
|
|
};
|
|
var buildKey = function(opts) {
|
|
const { path, method, body, headers, query } = opts;
|
|
return {
|
|
path,
|
|
method,
|
|
body,
|
|
headers,
|
|
query
|
|
};
|
|
};
|
|
var generateKeyValues = function(data) {
|
|
return Object.entries(data).reduce((keyValuePairs, [key, value]) => [
|
|
...keyValuePairs,
|
|
Buffer.from(`${key}`),
|
|
Array.isArray(value) ? value.map((x) => Buffer.from(`${x}`)) : Buffer.from(`${value}`)
|
|
], []);
|
|
};
|
|
var getStatusText = function(statusCode) {
|
|
return STATUS_CODES[statusCode] || "unknown";
|
|
};
|
|
async function getResponse(body) {
|
|
const buffers = [];
|
|
for await (const data of body) {
|
|
buffers.push(data);
|
|
}
|
|
return Buffer.concat(buffers).toString("utf8");
|
|
}
|
|
var mockDispatch = function(opts, handler) {
|
|
const key = buildKey(opts);
|
|
const mockDispatch2 = getMockDispatch(this[kDispatches], key);
|
|
mockDispatch2.timesInvoked++;
|
|
if (mockDispatch2.data.callback) {
|
|
mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) };
|
|
}
|
|
const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch2;
|
|
const { timesInvoked, times } = mockDispatch2;
|
|
mockDispatch2.consumed = !persist && timesInvoked >= times;
|
|
mockDispatch2.pending = timesInvoked < times;
|
|
if (error !== null) {
|
|
deleteMockDispatch(this[kDispatches], key);
|
|
handler.onError(error);
|
|
return true;
|
|
}
|
|
if (typeof delay === "number" && delay > 0) {
|
|
setTimeout(() => {
|
|
handleReply(this[kDispatches]);
|
|
}, delay);
|
|
} else {
|
|
handleReply(this[kDispatches]);
|
|
}
|
|
function handleReply(mockDispatches, _data = data) {
|
|
const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers;
|
|
const body = typeof _data === "function" ? _data({ ...opts, headers: optsHeaders }) : _data;
|
|
if (isPromise(body)) {
|
|
body.then((newData) => handleReply(mockDispatches, newData));
|
|
return;
|
|
}
|
|
const responseData = getResponseData(body);
|
|
const responseHeaders = generateKeyValues(headers);
|
|
const responseTrailers = generateKeyValues(trailers);
|
|
handler.abort = nop;
|
|
handler.onHeaders(statusCode, responseHeaders, resume, getStatusText(statusCode));
|
|
handler.onData(Buffer.from(responseData));
|
|
handler.onComplete(responseTrailers);
|
|
deleteMockDispatch(mockDispatches, key);
|
|
}
|
|
function resume() {
|
|
}
|
|
return true;
|
|
};
|
|
var buildMockDispatch = function() {
|
|
const agent = this[kMockAgent];
|
|
const origin = this[kOrigin];
|
|
const originalDispatch = this[kOriginalDispatch];
|
|
return function dispatch(opts, handler) {
|
|
if (agent.isMockActive) {
|
|
try {
|
|
mockDispatch.call(this, opts, handler);
|
|
} catch (error) {
|
|
if (error instanceof MockNotMatchedError) {
|
|
const netConnect = agent[kGetNetConnect]();
|
|
if (netConnect === false) {
|
|
throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`);
|
|
}
|
|
if (checkNetConnect(netConnect, origin)) {
|
|
originalDispatch.call(this, opts, handler);
|
|
} else {
|
|
throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`);
|
|
}
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
} else {
|
|
originalDispatch.call(this, opts, handler);
|
|
}
|
|
};
|
|
};
|
|
var checkNetConnect = function(netConnect, origin) {
|
|
const url = new URL(origin);
|
|
if (netConnect === true) {
|
|
return true;
|
|
} else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
var buildMockOptions = function(opts) {
|
|
if (opts) {
|
|
const { agent, ...mockOptions } = opts;
|
|
return mockOptions;
|
|
}
|
|
};
|
|
var { MockNotMatchedError } = require_mock_errors();
|
|
var {
|
|
kDispatches,
|
|
kMockAgent,
|
|
kOriginalDispatch,
|
|
kOrigin,
|
|
kGetNetConnect
|
|
} = require_mock_symbols();
|
|
var { buildURL, nop } = require_util();
|
|
var { STATUS_CODES } = __require("http");
|
|
var {
|
|
types: {
|
|
isPromise
|
|
}
|
|
} = __require("util");
|
|
module.exports = {
|
|
getResponseData,
|
|
getMockDispatch,
|
|
addMockDispatch,
|
|
deleteMockDispatch,
|
|
buildKey,
|
|
generateKeyValues,
|
|
matchValue,
|
|
getResponse,
|
|
getStatusText,
|
|
mockDispatch,
|
|
buildMockDispatch,
|
|
checkNetConnect,
|
|
buildMockOptions,
|
|
getHeaderByName
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/mock-interceptor.js
|
|
var require_mock_interceptor = __commonJS((exports, module) => {
|
|
var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
|
|
var {
|
|
kDispatches,
|
|
kDispatchKey,
|
|
kDefaultHeaders,
|
|
kDefaultTrailers,
|
|
kContentLength,
|
|
kMockDispatch
|
|
} = require_mock_symbols();
|
|
var { InvalidArgumentError } = require_errors();
|
|
var { buildURL } = require_util();
|
|
|
|
class MockScope {
|
|
constructor(mockDispatch) {
|
|
this[kMockDispatch] = mockDispatch;
|
|
}
|
|
delay(waitInMs) {
|
|
if (typeof waitInMs !== "number" || !Number.isInteger(waitInMs) || waitInMs <= 0) {
|
|
throw new InvalidArgumentError("waitInMs must be a valid integer > 0");
|
|
}
|
|
this[kMockDispatch].delay = waitInMs;
|
|
return this;
|
|
}
|
|
persist() {
|
|
this[kMockDispatch].persist = true;
|
|
return this;
|
|
}
|
|
times(repeatTimes) {
|
|
if (typeof repeatTimes !== "number" || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {
|
|
throw new InvalidArgumentError("repeatTimes must be a valid integer > 0");
|
|
}
|
|
this[kMockDispatch].times = repeatTimes;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
class MockInterceptor {
|
|
constructor(opts, mockDispatches) {
|
|
if (typeof opts !== "object") {
|
|
throw new InvalidArgumentError("opts must be an object");
|
|
}
|
|
if (typeof opts.path === "undefined") {
|
|
throw new InvalidArgumentError("opts.path must be defined");
|
|
}
|
|
if (typeof opts.method === "undefined") {
|
|
opts.method = "GET";
|
|
}
|
|
if (typeof opts.path === "string") {
|
|
if (opts.query) {
|
|
opts.path = buildURL(opts.path, opts.query);
|
|
} else {
|
|
const parsedURL = new URL(opts.path, "data://");
|
|
opts.path = parsedURL.pathname + parsedURL.search;
|
|
}
|
|
}
|
|
if (typeof opts.method === "string") {
|
|
opts.method = opts.method.toUpperCase();
|
|
}
|
|
this[kDispatchKey] = buildKey(opts);
|
|
this[kDispatches] = mockDispatches;
|
|
this[kDefaultHeaders] = {};
|
|
this[kDefaultTrailers] = {};
|
|
this[kContentLength] = false;
|
|
}
|
|
createMockScopeDispatchData(statusCode, data, responseOptions = {}) {
|
|
const responseData = getResponseData(data);
|
|
const contentLength = this[kContentLength] ? { "content-length": responseData.length } : {};
|
|
const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers };
|
|
const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers };
|
|
return { statusCode, data, headers, trailers };
|
|
}
|
|
validateReplyParameters(statusCode, data, responseOptions) {
|
|
if (typeof statusCode === "undefined") {
|
|
throw new InvalidArgumentError("statusCode must be defined");
|
|
}
|
|
if (typeof data === "undefined") {
|
|
throw new InvalidArgumentError("data must be defined");
|
|
}
|
|
if (typeof responseOptions !== "object") {
|
|
throw new InvalidArgumentError("responseOptions must be an object");
|
|
}
|
|
}
|
|
reply(replyData) {
|
|
if (typeof replyData === "function") {
|
|
const wrappedDefaultsCallback = (opts) => {
|
|
const resolvedData = replyData(opts);
|
|
if (typeof resolvedData !== "object") {
|
|
throw new InvalidArgumentError("reply options callback must return an object");
|
|
}
|
|
const { statusCode: statusCode2, data: data2 = "", responseOptions: responseOptions2 = {} } = resolvedData;
|
|
this.validateReplyParameters(statusCode2, data2, responseOptions2);
|
|
return {
|
|
...this.createMockScopeDispatchData(statusCode2, data2, responseOptions2)
|
|
};
|
|
};
|
|
const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback);
|
|
return new MockScope(newMockDispatch2);
|
|
}
|
|
const [statusCode, data = "", responseOptions = {}] = [...arguments];
|
|
this.validateReplyParameters(statusCode, data, responseOptions);
|
|
const dispatchData = this.createMockScopeDispatchData(statusCode, data, responseOptions);
|
|
const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData);
|
|
return new MockScope(newMockDispatch);
|
|
}
|
|
replyWithError(error) {
|
|
if (typeof error === "undefined") {
|
|
throw new InvalidArgumentError("error must be defined");
|
|
}
|
|
const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error });
|
|
return new MockScope(newMockDispatch);
|
|
}
|
|
defaultReplyHeaders(headers) {
|
|
if (typeof headers === "undefined") {
|
|
throw new InvalidArgumentError("headers must be defined");
|
|
}
|
|
this[kDefaultHeaders] = headers;
|
|
return this;
|
|
}
|
|
defaultReplyTrailers(trailers) {
|
|
if (typeof trailers === "undefined") {
|
|
throw new InvalidArgumentError("trailers must be defined");
|
|
}
|
|
this[kDefaultTrailers] = trailers;
|
|
return this;
|
|
}
|
|
replyContentLength() {
|
|
this[kContentLength] = true;
|
|
return this;
|
|
}
|
|
}
|
|
exports.MockInterceptor = MockInterceptor;
|
|
exports.MockScope = MockScope;
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/mock-client.js
|
|
var require_mock_client = __commonJS((exports, module) => {
|
|
var { promisify } = __require("util");
|
|
var Client = require_client();
|
|
var { buildMockDispatch } = require_mock_utils();
|
|
var {
|
|
kDispatches,
|
|
kMockAgent,
|
|
kClose,
|
|
kOriginalClose,
|
|
kOrigin,
|
|
kOriginalDispatch,
|
|
kConnected
|
|
} = require_mock_symbols();
|
|
var { MockInterceptor } = require_mock_interceptor();
|
|
var Symbols = require_symbols();
|
|
var { InvalidArgumentError } = require_errors();
|
|
|
|
class MockClient extends Client {
|
|
constructor(origin, opts) {
|
|
super(origin, opts);
|
|
if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") {
|
|
throw new InvalidArgumentError("Argument opts.agent must implement Agent");
|
|
}
|
|
this[kMockAgent] = opts.agent;
|
|
this[kOrigin] = origin;
|
|
this[kDispatches] = [];
|
|
this[kConnected] = 1;
|
|
this[kOriginalDispatch] = this.dispatch;
|
|
this[kOriginalClose] = this.close.bind(this);
|
|
this.dispatch = buildMockDispatch.call(this);
|
|
this.close = this[kClose];
|
|
}
|
|
get [Symbols.kConnected]() {
|
|
return this[kConnected];
|
|
}
|
|
intercept(opts) {
|
|
return new MockInterceptor(opts, this[kDispatches]);
|
|
}
|
|
async[kClose]() {
|
|
await promisify(this[kOriginalClose])();
|
|
this[kConnected] = 0;
|
|
this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
|
|
}
|
|
}
|
|
module.exports = MockClient;
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/mock-pool.js
|
|
var require_mock_pool = __commonJS((exports, module) => {
|
|
var { promisify } = __require("util");
|
|
var Pool = require_pool();
|
|
var { buildMockDispatch } = require_mock_utils();
|
|
var {
|
|
kDispatches,
|
|
kMockAgent,
|
|
kClose,
|
|
kOriginalClose,
|
|
kOrigin,
|
|
kOriginalDispatch,
|
|
kConnected
|
|
} = require_mock_symbols();
|
|
var { MockInterceptor } = require_mock_interceptor();
|
|
var Symbols = require_symbols();
|
|
var { InvalidArgumentError } = require_errors();
|
|
|
|
class MockPool extends Pool {
|
|
constructor(origin, opts) {
|
|
super(origin, opts);
|
|
if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") {
|
|
throw new InvalidArgumentError("Argument opts.agent must implement Agent");
|
|
}
|
|
this[kMockAgent] = opts.agent;
|
|
this[kOrigin] = origin;
|
|
this[kDispatches] = [];
|
|
this[kConnected] = 1;
|
|
this[kOriginalDispatch] = this.dispatch;
|
|
this[kOriginalClose] = this.close.bind(this);
|
|
this.dispatch = buildMockDispatch.call(this);
|
|
this.close = this[kClose];
|
|
}
|
|
get [Symbols.kConnected]() {
|
|
return this[kConnected];
|
|
}
|
|
intercept(opts) {
|
|
return new MockInterceptor(opts, this[kDispatches]);
|
|
}
|
|
async[kClose]() {
|
|
await promisify(this[kOriginalClose])();
|
|
this[kConnected] = 0;
|
|
this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
|
|
}
|
|
}
|
|
module.exports = MockPool;
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/pluralizer.js
|
|
var require_pluralizer = __commonJS((exports, module) => {
|
|
var singulars = {
|
|
pronoun: "it",
|
|
is: "is",
|
|
was: "was",
|
|
this: "this"
|
|
};
|
|
var plurals = {
|
|
pronoun: "they",
|
|
is: "are",
|
|
was: "were",
|
|
this: "these"
|
|
};
|
|
module.exports = class Pluralizer {
|
|
constructor(singular, plural) {
|
|
this.singular = singular;
|
|
this.plural = plural;
|
|
}
|
|
pluralize(count) {
|
|
const one = count === 1;
|
|
const keys = one ? singulars : plurals;
|
|
const noun = one ? this.singular : this.plural;
|
|
return { ...keys, count, noun };
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/pending-interceptors-formatter.js
|
|
var require_pending_interceptors_formatter = __commonJS((exports, module) => {
|
|
var { Transform } = __require("stream");
|
|
var { Console } = __require("console");
|
|
module.exports = class PendingInterceptorsFormatter {
|
|
constructor({ disableColors } = {}) {
|
|
this.transform = new Transform({
|
|
transform(chunk, _enc, cb) {
|
|
cb(null, chunk);
|
|
}
|
|
});
|
|
this.logger = new Console({
|
|
stdout: this.transform,
|
|
inspectOptions: {
|
|
colors: !disableColors && !process.env.CI
|
|
}
|
|
});
|
|
}
|
|
format(pendingInterceptors) {
|
|
const withPrettyHeaders = pendingInterceptors.map(({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
|
Method: method,
|
|
Origin: origin,
|
|
Path: path,
|
|
"Status code": statusCode,
|
|
Persistent: persist ? "\u2705" : "\u274C",
|
|
Invocations: timesInvoked,
|
|
Remaining: persist ? Infinity : times - timesInvoked
|
|
}));
|
|
this.logger.table(withPrettyHeaders);
|
|
return this.transform.read().toString();
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/mock/mock-agent.js
|
|
var require_mock_agent = __commonJS((exports, module) => {
|
|
var { kClients } = require_symbols();
|
|
var Agent = require_agent();
|
|
var {
|
|
kAgent,
|
|
kMockAgentSet,
|
|
kMockAgentGet,
|
|
kDispatches,
|
|
kIsMockActive,
|
|
kNetConnect,
|
|
kGetNetConnect,
|
|
kOptions,
|
|
kFactory
|
|
} = require_mock_symbols();
|
|
var MockClient = require_mock_client();
|
|
var MockPool = require_mock_pool();
|
|
var { matchValue, buildMockOptions } = require_mock_utils();
|
|
var { InvalidArgumentError, UndiciError } = require_errors();
|
|
var Dispatcher = require_dispatcher();
|
|
var Pluralizer = require_pluralizer();
|
|
var PendingInterceptorsFormatter = require_pending_interceptors_formatter();
|
|
|
|
class FakeWeakRef {
|
|
constructor(value) {
|
|
this.value = value;
|
|
}
|
|
deref() {
|
|
return this.value;
|
|
}
|
|
}
|
|
|
|
class MockAgent extends Dispatcher {
|
|
constructor(opts) {
|
|
super(opts);
|
|
this[kNetConnect] = true;
|
|
this[kIsMockActive] = true;
|
|
if (opts && opts.agent && typeof opts.agent.dispatch !== "function") {
|
|
throw new InvalidArgumentError("Argument opts.agent must implement Agent");
|
|
}
|
|
const agent = opts && opts.agent ? opts.agent : new Agent(opts);
|
|
this[kAgent] = agent;
|
|
this[kClients] = agent[kClients];
|
|
this[kOptions] = buildMockOptions(opts);
|
|
}
|
|
get(origin) {
|
|
let dispatcher = this[kMockAgentGet](origin);
|
|
if (!dispatcher) {
|
|
dispatcher = this[kFactory](origin);
|
|
this[kMockAgentSet](origin, dispatcher);
|
|
}
|
|
return dispatcher;
|
|
}
|
|
dispatch(opts, handler) {
|
|
this.get(opts.origin);
|
|
return this[kAgent].dispatch(opts, handler);
|
|
}
|
|
async close() {
|
|
await this[kAgent].close();
|
|
this[kClients].clear();
|
|
}
|
|
deactivate() {
|
|
this[kIsMockActive] = false;
|
|
}
|
|
activate() {
|
|
this[kIsMockActive] = true;
|
|
}
|
|
enableNetConnect(matcher) {
|
|
if (typeof matcher === "string" || typeof matcher === "function" || matcher instanceof RegExp) {
|
|
if (Array.isArray(this[kNetConnect])) {
|
|
this[kNetConnect].push(matcher);
|
|
} else {
|
|
this[kNetConnect] = [matcher];
|
|
}
|
|
} else if (typeof matcher === "undefined") {
|
|
this[kNetConnect] = true;
|
|
} else {
|
|
throw new InvalidArgumentError("Unsupported matcher. Must be one of String|Function|RegExp.");
|
|
}
|
|
}
|
|
disableNetConnect() {
|
|
this[kNetConnect] = false;
|
|
}
|
|
get isMockActive() {
|
|
return this[kIsMockActive];
|
|
}
|
|
[kMockAgentSet](origin, dispatcher) {
|
|
this[kClients].set(origin, new FakeWeakRef(dispatcher));
|
|
}
|
|
[kFactory](origin) {
|
|
const mockOptions = Object.assign({ agent: this }, this[kOptions]);
|
|
return this[kOptions] && this[kOptions].connections === 1 ? new MockClient(origin, mockOptions) : new MockPool(origin, mockOptions);
|
|
}
|
|
[kMockAgentGet](origin) {
|
|
const ref = this[kClients].get(origin);
|
|
if (ref) {
|
|
return ref.deref();
|
|
}
|
|
if (typeof origin !== "string") {
|
|
const dispatcher = this[kFactory]("http://localhost:9999");
|
|
this[kMockAgentSet](origin, dispatcher);
|
|
return dispatcher;
|
|
}
|
|
for (const [keyMatcher, nonExplicitRef] of Array.from(this[kClients])) {
|
|
const nonExplicitDispatcher = nonExplicitRef.deref();
|
|
if (nonExplicitDispatcher && typeof keyMatcher !== "string" && matchValue(keyMatcher, origin)) {
|
|
const dispatcher = this[kFactory](origin);
|
|
this[kMockAgentSet](origin, dispatcher);
|
|
dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches];
|
|
return dispatcher;
|
|
}
|
|
}
|
|
}
|
|
[kGetNetConnect]() {
|
|
return this[kNetConnect];
|
|
}
|
|
pendingInterceptors() {
|
|
const mockAgentClients = this[kClients];
|
|
return Array.from(mockAgentClients.entries()).flatMap(([origin, scope]) => scope.deref()[kDispatches].map((dispatch) => ({ ...dispatch, origin }))).filter(({ pending }) => pending);
|
|
}
|
|
assertNoPendingInterceptors({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter } = {}) {
|
|
const pending = this.pendingInterceptors();
|
|
if (pending.length === 0) {
|
|
return;
|
|
}
|
|
const pluralizer = new Pluralizer("interceptor", "interceptors").pluralize(pending.length);
|
|
throw new UndiciError(`
|
|
${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending:
|
|
|
|
${pendingInterceptorsFormatter.format(pending)}
|
|
`.trim());
|
|
}
|
|
}
|
|
module.exports = MockAgent;
|
|
});
|
|
|
|
// node_modules/undici/lib/proxy-agent.js
|
|
var require_proxy_agent = __commonJS((exports, module) => {
|
|
var defaultProtocolPort = function(protocol) {
|
|
return protocol === "https:" ? 443 : 80;
|
|
};
|
|
var buildProxyOptions = function(opts) {
|
|
if (typeof opts === "string") {
|
|
opts = { uri: opts };
|
|
}
|
|
if (!opts || !opts.uri) {
|
|
throw new InvalidArgumentError("Proxy opts.uri is mandatory");
|
|
}
|
|
return {
|
|
uri: opts.uri,
|
|
protocol: opts.protocol || "https"
|
|
};
|
|
};
|
|
var defaultFactory = function(origin, opts) {
|
|
return new Pool(origin, opts);
|
|
};
|
|
var buildHeaders = function(headers) {
|
|
if (Array.isArray(headers)) {
|
|
const headersPair = {};
|
|
for (let i = 0;i < headers.length; i += 2) {
|
|
headersPair[headers[i]] = headers[i + 1];
|
|
}
|
|
return headersPair;
|
|
}
|
|
return headers;
|
|
};
|
|
var throwIfProxyAuthIsSent = function(headers) {
|
|
const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization");
|
|
if (existProxyAuth) {
|
|
throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor");
|
|
}
|
|
};
|
|
var { kProxy, kClose, kDestroy, kInterceptors } = require_symbols();
|
|
var { URL: URL2 } = __require("url");
|
|
var Agent = require_agent();
|
|
var Pool = require_pool();
|
|
var DispatcherBase = require_dispatcher_base();
|
|
var { InvalidArgumentError, RequestAbortedError } = require_errors();
|
|
var buildConnector = require_connect();
|
|
var kAgent = Symbol("proxy agent");
|
|
var kClient = Symbol("proxy client");
|
|
var kProxyHeaders = Symbol("proxy headers");
|
|
var kRequestTls = Symbol("request tls settings");
|
|
var kProxyTls = Symbol("proxy tls settings");
|
|
var kConnectEndpoint = Symbol("connect endpoint function");
|
|
|
|
class ProxyAgent extends DispatcherBase {
|
|
constructor(opts) {
|
|
super(opts);
|
|
this[kProxy] = buildProxyOptions(opts);
|
|
this[kAgent] = new Agent(opts);
|
|
this[kInterceptors] = opts.interceptors && opts.interceptors.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : [];
|
|
if (typeof opts === "string") {
|
|
opts = { uri: opts };
|
|
}
|
|
if (!opts || !opts.uri) {
|
|
throw new InvalidArgumentError("Proxy opts.uri is mandatory");
|
|
}
|
|
const { clientFactory = defaultFactory } = opts;
|
|
if (typeof clientFactory !== "function") {
|
|
throw new InvalidArgumentError("Proxy opts.clientFactory must be a function.");
|
|
}
|
|
this[kRequestTls] = opts.requestTls;
|
|
this[kProxyTls] = opts.proxyTls;
|
|
this[kProxyHeaders] = opts.headers || {};
|
|
const resolvedUrl = new URL2(opts.uri);
|
|
const { origin, port, host, username, password } = resolvedUrl;
|
|
if (opts.auth && opts.token) {
|
|
throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token");
|
|
} else if (opts.auth) {
|
|
this[kProxyHeaders]["proxy-authorization"] = `Basic ${opts.auth}`;
|
|
} else if (opts.token) {
|
|
this[kProxyHeaders]["proxy-authorization"] = opts.token;
|
|
} else if (username && password) {
|
|
this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`;
|
|
}
|
|
const connect = buildConnector({ ...opts.proxyTls });
|
|
this[kConnectEndpoint] = buildConnector({ ...opts.requestTls });
|
|
this[kClient] = clientFactory(resolvedUrl, { connect });
|
|
this[kAgent] = new Agent({
|
|
...opts,
|
|
connect: async (opts2, callback) => {
|
|
let requestedHost = opts2.host;
|
|
if (!opts2.port) {
|
|
requestedHost += `:${defaultProtocolPort(opts2.protocol)}`;
|
|
}
|
|
try {
|
|
const { socket, statusCode } = await this[kClient].connect({
|
|
origin,
|
|
port,
|
|
path: requestedHost,
|
|
signal: opts2.signal,
|
|
headers: {
|
|
...this[kProxyHeaders],
|
|
host
|
|
}
|
|
});
|
|
if (statusCode !== 200) {
|
|
socket.on("error", () => {
|
|
}).destroy();
|
|
callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`));
|
|
}
|
|
if (opts2.protocol !== "https:") {
|
|
callback(null, socket);
|
|
return;
|
|
}
|
|
let servername;
|
|
if (this[kRequestTls]) {
|
|
servername = this[kRequestTls].servername;
|
|
} else {
|
|
servername = opts2.servername;
|
|
}
|
|
this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback);
|
|
} catch (err) {
|
|
callback(err);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
dispatch(opts, handler) {
|
|
const { host } = new URL2(opts.origin);
|
|
const headers = buildHeaders(opts.headers);
|
|
throwIfProxyAuthIsSent(headers);
|
|
return this[kAgent].dispatch({
|
|
...opts,
|
|
headers: {
|
|
...headers,
|
|
host
|
|
}
|
|
}, handler);
|
|
}
|
|
async[kClose]() {
|
|
await this[kAgent].close();
|
|
await this[kClient].close();
|
|
}
|
|
async[kDestroy]() {
|
|
await this[kAgent].destroy();
|
|
await this[kClient].destroy();
|
|
}
|
|
}
|
|
module.exports = ProxyAgent;
|
|
});
|
|
|
|
// node_modules/undici/lib/handler/RetryHandler.js
|
|
var require_RetryHandler = __commonJS((exports, module) => {
|
|
var calculateRetryAfterHeader = function(retryAfter) {
|
|
const current = Date.now();
|
|
const diff = new Date(retryAfter).getTime() - current;
|
|
return diff;
|
|
};
|
|
var assert = __require("assert");
|
|
var { kRetryHandlerDefaultRetry } = require_symbols();
|
|
var { RequestRetryError } = require_errors();
|
|
var { isDisturbed, parseHeaders, parseRangeHeader } = require_util();
|
|
|
|
class RetryHandler {
|
|
constructor(opts, handlers) {
|
|
const { retryOptions, ...dispatchOpts } = opts;
|
|
const {
|
|
retry: retryFn,
|
|
maxRetries,
|
|
maxTimeout,
|
|
minTimeout,
|
|
timeoutFactor,
|
|
methods,
|
|
errorCodes,
|
|
retryAfter,
|
|
statusCodes
|
|
} = retryOptions ?? {};
|
|
this.dispatch = handlers.dispatch;
|
|
this.handler = handlers.handler;
|
|
this.opts = dispatchOpts;
|
|
this.abort = null;
|
|
this.aborted = false;
|
|
this.retryOpts = {
|
|
retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry],
|
|
retryAfter: retryAfter ?? true,
|
|
maxTimeout: maxTimeout ?? 30 * 1000,
|
|
timeout: minTimeout ?? 500,
|
|
timeoutFactor: timeoutFactor ?? 2,
|
|
maxRetries: maxRetries ?? 5,
|
|
methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"],
|
|
statusCodes: statusCodes ?? [500, 502, 503, 504, 429],
|
|
errorCodes: errorCodes ?? [
|
|
"ECONNRESET",
|
|
"ECONNREFUSED",
|
|
"ENOTFOUND",
|
|
"ENETDOWN",
|
|
"ENETUNREACH",
|
|
"EHOSTDOWN",
|
|
"EHOSTUNREACH",
|
|
"EPIPE"
|
|
]
|
|
};
|
|
this.retryCount = 0;
|
|
this.start = 0;
|
|
this.end = null;
|
|
this.etag = null;
|
|
this.resume = null;
|
|
this.handler.onConnect((reason) => {
|
|
this.aborted = true;
|
|
if (this.abort) {
|
|
this.abort(reason);
|
|
} else {
|
|
this.reason = reason;
|
|
}
|
|
});
|
|
}
|
|
onRequestSent() {
|
|
if (this.handler.onRequestSent) {
|
|
this.handler.onRequestSent();
|
|
}
|
|
}
|
|
onUpgrade(statusCode, headers, socket) {
|
|
if (this.handler.onUpgrade) {
|
|
this.handler.onUpgrade(statusCode, headers, socket);
|
|
}
|
|
}
|
|
onConnect(abort) {
|
|
if (this.aborted) {
|
|
abort(this.reason);
|
|
} else {
|
|
this.abort = abort;
|
|
}
|
|
}
|
|
onBodySent(chunk) {
|
|
if (this.handler.onBodySent)
|
|
return this.handler.onBodySent(chunk);
|
|
}
|
|
static [kRetryHandlerDefaultRetry](err, { state, opts }, cb) {
|
|
const { statusCode, code, headers } = err;
|
|
const { method, retryOptions } = opts;
|
|
const {
|
|
maxRetries,
|
|
timeout,
|
|
maxTimeout,
|
|
timeoutFactor,
|
|
statusCodes,
|
|
errorCodes,
|
|
methods
|
|
} = retryOptions;
|
|
let { counter, currentTimeout } = state;
|
|
currentTimeout = currentTimeout != null && currentTimeout > 0 ? currentTimeout : timeout;
|
|
if (code && code !== "UND_ERR_REQ_RETRY" && code !== "UND_ERR_SOCKET" && !errorCodes.includes(code)) {
|
|
cb(err);
|
|
return;
|
|
}
|
|
if (Array.isArray(methods) && !methods.includes(method)) {
|
|
cb(err);
|
|
return;
|
|
}
|
|
if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) {
|
|
cb(err);
|
|
return;
|
|
}
|
|
if (counter > maxRetries) {
|
|
cb(err);
|
|
return;
|
|
}
|
|
let retryAfterHeader = headers != null && headers["retry-after"];
|
|
if (retryAfterHeader) {
|
|
retryAfterHeader = Number(retryAfterHeader);
|
|
retryAfterHeader = isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1000;
|
|
}
|
|
const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(currentTimeout * timeoutFactor ** counter, maxTimeout);
|
|
state.currentTimeout = retryTimeout;
|
|
setTimeout(() => cb(null), retryTimeout);
|
|
}
|
|
onHeaders(statusCode, rawHeaders, resume, statusMessage) {
|
|
const headers = parseHeaders(rawHeaders);
|
|
this.retryCount += 1;
|
|
if (statusCode >= 300) {
|
|
this.abort(new RequestRetryError("Request failed", statusCode, {
|
|
headers,
|
|
count: this.retryCount
|
|
}));
|
|
return false;
|
|
}
|
|
if (this.resume != null) {
|
|
this.resume = null;
|
|
if (statusCode !== 206) {
|
|
return true;
|
|
}
|
|
const contentRange = parseRangeHeader(headers["content-range"]);
|
|
if (!contentRange) {
|
|
this.abort(new RequestRetryError("Content-Range mismatch", statusCode, {
|
|
headers,
|
|
count: this.retryCount
|
|
}));
|
|
return false;
|
|
}
|
|
if (this.etag != null && this.etag !== headers.etag) {
|
|
this.abort(new RequestRetryError("ETag mismatch", statusCode, {
|
|
headers,
|
|
count: this.retryCount
|
|
}));
|
|
return false;
|
|
}
|
|
const { start, size, end = size } = contentRange;
|
|
assert(this.start === start, "content-range mismatch");
|
|
assert(this.end == null || this.end === end, "content-range mismatch");
|
|
this.resume = resume;
|
|
return true;
|
|
}
|
|
if (this.end == null) {
|
|
if (statusCode === 206) {
|
|
const range = parseRangeHeader(headers["content-range"]);
|
|
if (range == null) {
|
|
return this.handler.onHeaders(statusCode, rawHeaders, resume, statusMessage);
|
|
}
|
|
const { start, size, end = size } = range;
|
|
assert(start != null && Number.isFinite(start) && this.start !== start, "content-range mismatch");
|
|
assert(Number.isFinite(start));
|
|
assert(end != null && Number.isFinite(end) && this.end !== end, "invalid content-length");
|
|
this.start = start;
|
|
this.end = end;
|
|
}
|
|
if (this.end == null) {
|
|
const contentLength = headers["content-length"];
|
|
this.end = contentLength != null ? Number(contentLength) : null;
|
|
}
|
|
assert(Number.isFinite(this.start));
|
|
assert(this.end == null || Number.isFinite(this.end), "invalid content-length");
|
|
this.resume = resume;
|
|
this.etag = headers.etag != null ? headers.etag : null;
|
|
return this.handler.onHeaders(statusCode, rawHeaders, resume, statusMessage);
|
|
}
|
|
const err = new RequestRetryError("Request failed", statusCode, {
|
|
headers,
|
|
count: this.retryCount
|
|
});
|
|
this.abort(err);
|
|
return false;
|
|
}
|
|
onData(chunk) {
|
|
this.start += chunk.length;
|
|
return this.handler.onData(chunk);
|
|
}
|
|
onComplete(rawTrailers) {
|
|
this.retryCount = 0;
|
|
return this.handler.onComplete(rawTrailers);
|
|
}
|
|
onError(err) {
|
|
if (this.aborted || isDisturbed(this.opts.body)) {
|
|
return this.handler.onError(err);
|
|
}
|
|
this.retryOpts.retry(err, {
|
|
state: { counter: this.retryCount++, currentTimeout: this.retryAfter },
|
|
opts: { retryOptions: this.retryOpts, ...this.opts }
|
|
}, onRetry.bind(this));
|
|
function onRetry(err2) {
|
|
if (err2 != null || this.aborted || isDisturbed(this.opts.body)) {
|
|
return this.handler.onError(err2);
|
|
}
|
|
if (this.start !== 0) {
|
|
this.opts = {
|
|
...this.opts,
|
|
headers: {
|
|
...this.opts.headers,
|
|
range: `bytes=${this.start}-${this.end ?? ""}`
|
|
}
|
|
};
|
|
}
|
|
try {
|
|
this.dispatch(this.opts, this);
|
|
} catch (err3) {
|
|
this.handler.onError(err3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
module.exports = RetryHandler;
|
|
});
|
|
|
|
// node_modules/undici/lib/global.js
|
|
var require_global2 = __commonJS((exports, module) => {
|
|
var setGlobalDispatcher = function(agent) {
|
|
if (!agent || typeof agent.dispatch !== "function") {
|
|
throw new InvalidArgumentError("Argument agent must implement Agent");
|
|
}
|
|
Object.defineProperty(globalThis, globalDispatcher, {
|
|
value: agent,
|
|
writable: true,
|
|
enumerable: false,
|
|
configurable: false
|
|
});
|
|
};
|
|
var getGlobalDispatcher = function() {
|
|
return globalThis[globalDispatcher];
|
|
};
|
|
var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
|
|
var { InvalidArgumentError } = require_errors();
|
|
var Agent = require_agent();
|
|
if (getGlobalDispatcher() === undefined) {
|
|
setGlobalDispatcher(new Agent);
|
|
}
|
|
module.exports = {
|
|
setGlobalDispatcher,
|
|
getGlobalDispatcher
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/handler/DecoratorHandler.js
|
|
var require_DecoratorHandler = __commonJS((exports, module) => {
|
|
module.exports = class DecoratorHandler {
|
|
constructor(handler) {
|
|
this.handler = handler;
|
|
}
|
|
onConnect(...args) {
|
|
return this.handler.onConnect(...args);
|
|
}
|
|
onError(...args) {
|
|
return this.handler.onError(...args);
|
|
}
|
|
onUpgrade(...args) {
|
|
return this.handler.onUpgrade(...args);
|
|
}
|
|
onHeaders(...args) {
|
|
return this.handler.onHeaders(...args);
|
|
}
|
|
onData(...args) {
|
|
return this.handler.onData(...args);
|
|
}
|
|
onComplete(...args) {
|
|
return this.handler.onComplete(...args);
|
|
}
|
|
onBodySent(...args) {
|
|
return this.handler.onBodySent(...args);
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/headers.js
|
|
var require_headers = __commonJS((exports, module) => {
|
|
var isHTTPWhiteSpaceCharCode = function(code) {
|
|
return code === 10 || code === 13 || code === 9 || code === 32;
|
|
};
|
|
var headerValueNormalize = function(potentialValue) {
|
|
let i = 0;
|
|
let j = potentialValue.length;
|
|
while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1)))
|
|
--j;
|
|
while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i)))
|
|
++i;
|
|
return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j);
|
|
};
|
|
var fill = function(headers, object) {
|
|
if (Array.isArray(object)) {
|
|
for (let i = 0;i < object.length; ++i) {
|
|
const header = object[i];
|
|
if (header.length !== 2) {
|
|
throw webidl.errors.exception({
|
|
header: "Headers constructor",
|
|
message: `expected name/value pair to be length 2, found ${header.length}.`
|
|
});
|
|
}
|
|
appendHeader(headers, header[0], header[1]);
|
|
}
|
|
} else if (typeof object === "object" && object !== null) {
|
|
const keys = Object.keys(object);
|
|
for (let i = 0;i < keys.length; ++i) {
|
|
appendHeader(headers, keys[i], object[keys[i]]);
|
|
}
|
|
} else {
|
|
throw webidl.errors.conversionFailed({
|
|
prefix: "Headers constructor",
|
|
argument: "Argument 1",
|
|
types: ["sequence<sequence<ByteString>>", "record<ByteString, ByteString>"]
|
|
});
|
|
}
|
|
};
|
|
var appendHeader = function(headers, name, value) {
|
|
value = headerValueNormalize(value);
|
|
if (!isValidHeaderName(name)) {
|
|
throw webidl.errors.invalidArgument({
|
|
prefix: "Headers.append",
|
|
value: name,
|
|
type: "header name"
|
|
});
|
|
} else if (!isValidHeaderValue(value)) {
|
|
throw webidl.errors.invalidArgument({
|
|
prefix: "Headers.append",
|
|
value,
|
|
type: "header value"
|
|
});
|
|
}
|
|
if (headers[kGuard] === "immutable") {
|
|
throw new TypeError("immutable");
|
|
} else if (headers[kGuard] === "request-no-cors") {
|
|
}
|
|
return headers[kHeadersList].append(name, value);
|
|
};
|
|
var { kHeadersList, kConstruct } = require_symbols();
|
|
var { kGuard } = require_symbols2();
|
|
var { kEnumerableProperty } = require_util();
|
|
var {
|
|
makeIterator,
|
|
isValidHeaderName,
|
|
isValidHeaderValue
|
|
} = require_util2();
|
|
var { webidl } = require_webidl();
|
|
var assert = __require("assert");
|
|
var kHeadersMap = Symbol("headers map");
|
|
var kHeadersSortedMap = Symbol("headers map sorted");
|
|
|
|
class HeadersList {
|
|
cookies = null;
|
|
constructor(init) {
|
|
if (init instanceof HeadersList) {
|
|
this[kHeadersMap] = new Map(init[kHeadersMap]);
|
|
this[kHeadersSortedMap] = init[kHeadersSortedMap];
|
|
this.cookies = init.cookies === null ? null : [...init.cookies];
|
|
} else {
|
|
this[kHeadersMap] = new Map(init);
|
|
this[kHeadersSortedMap] = null;
|
|
}
|
|
}
|
|
contains(name) {
|
|
name = name.toLowerCase();
|
|
return this[kHeadersMap].has(name);
|
|
}
|
|
clear() {
|
|
this[kHeadersMap].clear();
|
|
this[kHeadersSortedMap] = null;
|
|
this.cookies = null;
|
|
}
|
|
append(name, value) {
|
|
this[kHeadersSortedMap] = null;
|
|
const lowercaseName = name.toLowerCase();
|
|
const exists = this[kHeadersMap].get(lowercaseName);
|
|
if (exists) {
|
|
const delimiter = lowercaseName === "cookie" ? "; " : ", ";
|
|
this[kHeadersMap].set(lowercaseName, {
|
|
name: exists.name,
|
|
value: `${exists.value}${delimiter}${value}`
|
|
});
|
|
} else {
|
|
this[kHeadersMap].set(lowercaseName, { name, value });
|
|
}
|
|
if (lowercaseName === "set-cookie") {
|
|
this.cookies ??= [];
|
|
this.cookies.push(value);
|
|
}
|
|
}
|
|
set(name, value) {
|
|
this[kHeadersSortedMap] = null;
|
|
const lowercaseName = name.toLowerCase();
|
|
if (lowercaseName === "set-cookie") {
|
|
this.cookies = [value];
|
|
}
|
|
this[kHeadersMap].set(lowercaseName, { name, value });
|
|
}
|
|
delete(name) {
|
|
this[kHeadersSortedMap] = null;
|
|
name = name.toLowerCase();
|
|
if (name === "set-cookie") {
|
|
this.cookies = null;
|
|
}
|
|
this[kHeadersMap].delete(name);
|
|
}
|
|
get(name) {
|
|
const value = this[kHeadersMap].get(name.toLowerCase());
|
|
return value === undefined ? null : value.value;
|
|
}
|
|
*[Symbol.iterator]() {
|
|
for (const [name, { value }] of this[kHeadersMap]) {
|
|
yield [name, value];
|
|
}
|
|
}
|
|
get entries() {
|
|
const headers = {};
|
|
if (this[kHeadersMap].size) {
|
|
for (const { name, value } of this[kHeadersMap].values()) {
|
|
headers[name] = value;
|
|
}
|
|
}
|
|
return headers;
|
|
}
|
|
}
|
|
|
|
class Headers {
|
|
constructor(init = undefined) {
|
|
if (init === kConstruct) {
|
|
return;
|
|
}
|
|
this[kHeadersList] = new HeadersList;
|
|
this[kGuard] = "none";
|
|
if (init !== undefined) {
|
|
init = webidl.converters.HeadersInit(init);
|
|
fill(this, init);
|
|
}
|
|
}
|
|
append(name, value) {
|
|
webidl.brandCheck(this, Headers);
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "Headers.append" });
|
|
name = webidl.converters.ByteString(name);
|
|
value = webidl.converters.ByteString(value);
|
|
return appendHeader(this, name, value);
|
|
}
|
|
delete(name) {
|
|
webidl.brandCheck(this, Headers);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Headers.delete" });
|
|
name = webidl.converters.ByteString(name);
|
|
if (!isValidHeaderName(name)) {
|
|
throw webidl.errors.invalidArgument({
|
|
prefix: "Headers.delete",
|
|
value: name,
|
|
type: "header name"
|
|
});
|
|
}
|
|
if (this[kGuard] === "immutable") {
|
|
throw new TypeError("immutable");
|
|
} else if (this[kGuard] === "request-no-cors") {
|
|
}
|
|
if (!this[kHeadersList].contains(name)) {
|
|
return;
|
|
}
|
|
this[kHeadersList].delete(name);
|
|
}
|
|
get(name) {
|
|
webidl.brandCheck(this, Headers);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Headers.get" });
|
|
name = webidl.converters.ByteString(name);
|
|
if (!isValidHeaderName(name)) {
|
|
throw webidl.errors.invalidArgument({
|
|
prefix: "Headers.get",
|
|
value: name,
|
|
type: "header name"
|
|
});
|
|
}
|
|
return this[kHeadersList].get(name);
|
|
}
|
|
has(name) {
|
|
webidl.brandCheck(this, Headers);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Headers.has" });
|
|
name = webidl.converters.ByteString(name);
|
|
if (!isValidHeaderName(name)) {
|
|
throw webidl.errors.invalidArgument({
|
|
prefix: "Headers.has",
|
|
value: name,
|
|
type: "header name"
|
|
});
|
|
}
|
|
return this[kHeadersList].contains(name);
|
|
}
|
|
set(name, value) {
|
|
webidl.brandCheck(this, Headers);
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "Headers.set" });
|
|
name = webidl.converters.ByteString(name);
|
|
value = webidl.converters.ByteString(value);
|
|
value = headerValueNormalize(value);
|
|
if (!isValidHeaderName(name)) {
|
|
throw webidl.errors.invalidArgument({
|
|
prefix: "Headers.set",
|
|
value: name,
|
|
type: "header name"
|
|
});
|
|
} else if (!isValidHeaderValue(value)) {
|
|
throw webidl.errors.invalidArgument({
|
|
prefix: "Headers.set",
|
|
value,
|
|
type: "header value"
|
|
});
|
|
}
|
|
if (this[kGuard] === "immutable") {
|
|
throw new TypeError("immutable");
|
|
} else if (this[kGuard] === "request-no-cors") {
|
|
}
|
|
this[kHeadersList].set(name, value);
|
|
}
|
|
getSetCookie() {
|
|
webidl.brandCheck(this, Headers);
|
|
const list = this[kHeadersList].cookies;
|
|
if (list) {
|
|
return [...list];
|
|
}
|
|
return [];
|
|
}
|
|
get [kHeadersSortedMap]() {
|
|
if (this[kHeadersList][kHeadersSortedMap]) {
|
|
return this[kHeadersList][kHeadersSortedMap];
|
|
}
|
|
const headers = [];
|
|
const names = [...this[kHeadersList]].sort((a, b) => a[0] < b[0] ? -1 : 1);
|
|
const cookies = this[kHeadersList].cookies;
|
|
for (let i = 0;i < names.length; ++i) {
|
|
const [name, value] = names[i];
|
|
if (name === "set-cookie") {
|
|
for (let j = 0;j < cookies.length; ++j) {
|
|
headers.push([name, cookies[j]]);
|
|
}
|
|
} else {
|
|
assert(value !== null);
|
|
headers.push([name, value]);
|
|
}
|
|
}
|
|
this[kHeadersList][kHeadersSortedMap] = headers;
|
|
return headers;
|
|
}
|
|
keys() {
|
|
webidl.brandCheck(this, Headers);
|
|
if (this[kGuard] === "immutable") {
|
|
const value = this[kHeadersSortedMap];
|
|
return makeIterator(() => value, "Headers", "key");
|
|
}
|
|
return makeIterator(() => [...this[kHeadersSortedMap].values()], "Headers", "key");
|
|
}
|
|
values() {
|
|
webidl.brandCheck(this, Headers);
|
|
if (this[kGuard] === "immutable") {
|
|
const value = this[kHeadersSortedMap];
|
|
return makeIterator(() => value, "Headers", "value");
|
|
}
|
|
return makeIterator(() => [...this[kHeadersSortedMap].values()], "Headers", "value");
|
|
}
|
|
entries() {
|
|
webidl.brandCheck(this, Headers);
|
|
if (this[kGuard] === "immutable") {
|
|
const value = this[kHeadersSortedMap];
|
|
return makeIterator(() => value, "Headers", "key+value");
|
|
}
|
|
return makeIterator(() => [...this[kHeadersSortedMap].values()], "Headers", "key+value");
|
|
}
|
|
forEach(callbackFn, thisArg = globalThis) {
|
|
webidl.brandCheck(this, Headers);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Headers.forEach" });
|
|
if (typeof callbackFn !== "function") {
|
|
throw new TypeError("Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'.");
|
|
}
|
|
for (const [key, value] of this) {
|
|
callbackFn.apply(thisArg, [value, key, this]);
|
|
}
|
|
}
|
|
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
webidl.brandCheck(this, Headers);
|
|
return this[kHeadersList];
|
|
}
|
|
}
|
|
Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
|
|
Object.defineProperties(Headers.prototype, {
|
|
append: kEnumerableProperty,
|
|
delete: kEnumerableProperty,
|
|
get: kEnumerableProperty,
|
|
has: kEnumerableProperty,
|
|
set: kEnumerableProperty,
|
|
getSetCookie: kEnumerableProperty,
|
|
keys: kEnumerableProperty,
|
|
values: kEnumerableProperty,
|
|
entries: kEnumerableProperty,
|
|
forEach: kEnumerableProperty,
|
|
[Symbol.iterator]: { enumerable: false },
|
|
[Symbol.toStringTag]: {
|
|
value: "Headers",
|
|
configurable: true
|
|
}
|
|
});
|
|
webidl.converters.HeadersInit = function(V) {
|
|
if (webidl.util.Type(V) === "Object") {
|
|
if (V[Symbol.iterator]) {
|
|
return webidl.converters["sequence<sequence<ByteString>>"](V);
|
|
}
|
|
return webidl.converters["record<ByteString, ByteString>"](V);
|
|
}
|
|
throw webidl.errors.conversionFailed({
|
|
prefix: "Headers constructor",
|
|
argument: "Argument 1",
|
|
types: ["sequence<sequence<ByteString>>", "record<ByteString, ByteString>"]
|
|
});
|
|
};
|
|
module.exports = {
|
|
fill,
|
|
Headers,
|
|
HeadersList
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/response.js
|
|
var require_response = __commonJS((exports, module) => {
|
|
var cloneResponse = function(response) {
|
|
if (response.internalResponse) {
|
|
return filterResponse(cloneResponse(response.internalResponse), response.type);
|
|
}
|
|
const newResponse = makeResponse({ ...response, body: null });
|
|
if (response.body != null) {
|
|
newResponse.body = cloneBody(response.body);
|
|
}
|
|
return newResponse;
|
|
};
|
|
var makeResponse = function(init) {
|
|
return {
|
|
aborted: false,
|
|
rangeRequested: false,
|
|
timingAllowPassed: false,
|
|
requestIncludesCredentials: false,
|
|
type: "default",
|
|
status: 200,
|
|
timingInfo: null,
|
|
cacheState: "",
|
|
statusText: "",
|
|
...init,
|
|
headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList,
|
|
urlList: init.urlList ? [...init.urlList] : []
|
|
};
|
|
};
|
|
var makeNetworkError = function(reason) {
|
|
const isError = isErrorLike(reason);
|
|
return makeResponse({
|
|
type: "error",
|
|
status: 0,
|
|
error: isError ? reason : new Error(reason ? String(reason) : reason),
|
|
aborted: reason && reason.name === "AbortError"
|
|
});
|
|
};
|
|
var makeFilteredResponse = function(response, state) {
|
|
state = {
|
|
internalResponse: response,
|
|
...state
|
|
};
|
|
return new Proxy(response, {
|
|
get(target, p) {
|
|
return p in state ? state[p] : target[p];
|
|
},
|
|
set(target, p, value) {
|
|
assert(!(p in state));
|
|
target[p] = value;
|
|
return true;
|
|
}
|
|
});
|
|
};
|
|
var filterResponse = function(response, type) {
|
|
if (type === "basic") {
|
|
return makeFilteredResponse(response, {
|
|
type: "basic",
|
|
headersList: response.headersList
|
|
});
|
|
} else if (type === "cors") {
|
|
return makeFilteredResponse(response, {
|
|
type: "cors",
|
|
headersList: response.headersList
|
|
});
|
|
} else if (type === "opaque") {
|
|
return makeFilteredResponse(response, {
|
|
type: "opaque",
|
|
urlList: Object.freeze([]),
|
|
status: 0,
|
|
statusText: "",
|
|
body: null
|
|
});
|
|
} else if (type === "opaqueredirect") {
|
|
return makeFilteredResponse(response, {
|
|
type: "opaqueredirect",
|
|
status: 0,
|
|
statusText: "",
|
|
headersList: [],
|
|
body: null
|
|
});
|
|
} else {
|
|
assert(false);
|
|
}
|
|
};
|
|
var makeAppropriateNetworkError = function(fetchParams, err = null) {
|
|
assert(isCancelled(fetchParams));
|
|
return isAborted(fetchParams) ? makeNetworkError(Object.assign(new DOMException2("The operation was aborted.", "AbortError"), { cause: err })) : makeNetworkError(Object.assign(new DOMException2("Request was cancelled."), { cause: err }));
|
|
};
|
|
var initializeResponse = function(response, init, body) {
|
|
if (init.status !== null && (init.status < 200 || init.status > 599)) {
|
|
throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');
|
|
}
|
|
if ("statusText" in init && init.statusText != null) {
|
|
if (!isValidReasonPhrase(String(init.statusText))) {
|
|
throw new TypeError("Invalid statusText");
|
|
}
|
|
}
|
|
if ("status" in init && init.status != null) {
|
|
response[kState].status = init.status;
|
|
}
|
|
if ("statusText" in init && init.statusText != null) {
|
|
response[kState].statusText = init.statusText;
|
|
}
|
|
if ("headers" in init && init.headers != null) {
|
|
fill(response[kHeaders], init.headers);
|
|
}
|
|
if (body) {
|
|
if (nullBodyStatus.includes(response.status)) {
|
|
throw webidl.errors.exception({
|
|
header: "Response constructor",
|
|
message: "Invalid response status code " + response.status
|
|
});
|
|
}
|
|
response[kState].body = body.body;
|
|
if (body.type != null && !response[kState].headersList.contains("Content-Type")) {
|
|
response[kState].headersList.append("content-type", body.type);
|
|
}
|
|
}
|
|
};
|
|
var { Headers, HeadersList, fill } = require_headers();
|
|
var { extractBody, cloneBody, mixinBody } = require_body();
|
|
var util = require_util();
|
|
var { kEnumerableProperty } = util;
|
|
var {
|
|
isValidReasonPhrase,
|
|
isCancelled,
|
|
isAborted,
|
|
isBlobLike,
|
|
serializeJavascriptValueToJSONString,
|
|
isErrorLike,
|
|
isomorphicEncode
|
|
} = require_util2();
|
|
var {
|
|
redirectStatusSet,
|
|
nullBodyStatus,
|
|
DOMException: DOMException2
|
|
} = require_constants2();
|
|
var { kState, kHeaders, kGuard, kRealm } = require_symbols2();
|
|
var { webidl } = require_webidl();
|
|
var { FormData: FormData2 } = require_formdata();
|
|
var { getGlobalOrigin } = require_global();
|
|
var { URLSerializer } = require_dataURL();
|
|
var { kHeadersList, kConstruct } = require_symbols();
|
|
var assert = __require("assert");
|
|
var { types } = __require("util");
|
|
var ReadableStream2 = globalThis.ReadableStream || __require("stream/web").ReadableStream;
|
|
var textEncoder = new TextEncoder("utf-8");
|
|
|
|
class Response2 {
|
|
static error() {
|
|
const relevantRealm = { settingsObject: {} };
|
|
const responseObject = new Response2;
|
|
responseObject[kState] = makeNetworkError();
|
|
responseObject[kRealm] = relevantRealm;
|
|
responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList;
|
|
responseObject[kHeaders][kGuard] = "immutable";
|
|
responseObject[kHeaders][kRealm] = relevantRealm;
|
|
return responseObject;
|
|
}
|
|
static json(data, init = {}) {
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Response.json" });
|
|
if (init !== null) {
|
|
init = webidl.converters.ResponseInit(init);
|
|
}
|
|
const bytes = textEncoder.encode(serializeJavascriptValueToJSONString(data));
|
|
const body = extractBody(bytes);
|
|
const relevantRealm = { settingsObject: {} };
|
|
const responseObject = new Response2;
|
|
responseObject[kRealm] = relevantRealm;
|
|
responseObject[kHeaders][kGuard] = "response";
|
|
responseObject[kHeaders][kRealm] = relevantRealm;
|
|
initializeResponse(responseObject, init, { body: body[0], type: "application/json" });
|
|
return responseObject;
|
|
}
|
|
static redirect(url, status = 302) {
|
|
const relevantRealm = { settingsObject: {} };
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Response.redirect" });
|
|
url = webidl.converters.USVString(url);
|
|
status = webidl.converters["unsigned short"](status);
|
|
let parsedURL;
|
|
try {
|
|
parsedURL = new URL(url, getGlobalOrigin());
|
|
} catch (err) {
|
|
throw Object.assign(new TypeError("Failed to parse URL from " + url), {
|
|
cause: err
|
|
});
|
|
}
|
|
if (!redirectStatusSet.has(status)) {
|
|
throw new RangeError("Invalid status code " + status);
|
|
}
|
|
const responseObject = new Response2;
|
|
responseObject[kRealm] = relevantRealm;
|
|
responseObject[kHeaders][kGuard] = "immutable";
|
|
responseObject[kHeaders][kRealm] = relevantRealm;
|
|
responseObject[kState].status = status;
|
|
const value = isomorphicEncode(URLSerializer(parsedURL));
|
|
responseObject[kState].headersList.append("location", value);
|
|
return responseObject;
|
|
}
|
|
constructor(body = null, init = {}) {
|
|
if (body !== null) {
|
|
body = webidl.converters.BodyInit(body);
|
|
}
|
|
init = webidl.converters.ResponseInit(init);
|
|
this[kRealm] = { settingsObject: {} };
|
|
this[kState] = makeResponse({});
|
|
this[kHeaders] = new Headers(kConstruct);
|
|
this[kHeaders][kGuard] = "response";
|
|
this[kHeaders][kHeadersList] = this[kState].headersList;
|
|
this[kHeaders][kRealm] = this[kRealm];
|
|
let bodyWithType = null;
|
|
if (body != null) {
|
|
const [extractedBody, type] = extractBody(body);
|
|
bodyWithType = { body: extractedBody, type };
|
|
}
|
|
initializeResponse(this, init, bodyWithType);
|
|
}
|
|
get type() {
|
|
webidl.brandCheck(this, Response2);
|
|
return this[kState].type;
|
|
}
|
|
get url() {
|
|
webidl.brandCheck(this, Response2);
|
|
const urlList = this[kState].urlList;
|
|
const url = urlList[urlList.length - 1] ?? null;
|
|
if (url === null) {
|
|
return "";
|
|
}
|
|
return URLSerializer(url, true);
|
|
}
|
|
get redirected() {
|
|
webidl.brandCheck(this, Response2);
|
|
return this[kState].urlList.length > 1;
|
|
}
|
|
get status() {
|
|
webidl.brandCheck(this, Response2);
|
|
return this[kState].status;
|
|
}
|
|
get ok() {
|
|
webidl.brandCheck(this, Response2);
|
|
return this[kState].status >= 200 && this[kState].status <= 299;
|
|
}
|
|
get statusText() {
|
|
webidl.brandCheck(this, Response2);
|
|
return this[kState].statusText;
|
|
}
|
|
get headers() {
|
|
webidl.brandCheck(this, Response2);
|
|
return this[kHeaders];
|
|
}
|
|
get body() {
|
|
webidl.brandCheck(this, Response2);
|
|
return this[kState].body ? this[kState].body.stream : null;
|
|
}
|
|
get bodyUsed() {
|
|
webidl.brandCheck(this, Response2);
|
|
return !!this[kState].body && util.isDisturbed(this[kState].body.stream);
|
|
}
|
|
clone() {
|
|
webidl.brandCheck(this, Response2);
|
|
if (this.bodyUsed || this.body && this.body.locked) {
|
|
throw webidl.errors.exception({
|
|
header: "Response.clone",
|
|
message: "Body has already been consumed."
|
|
});
|
|
}
|
|
const clonedResponse = cloneResponse(this[kState]);
|
|
const clonedResponseObject = new Response2;
|
|
clonedResponseObject[kState] = clonedResponse;
|
|
clonedResponseObject[kRealm] = this[kRealm];
|
|
clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList;
|
|
clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard];
|
|
clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm];
|
|
return clonedResponseObject;
|
|
}
|
|
}
|
|
mixinBody(Response2);
|
|
Object.defineProperties(Response2.prototype, {
|
|
type: kEnumerableProperty,
|
|
url: kEnumerableProperty,
|
|
status: kEnumerableProperty,
|
|
ok: kEnumerableProperty,
|
|
redirected: kEnumerableProperty,
|
|
statusText: kEnumerableProperty,
|
|
headers: kEnumerableProperty,
|
|
clone: kEnumerableProperty,
|
|
body: kEnumerableProperty,
|
|
bodyUsed: kEnumerableProperty,
|
|
[Symbol.toStringTag]: {
|
|
value: "Response",
|
|
configurable: true
|
|
}
|
|
});
|
|
Object.defineProperties(Response2, {
|
|
json: kEnumerableProperty,
|
|
redirect: kEnumerableProperty,
|
|
error: kEnumerableProperty
|
|
});
|
|
webidl.converters.ReadableStream = webidl.interfaceConverter(ReadableStream2);
|
|
webidl.converters.FormData = webidl.interfaceConverter(FormData2);
|
|
webidl.converters.URLSearchParams = webidl.interfaceConverter(URLSearchParams);
|
|
webidl.converters.XMLHttpRequestBodyInit = function(V) {
|
|
if (typeof V === "string") {
|
|
return webidl.converters.USVString(V);
|
|
}
|
|
if (isBlobLike(V)) {
|
|
return webidl.converters.Blob(V, { strict: false });
|
|
}
|
|
if (types.isArrayBuffer(V) || types.isTypedArray(V) || types.isDataView(V)) {
|
|
return webidl.converters.BufferSource(V);
|
|
}
|
|
if (util.isFormDataLike(V)) {
|
|
return webidl.converters.FormData(V, { strict: false });
|
|
}
|
|
if (V instanceof URLSearchParams) {
|
|
return webidl.converters.URLSearchParams(V);
|
|
}
|
|
return webidl.converters.DOMString(V);
|
|
};
|
|
webidl.converters.BodyInit = function(V) {
|
|
if (V instanceof ReadableStream2) {
|
|
return webidl.converters.ReadableStream(V);
|
|
}
|
|
if (V?.[Symbol.asyncIterator]) {
|
|
return V;
|
|
}
|
|
return webidl.converters.XMLHttpRequestBodyInit(V);
|
|
};
|
|
webidl.converters.ResponseInit = webidl.dictionaryConverter([
|
|
{
|
|
key: "status",
|
|
converter: webidl.converters["unsigned short"],
|
|
defaultValue: 200
|
|
},
|
|
{
|
|
key: "statusText",
|
|
converter: webidl.converters.ByteString,
|
|
defaultValue: ""
|
|
},
|
|
{
|
|
key: "headers",
|
|
converter: webidl.converters.HeadersInit
|
|
}
|
|
]);
|
|
module.exports = {
|
|
makeNetworkError,
|
|
makeResponse,
|
|
makeAppropriateNetworkError,
|
|
filterResponse,
|
|
Response: Response2,
|
|
cloneResponse
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/request.js
|
|
var require_request2 = __commonJS((exports, module) => {
|
|
var makeRequest = function(init) {
|
|
const request = {
|
|
method: "GET",
|
|
localURLsOnly: false,
|
|
unsafeRequest: false,
|
|
body: null,
|
|
client: null,
|
|
reservedClient: null,
|
|
replacesClientId: "",
|
|
window: "client",
|
|
keepalive: false,
|
|
serviceWorkers: "all",
|
|
initiator: "",
|
|
destination: "",
|
|
priority: null,
|
|
origin: "client",
|
|
policyContainer: "client",
|
|
referrer: "client",
|
|
referrerPolicy: "",
|
|
mode: "no-cors",
|
|
useCORSPreflightFlag: false,
|
|
credentials: "same-origin",
|
|
useCredentials: false,
|
|
cache: "default",
|
|
redirect: "follow",
|
|
integrity: "",
|
|
cryptoGraphicsNonceMetadata: "",
|
|
parserMetadata: "",
|
|
reloadNavigation: false,
|
|
historyNavigation: false,
|
|
userActivation: false,
|
|
taintedOrigin: false,
|
|
redirectCount: 0,
|
|
responseTainting: "basic",
|
|
preventNoCacheCacheControlHeaderModification: false,
|
|
done: false,
|
|
timingAllowFailed: false,
|
|
...init,
|
|
headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList
|
|
};
|
|
request.url = request.urlList[0];
|
|
return request;
|
|
};
|
|
var cloneRequest = function(request) {
|
|
const newRequest = makeRequest({ ...request, body: null });
|
|
if (request.body != null) {
|
|
newRequest.body = cloneBody(request.body);
|
|
}
|
|
return newRequest;
|
|
};
|
|
var { extractBody, mixinBody, cloneBody } = require_body();
|
|
var { Headers, fill: fillHeaders, HeadersList } = require_headers();
|
|
var { FinalizationRegistry } = require_dispatcher_weakref()();
|
|
var util = require_util();
|
|
var {
|
|
isValidHTTPToken,
|
|
sameOrigin,
|
|
normalizeMethod,
|
|
makePolicyContainer,
|
|
normalizeMethodRecord
|
|
} = require_util2();
|
|
var {
|
|
forbiddenMethodsSet,
|
|
corsSafeListedMethodsSet,
|
|
referrerPolicy,
|
|
requestRedirect,
|
|
requestMode,
|
|
requestCredentials,
|
|
requestCache,
|
|
requestDuplex
|
|
} = require_constants2();
|
|
var { kEnumerableProperty } = util;
|
|
var { kHeaders, kSignal, kState, kGuard, kRealm } = require_symbols2();
|
|
var { webidl } = require_webidl();
|
|
var { getGlobalOrigin } = require_global();
|
|
var { URLSerializer } = require_dataURL();
|
|
var { kHeadersList, kConstruct } = require_symbols();
|
|
var assert = __require("assert");
|
|
var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __require("events");
|
|
var TransformStream = globalThis.TransformStream;
|
|
var kAbortController = Symbol("abortController");
|
|
var requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {
|
|
signal.removeEventListener("abort", abort);
|
|
});
|
|
|
|
class Request2 {
|
|
constructor(input, init = {}) {
|
|
if (input === kConstruct) {
|
|
return;
|
|
}
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Request constructor" });
|
|
input = webidl.converters.RequestInfo(input);
|
|
init = webidl.converters.RequestInit(init);
|
|
this[kRealm] = {
|
|
settingsObject: {
|
|
baseUrl: getGlobalOrigin(),
|
|
get origin() {
|
|
return this.baseUrl?.origin;
|
|
},
|
|
policyContainer: makePolicyContainer()
|
|
}
|
|
};
|
|
let request = null;
|
|
let fallbackMode = null;
|
|
const baseUrl = this[kRealm].settingsObject.baseUrl;
|
|
let signal = null;
|
|
if (typeof input === "string") {
|
|
let parsedURL;
|
|
try {
|
|
parsedURL = new URL(input, baseUrl);
|
|
} catch (err) {
|
|
throw new TypeError("Failed to parse URL from " + input, { cause: err });
|
|
}
|
|
if (parsedURL.username || parsedURL.password) {
|
|
throw new TypeError("Request cannot be constructed from a URL that includes credentials: " + input);
|
|
}
|
|
request = makeRequest({ urlList: [parsedURL] });
|
|
fallbackMode = "cors";
|
|
} else {
|
|
assert(input instanceof Request2);
|
|
request = input[kState];
|
|
signal = input[kSignal];
|
|
}
|
|
const origin = this[kRealm].settingsObject.origin;
|
|
let window2 = "client";
|
|
if (request.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) {
|
|
window2 = request.window;
|
|
}
|
|
if (init.window != null) {
|
|
throw new TypeError(`'window' option '${window2}' must be null`);
|
|
}
|
|
if ("window" in init) {
|
|
window2 = "no-window";
|
|
}
|
|
request = makeRequest({
|
|
method: request.method,
|
|
headersList: request.headersList,
|
|
unsafeRequest: request.unsafeRequest,
|
|
client: this[kRealm].settingsObject,
|
|
window: window2,
|
|
priority: request.priority,
|
|
origin: request.origin,
|
|
referrer: request.referrer,
|
|
referrerPolicy: request.referrerPolicy,
|
|
mode: request.mode,
|
|
credentials: request.credentials,
|
|
cache: request.cache,
|
|
redirect: request.redirect,
|
|
integrity: request.integrity,
|
|
keepalive: request.keepalive,
|
|
reloadNavigation: request.reloadNavigation,
|
|
historyNavigation: request.historyNavigation,
|
|
urlList: [...request.urlList]
|
|
});
|
|
const initHasKey = Object.keys(init).length !== 0;
|
|
if (initHasKey) {
|
|
if (request.mode === "navigate") {
|
|
request.mode = "same-origin";
|
|
}
|
|
request.reloadNavigation = false;
|
|
request.historyNavigation = false;
|
|
request.origin = "client";
|
|
request.referrer = "client";
|
|
request.referrerPolicy = "";
|
|
request.url = request.urlList[request.urlList.length - 1];
|
|
request.urlList = [request.url];
|
|
}
|
|
if (init.referrer !== undefined) {
|
|
const referrer = init.referrer;
|
|
if (referrer === "") {
|
|
request.referrer = "no-referrer";
|
|
} else {
|
|
let parsedReferrer;
|
|
try {
|
|
parsedReferrer = new URL(referrer, baseUrl);
|
|
} catch (err) {
|
|
throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err });
|
|
}
|
|
if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, this[kRealm].settingsObject.baseUrl)) {
|
|
request.referrer = "client";
|
|
} else {
|
|
request.referrer = parsedReferrer;
|
|
}
|
|
}
|
|
}
|
|
if (init.referrerPolicy !== undefined) {
|
|
request.referrerPolicy = init.referrerPolicy;
|
|
}
|
|
let mode;
|
|
if (init.mode !== undefined) {
|
|
mode = init.mode;
|
|
} else {
|
|
mode = fallbackMode;
|
|
}
|
|
if (mode === "navigate") {
|
|
throw webidl.errors.exception({
|
|
header: "Request constructor",
|
|
message: "invalid request mode navigate."
|
|
});
|
|
}
|
|
if (mode != null) {
|
|
request.mode = mode;
|
|
}
|
|
if (init.credentials !== undefined) {
|
|
request.credentials = init.credentials;
|
|
}
|
|
if (init.cache !== undefined) {
|
|
request.cache = init.cache;
|
|
}
|
|
if (request.cache === "only-if-cached" && request.mode !== "same-origin") {
|
|
throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");
|
|
}
|
|
if (init.redirect !== undefined) {
|
|
request.redirect = init.redirect;
|
|
}
|
|
if (init.integrity != null) {
|
|
request.integrity = String(init.integrity);
|
|
}
|
|
if (init.keepalive !== undefined) {
|
|
request.keepalive = Boolean(init.keepalive);
|
|
}
|
|
if (init.method !== undefined) {
|
|
let method = init.method;
|
|
if (!isValidHTTPToken(method)) {
|
|
throw new TypeError(`'${method}' is not a valid HTTP method.`);
|
|
}
|
|
if (forbiddenMethodsSet.has(method.toUpperCase())) {
|
|
throw new TypeError(`'${method}' HTTP method is unsupported.`);
|
|
}
|
|
method = normalizeMethodRecord[method] ?? normalizeMethod(method);
|
|
request.method = method;
|
|
}
|
|
if (init.signal !== undefined) {
|
|
signal = init.signal;
|
|
}
|
|
this[kState] = request;
|
|
const ac = new AbortController;
|
|
this[kSignal] = ac.signal;
|
|
this[kSignal][kRealm] = this[kRealm];
|
|
if (signal != null) {
|
|
if (!signal || typeof signal.aborted !== "boolean" || typeof signal.addEventListener !== "function") {
|
|
throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.");
|
|
}
|
|
if (signal.aborted) {
|
|
ac.abort(signal.reason);
|
|
} else {
|
|
this[kAbortController] = ac;
|
|
const acRef = new WeakRef(ac);
|
|
const abort = function() {
|
|
const ac2 = acRef.deref();
|
|
if (ac2 !== undefined) {
|
|
ac2.abort(this.reason);
|
|
}
|
|
};
|
|
try {
|
|
if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) {
|
|
setMaxListeners(100, signal);
|
|
} else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) {
|
|
setMaxListeners(100, signal);
|
|
}
|
|
} catch {
|
|
}
|
|
util.addAbortListener(signal, abort);
|
|
requestFinalizer.register(ac, { signal, abort });
|
|
}
|
|
}
|
|
this[kHeaders] = new Headers(kConstruct);
|
|
this[kHeaders][kHeadersList] = request.headersList;
|
|
this[kHeaders][kGuard] = "request";
|
|
this[kHeaders][kRealm] = this[kRealm];
|
|
if (mode === "no-cors") {
|
|
if (!corsSafeListedMethodsSet.has(request.method)) {
|
|
throw new TypeError(`'${request.method} is unsupported in no-cors mode.`);
|
|
}
|
|
this[kHeaders][kGuard] = "request-no-cors";
|
|
}
|
|
if (initHasKey) {
|
|
const headersList = this[kHeaders][kHeadersList];
|
|
const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList);
|
|
headersList.clear();
|
|
if (headers instanceof HeadersList) {
|
|
for (const [key, val] of headers) {
|
|
headersList.append(key, val);
|
|
}
|
|
headersList.cookies = headers.cookies;
|
|
} else {
|
|
fillHeaders(this[kHeaders], headers);
|
|
}
|
|
}
|
|
const inputBody = input instanceof Request2 ? input[kState].body : null;
|
|
if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) {
|
|
throw new TypeError("Request with GET/HEAD method cannot have body.");
|
|
}
|
|
let initBody = null;
|
|
if (init.body != null) {
|
|
const [extractedBody, contentType] = extractBody(init.body, request.keepalive);
|
|
initBody = extractedBody;
|
|
if (contentType && !this[kHeaders][kHeadersList].contains("content-type")) {
|
|
this[kHeaders].append("content-type", contentType);
|
|
}
|
|
}
|
|
const inputOrInitBody = initBody ?? inputBody;
|
|
if (inputOrInitBody != null && inputOrInitBody.source == null) {
|
|
if (initBody != null && init.duplex == null) {
|
|
throw new TypeError("RequestInit: duplex option is required when sending a body.");
|
|
}
|
|
if (request.mode !== "same-origin" && request.mode !== "cors") {
|
|
throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');
|
|
}
|
|
request.useCORSPreflightFlag = true;
|
|
}
|
|
let finalBody = inputOrInitBody;
|
|
if (initBody == null && inputBody != null) {
|
|
if (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) {
|
|
throw new TypeError("Cannot construct a Request with a Request object that has already been used.");
|
|
}
|
|
if (!TransformStream) {
|
|
TransformStream = __require("stream/web").TransformStream;
|
|
}
|
|
const identityTransform = new TransformStream;
|
|
inputBody.stream.pipeThrough(identityTransform);
|
|
finalBody = {
|
|
source: inputBody.source,
|
|
length: inputBody.length,
|
|
stream: identityTransform.readable
|
|
};
|
|
}
|
|
this[kState].body = finalBody;
|
|
}
|
|
get method() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].method;
|
|
}
|
|
get url() {
|
|
webidl.brandCheck(this, Request2);
|
|
return URLSerializer(this[kState].url);
|
|
}
|
|
get headers() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kHeaders];
|
|
}
|
|
get destination() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].destination;
|
|
}
|
|
get referrer() {
|
|
webidl.brandCheck(this, Request2);
|
|
if (this[kState].referrer === "no-referrer") {
|
|
return "";
|
|
}
|
|
if (this[kState].referrer === "client") {
|
|
return "about:client";
|
|
}
|
|
return this[kState].referrer.toString();
|
|
}
|
|
get referrerPolicy() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].referrerPolicy;
|
|
}
|
|
get mode() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].mode;
|
|
}
|
|
get credentials() {
|
|
return this[kState].credentials;
|
|
}
|
|
get cache() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].cache;
|
|
}
|
|
get redirect() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].redirect;
|
|
}
|
|
get integrity() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].integrity;
|
|
}
|
|
get keepalive() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].keepalive;
|
|
}
|
|
get isReloadNavigation() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].reloadNavigation;
|
|
}
|
|
get isHistoryNavigation() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].historyNavigation;
|
|
}
|
|
get signal() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kSignal];
|
|
}
|
|
get body() {
|
|
webidl.brandCheck(this, Request2);
|
|
return this[kState].body ? this[kState].body.stream : null;
|
|
}
|
|
get bodyUsed() {
|
|
webidl.brandCheck(this, Request2);
|
|
return !!this[kState].body && util.isDisturbed(this[kState].body.stream);
|
|
}
|
|
get duplex() {
|
|
webidl.brandCheck(this, Request2);
|
|
return "half";
|
|
}
|
|
clone() {
|
|
webidl.brandCheck(this, Request2);
|
|
if (this.bodyUsed || this.body?.locked) {
|
|
throw new TypeError("unusable");
|
|
}
|
|
const clonedRequest = cloneRequest(this[kState]);
|
|
const clonedRequestObject = new Request2(kConstruct);
|
|
clonedRequestObject[kState] = clonedRequest;
|
|
clonedRequestObject[kRealm] = this[kRealm];
|
|
clonedRequestObject[kHeaders] = new Headers(kConstruct);
|
|
clonedRequestObject[kHeaders][kHeadersList] = clonedRequest.headersList;
|
|
clonedRequestObject[kHeaders][kGuard] = this[kHeaders][kGuard];
|
|
clonedRequestObject[kHeaders][kRealm] = this[kHeaders][kRealm];
|
|
const ac = new AbortController;
|
|
if (this.signal.aborted) {
|
|
ac.abort(this.signal.reason);
|
|
} else {
|
|
util.addAbortListener(this.signal, () => {
|
|
ac.abort(this.signal.reason);
|
|
});
|
|
}
|
|
clonedRequestObject[kSignal] = ac.signal;
|
|
return clonedRequestObject;
|
|
}
|
|
}
|
|
mixinBody(Request2);
|
|
Object.defineProperties(Request2.prototype, {
|
|
method: kEnumerableProperty,
|
|
url: kEnumerableProperty,
|
|
headers: kEnumerableProperty,
|
|
redirect: kEnumerableProperty,
|
|
clone: kEnumerableProperty,
|
|
signal: kEnumerableProperty,
|
|
duplex: kEnumerableProperty,
|
|
destination: kEnumerableProperty,
|
|
body: kEnumerableProperty,
|
|
bodyUsed: kEnumerableProperty,
|
|
isHistoryNavigation: kEnumerableProperty,
|
|
isReloadNavigation: kEnumerableProperty,
|
|
keepalive: kEnumerableProperty,
|
|
integrity: kEnumerableProperty,
|
|
cache: kEnumerableProperty,
|
|
credentials: kEnumerableProperty,
|
|
attribute: kEnumerableProperty,
|
|
referrerPolicy: kEnumerableProperty,
|
|
referrer: kEnumerableProperty,
|
|
mode: kEnumerableProperty,
|
|
[Symbol.toStringTag]: {
|
|
value: "Request",
|
|
configurable: true
|
|
}
|
|
});
|
|
webidl.converters.Request = webidl.interfaceConverter(Request2);
|
|
webidl.converters.RequestInfo = function(V) {
|
|
if (typeof V === "string") {
|
|
return webidl.converters.USVString(V);
|
|
}
|
|
if (V instanceof Request2) {
|
|
return webidl.converters.Request(V);
|
|
}
|
|
return webidl.converters.USVString(V);
|
|
};
|
|
webidl.converters.AbortSignal = webidl.interfaceConverter(AbortSignal);
|
|
webidl.converters.RequestInit = webidl.dictionaryConverter([
|
|
{
|
|
key: "method",
|
|
converter: webidl.converters.ByteString
|
|
},
|
|
{
|
|
key: "headers",
|
|
converter: webidl.converters.HeadersInit
|
|
},
|
|
{
|
|
key: "body",
|
|
converter: webidl.nullableConverter(webidl.converters.BodyInit)
|
|
},
|
|
{
|
|
key: "referrer",
|
|
converter: webidl.converters.USVString
|
|
},
|
|
{
|
|
key: "referrerPolicy",
|
|
converter: webidl.converters.DOMString,
|
|
allowedValues: referrerPolicy
|
|
},
|
|
{
|
|
key: "mode",
|
|
converter: webidl.converters.DOMString,
|
|
allowedValues: requestMode
|
|
},
|
|
{
|
|
key: "credentials",
|
|
converter: webidl.converters.DOMString,
|
|
allowedValues: requestCredentials
|
|
},
|
|
{
|
|
key: "cache",
|
|
converter: webidl.converters.DOMString,
|
|
allowedValues: requestCache
|
|
},
|
|
{
|
|
key: "redirect",
|
|
converter: webidl.converters.DOMString,
|
|
allowedValues: requestRedirect
|
|
},
|
|
{
|
|
key: "integrity",
|
|
converter: webidl.converters.DOMString
|
|
},
|
|
{
|
|
key: "keepalive",
|
|
converter: webidl.converters.boolean
|
|
},
|
|
{
|
|
key: "signal",
|
|
converter: webidl.nullableConverter((signal) => webidl.converters.AbortSignal(signal, { strict: false }))
|
|
},
|
|
{
|
|
key: "window",
|
|
converter: webidl.converters.any
|
|
},
|
|
{
|
|
key: "duplex",
|
|
converter: webidl.converters.DOMString,
|
|
allowedValues: requestDuplex
|
|
}
|
|
]);
|
|
module.exports = { Request: Request2, makeRequest };
|
|
});
|
|
|
|
// node_modules/undici/lib/fetch/index.js
|
|
var require_fetch = __commonJS((exports, module) => {
|
|
var fetch2 = function(input, init = {}) {
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "globalThis.fetch" });
|
|
const p = createDeferredPromise();
|
|
let requestObject;
|
|
try {
|
|
requestObject = new Request2(input, init);
|
|
} catch (e) {
|
|
p.reject(e);
|
|
return p.promise;
|
|
}
|
|
const request = requestObject[kState];
|
|
if (requestObject.signal.aborted) {
|
|
abortFetch(p, request, null, requestObject.signal.reason);
|
|
return p.promise;
|
|
}
|
|
const globalObject = request.client.globalObject;
|
|
if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") {
|
|
request.serviceWorkers = "none";
|
|
}
|
|
let responseObject = null;
|
|
const relevantRealm = null;
|
|
let locallyAborted = false;
|
|
let controller = null;
|
|
addAbortListener(requestObject.signal, () => {
|
|
locallyAborted = true;
|
|
assert(controller != null);
|
|
controller.abort(requestObject.signal.reason);
|
|
abortFetch(p, request, responseObject, requestObject.signal.reason);
|
|
});
|
|
const handleFetchDone = (response) => finalizeAndReportTiming(response, "fetch");
|
|
const processResponse = (response) => {
|
|
if (locallyAborted) {
|
|
return Promise.resolve();
|
|
}
|
|
if (response.aborted) {
|
|
abortFetch(p, request, responseObject, controller.serializedAbortReason);
|
|
return Promise.resolve();
|
|
}
|
|
if (response.type === "error") {
|
|
p.reject(Object.assign(new TypeError("fetch failed"), { cause: response.error }));
|
|
return Promise.resolve();
|
|
}
|
|
responseObject = new Response2;
|
|
responseObject[kState] = response;
|
|
responseObject[kRealm] = relevantRealm;
|
|
responseObject[kHeaders][kHeadersList] = response.headersList;
|
|
responseObject[kHeaders][kGuard] = "immutable";
|
|
responseObject[kHeaders][kRealm] = relevantRealm;
|
|
p.resolve(responseObject);
|
|
};
|
|
controller = fetching({
|
|
request,
|
|
processResponseEndOfBody: handleFetchDone,
|
|
processResponse,
|
|
dispatcher: init.dispatcher ?? getGlobalDispatcher()
|
|
});
|
|
return p.promise;
|
|
};
|
|
var finalizeAndReportTiming = function(response, initiatorType = "other") {
|
|
if (response.type === "error" && response.aborted) {
|
|
return;
|
|
}
|
|
if (!response.urlList?.length) {
|
|
return;
|
|
}
|
|
const originalURL = response.urlList[0];
|
|
let timingInfo = response.timingInfo;
|
|
let cacheState = response.cacheState;
|
|
if (!urlIsHttpHttpsScheme(originalURL)) {
|
|
return;
|
|
}
|
|
if (timingInfo === null) {
|
|
return;
|
|
}
|
|
if (!response.timingAllowPassed) {
|
|
timingInfo = createOpaqueTimingInfo({
|
|
startTime: timingInfo.startTime
|
|
});
|
|
cacheState = "";
|
|
}
|
|
timingInfo.endTime = coarsenedSharedCurrentTime();
|
|
response.timingInfo = timingInfo;
|
|
markResourceTiming(timingInfo, originalURL, initiatorType, globalThis, cacheState);
|
|
};
|
|
var markResourceTiming = function(timingInfo, originalURL, initiatorType, globalThis2, cacheState) {
|
|
if (nodeMajor > 18 || nodeMajor === 18 && nodeMinor >= 2) {
|
|
performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis2, cacheState);
|
|
}
|
|
};
|
|
var abortFetch = function(p, request, responseObject, error) {
|
|
if (!error) {
|
|
error = new DOMException2("The operation was aborted.", "AbortError");
|
|
}
|
|
p.reject(error);
|
|
if (request.body != null && isReadable(request.body?.stream)) {
|
|
request.body.stream.cancel(error).catch((err) => {
|
|
if (err.code === "ERR_INVALID_STATE") {
|
|
return;
|
|
}
|
|
throw err;
|
|
});
|
|
}
|
|
if (responseObject == null) {
|
|
return;
|
|
}
|
|
const response = responseObject[kState];
|
|
if (response.body != null && isReadable(response.body?.stream)) {
|
|
response.body.stream.cancel(error).catch((err) => {
|
|
if (err.code === "ERR_INVALID_STATE") {
|
|
return;
|
|
}
|
|
throw err;
|
|
});
|
|
}
|
|
};
|
|
var fetching = function({
|
|
request,
|
|
processRequestBodyChunkLength,
|
|
processRequestEndOfBody,
|
|
processResponse,
|
|
processResponseEndOfBody,
|
|
processResponseConsumeBody,
|
|
useParallelQueue = false,
|
|
dispatcher
|
|
}) {
|
|
let taskDestination = null;
|
|
let crossOriginIsolatedCapability = false;
|
|
if (request.client != null) {
|
|
taskDestination = request.client.globalObject;
|
|
crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability;
|
|
}
|
|
const currenTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability);
|
|
const timingInfo = createOpaqueTimingInfo({
|
|
startTime: currenTime
|
|
});
|
|
const fetchParams = {
|
|
controller: new Fetch(dispatcher),
|
|
request,
|
|
timingInfo,
|
|
processRequestBodyChunkLength,
|
|
processRequestEndOfBody,
|
|
processResponse,
|
|
processResponseConsumeBody,
|
|
processResponseEndOfBody,
|
|
taskDestination,
|
|
crossOriginIsolatedCapability
|
|
};
|
|
assert(!request.body || request.body.stream);
|
|
if (request.window === "client") {
|
|
request.window = request.client?.globalObject?.constructor?.name === "Window" ? request.client : "no-window";
|
|
}
|
|
if (request.origin === "client") {
|
|
request.origin = request.client?.origin;
|
|
}
|
|
if (request.policyContainer === "client") {
|
|
if (request.client != null) {
|
|
request.policyContainer = clonePolicyContainer(request.client.policyContainer);
|
|
} else {
|
|
request.policyContainer = makePolicyContainer();
|
|
}
|
|
}
|
|
if (!request.headersList.contains("accept")) {
|
|
const value = "*/*";
|
|
request.headersList.append("accept", value);
|
|
}
|
|
if (!request.headersList.contains("accept-language")) {
|
|
request.headersList.append("accept-language", "*");
|
|
}
|
|
if (request.priority === null) {
|
|
}
|
|
if (subresourceSet.has(request.destination)) {
|
|
}
|
|
mainFetch(fetchParams).catch((err) => {
|
|
fetchParams.controller.terminate(err);
|
|
});
|
|
return fetchParams.controller;
|
|
};
|
|
async function mainFetch(fetchParams, recursive = false) {
|
|
const request = fetchParams.request;
|
|
let response = null;
|
|
if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {
|
|
response = makeNetworkError("local URLs only");
|
|
}
|
|
tryUpgradeRequestToAPotentiallyTrustworthyURL(request);
|
|
if (requestBadPort(request) === "blocked") {
|
|
response = makeNetworkError("bad port");
|
|
}
|
|
if (request.referrerPolicy === "") {
|
|
request.referrerPolicy = request.policyContainer.referrerPolicy;
|
|
}
|
|
if (request.referrer !== "no-referrer") {
|
|
request.referrer = determineRequestsReferrer(request);
|
|
}
|
|
if (response === null) {
|
|
response = await (async () => {
|
|
const currentURL = requestCurrentURL(request);
|
|
if (sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || currentURL.protocol === "data:" || (request.mode === "navigate" || request.mode === "websocket")) {
|
|
request.responseTainting = "basic";
|
|
return await schemeFetch(fetchParams);
|
|
}
|
|
if (request.mode === "same-origin") {
|
|
return makeNetworkError('request mode cannot be "same-origin"');
|
|
}
|
|
if (request.mode === "no-cors") {
|
|
if (request.redirect !== "follow") {
|
|
return makeNetworkError('redirect mode cannot be "follow" for "no-cors" request');
|
|
}
|
|
request.responseTainting = "opaque";
|
|
return await schemeFetch(fetchParams);
|
|
}
|
|
if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {
|
|
return makeNetworkError("URL scheme must be a HTTP(S) scheme");
|
|
}
|
|
request.responseTainting = "cors";
|
|
return await httpFetch(fetchParams);
|
|
})();
|
|
}
|
|
if (recursive) {
|
|
return response;
|
|
}
|
|
if (response.status !== 0 && !response.internalResponse) {
|
|
if (request.responseTainting === "cors") {
|
|
}
|
|
if (request.responseTainting === "basic") {
|
|
response = filterResponse(response, "basic");
|
|
} else if (request.responseTainting === "cors") {
|
|
response = filterResponse(response, "cors");
|
|
} else if (request.responseTainting === "opaque") {
|
|
response = filterResponse(response, "opaque");
|
|
} else {
|
|
assert(false);
|
|
}
|
|
}
|
|
let internalResponse = response.status === 0 ? response : response.internalResponse;
|
|
if (internalResponse.urlList.length === 0) {
|
|
internalResponse.urlList.push(...request.urlList);
|
|
}
|
|
if (!request.timingAllowFailed) {
|
|
response.timingAllowPassed = true;
|
|
}
|
|
if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range")) {
|
|
response = internalResponse = makeNetworkError();
|
|
}
|
|
if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) {
|
|
internalResponse.body = null;
|
|
fetchParams.controller.dump = true;
|
|
}
|
|
if (request.integrity) {
|
|
const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason));
|
|
if (request.responseTainting === "opaque" || response.body == null) {
|
|
processBodyError(response.error);
|
|
return;
|
|
}
|
|
const processBody = (bytes) => {
|
|
if (!bytesMatch(bytes, request.integrity)) {
|
|
processBodyError("integrity mismatch");
|
|
return;
|
|
}
|
|
response.body = safelyExtractBody(bytes)[0];
|
|
fetchFinale(fetchParams, response);
|
|
};
|
|
await fullyReadBody(response.body, processBody, processBodyError);
|
|
} else {
|
|
fetchFinale(fetchParams, response);
|
|
}
|
|
}
|
|
var schemeFetch = function(fetchParams) {
|
|
if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {
|
|
return Promise.resolve(makeAppropriateNetworkError(fetchParams));
|
|
}
|
|
const { request } = fetchParams;
|
|
const { protocol: scheme } = requestCurrentURL(request);
|
|
switch (scheme) {
|
|
case "about:": {
|
|
return Promise.resolve(makeNetworkError("about scheme is not supported"));
|
|
}
|
|
case "blob:": {
|
|
if (!resolveObjectURL) {
|
|
resolveObjectURL = __require("buffer").resolveObjectURL;
|
|
}
|
|
const blobURLEntry = requestCurrentURL(request);
|
|
if (blobURLEntry.search.length !== 0) {
|
|
return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource."));
|
|
}
|
|
const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString());
|
|
if (request.method !== "GET" || !isBlobLike(blobURLEntryObject)) {
|
|
return Promise.resolve(makeNetworkError("invalid method"));
|
|
}
|
|
const bodyWithType = safelyExtractBody(blobURLEntryObject);
|
|
const body = bodyWithType[0];
|
|
const length = isomorphicEncode(`${body.length}`);
|
|
const type = bodyWithType[1] ?? "";
|
|
const response = makeResponse({
|
|
statusText: "OK",
|
|
headersList: [
|
|
["content-length", { name: "Content-Length", value: length }],
|
|
["content-type", { name: "Content-Type", value: type }]
|
|
]
|
|
});
|
|
response.body = body;
|
|
return Promise.resolve(response);
|
|
}
|
|
case "data:": {
|
|
const currentURL = requestCurrentURL(request);
|
|
const dataURLStruct = dataURLProcessor(currentURL);
|
|
if (dataURLStruct === "failure") {
|
|
return Promise.resolve(makeNetworkError("failed to fetch the data URL"));
|
|
}
|
|
const mimeType = serializeAMimeType(dataURLStruct.mimeType);
|
|
return Promise.resolve(makeResponse({
|
|
statusText: "OK",
|
|
headersList: [
|
|
["content-type", { name: "Content-Type", value: mimeType }]
|
|
],
|
|
body: safelyExtractBody(dataURLStruct.body)[0]
|
|
}));
|
|
}
|
|
case "file:": {
|
|
return Promise.resolve(makeNetworkError("not implemented... yet..."));
|
|
}
|
|
case "http:":
|
|
case "https:": {
|
|
return httpFetch(fetchParams).catch((err) => makeNetworkError(err));
|
|
}
|
|
default: {
|
|
return Promise.resolve(makeNetworkError("unknown scheme"));
|
|
}
|
|
}
|
|
};
|
|
var finalizeResponse = function(fetchParams, response) {
|
|
fetchParams.request.done = true;
|
|
if (fetchParams.processResponseDone != null) {
|
|
queueMicrotask(() => fetchParams.processResponseDone(response));
|
|
}
|
|
};
|
|
var fetchFinale = function(fetchParams, response) {
|
|
if (response.type === "error") {
|
|
response.urlList = [fetchParams.request.urlList[0]];
|
|
response.timingInfo = createOpaqueTimingInfo({
|
|
startTime: fetchParams.timingInfo.startTime
|
|
});
|
|
}
|
|
const processResponseEndOfBody = () => {
|
|
fetchParams.request.done = true;
|
|
if (fetchParams.processResponseEndOfBody != null) {
|
|
queueMicrotask(() => fetchParams.processResponseEndOfBody(response));
|
|
}
|
|
};
|
|
if (fetchParams.processResponse != null) {
|
|
queueMicrotask(() => fetchParams.processResponse(response));
|
|
}
|
|
if (response.body == null) {
|
|
processResponseEndOfBody();
|
|
} else {
|
|
const identityTransformAlgorithm = (chunk, controller) => {
|
|
controller.enqueue(chunk);
|
|
};
|
|
const transformStream = new TransformStream({
|
|
start() {
|
|
},
|
|
transform: identityTransformAlgorithm,
|
|
flush: processResponseEndOfBody
|
|
}, {
|
|
size() {
|
|
return 1;
|
|
}
|
|
}, {
|
|
size() {
|
|
return 1;
|
|
}
|
|
});
|
|
response.body = { stream: response.body.stream.pipeThrough(transformStream) };
|
|
}
|
|
if (fetchParams.processResponseConsumeBody != null) {
|
|
const processBody = (nullOrBytes) => fetchParams.processResponseConsumeBody(response, nullOrBytes);
|
|
const processBodyError = (failure) => fetchParams.processResponseConsumeBody(response, failure);
|
|
if (response.body == null) {
|
|
queueMicrotask(() => processBody(null));
|
|
} else {
|
|
return fullyReadBody(response.body, processBody, processBodyError);
|
|
}
|
|
return Promise.resolve();
|
|
}
|
|
};
|
|
async function httpFetch(fetchParams) {
|
|
const request = fetchParams.request;
|
|
let response = null;
|
|
let actualResponse = null;
|
|
const timingInfo = fetchParams.timingInfo;
|
|
if (request.serviceWorkers === "all") {
|
|
}
|
|
if (response === null) {
|
|
if (request.redirect === "follow") {
|
|
request.serviceWorkers = "none";
|
|
}
|
|
actualResponse = response = await httpNetworkOrCacheFetch(fetchParams);
|
|
if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") {
|
|
return makeNetworkError("cors failure");
|
|
}
|
|
if (TAOCheck(request, response) === "failure") {
|
|
request.timingAllowFailed = true;
|
|
}
|
|
}
|
|
if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck(request.origin, request.client, request.destination, actualResponse) === "blocked") {
|
|
return makeNetworkError("blocked");
|
|
}
|
|
if (redirectStatusSet.has(actualResponse.status)) {
|
|
if (request.redirect !== "manual") {
|
|
fetchParams.controller.connection.destroy();
|
|
}
|
|
if (request.redirect === "error") {
|
|
response = makeNetworkError("unexpected redirect");
|
|
} else if (request.redirect === "manual") {
|
|
response = actualResponse;
|
|
} else if (request.redirect === "follow") {
|
|
response = await httpRedirectFetch(fetchParams, response);
|
|
} else {
|
|
assert(false);
|
|
}
|
|
}
|
|
response.timingInfo = timingInfo;
|
|
return response;
|
|
}
|
|
var httpRedirectFetch = function(fetchParams, response) {
|
|
const request = fetchParams.request;
|
|
const actualResponse = response.internalResponse ? response.internalResponse : response;
|
|
let locationURL;
|
|
try {
|
|
locationURL = responseLocationURL(actualResponse, requestCurrentURL(request).hash);
|
|
if (locationURL == null) {
|
|
return response;
|
|
}
|
|
} catch (err) {
|
|
return Promise.resolve(makeNetworkError(err));
|
|
}
|
|
if (!urlIsHttpHttpsScheme(locationURL)) {
|
|
return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme"));
|
|
}
|
|
if (request.redirectCount === 20) {
|
|
return Promise.resolve(makeNetworkError("redirect count exceeded"));
|
|
}
|
|
request.redirectCount += 1;
|
|
if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) {
|
|
return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"'));
|
|
}
|
|
if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) {
|
|
return Promise.resolve(makeNetworkError('URL cannot contain credentials for request mode "cors"'));
|
|
}
|
|
if (actualResponse.status !== 303 && request.body != null && request.body.source == null) {
|
|
return Promise.resolve(makeNetworkError());
|
|
}
|
|
if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) {
|
|
request.method = "GET";
|
|
request.body = null;
|
|
for (const headerName of requestBodyHeader) {
|
|
request.headersList.delete(headerName);
|
|
}
|
|
}
|
|
if (!sameOrigin(requestCurrentURL(request), locationURL)) {
|
|
request.headersList.delete("authorization");
|
|
request.headersList.delete("proxy-authorization", true);
|
|
request.headersList.delete("cookie");
|
|
request.headersList.delete("host");
|
|
}
|
|
if (request.body != null) {
|
|
assert(request.body.source != null);
|
|
request.body = safelyExtractBody(request.body.source)[0];
|
|
}
|
|
const timingInfo = fetchParams.timingInfo;
|
|
timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability);
|
|
if (timingInfo.redirectStartTime === 0) {
|
|
timingInfo.redirectStartTime = timingInfo.startTime;
|
|
}
|
|
request.urlList.push(locationURL);
|
|
setRequestReferrerPolicyOnRedirect(request, actualResponse);
|
|
return mainFetch(fetchParams, true);
|
|
};
|
|
async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) {
|
|
const request = fetchParams.request;
|
|
let httpFetchParams = null;
|
|
let httpRequest = null;
|
|
let response = null;
|
|
const httpCache = null;
|
|
const revalidatingFlag = false;
|
|
if (request.window === "no-window" && request.redirect === "error") {
|
|
httpFetchParams = fetchParams;
|
|
httpRequest = request;
|
|
} else {
|
|
httpRequest = makeRequest(request);
|
|
httpFetchParams = { ...fetchParams };
|
|
httpFetchParams.request = httpRequest;
|
|
}
|
|
const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic";
|
|
const contentLength = httpRequest.body ? httpRequest.body.length : null;
|
|
let contentLengthHeaderValue = null;
|
|
if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) {
|
|
contentLengthHeaderValue = "0";
|
|
}
|
|
if (contentLength != null) {
|
|
contentLengthHeaderValue = isomorphicEncode(`${contentLength}`);
|
|
}
|
|
if (contentLengthHeaderValue != null) {
|
|
httpRequest.headersList.append("content-length", contentLengthHeaderValue);
|
|
}
|
|
if (contentLength != null && httpRequest.keepalive) {
|
|
}
|
|
if (httpRequest.referrer instanceof URL) {
|
|
httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href));
|
|
}
|
|
appendRequestOriginHeader(httpRequest);
|
|
appendFetchMetadata(httpRequest);
|
|
if (!httpRequest.headersList.contains("user-agent")) {
|
|
httpRequest.headersList.append("user-agent", typeof esbuildDetection === "undefined" ? "undici" : "node");
|
|
}
|
|
if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since") || httpRequest.headersList.contains("if-none-match") || httpRequest.headersList.contains("if-unmodified-since") || httpRequest.headersList.contains("if-match") || httpRequest.headersList.contains("if-range"))) {
|
|
httpRequest.cache = "no-store";
|
|
}
|
|
if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control")) {
|
|
httpRequest.headersList.append("cache-control", "max-age=0");
|
|
}
|
|
if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") {
|
|
if (!httpRequest.headersList.contains("pragma")) {
|
|
httpRequest.headersList.append("pragma", "no-cache");
|
|
}
|
|
if (!httpRequest.headersList.contains("cache-control")) {
|
|
httpRequest.headersList.append("cache-control", "no-cache");
|
|
}
|
|
}
|
|
if (httpRequest.headersList.contains("range")) {
|
|
httpRequest.headersList.append("accept-encoding", "identity");
|
|
}
|
|
if (!httpRequest.headersList.contains("accept-encoding")) {
|
|
if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {
|
|
httpRequest.headersList.append("accept-encoding", "br, gzip, deflate");
|
|
} else {
|
|
httpRequest.headersList.append("accept-encoding", "gzip, deflate");
|
|
}
|
|
}
|
|
httpRequest.headersList.delete("host");
|
|
if (includeCredentials) {
|
|
}
|
|
if (httpCache == null) {
|
|
httpRequest.cache = "no-store";
|
|
}
|
|
if (httpRequest.mode !== "no-store" && httpRequest.mode !== "reload") {
|
|
}
|
|
if (response == null) {
|
|
if (httpRequest.mode === "only-if-cached") {
|
|
return makeNetworkError("only if cached");
|
|
}
|
|
const forwardResponse = await httpNetworkFetch(httpFetchParams, includeCredentials, isNewConnectionFetch);
|
|
if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) {
|
|
}
|
|
if (revalidatingFlag && forwardResponse.status === 304) {
|
|
}
|
|
if (response == null) {
|
|
response = forwardResponse;
|
|
}
|
|
}
|
|
response.urlList = [...httpRequest.urlList];
|
|
if (httpRequest.headersList.contains("range")) {
|
|
response.rangeRequested = true;
|
|
}
|
|
response.requestIncludesCredentials = includeCredentials;
|
|
if (response.status === 407) {
|
|
if (request.window === "no-window") {
|
|
return makeNetworkError();
|
|
}
|
|
if (isCancelled(fetchParams)) {
|
|
return makeAppropriateNetworkError(fetchParams);
|
|
}
|
|
return makeNetworkError("proxy authentication required");
|
|
}
|
|
if (response.status === 421 && !isNewConnectionFetch && (request.body == null || request.body.source != null)) {
|
|
if (isCancelled(fetchParams)) {
|
|
return makeAppropriateNetworkError(fetchParams);
|
|
}
|
|
fetchParams.controller.connection.destroy();
|
|
response = await httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch, true);
|
|
}
|
|
if (isAuthenticationFetch) {
|
|
}
|
|
return response;
|
|
}
|
|
async function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) {
|
|
assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed);
|
|
fetchParams.controller.connection = {
|
|
abort: null,
|
|
destroyed: false,
|
|
destroy(err) {
|
|
if (!this.destroyed) {
|
|
this.destroyed = true;
|
|
this.abort?.(err ?? new DOMException2("The operation was aborted.", "AbortError"));
|
|
}
|
|
}
|
|
};
|
|
const request = fetchParams.request;
|
|
let response = null;
|
|
const timingInfo = fetchParams.timingInfo;
|
|
const httpCache = null;
|
|
if (httpCache == null) {
|
|
request.cache = "no-store";
|
|
}
|
|
const newConnection = forceNewConnection ? "yes" : "no";
|
|
if (request.mode === "websocket") {
|
|
} else {
|
|
}
|
|
let requestBody = null;
|
|
if (request.body == null && fetchParams.processRequestEndOfBody) {
|
|
queueMicrotask(() => fetchParams.processRequestEndOfBody());
|
|
} else if (request.body != null) {
|
|
const processBodyChunk = async function* (bytes) {
|
|
if (isCancelled(fetchParams)) {
|
|
return;
|
|
}
|
|
yield bytes;
|
|
fetchParams.processRequestBodyChunkLength?.(bytes.byteLength);
|
|
};
|
|
const processEndOfBody = () => {
|
|
if (isCancelled(fetchParams)) {
|
|
return;
|
|
}
|
|
if (fetchParams.processRequestEndOfBody) {
|
|
fetchParams.processRequestEndOfBody();
|
|
}
|
|
};
|
|
const processBodyError = (e) => {
|
|
if (isCancelled(fetchParams)) {
|
|
return;
|
|
}
|
|
if (e.name === "AbortError") {
|
|
fetchParams.controller.abort();
|
|
} else {
|
|
fetchParams.controller.terminate(e);
|
|
}
|
|
};
|
|
requestBody = async function* () {
|
|
try {
|
|
for await (const bytes of request.body.stream) {
|
|
yield* processBodyChunk(bytes);
|
|
}
|
|
processEndOfBody();
|
|
} catch (err) {
|
|
processBodyError(err);
|
|
}
|
|
}();
|
|
}
|
|
try {
|
|
const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody });
|
|
if (socket) {
|
|
response = makeResponse({ status, statusText, headersList, socket });
|
|
} else {
|
|
const iterator = body[Symbol.asyncIterator]();
|
|
fetchParams.controller.next = () => iterator.next();
|
|
response = makeResponse({ status, statusText, headersList });
|
|
}
|
|
} catch (err) {
|
|
if (err.name === "AbortError") {
|
|
fetchParams.controller.connection.destroy();
|
|
return makeAppropriateNetworkError(fetchParams, err);
|
|
}
|
|
return makeNetworkError(err);
|
|
}
|
|
const pullAlgorithm = () => {
|
|
fetchParams.controller.resume();
|
|
};
|
|
const cancelAlgorithm = (reason) => {
|
|
fetchParams.controller.abort(reason);
|
|
};
|
|
if (!ReadableStream2) {
|
|
ReadableStream2 = __require("stream/web").ReadableStream;
|
|
}
|
|
const stream = new ReadableStream2({
|
|
async start(controller) {
|
|
fetchParams.controller.controller = controller;
|
|
},
|
|
async pull(controller) {
|
|
await pullAlgorithm(controller);
|
|
},
|
|
async cancel(reason) {
|
|
await cancelAlgorithm(reason);
|
|
}
|
|
}, {
|
|
highWaterMark: 0,
|
|
size() {
|
|
return 1;
|
|
}
|
|
});
|
|
response.body = { stream };
|
|
fetchParams.controller.on("terminated", onAborted);
|
|
fetchParams.controller.resume = async () => {
|
|
while (true) {
|
|
let bytes;
|
|
let isFailure;
|
|
try {
|
|
const { done, value } = await fetchParams.controller.next();
|
|
if (isAborted(fetchParams)) {
|
|
break;
|
|
}
|
|
bytes = done ? undefined : value;
|
|
} catch (err) {
|
|
if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {
|
|
bytes = undefined;
|
|
} else {
|
|
bytes = err;
|
|
isFailure = true;
|
|
}
|
|
}
|
|
if (bytes === undefined) {
|
|
readableStreamClose(fetchParams.controller.controller);
|
|
finalizeResponse(fetchParams, response);
|
|
return;
|
|
}
|
|
timingInfo.decodedBodySize += bytes?.byteLength ?? 0;
|
|
if (isFailure) {
|
|
fetchParams.controller.terminate(bytes);
|
|
return;
|
|
}
|
|
fetchParams.controller.controller.enqueue(new Uint8Array(bytes));
|
|
if (isErrored(stream)) {
|
|
fetchParams.controller.terminate();
|
|
return;
|
|
}
|
|
if (!fetchParams.controller.controller.desiredSize) {
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
function onAborted(reason) {
|
|
if (isAborted(fetchParams)) {
|
|
response.aborted = true;
|
|
if (isReadable(stream)) {
|
|
fetchParams.controller.controller.error(fetchParams.controller.serializedAbortReason);
|
|
}
|
|
} else {
|
|
if (isReadable(stream)) {
|
|
fetchParams.controller.controller.error(new TypeError("terminated", {
|
|
cause: isErrorLike(reason) ? reason : undefined
|
|
}));
|
|
}
|
|
}
|
|
fetchParams.controller.connection.destroy();
|
|
}
|
|
return response;
|
|
async function dispatch({ body }) {
|
|
const url = requestCurrentURL(request);
|
|
const agent = fetchParams.controller.dispatcher;
|
|
return new Promise((resolve, reject) => agent.dispatch({
|
|
path: url.pathname + url.search,
|
|
origin: url.origin,
|
|
method: request.method,
|
|
body: fetchParams.controller.dispatcher.isMockActive ? request.body && (request.body.source || request.body.stream) : body,
|
|
headers: request.headersList.entries,
|
|
maxRedirections: 0,
|
|
upgrade: request.mode === "websocket" ? "websocket" : undefined
|
|
}, {
|
|
body: null,
|
|
abort: null,
|
|
onConnect(abort) {
|
|
const { connection } = fetchParams.controller;
|
|
if (connection.destroyed) {
|
|
abort(new DOMException2("The operation was aborted.", "AbortError"));
|
|
} else {
|
|
fetchParams.controller.on("terminated", abort);
|
|
this.abort = connection.abort = abort;
|
|
}
|
|
},
|
|
onHeaders(status, headersList, resume, statusText) {
|
|
if (status < 200) {
|
|
return;
|
|
}
|
|
let codings = [];
|
|
let location = "";
|
|
const headers = new Headers;
|
|
if (Array.isArray(headersList)) {
|
|
for (let n = 0;n < headersList.length; n += 2) {
|
|
const key = headersList[n + 0].toString("latin1");
|
|
const val = headersList[n + 1].toString("latin1");
|
|
if (key.toLowerCase() === "content-encoding") {
|
|
codings = val.toLowerCase().split(",").map((x) => x.trim());
|
|
} else if (key.toLowerCase() === "location") {
|
|
location = val;
|
|
}
|
|
headers[kHeadersList].append(key, val);
|
|
}
|
|
} else {
|
|
const keys = Object.keys(headersList);
|
|
for (const key of keys) {
|
|
const val = headersList[key];
|
|
if (key.toLowerCase() === "content-encoding") {
|
|
codings = val.toLowerCase().split(",").map((x) => x.trim()).reverse();
|
|
} else if (key.toLowerCase() === "location") {
|
|
location = val;
|
|
}
|
|
headers[kHeadersList].append(key, val);
|
|
}
|
|
}
|
|
this.body = new Readable({ read: resume });
|
|
const decoders = [];
|
|
const willFollow = request.redirect === "follow" && location && redirectStatusSet.has(status);
|
|
if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
|
|
for (const coding of codings) {
|
|
if (coding === "x-gzip" || coding === "gzip") {
|
|
decoders.push(zlib.createGunzip({
|
|
flush: zlib.constants.Z_SYNC_FLUSH,
|
|
finishFlush: zlib.constants.Z_SYNC_FLUSH
|
|
}));
|
|
} else if (coding === "deflate") {
|
|
decoders.push(zlib.createInflate());
|
|
} else if (coding === "br") {
|
|
decoders.push(zlib.createBrotliDecompress());
|
|
} else {
|
|
decoders.length = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
resolve({
|
|
status,
|
|
statusText,
|
|
headersList: headers[kHeadersList],
|
|
body: decoders.length ? pipeline(this.body, ...decoders, () => {
|
|
}) : this.body.on("error", () => {
|
|
})
|
|
});
|
|
return true;
|
|
},
|
|
onData(chunk) {
|
|
if (fetchParams.controller.dump) {
|
|
return;
|
|
}
|
|
const bytes = chunk;
|
|
timingInfo.encodedBodySize += bytes.byteLength;
|
|
return this.body.push(bytes);
|
|
},
|
|
onComplete() {
|
|
if (this.abort) {
|
|
fetchParams.controller.off("terminated", this.abort);
|
|
}
|
|
fetchParams.controller.ended = true;
|
|
this.body.push(null);
|
|
},
|
|
onError(error) {
|
|
if (this.abort) {
|
|
fetchParams.controller.off("terminated", this.abort);
|
|
}
|
|
this.body?.destroy(error);
|
|
fetchParams.controller.terminate(error);
|
|
reject(error);
|
|
},
|
|
onUpgrade(status, headersList, socket) {
|
|
if (status !== 101) {
|
|
return;
|
|
}
|
|
const headers = new Headers;
|
|
for (let n = 0;n < headersList.length; n += 2) {
|
|
const key = headersList[n + 0].toString("latin1");
|
|
const val = headersList[n + 1].toString("latin1");
|
|
headers[kHeadersList].append(key, val);
|
|
}
|
|
resolve({
|
|
status,
|
|
statusText: STATUS_CODES[status],
|
|
headersList: headers[kHeadersList],
|
|
socket
|
|
});
|
|
return true;
|
|
}
|
|
}));
|
|
}
|
|
}
|
|
var {
|
|
Response: Response2,
|
|
makeNetworkError,
|
|
makeAppropriateNetworkError,
|
|
filterResponse,
|
|
makeResponse
|
|
} = require_response();
|
|
var { Headers } = require_headers();
|
|
var { Request: Request2, makeRequest } = require_request2();
|
|
var zlib = __require("zlib");
|
|
var {
|
|
bytesMatch,
|
|
makePolicyContainer,
|
|
clonePolicyContainer,
|
|
requestBadPort,
|
|
TAOCheck,
|
|
appendRequestOriginHeader,
|
|
responseLocationURL,
|
|
requestCurrentURL,
|
|
setRequestReferrerPolicyOnRedirect,
|
|
tryUpgradeRequestToAPotentiallyTrustworthyURL,
|
|
createOpaqueTimingInfo,
|
|
appendFetchMetadata,
|
|
corsCheck,
|
|
crossOriginResourcePolicyCheck,
|
|
determineRequestsReferrer,
|
|
coarsenedSharedCurrentTime,
|
|
createDeferredPromise,
|
|
isBlobLike,
|
|
sameOrigin,
|
|
isCancelled,
|
|
isAborted,
|
|
isErrorLike,
|
|
fullyReadBody,
|
|
readableStreamClose,
|
|
isomorphicEncode,
|
|
urlIsLocal,
|
|
urlIsHttpHttpsScheme,
|
|
urlHasHttpsScheme
|
|
} = require_util2();
|
|
var { kState, kHeaders, kGuard, kRealm } = require_symbols2();
|
|
var assert = __require("assert");
|
|
var { safelyExtractBody } = require_body();
|
|
var {
|
|
redirectStatusSet,
|
|
nullBodyStatus,
|
|
safeMethodsSet,
|
|
requestBodyHeader,
|
|
subresourceSet,
|
|
DOMException: DOMException2
|
|
} = require_constants2();
|
|
var { kHeadersList } = require_symbols();
|
|
var EE = __require("events");
|
|
var { Readable, pipeline } = __require("stream");
|
|
var { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = require_util();
|
|
var { dataURLProcessor, serializeAMimeType } = require_dataURL();
|
|
var { TransformStream } = __require("stream/web");
|
|
var { getGlobalDispatcher } = require_global2();
|
|
var { webidl } = require_webidl();
|
|
var { STATUS_CODES } = __require("http");
|
|
var GET_OR_HEAD = ["GET", "HEAD"];
|
|
var resolveObjectURL;
|
|
var ReadableStream2 = globalThis.ReadableStream;
|
|
|
|
class Fetch extends EE {
|
|
constructor(dispatcher) {
|
|
super();
|
|
this.dispatcher = dispatcher;
|
|
this.connection = null;
|
|
this.dump = false;
|
|
this.state = "ongoing";
|
|
this.setMaxListeners(21);
|
|
}
|
|
terminate(reason) {
|
|
if (this.state !== "ongoing") {
|
|
return;
|
|
}
|
|
this.state = "terminated";
|
|
this.connection?.destroy(reason);
|
|
this.emit("terminated", reason);
|
|
}
|
|
abort(error) {
|
|
if (this.state !== "ongoing") {
|
|
return;
|
|
}
|
|
this.state = "aborted";
|
|
if (!error) {
|
|
error = new DOMException2("The operation was aborted.", "AbortError");
|
|
}
|
|
this.serializedAbortReason = error;
|
|
this.connection?.destroy(error);
|
|
this.emit("terminated", error);
|
|
}
|
|
}
|
|
module.exports = {
|
|
fetch: fetch2,
|
|
Fetch,
|
|
fetching,
|
|
finalizeAndReportTiming
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fileapi/symbols.js
|
|
var require_symbols3 = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
kState: Symbol("FileReader state"),
|
|
kResult: Symbol("FileReader result"),
|
|
kError: Symbol("FileReader error"),
|
|
kLastProgressEventFired: Symbol("FileReader last progress event fired timestamp"),
|
|
kEvents: Symbol("FileReader events"),
|
|
kAborted: Symbol("FileReader aborted")
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fileapi/progressevent.js
|
|
var require_progressevent = __commonJS((exports, module) => {
|
|
var { webidl } = require_webidl();
|
|
var kState = Symbol("ProgressEvent state");
|
|
|
|
class ProgressEvent extends Event {
|
|
constructor(type, eventInitDict = {}) {
|
|
type = webidl.converters.DOMString(type);
|
|
eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {});
|
|
super(type, eventInitDict);
|
|
this[kState] = {
|
|
lengthComputable: eventInitDict.lengthComputable,
|
|
loaded: eventInitDict.loaded,
|
|
total: eventInitDict.total
|
|
};
|
|
}
|
|
get lengthComputable() {
|
|
webidl.brandCheck(this, ProgressEvent);
|
|
return this[kState].lengthComputable;
|
|
}
|
|
get loaded() {
|
|
webidl.brandCheck(this, ProgressEvent);
|
|
return this[kState].loaded;
|
|
}
|
|
get total() {
|
|
webidl.brandCheck(this, ProgressEvent);
|
|
return this[kState].total;
|
|
}
|
|
}
|
|
webidl.converters.ProgressEventInit = webidl.dictionaryConverter([
|
|
{
|
|
key: "lengthComputable",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "loaded",
|
|
converter: webidl.converters["unsigned long long"],
|
|
defaultValue: 0
|
|
},
|
|
{
|
|
key: "total",
|
|
converter: webidl.converters["unsigned long long"],
|
|
defaultValue: 0
|
|
},
|
|
{
|
|
key: "bubbles",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "cancelable",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "composed",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
}
|
|
]);
|
|
module.exports = {
|
|
ProgressEvent
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fileapi/encoding.js
|
|
var require_encoding = __commonJS((exports, module) => {
|
|
var getEncoding = function(label) {
|
|
if (!label) {
|
|
return "failure";
|
|
}
|
|
switch (label.trim().toLowerCase()) {
|
|
case "unicode-1-1-utf-8":
|
|
case "unicode11utf8":
|
|
case "unicode20utf8":
|
|
case "utf-8":
|
|
case "utf8":
|
|
case "x-unicode20utf8":
|
|
return "UTF-8";
|
|
case "866":
|
|
case "cp866":
|
|
case "csibm866":
|
|
case "ibm866":
|
|
return "IBM866";
|
|
case "csisolatin2":
|
|
case "iso-8859-2":
|
|
case "iso-ir-101":
|
|
case "iso8859-2":
|
|
case "iso88592":
|
|
case "iso_8859-2":
|
|
case "iso_8859-2:1987":
|
|
case "l2":
|
|
case "latin2":
|
|
return "ISO-8859-2";
|
|
case "csisolatin3":
|
|
case "iso-8859-3":
|
|
case "iso-ir-109":
|
|
case "iso8859-3":
|
|
case "iso88593":
|
|
case "iso_8859-3":
|
|
case "iso_8859-3:1988":
|
|
case "l3":
|
|
case "latin3":
|
|
return "ISO-8859-3";
|
|
case "csisolatin4":
|
|
case "iso-8859-4":
|
|
case "iso-ir-110":
|
|
case "iso8859-4":
|
|
case "iso88594":
|
|
case "iso_8859-4":
|
|
case "iso_8859-4:1988":
|
|
case "l4":
|
|
case "latin4":
|
|
return "ISO-8859-4";
|
|
case "csisolatincyrillic":
|
|
case "cyrillic":
|
|
case "iso-8859-5":
|
|
case "iso-ir-144":
|
|
case "iso8859-5":
|
|
case "iso88595":
|
|
case "iso_8859-5":
|
|
case "iso_8859-5:1988":
|
|
return "ISO-8859-5";
|
|
case "arabic":
|
|
case "asmo-708":
|
|
case "csiso88596e":
|
|
case "csiso88596i":
|
|
case "csisolatinarabic":
|
|
case "ecma-114":
|
|
case "iso-8859-6":
|
|
case "iso-8859-6-e":
|
|
case "iso-8859-6-i":
|
|
case "iso-ir-127":
|
|
case "iso8859-6":
|
|
case "iso88596":
|
|
case "iso_8859-6":
|
|
case "iso_8859-6:1987":
|
|
return "ISO-8859-6";
|
|
case "csisolatingreek":
|
|
case "ecma-118":
|
|
case "elot_928":
|
|
case "greek":
|
|
case "greek8":
|
|
case "iso-8859-7":
|
|
case "iso-ir-126":
|
|
case "iso8859-7":
|
|
case "iso88597":
|
|
case "iso_8859-7":
|
|
case "iso_8859-7:1987":
|
|
case "sun_eu_greek":
|
|
return "ISO-8859-7";
|
|
case "csiso88598e":
|
|
case "csisolatinhebrew":
|
|
case "hebrew":
|
|
case "iso-8859-8":
|
|
case "iso-8859-8-e":
|
|
case "iso-ir-138":
|
|
case "iso8859-8":
|
|
case "iso88598":
|
|
case "iso_8859-8":
|
|
case "iso_8859-8:1988":
|
|
case "visual":
|
|
return "ISO-8859-8";
|
|
case "csiso88598i":
|
|
case "iso-8859-8-i":
|
|
case "logical":
|
|
return "ISO-8859-8-I";
|
|
case "csisolatin6":
|
|
case "iso-8859-10":
|
|
case "iso-ir-157":
|
|
case "iso8859-10":
|
|
case "iso885910":
|
|
case "l6":
|
|
case "latin6":
|
|
return "ISO-8859-10";
|
|
case "iso-8859-13":
|
|
case "iso8859-13":
|
|
case "iso885913":
|
|
return "ISO-8859-13";
|
|
case "iso-8859-14":
|
|
case "iso8859-14":
|
|
case "iso885914":
|
|
return "ISO-8859-14";
|
|
case "csisolatin9":
|
|
case "iso-8859-15":
|
|
case "iso8859-15":
|
|
case "iso885915":
|
|
case "iso_8859-15":
|
|
case "l9":
|
|
return "ISO-8859-15";
|
|
case "iso-8859-16":
|
|
return "ISO-8859-16";
|
|
case "cskoi8r":
|
|
case "koi":
|
|
case "koi8":
|
|
case "koi8-r":
|
|
case "koi8_r":
|
|
return "KOI8-R";
|
|
case "koi8-ru":
|
|
case "koi8-u":
|
|
return "KOI8-U";
|
|
case "csmacintosh":
|
|
case "mac":
|
|
case "macintosh":
|
|
case "x-mac-roman":
|
|
return "macintosh";
|
|
case "iso-8859-11":
|
|
case "iso8859-11":
|
|
case "iso885911":
|
|
case "tis-620":
|
|
case "windows-874":
|
|
return "windows-874";
|
|
case "cp1250":
|
|
case "windows-1250":
|
|
case "x-cp1250":
|
|
return "windows-1250";
|
|
case "cp1251":
|
|
case "windows-1251":
|
|
case "x-cp1251":
|
|
return "windows-1251";
|
|
case "ansi_x3.4-1968":
|
|
case "ascii":
|
|
case "cp1252":
|
|
case "cp819":
|
|
case "csisolatin1":
|
|
case "ibm819":
|
|
case "iso-8859-1":
|
|
case "iso-ir-100":
|
|
case "iso8859-1":
|
|
case "iso88591":
|
|
case "iso_8859-1":
|
|
case "iso_8859-1:1987":
|
|
case "l1":
|
|
case "latin1":
|
|
case "us-ascii":
|
|
case "windows-1252":
|
|
case "x-cp1252":
|
|
return "windows-1252";
|
|
case "cp1253":
|
|
case "windows-1253":
|
|
case "x-cp1253":
|
|
return "windows-1253";
|
|
case "cp1254":
|
|
case "csisolatin5":
|
|
case "iso-8859-9":
|
|
case "iso-ir-148":
|
|
case "iso8859-9":
|
|
case "iso88599":
|
|
case "iso_8859-9":
|
|
case "iso_8859-9:1989":
|
|
case "l5":
|
|
case "latin5":
|
|
case "windows-1254":
|
|
case "x-cp1254":
|
|
return "windows-1254";
|
|
case "cp1255":
|
|
case "windows-1255":
|
|
case "x-cp1255":
|
|
return "windows-1255";
|
|
case "cp1256":
|
|
case "windows-1256":
|
|
case "x-cp1256":
|
|
return "windows-1256";
|
|
case "cp1257":
|
|
case "windows-1257":
|
|
case "x-cp1257":
|
|
return "windows-1257";
|
|
case "cp1258":
|
|
case "windows-1258":
|
|
case "x-cp1258":
|
|
return "windows-1258";
|
|
case "x-mac-cyrillic":
|
|
case "x-mac-ukrainian":
|
|
return "x-mac-cyrillic";
|
|
case "chinese":
|
|
case "csgb2312":
|
|
case "csiso58gb231280":
|
|
case "gb2312":
|
|
case "gb_2312":
|
|
case "gb_2312-80":
|
|
case "gbk":
|
|
case "iso-ir-58":
|
|
case "x-gbk":
|
|
return "GBK";
|
|
case "gb18030":
|
|
return "gb18030";
|
|
case "big5":
|
|
case "big5-hkscs":
|
|
case "cn-big5":
|
|
case "csbig5":
|
|
case "x-x-big5":
|
|
return "Big5";
|
|
case "cseucpkdfmtjapanese":
|
|
case "euc-jp":
|
|
case "x-euc-jp":
|
|
return "EUC-JP";
|
|
case "csiso2022jp":
|
|
case "iso-2022-jp":
|
|
return "ISO-2022-JP";
|
|
case "csshiftjis":
|
|
case "ms932":
|
|
case "ms_kanji":
|
|
case "shift-jis":
|
|
case "shift_jis":
|
|
case "sjis":
|
|
case "windows-31j":
|
|
case "x-sjis":
|
|
return "Shift_JIS";
|
|
case "cseuckr":
|
|
case "csksc56011987":
|
|
case "euc-kr":
|
|
case "iso-ir-149":
|
|
case "korean":
|
|
case "ks_c_5601-1987":
|
|
case "ks_c_5601-1989":
|
|
case "ksc5601":
|
|
case "ksc_5601":
|
|
case "windows-949":
|
|
return "EUC-KR";
|
|
case "csiso2022kr":
|
|
case "hz-gb-2312":
|
|
case "iso-2022-cn":
|
|
case "iso-2022-cn-ext":
|
|
case "iso-2022-kr":
|
|
case "replacement":
|
|
return "replacement";
|
|
case "unicodefffe":
|
|
case "utf-16be":
|
|
return "UTF-16BE";
|
|
case "csunicode":
|
|
case "iso-10646-ucs-2":
|
|
case "ucs-2":
|
|
case "unicode":
|
|
case "unicodefeff":
|
|
case "utf-16":
|
|
case "utf-16le":
|
|
return "UTF-16LE";
|
|
case "x-user-defined":
|
|
return "x-user-defined";
|
|
default:
|
|
return "failure";
|
|
}
|
|
};
|
|
module.exports = {
|
|
getEncoding
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fileapi/util.js
|
|
var require_util4 = __commonJS((exports, module) => {
|
|
var readOperation = function(fr, blob, type, encodingName) {
|
|
if (fr[kState] === "loading") {
|
|
throw new DOMException2("Invalid state", "InvalidStateError");
|
|
}
|
|
fr[kState] = "loading";
|
|
fr[kResult] = null;
|
|
fr[kError] = null;
|
|
const stream = blob.stream();
|
|
const reader = stream.getReader();
|
|
const bytes = [];
|
|
let chunkPromise = reader.read();
|
|
let isFirstChunk = true;
|
|
(async () => {
|
|
while (!fr[kAborted]) {
|
|
try {
|
|
const { done, value } = await chunkPromise;
|
|
if (isFirstChunk && !fr[kAborted]) {
|
|
queueMicrotask(() => {
|
|
fireAProgressEvent("loadstart", fr);
|
|
});
|
|
}
|
|
isFirstChunk = false;
|
|
if (!done && types.isUint8Array(value)) {
|
|
bytes.push(value);
|
|
if ((fr[kLastProgressEventFired] === undefined || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) {
|
|
fr[kLastProgressEventFired] = Date.now();
|
|
queueMicrotask(() => {
|
|
fireAProgressEvent("progress", fr);
|
|
});
|
|
}
|
|
chunkPromise = reader.read();
|
|
} else if (done) {
|
|
queueMicrotask(() => {
|
|
fr[kState] = "done";
|
|
try {
|
|
const result = packageData(bytes, type, blob.type, encodingName);
|
|
if (fr[kAborted]) {
|
|
return;
|
|
}
|
|
fr[kResult] = result;
|
|
fireAProgressEvent("load", fr);
|
|
} catch (error) {
|
|
fr[kError] = error;
|
|
fireAProgressEvent("error", fr);
|
|
}
|
|
if (fr[kState] !== "loading") {
|
|
fireAProgressEvent("loadend", fr);
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
} catch (error) {
|
|
if (fr[kAborted]) {
|
|
return;
|
|
}
|
|
queueMicrotask(() => {
|
|
fr[kState] = "done";
|
|
fr[kError] = error;
|
|
fireAProgressEvent("error", fr);
|
|
if (fr[kState] !== "loading") {
|
|
fireAProgressEvent("loadend", fr);
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
})();
|
|
};
|
|
var fireAProgressEvent = function(e, reader) {
|
|
const event = new ProgressEvent(e, {
|
|
bubbles: false,
|
|
cancelable: false
|
|
});
|
|
reader.dispatchEvent(event);
|
|
};
|
|
var packageData = function(bytes, type, mimeType, encodingName) {
|
|
switch (type) {
|
|
case "DataURL": {
|
|
let dataURL = "data:";
|
|
const parsed = parseMIMEType(mimeType || "application/octet-stream");
|
|
if (parsed !== "failure") {
|
|
dataURL += serializeAMimeType(parsed);
|
|
}
|
|
dataURL += ";base64,";
|
|
const decoder = new StringDecoder("latin1");
|
|
for (const chunk of bytes) {
|
|
dataURL += btoa2(decoder.write(chunk));
|
|
}
|
|
dataURL += btoa2(decoder.end());
|
|
return dataURL;
|
|
}
|
|
case "Text": {
|
|
let encoding = "failure";
|
|
if (encodingName) {
|
|
encoding = getEncoding(encodingName);
|
|
}
|
|
if (encoding === "failure" && mimeType) {
|
|
const type2 = parseMIMEType(mimeType);
|
|
if (type2 !== "failure") {
|
|
encoding = getEncoding(type2.parameters.get("charset"));
|
|
}
|
|
}
|
|
if (encoding === "failure") {
|
|
encoding = "UTF-8";
|
|
}
|
|
return decode(bytes, encoding);
|
|
}
|
|
case "ArrayBuffer": {
|
|
const sequence = combineByteSequences(bytes);
|
|
return sequence.buffer;
|
|
}
|
|
case "BinaryString": {
|
|
let binaryString = "";
|
|
const decoder = new StringDecoder("latin1");
|
|
for (const chunk of bytes) {
|
|
binaryString += decoder.write(chunk);
|
|
}
|
|
binaryString += decoder.end();
|
|
return binaryString;
|
|
}
|
|
}
|
|
};
|
|
var decode = function(ioQueue, encoding) {
|
|
const bytes = combineByteSequences(ioQueue);
|
|
const BOMEncoding = BOMSniffing(bytes);
|
|
let slice = 0;
|
|
if (BOMEncoding !== null) {
|
|
encoding = BOMEncoding;
|
|
slice = BOMEncoding === "UTF-8" ? 3 : 2;
|
|
}
|
|
const sliced = bytes.slice(slice);
|
|
return new TextDecoder(encoding).decode(sliced);
|
|
};
|
|
var BOMSniffing = function(ioQueue) {
|
|
const [a, b, c] = ioQueue;
|
|
if (a === 239 && b === 187 && c === 191) {
|
|
return "UTF-8";
|
|
} else if (a === 254 && b === 255) {
|
|
return "UTF-16BE";
|
|
} else if (a === 255 && b === 254) {
|
|
return "UTF-16LE";
|
|
}
|
|
return null;
|
|
};
|
|
var combineByteSequences = function(sequences) {
|
|
const size = sequences.reduce((a, b) => {
|
|
return a + b.byteLength;
|
|
}, 0);
|
|
let offset = 0;
|
|
return sequences.reduce((a, b) => {
|
|
a.set(b, offset);
|
|
offset += b.byteLength;
|
|
return a;
|
|
}, new Uint8Array(size));
|
|
};
|
|
var {
|
|
kState,
|
|
kError,
|
|
kResult,
|
|
kAborted,
|
|
kLastProgressEventFired
|
|
} = require_symbols3();
|
|
var { ProgressEvent } = require_progressevent();
|
|
var { getEncoding } = require_encoding();
|
|
var { DOMException: DOMException2 } = require_constants2();
|
|
var { serializeAMimeType, parseMIMEType } = require_dataURL();
|
|
var { types } = __require("util");
|
|
var { StringDecoder } = __require("string_decoder");
|
|
var { btoa: btoa2 } = __require("buffer");
|
|
var staticPropertyDescriptors = {
|
|
enumerable: true,
|
|
writable: false,
|
|
configurable: false
|
|
};
|
|
module.exports = {
|
|
staticPropertyDescriptors,
|
|
readOperation,
|
|
fireAProgressEvent
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/fileapi/filereader.js
|
|
var require_filereader = __commonJS((exports, module) => {
|
|
var {
|
|
staticPropertyDescriptors,
|
|
readOperation,
|
|
fireAProgressEvent
|
|
} = require_util4();
|
|
var {
|
|
kState,
|
|
kError,
|
|
kResult,
|
|
kEvents,
|
|
kAborted
|
|
} = require_symbols3();
|
|
var { webidl } = require_webidl();
|
|
var { kEnumerableProperty } = require_util();
|
|
|
|
class FileReader extends EventTarget {
|
|
constructor() {
|
|
super();
|
|
this[kState] = "empty";
|
|
this[kResult] = null;
|
|
this[kError] = null;
|
|
this[kEvents] = {
|
|
loadend: null,
|
|
error: null,
|
|
abort: null,
|
|
load: null,
|
|
progress: null,
|
|
loadstart: null
|
|
};
|
|
}
|
|
readAsArrayBuffer(blob) {
|
|
webidl.brandCheck(this, FileReader);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FileReader.readAsArrayBuffer" });
|
|
blob = webidl.converters.Blob(blob, { strict: false });
|
|
readOperation(this, blob, "ArrayBuffer");
|
|
}
|
|
readAsBinaryString(blob) {
|
|
webidl.brandCheck(this, FileReader);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FileReader.readAsBinaryString" });
|
|
blob = webidl.converters.Blob(blob, { strict: false });
|
|
readOperation(this, blob, "BinaryString");
|
|
}
|
|
readAsText(blob, encoding = undefined) {
|
|
webidl.brandCheck(this, FileReader);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FileReader.readAsText" });
|
|
blob = webidl.converters.Blob(blob, { strict: false });
|
|
if (encoding !== undefined) {
|
|
encoding = webidl.converters.DOMString(encoding);
|
|
}
|
|
readOperation(this, blob, "Text", encoding);
|
|
}
|
|
readAsDataURL(blob) {
|
|
webidl.brandCheck(this, FileReader);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "FileReader.readAsDataURL" });
|
|
blob = webidl.converters.Blob(blob, { strict: false });
|
|
readOperation(this, blob, "DataURL");
|
|
}
|
|
abort() {
|
|
if (this[kState] === "empty" || this[kState] === "done") {
|
|
this[kResult] = null;
|
|
return;
|
|
}
|
|
if (this[kState] === "loading") {
|
|
this[kState] = "done";
|
|
this[kResult] = null;
|
|
}
|
|
this[kAborted] = true;
|
|
fireAProgressEvent("abort", this);
|
|
if (this[kState] !== "loading") {
|
|
fireAProgressEvent("loadend", this);
|
|
}
|
|
}
|
|
get readyState() {
|
|
webidl.brandCheck(this, FileReader);
|
|
switch (this[kState]) {
|
|
case "empty":
|
|
return this.EMPTY;
|
|
case "loading":
|
|
return this.LOADING;
|
|
case "done":
|
|
return this.DONE;
|
|
}
|
|
}
|
|
get result() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kResult];
|
|
}
|
|
get error() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kError];
|
|
}
|
|
get onloadend() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kEvents].loadend;
|
|
}
|
|
set onloadend(fn) {
|
|
webidl.brandCheck(this, FileReader);
|
|
if (this[kEvents].loadend) {
|
|
this.removeEventListener("loadend", this[kEvents].loadend);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this[kEvents].loadend = fn;
|
|
this.addEventListener("loadend", fn);
|
|
} else {
|
|
this[kEvents].loadend = null;
|
|
}
|
|
}
|
|
get onerror() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kEvents].error;
|
|
}
|
|
set onerror(fn) {
|
|
webidl.brandCheck(this, FileReader);
|
|
if (this[kEvents].error) {
|
|
this.removeEventListener("error", this[kEvents].error);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this[kEvents].error = fn;
|
|
this.addEventListener("error", fn);
|
|
} else {
|
|
this[kEvents].error = null;
|
|
}
|
|
}
|
|
get onloadstart() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kEvents].loadstart;
|
|
}
|
|
set onloadstart(fn) {
|
|
webidl.brandCheck(this, FileReader);
|
|
if (this[kEvents].loadstart) {
|
|
this.removeEventListener("loadstart", this[kEvents].loadstart);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this[kEvents].loadstart = fn;
|
|
this.addEventListener("loadstart", fn);
|
|
} else {
|
|
this[kEvents].loadstart = null;
|
|
}
|
|
}
|
|
get onprogress() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kEvents].progress;
|
|
}
|
|
set onprogress(fn) {
|
|
webidl.brandCheck(this, FileReader);
|
|
if (this[kEvents].progress) {
|
|
this.removeEventListener("progress", this[kEvents].progress);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this[kEvents].progress = fn;
|
|
this.addEventListener("progress", fn);
|
|
} else {
|
|
this[kEvents].progress = null;
|
|
}
|
|
}
|
|
get onload() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kEvents].load;
|
|
}
|
|
set onload(fn) {
|
|
webidl.brandCheck(this, FileReader);
|
|
if (this[kEvents].load) {
|
|
this.removeEventListener("load", this[kEvents].load);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this[kEvents].load = fn;
|
|
this.addEventListener("load", fn);
|
|
} else {
|
|
this[kEvents].load = null;
|
|
}
|
|
}
|
|
get onabort() {
|
|
webidl.brandCheck(this, FileReader);
|
|
return this[kEvents].abort;
|
|
}
|
|
set onabort(fn) {
|
|
webidl.brandCheck(this, FileReader);
|
|
if (this[kEvents].abort) {
|
|
this.removeEventListener("abort", this[kEvents].abort);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this[kEvents].abort = fn;
|
|
this.addEventListener("abort", fn);
|
|
} else {
|
|
this[kEvents].abort = null;
|
|
}
|
|
}
|
|
}
|
|
FileReader.EMPTY = FileReader.prototype.EMPTY = 0;
|
|
FileReader.LOADING = FileReader.prototype.LOADING = 1;
|
|
FileReader.DONE = FileReader.prototype.DONE = 2;
|
|
Object.defineProperties(FileReader.prototype, {
|
|
EMPTY: staticPropertyDescriptors,
|
|
LOADING: staticPropertyDescriptors,
|
|
DONE: staticPropertyDescriptors,
|
|
readAsArrayBuffer: kEnumerableProperty,
|
|
readAsBinaryString: kEnumerableProperty,
|
|
readAsText: kEnumerableProperty,
|
|
readAsDataURL: kEnumerableProperty,
|
|
abort: kEnumerableProperty,
|
|
readyState: kEnumerableProperty,
|
|
result: kEnumerableProperty,
|
|
error: kEnumerableProperty,
|
|
onloadstart: kEnumerableProperty,
|
|
onprogress: kEnumerableProperty,
|
|
onload: kEnumerableProperty,
|
|
onabort: kEnumerableProperty,
|
|
onerror: kEnumerableProperty,
|
|
onloadend: kEnumerableProperty,
|
|
[Symbol.toStringTag]: {
|
|
value: "FileReader",
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
}
|
|
});
|
|
Object.defineProperties(FileReader, {
|
|
EMPTY: staticPropertyDescriptors,
|
|
LOADING: staticPropertyDescriptors,
|
|
DONE: staticPropertyDescriptors
|
|
});
|
|
module.exports = {
|
|
FileReader
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cache/symbols.js
|
|
var require_symbols4 = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
kConstruct: require_symbols().kConstruct
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cache/util.js
|
|
var require_util5 = __commonJS((exports, module) => {
|
|
var urlEquals = function(A, B, excludeFragment = false) {
|
|
const serializedA = URLSerializer(A, excludeFragment);
|
|
const serializedB = URLSerializer(B, excludeFragment);
|
|
return serializedA === serializedB;
|
|
};
|
|
var fieldValues = function(header) {
|
|
assert(header !== null);
|
|
const values = [];
|
|
for (let value of header.split(",")) {
|
|
value = value.trim();
|
|
if (!value.length) {
|
|
continue;
|
|
} else if (!isValidHeaderName(value)) {
|
|
continue;
|
|
}
|
|
values.push(value);
|
|
}
|
|
return values;
|
|
};
|
|
var assert = __require("assert");
|
|
var { URLSerializer } = require_dataURL();
|
|
var { isValidHeaderName } = require_util2();
|
|
module.exports = {
|
|
urlEquals,
|
|
fieldValues
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cache/cache.js
|
|
var require_cache = __commonJS((exports, module) => {
|
|
var { kConstruct } = require_symbols4();
|
|
var { urlEquals, fieldValues: getFieldValues } = require_util5();
|
|
var { kEnumerableProperty, isDisturbed } = require_util();
|
|
var { kHeadersList } = require_symbols();
|
|
var { webidl } = require_webidl();
|
|
var { Response: Response2, cloneResponse } = require_response();
|
|
var { Request: Request2 } = require_request2();
|
|
var { kState, kHeaders, kGuard, kRealm } = require_symbols2();
|
|
var { fetching } = require_fetch();
|
|
var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2();
|
|
var assert = __require("assert");
|
|
var { getGlobalDispatcher } = require_global2();
|
|
|
|
class Cache {
|
|
#relevantRequestResponseList;
|
|
constructor() {
|
|
if (arguments[0] !== kConstruct) {
|
|
webidl.illegalConstructor();
|
|
}
|
|
this.#relevantRequestResponseList = arguments[1];
|
|
}
|
|
async match(request, options = {}) {
|
|
webidl.brandCheck(this, Cache);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Cache.match" });
|
|
request = webidl.converters.RequestInfo(request);
|
|
options = webidl.converters.CacheQueryOptions(options);
|
|
const p = await this.matchAll(request, options);
|
|
if (p.length === 0) {
|
|
return;
|
|
}
|
|
return p[0];
|
|
}
|
|
async matchAll(request = undefined, options = {}) {
|
|
webidl.brandCheck(this, Cache);
|
|
if (request !== undefined)
|
|
request = webidl.converters.RequestInfo(request);
|
|
options = webidl.converters.CacheQueryOptions(options);
|
|
let r = null;
|
|
if (request !== undefined) {
|
|
if (request instanceof Request2) {
|
|
r = request[kState];
|
|
if (r.method !== "GET" && !options.ignoreMethod) {
|
|
return [];
|
|
}
|
|
} else if (typeof request === "string") {
|
|
r = new Request2(request)[kState];
|
|
}
|
|
}
|
|
const responses = [];
|
|
if (request === undefined) {
|
|
for (const requestResponse of this.#relevantRequestResponseList) {
|
|
responses.push(requestResponse[1]);
|
|
}
|
|
} else {
|
|
const requestResponses = this.#queryCache(r, options);
|
|
for (const requestResponse of requestResponses) {
|
|
responses.push(requestResponse[1]);
|
|
}
|
|
}
|
|
const responseList = [];
|
|
for (const response of responses) {
|
|
const responseObject = new Response2(response.body?.source ?? null);
|
|
const body = responseObject[kState].body;
|
|
responseObject[kState] = response;
|
|
responseObject[kState].body = body;
|
|
responseObject[kHeaders][kHeadersList] = response.headersList;
|
|
responseObject[kHeaders][kGuard] = "immutable";
|
|
responseList.push(responseObject);
|
|
}
|
|
return Object.freeze(responseList);
|
|
}
|
|
async add(request) {
|
|
webidl.brandCheck(this, Cache);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Cache.add" });
|
|
request = webidl.converters.RequestInfo(request);
|
|
const requests = [request];
|
|
const responseArrayPromise = this.addAll(requests);
|
|
return await responseArrayPromise;
|
|
}
|
|
async addAll(requests) {
|
|
webidl.brandCheck(this, Cache);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Cache.addAll" });
|
|
requests = webidl.converters["sequence<RequestInfo>"](requests);
|
|
const responsePromises = [];
|
|
const requestList = [];
|
|
for (const request of requests) {
|
|
if (typeof request === "string") {
|
|
continue;
|
|
}
|
|
const r = request[kState];
|
|
if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.addAll",
|
|
message: "Expected http/s scheme when method is not GET."
|
|
});
|
|
}
|
|
}
|
|
const fetchControllers = [];
|
|
for (const request of requests) {
|
|
const r = new Request2(request)[kState];
|
|
if (!urlIsHttpHttpsScheme(r.url)) {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.addAll",
|
|
message: "Expected http/s scheme."
|
|
});
|
|
}
|
|
r.initiator = "fetch";
|
|
r.destination = "subresource";
|
|
requestList.push(r);
|
|
const responsePromise = createDeferredPromise();
|
|
fetchControllers.push(fetching({
|
|
request: r,
|
|
dispatcher: getGlobalDispatcher(),
|
|
processResponse(response) {
|
|
if (response.type === "error" || response.status === 206 || response.status < 200 || response.status > 299) {
|
|
responsePromise.reject(webidl.errors.exception({
|
|
header: "Cache.addAll",
|
|
message: "Received an invalid status code or the request failed."
|
|
}));
|
|
} else if (response.headersList.contains("vary")) {
|
|
const fieldValues = getFieldValues(response.headersList.get("vary"));
|
|
for (const fieldValue of fieldValues) {
|
|
if (fieldValue === "*") {
|
|
responsePromise.reject(webidl.errors.exception({
|
|
header: "Cache.addAll",
|
|
message: "invalid vary field value"
|
|
}));
|
|
for (const controller of fetchControllers) {
|
|
controller.abort();
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
processResponseEndOfBody(response) {
|
|
if (response.aborted) {
|
|
responsePromise.reject(new DOMException("aborted", "AbortError"));
|
|
return;
|
|
}
|
|
responsePromise.resolve(response);
|
|
}
|
|
}));
|
|
responsePromises.push(responsePromise.promise);
|
|
}
|
|
const p = Promise.all(responsePromises);
|
|
const responses = await p;
|
|
const operations = [];
|
|
let index = 0;
|
|
for (const response of responses) {
|
|
const operation = {
|
|
type: "put",
|
|
request: requestList[index],
|
|
response
|
|
};
|
|
operations.push(operation);
|
|
index++;
|
|
}
|
|
const cacheJobPromise = createDeferredPromise();
|
|
let errorData = null;
|
|
try {
|
|
this.#batchCacheOperations(operations);
|
|
} catch (e) {
|
|
errorData = e;
|
|
}
|
|
queueMicrotask(() => {
|
|
if (errorData === null) {
|
|
cacheJobPromise.resolve(undefined);
|
|
} else {
|
|
cacheJobPromise.reject(errorData);
|
|
}
|
|
});
|
|
return cacheJobPromise.promise;
|
|
}
|
|
async put(request, response) {
|
|
webidl.brandCheck(this, Cache);
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "Cache.put" });
|
|
request = webidl.converters.RequestInfo(request);
|
|
response = webidl.converters.Response(response);
|
|
let innerRequest = null;
|
|
if (request instanceof Request2) {
|
|
innerRequest = request[kState];
|
|
} else {
|
|
innerRequest = new Request2(request)[kState];
|
|
}
|
|
if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.put",
|
|
message: "Expected an http/s scheme when method is not GET"
|
|
});
|
|
}
|
|
const innerResponse = response[kState];
|
|
if (innerResponse.status === 206) {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.put",
|
|
message: "Got 206 status"
|
|
});
|
|
}
|
|
if (innerResponse.headersList.contains("vary")) {
|
|
const fieldValues = getFieldValues(innerResponse.headersList.get("vary"));
|
|
for (const fieldValue of fieldValues) {
|
|
if (fieldValue === "*") {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.put",
|
|
message: "Got * vary field value"
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.put",
|
|
message: "Response body is locked or disturbed"
|
|
});
|
|
}
|
|
const clonedResponse = cloneResponse(innerResponse);
|
|
const bodyReadPromise = createDeferredPromise();
|
|
if (innerResponse.body != null) {
|
|
const stream = innerResponse.body.stream;
|
|
const reader = stream.getReader();
|
|
readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject);
|
|
} else {
|
|
bodyReadPromise.resolve(undefined);
|
|
}
|
|
const operations = [];
|
|
const operation = {
|
|
type: "put",
|
|
request: innerRequest,
|
|
response: clonedResponse
|
|
};
|
|
operations.push(operation);
|
|
const bytes = await bodyReadPromise.promise;
|
|
if (clonedResponse.body != null) {
|
|
clonedResponse.body.source = bytes;
|
|
}
|
|
const cacheJobPromise = createDeferredPromise();
|
|
let errorData = null;
|
|
try {
|
|
this.#batchCacheOperations(operations);
|
|
} catch (e) {
|
|
errorData = e;
|
|
}
|
|
queueMicrotask(() => {
|
|
if (errorData === null) {
|
|
cacheJobPromise.resolve();
|
|
} else {
|
|
cacheJobPromise.reject(errorData);
|
|
}
|
|
});
|
|
return cacheJobPromise.promise;
|
|
}
|
|
async delete(request, options = {}) {
|
|
webidl.brandCheck(this, Cache);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "Cache.delete" });
|
|
request = webidl.converters.RequestInfo(request);
|
|
options = webidl.converters.CacheQueryOptions(options);
|
|
let r = null;
|
|
if (request instanceof Request2) {
|
|
r = request[kState];
|
|
if (r.method !== "GET" && !options.ignoreMethod) {
|
|
return false;
|
|
}
|
|
} else {
|
|
assert(typeof request === "string");
|
|
r = new Request2(request)[kState];
|
|
}
|
|
const operations = [];
|
|
const operation = {
|
|
type: "delete",
|
|
request: r,
|
|
options
|
|
};
|
|
operations.push(operation);
|
|
const cacheJobPromise = createDeferredPromise();
|
|
let errorData = null;
|
|
let requestResponses;
|
|
try {
|
|
requestResponses = this.#batchCacheOperations(operations);
|
|
} catch (e) {
|
|
errorData = e;
|
|
}
|
|
queueMicrotask(() => {
|
|
if (errorData === null) {
|
|
cacheJobPromise.resolve(!!requestResponses?.length);
|
|
} else {
|
|
cacheJobPromise.reject(errorData);
|
|
}
|
|
});
|
|
return cacheJobPromise.promise;
|
|
}
|
|
async keys(request = undefined, options = {}) {
|
|
webidl.brandCheck(this, Cache);
|
|
if (request !== undefined)
|
|
request = webidl.converters.RequestInfo(request);
|
|
options = webidl.converters.CacheQueryOptions(options);
|
|
let r = null;
|
|
if (request !== undefined) {
|
|
if (request instanceof Request2) {
|
|
r = request[kState];
|
|
if (r.method !== "GET" && !options.ignoreMethod) {
|
|
return [];
|
|
}
|
|
} else if (typeof request === "string") {
|
|
r = new Request2(request)[kState];
|
|
}
|
|
}
|
|
const promise = createDeferredPromise();
|
|
const requests = [];
|
|
if (request === undefined) {
|
|
for (const requestResponse of this.#relevantRequestResponseList) {
|
|
requests.push(requestResponse[0]);
|
|
}
|
|
} else {
|
|
const requestResponses = this.#queryCache(r, options);
|
|
for (const requestResponse of requestResponses) {
|
|
requests.push(requestResponse[0]);
|
|
}
|
|
}
|
|
queueMicrotask(() => {
|
|
const requestList = [];
|
|
for (const request2 of requests) {
|
|
const requestObject = new Request2("https://a");
|
|
requestObject[kState] = request2;
|
|
requestObject[kHeaders][kHeadersList] = request2.headersList;
|
|
requestObject[kHeaders][kGuard] = "immutable";
|
|
requestObject[kRealm] = request2.client;
|
|
requestList.push(requestObject);
|
|
}
|
|
promise.resolve(Object.freeze(requestList));
|
|
});
|
|
return promise.promise;
|
|
}
|
|
#batchCacheOperations(operations) {
|
|
const cache = this.#relevantRequestResponseList;
|
|
const backupCache = [...cache];
|
|
const addedItems = [];
|
|
const resultList = [];
|
|
try {
|
|
for (const operation of operations) {
|
|
if (operation.type !== "delete" && operation.type !== "put") {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.#batchCacheOperations",
|
|
message: 'operation type does not match "delete" or "put"'
|
|
});
|
|
}
|
|
if (operation.type === "delete" && operation.response != null) {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.#batchCacheOperations",
|
|
message: "delete operation should not have an associated response"
|
|
});
|
|
}
|
|
if (this.#queryCache(operation.request, operation.options, addedItems).length) {
|
|
throw new DOMException("???", "InvalidStateError");
|
|
}
|
|
let requestResponses;
|
|
if (operation.type === "delete") {
|
|
requestResponses = this.#queryCache(operation.request, operation.options);
|
|
if (requestResponses.length === 0) {
|
|
return [];
|
|
}
|
|
for (const requestResponse of requestResponses) {
|
|
const idx = cache.indexOf(requestResponse);
|
|
assert(idx !== -1);
|
|
cache.splice(idx, 1);
|
|
}
|
|
} else if (operation.type === "put") {
|
|
if (operation.response == null) {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.#batchCacheOperations",
|
|
message: "put operation should have an associated response"
|
|
});
|
|
}
|
|
const r = operation.request;
|
|
if (!urlIsHttpHttpsScheme(r.url)) {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.#batchCacheOperations",
|
|
message: "expected http or https scheme"
|
|
});
|
|
}
|
|
if (r.method !== "GET") {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.#batchCacheOperations",
|
|
message: "not get method"
|
|
});
|
|
}
|
|
if (operation.options != null) {
|
|
throw webidl.errors.exception({
|
|
header: "Cache.#batchCacheOperations",
|
|
message: "options must not be defined"
|
|
});
|
|
}
|
|
requestResponses = this.#queryCache(operation.request);
|
|
for (const requestResponse of requestResponses) {
|
|
const idx = cache.indexOf(requestResponse);
|
|
assert(idx !== -1);
|
|
cache.splice(idx, 1);
|
|
}
|
|
cache.push([operation.request, operation.response]);
|
|
addedItems.push([operation.request, operation.response]);
|
|
}
|
|
resultList.push([operation.request, operation.response]);
|
|
}
|
|
return resultList;
|
|
} catch (e) {
|
|
this.#relevantRequestResponseList.length = 0;
|
|
this.#relevantRequestResponseList = backupCache;
|
|
throw e;
|
|
}
|
|
}
|
|
#queryCache(requestQuery, options, targetStorage) {
|
|
const resultList = [];
|
|
const storage = targetStorage ?? this.#relevantRequestResponseList;
|
|
for (const requestResponse of storage) {
|
|
const [cachedRequest, cachedResponse] = requestResponse;
|
|
if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {
|
|
resultList.push(requestResponse);
|
|
}
|
|
}
|
|
return resultList;
|
|
}
|
|
#requestMatchesCachedItem(requestQuery, request, response = null, options) {
|
|
const queryURL = new URL(requestQuery.url);
|
|
const cachedURL = new URL(request.url);
|
|
if (options?.ignoreSearch) {
|
|
cachedURL.search = "";
|
|
queryURL.search = "";
|
|
}
|
|
if (!urlEquals(queryURL, cachedURL, true)) {
|
|
return false;
|
|
}
|
|
if (response == null || options?.ignoreVary || !response.headersList.contains("vary")) {
|
|
return true;
|
|
}
|
|
const fieldValues = getFieldValues(response.headersList.get("vary"));
|
|
for (const fieldValue of fieldValues) {
|
|
if (fieldValue === "*") {
|
|
return false;
|
|
}
|
|
const requestValue = request.headersList.get(fieldValue);
|
|
const queryValue = requestQuery.headersList.get(fieldValue);
|
|
if (requestValue !== queryValue) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
Object.defineProperties(Cache.prototype, {
|
|
[Symbol.toStringTag]: {
|
|
value: "Cache",
|
|
configurable: true
|
|
},
|
|
match: kEnumerableProperty,
|
|
matchAll: kEnumerableProperty,
|
|
add: kEnumerableProperty,
|
|
addAll: kEnumerableProperty,
|
|
put: kEnumerableProperty,
|
|
delete: kEnumerableProperty,
|
|
keys: kEnumerableProperty
|
|
});
|
|
var cacheQueryOptionConverters = [
|
|
{
|
|
key: "ignoreSearch",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "ignoreMethod",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "ignoreVary",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
}
|
|
];
|
|
webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters);
|
|
webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([
|
|
...cacheQueryOptionConverters,
|
|
{
|
|
key: "cacheName",
|
|
converter: webidl.converters.DOMString
|
|
}
|
|
]);
|
|
webidl.converters.Response = webidl.interfaceConverter(Response2);
|
|
webidl.converters["sequence<RequestInfo>"] = webidl.sequenceConverter(webidl.converters.RequestInfo);
|
|
module.exports = {
|
|
Cache
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cache/cachestorage.js
|
|
var require_cachestorage = __commonJS((exports, module) => {
|
|
var { kConstruct } = require_symbols4();
|
|
var { Cache } = require_cache();
|
|
var { webidl } = require_webidl();
|
|
var { kEnumerableProperty } = require_util();
|
|
|
|
class CacheStorage {
|
|
#caches = new Map;
|
|
constructor() {
|
|
if (arguments[0] !== kConstruct) {
|
|
webidl.illegalConstructor();
|
|
}
|
|
}
|
|
async match(request, options = {}) {
|
|
webidl.brandCheck(this, CacheStorage);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "CacheStorage.match" });
|
|
request = webidl.converters.RequestInfo(request);
|
|
options = webidl.converters.MultiCacheQueryOptions(options);
|
|
if (options.cacheName != null) {
|
|
if (this.#caches.has(options.cacheName)) {
|
|
const cacheList = this.#caches.get(options.cacheName);
|
|
const cache = new Cache(kConstruct, cacheList);
|
|
return await cache.match(request, options);
|
|
}
|
|
} else {
|
|
for (const cacheList of this.#caches.values()) {
|
|
const cache = new Cache(kConstruct, cacheList);
|
|
const response = await cache.match(request, options);
|
|
if (response !== undefined) {
|
|
return response;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
async has(cacheName) {
|
|
webidl.brandCheck(this, CacheStorage);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "CacheStorage.has" });
|
|
cacheName = webidl.converters.DOMString(cacheName);
|
|
return this.#caches.has(cacheName);
|
|
}
|
|
async open(cacheName) {
|
|
webidl.brandCheck(this, CacheStorage);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "CacheStorage.open" });
|
|
cacheName = webidl.converters.DOMString(cacheName);
|
|
if (this.#caches.has(cacheName)) {
|
|
const cache2 = this.#caches.get(cacheName);
|
|
return new Cache(kConstruct, cache2);
|
|
}
|
|
const cache = [];
|
|
this.#caches.set(cacheName, cache);
|
|
return new Cache(kConstruct, cache);
|
|
}
|
|
async delete(cacheName) {
|
|
webidl.brandCheck(this, CacheStorage);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "CacheStorage.delete" });
|
|
cacheName = webidl.converters.DOMString(cacheName);
|
|
return this.#caches.delete(cacheName);
|
|
}
|
|
async keys() {
|
|
webidl.brandCheck(this, CacheStorage);
|
|
const keys = this.#caches.keys();
|
|
return [...keys];
|
|
}
|
|
}
|
|
Object.defineProperties(CacheStorage.prototype, {
|
|
[Symbol.toStringTag]: {
|
|
value: "CacheStorage",
|
|
configurable: true
|
|
},
|
|
match: kEnumerableProperty,
|
|
has: kEnumerableProperty,
|
|
open: kEnumerableProperty,
|
|
delete: kEnumerableProperty,
|
|
keys: kEnumerableProperty
|
|
});
|
|
module.exports = {
|
|
CacheStorage
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cookies/constants.js
|
|
var require_constants4 = __commonJS((exports, module) => {
|
|
var maxAttributeValueSize = 1024;
|
|
var maxNameValuePairSize = 4096;
|
|
module.exports = {
|
|
maxAttributeValueSize,
|
|
maxNameValuePairSize
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cookies/util.js
|
|
var require_util6 = __commonJS((exports, module) => {
|
|
var isCTLExcludingHtab = function(value) {
|
|
if (value.length === 0) {
|
|
return false;
|
|
}
|
|
for (const char of value) {
|
|
const code = char.charCodeAt(0);
|
|
if (code >= 0 || code <= 8 || (code >= 10 || code <= 31) || code === 127) {
|
|
return false;
|
|
}
|
|
}
|
|
};
|
|
var validateCookieName = function(name) {
|
|
for (const char of name) {
|
|
const code = char.charCodeAt(0);
|
|
if (code <= 32 || code > 127 || char === "(" || char === ")" || char === ">" || char === "<" || char === "@" || char === "," || char === ";" || char === ":" || char === "\\" || char === '"' || char === "/" || char === "[" || char === "]" || char === "?" || char === "=" || char === "{" || char === "}") {
|
|
throw new Error("Invalid cookie name");
|
|
}
|
|
}
|
|
};
|
|
var validateCookieValue = function(value) {
|
|
for (const char of value) {
|
|
const code = char.charCodeAt(0);
|
|
if (code < 33 || code === 34 || code === 44 || code === 59 || code === 92 || code > 126) {
|
|
throw new Error("Invalid header value");
|
|
}
|
|
}
|
|
};
|
|
var validateCookiePath = function(path) {
|
|
for (const char of path) {
|
|
const code = char.charCodeAt(0);
|
|
if (code < 33 || char === ";") {
|
|
throw new Error("Invalid cookie path");
|
|
}
|
|
}
|
|
};
|
|
var validateCookieDomain = function(domain) {
|
|
if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) {
|
|
throw new Error("Invalid cookie domain");
|
|
}
|
|
};
|
|
var toIMFDate = function(date) {
|
|
if (typeof date === "number") {
|
|
date = new Date(date);
|
|
}
|
|
const days = [
|
|
"Sun",
|
|
"Mon",
|
|
"Tue",
|
|
"Wed",
|
|
"Thu",
|
|
"Fri",
|
|
"Sat"
|
|
];
|
|
const months = [
|
|
"Jan",
|
|
"Feb",
|
|
"Mar",
|
|
"Apr",
|
|
"May",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Oct",
|
|
"Nov",
|
|
"Dec"
|
|
];
|
|
const dayName = days[date.getUTCDay()];
|
|
const day = date.getUTCDate().toString().padStart(2, "0");
|
|
const month = months[date.getUTCMonth()];
|
|
const year = date.getUTCFullYear();
|
|
const hour = date.getUTCHours().toString().padStart(2, "0");
|
|
const minute = date.getUTCMinutes().toString().padStart(2, "0");
|
|
const second = date.getUTCSeconds().toString().padStart(2, "0");
|
|
return `${dayName}, ${day} ${month} ${year} ${hour}:${minute}:${second} GMT`;
|
|
};
|
|
var validateCookieMaxAge = function(maxAge) {
|
|
if (maxAge < 0) {
|
|
throw new Error("Invalid cookie max-age");
|
|
}
|
|
};
|
|
var stringify = function(cookie) {
|
|
if (cookie.name.length === 0) {
|
|
return null;
|
|
}
|
|
validateCookieName(cookie.name);
|
|
validateCookieValue(cookie.value);
|
|
const out = [`${cookie.name}=${cookie.value}`];
|
|
if (cookie.name.startsWith("__Secure-")) {
|
|
cookie.secure = true;
|
|
}
|
|
if (cookie.name.startsWith("__Host-")) {
|
|
cookie.secure = true;
|
|
cookie.domain = null;
|
|
cookie.path = "/";
|
|
}
|
|
if (cookie.secure) {
|
|
out.push("Secure");
|
|
}
|
|
if (cookie.httpOnly) {
|
|
out.push("HttpOnly");
|
|
}
|
|
if (typeof cookie.maxAge === "number") {
|
|
validateCookieMaxAge(cookie.maxAge);
|
|
out.push(`Max-Age=${cookie.maxAge}`);
|
|
}
|
|
if (cookie.domain) {
|
|
validateCookieDomain(cookie.domain);
|
|
out.push(`Domain=${cookie.domain}`);
|
|
}
|
|
if (cookie.path) {
|
|
validateCookiePath(cookie.path);
|
|
out.push(`Path=${cookie.path}`);
|
|
}
|
|
if (cookie.expires && cookie.expires.toString() !== "Invalid Date") {
|
|
out.push(`Expires=${toIMFDate(cookie.expires)}`);
|
|
}
|
|
if (cookie.sameSite) {
|
|
out.push(`SameSite=${cookie.sameSite}`);
|
|
}
|
|
for (const part of cookie.unparsed) {
|
|
if (!part.includes("=")) {
|
|
throw new Error("Invalid unparsed");
|
|
}
|
|
const [key, ...value] = part.split("=");
|
|
out.push(`${key.trim()}=${value.join("=")}`);
|
|
}
|
|
return out.join("; ");
|
|
};
|
|
var getHeadersList = function(headers) {
|
|
if (headers[kHeadersList]) {
|
|
return headers[kHeadersList];
|
|
}
|
|
if (!kHeadersListNode) {
|
|
kHeadersListNode = Object.getOwnPropertySymbols(headers).find((symbol) => symbol.description === "headers list");
|
|
assert(kHeadersListNode, "Headers cannot be parsed");
|
|
}
|
|
const headersList = headers[kHeadersListNode];
|
|
assert(headersList);
|
|
return headersList;
|
|
};
|
|
var assert = __require("assert");
|
|
var { kHeadersList } = require_symbols();
|
|
var kHeadersListNode;
|
|
module.exports = {
|
|
isCTLExcludingHtab,
|
|
stringify,
|
|
getHeadersList
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cookies/parse.js
|
|
var require_parse2 = __commonJS((exports, module) => {
|
|
var parseSetCookie = function(header) {
|
|
if (isCTLExcludingHtab(header)) {
|
|
return null;
|
|
}
|
|
let nameValuePair = "";
|
|
let unparsedAttributes = "";
|
|
let name = "";
|
|
let value = "";
|
|
if (header.includes(";")) {
|
|
const position = { position: 0 };
|
|
nameValuePair = collectASequenceOfCodePointsFast(";", header, position);
|
|
unparsedAttributes = header.slice(position.position);
|
|
} else {
|
|
nameValuePair = header;
|
|
}
|
|
if (!nameValuePair.includes("=")) {
|
|
value = nameValuePair;
|
|
} else {
|
|
const position = { position: 0 };
|
|
name = collectASequenceOfCodePointsFast("=", nameValuePair, position);
|
|
value = nameValuePair.slice(position.position + 1);
|
|
}
|
|
name = name.trim();
|
|
value = value.trim();
|
|
if (name.length + value.length > maxNameValuePairSize) {
|
|
return null;
|
|
}
|
|
return {
|
|
name,
|
|
value,
|
|
...parseUnparsedAttributes(unparsedAttributes)
|
|
};
|
|
};
|
|
var parseUnparsedAttributes = function(unparsedAttributes, cookieAttributeList = {}) {
|
|
if (unparsedAttributes.length === 0) {
|
|
return cookieAttributeList;
|
|
}
|
|
assert(unparsedAttributes[0] === ";");
|
|
unparsedAttributes = unparsedAttributes.slice(1);
|
|
let cookieAv = "";
|
|
if (unparsedAttributes.includes(";")) {
|
|
cookieAv = collectASequenceOfCodePointsFast(";", unparsedAttributes, { position: 0 });
|
|
unparsedAttributes = unparsedAttributes.slice(cookieAv.length);
|
|
} else {
|
|
cookieAv = unparsedAttributes;
|
|
unparsedAttributes = "";
|
|
}
|
|
let attributeName = "";
|
|
let attributeValue = "";
|
|
if (cookieAv.includes("=")) {
|
|
const position = { position: 0 };
|
|
attributeName = collectASequenceOfCodePointsFast("=", cookieAv, position);
|
|
attributeValue = cookieAv.slice(position.position + 1);
|
|
} else {
|
|
attributeName = cookieAv;
|
|
}
|
|
attributeName = attributeName.trim();
|
|
attributeValue = attributeValue.trim();
|
|
if (attributeValue.length > maxAttributeValueSize) {
|
|
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
}
|
|
const attributeNameLowercase = attributeName.toLowerCase();
|
|
if (attributeNameLowercase === "expires") {
|
|
const expiryTime = new Date(attributeValue);
|
|
cookieAttributeList.expires = expiryTime;
|
|
} else if (attributeNameLowercase === "max-age") {
|
|
const charCode = attributeValue.charCodeAt(0);
|
|
if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") {
|
|
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
}
|
|
if (!/^\d+$/.test(attributeValue)) {
|
|
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
}
|
|
const deltaSeconds = Number(attributeValue);
|
|
cookieAttributeList.maxAge = deltaSeconds;
|
|
} else if (attributeNameLowercase === "domain") {
|
|
let cookieDomain = attributeValue;
|
|
if (cookieDomain[0] === ".") {
|
|
cookieDomain = cookieDomain.slice(1);
|
|
}
|
|
cookieDomain = cookieDomain.toLowerCase();
|
|
cookieAttributeList.domain = cookieDomain;
|
|
} else if (attributeNameLowercase === "path") {
|
|
let cookiePath = "";
|
|
if (attributeValue.length === 0 || attributeValue[0] !== "/") {
|
|
cookiePath = "/";
|
|
} else {
|
|
cookiePath = attributeValue;
|
|
}
|
|
cookieAttributeList.path = cookiePath;
|
|
} else if (attributeNameLowercase === "secure") {
|
|
cookieAttributeList.secure = true;
|
|
} else if (attributeNameLowercase === "httponly") {
|
|
cookieAttributeList.httpOnly = true;
|
|
} else if (attributeNameLowercase === "samesite") {
|
|
let enforcement = "Default";
|
|
const attributeValueLowercase = attributeValue.toLowerCase();
|
|
if (attributeValueLowercase.includes("none")) {
|
|
enforcement = "None";
|
|
}
|
|
if (attributeValueLowercase.includes("strict")) {
|
|
enforcement = "Strict";
|
|
}
|
|
if (attributeValueLowercase.includes("lax")) {
|
|
enforcement = "Lax";
|
|
}
|
|
cookieAttributeList.sameSite = enforcement;
|
|
} else {
|
|
cookieAttributeList.unparsed ??= [];
|
|
cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
|
|
}
|
|
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
|
|
};
|
|
var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4();
|
|
var { isCTLExcludingHtab } = require_util6();
|
|
var { collectASequenceOfCodePointsFast } = require_dataURL();
|
|
var assert = __require("assert");
|
|
module.exports = {
|
|
parseSetCookie,
|
|
parseUnparsedAttributes
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/cookies/index.js
|
|
var require_cookies = __commonJS((exports, module) => {
|
|
var getCookies = function(headers) {
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "getCookies" });
|
|
webidl.brandCheck(headers, Headers, { strict: false });
|
|
const cookie = headers.get("cookie");
|
|
const out = {};
|
|
if (!cookie) {
|
|
return out;
|
|
}
|
|
for (const piece of cookie.split(";")) {
|
|
const [name, ...value] = piece.split("=");
|
|
out[name.trim()] = value.join("=");
|
|
}
|
|
return out;
|
|
};
|
|
var deleteCookie = function(headers, name, attributes) {
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "deleteCookie" });
|
|
webidl.brandCheck(headers, Headers, { strict: false });
|
|
name = webidl.converters.DOMString(name);
|
|
attributes = webidl.converters.DeleteCookieAttributes(attributes);
|
|
setCookie(headers, {
|
|
name,
|
|
value: "",
|
|
expires: new Date(0),
|
|
...attributes
|
|
});
|
|
};
|
|
var getSetCookies = function(headers) {
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "getSetCookies" });
|
|
webidl.brandCheck(headers, Headers, { strict: false });
|
|
const cookies = getHeadersList(headers).cookies;
|
|
if (!cookies) {
|
|
return [];
|
|
}
|
|
return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair));
|
|
};
|
|
var setCookie = function(headers, cookie) {
|
|
webidl.argumentLengthCheck(arguments, 2, { header: "setCookie" });
|
|
webidl.brandCheck(headers, Headers, { strict: false });
|
|
cookie = webidl.converters.Cookie(cookie);
|
|
const str = stringify(cookie);
|
|
if (str) {
|
|
headers.append("Set-Cookie", stringify(cookie));
|
|
}
|
|
};
|
|
var { parseSetCookie } = require_parse2();
|
|
var { stringify, getHeadersList } = require_util6();
|
|
var { webidl } = require_webidl();
|
|
var { Headers } = require_headers();
|
|
webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([
|
|
{
|
|
converter: webidl.nullableConverter(webidl.converters.DOMString),
|
|
key: "path",
|
|
defaultValue: null
|
|
},
|
|
{
|
|
converter: webidl.nullableConverter(webidl.converters.DOMString),
|
|
key: "domain",
|
|
defaultValue: null
|
|
}
|
|
]);
|
|
webidl.converters.Cookie = webidl.dictionaryConverter([
|
|
{
|
|
converter: webidl.converters.DOMString,
|
|
key: "name"
|
|
},
|
|
{
|
|
converter: webidl.converters.DOMString,
|
|
key: "value"
|
|
},
|
|
{
|
|
converter: webidl.nullableConverter((value) => {
|
|
if (typeof value === "number") {
|
|
return webidl.converters["unsigned long long"](value);
|
|
}
|
|
return new Date(value);
|
|
}),
|
|
key: "expires",
|
|
defaultValue: null
|
|
},
|
|
{
|
|
converter: webidl.nullableConverter(webidl.converters["long long"]),
|
|
key: "maxAge",
|
|
defaultValue: null
|
|
},
|
|
{
|
|
converter: webidl.nullableConverter(webidl.converters.DOMString),
|
|
key: "domain",
|
|
defaultValue: null
|
|
},
|
|
{
|
|
converter: webidl.nullableConverter(webidl.converters.DOMString),
|
|
key: "path",
|
|
defaultValue: null
|
|
},
|
|
{
|
|
converter: webidl.nullableConverter(webidl.converters.boolean),
|
|
key: "secure",
|
|
defaultValue: null
|
|
},
|
|
{
|
|
converter: webidl.nullableConverter(webidl.converters.boolean),
|
|
key: "httpOnly",
|
|
defaultValue: null
|
|
},
|
|
{
|
|
converter: webidl.converters.USVString,
|
|
key: "sameSite",
|
|
allowedValues: ["Strict", "Lax", "None"]
|
|
},
|
|
{
|
|
converter: webidl.sequenceConverter(webidl.converters.DOMString),
|
|
key: "unparsed",
|
|
defaultValue: []
|
|
}
|
|
]);
|
|
module.exports = {
|
|
getCookies,
|
|
deleteCookie,
|
|
getSetCookies,
|
|
setCookie
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/constants.js
|
|
var require_constants5 = __commonJS((exports, module) => {
|
|
var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
var staticPropertyDescriptors = {
|
|
enumerable: true,
|
|
writable: false,
|
|
configurable: false
|
|
};
|
|
var states = {
|
|
CONNECTING: 0,
|
|
OPEN: 1,
|
|
CLOSING: 2,
|
|
CLOSED: 3
|
|
};
|
|
var opcodes = {
|
|
CONTINUATION: 0,
|
|
TEXT: 1,
|
|
BINARY: 2,
|
|
CLOSE: 8,
|
|
PING: 9,
|
|
PONG: 10
|
|
};
|
|
var maxUnsigned16Bit = 2 ** 16 - 1;
|
|
var parserStates = {
|
|
INFO: 0,
|
|
PAYLOADLENGTH_16: 2,
|
|
PAYLOADLENGTH_64: 3,
|
|
READ_DATA: 4
|
|
};
|
|
var emptyBuffer = Buffer.allocUnsafe(0);
|
|
module.exports = {
|
|
uid,
|
|
staticPropertyDescriptors,
|
|
states,
|
|
opcodes,
|
|
maxUnsigned16Bit,
|
|
parserStates,
|
|
emptyBuffer
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/symbols.js
|
|
var require_symbols5 = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
kWebSocketURL: Symbol("url"),
|
|
kReadyState: Symbol("ready state"),
|
|
kController: Symbol("controller"),
|
|
kResponse: Symbol("response"),
|
|
kBinaryType: Symbol("binary type"),
|
|
kSentClose: Symbol("sent close"),
|
|
kReceivedClose: Symbol("received close"),
|
|
kByteParser: Symbol("byte parser")
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/events.js
|
|
var require_events = __commonJS((exports, module) => {
|
|
var { webidl } = require_webidl();
|
|
var { kEnumerableProperty } = require_util();
|
|
var { MessagePort } = __require("worker_threads");
|
|
|
|
class MessageEvent extends Event {
|
|
#eventInit;
|
|
constructor(type, eventInitDict = {}) {
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "MessageEvent constructor" });
|
|
type = webidl.converters.DOMString(type);
|
|
eventInitDict = webidl.converters.MessageEventInit(eventInitDict);
|
|
super(type, eventInitDict);
|
|
this.#eventInit = eventInitDict;
|
|
}
|
|
get data() {
|
|
webidl.brandCheck(this, MessageEvent);
|
|
return this.#eventInit.data;
|
|
}
|
|
get origin() {
|
|
webidl.brandCheck(this, MessageEvent);
|
|
return this.#eventInit.origin;
|
|
}
|
|
get lastEventId() {
|
|
webidl.brandCheck(this, MessageEvent);
|
|
return this.#eventInit.lastEventId;
|
|
}
|
|
get source() {
|
|
webidl.brandCheck(this, MessageEvent);
|
|
return this.#eventInit.source;
|
|
}
|
|
get ports() {
|
|
webidl.brandCheck(this, MessageEvent);
|
|
if (!Object.isFrozen(this.#eventInit.ports)) {
|
|
Object.freeze(this.#eventInit.ports);
|
|
}
|
|
return this.#eventInit.ports;
|
|
}
|
|
initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) {
|
|
webidl.brandCheck(this, MessageEvent);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "MessageEvent.initMessageEvent" });
|
|
return new MessageEvent(type, {
|
|
bubbles,
|
|
cancelable,
|
|
data,
|
|
origin,
|
|
lastEventId,
|
|
source,
|
|
ports
|
|
});
|
|
}
|
|
}
|
|
|
|
class CloseEvent extends Event {
|
|
#eventInit;
|
|
constructor(type, eventInitDict = {}) {
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "CloseEvent constructor" });
|
|
type = webidl.converters.DOMString(type);
|
|
eventInitDict = webidl.converters.CloseEventInit(eventInitDict);
|
|
super(type, eventInitDict);
|
|
this.#eventInit = eventInitDict;
|
|
}
|
|
get wasClean() {
|
|
webidl.brandCheck(this, CloseEvent);
|
|
return this.#eventInit.wasClean;
|
|
}
|
|
get code() {
|
|
webidl.brandCheck(this, CloseEvent);
|
|
return this.#eventInit.code;
|
|
}
|
|
get reason() {
|
|
webidl.brandCheck(this, CloseEvent);
|
|
return this.#eventInit.reason;
|
|
}
|
|
}
|
|
|
|
class ErrorEvent extends Event {
|
|
#eventInit;
|
|
constructor(type, eventInitDict) {
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "ErrorEvent constructor" });
|
|
super(type, eventInitDict);
|
|
type = webidl.converters.DOMString(type);
|
|
eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {});
|
|
this.#eventInit = eventInitDict;
|
|
}
|
|
get message() {
|
|
webidl.brandCheck(this, ErrorEvent);
|
|
return this.#eventInit.message;
|
|
}
|
|
get filename() {
|
|
webidl.brandCheck(this, ErrorEvent);
|
|
return this.#eventInit.filename;
|
|
}
|
|
get lineno() {
|
|
webidl.brandCheck(this, ErrorEvent);
|
|
return this.#eventInit.lineno;
|
|
}
|
|
get colno() {
|
|
webidl.brandCheck(this, ErrorEvent);
|
|
return this.#eventInit.colno;
|
|
}
|
|
get error() {
|
|
webidl.brandCheck(this, ErrorEvent);
|
|
return this.#eventInit.error;
|
|
}
|
|
}
|
|
Object.defineProperties(MessageEvent.prototype, {
|
|
[Symbol.toStringTag]: {
|
|
value: "MessageEvent",
|
|
configurable: true
|
|
},
|
|
data: kEnumerableProperty,
|
|
origin: kEnumerableProperty,
|
|
lastEventId: kEnumerableProperty,
|
|
source: kEnumerableProperty,
|
|
ports: kEnumerableProperty,
|
|
initMessageEvent: kEnumerableProperty
|
|
});
|
|
Object.defineProperties(CloseEvent.prototype, {
|
|
[Symbol.toStringTag]: {
|
|
value: "CloseEvent",
|
|
configurable: true
|
|
},
|
|
reason: kEnumerableProperty,
|
|
code: kEnumerableProperty,
|
|
wasClean: kEnumerableProperty
|
|
});
|
|
Object.defineProperties(ErrorEvent.prototype, {
|
|
[Symbol.toStringTag]: {
|
|
value: "ErrorEvent",
|
|
configurable: true
|
|
},
|
|
message: kEnumerableProperty,
|
|
filename: kEnumerableProperty,
|
|
lineno: kEnumerableProperty,
|
|
colno: kEnumerableProperty,
|
|
error: kEnumerableProperty
|
|
});
|
|
webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort);
|
|
webidl.converters["sequence<MessagePort>"] = webidl.sequenceConverter(webidl.converters.MessagePort);
|
|
var eventInit = [
|
|
{
|
|
key: "bubbles",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "cancelable",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "composed",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
}
|
|
];
|
|
webidl.converters.MessageEventInit = webidl.dictionaryConverter([
|
|
...eventInit,
|
|
{
|
|
key: "data",
|
|
converter: webidl.converters.any,
|
|
defaultValue: null
|
|
},
|
|
{
|
|
key: "origin",
|
|
converter: webidl.converters.USVString,
|
|
defaultValue: ""
|
|
},
|
|
{
|
|
key: "lastEventId",
|
|
converter: webidl.converters.DOMString,
|
|
defaultValue: ""
|
|
},
|
|
{
|
|
key: "source",
|
|
converter: webidl.nullableConverter(webidl.converters.MessagePort),
|
|
defaultValue: null
|
|
},
|
|
{
|
|
key: "ports",
|
|
converter: webidl.converters["sequence<MessagePort>"],
|
|
get defaultValue() {
|
|
return [];
|
|
}
|
|
}
|
|
]);
|
|
webidl.converters.CloseEventInit = webidl.dictionaryConverter([
|
|
...eventInit,
|
|
{
|
|
key: "wasClean",
|
|
converter: webidl.converters.boolean,
|
|
defaultValue: false
|
|
},
|
|
{
|
|
key: "code",
|
|
converter: webidl.converters["unsigned short"],
|
|
defaultValue: 0
|
|
},
|
|
{
|
|
key: "reason",
|
|
converter: webidl.converters.USVString,
|
|
defaultValue: ""
|
|
}
|
|
]);
|
|
webidl.converters.ErrorEventInit = webidl.dictionaryConverter([
|
|
...eventInit,
|
|
{
|
|
key: "message",
|
|
converter: webidl.converters.DOMString,
|
|
defaultValue: ""
|
|
},
|
|
{
|
|
key: "filename",
|
|
converter: webidl.converters.USVString,
|
|
defaultValue: ""
|
|
},
|
|
{
|
|
key: "lineno",
|
|
converter: webidl.converters["unsigned long"],
|
|
defaultValue: 0
|
|
},
|
|
{
|
|
key: "colno",
|
|
converter: webidl.converters["unsigned long"],
|
|
defaultValue: 0
|
|
},
|
|
{
|
|
key: "error",
|
|
converter: webidl.converters.any
|
|
}
|
|
]);
|
|
module.exports = {
|
|
MessageEvent,
|
|
CloseEvent,
|
|
ErrorEvent
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/util.js
|
|
var require_util7 = __commonJS((exports, module) => {
|
|
var isEstablished = function(ws) {
|
|
return ws[kReadyState] === states.OPEN;
|
|
};
|
|
var isClosing = function(ws) {
|
|
return ws[kReadyState] === states.CLOSING;
|
|
};
|
|
var isClosed = function(ws) {
|
|
return ws[kReadyState] === states.CLOSED;
|
|
};
|
|
var fireEvent = function(e, target, eventConstructor = Event, eventInitDict) {
|
|
const event = new eventConstructor(e, eventInitDict);
|
|
target.dispatchEvent(event);
|
|
};
|
|
var websocketMessageReceived = function(ws, type, data) {
|
|
if (ws[kReadyState] !== states.OPEN) {
|
|
return;
|
|
}
|
|
let dataForEvent;
|
|
if (type === opcodes.TEXT) {
|
|
try {
|
|
dataForEvent = new TextDecoder("utf-8", { fatal: true }).decode(data);
|
|
} catch {
|
|
failWebsocketConnection(ws, "Received invalid UTF-8 in text frame.");
|
|
return;
|
|
}
|
|
} else if (type === opcodes.BINARY) {
|
|
if (ws[kBinaryType] === "blob") {
|
|
dataForEvent = new Blob([data]);
|
|
} else {
|
|
dataForEvent = new Uint8Array(data).buffer;
|
|
}
|
|
}
|
|
fireEvent("message", ws, MessageEvent, {
|
|
origin: ws[kWebSocketURL].origin,
|
|
data: dataForEvent
|
|
});
|
|
};
|
|
var isValidSubprotocol = function(protocol) {
|
|
if (protocol.length === 0) {
|
|
return false;
|
|
}
|
|
for (const char of protocol) {
|
|
const code = char.charCodeAt(0);
|
|
if (code < 33 || code > 126 || char === "(" || char === ")" || char === "<" || char === ">" || char === "@" || char === "," || char === ";" || char === ":" || char === "\\" || char === '"' || char === "/" || char === "[" || char === "]" || char === "?" || char === "=" || char === "{" || char === "}" || code === 32 || code === 9) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
var isValidStatusCode = function(code) {
|
|
if (code >= 1000 && code < 1015) {
|
|
return code !== 1004 && code !== 1005 && code !== 1006;
|
|
}
|
|
return code >= 3000 && code <= 4999;
|
|
};
|
|
var failWebsocketConnection = function(ws, reason) {
|
|
const { [kController]: controller, [kResponse]: response } = ws;
|
|
controller.abort();
|
|
if (response?.socket && !response.socket.destroyed) {
|
|
response.socket.destroy();
|
|
}
|
|
if (reason) {
|
|
fireEvent("error", ws, ErrorEvent, {
|
|
error: new Error(reason)
|
|
});
|
|
}
|
|
};
|
|
var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5();
|
|
var { states, opcodes } = require_constants5();
|
|
var { MessageEvent, ErrorEvent } = require_events();
|
|
module.exports = {
|
|
isEstablished,
|
|
isClosing,
|
|
isClosed,
|
|
fireEvent,
|
|
isValidSubprotocol,
|
|
isValidStatusCode,
|
|
failWebsocketConnection,
|
|
websocketMessageReceived
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/connection.js
|
|
var require_connection = __commonJS((exports, module) => {
|
|
var establishWebSocketConnection = function(url, protocols, ws, onEstablish, options) {
|
|
const requestURL = url;
|
|
requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:";
|
|
const request = makeRequest({
|
|
urlList: [requestURL],
|
|
serviceWorkers: "none",
|
|
referrer: "no-referrer",
|
|
mode: "websocket",
|
|
credentials: "include",
|
|
cache: "no-store",
|
|
redirect: "error"
|
|
});
|
|
if (options.headers) {
|
|
const headersList = new Headers(options.headers)[kHeadersList];
|
|
request.headersList = headersList;
|
|
}
|
|
const keyValue = crypto.randomBytes(16).toString("base64");
|
|
request.headersList.append("sec-websocket-key", keyValue);
|
|
request.headersList.append("sec-websocket-version", "13");
|
|
for (const protocol of protocols) {
|
|
request.headersList.append("sec-websocket-protocol", protocol);
|
|
}
|
|
const permessageDeflate = "";
|
|
const controller = fetching({
|
|
request,
|
|
useParallelQueue: true,
|
|
dispatcher: options.dispatcher ?? getGlobalDispatcher(),
|
|
processResponse(response) {
|
|
if (response.type === "error" || response.status !== 101) {
|
|
failWebsocketConnection(ws, "Received network error or non-101 status code.");
|
|
return;
|
|
}
|
|
if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) {
|
|
failWebsocketConnection(ws, "Server did not respond with sent protocols.");
|
|
return;
|
|
}
|
|
if (response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") {
|
|
failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".');
|
|
return;
|
|
}
|
|
if (response.headersList.get("Connection")?.toLowerCase() !== "upgrade") {
|
|
failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".');
|
|
return;
|
|
}
|
|
const secWSAccept = response.headersList.get("Sec-WebSocket-Accept");
|
|
const digest = crypto.createHash("sha1").update(keyValue + uid).digest("base64");
|
|
if (secWSAccept !== digest) {
|
|
failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header.");
|
|
return;
|
|
}
|
|
const secExtension = response.headersList.get("Sec-WebSocket-Extensions");
|
|
if (secExtension !== null && secExtension !== permessageDeflate) {
|
|
failWebsocketConnection(ws, "Received different permessage-deflate than the one set.");
|
|
return;
|
|
}
|
|
const secProtocol = response.headersList.get("Sec-WebSocket-Protocol");
|
|
if (secProtocol !== null && secProtocol !== request.headersList.get("Sec-WebSocket-Protocol")) {
|
|
failWebsocketConnection(ws, "Protocol was not set in the opening handshake.");
|
|
return;
|
|
}
|
|
response.socket.on("data", onSocketData);
|
|
response.socket.on("close", onSocketClose);
|
|
response.socket.on("error", onSocketError);
|
|
if (channels.open.hasSubscribers) {
|
|
channels.open.publish({
|
|
address: response.socket.address(),
|
|
protocol: secProtocol,
|
|
extensions: secExtension
|
|
});
|
|
}
|
|
onEstablish(response);
|
|
}
|
|
});
|
|
return controller;
|
|
};
|
|
var onSocketData = function(chunk) {
|
|
if (!this.ws[kByteParser].write(chunk)) {
|
|
this.pause();
|
|
}
|
|
};
|
|
var onSocketClose = function() {
|
|
const { ws } = this;
|
|
const wasClean = ws[kSentClose] && ws[kReceivedClose];
|
|
let code = 1005;
|
|
let reason = "";
|
|
const result = ws[kByteParser].closingInfo;
|
|
if (result) {
|
|
code = result.code ?? 1005;
|
|
reason = result.reason;
|
|
} else if (!ws[kSentClose]) {
|
|
code = 1006;
|
|
}
|
|
ws[kReadyState] = states.CLOSED;
|
|
fireEvent("close", ws, CloseEvent, {
|
|
wasClean,
|
|
code,
|
|
reason
|
|
});
|
|
if (channels.close.hasSubscribers) {
|
|
channels.close.publish({
|
|
websocket: ws,
|
|
code,
|
|
reason
|
|
});
|
|
}
|
|
};
|
|
var onSocketError = function(error) {
|
|
const { ws } = this;
|
|
ws[kReadyState] = states.CLOSING;
|
|
if (channels.socketError.hasSubscribers) {
|
|
channels.socketError.publish(error);
|
|
}
|
|
this.destroy();
|
|
};
|
|
var diagnosticsChannel = __require("diagnostics_channel");
|
|
var { uid, states } = require_constants5();
|
|
var {
|
|
kReadyState,
|
|
kSentClose,
|
|
kByteParser,
|
|
kReceivedClose
|
|
} = require_symbols5();
|
|
var { fireEvent, failWebsocketConnection } = require_util7();
|
|
var { CloseEvent } = require_events();
|
|
var { makeRequest } = require_request2();
|
|
var { fetching } = require_fetch();
|
|
var { Headers } = require_headers();
|
|
var { getGlobalDispatcher } = require_global2();
|
|
var { kHeadersList } = require_symbols();
|
|
var channels = {};
|
|
channels.open = diagnosticsChannel.channel("undici:websocket:open");
|
|
channels.close = diagnosticsChannel.channel("undici:websocket:close");
|
|
channels.socketError = diagnosticsChannel.channel("undici:websocket:socket_error");
|
|
var crypto;
|
|
try {
|
|
crypto = __require("crypto");
|
|
} catch {
|
|
}
|
|
module.exports = {
|
|
establishWebSocketConnection
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/frame.js
|
|
var require_frame = __commonJS((exports, module) => {
|
|
var { maxUnsigned16Bit } = require_constants5();
|
|
var crypto;
|
|
try {
|
|
crypto = __require("crypto");
|
|
} catch {
|
|
}
|
|
|
|
class WebsocketFrameSend {
|
|
constructor(data) {
|
|
this.frameData = data;
|
|
this.maskKey = crypto.randomBytes(4);
|
|
}
|
|
createFrame(opcode) {
|
|
const bodyLength = this.frameData?.byteLength ?? 0;
|
|
let payloadLength = bodyLength;
|
|
let offset = 6;
|
|
if (bodyLength > maxUnsigned16Bit) {
|
|
offset += 8;
|
|
payloadLength = 127;
|
|
} else if (bodyLength > 125) {
|
|
offset += 2;
|
|
payloadLength = 126;
|
|
}
|
|
const buffer = Buffer.allocUnsafe(bodyLength + offset);
|
|
buffer[0] = buffer[1] = 0;
|
|
buffer[0] |= 128;
|
|
buffer[0] = (buffer[0] & 240) + opcode;
|
|
/*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */
|
|
buffer[offset - 4] = this.maskKey[0];
|
|
buffer[offset - 3] = this.maskKey[1];
|
|
buffer[offset - 2] = this.maskKey[2];
|
|
buffer[offset - 1] = this.maskKey[3];
|
|
buffer[1] = payloadLength;
|
|
if (payloadLength === 126) {
|
|
buffer.writeUInt16BE(bodyLength, 2);
|
|
} else if (payloadLength === 127) {
|
|
buffer[2] = buffer[3] = 0;
|
|
buffer.writeUIntBE(bodyLength, 4, 6);
|
|
}
|
|
buffer[1] |= 128;
|
|
for (let i = 0;i < bodyLength; i++) {
|
|
buffer[offset + i] = this.frameData[i] ^ this.maskKey[i % 4];
|
|
}
|
|
return buffer;
|
|
}
|
|
}
|
|
module.exports = {
|
|
WebsocketFrameSend
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/receiver.js
|
|
var require_receiver = __commonJS((exports, module) => {
|
|
var { Writable } = __require("stream");
|
|
var diagnosticsChannel = __require("diagnostics_channel");
|
|
var { parserStates, opcodes, states, emptyBuffer } = require_constants5();
|
|
var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5();
|
|
var { isValidStatusCode, failWebsocketConnection, websocketMessageReceived } = require_util7();
|
|
var { WebsocketFrameSend } = require_frame();
|
|
var channels = {};
|
|
channels.ping = diagnosticsChannel.channel("undici:websocket:ping");
|
|
channels.pong = diagnosticsChannel.channel("undici:websocket:pong");
|
|
|
|
class ByteParser extends Writable {
|
|
#buffers = [];
|
|
#byteOffset = 0;
|
|
#state = parserStates.INFO;
|
|
#info = {};
|
|
#fragments = [];
|
|
constructor(ws) {
|
|
super();
|
|
this.ws = ws;
|
|
}
|
|
_write(chunk, _, callback) {
|
|
this.#buffers.push(chunk);
|
|
this.#byteOffset += chunk.length;
|
|
this.run(callback);
|
|
}
|
|
run(callback) {
|
|
while (true) {
|
|
if (this.#state === parserStates.INFO) {
|
|
if (this.#byteOffset < 2) {
|
|
return callback();
|
|
}
|
|
const buffer = this.consume(2);
|
|
this.#info.fin = (buffer[0] & 128) !== 0;
|
|
this.#info.opcode = buffer[0] & 15;
|
|
this.#info.originalOpcode ??= this.#info.opcode;
|
|
this.#info.fragmented = !this.#info.fin && this.#info.opcode !== opcodes.CONTINUATION;
|
|
if (this.#info.fragmented && this.#info.opcode !== opcodes.BINARY && this.#info.opcode !== opcodes.TEXT) {
|
|
failWebsocketConnection(this.ws, "Invalid frame type was fragmented.");
|
|
return;
|
|
}
|
|
const payloadLength = buffer[1] & 127;
|
|
if (payloadLength <= 125) {
|
|
this.#info.payloadLength = payloadLength;
|
|
this.#state = parserStates.READ_DATA;
|
|
} else if (payloadLength === 126) {
|
|
this.#state = parserStates.PAYLOADLENGTH_16;
|
|
} else if (payloadLength === 127) {
|
|
this.#state = parserStates.PAYLOADLENGTH_64;
|
|
}
|
|
if (this.#info.fragmented && payloadLength > 125) {
|
|
failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes.");
|
|
return;
|
|
} else if ((this.#info.opcode === opcodes.PING || this.#info.opcode === opcodes.PONG || this.#info.opcode === opcodes.CLOSE) && payloadLength > 125) {
|
|
failWebsocketConnection(this.ws, "Payload length for control frame exceeded 125 bytes.");
|
|
return;
|
|
} else if (this.#info.opcode === opcodes.CLOSE) {
|
|
if (payloadLength === 1) {
|
|
failWebsocketConnection(this.ws, "Received close frame with a 1-byte body.");
|
|
return;
|
|
}
|
|
const body = this.consume(payloadLength);
|
|
this.#info.closeInfo = this.parseCloseBody(false, body);
|
|
if (!this.ws[kSentClose]) {
|
|
const body2 = Buffer.allocUnsafe(2);
|
|
body2.writeUInt16BE(this.#info.closeInfo.code, 0);
|
|
const closeFrame = new WebsocketFrameSend(body2);
|
|
this.ws[kResponse].socket.write(closeFrame.createFrame(opcodes.CLOSE), (err) => {
|
|
if (!err) {
|
|
this.ws[kSentClose] = true;
|
|
}
|
|
});
|
|
}
|
|
this.ws[kReadyState] = states.CLOSING;
|
|
this.ws[kReceivedClose] = true;
|
|
this.end();
|
|
return;
|
|
} else if (this.#info.opcode === opcodes.PING) {
|
|
const body = this.consume(payloadLength);
|
|
if (!this.ws[kReceivedClose]) {
|
|
const frame = new WebsocketFrameSend(body);
|
|
this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG));
|
|
if (channels.ping.hasSubscribers) {
|
|
channels.ping.publish({
|
|
payload: body
|
|
});
|
|
}
|
|
}
|
|
this.#state = parserStates.INFO;
|
|
if (this.#byteOffset > 0) {
|
|
continue;
|
|
} else {
|
|
callback();
|
|
return;
|
|
}
|
|
} else if (this.#info.opcode === opcodes.PONG) {
|
|
const body = this.consume(payloadLength);
|
|
if (channels.pong.hasSubscribers) {
|
|
channels.pong.publish({
|
|
payload: body
|
|
});
|
|
}
|
|
if (this.#byteOffset > 0) {
|
|
continue;
|
|
} else {
|
|
callback();
|
|
return;
|
|
}
|
|
}
|
|
} else if (this.#state === parserStates.PAYLOADLENGTH_16) {
|
|
if (this.#byteOffset < 2) {
|
|
return callback();
|
|
}
|
|
const buffer = this.consume(2);
|
|
this.#info.payloadLength = buffer.readUInt16BE(0);
|
|
this.#state = parserStates.READ_DATA;
|
|
} else if (this.#state === parserStates.PAYLOADLENGTH_64) {
|
|
if (this.#byteOffset < 8) {
|
|
return callback();
|
|
}
|
|
const buffer = this.consume(8);
|
|
const upper = buffer.readUInt32BE(0);
|
|
if (upper > 2 ** 31 - 1) {
|
|
failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes.");
|
|
return;
|
|
}
|
|
const lower = buffer.readUInt32BE(4);
|
|
this.#info.payloadLength = (upper << 8) + lower;
|
|
this.#state = parserStates.READ_DATA;
|
|
} else if (this.#state === parserStates.READ_DATA) {
|
|
if (this.#byteOffset < this.#info.payloadLength) {
|
|
return callback();
|
|
} else if (this.#byteOffset >= this.#info.payloadLength) {
|
|
const body = this.consume(this.#info.payloadLength);
|
|
this.#fragments.push(body);
|
|
if (!this.#info.fragmented || this.#info.fin && this.#info.opcode === opcodes.CONTINUATION) {
|
|
const fullMessage = Buffer.concat(this.#fragments);
|
|
websocketMessageReceived(this.ws, this.#info.originalOpcode, fullMessage);
|
|
this.#info = {};
|
|
this.#fragments.length = 0;
|
|
}
|
|
this.#state = parserStates.INFO;
|
|
}
|
|
}
|
|
if (this.#byteOffset > 0) {
|
|
continue;
|
|
} else {
|
|
callback();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
consume(n) {
|
|
if (n > this.#byteOffset) {
|
|
return null;
|
|
} else if (n === 0) {
|
|
return emptyBuffer;
|
|
}
|
|
if (this.#buffers[0].length === n) {
|
|
this.#byteOffset -= this.#buffers[0].length;
|
|
return this.#buffers.shift();
|
|
}
|
|
const buffer = Buffer.allocUnsafe(n);
|
|
let offset = 0;
|
|
while (offset !== n) {
|
|
const next = this.#buffers[0];
|
|
const { length } = next;
|
|
if (length + offset === n) {
|
|
buffer.set(this.#buffers.shift(), offset);
|
|
break;
|
|
} else if (length + offset > n) {
|
|
buffer.set(next.subarray(0, n - offset), offset);
|
|
this.#buffers[0] = next.subarray(n - offset);
|
|
break;
|
|
} else {
|
|
buffer.set(this.#buffers.shift(), offset);
|
|
offset += next.length;
|
|
}
|
|
}
|
|
this.#byteOffset -= n;
|
|
return buffer;
|
|
}
|
|
parseCloseBody(onlyCode, data) {
|
|
let code;
|
|
if (data.length >= 2) {
|
|
code = data.readUInt16BE(0);
|
|
}
|
|
if (onlyCode) {
|
|
if (!isValidStatusCode(code)) {
|
|
return null;
|
|
}
|
|
return { code };
|
|
}
|
|
let reason = data.subarray(2);
|
|
if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) {
|
|
reason = reason.subarray(3);
|
|
}
|
|
if (code !== undefined && !isValidStatusCode(code)) {
|
|
return null;
|
|
}
|
|
try {
|
|
reason = new TextDecoder("utf-8", { fatal: true }).decode(reason);
|
|
} catch {
|
|
return null;
|
|
}
|
|
return { code, reason };
|
|
}
|
|
get closingInfo() {
|
|
return this.#info.closeInfo;
|
|
}
|
|
}
|
|
module.exports = {
|
|
ByteParser
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/lib/websocket/websocket.js
|
|
var require_websocket = __commonJS((exports, module) => {
|
|
var { webidl } = require_webidl();
|
|
var { DOMException: DOMException2 } = require_constants2();
|
|
var { URLSerializer } = require_dataURL();
|
|
var { getGlobalOrigin } = require_global();
|
|
var { staticPropertyDescriptors, states, opcodes, emptyBuffer } = require_constants5();
|
|
var {
|
|
kWebSocketURL,
|
|
kReadyState,
|
|
kController,
|
|
kBinaryType,
|
|
kResponse,
|
|
kSentClose,
|
|
kByteParser
|
|
} = require_symbols5();
|
|
var { isEstablished, isClosing, isValidSubprotocol, failWebsocketConnection, fireEvent } = require_util7();
|
|
var { establishWebSocketConnection } = require_connection();
|
|
var { WebsocketFrameSend } = require_frame();
|
|
var { ByteParser } = require_receiver();
|
|
var { kEnumerableProperty, isBlobLike } = require_util();
|
|
var { getGlobalDispatcher } = require_global2();
|
|
var { types } = __require("util");
|
|
var experimentalWarned = false;
|
|
|
|
class WebSocket extends EventTarget {
|
|
#events = {
|
|
open: null,
|
|
error: null,
|
|
close: null,
|
|
message: null
|
|
};
|
|
#bufferedAmount = 0;
|
|
#protocol = "";
|
|
#extensions = "";
|
|
constructor(url, protocols = []) {
|
|
super();
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "WebSocket constructor" });
|
|
if (!experimentalWarned) {
|
|
experimentalWarned = true;
|
|
process.emitWarning("WebSockets are experimental, expect them to change at any time.", {
|
|
code: "UNDICI-WS"
|
|
});
|
|
}
|
|
const options = webidl.converters["DOMString or sequence<DOMString> or WebSocketInit"](protocols);
|
|
url = webidl.converters.USVString(url);
|
|
protocols = options.protocols;
|
|
const baseURL = getGlobalOrigin();
|
|
let urlRecord;
|
|
try {
|
|
urlRecord = new URL(url, baseURL);
|
|
} catch (e) {
|
|
throw new DOMException2(e, "SyntaxError");
|
|
}
|
|
if (urlRecord.protocol === "http:") {
|
|
urlRecord.protocol = "ws:";
|
|
} else if (urlRecord.protocol === "https:") {
|
|
urlRecord.protocol = "wss:";
|
|
}
|
|
if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") {
|
|
throw new DOMException2(`Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, "SyntaxError");
|
|
}
|
|
if (urlRecord.hash || urlRecord.href.endsWith("#")) {
|
|
throw new DOMException2("Got fragment", "SyntaxError");
|
|
}
|
|
if (typeof protocols === "string") {
|
|
protocols = [protocols];
|
|
}
|
|
if (protocols.length !== new Set(protocols.map((p) => p.toLowerCase())).size) {
|
|
throw new DOMException2("Invalid Sec-WebSocket-Protocol value", "SyntaxError");
|
|
}
|
|
if (protocols.length > 0 && !protocols.every((p) => isValidSubprotocol(p))) {
|
|
throw new DOMException2("Invalid Sec-WebSocket-Protocol value", "SyntaxError");
|
|
}
|
|
this[kWebSocketURL] = new URL(urlRecord.href);
|
|
this[kController] = establishWebSocketConnection(urlRecord, protocols, this, (response) => this.#onConnectionEstablished(response), options);
|
|
this[kReadyState] = WebSocket.CONNECTING;
|
|
this[kBinaryType] = "blob";
|
|
}
|
|
close(code = undefined, reason = undefined) {
|
|
webidl.brandCheck(this, WebSocket);
|
|
if (code !== undefined) {
|
|
code = webidl.converters["unsigned short"](code, { clamp: true });
|
|
}
|
|
if (reason !== undefined) {
|
|
reason = webidl.converters.USVString(reason);
|
|
}
|
|
if (code !== undefined) {
|
|
if (code !== 1000 && (code < 3000 || code > 4999)) {
|
|
throw new DOMException2("invalid code", "InvalidAccessError");
|
|
}
|
|
}
|
|
let reasonByteLength = 0;
|
|
if (reason !== undefined) {
|
|
reasonByteLength = Buffer.byteLength(reason);
|
|
if (reasonByteLength > 123) {
|
|
throw new DOMException2(`Reason must be less than 123 bytes; received ${reasonByteLength}`, "SyntaxError");
|
|
}
|
|
}
|
|
if (this[kReadyState] === WebSocket.CLOSING || this[kReadyState] === WebSocket.CLOSED) {
|
|
} else if (!isEstablished(this)) {
|
|
failWebsocketConnection(this, "Connection was closed before it was established.");
|
|
this[kReadyState] = WebSocket.CLOSING;
|
|
} else if (!isClosing(this)) {
|
|
const frame = new WebsocketFrameSend;
|
|
if (code !== undefined && reason === undefined) {
|
|
frame.frameData = Buffer.allocUnsafe(2);
|
|
frame.frameData.writeUInt16BE(code, 0);
|
|
} else if (code !== undefined && reason !== undefined) {
|
|
frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength);
|
|
frame.frameData.writeUInt16BE(code, 0);
|
|
frame.frameData.write(reason, 2, "utf-8");
|
|
} else {
|
|
frame.frameData = emptyBuffer;
|
|
}
|
|
const socket = this[kResponse].socket;
|
|
socket.write(frame.createFrame(opcodes.CLOSE), (err) => {
|
|
if (!err) {
|
|
this[kSentClose] = true;
|
|
}
|
|
});
|
|
this[kReadyState] = states.CLOSING;
|
|
} else {
|
|
this[kReadyState] = WebSocket.CLOSING;
|
|
}
|
|
}
|
|
send(data) {
|
|
webidl.brandCheck(this, WebSocket);
|
|
webidl.argumentLengthCheck(arguments, 1, { header: "WebSocket.send" });
|
|
data = webidl.converters.WebSocketSendData(data);
|
|
if (this[kReadyState] === WebSocket.CONNECTING) {
|
|
throw new DOMException2("Sent before connected.", "InvalidStateError");
|
|
}
|
|
if (!isEstablished(this) || isClosing(this)) {
|
|
return;
|
|
}
|
|
const socket = this[kResponse].socket;
|
|
if (typeof data === "string") {
|
|
const value = Buffer.from(data);
|
|
const frame = new WebsocketFrameSend(value);
|
|
const buffer = frame.createFrame(opcodes.TEXT);
|
|
this.#bufferedAmount += value.byteLength;
|
|
socket.write(buffer, () => {
|
|
this.#bufferedAmount -= value.byteLength;
|
|
});
|
|
} else if (types.isArrayBuffer(data)) {
|
|
const value = Buffer.from(data);
|
|
const frame = new WebsocketFrameSend(value);
|
|
const buffer = frame.createFrame(opcodes.BINARY);
|
|
this.#bufferedAmount += value.byteLength;
|
|
socket.write(buffer, () => {
|
|
this.#bufferedAmount -= value.byteLength;
|
|
});
|
|
} else if (ArrayBuffer.isView(data)) {
|
|
const ab = Buffer.from(data, data.byteOffset, data.byteLength);
|
|
const frame = new WebsocketFrameSend(ab);
|
|
const buffer = frame.createFrame(opcodes.BINARY);
|
|
this.#bufferedAmount += ab.byteLength;
|
|
socket.write(buffer, () => {
|
|
this.#bufferedAmount -= ab.byteLength;
|
|
});
|
|
} else if (isBlobLike(data)) {
|
|
const frame = new WebsocketFrameSend;
|
|
data.arrayBuffer().then((ab) => {
|
|
const value = Buffer.from(ab);
|
|
frame.frameData = value;
|
|
const buffer = frame.createFrame(opcodes.BINARY);
|
|
this.#bufferedAmount += value.byteLength;
|
|
socket.write(buffer, () => {
|
|
this.#bufferedAmount -= value.byteLength;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
get readyState() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this[kReadyState];
|
|
}
|
|
get bufferedAmount() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this.#bufferedAmount;
|
|
}
|
|
get url() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return URLSerializer(this[kWebSocketURL]);
|
|
}
|
|
get extensions() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this.#extensions;
|
|
}
|
|
get protocol() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this.#protocol;
|
|
}
|
|
get onopen() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this.#events.open;
|
|
}
|
|
set onopen(fn) {
|
|
webidl.brandCheck(this, WebSocket);
|
|
if (this.#events.open) {
|
|
this.removeEventListener("open", this.#events.open);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this.#events.open = fn;
|
|
this.addEventListener("open", fn);
|
|
} else {
|
|
this.#events.open = null;
|
|
}
|
|
}
|
|
get onerror() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this.#events.error;
|
|
}
|
|
set onerror(fn) {
|
|
webidl.brandCheck(this, WebSocket);
|
|
if (this.#events.error) {
|
|
this.removeEventListener("error", this.#events.error);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this.#events.error = fn;
|
|
this.addEventListener("error", fn);
|
|
} else {
|
|
this.#events.error = null;
|
|
}
|
|
}
|
|
get onclose() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this.#events.close;
|
|
}
|
|
set onclose(fn) {
|
|
webidl.brandCheck(this, WebSocket);
|
|
if (this.#events.close) {
|
|
this.removeEventListener("close", this.#events.close);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this.#events.close = fn;
|
|
this.addEventListener("close", fn);
|
|
} else {
|
|
this.#events.close = null;
|
|
}
|
|
}
|
|
get onmessage() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this.#events.message;
|
|
}
|
|
set onmessage(fn) {
|
|
webidl.brandCheck(this, WebSocket);
|
|
if (this.#events.message) {
|
|
this.removeEventListener("message", this.#events.message);
|
|
}
|
|
if (typeof fn === "function") {
|
|
this.#events.message = fn;
|
|
this.addEventListener("message", fn);
|
|
} else {
|
|
this.#events.message = null;
|
|
}
|
|
}
|
|
get binaryType() {
|
|
webidl.brandCheck(this, WebSocket);
|
|
return this[kBinaryType];
|
|
}
|
|
set binaryType(type) {
|
|
webidl.brandCheck(this, WebSocket);
|
|
if (type !== "blob" && type !== "arraybuffer") {
|
|
this[kBinaryType] = "blob";
|
|
} else {
|
|
this[kBinaryType] = type;
|
|
}
|
|
}
|
|
#onConnectionEstablished(response) {
|
|
this[kResponse] = response;
|
|
const parser = new ByteParser(this);
|
|
parser.on("drain", function onParserDrain() {
|
|
this.ws[kResponse].socket.resume();
|
|
});
|
|
response.socket.ws = this;
|
|
this[kByteParser] = parser;
|
|
this[kReadyState] = states.OPEN;
|
|
const extensions = response.headersList.get("sec-websocket-extensions");
|
|
if (extensions !== null) {
|
|
this.#extensions = extensions;
|
|
}
|
|
const protocol = response.headersList.get("sec-websocket-protocol");
|
|
if (protocol !== null) {
|
|
this.#protocol = protocol;
|
|
}
|
|
fireEvent("open", this);
|
|
}
|
|
}
|
|
WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING;
|
|
WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN;
|
|
WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING;
|
|
WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED;
|
|
Object.defineProperties(WebSocket.prototype, {
|
|
CONNECTING: staticPropertyDescriptors,
|
|
OPEN: staticPropertyDescriptors,
|
|
CLOSING: staticPropertyDescriptors,
|
|
CLOSED: staticPropertyDescriptors,
|
|
url: kEnumerableProperty,
|
|
readyState: kEnumerableProperty,
|
|
bufferedAmount: kEnumerableProperty,
|
|
onopen: kEnumerableProperty,
|
|
onerror: kEnumerableProperty,
|
|
onclose: kEnumerableProperty,
|
|
close: kEnumerableProperty,
|
|
onmessage: kEnumerableProperty,
|
|
binaryType: kEnumerableProperty,
|
|
send: kEnumerableProperty,
|
|
extensions: kEnumerableProperty,
|
|
protocol: kEnumerableProperty,
|
|
[Symbol.toStringTag]: {
|
|
value: "WebSocket",
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
}
|
|
});
|
|
Object.defineProperties(WebSocket, {
|
|
CONNECTING: staticPropertyDescriptors,
|
|
OPEN: staticPropertyDescriptors,
|
|
CLOSING: staticPropertyDescriptors,
|
|
CLOSED: staticPropertyDescriptors
|
|
});
|
|
webidl.converters["sequence<DOMString>"] = webidl.sequenceConverter(webidl.converters.DOMString);
|
|
webidl.converters["DOMString or sequence<DOMString>"] = function(V) {
|
|
if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) {
|
|
return webidl.converters["sequence<DOMString>"](V);
|
|
}
|
|
return webidl.converters.DOMString(V);
|
|
};
|
|
webidl.converters.WebSocketInit = webidl.dictionaryConverter([
|
|
{
|
|
key: "protocols",
|
|
converter: webidl.converters["DOMString or sequence<DOMString>"],
|
|
get defaultValue() {
|
|
return [];
|
|
}
|
|
},
|
|
{
|
|
key: "dispatcher",
|
|
converter: (V) => V,
|
|
get defaultValue() {
|
|
return getGlobalDispatcher();
|
|
}
|
|
},
|
|
{
|
|
key: "headers",
|
|
converter: webidl.nullableConverter(webidl.converters.HeadersInit)
|
|
}
|
|
]);
|
|
webidl.converters["DOMString or sequence<DOMString> or WebSocketInit"] = function(V) {
|
|
if (webidl.util.Type(V) === "Object" && !(Symbol.iterator in V)) {
|
|
return webidl.converters.WebSocketInit(V);
|
|
}
|
|
return { protocols: webidl.converters["DOMString or sequence<DOMString>"](V) };
|
|
};
|
|
webidl.converters.WebSocketSendData = function(V) {
|
|
if (webidl.util.Type(V) === "Object") {
|
|
if (isBlobLike(V)) {
|
|
return webidl.converters.Blob(V, { strict: false });
|
|
}
|
|
if (ArrayBuffer.isView(V) || types.isAnyArrayBuffer(V)) {
|
|
return webidl.converters.BufferSource(V);
|
|
}
|
|
}
|
|
return webidl.converters.USVString(V);
|
|
};
|
|
module.exports = {
|
|
WebSocket
|
|
};
|
|
});
|
|
|
|
// node_modules/undici/index.js
|
|
var require_undici = __commonJS((exports, module) => {
|
|
var makeDispatcher = function(fn) {
|
|
return (url, opts, handler) => {
|
|
if (typeof opts === "function") {
|
|
handler = opts;
|
|
opts = null;
|
|
}
|
|
if (!url || typeof url !== "string" && typeof url !== "object" && !(url instanceof URL)) {
|
|
throw new InvalidArgumentError("invalid url");
|
|
}
|
|
if (opts != null && typeof opts !== "object") {
|
|
throw new InvalidArgumentError("invalid opts");
|
|
}
|
|
if (opts && opts.path != null) {
|
|
if (typeof opts.path !== "string") {
|
|
throw new InvalidArgumentError("invalid opts.path");
|
|
}
|
|
let path = opts.path;
|
|
if (!opts.path.startsWith("/")) {
|
|
path = `/${path}`;
|
|
}
|
|
url = new URL(util.parseOrigin(url).origin + path);
|
|
} else {
|
|
if (!opts) {
|
|
opts = typeof url === "object" ? url : {};
|
|
}
|
|
url = util.parseURL(url);
|
|
}
|
|
const { agent, dispatcher = getGlobalDispatcher() } = opts;
|
|
if (agent) {
|
|
throw new InvalidArgumentError("unsupported opts.agent. Did you mean opts.client?");
|
|
}
|
|
return fn.call(dispatcher, {
|
|
...opts,
|
|
origin: url.origin,
|
|
path: url.search ? `${url.pathname}${url.search}` : url.pathname,
|
|
method: opts.method || (opts.body ? "PUT" : "GET")
|
|
}, handler);
|
|
};
|
|
};
|
|
var Client = require_client();
|
|
var Dispatcher = require_dispatcher();
|
|
var errors = require_errors();
|
|
var Pool = require_pool();
|
|
var BalancedPool = require_balanced_pool();
|
|
var Agent = require_agent();
|
|
var util = require_util();
|
|
var { InvalidArgumentError } = errors;
|
|
var api = require_api();
|
|
var buildConnector = require_connect();
|
|
var MockClient = require_mock_client();
|
|
var MockAgent = require_mock_agent();
|
|
var MockPool = require_mock_pool();
|
|
var mockErrors = require_mock_errors();
|
|
var ProxyAgent = require_proxy_agent();
|
|
var RetryHandler = require_RetryHandler();
|
|
var { getGlobalDispatcher, setGlobalDispatcher } = require_global2();
|
|
var DecoratorHandler = require_DecoratorHandler();
|
|
var RedirectHandler = require_RedirectHandler();
|
|
var createRedirectInterceptor = require_redirectInterceptor();
|
|
var hasCrypto;
|
|
try {
|
|
__require("crypto");
|
|
hasCrypto = true;
|
|
} catch {
|
|
hasCrypto = false;
|
|
}
|
|
Object.assign(Dispatcher.prototype, api);
|
|
exports.Dispatcher = Dispatcher;
|
|
exports.Client = Client;
|
|
exports.Pool = Pool;
|
|
exports.BalancedPool = BalancedPool;
|
|
exports.Agent = Agent;
|
|
exports.ProxyAgent = ProxyAgent;
|
|
exports.RetryHandler = RetryHandler;
|
|
exports.DecoratorHandler = DecoratorHandler;
|
|
exports.RedirectHandler = RedirectHandler;
|
|
exports.createRedirectInterceptor = createRedirectInterceptor;
|
|
exports.buildConnector = buildConnector;
|
|
exports.errors = errors;
|
|
exports.setGlobalDispatcher = setGlobalDispatcher;
|
|
exports.getGlobalDispatcher = getGlobalDispatcher;
|
|
if (util.nodeMajor > 16 || util.nodeMajor === 16 && util.nodeMinor >= 8) {
|
|
let fetchImpl = null;
|
|
exports.fetch = async function fetch(resource) {
|
|
if (!fetchImpl) {
|
|
fetchImpl = require_fetch().fetch;
|
|
}
|
|
try {
|
|
return await fetchImpl(...arguments);
|
|
} catch (err) {
|
|
if (typeof err === "object") {
|
|
Error.captureStackTrace(err, this);
|
|
}
|
|
throw err;
|
|
}
|
|
};
|
|
exports.Headers = require_headers().Headers;
|
|
exports.Response = require_response().Response;
|
|
exports.Request = require_request2().Request;
|
|
exports.FormData = require_formdata().FormData;
|
|
exports.File = require_file().File;
|
|
exports.FileReader = require_filereader().FileReader;
|
|
const { setGlobalOrigin, getGlobalOrigin } = require_global();
|
|
exports.setGlobalOrigin = setGlobalOrigin;
|
|
exports.getGlobalOrigin = getGlobalOrigin;
|
|
const { CacheStorage } = require_cachestorage();
|
|
const { kConstruct } = require_symbols4();
|
|
exports.caches = new CacheStorage(kConstruct);
|
|
}
|
|
if (util.nodeMajor >= 16) {
|
|
const { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies();
|
|
exports.deleteCookie = deleteCookie;
|
|
exports.getCookies = getCookies;
|
|
exports.getSetCookies = getSetCookies;
|
|
exports.setCookie = setCookie;
|
|
const { parseMIMEType, serializeAMimeType } = require_dataURL();
|
|
exports.parseMIMEType = parseMIMEType;
|
|
exports.serializeAMimeType = serializeAMimeType;
|
|
}
|
|
if (util.nodeMajor >= 18 && hasCrypto) {
|
|
const { WebSocket } = require_websocket();
|
|
exports.WebSocket = WebSocket;
|
|
}
|
|
exports.request = makeDispatcher(api.request);
|
|
exports.stream = makeDispatcher(api.stream);
|
|
exports.pipeline = makeDispatcher(api.pipeline);
|
|
exports.connect = makeDispatcher(api.connect);
|
|
exports.upgrade = makeDispatcher(api.upgrade);
|
|
exports.MockClient = MockClient;
|
|
exports.MockPool = MockPool;
|
|
exports.MockAgent = MockAgent;
|
|
exports.mockErrors = mockErrors;
|
|
});
|
|
|
|
// node_modules/@actions/http-client/lib/index.js
|
|
var require_lib = __commonJS((exports) => {
|
|
var getProxyUrl = function(serverUrl) {
|
|
const proxyUrl = pm.getProxyUrl(new URL(serverUrl));
|
|
return proxyUrl ? proxyUrl.href : "";
|
|
};
|
|
var isHttps = function(requestUrl) {
|
|
const parsedUrl = new URL(requestUrl);
|
|
return parsedUrl.protocol === "https:";
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
function adopt(value) {
|
|
return value instanceof P ? value : new P(function(resolve) {
|
|
resolve(value);
|
|
});
|
|
}
|
|
return new (P || (P = Promise))(function(resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
}
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = undefined;
|
|
var http = __importStar(__require("http"));
|
|
var https = __importStar(__require("https"));
|
|
var pm = __importStar(require_proxy());
|
|
var tunnel = __importStar(require_tunnel());
|
|
var undici_1 = require_undici();
|
|
var HttpCodes;
|
|
(function(HttpCodes2) {
|
|
HttpCodes2[HttpCodes2["OK"] = 200] = "OK";
|
|
HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices";
|
|
HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently";
|
|
HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved";
|
|
HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther";
|
|
HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified";
|
|
HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy";
|
|
HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy";
|
|
HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect";
|
|
HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect";
|
|
HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest";
|
|
HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized";
|
|
HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired";
|
|
HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden";
|
|
HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound";
|
|
HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed";
|
|
HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable";
|
|
HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
|
|
HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout";
|
|
HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict";
|
|
HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone";
|
|
HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests";
|
|
HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError";
|
|
HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented";
|
|
HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway";
|
|
HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable";
|
|
HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout";
|
|
})(HttpCodes || (exports.HttpCodes = HttpCodes = {}));
|
|
var Headers;
|
|
(function(Headers2) {
|
|
Headers2["Accept"] = "accept";
|
|
Headers2["ContentType"] = "content-type";
|
|
})(Headers || (exports.Headers = Headers = {}));
|
|
var MediaTypes;
|
|
(function(MediaTypes2) {
|
|
MediaTypes2["ApplicationJson"] = "application/json";
|
|
})(MediaTypes || (exports.MediaTypes = MediaTypes = {}));
|
|
exports.getProxyUrl = getProxyUrl;
|
|
var HttpRedirectCodes = [
|
|
HttpCodes.MovedPermanently,
|
|
HttpCodes.ResourceMoved,
|
|
HttpCodes.SeeOther,
|
|
HttpCodes.TemporaryRedirect,
|
|
HttpCodes.PermanentRedirect
|
|
];
|
|
var HttpResponseRetryCodes = [
|
|
HttpCodes.BadGateway,
|
|
HttpCodes.ServiceUnavailable,
|
|
HttpCodes.GatewayTimeout
|
|
];
|
|
var RetryableHttpVerbs = ["OPTIONS", "GET", "DELETE", "HEAD"];
|
|
var ExponentialBackoffCeiling = 10;
|
|
var ExponentialBackoffTimeSlice = 5;
|
|
|
|
class HttpClientError extends Error {
|
|
constructor(message, statusCode) {
|
|
super(message);
|
|
this.name = "HttpClientError";
|
|
this.statusCode = statusCode;
|
|
Object.setPrototypeOf(this, HttpClientError.prototype);
|
|
}
|
|
}
|
|
exports.HttpClientError = HttpClientError;
|
|
|
|
class HttpClientResponse {
|
|
constructor(message) {
|
|
this.message = message;
|
|
}
|
|
readBody() {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return new Promise((resolve) => __awaiter(this, undefined, undefined, function* () {
|
|
let output = Buffer.alloc(0);
|
|
this.message.on("data", (chunk) => {
|
|
output = Buffer.concat([output, chunk]);
|
|
});
|
|
this.message.on("end", () => {
|
|
resolve(output.toString());
|
|
});
|
|
}));
|
|
});
|
|
}
|
|
readBodyBuffer() {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return new Promise((resolve) => __awaiter(this, undefined, undefined, function* () {
|
|
const chunks = [];
|
|
this.message.on("data", (chunk) => {
|
|
chunks.push(chunk);
|
|
});
|
|
this.message.on("end", () => {
|
|
resolve(Buffer.concat(chunks));
|
|
});
|
|
}));
|
|
});
|
|
}
|
|
}
|
|
exports.HttpClientResponse = HttpClientResponse;
|
|
exports.isHttps = isHttps;
|
|
|
|
class HttpClient {
|
|
constructor(userAgent, handlers, requestOptions) {
|
|
this._ignoreSslError = false;
|
|
this._allowRedirects = true;
|
|
this._allowRedirectDowngrade = false;
|
|
this._maxRedirects = 50;
|
|
this._allowRetries = false;
|
|
this._maxRetries = 1;
|
|
this._keepAlive = false;
|
|
this._disposed = false;
|
|
this.userAgent = userAgent;
|
|
this.handlers = handlers || [];
|
|
this.requestOptions = requestOptions;
|
|
if (requestOptions) {
|
|
if (requestOptions.ignoreSslError != null) {
|
|
this._ignoreSslError = requestOptions.ignoreSslError;
|
|
}
|
|
this._socketTimeout = requestOptions.socketTimeout;
|
|
if (requestOptions.allowRedirects != null) {
|
|
this._allowRedirects = requestOptions.allowRedirects;
|
|
}
|
|
if (requestOptions.allowRedirectDowngrade != null) {
|
|
this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
|
|
}
|
|
if (requestOptions.maxRedirects != null) {
|
|
this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
|
|
}
|
|
if (requestOptions.keepAlive != null) {
|
|
this._keepAlive = requestOptions.keepAlive;
|
|
}
|
|
if (requestOptions.allowRetries != null) {
|
|
this._allowRetries = requestOptions.allowRetries;
|
|
}
|
|
if (requestOptions.maxRetries != null) {
|
|
this._maxRetries = requestOptions.maxRetries;
|
|
}
|
|
}
|
|
}
|
|
options(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request("OPTIONS", requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
get(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request("GET", requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
del(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request("DELETE", requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
post(requestUrl, data, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request("POST", requestUrl, data, additionalHeaders || {});
|
|
});
|
|
}
|
|
patch(requestUrl, data, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request("PATCH", requestUrl, data, additionalHeaders || {});
|
|
});
|
|
}
|
|
put(requestUrl, data, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request("PUT", requestUrl, data, additionalHeaders || {});
|
|
});
|
|
}
|
|
head(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request("HEAD", requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
sendStream(verb, requestUrl, stream, additionalHeaders) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.request(verb, requestUrl, stream, additionalHeaders);
|
|
});
|
|
}
|
|
getJson(requestUrl, additionalHeaders = {}) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
const res = yield this.get(requestUrl, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
});
|
|
}
|
|
postJson(requestUrl, obj, additionalHeaders = {}) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
const data = JSON.stringify(obj, null, 2);
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
const res = yield this.post(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
});
|
|
}
|
|
putJson(requestUrl, obj, additionalHeaders = {}) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
const data = JSON.stringify(obj, null, 2);
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
const res = yield this.put(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
});
|
|
}
|
|
patchJson(requestUrl, obj, additionalHeaders = {}) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
const data = JSON.stringify(obj, null, 2);
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
const res = yield this.patch(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
});
|
|
}
|
|
request(verb, requestUrl, data, headers) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
if (this._disposed) {
|
|
throw new Error("Client has already been disposed.");
|
|
}
|
|
const parsedUrl = new URL(requestUrl);
|
|
let info = this._prepareRequest(verb, parsedUrl, headers);
|
|
const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1;
|
|
let numTries = 0;
|
|
let response;
|
|
do {
|
|
response = yield this.requestRaw(info, data);
|
|
if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
|
|
let authenticationHandler;
|
|
for (const handler of this.handlers) {
|
|
if (handler.canHandleAuthentication(response)) {
|
|
authenticationHandler = handler;
|
|
break;
|
|
}
|
|
}
|
|
if (authenticationHandler) {
|
|
return authenticationHandler.handleAuthentication(this, info, data);
|
|
} else {
|
|
return response;
|
|
}
|
|
}
|
|
let redirectsRemaining = this._maxRedirects;
|
|
while (response.message.statusCode && HttpRedirectCodes.includes(response.message.statusCode) && this._allowRedirects && redirectsRemaining > 0) {
|
|
const redirectUrl = response.message.headers["location"];
|
|
if (!redirectUrl) {
|
|
break;
|
|
}
|
|
const parsedRedirectUrl = new URL(redirectUrl);
|
|
if (parsedUrl.protocol === "https:" && parsedUrl.protocol !== parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) {
|
|
throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");
|
|
}
|
|
yield response.readBody();
|
|
if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
|
|
for (const header in headers) {
|
|
if (header.toLowerCase() === "authorization") {
|
|
delete headers[header];
|
|
}
|
|
}
|
|
}
|
|
info = this._prepareRequest(verb, parsedRedirectUrl, headers);
|
|
response = yield this.requestRaw(info, data);
|
|
redirectsRemaining--;
|
|
}
|
|
if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) {
|
|
return response;
|
|
}
|
|
numTries += 1;
|
|
if (numTries < maxTries) {
|
|
yield response.readBody();
|
|
yield this._performExponentialBackoff(numTries);
|
|
}
|
|
} while (numTries < maxTries);
|
|
return response;
|
|
});
|
|
}
|
|
dispose() {
|
|
if (this._agent) {
|
|
this._agent.destroy();
|
|
}
|
|
this._disposed = true;
|
|
}
|
|
requestRaw(info, data) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return new Promise((resolve, reject) => {
|
|
function callbackForResult(err, res) {
|
|
if (err) {
|
|
reject(err);
|
|
} else if (!res) {
|
|
reject(new Error("Unknown error"));
|
|
} else {
|
|
resolve(res);
|
|
}
|
|
}
|
|
this.requestRawWithCallback(info, data, callbackForResult);
|
|
});
|
|
});
|
|
}
|
|
requestRawWithCallback(info, data, onResult) {
|
|
if (typeof data === "string") {
|
|
if (!info.options.headers) {
|
|
info.options.headers = {};
|
|
}
|
|
info.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8");
|
|
}
|
|
let callbackCalled = false;
|
|
function handleResult(err, res) {
|
|
if (!callbackCalled) {
|
|
callbackCalled = true;
|
|
onResult(err, res);
|
|
}
|
|
}
|
|
const req = info.httpModule.request(info.options, (msg) => {
|
|
const res = new HttpClientResponse(msg);
|
|
handleResult(undefined, res);
|
|
});
|
|
let socket;
|
|
req.on("socket", (sock) => {
|
|
socket = sock;
|
|
});
|
|
req.setTimeout(this._socketTimeout || 3 * 60000, () => {
|
|
if (socket) {
|
|
socket.end();
|
|
}
|
|
handleResult(new Error(`Request timeout: ${info.options.path}`));
|
|
});
|
|
req.on("error", function(err) {
|
|
handleResult(err);
|
|
});
|
|
if (data && typeof data === "string") {
|
|
req.write(data, "utf8");
|
|
}
|
|
if (data && typeof data !== "string") {
|
|
data.on("close", function() {
|
|
req.end();
|
|
});
|
|
data.pipe(req);
|
|
} else {
|
|
req.end();
|
|
}
|
|
}
|
|
getAgent(serverUrl) {
|
|
const parsedUrl = new URL(serverUrl);
|
|
return this._getAgent(parsedUrl);
|
|
}
|
|
getAgentDispatcher(serverUrl) {
|
|
const parsedUrl = new URL(serverUrl);
|
|
const proxyUrl = pm.getProxyUrl(parsedUrl);
|
|
const useProxy = proxyUrl && proxyUrl.hostname;
|
|
if (!useProxy) {
|
|
return;
|
|
}
|
|
return this._getProxyAgentDispatcher(parsedUrl, proxyUrl);
|
|
}
|
|
_prepareRequest(method, requestUrl, headers) {
|
|
const info = {};
|
|
info.parsedUrl = requestUrl;
|
|
const usingSsl = info.parsedUrl.protocol === "https:";
|
|
info.httpModule = usingSsl ? https : http;
|
|
const defaultPort = usingSsl ? 443 : 80;
|
|
info.options = {};
|
|
info.options.host = info.parsedUrl.hostname;
|
|
info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort;
|
|
info.options.path = (info.parsedUrl.pathname || "") + (info.parsedUrl.search || "");
|
|
info.options.method = method;
|
|
info.options.headers = this._mergeHeaders(headers);
|
|
if (this.userAgent != null) {
|
|
info.options.headers["user-agent"] = this.userAgent;
|
|
}
|
|
info.options.agent = this._getAgent(info.parsedUrl);
|
|
if (this.handlers) {
|
|
for (const handler of this.handlers) {
|
|
handler.prepareRequest(info.options);
|
|
}
|
|
}
|
|
return info;
|
|
}
|
|
_mergeHeaders(headers) {
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));
|
|
}
|
|
return lowercaseKeys(headers || {});
|
|
}
|
|
_getExistingOrDefaultHeader(additionalHeaders, header, _default) {
|
|
let clientHeader;
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
|
|
}
|
|
return additionalHeaders[header] || clientHeader || _default;
|
|
}
|
|
_getAgent(parsedUrl) {
|
|
let agent;
|
|
const proxyUrl = pm.getProxyUrl(parsedUrl);
|
|
const useProxy = proxyUrl && proxyUrl.hostname;
|
|
if (this._keepAlive && useProxy) {
|
|
agent = this._proxyAgent;
|
|
}
|
|
if (!useProxy) {
|
|
agent = this._agent;
|
|
}
|
|
if (agent) {
|
|
return agent;
|
|
}
|
|
const usingSsl = parsedUrl.protocol === "https:";
|
|
let maxSockets = 100;
|
|
if (this.requestOptions) {
|
|
maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
|
|
}
|
|
if (proxyUrl && proxyUrl.hostname) {
|
|
const agentOptions = {
|
|
maxSockets,
|
|
keepAlive: this._keepAlive,
|
|
proxy: Object.assign(Object.assign({}, (proxyUrl.username || proxyUrl.password) && {
|
|
proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
|
|
}), { host: proxyUrl.hostname, port: proxyUrl.port })
|
|
};
|
|
let tunnelAgent;
|
|
const overHttps = proxyUrl.protocol === "https:";
|
|
if (usingSsl) {
|
|
tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
|
|
} else {
|
|
tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
|
|
}
|
|
agent = tunnelAgent(agentOptions);
|
|
this._proxyAgent = agent;
|
|
}
|
|
if (!agent) {
|
|
const options = { keepAlive: this._keepAlive, maxSockets };
|
|
agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
|
|
this._agent = agent;
|
|
}
|
|
if (usingSsl && this._ignoreSslError) {
|
|
agent.options = Object.assign(agent.options || {}, {
|
|
rejectUnauthorized: false
|
|
});
|
|
}
|
|
return agent;
|
|
}
|
|
_getProxyAgentDispatcher(parsedUrl, proxyUrl) {
|
|
let proxyAgent;
|
|
if (this._keepAlive) {
|
|
proxyAgent = this._proxyAgentDispatcher;
|
|
}
|
|
if (proxyAgent) {
|
|
return proxyAgent;
|
|
}
|
|
const usingSsl = parsedUrl.protocol === "https:";
|
|
proxyAgent = new undici_1.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, (proxyUrl.username || proxyUrl.password) && {
|
|
token: `${proxyUrl.username}:${proxyUrl.password}`
|
|
}));
|
|
this._proxyAgentDispatcher = proxyAgent;
|
|
if (usingSsl && this._ignoreSslError) {
|
|
proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, {
|
|
rejectUnauthorized: false
|
|
});
|
|
}
|
|
return proxyAgent;
|
|
}
|
|
_performExponentialBackoff(retryNumber) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
|
|
const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
|
|
return new Promise((resolve) => setTimeout(() => resolve(), ms));
|
|
});
|
|
}
|
|
_processResponse(res, options) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return new Promise((resolve, reject) => __awaiter(this, undefined, undefined, function* () {
|
|
const statusCode = res.message.statusCode || 0;
|
|
const response = {
|
|
statusCode,
|
|
result: null,
|
|
headers: {}
|
|
};
|
|
if (statusCode === HttpCodes.NotFound) {
|
|
resolve(response);
|
|
}
|
|
function dateTimeDeserializer(key, value) {
|
|
if (typeof value === "string") {
|
|
const a = new Date(value);
|
|
if (!isNaN(a.valueOf())) {
|
|
return a;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
let obj;
|
|
let contents;
|
|
try {
|
|
contents = yield res.readBody();
|
|
if (contents && contents.length > 0) {
|
|
if (options && options.deserializeDates) {
|
|
obj = JSON.parse(contents, dateTimeDeserializer);
|
|
} else {
|
|
obj = JSON.parse(contents);
|
|
}
|
|
response.result = obj;
|
|
}
|
|
response.headers = res.message.headers;
|
|
} catch (err) {
|
|
}
|
|
if (statusCode > 299) {
|
|
let msg;
|
|
if (obj && obj.message) {
|
|
msg = obj.message;
|
|
} else if (contents && contents.length > 0) {
|
|
msg = contents;
|
|
} else {
|
|
msg = `Failed request: (${statusCode})`;
|
|
}
|
|
const err = new HttpClientError(msg, statusCode);
|
|
err.result = response.result;
|
|
reject(err);
|
|
} else {
|
|
resolve(response);
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
}
|
|
exports.HttpClient = HttpClient;
|
|
var lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {});
|
|
});
|
|
|
|
// node_modules/@actions/http-client/lib/auth.js
|
|
var require_auth = __commonJS((exports) => {
|
|
var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
function adopt(value) {
|
|
return value instanceof P ? value : new P(function(resolve) {
|
|
resolve(value);
|
|
});
|
|
}
|
|
return new (P || (P = Promise))(function(resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
}
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = undefined;
|
|
|
|
class BasicCredentialHandler {
|
|
constructor(username, password) {
|
|
this.username = username;
|
|
this.password = password;
|
|
}
|
|
prepareRequest(options) {
|
|
if (!options.headers) {
|
|
throw Error("The request has no headers");
|
|
}
|
|
options.headers["Authorization"] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`;
|
|
}
|
|
canHandleAuthentication() {
|
|
return false;
|
|
}
|
|
handleAuthentication() {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
throw new Error("not implemented");
|
|
});
|
|
}
|
|
}
|
|
exports.BasicCredentialHandler = BasicCredentialHandler;
|
|
|
|
class BearerCredentialHandler {
|
|
constructor(token) {
|
|
this.token = token;
|
|
}
|
|
prepareRequest(options) {
|
|
if (!options.headers) {
|
|
throw Error("The request has no headers");
|
|
}
|
|
options.headers["Authorization"] = `Bearer ${this.token}`;
|
|
}
|
|
canHandleAuthentication() {
|
|
return false;
|
|
}
|
|
handleAuthentication() {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
throw new Error("not implemented");
|
|
});
|
|
}
|
|
}
|
|
exports.BearerCredentialHandler = BearerCredentialHandler;
|
|
|
|
class PersonalAccessTokenCredentialHandler {
|
|
constructor(token) {
|
|
this.token = token;
|
|
}
|
|
prepareRequest(options) {
|
|
if (!options.headers) {
|
|
throw Error("The request has no headers");
|
|
}
|
|
options.headers["Authorization"] = `Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`;
|
|
}
|
|
canHandleAuthentication() {
|
|
return false;
|
|
}
|
|
handleAuthentication() {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
throw new Error("not implemented");
|
|
});
|
|
}
|
|
}
|
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
|
});
|
|
|
|
// node_modules/@actions/core/lib/oidc-utils.js
|
|
var require_oidc_utils = __commonJS((exports) => {
|
|
var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
function adopt(value) {
|
|
return value instanceof P ? value : new P(function(resolve) {
|
|
resolve(value);
|
|
});
|
|
}
|
|
return new (P || (P = Promise))(function(resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
}
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.OidcClient = undefined;
|
|
var http_client_1 = require_lib();
|
|
var auth_1 = require_auth();
|
|
var core_1 = require_core();
|
|
|
|
class OidcClient {
|
|
static createHttpClient(allowRetry = true, maxRetry = 10) {
|
|
const requestOptions = {
|
|
allowRetries: allowRetry,
|
|
maxRetries: maxRetry
|
|
};
|
|
return new http_client_1.HttpClient("actions/oidc-client", [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
|
|
}
|
|
static getRequestToken() {
|
|
const token = process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"];
|
|
if (!token) {
|
|
throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable");
|
|
}
|
|
return token;
|
|
}
|
|
static getIDTokenUrl() {
|
|
const runtimeUrl = process.env["ACTIONS_ID_TOKEN_REQUEST_URL"];
|
|
if (!runtimeUrl) {
|
|
throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable");
|
|
}
|
|
return runtimeUrl;
|
|
}
|
|
static getCall(id_token_url) {
|
|
var _a;
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
const httpclient = OidcClient.createHttpClient();
|
|
const res = yield httpclient.getJson(id_token_url).catch((error) => {
|
|
throw new Error(`Failed to get ID Token. \n
|
|
Error Code : ${error.statusCode}\n
|
|
Error Message: ${error.message}`);
|
|
});
|
|
const id_token = (_a = res.result) === null || _a === undefined ? undefined : _a.value;
|
|
if (!id_token) {
|
|
throw new Error("Response json body do not have ID Token field");
|
|
}
|
|
return id_token;
|
|
});
|
|
}
|
|
static getIDToken(audience) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
try {
|
|
let id_token_url = OidcClient.getIDTokenUrl();
|
|
if (audience) {
|
|
const encodedAudience = encodeURIComponent(audience);
|
|
id_token_url = `${id_token_url}&audience=${encodedAudience}`;
|
|
}
|
|
core_1.debug(`ID token url is ${id_token_url}`);
|
|
const id_token = yield OidcClient.getCall(id_token_url);
|
|
core_1.setSecret(id_token);
|
|
return id_token;
|
|
} catch (error) {
|
|
throw new Error(`Error message: ${error.message}`);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
exports.OidcClient = OidcClient;
|
|
});
|
|
|
|
// node_modules/@actions/core/lib/summary.js
|
|
var require_summary = __commonJS((exports) => {
|
|
var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
function adopt(value) {
|
|
return value instanceof P ? value : new P(function(resolve) {
|
|
resolve(value);
|
|
});
|
|
}
|
|
return new (P || (P = Promise))(function(resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
}
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = undefined;
|
|
var os_1 = __require("os");
|
|
var fs_1 = __require("fs");
|
|
var { access, appendFile, writeFile } = fs_1.promises;
|
|
exports.SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY";
|
|
exports.SUMMARY_DOCS_URL = "https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";
|
|
|
|
class Summary {
|
|
constructor() {
|
|
this._buffer = "";
|
|
}
|
|
filePath() {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
if (this._filePath) {
|
|
return this._filePath;
|
|
}
|
|
const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];
|
|
if (!pathFromEnv) {
|
|
throw new Error(`Unable to find environment variable for \$${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);
|
|
}
|
|
try {
|
|
yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);
|
|
} catch (_a) {
|
|
throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);
|
|
}
|
|
this._filePath = pathFromEnv;
|
|
return this._filePath;
|
|
});
|
|
}
|
|
wrap(tag, content, attrs = {}) {
|
|
const htmlAttrs = Object.entries(attrs).map(([key, value]) => ` ${key}="${value}"`).join("");
|
|
if (!content) {
|
|
return `<${tag}${htmlAttrs}>`;
|
|
}
|
|
return `<${tag}${htmlAttrs}>${content}</${tag}>`;
|
|
}
|
|
write(options) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
const overwrite = !!(options === null || options === undefined ? undefined : options.overwrite);
|
|
const filePath = yield this.filePath();
|
|
const writeFunc = overwrite ? writeFile : appendFile;
|
|
yield writeFunc(filePath, this._buffer, { encoding: "utf8" });
|
|
return this.emptyBuffer();
|
|
});
|
|
}
|
|
clear() {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return this.emptyBuffer().write({ overwrite: true });
|
|
});
|
|
}
|
|
stringify() {
|
|
return this._buffer;
|
|
}
|
|
isEmptyBuffer() {
|
|
return this._buffer.length === 0;
|
|
}
|
|
emptyBuffer() {
|
|
this._buffer = "";
|
|
return this;
|
|
}
|
|
addRaw(text, addEOL = false) {
|
|
this._buffer += text;
|
|
return addEOL ? this.addEOL() : this;
|
|
}
|
|
addEOL() {
|
|
return this.addRaw(os_1.EOL);
|
|
}
|
|
addCodeBlock(code, lang) {
|
|
const attrs = Object.assign({}, lang && { lang });
|
|
const element = this.wrap("pre", this.wrap("code", code), attrs);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addList(items, ordered = false) {
|
|
const tag = ordered ? "ol" : "ul";
|
|
const listItems = items.map((item) => this.wrap("li", item)).join("");
|
|
const element = this.wrap(tag, listItems);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addTable(rows) {
|
|
const tableBody = rows.map((row) => {
|
|
const cells = row.map((cell) => {
|
|
if (typeof cell === "string") {
|
|
return this.wrap("td", cell);
|
|
}
|
|
const { header, data, colspan, rowspan } = cell;
|
|
const tag = header ? "th" : "td";
|
|
const attrs = Object.assign(Object.assign({}, colspan && { colspan }), rowspan && { rowspan });
|
|
return this.wrap(tag, data, attrs);
|
|
}).join("");
|
|
return this.wrap("tr", cells);
|
|
}).join("");
|
|
const element = this.wrap("table", tableBody);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addDetails(label, content) {
|
|
const element = this.wrap("details", this.wrap("summary", label) + content);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addImage(src, alt, options) {
|
|
const { width, height } = options || {};
|
|
const attrs = Object.assign(Object.assign({}, width && { width }), height && { height });
|
|
const element = this.wrap("img", null, Object.assign({ src, alt }, attrs));
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addHeading(text, level) {
|
|
const tag = `h${level}`;
|
|
const allowedTag = ["h1", "h2", "h3", "h4", "h5", "h6"].includes(tag) ? tag : "h1";
|
|
const element = this.wrap(allowedTag, text);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addSeparator() {
|
|
const element = this.wrap("hr", null);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addBreak() {
|
|
const element = this.wrap("br", null);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addQuote(text, cite) {
|
|
const attrs = Object.assign({}, cite && { cite });
|
|
const element = this.wrap("blockquote", text, attrs);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
addLink(text, href) {
|
|
const element = this.wrap("a", text, { href });
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
}
|
|
var _summary = new Summary;
|
|
exports.markdownSummary = _summary;
|
|
exports.summary = _summary;
|
|
});
|
|
|
|
// node_modules/@actions/core/lib/path-utils.js
|
|
var require_path_utils = __commonJS((exports) => {
|
|
var toPosixPath = function(pth) {
|
|
return pth.replace(/[\\]/g, "/");
|
|
};
|
|
var toWin32Path = function(pth) {
|
|
return pth.replace(/[/]/g, "\\");
|
|
};
|
|
var toPlatformPath = function(pth) {
|
|
return pth.replace(/[/\\]/g, path.sep);
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() {
|
|
return m[k];
|
|
} });
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = undefined;
|
|
var path = __importStar(__require("path"));
|
|
exports.toPosixPath = toPosixPath;
|
|
exports.toWin32Path = toWin32Path;
|
|
exports.toPlatformPath = toPlatformPath;
|
|
});
|
|
|
|
// node_modules/@actions/core/lib/core.js
|
|
var require_core = __commonJS((exports) => {
|
|
var exportVariable = function(name, val) {
|
|
const convertedVal = utils_1.toCommandValue(val);
|
|
process.env[name] = convertedVal;
|
|
const filePath = process.env["GITHUB_ENV"] || "";
|
|
if (filePath) {
|
|
return file_command_1.issueFileCommand("ENV", file_command_1.prepareKeyValueMessage(name, val));
|
|
}
|
|
command_1.issueCommand("set-env", { name }, convertedVal);
|
|
};
|
|
var setSecret = function(secret) {
|
|
command_1.issueCommand("add-mask", {}, secret);
|
|
};
|
|
var addPath = function(inputPath) {
|
|
const filePath = process.env["GITHUB_PATH"] || "";
|
|
if (filePath) {
|
|
file_command_1.issueFileCommand("PATH", inputPath);
|
|
} else {
|
|
command_1.issueCommand("add-path", {}, inputPath);
|
|
}
|
|
process.env["PATH"] = `${inputPath}${path.delimiter}${process.env["PATH"]}`;
|
|
};
|
|
var getInput = function(name, options) {
|
|
const val = process.env[`INPUT_${name.replace(/ /g, "_").toUpperCase()}`] || "";
|
|
if (options && options.required && !val) {
|
|
throw new Error(`Input required and not supplied: ${name}`);
|
|
}
|
|
if (options && options.trimWhitespace === false) {
|
|
return val;
|
|
}
|
|
return val.trim();
|
|
};
|
|
var getMultilineInput = function(name, options) {
|
|
const inputs = getInput(name, options).split("\n").filter((x) => x !== "");
|
|
if (options && options.trimWhitespace === false) {
|
|
return inputs;
|
|
}
|
|
return inputs.map((input) => input.trim());
|
|
};
|
|
var getBooleanInput = function(name, options) {
|
|
const trueValue = ["true", "True", "TRUE"];
|
|
const falseValue = ["false", "False", "FALSE"];
|
|
const val = getInput(name, options);
|
|
if (trueValue.includes(val))
|
|
return true;
|
|
if (falseValue.includes(val))
|
|
return false;
|
|
throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
|
|
};
|
|
var setOutput = function(name, value) {
|
|
const filePath = process.env["GITHUB_OUTPUT"] || "";
|
|
if (filePath) {
|
|
return file_command_1.issueFileCommand("OUTPUT", file_command_1.prepareKeyValueMessage(name, value));
|
|
}
|
|
process.stdout.write(os.EOL);
|
|
command_1.issueCommand("set-output", { name }, utils_1.toCommandValue(value));
|
|
};
|
|
var setCommandEcho = function(enabled) {
|
|
command_1.issue("echo", enabled ? "on" : "off");
|
|
};
|
|
var setFailed = function(message) {
|
|
process.exitCode = ExitCode.Failure;
|
|
error(message);
|
|
};
|
|
var isDebug = function() {
|
|
return process.env["RUNNER_DEBUG"] === "1";
|
|
};
|
|
var debug = function(message) {
|
|
command_1.issueCommand("debug", {}, message);
|
|
};
|
|
var error = function(message, properties = {}) {
|
|
command_1.issueCommand("error", utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
};
|
|
var warning = function(message, properties = {}) {
|
|
command_1.issueCommand("warning", utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
};
|
|
var notice = function(message, properties = {}) {
|
|
command_1.issueCommand("notice", utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
};
|
|
var info = function(message) {
|
|
process.stdout.write(message + os.EOL);
|
|
};
|
|
var startGroup = function(name) {
|
|
command_1.issue("group", name);
|
|
};
|
|
var endGroup = function() {
|
|
command_1.issue("endgroup");
|
|
};
|
|
var group = function(name, fn) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
startGroup(name);
|
|
let result;
|
|
try {
|
|
result = yield fn();
|
|
} finally {
|
|
endGroup();
|
|
}
|
|
return result;
|
|
});
|
|
};
|
|
var saveState = function(name, value) {
|
|
const filePath = process.env["GITHUB_STATE"] || "";
|
|
if (filePath) {
|
|
return file_command_1.issueFileCommand("STATE", file_command_1.prepareKeyValueMessage(name, value));
|
|
}
|
|
command_1.issueCommand("save-state", { name }, utils_1.toCommandValue(value));
|
|
};
|
|
var getState = function(name) {
|
|
return process.env[`STATE_${name}`] || "";
|
|
};
|
|
var getIDToken = function(aud) {
|
|
return __awaiter(this, undefined, undefined, function* () {
|
|
return yield oidc_utils_1.OidcClient.getIDToken(aud);
|
|
});
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() {
|
|
return m[k];
|
|
} });
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
function adopt(value) {
|
|
return value instanceof P ? value : new P(function(resolve) {
|
|
resolve(value);
|
|
});
|
|
}
|
|
return new (P || (P = Promise))(function(resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
}
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = undefined;
|
|
var command_1 = require_command();
|
|
var file_command_1 = require_file_command();
|
|
var utils_1 = require_utils();
|
|
var os = __importStar(__require("os"));
|
|
var path = __importStar(__require("path"));
|
|
var oidc_utils_1 = require_oidc_utils();
|
|
var ExitCode;
|
|
(function(ExitCode2) {
|
|
ExitCode2[ExitCode2["Success"] = 0] = "Success";
|
|
ExitCode2[ExitCode2["Failure"] = 1] = "Failure";
|
|
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
|
exports.exportVariable = exportVariable;
|
|
exports.setSecret = setSecret;
|
|
exports.addPath = addPath;
|
|
exports.getInput = getInput;
|
|
exports.getMultilineInput = getMultilineInput;
|
|
exports.getBooleanInput = getBooleanInput;
|
|
exports.setOutput = setOutput;
|
|
exports.setCommandEcho = setCommandEcho;
|
|
exports.setFailed = setFailed;
|
|
exports.isDebug = isDebug;
|
|
exports.debug = debug;
|
|
exports.error = error;
|
|
exports.warning = warning;
|
|
exports.notice = notice;
|
|
exports.info = info;
|
|
exports.startGroup = startGroup;
|
|
exports.endGroup = endGroup;
|
|
exports.group = group;
|
|
exports.saveState = saveState;
|
|
exports.getState = getState;
|
|
exports.getIDToken = getIDToken;
|
|
var summary_1 = require_summary();
|
|
Object.defineProperty(exports, "summary", { enumerable: true, get: function() {
|
|
return summary_1.summary;
|
|
} });
|
|
var summary_2 = require_summary();
|
|
Object.defineProperty(exports, "markdownSummary", { enumerable: true, get: function() {
|
|
return summary_2.markdownSummary;
|
|
} });
|
|
var path_utils_1 = require_path_utils();
|
|
Object.defineProperty(exports, "toPosixPath", { enumerable: true, get: function() {
|
|
return path_utils_1.toPosixPath;
|
|
} });
|
|
Object.defineProperty(exports, "toWin32Path", { enumerable: true, get: function() {
|
|
return path_utils_1.toWin32Path;
|
|
} });
|
|
Object.defineProperty(exports, "toPlatformPath", { enumerable: true, get: function() {
|
|
return path_utils_1.toPlatformPath;
|
|
} });
|
|
});
|
|
|
|
// node_modules/@actions/github/lib/context.js
|
|
var require_context = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.Context = undefined;
|
|
var fs_1 = __require("fs");
|
|
var os_1 = __require("os");
|
|
|
|
class Context {
|
|
constructor() {
|
|
var _a, _b, _c;
|
|
this.payload = {};
|
|
if (process.env.GITHUB_EVENT_PATH) {
|
|
if ((0, fs_1.existsSync)(process.env.GITHUB_EVENT_PATH)) {
|
|
this.payload = JSON.parse((0, fs_1.readFileSync)(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" }));
|
|
} else {
|
|
const path = process.env.GITHUB_EVENT_PATH;
|
|
process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);
|
|
}
|
|
}
|
|
this.eventName = process.env.GITHUB_EVENT_NAME;
|
|
this.sha = process.env.GITHUB_SHA;
|
|
this.ref = process.env.GITHUB_REF;
|
|
this.workflow = process.env.GITHUB_WORKFLOW;
|
|
this.action = process.env.GITHUB_ACTION;
|
|
this.actor = process.env.GITHUB_ACTOR;
|
|
this.job = process.env.GITHUB_JOB;
|
|
this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10);
|
|
this.runId = parseInt(process.env.GITHUB_RUN_ID, 10);
|
|
this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== undefined ? _a : `https://api.github.com`;
|
|
this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== undefined ? _b : `https://github.com`;
|
|
this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== undefined ? _c : `https://api.github.com/graphql`;
|
|
}
|
|
get issue() {
|
|
const payload = this.payload;
|
|
return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });
|
|
}
|
|
get repo() {
|
|
if (process.env.GITHUB_REPOSITORY) {
|
|
const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/");
|
|
return { owner, repo };
|
|
}
|
|
if (this.payload.repository) {
|
|
return {
|
|
owner: this.payload.repository.owner.login,
|
|
repo: this.payload.repository.name
|
|
};
|
|
}
|
|
throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
|
|
}
|
|
}
|
|
exports.Context = Context;
|
|
});
|
|
|
|
// node_modules/@actions/github/lib/internal/utils.js
|
|
var require_utils3 = __commonJS((exports) => {
|
|
var getAuthString = function(token, options) {
|
|
if (!token && !options.auth) {
|
|
throw new Error("Parameter token or opts.auth is required");
|
|
} else if (token && options.auth) {
|
|
throw new Error("Parameters token and opts.auth may not both be specified");
|
|
}
|
|
return typeof options.auth === "string" ? options.auth : `token ${token}`;
|
|
};
|
|
var getProxyAgent = function(destinationUrl) {
|
|
const hc = new httpClient.HttpClient;
|
|
return hc.getAgent(destinationUrl);
|
|
};
|
|
var getProxyAgentDispatcher = function(destinationUrl) {
|
|
const hc = new httpClient.HttpClient;
|
|
return hc.getAgentDispatcher(destinationUrl);
|
|
};
|
|
var getProxyFetch = function(destinationUrl) {
|
|
const httpDispatcher = getProxyAgentDispatcher(destinationUrl);
|
|
const proxyFetch = (url, opts) => __awaiter(this, undefined, undefined, function* () {
|
|
return (0, undici_1.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher }));
|
|
});
|
|
return proxyFetch;
|
|
};
|
|
var getApiBaseUrl = function() {
|
|
return process.env["GITHUB_API_URL"] || "https://api.github.com";
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
function adopt(value) {
|
|
return value instanceof P ? value : new P(function(resolve) {
|
|
resolve(value);
|
|
});
|
|
}
|
|
return new (P || (P = Promise))(function(resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e) {
|
|
reject(e);
|
|
}
|
|
}
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
}
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getApiBaseUrl = exports.getProxyFetch = exports.getProxyAgentDispatcher = exports.getProxyAgent = exports.getAuthString = undefined;
|
|
var httpClient = __importStar(require_lib());
|
|
var undici_1 = require_undici();
|
|
exports.getAuthString = getAuthString;
|
|
exports.getProxyAgent = getProxyAgent;
|
|
exports.getProxyAgentDispatcher = getProxyAgentDispatcher;
|
|
exports.getProxyFetch = getProxyFetch;
|
|
exports.getApiBaseUrl = getApiBaseUrl;
|
|
});
|
|
|
|
// node_modules/universal-user-agent/dist-node/index.js
|
|
var require_dist_node = __commonJS((exports) => {
|
|
var getUserAgent = function() {
|
|
if (typeof navigator === "object" && "userAgent" in navigator) {
|
|
return navigator.userAgent;
|
|
}
|
|
if (typeof process === "object" && process.version !== undefined) {
|
|
return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
|
|
}
|
|
return "<environment undetectable>";
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getUserAgent = getUserAgent;
|
|
});
|
|
|
|
// node_modules/before-after-hook/lib/register.js
|
|
var require_register = __commonJS((exports, module) => {
|
|
var register = function(state, name, method, options) {
|
|
if (typeof method !== "function") {
|
|
throw new Error("method for before hook must be a function");
|
|
}
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
if (Array.isArray(name)) {
|
|
return name.reverse().reduce(function(callback, name2) {
|
|
return register.bind(null, state, name2, callback, options);
|
|
}, method)();
|
|
}
|
|
return Promise.resolve().then(function() {
|
|
if (!state.registry[name]) {
|
|
return method(options);
|
|
}
|
|
return state.registry[name].reduce(function(method2, registered) {
|
|
return registered.hook.bind(null, method2, options);
|
|
}, method)();
|
|
});
|
|
};
|
|
module.exports = register;
|
|
});
|
|
|
|
// node_modules/before-after-hook/lib/add.js
|
|
var require_add = __commonJS((exports, module) => {
|
|
var addHook = function(state, kind, name, hook) {
|
|
var orig = hook;
|
|
if (!state.registry[name]) {
|
|
state.registry[name] = [];
|
|
}
|
|
if (kind === "before") {
|
|
hook = function(method, options) {
|
|
return Promise.resolve().then(orig.bind(null, options)).then(method.bind(null, options));
|
|
};
|
|
}
|
|
if (kind === "after") {
|
|
hook = function(method, options) {
|
|
var result;
|
|
return Promise.resolve().then(method.bind(null, options)).then(function(result_) {
|
|
result = result_;
|
|
return orig(result, options);
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
};
|
|
}
|
|
if (kind === "error") {
|
|
hook = function(method, options) {
|
|
return Promise.resolve().then(method.bind(null, options)).catch(function(error) {
|
|
return orig(error, options);
|
|
});
|
|
};
|
|
}
|
|
state.registry[name].push({
|
|
hook,
|
|
orig
|
|
});
|
|
};
|
|
module.exports = addHook;
|
|
});
|
|
|
|
// node_modules/before-after-hook/lib/remove.js
|
|
var require_remove = __commonJS((exports, module) => {
|
|
var removeHook = function(state, name, method) {
|
|
if (!state.registry[name]) {
|
|
return;
|
|
}
|
|
var index = state.registry[name].map(function(registered) {
|
|
return registered.orig;
|
|
}).indexOf(method);
|
|
if (index === -1) {
|
|
return;
|
|
}
|
|
state.registry[name].splice(index, 1);
|
|
};
|
|
module.exports = removeHook;
|
|
});
|
|
|
|
// node_modules/before-after-hook/index.js
|
|
var require_before_after_hook = __commonJS((exports, module) => {
|
|
var bindApi = function(hook, state, name) {
|
|
var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]);
|
|
hook.api = { remove: removeHookRef };
|
|
hook.remove = removeHookRef;
|
|
["before", "error", "after", "wrap"].forEach(function(kind) {
|
|
var args = name ? [state, kind, name] : [state, kind];
|
|
hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);
|
|
});
|
|
};
|
|
var HookSingular = function() {
|
|
var singularHookName = "h";
|
|
var singularHookState = {
|
|
registry: {}
|
|
};
|
|
var singularHook = register.bind(null, singularHookState, singularHookName);
|
|
bindApi(singularHook, singularHookState, singularHookName);
|
|
return singularHook;
|
|
};
|
|
var HookCollection = function() {
|
|
var state = {
|
|
registry: {}
|
|
};
|
|
var hook = register.bind(null, state);
|
|
bindApi(hook, state);
|
|
return hook;
|
|
};
|
|
var Hook = function() {
|
|
if (!collectionHookDeprecationMessageDisplayed) {
|
|
console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4');
|
|
collectionHookDeprecationMessageDisplayed = true;
|
|
}
|
|
return HookCollection();
|
|
};
|
|
var register = require_register();
|
|
var addHook = require_add();
|
|
var removeHook = require_remove();
|
|
var bind = Function.bind;
|
|
var bindable = bind.bind(bind);
|
|
var collectionHookDeprecationMessageDisplayed = false;
|
|
Hook.Singular = HookSingular.bind();
|
|
Hook.Collection = HookCollection.bind();
|
|
module.exports = Hook;
|
|
module.exports.Hook = Hook;
|
|
module.exports.Singular = Hook.Singular;
|
|
module.exports.Collection = Hook.Collection;
|
|
});
|
|
|
|
// node_modules/@octokit/endpoint/dist-node/index.js
|
|
var require_dist_node2 = __commonJS((exports, module) => {
|
|
var lowercaseKeys = function(object) {
|
|
if (!object) {
|
|
return {};
|
|
}
|
|
return Object.keys(object).reduce((newObj, key) => {
|
|
newObj[key.toLowerCase()] = object[key];
|
|
return newObj;
|
|
}, {});
|
|
};
|
|
var isPlainObject = function(value) {
|
|
if (typeof value !== "object" || value === null)
|
|
return false;
|
|
if (Object.prototype.toString.call(value) !== "[object Object]")
|
|
return false;
|
|
const proto = Object.getPrototypeOf(value);
|
|
if (proto === null)
|
|
return true;
|
|
const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
|
|
return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
|
|
};
|
|
var mergeDeep = function(defaults, options) {
|
|
const result = Object.assign({}, defaults);
|
|
Object.keys(options).forEach((key) => {
|
|
if (isPlainObject(options[key])) {
|
|
if (!(key in defaults))
|
|
Object.assign(result, { [key]: options[key] });
|
|
else
|
|
result[key] = mergeDeep(defaults[key], options[key]);
|
|
} else {
|
|
Object.assign(result, { [key]: options[key] });
|
|
}
|
|
});
|
|
return result;
|
|
};
|
|
var removeUndefinedProperties = function(obj) {
|
|
for (const key in obj) {
|
|
if (obj[key] === undefined) {
|
|
delete obj[key];
|
|
}
|
|
}
|
|
return obj;
|
|
};
|
|
var merge = function(defaults, route, options) {
|
|
if (typeof route === "string") {
|
|
let [method, url] = route.split(" ");
|
|
options = Object.assign(url ? { method, url } : { url: method }, options);
|
|
} else {
|
|
options = Object.assign({}, route);
|
|
}
|
|
options.headers = lowercaseKeys(options.headers);
|
|
removeUndefinedProperties(options);
|
|
removeUndefinedProperties(options.headers);
|
|
const mergedOptions = mergeDeep(defaults || {}, options);
|
|
if (options.url === "/graphql") {
|
|
if (defaults && defaults.mediaType.previews?.length) {
|
|
mergedOptions.mediaType.previews = defaults.mediaType.previews.filter((preview) => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
|
|
}
|
|
mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, ""));
|
|
}
|
|
return mergedOptions;
|
|
};
|
|
var addQueryParameters = function(url, parameters) {
|
|
const separator = /\?/.test(url) ? "&" : "?";
|
|
const names = Object.keys(parameters);
|
|
if (names.length === 0) {
|
|
return url;
|
|
}
|
|
return url + separator + names.map((name) => {
|
|
if (name === "q") {
|
|
return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
|
|
}
|
|
return `${name}=${encodeURIComponent(parameters[name])}`;
|
|
}).join("&");
|
|
};
|
|
var removeNonChars = function(variableName) {
|
|
return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
|
|
};
|
|
var extractUrlVariableNames = function(url) {
|
|
const matches = url.match(urlVariableRegex);
|
|
if (!matches) {
|
|
return [];
|
|
}
|
|
return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
|
|
};
|
|
var omit = function(object, keysToOmit) {
|
|
const result = { __proto__: null };
|
|
for (const key of Object.keys(object)) {
|
|
if (keysToOmit.indexOf(key) === -1) {
|
|
result[key] = object[key];
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
var encodeReserved = function(str) {
|
|
return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {
|
|
if (!/%[0-9A-Fa-f]/.test(part)) {
|
|
part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
|
|
}
|
|
return part;
|
|
}).join("");
|
|
};
|
|
var encodeUnreserved = function(str) {
|
|
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
|
|
return "%" + c.charCodeAt(0).toString(16).toUpperCase();
|
|
});
|
|
};
|
|
var encodeValue = function(operator, value, key) {
|
|
value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
|
|
if (key) {
|
|
return encodeUnreserved(key) + "=" + value;
|
|
} else {
|
|
return value;
|
|
}
|
|
};
|
|
var isDefined = function(value) {
|
|
return value !== undefined && value !== null;
|
|
};
|
|
var isKeyOperator = function(operator) {
|
|
return operator === ";" || operator === "&" || operator === "?";
|
|
};
|
|
var getValues = function(context, operator, key, modifier) {
|
|
var value = context[key], result = [];
|
|
if (isDefined(value) && value !== "") {
|
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
value = value.toString();
|
|
if (modifier && modifier !== "*") {
|
|
value = value.substring(0, parseInt(modifier, 10));
|
|
}
|
|
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
|
|
} else {
|
|
if (modifier === "*") {
|
|
if (Array.isArray(value)) {
|
|
value.filter(isDefined).forEach(function(value2) {
|
|
result.push(encodeValue(operator, value2, isKeyOperator(operator) ? key : ""));
|
|
});
|
|
} else {
|
|
Object.keys(value).forEach(function(k) {
|
|
if (isDefined(value[k])) {
|
|
result.push(encodeValue(operator, value[k], k));
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
const tmp = [];
|
|
if (Array.isArray(value)) {
|
|
value.filter(isDefined).forEach(function(value2) {
|
|
tmp.push(encodeValue(operator, value2));
|
|
});
|
|
} else {
|
|
Object.keys(value).forEach(function(k) {
|
|
if (isDefined(value[k])) {
|
|
tmp.push(encodeUnreserved(k));
|
|
tmp.push(encodeValue(operator, value[k].toString()));
|
|
}
|
|
});
|
|
}
|
|
if (isKeyOperator(operator)) {
|
|
result.push(encodeUnreserved(key) + "=" + tmp.join(","));
|
|
} else if (tmp.length !== 0) {
|
|
result.push(tmp.join(","));
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (operator === ";") {
|
|
if (isDefined(value)) {
|
|
result.push(encodeUnreserved(key));
|
|
}
|
|
} else if (value === "" && (operator === "&" || operator === "?")) {
|
|
result.push(encodeUnreserved(key) + "=");
|
|
} else if (value === "") {
|
|
result.push("");
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
var parseUrl = function(template) {
|
|
return {
|
|
expand: expand.bind(null, template)
|
|
};
|
|
};
|
|
var expand = function(template, context) {
|
|
var operators = ["+", "#", ".", "/", ";", "?", "&"];
|
|
template = template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function(_, expression, literal) {
|
|
if (expression) {
|
|
let operator = "";
|
|
const values = [];
|
|
if (operators.indexOf(expression.charAt(0)) !== -1) {
|
|
operator = expression.charAt(0);
|
|
expression = expression.substr(1);
|
|
}
|
|
expression.split(/,/g).forEach(function(variable) {
|
|
var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
|
|
values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
|
|
});
|
|
if (operator && operator !== "+") {
|
|
var separator = ",";
|
|
if (operator === "?") {
|
|
separator = "&";
|
|
} else if (operator !== "#") {
|
|
separator = operator;
|
|
}
|
|
return (values.length !== 0 ? operator : "") + values.join(separator);
|
|
} else {
|
|
return values.join(",");
|
|
}
|
|
} else {
|
|
return encodeReserved(literal);
|
|
}
|
|
});
|
|
if (template === "/") {
|
|
return template;
|
|
} else {
|
|
return template.replace(/\/$/, "");
|
|
}
|
|
};
|
|
var parse = function(options) {
|
|
let method = options.method.toUpperCase();
|
|
let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}");
|
|
let headers = Object.assign({}, options.headers);
|
|
let body;
|
|
let parameters = omit(options, [
|
|
"method",
|
|
"baseUrl",
|
|
"url",
|
|
"headers",
|
|
"request",
|
|
"mediaType"
|
|
]);
|
|
const urlVariableNames = extractUrlVariableNames(url);
|
|
url = parseUrl(url).expand(parameters);
|
|
if (!/^http/.test(url)) {
|
|
url = options.baseUrl + url;
|
|
}
|
|
const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl");
|
|
const remainingParameters = omit(parameters, omittedParameters);
|
|
const isBinaryRequest = /application\/octet-stream/i.test(headers.accept);
|
|
if (!isBinaryRequest) {
|
|
if (options.mediaType.format) {
|
|
headers.accept = headers.accept.split(/,/).map((format) => format.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd\$1\$2.${options.mediaType.format}`)).join(",");
|
|
}
|
|
if (url.endsWith("/graphql")) {
|
|
if (options.mediaType.previews?.length) {
|
|
const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
|
|
headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {
|
|
const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
|
|
return `application/vnd.github.${preview}-preview${format}`;
|
|
}).join(",");
|
|
}
|
|
}
|
|
}
|
|
if (["GET", "HEAD"].includes(method)) {
|
|
url = addQueryParameters(url, remainingParameters);
|
|
} else {
|
|
if ("data" in remainingParameters) {
|
|
body = remainingParameters.data;
|
|
} else {
|
|
if (Object.keys(remainingParameters).length) {
|
|
body = remainingParameters;
|
|
}
|
|
}
|
|
}
|
|
if (!headers["content-type"] && typeof body !== "undefined") {
|
|
headers["content-type"] = "application/json; charset=utf-8";
|
|
}
|
|
if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
|
|
body = "";
|
|
}
|
|
return Object.assign({ method, url, headers }, typeof body !== "undefined" ? { body } : null, options.request ? { request: options.request } : null);
|
|
};
|
|
var endpointWithDefaults = function(defaults, route, options) {
|
|
return parse(merge(defaults, route, options));
|
|
};
|
|
var withDefaults = function(oldDefaults, newDefaults) {
|
|
const DEFAULTS2 = merge(oldDefaults, newDefaults);
|
|
const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);
|
|
return Object.assign(endpoint2, {
|
|
DEFAULTS: DEFAULTS2,
|
|
defaults: withDefaults.bind(null, DEFAULTS2),
|
|
merge: merge.bind(null, DEFAULTS2),
|
|
parse
|
|
});
|
|
};
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
endpoint: () => endpoint
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var import_universal_user_agent = require_dist_node();
|
|
var VERSION = "9.0.5";
|
|
var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`;
|
|
var DEFAULTS = {
|
|
method: "GET",
|
|
baseUrl: "https://api.github.com",
|
|
headers: {
|
|
accept: "application/vnd.github.v3+json",
|
|
"user-agent": userAgent
|
|
},
|
|
mediaType: {
|
|
format: ""
|
|
}
|
|
};
|
|
var urlVariableRegex = /\{[^}]+\}/g;
|
|
var endpoint = withDefaults(null, DEFAULTS);
|
|
});
|
|
|
|
// node_modules/deprecation/dist-node/index.js
|
|
var require_dist_node3 = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
class Deprecation extends Error {
|
|
constructor(message) {
|
|
super(message);
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
this.name = "Deprecation";
|
|
}
|
|
}
|
|
exports.Deprecation = Deprecation;
|
|
});
|
|
|
|
// node_modules/wrappy/wrappy.js
|
|
var require_wrappy = __commonJS((exports, module) => {
|
|
var wrappy = function(fn, cb) {
|
|
if (fn && cb)
|
|
return wrappy(fn)(cb);
|
|
if (typeof fn !== "function")
|
|
throw new TypeError("need wrapper function");
|
|
Object.keys(fn).forEach(function(k) {
|
|
wrapper[k] = fn[k];
|
|
});
|
|
return wrapper;
|
|
function wrapper() {
|
|
var args = new Array(arguments.length);
|
|
for (var i = 0;i < args.length; i++) {
|
|
args[i] = arguments[i];
|
|
}
|
|
var ret = fn.apply(this, args);
|
|
var cb2 = args[args.length - 1];
|
|
if (typeof ret === "function" && ret !== cb2) {
|
|
Object.keys(cb2).forEach(function(k) {
|
|
ret[k] = cb2[k];
|
|
});
|
|
}
|
|
return ret;
|
|
}
|
|
};
|
|
module.exports = wrappy;
|
|
});
|
|
|
|
// node_modules/once/once.js
|
|
var require_once = __commonJS((exports, module) => {
|
|
var once = function(fn) {
|
|
var f = function() {
|
|
if (f.called)
|
|
return f.value;
|
|
f.called = true;
|
|
return f.value = fn.apply(this, arguments);
|
|
};
|
|
f.called = false;
|
|
return f;
|
|
};
|
|
var onceStrict = function(fn) {
|
|
var f = function() {
|
|
if (f.called)
|
|
throw new Error(f.onceError);
|
|
f.called = true;
|
|
return f.value = fn.apply(this, arguments);
|
|
};
|
|
var name = fn.name || "Function wrapped with `once`";
|
|
f.onceError = name + " shouldn't be called more than once";
|
|
f.called = false;
|
|
return f;
|
|
};
|
|
var wrappy = require_wrappy();
|
|
module.exports = wrappy(once);
|
|
module.exports.strict = wrappy(onceStrict);
|
|
once.proto = once(function() {
|
|
Object.defineProperty(Function.prototype, "once", {
|
|
value: function() {
|
|
return once(this);
|
|
},
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Function.prototype, "onceStrict", {
|
|
value: function() {
|
|
return onceStrict(this);
|
|
},
|
|
configurable: true
|
|
});
|
|
});
|
|
});
|
|
|
|
// node_modules/@octokit/request-error/dist-node/index.js
|
|
var require_dist_node4 = __commonJS((exports, module) => {
|
|
var __create2 = Object.create;
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __getProtoOf2 = Object.getPrototypeOf;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
RequestError: () => RequestError
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var import_deprecation = require_dist_node3();
|
|
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 RequestError = class extends Error {
|
|
constructor(message, statusCode, options) {
|
|
super(message);
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
this.name = "HttpError";
|
|
this.status = statusCode;
|
|
let headers;
|
|
if ("headers" in options && typeof options.headers !== "undefined") {
|
|
headers = options.headers;
|
|
}
|
|
if ("response" in options) {
|
|
this.response = options.response;
|
|
headers = options.response.headers;
|
|
}
|
|
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;
|
|
Object.defineProperty(this, "code", {
|
|
get() {
|
|
logOnceCode(new import_deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
|
|
return statusCode;
|
|
}
|
|
});
|
|
Object.defineProperty(this, "headers", {
|
|
get() {
|
|
logOnceHeaders(new import_deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));
|
|
return headers || {};
|
|
}
|
|
});
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/@octokit/request/dist-node/index.js
|
|
var require_dist_node5 = __commonJS((exports, module) => {
|
|
var isPlainObject = function(value) {
|
|
if (typeof value !== "object" || value === null)
|
|
return false;
|
|
if (Object.prototype.toString.call(value) !== "[object Object]")
|
|
return false;
|
|
const proto = Object.getPrototypeOf(value);
|
|
if (proto === null)
|
|
return true;
|
|
const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
|
|
return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
|
|
};
|
|
var getBufferResponse = function(response) {
|
|
return response.arrayBuffer();
|
|
};
|
|
var fetchWrapper = function(requestOptions) {
|
|
var _a, _b, _c, _d;
|
|
const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;
|
|
const parseSuccessResponseBody = ((_a = requestOptions.request) == null ? undefined : _a.parseSuccessResponseBody) !== false;
|
|
if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
|
|
requestOptions.body = JSON.stringify(requestOptions.body);
|
|
}
|
|
let headers = {};
|
|
let status;
|
|
let url;
|
|
let { fetch: fetch2 } = globalThis;
|
|
if ((_b = requestOptions.request) == null ? undefined : _b.fetch) {
|
|
fetch2 = requestOptions.request.fetch;
|
|
}
|
|
if (!fetch2) {
|
|
throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");
|
|
}
|
|
return fetch2(requestOptions.url, {
|
|
method: requestOptions.method,
|
|
body: requestOptions.body,
|
|
redirect: (_c = requestOptions.request) == null ? undefined : _c.redirect,
|
|
headers: requestOptions.headers,
|
|
signal: (_d = requestOptions.request) == null ? undefined : _d.signal,
|
|
...requestOptions.body && { duplex: "half" }
|
|
}).then(async (response) => {
|
|
url = response.url;
|
|
status = response.status;
|
|
for (const keyAndValue of response.headers) {
|
|
headers[keyAndValue[0]] = keyAndValue[1];
|
|
}
|
|
if ("deprecation" in headers) {
|
|
const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/);
|
|
const deprecationLink = matches && matches.pop();
|
|
log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`);
|
|
}
|
|
if (status === 204 || status === 205) {
|
|
return;
|
|
}
|
|
if (requestOptions.method === "HEAD") {
|
|
if (status < 400) {
|
|
return;
|
|
}
|
|
throw new import_request_error.RequestError(response.statusText, status, {
|
|
response: {
|
|
url,
|
|
status,
|
|
headers,
|
|
data: undefined
|
|
},
|
|
request: requestOptions
|
|
});
|
|
}
|
|
if (status === 304) {
|
|
throw new import_request_error.RequestError("Not modified", status, {
|
|
response: {
|
|
url,
|
|
status,
|
|
headers,
|
|
data: await getResponseData(response)
|
|
},
|
|
request: requestOptions
|
|
});
|
|
}
|
|
if (status >= 400) {
|
|
const data = await getResponseData(response);
|
|
const error = new import_request_error.RequestError(toErrorMessage(data), status, {
|
|
response: {
|
|
url,
|
|
status,
|
|
headers,
|
|
data
|
|
},
|
|
request: requestOptions
|
|
});
|
|
throw error;
|
|
}
|
|
return parseSuccessResponseBody ? await getResponseData(response) : response.body;
|
|
}).then((data) => {
|
|
return {
|
|
status,
|
|
url,
|
|
headers,
|
|
data
|
|
};
|
|
}).catch((error) => {
|
|
if (error instanceof import_request_error.RequestError)
|
|
throw error;
|
|
else if (error.name === "AbortError")
|
|
throw error;
|
|
let message = error.message;
|
|
if (error.name === "TypeError" && "cause" in error) {
|
|
if (error.cause instanceof Error) {
|
|
message = error.cause.message;
|
|
} else if (typeof error.cause === "string") {
|
|
message = error.cause;
|
|
}
|
|
}
|
|
throw new import_request_error.RequestError(message, 500, {
|
|
request: requestOptions
|
|
});
|
|
});
|
|
};
|
|
async function getResponseData(response) {
|
|
const contentType = response.headers.get("content-type");
|
|
if (/application\/json/.test(contentType)) {
|
|
return response.json().catch(() => response.text()).catch(() => "");
|
|
}
|
|
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
|
|
return response.text();
|
|
}
|
|
return getBufferResponse(response);
|
|
}
|
|
var toErrorMessage = function(data) {
|
|
if (typeof data === "string")
|
|
return data;
|
|
let suffix;
|
|
if ("documentation_url" in data) {
|
|
suffix = ` - ${data.documentation_url}`;
|
|
} else {
|
|
suffix = "";
|
|
}
|
|
if ("message" in data) {
|
|
if (Array.isArray(data.errors)) {
|
|
return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`;
|
|
}
|
|
return `${data.message}${suffix}`;
|
|
}
|
|
return `Unknown error: ${JSON.stringify(data)}`;
|
|
};
|
|
var withDefaults = function(oldEndpoint, newDefaults) {
|
|
const endpoint2 = oldEndpoint.defaults(newDefaults);
|
|
const newApi = function(route, parameters) {
|
|
const endpointOptions = endpoint2.merge(route, parameters);
|
|
if (!endpointOptions.request || !endpointOptions.request.hook) {
|
|
return fetchWrapper(endpoint2.parse(endpointOptions));
|
|
}
|
|
const request2 = (route2, parameters2) => {
|
|
return fetchWrapper(endpoint2.parse(endpoint2.merge(route2, parameters2)));
|
|
};
|
|
Object.assign(request2, {
|
|
endpoint: endpoint2,
|
|
defaults: withDefaults.bind(null, endpoint2)
|
|
});
|
|
return endpointOptions.request.hook(request2, endpointOptions);
|
|
};
|
|
return Object.assign(newApi, {
|
|
endpoint: endpoint2,
|
|
defaults: withDefaults.bind(null, endpoint2)
|
|
});
|
|
};
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
request: () => request
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var import_endpoint = require_dist_node2();
|
|
var import_universal_user_agent = require_dist_node();
|
|
var VERSION = "8.4.0";
|
|
var import_request_error = require_dist_node4();
|
|
var request = withDefaults(import_endpoint.endpoint, {
|
|
headers: {
|
|
"user-agent": `octokit-request.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
|
|
}
|
|
});
|
|
});
|
|
|
|
// node_modules/@octokit/graphql/dist-node/index.js
|
|
var require_dist_node6 = __commonJS((exports, module) => {
|
|
var _buildMessageForResponseErrors = function(data) {
|
|
return `Request failed due to following response errors:
|
|
` + data.errors.map((e) => ` - ${e.message}`).join("\n");
|
|
};
|
|
var graphql = function(request2, query, options) {
|
|
if (options) {
|
|
if (typeof query === "string" && "query" in options) {
|
|
return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`));
|
|
}
|
|
for (const key in options) {
|
|
if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key))
|
|
continue;
|
|
return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`));
|
|
}
|
|
}
|
|
const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query;
|
|
const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {
|
|
if (NON_VARIABLE_OPTIONS.includes(key)) {
|
|
result[key] = parsedOptions[key];
|
|
return result;
|
|
}
|
|
if (!result.variables) {
|
|
result.variables = {};
|
|
}
|
|
result.variables[key] = parsedOptions[key];
|
|
return result;
|
|
}, {});
|
|
const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;
|
|
if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
|
|
requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
|
|
}
|
|
return request2(requestOptions).then((response) => {
|
|
if (response.data.errors) {
|
|
const headers = {};
|
|
for (const key of Object.keys(response.headers)) {
|
|
headers[key] = response.headers[key];
|
|
}
|
|
throw new GraphqlResponseError(requestOptions, headers, response.data);
|
|
}
|
|
return response.data.data;
|
|
});
|
|
};
|
|
var withDefaults = function(request2, newDefaults) {
|
|
const newRequest = request2.defaults(newDefaults);
|
|
const newApi = (query, options) => {
|
|
return graphql(newRequest, query, options);
|
|
};
|
|
return Object.assign(newApi, {
|
|
defaults: withDefaults.bind(null, newRequest),
|
|
endpoint: newRequest.endpoint
|
|
});
|
|
};
|
|
var withCustomRequest = function(customRequest) {
|
|
return withDefaults(customRequest, {
|
|
method: "POST",
|
|
url: "/graphql"
|
|
});
|
|
};
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
GraphqlResponseError: () => GraphqlResponseError,
|
|
graphql: () => graphql2,
|
|
withCustomRequest: () => withCustomRequest
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var import_request3 = require_dist_node5();
|
|
var import_universal_user_agent = require_dist_node();
|
|
var VERSION = "7.1.0";
|
|
var import_request2 = require_dist_node5();
|
|
var import_request = require_dist_node5();
|
|
var GraphqlResponseError = class extends Error {
|
|
constructor(request2, headers, response) {
|
|
super(_buildMessageForResponseErrors(response));
|
|
this.request = request2;
|
|
this.headers = headers;
|
|
this.response = response;
|
|
this.name = "GraphqlResponseError";
|
|
this.errors = response.errors;
|
|
this.data = response.data;
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
}
|
|
};
|
|
var NON_VARIABLE_OPTIONS = [
|
|
"method",
|
|
"baseUrl",
|
|
"url",
|
|
"headers",
|
|
"request",
|
|
"query",
|
|
"mediaType"
|
|
];
|
|
var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"];
|
|
var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
|
|
var graphql2 = withDefaults(import_request3.request, {
|
|
headers: {
|
|
"user-agent": `octokit-graphql.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
|
|
},
|
|
method: "POST",
|
|
url: "/graphql"
|
|
});
|
|
});
|
|
|
|
// node_modules/@octokit/auth-token/dist-node/index.js
|
|
var require_dist_node7 = __commonJS((exports, module) => {
|
|
async function auth(token) {
|
|
const isApp = token.split(/\./).length === 3;
|
|
const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);
|
|
const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);
|
|
const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth";
|
|
return {
|
|
type: "token",
|
|
token,
|
|
tokenType
|
|
};
|
|
}
|
|
var withAuthorizationPrefix = function(token) {
|
|
if (token.split(/\./).length === 3) {
|
|
return `bearer ${token}`;
|
|
}
|
|
return `token ${token}`;
|
|
};
|
|
async function hook(token, request, route, parameters) {
|
|
const endpoint = request.endpoint.merge(route, parameters);
|
|
endpoint.headers.authorization = withAuthorizationPrefix(token);
|
|
return request(endpoint);
|
|
}
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
createTokenAuth: () => createTokenAuth
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var REGEX_IS_INSTALLATION_LEGACY = /^v1\./;
|
|
var REGEX_IS_INSTALLATION = /^ghs_/;
|
|
var REGEX_IS_USER_TO_SERVER = /^ghu_/;
|
|
var createTokenAuth = function createTokenAuth2(token) {
|
|
if (!token) {
|
|
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
|
|
}
|
|
if (typeof token !== "string") {
|
|
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
|
|
}
|
|
token = token.replace(/^(token|bearer) +/i, "");
|
|
return Object.assign(auth.bind(null, token), {
|
|
hook: hook.bind(null, token)
|
|
});
|
|
};
|
|
});
|
|
|
|
// node_modules/@octokit/core/dist-node/index.js
|
|
var require_dist_node8 = __commonJS((exports, module) => {
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
Octokit: () => Octokit
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var import_universal_user_agent = require_dist_node();
|
|
var import_before_after_hook = require_before_after_hook();
|
|
var import_request = require_dist_node5();
|
|
var import_graphql = require_dist_node6();
|
|
var import_auth_token = require_dist_node7();
|
|
var VERSION = "5.2.0";
|
|
var noop = () => {
|
|
};
|
|
var consoleWarn = console.warn.bind(console);
|
|
var consoleError = console.error.bind(console);
|
|
var userAgentTrail = `octokit-core.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`;
|
|
var Octokit = class {
|
|
static {
|
|
this.VERSION = VERSION;
|
|
}
|
|
static defaults(defaults) {
|
|
const OctokitWithDefaults = class extends this {
|
|
constructor(...args) {
|
|
const options = args[0] || {};
|
|
if (typeof defaults === "function") {
|
|
super(defaults(options));
|
|
return;
|
|
}
|
|
super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? {
|
|
userAgent: `${options.userAgent} ${defaults.userAgent}`
|
|
} : null));
|
|
}
|
|
};
|
|
return OctokitWithDefaults;
|
|
}
|
|
static {
|
|
this.plugins = [];
|
|
}
|
|
static plugin(...newPlugins) {
|
|
const currentPlugins = this.plugins;
|
|
const NewOctokit = class extends this {
|
|
static {
|
|
this.plugins = currentPlugins.concat(newPlugins.filter((plugin) => !currentPlugins.includes(plugin)));
|
|
}
|
|
};
|
|
return NewOctokit;
|
|
}
|
|
constructor(options = {}) {
|
|
const hook = new import_before_after_hook.Collection;
|
|
const requestDefaults = {
|
|
baseUrl: import_request.request.endpoint.DEFAULTS.baseUrl,
|
|
headers: {},
|
|
request: Object.assign({}, options.request, {
|
|
hook: hook.bind(null, "request")
|
|
}),
|
|
mediaType: {
|
|
previews: [],
|
|
format: ""
|
|
}
|
|
};
|
|
requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail;
|
|
if (options.baseUrl) {
|
|
requestDefaults.baseUrl = options.baseUrl;
|
|
}
|
|
if (options.previews) {
|
|
requestDefaults.mediaType.previews = options.previews;
|
|
}
|
|
if (options.timeZone) {
|
|
requestDefaults.headers["time-zone"] = options.timeZone;
|
|
}
|
|
this.request = import_request.request.defaults(requestDefaults);
|
|
this.graphql = (0, import_graphql.withCustomRequest)(this.request).defaults(requestDefaults);
|
|
this.log = Object.assign({
|
|
debug: noop,
|
|
info: noop,
|
|
warn: consoleWarn,
|
|
error: consoleError
|
|
}, options.log);
|
|
this.hook = hook;
|
|
if (!options.authStrategy) {
|
|
if (!options.auth) {
|
|
this.auth = async () => ({
|
|
type: "unauthenticated"
|
|
});
|
|
} else {
|
|
const auth = (0, import_auth_token.createTokenAuth)(options.auth);
|
|
hook.wrap("request", auth.hook);
|
|
this.auth = auth;
|
|
}
|
|
} else {
|
|
const { authStrategy, ...otherOptions } = options;
|
|
const auth = authStrategy(Object.assign({
|
|
request: this.request,
|
|
log: this.log,
|
|
octokit: this,
|
|
octokitOptions: otherOptions
|
|
}, options.auth));
|
|
hook.wrap("request", auth.hook);
|
|
this.auth = auth;
|
|
}
|
|
const classConstructor = this.constructor;
|
|
for (let i = 0;i < classConstructor.plugins.length; ++i) {
|
|
Object.assign(this, classConstructor.plugins[i](this, options));
|
|
}
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/@octokit/plugin-rest-endpoint-methods/dist-node/index.js
|
|
var require_dist_node9 = __commonJS((exports, module) => {
|
|
var endpointsToMethods = function(octokit) {
|
|
const newMethods = {};
|
|
for (const scope of endpointMethodsMap.keys()) {
|
|
newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);
|
|
}
|
|
return newMethods;
|
|
};
|
|
var decorate = function(octokit, scope, methodName, defaults, decorations) {
|
|
const requestWithDefaults = octokit.request.defaults(defaults);
|
|
function withDecorations(...args) {
|
|
let options = requestWithDefaults.endpoint.merge(...args);
|
|
if (decorations.mapToData) {
|
|
options = Object.assign({}, options, {
|
|
data: options[decorations.mapToData],
|
|
[decorations.mapToData]: undefined
|
|
});
|
|
return requestWithDefaults(options);
|
|
}
|
|
if (decorations.renamed) {
|
|
const [newScope, newMethodName] = decorations.renamed;
|
|
octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`);
|
|
}
|
|
if (decorations.deprecated) {
|
|
octokit.log.warn(decorations.deprecated);
|
|
}
|
|
if (decorations.renamedParameters) {
|
|
const options2 = requestWithDefaults.endpoint.merge(...args);
|
|
for (const [name, alias] of Object.entries(decorations.renamedParameters)) {
|
|
if (name in options2) {
|
|
octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`);
|
|
if (!(alias in options2)) {
|
|
options2[alias] = options2[name];
|
|
}
|
|
delete options2[name];
|
|
}
|
|
}
|
|
return requestWithDefaults(options2);
|
|
}
|
|
return requestWithDefaults(...args);
|
|
}
|
|
return Object.assign(withDecorations, requestWithDefaults);
|
|
};
|
|
var restEndpointMethods = function(octokit) {
|
|
const api = endpointsToMethods(octokit);
|
|
return {
|
|
rest: api
|
|
};
|
|
};
|
|
var legacyRestEndpointMethods = function(octokit) {
|
|
const api = endpointsToMethods(octokit);
|
|
return {
|
|
...api,
|
|
rest: api
|
|
};
|
|
};
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
legacyRestEndpointMethods: () => legacyRestEndpointMethods,
|
|
restEndpointMethods: () => restEndpointMethods
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var VERSION = "10.4.1";
|
|
var Endpoints = {
|
|
actions: {
|
|
addCustomLabelsToSelfHostedRunnerForOrg: [
|
|
"POST /orgs/{org}/actions/runners/{runner_id}/labels"
|
|
],
|
|
addCustomLabelsToSelfHostedRunnerForRepo: [
|
|
"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
|
|
],
|
|
addSelectedRepoToOrgSecret: [
|
|
"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
addSelectedRepoToOrgVariable: [
|
|
"PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"
|
|
],
|
|
approveWorkflowRun: [
|
|
"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"
|
|
],
|
|
cancelWorkflowRun: [
|
|
"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
|
|
],
|
|
createEnvironmentVariable: [
|
|
"POST /repositories/{repository_id}/environments/{environment_name}/variables"
|
|
],
|
|
createOrUpdateEnvironmentSecret: [
|
|
"PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"
|
|
],
|
|
createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"],
|
|
createOrUpdateRepoSecret: [
|
|
"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"
|
|
],
|
|
createOrgVariable: ["POST /orgs/{org}/actions/variables"],
|
|
createRegistrationTokenForOrg: [
|
|
"POST /orgs/{org}/actions/runners/registration-token"
|
|
],
|
|
createRegistrationTokenForRepo: [
|
|
"POST /repos/{owner}/{repo}/actions/runners/registration-token"
|
|
],
|
|
createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"],
|
|
createRemoveTokenForRepo: [
|
|
"POST /repos/{owner}/{repo}/actions/runners/remove-token"
|
|
],
|
|
createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"],
|
|
createWorkflowDispatch: [
|
|
"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"
|
|
],
|
|
deleteActionsCacheById: [
|
|
"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"
|
|
],
|
|
deleteActionsCacheByKey: [
|
|
"DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"
|
|
],
|
|
deleteArtifact: [
|
|
"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"
|
|
],
|
|
deleteEnvironmentSecret: [
|
|
"DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"
|
|
],
|
|
deleteEnvironmentVariable: [
|
|
"DELETE /repositories/{repository_id}/environments/{environment_name}/variables/{name}"
|
|
],
|
|
deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"],
|
|
deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"],
|
|
deleteRepoSecret: [
|
|
"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"
|
|
],
|
|
deleteRepoVariable: [
|
|
"DELETE /repos/{owner}/{repo}/actions/variables/{name}"
|
|
],
|
|
deleteSelfHostedRunnerFromOrg: [
|
|
"DELETE /orgs/{org}/actions/runners/{runner_id}"
|
|
],
|
|
deleteSelfHostedRunnerFromRepo: [
|
|
"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"
|
|
],
|
|
deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],
|
|
deleteWorkflowRunLogs: [
|
|
"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"
|
|
],
|
|
disableSelectedRepositoryGithubActionsOrganization: [
|
|
"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"
|
|
],
|
|
disableWorkflow: [
|
|
"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"
|
|
],
|
|
downloadArtifact: [
|
|
"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"
|
|
],
|
|
downloadJobLogsForWorkflowRun: [
|
|
"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"
|
|
],
|
|
downloadWorkflowRunAttemptLogs: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"
|
|
],
|
|
downloadWorkflowRunLogs: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"
|
|
],
|
|
enableSelectedRepositoryGithubActionsOrganization: [
|
|
"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"
|
|
],
|
|
enableWorkflow: [
|
|
"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"
|
|
],
|
|
forceCancelWorkflowRun: [
|
|
"POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel"
|
|
],
|
|
generateRunnerJitconfigForOrg: [
|
|
"POST /orgs/{org}/actions/runners/generate-jitconfig"
|
|
],
|
|
generateRunnerJitconfigForRepo: [
|
|
"POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"
|
|
],
|
|
getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"],
|
|
getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"],
|
|
getActionsCacheUsageByRepoForOrg: [
|
|
"GET /orgs/{org}/actions/cache/usage-by-repository"
|
|
],
|
|
getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"],
|
|
getAllowedActionsOrganization: [
|
|
"GET /orgs/{org}/actions/permissions/selected-actions"
|
|
],
|
|
getAllowedActionsRepository: [
|
|
"GET /repos/{owner}/{repo}/actions/permissions/selected-actions"
|
|
],
|
|
getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
|
|
getCustomOidcSubClaimForRepo: [
|
|
"GET /repos/{owner}/{repo}/actions/oidc/customization/sub"
|
|
],
|
|
getEnvironmentPublicKey: [
|
|
"GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"
|
|
],
|
|
getEnvironmentSecret: [
|
|
"GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"
|
|
],
|
|
getEnvironmentVariable: [
|
|
"GET /repositories/{repository_id}/environments/{environment_name}/variables/{name}"
|
|
],
|
|
getGithubActionsDefaultWorkflowPermissionsOrganization: [
|
|
"GET /orgs/{org}/actions/permissions/workflow"
|
|
],
|
|
getGithubActionsDefaultWorkflowPermissionsRepository: [
|
|
"GET /repos/{owner}/{repo}/actions/permissions/workflow"
|
|
],
|
|
getGithubActionsPermissionsOrganization: [
|
|
"GET /orgs/{org}/actions/permissions"
|
|
],
|
|
getGithubActionsPermissionsRepository: [
|
|
"GET /repos/{owner}/{repo}/actions/permissions"
|
|
],
|
|
getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
|
|
getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"],
|
|
getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"],
|
|
getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"],
|
|
getPendingDeploymentsForRun: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"
|
|
],
|
|
getRepoPermissions: [
|
|
"GET /repos/{owner}/{repo}/actions/permissions",
|
|
{},
|
|
{ renamed: ["actions", "getGithubActionsPermissionsRepository"] }
|
|
],
|
|
getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
|
|
getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
|
|
getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"],
|
|
getReviewsForRun: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"
|
|
],
|
|
getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"],
|
|
getSelfHostedRunnerForRepo: [
|
|
"GET /repos/{owner}/{repo}/actions/runners/{runner_id}"
|
|
],
|
|
getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],
|
|
getWorkflowAccessToRepository: [
|
|
"GET /repos/{owner}/{repo}/actions/permissions/access"
|
|
],
|
|
getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
|
|
getWorkflowRunAttempt: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"
|
|
],
|
|
getWorkflowRunUsage: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"
|
|
],
|
|
getWorkflowUsage: [
|
|
"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"
|
|
],
|
|
listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"],
|
|
listEnvironmentSecrets: [
|
|
"GET /repositories/{repository_id}/environments/{environment_name}/secrets"
|
|
],
|
|
listEnvironmentVariables: [
|
|
"GET /repositories/{repository_id}/environments/{environment_name}/variables"
|
|
],
|
|
listJobsForWorkflowRun: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"
|
|
],
|
|
listJobsForWorkflowRunAttempt: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"
|
|
],
|
|
listLabelsForSelfHostedRunnerForOrg: [
|
|
"GET /orgs/{org}/actions/runners/{runner_id}/labels"
|
|
],
|
|
listLabelsForSelfHostedRunnerForRepo: [
|
|
"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
|
|
],
|
|
listOrgSecrets: ["GET /orgs/{org}/actions/secrets"],
|
|
listOrgVariables: ["GET /orgs/{org}/actions/variables"],
|
|
listRepoOrganizationSecrets: [
|
|
"GET /repos/{owner}/{repo}/actions/organization-secrets"
|
|
],
|
|
listRepoOrganizationVariables: [
|
|
"GET /repos/{owner}/{repo}/actions/organization-variables"
|
|
],
|
|
listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"],
|
|
listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"],
|
|
listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"],
|
|
listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"],
|
|
listRunnerApplicationsForRepo: [
|
|
"GET /repos/{owner}/{repo}/actions/runners/downloads"
|
|
],
|
|
listSelectedReposForOrgSecret: [
|
|
"GET /orgs/{org}/actions/secrets/{secret_name}/repositories"
|
|
],
|
|
listSelectedReposForOrgVariable: [
|
|
"GET /orgs/{org}/actions/variables/{name}/repositories"
|
|
],
|
|
listSelectedRepositoriesEnabledGithubActionsOrganization: [
|
|
"GET /orgs/{org}/actions/permissions/repositories"
|
|
],
|
|
listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"],
|
|
listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"],
|
|
listWorkflowRunArtifacts: [
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"
|
|
],
|
|
listWorkflowRuns: [
|
|
"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"
|
|
],
|
|
listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"],
|
|
reRunJobForWorkflowRun: [
|
|
"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"
|
|
],
|
|
reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
|
|
reRunWorkflowFailedJobs: [
|
|
"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"
|
|
],
|
|
removeAllCustomLabelsFromSelfHostedRunnerForOrg: [
|
|
"DELETE /orgs/{org}/actions/runners/{runner_id}/labels"
|
|
],
|
|
removeAllCustomLabelsFromSelfHostedRunnerForRepo: [
|
|
"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
|
|
],
|
|
removeCustomLabelFromSelfHostedRunnerForOrg: [
|
|
"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"
|
|
],
|
|
removeCustomLabelFromSelfHostedRunnerForRepo: [
|
|
"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"
|
|
],
|
|
removeSelectedRepoFromOrgSecret: [
|
|
"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
removeSelectedRepoFromOrgVariable: [
|
|
"DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"
|
|
],
|
|
reviewCustomGatesForRun: [
|
|
"POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"
|
|
],
|
|
reviewPendingDeploymentsForRun: [
|
|
"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"
|
|
],
|
|
setAllowedActionsOrganization: [
|
|
"PUT /orgs/{org}/actions/permissions/selected-actions"
|
|
],
|
|
setAllowedActionsRepository: [
|
|
"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"
|
|
],
|
|
setCustomLabelsForSelfHostedRunnerForOrg: [
|
|
"PUT /orgs/{org}/actions/runners/{runner_id}/labels"
|
|
],
|
|
setCustomLabelsForSelfHostedRunnerForRepo: [
|
|
"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
|
|
],
|
|
setCustomOidcSubClaimForRepo: [
|
|
"PUT /repos/{owner}/{repo}/actions/oidc/customization/sub"
|
|
],
|
|
setGithubActionsDefaultWorkflowPermissionsOrganization: [
|
|
"PUT /orgs/{org}/actions/permissions/workflow"
|
|
],
|
|
setGithubActionsDefaultWorkflowPermissionsRepository: [
|
|
"PUT /repos/{owner}/{repo}/actions/permissions/workflow"
|
|
],
|
|
setGithubActionsPermissionsOrganization: [
|
|
"PUT /orgs/{org}/actions/permissions"
|
|
],
|
|
setGithubActionsPermissionsRepository: [
|
|
"PUT /repos/{owner}/{repo}/actions/permissions"
|
|
],
|
|
setSelectedReposForOrgSecret: [
|
|
"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"
|
|
],
|
|
setSelectedReposForOrgVariable: [
|
|
"PUT /orgs/{org}/actions/variables/{name}/repositories"
|
|
],
|
|
setSelectedRepositoriesEnabledGithubActionsOrganization: [
|
|
"PUT /orgs/{org}/actions/permissions/repositories"
|
|
],
|
|
setWorkflowAccessToRepository: [
|
|
"PUT /repos/{owner}/{repo}/actions/permissions/access"
|
|
],
|
|
updateEnvironmentVariable: [
|
|
"PATCH /repositories/{repository_id}/environments/{environment_name}/variables/{name}"
|
|
],
|
|
updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"],
|
|
updateRepoVariable: [
|
|
"PATCH /repos/{owner}/{repo}/actions/variables/{name}"
|
|
]
|
|
},
|
|
activity: {
|
|
checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"],
|
|
deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"],
|
|
deleteThreadSubscription: [
|
|
"DELETE /notifications/threads/{thread_id}/subscription"
|
|
],
|
|
getFeeds: ["GET /feeds"],
|
|
getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"],
|
|
getThread: ["GET /notifications/threads/{thread_id}"],
|
|
getThreadSubscriptionForAuthenticatedUser: [
|
|
"GET /notifications/threads/{thread_id}/subscription"
|
|
],
|
|
listEventsForAuthenticatedUser: ["GET /users/{username}/events"],
|
|
listNotificationsForAuthenticatedUser: ["GET /notifications"],
|
|
listOrgEventsForAuthenticatedUser: [
|
|
"GET /users/{username}/events/orgs/{org}"
|
|
],
|
|
listPublicEvents: ["GET /events"],
|
|
listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"],
|
|
listPublicEventsForUser: ["GET /users/{username}/events/public"],
|
|
listPublicOrgEvents: ["GET /orgs/{org}/events"],
|
|
listReceivedEventsForUser: ["GET /users/{username}/received_events"],
|
|
listReceivedPublicEventsForUser: [
|
|
"GET /users/{username}/received_events/public"
|
|
],
|
|
listRepoEvents: ["GET /repos/{owner}/{repo}/events"],
|
|
listRepoNotificationsForAuthenticatedUser: [
|
|
"GET /repos/{owner}/{repo}/notifications"
|
|
],
|
|
listReposStarredByAuthenticatedUser: ["GET /user/starred"],
|
|
listReposStarredByUser: ["GET /users/{username}/starred"],
|
|
listReposWatchedByUser: ["GET /users/{username}/subscriptions"],
|
|
listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"],
|
|
listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"],
|
|
listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"],
|
|
markNotificationsAsRead: ["PUT /notifications"],
|
|
markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"],
|
|
markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"],
|
|
markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"],
|
|
setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"],
|
|
setThreadSubscription: [
|
|
"PUT /notifications/threads/{thread_id}/subscription"
|
|
],
|
|
starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"],
|
|
unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"]
|
|
},
|
|
apps: {
|
|
addRepoToInstallation: [
|
|
"PUT /user/installations/{installation_id}/repositories/{repository_id}",
|
|
{},
|
|
{ renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] }
|
|
],
|
|
addRepoToInstallationForAuthenticatedUser: [
|
|
"PUT /user/installations/{installation_id}/repositories/{repository_id}"
|
|
],
|
|
checkToken: ["POST /applications/{client_id}/token"],
|
|
createFromManifest: ["POST /app-manifests/{code}/conversions"],
|
|
createInstallationAccessToken: [
|
|
"POST /app/installations/{installation_id}/access_tokens"
|
|
],
|
|
deleteAuthorization: ["DELETE /applications/{client_id}/grant"],
|
|
deleteInstallation: ["DELETE /app/installations/{installation_id}"],
|
|
deleteToken: ["DELETE /applications/{client_id}/token"],
|
|
getAuthenticated: ["GET /app"],
|
|
getBySlug: ["GET /apps/{app_slug}"],
|
|
getInstallation: ["GET /app/installations/{installation_id}"],
|
|
getOrgInstallation: ["GET /orgs/{org}/installation"],
|
|
getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"],
|
|
getSubscriptionPlanForAccount: [
|
|
"GET /marketplace_listing/accounts/{account_id}"
|
|
],
|
|
getSubscriptionPlanForAccountStubbed: [
|
|
"GET /marketplace_listing/stubbed/accounts/{account_id}"
|
|
],
|
|
getUserInstallation: ["GET /users/{username}/installation"],
|
|
getWebhookConfigForApp: ["GET /app/hook/config"],
|
|
getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"],
|
|
listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"],
|
|
listAccountsForPlanStubbed: [
|
|
"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"
|
|
],
|
|
listInstallationReposForAuthenticatedUser: [
|
|
"GET /user/installations/{installation_id}/repositories"
|
|
],
|
|
listInstallationRequestsForAuthenticatedApp: [
|
|
"GET /app/installation-requests"
|
|
],
|
|
listInstallations: ["GET /app/installations"],
|
|
listInstallationsForAuthenticatedUser: ["GET /user/installations"],
|
|
listPlans: ["GET /marketplace_listing/plans"],
|
|
listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"],
|
|
listReposAccessibleToInstallation: ["GET /installation/repositories"],
|
|
listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"],
|
|
listSubscriptionsForAuthenticatedUserStubbed: [
|
|
"GET /user/marketplace_purchases/stubbed"
|
|
],
|
|
listWebhookDeliveries: ["GET /app/hook/deliveries"],
|
|
redeliverWebhookDelivery: [
|
|
"POST /app/hook/deliveries/{delivery_id}/attempts"
|
|
],
|
|
removeRepoFromInstallation: [
|
|
"DELETE /user/installations/{installation_id}/repositories/{repository_id}",
|
|
{},
|
|
{ renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] }
|
|
],
|
|
removeRepoFromInstallationForAuthenticatedUser: [
|
|
"DELETE /user/installations/{installation_id}/repositories/{repository_id}"
|
|
],
|
|
resetToken: ["PATCH /applications/{client_id}/token"],
|
|
revokeInstallationAccessToken: ["DELETE /installation/token"],
|
|
scopeToken: ["POST /applications/{client_id}/token/scoped"],
|
|
suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"],
|
|
unsuspendInstallation: [
|
|
"DELETE /app/installations/{installation_id}/suspended"
|
|
],
|
|
updateWebhookConfigForApp: ["PATCH /app/hook/config"]
|
|
},
|
|
billing: {
|
|
getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"],
|
|
getGithubActionsBillingUser: [
|
|
"GET /users/{username}/settings/billing/actions"
|
|
],
|
|
getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"],
|
|
getGithubPackagesBillingUser: [
|
|
"GET /users/{username}/settings/billing/packages"
|
|
],
|
|
getSharedStorageBillingOrg: [
|
|
"GET /orgs/{org}/settings/billing/shared-storage"
|
|
],
|
|
getSharedStorageBillingUser: [
|
|
"GET /users/{username}/settings/billing/shared-storage"
|
|
]
|
|
},
|
|
checks: {
|
|
create: ["POST /repos/{owner}/{repo}/check-runs"],
|
|
createSuite: ["POST /repos/{owner}/{repo}/check-suites"],
|
|
get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],
|
|
getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],
|
|
listAnnotations: [
|
|
"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"
|
|
],
|
|
listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],
|
|
listForSuite: [
|
|
"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"
|
|
],
|
|
listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],
|
|
rerequestRun: [
|
|
"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"
|
|
],
|
|
rerequestSuite: [
|
|
"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"
|
|
],
|
|
setSuitesPreferences: [
|
|
"PATCH /repos/{owner}/{repo}/check-suites/preferences"
|
|
],
|
|
update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]
|
|
},
|
|
codeScanning: {
|
|
deleteAnalysis: [
|
|
"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"
|
|
],
|
|
getAlert: [
|
|
"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",
|
|
{},
|
|
{ renamedParameters: { alert_id: "alert_number" } }
|
|
],
|
|
getAnalysis: [
|
|
"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"
|
|
],
|
|
getCodeqlDatabase: [
|
|
"GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"
|
|
],
|
|
getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"],
|
|
getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],
|
|
listAlertInstances: [
|
|
"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"
|
|
],
|
|
listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"],
|
|
listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"],
|
|
listAlertsInstances: [
|
|
"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",
|
|
{},
|
|
{ renamed: ["codeScanning", "listAlertInstances"] }
|
|
],
|
|
listCodeqlDatabases: [
|
|
"GET /repos/{owner}/{repo}/code-scanning/codeql/databases"
|
|
],
|
|
listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"],
|
|
updateAlert: [
|
|
"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"
|
|
],
|
|
updateDefaultSetup: [
|
|
"PATCH /repos/{owner}/{repo}/code-scanning/default-setup"
|
|
],
|
|
uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"]
|
|
},
|
|
codesOfConduct: {
|
|
getAllCodesOfConduct: ["GET /codes_of_conduct"],
|
|
getConductCode: ["GET /codes_of_conduct/{key}"]
|
|
},
|
|
codespaces: {
|
|
addRepositoryForSecretForAuthenticatedUser: [
|
|
"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
addSelectedRepoToOrgSecret: [
|
|
"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
checkPermissionsForDevcontainer: [
|
|
"GET /repos/{owner}/{repo}/codespaces/permissions_check"
|
|
],
|
|
codespaceMachinesForAuthenticatedUser: [
|
|
"GET /user/codespaces/{codespace_name}/machines"
|
|
],
|
|
createForAuthenticatedUser: ["POST /user/codespaces"],
|
|
createOrUpdateOrgSecret: [
|
|
"PUT /orgs/{org}/codespaces/secrets/{secret_name}"
|
|
],
|
|
createOrUpdateRepoSecret: [
|
|
"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
|
|
],
|
|
createOrUpdateSecretForAuthenticatedUser: [
|
|
"PUT /user/codespaces/secrets/{secret_name}"
|
|
],
|
|
createWithPrForAuthenticatedUser: [
|
|
"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"
|
|
],
|
|
createWithRepoForAuthenticatedUser: [
|
|
"POST /repos/{owner}/{repo}/codespaces"
|
|
],
|
|
deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"],
|
|
deleteFromOrganization: [
|
|
"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"
|
|
],
|
|
deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],
|
|
deleteRepoSecret: [
|
|
"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
|
|
],
|
|
deleteSecretForAuthenticatedUser: [
|
|
"DELETE /user/codespaces/secrets/{secret_name}"
|
|
],
|
|
exportForAuthenticatedUser: [
|
|
"POST /user/codespaces/{codespace_name}/exports"
|
|
],
|
|
getCodespacesForUserInOrg: [
|
|
"GET /orgs/{org}/members/{username}/codespaces"
|
|
],
|
|
getExportDetailsForAuthenticatedUser: [
|
|
"GET /user/codespaces/{codespace_name}/exports/{export_id}"
|
|
],
|
|
getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"],
|
|
getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"],
|
|
getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"],
|
|
getPublicKeyForAuthenticatedUser: [
|
|
"GET /user/codespaces/secrets/public-key"
|
|
],
|
|
getRepoPublicKey: [
|
|
"GET /repos/{owner}/{repo}/codespaces/secrets/public-key"
|
|
],
|
|
getRepoSecret: [
|
|
"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
|
|
],
|
|
getSecretForAuthenticatedUser: [
|
|
"GET /user/codespaces/secrets/{secret_name}"
|
|
],
|
|
listDevcontainersInRepositoryForAuthenticatedUser: [
|
|
"GET /repos/{owner}/{repo}/codespaces/devcontainers"
|
|
],
|
|
listForAuthenticatedUser: ["GET /user/codespaces"],
|
|
listInOrganization: [
|
|
"GET /orgs/{org}/codespaces",
|
|
{},
|
|
{ renamedParameters: { org_id: "org" } }
|
|
],
|
|
listInRepositoryForAuthenticatedUser: [
|
|
"GET /repos/{owner}/{repo}/codespaces"
|
|
],
|
|
listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"],
|
|
listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"],
|
|
listRepositoriesForSecretForAuthenticatedUser: [
|
|
"GET /user/codespaces/secrets/{secret_name}/repositories"
|
|
],
|
|
listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"],
|
|
listSelectedReposForOrgSecret: [
|
|
"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"
|
|
],
|
|
preFlightWithRepoForAuthenticatedUser: [
|
|
"GET /repos/{owner}/{repo}/codespaces/new"
|
|
],
|
|
publishForAuthenticatedUser: [
|
|
"POST /user/codespaces/{codespace_name}/publish"
|
|
],
|
|
removeRepositoryForSecretForAuthenticatedUser: [
|
|
"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
removeSelectedRepoFromOrgSecret: [
|
|
"DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
repoMachinesForAuthenticatedUser: [
|
|
"GET /repos/{owner}/{repo}/codespaces/machines"
|
|
],
|
|
setRepositoriesForSecretForAuthenticatedUser: [
|
|
"PUT /user/codespaces/secrets/{secret_name}/repositories"
|
|
],
|
|
setSelectedReposForOrgSecret: [
|
|
"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"
|
|
],
|
|
startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"],
|
|
stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"],
|
|
stopInOrganization: [
|
|
"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"
|
|
],
|
|
updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"]
|
|
},
|
|
copilot: {
|
|
addCopilotSeatsForTeams: [
|
|
"POST /orgs/{org}/copilot/billing/selected_teams"
|
|
],
|
|
addCopilotSeatsForUsers: [
|
|
"POST /orgs/{org}/copilot/billing/selected_users"
|
|
],
|
|
cancelCopilotSeatAssignmentForTeams: [
|
|
"DELETE /orgs/{org}/copilot/billing/selected_teams"
|
|
],
|
|
cancelCopilotSeatAssignmentForUsers: [
|
|
"DELETE /orgs/{org}/copilot/billing/selected_users"
|
|
],
|
|
getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"],
|
|
getCopilotSeatDetailsForUser: [
|
|
"GET /orgs/{org}/members/{username}/copilot"
|
|
],
|
|
listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"]
|
|
},
|
|
dependabot: {
|
|
addSelectedRepoToOrgSecret: [
|
|
"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
createOrUpdateOrgSecret: [
|
|
"PUT /orgs/{org}/dependabot/secrets/{secret_name}"
|
|
],
|
|
createOrUpdateRepoSecret: [
|
|
"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
|
|
],
|
|
deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],
|
|
deleteRepoSecret: [
|
|
"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
|
|
],
|
|
getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],
|
|
getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"],
|
|
getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"],
|
|
getRepoPublicKey: [
|
|
"GET /repos/{owner}/{repo}/dependabot/secrets/public-key"
|
|
],
|
|
getRepoSecret: [
|
|
"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
|
|
],
|
|
listAlertsForEnterprise: [
|
|
"GET /enterprises/{enterprise}/dependabot/alerts"
|
|
],
|
|
listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"],
|
|
listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"],
|
|
listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"],
|
|
listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"],
|
|
listSelectedReposForOrgSecret: [
|
|
"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"
|
|
],
|
|
removeSelectedRepoFromOrgSecret: [
|
|
"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"
|
|
],
|
|
setSelectedReposForOrgSecret: [
|
|
"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"
|
|
],
|
|
updateAlert: [
|
|
"PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"
|
|
]
|
|
},
|
|
dependencyGraph: {
|
|
createRepositorySnapshot: [
|
|
"POST /repos/{owner}/{repo}/dependency-graph/snapshots"
|
|
],
|
|
diffRange: [
|
|
"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"
|
|
],
|
|
exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"]
|
|
},
|
|
emojis: { get: ["GET /emojis"] },
|
|
gists: {
|
|
checkIsStarred: ["GET /gists/{gist_id}/star"],
|
|
create: ["POST /gists"],
|
|
createComment: ["POST /gists/{gist_id}/comments"],
|
|
delete: ["DELETE /gists/{gist_id}"],
|
|
deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"],
|
|
fork: ["POST /gists/{gist_id}/forks"],
|
|
get: ["GET /gists/{gist_id}"],
|
|
getComment: ["GET /gists/{gist_id}/comments/{comment_id}"],
|
|
getRevision: ["GET /gists/{gist_id}/{sha}"],
|
|
list: ["GET /gists"],
|
|
listComments: ["GET /gists/{gist_id}/comments"],
|
|
listCommits: ["GET /gists/{gist_id}/commits"],
|
|
listForUser: ["GET /users/{username}/gists"],
|
|
listForks: ["GET /gists/{gist_id}/forks"],
|
|
listPublic: ["GET /gists/public"],
|
|
listStarred: ["GET /gists/starred"],
|
|
star: ["PUT /gists/{gist_id}/star"],
|
|
unstar: ["DELETE /gists/{gist_id}/star"],
|
|
update: ["PATCH /gists/{gist_id}"],
|
|
updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"]
|
|
},
|
|
git: {
|
|
createBlob: ["POST /repos/{owner}/{repo}/git/blobs"],
|
|
createCommit: ["POST /repos/{owner}/{repo}/git/commits"],
|
|
createRef: ["POST /repos/{owner}/{repo}/git/refs"],
|
|
createTag: ["POST /repos/{owner}/{repo}/git/tags"],
|
|
createTree: ["POST /repos/{owner}/{repo}/git/trees"],
|
|
deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],
|
|
getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],
|
|
getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],
|
|
getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"],
|
|
getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],
|
|
getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],
|
|
listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],
|
|
updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]
|
|
},
|
|
gitignore: {
|
|
getAllTemplates: ["GET /gitignore/templates"],
|
|
getTemplate: ["GET /gitignore/templates/{name}"]
|
|
},
|
|
interactions: {
|
|
getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"],
|
|
getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"],
|
|
getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"],
|
|
getRestrictionsForYourPublicRepos: [
|
|
"GET /user/interaction-limits",
|
|
{},
|
|
{ renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] }
|
|
],
|
|
removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"],
|
|
removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"],
|
|
removeRestrictionsForRepo: [
|
|
"DELETE /repos/{owner}/{repo}/interaction-limits"
|
|
],
|
|
removeRestrictionsForYourPublicRepos: [
|
|
"DELETE /user/interaction-limits",
|
|
{},
|
|
{ renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] }
|
|
],
|
|
setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"],
|
|
setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"],
|
|
setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"],
|
|
setRestrictionsForYourPublicRepos: [
|
|
"PUT /user/interaction-limits",
|
|
{},
|
|
{ renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] }
|
|
]
|
|
},
|
|
issues: {
|
|
addAssignees: [
|
|
"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"
|
|
],
|
|
addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],
|
|
checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
|
|
checkUserCanBeAssignedToIssue: [
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"
|
|
],
|
|
create: ["POST /repos/{owner}/{repo}/issues"],
|
|
createComment: [
|
|
"POST /repos/{owner}/{repo}/issues/{issue_number}/comments"
|
|
],
|
|
createLabel: ["POST /repos/{owner}/{repo}/labels"],
|
|
createMilestone: ["POST /repos/{owner}/{repo}/milestones"],
|
|
deleteComment: [
|
|
"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"
|
|
],
|
|
deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"],
|
|
deleteMilestone: [
|
|
"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"
|
|
],
|
|
get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"],
|
|
getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],
|
|
getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"],
|
|
getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"],
|
|
getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],
|
|
list: ["GET /issues"],
|
|
listAssignees: ["GET /repos/{owner}/{repo}/assignees"],
|
|
listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],
|
|
listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"],
|
|
listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],
|
|
listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"],
|
|
listEventsForTimeline: [
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"
|
|
],
|
|
listForAuthenticatedUser: ["GET /user/issues"],
|
|
listForOrg: ["GET /orgs/{org}/issues"],
|
|
listForRepo: ["GET /repos/{owner}/{repo}/issues"],
|
|
listLabelsForMilestone: [
|
|
"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"
|
|
],
|
|
listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"],
|
|
listLabelsOnIssue: [
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/labels"
|
|
],
|
|
listMilestones: ["GET /repos/{owner}/{repo}/milestones"],
|
|
lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],
|
|
removeAllLabels: [
|
|
"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"
|
|
],
|
|
removeAssignees: [
|
|
"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"
|
|
],
|
|
removeLabel: [
|
|
"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"
|
|
],
|
|
setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
|
|
unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],
|
|
update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],
|
|
updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],
|
|
updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"],
|
|
updateMilestone: [
|
|
"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"
|
|
]
|
|
},
|
|
licenses: {
|
|
get: ["GET /licenses/{license}"],
|
|
getAllCommonlyUsed: ["GET /licenses"],
|
|
getForRepo: ["GET /repos/{owner}/{repo}/license"]
|
|
},
|
|
markdown: {
|
|
render: ["POST /markdown"],
|
|
renderRaw: [
|
|
"POST /markdown/raw",
|
|
{ headers: { "content-type": "text/plain; charset=utf-8" } }
|
|
]
|
|
},
|
|
meta: {
|
|
get: ["GET /meta"],
|
|
getAllVersions: ["GET /versions"],
|
|
getOctocat: ["GET /octocat"],
|
|
getZen: ["GET /zen"],
|
|
root: ["GET /"]
|
|
},
|
|
migrations: {
|
|
cancelImport: [
|
|
"DELETE /repos/{owner}/{repo}/import",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.cancelImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#cancel-an-import"
|
|
}
|
|
],
|
|
deleteArchiveForAuthenticatedUser: [
|
|
"DELETE /user/migrations/{migration_id}/archive"
|
|
],
|
|
deleteArchiveForOrg: [
|
|
"DELETE /orgs/{org}/migrations/{migration_id}/archive"
|
|
],
|
|
downloadArchiveForOrg: [
|
|
"GET /orgs/{org}/migrations/{migration_id}/archive"
|
|
],
|
|
getArchiveForAuthenticatedUser: [
|
|
"GET /user/migrations/{migration_id}/archive"
|
|
],
|
|
getCommitAuthors: [
|
|
"GET /repos/{owner}/{repo}/import/authors",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.getCommitAuthors() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-commit-authors"
|
|
}
|
|
],
|
|
getImportStatus: [
|
|
"GET /repos/{owner}/{repo}/import",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.getImportStatus() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-an-import-status"
|
|
}
|
|
],
|
|
getLargeFiles: [
|
|
"GET /repos/{owner}/{repo}/import/large_files",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.getLargeFiles() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-large-files"
|
|
}
|
|
],
|
|
getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"],
|
|
getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"],
|
|
listForAuthenticatedUser: ["GET /user/migrations"],
|
|
listForOrg: ["GET /orgs/{org}/migrations"],
|
|
listReposForAuthenticatedUser: [
|
|
"GET /user/migrations/{migration_id}/repositories"
|
|
],
|
|
listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"],
|
|
listReposForUser: [
|
|
"GET /user/migrations/{migration_id}/repositories",
|
|
{},
|
|
{ renamed: ["migrations", "listReposForAuthenticatedUser"] }
|
|
],
|
|
mapCommitAuthor: [
|
|
"PATCH /repos/{owner}/{repo}/import/authors/{author_id}",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.mapCommitAuthor() is deprecated, see https://docs.github.com/rest/migrations/source-imports#map-a-commit-author"
|
|
}
|
|
],
|
|
setLfsPreference: [
|
|
"PATCH /repos/{owner}/{repo}/import/lfs",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.setLfsPreference() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-git-lfs-preference"
|
|
}
|
|
],
|
|
startForAuthenticatedUser: ["POST /user/migrations"],
|
|
startForOrg: ["POST /orgs/{org}/migrations"],
|
|
startImport: [
|
|
"PUT /repos/{owner}/{repo}/import",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.startImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#start-an-import"
|
|
}
|
|
],
|
|
unlockRepoForAuthenticatedUser: [
|
|
"DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"
|
|
],
|
|
unlockRepoForOrg: [
|
|
"DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"
|
|
],
|
|
updateImport: [
|
|
"PATCH /repos/{owner}/{repo}/import",
|
|
{},
|
|
{
|
|
deprecated: "octokit.rest.migrations.updateImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-an-import"
|
|
}
|
|
]
|
|
},
|
|
oidc: {
|
|
getOidcCustomSubTemplateForOrg: [
|
|
"GET /orgs/{org}/actions/oidc/customization/sub"
|
|
],
|
|
updateOidcCustomSubTemplateForOrg: [
|
|
"PUT /orgs/{org}/actions/oidc/customization/sub"
|
|
]
|
|
},
|
|
orgs: {
|
|
addSecurityManagerTeam: [
|
|
"PUT /orgs/{org}/security-managers/teams/{team_slug}"
|
|
],
|
|
assignTeamToOrgRole: [
|
|
"PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"
|
|
],
|
|
assignUserToOrgRole: [
|
|
"PUT /orgs/{org}/organization-roles/users/{username}/{role_id}"
|
|
],
|
|
blockUser: ["PUT /orgs/{org}/blocks/{username}"],
|
|
cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"],
|
|
checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"],
|
|
checkMembershipForUser: ["GET /orgs/{org}/members/{username}"],
|
|
checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"],
|
|
convertMemberToOutsideCollaborator: [
|
|
"PUT /orgs/{org}/outside_collaborators/{username}"
|
|
],
|
|
createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"],
|
|
createInvitation: ["POST /orgs/{org}/invitations"],
|
|
createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"],
|
|
createOrUpdateCustomPropertiesValuesForRepos: [
|
|
"PATCH /orgs/{org}/properties/values"
|
|
],
|
|
createOrUpdateCustomProperty: [
|
|
"PUT /orgs/{org}/properties/schema/{custom_property_name}"
|
|
],
|
|
createWebhook: ["POST /orgs/{org}/hooks"],
|
|
delete: ["DELETE /orgs/{org}"],
|
|
deleteCustomOrganizationRole: [
|
|
"DELETE /orgs/{org}/organization-roles/{role_id}"
|
|
],
|
|
deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
|
|
enableOrDisableSecurityProductOnAllOrgRepos: [
|
|
"POST /orgs/{org}/{security_product}/{enablement}"
|
|
],
|
|
get: ["GET /orgs/{org}"],
|
|
getAllCustomProperties: ["GET /orgs/{org}/properties/schema"],
|
|
getCustomProperty: [
|
|
"GET /orgs/{org}/properties/schema/{custom_property_name}"
|
|
],
|
|
getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"],
|
|
getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"],
|
|
getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"],
|
|
getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"],
|
|
getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"],
|
|
getWebhookDelivery: [
|
|
"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"
|
|
],
|
|
list: ["GET /organizations"],
|
|
listAppInstallations: ["GET /orgs/{org}/installations"],
|
|
listBlockedUsers: ["GET /orgs/{org}/blocks"],
|
|
listCustomPropertiesValuesForRepos: ["GET /orgs/{org}/properties/values"],
|
|
listFailedInvitations: ["GET /orgs/{org}/failed_invitations"],
|
|
listForAuthenticatedUser: ["GET /user/orgs"],
|
|
listForUser: ["GET /users/{username}/orgs"],
|
|
listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"],
|
|
listMembers: ["GET /orgs/{org}/members"],
|
|
listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"],
|
|
listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"],
|
|
listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"],
|
|
listOrgRoles: ["GET /orgs/{org}/organization-roles"],
|
|
listOrganizationFineGrainedPermissions: [
|
|
"GET /orgs/{org}/organization-fine-grained-permissions"
|
|
],
|
|
listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"],
|
|
listPatGrantRepositories: [
|
|
"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"
|
|
],
|
|
listPatGrantRequestRepositories: [
|
|
"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"
|
|
],
|
|
listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"],
|
|
listPatGrants: ["GET /orgs/{org}/personal-access-tokens"],
|
|
listPendingInvitations: ["GET /orgs/{org}/invitations"],
|
|
listPublicMembers: ["GET /orgs/{org}/public_members"],
|
|
listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"],
|
|
listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"],
|
|
listWebhooks: ["GET /orgs/{org}/hooks"],
|
|
patchCustomOrganizationRole: [
|
|
"PATCH /orgs/{org}/organization-roles/{role_id}"
|
|
],
|
|
pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
|
|
redeliverWebhookDelivery: [
|
|
"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"
|
|
],
|
|
removeCustomProperty: [
|
|
"DELETE /orgs/{org}/properties/schema/{custom_property_name}"
|
|
],
|
|
removeMember: ["DELETE /orgs/{org}/members/{username}"],
|
|
removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"],
|
|
removeOutsideCollaborator: [
|
|
"DELETE /orgs/{org}/outside_collaborators/{username}"
|
|
],
|
|
removePublicMembershipForAuthenticatedUser: [
|
|
"DELETE /orgs/{org}/public_members/{username}"
|
|
],
|
|
removeSecurityManagerTeam: [
|
|
"DELETE /orgs/{org}/security-managers/teams/{team_slug}"
|
|
],
|
|
reviewPatGrantRequest: [
|
|
"POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"
|
|
],
|
|
reviewPatGrantRequestsInBulk: [
|
|
"POST /orgs/{org}/personal-access-token-requests"
|
|
],
|
|
revokeAllOrgRolesTeam: [
|
|
"DELETE /orgs/{org}/organization-roles/teams/{team_slug}"
|
|
],
|
|
revokeAllOrgRolesUser: [
|
|
"DELETE /orgs/{org}/organization-roles/users/{username}"
|
|
],
|
|
revokeOrgRoleTeam: [
|
|
"DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"
|
|
],
|
|
revokeOrgRoleUser: [
|
|
"DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}"
|
|
],
|
|
setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"],
|
|
setPublicMembershipForAuthenticatedUser: [
|
|
"PUT /orgs/{org}/public_members/{username}"
|
|
],
|
|
unblockUser: ["DELETE /orgs/{org}/blocks/{username}"],
|
|
update: ["PATCH /orgs/{org}"],
|
|
updateMembershipForAuthenticatedUser: [
|
|
"PATCH /user/memberships/orgs/{org}"
|
|
],
|
|
updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"],
|
|
updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"],
|
|
updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
|
|
updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"]
|
|
},
|
|
packages: {
|
|
deletePackageForAuthenticatedUser: [
|
|
"DELETE /user/packages/{package_type}/{package_name}"
|
|
],
|
|
deletePackageForOrg: [
|
|
"DELETE /orgs/{org}/packages/{package_type}/{package_name}"
|
|
],
|
|
deletePackageForUser: [
|
|
"DELETE /users/{username}/packages/{package_type}/{package_name}"
|
|
],
|
|
deletePackageVersionForAuthenticatedUser: [
|
|
"DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"
|
|
],
|
|
deletePackageVersionForOrg: [
|
|
"DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"
|
|
],
|
|
deletePackageVersionForUser: [
|
|
"DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"
|
|
],
|
|
getAllPackageVersionsForAPackageOwnedByAnOrg: [
|
|
"GET /orgs/{org}/packages/{package_type}/{package_name}/versions",
|
|
{},
|
|
{ renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] }
|
|
],
|
|
getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [
|
|
"GET /user/packages/{package_type}/{package_name}/versions",
|
|
{},
|
|
{
|
|
renamed: [
|
|
"packages",
|
|
"getAllPackageVersionsForPackageOwnedByAuthenticatedUser"
|
|
]
|
|
}
|
|
],
|
|
getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [
|
|
"GET /user/packages/{package_type}/{package_name}/versions"
|
|
],
|
|
getAllPackageVersionsForPackageOwnedByOrg: [
|
|
"GET /orgs/{org}/packages/{package_type}/{package_name}/versions"
|
|
],
|
|
getAllPackageVersionsForPackageOwnedByUser: [
|
|
"GET /users/{username}/packages/{package_type}/{package_name}/versions"
|
|
],
|
|
getPackageForAuthenticatedUser: [
|
|
"GET /user/packages/{package_type}/{package_name}"
|
|
],
|
|
getPackageForOrganization: [
|
|
"GET /orgs/{org}/packages/{package_type}/{package_name}"
|
|
],
|
|
getPackageForUser: [
|
|
"GET /users/{username}/packages/{package_type}/{package_name}"
|
|
],
|
|
getPackageVersionForAuthenticatedUser: [
|
|
"GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"
|
|
],
|
|
getPackageVersionForOrganization: [
|
|
"GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"
|
|
],
|
|
getPackageVersionForUser: [
|
|
"GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"
|
|
],
|
|
listDockerMigrationConflictingPackagesForAuthenticatedUser: [
|
|
"GET /user/docker/conflicts"
|
|
],
|
|
listDockerMigrationConflictingPackagesForOrganization: [
|
|
"GET /orgs/{org}/docker/conflicts"
|
|
],
|
|
listDockerMigrationConflictingPackagesForUser: [
|
|
"GET /users/{username}/docker/conflicts"
|
|
],
|
|
listPackagesForAuthenticatedUser: ["GET /user/packages"],
|
|
listPackagesForOrganization: ["GET /orgs/{org}/packages"],
|
|
listPackagesForUser: ["GET /users/{username}/packages"],
|
|
restorePackageForAuthenticatedUser: [
|
|
"POST /user/packages/{package_type}/{package_name}/restore{?token}"
|
|
],
|
|
restorePackageForOrg: [
|
|
"POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"
|
|
],
|
|
restorePackageForUser: [
|
|
"POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"
|
|
],
|
|
restorePackageVersionForAuthenticatedUser: [
|
|
"POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
|
|
],
|
|
restorePackageVersionForOrg: [
|
|
"POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
|
|
],
|
|
restorePackageVersionForUser: [
|
|
"POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
|
|
]
|
|
},
|
|
projects: {
|
|
addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"],
|
|
createCard: ["POST /projects/columns/{column_id}/cards"],
|
|
createColumn: ["POST /projects/{project_id}/columns"],
|
|
createForAuthenticatedUser: ["POST /user/projects"],
|
|
createForOrg: ["POST /orgs/{org}/projects"],
|
|
createForRepo: ["POST /repos/{owner}/{repo}/projects"],
|
|
delete: ["DELETE /projects/{project_id}"],
|
|
deleteCard: ["DELETE /projects/columns/cards/{card_id}"],
|
|
deleteColumn: ["DELETE /projects/columns/{column_id}"],
|
|
get: ["GET /projects/{project_id}"],
|
|
getCard: ["GET /projects/columns/cards/{card_id}"],
|
|
getColumn: ["GET /projects/columns/{column_id}"],
|
|
getPermissionForUser: [
|
|
"GET /projects/{project_id}/collaborators/{username}/permission"
|
|
],
|
|
listCards: ["GET /projects/columns/{column_id}/cards"],
|
|
listCollaborators: ["GET /projects/{project_id}/collaborators"],
|
|
listColumns: ["GET /projects/{project_id}/columns"],
|
|
listForOrg: ["GET /orgs/{org}/projects"],
|
|
listForRepo: ["GET /repos/{owner}/{repo}/projects"],
|
|
listForUser: ["GET /users/{username}/projects"],
|
|
moveCard: ["POST /projects/columns/cards/{card_id}/moves"],
|
|
moveColumn: ["POST /projects/columns/{column_id}/moves"],
|
|
removeCollaborator: [
|
|
"DELETE /projects/{project_id}/collaborators/{username}"
|
|
],
|
|
update: ["PATCH /projects/{project_id}"],
|
|
updateCard: ["PATCH /projects/columns/cards/{card_id}"],
|
|
updateColumn: ["PATCH /projects/columns/{column_id}"]
|
|
},
|
|
pulls: {
|
|
checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
|
|
create: ["POST /repos/{owner}/{repo}/pulls"],
|
|
createReplyForReviewComment: [
|
|
"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"
|
|
],
|
|
createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
|
|
createReviewComment: [
|
|
"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"
|
|
],
|
|
deletePendingReview: [
|
|
"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
|
|
],
|
|
deleteReviewComment: [
|
|
"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"
|
|
],
|
|
dismissReview: [
|
|
"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"
|
|
],
|
|
get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"],
|
|
getReview: [
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
|
|
],
|
|
getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
|
|
list: ["GET /repos/{owner}/{repo}/pulls"],
|
|
listCommentsForReview: [
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"
|
|
],
|
|
listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],
|
|
listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],
|
|
listRequestedReviewers: [
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
|
|
],
|
|
listReviewComments: [
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"
|
|
],
|
|
listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
|
|
listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
|
|
merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
|
|
removeRequestedReviewers: [
|
|
"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
|
|
],
|
|
requestReviewers: [
|
|
"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
|
|
],
|
|
submitReview: [
|
|
"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"
|
|
],
|
|
update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],
|
|
updateBranch: [
|
|
"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"
|
|
],
|
|
updateReview: [
|
|
"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
|
|
],
|
|
updateReviewComment: [
|
|
"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"
|
|
]
|
|
},
|
|
rateLimit: { get: ["GET /rate_limit"] },
|
|
reactions: {
|
|
createForCommitComment: [
|
|
"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"
|
|
],
|
|
createForIssue: [
|
|
"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"
|
|
],
|
|
createForIssueComment: [
|
|
"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"
|
|
],
|
|
createForPullRequestReviewComment: [
|
|
"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"
|
|
],
|
|
createForRelease: [
|
|
"POST /repos/{owner}/{repo}/releases/{release_id}/reactions"
|
|
],
|
|
createForTeamDiscussionCommentInOrg: [
|
|
"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"
|
|
],
|
|
createForTeamDiscussionInOrg: [
|
|
"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"
|
|
],
|
|
deleteForCommitComment: [
|
|
"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"
|
|
],
|
|
deleteForIssue: [
|
|
"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"
|
|
],
|
|
deleteForIssueComment: [
|
|
"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"
|
|
],
|
|
deleteForPullRequestComment: [
|
|
"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"
|
|
],
|
|
deleteForRelease: [
|
|
"DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"
|
|
],
|
|
deleteForTeamDiscussion: [
|
|
"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"
|
|
],
|
|
deleteForTeamDiscussionComment: [
|
|
"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"
|
|
],
|
|
listForCommitComment: [
|
|
"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"
|
|
],
|
|
listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],
|
|
listForIssueComment: [
|
|
"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"
|
|
],
|
|
listForPullRequestReviewComment: [
|
|
"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"
|
|
],
|
|
listForRelease: [
|
|
"GET /repos/{owner}/{repo}/releases/{release_id}/reactions"
|
|
],
|
|
listForTeamDiscussionCommentInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"
|
|
],
|
|
listForTeamDiscussionInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"
|
|
]
|
|
},
|
|
repos: {
|
|
acceptInvitation: [
|
|
"PATCH /user/repository_invitations/{invitation_id}",
|
|
{},
|
|
{ renamed: ["repos", "acceptInvitationForAuthenticatedUser"] }
|
|
],
|
|
acceptInvitationForAuthenticatedUser: [
|
|
"PATCH /user/repository_invitations/{invitation_id}"
|
|
],
|
|
addAppAccessRestrictions: [
|
|
"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
|
|
{},
|
|
{ mapToData: "apps" }
|
|
],
|
|
addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
|
|
addStatusCheckContexts: [
|
|
"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
|
|
{},
|
|
{ mapToData: "contexts" }
|
|
],
|
|
addTeamAccessRestrictions: [
|
|
"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
|
|
{},
|
|
{ mapToData: "teams" }
|
|
],
|
|
addUserAccessRestrictions: [
|
|
"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
|
|
{},
|
|
{ mapToData: "users" }
|
|
],
|
|
cancelPagesDeployment: [
|
|
"POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel"
|
|
],
|
|
checkAutomatedSecurityFixes: [
|
|
"GET /repos/{owner}/{repo}/automated-security-fixes"
|
|
],
|
|
checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"],
|
|
checkVulnerabilityAlerts: [
|
|
"GET /repos/{owner}/{repo}/vulnerability-alerts"
|
|
],
|
|
codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"],
|
|
compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
|
|
compareCommitsWithBasehead: [
|
|
"GET /repos/{owner}/{repo}/compare/{basehead}"
|
|
],
|
|
createAutolink: ["POST /repos/{owner}/{repo}/autolinks"],
|
|
createCommitComment: [
|
|
"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"
|
|
],
|
|
createCommitSignatureProtection: [
|
|
"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
|
|
],
|
|
createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
|
|
createDeployKey: ["POST /repos/{owner}/{repo}/keys"],
|
|
createDeployment: ["POST /repos/{owner}/{repo}/deployments"],
|
|
createDeploymentBranchPolicy: [
|
|
"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"
|
|
],
|
|
createDeploymentProtectionRule: [
|
|
"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"
|
|
],
|
|
createDeploymentStatus: [
|
|
"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"
|
|
],
|
|
createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"],
|
|
createForAuthenticatedUser: ["POST /user/repos"],
|
|
createFork: ["POST /repos/{owner}/{repo}/forks"],
|
|
createInOrg: ["POST /orgs/{org}/repos"],
|
|
createOrUpdateCustomPropertiesValues: [
|
|
"PATCH /repos/{owner}/{repo}/properties/values"
|
|
],
|
|
createOrUpdateEnvironment: [
|
|
"PUT /repos/{owner}/{repo}/environments/{environment_name}"
|
|
],
|
|
createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"],
|
|
createOrgRuleset: ["POST /orgs/{org}/rulesets"],
|
|
createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"],
|
|
createPagesSite: ["POST /repos/{owner}/{repo}/pages"],
|
|
createRelease: ["POST /repos/{owner}/{repo}/releases"],
|
|
createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"],
|
|
createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"],
|
|
createUsingTemplate: [
|
|
"POST /repos/{template_owner}/{template_repo}/generate"
|
|
],
|
|
createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
|
|
declineInvitation: [
|
|
"DELETE /user/repository_invitations/{invitation_id}",
|
|
{},
|
|
{ renamed: ["repos", "declineInvitationForAuthenticatedUser"] }
|
|
],
|
|
declineInvitationForAuthenticatedUser: [
|
|
"DELETE /user/repository_invitations/{invitation_id}"
|
|
],
|
|
delete: ["DELETE /repos/{owner}/{repo}"],
|
|
deleteAccessRestrictions: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"
|
|
],
|
|
deleteAdminBranchProtection: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
|
|
],
|
|
deleteAnEnvironment: [
|
|
"DELETE /repos/{owner}/{repo}/environments/{environment_name}"
|
|
],
|
|
deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],
|
|
deleteBranchProtection: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection"
|
|
],
|
|
deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],
|
|
deleteCommitSignatureProtection: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
|
|
],
|
|
deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
|
|
deleteDeployment: [
|
|
"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"
|
|
],
|
|
deleteDeploymentBranchPolicy: [
|
|
"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
|
|
],
|
|
deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"],
|
|
deleteInvitation: [
|
|
"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"
|
|
],
|
|
deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"],
|
|
deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"],
|
|
deletePullRequestReviewProtection: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
|
|
],
|
|
deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"],
|
|
deleteReleaseAsset: [
|
|
"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"
|
|
],
|
|
deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
|
|
deleteTagProtection: [
|
|
"DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"
|
|
],
|
|
deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
|
|
disableAutomatedSecurityFixes: [
|
|
"DELETE /repos/{owner}/{repo}/automated-security-fixes"
|
|
],
|
|
disableDeploymentProtectionRule: [
|
|
"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"
|
|
],
|
|
disablePrivateVulnerabilityReporting: [
|
|
"DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"
|
|
],
|
|
disableVulnerabilityAlerts: [
|
|
"DELETE /repos/{owner}/{repo}/vulnerability-alerts"
|
|
],
|
|
downloadArchive: [
|
|
"GET /repos/{owner}/{repo}/zipball/{ref}",
|
|
{},
|
|
{ renamed: ["repos", "downloadZipballArchive"] }
|
|
],
|
|
downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"],
|
|
downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"],
|
|
enableAutomatedSecurityFixes: [
|
|
"PUT /repos/{owner}/{repo}/automated-security-fixes"
|
|
],
|
|
enablePrivateVulnerabilityReporting: [
|
|
"PUT /repos/{owner}/{repo}/private-vulnerability-reporting"
|
|
],
|
|
enableVulnerabilityAlerts: [
|
|
"PUT /repos/{owner}/{repo}/vulnerability-alerts"
|
|
],
|
|
generateReleaseNotes: [
|
|
"POST /repos/{owner}/{repo}/releases/generate-notes"
|
|
],
|
|
get: ["GET /repos/{owner}/{repo}"],
|
|
getAccessRestrictions: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"
|
|
],
|
|
getAdminBranchProtection: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
|
|
],
|
|
getAllDeploymentProtectionRules: [
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"
|
|
],
|
|
getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"],
|
|
getAllStatusCheckContexts: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"
|
|
],
|
|
getAllTopics: ["GET /repos/{owner}/{repo}/topics"],
|
|
getAppsWithAccessToProtectedBranch: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"
|
|
],
|
|
getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],
|
|
getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"],
|
|
getBranchProtection: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection"
|
|
],
|
|
getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"],
|
|
getClones: ["GET /repos/{owner}/{repo}/traffic/clones"],
|
|
getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"],
|
|
getCollaboratorPermissionLevel: [
|
|
"GET /repos/{owner}/{repo}/collaborators/{username}/permission"
|
|
],
|
|
getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"],
|
|
getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"],
|
|
getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"],
|
|
getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"],
|
|
getCommitSignatureProtection: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
|
|
],
|
|
getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
|
|
getContent: ["GET /repos/{owner}/{repo}/contents/{path}"],
|
|
getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"],
|
|
getCustomDeploymentProtectionRule: [
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"
|
|
],
|
|
getCustomPropertiesValues: ["GET /repos/{owner}/{repo}/properties/values"],
|
|
getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"],
|
|
getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],
|
|
getDeploymentBranchPolicy: [
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
|
|
],
|
|
getDeploymentStatus: [
|
|
"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"
|
|
],
|
|
getEnvironment: [
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}"
|
|
],
|
|
getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"],
|
|
getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"],
|
|
getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"],
|
|
getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"],
|
|
getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"],
|
|
getOrgRulesets: ["GET /orgs/{org}/rulesets"],
|
|
getPages: ["GET /repos/{owner}/{repo}/pages"],
|
|
getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],
|
|
getPagesDeployment: [
|
|
"GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}"
|
|
],
|
|
getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"],
|
|
getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"],
|
|
getPullRequestReviewProtection: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
|
|
],
|
|
getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"],
|
|
getReadme: ["GET /repos/{owner}/{repo}/readme"],
|
|
getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"],
|
|
getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"],
|
|
getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],
|
|
getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"],
|
|
getRepoRuleSuite: [
|
|
"GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}"
|
|
],
|
|
getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"],
|
|
getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
|
|
getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"],
|
|
getStatusChecksProtection: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
|
|
],
|
|
getTeamsWithAccessToProtectedBranch: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"
|
|
],
|
|
getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"],
|
|
getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"],
|
|
getUsersWithAccessToProtectedBranch: [
|
|
"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"
|
|
],
|
|
getViews: ["GET /repos/{owner}/{repo}/traffic/views"],
|
|
getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
|
|
getWebhookConfigForRepo: [
|
|
"GET /repos/{owner}/{repo}/hooks/{hook_id}/config"
|
|
],
|
|
getWebhookDelivery: [
|
|
"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"
|
|
],
|
|
listActivities: ["GET /repos/{owner}/{repo}/activity"],
|
|
listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"],
|
|
listBranches: ["GET /repos/{owner}/{repo}/branches"],
|
|
listBranchesForHeadCommit: [
|
|
"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"
|
|
],
|
|
listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"],
|
|
listCommentsForCommit: [
|
|
"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"
|
|
],
|
|
listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"],
|
|
listCommitStatusesForRef: [
|
|
"GET /repos/{owner}/{repo}/commits/{ref}/statuses"
|
|
],
|
|
listCommits: ["GET /repos/{owner}/{repo}/commits"],
|
|
listContributors: ["GET /repos/{owner}/{repo}/contributors"],
|
|
listCustomDeploymentRuleIntegrations: [
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"
|
|
],
|
|
listDeployKeys: ["GET /repos/{owner}/{repo}/keys"],
|
|
listDeploymentBranchPolicies: [
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"
|
|
],
|
|
listDeploymentStatuses: [
|
|
"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"
|
|
],
|
|
listDeployments: ["GET /repos/{owner}/{repo}/deployments"],
|
|
listForAuthenticatedUser: ["GET /user/repos"],
|
|
listForOrg: ["GET /orgs/{org}/repos"],
|
|
listForUser: ["GET /users/{username}/repos"],
|
|
listForks: ["GET /repos/{owner}/{repo}/forks"],
|
|
listInvitations: ["GET /repos/{owner}/{repo}/invitations"],
|
|
listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"],
|
|
listLanguages: ["GET /repos/{owner}/{repo}/languages"],
|
|
listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"],
|
|
listPublic: ["GET /repositories"],
|
|
listPullRequestsAssociatedWithCommit: [
|
|
"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"
|
|
],
|
|
listReleaseAssets: [
|
|
"GET /repos/{owner}/{repo}/releases/{release_id}/assets"
|
|
],
|
|
listReleases: ["GET /repos/{owner}/{repo}/releases"],
|
|
listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"],
|
|
listTags: ["GET /repos/{owner}/{repo}/tags"],
|
|
listTeams: ["GET /repos/{owner}/{repo}/teams"],
|
|
listWebhookDeliveries: [
|
|
"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"
|
|
],
|
|
listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
|
|
merge: ["POST /repos/{owner}/{repo}/merges"],
|
|
mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"],
|
|
pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
|
|
redeliverWebhookDelivery: [
|
|
"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"
|
|
],
|
|
removeAppAccessRestrictions: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
|
|
{},
|
|
{ mapToData: "apps" }
|
|
],
|
|
removeCollaborator: [
|
|
"DELETE /repos/{owner}/{repo}/collaborators/{username}"
|
|
],
|
|
removeStatusCheckContexts: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
|
|
{},
|
|
{ mapToData: "contexts" }
|
|
],
|
|
removeStatusCheckProtection: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
|
|
],
|
|
removeTeamAccessRestrictions: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
|
|
{},
|
|
{ mapToData: "teams" }
|
|
],
|
|
removeUserAccessRestrictions: [
|
|
"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
|
|
{},
|
|
{ mapToData: "users" }
|
|
],
|
|
renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"],
|
|
replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"],
|
|
requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
|
|
setAdminBranchProtection: [
|
|
"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
|
|
],
|
|
setAppAccessRestrictions: [
|
|
"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
|
|
{},
|
|
{ mapToData: "apps" }
|
|
],
|
|
setStatusCheckContexts: [
|
|
"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
|
|
{},
|
|
{ mapToData: "contexts" }
|
|
],
|
|
setTeamAccessRestrictions: [
|
|
"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
|
|
{},
|
|
{ mapToData: "teams" }
|
|
],
|
|
setUserAccessRestrictions: [
|
|
"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
|
|
{},
|
|
{ mapToData: "users" }
|
|
],
|
|
testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
|
|
transfer: ["POST /repos/{owner}/{repo}/transfer"],
|
|
update: ["PATCH /repos/{owner}/{repo}"],
|
|
updateBranchProtection: [
|
|
"PUT /repos/{owner}/{repo}/branches/{branch}/protection"
|
|
],
|
|
updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],
|
|
updateDeploymentBranchPolicy: [
|
|
"PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
|
|
],
|
|
updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"],
|
|
updateInvitation: [
|
|
"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"
|
|
],
|
|
updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"],
|
|
updatePullRequestReviewProtection: [
|
|
"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
|
|
],
|
|
updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"],
|
|
updateReleaseAsset: [
|
|
"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"
|
|
],
|
|
updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
|
|
updateStatusCheckPotection: [
|
|
"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",
|
|
{},
|
|
{ renamed: ["repos", "updateStatusCheckProtection"] }
|
|
],
|
|
updateStatusCheckProtection: [
|
|
"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
|
|
],
|
|
updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
|
|
updateWebhookConfigForRepo: [
|
|
"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"
|
|
],
|
|
uploadReleaseAsset: [
|
|
"POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",
|
|
{ baseUrl: "https://uploads.github.com" }
|
|
]
|
|
},
|
|
search: {
|
|
code: ["GET /search/code"],
|
|
commits: ["GET /search/commits"],
|
|
issuesAndPullRequests: ["GET /search/issues"],
|
|
labels: ["GET /search/labels"],
|
|
repos: ["GET /search/repositories"],
|
|
topics: ["GET /search/topics"],
|
|
users: ["GET /search/users"]
|
|
},
|
|
secretScanning: {
|
|
getAlert: [
|
|
"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"
|
|
],
|
|
listAlertsForEnterprise: [
|
|
"GET /enterprises/{enterprise}/secret-scanning/alerts"
|
|
],
|
|
listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"],
|
|
listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
|
|
listLocationsForAlert: [
|
|
"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"
|
|
],
|
|
updateAlert: [
|
|
"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"
|
|
]
|
|
},
|
|
securityAdvisories: {
|
|
createFork: [
|
|
"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks"
|
|
],
|
|
createPrivateVulnerabilityReport: [
|
|
"POST /repos/{owner}/{repo}/security-advisories/reports"
|
|
],
|
|
createRepositoryAdvisory: [
|
|
"POST /repos/{owner}/{repo}/security-advisories"
|
|
],
|
|
createRepositoryAdvisoryCveRequest: [
|
|
"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"
|
|
],
|
|
getGlobalAdvisory: ["GET /advisories/{ghsa_id}"],
|
|
getRepositoryAdvisory: [
|
|
"GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"
|
|
],
|
|
listGlobalAdvisories: ["GET /advisories"],
|
|
listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"],
|
|
listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"],
|
|
updateRepositoryAdvisory: [
|
|
"PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"
|
|
]
|
|
},
|
|
teams: {
|
|
addOrUpdateMembershipForUserInOrg: [
|
|
"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"
|
|
],
|
|
addOrUpdateProjectPermissionsInOrg: [
|
|
"PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"
|
|
],
|
|
addOrUpdateRepoPermissionsInOrg: [
|
|
"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
|
|
],
|
|
checkPermissionsForProjectInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"
|
|
],
|
|
checkPermissionsForRepoInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
|
|
],
|
|
create: ["POST /orgs/{org}/teams"],
|
|
createDiscussionCommentInOrg: [
|
|
"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"
|
|
],
|
|
createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"],
|
|
deleteDiscussionCommentInOrg: [
|
|
"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
|
|
],
|
|
deleteDiscussionInOrg: [
|
|
"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
|
|
],
|
|
deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"],
|
|
getByName: ["GET /orgs/{org}/teams/{team_slug}"],
|
|
getDiscussionCommentInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
|
|
],
|
|
getDiscussionInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
|
|
],
|
|
getMembershipForUserInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/memberships/{username}"
|
|
],
|
|
list: ["GET /orgs/{org}/teams"],
|
|
listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"],
|
|
listDiscussionCommentsInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"
|
|
],
|
|
listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"],
|
|
listForAuthenticatedUser: ["GET /user/teams"],
|
|
listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"],
|
|
listPendingInvitationsInOrg: [
|
|
"GET /orgs/{org}/teams/{team_slug}/invitations"
|
|
],
|
|
listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"],
|
|
listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"],
|
|
removeMembershipForUserInOrg: [
|
|
"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"
|
|
],
|
|
removeProjectInOrg: [
|
|
"DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"
|
|
],
|
|
removeRepoInOrg: [
|
|
"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
|
|
],
|
|
updateDiscussionCommentInOrg: [
|
|
"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
|
|
],
|
|
updateDiscussionInOrg: [
|
|
"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
|
|
],
|
|
updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"]
|
|
},
|
|
users: {
|
|
addEmailForAuthenticated: [
|
|
"POST /user/emails",
|
|
{},
|
|
{ renamed: ["users", "addEmailForAuthenticatedUser"] }
|
|
],
|
|
addEmailForAuthenticatedUser: ["POST /user/emails"],
|
|
addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"],
|
|
block: ["PUT /user/blocks/{username}"],
|
|
checkBlocked: ["GET /user/blocks/{username}"],
|
|
checkFollowingForUser: ["GET /users/{username}/following/{target_user}"],
|
|
checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"],
|
|
createGpgKeyForAuthenticated: [
|
|
"POST /user/gpg_keys",
|
|
{},
|
|
{ renamed: ["users", "createGpgKeyForAuthenticatedUser"] }
|
|
],
|
|
createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"],
|
|
createPublicSshKeyForAuthenticated: [
|
|
"POST /user/keys",
|
|
{},
|
|
{ renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] }
|
|
],
|
|
createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"],
|
|
createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"],
|
|
deleteEmailForAuthenticated: [
|
|
"DELETE /user/emails",
|
|
{},
|
|
{ renamed: ["users", "deleteEmailForAuthenticatedUser"] }
|
|
],
|
|
deleteEmailForAuthenticatedUser: ["DELETE /user/emails"],
|
|
deleteGpgKeyForAuthenticated: [
|
|
"DELETE /user/gpg_keys/{gpg_key_id}",
|
|
{},
|
|
{ renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] }
|
|
],
|
|
deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"],
|
|
deletePublicSshKeyForAuthenticated: [
|
|
"DELETE /user/keys/{key_id}",
|
|
{},
|
|
{ renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] }
|
|
],
|
|
deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"],
|
|
deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"],
|
|
deleteSshSigningKeyForAuthenticatedUser: [
|
|
"DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"
|
|
],
|
|
follow: ["PUT /user/following/{username}"],
|
|
getAuthenticated: ["GET /user"],
|
|
getByUsername: ["GET /users/{username}"],
|
|
getContextForUser: ["GET /users/{username}/hovercard"],
|
|
getGpgKeyForAuthenticated: [
|
|
"GET /user/gpg_keys/{gpg_key_id}",
|
|
{},
|
|
{ renamed: ["users", "getGpgKeyForAuthenticatedUser"] }
|
|
],
|
|
getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"],
|
|
getPublicSshKeyForAuthenticated: [
|
|
"GET /user/keys/{key_id}",
|
|
{},
|
|
{ renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] }
|
|
],
|
|
getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"],
|
|
getSshSigningKeyForAuthenticatedUser: [
|
|
"GET /user/ssh_signing_keys/{ssh_signing_key_id}"
|
|
],
|
|
list: ["GET /users"],
|
|
listBlockedByAuthenticated: [
|
|
"GET /user/blocks",
|
|
{},
|
|
{ renamed: ["users", "listBlockedByAuthenticatedUser"] }
|
|
],
|
|
listBlockedByAuthenticatedUser: ["GET /user/blocks"],
|
|
listEmailsForAuthenticated: [
|
|
"GET /user/emails",
|
|
{},
|
|
{ renamed: ["users", "listEmailsForAuthenticatedUser"] }
|
|
],
|
|
listEmailsForAuthenticatedUser: ["GET /user/emails"],
|
|
listFollowedByAuthenticated: [
|
|
"GET /user/following",
|
|
{},
|
|
{ renamed: ["users", "listFollowedByAuthenticatedUser"] }
|
|
],
|
|
listFollowedByAuthenticatedUser: ["GET /user/following"],
|
|
listFollowersForAuthenticatedUser: ["GET /user/followers"],
|
|
listFollowersForUser: ["GET /users/{username}/followers"],
|
|
listFollowingForUser: ["GET /users/{username}/following"],
|
|
listGpgKeysForAuthenticated: [
|
|
"GET /user/gpg_keys",
|
|
{},
|
|
{ renamed: ["users", "listGpgKeysForAuthenticatedUser"] }
|
|
],
|
|
listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"],
|
|
listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
|
|
listPublicEmailsForAuthenticated: [
|
|
"GET /user/public_emails",
|
|
{},
|
|
{ renamed: ["users", "listPublicEmailsForAuthenticatedUser"] }
|
|
],
|
|
listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"],
|
|
listPublicKeysForUser: ["GET /users/{username}/keys"],
|
|
listPublicSshKeysForAuthenticated: [
|
|
"GET /user/keys",
|
|
{},
|
|
{ renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] }
|
|
],
|
|
listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"],
|
|
listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"],
|
|
listSocialAccountsForUser: ["GET /users/{username}/social_accounts"],
|
|
listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"],
|
|
listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"],
|
|
setPrimaryEmailVisibilityForAuthenticated: [
|
|
"PATCH /user/email/visibility",
|
|
{},
|
|
{ renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] }
|
|
],
|
|
setPrimaryEmailVisibilityForAuthenticatedUser: [
|
|
"PATCH /user/email/visibility"
|
|
],
|
|
unblock: ["DELETE /user/blocks/{username}"],
|
|
unfollow: ["DELETE /user/following/{username}"],
|
|
updateAuthenticated: ["PATCH /user"]
|
|
}
|
|
};
|
|
var endpoints_default = Endpoints;
|
|
var endpointMethodsMap = new Map;
|
|
for (const [scope, endpoints] of Object.entries(endpoints_default)) {
|
|
for (const [methodName, endpoint] of Object.entries(endpoints)) {
|
|
const [route, defaults, decorations] = endpoint;
|
|
const [method, url] = route.split(/ /);
|
|
const endpointDefaults = Object.assign({
|
|
method,
|
|
url
|
|
}, defaults);
|
|
if (!endpointMethodsMap.has(scope)) {
|
|
endpointMethodsMap.set(scope, new Map);
|
|
}
|
|
endpointMethodsMap.get(scope).set(methodName, {
|
|
scope,
|
|
methodName,
|
|
endpointDefaults,
|
|
decorations
|
|
});
|
|
}
|
|
}
|
|
var handler = {
|
|
has({ scope }, methodName) {
|
|
return endpointMethodsMap.get(scope).has(methodName);
|
|
},
|
|
getOwnPropertyDescriptor(target, methodName) {
|
|
return {
|
|
value: this.get(target, methodName),
|
|
configurable: true,
|
|
writable: true,
|
|
enumerable: true
|
|
};
|
|
},
|
|
defineProperty(target, methodName, descriptor) {
|
|
Object.defineProperty(target.cache, methodName, descriptor);
|
|
return true;
|
|
},
|
|
deleteProperty(target, methodName) {
|
|
delete target.cache[methodName];
|
|
return true;
|
|
},
|
|
ownKeys({ scope }) {
|
|
return [...endpointMethodsMap.get(scope).keys()];
|
|
},
|
|
set(target, methodName, value) {
|
|
return target.cache[methodName] = value;
|
|
},
|
|
get({ octokit, scope, cache }, methodName) {
|
|
if (cache[methodName]) {
|
|
return cache[methodName];
|
|
}
|
|
const method = endpointMethodsMap.get(scope).get(methodName);
|
|
if (!method) {
|
|
return;
|
|
}
|
|
const { endpointDefaults, decorations } = method;
|
|
if (decorations) {
|
|
cache[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations);
|
|
} else {
|
|
cache[methodName] = octokit.request.defaults(endpointDefaults);
|
|
}
|
|
return cache[methodName];
|
|
}
|
|
};
|
|
restEndpointMethods.VERSION = VERSION;
|
|
legacyRestEndpointMethods.VERSION = VERSION;
|
|
});
|
|
|
|
// node_modules/@octokit/plugin-paginate-rest/dist-node/index.js
|
|
var require_dist_node10 = __commonJS((exports, module) => {
|
|
var normalizePaginatedListResponse = function(response) {
|
|
if (!response.data) {
|
|
return {
|
|
...response,
|
|
data: []
|
|
};
|
|
}
|
|
const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
|
|
if (!responseNeedsNormalization)
|
|
return response;
|
|
const incompleteResults = response.data.incomplete_results;
|
|
const repositorySelection = response.data.repository_selection;
|
|
const totalCount = response.data.total_count;
|
|
delete response.data.incomplete_results;
|
|
delete response.data.repository_selection;
|
|
delete response.data.total_count;
|
|
const namespaceKey = Object.keys(response.data)[0];
|
|
const data = response.data[namespaceKey];
|
|
response.data = data;
|
|
if (typeof incompleteResults !== "undefined") {
|
|
response.data.incomplete_results = incompleteResults;
|
|
}
|
|
if (typeof repositorySelection !== "undefined") {
|
|
response.data.repository_selection = repositorySelection;
|
|
}
|
|
response.data.total_count = totalCount;
|
|
return response;
|
|
};
|
|
var iterator = function(octokit, route, parameters) {
|
|
const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
|
|
const requestMethod = typeof route === "function" ? route : octokit.request;
|
|
const method = options.method;
|
|
const headers = options.headers;
|
|
let url = options.url;
|
|
return {
|
|
[Symbol.asyncIterator]: () => ({
|
|
async next() {
|
|
if (!url)
|
|
return { done: true };
|
|
try {
|
|
const response = await requestMethod({ method, url, headers });
|
|
const normalizedResponse = normalizePaginatedListResponse(response);
|
|
url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1];
|
|
return { value: normalizedResponse };
|
|
} catch (error) {
|
|
if (error.status !== 409)
|
|
throw error;
|
|
url = "";
|
|
return {
|
|
value: {
|
|
status: 200,
|
|
headers: {},
|
|
data: []
|
|
}
|
|
};
|
|
}
|
|
}
|
|
})
|
|
};
|
|
};
|
|
var paginate = function(octokit, route, parameters, mapFn) {
|
|
if (typeof parameters === "function") {
|
|
mapFn = parameters;
|
|
parameters = undefined;
|
|
}
|
|
return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);
|
|
};
|
|
var gather = function(octokit, results, iterator2, mapFn) {
|
|
return iterator2.next().then((result) => {
|
|
if (result.done) {
|
|
return results;
|
|
}
|
|
let earlyExit = false;
|
|
function done() {
|
|
earlyExit = true;
|
|
}
|
|
results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);
|
|
if (earlyExit) {
|
|
return results;
|
|
}
|
|
return gather(octokit, results, iterator2, mapFn);
|
|
});
|
|
};
|
|
var isPaginatingEndpoint = function(arg) {
|
|
if (typeof arg === "string") {
|
|
return paginatingEndpoints.includes(arg);
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
var paginateRest = function(octokit) {
|
|
return {
|
|
paginate: Object.assign(paginate.bind(null, octokit), {
|
|
iterator: iterator.bind(null, octokit)
|
|
})
|
|
};
|
|
};
|
|
var __defProp2 = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
var __export2 = (target, all) => {
|
|
for (var name in all)
|
|
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames2(from))
|
|
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp2({}, "__esModule", { value: true }), mod);
|
|
var dist_src_exports = {};
|
|
__export2(dist_src_exports, {
|
|
composePaginateRest: () => composePaginateRest,
|
|
isPaginatingEndpoint: () => isPaginatingEndpoint,
|
|
paginateRest: () => paginateRest,
|
|
paginatingEndpoints: () => paginatingEndpoints
|
|
});
|
|
module.exports = __toCommonJS(dist_src_exports);
|
|
var VERSION = "9.2.1";
|
|
var composePaginateRest = Object.assign(paginate, {
|
|
iterator
|
|
});
|
|
var paginatingEndpoints = [
|
|
"GET /advisories",
|
|
"GET /app/hook/deliveries",
|
|
"GET /app/installation-requests",
|
|
"GET /app/installations",
|
|
"GET /assignments/{assignment_id}/accepted_assignments",
|
|
"GET /classrooms",
|
|
"GET /classrooms/{classroom_id}/assignments",
|
|
"GET /enterprises/{enterprise}/dependabot/alerts",
|
|
"GET /enterprises/{enterprise}/secret-scanning/alerts",
|
|
"GET /events",
|
|
"GET /gists",
|
|
"GET /gists/public",
|
|
"GET /gists/starred",
|
|
"GET /gists/{gist_id}/comments",
|
|
"GET /gists/{gist_id}/commits",
|
|
"GET /gists/{gist_id}/forks",
|
|
"GET /installation/repositories",
|
|
"GET /issues",
|
|
"GET /licenses",
|
|
"GET /marketplace_listing/plans",
|
|
"GET /marketplace_listing/plans/{plan_id}/accounts",
|
|
"GET /marketplace_listing/stubbed/plans",
|
|
"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts",
|
|
"GET /networks/{owner}/{repo}/events",
|
|
"GET /notifications",
|
|
"GET /organizations",
|
|
"GET /orgs/{org}/actions/cache/usage-by-repository",
|
|
"GET /orgs/{org}/actions/permissions/repositories",
|
|
"GET /orgs/{org}/actions/runners",
|
|
"GET /orgs/{org}/actions/secrets",
|
|
"GET /orgs/{org}/actions/secrets/{secret_name}/repositories",
|
|
"GET /orgs/{org}/actions/variables",
|
|
"GET /orgs/{org}/actions/variables/{name}/repositories",
|
|
"GET /orgs/{org}/blocks",
|
|
"GET /orgs/{org}/code-scanning/alerts",
|
|
"GET /orgs/{org}/codespaces",
|
|
"GET /orgs/{org}/codespaces/secrets",
|
|
"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories",
|
|
"GET /orgs/{org}/copilot/billing/seats",
|
|
"GET /orgs/{org}/dependabot/alerts",
|
|
"GET /orgs/{org}/dependabot/secrets",
|
|
"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories",
|
|
"GET /orgs/{org}/events",
|
|
"GET /orgs/{org}/failed_invitations",
|
|
"GET /orgs/{org}/hooks",
|
|
"GET /orgs/{org}/hooks/{hook_id}/deliveries",
|
|
"GET /orgs/{org}/installations",
|
|
"GET /orgs/{org}/invitations",
|
|
"GET /orgs/{org}/invitations/{invitation_id}/teams",
|
|
"GET /orgs/{org}/issues",
|
|
"GET /orgs/{org}/members",
|
|
"GET /orgs/{org}/members/{username}/codespaces",
|
|
"GET /orgs/{org}/migrations",
|
|
"GET /orgs/{org}/migrations/{migration_id}/repositories",
|
|
"GET /orgs/{org}/organization-roles/{role_id}/teams",
|
|
"GET /orgs/{org}/organization-roles/{role_id}/users",
|
|
"GET /orgs/{org}/outside_collaborators",
|
|
"GET /orgs/{org}/packages",
|
|
"GET /orgs/{org}/packages/{package_type}/{package_name}/versions",
|
|
"GET /orgs/{org}/personal-access-token-requests",
|
|
"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories",
|
|
"GET /orgs/{org}/personal-access-tokens",
|
|
"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories",
|
|
"GET /orgs/{org}/projects",
|
|
"GET /orgs/{org}/properties/values",
|
|
"GET /orgs/{org}/public_members",
|
|
"GET /orgs/{org}/repos",
|
|
"GET /orgs/{org}/rulesets",
|
|
"GET /orgs/{org}/rulesets/rule-suites",
|
|
"GET /orgs/{org}/secret-scanning/alerts",
|
|
"GET /orgs/{org}/security-advisories",
|
|
"GET /orgs/{org}/teams",
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions",
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments",
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions",
|
|
"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions",
|
|
"GET /orgs/{org}/teams/{team_slug}/invitations",
|
|
"GET /orgs/{org}/teams/{team_slug}/members",
|
|
"GET /orgs/{org}/teams/{team_slug}/projects",
|
|
"GET /orgs/{org}/teams/{team_slug}/repos",
|
|
"GET /orgs/{org}/teams/{team_slug}/teams",
|
|
"GET /projects/columns/{column_id}/cards",
|
|
"GET /projects/{project_id}/collaborators",
|
|
"GET /projects/{project_id}/columns",
|
|
"GET /repos/{owner}/{repo}/actions/artifacts",
|
|
"GET /repos/{owner}/{repo}/actions/caches",
|
|
"GET /repos/{owner}/{repo}/actions/organization-secrets",
|
|
"GET /repos/{owner}/{repo}/actions/organization-variables",
|
|
"GET /repos/{owner}/{repo}/actions/runners",
|
|
"GET /repos/{owner}/{repo}/actions/runs",
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts",
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs",
|
|
"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs",
|
|
"GET /repos/{owner}/{repo}/actions/secrets",
|
|
"GET /repos/{owner}/{repo}/actions/variables",
|
|
"GET /repos/{owner}/{repo}/actions/workflows",
|
|
"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs",
|
|
"GET /repos/{owner}/{repo}/activity",
|
|
"GET /repos/{owner}/{repo}/assignees",
|
|
"GET /repos/{owner}/{repo}/branches",
|
|
"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations",
|
|
"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs",
|
|
"GET /repos/{owner}/{repo}/code-scanning/alerts",
|
|
"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",
|
|
"GET /repos/{owner}/{repo}/code-scanning/analyses",
|
|
"GET /repos/{owner}/{repo}/codespaces",
|
|
"GET /repos/{owner}/{repo}/codespaces/devcontainers",
|
|
"GET /repos/{owner}/{repo}/codespaces/secrets",
|
|
"GET /repos/{owner}/{repo}/collaborators",
|
|
"GET /repos/{owner}/{repo}/comments",
|
|
"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions",
|
|
"GET /repos/{owner}/{repo}/commits",
|
|
"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments",
|
|
"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls",
|
|
"GET /repos/{owner}/{repo}/commits/{ref}/check-runs",
|
|
"GET /repos/{owner}/{repo}/commits/{ref}/check-suites",
|
|
"GET /repos/{owner}/{repo}/commits/{ref}/status",
|
|
"GET /repos/{owner}/{repo}/commits/{ref}/statuses",
|
|
"GET /repos/{owner}/{repo}/contributors",
|
|
"GET /repos/{owner}/{repo}/dependabot/alerts",
|
|
"GET /repos/{owner}/{repo}/dependabot/secrets",
|
|
"GET /repos/{owner}/{repo}/deployments",
|
|
"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses",
|
|
"GET /repos/{owner}/{repo}/environments",
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies",
|
|
"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps",
|
|
"GET /repos/{owner}/{repo}/events",
|
|
"GET /repos/{owner}/{repo}/forks",
|
|
"GET /repos/{owner}/{repo}/hooks",
|
|
"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries",
|
|
"GET /repos/{owner}/{repo}/invitations",
|
|
"GET /repos/{owner}/{repo}/issues",
|
|
"GET /repos/{owner}/{repo}/issues/comments",
|
|
"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions",
|
|
"GET /repos/{owner}/{repo}/issues/events",
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/comments",
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/events",
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/labels",
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions",
|
|
"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline",
|
|
"GET /repos/{owner}/{repo}/keys",
|
|
"GET /repos/{owner}/{repo}/labels",
|
|
"GET /repos/{owner}/{repo}/milestones",
|
|
"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels",
|
|
"GET /repos/{owner}/{repo}/notifications",
|
|
"GET /repos/{owner}/{repo}/pages/builds",
|
|
"GET /repos/{owner}/{repo}/projects",
|
|
"GET /repos/{owner}/{repo}/pulls",
|
|
"GET /repos/{owner}/{repo}/pulls/comments",
|
|
"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions",
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments",
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits",
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/files",
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews",
|
|
"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments",
|
|
"GET /repos/{owner}/{repo}/releases",
|
|
"GET /repos/{owner}/{repo}/releases/{release_id}/assets",
|
|
"GET /repos/{owner}/{repo}/releases/{release_id}/reactions",
|
|
"GET /repos/{owner}/{repo}/rules/branches/{branch}",
|
|
"GET /repos/{owner}/{repo}/rulesets",
|
|
"GET /repos/{owner}/{repo}/rulesets/rule-suites",
|
|
"GET /repos/{owner}/{repo}/secret-scanning/alerts",
|
|
"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations",
|
|
"GET /repos/{owner}/{repo}/security-advisories",
|
|
"GET /repos/{owner}/{repo}/stargazers",
|
|
"GET /repos/{owner}/{repo}/subscribers",
|
|
"GET /repos/{owner}/{repo}/tags",
|
|
"GET /repos/{owner}/{repo}/teams",
|
|
"GET /repos/{owner}/{repo}/topics",
|
|
"GET /repositories",
|
|
"GET /repositories/{repository_id}/environments/{environment_name}/secrets",
|
|
"GET /repositories/{repository_id}/environments/{environment_name}/variables",
|
|
"GET /search/code",
|
|
"GET /search/commits",
|
|
"GET /search/issues",
|
|
"GET /search/labels",
|
|
"GET /search/repositories",
|
|
"GET /search/topics",
|
|
"GET /search/users",
|
|
"GET /teams/{team_id}/discussions",
|
|
"GET /teams/{team_id}/discussions/{discussion_number}/comments",
|
|
"GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions",
|
|
"GET /teams/{team_id}/discussions/{discussion_number}/reactions",
|
|
"GET /teams/{team_id}/invitations",
|
|
"GET /teams/{team_id}/members",
|
|
"GET /teams/{team_id}/projects",
|
|
"GET /teams/{team_id}/repos",
|
|
"GET /teams/{team_id}/teams",
|
|
"GET /user/blocks",
|
|
"GET /user/codespaces",
|
|
"GET /user/codespaces/secrets",
|
|
"GET /user/emails",
|
|
"GET /user/followers",
|
|
"GET /user/following",
|
|
"GET /user/gpg_keys",
|
|
"GET /user/installations",
|
|
"GET /user/installations/{installation_id}/repositories",
|
|
"GET /user/issues",
|
|
"GET /user/keys",
|
|
"GET /user/marketplace_purchases",
|
|
"GET /user/marketplace_purchases/stubbed",
|
|
"GET /user/memberships/orgs",
|
|
"GET /user/migrations",
|
|
"GET /user/migrations/{migration_id}/repositories",
|
|
"GET /user/orgs",
|
|
"GET /user/packages",
|
|
"GET /user/packages/{package_type}/{package_name}/versions",
|
|
"GET /user/public_emails",
|
|
"GET /user/repos",
|
|
"GET /user/repository_invitations",
|
|
"GET /user/social_accounts",
|
|
"GET /user/ssh_signing_keys",
|
|
"GET /user/starred",
|
|
"GET /user/subscriptions",
|
|
"GET /user/teams",
|
|
"GET /users",
|
|
"GET /users/{username}/events",
|
|
"GET /users/{username}/events/orgs/{org}",
|
|
"GET /users/{username}/events/public",
|
|
"GET /users/{username}/followers",
|
|
"GET /users/{username}/following",
|
|
"GET /users/{username}/gists",
|
|
"GET /users/{username}/gpg_keys",
|
|
"GET /users/{username}/keys",
|
|
"GET /users/{username}/orgs",
|
|
"GET /users/{username}/packages",
|
|
"GET /users/{username}/projects",
|
|
"GET /users/{username}/received_events",
|
|
"GET /users/{username}/received_events/public",
|
|
"GET /users/{username}/repos",
|
|
"GET /users/{username}/social_accounts",
|
|
"GET /users/{username}/ssh_signing_keys",
|
|
"GET /users/{username}/starred",
|
|
"GET /users/{username}/subscriptions"
|
|
];
|
|
paginateRest.VERSION = VERSION;
|
|
});
|
|
|
|
// node_modules/@actions/github/lib/utils.js
|
|
var require_utils4 = __commonJS((exports) => {
|
|
var getOctokitOptions = function(token, options) {
|
|
const opts = Object.assign({}, options || {});
|
|
const auth = Utils.getAuthString(token, opts);
|
|
if (auth) {
|
|
opts.auth = auth;
|
|
}
|
|
return opts;
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = undefined;
|
|
var Context = __importStar(require_context());
|
|
var Utils = __importStar(require_utils3());
|
|
var core_1 = require_dist_node8();
|
|
var plugin_rest_endpoint_methods_1 = require_dist_node9();
|
|
var plugin_paginate_rest_1 = require_dist_node10();
|
|
exports.context = new Context.Context;
|
|
var baseUrl = Utils.getApiBaseUrl();
|
|
exports.defaults = {
|
|
baseUrl,
|
|
request: {
|
|
agent: Utils.getProxyAgent(baseUrl),
|
|
fetch: Utils.getProxyFetch(baseUrl)
|
|
}
|
|
};
|
|
exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults);
|
|
exports.getOctokitOptions = getOctokitOptions;
|
|
});
|
|
|
|
// node_modules/@actions/github/lib/github.js
|
|
var require_github = __commonJS((exports) => {
|
|
var getOctokit = function(token, options, ...additionalPlugins) {
|
|
const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins);
|
|
return new GitHubWithPlugins((0, utils_1.getOctokitOptions)(token, options));
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getOctokit = exports.context = undefined;
|
|
var Context = __importStar(require_context());
|
|
var utils_1 = require_utils4();
|
|
exports.context = new Context.Context;
|
|
exports.getOctokit = getOctokit;
|
|
});
|
|
|
|
// node_modules/delayed-stream/lib/delayed_stream.js
|
|
var require_delayed_stream = __commonJS((exports, module) => {
|
|
var DelayedStream = function() {
|
|
this.source = null;
|
|
this.dataSize = 0;
|
|
this.maxDataSize = 1024 * 1024;
|
|
this.pauseStream = true;
|
|
this._maxDataSizeExceeded = false;
|
|
this._released = false;
|
|
this._bufferedEvents = [];
|
|
};
|
|
var Stream = __require("stream").Stream;
|
|
var util = __require("util");
|
|
module.exports = DelayedStream;
|
|
util.inherits(DelayedStream, Stream);
|
|
DelayedStream.create = function(source, options) {
|
|
var delayedStream = new this;
|
|
options = options || {};
|
|
for (var option in options) {
|
|
delayedStream[option] = options[option];
|
|
}
|
|
delayedStream.source = source;
|
|
var realEmit = source.emit;
|
|
source.emit = function() {
|
|
delayedStream._handleEmit(arguments);
|
|
return realEmit.apply(source, arguments);
|
|
};
|
|
source.on("error", function() {
|
|
});
|
|
if (delayedStream.pauseStream) {
|
|
source.pause();
|
|
}
|
|
return delayedStream;
|
|
};
|
|
Object.defineProperty(DelayedStream.prototype, "readable", {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: function() {
|
|
return this.source.readable;
|
|
}
|
|
});
|
|
DelayedStream.prototype.setEncoding = function() {
|
|
return this.source.setEncoding.apply(this.source, arguments);
|
|
};
|
|
DelayedStream.prototype.resume = function() {
|
|
if (!this._released) {
|
|
this.release();
|
|
}
|
|
this.source.resume();
|
|
};
|
|
DelayedStream.prototype.pause = function() {
|
|
this.source.pause();
|
|
};
|
|
DelayedStream.prototype.release = function() {
|
|
this._released = true;
|
|
this._bufferedEvents.forEach(function(args) {
|
|
this.emit.apply(this, args);
|
|
}.bind(this));
|
|
this._bufferedEvents = [];
|
|
};
|
|
DelayedStream.prototype.pipe = function() {
|
|
var r = Stream.prototype.pipe.apply(this, arguments);
|
|
this.resume();
|
|
return r;
|
|
};
|
|
DelayedStream.prototype._handleEmit = function(args) {
|
|
if (this._released) {
|
|
this.emit.apply(this, args);
|
|
return;
|
|
}
|
|
if (args[0] === "data") {
|
|
this.dataSize += args[1].length;
|
|
this._checkIfMaxDataSizeExceeded();
|
|
}
|
|
this._bufferedEvents.push(args);
|
|
};
|
|
DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
|
|
if (this._maxDataSizeExceeded) {
|
|
return;
|
|
}
|
|
if (this.dataSize <= this.maxDataSize) {
|
|
return;
|
|
}
|
|
this._maxDataSizeExceeded = true;
|
|
var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded.";
|
|
this.emit("error", new Error(message));
|
|
};
|
|
});
|
|
|
|
// node_modules/combined-stream/lib/combined_stream.js
|
|
var require_combined_stream = __commonJS((exports, module) => {
|
|
var CombinedStream = function() {
|
|
this.writable = false;
|
|
this.readable = true;
|
|
this.dataSize = 0;
|
|
this.maxDataSize = 2 * 1024 * 1024;
|
|
this.pauseStreams = true;
|
|
this._released = false;
|
|
this._streams = [];
|
|
this._currentStream = null;
|
|
this._insideLoop = false;
|
|
this._pendingNext = false;
|
|
};
|
|
var util = __require("util");
|
|
var Stream = __require("stream").Stream;
|
|
var DelayedStream = require_delayed_stream();
|
|
module.exports = CombinedStream;
|
|
util.inherits(CombinedStream, Stream);
|
|
CombinedStream.create = function(options) {
|
|
var combinedStream = new this;
|
|
options = options || {};
|
|
for (var option in options) {
|
|
combinedStream[option] = options[option];
|
|
}
|
|
return combinedStream;
|
|
};
|
|
CombinedStream.isStreamLike = function(stream) {
|
|
return typeof stream !== "function" && typeof stream !== "string" && typeof stream !== "boolean" && typeof stream !== "number" && !Buffer.isBuffer(stream);
|
|
};
|
|
CombinedStream.prototype.append = function(stream) {
|
|
var isStreamLike = CombinedStream.isStreamLike(stream);
|
|
if (isStreamLike) {
|
|
if (!(stream instanceof DelayedStream)) {
|
|
var newStream = DelayedStream.create(stream, {
|
|
maxDataSize: Infinity,
|
|
pauseStream: this.pauseStreams
|
|
});
|
|
stream.on("data", this._checkDataSize.bind(this));
|
|
stream = newStream;
|
|
}
|
|
this._handleErrors(stream);
|
|
if (this.pauseStreams) {
|
|
stream.pause();
|
|
}
|
|
}
|
|
this._streams.push(stream);
|
|
return this;
|
|
};
|
|
CombinedStream.prototype.pipe = function(dest, options) {
|
|
Stream.prototype.pipe.call(this, dest, options);
|
|
this.resume();
|
|
return dest;
|
|
};
|
|
CombinedStream.prototype._getNext = function() {
|
|
this._currentStream = null;
|
|
if (this._insideLoop) {
|
|
this._pendingNext = true;
|
|
return;
|
|
}
|
|
this._insideLoop = true;
|
|
try {
|
|
do {
|
|
this._pendingNext = false;
|
|
this._realGetNext();
|
|
} while (this._pendingNext);
|
|
} finally {
|
|
this._insideLoop = false;
|
|
}
|
|
};
|
|
CombinedStream.prototype._realGetNext = function() {
|
|
var stream = this._streams.shift();
|
|
if (typeof stream == "undefined") {
|
|
this.end();
|
|
return;
|
|
}
|
|
if (typeof stream !== "function") {
|
|
this._pipeNext(stream);
|
|
return;
|
|
}
|
|
var getStream = stream;
|
|
getStream(function(stream2) {
|
|
var isStreamLike = CombinedStream.isStreamLike(stream2);
|
|
if (isStreamLike) {
|
|
stream2.on("data", this._checkDataSize.bind(this));
|
|
this._handleErrors(stream2);
|
|
}
|
|
this._pipeNext(stream2);
|
|
}.bind(this));
|
|
};
|
|
CombinedStream.prototype._pipeNext = function(stream) {
|
|
this._currentStream = stream;
|
|
var isStreamLike = CombinedStream.isStreamLike(stream);
|
|
if (isStreamLike) {
|
|
stream.on("end", this._getNext.bind(this));
|
|
stream.pipe(this, { end: false });
|
|
return;
|
|
}
|
|
var value = stream;
|
|
this.write(value);
|
|
this._getNext();
|
|
};
|
|
CombinedStream.prototype._handleErrors = function(stream) {
|
|
var self2 = this;
|
|
stream.on("error", function(err) {
|
|
self2._emitError(err);
|
|
});
|
|
};
|
|
CombinedStream.prototype.write = function(data) {
|
|
this.emit("data", data);
|
|
};
|
|
CombinedStream.prototype.pause = function() {
|
|
if (!this.pauseStreams) {
|
|
return;
|
|
}
|
|
if (this.pauseStreams && this._currentStream && typeof this._currentStream.pause == "function")
|
|
this._currentStream.pause();
|
|
this.emit("pause");
|
|
};
|
|
CombinedStream.prototype.resume = function() {
|
|
if (!this._released) {
|
|
this._released = true;
|
|
this.writable = true;
|
|
this._getNext();
|
|
}
|
|
if (this.pauseStreams && this._currentStream && typeof this._currentStream.resume == "function")
|
|
this._currentStream.resume();
|
|
this.emit("resume");
|
|
};
|
|
CombinedStream.prototype.end = function() {
|
|
this._reset();
|
|
this.emit("end");
|
|
};
|
|
CombinedStream.prototype.destroy = function() {
|
|
this._reset();
|
|
this.emit("close");
|
|
};
|
|
CombinedStream.prototype._reset = function() {
|
|
this.writable = false;
|
|
this._streams = [];
|
|
this._currentStream = null;
|
|
};
|
|
CombinedStream.prototype._checkDataSize = function() {
|
|
this._updateDataSize();
|
|
if (this.dataSize <= this.maxDataSize) {
|
|
return;
|
|
}
|
|
var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded.";
|
|
this._emitError(new Error(message));
|
|
};
|
|
CombinedStream.prototype._updateDataSize = function() {
|
|
this.dataSize = 0;
|
|
var self2 = this;
|
|
this._streams.forEach(function(stream) {
|
|
if (!stream.dataSize) {
|
|
return;
|
|
}
|
|
self2.dataSize += stream.dataSize;
|
|
});
|
|
if (this._currentStream && this._currentStream.dataSize) {
|
|
this.dataSize += this._currentStream.dataSize;
|
|
}
|
|
};
|
|
CombinedStream.prototype._emitError = function(err) {
|
|
this._reset();
|
|
this.emit("error", err);
|
|
};
|
|
});
|
|
|
|
// node_modules/mime-db/db.json
|
|
var require_db = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
"application/1d-interleaved-parityfec": {
|
|
source: "iana"
|
|
},
|
|
"application/3gpdash-qoe-report+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/3gpp-ims+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/3gpphal+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/3gpphalforms+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/a2l": {
|
|
source: "iana"
|
|
},
|
|
"application/ace+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/activemessage": {
|
|
source: "iana"
|
|
},
|
|
"application/activity+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-costmap+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-costmapfilter+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-directory+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-endpointcost+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-endpointcostparams+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-endpointprop+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-endpointpropparams+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-error+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-networkmap+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-networkmapfilter+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-updatestreamcontrol+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/alto-updatestreamparams+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/aml": {
|
|
source: "iana"
|
|
},
|
|
"application/andrew-inset": {
|
|
source: "iana",
|
|
extensions: ["ez"]
|
|
},
|
|
"application/applefile": {
|
|
source: "iana"
|
|
},
|
|
"application/applixware": {
|
|
source: "apache",
|
|
extensions: ["aw"]
|
|
},
|
|
"application/at+jwt": {
|
|
source: "iana"
|
|
},
|
|
"application/atf": {
|
|
source: "iana"
|
|
},
|
|
"application/atfx": {
|
|
source: "iana"
|
|
},
|
|
"application/atom+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["atom"]
|
|
},
|
|
"application/atomcat+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["atomcat"]
|
|
},
|
|
"application/atomdeleted+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["atomdeleted"]
|
|
},
|
|
"application/atomicmail": {
|
|
source: "iana"
|
|
},
|
|
"application/atomsvc+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["atomsvc"]
|
|
},
|
|
"application/atsc-dwd+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["dwd"]
|
|
},
|
|
"application/atsc-dynamic-event-message": {
|
|
source: "iana"
|
|
},
|
|
"application/atsc-held+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["held"]
|
|
},
|
|
"application/atsc-rdt+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/atsc-rsat+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rsat"]
|
|
},
|
|
"application/atxml": {
|
|
source: "iana"
|
|
},
|
|
"application/auth-policy+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/bacnet-xdd+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/batch-smtp": {
|
|
source: "iana"
|
|
},
|
|
"application/bdoc": {
|
|
compressible: false,
|
|
extensions: ["bdoc"]
|
|
},
|
|
"application/beep+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/calendar+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/calendar+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xcs"]
|
|
},
|
|
"application/call-completion": {
|
|
source: "iana"
|
|
},
|
|
"application/cals-1840": {
|
|
source: "iana"
|
|
},
|
|
"application/captive+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/cbor-seq": {
|
|
source: "iana"
|
|
},
|
|
"application/cccex": {
|
|
source: "iana"
|
|
},
|
|
"application/ccmp+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/ccxml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ccxml"]
|
|
},
|
|
"application/cdfx+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["cdfx"]
|
|
},
|
|
"application/cdmi-capability": {
|
|
source: "iana",
|
|
extensions: ["cdmia"]
|
|
},
|
|
"application/cdmi-container": {
|
|
source: "iana",
|
|
extensions: ["cdmic"]
|
|
},
|
|
"application/cdmi-domain": {
|
|
source: "iana",
|
|
extensions: ["cdmid"]
|
|
},
|
|
"application/cdmi-object": {
|
|
source: "iana",
|
|
extensions: ["cdmio"]
|
|
},
|
|
"application/cdmi-queue": {
|
|
source: "iana",
|
|
extensions: ["cdmiq"]
|
|
},
|
|
"application/cdni": {
|
|
source: "iana"
|
|
},
|
|
"application/cea": {
|
|
source: "iana"
|
|
},
|
|
"application/cea-2018+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/cellml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/cfw": {
|
|
source: "iana"
|
|
},
|
|
"application/city+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/clr": {
|
|
source: "iana"
|
|
},
|
|
"application/clue+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/clue_info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/cms": {
|
|
source: "iana"
|
|
},
|
|
"application/cnrp+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/coap-group+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/coap-payload": {
|
|
source: "iana"
|
|
},
|
|
"application/commonground": {
|
|
source: "iana"
|
|
},
|
|
"application/conference-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/cose": {
|
|
source: "iana"
|
|
},
|
|
"application/cose-key": {
|
|
source: "iana"
|
|
},
|
|
"application/cose-key-set": {
|
|
source: "iana"
|
|
},
|
|
"application/cpl+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["cpl"]
|
|
},
|
|
"application/csrattrs": {
|
|
source: "iana"
|
|
},
|
|
"application/csta+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/cstadata+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/csvm+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/cu-seeme": {
|
|
source: "apache",
|
|
extensions: ["cu"]
|
|
},
|
|
"application/cwt": {
|
|
source: "iana"
|
|
},
|
|
"application/cybercash": {
|
|
source: "iana"
|
|
},
|
|
"application/dart": {
|
|
compressible: true
|
|
},
|
|
"application/dash+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mpd"]
|
|
},
|
|
"application/dash-patch+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mpp"]
|
|
},
|
|
"application/dashdelta": {
|
|
source: "iana"
|
|
},
|
|
"application/davmount+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["davmount"]
|
|
},
|
|
"application/dca-rft": {
|
|
source: "iana"
|
|
},
|
|
"application/dcd": {
|
|
source: "iana"
|
|
},
|
|
"application/dec-dx": {
|
|
source: "iana"
|
|
},
|
|
"application/dialog-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/dicom": {
|
|
source: "iana"
|
|
},
|
|
"application/dicom+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/dicom+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/dii": {
|
|
source: "iana"
|
|
},
|
|
"application/dit": {
|
|
source: "iana"
|
|
},
|
|
"application/dns": {
|
|
source: "iana"
|
|
},
|
|
"application/dns+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/dns-message": {
|
|
source: "iana"
|
|
},
|
|
"application/docbook+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["dbk"]
|
|
},
|
|
"application/dots+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/dskpp+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/dssc+der": {
|
|
source: "iana",
|
|
extensions: ["dssc"]
|
|
},
|
|
"application/dssc+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xdssc"]
|
|
},
|
|
"application/dvcs": {
|
|
source: "iana"
|
|
},
|
|
"application/ecmascript": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["es", "ecma"]
|
|
},
|
|
"application/edi-consent": {
|
|
source: "iana"
|
|
},
|
|
"application/edi-x12": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/edifact": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/efi": {
|
|
source: "iana"
|
|
},
|
|
"application/elm+json": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/elm+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.cap+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.comment+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.control+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.deviceinfo+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.ecall.msd": {
|
|
source: "iana"
|
|
},
|
|
"application/emergencycalldata.providerinfo+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.serviceinfo+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.subscriberinfo+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emergencycalldata.veds+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/emma+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["emma"]
|
|
},
|
|
"application/emotionml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["emotionml"]
|
|
},
|
|
"application/encaprtp": {
|
|
source: "iana"
|
|
},
|
|
"application/epp+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/epub+zip": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["epub"]
|
|
},
|
|
"application/eshop": {
|
|
source: "iana"
|
|
},
|
|
"application/exi": {
|
|
source: "iana",
|
|
extensions: ["exi"]
|
|
},
|
|
"application/expect-ct-report+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/express": {
|
|
source: "iana",
|
|
extensions: ["exp"]
|
|
},
|
|
"application/fastinfoset": {
|
|
source: "iana"
|
|
},
|
|
"application/fastsoap": {
|
|
source: "iana"
|
|
},
|
|
"application/fdt+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["fdt"]
|
|
},
|
|
"application/fhir+json": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/fhir+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/fido.trusted-apps+json": {
|
|
compressible: true
|
|
},
|
|
"application/fits": {
|
|
source: "iana"
|
|
},
|
|
"application/flexfec": {
|
|
source: "iana"
|
|
},
|
|
"application/font-sfnt": {
|
|
source: "iana"
|
|
},
|
|
"application/font-tdpfr": {
|
|
source: "iana",
|
|
extensions: ["pfr"]
|
|
},
|
|
"application/font-woff": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/framework-attributes+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/geo+json": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["geojson"]
|
|
},
|
|
"application/geo+json-seq": {
|
|
source: "iana"
|
|
},
|
|
"application/geopackage+sqlite3": {
|
|
source: "iana"
|
|
},
|
|
"application/geoxacml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/gltf-buffer": {
|
|
source: "iana"
|
|
},
|
|
"application/gml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["gml"]
|
|
},
|
|
"application/gpx+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["gpx"]
|
|
},
|
|
"application/gxf": {
|
|
source: "apache",
|
|
extensions: ["gxf"]
|
|
},
|
|
"application/gzip": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["gz"]
|
|
},
|
|
"application/h224": {
|
|
source: "iana"
|
|
},
|
|
"application/held+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/hjson": {
|
|
extensions: ["hjson"]
|
|
},
|
|
"application/http": {
|
|
source: "iana"
|
|
},
|
|
"application/hyperstudio": {
|
|
source: "iana",
|
|
extensions: ["stk"]
|
|
},
|
|
"application/ibe-key-request+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/ibe-pkg-reply+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/ibe-pp-data": {
|
|
source: "iana"
|
|
},
|
|
"application/iges": {
|
|
source: "iana"
|
|
},
|
|
"application/im-iscomposing+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/index": {
|
|
source: "iana"
|
|
},
|
|
"application/index.cmd": {
|
|
source: "iana"
|
|
},
|
|
"application/index.obj": {
|
|
source: "iana"
|
|
},
|
|
"application/index.response": {
|
|
source: "iana"
|
|
},
|
|
"application/index.vnd": {
|
|
source: "iana"
|
|
},
|
|
"application/inkml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ink", "inkml"]
|
|
},
|
|
"application/iotp": {
|
|
source: "iana"
|
|
},
|
|
"application/ipfix": {
|
|
source: "iana",
|
|
extensions: ["ipfix"]
|
|
},
|
|
"application/ipp": {
|
|
source: "iana"
|
|
},
|
|
"application/isup": {
|
|
source: "iana"
|
|
},
|
|
"application/its+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["its"]
|
|
},
|
|
"application/java-archive": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["jar", "war", "ear"]
|
|
},
|
|
"application/java-serialized-object": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["ser"]
|
|
},
|
|
"application/java-vm": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["class"]
|
|
},
|
|
"application/javascript": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["js", "mjs"]
|
|
},
|
|
"application/jf2feed+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/jose": {
|
|
source: "iana"
|
|
},
|
|
"application/jose+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/jrd+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/jscalendar+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/json": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["json", "map"]
|
|
},
|
|
"application/json-patch+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/json-seq": {
|
|
source: "iana"
|
|
},
|
|
"application/json5": {
|
|
extensions: ["json5"]
|
|
},
|
|
"application/jsonml+json": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["jsonml"]
|
|
},
|
|
"application/jwk+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/jwk-set+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/jwt": {
|
|
source: "iana"
|
|
},
|
|
"application/kpml-request+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/kpml-response+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/ld+json": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["jsonld"]
|
|
},
|
|
"application/lgr+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["lgr"]
|
|
},
|
|
"application/link-format": {
|
|
source: "iana"
|
|
},
|
|
"application/load-control+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/lost+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["lostxml"]
|
|
},
|
|
"application/lostsync+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/lpf+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/lxf": {
|
|
source: "iana"
|
|
},
|
|
"application/mac-binhex40": {
|
|
source: "iana",
|
|
extensions: ["hqx"]
|
|
},
|
|
"application/mac-compactpro": {
|
|
source: "apache",
|
|
extensions: ["cpt"]
|
|
},
|
|
"application/macwriteii": {
|
|
source: "iana"
|
|
},
|
|
"application/mads+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mads"]
|
|
},
|
|
"application/manifest+json": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["webmanifest"]
|
|
},
|
|
"application/marc": {
|
|
source: "iana",
|
|
extensions: ["mrc"]
|
|
},
|
|
"application/marcxml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mrcx"]
|
|
},
|
|
"application/mathematica": {
|
|
source: "iana",
|
|
extensions: ["ma", "nb", "mb"]
|
|
},
|
|
"application/mathml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mathml"]
|
|
},
|
|
"application/mathml-content+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mathml-presentation+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-associated-procedure-description+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-deregister+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-envelope+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-msk+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-msk-response+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-protection-description+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-reception-report+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-register+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-register-response+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-schedule+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbms-user-service-description+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mbox": {
|
|
source: "iana",
|
|
extensions: ["mbox"]
|
|
},
|
|
"application/media-policy-dataset+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mpf"]
|
|
},
|
|
"application/media_control+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mediaservercontrol+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mscml"]
|
|
},
|
|
"application/merge-patch+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/metalink+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["metalink"]
|
|
},
|
|
"application/metalink4+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["meta4"]
|
|
},
|
|
"application/mets+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mets"]
|
|
},
|
|
"application/mf4": {
|
|
source: "iana"
|
|
},
|
|
"application/mikey": {
|
|
source: "iana"
|
|
},
|
|
"application/mipc": {
|
|
source: "iana"
|
|
},
|
|
"application/missing-blocks+cbor-seq": {
|
|
source: "iana"
|
|
},
|
|
"application/mmt-aei+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["maei"]
|
|
},
|
|
"application/mmt-usd+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["musd"]
|
|
},
|
|
"application/mods+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mods"]
|
|
},
|
|
"application/moss-keys": {
|
|
source: "iana"
|
|
},
|
|
"application/moss-signature": {
|
|
source: "iana"
|
|
},
|
|
"application/mosskey-data": {
|
|
source: "iana"
|
|
},
|
|
"application/mosskey-request": {
|
|
source: "iana"
|
|
},
|
|
"application/mp21": {
|
|
source: "iana",
|
|
extensions: ["m21", "mp21"]
|
|
},
|
|
"application/mp4": {
|
|
source: "iana",
|
|
extensions: ["mp4s", "m4p"]
|
|
},
|
|
"application/mpeg4-generic": {
|
|
source: "iana"
|
|
},
|
|
"application/mpeg4-iod": {
|
|
source: "iana"
|
|
},
|
|
"application/mpeg4-iod-xmt": {
|
|
source: "iana"
|
|
},
|
|
"application/mrb-consumer+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/mrb-publish+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/msc-ivr+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/msc-mixer+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/msword": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["doc", "dot"]
|
|
},
|
|
"application/mud+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/multipart-core": {
|
|
source: "iana"
|
|
},
|
|
"application/mxf": {
|
|
source: "iana",
|
|
extensions: ["mxf"]
|
|
},
|
|
"application/n-quads": {
|
|
source: "iana",
|
|
extensions: ["nq"]
|
|
},
|
|
"application/n-triples": {
|
|
source: "iana",
|
|
extensions: ["nt"]
|
|
},
|
|
"application/nasdata": {
|
|
source: "iana"
|
|
},
|
|
"application/news-checkgroups": {
|
|
source: "iana",
|
|
charset: "US-ASCII"
|
|
},
|
|
"application/news-groupinfo": {
|
|
source: "iana",
|
|
charset: "US-ASCII"
|
|
},
|
|
"application/news-transmission": {
|
|
source: "iana"
|
|
},
|
|
"application/nlsml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/node": {
|
|
source: "iana",
|
|
extensions: ["cjs"]
|
|
},
|
|
"application/nss": {
|
|
source: "iana"
|
|
},
|
|
"application/oauth-authz-req+jwt": {
|
|
source: "iana"
|
|
},
|
|
"application/oblivious-dns-message": {
|
|
source: "iana"
|
|
},
|
|
"application/ocsp-request": {
|
|
source: "iana"
|
|
},
|
|
"application/ocsp-response": {
|
|
source: "iana"
|
|
},
|
|
"application/octet-stream": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
|
|
},
|
|
"application/oda": {
|
|
source: "iana",
|
|
extensions: ["oda"]
|
|
},
|
|
"application/odm+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/odx": {
|
|
source: "iana"
|
|
},
|
|
"application/oebps-package+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["opf"]
|
|
},
|
|
"application/ogg": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["ogx"]
|
|
},
|
|
"application/omdoc+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["omdoc"]
|
|
},
|
|
"application/onenote": {
|
|
source: "apache",
|
|
extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"]
|
|
},
|
|
"application/opc-nodeset+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/oscore": {
|
|
source: "iana"
|
|
},
|
|
"application/oxps": {
|
|
source: "iana",
|
|
extensions: ["oxps"]
|
|
},
|
|
"application/p21": {
|
|
source: "iana"
|
|
},
|
|
"application/p21+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/p2p-overlay+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["relo"]
|
|
},
|
|
"application/parityfec": {
|
|
source: "iana"
|
|
},
|
|
"application/passport": {
|
|
source: "iana"
|
|
},
|
|
"application/patch-ops-error+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xer"]
|
|
},
|
|
"application/pdf": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["pdf"]
|
|
},
|
|
"application/pdx": {
|
|
source: "iana"
|
|
},
|
|
"application/pem-certificate-chain": {
|
|
source: "iana"
|
|
},
|
|
"application/pgp-encrypted": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["pgp"]
|
|
},
|
|
"application/pgp-keys": {
|
|
source: "iana",
|
|
extensions: ["asc"]
|
|
},
|
|
"application/pgp-signature": {
|
|
source: "iana",
|
|
extensions: ["asc", "sig"]
|
|
},
|
|
"application/pics-rules": {
|
|
source: "apache",
|
|
extensions: ["prf"]
|
|
},
|
|
"application/pidf+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/pidf-diff+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/pkcs10": {
|
|
source: "iana",
|
|
extensions: ["p10"]
|
|
},
|
|
"application/pkcs12": {
|
|
source: "iana"
|
|
},
|
|
"application/pkcs7-mime": {
|
|
source: "iana",
|
|
extensions: ["p7m", "p7c"]
|
|
},
|
|
"application/pkcs7-signature": {
|
|
source: "iana",
|
|
extensions: ["p7s"]
|
|
},
|
|
"application/pkcs8": {
|
|
source: "iana",
|
|
extensions: ["p8"]
|
|
},
|
|
"application/pkcs8-encrypted": {
|
|
source: "iana"
|
|
},
|
|
"application/pkix-attr-cert": {
|
|
source: "iana",
|
|
extensions: ["ac"]
|
|
},
|
|
"application/pkix-cert": {
|
|
source: "iana",
|
|
extensions: ["cer"]
|
|
},
|
|
"application/pkix-crl": {
|
|
source: "iana",
|
|
extensions: ["crl"]
|
|
},
|
|
"application/pkix-pkipath": {
|
|
source: "iana",
|
|
extensions: ["pkipath"]
|
|
},
|
|
"application/pkixcmp": {
|
|
source: "iana",
|
|
extensions: ["pki"]
|
|
},
|
|
"application/pls+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["pls"]
|
|
},
|
|
"application/poc-settings+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/postscript": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ai", "eps", "ps"]
|
|
},
|
|
"application/ppsp-tracker+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/problem+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/problem+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/provenance+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["provx"]
|
|
},
|
|
"application/prs.alvestrand.titrax-sheet": {
|
|
source: "iana"
|
|
},
|
|
"application/prs.cww": {
|
|
source: "iana",
|
|
extensions: ["cww"]
|
|
},
|
|
"application/prs.cyn": {
|
|
source: "iana",
|
|
charset: "7-BIT"
|
|
},
|
|
"application/prs.hpub+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/prs.nprend": {
|
|
source: "iana"
|
|
},
|
|
"application/prs.plucker": {
|
|
source: "iana"
|
|
},
|
|
"application/prs.rdf-xml-crypt": {
|
|
source: "iana"
|
|
},
|
|
"application/prs.xsf+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/pskc+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["pskcxml"]
|
|
},
|
|
"application/pvd+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/qsig": {
|
|
source: "iana"
|
|
},
|
|
"application/raml+yaml": {
|
|
compressible: true,
|
|
extensions: ["raml"]
|
|
},
|
|
"application/raptorfec": {
|
|
source: "iana"
|
|
},
|
|
"application/rdap+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/rdf+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rdf", "owl"]
|
|
},
|
|
"application/reginfo+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rif"]
|
|
},
|
|
"application/relax-ng-compact-syntax": {
|
|
source: "iana",
|
|
extensions: ["rnc"]
|
|
},
|
|
"application/remote-printing": {
|
|
source: "iana"
|
|
},
|
|
"application/reputon+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/resource-lists+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rl"]
|
|
},
|
|
"application/resource-lists-diff+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rld"]
|
|
},
|
|
"application/rfc+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/riscos": {
|
|
source: "iana"
|
|
},
|
|
"application/rlmi+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/rls-services+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rs"]
|
|
},
|
|
"application/route-apd+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rapd"]
|
|
},
|
|
"application/route-s-tsid+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["sls"]
|
|
},
|
|
"application/route-usd+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rusd"]
|
|
},
|
|
"application/rpki-ghostbusters": {
|
|
source: "iana",
|
|
extensions: ["gbr"]
|
|
},
|
|
"application/rpki-manifest": {
|
|
source: "iana",
|
|
extensions: ["mft"]
|
|
},
|
|
"application/rpki-publication": {
|
|
source: "iana"
|
|
},
|
|
"application/rpki-roa": {
|
|
source: "iana",
|
|
extensions: ["roa"]
|
|
},
|
|
"application/rpki-updown": {
|
|
source: "iana"
|
|
},
|
|
"application/rsd+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["rsd"]
|
|
},
|
|
"application/rss+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["rss"]
|
|
},
|
|
"application/rtf": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rtf"]
|
|
},
|
|
"application/rtploopback": {
|
|
source: "iana"
|
|
},
|
|
"application/rtx": {
|
|
source: "iana"
|
|
},
|
|
"application/samlassertion+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/samlmetadata+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/sarif+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/sarif-external-properties+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/sbe": {
|
|
source: "iana"
|
|
},
|
|
"application/sbml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["sbml"]
|
|
},
|
|
"application/scaip+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/scim+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/scvp-cv-request": {
|
|
source: "iana",
|
|
extensions: ["scq"]
|
|
},
|
|
"application/scvp-cv-response": {
|
|
source: "iana",
|
|
extensions: ["scs"]
|
|
},
|
|
"application/scvp-vp-request": {
|
|
source: "iana",
|
|
extensions: ["spq"]
|
|
},
|
|
"application/scvp-vp-response": {
|
|
source: "iana",
|
|
extensions: ["spp"]
|
|
},
|
|
"application/sdp": {
|
|
source: "iana",
|
|
extensions: ["sdp"]
|
|
},
|
|
"application/secevent+jwt": {
|
|
source: "iana"
|
|
},
|
|
"application/senml+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/senml+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/senml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["senmlx"]
|
|
},
|
|
"application/senml-etch+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/senml-etch+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/senml-exi": {
|
|
source: "iana"
|
|
},
|
|
"application/sensml+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/sensml+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/sensml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["sensmlx"]
|
|
},
|
|
"application/sensml-exi": {
|
|
source: "iana"
|
|
},
|
|
"application/sep+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/sep-exi": {
|
|
source: "iana"
|
|
},
|
|
"application/session-info": {
|
|
source: "iana"
|
|
},
|
|
"application/set-payment": {
|
|
source: "iana"
|
|
},
|
|
"application/set-payment-initiation": {
|
|
source: "iana",
|
|
extensions: ["setpay"]
|
|
},
|
|
"application/set-registration": {
|
|
source: "iana"
|
|
},
|
|
"application/set-registration-initiation": {
|
|
source: "iana",
|
|
extensions: ["setreg"]
|
|
},
|
|
"application/sgml": {
|
|
source: "iana"
|
|
},
|
|
"application/sgml-open-catalog": {
|
|
source: "iana"
|
|
},
|
|
"application/shf+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["shf"]
|
|
},
|
|
"application/sieve": {
|
|
source: "iana",
|
|
extensions: ["siv", "sieve"]
|
|
},
|
|
"application/simple-filter+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/simple-message-summary": {
|
|
source: "iana"
|
|
},
|
|
"application/simplesymbolcontainer": {
|
|
source: "iana"
|
|
},
|
|
"application/sipc": {
|
|
source: "iana"
|
|
},
|
|
"application/slate": {
|
|
source: "iana"
|
|
},
|
|
"application/smil": {
|
|
source: "iana"
|
|
},
|
|
"application/smil+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["smi", "smil"]
|
|
},
|
|
"application/smpte336m": {
|
|
source: "iana"
|
|
},
|
|
"application/soap+fastinfoset": {
|
|
source: "iana"
|
|
},
|
|
"application/soap+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/sparql-query": {
|
|
source: "iana",
|
|
extensions: ["rq"]
|
|
},
|
|
"application/sparql-results+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["srx"]
|
|
},
|
|
"application/spdx+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/spirits-event+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/sql": {
|
|
source: "iana"
|
|
},
|
|
"application/srgs": {
|
|
source: "iana",
|
|
extensions: ["gram"]
|
|
},
|
|
"application/srgs+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["grxml"]
|
|
},
|
|
"application/sru+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["sru"]
|
|
},
|
|
"application/ssdl+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["ssdl"]
|
|
},
|
|
"application/ssml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ssml"]
|
|
},
|
|
"application/stix+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/swid+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["swidtag"]
|
|
},
|
|
"application/tamp-apex-update": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-apex-update-confirm": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-community-update": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-community-update-confirm": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-error": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-sequence-adjust": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-sequence-adjust-confirm": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-status-query": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-status-response": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-update": {
|
|
source: "iana"
|
|
},
|
|
"application/tamp-update-confirm": {
|
|
source: "iana"
|
|
},
|
|
"application/tar": {
|
|
compressible: true
|
|
},
|
|
"application/taxii+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/td+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/tei+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["tei", "teicorpus"]
|
|
},
|
|
"application/tetra_isi": {
|
|
source: "iana"
|
|
},
|
|
"application/thraud+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["tfi"]
|
|
},
|
|
"application/timestamp-query": {
|
|
source: "iana"
|
|
},
|
|
"application/timestamp-reply": {
|
|
source: "iana"
|
|
},
|
|
"application/timestamped-data": {
|
|
source: "iana",
|
|
extensions: ["tsd"]
|
|
},
|
|
"application/tlsrpt+gzip": {
|
|
source: "iana"
|
|
},
|
|
"application/tlsrpt+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/tnauthlist": {
|
|
source: "iana"
|
|
},
|
|
"application/token-introspection+jwt": {
|
|
source: "iana"
|
|
},
|
|
"application/toml": {
|
|
compressible: true,
|
|
extensions: ["toml"]
|
|
},
|
|
"application/trickle-ice-sdpfrag": {
|
|
source: "iana"
|
|
},
|
|
"application/trig": {
|
|
source: "iana",
|
|
extensions: ["trig"]
|
|
},
|
|
"application/ttml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ttml"]
|
|
},
|
|
"application/tve-trigger": {
|
|
source: "iana"
|
|
},
|
|
"application/tzif": {
|
|
source: "iana"
|
|
},
|
|
"application/tzif-leap": {
|
|
source: "iana"
|
|
},
|
|
"application/ubjson": {
|
|
compressible: false,
|
|
extensions: ["ubj"]
|
|
},
|
|
"application/ulpfec": {
|
|
source: "iana"
|
|
},
|
|
"application/urc-grpsheet+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/urc-ressheet+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rsheet"]
|
|
},
|
|
"application/urc-targetdesc+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["td"]
|
|
},
|
|
"application/urc-uisocketdesc+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vcard+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vcard+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vemmi": {
|
|
source: "iana"
|
|
},
|
|
"application/vividence.scriptfile": {
|
|
source: "apache"
|
|
},
|
|
"application/vnd.1000minds.decision-model+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["1km"]
|
|
},
|
|
"application/vnd.3gpp-prose+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp-prose-pc3ch+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp-v2x-local-service-information": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.5gnas": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.access-transfer-events+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.bsf+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.gmop+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.gtpc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.interworking-data": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.lpp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.mc-signalling-ear": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.mcdata-affiliation-command+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcdata-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcdata-payload": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.mcdata-service-config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcdata-signalling": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.mcdata-ue-config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcdata-user-profile+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-affiliation-command+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-floor-request+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-location-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-service-config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-signed+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-ue-config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-ue-init-config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcptt-user-profile+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-affiliation-command+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-affiliation-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-location-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-service-config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-transmission-request+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-ue-config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mcvideo-user-profile+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.mid-call+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.ngap": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.pfcp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.pic-bw-large": {
|
|
source: "iana",
|
|
extensions: ["plb"]
|
|
},
|
|
"application/vnd.3gpp.pic-bw-small": {
|
|
source: "iana",
|
|
extensions: ["psb"]
|
|
},
|
|
"application/vnd.3gpp.pic-bw-var": {
|
|
source: "iana",
|
|
extensions: ["pvb"]
|
|
},
|
|
"application/vnd.3gpp.s1ap": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.sms": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp.sms+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.srvcc-ext+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.srvcc-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.state-and-event-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp.ussd+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp2.bcmcsinfo+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.3gpp2.sms": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3gpp2.tcap": {
|
|
source: "iana",
|
|
extensions: ["tcap"]
|
|
},
|
|
"application/vnd.3lightssoftware.imagescal": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.3m.post-it-notes": {
|
|
source: "iana",
|
|
extensions: ["pwn"]
|
|
},
|
|
"application/vnd.accpac.simply.aso": {
|
|
source: "iana",
|
|
extensions: ["aso"]
|
|
},
|
|
"application/vnd.accpac.simply.imp": {
|
|
source: "iana",
|
|
extensions: ["imp"]
|
|
},
|
|
"application/vnd.acucobol": {
|
|
source: "iana",
|
|
extensions: ["acu"]
|
|
},
|
|
"application/vnd.acucorp": {
|
|
source: "iana",
|
|
extensions: ["atc", "acutc"]
|
|
},
|
|
"application/vnd.adobe.air-application-installer-package+zip": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["air"]
|
|
},
|
|
"application/vnd.adobe.flash.movie": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.adobe.formscentral.fcdt": {
|
|
source: "iana",
|
|
extensions: ["fcdt"]
|
|
},
|
|
"application/vnd.adobe.fxp": {
|
|
source: "iana",
|
|
extensions: ["fxp", "fxpl"]
|
|
},
|
|
"application/vnd.adobe.partial-upload": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.adobe.xdp+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xdp"]
|
|
},
|
|
"application/vnd.adobe.xfdf": {
|
|
source: "iana",
|
|
extensions: ["xfdf"]
|
|
},
|
|
"application/vnd.aether.imp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.afplinedata": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.afplinedata-pagedef": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.cmoca-cmresource": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.foca-charset": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.foca-codedfont": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.foca-codepage": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.modca": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.modca-cmtable": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.modca-formdef": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.modca-mediummap": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.modca-objectcontainer": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.modca-overlay": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.afpc.modca-pagesegment": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.age": {
|
|
source: "iana",
|
|
extensions: ["age"]
|
|
},
|
|
"application/vnd.ah-barcode": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ahead.space": {
|
|
source: "iana",
|
|
extensions: ["ahead"]
|
|
},
|
|
"application/vnd.airzip.filesecure.azf": {
|
|
source: "iana",
|
|
extensions: ["azf"]
|
|
},
|
|
"application/vnd.airzip.filesecure.azs": {
|
|
source: "iana",
|
|
extensions: ["azs"]
|
|
},
|
|
"application/vnd.amadeus+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.amazon.ebook": {
|
|
source: "apache",
|
|
extensions: ["azw"]
|
|
},
|
|
"application/vnd.amazon.mobi8-ebook": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.americandynamics.acc": {
|
|
source: "iana",
|
|
extensions: ["acc"]
|
|
},
|
|
"application/vnd.amiga.ami": {
|
|
source: "iana",
|
|
extensions: ["ami"]
|
|
},
|
|
"application/vnd.amundsen.maze+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.android.ota": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.android.package-archive": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["apk"]
|
|
},
|
|
"application/vnd.anki": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.anser-web-certificate-issue-initiation": {
|
|
source: "iana",
|
|
extensions: ["cii"]
|
|
},
|
|
"application/vnd.anser-web-funds-transfer-initiation": {
|
|
source: "apache",
|
|
extensions: ["fti"]
|
|
},
|
|
"application/vnd.antix.game-component": {
|
|
source: "iana",
|
|
extensions: ["atx"]
|
|
},
|
|
"application/vnd.apache.arrow.file": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.apache.arrow.stream": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.apache.thrift.binary": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.apache.thrift.compact": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.apache.thrift.json": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.api+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.aplextor.warrp+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.apothekende.reservation+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.apple.installer+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mpkg"]
|
|
},
|
|
"application/vnd.apple.keynote": {
|
|
source: "iana",
|
|
extensions: ["key"]
|
|
},
|
|
"application/vnd.apple.mpegurl": {
|
|
source: "iana",
|
|
extensions: ["m3u8"]
|
|
},
|
|
"application/vnd.apple.numbers": {
|
|
source: "iana",
|
|
extensions: ["numbers"]
|
|
},
|
|
"application/vnd.apple.pages": {
|
|
source: "iana",
|
|
extensions: ["pages"]
|
|
},
|
|
"application/vnd.apple.pkpass": {
|
|
compressible: false,
|
|
extensions: ["pkpass"]
|
|
},
|
|
"application/vnd.arastra.swi": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.aristanetworks.swi": {
|
|
source: "iana",
|
|
extensions: ["swi"]
|
|
},
|
|
"application/vnd.artisan+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.artsquare": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.astraea-software.iota": {
|
|
source: "iana",
|
|
extensions: ["iota"]
|
|
},
|
|
"application/vnd.audiograph": {
|
|
source: "iana",
|
|
extensions: ["aep"]
|
|
},
|
|
"application/vnd.autopackage": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.avalon+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.avistar+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.balsamiq.bmml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["bmml"]
|
|
},
|
|
"application/vnd.balsamiq.bmpr": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.banana-accounting": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.bbf.usp.error": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.bbf.usp.msg": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.bbf.usp.msg+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.bekitzur-stech+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.bint.med-content": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.biopax.rdf+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.blink-idb-value-wrapper": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.blueice.multipass": {
|
|
source: "iana",
|
|
extensions: ["mpm"]
|
|
},
|
|
"application/vnd.bluetooth.ep.oob": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.bluetooth.le.oob": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.bmi": {
|
|
source: "iana",
|
|
extensions: ["bmi"]
|
|
},
|
|
"application/vnd.bpf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.bpf3": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.businessobjects": {
|
|
source: "iana",
|
|
extensions: ["rep"]
|
|
},
|
|
"application/vnd.byu.uapi+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.cab-jscript": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.canon-cpdl": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.canon-lips": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.capasystems-pg+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.cendio.thinlinc.clientconf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.century-systems.tcp_stream": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.chemdraw+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["cdxml"]
|
|
},
|
|
"application/vnd.chess-pgn": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.chipnuts.karaoke-mmd": {
|
|
source: "iana",
|
|
extensions: ["mmd"]
|
|
},
|
|
"application/vnd.ciedi": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.cinderella": {
|
|
source: "iana",
|
|
extensions: ["cdy"]
|
|
},
|
|
"application/vnd.cirpack.isdn-ext": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.citationstyles.style+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["csl"]
|
|
},
|
|
"application/vnd.claymore": {
|
|
source: "iana",
|
|
extensions: ["cla"]
|
|
},
|
|
"application/vnd.cloanto.rp9": {
|
|
source: "iana",
|
|
extensions: ["rp9"]
|
|
},
|
|
"application/vnd.clonk.c4group": {
|
|
source: "iana",
|
|
extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
|
|
},
|
|
"application/vnd.cluetrust.cartomobile-config": {
|
|
source: "iana",
|
|
extensions: ["c11amc"]
|
|
},
|
|
"application/vnd.cluetrust.cartomobile-config-pkg": {
|
|
source: "iana",
|
|
extensions: ["c11amz"]
|
|
},
|
|
"application/vnd.coffeescript": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.collabio.xodocuments.document": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.collabio.xodocuments.document-template": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.collabio.xodocuments.presentation": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.collabio.xodocuments.presentation-template": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.collabio.xodocuments.spreadsheet": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.collabio.xodocuments.spreadsheet-template": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.collection+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.collection.doc+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.collection.next+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.comicbook+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.comicbook-rar": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.commerce-battelle": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.commonspace": {
|
|
source: "iana",
|
|
extensions: ["csp"]
|
|
},
|
|
"application/vnd.contact.cmsg": {
|
|
source: "iana",
|
|
extensions: ["cdbcmsg"]
|
|
},
|
|
"application/vnd.coreos.ignition+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.cosmocaller": {
|
|
source: "iana",
|
|
extensions: ["cmc"]
|
|
},
|
|
"application/vnd.crick.clicker": {
|
|
source: "iana",
|
|
extensions: ["clkx"]
|
|
},
|
|
"application/vnd.crick.clicker.keyboard": {
|
|
source: "iana",
|
|
extensions: ["clkk"]
|
|
},
|
|
"application/vnd.crick.clicker.palette": {
|
|
source: "iana",
|
|
extensions: ["clkp"]
|
|
},
|
|
"application/vnd.crick.clicker.template": {
|
|
source: "iana",
|
|
extensions: ["clkt"]
|
|
},
|
|
"application/vnd.crick.clicker.wordbank": {
|
|
source: "iana",
|
|
extensions: ["clkw"]
|
|
},
|
|
"application/vnd.criticaltools.wbs+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["wbs"]
|
|
},
|
|
"application/vnd.cryptii.pipe+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.crypto-shade-file": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.cryptomator.encrypted": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.cryptomator.vault": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ctc-posml": {
|
|
source: "iana",
|
|
extensions: ["pml"]
|
|
},
|
|
"application/vnd.ctct.ws+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.cups-pdf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.cups-postscript": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.cups-ppd": {
|
|
source: "iana",
|
|
extensions: ["ppd"]
|
|
},
|
|
"application/vnd.cups-raster": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.cups-raw": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.curl": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.curl.car": {
|
|
source: "apache",
|
|
extensions: ["car"]
|
|
},
|
|
"application/vnd.curl.pcurl": {
|
|
source: "apache",
|
|
extensions: ["pcurl"]
|
|
},
|
|
"application/vnd.cyan.dean.root+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.cybank": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.cyclonedx+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.cyclonedx+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.d2l.coursepackage1p0+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.d3m-dataset": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.d3m-problem": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dart": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["dart"]
|
|
},
|
|
"application/vnd.data-vision.rdz": {
|
|
source: "iana",
|
|
extensions: ["rdz"]
|
|
},
|
|
"application/vnd.datapackage+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dataresource+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dbf": {
|
|
source: "iana",
|
|
extensions: ["dbf"]
|
|
},
|
|
"application/vnd.debian.binary-package": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dece.data": {
|
|
source: "iana",
|
|
extensions: ["uvf", "uvvf", "uvd", "uvvd"]
|
|
},
|
|
"application/vnd.dece.ttml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["uvt", "uvvt"]
|
|
},
|
|
"application/vnd.dece.unspecified": {
|
|
source: "iana",
|
|
extensions: ["uvx", "uvvx"]
|
|
},
|
|
"application/vnd.dece.zip": {
|
|
source: "iana",
|
|
extensions: ["uvz", "uvvz"]
|
|
},
|
|
"application/vnd.denovo.fcselayout-link": {
|
|
source: "iana",
|
|
extensions: ["fe_launch"]
|
|
},
|
|
"application/vnd.desmume.movie": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dir-bi.plate-dl-nosuffix": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dm.delegation+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dna": {
|
|
source: "iana",
|
|
extensions: ["dna"]
|
|
},
|
|
"application/vnd.document+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dolby.mlp": {
|
|
source: "apache",
|
|
extensions: ["mlp"]
|
|
},
|
|
"application/vnd.dolby.mobile.1": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dolby.mobile.2": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.doremir.scorecloud-binary-document": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dpgraph": {
|
|
source: "iana",
|
|
extensions: ["dpg"]
|
|
},
|
|
"application/vnd.dreamfactory": {
|
|
source: "iana",
|
|
extensions: ["dfac"]
|
|
},
|
|
"application/vnd.drive+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ds-keypoint": {
|
|
source: "apache",
|
|
extensions: ["kpxx"]
|
|
},
|
|
"application/vnd.dtg.local": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dtg.local.flash": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dtg.local.html": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.ait": {
|
|
source: "iana",
|
|
extensions: ["ait"]
|
|
},
|
|
"application/vnd.dvb.dvbisl+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.dvbj": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.esgcontainer": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.ipdcdftnotifaccess": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.ipdcesgaccess": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.ipdcesgaccess2": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.ipdcesgpdd": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.ipdcroaming": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.iptv.alfec-base": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.iptv.alfec-enhancement": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.notif-aggregate-root+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.notif-container+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.notif-generic+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.notif-ia-msglist+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.notif-ia-registration-request+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.notif-ia-registration-response+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.notif-init+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.dvb.pfr": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dvb.service": {
|
|
source: "iana",
|
|
extensions: ["svc"]
|
|
},
|
|
"application/vnd.dxr": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.dynageo": {
|
|
source: "iana",
|
|
extensions: ["geo"]
|
|
},
|
|
"application/vnd.dzr": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.easykaraoke.cdgdownload": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ecdis-update": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ecip.rlp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.eclipse.ditto+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ecowin.chart": {
|
|
source: "iana",
|
|
extensions: ["mag"]
|
|
},
|
|
"application/vnd.ecowin.filerequest": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ecowin.fileupdate": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ecowin.series": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ecowin.seriesrequest": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ecowin.seriesupdate": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.efi.img": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.efi.iso": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.emclient.accessrequest+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.enliven": {
|
|
source: "iana",
|
|
extensions: ["nml"]
|
|
},
|
|
"application/vnd.enphase.envoy": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.eprints.data+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.epson.esf": {
|
|
source: "iana",
|
|
extensions: ["esf"]
|
|
},
|
|
"application/vnd.epson.msf": {
|
|
source: "iana",
|
|
extensions: ["msf"]
|
|
},
|
|
"application/vnd.epson.quickanime": {
|
|
source: "iana",
|
|
extensions: ["qam"]
|
|
},
|
|
"application/vnd.epson.salt": {
|
|
source: "iana",
|
|
extensions: ["slt"]
|
|
},
|
|
"application/vnd.epson.ssf": {
|
|
source: "iana",
|
|
extensions: ["ssf"]
|
|
},
|
|
"application/vnd.ericsson.quickcall": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.espass-espass+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.eszigno3+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["es3", "et3"]
|
|
},
|
|
"application/vnd.etsi.aoc+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.asic-e+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.etsi.asic-s+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.etsi.cug+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvcommand+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvdiscovery+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvprofile+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvsad-bc+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvsad-cod+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvsad-npvr+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvservice+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvsync+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.iptvueprofile+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.mcid+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.mheg5": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.etsi.overload-control-policy-dataset+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.pstn+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.sci+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.simservs+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.timestamp-token": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.etsi.tsl+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.etsi.tsl.der": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.eu.kasparian.car+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.eudora.data": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.evolv.ecig.profile": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.evolv.ecig.settings": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.evolv.ecig.theme": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.exstream-empower+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.exstream-package": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ezpix-album": {
|
|
source: "iana",
|
|
extensions: ["ez2"]
|
|
},
|
|
"application/vnd.ezpix-package": {
|
|
source: "iana",
|
|
extensions: ["ez3"]
|
|
},
|
|
"application/vnd.f-secure.mobile": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.familysearch.gedcom+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.fastcopy-disk-image": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fdf": {
|
|
source: "iana",
|
|
extensions: ["fdf"]
|
|
},
|
|
"application/vnd.fdsn.mseed": {
|
|
source: "iana",
|
|
extensions: ["mseed"]
|
|
},
|
|
"application/vnd.fdsn.seed": {
|
|
source: "iana",
|
|
extensions: ["seed", "dataless"]
|
|
},
|
|
"application/vnd.ffsns": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ficlab.flb+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.filmit.zfc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fints": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.firemonkeys.cloudcell": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.flographit": {
|
|
source: "iana",
|
|
extensions: ["gph"]
|
|
},
|
|
"application/vnd.fluxtime.clip": {
|
|
source: "iana",
|
|
extensions: ["ftc"]
|
|
},
|
|
"application/vnd.font-fontforge-sfd": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.framemaker": {
|
|
source: "iana",
|
|
extensions: ["fm", "frame", "maker", "book"]
|
|
},
|
|
"application/vnd.frogans.fnc": {
|
|
source: "iana",
|
|
extensions: ["fnc"]
|
|
},
|
|
"application/vnd.frogans.ltf": {
|
|
source: "iana",
|
|
extensions: ["ltf"]
|
|
},
|
|
"application/vnd.fsc.weblaunch": {
|
|
source: "iana",
|
|
extensions: ["fsc"]
|
|
},
|
|
"application/vnd.fujifilm.fb.docuworks": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fujifilm.fb.docuworks.binder": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fujifilm.fb.docuworks.container": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fujifilm.fb.jfi+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.fujitsu.oasys": {
|
|
source: "iana",
|
|
extensions: ["oas"]
|
|
},
|
|
"application/vnd.fujitsu.oasys2": {
|
|
source: "iana",
|
|
extensions: ["oa2"]
|
|
},
|
|
"application/vnd.fujitsu.oasys3": {
|
|
source: "iana",
|
|
extensions: ["oa3"]
|
|
},
|
|
"application/vnd.fujitsu.oasysgp": {
|
|
source: "iana",
|
|
extensions: ["fg5"]
|
|
},
|
|
"application/vnd.fujitsu.oasysprs": {
|
|
source: "iana",
|
|
extensions: ["bh2"]
|
|
},
|
|
"application/vnd.fujixerox.art-ex": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fujixerox.art4": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fujixerox.ddd": {
|
|
source: "iana",
|
|
extensions: ["ddd"]
|
|
},
|
|
"application/vnd.fujixerox.docuworks": {
|
|
source: "iana",
|
|
extensions: ["xdw"]
|
|
},
|
|
"application/vnd.fujixerox.docuworks.binder": {
|
|
source: "iana",
|
|
extensions: ["xbd"]
|
|
},
|
|
"application/vnd.fujixerox.docuworks.container": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fujixerox.hbpl": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.fut-misnet": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.futoin+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.futoin+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.fuzzysheet": {
|
|
source: "iana",
|
|
extensions: ["fzs"]
|
|
},
|
|
"application/vnd.genomatix.tuxedo": {
|
|
source: "iana",
|
|
extensions: ["txd"]
|
|
},
|
|
"application/vnd.gentics.grd+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.geo+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.geocube+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.geogebra.file": {
|
|
source: "iana",
|
|
extensions: ["ggb"]
|
|
},
|
|
"application/vnd.geogebra.slides": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.geogebra.tool": {
|
|
source: "iana",
|
|
extensions: ["ggt"]
|
|
},
|
|
"application/vnd.geometry-explorer": {
|
|
source: "iana",
|
|
extensions: ["gex", "gre"]
|
|
},
|
|
"application/vnd.geonext": {
|
|
source: "iana",
|
|
extensions: ["gxt"]
|
|
},
|
|
"application/vnd.geoplan": {
|
|
source: "iana",
|
|
extensions: ["g2w"]
|
|
},
|
|
"application/vnd.geospace": {
|
|
source: "iana",
|
|
extensions: ["g3w"]
|
|
},
|
|
"application/vnd.gerber": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.globalplatform.card-content-mgt": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.globalplatform.card-content-mgt-response": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.gmx": {
|
|
source: "iana",
|
|
extensions: ["gmx"]
|
|
},
|
|
"application/vnd.google-apps.document": {
|
|
compressible: false,
|
|
extensions: ["gdoc"]
|
|
},
|
|
"application/vnd.google-apps.presentation": {
|
|
compressible: false,
|
|
extensions: ["gslides"]
|
|
},
|
|
"application/vnd.google-apps.spreadsheet": {
|
|
compressible: false,
|
|
extensions: ["gsheet"]
|
|
},
|
|
"application/vnd.google-earth.kml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["kml"]
|
|
},
|
|
"application/vnd.google-earth.kmz": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["kmz"]
|
|
},
|
|
"application/vnd.gov.sk.e-form+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.gov.sk.e-form+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.gov.sk.xmldatacontainer+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.grafeq": {
|
|
source: "iana",
|
|
extensions: ["gqf", "gqs"]
|
|
},
|
|
"application/vnd.gridmp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.groove-account": {
|
|
source: "iana",
|
|
extensions: ["gac"]
|
|
},
|
|
"application/vnd.groove-help": {
|
|
source: "iana",
|
|
extensions: ["ghf"]
|
|
},
|
|
"application/vnd.groove-identity-message": {
|
|
source: "iana",
|
|
extensions: ["gim"]
|
|
},
|
|
"application/vnd.groove-injector": {
|
|
source: "iana",
|
|
extensions: ["grv"]
|
|
},
|
|
"application/vnd.groove-tool-message": {
|
|
source: "iana",
|
|
extensions: ["gtm"]
|
|
},
|
|
"application/vnd.groove-tool-template": {
|
|
source: "iana",
|
|
extensions: ["tpl"]
|
|
},
|
|
"application/vnd.groove-vcard": {
|
|
source: "iana",
|
|
extensions: ["vcg"]
|
|
},
|
|
"application/vnd.hal+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hal+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["hal"]
|
|
},
|
|
"application/vnd.handheld-entertainment+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["zmm"]
|
|
},
|
|
"application/vnd.hbci": {
|
|
source: "iana",
|
|
extensions: ["hbci"]
|
|
},
|
|
"application/vnd.hc+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hcl-bireports": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.hdt": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.heroku+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hhe.lesson-player": {
|
|
source: "iana",
|
|
extensions: ["les"]
|
|
},
|
|
"application/vnd.hl7cda+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hl7v2+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hp-hpgl": {
|
|
source: "iana",
|
|
extensions: ["hpgl"]
|
|
},
|
|
"application/vnd.hp-hpid": {
|
|
source: "iana",
|
|
extensions: ["hpid"]
|
|
},
|
|
"application/vnd.hp-hps": {
|
|
source: "iana",
|
|
extensions: ["hps"]
|
|
},
|
|
"application/vnd.hp-jlyt": {
|
|
source: "iana",
|
|
extensions: ["jlt"]
|
|
},
|
|
"application/vnd.hp-pcl": {
|
|
source: "iana",
|
|
extensions: ["pcl"]
|
|
},
|
|
"application/vnd.hp-pclxl": {
|
|
source: "iana",
|
|
extensions: ["pclxl"]
|
|
},
|
|
"application/vnd.httphone": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.hydrostatix.sof-data": {
|
|
source: "iana",
|
|
extensions: ["sfd-hdstx"]
|
|
},
|
|
"application/vnd.hyper+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hyper-item+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hyperdrive+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.hzn-3d-crossword": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ibm.afplinedata": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ibm.electronic-media": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ibm.minipay": {
|
|
source: "iana",
|
|
extensions: ["mpy"]
|
|
},
|
|
"application/vnd.ibm.modcap": {
|
|
source: "iana",
|
|
extensions: ["afp", "listafp", "list3820"]
|
|
},
|
|
"application/vnd.ibm.rights-management": {
|
|
source: "iana",
|
|
extensions: ["irm"]
|
|
},
|
|
"application/vnd.ibm.secure-container": {
|
|
source: "iana",
|
|
extensions: ["sc"]
|
|
},
|
|
"application/vnd.iccprofile": {
|
|
source: "iana",
|
|
extensions: ["icc", "icm"]
|
|
},
|
|
"application/vnd.ieee.1905": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.igloader": {
|
|
source: "iana",
|
|
extensions: ["igl"]
|
|
},
|
|
"application/vnd.imagemeter.folder+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.imagemeter.image+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.immervision-ivp": {
|
|
source: "iana",
|
|
extensions: ["ivp"]
|
|
},
|
|
"application/vnd.immervision-ivu": {
|
|
source: "iana",
|
|
extensions: ["ivu"]
|
|
},
|
|
"application/vnd.ims.imsccv1p1": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ims.imsccv1p2": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ims.imsccv1p3": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ims.lis.v2.result+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ims.lti.v2.toolconsumerprofile+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ims.lti.v2.toolproxy+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ims.lti.v2.toolproxy.id+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ims.lti.v2.toolsettings+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ims.lti.v2.toolsettings.simple+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.informedcontrol.rms+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.informix-visionary": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.infotech.project": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.infotech.project+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.innopath.wamp.notification": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.insors.igm": {
|
|
source: "iana",
|
|
extensions: ["igm"]
|
|
},
|
|
"application/vnd.intercon.formnet": {
|
|
source: "iana",
|
|
extensions: ["xpw", "xpx"]
|
|
},
|
|
"application/vnd.intergeo": {
|
|
source: "iana",
|
|
extensions: ["i2g"]
|
|
},
|
|
"application/vnd.intertrust.digibox": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.intertrust.nncp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.intu.qbo": {
|
|
source: "iana",
|
|
extensions: ["qbo"]
|
|
},
|
|
"application/vnd.intu.qfx": {
|
|
source: "iana",
|
|
extensions: ["qfx"]
|
|
},
|
|
"application/vnd.iptc.g2.catalogitem+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.iptc.g2.conceptitem+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.iptc.g2.knowledgeitem+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.iptc.g2.newsitem+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.iptc.g2.newsmessage+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.iptc.g2.packageitem+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.iptc.g2.planningitem+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ipunplugged.rcprofile": {
|
|
source: "iana",
|
|
extensions: ["rcprofile"]
|
|
},
|
|
"application/vnd.irepository.package+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["irp"]
|
|
},
|
|
"application/vnd.is-xpr": {
|
|
source: "iana",
|
|
extensions: ["xpr"]
|
|
},
|
|
"application/vnd.isac.fcs": {
|
|
source: "iana",
|
|
extensions: ["fcs"]
|
|
},
|
|
"application/vnd.iso11783-10+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.jam": {
|
|
source: "iana",
|
|
extensions: ["jam"]
|
|
},
|
|
"application/vnd.japannet-directory-service": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.japannet-jpnstore-wakeup": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.japannet-payment-wakeup": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.japannet-registration": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.japannet-registration-wakeup": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.japannet-setstore-wakeup": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.japannet-verification": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.japannet-verification-wakeup": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.jcp.javame.midlet-rms": {
|
|
source: "iana",
|
|
extensions: ["rms"]
|
|
},
|
|
"application/vnd.jisp": {
|
|
source: "iana",
|
|
extensions: ["jisp"]
|
|
},
|
|
"application/vnd.joost.joda-archive": {
|
|
source: "iana",
|
|
extensions: ["joda"]
|
|
},
|
|
"application/vnd.jsk.isdn-ngn": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.kahootz": {
|
|
source: "iana",
|
|
extensions: ["ktz", "ktr"]
|
|
},
|
|
"application/vnd.kde.karbon": {
|
|
source: "iana",
|
|
extensions: ["karbon"]
|
|
},
|
|
"application/vnd.kde.kchart": {
|
|
source: "iana",
|
|
extensions: ["chrt"]
|
|
},
|
|
"application/vnd.kde.kformula": {
|
|
source: "iana",
|
|
extensions: ["kfo"]
|
|
},
|
|
"application/vnd.kde.kivio": {
|
|
source: "iana",
|
|
extensions: ["flw"]
|
|
},
|
|
"application/vnd.kde.kontour": {
|
|
source: "iana",
|
|
extensions: ["kon"]
|
|
},
|
|
"application/vnd.kde.kpresenter": {
|
|
source: "iana",
|
|
extensions: ["kpr", "kpt"]
|
|
},
|
|
"application/vnd.kde.kspread": {
|
|
source: "iana",
|
|
extensions: ["ksp"]
|
|
},
|
|
"application/vnd.kde.kword": {
|
|
source: "iana",
|
|
extensions: ["kwd", "kwt"]
|
|
},
|
|
"application/vnd.kenameaapp": {
|
|
source: "iana",
|
|
extensions: ["htke"]
|
|
},
|
|
"application/vnd.kidspiration": {
|
|
source: "iana",
|
|
extensions: ["kia"]
|
|
},
|
|
"application/vnd.kinar": {
|
|
source: "iana",
|
|
extensions: ["kne", "knp"]
|
|
},
|
|
"application/vnd.koan": {
|
|
source: "iana",
|
|
extensions: ["skp", "skd", "skt", "skm"]
|
|
},
|
|
"application/vnd.kodak-descriptor": {
|
|
source: "iana",
|
|
extensions: ["sse"]
|
|
},
|
|
"application/vnd.las": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.las.las+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.las.las+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["lasxml"]
|
|
},
|
|
"application/vnd.laszip": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.leap+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.liberty-request+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.llamagraphics.life-balance.desktop": {
|
|
source: "iana",
|
|
extensions: ["lbd"]
|
|
},
|
|
"application/vnd.llamagraphics.life-balance.exchange+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["lbe"]
|
|
},
|
|
"application/vnd.logipipe.circuit+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.loom": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.lotus-1-2-3": {
|
|
source: "iana",
|
|
extensions: ["123"]
|
|
},
|
|
"application/vnd.lotus-approach": {
|
|
source: "iana",
|
|
extensions: ["apr"]
|
|
},
|
|
"application/vnd.lotus-freelance": {
|
|
source: "iana",
|
|
extensions: ["pre"]
|
|
},
|
|
"application/vnd.lotus-notes": {
|
|
source: "iana",
|
|
extensions: ["nsf"]
|
|
},
|
|
"application/vnd.lotus-organizer": {
|
|
source: "iana",
|
|
extensions: ["org"]
|
|
},
|
|
"application/vnd.lotus-screencam": {
|
|
source: "iana",
|
|
extensions: ["scm"]
|
|
},
|
|
"application/vnd.lotus-wordpro": {
|
|
source: "iana",
|
|
extensions: ["lwp"]
|
|
},
|
|
"application/vnd.macports.portpkg": {
|
|
source: "iana",
|
|
extensions: ["portpkg"]
|
|
},
|
|
"application/vnd.mapbox-vector-tile": {
|
|
source: "iana",
|
|
extensions: ["mvt"]
|
|
},
|
|
"application/vnd.marlin.drm.actiontoken+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.marlin.drm.conftoken+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.marlin.drm.license+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.marlin.drm.mdcf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.mason+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.maxar.archive.3tz+zip": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"application/vnd.maxmind.maxmind-db": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.mcd": {
|
|
source: "iana",
|
|
extensions: ["mcd"]
|
|
},
|
|
"application/vnd.medcalcdata": {
|
|
source: "iana",
|
|
extensions: ["mc1"]
|
|
},
|
|
"application/vnd.mediastation.cdkey": {
|
|
source: "iana",
|
|
extensions: ["cdkey"]
|
|
},
|
|
"application/vnd.meridian-slingshot": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.mfer": {
|
|
source: "iana",
|
|
extensions: ["mwf"]
|
|
},
|
|
"application/vnd.mfmp": {
|
|
source: "iana",
|
|
extensions: ["mfm"]
|
|
},
|
|
"application/vnd.micro+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.micrografx.flo": {
|
|
source: "iana",
|
|
extensions: ["flo"]
|
|
},
|
|
"application/vnd.micrografx.igx": {
|
|
source: "iana",
|
|
extensions: ["igx"]
|
|
},
|
|
"application/vnd.microsoft.portable-executable": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.microsoft.windows.thumbnail-cache": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.miele+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.mif": {
|
|
source: "iana",
|
|
extensions: ["mif"]
|
|
},
|
|
"application/vnd.minisoft-hp3000-save": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.mitsubishi.misty-guard.trustweb": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.mobius.daf": {
|
|
source: "iana",
|
|
extensions: ["daf"]
|
|
},
|
|
"application/vnd.mobius.dis": {
|
|
source: "iana",
|
|
extensions: ["dis"]
|
|
},
|
|
"application/vnd.mobius.mbk": {
|
|
source: "iana",
|
|
extensions: ["mbk"]
|
|
},
|
|
"application/vnd.mobius.mqy": {
|
|
source: "iana",
|
|
extensions: ["mqy"]
|
|
},
|
|
"application/vnd.mobius.msl": {
|
|
source: "iana",
|
|
extensions: ["msl"]
|
|
},
|
|
"application/vnd.mobius.plc": {
|
|
source: "iana",
|
|
extensions: ["plc"]
|
|
},
|
|
"application/vnd.mobius.txf": {
|
|
source: "iana",
|
|
extensions: ["txf"]
|
|
},
|
|
"application/vnd.mophun.application": {
|
|
source: "iana",
|
|
extensions: ["mpn"]
|
|
},
|
|
"application/vnd.mophun.certificate": {
|
|
source: "iana",
|
|
extensions: ["mpc"]
|
|
},
|
|
"application/vnd.motorola.flexsuite": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.motorola.flexsuite.adsi": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.motorola.flexsuite.fis": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.motorola.flexsuite.gotap": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.motorola.flexsuite.kmr": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.motorola.flexsuite.ttc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.motorola.flexsuite.wem": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.motorola.iprm": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.mozilla.xul+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xul"]
|
|
},
|
|
"application/vnd.ms-3mfdocument": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-artgalry": {
|
|
source: "iana",
|
|
extensions: ["cil"]
|
|
},
|
|
"application/vnd.ms-asf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-cab-compressed": {
|
|
source: "iana",
|
|
extensions: ["cab"]
|
|
},
|
|
"application/vnd.ms-color.iccprofile": {
|
|
source: "apache"
|
|
},
|
|
"application/vnd.ms-excel": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
|
|
},
|
|
"application/vnd.ms-excel.addin.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["xlam"]
|
|
},
|
|
"application/vnd.ms-excel.sheet.binary.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["xlsb"]
|
|
},
|
|
"application/vnd.ms-excel.sheet.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["xlsm"]
|
|
},
|
|
"application/vnd.ms-excel.template.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["xltm"]
|
|
},
|
|
"application/vnd.ms-fontobject": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["eot"]
|
|
},
|
|
"application/vnd.ms-htmlhelp": {
|
|
source: "iana",
|
|
extensions: ["chm"]
|
|
},
|
|
"application/vnd.ms-ims": {
|
|
source: "iana",
|
|
extensions: ["ims"]
|
|
},
|
|
"application/vnd.ms-lrm": {
|
|
source: "iana",
|
|
extensions: ["lrm"]
|
|
},
|
|
"application/vnd.ms-office.activex+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ms-officetheme": {
|
|
source: "iana",
|
|
extensions: ["thmx"]
|
|
},
|
|
"application/vnd.ms-opentype": {
|
|
source: "apache",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ms-outlook": {
|
|
compressible: false,
|
|
extensions: ["msg"]
|
|
},
|
|
"application/vnd.ms-package.obfuscated-opentype": {
|
|
source: "apache"
|
|
},
|
|
"application/vnd.ms-pki.seccat": {
|
|
source: "apache",
|
|
extensions: ["cat"]
|
|
},
|
|
"application/vnd.ms-pki.stl": {
|
|
source: "apache",
|
|
extensions: ["stl"]
|
|
},
|
|
"application/vnd.ms-playready.initiator+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ms-powerpoint": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["ppt", "pps", "pot"]
|
|
},
|
|
"application/vnd.ms-powerpoint.addin.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["ppam"]
|
|
},
|
|
"application/vnd.ms-powerpoint.presentation.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["pptm"]
|
|
},
|
|
"application/vnd.ms-powerpoint.slide.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["sldm"]
|
|
},
|
|
"application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["ppsm"]
|
|
},
|
|
"application/vnd.ms-powerpoint.template.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["potm"]
|
|
},
|
|
"application/vnd.ms-printdevicecapabilities+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ms-printing.printticket+xml": {
|
|
source: "apache",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ms-printschematicket+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ms-project": {
|
|
source: "iana",
|
|
extensions: ["mpp", "mpt"]
|
|
},
|
|
"application/vnd.ms-tnef": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-windows.devicepairing": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-windows.nwprinting.oob": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-windows.printerpairing": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-windows.wsd.oob": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-wmdrm.lic-chlg-req": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-wmdrm.lic-resp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-wmdrm.meter-chlg-req": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-wmdrm.meter-resp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ms-word.document.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["docm"]
|
|
},
|
|
"application/vnd.ms-word.template.macroenabled.12": {
|
|
source: "iana",
|
|
extensions: ["dotm"]
|
|
},
|
|
"application/vnd.ms-works": {
|
|
source: "iana",
|
|
extensions: ["wps", "wks", "wcm", "wdb"]
|
|
},
|
|
"application/vnd.ms-wpl": {
|
|
source: "iana",
|
|
extensions: ["wpl"]
|
|
},
|
|
"application/vnd.ms-xpsdocument": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["xps"]
|
|
},
|
|
"application/vnd.msa-disk-image": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.mseq": {
|
|
source: "iana",
|
|
extensions: ["mseq"]
|
|
},
|
|
"application/vnd.msign": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.multiad.creator": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.multiad.creator.cif": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.music-niff": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.musician": {
|
|
source: "iana",
|
|
extensions: ["mus"]
|
|
},
|
|
"application/vnd.muvee.style": {
|
|
source: "iana",
|
|
extensions: ["msty"]
|
|
},
|
|
"application/vnd.mynfc": {
|
|
source: "iana",
|
|
extensions: ["taglet"]
|
|
},
|
|
"application/vnd.nacamar.ybrid+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.ncd.control": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ncd.reference": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nearst.inv+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.nebumind.line": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nervana": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.netfpx": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.neurolanguage.nlu": {
|
|
source: "iana",
|
|
extensions: ["nlu"]
|
|
},
|
|
"application/vnd.nimn": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nintendo.nitro.rom": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nintendo.snes.rom": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nitf": {
|
|
source: "iana",
|
|
extensions: ["ntf", "nitf"]
|
|
},
|
|
"application/vnd.noblenet-directory": {
|
|
source: "iana",
|
|
extensions: ["nnd"]
|
|
},
|
|
"application/vnd.noblenet-sealer": {
|
|
source: "iana",
|
|
extensions: ["nns"]
|
|
},
|
|
"application/vnd.noblenet-web": {
|
|
source: "iana",
|
|
extensions: ["nnw"]
|
|
},
|
|
"application/vnd.nokia.catalogs": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nokia.conml+wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nokia.conml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.nokia.iptv.config+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.nokia.isds-radio-presets": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nokia.landmark+wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nokia.landmark+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.nokia.landmarkcollection+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.nokia.n-gage.ac+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ac"]
|
|
},
|
|
"application/vnd.nokia.n-gage.data": {
|
|
source: "iana",
|
|
extensions: ["ngdat"]
|
|
},
|
|
"application/vnd.nokia.n-gage.symbian.install": {
|
|
source: "iana",
|
|
extensions: ["n-gage"]
|
|
},
|
|
"application/vnd.nokia.ncd": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nokia.pcd+wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.nokia.pcd+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.nokia.radio-preset": {
|
|
source: "iana",
|
|
extensions: ["rpst"]
|
|
},
|
|
"application/vnd.nokia.radio-presets": {
|
|
source: "iana",
|
|
extensions: ["rpss"]
|
|
},
|
|
"application/vnd.novadigm.edm": {
|
|
source: "iana",
|
|
extensions: ["edm"]
|
|
},
|
|
"application/vnd.novadigm.edx": {
|
|
source: "iana",
|
|
extensions: ["edx"]
|
|
},
|
|
"application/vnd.novadigm.ext": {
|
|
source: "iana",
|
|
extensions: ["ext"]
|
|
},
|
|
"application/vnd.ntt-local.content-share": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ntt-local.file-transfer": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ntt-local.ogw_remote-access": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ntt-local.sip-ta_remote": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ntt-local.sip-ta_tcp_stream": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oasis.opendocument.chart": {
|
|
source: "iana",
|
|
extensions: ["odc"]
|
|
},
|
|
"application/vnd.oasis.opendocument.chart-template": {
|
|
source: "iana",
|
|
extensions: ["otc"]
|
|
},
|
|
"application/vnd.oasis.opendocument.database": {
|
|
source: "iana",
|
|
extensions: ["odb"]
|
|
},
|
|
"application/vnd.oasis.opendocument.formula": {
|
|
source: "iana",
|
|
extensions: ["odf"]
|
|
},
|
|
"application/vnd.oasis.opendocument.formula-template": {
|
|
source: "iana",
|
|
extensions: ["odft"]
|
|
},
|
|
"application/vnd.oasis.opendocument.graphics": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["odg"]
|
|
},
|
|
"application/vnd.oasis.opendocument.graphics-template": {
|
|
source: "iana",
|
|
extensions: ["otg"]
|
|
},
|
|
"application/vnd.oasis.opendocument.image": {
|
|
source: "iana",
|
|
extensions: ["odi"]
|
|
},
|
|
"application/vnd.oasis.opendocument.image-template": {
|
|
source: "iana",
|
|
extensions: ["oti"]
|
|
},
|
|
"application/vnd.oasis.opendocument.presentation": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["odp"]
|
|
},
|
|
"application/vnd.oasis.opendocument.presentation-template": {
|
|
source: "iana",
|
|
extensions: ["otp"]
|
|
},
|
|
"application/vnd.oasis.opendocument.spreadsheet": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["ods"]
|
|
},
|
|
"application/vnd.oasis.opendocument.spreadsheet-template": {
|
|
source: "iana",
|
|
extensions: ["ots"]
|
|
},
|
|
"application/vnd.oasis.opendocument.text": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["odt"]
|
|
},
|
|
"application/vnd.oasis.opendocument.text-master": {
|
|
source: "iana",
|
|
extensions: ["odm"]
|
|
},
|
|
"application/vnd.oasis.opendocument.text-template": {
|
|
source: "iana",
|
|
extensions: ["ott"]
|
|
},
|
|
"application/vnd.oasis.opendocument.text-web": {
|
|
source: "iana",
|
|
extensions: ["oth"]
|
|
},
|
|
"application/vnd.obn": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ocf+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oci.image.manifest.v1+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oftn.l10n+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.contentaccessdownload+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.contentaccessstreaming+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.cspg-hexbinary": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oipf.dae.svg+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.dae.xhtml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.mippvcontrolmessage+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.pae.gem": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oipf.spdiscovery+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.spdlist+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.ueprofile+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oipf.userprofile+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.olpc-sugar": {
|
|
source: "iana",
|
|
extensions: ["xo"]
|
|
},
|
|
"application/vnd.oma-scws-config": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma-scws-http-request": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma-scws-http-response": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.bcast.associated-procedure-parameter+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.bcast.drm-trigger+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.bcast.imd+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.bcast.ltkm": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.bcast.notification+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.bcast.provisioningtrigger": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.bcast.sgboot": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.bcast.sgdd+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.bcast.sgdu": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.bcast.simple-symbol-container": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.bcast.smartcard-trigger+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.bcast.sprov+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.bcast.stkm": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.cab-address-book+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.cab-feature-handler+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.cab-pcc+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.cab-subs-invite+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.cab-user-prefs+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.dcd": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.dcdc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.dd2+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["dd2"]
|
|
},
|
|
"application/vnd.oma.drm.risd+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.group-usage-list+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.lwm2m+cbor": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.lwm2m+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.lwm2m+tlv": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.pal+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.poc.detailed-progress-report+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.poc.final-report+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.poc.groups+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.poc.invocation-descriptor+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.poc.optimized-progress-report+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.push": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.oma.scidm.messages+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oma.xcap-directory+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.omads-email+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/vnd.omads-file+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/vnd.omads-folder+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/vnd.omaloc-supl-init": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.onepager": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.onepagertamp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.onepagertamx": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.onepagertat": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.onepagertatp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.onepagertatx": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.openblox.game+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["obgx"]
|
|
},
|
|
"application/vnd.openblox.game-binary": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.openeye.oeb": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.openofficeorg.extension": {
|
|
source: "apache",
|
|
extensions: ["oxt"]
|
|
},
|
|
"application/vnd.openstreetmap.data+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["osm"]
|
|
},
|
|
"application/vnd.opentimestamps.ots": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.custom-properties+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.drawing+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.extended-properties+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.presentation": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["pptx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.slide": {
|
|
source: "iana",
|
|
extensions: ["sldx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
|
|
source: "iana",
|
|
extensions: ["ppsx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.template": {
|
|
source: "iana",
|
|
extensions: ["potx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["xlsx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
|
|
source: "iana",
|
|
extensions: ["xltx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.theme+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.themeoverride+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.vmldrawing": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["docx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
|
|
source: "iana",
|
|
extensions: ["dotx"]
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-package.core-properties+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.openxmlformats-package.relationships+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oracle.resource+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.orange.indata": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.osa.netdeploy": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.osgeo.mapguide.package": {
|
|
source: "iana",
|
|
extensions: ["mgp"]
|
|
},
|
|
"application/vnd.osgi.bundle": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.osgi.dp": {
|
|
source: "iana",
|
|
extensions: ["dp"]
|
|
},
|
|
"application/vnd.osgi.subsystem": {
|
|
source: "iana",
|
|
extensions: ["esa"]
|
|
},
|
|
"application/vnd.otps.ct-kip+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.oxli.countgraph": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.pagerduty+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.palm": {
|
|
source: "iana",
|
|
extensions: ["pdb", "pqa", "oprc"]
|
|
},
|
|
"application/vnd.panoply": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.paos.xml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.patentdive": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.patientecommsdoc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.pawaafile": {
|
|
source: "iana",
|
|
extensions: ["paw"]
|
|
},
|
|
"application/vnd.pcos": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.pg.format": {
|
|
source: "iana",
|
|
extensions: ["str"]
|
|
},
|
|
"application/vnd.pg.osasli": {
|
|
source: "iana",
|
|
extensions: ["ei6"]
|
|
},
|
|
"application/vnd.piaccess.application-licence": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.picsel": {
|
|
source: "iana",
|
|
extensions: ["efif"]
|
|
},
|
|
"application/vnd.pmi.widget": {
|
|
source: "iana",
|
|
extensions: ["wg"]
|
|
},
|
|
"application/vnd.poc.group-advertisement+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.pocketlearn": {
|
|
source: "iana",
|
|
extensions: ["plf"]
|
|
},
|
|
"application/vnd.powerbuilder6": {
|
|
source: "iana",
|
|
extensions: ["pbd"]
|
|
},
|
|
"application/vnd.powerbuilder6-s": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.powerbuilder7": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.powerbuilder7-s": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.powerbuilder75": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.powerbuilder75-s": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.preminet": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.previewsystems.box": {
|
|
source: "iana",
|
|
extensions: ["box"]
|
|
},
|
|
"application/vnd.proteus.magazine": {
|
|
source: "iana",
|
|
extensions: ["mgz"]
|
|
},
|
|
"application/vnd.psfs": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.publishare-delta-tree": {
|
|
source: "iana",
|
|
extensions: ["qps"]
|
|
},
|
|
"application/vnd.pvi.ptid1": {
|
|
source: "iana",
|
|
extensions: ["ptid"]
|
|
},
|
|
"application/vnd.pwg-multiplexed": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.pwg-xhtml-print+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.qualcomm.brew-app-res": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.quarantainenet": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.quark.quarkxpress": {
|
|
source: "iana",
|
|
extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
|
|
},
|
|
"application/vnd.quobject-quoxdocument": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.radisys.moml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-audit+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-audit-conf+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-audit-conn+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-audit-dialog+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-audit-stream+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-conf+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-dialog+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-dialog-base+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-dialog-fax-detect+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-dialog-group+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-dialog-speech+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.radisys.msml-dialog-transform+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.rainstor.data": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.rapid": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.rar": {
|
|
source: "iana",
|
|
extensions: ["rar"]
|
|
},
|
|
"application/vnd.realvnc.bed": {
|
|
source: "iana",
|
|
extensions: ["bed"]
|
|
},
|
|
"application/vnd.recordare.musicxml": {
|
|
source: "iana",
|
|
extensions: ["mxl"]
|
|
},
|
|
"application/vnd.recordare.musicxml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["musicxml"]
|
|
},
|
|
"application/vnd.renlearn.rlprint": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.resilient.logic": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.restful+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.rig.cryptonote": {
|
|
source: "iana",
|
|
extensions: ["cryptonote"]
|
|
},
|
|
"application/vnd.rim.cod": {
|
|
source: "apache",
|
|
extensions: ["cod"]
|
|
},
|
|
"application/vnd.rn-realmedia": {
|
|
source: "apache",
|
|
extensions: ["rm"]
|
|
},
|
|
"application/vnd.rn-realmedia-vbr": {
|
|
source: "apache",
|
|
extensions: ["rmvb"]
|
|
},
|
|
"application/vnd.route66.link66+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["link66"]
|
|
},
|
|
"application/vnd.rs-274x": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ruckus.download": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.s3sms": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sailingtracker.track": {
|
|
source: "iana",
|
|
extensions: ["st"]
|
|
},
|
|
"application/vnd.sar": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sbm.cid": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sbm.mid2": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.scribus": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.3df": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.csf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.doc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.eml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.mht": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.net": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.ppt": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.tiff": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealed.xls": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealedmedia.softseal.html": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sealedmedia.softseal.pdf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.seemail": {
|
|
source: "iana",
|
|
extensions: ["see"]
|
|
},
|
|
"application/vnd.seis+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.sema": {
|
|
source: "iana",
|
|
extensions: ["sema"]
|
|
},
|
|
"application/vnd.semd": {
|
|
source: "iana",
|
|
extensions: ["semd"]
|
|
},
|
|
"application/vnd.semf": {
|
|
source: "iana",
|
|
extensions: ["semf"]
|
|
},
|
|
"application/vnd.shade-save-file": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.shana.informed.formdata": {
|
|
source: "iana",
|
|
extensions: ["ifm"]
|
|
},
|
|
"application/vnd.shana.informed.formtemplate": {
|
|
source: "iana",
|
|
extensions: ["itp"]
|
|
},
|
|
"application/vnd.shana.informed.interchange": {
|
|
source: "iana",
|
|
extensions: ["iif"]
|
|
},
|
|
"application/vnd.shana.informed.package": {
|
|
source: "iana",
|
|
extensions: ["ipk"]
|
|
},
|
|
"application/vnd.shootproof+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.shopkick+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.shp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.shx": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sigrok.session": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.simtech-mindmapper": {
|
|
source: "iana",
|
|
extensions: ["twd", "twds"]
|
|
},
|
|
"application/vnd.siren+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.smaf": {
|
|
source: "iana",
|
|
extensions: ["mmf"]
|
|
},
|
|
"application/vnd.smart.notebook": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.smart.teacher": {
|
|
source: "iana",
|
|
extensions: ["teacher"]
|
|
},
|
|
"application/vnd.snesdev-page-table": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.software602.filler.form+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["fo"]
|
|
},
|
|
"application/vnd.software602.filler.form-xml-zip": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.solent.sdkm+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["sdkm", "sdkd"]
|
|
},
|
|
"application/vnd.spotfire.dxp": {
|
|
source: "iana",
|
|
extensions: ["dxp"]
|
|
},
|
|
"application/vnd.spotfire.sfs": {
|
|
source: "iana",
|
|
extensions: ["sfs"]
|
|
},
|
|
"application/vnd.sqlite3": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sss-cod": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sss-dtf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sss-ntf": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.stardivision.calc": {
|
|
source: "apache",
|
|
extensions: ["sdc"]
|
|
},
|
|
"application/vnd.stardivision.draw": {
|
|
source: "apache",
|
|
extensions: ["sda"]
|
|
},
|
|
"application/vnd.stardivision.impress": {
|
|
source: "apache",
|
|
extensions: ["sdd"]
|
|
},
|
|
"application/vnd.stardivision.math": {
|
|
source: "apache",
|
|
extensions: ["smf"]
|
|
},
|
|
"application/vnd.stardivision.writer": {
|
|
source: "apache",
|
|
extensions: ["sdw", "vor"]
|
|
},
|
|
"application/vnd.stardivision.writer-global": {
|
|
source: "apache",
|
|
extensions: ["sgl"]
|
|
},
|
|
"application/vnd.stepmania.package": {
|
|
source: "iana",
|
|
extensions: ["smzip"]
|
|
},
|
|
"application/vnd.stepmania.stepchart": {
|
|
source: "iana",
|
|
extensions: ["sm"]
|
|
},
|
|
"application/vnd.street-stream": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sun.wadl+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["wadl"]
|
|
},
|
|
"application/vnd.sun.xml.calc": {
|
|
source: "apache",
|
|
extensions: ["sxc"]
|
|
},
|
|
"application/vnd.sun.xml.calc.template": {
|
|
source: "apache",
|
|
extensions: ["stc"]
|
|
},
|
|
"application/vnd.sun.xml.draw": {
|
|
source: "apache",
|
|
extensions: ["sxd"]
|
|
},
|
|
"application/vnd.sun.xml.draw.template": {
|
|
source: "apache",
|
|
extensions: ["std"]
|
|
},
|
|
"application/vnd.sun.xml.impress": {
|
|
source: "apache",
|
|
extensions: ["sxi"]
|
|
},
|
|
"application/vnd.sun.xml.impress.template": {
|
|
source: "apache",
|
|
extensions: ["sti"]
|
|
},
|
|
"application/vnd.sun.xml.math": {
|
|
source: "apache",
|
|
extensions: ["sxm"]
|
|
},
|
|
"application/vnd.sun.xml.writer": {
|
|
source: "apache",
|
|
extensions: ["sxw"]
|
|
},
|
|
"application/vnd.sun.xml.writer.global": {
|
|
source: "apache",
|
|
extensions: ["sxg"]
|
|
},
|
|
"application/vnd.sun.xml.writer.template": {
|
|
source: "apache",
|
|
extensions: ["stw"]
|
|
},
|
|
"application/vnd.sus-calendar": {
|
|
source: "iana",
|
|
extensions: ["sus", "susp"]
|
|
},
|
|
"application/vnd.svd": {
|
|
source: "iana",
|
|
extensions: ["svd"]
|
|
},
|
|
"application/vnd.swiftview-ics": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.sycle+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.syft+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.symbian.install": {
|
|
source: "apache",
|
|
extensions: ["sis", "sisx"]
|
|
},
|
|
"application/vnd.syncml+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["xsm"]
|
|
},
|
|
"application/vnd.syncml.dm+wbxml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
extensions: ["bdm"]
|
|
},
|
|
"application/vnd.syncml.dm+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["xdm"]
|
|
},
|
|
"application/vnd.syncml.dm.notification": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.syncml.dmddf+wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.syncml.dmddf+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["ddf"]
|
|
},
|
|
"application/vnd.syncml.dmtnds+wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.syncml.dmtnds+xml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true
|
|
},
|
|
"application/vnd.syncml.ds.notification": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.tableschema+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.tao.intent-module-archive": {
|
|
source: "iana",
|
|
extensions: ["tao"]
|
|
},
|
|
"application/vnd.tcpdump.pcap": {
|
|
source: "iana",
|
|
extensions: ["pcap", "cap", "dmp"]
|
|
},
|
|
"application/vnd.think-cell.ppttc+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.tmd.mediaflex.api+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.tml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.tmobile-livetv": {
|
|
source: "iana",
|
|
extensions: ["tmo"]
|
|
},
|
|
"application/vnd.tri.onesource": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.trid.tpt": {
|
|
source: "iana",
|
|
extensions: ["tpt"]
|
|
},
|
|
"application/vnd.triscape.mxs": {
|
|
source: "iana",
|
|
extensions: ["mxs"]
|
|
},
|
|
"application/vnd.trueapp": {
|
|
source: "iana",
|
|
extensions: ["tra"]
|
|
},
|
|
"application/vnd.truedoc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ubisoft.webplayer": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ufdl": {
|
|
source: "iana",
|
|
extensions: ["ufd", "ufdl"]
|
|
},
|
|
"application/vnd.uiq.theme": {
|
|
source: "iana",
|
|
extensions: ["utz"]
|
|
},
|
|
"application/vnd.umajin": {
|
|
source: "iana",
|
|
extensions: ["umj"]
|
|
},
|
|
"application/vnd.unity": {
|
|
source: "iana",
|
|
extensions: ["unityweb"]
|
|
},
|
|
"application/vnd.uoml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["uoml"]
|
|
},
|
|
"application/vnd.uplanet.alert": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.alert-wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.bearer-choice": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.bearer-choice-wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.cacheop": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.cacheop-wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.channel": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.channel-wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.list": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.list-wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.listcmd": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.listcmd-wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uplanet.signal": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.uri-map": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.valve.source.material": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.vcx": {
|
|
source: "iana",
|
|
extensions: ["vcx"]
|
|
},
|
|
"application/vnd.vd-study": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.vectorworks": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.vel+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.verimatrix.vcas": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.veritone.aion+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.veryant.thin": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.ves.encrypted": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.vidsoft.vidconference": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.visio": {
|
|
source: "iana",
|
|
extensions: ["vsd", "vst", "vss", "vsw"]
|
|
},
|
|
"application/vnd.visionary": {
|
|
source: "iana",
|
|
extensions: ["vis"]
|
|
},
|
|
"application/vnd.vividence.scriptfile": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.vsf": {
|
|
source: "iana",
|
|
extensions: ["vsf"]
|
|
},
|
|
"application/vnd.wap.sic": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wap.slc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wap.wbxml": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
extensions: ["wbxml"]
|
|
},
|
|
"application/vnd.wap.wmlc": {
|
|
source: "iana",
|
|
extensions: ["wmlc"]
|
|
},
|
|
"application/vnd.wap.wmlscriptc": {
|
|
source: "iana",
|
|
extensions: ["wmlsc"]
|
|
},
|
|
"application/vnd.webturbo": {
|
|
source: "iana",
|
|
extensions: ["wtb"]
|
|
},
|
|
"application/vnd.wfa.dpp": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wfa.p2p": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wfa.wsc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.windows.devicepairing": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wmc": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wmf.bootstrap": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wolfram.mathematica": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wolfram.mathematica.package": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wolfram.player": {
|
|
source: "iana",
|
|
extensions: ["nbp"]
|
|
},
|
|
"application/vnd.wordperfect": {
|
|
source: "iana",
|
|
extensions: ["wpd"]
|
|
},
|
|
"application/vnd.wqd": {
|
|
source: "iana",
|
|
extensions: ["wqd"]
|
|
},
|
|
"application/vnd.wrq-hp3000-labelled": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wt.stf": {
|
|
source: "iana",
|
|
extensions: ["stf"]
|
|
},
|
|
"application/vnd.wv.csp+wbxml": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.wv.csp+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.wv.ssp+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.xacml+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.xara": {
|
|
source: "iana",
|
|
extensions: ["xar"]
|
|
},
|
|
"application/vnd.xfdl": {
|
|
source: "iana",
|
|
extensions: ["xfdl"]
|
|
},
|
|
"application/vnd.xfdl.webform": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.xmi+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vnd.xmpie.cpkg": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.xmpie.dpkg": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.xmpie.plan": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.xmpie.ppkg": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.xmpie.xlim": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.yamaha.hv-dic": {
|
|
source: "iana",
|
|
extensions: ["hvd"]
|
|
},
|
|
"application/vnd.yamaha.hv-script": {
|
|
source: "iana",
|
|
extensions: ["hvs"]
|
|
},
|
|
"application/vnd.yamaha.hv-voice": {
|
|
source: "iana",
|
|
extensions: ["hvp"]
|
|
},
|
|
"application/vnd.yamaha.openscoreformat": {
|
|
source: "iana",
|
|
extensions: ["osf"]
|
|
},
|
|
"application/vnd.yamaha.openscoreformat.osfpvg+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["osfpvg"]
|
|
},
|
|
"application/vnd.yamaha.remote-setup": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.yamaha.smaf-audio": {
|
|
source: "iana",
|
|
extensions: ["saf"]
|
|
},
|
|
"application/vnd.yamaha.smaf-phrase": {
|
|
source: "iana",
|
|
extensions: ["spf"]
|
|
},
|
|
"application/vnd.yamaha.through-ngn": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.yamaha.tunnel-udpencap": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.yaoweme": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.yellowriver-custom-menu": {
|
|
source: "iana",
|
|
extensions: ["cmp"]
|
|
},
|
|
"application/vnd.youtube.yt": {
|
|
source: "iana"
|
|
},
|
|
"application/vnd.zul": {
|
|
source: "iana",
|
|
extensions: ["zir", "zirz"]
|
|
},
|
|
"application/vnd.zzazz.deck+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["zaz"]
|
|
},
|
|
"application/voicexml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["vxml"]
|
|
},
|
|
"application/voucher-cms+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/vq-rtcpxr": {
|
|
source: "iana"
|
|
},
|
|
"application/wasm": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["wasm"]
|
|
},
|
|
"application/watcherinfo+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["wif"]
|
|
},
|
|
"application/webpush-options+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/whoispp-query": {
|
|
source: "iana"
|
|
},
|
|
"application/whoispp-response": {
|
|
source: "iana"
|
|
},
|
|
"application/widget": {
|
|
source: "iana",
|
|
extensions: ["wgt"]
|
|
},
|
|
"application/winhlp": {
|
|
source: "apache",
|
|
extensions: ["hlp"]
|
|
},
|
|
"application/wita": {
|
|
source: "iana"
|
|
},
|
|
"application/wordperfect5.1": {
|
|
source: "iana"
|
|
},
|
|
"application/wsdl+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["wsdl"]
|
|
},
|
|
"application/wspolicy+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["wspolicy"]
|
|
},
|
|
"application/x-7z-compressed": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["7z"]
|
|
},
|
|
"application/x-abiword": {
|
|
source: "apache",
|
|
extensions: ["abw"]
|
|
},
|
|
"application/x-ace-compressed": {
|
|
source: "apache",
|
|
extensions: ["ace"]
|
|
},
|
|
"application/x-amf": {
|
|
source: "apache"
|
|
},
|
|
"application/x-apple-diskimage": {
|
|
source: "apache",
|
|
extensions: ["dmg"]
|
|
},
|
|
"application/x-arj": {
|
|
compressible: false,
|
|
extensions: ["arj"]
|
|
},
|
|
"application/x-authorware-bin": {
|
|
source: "apache",
|
|
extensions: ["aab", "x32", "u32", "vox"]
|
|
},
|
|
"application/x-authorware-map": {
|
|
source: "apache",
|
|
extensions: ["aam"]
|
|
},
|
|
"application/x-authorware-seg": {
|
|
source: "apache",
|
|
extensions: ["aas"]
|
|
},
|
|
"application/x-bcpio": {
|
|
source: "apache",
|
|
extensions: ["bcpio"]
|
|
},
|
|
"application/x-bdoc": {
|
|
compressible: false,
|
|
extensions: ["bdoc"]
|
|
},
|
|
"application/x-bittorrent": {
|
|
source: "apache",
|
|
extensions: ["torrent"]
|
|
},
|
|
"application/x-blorb": {
|
|
source: "apache",
|
|
extensions: ["blb", "blorb"]
|
|
},
|
|
"application/x-bzip": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["bz"]
|
|
},
|
|
"application/x-bzip2": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["bz2", "boz"]
|
|
},
|
|
"application/x-cbr": {
|
|
source: "apache",
|
|
extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
|
|
},
|
|
"application/x-cdlink": {
|
|
source: "apache",
|
|
extensions: ["vcd"]
|
|
},
|
|
"application/x-cfs-compressed": {
|
|
source: "apache",
|
|
extensions: ["cfs"]
|
|
},
|
|
"application/x-chat": {
|
|
source: "apache",
|
|
extensions: ["chat"]
|
|
},
|
|
"application/x-chess-pgn": {
|
|
source: "apache",
|
|
extensions: ["pgn"]
|
|
},
|
|
"application/x-chrome-extension": {
|
|
extensions: ["crx"]
|
|
},
|
|
"application/x-cocoa": {
|
|
source: "nginx",
|
|
extensions: ["cco"]
|
|
},
|
|
"application/x-compress": {
|
|
source: "apache"
|
|
},
|
|
"application/x-conference": {
|
|
source: "apache",
|
|
extensions: ["nsc"]
|
|
},
|
|
"application/x-cpio": {
|
|
source: "apache",
|
|
extensions: ["cpio"]
|
|
},
|
|
"application/x-csh": {
|
|
source: "apache",
|
|
extensions: ["csh"]
|
|
},
|
|
"application/x-deb": {
|
|
compressible: false
|
|
},
|
|
"application/x-debian-package": {
|
|
source: "apache",
|
|
extensions: ["deb", "udeb"]
|
|
},
|
|
"application/x-dgc-compressed": {
|
|
source: "apache",
|
|
extensions: ["dgc"]
|
|
},
|
|
"application/x-director": {
|
|
source: "apache",
|
|
extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
|
|
},
|
|
"application/x-doom": {
|
|
source: "apache",
|
|
extensions: ["wad"]
|
|
},
|
|
"application/x-dtbncx+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["ncx"]
|
|
},
|
|
"application/x-dtbook+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["dtb"]
|
|
},
|
|
"application/x-dtbresource+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["res"]
|
|
},
|
|
"application/x-dvi": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["dvi"]
|
|
},
|
|
"application/x-envoy": {
|
|
source: "apache",
|
|
extensions: ["evy"]
|
|
},
|
|
"application/x-eva": {
|
|
source: "apache",
|
|
extensions: ["eva"]
|
|
},
|
|
"application/x-font-bdf": {
|
|
source: "apache",
|
|
extensions: ["bdf"]
|
|
},
|
|
"application/x-font-dos": {
|
|
source: "apache"
|
|
},
|
|
"application/x-font-framemaker": {
|
|
source: "apache"
|
|
},
|
|
"application/x-font-ghostscript": {
|
|
source: "apache",
|
|
extensions: ["gsf"]
|
|
},
|
|
"application/x-font-libgrx": {
|
|
source: "apache"
|
|
},
|
|
"application/x-font-linux-psf": {
|
|
source: "apache",
|
|
extensions: ["psf"]
|
|
},
|
|
"application/x-font-pcf": {
|
|
source: "apache",
|
|
extensions: ["pcf"]
|
|
},
|
|
"application/x-font-snf": {
|
|
source: "apache",
|
|
extensions: ["snf"]
|
|
},
|
|
"application/x-font-speedo": {
|
|
source: "apache"
|
|
},
|
|
"application/x-font-sunos-news": {
|
|
source: "apache"
|
|
},
|
|
"application/x-font-type1": {
|
|
source: "apache",
|
|
extensions: ["pfa", "pfb", "pfm", "afm"]
|
|
},
|
|
"application/x-font-vfont": {
|
|
source: "apache"
|
|
},
|
|
"application/x-freearc": {
|
|
source: "apache",
|
|
extensions: ["arc"]
|
|
},
|
|
"application/x-futuresplash": {
|
|
source: "apache",
|
|
extensions: ["spl"]
|
|
},
|
|
"application/x-gca-compressed": {
|
|
source: "apache",
|
|
extensions: ["gca"]
|
|
},
|
|
"application/x-glulx": {
|
|
source: "apache",
|
|
extensions: ["ulx"]
|
|
},
|
|
"application/x-gnumeric": {
|
|
source: "apache",
|
|
extensions: ["gnumeric"]
|
|
},
|
|
"application/x-gramps-xml": {
|
|
source: "apache",
|
|
extensions: ["gramps"]
|
|
},
|
|
"application/x-gtar": {
|
|
source: "apache",
|
|
extensions: ["gtar"]
|
|
},
|
|
"application/x-gzip": {
|
|
source: "apache"
|
|
},
|
|
"application/x-hdf": {
|
|
source: "apache",
|
|
extensions: ["hdf"]
|
|
},
|
|
"application/x-httpd-php": {
|
|
compressible: true,
|
|
extensions: ["php"]
|
|
},
|
|
"application/x-install-instructions": {
|
|
source: "apache",
|
|
extensions: ["install"]
|
|
},
|
|
"application/x-iso9660-image": {
|
|
source: "apache",
|
|
extensions: ["iso"]
|
|
},
|
|
"application/x-iwork-keynote-sffkey": {
|
|
extensions: ["key"]
|
|
},
|
|
"application/x-iwork-numbers-sffnumbers": {
|
|
extensions: ["numbers"]
|
|
},
|
|
"application/x-iwork-pages-sffpages": {
|
|
extensions: ["pages"]
|
|
},
|
|
"application/x-java-archive-diff": {
|
|
source: "nginx",
|
|
extensions: ["jardiff"]
|
|
},
|
|
"application/x-java-jnlp-file": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["jnlp"]
|
|
},
|
|
"application/x-javascript": {
|
|
compressible: true
|
|
},
|
|
"application/x-keepass2": {
|
|
extensions: ["kdbx"]
|
|
},
|
|
"application/x-latex": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["latex"]
|
|
},
|
|
"application/x-lua-bytecode": {
|
|
extensions: ["luac"]
|
|
},
|
|
"application/x-lzh-compressed": {
|
|
source: "apache",
|
|
extensions: ["lzh", "lha"]
|
|
},
|
|
"application/x-makeself": {
|
|
source: "nginx",
|
|
extensions: ["run"]
|
|
},
|
|
"application/x-mie": {
|
|
source: "apache",
|
|
extensions: ["mie"]
|
|
},
|
|
"application/x-mobipocket-ebook": {
|
|
source: "apache",
|
|
extensions: ["prc", "mobi"]
|
|
},
|
|
"application/x-mpegurl": {
|
|
compressible: false
|
|
},
|
|
"application/x-ms-application": {
|
|
source: "apache",
|
|
extensions: ["application"]
|
|
},
|
|
"application/x-ms-shortcut": {
|
|
source: "apache",
|
|
extensions: ["lnk"]
|
|
},
|
|
"application/x-ms-wmd": {
|
|
source: "apache",
|
|
extensions: ["wmd"]
|
|
},
|
|
"application/x-ms-wmz": {
|
|
source: "apache",
|
|
extensions: ["wmz"]
|
|
},
|
|
"application/x-ms-xbap": {
|
|
source: "apache",
|
|
extensions: ["xbap"]
|
|
},
|
|
"application/x-msaccess": {
|
|
source: "apache",
|
|
extensions: ["mdb"]
|
|
},
|
|
"application/x-msbinder": {
|
|
source: "apache",
|
|
extensions: ["obd"]
|
|
},
|
|
"application/x-mscardfile": {
|
|
source: "apache",
|
|
extensions: ["crd"]
|
|
},
|
|
"application/x-msclip": {
|
|
source: "apache",
|
|
extensions: ["clp"]
|
|
},
|
|
"application/x-msdos-program": {
|
|
extensions: ["exe"]
|
|
},
|
|
"application/x-msdownload": {
|
|
source: "apache",
|
|
extensions: ["exe", "dll", "com", "bat", "msi"]
|
|
},
|
|
"application/x-msmediaview": {
|
|
source: "apache",
|
|
extensions: ["mvb", "m13", "m14"]
|
|
},
|
|
"application/x-msmetafile": {
|
|
source: "apache",
|
|
extensions: ["wmf", "wmz", "emf", "emz"]
|
|
},
|
|
"application/x-msmoney": {
|
|
source: "apache",
|
|
extensions: ["mny"]
|
|
},
|
|
"application/x-mspublisher": {
|
|
source: "apache",
|
|
extensions: ["pub"]
|
|
},
|
|
"application/x-msschedule": {
|
|
source: "apache",
|
|
extensions: ["scd"]
|
|
},
|
|
"application/x-msterminal": {
|
|
source: "apache",
|
|
extensions: ["trm"]
|
|
},
|
|
"application/x-mswrite": {
|
|
source: "apache",
|
|
extensions: ["wri"]
|
|
},
|
|
"application/x-netcdf": {
|
|
source: "apache",
|
|
extensions: ["nc", "cdf"]
|
|
},
|
|
"application/x-ns-proxy-autoconfig": {
|
|
compressible: true,
|
|
extensions: ["pac"]
|
|
},
|
|
"application/x-nzb": {
|
|
source: "apache",
|
|
extensions: ["nzb"]
|
|
},
|
|
"application/x-perl": {
|
|
source: "nginx",
|
|
extensions: ["pl", "pm"]
|
|
},
|
|
"application/x-pilot": {
|
|
source: "nginx",
|
|
extensions: ["prc", "pdb"]
|
|
},
|
|
"application/x-pkcs12": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["p12", "pfx"]
|
|
},
|
|
"application/x-pkcs7-certificates": {
|
|
source: "apache",
|
|
extensions: ["p7b", "spc"]
|
|
},
|
|
"application/x-pkcs7-certreqresp": {
|
|
source: "apache",
|
|
extensions: ["p7r"]
|
|
},
|
|
"application/x-pki-message": {
|
|
source: "iana"
|
|
},
|
|
"application/x-rar-compressed": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["rar"]
|
|
},
|
|
"application/x-redhat-package-manager": {
|
|
source: "nginx",
|
|
extensions: ["rpm"]
|
|
},
|
|
"application/x-research-info-systems": {
|
|
source: "apache",
|
|
extensions: ["ris"]
|
|
},
|
|
"application/x-sea": {
|
|
source: "nginx",
|
|
extensions: ["sea"]
|
|
},
|
|
"application/x-sh": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["sh"]
|
|
},
|
|
"application/x-shar": {
|
|
source: "apache",
|
|
extensions: ["shar"]
|
|
},
|
|
"application/x-shockwave-flash": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["swf"]
|
|
},
|
|
"application/x-silverlight-app": {
|
|
source: "apache",
|
|
extensions: ["xap"]
|
|
},
|
|
"application/x-sql": {
|
|
source: "apache",
|
|
extensions: ["sql"]
|
|
},
|
|
"application/x-stuffit": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["sit"]
|
|
},
|
|
"application/x-stuffitx": {
|
|
source: "apache",
|
|
extensions: ["sitx"]
|
|
},
|
|
"application/x-subrip": {
|
|
source: "apache",
|
|
extensions: ["srt"]
|
|
},
|
|
"application/x-sv4cpio": {
|
|
source: "apache",
|
|
extensions: ["sv4cpio"]
|
|
},
|
|
"application/x-sv4crc": {
|
|
source: "apache",
|
|
extensions: ["sv4crc"]
|
|
},
|
|
"application/x-t3vm-image": {
|
|
source: "apache",
|
|
extensions: ["t3"]
|
|
},
|
|
"application/x-tads": {
|
|
source: "apache",
|
|
extensions: ["gam"]
|
|
},
|
|
"application/x-tar": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["tar"]
|
|
},
|
|
"application/x-tcl": {
|
|
source: "apache",
|
|
extensions: ["tcl", "tk"]
|
|
},
|
|
"application/x-tex": {
|
|
source: "apache",
|
|
extensions: ["tex"]
|
|
},
|
|
"application/x-tex-tfm": {
|
|
source: "apache",
|
|
extensions: ["tfm"]
|
|
},
|
|
"application/x-texinfo": {
|
|
source: "apache",
|
|
extensions: ["texinfo", "texi"]
|
|
},
|
|
"application/x-tgif": {
|
|
source: "apache",
|
|
extensions: ["obj"]
|
|
},
|
|
"application/x-ustar": {
|
|
source: "apache",
|
|
extensions: ["ustar"]
|
|
},
|
|
"application/x-virtualbox-hdd": {
|
|
compressible: true,
|
|
extensions: ["hdd"]
|
|
},
|
|
"application/x-virtualbox-ova": {
|
|
compressible: true,
|
|
extensions: ["ova"]
|
|
},
|
|
"application/x-virtualbox-ovf": {
|
|
compressible: true,
|
|
extensions: ["ovf"]
|
|
},
|
|
"application/x-virtualbox-vbox": {
|
|
compressible: true,
|
|
extensions: ["vbox"]
|
|
},
|
|
"application/x-virtualbox-vbox-extpack": {
|
|
compressible: false,
|
|
extensions: ["vbox-extpack"]
|
|
},
|
|
"application/x-virtualbox-vdi": {
|
|
compressible: true,
|
|
extensions: ["vdi"]
|
|
},
|
|
"application/x-virtualbox-vhd": {
|
|
compressible: true,
|
|
extensions: ["vhd"]
|
|
},
|
|
"application/x-virtualbox-vmdk": {
|
|
compressible: true,
|
|
extensions: ["vmdk"]
|
|
},
|
|
"application/x-wais-source": {
|
|
source: "apache",
|
|
extensions: ["src"]
|
|
},
|
|
"application/x-web-app-manifest+json": {
|
|
compressible: true,
|
|
extensions: ["webapp"]
|
|
},
|
|
"application/x-www-form-urlencoded": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/x-x509-ca-cert": {
|
|
source: "iana",
|
|
extensions: ["der", "crt", "pem"]
|
|
},
|
|
"application/x-x509-ca-ra-cert": {
|
|
source: "iana"
|
|
},
|
|
"application/x-x509-next-ca-cert": {
|
|
source: "iana"
|
|
},
|
|
"application/x-xfig": {
|
|
source: "apache",
|
|
extensions: ["fig"]
|
|
},
|
|
"application/x-xliff+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["xlf"]
|
|
},
|
|
"application/x-xpinstall": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["xpi"]
|
|
},
|
|
"application/x-xz": {
|
|
source: "apache",
|
|
extensions: ["xz"]
|
|
},
|
|
"application/x-zmachine": {
|
|
source: "apache",
|
|
extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
|
|
},
|
|
"application/x400-bp": {
|
|
source: "iana"
|
|
},
|
|
"application/xacml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/xaml+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["xaml"]
|
|
},
|
|
"application/xcap-att+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xav"]
|
|
},
|
|
"application/xcap-caps+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xca"]
|
|
},
|
|
"application/xcap-diff+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xdf"]
|
|
},
|
|
"application/xcap-el+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xel"]
|
|
},
|
|
"application/xcap-error+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/xcap-ns+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xns"]
|
|
},
|
|
"application/xcon-conference-info+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/xcon-conference-info-diff+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/xenc+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xenc"]
|
|
},
|
|
"application/xhtml+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xhtml", "xht"]
|
|
},
|
|
"application/xhtml-voice+xml": {
|
|
source: "apache",
|
|
compressible: true
|
|
},
|
|
"application/xliff+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xlf"]
|
|
},
|
|
"application/xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xml", "xsl", "xsd", "rng"]
|
|
},
|
|
"application/xml-dtd": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["dtd"]
|
|
},
|
|
"application/xml-external-parsed-entity": {
|
|
source: "iana"
|
|
},
|
|
"application/xml-patch+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/xmpp+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/xop+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xop"]
|
|
},
|
|
"application/xproc+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["xpl"]
|
|
},
|
|
"application/xslt+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xsl", "xslt"]
|
|
},
|
|
"application/xspf+xml": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["xspf"]
|
|
},
|
|
"application/xv+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["mxml", "xhvml", "xvml", "xvm"]
|
|
},
|
|
"application/yang": {
|
|
source: "iana",
|
|
extensions: ["yang"]
|
|
},
|
|
"application/yang-data+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/yang-data+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/yang-patch+json": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/yang-patch+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"application/yin+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["yin"]
|
|
},
|
|
"application/zip": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["zip"]
|
|
},
|
|
"application/zlib": {
|
|
source: "iana"
|
|
},
|
|
"application/zstd": {
|
|
source: "iana"
|
|
},
|
|
"audio/1d-interleaved-parityfec": {
|
|
source: "iana"
|
|
},
|
|
"audio/32kadpcm": {
|
|
source: "iana"
|
|
},
|
|
"audio/3gpp": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["3gpp"]
|
|
},
|
|
"audio/3gpp2": {
|
|
source: "iana"
|
|
},
|
|
"audio/aac": {
|
|
source: "iana"
|
|
},
|
|
"audio/ac3": {
|
|
source: "iana"
|
|
},
|
|
"audio/adpcm": {
|
|
source: "apache",
|
|
extensions: ["adp"]
|
|
},
|
|
"audio/amr": {
|
|
source: "iana",
|
|
extensions: ["amr"]
|
|
},
|
|
"audio/amr-wb": {
|
|
source: "iana"
|
|
},
|
|
"audio/amr-wb+": {
|
|
source: "iana"
|
|
},
|
|
"audio/aptx": {
|
|
source: "iana"
|
|
},
|
|
"audio/asc": {
|
|
source: "iana"
|
|
},
|
|
"audio/atrac-advanced-lossless": {
|
|
source: "iana"
|
|
},
|
|
"audio/atrac-x": {
|
|
source: "iana"
|
|
},
|
|
"audio/atrac3": {
|
|
source: "iana"
|
|
},
|
|
"audio/basic": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["au", "snd"]
|
|
},
|
|
"audio/bv16": {
|
|
source: "iana"
|
|
},
|
|
"audio/bv32": {
|
|
source: "iana"
|
|
},
|
|
"audio/clearmode": {
|
|
source: "iana"
|
|
},
|
|
"audio/cn": {
|
|
source: "iana"
|
|
},
|
|
"audio/dat12": {
|
|
source: "iana"
|
|
},
|
|
"audio/dls": {
|
|
source: "iana"
|
|
},
|
|
"audio/dsr-es201108": {
|
|
source: "iana"
|
|
},
|
|
"audio/dsr-es202050": {
|
|
source: "iana"
|
|
},
|
|
"audio/dsr-es202211": {
|
|
source: "iana"
|
|
},
|
|
"audio/dsr-es202212": {
|
|
source: "iana"
|
|
},
|
|
"audio/dv": {
|
|
source: "iana"
|
|
},
|
|
"audio/dvi4": {
|
|
source: "iana"
|
|
},
|
|
"audio/eac3": {
|
|
source: "iana"
|
|
},
|
|
"audio/encaprtp": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrc": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrc-qcp": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrc0": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrc1": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcb": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcb0": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcb1": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcnw": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcnw0": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcnw1": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcwb": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcwb0": {
|
|
source: "iana"
|
|
},
|
|
"audio/evrcwb1": {
|
|
source: "iana"
|
|
},
|
|
"audio/evs": {
|
|
source: "iana"
|
|
},
|
|
"audio/flexfec": {
|
|
source: "iana"
|
|
},
|
|
"audio/fwdred": {
|
|
source: "iana"
|
|
},
|
|
"audio/g711-0": {
|
|
source: "iana"
|
|
},
|
|
"audio/g719": {
|
|
source: "iana"
|
|
},
|
|
"audio/g722": {
|
|
source: "iana"
|
|
},
|
|
"audio/g7221": {
|
|
source: "iana"
|
|
},
|
|
"audio/g723": {
|
|
source: "iana"
|
|
},
|
|
"audio/g726-16": {
|
|
source: "iana"
|
|
},
|
|
"audio/g726-24": {
|
|
source: "iana"
|
|
},
|
|
"audio/g726-32": {
|
|
source: "iana"
|
|
},
|
|
"audio/g726-40": {
|
|
source: "iana"
|
|
},
|
|
"audio/g728": {
|
|
source: "iana"
|
|
},
|
|
"audio/g729": {
|
|
source: "iana"
|
|
},
|
|
"audio/g7291": {
|
|
source: "iana"
|
|
},
|
|
"audio/g729d": {
|
|
source: "iana"
|
|
},
|
|
"audio/g729e": {
|
|
source: "iana"
|
|
},
|
|
"audio/gsm": {
|
|
source: "iana"
|
|
},
|
|
"audio/gsm-efr": {
|
|
source: "iana"
|
|
},
|
|
"audio/gsm-hr-08": {
|
|
source: "iana"
|
|
},
|
|
"audio/ilbc": {
|
|
source: "iana"
|
|
},
|
|
"audio/ip-mr_v2.5": {
|
|
source: "iana"
|
|
},
|
|
"audio/isac": {
|
|
source: "apache"
|
|
},
|
|
"audio/l16": {
|
|
source: "iana"
|
|
},
|
|
"audio/l20": {
|
|
source: "iana"
|
|
},
|
|
"audio/l24": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"audio/l8": {
|
|
source: "iana"
|
|
},
|
|
"audio/lpc": {
|
|
source: "iana"
|
|
},
|
|
"audio/melp": {
|
|
source: "iana"
|
|
},
|
|
"audio/melp1200": {
|
|
source: "iana"
|
|
},
|
|
"audio/melp2400": {
|
|
source: "iana"
|
|
},
|
|
"audio/melp600": {
|
|
source: "iana"
|
|
},
|
|
"audio/mhas": {
|
|
source: "iana"
|
|
},
|
|
"audio/midi": {
|
|
source: "apache",
|
|
extensions: ["mid", "midi", "kar", "rmi"]
|
|
},
|
|
"audio/mobile-xmf": {
|
|
source: "iana",
|
|
extensions: ["mxmf"]
|
|
},
|
|
"audio/mp3": {
|
|
compressible: false,
|
|
extensions: ["mp3"]
|
|
},
|
|
"audio/mp4": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["m4a", "mp4a"]
|
|
},
|
|
"audio/mp4a-latm": {
|
|
source: "iana"
|
|
},
|
|
"audio/mpa": {
|
|
source: "iana"
|
|
},
|
|
"audio/mpa-robust": {
|
|
source: "iana"
|
|
},
|
|
"audio/mpeg": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
|
|
},
|
|
"audio/mpeg4-generic": {
|
|
source: "iana"
|
|
},
|
|
"audio/musepack": {
|
|
source: "apache"
|
|
},
|
|
"audio/ogg": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["oga", "ogg", "spx", "opus"]
|
|
},
|
|
"audio/opus": {
|
|
source: "iana"
|
|
},
|
|
"audio/parityfec": {
|
|
source: "iana"
|
|
},
|
|
"audio/pcma": {
|
|
source: "iana"
|
|
},
|
|
"audio/pcma-wb": {
|
|
source: "iana"
|
|
},
|
|
"audio/pcmu": {
|
|
source: "iana"
|
|
},
|
|
"audio/pcmu-wb": {
|
|
source: "iana"
|
|
},
|
|
"audio/prs.sid": {
|
|
source: "iana"
|
|
},
|
|
"audio/qcelp": {
|
|
source: "iana"
|
|
},
|
|
"audio/raptorfec": {
|
|
source: "iana"
|
|
},
|
|
"audio/red": {
|
|
source: "iana"
|
|
},
|
|
"audio/rtp-enc-aescm128": {
|
|
source: "iana"
|
|
},
|
|
"audio/rtp-midi": {
|
|
source: "iana"
|
|
},
|
|
"audio/rtploopback": {
|
|
source: "iana"
|
|
},
|
|
"audio/rtx": {
|
|
source: "iana"
|
|
},
|
|
"audio/s3m": {
|
|
source: "apache",
|
|
extensions: ["s3m"]
|
|
},
|
|
"audio/scip": {
|
|
source: "iana"
|
|
},
|
|
"audio/silk": {
|
|
source: "apache",
|
|
extensions: ["sil"]
|
|
},
|
|
"audio/smv": {
|
|
source: "iana"
|
|
},
|
|
"audio/smv-qcp": {
|
|
source: "iana"
|
|
},
|
|
"audio/smv0": {
|
|
source: "iana"
|
|
},
|
|
"audio/sofa": {
|
|
source: "iana"
|
|
},
|
|
"audio/sp-midi": {
|
|
source: "iana"
|
|
},
|
|
"audio/speex": {
|
|
source: "iana"
|
|
},
|
|
"audio/t140c": {
|
|
source: "iana"
|
|
},
|
|
"audio/t38": {
|
|
source: "iana"
|
|
},
|
|
"audio/telephone-event": {
|
|
source: "iana"
|
|
},
|
|
"audio/tetra_acelp": {
|
|
source: "iana"
|
|
},
|
|
"audio/tetra_acelp_bb": {
|
|
source: "iana"
|
|
},
|
|
"audio/tone": {
|
|
source: "iana"
|
|
},
|
|
"audio/tsvcis": {
|
|
source: "iana"
|
|
},
|
|
"audio/uemclip": {
|
|
source: "iana"
|
|
},
|
|
"audio/ulpfec": {
|
|
source: "iana"
|
|
},
|
|
"audio/usac": {
|
|
source: "iana"
|
|
},
|
|
"audio/vdvi": {
|
|
source: "iana"
|
|
},
|
|
"audio/vmr-wb": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.3gpp.iufp": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.4sb": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.audiokoz": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.celp": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.cisco.nse": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.cmles.radio-events": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.cns.anp1": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.cns.inf1": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dece.audio": {
|
|
source: "iana",
|
|
extensions: ["uva", "uvva"]
|
|
},
|
|
"audio/vnd.digital-winds": {
|
|
source: "iana",
|
|
extensions: ["eol"]
|
|
},
|
|
"audio/vnd.dlna.adts": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.heaac.1": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.heaac.2": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.mlp": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.mps": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.pl2": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.pl2x": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.pl2z": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dolby.pulse.1": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dra": {
|
|
source: "iana",
|
|
extensions: ["dra"]
|
|
},
|
|
"audio/vnd.dts": {
|
|
source: "iana",
|
|
extensions: ["dts"]
|
|
},
|
|
"audio/vnd.dts.hd": {
|
|
source: "iana",
|
|
extensions: ["dtshd"]
|
|
},
|
|
"audio/vnd.dts.uhd": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.dvb.file": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.everad.plj": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.hns.audio": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.lucent.voice": {
|
|
source: "iana",
|
|
extensions: ["lvp"]
|
|
},
|
|
"audio/vnd.ms-playready.media.pya": {
|
|
source: "iana",
|
|
extensions: ["pya"]
|
|
},
|
|
"audio/vnd.nokia.mobile-xmf": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.nortel.vbk": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.nuera.ecelp4800": {
|
|
source: "iana",
|
|
extensions: ["ecelp4800"]
|
|
},
|
|
"audio/vnd.nuera.ecelp7470": {
|
|
source: "iana",
|
|
extensions: ["ecelp7470"]
|
|
},
|
|
"audio/vnd.nuera.ecelp9600": {
|
|
source: "iana",
|
|
extensions: ["ecelp9600"]
|
|
},
|
|
"audio/vnd.octel.sbc": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.presonus.multitrack": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.qcelp": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.rhetorex.32kadpcm": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.rip": {
|
|
source: "iana",
|
|
extensions: ["rip"]
|
|
},
|
|
"audio/vnd.rn-realaudio": {
|
|
compressible: false
|
|
},
|
|
"audio/vnd.sealedmedia.softseal.mpeg": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.vmx.cvsd": {
|
|
source: "iana"
|
|
},
|
|
"audio/vnd.wave": {
|
|
compressible: false
|
|
},
|
|
"audio/vorbis": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"audio/vorbis-config": {
|
|
source: "iana"
|
|
},
|
|
"audio/wav": {
|
|
compressible: false,
|
|
extensions: ["wav"]
|
|
},
|
|
"audio/wave": {
|
|
compressible: false,
|
|
extensions: ["wav"]
|
|
},
|
|
"audio/webm": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["weba"]
|
|
},
|
|
"audio/x-aac": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["aac"]
|
|
},
|
|
"audio/x-aiff": {
|
|
source: "apache",
|
|
extensions: ["aif", "aiff", "aifc"]
|
|
},
|
|
"audio/x-caf": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["caf"]
|
|
},
|
|
"audio/x-flac": {
|
|
source: "apache",
|
|
extensions: ["flac"]
|
|
},
|
|
"audio/x-m4a": {
|
|
source: "nginx",
|
|
extensions: ["m4a"]
|
|
},
|
|
"audio/x-matroska": {
|
|
source: "apache",
|
|
extensions: ["mka"]
|
|
},
|
|
"audio/x-mpegurl": {
|
|
source: "apache",
|
|
extensions: ["m3u"]
|
|
},
|
|
"audio/x-ms-wax": {
|
|
source: "apache",
|
|
extensions: ["wax"]
|
|
},
|
|
"audio/x-ms-wma": {
|
|
source: "apache",
|
|
extensions: ["wma"]
|
|
},
|
|
"audio/x-pn-realaudio": {
|
|
source: "apache",
|
|
extensions: ["ram", "ra"]
|
|
},
|
|
"audio/x-pn-realaudio-plugin": {
|
|
source: "apache",
|
|
extensions: ["rmp"]
|
|
},
|
|
"audio/x-realaudio": {
|
|
source: "nginx",
|
|
extensions: ["ra"]
|
|
},
|
|
"audio/x-tta": {
|
|
source: "apache"
|
|
},
|
|
"audio/x-wav": {
|
|
source: "apache",
|
|
extensions: ["wav"]
|
|
},
|
|
"audio/xm": {
|
|
source: "apache",
|
|
extensions: ["xm"]
|
|
},
|
|
"chemical/x-cdx": {
|
|
source: "apache",
|
|
extensions: ["cdx"]
|
|
},
|
|
"chemical/x-cif": {
|
|
source: "apache",
|
|
extensions: ["cif"]
|
|
},
|
|
"chemical/x-cmdf": {
|
|
source: "apache",
|
|
extensions: ["cmdf"]
|
|
},
|
|
"chemical/x-cml": {
|
|
source: "apache",
|
|
extensions: ["cml"]
|
|
},
|
|
"chemical/x-csml": {
|
|
source: "apache",
|
|
extensions: ["csml"]
|
|
},
|
|
"chemical/x-pdb": {
|
|
source: "apache"
|
|
},
|
|
"chemical/x-xyz": {
|
|
source: "apache",
|
|
extensions: ["xyz"]
|
|
},
|
|
"font/collection": {
|
|
source: "iana",
|
|
extensions: ["ttc"]
|
|
},
|
|
"font/otf": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["otf"]
|
|
},
|
|
"font/sfnt": {
|
|
source: "iana"
|
|
},
|
|
"font/ttf": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ttf"]
|
|
},
|
|
"font/woff": {
|
|
source: "iana",
|
|
extensions: ["woff"]
|
|
},
|
|
"font/woff2": {
|
|
source: "iana",
|
|
extensions: ["woff2"]
|
|
},
|
|
"image/aces": {
|
|
source: "iana",
|
|
extensions: ["exr"]
|
|
},
|
|
"image/apng": {
|
|
compressible: false,
|
|
extensions: ["apng"]
|
|
},
|
|
"image/avci": {
|
|
source: "iana",
|
|
extensions: ["avci"]
|
|
},
|
|
"image/avcs": {
|
|
source: "iana",
|
|
extensions: ["avcs"]
|
|
},
|
|
"image/avif": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["avif"]
|
|
},
|
|
"image/bmp": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["bmp"]
|
|
},
|
|
"image/cgm": {
|
|
source: "iana",
|
|
extensions: ["cgm"]
|
|
},
|
|
"image/dicom-rle": {
|
|
source: "iana",
|
|
extensions: ["drle"]
|
|
},
|
|
"image/emf": {
|
|
source: "iana",
|
|
extensions: ["emf"]
|
|
},
|
|
"image/fits": {
|
|
source: "iana",
|
|
extensions: ["fits"]
|
|
},
|
|
"image/g3fax": {
|
|
source: "iana",
|
|
extensions: ["g3"]
|
|
},
|
|
"image/gif": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["gif"]
|
|
},
|
|
"image/heic": {
|
|
source: "iana",
|
|
extensions: ["heic"]
|
|
},
|
|
"image/heic-sequence": {
|
|
source: "iana",
|
|
extensions: ["heics"]
|
|
},
|
|
"image/heif": {
|
|
source: "iana",
|
|
extensions: ["heif"]
|
|
},
|
|
"image/heif-sequence": {
|
|
source: "iana",
|
|
extensions: ["heifs"]
|
|
},
|
|
"image/hej2k": {
|
|
source: "iana",
|
|
extensions: ["hej2"]
|
|
},
|
|
"image/hsj2": {
|
|
source: "iana",
|
|
extensions: ["hsj2"]
|
|
},
|
|
"image/ief": {
|
|
source: "iana",
|
|
extensions: ["ief"]
|
|
},
|
|
"image/jls": {
|
|
source: "iana",
|
|
extensions: ["jls"]
|
|
},
|
|
"image/jp2": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["jp2", "jpg2"]
|
|
},
|
|
"image/jpeg": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["jpeg", "jpg", "jpe"]
|
|
},
|
|
"image/jph": {
|
|
source: "iana",
|
|
extensions: ["jph"]
|
|
},
|
|
"image/jphc": {
|
|
source: "iana",
|
|
extensions: ["jhc"]
|
|
},
|
|
"image/jpm": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["jpm"]
|
|
},
|
|
"image/jpx": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["jpx", "jpf"]
|
|
},
|
|
"image/jxr": {
|
|
source: "iana",
|
|
extensions: ["jxr"]
|
|
},
|
|
"image/jxra": {
|
|
source: "iana",
|
|
extensions: ["jxra"]
|
|
},
|
|
"image/jxrs": {
|
|
source: "iana",
|
|
extensions: ["jxrs"]
|
|
},
|
|
"image/jxs": {
|
|
source: "iana",
|
|
extensions: ["jxs"]
|
|
},
|
|
"image/jxsc": {
|
|
source: "iana",
|
|
extensions: ["jxsc"]
|
|
},
|
|
"image/jxsi": {
|
|
source: "iana",
|
|
extensions: ["jxsi"]
|
|
},
|
|
"image/jxss": {
|
|
source: "iana",
|
|
extensions: ["jxss"]
|
|
},
|
|
"image/ktx": {
|
|
source: "iana",
|
|
extensions: ["ktx"]
|
|
},
|
|
"image/ktx2": {
|
|
source: "iana",
|
|
extensions: ["ktx2"]
|
|
},
|
|
"image/naplps": {
|
|
source: "iana"
|
|
},
|
|
"image/pjpeg": {
|
|
compressible: false
|
|
},
|
|
"image/png": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["png"]
|
|
},
|
|
"image/prs.btif": {
|
|
source: "iana",
|
|
extensions: ["btif"]
|
|
},
|
|
"image/prs.pti": {
|
|
source: "iana",
|
|
extensions: ["pti"]
|
|
},
|
|
"image/pwg-raster": {
|
|
source: "iana"
|
|
},
|
|
"image/sgi": {
|
|
source: "apache",
|
|
extensions: ["sgi"]
|
|
},
|
|
"image/svg+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["svg", "svgz"]
|
|
},
|
|
"image/t38": {
|
|
source: "iana",
|
|
extensions: ["t38"]
|
|
},
|
|
"image/tiff": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["tif", "tiff"]
|
|
},
|
|
"image/tiff-fx": {
|
|
source: "iana",
|
|
extensions: ["tfx"]
|
|
},
|
|
"image/vnd.adobe.photoshop": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["psd"]
|
|
},
|
|
"image/vnd.airzip.accelerator.azv": {
|
|
source: "iana",
|
|
extensions: ["azv"]
|
|
},
|
|
"image/vnd.cns.inf2": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.dece.graphic": {
|
|
source: "iana",
|
|
extensions: ["uvi", "uvvi", "uvg", "uvvg"]
|
|
},
|
|
"image/vnd.djvu": {
|
|
source: "iana",
|
|
extensions: ["djvu", "djv"]
|
|
},
|
|
"image/vnd.dvb.subtitle": {
|
|
source: "iana",
|
|
extensions: ["sub"]
|
|
},
|
|
"image/vnd.dwg": {
|
|
source: "iana",
|
|
extensions: ["dwg"]
|
|
},
|
|
"image/vnd.dxf": {
|
|
source: "iana",
|
|
extensions: ["dxf"]
|
|
},
|
|
"image/vnd.fastbidsheet": {
|
|
source: "iana",
|
|
extensions: ["fbs"]
|
|
},
|
|
"image/vnd.fpx": {
|
|
source: "iana",
|
|
extensions: ["fpx"]
|
|
},
|
|
"image/vnd.fst": {
|
|
source: "iana",
|
|
extensions: ["fst"]
|
|
},
|
|
"image/vnd.fujixerox.edmics-mmr": {
|
|
source: "iana",
|
|
extensions: ["mmr"]
|
|
},
|
|
"image/vnd.fujixerox.edmics-rlc": {
|
|
source: "iana",
|
|
extensions: ["rlc"]
|
|
},
|
|
"image/vnd.globalgraphics.pgb": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.microsoft.icon": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["ico"]
|
|
},
|
|
"image/vnd.mix": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.mozilla.apng": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.ms-dds": {
|
|
compressible: true,
|
|
extensions: ["dds"]
|
|
},
|
|
"image/vnd.ms-modi": {
|
|
source: "iana",
|
|
extensions: ["mdi"]
|
|
},
|
|
"image/vnd.ms-photo": {
|
|
source: "apache",
|
|
extensions: ["wdp"]
|
|
},
|
|
"image/vnd.net-fpx": {
|
|
source: "iana",
|
|
extensions: ["npx"]
|
|
},
|
|
"image/vnd.pco.b16": {
|
|
source: "iana",
|
|
extensions: ["b16"]
|
|
},
|
|
"image/vnd.radiance": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.sealed.png": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.sealedmedia.softseal.gif": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.sealedmedia.softseal.jpg": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.svf": {
|
|
source: "iana"
|
|
},
|
|
"image/vnd.tencent.tap": {
|
|
source: "iana",
|
|
extensions: ["tap"]
|
|
},
|
|
"image/vnd.valve.source.texture": {
|
|
source: "iana",
|
|
extensions: ["vtf"]
|
|
},
|
|
"image/vnd.wap.wbmp": {
|
|
source: "iana",
|
|
extensions: ["wbmp"]
|
|
},
|
|
"image/vnd.xiff": {
|
|
source: "iana",
|
|
extensions: ["xif"]
|
|
},
|
|
"image/vnd.zbrush.pcx": {
|
|
source: "iana",
|
|
extensions: ["pcx"]
|
|
},
|
|
"image/webp": {
|
|
source: "apache",
|
|
extensions: ["webp"]
|
|
},
|
|
"image/wmf": {
|
|
source: "iana",
|
|
extensions: ["wmf"]
|
|
},
|
|
"image/x-3ds": {
|
|
source: "apache",
|
|
extensions: ["3ds"]
|
|
},
|
|
"image/x-cmu-raster": {
|
|
source: "apache",
|
|
extensions: ["ras"]
|
|
},
|
|
"image/x-cmx": {
|
|
source: "apache",
|
|
extensions: ["cmx"]
|
|
},
|
|
"image/x-freehand": {
|
|
source: "apache",
|
|
extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
|
|
},
|
|
"image/x-icon": {
|
|
source: "apache",
|
|
compressible: true,
|
|
extensions: ["ico"]
|
|
},
|
|
"image/x-jng": {
|
|
source: "nginx",
|
|
extensions: ["jng"]
|
|
},
|
|
"image/x-mrsid-image": {
|
|
source: "apache",
|
|
extensions: ["sid"]
|
|
},
|
|
"image/x-ms-bmp": {
|
|
source: "nginx",
|
|
compressible: true,
|
|
extensions: ["bmp"]
|
|
},
|
|
"image/x-pcx": {
|
|
source: "apache",
|
|
extensions: ["pcx"]
|
|
},
|
|
"image/x-pict": {
|
|
source: "apache",
|
|
extensions: ["pic", "pct"]
|
|
},
|
|
"image/x-portable-anymap": {
|
|
source: "apache",
|
|
extensions: ["pnm"]
|
|
},
|
|
"image/x-portable-bitmap": {
|
|
source: "apache",
|
|
extensions: ["pbm"]
|
|
},
|
|
"image/x-portable-graymap": {
|
|
source: "apache",
|
|
extensions: ["pgm"]
|
|
},
|
|
"image/x-portable-pixmap": {
|
|
source: "apache",
|
|
extensions: ["ppm"]
|
|
},
|
|
"image/x-rgb": {
|
|
source: "apache",
|
|
extensions: ["rgb"]
|
|
},
|
|
"image/x-tga": {
|
|
source: "apache",
|
|
extensions: ["tga"]
|
|
},
|
|
"image/x-xbitmap": {
|
|
source: "apache",
|
|
extensions: ["xbm"]
|
|
},
|
|
"image/x-xcf": {
|
|
compressible: false
|
|
},
|
|
"image/x-xpixmap": {
|
|
source: "apache",
|
|
extensions: ["xpm"]
|
|
},
|
|
"image/x-xwindowdump": {
|
|
source: "apache",
|
|
extensions: ["xwd"]
|
|
},
|
|
"message/cpim": {
|
|
source: "iana"
|
|
},
|
|
"message/delivery-status": {
|
|
source: "iana"
|
|
},
|
|
"message/disposition-notification": {
|
|
source: "iana",
|
|
extensions: [
|
|
"disposition-notification"
|
|
]
|
|
},
|
|
"message/external-body": {
|
|
source: "iana"
|
|
},
|
|
"message/feedback-report": {
|
|
source: "iana"
|
|
},
|
|
"message/global": {
|
|
source: "iana",
|
|
extensions: ["u8msg"]
|
|
},
|
|
"message/global-delivery-status": {
|
|
source: "iana",
|
|
extensions: ["u8dsn"]
|
|
},
|
|
"message/global-disposition-notification": {
|
|
source: "iana",
|
|
extensions: ["u8mdn"]
|
|
},
|
|
"message/global-headers": {
|
|
source: "iana",
|
|
extensions: ["u8hdr"]
|
|
},
|
|
"message/http": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"message/imdn+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"message/news": {
|
|
source: "iana"
|
|
},
|
|
"message/partial": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"message/rfc822": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["eml", "mime"]
|
|
},
|
|
"message/s-http": {
|
|
source: "iana"
|
|
},
|
|
"message/sip": {
|
|
source: "iana"
|
|
},
|
|
"message/sipfrag": {
|
|
source: "iana"
|
|
},
|
|
"message/tracking-status": {
|
|
source: "iana"
|
|
},
|
|
"message/vnd.si.simp": {
|
|
source: "iana"
|
|
},
|
|
"message/vnd.wfa.wsc": {
|
|
source: "iana",
|
|
extensions: ["wsc"]
|
|
},
|
|
"model/3mf": {
|
|
source: "iana",
|
|
extensions: ["3mf"]
|
|
},
|
|
"model/e57": {
|
|
source: "iana"
|
|
},
|
|
"model/gltf+json": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["gltf"]
|
|
},
|
|
"model/gltf-binary": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["glb"]
|
|
},
|
|
"model/iges": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["igs", "iges"]
|
|
},
|
|
"model/mesh": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["msh", "mesh", "silo"]
|
|
},
|
|
"model/mtl": {
|
|
source: "iana",
|
|
extensions: ["mtl"]
|
|
},
|
|
"model/obj": {
|
|
source: "iana",
|
|
extensions: ["obj"]
|
|
},
|
|
"model/step": {
|
|
source: "iana"
|
|
},
|
|
"model/step+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["stpx"]
|
|
},
|
|
"model/step+zip": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["stpz"]
|
|
},
|
|
"model/step-xml+zip": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["stpxz"]
|
|
},
|
|
"model/stl": {
|
|
source: "iana",
|
|
extensions: ["stl"]
|
|
},
|
|
"model/vnd.collada+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["dae"]
|
|
},
|
|
"model/vnd.dwf": {
|
|
source: "iana",
|
|
extensions: ["dwf"]
|
|
},
|
|
"model/vnd.flatland.3dml": {
|
|
source: "iana"
|
|
},
|
|
"model/vnd.gdl": {
|
|
source: "iana",
|
|
extensions: ["gdl"]
|
|
},
|
|
"model/vnd.gs-gdl": {
|
|
source: "apache"
|
|
},
|
|
"model/vnd.gs.gdl": {
|
|
source: "iana"
|
|
},
|
|
"model/vnd.gtw": {
|
|
source: "iana",
|
|
extensions: ["gtw"]
|
|
},
|
|
"model/vnd.moml+xml": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"model/vnd.mts": {
|
|
source: "iana",
|
|
extensions: ["mts"]
|
|
},
|
|
"model/vnd.opengex": {
|
|
source: "iana",
|
|
extensions: ["ogex"]
|
|
},
|
|
"model/vnd.parasolid.transmit.binary": {
|
|
source: "iana",
|
|
extensions: ["x_b"]
|
|
},
|
|
"model/vnd.parasolid.transmit.text": {
|
|
source: "iana",
|
|
extensions: ["x_t"]
|
|
},
|
|
"model/vnd.pytha.pyox": {
|
|
source: "iana"
|
|
},
|
|
"model/vnd.rosette.annotated-data-model": {
|
|
source: "iana"
|
|
},
|
|
"model/vnd.sap.vds": {
|
|
source: "iana",
|
|
extensions: ["vds"]
|
|
},
|
|
"model/vnd.usdz+zip": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["usdz"]
|
|
},
|
|
"model/vnd.valve.source.compiled-map": {
|
|
source: "iana",
|
|
extensions: ["bsp"]
|
|
},
|
|
"model/vnd.vtu": {
|
|
source: "iana",
|
|
extensions: ["vtu"]
|
|
},
|
|
"model/vrml": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["wrl", "vrml"]
|
|
},
|
|
"model/x3d+binary": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["x3db", "x3dbz"]
|
|
},
|
|
"model/x3d+fastinfoset": {
|
|
source: "iana",
|
|
extensions: ["x3db"]
|
|
},
|
|
"model/x3d+vrml": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["x3dv", "x3dvz"]
|
|
},
|
|
"model/x3d+xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["x3d", "x3dz"]
|
|
},
|
|
"model/x3d-vrml": {
|
|
source: "iana",
|
|
extensions: ["x3dv"]
|
|
},
|
|
"multipart/alternative": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"multipart/appledouble": {
|
|
source: "iana"
|
|
},
|
|
"multipart/byteranges": {
|
|
source: "iana"
|
|
},
|
|
"multipart/digest": {
|
|
source: "iana"
|
|
},
|
|
"multipart/encrypted": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"multipart/form-data": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"multipart/header-set": {
|
|
source: "iana"
|
|
},
|
|
"multipart/mixed": {
|
|
source: "iana"
|
|
},
|
|
"multipart/multilingual": {
|
|
source: "iana"
|
|
},
|
|
"multipart/parallel": {
|
|
source: "iana"
|
|
},
|
|
"multipart/related": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"multipart/report": {
|
|
source: "iana"
|
|
},
|
|
"multipart/signed": {
|
|
source: "iana",
|
|
compressible: false
|
|
},
|
|
"multipart/vnd.bint.med-plus": {
|
|
source: "iana"
|
|
},
|
|
"multipart/voice-message": {
|
|
source: "iana"
|
|
},
|
|
"multipart/x-mixed-replace": {
|
|
source: "iana"
|
|
},
|
|
"text/1d-interleaved-parityfec": {
|
|
source: "iana"
|
|
},
|
|
"text/cache-manifest": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["appcache", "manifest"]
|
|
},
|
|
"text/calendar": {
|
|
source: "iana",
|
|
extensions: ["ics", "ifb"]
|
|
},
|
|
"text/calender": {
|
|
compressible: true
|
|
},
|
|
"text/cmd": {
|
|
compressible: true
|
|
},
|
|
"text/coffeescript": {
|
|
extensions: ["coffee", "litcoffee"]
|
|
},
|
|
"text/cql": {
|
|
source: "iana"
|
|
},
|
|
"text/cql-expression": {
|
|
source: "iana"
|
|
},
|
|
"text/cql-identifier": {
|
|
source: "iana"
|
|
},
|
|
"text/css": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["css"]
|
|
},
|
|
"text/csv": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["csv"]
|
|
},
|
|
"text/csv-schema": {
|
|
source: "iana"
|
|
},
|
|
"text/directory": {
|
|
source: "iana"
|
|
},
|
|
"text/dns": {
|
|
source: "iana"
|
|
},
|
|
"text/ecmascript": {
|
|
source: "iana"
|
|
},
|
|
"text/encaprtp": {
|
|
source: "iana"
|
|
},
|
|
"text/enriched": {
|
|
source: "iana"
|
|
},
|
|
"text/fhirpath": {
|
|
source: "iana"
|
|
},
|
|
"text/flexfec": {
|
|
source: "iana"
|
|
},
|
|
"text/fwdred": {
|
|
source: "iana"
|
|
},
|
|
"text/gff3": {
|
|
source: "iana"
|
|
},
|
|
"text/grammar-ref-list": {
|
|
source: "iana"
|
|
},
|
|
"text/html": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["html", "htm", "shtml"]
|
|
},
|
|
"text/jade": {
|
|
extensions: ["jade"]
|
|
},
|
|
"text/javascript": {
|
|
source: "iana",
|
|
compressible: true
|
|
},
|
|
"text/jcr-cnd": {
|
|
source: "iana"
|
|
},
|
|
"text/jsx": {
|
|
compressible: true,
|
|
extensions: ["jsx"]
|
|
},
|
|
"text/less": {
|
|
compressible: true,
|
|
extensions: ["less"]
|
|
},
|
|
"text/markdown": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["markdown", "md"]
|
|
},
|
|
"text/mathml": {
|
|
source: "nginx",
|
|
extensions: ["mml"]
|
|
},
|
|
"text/mdx": {
|
|
compressible: true,
|
|
extensions: ["mdx"]
|
|
},
|
|
"text/mizar": {
|
|
source: "iana"
|
|
},
|
|
"text/n3": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["n3"]
|
|
},
|
|
"text/parameters": {
|
|
source: "iana",
|
|
charset: "UTF-8"
|
|
},
|
|
"text/parityfec": {
|
|
source: "iana"
|
|
},
|
|
"text/plain": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
|
|
},
|
|
"text/provenance-notation": {
|
|
source: "iana",
|
|
charset: "UTF-8"
|
|
},
|
|
"text/prs.fallenstein.rst": {
|
|
source: "iana"
|
|
},
|
|
"text/prs.lines.tag": {
|
|
source: "iana",
|
|
extensions: ["dsc"]
|
|
},
|
|
"text/prs.prop.logic": {
|
|
source: "iana"
|
|
},
|
|
"text/raptorfec": {
|
|
source: "iana"
|
|
},
|
|
"text/red": {
|
|
source: "iana"
|
|
},
|
|
"text/rfc822-headers": {
|
|
source: "iana"
|
|
},
|
|
"text/richtext": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rtx"]
|
|
},
|
|
"text/rtf": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["rtf"]
|
|
},
|
|
"text/rtp-enc-aescm128": {
|
|
source: "iana"
|
|
},
|
|
"text/rtploopback": {
|
|
source: "iana"
|
|
},
|
|
"text/rtx": {
|
|
source: "iana"
|
|
},
|
|
"text/sgml": {
|
|
source: "iana",
|
|
extensions: ["sgml", "sgm"]
|
|
},
|
|
"text/shaclc": {
|
|
source: "iana"
|
|
},
|
|
"text/shex": {
|
|
source: "iana",
|
|
extensions: ["shex"]
|
|
},
|
|
"text/slim": {
|
|
extensions: ["slim", "slm"]
|
|
},
|
|
"text/spdx": {
|
|
source: "iana",
|
|
extensions: ["spdx"]
|
|
},
|
|
"text/strings": {
|
|
source: "iana"
|
|
},
|
|
"text/stylus": {
|
|
extensions: ["stylus", "styl"]
|
|
},
|
|
"text/t140": {
|
|
source: "iana"
|
|
},
|
|
"text/tab-separated-values": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["tsv"]
|
|
},
|
|
"text/troff": {
|
|
source: "iana",
|
|
extensions: ["t", "tr", "roff", "man", "me", "ms"]
|
|
},
|
|
"text/turtle": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
extensions: ["ttl"]
|
|
},
|
|
"text/ulpfec": {
|
|
source: "iana"
|
|
},
|
|
"text/uri-list": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["uri", "uris", "urls"]
|
|
},
|
|
"text/vcard": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["vcard"]
|
|
},
|
|
"text/vnd.a": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.abc": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.ascii-art": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.curl": {
|
|
source: "iana",
|
|
extensions: ["curl"]
|
|
},
|
|
"text/vnd.curl.dcurl": {
|
|
source: "apache",
|
|
extensions: ["dcurl"]
|
|
},
|
|
"text/vnd.curl.mcurl": {
|
|
source: "apache",
|
|
extensions: ["mcurl"]
|
|
},
|
|
"text/vnd.curl.scurl": {
|
|
source: "apache",
|
|
extensions: ["scurl"]
|
|
},
|
|
"text/vnd.debian.copyright": {
|
|
source: "iana",
|
|
charset: "UTF-8"
|
|
},
|
|
"text/vnd.dmclientscript": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.dvb.subtitle": {
|
|
source: "iana",
|
|
extensions: ["sub"]
|
|
},
|
|
"text/vnd.esmertec.theme-descriptor": {
|
|
source: "iana",
|
|
charset: "UTF-8"
|
|
},
|
|
"text/vnd.familysearch.gedcom": {
|
|
source: "iana",
|
|
extensions: ["ged"]
|
|
},
|
|
"text/vnd.ficlab.flt": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.fly": {
|
|
source: "iana",
|
|
extensions: ["fly"]
|
|
},
|
|
"text/vnd.fmi.flexstor": {
|
|
source: "iana",
|
|
extensions: ["flx"]
|
|
},
|
|
"text/vnd.gml": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.graphviz": {
|
|
source: "iana",
|
|
extensions: ["gv"]
|
|
},
|
|
"text/vnd.hans": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.hgl": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.in3d.3dml": {
|
|
source: "iana",
|
|
extensions: ["3dml"]
|
|
},
|
|
"text/vnd.in3d.spot": {
|
|
source: "iana",
|
|
extensions: ["spot"]
|
|
},
|
|
"text/vnd.iptc.newsml": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.iptc.nitf": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.latex-z": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.motorola.reflex": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.ms-mediapackage": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.net2phone.commcenter.command": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.radisys.msml-basic-layout": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.senx.warpscript": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.si.uricatalogue": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.sosi": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.sun.j2me.app-descriptor": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
extensions: ["jad"]
|
|
},
|
|
"text/vnd.trolltech.linguist": {
|
|
source: "iana",
|
|
charset: "UTF-8"
|
|
},
|
|
"text/vnd.wap.si": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.wap.sl": {
|
|
source: "iana"
|
|
},
|
|
"text/vnd.wap.wml": {
|
|
source: "iana",
|
|
extensions: ["wml"]
|
|
},
|
|
"text/vnd.wap.wmlscript": {
|
|
source: "iana",
|
|
extensions: ["wmls"]
|
|
},
|
|
"text/vtt": {
|
|
source: "iana",
|
|
charset: "UTF-8",
|
|
compressible: true,
|
|
extensions: ["vtt"]
|
|
},
|
|
"text/x-asm": {
|
|
source: "apache",
|
|
extensions: ["s", "asm"]
|
|
},
|
|
"text/x-c": {
|
|
source: "apache",
|
|
extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
|
|
},
|
|
"text/x-component": {
|
|
source: "nginx",
|
|
extensions: ["htc"]
|
|
},
|
|
"text/x-fortran": {
|
|
source: "apache",
|
|
extensions: ["f", "for", "f77", "f90"]
|
|
},
|
|
"text/x-gwt-rpc": {
|
|
compressible: true
|
|
},
|
|
"text/x-handlebars-template": {
|
|
extensions: ["hbs"]
|
|
},
|
|
"text/x-java-source": {
|
|
source: "apache",
|
|
extensions: ["java"]
|
|
},
|
|
"text/x-jquery-tmpl": {
|
|
compressible: true
|
|
},
|
|
"text/x-lua": {
|
|
extensions: ["lua"]
|
|
},
|
|
"text/x-markdown": {
|
|
compressible: true,
|
|
extensions: ["mkd"]
|
|
},
|
|
"text/x-nfo": {
|
|
source: "apache",
|
|
extensions: ["nfo"]
|
|
},
|
|
"text/x-opml": {
|
|
source: "apache",
|
|
extensions: ["opml"]
|
|
},
|
|
"text/x-org": {
|
|
compressible: true,
|
|
extensions: ["org"]
|
|
},
|
|
"text/x-pascal": {
|
|
source: "apache",
|
|
extensions: ["p", "pas"]
|
|
},
|
|
"text/x-processing": {
|
|
compressible: true,
|
|
extensions: ["pde"]
|
|
},
|
|
"text/x-sass": {
|
|
extensions: ["sass"]
|
|
},
|
|
"text/x-scss": {
|
|
extensions: ["scss"]
|
|
},
|
|
"text/x-setext": {
|
|
source: "apache",
|
|
extensions: ["etx"]
|
|
},
|
|
"text/x-sfv": {
|
|
source: "apache",
|
|
extensions: ["sfv"]
|
|
},
|
|
"text/x-suse-ymp": {
|
|
compressible: true,
|
|
extensions: ["ymp"]
|
|
},
|
|
"text/x-uuencode": {
|
|
source: "apache",
|
|
extensions: ["uu"]
|
|
},
|
|
"text/x-vcalendar": {
|
|
source: "apache",
|
|
extensions: ["vcs"]
|
|
},
|
|
"text/x-vcard": {
|
|
source: "apache",
|
|
extensions: ["vcf"]
|
|
},
|
|
"text/xml": {
|
|
source: "iana",
|
|
compressible: true,
|
|
extensions: ["xml"]
|
|
},
|
|
"text/xml-external-parsed-entity": {
|
|
source: "iana"
|
|
},
|
|
"text/yaml": {
|
|
compressible: true,
|
|
extensions: ["yaml", "yml"]
|
|
},
|
|
"video/1d-interleaved-parityfec": {
|
|
source: "iana"
|
|
},
|
|
"video/3gpp": {
|
|
source: "iana",
|
|
extensions: ["3gp", "3gpp"]
|
|
},
|
|
"video/3gpp-tt": {
|
|
source: "iana"
|
|
},
|
|
"video/3gpp2": {
|
|
source: "iana",
|
|
extensions: ["3g2"]
|
|
},
|
|
"video/av1": {
|
|
source: "iana"
|
|
},
|
|
"video/bmpeg": {
|
|
source: "iana"
|
|
},
|
|
"video/bt656": {
|
|
source: "iana"
|
|
},
|
|
"video/celb": {
|
|
source: "iana"
|
|
},
|
|
"video/dv": {
|
|
source: "iana"
|
|
},
|
|
"video/encaprtp": {
|
|
source: "iana"
|
|
},
|
|
"video/ffv1": {
|
|
source: "iana"
|
|
},
|
|
"video/flexfec": {
|
|
source: "iana"
|
|
},
|
|
"video/h261": {
|
|
source: "iana",
|
|
extensions: ["h261"]
|
|
},
|
|
"video/h263": {
|
|
source: "iana",
|
|
extensions: ["h263"]
|
|
},
|
|
"video/h263-1998": {
|
|
source: "iana"
|
|
},
|
|
"video/h263-2000": {
|
|
source: "iana"
|
|
},
|
|
"video/h264": {
|
|
source: "iana",
|
|
extensions: ["h264"]
|
|
},
|
|
"video/h264-rcdo": {
|
|
source: "iana"
|
|
},
|
|
"video/h264-svc": {
|
|
source: "iana"
|
|
},
|
|
"video/h265": {
|
|
source: "iana"
|
|
},
|
|
"video/iso.segment": {
|
|
source: "iana",
|
|
extensions: ["m4s"]
|
|
},
|
|
"video/jpeg": {
|
|
source: "iana",
|
|
extensions: ["jpgv"]
|
|
},
|
|
"video/jpeg2000": {
|
|
source: "iana"
|
|
},
|
|
"video/jpm": {
|
|
source: "apache",
|
|
extensions: ["jpm", "jpgm"]
|
|
},
|
|
"video/jxsv": {
|
|
source: "iana"
|
|
},
|
|
"video/mj2": {
|
|
source: "iana",
|
|
extensions: ["mj2", "mjp2"]
|
|
},
|
|
"video/mp1s": {
|
|
source: "iana"
|
|
},
|
|
"video/mp2p": {
|
|
source: "iana"
|
|
},
|
|
"video/mp2t": {
|
|
source: "iana",
|
|
extensions: ["ts"]
|
|
},
|
|
"video/mp4": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["mp4", "mp4v", "mpg4"]
|
|
},
|
|
"video/mp4v-es": {
|
|
source: "iana"
|
|
},
|
|
"video/mpeg": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
|
|
},
|
|
"video/mpeg4-generic": {
|
|
source: "iana"
|
|
},
|
|
"video/mpv": {
|
|
source: "iana"
|
|
},
|
|
"video/nv": {
|
|
source: "iana"
|
|
},
|
|
"video/ogg": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["ogv"]
|
|
},
|
|
"video/parityfec": {
|
|
source: "iana"
|
|
},
|
|
"video/pointer": {
|
|
source: "iana"
|
|
},
|
|
"video/quicktime": {
|
|
source: "iana",
|
|
compressible: false,
|
|
extensions: ["qt", "mov"]
|
|
},
|
|
"video/raptorfec": {
|
|
source: "iana"
|
|
},
|
|
"video/raw": {
|
|
source: "iana"
|
|
},
|
|
"video/rtp-enc-aescm128": {
|
|
source: "iana"
|
|
},
|
|
"video/rtploopback": {
|
|
source: "iana"
|
|
},
|
|
"video/rtx": {
|
|
source: "iana"
|
|
},
|
|
"video/scip": {
|
|
source: "iana"
|
|
},
|
|
"video/smpte291": {
|
|
source: "iana"
|
|
},
|
|
"video/smpte292m": {
|
|
source: "iana"
|
|
},
|
|
"video/ulpfec": {
|
|
source: "iana"
|
|
},
|
|
"video/vc1": {
|
|
source: "iana"
|
|
},
|
|
"video/vc2": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.cctv": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.dece.hd": {
|
|
source: "iana",
|
|
extensions: ["uvh", "uvvh"]
|
|
},
|
|
"video/vnd.dece.mobile": {
|
|
source: "iana",
|
|
extensions: ["uvm", "uvvm"]
|
|
},
|
|
"video/vnd.dece.mp4": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.dece.pd": {
|
|
source: "iana",
|
|
extensions: ["uvp", "uvvp"]
|
|
},
|
|
"video/vnd.dece.sd": {
|
|
source: "iana",
|
|
extensions: ["uvs", "uvvs"]
|
|
},
|
|
"video/vnd.dece.video": {
|
|
source: "iana",
|
|
extensions: ["uvv", "uvvv"]
|
|
},
|
|
"video/vnd.directv.mpeg": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.directv.mpeg-tts": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.dlna.mpeg-tts": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.dvb.file": {
|
|
source: "iana",
|
|
extensions: ["dvb"]
|
|
},
|
|
"video/vnd.fvt": {
|
|
source: "iana",
|
|
extensions: ["fvt"]
|
|
},
|
|
"video/vnd.hns.video": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.iptvforum.1dparityfec-1010": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.iptvforum.1dparityfec-2005": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.iptvforum.2dparityfec-1010": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.iptvforum.2dparityfec-2005": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.iptvforum.ttsavc": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.iptvforum.ttsmpeg2": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.motorola.video": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.motorola.videop": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.mpegurl": {
|
|
source: "iana",
|
|
extensions: ["mxu", "m4u"]
|
|
},
|
|
"video/vnd.ms-playready.media.pyv": {
|
|
source: "iana",
|
|
extensions: ["pyv"]
|
|
},
|
|
"video/vnd.nokia.interleaved-multimedia": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.nokia.mp4vr": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.nokia.videovoip": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.objectvideo": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.radgamettools.bink": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.radgamettools.smacker": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.sealed.mpeg1": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.sealed.mpeg4": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.sealed.swf": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.sealedmedia.softseal.mov": {
|
|
source: "iana"
|
|
},
|
|
"video/vnd.uvvu.mp4": {
|
|
source: "iana",
|
|
extensions: ["uvu", "uvvu"]
|
|
},
|
|
"video/vnd.vivo": {
|
|
source: "iana",
|
|
extensions: ["viv"]
|
|
},
|
|
"video/vnd.youtube.yt": {
|
|
source: "iana"
|
|
},
|
|
"video/vp8": {
|
|
source: "iana"
|
|
},
|
|
"video/vp9": {
|
|
source: "iana"
|
|
},
|
|
"video/webm": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["webm"]
|
|
},
|
|
"video/x-f4v": {
|
|
source: "apache",
|
|
extensions: ["f4v"]
|
|
},
|
|
"video/x-fli": {
|
|
source: "apache",
|
|
extensions: ["fli"]
|
|
},
|
|
"video/x-flv": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["flv"]
|
|
},
|
|
"video/x-m4v": {
|
|
source: "apache",
|
|
extensions: ["m4v"]
|
|
},
|
|
"video/x-matroska": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["mkv", "mk3d", "mks"]
|
|
},
|
|
"video/x-mng": {
|
|
source: "apache",
|
|
extensions: ["mng"]
|
|
},
|
|
"video/x-ms-asf": {
|
|
source: "apache",
|
|
extensions: ["asf", "asx"]
|
|
},
|
|
"video/x-ms-vob": {
|
|
source: "apache",
|
|
extensions: ["vob"]
|
|
},
|
|
"video/x-ms-wm": {
|
|
source: "apache",
|
|
extensions: ["wm"]
|
|
},
|
|
"video/x-ms-wmv": {
|
|
source: "apache",
|
|
compressible: false,
|
|
extensions: ["wmv"]
|
|
},
|
|
"video/x-ms-wmx": {
|
|
source: "apache",
|
|
extensions: ["wmx"]
|
|
},
|
|
"video/x-ms-wvx": {
|
|
source: "apache",
|
|
extensions: ["wvx"]
|
|
},
|
|
"video/x-msvideo": {
|
|
source: "apache",
|
|
extensions: ["avi"]
|
|
},
|
|
"video/x-sgi-movie": {
|
|
source: "apache",
|
|
extensions: ["movie"]
|
|
},
|
|
"video/x-smv": {
|
|
source: "apache",
|
|
extensions: ["smv"]
|
|
},
|
|
"x-conference/x-cooltalk": {
|
|
source: "apache",
|
|
extensions: ["ice"]
|
|
},
|
|
"x-shader/x-fragment": {
|
|
compressible: true
|
|
},
|
|
"x-shader/x-vertex": {
|
|
compressible: true
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/mime-db/index.js
|
|
var require_mime_db = __commonJS((exports, module) => {
|
|
/*!
|
|
* mime-db
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
* Copyright(c) 2015-2022 Douglas Christopher Wilson
|
|
* MIT Licensed
|
|
*/
|
|
module.exports = require_db();
|
|
});
|
|
|
|
// node_modules/mime-types/index.js
|
|
var require_mime_types = __commonJS((exports) => {
|
|
var charset = function(type) {
|
|
if (!type || typeof type !== "string") {
|
|
return false;
|
|
}
|
|
var match = EXTRACT_TYPE_REGEXP.exec(type);
|
|
var mime = match && db[match[1].toLowerCase()];
|
|
if (mime && mime.charset) {
|
|
return mime.charset;
|
|
}
|
|
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
|
|
return "UTF-8";
|
|
}
|
|
return false;
|
|
};
|
|
var contentType = function(str) {
|
|
if (!str || typeof str !== "string") {
|
|
return false;
|
|
}
|
|
var mime = str.indexOf("/") === -1 ? exports.lookup(str) : str;
|
|
if (!mime) {
|
|
return false;
|
|
}
|
|
if (mime.indexOf("charset") === -1) {
|
|
var charset2 = exports.charset(mime);
|
|
if (charset2)
|
|
mime += "; charset=" + charset2.toLowerCase();
|
|
}
|
|
return mime;
|
|
};
|
|
var extension = function(type) {
|
|
if (!type || typeof type !== "string") {
|
|
return false;
|
|
}
|
|
var match = EXTRACT_TYPE_REGEXP.exec(type);
|
|
var exts = match && exports.extensions[match[1].toLowerCase()];
|
|
if (!exts || !exts.length) {
|
|
return false;
|
|
}
|
|
return exts[0];
|
|
};
|
|
var lookup = function(path) {
|
|
if (!path || typeof path !== "string") {
|
|
return false;
|
|
}
|
|
var extension2 = extname("x." + path).toLowerCase().substr(1);
|
|
if (!extension2) {
|
|
return false;
|
|
}
|
|
return exports.types[extension2] || false;
|
|
};
|
|
var populateMaps = function(extensions, types) {
|
|
var preference = ["nginx", "apache", undefined, "iana"];
|
|
Object.keys(db).forEach(function forEachMimeType(type) {
|
|
var mime = db[type];
|
|
var exts = mime.extensions;
|
|
if (!exts || !exts.length) {
|
|
return;
|
|
}
|
|
extensions[type] = exts;
|
|
for (var i = 0;i < exts.length; i++) {
|
|
var extension2 = exts[i];
|
|
if (types[extension2]) {
|
|
var from = preference.indexOf(db[types[extension2]].source);
|
|
var to = preference.indexOf(mime.source);
|
|
if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) {
|
|
continue;
|
|
}
|
|
}
|
|
types[extension2] = type;
|
|
}
|
|
});
|
|
};
|
|
/*!
|
|
* mime-types
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
* MIT Licensed
|
|
*/
|
|
var db = require_mime_db();
|
|
var extname = __require("path").extname;
|
|
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
|
|
var TEXT_TYPE_REGEXP = /^text\//i;
|
|
exports.charset = charset;
|
|
exports.charsets = { lookup: charset };
|
|
exports.contentType = contentType;
|
|
exports.extension = extension;
|
|
exports.extensions = Object.create(null);
|
|
exports.lookup = lookup;
|
|
exports.types = Object.create(null);
|
|
populateMaps(exports.extensions, exports.types);
|
|
});
|
|
|
|
// node_modules/asynckit/lib/defer.js
|
|
var require_defer = __commonJS((exports, module) => {
|
|
var defer = function(fn) {
|
|
var nextTick = typeof setImmediate == "function" ? setImmediate : typeof process == "object" && typeof process.nextTick == "function" ? process.nextTick : null;
|
|
if (nextTick) {
|
|
nextTick(fn);
|
|
} else {
|
|
setTimeout(fn, 0);
|
|
}
|
|
};
|
|
module.exports = defer;
|
|
});
|
|
|
|
// node_modules/asynckit/lib/async.js
|
|
var require_async = __commonJS((exports, module) => {
|
|
var async = function(callback) {
|
|
var isAsync = false;
|
|
defer(function() {
|
|
isAsync = true;
|
|
});
|
|
return function async_callback(err, result) {
|
|
if (isAsync) {
|
|
callback(err, result);
|
|
} else {
|
|
defer(function nextTick_callback() {
|
|
callback(err, result);
|
|
});
|
|
}
|
|
};
|
|
};
|
|
var defer = require_defer();
|
|
module.exports = async;
|
|
});
|
|
|
|
// node_modules/asynckit/lib/abort.js
|
|
var require_abort = __commonJS((exports, module) => {
|
|
var abort = function(state) {
|
|
Object.keys(state.jobs).forEach(clean.bind(state));
|
|
state.jobs = {};
|
|
};
|
|
var clean = function(key) {
|
|
if (typeof this.jobs[key] == "function") {
|
|
this.jobs[key]();
|
|
}
|
|
};
|
|
module.exports = abort;
|
|
});
|
|
|
|
// node_modules/asynckit/lib/iterate.js
|
|
var require_iterate = __commonJS((exports, module) => {
|
|
var iterate = function(list, iterator, state, callback) {
|
|
var key = state["keyedList"] ? state["keyedList"][state.index] : state.index;
|
|
state.jobs[key] = runJob(iterator, key, list[key], function(error, output) {
|
|
if (!(key in state.jobs)) {
|
|
return;
|
|
}
|
|
delete state.jobs[key];
|
|
if (error) {
|
|
abort(state);
|
|
} else {
|
|
state.results[key] = output;
|
|
}
|
|
callback(error, state.results);
|
|
});
|
|
};
|
|
var runJob = function(iterator, key, item, callback) {
|
|
var aborter;
|
|
if (iterator.length == 2) {
|
|
aborter = iterator(item, async(callback));
|
|
} else {
|
|
aborter = iterator(item, key, async(callback));
|
|
}
|
|
return aborter;
|
|
};
|
|
var async = require_async();
|
|
var abort = require_abort();
|
|
module.exports = iterate;
|
|
});
|
|
|
|
// node_modules/asynckit/lib/state.js
|
|
var require_state = __commonJS((exports, module) => {
|
|
var state = function(list, sortMethod) {
|
|
var isNamedList = !Array.isArray(list), initState = {
|
|
index: 0,
|
|
keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
|
|
jobs: {},
|
|
results: isNamedList ? {} : [],
|
|
size: isNamedList ? Object.keys(list).length : list.length
|
|
};
|
|
if (sortMethod) {
|
|
initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) {
|
|
return sortMethod(list[a], list[b]);
|
|
});
|
|
}
|
|
return initState;
|
|
};
|
|
module.exports = state;
|
|
});
|
|
|
|
// node_modules/asynckit/lib/terminator.js
|
|
var require_terminator = __commonJS((exports, module) => {
|
|
var terminator = function(callback) {
|
|
if (!Object.keys(this.jobs).length) {
|
|
return;
|
|
}
|
|
this.index = this.size;
|
|
abort(this);
|
|
async(callback)(null, this.results);
|
|
};
|
|
var abort = require_abort();
|
|
var async = require_async();
|
|
module.exports = terminator;
|
|
});
|
|
|
|
// node_modules/asynckit/parallel.js
|
|
var require_parallel = __commonJS((exports, module) => {
|
|
var parallel = function(list, iterator, callback) {
|
|
var state = initState(list);
|
|
while (state.index < (state["keyedList"] || list).length) {
|
|
iterate(list, iterator, state, function(error, result) {
|
|
if (error) {
|
|
callback(error, result);
|
|
return;
|
|
}
|
|
if (Object.keys(state.jobs).length === 0) {
|
|
callback(null, state.results);
|
|
return;
|
|
}
|
|
});
|
|
state.index++;
|
|
}
|
|
return terminator.bind(state, callback);
|
|
};
|
|
var iterate = require_iterate();
|
|
var initState = require_state();
|
|
var terminator = require_terminator();
|
|
module.exports = parallel;
|
|
});
|
|
|
|
// node_modules/asynckit/serialOrdered.js
|
|
var require_serialOrdered = __commonJS((exports, module) => {
|
|
var serialOrdered = function(list, iterator, sortMethod, callback) {
|
|
var state = initState(list, sortMethod);
|
|
iterate(list, iterator, state, function iteratorHandler(error, result) {
|
|
if (error) {
|
|
callback(error, result);
|
|
return;
|
|
}
|
|
state.index++;
|
|
if (state.index < (state["keyedList"] || list).length) {
|
|
iterate(list, iterator, state, iteratorHandler);
|
|
return;
|
|
}
|
|
callback(null, state.results);
|
|
});
|
|
return terminator.bind(state, callback);
|
|
};
|
|
var ascending = function(a, b) {
|
|
return a < b ? -1 : a > b ? 1 : 0;
|
|
};
|
|
var descending = function(a, b) {
|
|
return -1 * ascending(a, b);
|
|
};
|
|
var iterate = require_iterate();
|
|
var initState = require_state();
|
|
var terminator = require_terminator();
|
|
module.exports = serialOrdered;
|
|
module.exports.ascending = ascending;
|
|
module.exports.descending = descending;
|
|
});
|
|
|
|
// node_modules/asynckit/serial.js
|
|
var require_serial = __commonJS((exports, module) => {
|
|
var serial = function(list, iterator, callback) {
|
|
return serialOrdered(list, iterator, null, callback);
|
|
};
|
|
var serialOrdered = require_serialOrdered();
|
|
module.exports = serial;
|
|
});
|
|
|
|
// node_modules/asynckit/index.js
|
|
var require_asynckit = __commonJS((exports, module) => {
|
|
module.exports = {
|
|
parallel: require_parallel(),
|
|
serial: require_serial(),
|
|
serialOrdered: require_serialOrdered()
|
|
};
|
|
});
|
|
|
|
// node_modules/form-data/lib/populate.js
|
|
var require_populate = __commonJS((exports, module) => {
|
|
module.exports = function(dst, src) {
|
|
Object.keys(src).forEach(function(prop) {
|
|
dst[prop] = dst[prop] || src[prop];
|
|
});
|
|
return dst;
|
|
};
|
|
});
|
|
|
|
// node_modules/form-data/lib/form_data.js
|
|
var require_form_data = __commonJS((exports, module) => {
|
|
var FormData2 = function(options) {
|
|
if (!(this instanceof FormData2)) {
|
|
return new FormData2(options);
|
|
}
|
|
this._overheadLength = 0;
|
|
this._valueLength = 0;
|
|
this._valuesToMeasure = [];
|
|
CombinedStream.call(this);
|
|
options = options || {};
|
|
for (var option in options) {
|
|
this[option] = options[option];
|
|
}
|
|
};
|
|
var CombinedStream = require_combined_stream();
|
|
var util = __require("util");
|
|
var path = __require("path");
|
|
var http = __require("http");
|
|
var https = __require("https");
|
|
var parseUrl = __require("url").parse;
|
|
var fs = __require("fs");
|
|
var Stream = __require("stream").Stream;
|
|
var mime = require_mime_types();
|
|
var asynckit = require_asynckit();
|
|
var populate = require_populate();
|
|
module.exports = FormData2;
|
|
util.inherits(FormData2, CombinedStream);
|
|
FormData2.LINE_BREAK = "\r\n";
|
|
FormData2.DEFAULT_CONTENT_TYPE = "application/octet-stream";
|
|
FormData2.prototype.append = function(field, value, options) {
|
|
options = options || {};
|
|
if (typeof options == "string") {
|
|
options = { filename: options };
|
|
}
|
|
var append = CombinedStream.prototype.append.bind(this);
|
|
if (typeof value == "number") {
|
|
value = "" + value;
|
|
}
|
|
if (util.isArray(value)) {
|
|
this._error(new Error("Arrays are not supported."));
|
|
return;
|
|
}
|
|
var header = this._multiPartHeader(field, value, options);
|
|
var footer = this._multiPartFooter();
|
|
append(header);
|
|
append(value);
|
|
append(footer);
|
|
this._trackLength(header, value, options);
|
|
};
|
|
FormData2.prototype._trackLength = function(header, value, options) {
|
|
var valueLength = 0;
|
|
if (options.knownLength != null) {
|
|
valueLength += +options.knownLength;
|
|
} else if (Buffer.isBuffer(value)) {
|
|
valueLength = value.length;
|
|
} else if (typeof value === "string") {
|
|
valueLength = Buffer.byteLength(value);
|
|
}
|
|
this._valueLength += valueLength;
|
|
this._overheadLength += Buffer.byteLength(header) + FormData2.LINE_BREAK.length;
|
|
if (!value || !value.path && !(value.readable && value.hasOwnProperty("httpVersion")) && !(value instanceof Stream)) {
|
|
return;
|
|
}
|
|
if (!options.knownLength) {
|
|
this._valuesToMeasure.push(value);
|
|
}
|
|
};
|
|
FormData2.prototype._lengthRetriever = function(value, callback) {
|
|
if (value.hasOwnProperty("fd")) {
|
|
if (value.end != null && value.end != Infinity && value.start != null) {
|
|
callback(null, value.end + 1 - (value.start ? value.start : 0));
|
|
} else {
|
|
fs.stat(value.path, function(err, stat) {
|
|
var fileSize;
|
|
if (err) {
|
|
callback(err);
|
|
return;
|
|
}
|
|
fileSize = stat.size - (value.start ? value.start : 0);
|
|
callback(null, fileSize);
|
|
});
|
|
}
|
|
} else if (value.hasOwnProperty("httpVersion")) {
|
|
callback(null, +value.headers["content-length"]);
|
|
} else if (value.hasOwnProperty("httpModule")) {
|
|
value.on("response", function(response) {
|
|
value.pause();
|
|
callback(null, +response.headers["content-length"]);
|
|
});
|
|
value.resume();
|
|
} else {
|
|
callback("Unknown stream");
|
|
}
|
|
};
|
|
FormData2.prototype._multiPartHeader = function(field, value, options) {
|
|
if (typeof options.header == "string") {
|
|
return options.header;
|
|
}
|
|
var contentDisposition = this._getContentDisposition(value, options);
|
|
var contentType = this._getContentType(value, options);
|
|
var contents = "";
|
|
var headers = {
|
|
"Content-Disposition": ["form-data", 'name="' + field + '"'].concat(contentDisposition || []),
|
|
"Content-Type": [].concat(contentType || [])
|
|
};
|
|
if (typeof options.header == "object") {
|
|
populate(headers, options.header);
|
|
}
|
|
var header;
|
|
for (var prop in headers) {
|
|
if (!headers.hasOwnProperty(prop))
|
|
continue;
|
|
header = headers[prop];
|
|
if (header == null) {
|
|
continue;
|
|
}
|
|
if (!Array.isArray(header)) {
|
|
header = [header];
|
|
}
|
|
if (header.length) {
|
|
contents += prop + ": " + header.join("; ") + FormData2.LINE_BREAK;
|
|
}
|
|
}
|
|
return "--" + this.getBoundary() + FormData2.LINE_BREAK + contents + FormData2.LINE_BREAK;
|
|
};
|
|
FormData2.prototype._getContentDisposition = function(value, options) {
|
|
var filename, contentDisposition;
|
|
if (typeof options.filepath === "string") {
|
|
filename = path.normalize(options.filepath).replace(/\\/g, "/");
|
|
} else if (options.filename || value.name || value.path) {
|
|
filename = path.basename(options.filename || value.name || value.path);
|
|
} else if (value.readable && value.hasOwnProperty("httpVersion")) {
|
|
filename = path.basename(value.client._httpMessage.path || "");
|
|
}
|
|
if (filename) {
|
|
contentDisposition = 'filename="' + filename + '"';
|
|
}
|
|
return contentDisposition;
|
|
};
|
|
FormData2.prototype._getContentType = function(value, options) {
|
|
var contentType = options.contentType;
|
|
if (!contentType && value.name) {
|
|
contentType = mime.lookup(value.name);
|
|
}
|
|
if (!contentType && value.path) {
|
|
contentType = mime.lookup(value.path);
|
|
}
|
|
if (!contentType && value.readable && value.hasOwnProperty("httpVersion")) {
|
|
contentType = value.headers["content-type"];
|
|
}
|
|
if (!contentType && (options.filepath || options.filename)) {
|
|
contentType = mime.lookup(options.filepath || options.filename);
|
|
}
|
|
if (!contentType && typeof value == "object") {
|
|
contentType = FormData2.DEFAULT_CONTENT_TYPE;
|
|
}
|
|
return contentType;
|
|
};
|
|
FormData2.prototype._multiPartFooter = function() {
|
|
return function(next) {
|
|
var footer = FormData2.LINE_BREAK;
|
|
var lastPart = this._streams.length === 0;
|
|
if (lastPart) {
|
|
footer += this._lastBoundary();
|
|
}
|
|
next(footer);
|
|
}.bind(this);
|
|
};
|
|
FormData2.prototype._lastBoundary = function() {
|
|
return "--" + this.getBoundary() + "--" + FormData2.LINE_BREAK;
|
|
};
|
|
FormData2.prototype.getHeaders = function(userHeaders) {
|
|
var header;
|
|
var formHeaders = {
|
|
"content-type": "multipart/form-data; boundary=" + this.getBoundary()
|
|
};
|
|
for (header in userHeaders) {
|
|
if (userHeaders.hasOwnProperty(header)) {
|
|
formHeaders[header.toLowerCase()] = userHeaders[header];
|
|
}
|
|
}
|
|
return formHeaders;
|
|
};
|
|
FormData2.prototype.setBoundary = function(boundary) {
|
|
this._boundary = boundary;
|
|
};
|
|
FormData2.prototype.getBoundary = function() {
|
|
if (!this._boundary) {
|
|
this._generateBoundary();
|
|
}
|
|
return this._boundary;
|
|
};
|
|
FormData2.prototype.getBuffer = function() {
|
|
var dataBuffer = new Buffer.alloc(0);
|
|
var boundary = this.getBoundary();
|
|
for (var i = 0, len = this._streams.length;i < len; i++) {
|
|
if (typeof this._streams[i] !== "function") {
|
|
if (Buffer.isBuffer(this._streams[i])) {
|
|
dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);
|
|
} else {
|
|
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);
|
|
}
|
|
if (typeof this._streams[i] !== "string" || this._streams[i].substring(2, boundary.length + 2) !== boundary) {
|
|
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData2.LINE_BREAK)]);
|
|
}
|
|
}
|
|
}
|
|
return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);
|
|
};
|
|
FormData2.prototype._generateBoundary = function() {
|
|
var boundary = "--------------------------";
|
|
for (var i = 0;i < 24; i++) {
|
|
boundary += Math.floor(Math.random() * 10).toString(16);
|
|
}
|
|
this._boundary = boundary;
|
|
};
|
|
FormData2.prototype.getLengthSync = function() {
|
|
var knownLength = this._overheadLength + this._valueLength;
|
|
if (this._streams.length) {
|
|
knownLength += this._lastBoundary().length;
|
|
}
|
|
if (!this.hasKnownLength()) {
|
|
this._error(new Error("Cannot calculate proper length in synchronous way."));
|
|
}
|
|
return knownLength;
|
|
};
|
|
FormData2.prototype.hasKnownLength = function() {
|
|
var hasKnownLength = true;
|
|
if (this._valuesToMeasure.length) {
|
|
hasKnownLength = false;
|
|
}
|
|
return hasKnownLength;
|
|
};
|
|
FormData2.prototype.getLength = function(cb) {
|
|
var knownLength = this._overheadLength + this._valueLength;
|
|
if (this._streams.length) {
|
|
knownLength += this._lastBoundary().length;
|
|
}
|
|
if (!this._valuesToMeasure.length) {
|
|
process.nextTick(cb.bind(this, null, knownLength));
|
|
return;
|
|
}
|
|
asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
|
|
if (err) {
|
|
cb(err);
|
|
return;
|
|
}
|
|
values.forEach(function(length) {
|
|
knownLength += length;
|
|
});
|
|
cb(null, knownLength);
|
|
});
|
|
};
|
|
FormData2.prototype.submit = function(params, cb) {
|
|
var request, options, defaults = { method: "post" };
|
|
if (typeof params == "string") {
|
|
params = parseUrl(params);
|
|
options = populate({
|
|
port: params.port,
|
|
path: params.pathname,
|
|
host: params.hostname,
|
|
protocol: params.protocol
|
|
}, defaults);
|
|
} else {
|
|
options = populate(params, defaults);
|
|
if (!options.port) {
|
|
options.port = options.protocol == "https:" ? 443 : 80;
|
|
}
|
|
}
|
|
options.headers = this.getHeaders(params.headers);
|
|
if (options.protocol == "https:") {
|
|
request = https.request(options);
|
|
} else {
|
|
request = http.request(options);
|
|
}
|
|
this.getLength(function(err, length) {
|
|
if (err && err !== "Unknown stream") {
|
|
this._error(err);
|
|
return;
|
|
}
|
|
if (length) {
|
|
request.setHeader("Content-Length", length);
|
|
}
|
|
this.pipe(request);
|
|
if (cb) {
|
|
var onResponse;
|
|
var callback = function(error, responce) {
|
|
request.removeListener("error", callback);
|
|
request.removeListener("response", onResponse);
|
|
return cb.call(this, error, responce);
|
|
};
|
|
onResponse = callback.bind(this, null);
|
|
request.on("error", callback);
|
|
request.on("response", onResponse);
|
|
}
|
|
}.bind(this));
|
|
return request;
|
|
};
|
|
FormData2.prototype._error = function(err) {
|
|
if (!this.error) {
|
|
this.error = err;
|
|
this.pause();
|
|
this.emit("error", err);
|
|
}
|
|
};
|
|
FormData2.prototype.toString = function() {
|
|
return "[object FormData]";
|
|
};
|
|
});
|
|
|
|
// node_modules/follow-redirects/debug.js
|
|
var require_debug = __commonJS((exports, module) => {
|
|
var debug;
|
|
module.exports = function() {
|
|
if (!debug) {
|
|
try {
|
|
debug = (()=>{throw new Error(`Cannot require module "debug"`);})()("follow-redirects");
|
|
} catch (error) {
|
|
}
|
|
if (typeof debug !== "function") {
|
|
debug = function() {
|
|
};
|
|
}
|
|
}
|
|
debug.apply(null, arguments);
|
|
};
|
|
});
|
|
|
|
// node_modules/follow-redirects/index.js
|
|
var require_follow_redirects = __commonJS((exports, module) => {
|
|
var RedirectableRequest = function(options, responseCallback) {
|
|
Writable.call(this);
|
|
this._sanitizeOptions(options);
|
|
this._options = options;
|
|
this._ended = false;
|
|
this._ending = false;
|
|
this._redirectCount = 0;
|
|
this._redirects = [];
|
|
this._requestBodyLength = 0;
|
|
this._requestBodyBuffers = [];
|
|
if (responseCallback) {
|
|
this.on("response", responseCallback);
|
|
}
|
|
var self2 = this;
|
|
this._onNativeResponse = function(response) {
|
|
try {
|
|
self2._processResponse(response);
|
|
} catch (cause) {
|
|
self2.emit("error", cause instanceof RedirectionError ? cause : new RedirectionError({ cause }));
|
|
}
|
|
};
|
|
this._performRequest();
|
|
};
|
|
var wrap = function(protocols) {
|
|
var exports2 = {
|
|
maxRedirects: 21,
|
|
maxBodyLength: 10 * 1024 * 1024
|
|
};
|
|
var nativeProtocols = {};
|
|
Object.keys(protocols).forEach(function(scheme) {
|
|
var protocol = scheme + ":";
|
|
var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
|
|
var wrappedProtocol = exports2[scheme] = Object.create(nativeProtocol);
|
|
function request(input, options, callback) {
|
|
if (isURL(input)) {
|
|
input = spreadUrlObject(input);
|
|
} else if (isString2(input)) {
|
|
input = spreadUrlObject(parseUrl2(input));
|
|
} else {
|
|
callback = options;
|
|
options = validateUrl(input);
|
|
input = { protocol };
|
|
}
|
|
if (isFunction2(options)) {
|
|
callback = options;
|
|
options = null;
|
|
}
|
|
options = Object.assign({
|
|
maxRedirects: exports2.maxRedirects,
|
|
maxBodyLength: exports2.maxBodyLength
|
|
}, input, options);
|
|
options.nativeProtocols = nativeProtocols;
|
|
if (!isString2(options.host) && !isString2(options.hostname)) {
|
|
options.hostname = "::1";
|
|
}
|
|
assert.equal(options.protocol, protocol, "protocol mismatch");
|
|
debug("options", options);
|
|
return new RedirectableRequest(options, callback);
|
|
}
|
|
function get(input, options, callback) {
|
|
var wrappedRequest = wrappedProtocol.request(input, options, callback);
|
|
wrappedRequest.end();
|
|
return wrappedRequest;
|
|
}
|
|
Object.defineProperties(wrappedProtocol, {
|
|
request: { value: request, configurable: true, enumerable: true, writable: true },
|
|
get: { value: get, configurable: true, enumerable: true, writable: true }
|
|
});
|
|
});
|
|
return exports2;
|
|
};
|
|
var noop2 = function() {
|
|
};
|
|
var parseUrl2 = function(input) {
|
|
var parsed;
|
|
if (useNativeURL) {
|
|
parsed = new URL2(input);
|
|
} else {
|
|
parsed = validateUrl(url2.parse(input));
|
|
if (!isString2(parsed.protocol)) {
|
|
throw new InvalidUrlError({ input });
|
|
}
|
|
}
|
|
return parsed;
|
|
};
|
|
var resolveUrl = function(relative, base) {
|
|
return useNativeURL ? new URL2(relative, base) : parseUrl2(url2.resolve(base, relative));
|
|
};
|
|
var validateUrl = function(input) {
|
|
if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) {
|
|
throw new InvalidUrlError({ input: input.href || input });
|
|
}
|
|
if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) {
|
|
throw new InvalidUrlError({ input: input.href || input });
|
|
}
|
|
return input;
|
|
};
|
|
var spreadUrlObject = function(urlObject, target) {
|
|
var spread = target || {};
|
|
for (var key of preservedUrlFields) {
|
|
spread[key] = urlObject[key];
|
|
}
|
|
if (spread.hostname.startsWith("[")) {
|
|
spread.hostname = spread.hostname.slice(1, -1);
|
|
}
|
|
if (spread.port !== "") {
|
|
spread.port = Number(spread.port);
|
|
}
|
|
spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;
|
|
return spread;
|
|
};
|
|
var removeMatchingHeaders = function(regex, headers) {
|
|
var lastValue;
|
|
for (var header in headers) {
|
|
if (regex.test(header)) {
|
|
lastValue = headers[header];
|
|
delete headers[header];
|
|
}
|
|
}
|
|
return lastValue === null || typeof lastValue === "undefined" ? undefined : String(lastValue).trim();
|
|
};
|
|
var createErrorType = function(code, message, baseClass) {
|
|
function CustomError(properties) {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
Object.assign(this, properties || {});
|
|
this.code = code;
|
|
this.message = this.cause ? message + ": " + this.cause.message : message;
|
|
}
|
|
CustomError.prototype = new (baseClass || Error);
|
|
Object.defineProperties(CustomError.prototype, {
|
|
constructor: {
|
|
value: CustomError,
|
|
enumerable: false
|
|
},
|
|
name: {
|
|
value: "Error [" + code + "]",
|
|
enumerable: false
|
|
}
|
|
});
|
|
return CustomError;
|
|
};
|
|
var destroyRequest = function(request, error) {
|
|
for (var event of events) {
|
|
request.removeListener(event, eventHandlers[event]);
|
|
}
|
|
request.on("error", noop2);
|
|
request.destroy(error);
|
|
};
|
|
var isSubdomain = function(subdomain, domain) {
|
|
assert(isString2(subdomain) && isString2(domain));
|
|
var dot = subdomain.length - domain.length - 1;
|
|
return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain);
|
|
};
|
|
var isString2 = function(value) {
|
|
return typeof value === "string" || value instanceof String;
|
|
};
|
|
var isFunction2 = function(value) {
|
|
return typeof value === "function";
|
|
};
|
|
var isBuffer2 = function(value) {
|
|
return typeof value === "object" && "length" in value;
|
|
};
|
|
var isURL = function(value) {
|
|
return URL2 && value instanceof URL2;
|
|
};
|
|
var url2 = __require("url");
|
|
var URL2 = url2.URL;
|
|
var http = __require("http");
|
|
var https = __require("https");
|
|
var Writable = __require("stream").Writable;
|
|
var assert = __require("assert");
|
|
var debug = require_debug();
|
|
var useNativeURL = false;
|
|
try {
|
|
assert(new URL2);
|
|
} catch (error) {
|
|
useNativeURL = error.code === "ERR_INVALID_URL";
|
|
}
|
|
var preservedUrlFields = [
|
|
"auth",
|
|
"host",
|
|
"hostname",
|
|
"href",
|
|
"path",
|
|
"pathname",
|
|
"port",
|
|
"protocol",
|
|
"query",
|
|
"search",
|
|
"hash"
|
|
];
|
|
var events = ["abort", "aborted", "connect", "error", "socket", "timeout"];
|
|
var eventHandlers = Object.create(null);
|
|
events.forEach(function(event) {
|
|
eventHandlers[event] = function(arg1, arg2, arg3) {
|
|
this._redirectable.emit(event, arg1, arg2, arg3);
|
|
};
|
|
});
|
|
var InvalidUrlError = createErrorType("ERR_INVALID_URL", "Invalid URL", TypeError);
|
|
var RedirectionError = createErrorType("ERR_FR_REDIRECTION_FAILURE", "Redirected request failed");
|
|
var TooManyRedirectsError = createErrorType("ERR_FR_TOO_MANY_REDIRECTS", "Maximum number of redirects exceeded", RedirectionError);
|
|
var MaxBodyLengthExceededError = createErrorType("ERR_FR_MAX_BODY_LENGTH_EXCEEDED", "Request body larger than maxBodyLength limit");
|
|
var WriteAfterEndError = createErrorType("ERR_STREAM_WRITE_AFTER_END", "write after end");
|
|
var destroy = Writable.prototype.destroy || noop2;
|
|
RedirectableRequest.prototype = Object.create(Writable.prototype);
|
|
RedirectableRequest.prototype.abort = function() {
|
|
destroyRequest(this._currentRequest);
|
|
this._currentRequest.abort();
|
|
this.emit("abort");
|
|
};
|
|
RedirectableRequest.prototype.destroy = function(error) {
|
|
destroyRequest(this._currentRequest, error);
|
|
destroy.call(this, error);
|
|
return this;
|
|
};
|
|
RedirectableRequest.prototype.write = function(data, encoding, callback) {
|
|
if (this._ending) {
|
|
throw new WriteAfterEndError;
|
|
}
|
|
if (!isString2(data) && !isBuffer2(data)) {
|
|
throw new TypeError("data should be a string, Buffer or Uint8Array");
|
|
}
|
|
if (isFunction2(encoding)) {
|
|
callback = encoding;
|
|
encoding = null;
|
|
}
|
|
if (data.length === 0) {
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
return;
|
|
}
|
|
if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {
|
|
this._requestBodyLength += data.length;
|
|
this._requestBodyBuffers.push({ data, encoding });
|
|
this._currentRequest.write(data, encoding, callback);
|
|
} else {
|
|
this.emit("error", new MaxBodyLengthExceededError);
|
|
this.abort();
|
|
}
|
|
};
|
|
RedirectableRequest.prototype.end = function(data, encoding, callback) {
|
|
if (isFunction2(data)) {
|
|
callback = data;
|
|
data = encoding = null;
|
|
} else if (isFunction2(encoding)) {
|
|
callback = encoding;
|
|
encoding = null;
|
|
}
|
|
if (!data) {
|
|
this._ended = this._ending = true;
|
|
this._currentRequest.end(null, null, callback);
|
|
} else {
|
|
var self2 = this;
|
|
var currentRequest = this._currentRequest;
|
|
this.write(data, encoding, function() {
|
|
self2._ended = true;
|
|
currentRequest.end(null, null, callback);
|
|
});
|
|
this._ending = true;
|
|
}
|
|
};
|
|
RedirectableRequest.prototype.setHeader = function(name, value) {
|
|
this._options.headers[name] = value;
|
|
this._currentRequest.setHeader(name, value);
|
|
};
|
|
RedirectableRequest.prototype.removeHeader = function(name) {
|
|
delete this._options.headers[name];
|
|
this._currentRequest.removeHeader(name);
|
|
};
|
|
RedirectableRequest.prototype.setTimeout = function(msecs, callback) {
|
|
var self2 = this;
|
|
function destroyOnTimeout(socket) {
|
|
socket.setTimeout(msecs);
|
|
socket.removeListener("timeout", socket.destroy);
|
|
socket.addListener("timeout", socket.destroy);
|
|
}
|
|
function startTimer(socket) {
|
|
if (self2._timeout) {
|
|
clearTimeout(self2._timeout);
|
|
}
|
|
self2._timeout = setTimeout(function() {
|
|
self2.emit("timeout");
|
|
clearTimer();
|
|
}, msecs);
|
|
destroyOnTimeout(socket);
|
|
}
|
|
function clearTimer() {
|
|
if (self2._timeout) {
|
|
clearTimeout(self2._timeout);
|
|
self2._timeout = null;
|
|
}
|
|
self2.removeListener("abort", clearTimer);
|
|
self2.removeListener("error", clearTimer);
|
|
self2.removeListener("response", clearTimer);
|
|
self2.removeListener("close", clearTimer);
|
|
if (callback) {
|
|
self2.removeListener("timeout", callback);
|
|
}
|
|
if (!self2.socket) {
|
|
self2._currentRequest.removeListener("socket", startTimer);
|
|
}
|
|
}
|
|
if (callback) {
|
|
this.on("timeout", callback);
|
|
}
|
|
if (this.socket) {
|
|
startTimer(this.socket);
|
|
} else {
|
|
this._currentRequest.once("socket", startTimer);
|
|
}
|
|
this.on("socket", destroyOnTimeout);
|
|
this.on("abort", clearTimer);
|
|
this.on("error", clearTimer);
|
|
this.on("response", clearTimer);
|
|
this.on("close", clearTimer);
|
|
return this;
|
|
};
|
|
[
|
|
"flushHeaders",
|
|
"getHeader",
|
|
"setNoDelay",
|
|
"setSocketKeepAlive"
|
|
].forEach(function(method) {
|
|
RedirectableRequest.prototype[method] = function(a, b) {
|
|
return this._currentRequest[method](a, b);
|
|
};
|
|
});
|
|
["aborted", "connection", "socket"].forEach(function(property) {
|
|
Object.defineProperty(RedirectableRequest.prototype, property, {
|
|
get: function() {
|
|
return this._currentRequest[property];
|
|
}
|
|
});
|
|
});
|
|
RedirectableRequest.prototype._sanitizeOptions = function(options) {
|
|
if (!options.headers) {
|
|
options.headers = {};
|
|
}
|
|
if (options.host) {
|
|
if (!options.hostname) {
|
|
options.hostname = options.host;
|
|
}
|
|
delete options.host;
|
|
}
|
|
if (!options.pathname && options.path) {
|
|
var searchPos = options.path.indexOf("?");
|
|
if (searchPos < 0) {
|
|
options.pathname = options.path;
|
|
} else {
|
|
options.pathname = options.path.substring(0, searchPos);
|
|
options.search = options.path.substring(searchPos);
|
|
}
|
|
}
|
|
};
|
|
RedirectableRequest.prototype._performRequest = function() {
|
|
var protocol = this._options.protocol;
|
|
var nativeProtocol = this._options.nativeProtocols[protocol];
|
|
if (!nativeProtocol) {
|
|
throw new TypeError("Unsupported protocol " + protocol);
|
|
}
|
|
if (this._options.agents) {
|
|
var scheme = protocol.slice(0, -1);
|
|
this._options.agent = this._options.agents[scheme];
|
|
}
|
|
var request = this._currentRequest = nativeProtocol.request(this._options, this._onNativeResponse);
|
|
request._redirectable = this;
|
|
for (var event of events) {
|
|
request.on(event, eventHandlers[event]);
|
|
}
|
|
this._currentUrl = /^\//.test(this._options.path) ? url2.format(this._options) : this._options.path;
|
|
if (this._isRedirect) {
|
|
var i = 0;
|
|
var self2 = this;
|
|
var buffers = this._requestBodyBuffers;
|
|
(function writeNext(error) {
|
|
if (request === self2._currentRequest) {
|
|
if (error) {
|
|
self2.emit("error", error);
|
|
} else if (i < buffers.length) {
|
|
var buffer = buffers[i++];
|
|
if (!request.finished) {
|
|
request.write(buffer.data, buffer.encoding, writeNext);
|
|
}
|
|
} else if (self2._ended) {
|
|
request.end();
|
|
}
|
|
}
|
|
})();
|
|
}
|
|
};
|
|
RedirectableRequest.prototype._processResponse = function(response) {
|
|
var statusCode = response.statusCode;
|
|
if (this._options.trackRedirects) {
|
|
this._redirects.push({
|
|
url: this._currentUrl,
|
|
headers: response.headers,
|
|
statusCode
|
|
});
|
|
}
|
|
var location = response.headers.location;
|
|
if (!location || this._options.followRedirects === false || statusCode < 300 || statusCode >= 400) {
|
|
response.responseUrl = this._currentUrl;
|
|
response.redirects = this._redirects;
|
|
this.emit("response", response);
|
|
this._requestBodyBuffers = [];
|
|
return;
|
|
}
|
|
destroyRequest(this._currentRequest);
|
|
response.destroy();
|
|
if (++this._redirectCount > this._options.maxRedirects) {
|
|
throw new TooManyRedirectsError;
|
|
}
|
|
var requestHeaders;
|
|
var beforeRedirect = this._options.beforeRedirect;
|
|
if (beforeRedirect) {
|
|
requestHeaders = Object.assign({
|
|
Host: response.req.getHeader("host")
|
|
}, this._options.headers);
|
|
}
|
|
var method = this._options.method;
|
|
if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || statusCode === 303 && !/^(?:GET|HEAD)$/.test(this._options.method)) {
|
|
this._options.method = "GET";
|
|
this._requestBodyBuffers = [];
|
|
removeMatchingHeaders(/^content-/i, this._options.headers);
|
|
}
|
|
var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);
|
|
var currentUrlParts = parseUrl2(this._currentUrl);
|
|
var currentHost = currentHostHeader || currentUrlParts.host;
|
|
var currentUrl = /^\w+:/.test(location) ? this._currentUrl : url2.format(Object.assign(currentUrlParts, { host: currentHost }));
|
|
var redirectUrl = resolveUrl(location, currentUrl);
|
|
debug("redirecting to", redirectUrl.href);
|
|
this._isRedirect = true;
|
|
spreadUrlObject(redirectUrl, this._options);
|
|
if (redirectUrl.protocol !== currentUrlParts.protocol && redirectUrl.protocol !== "https:" || redirectUrl.host !== currentHost && !isSubdomain(redirectUrl.host, currentHost)) {
|
|
removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);
|
|
}
|
|
if (isFunction2(beforeRedirect)) {
|
|
var responseDetails = {
|
|
headers: response.headers,
|
|
statusCode
|
|
};
|
|
var requestDetails = {
|
|
url: currentUrl,
|
|
method,
|
|
headers: requestHeaders
|
|
};
|
|
beforeRedirect(this._options, responseDetails, requestDetails);
|
|
this._sanitizeOptions(this._options);
|
|
}
|
|
this._performRequest();
|
|
};
|
|
module.exports = wrap({ http, https });
|
|
module.exports.wrap = wrap;
|
|
});
|
|
|
|
// node_modules/entities/lib/generated/decode-data-html.js
|
|
var require_decode_data_html = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.default = new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\uD835\uDD04rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\uD835\uDD38plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\uD835\uDC9Cign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\uD835\uDD05pf;\uC000\uD835\uDD39eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\uD835\uDC9Ep\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\uD835\uDD07\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\uD835\uDD3B\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\uD835\uDC9Frok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\uD835\uDD08rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\uD835\uDD3Csilon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\uD835\uDD09lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\uD835\uDD3DAll;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\uD835\uDD0A;\u62D9pf;\uC000\uD835\uDD3Eeater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\uD835\uDCA2;\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\uD835\uDD40a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\uD835\uDD0Dpf;\uC000\uD835\uDD41\u01E3\u07C7\0\u07CCr;\uC000\uD835\uDCA5rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\uD835\uDD0Epf;\uC000\uD835\uDD42cr;\uC000\uD835\uDCA6\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\uD835\uDD0F\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\uD835\uDD43er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\uD835\uDD10nusPlus;\u6213pf;\uC000\uD835\uDD44c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\uD835\uDD11\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\uD835\uDCA9ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\uD835\uDD12rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\uD835\uDD46enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\uD835\uDCAAash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\uD835\uDD13i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\uD835\uDCAB;\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\uD835\uDD14pf;\u611Acr;\uC000\uD835\uDCAC\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\uD835\uDD16ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\uD835\uDD4A\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\uD835\uDCAEar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\uD835\uDD17\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\uD835\uDD4BipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\uD835\uDCAFrok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\uD835\uDD18rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\uD835\uDD4C\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\uD835\uDCB0ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\uD835\uDD19pf;\uC000\uD835\uDD4Dcr;\uC000\uD835\uDCB1dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\uD835\uDD1Apf;\uC000\uD835\uDD4Ecr;\uC000\uD835\uDCB2\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\uD835\uDD1B;\u439Epf;\uC000\uD835\uDD4Fcr;\uC000\uD835\uDCB3\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\uD835\uDD1Cpf;\uC000\uD835\uDD50cr;\uC000\uD835\uDCB4ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\uD835\uDCB5\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\uD835\uDD1Erave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\uD835\uDD52\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\uD835\uDCB6;\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\uD835\uDD1Fg\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\uD835\uDD53\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\uD835\uDCB7mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\uD835\uDD20\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\uD835\uDD54o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\uD835\uDCB8\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\uD835\uDD21ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\uD835\uDD55\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\uD835\uDCB9;\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\uD835\uDD22\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\uD835\uDD56\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\uD835\uDD23lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\uD835\uDD57\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\uD835\uDCBB\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\uD835\uDD24\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\uD835\uDD58\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\uD835\uDD25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\uD835\uDD59bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\uD835\uDCBDas\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\uD835\uDD26rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\uD835\uDD5Aa;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\uD835\uDCBEn\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\uD835\uDD27ath;\u4237pf;\uC000\uD835\uDD5B\u01E3\u23EC\0\u23F1r;\uC000\uD835\uDCBFrcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\uD835\uDD28reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\uD835\uDD5Ccr;\uC000\uD835\uDCC0\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\uD835\uDD29\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\uD835\uDD5Dus;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\uD835\uDCC1m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\uD835\uDD2Ao;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\uD835\uDD5E\u0100ct\u28F8\u28FDr;\uC000\uD835\uDCC2pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\uD835\uDD2B\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\uD835\uDD5F\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\uD835\uDCC3ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\uD835\uDD2C\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\uD835\uDD60\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\uD835\uDD2D\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\uD835\uDD61nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\uD835\uDCC5;\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\uD835\uDD2Epf;\uC000\uD835\uDD62rime;\u6057cr;\uC000\uD835\uDCC6\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\uD835\uDD2F\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\uD835\uDD63us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\uD835\uDCC7\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\uD835\uDD30\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\uD835\uDD64a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\uD835\uDCC8tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\uD835\uDD31\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\uD835\uDD65rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\uD835\uDCC9;\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\uD835\uDD32rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\uD835\uDD66\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\uD835\uDCCA\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\uD835\uDD33tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\uD835\uDD67ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\uD835\uDCCB\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\uD835\uDD34pf;\uC000\uD835\uDD68\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\uD835\uDCCC\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\uD835\uDD35\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\uD835\uDD69im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\uD835\uDCCD\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\uD835\uDD36cy;\u4457pf;\uC000\uD835\uDD6Acr;\uC000\uD835\uDCCE\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\uD835\uDD37cy;\u4436grarr;\u61DDpf;\uC000\uD835\uDD6Bcr;\uC000\uD835\uDCCF\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(function(c) {
|
|
return c.charCodeAt(0);
|
|
}));
|
|
});
|
|
|
|
// node_modules/entities/lib/generated/decode-data-xml.js
|
|
var require_decode_data_xml = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.default = new Uint16Array("\u0200aglq\t\x15\x18\x1B\u026D\x0F\0\0\x12p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map(function(c) {
|
|
return c.charCodeAt(0);
|
|
}));
|
|
});
|
|
|
|
// node_modules/entities/lib/decode_codepoint.js
|
|
var require_decode_codepoint = __commonJS((exports) => {
|
|
var replaceCodePoint = function(codePoint) {
|
|
var _a2;
|
|
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
|
return 65533;
|
|
}
|
|
return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== undefined ? _a2 : codePoint;
|
|
};
|
|
var decodeCodePoint = function(codePoint) {
|
|
return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));
|
|
};
|
|
var _a;
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.replaceCodePoint = exports.fromCodePoint = undefined;
|
|
var decodeMap = new Map([
|
|
[0, 65533],
|
|
[128, 8364],
|
|
[130, 8218],
|
|
[131, 402],
|
|
[132, 8222],
|
|
[133, 8230],
|
|
[134, 8224],
|
|
[135, 8225],
|
|
[136, 710],
|
|
[137, 8240],
|
|
[138, 352],
|
|
[139, 8249],
|
|
[140, 338],
|
|
[142, 381],
|
|
[145, 8216],
|
|
[146, 8217],
|
|
[147, 8220],
|
|
[148, 8221],
|
|
[149, 8226],
|
|
[150, 8211],
|
|
[151, 8212],
|
|
[152, 732],
|
|
[153, 8482],
|
|
[154, 353],
|
|
[155, 8250],
|
|
[156, 339],
|
|
[158, 382],
|
|
[159, 376]
|
|
]);
|
|
exports.fromCodePoint = (_a = String.fromCodePoint) !== null && _a !== undefined ? _a : function(codePoint) {
|
|
var output = "";
|
|
if (codePoint > 65535) {
|
|
codePoint -= 65536;
|
|
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
|
codePoint = 56320 | codePoint & 1023;
|
|
}
|
|
output += String.fromCharCode(codePoint);
|
|
return output;
|
|
};
|
|
exports.replaceCodePoint = replaceCodePoint;
|
|
exports.default = decodeCodePoint;
|
|
});
|
|
|
|
// node_modules/entities/lib/decode.js
|
|
var require_decode = __commonJS((exports) => {
|
|
var isNumber2 = function(code) {
|
|
return code >= CharCodes.ZERO && code <= CharCodes.NINE;
|
|
};
|
|
var isHexadecimalCharacter = function(code) {
|
|
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
|
|
};
|
|
var isAsciiAlphaNumeric = function(code) {
|
|
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber2(code);
|
|
};
|
|
var isEntityInAttributeInvalidEnd = function(code) {
|
|
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
|
};
|
|
var getDecoder = function(decodeTree) {
|
|
var ret = "";
|
|
var decoder = new EntityDecoder(decodeTree, function(str) {
|
|
return ret += (0, decode_codepoint_js_1.fromCodePoint)(str);
|
|
});
|
|
return function decodeWithTrie(str, decodeMode) {
|
|
var lastIndex = 0;
|
|
var offset = 0;
|
|
while ((offset = str.indexOf("&", offset)) >= 0) {
|
|
ret += str.slice(lastIndex, offset);
|
|
decoder.startEntity(decodeMode);
|
|
var len = decoder.write(str, offset + 1);
|
|
if (len < 0) {
|
|
lastIndex = offset + decoder.end();
|
|
break;
|
|
}
|
|
lastIndex = offset + len;
|
|
offset = len === 0 ? lastIndex + 1 : lastIndex;
|
|
}
|
|
var result = ret + str.slice(lastIndex);
|
|
ret = "";
|
|
return result;
|
|
};
|
|
};
|
|
var determineBranch = function(decodeTree, current, nodeIdx, char) {
|
|
var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
|
|
var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
|
|
if (branchCount === 0) {
|
|
return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
|
|
}
|
|
if (jumpOffset) {
|
|
var value = char - jumpOffset;
|
|
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
|
|
}
|
|
var lo = nodeIdx;
|
|
var hi = lo + branchCount - 1;
|
|
while (lo <= hi) {
|
|
var mid = lo + hi >>> 1;
|
|
var midVal = decodeTree[mid];
|
|
if (midVal < char) {
|
|
lo = mid + 1;
|
|
} else if (midVal > char) {
|
|
hi = mid - 1;
|
|
} else {
|
|
return decodeTree[mid + branchCount];
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
var decodeHTML = function(str, mode) {
|
|
if (mode === undefined) {
|
|
mode = DecodingMode.Legacy;
|
|
}
|
|
return htmlDecoder(str, mode);
|
|
};
|
|
var decodeHTMLAttribute = function(str) {
|
|
return htmlDecoder(str, DecodingMode.Attribute);
|
|
};
|
|
var decodeHTMLStrict = function(str) {
|
|
return htmlDecoder(str, DecodingMode.Strict);
|
|
};
|
|
var decodeXML = function(str) {
|
|
return xmlDecoder(str, DecodingMode.Strict);
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = undefined;
|
|
var decode_data_html_js_1 = __importDefault(require_decode_data_html());
|
|
exports.htmlDecodeTree = decode_data_html_js_1.default;
|
|
var decode_data_xml_js_1 = __importDefault(require_decode_data_xml());
|
|
exports.xmlDecodeTree = decode_data_xml_js_1.default;
|
|
var decode_codepoint_js_1 = __importStar(require_decode_codepoint());
|
|
exports.decodeCodePoint = decode_codepoint_js_1.default;
|
|
var decode_codepoint_js_2 = require_decode_codepoint();
|
|
Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function() {
|
|
return decode_codepoint_js_2.replaceCodePoint;
|
|
} });
|
|
Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function() {
|
|
return decode_codepoint_js_2.fromCodePoint;
|
|
} });
|
|
var CharCodes;
|
|
(function(CharCodes2) {
|
|
CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
|
|
CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
|
|
CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
|
|
CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
|
|
CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
|
|
CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
|
|
CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
|
|
CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
|
|
CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
|
|
CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
|
|
CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
|
|
CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
|
|
})(CharCodes || (CharCodes = {}));
|
|
var TO_LOWER_BIT = 32;
|
|
var BinTrieFlags;
|
|
(function(BinTrieFlags2) {
|
|
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
|
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
|
|
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
|
})(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
|
|
var EntityDecoderState;
|
|
(function(EntityDecoderState2) {
|
|
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
|
|
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
|
|
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
|
|
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
|
|
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
|
|
})(EntityDecoderState || (EntityDecoderState = {}));
|
|
var DecodingMode;
|
|
(function(DecodingMode2) {
|
|
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
|
|
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
|
|
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
|
|
})(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));
|
|
var EntityDecoder = function() {
|
|
function EntityDecoder2(decodeTree, emitCodePoint, errors) {
|
|
this.decodeTree = decodeTree;
|
|
this.emitCodePoint = emitCodePoint;
|
|
this.errors = errors;
|
|
this.state = EntityDecoderState.EntityStart;
|
|
this.consumed = 1;
|
|
this.result = 0;
|
|
this.treeIndex = 0;
|
|
this.excess = 1;
|
|
this.decodeMode = DecodingMode.Strict;
|
|
}
|
|
EntityDecoder2.prototype.startEntity = function(decodeMode) {
|
|
this.decodeMode = decodeMode;
|
|
this.state = EntityDecoderState.EntityStart;
|
|
this.result = 0;
|
|
this.treeIndex = 0;
|
|
this.excess = 1;
|
|
this.consumed = 1;
|
|
};
|
|
EntityDecoder2.prototype.write = function(str, offset) {
|
|
switch (this.state) {
|
|
case EntityDecoderState.EntityStart: {
|
|
if (str.charCodeAt(offset) === CharCodes.NUM) {
|
|
this.state = EntityDecoderState.NumericStart;
|
|
this.consumed += 1;
|
|
return this.stateNumericStart(str, offset + 1);
|
|
}
|
|
this.state = EntityDecoderState.NamedEntity;
|
|
return this.stateNamedEntity(str, offset);
|
|
}
|
|
case EntityDecoderState.NumericStart: {
|
|
return this.stateNumericStart(str, offset);
|
|
}
|
|
case EntityDecoderState.NumericDecimal: {
|
|
return this.stateNumericDecimal(str, offset);
|
|
}
|
|
case EntityDecoderState.NumericHex: {
|
|
return this.stateNumericHex(str, offset);
|
|
}
|
|
case EntityDecoderState.NamedEntity: {
|
|
return this.stateNamedEntity(str, offset);
|
|
}
|
|
}
|
|
};
|
|
EntityDecoder2.prototype.stateNumericStart = function(str, offset) {
|
|
if (offset >= str.length) {
|
|
return -1;
|
|
}
|
|
if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
|
|
this.state = EntityDecoderState.NumericHex;
|
|
this.consumed += 1;
|
|
return this.stateNumericHex(str, offset + 1);
|
|
}
|
|
this.state = EntityDecoderState.NumericDecimal;
|
|
return this.stateNumericDecimal(str, offset);
|
|
};
|
|
EntityDecoder2.prototype.addToNumericResult = function(str, start, end, base) {
|
|
if (start !== end) {
|
|
var digitCount = end - start;
|
|
this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
|
|
this.consumed += digitCount;
|
|
}
|
|
};
|
|
EntityDecoder2.prototype.stateNumericHex = function(str, offset) {
|
|
var startIdx = offset;
|
|
while (offset < str.length) {
|
|
var char = str.charCodeAt(offset);
|
|
if (isNumber2(char) || isHexadecimalCharacter(char)) {
|
|
offset += 1;
|
|
} else {
|
|
this.addToNumericResult(str, startIdx, offset, 16);
|
|
return this.emitNumericEntity(char, 3);
|
|
}
|
|
}
|
|
this.addToNumericResult(str, startIdx, offset, 16);
|
|
return -1;
|
|
};
|
|
EntityDecoder2.prototype.stateNumericDecimal = function(str, offset) {
|
|
var startIdx = offset;
|
|
while (offset < str.length) {
|
|
var char = str.charCodeAt(offset);
|
|
if (isNumber2(char)) {
|
|
offset += 1;
|
|
} else {
|
|
this.addToNumericResult(str, startIdx, offset, 10);
|
|
return this.emitNumericEntity(char, 2);
|
|
}
|
|
}
|
|
this.addToNumericResult(str, startIdx, offset, 10);
|
|
return -1;
|
|
};
|
|
EntityDecoder2.prototype.emitNumericEntity = function(lastCp, expectedLength) {
|
|
var _a;
|
|
if (this.consumed <= expectedLength) {
|
|
(_a = this.errors) === null || _a === undefined || _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
return 0;
|
|
}
|
|
if (lastCp === CharCodes.SEMI) {
|
|
this.consumed += 1;
|
|
} else if (this.decodeMode === DecodingMode.Strict) {
|
|
return 0;
|
|
}
|
|
this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);
|
|
if (this.errors) {
|
|
if (lastCp !== CharCodes.SEMI) {
|
|
this.errors.missingSemicolonAfterCharacterReference();
|
|
}
|
|
this.errors.validateNumericCharacterReference(this.result);
|
|
}
|
|
return this.consumed;
|
|
};
|
|
EntityDecoder2.prototype.stateNamedEntity = function(str, offset) {
|
|
var decodeTree = this.decodeTree;
|
|
var current = decodeTree[this.treeIndex];
|
|
var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
for (;offset < str.length; offset++, this.excess++) {
|
|
var char = str.charCodeAt(offset);
|
|
this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
|
if (this.treeIndex < 0) {
|
|
return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
}
|
|
current = decodeTree[this.treeIndex];
|
|
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
if (valueLength !== 0) {
|
|
if (char === CharCodes.SEMI) {
|
|
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
|
}
|
|
if (this.decodeMode !== DecodingMode.Strict) {
|
|
this.result = this.treeIndex;
|
|
this.consumed += this.excess;
|
|
this.excess = 0;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
EntityDecoder2.prototype.emitNotTerminatedNamedEntity = function() {
|
|
var _a;
|
|
var _b = this, result = _b.result, decodeTree = _b.decodeTree;
|
|
var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
this.emitNamedEntityData(result, valueLength, this.consumed);
|
|
(_a = this.errors) === null || _a === undefined || _a.missingSemicolonAfterCharacterReference();
|
|
return this.consumed;
|
|
};
|
|
EntityDecoder2.prototype.emitNamedEntityData = function(result, valueLength, consumed) {
|
|
var decodeTree = this.decodeTree;
|
|
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);
|
|
if (valueLength === 3) {
|
|
this.emitCodePoint(decodeTree[result + 2], consumed);
|
|
}
|
|
return consumed;
|
|
};
|
|
EntityDecoder2.prototype.end = function() {
|
|
var _a;
|
|
switch (this.state) {
|
|
case EntityDecoderState.NamedEntity: {
|
|
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
}
|
|
case EntityDecoderState.NumericDecimal: {
|
|
return this.emitNumericEntity(0, 2);
|
|
}
|
|
case EntityDecoderState.NumericHex: {
|
|
return this.emitNumericEntity(0, 3);
|
|
}
|
|
case EntityDecoderState.NumericStart: {
|
|
(_a = this.errors) === null || _a === undefined || _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
|
return 0;
|
|
}
|
|
case EntityDecoderState.EntityStart: {
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
return EntityDecoder2;
|
|
}();
|
|
exports.EntityDecoder = EntityDecoder;
|
|
exports.determineBranch = determineBranch;
|
|
var htmlDecoder = getDecoder(decode_data_html_js_1.default);
|
|
var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
|
|
exports.decodeHTML = decodeHTML;
|
|
exports.decodeHTMLAttribute = decodeHTMLAttribute;
|
|
exports.decodeHTMLStrict = decodeHTMLStrict;
|
|
exports.decodeXML = decodeXML;
|
|
});
|
|
|
|
// node_modules/htmlparser2/lib/Tokenizer.js
|
|
var require_Tokenizer = __commonJS((exports) => {
|
|
var isWhitespace = function(c) {
|
|
return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;
|
|
};
|
|
var isEndOfTagSection = function(c) {
|
|
return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
|
|
};
|
|
var isNumber2 = function(c) {
|
|
return c >= CharCodes.Zero && c <= CharCodes.Nine;
|
|
};
|
|
var isASCIIAlpha = function(c) {
|
|
return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;
|
|
};
|
|
var isHexDigit = function(c) {
|
|
return c >= CharCodes.UpperA && c <= CharCodes.UpperF || c >= CharCodes.LowerA && c <= CharCodes.LowerF;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.QuoteType = undefined;
|
|
var decode_js_1 = require_decode();
|
|
var CharCodes;
|
|
(function(CharCodes2) {
|
|
CharCodes2[CharCodes2["Tab"] = 9] = "Tab";
|
|
CharCodes2[CharCodes2["NewLine"] = 10] = "NewLine";
|
|
CharCodes2[CharCodes2["FormFeed"] = 12] = "FormFeed";
|
|
CharCodes2[CharCodes2["CarriageReturn"] = 13] = "CarriageReturn";
|
|
CharCodes2[CharCodes2["Space"] = 32] = "Space";
|
|
CharCodes2[CharCodes2["ExclamationMark"] = 33] = "ExclamationMark";
|
|
CharCodes2[CharCodes2["Number"] = 35] = "Number";
|
|
CharCodes2[CharCodes2["Amp"] = 38] = "Amp";
|
|
CharCodes2[CharCodes2["SingleQuote"] = 39] = "SingleQuote";
|
|
CharCodes2[CharCodes2["DoubleQuote"] = 34] = "DoubleQuote";
|
|
CharCodes2[CharCodes2["Dash"] = 45] = "Dash";
|
|
CharCodes2[CharCodes2["Slash"] = 47] = "Slash";
|
|
CharCodes2[CharCodes2["Zero"] = 48] = "Zero";
|
|
CharCodes2[CharCodes2["Nine"] = 57] = "Nine";
|
|
CharCodes2[CharCodes2["Semi"] = 59] = "Semi";
|
|
CharCodes2[CharCodes2["Lt"] = 60] = "Lt";
|
|
CharCodes2[CharCodes2["Eq"] = 61] = "Eq";
|
|
CharCodes2[CharCodes2["Gt"] = 62] = "Gt";
|
|
CharCodes2[CharCodes2["Questionmark"] = 63] = "Questionmark";
|
|
CharCodes2[CharCodes2["UpperA"] = 65] = "UpperA";
|
|
CharCodes2[CharCodes2["LowerA"] = 97] = "LowerA";
|
|
CharCodes2[CharCodes2["UpperF"] = 70] = "UpperF";
|
|
CharCodes2[CharCodes2["LowerF"] = 102] = "LowerF";
|
|
CharCodes2[CharCodes2["UpperZ"] = 90] = "UpperZ";
|
|
CharCodes2[CharCodes2["LowerZ"] = 122] = "LowerZ";
|
|
CharCodes2[CharCodes2["LowerX"] = 120] = "LowerX";
|
|
CharCodes2[CharCodes2["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
|
|
})(CharCodes || (CharCodes = {}));
|
|
var State;
|
|
(function(State2) {
|
|
State2[State2["Text"] = 1] = "Text";
|
|
State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
|
|
State2[State2["InTagName"] = 3] = "InTagName";
|
|
State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
|
|
State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
|
|
State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
|
|
State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
|
|
State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
|
|
State2[State2["InAttributeName"] = 9] = "InAttributeName";
|
|
State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
|
|
State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
|
|
State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
|
|
State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
|
|
State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
|
|
State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
|
|
State2[State2["InDeclaration"] = 16] = "InDeclaration";
|
|
State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
|
|
State2[State2["BeforeComment"] = 18] = "BeforeComment";
|
|
State2[State2["CDATASequence"] = 19] = "CDATASequence";
|
|
State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
|
|
State2[State2["InCommentLike"] = 21] = "InCommentLike";
|
|
State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
|
|
State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
|
|
State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
|
|
State2[State2["BeforeEntity"] = 25] = "BeforeEntity";
|
|
State2[State2["BeforeNumericEntity"] = 26] = "BeforeNumericEntity";
|
|
State2[State2["InNamedEntity"] = 27] = "InNamedEntity";
|
|
State2[State2["InNumericEntity"] = 28] = "InNumericEntity";
|
|
State2[State2["InHexEntity"] = 29] = "InHexEntity";
|
|
})(State || (State = {}));
|
|
var QuoteType;
|
|
(function(QuoteType2) {
|
|
QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
|
|
QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
|
|
QuoteType2[QuoteType2["Single"] = 2] = "Single";
|
|
QuoteType2[QuoteType2["Double"] = 3] = "Double";
|
|
})(QuoteType = exports.QuoteType || (exports.QuoteType = {}));
|
|
var Sequences = {
|
|
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
|
|
CdataEnd: new Uint8Array([93, 93, 62]),
|
|
CommentEnd: new Uint8Array([45, 45, 62]),
|
|
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
|
|
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
|
|
TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101])
|
|
};
|
|
var Tokenizer = function() {
|
|
function Tokenizer2(_a, cbs) {
|
|
var _b = _a.xmlMode, xmlMode = _b === undefined ? false : _b, _c = _a.decodeEntities, decodeEntities = _c === undefined ? true : _c;
|
|
this.cbs = cbs;
|
|
this.state = State.Text;
|
|
this.buffer = "";
|
|
this.sectionStart = 0;
|
|
this.index = 0;
|
|
this.baseState = State.Text;
|
|
this.isSpecial = false;
|
|
this.running = true;
|
|
this.offset = 0;
|
|
this.currentSequence = undefined;
|
|
this.sequenceIndex = 0;
|
|
this.trieIndex = 0;
|
|
this.trieCurrent = 0;
|
|
this.entityResult = 0;
|
|
this.entityExcess = 0;
|
|
this.xmlMode = xmlMode;
|
|
this.decodeEntities = decodeEntities;
|
|
this.entityTrie = xmlMode ? decode_js_1.xmlDecodeTree : decode_js_1.htmlDecodeTree;
|
|
}
|
|
Tokenizer2.prototype.reset = function() {
|
|
this.state = State.Text;
|
|
this.buffer = "";
|
|
this.sectionStart = 0;
|
|
this.index = 0;
|
|
this.baseState = State.Text;
|
|
this.currentSequence = undefined;
|
|
this.running = true;
|
|
this.offset = 0;
|
|
};
|
|
Tokenizer2.prototype.write = function(chunk) {
|
|
this.offset += this.buffer.length;
|
|
this.buffer = chunk;
|
|
this.parse();
|
|
};
|
|
Tokenizer2.prototype.end = function() {
|
|
if (this.running)
|
|
this.finish();
|
|
};
|
|
Tokenizer2.prototype.pause = function() {
|
|
this.running = false;
|
|
};
|
|
Tokenizer2.prototype.resume = function() {
|
|
this.running = true;
|
|
if (this.index < this.buffer.length + this.offset) {
|
|
this.parse();
|
|
}
|
|
};
|
|
Tokenizer2.prototype.getIndex = function() {
|
|
return this.index;
|
|
};
|
|
Tokenizer2.prototype.getSectionStart = function() {
|
|
return this.sectionStart;
|
|
};
|
|
Tokenizer2.prototype.stateText = function(c) {
|
|
if (c === CharCodes.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes.Lt)) {
|
|
if (this.index > this.sectionStart) {
|
|
this.cbs.ontext(this.sectionStart, this.index);
|
|
}
|
|
this.state = State.BeforeTagName;
|
|
this.sectionStart = this.index;
|
|
} else if (this.decodeEntities && c === CharCodes.Amp) {
|
|
this.state = State.BeforeEntity;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateSpecialStartSequence = function(c) {
|
|
var isEnd = this.sequenceIndex === this.currentSequence.length;
|
|
var isMatch = isEnd ? isEndOfTagSection(c) : (c | 32) === this.currentSequence[this.sequenceIndex];
|
|
if (!isMatch) {
|
|
this.isSpecial = false;
|
|
} else if (!isEnd) {
|
|
this.sequenceIndex++;
|
|
return;
|
|
}
|
|
this.sequenceIndex = 0;
|
|
this.state = State.InTagName;
|
|
this.stateInTagName(c);
|
|
};
|
|
Tokenizer2.prototype.stateInSpecialTag = function(c) {
|
|
if (this.sequenceIndex === this.currentSequence.length) {
|
|
if (c === CharCodes.Gt || isWhitespace(c)) {
|
|
var endOfText = this.index - this.currentSequence.length;
|
|
if (this.sectionStart < endOfText) {
|
|
var actualIndex = this.index;
|
|
this.index = endOfText;
|
|
this.cbs.ontext(this.sectionStart, endOfText);
|
|
this.index = actualIndex;
|
|
}
|
|
this.isSpecial = false;
|
|
this.sectionStart = endOfText + 2;
|
|
this.stateInClosingTagName(c);
|
|
return;
|
|
}
|
|
this.sequenceIndex = 0;
|
|
}
|
|
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
|
|
this.sequenceIndex += 1;
|
|
} else if (this.sequenceIndex === 0) {
|
|
if (this.currentSequence === Sequences.TitleEnd) {
|
|
if (this.decodeEntities && c === CharCodes.Amp) {
|
|
this.state = State.BeforeEntity;
|
|
}
|
|
} else if (this.fastForwardTo(CharCodes.Lt)) {
|
|
this.sequenceIndex = 1;
|
|
}
|
|
} else {
|
|
this.sequenceIndex = Number(c === CharCodes.Lt);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateCDATASequence = function(c) {
|
|
if (c === Sequences.Cdata[this.sequenceIndex]) {
|
|
if (++this.sequenceIndex === Sequences.Cdata.length) {
|
|
this.state = State.InCommentLike;
|
|
this.currentSequence = Sequences.CdataEnd;
|
|
this.sequenceIndex = 0;
|
|
this.sectionStart = this.index + 1;
|
|
}
|
|
} else {
|
|
this.sequenceIndex = 0;
|
|
this.state = State.InDeclaration;
|
|
this.stateInDeclaration(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.fastForwardTo = function(c) {
|
|
while (++this.index < this.buffer.length + this.offset) {
|
|
if (this.buffer.charCodeAt(this.index - this.offset) === c) {
|
|
return true;
|
|
}
|
|
}
|
|
this.index = this.buffer.length + this.offset - 1;
|
|
return false;
|
|
};
|
|
Tokenizer2.prototype.stateInCommentLike = function(c) {
|
|
if (c === this.currentSequence[this.sequenceIndex]) {
|
|
if (++this.sequenceIndex === this.currentSequence.length) {
|
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
this.cbs.oncdata(this.sectionStart, this.index, 2);
|
|
} else {
|
|
this.cbs.oncomment(this.sectionStart, this.index, 2);
|
|
}
|
|
this.sequenceIndex = 0;
|
|
this.sectionStart = this.index + 1;
|
|
this.state = State.Text;
|
|
}
|
|
} else if (this.sequenceIndex === 0) {
|
|
if (this.fastForwardTo(this.currentSequence[0])) {
|
|
this.sequenceIndex = 1;
|
|
}
|
|
} else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
|
|
this.sequenceIndex = 0;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.isTagStartChar = function(c) {
|
|
return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
|
|
};
|
|
Tokenizer2.prototype.startSpecial = function(sequence, offset) {
|
|
this.isSpecial = true;
|
|
this.currentSequence = sequence;
|
|
this.sequenceIndex = offset;
|
|
this.state = State.SpecialStartSequence;
|
|
};
|
|
Tokenizer2.prototype.stateBeforeTagName = function(c) {
|
|
if (c === CharCodes.ExclamationMark) {
|
|
this.state = State.BeforeDeclaration;
|
|
this.sectionStart = this.index + 1;
|
|
} else if (c === CharCodes.Questionmark) {
|
|
this.state = State.InProcessingInstruction;
|
|
this.sectionStart = this.index + 1;
|
|
} else if (this.isTagStartChar(c)) {
|
|
var lower = c | 32;
|
|
this.sectionStart = this.index;
|
|
if (!this.xmlMode && lower === Sequences.TitleEnd[2]) {
|
|
this.startSpecial(Sequences.TitleEnd, 3);
|
|
} else {
|
|
this.state = !this.xmlMode && lower === Sequences.ScriptEnd[2] ? State.BeforeSpecialS : State.InTagName;
|
|
}
|
|
} else if (c === CharCodes.Slash) {
|
|
this.state = State.BeforeClosingTagName;
|
|
} else {
|
|
this.state = State.Text;
|
|
this.stateText(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInTagName = function(c) {
|
|
if (isEndOfTagSection(c)) {
|
|
this.cbs.onopentagname(this.sectionStart, this.index);
|
|
this.sectionStart = -1;
|
|
this.state = State.BeforeAttributeName;
|
|
this.stateBeforeAttributeName(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeClosingTagName = function(c) {
|
|
if (isWhitespace(c)) {
|
|
} else if (c === CharCodes.Gt) {
|
|
this.state = State.Text;
|
|
} else {
|
|
this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
|
|
this.sectionStart = this.index;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInClosingTagName = function(c) {
|
|
if (c === CharCodes.Gt || isWhitespace(c)) {
|
|
this.cbs.onclosetag(this.sectionStart, this.index);
|
|
this.sectionStart = -1;
|
|
this.state = State.AfterClosingTagName;
|
|
this.stateAfterClosingTagName(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateAfterClosingTagName = function(c) {
|
|
if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
|
|
this.state = State.Text;
|
|
this.baseState = State.Text;
|
|
this.sectionStart = this.index + 1;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeAttributeName = function(c) {
|
|
if (c === CharCodes.Gt) {
|
|
this.cbs.onopentagend(this.index);
|
|
if (this.isSpecial) {
|
|
this.state = State.InSpecialTag;
|
|
this.sequenceIndex = 0;
|
|
} else {
|
|
this.state = State.Text;
|
|
}
|
|
this.baseState = this.state;
|
|
this.sectionStart = this.index + 1;
|
|
} else if (c === CharCodes.Slash) {
|
|
this.state = State.InSelfClosingTag;
|
|
} else if (!isWhitespace(c)) {
|
|
this.state = State.InAttributeName;
|
|
this.sectionStart = this.index;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInSelfClosingTag = function(c) {
|
|
if (c === CharCodes.Gt) {
|
|
this.cbs.onselfclosingtag(this.index);
|
|
this.state = State.Text;
|
|
this.baseState = State.Text;
|
|
this.sectionStart = this.index + 1;
|
|
this.isSpecial = false;
|
|
} else if (!isWhitespace(c)) {
|
|
this.state = State.BeforeAttributeName;
|
|
this.stateBeforeAttributeName(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInAttributeName = function(c) {
|
|
if (c === CharCodes.Eq || isEndOfTagSection(c)) {
|
|
this.cbs.onattribname(this.sectionStart, this.index);
|
|
this.sectionStart = -1;
|
|
this.state = State.AfterAttributeName;
|
|
this.stateAfterAttributeName(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateAfterAttributeName = function(c) {
|
|
if (c === CharCodes.Eq) {
|
|
this.state = State.BeforeAttributeValue;
|
|
} else if (c === CharCodes.Slash || c === CharCodes.Gt) {
|
|
this.cbs.onattribend(QuoteType.NoValue, this.index);
|
|
this.state = State.BeforeAttributeName;
|
|
this.stateBeforeAttributeName(c);
|
|
} else if (!isWhitespace(c)) {
|
|
this.cbs.onattribend(QuoteType.NoValue, this.index);
|
|
this.state = State.InAttributeName;
|
|
this.sectionStart = this.index;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeAttributeValue = function(c) {
|
|
if (c === CharCodes.DoubleQuote) {
|
|
this.state = State.InAttributeValueDq;
|
|
this.sectionStart = this.index + 1;
|
|
} else if (c === CharCodes.SingleQuote) {
|
|
this.state = State.InAttributeValueSq;
|
|
this.sectionStart = this.index + 1;
|
|
} else if (!isWhitespace(c)) {
|
|
this.sectionStart = this.index;
|
|
this.state = State.InAttributeValueNq;
|
|
this.stateInAttributeValueNoQuotes(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.handleInAttributeValue = function(c, quote) {
|
|
if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
|
|
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
this.sectionStart = -1;
|
|
this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index);
|
|
this.state = State.BeforeAttributeName;
|
|
} else if (this.decodeEntities && c === CharCodes.Amp) {
|
|
this.baseState = this.state;
|
|
this.state = State.BeforeEntity;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInAttributeValueDoubleQuotes = function(c) {
|
|
this.handleInAttributeValue(c, CharCodes.DoubleQuote);
|
|
};
|
|
Tokenizer2.prototype.stateInAttributeValueSingleQuotes = function(c) {
|
|
this.handleInAttributeValue(c, CharCodes.SingleQuote);
|
|
};
|
|
Tokenizer2.prototype.stateInAttributeValueNoQuotes = function(c) {
|
|
if (isWhitespace(c) || c === CharCodes.Gt) {
|
|
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
this.sectionStart = -1;
|
|
this.cbs.onattribend(QuoteType.Unquoted, this.index);
|
|
this.state = State.BeforeAttributeName;
|
|
this.stateBeforeAttributeName(c);
|
|
} else if (this.decodeEntities && c === CharCodes.Amp) {
|
|
this.baseState = this.state;
|
|
this.state = State.BeforeEntity;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeDeclaration = function(c) {
|
|
if (c === CharCodes.OpeningSquareBracket) {
|
|
this.state = State.CDATASequence;
|
|
this.sequenceIndex = 0;
|
|
} else {
|
|
this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInDeclaration = function(c) {
|
|
if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
|
|
this.cbs.ondeclaration(this.sectionStart, this.index);
|
|
this.state = State.Text;
|
|
this.sectionStart = this.index + 1;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInProcessingInstruction = function(c) {
|
|
if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
|
|
this.cbs.onprocessinginstruction(this.sectionStart, this.index);
|
|
this.state = State.Text;
|
|
this.sectionStart = this.index + 1;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeComment = function(c) {
|
|
if (c === CharCodes.Dash) {
|
|
this.state = State.InCommentLike;
|
|
this.currentSequence = Sequences.CommentEnd;
|
|
this.sequenceIndex = 2;
|
|
this.sectionStart = this.index + 1;
|
|
} else {
|
|
this.state = State.InDeclaration;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInSpecialComment = function(c) {
|
|
if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
|
|
this.cbs.oncomment(this.sectionStart, this.index, 0);
|
|
this.state = State.Text;
|
|
this.sectionStart = this.index + 1;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeSpecialS = function(c) {
|
|
var lower = c | 32;
|
|
if (lower === Sequences.ScriptEnd[3]) {
|
|
this.startSpecial(Sequences.ScriptEnd, 4);
|
|
} else if (lower === Sequences.StyleEnd[3]) {
|
|
this.startSpecial(Sequences.StyleEnd, 4);
|
|
} else {
|
|
this.state = State.InTagName;
|
|
this.stateInTagName(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeEntity = function(c) {
|
|
this.entityExcess = 1;
|
|
this.entityResult = 0;
|
|
if (c === CharCodes.Number) {
|
|
this.state = State.BeforeNumericEntity;
|
|
} else if (c === CharCodes.Amp) {
|
|
} else {
|
|
this.trieIndex = 0;
|
|
this.trieCurrent = this.entityTrie[0];
|
|
this.state = State.InNamedEntity;
|
|
this.stateInNamedEntity(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInNamedEntity = function(c) {
|
|
this.entityExcess += 1;
|
|
this.trieIndex = (0, decode_js_1.determineBranch)(this.entityTrie, this.trieCurrent, this.trieIndex + 1, c);
|
|
if (this.trieIndex < 0) {
|
|
this.emitNamedEntity();
|
|
this.index--;
|
|
return;
|
|
}
|
|
this.trieCurrent = this.entityTrie[this.trieIndex];
|
|
var masked = this.trieCurrent & decode_js_1.BinTrieFlags.VALUE_LENGTH;
|
|
if (masked) {
|
|
var valueLength = (masked >> 14) - 1;
|
|
if (!this.allowLegacyEntity() && c !== CharCodes.Semi) {
|
|
this.trieIndex += valueLength;
|
|
} else {
|
|
var entityStart = this.index - this.entityExcess + 1;
|
|
if (entityStart > this.sectionStart) {
|
|
this.emitPartial(this.sectionStart, entityStart);
|
|
}
|
|
this.entityResult = this.trieIndex;
|
|
this.trieIndex += valueLength;
|
|
this.entityExcess = 0;
|
|
this.sectionStart = this.index + 1;
|
|
if (valueLength === 0) {
|
|
this.emitNamedEntity();
|
|
}
|
|
}
|
|
}
|
|
};
|
|
Tokenizer2.prototype.emitNamedEntity = function() {
|
|
this.state = this.baseState;
|
|
if (this.entityResult === 0) {
|
|
return;
|
|
}
|
|
var valueLength = (this.entityTrie[this.entityResult] & decode_js_1.BinTrieFlags.VALUE_LENGTH) >> 14;
|
|
switch (valueLength) {
|
|
case 1: {
|
|
this.emitCodePoint(this.entityTrie[this.entityResult] & ~decode_js_1.BinTrieFlags.VALUE_LENGTH);
|
|
break;
|
|
}
|
|
case 2: {
|
|
this.emitCodePoint(this.entityTrie[this.entityResult + 1]);
|
|
break;
|
|
}
|
|
case 3: {
|
|
this.emitCodePoint(this.entityTrie[this.entityResult + 1]);
|
|
this.emitCodePoint(this.entityTrie[this.entityResult + 2]);
|
|
}
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateBeforeNumericEntity = function(c) {
|
|
if ((c | 32) === CharCodes.LowerX) {
|
|
this.entityExcess++;
|
|
this.state = State.InHexEntity;
|
|
} else {
|
|
this.state = State.InNumericEntity;
|
|
this.stateInNumericEntity(c);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.emitNumericEntity = function(strict) {
|
|
var entityStart = this.index - this.entityExcess - 1;
|
|
var numberStart = entityStart + 2 + Number(this.state === State.InHexEntity);
|
|
if (numberStart !== this.index) {
|
|
if (entityStart > this.sectionStart) {
|
|
this.emitPartial(this.sectionStart, entityStart);
|
|
}
|
|
this.sectionStart = this.index + Number(strict);
|
|
this.emitCodePoint((0, decode_js_1.replaceCodePoint)(this.entityResult));
|
|
}
|
|
this.state = this.baseState;
|
|
};
|
|
Tokenizer2.prototype.stateInNumericEntity = function(c) {
|
|
if (c === CharCodes.Semi) {
|
|
this.emitNumericEntity(true);
|
|
} else if (isNumber2(c)) {
|
|
this.entityResult = this.entityResult * 10 + (c - CharCodes.Zero);
|
|
this.entityExcess++;
|
|
} else {
|
|
if (this.allowLegacyEntity()) {
|
|
this.emitNumericEntity(false);
|
|
} else {
|
|
this.state = this.baseState;
|
|
}
|
|
this.index--;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.stateInHexEntity = function(c) {
|
|
if (c === CharCodes.Semi) {
|
|
this.emitNumericEntity(true);
|
|
} else if (isNumber2(c)) {
|
|
this.entityResult = this.entityResult * 16 + (c - CharCodes.Zero);
|
|
this.entityExcess++;
|
|
} else if (isHexDigit(c)) {
|
|
this.entityResult = this.entityResult * 16 + ((c | 32) - CharCodes.LowerA + 10);
|
|
this.entityExcess++;
|
|
} else {
|
|
if (this.allowLegacyEntity()) {
|
|
this.emitNumericEntity(false);
|
|
} else {
|
|
this.state = this.baseState;
|
|
}
|
|
this.index--;
|
|
}
|
|
};
|
|
Tokenizer2.prototype.allowLegacyEntity = function() {
|
|
return !this.xmlMode && (this.baseState === State.Text || this.baseState === State.InSpecialTag);
|
|
};
|
|
Tokenizer2.prototype.cleanup = function() {
|
|
if (this.running && this.sectionStart !== this.index) {
|
|
if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
|
|
this.cbs.ontext(this.sectionStart, this.index);
|
|
this.sectionStart = this.index;
|
|
} else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
|
|
this.cbs.onattribdata(this.sectionStart, this.index);
|
|
this.sectionStart = this.index;
|
|
}
|
|
}
|
|
};
|
|
Tokenizer2.prototype.shouldContinue = function() {
|
|
return this.index < this.buffer.length + this.offset && this.running;
|
|
};
|
|
Tokenizer2.prototype.parse = function() {
|
|
while (this.shouldContinue()) {
|
|
var c = this.buffer.charCodeAt(this.index - this.offset);
|
|
switch (this.state) {
|
|
case State.Text: {
|
|
this.stateText(c);
|
|
break;
|
|
}
|
|
case State.SpecialStartSequence: {
|
|
this.stateSpecialStartSequence(c);
|
|
break;
|
|
}
|
|
case State.InSpecialTag: {
|
|
this.stateInSpecialTag(c);
|
|
break;
|
|
}
|
|
case State.CDATASequence: {
|
|
this.stateCDATASequence(c);
|
|
break;
|
|
}
|
|
case State.InAttributeValueDq: {
|
|
this.stateInAttributeValueDoubleQuotes(c);
|
|
break;
|
|
}
|
|
case State.InAttributeName: {
|
|
this.stateInAttributeName(c);
|
|
break;
|
|
}
|
|
case State.InCommentLike: {
|
|
this.stateInCommentLike(c);
|
|
break;
|
|
}
|
|
case State.InSpecialComment: {
|
|
this.stateInSpecialComment(c);
|
|
break;
|
|
}
|
|
case State.BeforeAttributeName: {
|
|
this.stateBeforeAttributeName(c);
|
|
break;
|
|
}
|
|
case State.InTagName: {
|
|
this.stateInTagName(c);
|
|
break;
|
|
}
|
|
case State.InClosingTagName: {
|
|
this.stateInClosingTagName(c);
|
|
break;
|
|
}
|
|
case State.BeforeTagName: {
|
|
this.stateBeforeTagName(c);
|
|
break;
|
|
}
|
|
case State.AfterAttributeName: {
|
|
this.stateAfterAttributeName(c);
|
|
break;
|
|
}
|
|
case State.InAttributeValueSq: {
|
|
this.stateInAttributeValueSingleQuotes(c);
|
|
break;
|
|
}
|
|
case State.BeforeAttributeValue: {
|
|
this.stateBeforeAttributeValue(c);
|
|
break;
|
|
}
|
|
case State.BeforeClosingTagName: {
|
|
this.stateBeforeClosingTagName(c);
|
|
break;
|
|
}
|
|
case State.AfterClosingTagName: {
|
|
this.stateAfterClosingTagName(c);
|
|
break;
|
|
}
|
|
case State.BeforeSpecialS: {
|
|
this.stateBeforeSpecialS(c);
|
|
break;
|
|
}
|
|
case State.InAttributeValueNq: {
|
|
this.stateInAttributeValueNoQuotes(c);
|
|
break;
|
|
}
|
|
case State.InSelfClosingTag: {
|
|
this.stateInSelfClosingTag(c);
|
|
break;
|
|
}
|
|
case State.InDeclaration: {
|
|
this.stateInDeclaration(c);
|
|
break;
|
|
}
|
|
case State.BeforeDeclaration: {
|
|
this.stateBeforeDeclaration(c);
|
|
break;
|
|
}
|
|
case State.BeforeComment: {
|
|
this.stateBeforeComment(c);
|
|
break;
|
|
}
|
|
case State.InProcessingInstruction: {
|
|
this.stateInProcessingInstruction(c);
|
|
break;
|
|
}
|
|
case State.InNamedEntity: {
|
|
this.stateInNamedEntity(c);
|
|
break;
|
|
}
|
|
case State.BeforeEntity: {
|
|
this.stateBeforeEntity(c);
|
|
break;
|
|
}
|
|
case State.InHexEntity: {
|
|
this.stateInHexEntity(c);
|
|
break;
|
|
}
|
|
case State.InNumericEntity: {
|
|
this.stateInNumericEntity(c);
|
|
break;
|
|
}
|
|
default: {
|
|
this.stateBeforeNumericEntity(c);
|
|
}
|
|
}
|
|
this.index++;
|
|
}
|
|
this.cleanup();
|
|
};
|
|
Tokenizer2.prototype.finish = function() {
|
|
if (this.state === State.InNamedEntity) {
|
|
this.emitNamedEntity();
|
|
}
|
|
if (this.sectionStart < this.index) {
|
|
this.handleTrailingData();
|
|
}
|
|
this.cbs.onend();
|
|
};
|
|
Tokenizer2.prototype.handleTrailingData = function() {
|
|
var endIndex = this.buffer.length + this.offset;
|
|
if (this.state === State.InCommentLike) {
|
|
if (this.currentSequence === Sequences.CdataEnd) {
|
|
this.cbs.oncdata(this.sectionStart, endIndex, 0);
|
|
} else {
|
|
this.cbs.oncomment(this.sectionStart, endIndex, 0);
|
|
}
|
|
} else if (this.state === State.InNumericEntity && this.allowLegacyEntity()) {
|
|
this.emitNumericEntity(false);
|
|
} else if (this.state === State.InHexEntity && this.allowLegacyEntity()) {
|
|
this.emitNumericEntity(false);
|
|
} else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) {
|
|
} else {
|
|
this.cbs.ontext(this.sectionStart, endIndex);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.emitPartial = function(start, endIndex) {
|
|
if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
|
|
this.cbs.onattribdata(start, endIndex);
|
|
} else {
|
|
this.cbs.ontext(start, endIndex);
|
|
}
|
|
};
|
|
Tokenizer2.prototype.emitCodePoint = function(cp) {
|
|
if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
|
|
this.cbs.onattribentity(cp);
|
|
} else {
|
|
this.cbs.ontextentity(cp);
|
|
}
|
|
};
|
|
return Tokenizer2;
|
|
}();
|
|
exports.default = Tokenizer;
|
|
});
|
|
|
|
// node_modules/htmlparser2/lib/Parser.js
|
|
var require_Parser = __commonJS((exports) => {
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.Parser = undefined;
|
|
var Tokenizer_js_1 = __importStar(require_Tokenizer());
|
|
var decode_js_1 = require_decode();
|
|
var formTags = new Set([
|
|
"input",
|
|
"option",
|
|
"optgroup",
|
|
"select",
|
|
"button",
|
|
"datalist",
|
|
"textarea"
|
|
]);
|
|
var pTag = new Set(["p"]);
|
|
var tableSectionTags = new Set(["thead", "tbody"]);
|
|
var ddtTags = new Set(["dd", "dt"]);
|
|
var rtpTags = new Set(["rt", "rp"]);
|
|
var openImpliesClose = new Map([
|
|
["tr", new Set(["tr", "th", "td"])],
|
|
["th", new Set(["th"])],
|
|
["td", new Set(["thead", "th", "td"])],
|
|
["body", new Set(["head", "link", "script"])],
|
|
["li", new Set(["li"])],
|
|
["p", pTag],
|
|
["h1", pTag],
|
|
["h2", pTag],
|
|
["h3", pTag],
|
|
["h4", pTag],
|
|
["h5", pTag],
|
|
["h6", pTag],
|
|
["select", formTags],
|
|
["input", formTags],
|
|
["output", formTags],
|
|
["button", formTags],
|
|
["datalist", formTags],
|
|
["textarea", formTags],
|
|
["option", new Set(["option"])],
|
|
["optgroup", new Set(["optgroup", "option"])],
|
|
["dd", ddtTags],
|
|
["dt", ddtTags],
|
|
["address", pTag],
|
|
["article", pTag],
|
|
["aside", pTag],
|
|
["blockquote", pTag],
|
|
["details", pTag],
|
|
["div", pTag],
|
|
["dl", pTag],
|
|
["fieldset", pTag],
|
|
["figcaption", pTag],
|
|
["figure", pTag],
|
|
["footer", pTag],
|
|
["form", pTag],
|
|
["header", pTag],
|
|
["hr", pTag],
|
|
["main", pTag],
|
|
["nav", pTag],
|
|
["ol", pTag],
|
|
["pre", pTag],
|
|
["section", pTag],
|
|
["table", pTag],
|
|
["ul", pTag],
|
|
["rt", rtpTags],
|
|
["rp", rtpTags],
|
|
["tbody", tableSectionTags],
|
|
["tfoot", tableSectionTags]
|
|
]);
|
|
var voidElements = new Set([
|
|
"area",
|
|
"base",
|
|
"basefont",
|
|
"br",
|
|
"col",
|
|
"command",
|
|
"embed",
|
|
"frame",
|
|
"hr",
|
|
"img",
|
|
"input",
|
|
"isindex",
|
|
"keygen",
|
|
"link",
|
|
"meta",
|
|
"param",
|
|
"source",
|
|
"track",
|
|
"wbr"
|
|
]);
|
|
var foreignContextElements = new Set(["math", "svg"]);
|
|
var htmlIntegrationElements = new Set([
|
|
"mi",
|
|
"mo",
|
|
"mn",
|
|
"ms",
|
|
"mtext",
|
|
"annotation-xml",
|
|
"foreignobject",
|
|
"desc",
|
|
"title"
|
|
]);
|
|
var reNameEnd = /\s|\//;
|
|
var Parser = function() {
|
|
function Parser2(cbs, options) {
|
|
if (options === undefined) {
|
|
options = {};
|
|
}
|
|
var _a, _b, _c, _d, _e;
|
|
this.options = options;
|
|
this.startIndex = 0;
|
|
this.endIndex = 0;
|
|
this.openTagStart = 0;
|
|
this.tagname = "";
|
|
this.attribname = "";
|
|
this.attribvalue = "";
|
|
this.attribs = null;
|
|
this.stack = [];
|
|
this.foreignContext = [];
|
|
this.buffers = [];
|
|
this.bufferOffset = 0;
|
|
this.writeIndex = 0;
|
|
this.ended = false;
|
|
this.cbs = cbs !== null && cbs !== undefined ? cbs : {};
|
|
this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== undefined ? _a : !options.xmlMode;
|
|
this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== undefined ? _b : !options.xmlMode;
|
|
this.tokenizer = new ((_c = options.Tokenizer) !== null && _c !== undefined ? _c : Tokenizer_js_1.default)(this.options, this);
|
|
(_e = (_d = this.cbs).onparserinit) === null || _e === undefined || _e.call(_d, this);
|
|
}
|
|
Parser2.prototype.ontext = function(start, endIndex) {
|
|
var _a, _b;
|
|
var data4 = this.getSlice(start, endIndex);
|
|
this.endIndex = endIndex - 1;
|
|
(_b = (_a = this.cbs).ontext) === null || _b === undefined || _b.call(_a, data4);
|
|
this.startIndex = endIndex;
|
|
};
|
|
Parser2.prototype.ontextentity = function(cp) {
|
|
var _a, _b;
|
|
var index = this.tokenizer.getSectionStart();
|
|
this.endIndex = index - 1;
|
|
(_b = (_a = this.cbs).ontext) === null || _b === undefined || _b.call(_a, (0, decode_js_1.fromCodePoint)(cp));
|
|
this.startIndex = index;
|
|
};
|
|
Parser2.prototype.isVoidElement = function(name) {
|
|
return !this.options.xmlMode && voidElements.has(name);
|
|
};
|
|
Parser2.prototype.onopentagname = function(start, endIndex) {
|
|
this.endIndex = endIndex;
|
|
var name = this.getSlice(start, endIndex);
|
|
if (this.lowerCaseTagNames) {
|
|
name = name.toLowerCase();
|
|
}
|
|
this.emitOpenTag(name);
|
|
};
|
|
Parser2.prototype.emitOpenTag = function(name) {
|
|
var _a, _b, _c, _d;
|
|
this.openTagStart = this.startIndex;
|
|
this.tagname = name;
|
|
var impliesClose = !this.options.xmlMode && openImpliesClose.get(name);
|
|
if (impliesClose) {
|
|
while (this.stack.length > 0 && impliesClose.has(this.stack[this.stack.length - 1])) {
|
|
var element = this.stack.pop();
|
|
(_b = (_a = this.cbs).onclosetag) === null || _b === undefined || _b.call(_a, element, true);
|
|
}
|
|
}
|
|
if (!this.isVoidElement(name)) {
|
|
this.stack.push(name);
|
|
if (foreignContextElements.has(name)) {
|
|
this.foreignContext.push(true);
|
|
} else if (htmlIntegrationElements.has(name)) {
|
|
this.foreignContext.push(false);
|
|
}
|
|
}
|
|
(_d = (_c = this.cbs).onopentagname) === null || _d === undefined || _d.call(_c, name);
|
|
if (this.cbs.onopentag)
|
|
this.attribs = {};
|
|
};
|
|
Parser2.prototype.endOpenTag = function(isImplied) {
|
|
var _a, _b;
|
|
this.startIndex = this.openTagStart;
|
|
if (this.attribs) {
|
|
(_b = (_a = this.cbs).onopentag) === null || _b === undefined || _b.call(_a, this.tagname, this.attribs, isImplied);
|
|
this.attribs = null;
|
|
}
|
|
if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
|
|
this.cbs.onclosetag(this.tagname, true);
|
|
}
|
|
this.tagname = "";
|
|
};
|
|
Parser2.prototype.onopentagend = function(endIndex) {
|
|
this.endIndex = endIndex;
|
|
this.endOpenTag(false);
|
|
this.startIndex = endIndex + 1;
|
|
};
|
|
Parser2.prototype.onclosetag = function(start, endIndex) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
this.endIndex = endIndex;
|
|
var name = this.getSlice(start, endIndex);
|
|
if (this.lowerCaseTagNames) {
|
|
name = name.toLowerCase();
|
|
}
|
|
if (foreignContextElements.has(name) || htmlIntegrationElements.has(name)) {
|
|
this.foreignContext.pop();
|
|
}
|
|
if (!this.isVoidElement(name)) {
|
|
var pos = this.stack.lastIndexOf(name);
|
|
if (pos !== -1) {
|
|
if (this.cbs.onclosetag) {
|
|
var count = this.stack.length - pos;
|
|
while (count--) {
|
|
this.cbs.onclosetag(this.stack.pop(), count !== 0);
|
|
}
|
|
} else
|
|
this.stack.length = pos;
|
|
} else if (!this.options.xmlMode && name === "p") {
|
|
this.emitOpenTag("p");
|
|
this.closeCurrentTag(true);
|
|
}
|
|
} else if (!this.options.xmlMode && name === "br") {
|
|
(_b = (_a = this.cbs).onopentagname) === null || _b === undefined || _b.call(_a, "br");
|
|
(_d = (_c = this.cbs).onopentag) === null || _d === undefined || _d.call(_c, "br", {}, true);
|
|
(_f = (_e = this.cbs).onclosetag) === null || _f === undefined || _f.call(_e, "br", false);
|
|
}
|
|
this.startIndex = endIndex + 1;
|
|
};
|
|
Parser2.prototype.onselfclosingtag = function(endIndex) {
|
|
this.endIndex = endIndex;
|
|
if (this.options.xmlMode || this.options.recognizeSelfClosing || this.foreignContext[this.foreignContext.length - 1]) {
|
|
this.closeCurrentTag(false);
|
|
this.startIndex = endIndex + 1;
|
|
} else {
|
|
this.onopentagend(endIndex);
|
|
}
|
|
};
|
|
Parser2.prototype.closeCurrentTag = function(isOpenImplied) {
|
|
var _a, _b;
|
|
var name = this.tagname;
|
|
this.endOpenTag(isOpenImplied);
|
|
if (this.stack[this.stack.length - 1] === name) {
|
|
(_b = (_a = this.cbs).onclosetag) === null || _b === undefined || _b.call(_a, name, !isOpenImplied);
|
|
this.stack.pop();
|
|
}
|
|
};
|
|
Parser2.prototype.onattribname = function(start, endIndex) {
|
|
this.startIndex = start;
|
|
var name = this.getSlice(start, endIndex);
|
|
this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
|
|
};
|
|
Parser2.prototype.onattribdata = function(start, endIndex) {
|
|
this.attribvalue += this.getSlice(start, endIndex);
|
|
};
|
|
Parser2.prototype.onattribentity = function(cp) {
|
|
this.attribvalue += (0, decode_js_1.fromCodePoint)(cp);
|
|
};
|
|
Parser2.prototype.onattribend = function(quote, endIndex) {
|
|
var _a, _b;
|
|
this.endIndex = endIndex;
|
|
(_b = (_a = this.cbs).onattribute) === null || _b === undefined || _b.call(_a, this.attribname, this.attribvalue, quote === Tokenizer_js_1.QuoteType.Double ? '"' : quote === Tokenizer_js_1.QuoteType.Single ? "'" : quote === Tokenizer_js_1.QuoteType.NoValue ? undefined : null);
|
|
if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
|
|
this.attribs[this.attribname] = this.attribvalue;
|
|
}
|
|
this.attribvalue = "";
|
|
};
|
|
Parser2.prototype.getInstructionName = function(value) {
|
|
var index = value.search(reNameEnd);
|
|
var name = index < 0 ? value : value.substr(0, index);
|
|
if (this.lowerCaseTagNames) {
|
|
name = name.toLowerCase();
|
|
}
|
|
return name;
|
|
};
|
|
Parser2.prototype.ondeclaration = function(start, endIndex) {
|
|
this.endIndex = endIndex;
|
|
var value = this.getSlice(start, endIndex);
|
|
if (this.cbs.onprocessinginstruction) {
|
|
var name = this.getInstructionName(value);
|
|
this.cbs.onprocessinginstruction("!".concat(name), "!".concat(value));
|
|
}
|
|
this.startIndex = endIndex + 1;
|
|
};
|
|
Parser2.prototype.onprocessinginstruction = function(start, endIndex) {
|
|
this.endIndex = endIndex;
|
|
var value = this.getSlice(start, endIndex);
|
|
if (this.cbs.onprocessinginstruction) {
|
|
var name = this.getInstructionName(value);
|
|
this.cbs.onprocessinginstruction("?".concat(name), "?".concat(value));
|
|
}
|
|
this.startIndex = endIndex + 1;
|
|
};
|
|
Parser2.prototype.oncomment = function(start, endIndex, offset) {
|
|
var _a, _b, _c, _d;
|
|
this.endIndex = endIndex;
|
|
(_b = (_a = this.cbs).oncomment) === null || _b === undefined || _b.call(_a, this.getSlice(start, endIndex - offset));
|
|
(_d = (_c = this.cbs).oncommentend) === null || _d === undefined || _d.call(_c);
|
|
this.startIndex = endIndex + 1;
|
|
};
|
|
Parser2.prototype.oncdata = function(start, endIndex, offset) {
|
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
this.endIndex = endIndex;
|
|
var value = this.getSlice(start, endIndex - offset);
|
|
if (this.options.xmlMode || this.options.recognizeCDATA) {
|
|
(_b = (_a = this.cbs).oncdatastart) === null || _b === undefined || _b.call(_a);
|
|
(_d = (_c = this.cbs).ontext) === null || _d === undefined || _d.call(_c, value);
|
|
(_f = (_e = this.cbs).oncdataend) === null || _f === undefined || _f.call(_e);
|
|
} else {
|
|
(_h = (_g = this.cbs).oncomment) === null || _h === undefined || _h.call(_g, "[CDATA[".concat(value, "]]"));
|
|
(_k = (_j = this.cbs).oncommentend) === null || _k === undefined || _k.call(_j);
|
|
}
|
|
this.startIndex = endIndex + 1;
|
|
};
|
|
Parser2.prototype.onend = function() {
|
|
var _a, _b;
|
|
if (this.cbs.onclosetag) {
|
|
this.endIndex = this.startIndex;
|
|
for (var index = this.stack.length;index > 0; this.cbs.onclosetag(this.stack[--index], true))
|
|
;
|
|
}
|
|
(_b = (_a = this.cbs).onend) === null || _b === undefined || _b.call(_a);
|
|
};
|
|
Parser2.prototype.reset = function() {
|
|
var _a, _b, _c, _d;
|
|
(_b = (_a = this.cbs).onreset) === null || _b === undefined || _b.call(_a);
|
|
this.tokenizer.reset();
|
|
this.tagname = "";
|
|
this.attribname = "";
|
|
this.attribs = null;
|
|
this.stack.length = 0;
|
|
this.startIndex = 0;
|
|
this.endIndex = 0;
|
|
(_d = (_c = this.cbs).onparserinit) === null || _d === undefined || _d.call(_c, this);
|
|
this.buffers.length = 0;
|
|
this.bufferOffset = 0;
|
|
this.writeIndex = 0;
|
|
this.ended = false;
|
|
};
|
|
Parser2.prototype.parseComplete = function(data4) {
|
|
this.reset();
|
|
this.end(data4);
|
|
};
|
|
Parser2.prototype.getSlice = function(start, end) {
|
|
while (start - this.bufferOffset >= this.buffers[0].length) {
|
|
this.shiftBuffer();
|
|
}
|
|
var slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
|
|
while (end - this.bufferOffset > this.buffers[0].length) {
|
|
this.shiftBuffer();
|
|
slice += this.buffers[0].slice(0, end - this.bufferOffset);
|
|
}
|
|
return slice;
|
|
};
|
|
Parser2.prototype.shiftBuffer = function() {
|
|
this.bufferOffset += this.buffers[0].length;
|
|
this.writeIndex--;
|
|
this.buffers.shift();
|
|
};
|
|
Parser2.prototype.write = function(chunk) {
|
|
var _a, _b;
|
|
if (this.ended) {
|
|
(_b = (_a = this.cbs).onerror) === null || _b === undefined || _b.call(_a, new Error(".write() after done!"));
|
|
return;
|
|
}
|
|
this.buffers.push(chunk);
|
|
if (this.tokenizer.running) {
|
|
this.tokenizer.write(chunk);
|
|
this.writeIndex++;
|
|
}
|
|
};
|
|
Parser2.prototype.end = function(chunk) {
|
|
var _a, _b;
|
|
if (this.ended) {
|
|
(_b = (_a = this.cbs).onerror) === null || _b === undefined || _b.call(_a, new Error(".end() after done!"));
|
|
return;
|
|
}
|
|
if (chunk)
|
|
this.write(chunk);
|
|
this.ended = true;
|
|
this.tokenizer.end();
|
|
};
|
|
Parser2.prototype.pause = function() {
|
|
this.tokenizer.pause();
|
|
};
|
|
Parser2.prototype.resume = function() {
|
|
this.tokenizer.resume();
|
|
while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
|
|
this.tokenizer.write(this.buffers[this.writeIndex++]);
|
|
}
|
|
if (this.ended)
|
|
this.tokenizer.end();
|
|
};
|
|
Parser2.prototype.parseChunk = function(chunk) {
|
|
this.write(chunk);
|
|
};
|
|
Parser2.prototype.done = function(chunk) {
|
|
this.end(chunk);
|
|
};
|
|
return Parser2;
|
|
}();
|
|
exports.Parser = Parser;
|
|
});
|
|
|
|
// node_modules/domelementtype/lib/index.js
|
|
var require_lib2 = __commonJS((exports) => {
|
|
var isTag = function(elem) {
|
|
return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = undefined;
|
|
var ElementType;
|
|
(function(ElementType2) {
|
|
ElementType2["Root"] = "root";
|
|
ElementType2["Text"] = "text";
|
|
ElementType2["Directive"] = "directive";
|
|
ElementType2["Comment"] = "comment";
|
|
ElementType2["Script"] = "script";
|
|
ElementType2["Style"] = "style";
|
|
ElementType2["Tag"] = "tag";
|
|
ElementType2["CDATA"] = "cdata";
|
|
ElementType2["Doctype"] = "doctype";
|
|
})(ElementType = exports.ElementType || (exports.ElementType = {}));
|
|
exports.isTag = isTag;
|
|
exports.Root = ElementType.Root;
|
|
exports.Text = ElementType.Text;
|
|
exports.Directive = ElementType.Directive;
|
|
exports.Comment = ElementType.Comment;
|
|
exports.Script = ElementType.Script;
|
|
exports.Style = ElementType.Style;
|
|
exports.Tag = ElementType.Tag;
|
|
exports.CDATA = ElementType.CDATA;
|
|
exports.Doctype = ElementType.Doctype;
|
|
});
|
|
|
|
// node_modules/domhandler/lib/node.js
|
|
var require_node = __commonJS((exports) => {
|
|
var isTag = function(node2) {
|
|
return (0, domelementtype_1.isTag)(node2);
|
|
};
|
|
var isCDATA = function(node2) {
|
|
return node2.type === domelementtype_1.ElementType.CDATA;
|
|
};
|
|
var isText = function(node2) {
|
|
return node2.type === domelementtype_1.ElementType.Text;
|
|
};
|
|
var isComment = function(node2) {
|
|
return node2.type === domelementtype_1.ElementType.Comment;
|
|
};
|
|
var isDirective = function(node2) {
|
|
return node2.type === domelementtype_1.ElementType.Directive;
|
|
};
|
|
var isDocument = function(node2) {
|
|
return node2.type === domelementtype_1.ElementType.Root;
|
|
};
|
|
var hasChildren = function(node2) {
|
|
return Object.prototype.hasOwnProperty.call(node2, "children");
|
|
};
|
|
var cloneNode = function(node2, recursive) {
|
|
if (recursive === undefined) {
|
|
recursive = false;
|
|
}
|
|
var result;
|
|
if (isText(node2)) {
|
|
result = new Text(node2.data);
|
|
} else if (isComment(node2)) {
|
|
result = new Comment(node2.data);
|
|
} else if (isTag(node2)) {
|
|
var children = recursive ? cloneChildren(node2.children) : [];
|
|
var clone_1 = new Element(node2.name, __assign({}, node2.attribs), children);
|
|
children.forEach(function(child) {
|
|
return child.parent = clone_1;
|
|
});
|
|
if (node2.namespace != null) {
|
|
clone_1.namespace = node2.namespace;
|
|
}
|
|
if (node2["x-attribsNamespace"]) {
|
|
clone_1["x-attribsNamespace"] = __assign({}, node2["x-attribsNamespace"]);
|
|
}
|
|
if (node2["x-attribsPrefix"]) {
|
|
clone_1["x-attribsPrefix"] = __assign({}, node2["x-attribsPrefix"]);
|
|
}
|
|
result = clone_1;
|
|
} else if (isCDATA(node2)) {
|
|
var children = recursive ? cloneChildren(node2.children) : [];
|
|
var clone_2 = new CDATA(children);
|
|
children.forEach(function(child) {
|
|
return child.parent = clone_2;
|
|
});
|
|
result = clone_2;
|
|
} else if (isDocument(node2)) {
|
|
var children = recursive ? cloneChildren(node2.children) : [];
|
|
var clone_3 = new Document(children);
|
|
children.forEach(function(child) {
|
|
return child.parent = clone_3;
|
|
});
|
|
if (node2["x-mode"]) {
|
|
clone_3["x-mode"] = node2["x-mode"];
|
|
}
|
|
result = clone_3;
|
|
} else if (isDirective(node2)) {
|
|
var instruction = new ProcessingInstruction(node2.name, node2.data);
|
|
if (node2["x-name"] != null) {
|
|
instruction["x-name"] = node2["x-name"];
|
|
instruction["x-publicId"] = node2["x-publicId"];
|
|
instruction["x-systemId"] = node2["x-systemId"];
|
|
}
|
|
result = instruction;
|
|
} else {
|
|
throw new Error("Not implemented yet: ".concat(node2.type));
|
|
}
|
|
result.startIndex = node2.startIndex;
|
|
result.endIndex = node2.endIndex;
|
|
if (node2.sourceCodeLocation != null) {
|
|
result.sourceCodeLocation = node2.sourceCodeLocation;
|
|
}
|
|
return result;
|
|
};
|
|
var cloneChildren = function(childs) {
|
|
var children = childs.map(function(child) {
|
|
return cloneNode(child, true);
|
|
});
|
|
for (var i = 1;i < children.length; i++) {
|
|
children[i].prev = children[i - 1];
|
|
children[i - 1].next = children[i];
|
|
}
|
|
return children;
|
|
};
|
|
var __extends = exports && exports.__extends || function() {
|
|
var extendStatics = function(d, b) {
|
|
extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
|
|
d2.__proto__ = b2;
|
|
} || function(d2, b2) {
|
|
for (var p in b2)
|
|
if (Object.prototype.hasOwnProperty.call(b2, p))
|
|
d2[p] = b2[p];
|
|
};
|
|
return extendStatics(d, b);
|
|
};
|
|
return function(d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
extendStatics(d, b);
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __);
|
|
};
|
|
}();
|
|
var __assign = exports && exports.__assign || function() {
|
|
__assign = Object.assign || function(t) {
|
|
for (var s, i = 1, n = arguments.length;i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s)
|
|
if (Object.prototype.hasOwnProperty.call(s, p))
|
|
t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = undefined;
|
|
var domelementtype_1 = require_lib2();
|
|
var Node = function() {
|
|
function Node2() {
|
|
this.parent = null;
|
|
this.prev = null;
|
|
this.next = null;
|
|
this.startIndex = null;
|
|
this.endIndex = null;
|
|
}
|
|
Object.defineProperty(Node2.prototype, "parentNode", {
|
|
get: function() {
|
|
return this.parent;
|
|
},
|
|
set: function(parent) {
|
|
this.parent = parent;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Node2.prototype, "previousSibling", {
|
|
get: function() {
|
|
return this.prev;
|
|
},
|
|
set: function(prev) {
|
|
this.prev = prev;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Node2.prototype, "nextSibling", {
|
|
get: function() {
|
|
return this.next;
|
|
},
|
|
set: function(next) {
|
|
this.next = next;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Node2.prototype.cloneNode = function(recursive) {
|
|
if (recursive === undefined) {
|
|
recursive = false;
|
|
}
|
|
return cloneNode(this, recursive);
|
|
};
|
|
return Node2;
|
|
}();
|
|
exports.Node = Node;
|
|
var DataNode = function(_super) {
|
|
__extends(DataNode2, _super);
|
|
function DataNode2(data4) {
|
|
var _this = _super.call(this) || this;
|
|
_this.data = data4;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(DataNode2.prototype, "nodeValue", {
|
|
get: function() {
|
|
return this.data;
|
|
},
|
|
set: function(data4) {
|
|
this.data = data4;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return DataNode2;
|
|
}(Node);
|
|
exports.DataNode = DataNode;
|
|
var Text = function(_super) {
|
|
__extends(Text2, _super);
|
|
function Text2() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.type = domelementtype_1.ElementType.Text;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Text2.prototype, "nodeType", {
|
|
get: function() {
|
|
return 3;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return Text2;
|
|
}(DataNode);
|
|
exports.Text = Text;
|
|
var Comment = function(_super) {
|
|
__extends(Comment2, _super);
|
|
function Comment2() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.type = domelementtype_1.ElementType.Comment;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Comment2.prototype, "nodeType", {
|
|
get: function() {
|
|
return 8;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return Comment2;
|
|
}(DataNode);
|
|
exports.Comment = Comment;
|
|
var ProcessingInstruction = function(_super) {
|
|
__extends(ProcessingInstruction2, _super);
|
|
function ProcessingInstruction2(name, data4) {
|
|
var _this = _super.call(this, data4) || this;
|
|
_this.name = name;
|
|
_this.type = domelementtype_1.ElementType.Directive;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(ProcessingInstruction2.prototype, "nodeType", {
|
|
get: function() {
|
|
return 1;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return ProcessingInstruction2;
|
|
}(DataNode);
|
|
exports.ProcessingInstruction = ProcessingInstruction;
|
|
var NodeWithChildren = function(_super) {
|
|
__extends(NodeWithChildren2, _super);
|
|
function NodeWithChildren2(children) {
|
|
var _this = _super.call(this) || this;
|
|
_this.children = children;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(NodeWithChildren2.prototype, "firstChild", {
|
|
get: function() {
|
|
var _a;
|
|
return (_a = this.children[0]) !== null && _a !== undefined ? _a : null;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(NodeWithChildren2.prototype, "lastChild", {
|
|
get: function() {
|
|
return this.children.length > 0 ? this.children[this.children.length - 1] : null;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(NodeWithChildren2.prototype, "childNodes", {
|
|
get: function() {
|
|
return this.children;
|
|
},
|
|
set: function(children) {
|
|
this.children = children;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return NodeWithChildren2;
|
|
}(Node);
|
|
exports.NodeWithChildren = NodeWithChildren;
|
|
var CDATA = function(_super) {
|
|
__extends(CDATA2, _super);
|
|
function CDATA2() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.type = domelementtype_1.ElementType.CDATA;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(CDATA2.prototype, "nodeType", {
|
|
get: function() {
|
|
return 4;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return CDATA2;
|
|
}(NodeWithChildren);
|
|
exports.CDATA = CDATA;
|
|
var Document = function(_super) {
|
|
__extends(Document2, _super);
|
|
function Document2() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.type = domelementtype_1.ElementType.Root;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Document2.prototype, "nodeType", {
|
|
get: function() {
|
|
return 9;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return Document2;
|
|
}(NodeWithChildren);
|
|
exports.Document = Document;
|
|
var Element = function(_super) {
|
|
__extends(Element2, _super);
|
|
function Element2(name, attribs, children, type) {
|
|
if (children === undefined) {
|
|
children = [];
|
|
}
|
|
if (type === undefined) {
|
|
type = name === "script" ? domelementtype_1.ElementType.Script : name === "style" ? domelementtype_1.ElementType.Style : domelementtype_1.ElementType.Tag;
|
|
}
|
|
var _this = _super.call(this, children) || this;
|
|
_this.name = name;
|
|
_this.attribs = attribs;
|
|
_this.type = type;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Element2.prototype, "nodeType", {
|
|
get: function() {
|
|
return 1;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Element2.prototype, "tagName", {
|
|
get: function() {
|
|
return this.name;
|
|
},
|
|
set: function(name) {
|
|
this.name = name;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Element2.prototype, "attributes", {
|
|
get: function() {
|
|
var _this = this;
|
|
return Object.keys(this.attribs).map(function(name) {
|
|
var _a, _b;
|
|
return {
|
|
name,
|
|
value: _this.attribs[name],
|
|
namespace: (_a = _this["x-attribsNamespace"]) === null || _a === undefined ? undefined : _a[name],
|
|
prefix: (_b = _this["x-attribsPrefix"]) === null || _b === undefined ? undefined : _b[name]
|
|
};
|
|
});
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
return Element2;
|
|
}(NodeWithChildren);
|
|
exports.Element = Element;
|
|
exports.isTag = isTag;
|
|
exports.isCDATA = isCDATA;
|
|
exports.isText = isText;
|
|
exports.isComment = isComment;
|
|
exports.isDirective = isDirective;
|
|
exports.isDocument = isDocument;
|
|
exports.hasChildren = hasChildren;
|
|
exports.cloneNode = cloneNode;
|
|
});
|
|
|
|
// node_modules/domhandler/lib/index.js
|
|
var require_lib3 = __commonJS((exports) => {
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __exportStar = exports && exports.__exportStar || function(m, exports2) {
|
|
for (var p in m)
|
|
if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
|
|
__createBinding(exports2, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.DomHandler = undefined;
|
|
var domelementtype_1 = require_lib2();
|
|
var node_js_1 = require_node();
|
|
__exportStar(require_node(), exports);
|
|
var defaultOpts = {
|
|
withStartIndices: false,
|
|
withEndIndices: false,
|
|
xmlMode: false
|
|
};
|
|
var DomHandler = function() {
|
|
function DomHandler2(callback, options, elementCB) {
|
|
this.dom = [];
|
|
this.root = new node_js_1.Document(this.dom);
|
|
this.done = false;
|
|
this.tagStack = [this.root];
|
|
this.lastNode = null;
|
|
this.parser = null;
|
|
if (typeof options === "function") {
|
|
elementCB = options;
|
|
options = defaultOpts;
|
|
}
|
|
if (typeof callback === "object") {
|
|
options = callback;
|
|
callback = undefined;
|
|
}
|
|
this.callback = callback !== null && callback !== undefined ? callback : null;
|
|
this.options = options !== null && options !== undefined ? options : defaultOpts;
|
|
this.elementCB = elementCB !== null && elementCB !== undefined ? elementCB : null;
|
|
}
|
|
DomHandler2.prototype.onparserinit = function(parser) {
|
|
this.parser = parser;
|
|
};
|
|
DomHandler2.prototype.onreset = function() {
|
|
this.dom = [];
|
|
this.root = new node_js_1.Document(this.dom);
|
|
this.done = false;
|
|
this.tagStack = [this.root];
|
|
this.lastNode = null;
|
|
this.parser = null;
|
|
};
|
|
DomHandler2.prototype.onend = function() {
|
|
if (this.done)
|
|
return;
|
|
this.done = true;
|
|
this.parser = null;
|
|
this.handleCallback(null);
|
|
};
|
|
DomHandler2.prototype.onerror = function(error) {
|
|
this.handleCallback(error);
|
|
};
|
|
DomHandler2.prototype.onclosetag = function() {
|
|
this.lastNode = null;
|
|
var elem = this.tagStack.pop();
|
|
if (this.options.withEndIndices) {
|
|
elem.endIndex = this.parser.endIndex;
|
|
}
|
|
if (this.elementCB)
|
|
this.elementCB(elem);
|
|
};
|
|
DomHandler2.prototype.onopentag = function(name, attribs) {
|
|
var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;
|
|
var element = new node_js_1.Element(name, attribs, undefined, type);
|
|
this.addNode(element);
|
|
this.tagStack.push(element);
|
|
};
|
|
DomHandler2.prototype.ontext = function(data4) {
|
|
var lastNode = this.lastNode;
|
|
if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {
|
|
lastNode.data += data4;
|
|
if (this.options.withEndIndices) {
|
|
lastNode.endIndex = this.parser.endIndex;
|
|
}
|
|
} else {
|
|
var node2 = new node_js_1.Text(data4);
|
|
this.addNode(node2);
|
|
this.lastNode = node2;
|
|
}
|
|
};
|
|
DomHandler2.prototype.oncomment = function(data4) {
|
|
if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {
|
|
this.lastNode.data += data4;
|
|
return;
|
|
}
|
|
var node2 = new node_js_1.Comment(data4);
|
|
this.addNode(node2);
|
|
this.lastNode = node2;
|
|
};
|
|
DomHandler2.prototype.oncommentend = function() {
|
|
this.lastNode = null;
|
|
};
|
|
DomHandler2.prototype.oncdatastart = function() {
|
|
var text = new node_js_1.Text("");
|
|
var node2 = new node_js_1.CDATA([text]);
|
|
this.addNode(node2);
|
|
text.parent = node2;
|
|
this.lastNode = text;
|
|
};
|
|
DomHandler2.prototype.oncdataend = function() {
|
|
this.lastNode = null;
|
|
};
|
|
DomHandler2.prototype.onprocessinginstruction = function(name, data4) {
|
|
var node2 = new node_js_1.ProcessingInstruction(name, data4);
|
|
this.addNode(node2);
|
|
};
|
|
DomHandler2.prototype.handleCallback = function(error) {
|
|
if (typeof this.callback === "function") {
|
|
this.callback(error, this.dom);
|
|
} else if (error) {
|
|
throw error;
|
|
}
|
|
};
|
|
DomHandler2.prototype.addNode = function(node2) {
|
|
var parent = this.tagStack[this.tagStack.length - 1];
|
|
var previousSibling = parent.children[parent.children.length - 1];
|
|
if (this.options.withStartIndices) {
|
|
node2.startIndex = this.parser.startIndex;
|
|
}
|
|
if (this.options.withEndIndices) {
|
|
node2.endIndex = this.parser.endIndex;
|
|
}
|
|
parent.children.push(node2);
|
|
if (previousSibling) {
|
|
node2.prev = previousSibling;
|
|
previousSibling.next = node2;
|
|
}
|
|
node2.parent = parent;
|
|
this.lastNode = null;
|
|
};
|
|
return DomHandler2;
|
|
}();
|
|
exports.DomHandler = DomHandler;
|
|
exports.default = DomHandler;
|
|
});
|
|
|
|
// node_modules/entities/lib/generated/encode-html.js
|
|
var require_encode_html = __commonJS((exports) => {
|
|
var restoreDiff = function(arr) {
|
|
for (var i = 1;i < arr.length; i++) {
|
|
arr[i][0] += arr[i - 1][0] + 1;
|
|
}
|
|
return arr;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.default = new Map(restoreDiff([[9, "	"], [0, "
"], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]]));
|
|
});
|
|
|
|
// node_modules/entities/lib/escape.js
|
|
var require_escape = __commonJS((exports) => {
|
|
var encodeXML = function(str) {
|
|
var ret = "";
|
|
var lastIdx = 0;
|
|
var match;
|
|
while ((match = exports.xmlReplacer.exec(str)) !== null) {
|
|
var i = match.index;
|
|
var char = str.charCodeAt(i);
|
|
var next = xmlCodeMap.get(char);
|
|
if (next !== undefined) {
|
|
ret += str.substring(lastIdx, i) + next;
|
|
lastIdx = i + 1;
|
|
} else {
|
|
ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";");
|
|
lastIdx = exports.xmlReplacer.lastIndex += Number((char & 64512) === 55296);
|
|
}
|
|
}
|
|
return ret + str.substr(lastIdx);
|
|
};
|
|
var getEscaper = function(regex, map) {
|
|
return function escape(data4) {
|
|
var match;
|
|
var lastIdx = 0;
|
|
var result = "";
|
|
while (match = regex.exec(data4)) {
|
|
if (lastIdx !== match.index) {
|
|
result += data4.substring(lastIdx, match.index);
|
|
}
|
|
result += map.get(match[0].charCodeAt(0));
|
|
lastIdx = match.index + 1;
|
|
}
|
|
return result + data4.substring(lastIdx);
|
|
};
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = undefined;
|
|
exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
|
|
var xmlCodeMap = new Map([
|
|
[34, """],
|
|
[38, "&"],
|
|
[39, "'"],
|
|
[60, "<"],
|
|
[62, ">"]
|
|
]);
|
|
exports.getCodePoint = String.prototype.codePointAt != null ? function(str, index) {
|
|
return str.codePointAt(index);
|
|
} : function(c, index) {
|
|
return (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index);
|
|
};
|
|
exports.encodeXML = encodeXML;
|
|
exports.escape = encodeXML;
|
|
exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
|
exports.escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([
|
|
[34, """],
|
|
[38, "&"],
|
|
[160, " "]
|
|
]));
|
|
exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([
|
|
[38, "&"],
|
|
[60, "<"],
|
|
[62, ">"],
|
|
[160, " "]
|
|
]));
|
|
});
|
|
|
|
// node_modules/entities/lib/encode.js
|
|
var require_encode = __commonJS((exports) => {
|
|
var encodeHTML = function(data4) {
|
|
return encodeHTMLTrieRe(htmlReplacer, data4);
|
|
};
|
|
var encodeNonAsciiHTML = function(data4) {
|
|
return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data4);
|
|
};
|
|
var encodeHTMLTrieRe = function(regExp, str) {
|
|
var ret = "";
|
|
var lastIdx = 0;
|
|
var match;
|
|
while ((match = regExp.exec(str)) !== null) {
|
|
var i = match.index;
|
|
ret += str.substring(lastIdx, i);
|
|
var char = str.charCodeAt(i);
|
|
var next = encode_html_js_1.default.get(char);
|
|
if (typeof next === "object") {
|
|
if (i + 1 < str.length) {
|
|
var nextChar = str.charCodeAt(i + 1);
|
|
var value = typeof next.n === "number" ? next.n === nextChar ? next.o : undefined : next.n.get(nextChar);
|
|
if (value !== undefined) {
|
|
ret += value;
|
|
lastIdx = regExp.lastIndex += 1;
|
|
continue;
|
|
}
|
|
}
|
|
next = next.v;
|
|
}
|
|
if (next !== undefined) {
|
|
ret += next;
|
|
lastIdx = i + 1;
|
|
} else {
|
|
var cp = (0, escape_js_1.getCodePoint)(str, i);
|
|
ret += "&#x".concat(cp.toString(16), ";");
|
|
lastIdx = regExp.lastIndex += Number(cp !== char);
|
|
}
|
|
}
|
|
return ret + str.substr(lastIdx);
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.encodeNonAsciiHTML = exports.encodeHTML = undefined;
|
|
var encode_html_js_1 = __importDefault(require_encode_html());
|
|
var escape_js_1 = require_escape();
|
|
var htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
|
|
exports.encodeHTML = encodeHTML;
|
|
exports.encodeNonAsciiHTML = encodeNonAsciiHTML;
|
|
});
|
|
|
|
// node_modules/entities/lib/index.js
|
|
var require_lib4 = __commonJS((exports) => {
|
|
var decode = function(data4, options) {
|
|
if (options === undefined) {
|
|
options = EntityLevel.XML;
|
|
}
|
|
var level = typeof options === "number" ? options : options.level;
|
|
if (level === EntityLevel.HTML) {
|
|
var mode = typeof options === "object" ? options.mode : undefined;
|
|
return (0, decode_js_1.decodeHTML)(data4, mode);
|
|
}
|
|
return (0, decode_js_1.decodeXML)(data4);
|
|
};
|
|
var decodeStrict = function(data4, options) {
|
|
var _a;
|
|
if (options === undefined) {
|
|
options = EntityLevel.XML;
|
|
}
|
|
var opts = typeof options === "number" ? { level: options } : options;
|
|
(_a = opts.mode) !== null && _a !== undefined || (opts.mode = decode_js_1.DecodingMode.Strict);
|
|
return decode(data4, opts);
|
|
};
|
|
var encode3 = function(data4, options) {
|
|
if (options === undefined) {
|
|
options = EntityLevel.XML;
|
|
}
|
|
var opts = typeof options === "number" ? { level: options } : options;
|
|
if (opts.mode === EncodingMode.UTF8)
|
|
return (0, escape_js_1.escapeUTF8)(data4);
|
|
if (opts.mode === EncodingMode.Attribute)
|
|
return (0, escape_js_1.escapeAttribute)(data4);
|
|
if (opts.mode === EncodingMode.Text)
|
|
return (0, escape_js_1.escapeText)(data4);
|
|
if (opts.level === EntityLevel.HTML) {
|
|
if (opts.mode === EncodingMode.ASCII) {
|
|
return (0, encode_js_1.encodeNonAsciiHTML)(data4);
|
|
}
|
|
return (0, encode_js_1.encodeHTML)(data4);
|
|
}
|
|
return (0, escape_js_1.encodeXML)(data4);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = undefined;
|
|
var decode_js_1 = require_decode();
|
|
var encode_js_1 = require_encode();
|
|
var escape_js_1 = require_escape();
|
|
var EntityLevel;
|
|
(function(EntityLevel2) {
|
|
EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
|
|
EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
|
|
})(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {}));
|
|
var EncodingMode;
|
|
(function(EncodingMode2) {
|
|
EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
|
|
EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
|
|
EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
|
|
EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
|
|
EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
|
|
})(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {}));
|
|
exports.decode = decode;
|
|
exports.decodeStrict = decodeStrict;
|
|
exports.encode = encode3;
|
|
var escape_js_2 = require_escape();
|
|
Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function() {
|
|
return escape_js_2.encodeXML;
|
|
} });
|
|
Object.defineProperty(exports, "escape", { enumerable: true, get: function() {
|
|
return escape_js_2.escape;
|
|
} });
|
|
Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function() {
|
|
return escape_js_2.escapeUTF8;
|
|
} });
|
|
Object.defineProperty(exports, "escapeAttribute", { enumerable: true, get: function() {
|
|
return escape_js_2.escapeAttribute;
|
|
} });
|
|
Object.defineProperty(exports, "escapeText", { enumerable: true, get: function() {
|
|
return escape_js_2.escapeText;
|
|
} });
|
|
var encode_js_2 = require_encode();
|
|
Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function() {
|
|
return encode_js_2.encodeHTML;
|
|
} });
|
|
Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function() {
|
|
return encode_js_2.encodeNonAsciiHTML;
|
|
} });
|
|
Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function() {
|
|
return encode_js_2.encodeHTML;
|
|
} });
|
|
Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function() {
|
|
return encode_js_2.encodeHTML;
|
|
} });
|
|
var decode_js_2 = require_decode();
|
|
Object.defineProperty(exports, "EntityDecoder", { enumerable: true, get: function() {
|
|
return decode_js_2.EntityDecoder;
|
|
} });
|
|
Object.defineProperty(exports, "DecodingMode", { enumerable: true, get: function() {
|
|
return decode_js_2.DecodingMode;
|
|
} });
|
|
Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeXML;
|
|
} });
|
|
Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeHTML;
|
|
} });
|
|
Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeHTMLStrict;
|
|
} });
|
|
Object.defineProperty(exports, "decodeHTMLAttribute", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeHTMLAttribute;
|
|
} });
|
|
Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeHTML;
|
|
} });
|
|
Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeHTML;
|
|
} });
|
|
Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeHTMLStrict;
|
|
} });
|
|
Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeHTMLStrict;
|
|
} });
|
|
Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function() {
|
|
return decode_js_2.decodeXML;
|
|
} });
|
|
});
|
|
|
|
// node_modules/dom-serializer/lib/foreignNames.js
|
|
var require_foreignNames = __commonJS((exports) => {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.attributeNames = exports.elementNames = undefined;
|
|
exports.elementNames = new Map([
|
|
"altGlyph",
|
|
"altGlyphDef",
|
|
"altGlyphItem",
|
|
"animateColor",
|
|
"animateMotion",
|
|
"animateTransform",
|
|
"clipPath",
|
|
"feBlend",
|
|
"feColorMatrix",
|
|
"feComponentTransfer",
|
|
"feComposite",
|
|
"feConvolveMatrix",
|
|
"feDiffuseLighting",
|
|
"feDisplacementMap",
|
|
"feDistantLight",
|
|
"feDropShadow",
|
|
"feFlood",
|
|
"feFuncA",
|
|
"feFuncB",
|
|
"feFuncG",
|
|
"feFuncR",
|
|
"feGaussianBlur",
|
|
"feImage",
|
|
"feMerge",
|
|
"feMergeNode",
|
|
"feMorphology",
|
|
"feOffset",
|
|
"fePointLight",
|
|
"feSpecularLighting",
|
|
"feSpotLight",
|
|
"feTile",
|
|
"feTurbulence",
|
|
"foreignObject",
|
|
"glyphRef",
|
|
"linearGradient",
|
|
"radialGradient",
|
|
"textPath"
|
|
].map(function(val) {
|
|
return [val.toLowerCase(), val];
|
|
}));
|
|
exports.attributeNames = new Map([
|
|
"definitionURL",
|
|
"attributeName",
|
|
"attributeType",
|
|
"baseFrequency",
|
|
"baseProfile",
|
|
"calcMode",
|
|
"clipPathUnits",
|
|
"diffuseConstant",
|
|
"edgeMode",
|
|
"filterUnits",
|
|
"glyphRef",
|
|
"gradientTransform",
|
|
"gradientUnits",
|
|
"kernelMatrix",
|
|
"kernelUnitLength",
|
|
"keyPoints",
|
|
"keySplines",
|
|
"keyTimes",
|
|
"lengthAdjust",
|
|
"limitingConeAngle",
|
|
"markerHeight",
|
|
"markerUnits",
|
|
"markerWidth",
|
|
"maskContentUnits",
|
|
"maskUnits",
|
|
"numOctaves",
|
|
"pathLength",
|
|
"patternContentUnits",
|
|
"patternTransform",
|
|
"patternUnits",
|
|
"pointsAtX",
|
|
"pointsAtY",
|
|
"pointsAtZ",
|
|
"preserveAlpha",
|
|
"preserveAspectRatio",
|
|
"primitiveUnits",
|
|
"refX",
|
|
"refY",
|
|
"repeatCount",
|
|
"repeatDur",
|
|
"requiredExtensions",
|
|
"requiredFeatures",
|
|
"specularConstant",
|
|
"specularExponent",
|
|
"spreadMethod",
|
|
"startOffset",
|
|
"stdDeviation",
|
|
"stitchTiles",
|
|
"surfaceScale",
|
|
"systemLanguage",
|
|
"tableValues",
|
|
"targetX",
|
|
"targetY",
|
|
"textLength",
|
|
"viewBox",
|
|
"viewTarget",
|
|
"xChannelSelector",
|
|
"yChannelSelector",
|
|
"zoomAndPan"
|
|
].map(function(val) {
|
|
return [val.toLowerCase(), val];
|
|
}));
|
|
});
|
|
|
|
// node_modules/dom-serializer/lib/index.js
|
|
var require_lib5 = __commonJS((exports) => {
|
|
var replaceQuotes = function(value) {
|
|
return value.replace(/"/g, """);
|
|
};
|
|
var formatAttributes = function(attributes, opts) {
|
|
var _a;
|
|
if (!attributes)
|
|
return;
|
|
var encode3 = ((_a = opts.encodeEntities) !== null && _a !== undefined ? _a : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== "utf8" ? entities_1.encodeXML : entities_1.escapeAttribute;
|
|
return Object.keys(attributes).map(function(key) {
|
|
var _a2, _b;
|
|
var value = (_a2 = attributes[key]) !== null && _a2 !== undefined ? _a2 : "";
|
|
if (opts.xmlMode === "foreign") {
|
|
key = (_b = foreignNames_js_1.attributeNames.get(key)) !== null && _b !== undefined ? _b : key;
|
|
}
|
|
if (!opts.emptyAttrs && !opts.xmlMode && value === "") {
|
|
return key;
|
|
}
|
|
return "".concat(key, "=\"").concat(encode3(value), "\"");
|
|
}).join(" ");
|
|
};
|
|
var render = function(node2, options) {
|
|
if (options === undefined) {
|
|
options = {};
|
|
}
|
|
var nodes = "length" in node2 ? node2 : [node2];
|
|
var output = "";
|
|
for (var i = 0;i < nodes.length; i++) {
|
|
output += renderNode(nodes[i], options);
|
|
}
|
|
return output;
|
|
};
|
|
var renderNode = function(node2, options) {
|
|
switch (node2.type) {
|
|
case ElementType.Root:
|
|
return render(node2.children, options);
|
|
case ElementType.Doctype:
|
|
case ElementType.Directive:
|
|
return renderDirective(node2);
|
|
case ElementType.Comment:
|
|
return renderComment(node2);
|
|
case ElementType.CDATA:
|
|
return renderCdata(node2);
|
|
case ElementType.Script:
|
|
case ElementType.Style:
|
|
case ElementType.Tag:
|
|
return renderTag(node2, options);
|
|
case ElementType.Text:
|
|
return renderText(node2, options);
|
|
}
|
|
};
|
|
var renderTag = function(elem, opts) {
|
|
var _a;
|
|
if (opts.xmlMode === "foreign") {
|
|
elem.name = (_a = foreignNames_js_1.elementNames.get(elem.name)) !== null && _a !== undefined ? _a : elem.name;
|
|
if (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) {
|
|
opts = __assign(__assign({}, opts), { xmlMode: false });
|
|
}
|
|
}
|
|
if (!opts.xmlMode && foreignElements.has(elem.name)) {
|
|
opts = __assign(__assign({}, opts), { xmlMode: "foreign" });
|
|
}
|
|
var tag = "<".concat(elem.name);
|
|
var attribs = formatAttributes(elem.attribs, opts);
|
|
if (attribs) {
|
|
tag += " ".concat(attribs);
|
|
}
|
|
if (elem.children.length === 0 && (opts.xmlMode ? opts.selfClosingTags !== false : opts.selfClosingTags && singleTag.has(elem.name))) {
|
|
if (!opts.xmlMode)
|
|
tag += " ";
|
|
tag += "/>";
|
|
} else {
|
|
tag += ">";
|
|
if (elem.children.length > 0) {
|
|
tag += render(elem.children, opts);
|
|
}
|
|
if (opts.xmlMode || !singleTag.has(elem.name)) {
|
|
tag += "</".concat(elem.name, ">");
|
|
}
|
|
}
|
|
return tag;
|
|
};
|
|
var renderDirective = function(elem) {
|
|
return "<".concat(elem.data, ">");
|
|
};
|
|
var renderText = function(elem, opts) {
|
|
var _a;
|
|
var data4 = elem.data || "";
|
|
if (((_a = opts.encodeEntities) !== null && _a !== undefined ? _a : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) {
|
|
data4 = opts.xmlMode || opts.encodeEntities !== "utf8" ? (0, entities_1.encodeXML)(data4) : (0, entities_1.escapeText)(data4);
|
|
}
|
|
return data4;
|
|
};
|
|
var renderCdata = function(elem) {
|
|
return "<![CDATA[".concat(elem.children[0].data, "]]>");
|
|
};
|
|
var renderComment = function(elem) {
|
|
return "<!--".concat(elem.data, "-->");
|
|
};
|
|
var __assign = exports && exports.__assign || function() {
|
|
__assign = Object.assign || function(t) {
|
|
for (var s, i = 1, n = arguments.length;i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s)
|
|
if (Object.prototype.hasOwnProperty.call(s, p))
|
|
t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.render = undefined;
|
|
var ElementType = __importStar(require_lib2());
|
|
var entities_1 = require_lib4();
|
|
var foreignNames_js_1 = require_foreignNames();
|
|
var unencodedElements = new Set([
|
|
"style",
|
|
"script",
|
|
"xmp",
|
|
"iframe",
|
|
"noembed",
|
|
"noframes",
|
|
"plaintext",
|
|
"noscript"
|
|
]);
|
|
var singleTag = new Set([
|
|
"area",
|
|
"base",
|
|
"basefont",
|
|
"br",
|
|
"col",
|
|
"command",
|
|
"embed",
|
|
"frame",
|
|
"hr",
|
|
"img",
|
|
"input",
|
|
"isindex",
|
|
"keygen",
|
|
"link",
|
|
"meta",
|
|
"param",
|
|
"source",
|
|
"track",
|
|
"wbr"
|
|
]);
|
|
exports.render = render;
|
|
exports.default = render;
|
|
var foreignModeIntegrationPoints = new Set([
|
|
"mi",
|
|
"mo",
|
|
"mn",
|
|
"ms",
|
|
"mtext",
|
|
"annotation-xml",
|
|
"foreignObject",
|
|
"desc",
|
|
"title"
|
|
]);
|
|
var foreignElements = new Set(["svg", "math"]);
|
|
});
|
|
|
|
// node_modules/domutils/lib/stringify.js
|
|
var require_stringify2 = __commonJS((exports) => {
|
|
var getOuterHTML = function(node2, options) {
|
|
return (0, dom_serializer_1.default)(node2, options);
|
|
};
|
|
var getInnerHTML = function(node2, options) {
|
|
return (0, domhandler_1.hasChildren)(node2) ? node2.children.map(function(node3) {
|
|
return getOuterHTML(node3, options);
|
|
}).join("") : "";
|
|
};
|
|
var getText = function(node2) {
|
|
if (Array.isArray(node2))
|
|
return node2.map(getText).join("");
|
|
if ((0, domhandler_1.isTag)(node2))
|
|
return node2.name === "br" ? "\n" : getText(node2.children);
|
|
if ((0, domhandler_1.isCDATA)(node2))
|
|
return getText(node2.children);
|
|
if ((0, domhandler_1.isText)(node2))
|
|
return node2.data;
|
|
return "";
|
|
};
|
|
var textContent = function(node2) {
|
|
if (Array.isArray(node2))
|
|
return node2.map(textContent).join("");
|
|
if ((0, domhandler_1.hasChildren)(node2) && !(0, domhandler_1.isComment)(node2)) {
|
|
return textContent(node2.children);
|
|
}
|
|
if ((0, domhandler_1.isText)(node2))
|
|
return node2.data;
|
|
return "";
|
|
};
|
|
var innerText = function(node2) {
|
|
if (Array.isArray(node2))
|
|
return node2.map(innerText).join("");
|
|
if ((0, domhandler_1.hasChildren)(node2) && (node2.type === domelementtype_1.ElementType.Tag || (0, domhandler_1.isCDATA)(node2))) {
|
|
return innerText(node2.children);
|
|
}
|
|
if ((0, domhandler_1.isText)(node2))
|
|
return node2.data;
|
|
return "";
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.innerText = exports.textContent = exports.getText = exports.getInnerHTML = exports.getOuterHTML = undefined;
|
|
var domhandler_1 = require_lib3();
|
|
var dom_serializer_1 = __importDefault(require_lib5());
|
|
var domelementtype_1 = require_lib2();
|
|
exports.getOuterHTML = getOuterHTML;
|
|
exports.getInnerHTML = getInnerHTML;
|
|
exports.getText = getText;
|
|
exports.textContent = textContent;
|
|
exports.innerText = innerText;
|
|
});
|
|
|
|
// node_modules/domutils/lib/traversal.js
|
|
var require_traversal = __commonJS((exports) => {
|
|
var getChildren = function(elem) {
|
|
return (0, domhandler_1.hasChildren)(elem) ? elem.children : [];
|
|
};
|
|
var getParent = function(elem) {
|
|
return elem.parent || null;
|
|
};
|
|
var getSiblings = function(elem) {
|
|
var _a, _b;
|
|
var parent = getParent(elem);
|
|
if (parent != null)
|
|
return getChildren(parent);
|
|
var siblings = [elem];
|
|
var { prev, next } = elem;
|
|
while (prev != null) {
|
|
siblings.unshift(prev);
|
|
_a = prev, prev = _a.prev;
|
|
}
|
|
while (next != null) {
|
|
siblings.push(next);
|
|
_b = next, next = _b.next;
|
|
}
|
|
return siblings;
|
|
};
|
|
var getAttributeValue = function(elem, name) {
|
|
var _a;
|
|
return (_a = elem.attribs) === null || _a === undefined ? undefined : _a[name];
|
|
};
|
|
var hasAttrib = function(elem, name) {
|
|
return elem.attribs != null && Object.prototype.hasOwnProperty.call(elem.attribs, name) && elem.attribs[name] != null;
|
|
};
|
|
var getName = function(elem) {
|
|
return elem.name;
|
|
};
|
|
var nextElementSibling = function(elem) {
|
|
var _a;
|
|
var next = elem.next;
|
|
while (next !== null && !(0, domhandler_1.isTag)(next))
|
|
_a = next, next = _a.next;
|
|
return next;
|
|
};
|
|
var prevElementSibling = function(elem) {
|
|
var _a;
|
|
var prev = elem.prev;
|
|
while (prev !== null && !(0, domhandler_1.isTag)(prev))
|
|
_a = prev, prev = _a.prev;
|
|
return prev;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.prevElementSibling = exports.nextElementSibling = exports.getName = exports.hasAttrib = exports.getAttributeValue = exports.getSiblings = exports.getParent = exports.getChildren = undefined;
|
|
var domhandler_1 = require_lib3();
|
|
exports.getChildren = getChildren;
|
|
exports.getParent = getParent;
|
|
exports.getSiblings = getSiblings;
|
|
exports.getAttributeValue = getAttributeValue;
|
|
exports.hasAttrib = hasAttrib;
|
|
exports.getName = getName;
|
|
exports.nextElementSibling = nextElementSibling;
|
|
exports.prevElementSibling = prevElementSibling;
|
|
});
|
|
|
|
// node_modules/domutils/lib/manipulation.js
|
|
var require_manipulation = __commonJS((exports) => {
|
|
var removeElement = function(elem) {
|
|
if (elem.prev)
|
|
elem.prev.next = elem.next;
|
|
if (elem.next)
|
|
elem.next.prev = elem.prev;
|
|
if (elem.parent) {
|
|
var childs = elem.parent.children;
|
|
var childsIndex = childs.lastIndexOf(elem);
|
|
if (childsIndex >= 0) {
|
|
childs.splice(childsIndex, 1);
|
|
}
|
|
}
|
|
elem.next = null;
|
|
elem.prev = null;
|
|
elem.parent = null;
|
|
};
|
|
var replaceElement = function(elem, replacement) {
|
|
var prev = replacement.prev = elem.prev;
|
|
if (prev) {
|
|
prev.next = replacement;
|
|
}
|
|
var next = replacement.next = elem.next;
|
|
if (next) {
|
|
next.prev = replacement;
|
|
}
|
|
var parent = replacement.parent = elem.parent;
|
|
if (parent) {
|
|
var childs = parent.children;
|
|
childs[childs.lastIndexOf(elem)] = replacement;
|
|
elem.parent = null;
|
|
}
|
|
};
|
|
var appendChild = function(parent, child) {
|
|
removeElement(child);
|
|
child.next = null;
|
|
child.parent = parent;
|
|
if (parent.children.push(child) > 1) {
|
|
var sibling = parent.children[parent.children.length - 2];
|
|
sibling.next = child;
|
|
child.prev = sibling;
|
|
} else {
|
|
child.prev = null;
|
|
}
|
|
};
|
|
var append2 = function(elem, next) {
|
|
removeElement(next);
|
|
var parent = elem.parent;
|
|
var currNext = elem.next;
|
|
next.next = currNext;
|
|
next.prev = elem;
|
|
elem.next = next;
|
|
next.parent = parent;
|
|
if (currNext) {
|
|
currNext.prev = next;
|
|
if (parent) {
|
|
var childs = parent.children;
|
|
childs.splice(childs.lastIndexOf(currNext), 0, next);
|
|
}
|
|
} else if (parent) {
|
|
parent.children.push(next);
|
|
}
|
|
};
|
|
var prependChild = function(parent, child) {
|
|
removeElement(child);
|
|
child.parent = parent;
|
|
child.prev = null;
|
|
if (parent.children.unshift(child) !== 1) {
|
|
var sibling = parent.children[1];
|
|
sibling.prev = child;
|
|
child.next = sibling;
|
|
} else {
|
|
child.next = null;
|
|
}
|
|
};
|
|
var prepend = function(elem, prev) {
|
|
removeElement(prev);
|
|
var parent = elem.parent;
|
|
if (parent) {
|
|
var childs = parent.children;
|
|
childs.splice(childs.indexOf(elem), 0, prev);
|
|
}
|
|
if (elem.prev) {
|
|
elem.prev.next = prev;
|
|
}
|
|
prev.parent = parent;
|
|
prev.prev = elem.prev;
|
|
prev.next = elem;
|
|
elem.prev = prev;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.prepend = exports.prependChild = exports.append = exports.appendChild = exports.replaceElement = exports.removeElement = undefined;
|
|
exports.removeElement = removeElement;
|
|
exports.replaceElement = replaceElement;
|
|
exports.appendChild = appendChild;
|
|
exports.append = append2;
|
|
exports.prependChild = prependChild;
|
|
exports.prepend = prepend;
|
|
});
|
|
|
|
// node_modules/domutils/lib/querying.js
|
|
var require_querying = __commonJS((exports) => {
|
|
var filter2 = function(test, node2, recurse, limit) {
|
|
if (recurse === undefined) {
|
|
recurse = true;
|
|
}
|
|
if (limit === undefined) {
|
|
limit = Infinity;
|
|
}
|
|
return find(test, Array.isArray(node2) ? node2 : [node2], recurse, limit);
|
|
};
|
|
var find = function(test, nodes, recurse, limit) {
|
|
var result = [];
|
|
var nodeStack = [nodes];
|
|
var indexStack = [0];
|
|
for (;; ) {
|
|
if (indexStack[0] >= nodeStack[0].length) {
|
|
if (indexStack.length === 1) {
|
|
return result;
|
|
}
|
|
nodeStack.shift();
|
|
indexStack.shift();
|
|
continue;
|
|
}
|
|
var elem = nodeStack[0][indexStack[0]++];
|
|
if (test(elem)) {
|
|
result.push(elem);
|
|
if (--limit <= 0)
|
|
return result;
|
|
}
|
|
if (recurse && (0, domhandler_1.hasChildren)(elem) && elem.children.length > 0) {
|
|
indexStack.unshift(0);
|
|
nodeStack.unshift(elem.children);
|
|
}
|
|
}
|
|
};
|
|
var findOneChild = function(test, nodes) {
|
|
return nodes.find(test);
|
|
};
|
|
var findOne = function(test, nodes, recurse) {
|
|
if (recurse === undefined) {
|
|
recurse = true;
|
|
}
|
|
var elem = null;
|
|
for (var i = 0;i < nodes.length && !elem; i++) {
|
|
var node2 = nodes[i];
|
|
if (!(0, domhandler_1.isTag)(node2)) {
|
|
continue;
|
|
} else if (test(node2)) {
|
|
elem = node2;
|
|
} else if (recurse && node2.children.length > 0) {
|
|
elem = findOne(test, node2.children, true);
|
|
}
|
|
}
|
|
return elem;
|
|
};
|
|
var existsOne = function(test, nodes) {
|
|
return nodes.some(function(checked) {
|
|
return (0, domhandler_1.isTag)(checked) && (test(checked) || existsOne(test, checked.children));
|
|
});
|
|
};
|
|
var findAll = function(test, nodes) {
|
|
var result = [];
|
|
var nodeStack = [nodes];
|
|
var indexStack = [0];
|
|
for (;; ) {
|
|
if (indexStack[0] >= nodeStack[0].length) {
|
|
if (nodeStack.length === 1) {
|
|
return result;
|
|
}
|
|
nodeStack.shift();
|
|
indexStack.shift();
|
|
continue;
|
|
}
|
|
var elem = nodeStack[0][indexStack[0]++];
|
|
if (!(0, domhandler_1.isTag)(elem))
|
|
continue;
|
|
if (test(elem))
|
|
result.push(elem);
|
|
if (elem.children.length > 0) {
|
|
indexStack.unshift(0);
|
|
nodeStack.unshift(elem.children);
|
|
}
|
|
}
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.findAll = exports.existsOne = exports.findOne = exports.findOneChild = exports.find = exports.filter = undefined;
|
|
var domhandler_1 = require_lib3();
|
|
exports.filter = filter2;
|
|
exports.find = find;
|
|
exports.findOneChild = findOneChild;
|
|
exports.findOne = findOne;
|
|
exports.existsOne = existsOne;
|
|
exports.findAll = findAll;
|
|
});
|
|
|
|
// node_modules/domutils/lib/legacy.js
|
|
var require_legacy = __commonJS((exports) => {
|
|
var getAttribCheck = function(attrib, value) {
|
|
if (typeof value === "function") {
|
|
return function(elem) {
|
|
return (0, domhandler_1.isTag)(elem) && value(elem.attribs[attrib]);
|
|
};
|
|
}
|
|
return function(elem) {
|
|
return (0, domhandler_1.isTag)(elem) && elem.attribs[attrib] === value;
|
|
};
|
|
};
|
|
var combineFuncs = function(a, b) {
|
|
return function(elem) {
|
|
return a(elem) || b(elem);
|
|
};
|
|
};
|
|
var compileTest = function(options) {
|
|
var funcs = Object.keys(options).map(function(key) {
|
|
var value = options[key];
|
|
return Object.prototype.hasOwnProperty.call(Checks, key) ? Checks[key](value) : getAttribCheck(key, value);
|
|
});
|
|
return funcs.length === 0 ? null : funcs.reduce(combineFuncs);
|
|
};
|
|
var testElement = function(options, node2) {
|
|
var test = compileTest(options);
|
|
return test ? test(node2) : true;
|
|
};
|
|
var getElements = function(options, nodes, recurse, limit) {
|
|
if (limit === undefined) {
|
|
limit = Infinity;
|
|
}
|
|
var test = compileTest(options);
|
|
return test ? (0, querying_js_1.filter)(test, nodes, recurse, limit) : [];
|
|
};
|
|
var getElementById = function(id, nodes, recurse) {
|
|
if (recurse === undefined) {
|
|
recurse = true;
|
|
}
|
|
if (!Array.isArray(nodes))
|
|
nodes = [nodes];
|
|
return (0, querying_js_1.findOne)(getAttribCheck("id", id), nodes, recurse);
|
|
};
|
|
var getElementsByTagName = function(tagName, nodes, recurse, limit) {
|
|
if (recurse === undefined) {
|
|
recurse = true;
|
|
}
|
|
if (limit === undefined) {
|
|
limit = Infinity;
|
|
}
|
|
return (0, querying_js_1.filter)(Checks["tag_name"](tagName), nodes, recurse, limit);
|
|
};
|
|
var getElementsByTagType = function(type, nodes, recurse, limit) {
|
|
if (recurse === undefined) {
|
|
recurse = true;
|
|
}
|
|
if (limit === undefined) {
|
|
limit = Infinity;
|
|
}
|
|
return (0, querying_js_1.filter)(Checks["tag_type"](type), nodes, recurse, limit);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getElementsByTagType = exports.getElementsByTagName = exports.getElementById = exports.getElements = exports.testElement = undefined;
|
|
var domhandler_1 = require_lib3();
|
|
var querying_js_1 = require_querying();
|
|
var Checks = {
|
|
tag_name: function(name) {
|
|
if (typeof name === "function") {
|
|
return function(elem) {
|
|
return (0, domhandler_1.isTag)(elem) && name(elem.name);
|
|
};
|
|
} else if (name === "*") {
|
|
return domhandler_1.isTag;
|
|
}
|
|
return function(elem) {
|
|
return (0, domhandler_1.isTag)(elem) && elem.name === name;
|
|
};
|
|
},
|
|
tag_type: function(type) {
|
|
if (typeof type === "function") {
|
|
return function(elem) {
|
|
return type(elem.type);
|
|
};
|
|
}
|
|
return function(elem) {
|
|
return elem.type === type;
|
|
};
|
|
},
|
|
tag_contains: function(data4) {
|
|
if (typeof data4 === "function") {
|
|
return function(elem) {
|
|
return (0, domhandler_1.isText)(elem) && data4(elem.data);
|
|
};
|
|
}
|
|
return function(elem) {
|
|
return (0, domhandler_1.isText)(elem) && elem.data === data4;
|
|
};
|
|
}
|
|
};
|
|
exports.testElement = testElement;
|
|
exports.getElements = getElements;
|
|
exports.getElementById = getElementById;
|
|
exports.getElementsByTagName = getElementsByTagName;
|
|
exports.getElementsByTagType = getElementsByTagType;
|
|
});
|
|
|
|
// node_modules/domutils/lib/helpers.js
|
|
var require_helpers = __commonJS((exports) => {
|
|
var removeSubsets = function(nodes) {
|
|
var idx = nodes.length;
|
|
while (--idx >= 0) {
|
|
var node2 = nodes[idx];
|
|
if (idx > 0 && nodes.lastIndexOf(node2, idx - 1) >= 0) {
|
|
nodes.splice(idx, 1);
|
|
continue;
|
|
}
|
|
for (var ancestor = node2.parent;ancestor; ancestor = ancestor.parent) {
|
|
if (nodes.includes(ancestor)) {
|
|
nodes.splice(idx, 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return nodes;
|
|
};
|
|
var compareDocumentPosition = function(nodeA, nodeB) {
|
|
var aParents = [];
|
|
var bParents = [];
|
|
if (nodeA === nodeB) {
|
|
return 0;
|
|
}
|
|
var current = (0, domhandler_1.hasChildren)(nodeA) ? nodeA : nodeA.parent;
|
|
while (current) {
|
|
aParents.unshift(current);
|
|
current = current.parent;
|
|
}
|
|
current = (0, domhandler_1.hasChildren)(nodeB) ? nodeB : nodeB.parent;
|
|
while (current) {
|
|
bParents.unshift(current);
|
|
current = current.parent;
|
|
}
|
|
var maxIdx = Math.min(aParents.length, bParents.length);
|
|
var idx = 0;
|
|
while (idx < maxIdx && aParents[idx] === bParents[idx]) {
|
|
idx++;
|
|
}
|
|
if (idx === 0) {
|
|
return DocumentPosition.DISCONNECTED;
|
|
}
|
|
var sharedParent = aParents[idx - 1];
|
|
var siblings = sharedParent.children;
|
|
var aSibling = aParents[idx];
|
|
var bSibling = bParents[idx];
|
|
if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {
|
|
if (sharedParent === nodeB) {
|
|
return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;
|
|
}
|
|
return DocumentPosition.FOLLOWING;
|
|
}
|
|
if (sharedParent === nodeA) {
|
|
return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;
|
|
}
|
|
return DocumentPosition.PRECEDING;
|
|
};
|
|
var uniqueSort = function(nodes) {
|
|
nodes = nodes.filter(function(node2, i, arr) {
|
|
return !arr.includes(node2, i + 1);
|
|
});
|
|
nodes.sort(function(a, b) {
|
|
var relative = compareDocumentPosition(a, b);
|
|
if (relative & DocumentPosition.PRECEDING) {
|
|
return -1;
|
|
} else if (relative & DocumentPosition.FOLLOWING) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
return nodes;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.uniqueSort = exports.compareDocumentPosition = exports.DocumentPosition = exports.removeSubsets = undefined;
|
|
var domhandler_1 = require_lib3();
|
|
exports.removeSubsets = removeSubsets;
|
|
var DocumentPosition;
|
|
(function(DocumentPosition2) {
|
|
DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
|
|
DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
|
|
DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
|
|
DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
|
|
DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
|
|
})(DocumentPosition = exports.DocumentPosition || (exports.DocumentPosition = {}));
|
|
exports.compareDocumentPosition = compareDocumentPosition;
|
|
exports.uniqueSort = uniqueSort;
|
|
});
|
|
|
|
// node_modules/domutils/lib/feeds.js
|
|
var require_feeds = __commonJS((exports) => {
|
|
var getFeed = function(doc) {
|
|
var feedRoot = getOneElement(isValidFeed, doc);
|
|
return !feedRoot ? null : feedRoot.name === "feed" ? getAtomFeed(feedRoot) : getRssFeed(feedRoot);
|
|
};
|
|
var getAtomFeed = function(feedRoot) {
|
|
var _a;
|
|
var childs = feedRoot.children;
|
|
var feed = {
|
|
type: "atom",
|
|
items: (0, legacy_js_1.getElementsByTagName)("entry", childs).map(function(item) {
|
|
var _a2;
|
|
var children = item.children;
|
|
var entry = { media: getMediaElements(children) };
|
|
addConditionally(entry, "id", "id", children);
|
|
addConditionally(entry, "title", "title", children);
|
|
var href2 = (_a2 = getOneElement("link", children)) === null || _a2 === undefined ? undefined : _a2.attribs["href"];
|
|
if (href2) {
|
|
entry.link = href2;
|
|
}
|
|
var description = fetch3("summary", children) || fetch3("content", children);
|
|
if (description) {
|
|
entry.description = description;
|
|
}
|
|
var pubDate = fetch3("updated", children);
|
|
if (pubDate) {
|
|
entry.pubDate = new Date(pubDate);
|
|
}
|
|
return entry;
|
|
})
|
|
};
|
|
addConditionally(feed, "id", "id", childs);
|
|
addConditionally(feed, "title", "title", childs);
|
|
var href = (_a = getOneElement("link", childs)) === null || _a === undefined ? undefined : _a.attribs["href"];
|
|
if (href) {
|
|
feed.link = href;
|
|
}
|
|
addConditionally(feed, "description", "subtitle", childs);
|
|
var updated = fetch3("updated", childs);
|
|
if (updated) {
|
|
feed.updated = new Date(updated);
|
|
}
|
|
addConditionally(feed, "author", "email", childs, true);
|
|
return feed;
|
|
};
|
|
var getRssFeed = function(feedRoot) {
|
|
var _a, _b;
|
|
var childs = (_b = (_a = getOneElement("channel", feedRoot.children)) === null || _a === undefined ? undefined : _a.children) !== null && _b !== undefined ? _b : [];
|
|
var feed = {
|
|
type: feedRoot.name.substr(0, 3),
|
|
id: "",
|
|
items: (0, legacy_js_1.getElementsByTagName)("item", feedRoot.children).map(function(item) {
|
|
var children = item.children;
|
|
var entry = { media: getMediaElements(children) };
|
|
addConditionally(entry, "id", "guid", children);
|
|
addConditionally(entry, "title", "title", children);
|
|
addConditionally(entry, "link", "link", children);
|
|
addConditionally(entry, "description", "description", children);
|
|
var pubDate = fetch3("pubDate", children) || fetch3("dc:date", children);
|
|
if (pubDate)
|
|
entry.pubDate = new Date(pubDate);
|
|
return entry;
|
|
})
|
|
};
|
|
addConditionally(feed, "title", "title", childs);
|
|
addConditionally(feed, "link", "link", childs);
|
|
addConditionally(feed, "description", "description", childs);
|
|
var updated = fetch3("lastBuildDate", childs);
|
|
if (updated) {
|
|
feed.updated = new Date(updated);
|
|
}
|
|
addConditionally(feed, "author", "managingEditor", childs, true);
|
|
return feed;
|
|
};
|
|
var getMediaElements = function(where) {
|
|
return (0, legacy_js_1.getElementsByTagName)("media:content", where).map(function(elem) {
|
|
var attribs = elem.attribs;
|
|
var media = {
|
|
medium: attribs["medium"],
|
|
isDefault: !!attribs["isDefault"]
|
|
};
|
|
for (var _i = 0, MEDIA_KEYS_STRING_1 = MEDIA_KEYS_STRING;_i < MEDIA_KEYS_STRING_1.length; _i++) {
|
|
var attrib = MEDIA_KEYS_STRING_1[_i];
|
|
if (attribs[attrib]) {
|
|
media[attrib] = attribs[attrib];
|
|
}
|
|
}
|
|
for (var _a = 0, MEDIA_KEYS_INT_1 = MEDIA_KEYS_INT;_a < MEDIA_KEYS_INT_1.length; _a++) {
|
|
var attrib = MEDIA_KEYS_INT_1[_a];
|
|
if (attribs[attrib]) {
|
|
media[attrib] = parseInt(attribs[attrib], 10);
|
|
}
|
|
}
|
|
if (attribs["expression"]) {
|
|
media.expression = attribs["expression"];
|
|
}
|
|
return media;
|
|
});
|
|
};
|
|
var getOneElement = function(tagName, node2) {
|
|
return (0, legacy_js_1.getElementsByTagName)(tagName, node2, true, 1)[0];
|
|
};
|
|
var fetch3 = function(tagName, where, recurse) {
|
|
if (recurse === undefined) {
|
|
recurse = false;
|
|
}
|
|
return (0, stringify_js_1.textContent)((0, legacy_js_1.getElementsByTagName)(tagName, where, recurse, 1)).trim();
|
|
};
|
|
var addConditionally = function(obj, prop, tagName, where, recurse) {
|
|
if (recurse === undefined) {
|
|
recurse = false;
|
|
}
|
|
var val = fetch3(tagName, where, recurse);
|
|
if (val)
|
|
obj[prop] = val;
|
|
};
|
|
var isValidFeed = function(value) {
|
|
return value === "rss" || value === "feed" || value === "rdf:RDF";
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getFeed = undefined;
|
|
var stringify_js_1 = require_stringify2();
|
|
var legacy_js_1 = require_legacy();
|
|
exports.getFeed = getFeed;
|
|
var MEDIA_KEYS_STRING = ["url", "type", "lang"];
|
|
var MEDIA_KEYS_INT = [
|
|
"fileSize",
|
|
"bitrate",
|
|
"framerate",
|
|
"samplingrate",
|
|
"channels",
|
|
"duration",
|
|
"height",
|
|
"width"
|
|
];
|
|
});
|
|
|
|
// node_modules/domutils/lib/index.js
|
|
var require_lib6 = __commonJS((exports) => {
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __exportStar = exports && exports.__exportStar || function(m, exports2) {
|
|
for (var p in m)
|
|
if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
|
|
__createBinding(exports2, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.hasChildren = exports.isDocument = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = undefined;
|
|
__exportStar(require_stringify2(), exports);
|
|
__exportStar(require_traversal(), exports);
|
|
__exportStar(require_manipulation(), exports);
|
|
__exportStar(require_querying(), exports);
|
|
__exportStar(require_legacy(), exports);
|
|
__exportStar(require_helpers(), exports);
|
|
__exportStar(require_feeds(), exports);
|
|
var domhandler_1 = require_lib3();
|
|
Object.defineProperty(exports, "isTag", { enumerable: true, get: function() {
|
|
return domhandler_1.isTag;
|
|
} });
|
|
Object.defineProperty(exports, "isCDATA", { enumerable: true, get: function() {
|
|
return domhandler_1.isCDATA;
|
|
} });
|
|
Object.defineProperty(exports, "isText", { enumerable: true, get: function() {
|
|
return domhandler_1.isText;
|
|
} });
|
|
Object.defineProperty(exports, "isComment", { enumerable: true, get: function() {
|
|
return domhandler_1.isComment;
|
|
} });
|
|
Object.defineProperty(exports, "isDocument", { enumerable: true, get: function() {
|
|
return domhandler_1.isDocument;
|
|
} });
|
|
Object.defineProperty(exports, "hasChildren", { enumerable: true, get: function() {
|
|
return domhandler_1.hasChildren;
|
|
} });
|
|
});
|
|
|
|
// node_modules/htmlparser2/lib/index.js
|
|
var require_lib7 = __commonJS((exports) => {
|
|
var parseDocument = function(data4, options) {
|
|
var handler = new domhandler_1.DomHandler(undefined, options);
|
|
new Parser_js_1.Parser(handler, options).end(data4);
|
|
return handler.root;
|
|
};
|
|
var parseDOM = function(data4, options) {
|
|
return parseDocument(data4, options).children;
|
|
};
|
|
var createDomStream = function(callback, options, elementCallback) {
|
|
var handler = new domhandler_1.DomHandler(callback, options, elementCallback);
|
|
return new Parser_js_1.Parser(handler, options);
|
|
};
|
|
var parseFeed = function(feed, options) {
|
|
if (options === undefined) {
|
|
options = parseFeedDefaultOptions;
|
|
}
|
|
return (0, domutils_1.getFeed)(parseDOM(feed, options));
|
|
};
|
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() {
|
|
return m[k];
|
|
} };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
} : function(o, m, k, k2) {
|
|
if (k2 === undefined)
|
|
k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
} : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = exports && exports.__importStar || function(mod) {
|
|
if (mod && mod.__esModule)
|
|
return mod;
|
|
var result = {};
|
|
if (mod != null) {
|
|
for (var k in mod)
|
|
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
|
|
__createBinding(result, mod, k);
|
|
}
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.Tokenizer = exports.createDomStream = exports.parseDOM = exports.parseDocument = exports.DefaultHandler = exports.DomHandler = exports.Parser = undefined;
|
|
var Parser_js_1 = require_Parser();
|
|
var Parser_js_2 = require_Parser();
|
|
Object.defineProperty(exports, "Parser", { enumerable: true, get: function() {
|
|
return Parser_js_2.Parser;
|
|
} });
|
|
var domhandler_1 = require_lib3();
|
|
var domhandler_2 = require_lib3();
|
|
Object.defineProperty(exports, "DomHandler", { enumerable: true, get: function() {
|
|
return domhandler_2.DomHandler;
|
|
} });
|
|
Object.defineProperty(exports, "DefaultHandler", { enumerable: true, get: function() {
|
|
return domhandler_2.DomHandler;
|
|
} });
|
|
exports.parseDocument = parseDocument;
|
|
exports.parseDOM = parseDOM;
|
|
exports.createDomStream = createDomStream;
|
|
var Tokenizer_js_1 = require_Tokenizer();
|
|
Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function() {
|
|
return __importDefault(Tokenizer_js_1).default;
|
|
} });
|
|
exports.ElementType = __importStar(require_lib2());
|
|
var domutils_1 = require_lib6();
|
|
var domutils_2 = require_lib6();
|
|
Object.defineProperty(exports, "getFeed", { enumerable: true, get: function() {
|
|
return domutils_2.getFeed;
|
|
} });
|
|
var parseFeedDefaultOptions = { xmlMode: true };
|
|
exports.parseFeed = parseFeed;
|
|
exports.DomUtils = __importStar(require_lib6());
|
|
});
|
|
|
|
// node_modules/escape-string-regexp/index.js
|
|
var require_escape_string_regexp = __commonJS((exports, module) => {
|
|
module.exports = (string) => {
|
|
if (typeof string !== "string") {
|
|
throw new TypeError("Expected a string");
|
|
}
|
|
return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
|
|
};
|
|
});
|
|
|
|
// node_modules/is-plain-object/dist/is-plain-object.js
|
|
var require_is_plain_object = __commonJS((exports) => {
|
|
var isObject2 = function(o) {
|
|
return Object.prototype.toString.call(o) === "[object Object]";
|
|
};
|
|
var isPlainObject2 = function(o) {
|
|
var ctor, prot;
|
|
if (isObject2(o) === false)
|
|
return false;
|
|
ctor = o.constructor;
|
|
if (ctor === undefined)
|
|
return true;
|
|
prot = ctor.prototype;
|
|
if (isObject2(prot) === false)
|
|
return false;
|
|
if (prot.hasOwnProperty("isPrototypeOf") === false) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/*!
|
|
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
|
|
*
|
|
* Copyright (c) 2014-2017, Jon Schlinkert.
|
|
* Released under the MIT License.
|
|
*/
|
|
exports.isPlainObject = isPlainObject2;
|
|
});
|
|
|
|
// node_modules/deepmerge/dist/cjs.js
|
|
var require_cjs = __commonJS((exports, module) => {
|
|
var isNonNullObject = function(value) {
|
|
return !!value && typeof value === "object";
|
|
};
|
|
var isSpecial = function(value) {
|
|
var stringValue = Object.prototype.toString.call(value);
|
|
return stringValue === "[object RegExp]" || stringValue === "[object Date]" || isReactElement(value);
|
|
};
|
|
var isReactElement = function(value) {
|
|
return value.$$typeof === REACT_ELEMENT_TYPE;
|
|
};
|
|
var emptyTarget = function(val) {
|
|
return Array.isArray(val) ? [] : {};
|
|
};
|
|
var cloneUnlessOtherwiseSpecified = function(value, options) {
|
|
return options.clone !== false && options.isMergeableObject(value) ? deepmerge(emptyTarget(value), value, options) : value;
|
|
};
|
|
var defaultArrayMerge = function(target, source, options) {
|
|
return target.concat(source).map(function(element) {
|
|
return cloneUnlessOtherwiseSpecified(element, options);
|
|
});
|
|
};
|
|
var getMergeFunction = function(key, options) {
|
|
if (!options.customMerge) {
|
|
return deepmerge;
|
|
}
|
|
var customMerge = options.customMerge(key);
|
|
return typeof customMerge === "function" ? customMerge : deepmerge;
|
|
};
|
|
var getEnumerableOwnPropertySymbols = function(target) {
|
|
return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) {
|
|
return Object.propertyIsEnumerable.call(target, symbol);
|
|
}) : [];
|
|
};
|
|
var getKeys = function(target) {
|
|
return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));
|
|
};
|
|
var propertyIsOnObject = function(object, property) {
|
|
try {
|
|
return property in object;
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
};
|
|
var propertyIsUnsafe = function(target, key) {
|
|
return propertyIsOnObject(target, key) && !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key));
|
|
};
|
|
var mergeObject = function(target, source, options) {
|
|
var destination = {};
|
|
if (options.isMergeableObject(target)) {
|
|
getKeys(target).forEach(function(key) {
|
|
destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
|
|
});
|
|
}
|
|
getKeys(source).forEach(function(key) {
|
|
if (propertyIsUnsafe(target, key)) {
|
|
return;
|
|
}
|
|
if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
|
|
destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
|
|
} else {
|
|
destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
|
|
}
|
|
});
|
|
return destination;
|
|
};
|
|
var deepmerge = function(target, source, options) {
|
|
options = options || {};
|
|
options.arrayMerge = options.arrayMerge || defaultArrayMerge;
|
|
options.isMergeableObject = options.isMergeableObject || isMergeableObject;
|
|
options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;
|
|
var sourceIsArray = Array.isArray(source);
|
|
var targetIsArray = Array.isArray(target);
|
|
var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
|
|
if (!sourceAndTargetTypesMatch) {
|
|
return cloneUnlessOtherwiseSpecified(source, options);
|
|
} else if (sourceIsArray) {
|
|
return options.arrayMerge(target, source, options);
|
|
} else {
|
|
return mergeObject(target, source, options);
|
|
}
|
|
};
|
|
var isMergeableObject = function isMergeableObject(value) {
|
|
return isNonNullObject(value) && !isSpecial(value);
|
|
};
|
|
var canUseSymbol = typeof Symbol === "function" && Symbol.for;
|
|
var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for("react.element") : 60103;
|
|
deepmerge.all = function deepmergeAll(array, options) {
|
|
if (!Array.isArray(array)) {
|
|
throw new Error("first argument should be an array");
|
|
}
|
|
return array.reduce(function(prev, next) {
|
|
return deepmerge(prev, next, options);
|
|
}, {});
|
|
};
|
|
var deepmerge_1 = deepmerge;
|
|
module.exports = deepmerge_1;
|
|
});
|
|
|
|
// node_modules/parse-srcset/src/parse-srcset.js
|
|
var require_parse_srcset = __commonJS((exports, module) => {
|
|
(function(root, factory) {
|
|
if (typeof define === "function" && define.amd) {
|
|
define([], factory);
|
|
} else if (typeof module === "object" && exports) {
|
|
module.exports = factory();
|
|
} else {
|
|
root.parseSrcset = factory();
|
|
}
|
|
})(exports, function() {
|
|
return function(input) {
|
|
function isSpace(c2) {
|
|
return c2 === " " || c2 === "\t" || c2 === `
|
|
` || c2 === "\f" || c2 === `\r`;
|
|
}
|
|
function collectCharacters(regEx) {
|
|
var chars, match = regEx.exec(input.substring(pos));
|
|
if (match) {
|
|
chars = match[0];
|
|
pos += chars.length;
|
|
return chars;
|
|
}
|
|
}
|
|
var inputLength = input.length, regexLeadingSpaces = /^[ \t\n\r\u000c]+/, regexLeadingCommasOrSpaces = /^[, \t\n\r\u000c]+/, regexLeadingNotSpaces = /^[^ \t\n\r\u000c]+/, regexTrailingCommas = /[,]+$/, regexNonNegativeInteger = /^\d+$/, regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/, url2, descriptors2, currentDescriptor, state, c, pos = 0, candidates = [];
|
|
while (true) {
|
|
collectCharacters(regexLeadingCommasOrSpaces);
|
|
if (pos >= inputLength) {
|
|
return candidates;
|
|
}
|
|
url2 = collectCharacters(regexLeadingNotSpaces);
|
|
descriptors2 = [];
|
|
if (url2.slice(-1) === ",") {
|
|
url2 = url2.replace(regexTrailingCommas, "");
|
|
parseDescriptors();
|
|
} else {
|
|
tokenize();
|
|
}
|
|
}
|
|
function tokenize() {
|
|
collectCharacters(regexLeadingSpaces);
|
|
currentDescriptor = "";
|
|
state = "in descriptor";
|
|
while (true) {
|
|
c = input.charAt(pos);
|
|
if (state === "in descriptor") {
|
|
if (isSpace(c)) {
|
|
if (currentDescriptor) {
|
|
descriptors2.push(currentDescriptor);
|
|
currentDescriptor = "";
|
|
state = "after descriptor";
|
|
}
|
|
} else if (c === ",") {
|
|
pos += 1;
|
|
if (currentDescriptor) {
|
|
descriptors2.push(currentDescriptor);
|
|
}
|
|
parseDescriptors();
|
|
return;
|
|
} else if (c === "(") {
|
|
currentDescriptor = currentDescriptor + c;
|
|
state = "in parens";
|
|
} else if (c === "") {
|
|
if (currentDescriptor) {
|
|
descriptors2.push(currentDescriptor);
|
|
}
|
|
parseDescriptors();
|
|
return;
|
|
} else {
|
|
currentDescriptor = currentDescriptor + c;
|
|
}
|
|
} else if (state === "in parens") {
|
|
if (c === ")") {
|
|
currentDescriptor = currentDescriptor + c;
|
|
state = "in descriptor";
|
|
} else if (c === "") {
|
|
descriptors2.push(currentDescriptor);
|
|
parseDescriptors();
|
|
return;
|
|
} else {
|
|
currentDescriptor = currentDescriptor + c;
|
|
}
|
|
} else if (state === "after descriptor") {
|
|
if (isSpace(c)) {
|
|
} else if (c === "") {
|
|
parseDescriptors();
|
|
return;
|
|
} else {
|
|
state = "in descriptor";
|
|
pos -= 1;
|
|
}
|
|
}
|
|
pos += 1;
|
|
}
|
|
}
|
|
function parseDescriptors() {
|
|
var pError = false, w, d, h, i, candidate = {}, desc, lastChar, value, intVal, floatVal;
|
|
for (i = 0;i < descriptors2.length; i++) {
|
|
desc = descriptors2[i];
|
|
lastChar = desc[desc.length - 1];
|
|
value = desc.substring(0, desc.length - 1);
|
|
intVal = parseInt(value, 10);
|
|
floatVal = parseFloat(value);
|
|
if (regexNonNegativeInteger.test(value) && lastChar === "w") {
|
|
if (w || d) {
|
|
pError = true;
|
|
}
|
|
if (intVal === 0) {
|
|
pError = true;
|
|
} else {
|
|
w = intVal;
|
|
}
|
|
} else if (regexFloatingPoint.test(value) && lastChar === "x") {
|
|
if (w || d || h) {
|
|
pError = true;
|
|
}
|
|
if (floatVal < 0) {
|
|
pError = true;
|
|
} else {
|
|
d = floatVal;
|
|
}
|
|
} else if (regexNonNegativeInteger.test(value) && lastChar === "h") {
|
|
if (h || d) {
|
|
pError = true;
|
|
}
|
|
if (intVal === 0) {
|
|
pError = true;
|
|
} else {
|
|
h = intVal;
|
|
}
|
|
} else {
|
|
pError = true;
|
|
}
|
|
}
|
|
if (!pError) {
|
|
candidate.url = url2;
|
|
if (w) {
|
|
candidate.w = w;
|
|
}
|
|
if (d) {
|
|
candidate.d = d;
|
|
}
|
|
if (h) {
|
|
candidate.h = h;
|
|
}
|
|
candidates.push(candidate);
|
|
} else if (console && console.log) {
|
|
console.log("Invalid srcset descriptor found in '" + input + "' at '" + desc + "'.");
|
|
}
|
|
}
|
|
};
|
|
});
|
|
});
|
|
|
|
// node_modules/picocolors/picocolors.js
|
|
var require_picocolors = __commonJS((exports, module) => {
|
|
var argv = process.argv || [];
|
|
var env = process.env;
|
|
var isColorSupported = !(("NO_COLOR" in env) || argv.includes("--no-color")) && (("FORCE_COLOR" in env) || argv.includes("--color") || process.platform === "win32" || __require != null && __require("tty").isatty(1) && env.TERM !== "dumb" || ("CI" in env));
|
|
var formatter = (open, close, replace = open) => (input) => {
|
|
let string = "" + input;
|
|
let index = string.indexOf(close, open.length);
|
|
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
|
};
|
|
var replaceClose = (string, close, replace, index) => {
|
|
let result = "";
|
|
let cursor = 0;
|
|
do {
|
|
result += string.substring(cursor, index) + replace;
|
|
cursor = index + close.length;
|
|
index = string.indexOf(close, cursor);
|
|
} while (~index);
|
|
return result + string.substring(cursor);
|
|
};
|
|
var createColors = (enabled = isColorSupported) => {
|
|
let init = enabled ? formatter : () => String;
|
|
return {
|
|
isColorSupported: enabled,
|
|
reset: init("\x1B[0m", "\x1B[0m"),
|
|
bold: init("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
|
|
dim: init("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
|
|
italic: init("\x1B[3m", "\x1B[23m"),
|
|
underline: init("\x1B[4m", "\x1B[24m"),
|
|
inverse: init("\x1B[7m", "\x1B[27m"),
|
|
hidden: init("\x1B[8m", "\x1B[28m"),
|
|
strikethrough: init("\x1B[9m", "\x1B[29m"),
|
|
black: init("\x1B[30m", "\x1B[39m"),
|
|
red: init("\x1B[31m", "\x1B[39m"),
|
|
green: init("\x1B[32m", "\x1B[39m"),
|
|
yellow: init("\x1B[33m", "\x1B[39m"),
|
|
blue: init("\x1B[34m", "\x1B[39m"),
|
|
magenta: init("\x1B[35m", "\x1B[39m"),
|
|
cyan: init("\x1B[36m", "\x1B[39m"),
|
|
white: init("\x1B[37m", "\x1B[39m"),
|
|
gray: init("\x1B[90m", "\x1B[39m"),
|
|
bgBlack: init("\x1B[40m", "\x1B[49m"),
|
|
bgRed: init("\x1B[41m", "\x1B[49m"),
|
|
bgGreen: init("\x1B[42m", "\x1B[49m"),
|
|
bgYellow: init("\x1B[43m", "\x1B[49m"),
|
|
bgBlue: init("\x1B[44m", "\x1B[49m"),
|
|
bgMagenta: init("\x1B[45m", "\x1B[49m"),
|
|
bgCyan: init("\x1B[46m", "\x1B[49m"),
|
|
bgWhite: init("\x1B[47m", "\x1B[49m")
|
|
};
|
|
};
|
|
module.exports = createColors();
|
|
module.exports.createColors = createColors;
|
|
});
|
|
|
|
// node_modules/postcss/lib/tokenize.js
|
|
var require_tokenize = __commonJS((exports, module) => {
|
|
var SINGLE_QUOTE = "'".charCodeAt(0);
|
|
var DOUBLE_QUOTE = '"'.charCodeAt(0);
|
|
var BACKSLASH = "\\".charCodeAt(0);
|
|
var SLASH = "/".charCodeAt(0);
|
|
var NEWLINE = "\n".charCodeAt(0);
|
|
var SPACE = " ".charCodeAt(0);
|
|
var FEED = "\f".charCodeAt(0);
|
|
var TAB = "\t".charCodeAt(0);
|
|
var CR = "\r".charCodeAt(0);
|
|
var OPEN_SQUARE = "[".charCodeAt(0);
|
|
var CLOSE_SQUARE = "]".charCodeAt(0);
|
|
var OPEN_PARENTHESES = "(".charCodeAt(0);
|
|
var CLOSE_PARENTHESES = ")".charCodeAt(0);
|
|
var OPEN_CURLY = "{".charCodeAt(0);
|
|
var CLOSE_CURLY = "}".charCodeAt(0);
|
|
var SEMICOLON = ";".charCodeAt(0);
|
|
var ASTERISK = "*".charCodeAt(0);
|
|
var COLON = ":".charCodeAt(0);
|
|
var AT = "@".charCodeAt(0);
|
|
var RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g;
|
|
var RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g;
|
|
var RE_BAD_BRACKET = /.[\r\n"'(/\\]/;
|
|
var RE_HEX_ESCAPE = /[\da-f]/i;
|
|
module.exports = function tokenizer(input, options = {}) {
|
|
let css = input.css.valueOf();
|
|
let ignore = options.ignoreErrors;
|
|
let code, next, quote, content, escape;
|
|
let escaped, escapePos, prev, n, currentToken;
|
|
let length = css.length;
|
|
let pos = 0;
|
|
let buffer = [];
|
|
let returned = [];
|
|
function position() {
|
|
return pos;
|
|
}
|
|
function unclosed(what) {
|
|
throw input.error("Unclosed " + what, pos);
|
|
}
|
|
function endOfFile() {
|
|
return returned.length === 0 && pos >= length;
|
|
}
|
|
function nextToken(opts) {
|
|
if (returned.length)
|
|
return returned.pop();
|
|
if (pos >= length)
|
|
return;
|
|
let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;
|
|
code = css.charCodeAt(pos);
|
|
switch (code) {
|
|
case NEWLINE:
|
|
case SPACE:
|
|
case TAB:
|
|
case CR:
|
|
case FEED: {
|
|
next = pos;
|
|
do {
|
|
next += 1;
|
|
code = css.charCodeAt(next);
|
|
} while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);
|
|
currentToken = ["space", css.slice(pos, next)];
|
|
pos = next - 1;
|
|
break;
|
|
}
|
|
case OPEN_SQUARE:
|
|
case CLOSE_SQUARE:
|
|
case OPEN_CURLY:
|
|
case CLOSE_CURLY:
|
|
case COLON:
|
|
case SEMICOLON:
|
|
case CLOSE_PARENTHESES: {
|
|
let controlChar = String.fromCharCode(code);
|
|
currentToken = [controlChar, controlChar, pos];
|
|
break;
|
|
}
|
|
case OPEN_PARENTHESES: {
|
|
prev = buffer.length ? buffer.pop()[1] : "";
|
|
n = css.charCodeAt(pos + 1);
|
|
if (prev === "url" && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {
|
|
next = pos;
|
|
do {
|
|
escaped = false;
|
|
next = css.indexOf(")", next + 1);
|
|
if (next === -1) {
|
|
if (ignore || ignoreUnclosed) {
|
|
next = pos;
|
|
break;
|
|
} else {
|
|
unclosed("bracket");
|
|
}
|
|
}
|
|
escapePos = next;
|
|
while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
|
|
escapePos -= 1;
|
|
escaped = !escaped;
|
|
}
|
|
} while (escaped);
|
|
currentToken = ["brackets", css.slice(pos, next + 1), pos, next];
|
|
pos = next;
|
|
} else {
|
|
next = css.indexOf(")", pos + 1);
|
|
content = css.slice(pos, next + 1);
|
|
if (next === -1 || RE_BAD_BRACKET.test(content)) {
|
|
currentToken = ["(", "(", pos];
|
|
} else {
|
|
currentToken = ["brackets", content, pos, next];
|
|
pos = next;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case SINGLE_QUOTE:
|
|
case DOUBLE_QUOTE: {
|
|
quote = code === SINGLE_QUOTE ? "'" : '"';
|
|
next = pos;
|
|
do {
|
|
escaped = false;
|
|
next = css.indexOf(quote, next + 1);
|
|
if (next === -1) {
|
|
if (ignore || ignoreUnclosed) {
|
|
next = pos + 1;
|
|
break;
|
|
} else {
|
|
unclosed("string");
|
|
}
|
|
}
|
|
escapePos = next;
|
|
while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
|
|
escapePos -= 1;
|
|
escaped = !escaped;
|
|
}
|
|
} while (escaped);
|
|
currentToken = ["string", css.slice(pos, next + 1), pos, next];
|
|
pos = next;
|
|
break;
|
|
}
|
|
case AT: {
|
|
RE_AT_END.lastIndex = pos + 1;
|
|
RE_AT_END.test(css);
|
|
if (RE_AT_END.lastIndex === 0) {
|
|
next = css.length - 1;
|
|
} else {
|
|
next = RE_AT_END.lastIndex - 2;
|
|
}
|
|
currentToken = ["at-word", css.slice(pos, next + 1), pos, next];
|
|
pos = next;
|
|
break;
|
|
}
|
|
case BACKSLASH: {
|
|
next = pos;
|
|
escape = true;
|
|
while (css.charCodeAt(next + 1) === BACKSLASH) {
|
|
next += 1;
|
|
escape = !escape;
|
|
}
|
|
code = css.charCodeAt(next + 1);
|
|
if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {
|
|
next += 1;
|
|
if (RE_HEX_ESCAPE.test(css.charAt(next))) {
|
|
while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
|
|
next += 1;
|
|
}
|
|
if (css.charCodeAt(next + 1) === SPACE) {
|
|
next += 1;
|
|
}
|
|
}
|
|
}
|
|
currentToken = ["word", css.slice(pos, next + 1), pos, next];
|
|
pos = next;
|
|
break;
|
|
}
|
|
default: {
|
|
if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
|
|
next = css.indexOf("*/", pos + 2) + 1;
|
|
if (next === 0) {
|
|
if (ignore || ignoreUnclosed) {
|
|
next = css.length;
|
|
} else {
|
|
unclosed("comment");
|
|
}
|
|
}
|
|
currentToken = ["comment", css.slice(pos, next + 1), pos, next];
|
|
pos = next;
|
|
} else {
|
|
RE_WORD_END.lastIndex = pos + 1;
|
|
RE_WORD_END.test(css);
|
|
if (RE_WORD_END.lastIndex === 0) {
|
|
next = css.length - 1;
|
|
} else {
|
|
next = RE_WORD_END.lastIndex - 2;
|
|
}
|
|
currentToken = ["word", css.slice(pos, next + 1), pos, next];
|
|
buffer.push(currentToken);
|
|
pos = next;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
pos++;
|
|
return currentToken;
|
|
}
|
|
function back(token) {
|
|
returned.push(token);
|
|
}
|
|
return {
|
|
back,
|
|
endOfFile,
|
|
nextToken,
|
|
position
|
|
};
|
|
};
|
|
});
|
|
|
|
// node_modules/postcss/lib/terminal-highlight.js
|
|
var require_terminal_highlight = __commonJS((exports, module) => {
|
|
var registerInput = function(dependant) {
|
|
Input = dependant;
|
|
};
|
|
var getTokenType = function([type, value], processor) {
|
|
if (type === "word") {
|
|
if (value[0] === ".") {
|
|
return "class";
|
|
}
|
|
if (value[0] === "#") {
|
|
return "hash";
|
|
}
|
|
}
|
|
if (!processor.endOfFile()) {
|
|
let next = processor.nextToken();
|
|
processor.back(next);
|
|
if (next[0] === "brackets" || next[0] === "(")
|
|
return "call";
|
|
}
|
|
return type;
|
|
};
|
|
var terminalHighlight = function(css) {
|
|
let processor = tokenizer(new Input(css), { ignoreErrors: true });
|
|
let result = "";
|
|
while (!processor.endOfFile()) {
|
|
let token = processor.nextToken();
|
|
let color = HIGHLIGHT_THEME[getTokenType(token, processor)];
|
|
if (color) {
|
|
result += token[1].split(/\r?\n/).map((i) => color(i)).join("\n");
|
|
} else {
|
|
result += token[1];
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
var pico = require_picocolors();
|
|
var tokenizer = require_tokenize();
|
|
var Input;
|
|
var HIGHLIGHT_THEME = {
|
|
";": pico.yellow,
|
|
":": pico.yellow,
|
|
"(": pico.cyan,
|
|
")": pico.cyan,
|
|
"[": pico.yellow,
|
|
"]": pico.yellow,
|
|
"{": pico.yellow,
|
|
"}": pico.yellow,
|
|
"at-word": pico.cyan,
|
|
brackets: pico.cyan,
|
|
call: pico.cyan,
|
|
class: pico.yellow,
|
|
comment: pico.gray,
|
|
hash: pico.magenta,
|
|
string: pico.green
|
|
};
|
|
terminalHighlight.registerInput = registerInput;
|
|
module.exports = terminalHighlight;
|
|
});
|
|
|
|
// node_modules/postcss/lib/css-syntax-error.js
|
|
var require_css_syntax_error = __commonJS((exports, module) => {
|
|
var pico = require_picocolors();
|
|
var terminalHighlight = require_terminal_highlight();
|
|
|
|
class CssSyntaxError extends Error {
|
|
constructor(message, line, column, source, file, plugin) {
|
|
super(message);
|
|
this.name = "CssSyntaxError";
|
|
this.reason = message;
|
|
if (file) {
|
|
this.file = file;
|
|
}
|
|
if (source) {
|
|
this.source = source;
|
|
}
|
|
if (plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
if (typeof line !== "undefined" && typeof column !== "undefined") {
|
|
if (typeof line === "number") {
|
|
this.line = line;
|
|
this.column = column;
|
|
} else {
|
|
this.line = line.line;
|
|
this.column = line.column;
|
|
this.endLine = column.line;
|
|
this.endColumn = column.column;
|
|
}
|
|
}
|
|
this.setMessage();
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, CssSyntaxError);
|
|
}
|
|
}
|
|
setMessage() {
|
|
this.message = this.plugin ? this.plugin + ": " : "";
|
|
this.message += this.file ? this.file : "<css input>";
|
|
if (typeof this.line !== "undefined") {
|
|
this.message += ":" + this.line + ":" + this.column;
|
|
}
|
|
this.message += ": " + this.reason;
|
|
}
|
|
showSourceCode(color) {
|
|
if (!this.source)
|
|
return "";
|
|
let css = this.source;
|
|
if (color == null)
|
|
color = pico.isColorSupported;
|
|
if (terminalHighlight) {
|
|
if (color)
|
|
css = terminalHighlight(css);
|
|
}
|
|
let lines = css.split(/\r?\n/);
|
|
let start = Math.max(this.line - 3, 0);
|
|
let end = Math.min(this.line + 2, lines.length);
|
|
let maxWidth = String(end).length;
|
|
let mark, aside;
|
|
if (color) {
|
|
let { bold, gray, red } = pico.createColors(true);
|
|
mark = (text) => bold(red(text));
|
|
aside = (text) => gray(text);
|
|
} else {
|
|
mark = aside = (str) => str;
|
|
}
|
|
return lines.slice(start, end).map((line, index) => {
|
|
let number = start + 1 + index;
|
|
let gutter = " " + (" " + number).slice(-maxWidth) + " | ";
|
|
if (number === this.line) {
|
|
let spacing = aside(gutter.replace(/\d/g, " ")) + line.slice(0, this.column - 1).replace(/[^\t]/g, " ");
|
|
return mark(">") + aside(gutter) + line + "\n " + spacing + mark("^");
|
|
}
|
|
return " " + aside(gutter) + line;
|
|
}).join("\n");
|
|
}
|
|
toString() {
|
|
let code = this.showSourceCode();
|
|
if (code) {
|
|
code = "\n\n" + code + "\n";
|
|
}
|
|
return this.name + ": " + this.message + code;
|
|
}
|
|
}
|
|
module.exports = CssSyntaxError;
|
|
CssSyntaxError.default = CssSyntaxError;
|
|
});
|
|
|
|
// node_modules/postcss/lib/symbols.js
|
|
var require_symbols6 = __commonJS((exports, module) => {
|
|
exports.isClean = Symbol("isClean");
|
|
exports.my = Symbol("my");
|
|
});
|
|
|
|
// node_modules/postcss/lib/stringifier.js
|
|
var require_stringifier = __commonJS((exports, module) => {
|
|
var capitalize = function(str) {
|
|
return str[0].toUpperCase() + str.slice(1);
|
|
};
|
|
var DEFAULT_RAW = {
|
|
after: "\n",
|
|
beforeClose: "\n",
|
|
beforeComment: "\n",
|
|
beforeDecl: "\n",
|
|
beforeOpen: " ",
|
|
beforeRule: "\n",
|
|
colon: ": ",
|
|
commentLeft: " ",
|
|
commentRight: " ",
|
|
emptyBody: "",
|
|
indent: " ",
|
|
semicolon: false
|
|
};
|
|
|
|
class Stringifier {
|
|
constructor(builder) {
|
|
this.builder = builder;
|
|
}
|
|
atrule(node2, semicolon) {
|
|
let name = "@" + node2.name;
|
|
let params = node2.params ? this.rawValue(node2, "params") : "";
|
|
if (typeof node2.raws.afterName !== "undefined") {
|
|
name += node2.raws.afterName;
|
|
} else if (params) {
|
|
name += " ";
|
|
}
|
|
if (node2.nodes) {
|
|
this.block(node2, name + params);
|
|
} else {
|
|
let end = (node2.raws.between || "") + (semicolon ? ";" : "");
|
|
this.builder(name + params + end, node2);
|
|
}
|
|
}
|
|
beforeAfter(node2, detect) {
|
|
let value;
|
|
if (node2.type === "decl") {
|
|
value = this.raw(node2, null, "beforeDecl");
|
|
} else if (node2.type === "comment") {
|
|
value = this.raw(node2, null, "beforeComment");
|
|
} else if (detect === "before") {
|
|
value = this.raw(node2, null, "beforeRule");
|
|
} else {
|
|
value = this.raw(node2, null, "beforeClose");
|
|
}
|
|
let buf = node2.parent;
|
|
let depth = 0;
|
|
while (buf && buf.type !== "root") {
|
|
depth += 1;
|
|
buf = buf.parent;
|
|
}
|
|
if (value.includes("\n")) {
|
|
let indent = this.raw(node2, null, "indent");
|
|
if (indent.length) {
|
|
for (let step = 0;step < depth; step++)
|
|
value += indent;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
block(node2, start) {
|
|
let between = this.raw(node2, "between", "beforeOpen");
|
|
this.builder(start + between + "{", node2, "start");
|
|
let after;
|
|
if (node2.nodes && node2.nodes.length) {
|
|
this.body(node2);
|
|
after = this.raw(node2, "after");
|
|
} else {
|
|
after = this.raw(node2, "after", "emptyBody");
|
|
}
|
|
if (after)
|
|
this.builder(after);
|
|
this.builder("}", node2, "end");
|
|
}
|
|
body(node2) {
|
|
let last = node2.nodes.length - 1;
|
|
while (last > 0) {
|
|
if (node2.nodes[last].type !== "comment")
|
|
break;
|
|
last -= 1;
|
|
}
|
|
let semicolon = this.raw(node2, "semicolon");
|
|
for (let i = 0;i < node2.nodes.length; i++) {
|
|
let child = node2.nodes[i];
|
|
let before = this.raw(child, "before");
|
|
if (before)
|
|
this.builder(before);
|
|
this.stringify(child, last !== i || semicolon);
|
|
}
|
|
}
|
|
comment(node2) {
|
|
let left = this.raw(node2, "left", "commentLeft");
|
|
let right = this.raw(node2, "right", "commentRight");
|
|
this.builder("/*" + left + node2.text + right + "*/", node2);
|
|
}
|
|
decl(node2, semicolon) {
|
|
let between = this.raw(node2, "between", "colon");
|
|
let string = node2.prop + between + this.rawValue(node2, "value");
|
|
if (node2.important) {
|
|
string += node2.raws.important || " !important";
|
|
}
|
|
if (semicolon)
|
|
string += ";";
|
|
this.builder(string, node2);
|
|
}
|
|
document(node2) {
|
|
this.body(node2);
|
|
}
|
|
raw(node2, own, detect) {
|
|
let value;
|
|
if (!detect)
|
|
detect = own;
|
|
if (own) {
|
|
value = node2.raws[own];
|
|
if (typeof value !== "undefined")
|
|
return value;
|
|
}
|
|
let parent = node2.parent;
|
|
if (detect === "before") {
|
|
if (!parent || parent.type === "root" && parent.first === node2) {
|
|
return "";
|
|
}
|
|
if (parent && parent.type === "document") {
|
|
return "";
|
|
}
|
|
}
|
|
if (!parent)
|
|
return DEFAULT_RAW[detect];
|
|
let root = node2.root();
|
|
if (!root.rawCache)
|
|
root.rawCache = {};
|
|
if (typeof root.rawCache[detect] !== "undefined") {
|
|
return root.rawCache[detect];
|
|
}
|
|
if (detect === "before" || detect === "after") {
|
|
return this.beforeAfter(node2, detect);
|
|
} else {
|
|
let method = "raw" + capitalize(detect);
|
|
if (this[method]) {
|
|
value = this[method](root, node2);
|
|
} else {
|
|
root.walk((i) => {
|
|
value = i.raws[own];
|
|
if (typeof value !== "undefined")
|
|
return false;
|
|
});
|
|
}
|
|
}
|
|
if (typeof value === "undefined")
|
|
value = DEFAULT_RAW[detect];
|
|
root.rawCache[detect] = value;
|
|
return value;
|
|
}
|
|
rawBeforeClose(root) {
|
|
let value;
|
|
root.walk((i) => {
|
|
if (i.nodes && i.nodes.length > 0) {
|
|
if (typeof i.raws.after !== "undefined") {
|
|
value = i.raws.after;
|
|
if (value.includes("\n")) {
|
|
value = value.replace(/[^\n]+$/, "");
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
if (value)
|
|
value = value.replace(/\S/g, "");
|
|
return value;
|
|
}
|
|
rawBeforeComment(root, node2) {
|
|
let value;
|
|
root.walkComments((i) => {
|
|
if (typeof i.raws.before !== "undefined") {
|
|
value = i.raws.before;
|
|
if (value.includes("\n")) {
|
|
value = value.replace(/[^\n]+$/, "");
|
|
}
|
|
return false;
|
|
}
|
|
});
|
|
if (typeof value === "undefined") {
|
|
value = this.raw(node2, null, "beforeDecl");
|
|
} else if (value) {
|
|
value = value.replace(/\S/g, "");
|
|
}
|
|
return value;
|
|
}
|
|
rawBeforeDecl(root, node2) {
|
|
let value;
|
|
root.walkDecls((i) => {
|
|
if (typeof i.raws.before !== "undefined") {
|
|
value = i.raws.before;
|
|
if (value.includes("\n")) {
|
|
value = value.replace(/[^\n]+$/, "");
|
|
}
|
|
return false;
|
|
}
|
|
});
|
|
if (typeof value === "undefined") {
|
|
value = this.raw(node2, null, "beforeRule");
|
|
} else if (value) {
|
|
value = value.replace(/\S/g, "");
|
|
}
|
|
return value;
|
|
}
|
|
rawBeforeOpen(root) {
|
|
let value;
|
|
root.walk((i) => {
|
|
if (i.type !== "decl") {
|
|
value = i.raws.between;
|
|
if (typeof value !== "undefined")
|
|
return false;
|
|
}
|
|
});
|
|
return value;
|
|
}
|
|
rawBeforeRule(root) {
|
|
let value;
|
|
root.walk((i) => {
|
|
if (i.nodes && (i.parent !== root || root.first !== i)) {
|
|
if (typeof i.raws.before !== "undefined") {
|
|
value = i.raws.before;
|
|
if (value.includes("\n")) {
|
|
value = value.replace(/[^\n]+$/, "");
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
if (value)
|
|
value = value.replace(/\S/g, "");
|
|
return value;
|
|
}
|
|
rawColon(root) {
|
|
let value;
|
|
root.walkDecls((i) => {
|
|
if (typeof i.raws.between !== "undefined") {
|
|
value = i.raws.between.replace(/[^\s:]/g, "");
|
|
return false;
|
|
}
|
|
});
|
|
return value;
|
|
}
|
|
rawEmptyBody(root) {
|
|
let value;
|
|
root.walk((i) => {
|
|
if (i.nodes && i.nodes.length === 0) {
|
|
value = i.raws.after;
|
|
if (typeof value !== "undefined")
|
|
return false;
|
|
}
|
|
});
|
|
return value;
|
|
}
|
|
rawIndent(root) {
|
|
if (root.raws.indent)
|
|
return root.raws.indent;
|
|
let value;
|
|
root.walk((i) => {
|
|
let p = i.parent;
|
|
if (p && p !== root && p.parent && p.parent === root) {
|
|
if (typeof i.raws.before !== "undefined") {
|
|
let parts = i.raws.before.split("\n");
|
|
value = parts[parts.length - 1];
|
|
value = value.replace(/\S/g, "");
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
return value;
|
|
}
|
|
rawSemicolon(root) {
|
|
let value;
|
|
root.walk((i) => {
|
|
if (i.nodes && i.nodes.length && i.last.type === "decl") {
|
|
value = i.raws.semicolon;
|
|
if (typeof value !== "undefined")
|
|
return false;
|
|
}
|
|
});
|
|
return value;
|
|
}
|
|
rawValue(node2, prop) {
|
|
let value = node2[prop];
|
|
let raw = node2.raws[prop];
|
|
if (raw && raw.value === value) {
|
|
return raw.raw;
|
|
}
|
|
return value;
|
|
}
|
|
root(node2) {
|
|
this.body(node2);
|
|
if (node2.raws.after)
|
|
this.builder(node2.raws.after);
|
|
}
|
|
rule(node2) {
|
|
this.block(node2, this.rawValue(node2, "selector"));
|
|
if (node2.raws.ownSemicolon) {
|
|
this.builder(node2.raws.ownSemicolon, node2, "end");
|
|
}
|
|
}
|
|
stringify(node2, semicolon) {
|
|
if (!this[node2.type]) {
|
|
throw new Error("Unknown AST node type " + node2.type + ". " + "Maybe you need to change PostCSS stringifier.");
|
|
}
|
|
this[node2.type](node2, semicolon);
|
|
}
|
|
}
|
|
module.exports = Stringifier;
|
|
Stringifier.default = Stringifier;
|
|
});
|
|
|
|
// node_modules/postcss/lib/stringify.js
|
|
var require_stringify3 = __commonJS((exports, module) => {
|
|
var stringify = function(node2, builder) {
|
|
let str = new Stringifier(builder);
|
|
str.stringify(node2);
|
|
};
|
|
var Stringifier = require_stringifier();
|
|
module.exports = stringify;
|
|
stringify.default = stringify;
|
|
});
|
|
|
|
// node_modules/postcss/lib/node.js
|
|
var require_node2 = __commonJS((exports, module) => {
|
|
var cloneNode = function(obj, parent) {
|
|
let cloned = new obj.constructor;
|
|
for (let i in obj) {
|
|
if (!Object.prototype.hasOwnProperty.call(obj, i)) {
|
|
continue;
|
|
}
|
|
if (i === "proxyCache")
|
|
continue;
|
|
let value = obj[i];
|
|
let type = typeof value;
|
|
if (i === "parent" && type === "object") {
|
|
if (parent)
|
|
cloned[i] = parent;
|
|
} else if (i === "source") {
|
|
cloned[i] = value;
|
|
} else if (Array.isArray(value)) {
|
|
cloned[i] = value.map((j) => cloneNode(j, cloned));
|
|
} else {
|
|
if (type === "object" && value !== null)
|
|
value = cloneNode(value);
|
|
cloned[i] = value;
|
|
}
|
|
}
|
|
return cloned;
|
|
};
|
|
var { isClean, my } = require_symbols6();
|
|
var CssSyntaxError = require_css_syntax_error();
|
|
var Stringifier = require_stringifier();
|
|
var stringify = require_stringify3();
|
|
|
|
class Node {
|
|
constructor(defaults5 = {}) {
|
|
this.raws = {};
|
|
this[isClean] = false;
|
|
this[my] = true;
|
|
for (let name in defaults5) {
|
|
if (name === "nodes") {
|
|
this.nodes = [];
|
|
for (let node2 of defaults5[name]) {
|
|
if (typeof node2.clone === "function") {
|
|
this.append(node2.clone());
|
|
} else {
|
|
this.append(node2);
|
|
}
|
|
}
|
|
} else {
|
|
this[name] = defaults5[name];
|
|
}
|
|
}
|
|
}
|
|
addToError(error) {
|
|
error.postcssNode = this;
|
|
if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
|
|
let s = this.source;
|
|
error.stack = error.stack.replace(/\n\s{4}at /, `\$&${s.input.from}:${s.start.line}:${s.start.column}\$&`);
|
|
}
|
|
return error;
|
|
}
|
|
after(add) {
|
|
this.parent.insertAfter(this, add);
|
|
return this;
|
|
}
|
|
assign(overrides = {}) {
|
|
for (let name in overrides) {
|
|
this[name] = overrides[name];
|
|
}
|
|
return this;
|
|
}
|
|
before(add) {
|
|
this.parent.insertBefore(this, add);
|
|
return this;
|
|
}
|
|
cleanRaws(keepBetween) {
|
|
delete this.raws.before;
|
|
delete this.raws.after;
|
|
if (!keepBetween)
|
|
delete this.raws.between;
|
|
}
|
|
clone(overrides = {}) {
|
|
let cloned = cloneNode(this);
|
|
for (let name in overrides) {
|
|
cloned[name] = overrides[name];
|
|
}
|
|
return cloned;
|
|
}
|
|
cloneAfter(overrides = {}) {
|
|
let cloned = this.clone(overrides);
|
|
this.parent.insertAfter(this, cloned);
|
|
return cloned;
|
|
}
|
|
cloneBefore(overrides = {}) {
|
|
let cloned = this.clone(overrides);
|
|
this.parent.insertBefore(this, cloned);
|
|
return cloned;
|
|
}
|
|
error(message, opts = {}) {
|
|
if (this.source) {
|
|
let { end, start } = this.rangeBy(opts);
|
|
return this.source.input.error(message, { column: start.column, line: start.line }, { column: end.column, line: end.line }, opts);
|
|
}
|
|
return new CssSyntaxError(message);
|
|
}
|
|
getProxyProcessor() {
|
|
return {
|
|
get(node2, prop) {
|
|
if (prop === "proxyOf") {
|
|
return node2;
|
|
} else if (prop === "root") {
|
|
return () => node2.root().toProxy();
|
|
} else {
|
|
return node2[prop];
|
|
}
|
|
},
|
|
set(node2, prop, value) {
|
|
if (node2[prop] === value)
|
|
return true;
|
|
node2[prop] = value;
|
|
if (prop === "prop" || prop === "value" || prop === "name" || prop === "params" || prop === "important" || prop === "text") {
|
|
node2.markDirty();
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
}
|
|
markDirty() {
|
|
if (this[isClean]) {
|
|
this[isClean] = false;
|
|
let next = this;
|
|
while (next = next.parent) {
|
|
next[isClean] = false;
|
|
}
|
|
}
|
|
}
|
|
next() {
|
|
if (!this.parent)
|
|
return;
|
|
let index = this.parent.index(this);
|
|
return this.parent.nodes[index + 1];
|
|
}
|
|
positionBy(opts, stringRepresentation) {
|
|
let pos = this.source.start;
|
|
if (opts.index) {
|
|
pos = this.positionInside(opts.index, stringRepresentation);
|
|
} else if (opts.word) {
|
|
stringRepresentation = this.toString();
|
|
let index = stringRepresentation.indexOf(opts.word);
|
|
if (index !== -1)
|
|
pos = this.positionInside(index, stringRepresentation);
|
|
}
|
|
return pos;
|
|
}
|
|
positionInside(index, stringRepresentation) {
|
|
let string = stringRepresentation || this.toString();
|
|
let column = this.source.start.column;
|
|
let line = this.source.start.line;
|
|
for (let i = 0;i < index; i++) {
|
|
if (string[i] === "\n") {
|
|
column = 1;
|
|
line += 1;
|
|
} else {
|
|
column += 1;
|
|
}
|
|
}
|
|
return { column, line };
|
|
}
|
|
prev() {
|
|
if (!this.parent)
|
|
return;
|
|
let index = this.parent.index(this);
|
|
return this.parent.nodes[index - 1];
|
|
}
|
|
rangeBy(opts) {
|
|
let start = {
|
|
column: this.source.start.column,
|
|
line: this.source.start.line
|
|
};
|
|
let end = this.source.end ? {
|
|
column: this.source.end.column + 1,
|
|
line: this.source.end.line
|
|
} : {
|
|
column: start.column + 1,
|
|
line: start.line
|
|
};
|
|
if (opts.word) {
|
|
let stringRepresentation = this.toString();
|
|
let index = stringRepresentation.indexOf(opts.word);
|
|
if (index !== -1) {
|
|
start = this.positionInside(index, stringRepresentation);
|
|
end = this.positionInside(index + opts.word.length, stringRepresentation);
|
|
}
|
|
} else {
|
|
if (opts.start) {
|
|
start = {
|
|
column: opts.start.column,
|
|
line: opts.start.line
|
|
};
|
|
} else if (opts.index) {
|
|
start = this.positionInside(opts.index);
|
|
}
|
|
if (opts.end) {
|
|
end = {
|
|
column: opts.end.column,
|
|
line: opts.end.line
|
|
};
|
|
} else if (typeof opts.endIndex === "number") {
|
|
end = this.positionInside(opts.endIndex);
|
|
} else if (opts.index) {
|
|
end = this.positionInside(opts.index + 1);
|
|
}
|
|
}
|
|
if (end.line < start.line || end.line === start.line && end.column <= start.column) {
|
|
end = { column: start.column + 1, line: start.line };
|
|
}
|
|
return { end, start };
|
|
}
|
|
raw(prop, defaultType) {
|
|
let str = new Stringifier;
|
|
return str.raw(this, prop, defaultType);
|
|
}
|
|
remove() {
|
|
if (this.parent) {
|
|
this.parent.removeChild(this);
|
|
}
|
|
this.parent = undefined;
|
|
return this;
|
|
}
|
|
replaceWith(...nodes) {
|
|
if (this.parent) {
|
|
let bookmark = this;
|
|
let foundSelf = false;
|
|
for (let node2 of nodes) {
|
|
if (node2 === this) {
|
|
foundSelf = true;
|
|
} else if (foundSelf) {
|
|
this.parent.insertAfter(bookmark, node2);
|
|
bookmark = node2;
|
|
} else {
|
|
this.parent.insertBefore(bookmark, node2);
|
|
}
|
|
}
|
|
if (!foundSelf) {
|
|
this.remove();
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
root() {
|
|
let result = this;
|
|
while (result.parent && result.parent.type !== "document") {
|
|
result = result.parent;
|
|
}
|
|
return result;
|
|
}
|
|
toJSON(_, inputs) {
|
|
let fixed = {};
|
|
let emitInputs = inputs == null;
|
|
inputs = inputs || new Map;
|
|
let inputsNextIndex = 0;
|
|
for (let name in this) {
|
|
if (!Object.prototype.hasOwnProperty.call(this, name)) {
|
|
continue;
|
|
}
|
|
if (name === "parent" || name === "proxyCache")
|
|
continue;
|
|
let value = this[name];
|
|
if (Array.isArray(value)) {
|
|
fixed[name] = value.map((i) => {
|
|
if (typeof i === "object" && i.toJSON) {
|
|
return i.toJSON(null, inputs);
|
|
} else {
|
|
return i;
|
|
}
|
|
});
|
|
} else if (typeof value === "object" && value.toJSON) {
|
|
fixed[name] = value.toJSON(null, inputs);
|
|
} else if (name === "source") {
|
|
let inputId = inputs.get(value.input);
|
|
if (inputId == null) {
|
|
inputId = inputsNextIndex;
|
|
inputs.set(value.input, inputsNextIndex);
|
|
inputsNextIndex++;
|
|
}
|
|
fixed[name] = {
|
|
end: value.end,
|
|
inputId,
|
|
start: value.start
|
|
};
|
|
} else {
|
|
fixed[name] = value;
|
|
}
|
|
}
|
|
if (emitInputs) {
|
|
fixed.inputs = [...inputs.keys()].map((input) => input.toJSON());
|
|
}
|
|
return fixed;
|
|
}
|
|
toProxy() {
|
|
if (!this.proxyCache) {
|
|
this.proxyCache = new Proxy(this, this.getProxyProcessor());
|
|
}
|
|
return this.proxyCache;
|
|
}
|
|
toString(stringifier = stringify) {
|
|
if (stringifier.stringify)
|
|
stringifier = stringifier.stringify;
|
|
let result = "";
|
|
stringifier(this, (i) => {
|
|
result += i;
|
|
});
|
|
return result;
|
|
}
|
|
warn(result, text, opts) {
|
|
let data4 = { node: this };
|
|
for (let i in opts)
|
|
data4[i] = opts[i];
|
|
return result.warn(text, data4);
|
|
}
|
|
get proxyOf() {
|
|
return this;
|
|
}
|
|
}
|
|
module.exports = Node;
|
|
Node.default = Node;
|
|
});
|
|
|
|
// node_modules/postcss/lib/declaration.js
|
|
var require_declaration = __commonJS((exports, module) => {
|
|
var Node = require_node2();
|
|
|
|
class Declaration extends Node {
|
|
constructor(defaults5) {
|
|
if (defaults5 && typeof defaults5.value !== "undefined" && typeof defaults5.value !== "string") {
|
|
defaults5 = { ...defaults5, value: String(defaults5.value) };
|
|
}
|
|
super(defaults5);
|
|
this.type = "decl";
|
|
}
|
|
get variable() {
|
|
return this.prop.startsWith("--") || this.prop[0] === "$";
|
|
}
|
|
}
|
|
module.exports = Declaration;
|
|
Declaration.default = Declaration;
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/base64.js
|
|
var require_base64 = __commonJS((exports) => {
|
|
var intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
|
|
exports.encode = function(number) {
|
|
if (0 <= number && number < intToCharMap.length) {
|
|
return intToCharMap[number];
|
|
}
|
|
throw new TypeError("Must be between 0 and 63: " + number);
|
|
};
|
|
exports.decode = function(charCode) {
|
|
var bigA = 65;
|
|
var bigZ = 90;
|
|
var littleA = 97;
|
|
var littleZ = 122;
|
|
var zero = 48;
|
|
var nine = 57;
|
|
var plus = 43;
|
|
var slash = 47;
|
|
var littleOffset = 26;
|
|
var numberOffset = 52;
|
|
if (bigA <= charCode && charCode <= bigZ) {
|
|
return charCode - bigA;
|
|
}
|
|
if (littleA <= charCode && charCode <= littleZ) {
|
|
return charCode - littleA + littleOffset;
|
|
}
|
|
if (zero <= charCode && charCode <= nine) {
|
|
return charCode - zero + numberOffset;
|
|
}
|
|
if (charCode == plus) {
|
|
return 62;
|
|
}
|
|
if (charCode == slash) {
|
|
return 63;
|
|
}
|
|
return -1;
|
|
};
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/base64-vlq.js
|
|
var require_base64_vlq = __commonJS((exports) => {
|
|
var toVLQSigned = function(aValue) {
|
|
return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;
|
|
};
|
|
var fromVLQSigned = function(aValue) {
|
|
var isNegative = (aValue & 1) === 1;
|
|
var shifted = aValue >> 1;
|
|
return isNegative ? -shifted : shifted;
|
|
};
|
|
var base64 = require_base64();
|
|
var VLQ_BASE_SHIFT = 5;
|
|
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
|
|
var VLQ_BASE_MASK = VLQ_BASE - 1;
|
|
var VLQ_CONTINUATION_BIT = VLQ_BASE;
|
|
exports.encode = function base64VLQ_encode(aValue) {
|
|
var encoded = "";
|
|
var digit;
|
|
var vlq = toVLQSigned(aValue);
|
|
do {
|
|
digit = vlq & VLQ_BASE_MASK;
|
|
vlq >>>= VLQ_BASE_SHIFT;
|
|
if (vlq > 0) {
|
|
digit |= VLQ_CONTINUATION_BIT;
|
|
}
|
|
encoded += base64.encode(digit);
|
|
} while (vlq > 0);
|
|
return encoded;
|
|
};
|
|
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
|
|
var strLen = aStr.length;
|
|
var result = 0;
|
|
var shift = 0;
|
|
var continuation, digit;
|
|
do {
|
|
if (aIndex >= strLen) {
|
|
throw new Error("Expected more digits in base 64 VLQ value.");
|
|
}
|
|
digit = base64.decode(aStr.charCodeAt(aIndex++));
|
|
if (digit === -1) {
|
|
throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
|
|
}
|
|
continuation = !!(digit & VLQ_CONTINUATION_BIT);
|
|
digit &= VLQ_BASE_MASK;
|
|
result = result + (digit << shift);
|
|
shift += VLQ_BASE_SHIFT;
|
|
} while (continuation);
|
|
aOutParam.value = fromVLQSigned(result);
|
|
aOutParam.rest = aIndex;
|
|
};
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/util.js
|
|
var require_util8 = __commonJS((exports) => {
|
|
var getArg = function(aArgs, aName, aDefaultValue) {
|
|
if (aName in aArgs) {
|
|
return aArgs[aName];
|
|
} else if (arguments.length === 3) {
|
|
return aDefaultValue;
|
|
} else {
|
|
throw new Error('"' + aName + '" is a required argument.');
|
|
}
|
|
};
|
|
var urlParse = function(aUrl) {
|
|
var match = aUrl.match(urlRegexp);
|
|
if (!match) {
|
|
return null;
|
|
}
|
|
return {
|
|
scheme: match[1],
|
|
auth: match[2],
|
|
host: match[3],
|
|
port: match[4],
|
|
path: match[5]
|
|
};
|
|
};
|
|
var urlGenerate = function(aParsedUrl) {
|
|
var url2 = "";
|
|
if (aParsedUrl.scheme) {
|
|
url2 += aParsedUrl.scheme + ":";
|
|
}
|
|
url2 += "//";
|
|
if (aParsedUrl.auth) {
|
|
url2 += aParsedUrl.auth + "@";
|
|
}
|
|
if (aParsedUrl.host) {
|
|
url2 += aParsedUrl.host;
|
|
}
|
|
if (aParsedUrl.port) {
|
|
url2 += ":" + aParsedUrl.port;
|
|
}
|
|
if (aParsedUrl.path) {
|
|
url2 += aParsedUrl.path;
|
|
}
|
|
return url2;
|
|
};
|
|
var lruMemoize = function(f) {
|
|
var cache = [];
|
|
return function(input) {
|
|
for (var i = 0;i < cache.length; i++) {
|
|
if (cache[i].input === input) {
|
|
var temp = cache[0];
|
|
cache[0] = cache[i];
|
|
cache[i] = temp;
|
|
return cache[0].result;
|
|
}
|
|
}
|
|
var result = f(input);
|
|
cache.unshift({
|
|
input,
|
|
result
|
|
});
|
|
if (cache.length > MAX_CACHED_INPUTS) {
|
|
cache.pop();
|
|
}
|
|
return result;
|
|
};
|
|
};
|
|
var join = function(aRoot, aPath) {
|
|
if (aRoot === "") {
|
|
aRoot = ".";
|
|
}
|
|
if (aPath === "") {
|
|
aPath = ".";
|
|
}
|
|
var aPathUrl = urlParse(aPath);
|
|
var aRootUrl = urlParse(aRoot);
|
|
if (aRootUrl) {
|
|
aRoot = aRootUrl.path || "/";
|
|
}
|
|
if (aPathUrl && !aPathUrl.scheme) {
|
|
if (aRootUrl) {
|
|
aPathUrl.scheme = aRootUrl.scheme;
|
|
}
|
|
return urlGenerate(aPathUrl);
|
|
}
|
|
if (aPathUrl || aPath.match(dataUrlRegexp)) {
|
|
return aPath;
|
|
}
|
|
if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
|
|
aRootUrl.host = aPath;
|
|
return urlGenerate(aRootUrl);
|
|
}
|
|
var joined = aPath.charAt(0) === "/" ? aPath : normalize(aRoot.replace(/\/+$/, "") + "/" + aPath);
|
|
if (aRootUrl) {
|
|
aRootUrl.path = joined;
|
|
return urlGenerate(aRootUrl);
|
|
}
|
|
return joined;
|
|
};
|
|
var relative = function(aRoot, aPath) {
|
|
if (aRoot === "") {
|
|
aRoot = ".";
|
|
}
|
|
aRoot = aRoot.replace(/\/$/, "");
|
|
var level = 0;
|
|
while (aPath.indexOf(aRoot + "/") !== 0) {
|
|
var index = aRoot.lastIndexOf("/");
|
|
if (index < 0) {
|
|
return aPath;
|
|
}
|
|
aRoot = aRoot.slice(0, index);
|
|
if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
|
|
return aPath;
|
|
}
|
|
++level;
|
|
}
|
|
return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
|
|
};
|
|
var identity = function(s) {
|
|
return s;
|
|
};
|
|
var toSetString = function(aStr) {
|
|
if (isProtoString(aStr)) {
|
|
return "$" + aStr;
|
|
}
|
|
return aStr;
|
|
};
|
|
var fromSetString = function(aStr) {
|
|
if (isProtoString(aStr)) {
|
|
return aStr.slice(1);
|
|
}
|
|
return aStr;
|
|
};
|
|
var isProtoString = function(s) {
|
|
if (!s) {
|
|
return false;
|
|
}
|
|
var length = s.length;
|
|
if (length < 9) {
|
|
return false;
|
|
}
|
|
if (s.charCodeAt(length - 1) !== 95 || s.charCodeAt(length - 2) !== 95 || s.charCodeAt(length - 3) !== 111 || s.charCodeAt(length - 4) !== 116 || s.charCodeAt(length - 5) !== 111 || s.charCodeAt(length - 6) !== 114 || s.charCodeAt(length - 7) !== 112 || s.charCodeAt(length - 8) !== 95 || s.charCodeAt(length - 9) !== 95) {
|
|
return false;
|
|
}
|
|
for (var i = length - 10;i >= 0; i--) {
|
|
if (s.charCodeAt(i) !== 36) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
var compareByOriginalPositions = function(mappingA, mappingB, onlyCompareOriginal) {
|
|
var cmp = strcmp(mappingA.source, mappingB.source);
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0 || onlyCompareOriginal) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
return strcmp(mappingA.name, mappingB.name);
|
|
};
|
|
var compareByOriginalPositionsNoSource = function(mappingA, mappingB, onlyCompareOriginal) {
|
|
var cmp;
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0 || onlyCompareOriginal) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
return strcmp(mappingA.name, mappingB.name);
|
|
};
|
|
var compareByGeneratedPositionsDeflated = function(mappingA, mappingB, onlyCompareGenerated) {
|
|
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0 || onlyCompareGenerated) {
|
|
return cmp;
|
|
}
|
|
cmp = strcmp(mappingA.source, mappingB.source);
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
return strcmp(mappingA.name, mappingB.name);
|
|
};
|
|
var compareByGeneratedPositionsDeflatedNoLine = function(mappingA, mappingB, onlyCompareGenerated) {
|
|
var cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0 || onlyCompareGenerated) {
|
|
return cmp;
|
|
}
|
|
cmp = strcmp(mappingA.source, mappingB.source);
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
return strcmp(mappingA.name, mappingB.name);
|
|
};
|
|
var strcmp = function(aStr1, aStr2) {
|
|
if (aStr1 === aStr2) {
|
|
return 0;
|
|
}
|
|
if (aStr1 === null) {
|
|
return 1;
|
|
}
|
|
if (aStr2 === null) {
|
|
return -1;
|
|
}
|
|
if (aStr1 > aStr2) {
|
|
return 1;
|
|
}
|
|
return -1;
|
|
};
|
|
var compareByGeneratedPositionsInflated = function(mappingA, mappingB) {
|
|
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = strcmp(mappingA.source, mappingB.source);
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
return strcmp(mappingA.name, mappingB.name);
|
|
};
|
|
var parseSourceMapInput = function(str) {
|
|
return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ""));
|
|
};
|
|
var computeSourceURL = function(sourceRoot, sourceURL, sourceMapURL) {
|
|
sourceURL = sourceURL || "";
|
|
if (sourceRoot) {
|
|
if (sourceRoot[sourceRoot.length - 1] !== "/" && sourceURL[0] !== "/") {
|
|
sourceRoot += "/";
|
|
}
|
|
sourceURL = sourceRoot + sourceURL;
|
|
}
|
|
if (sourceMapURL) {
|
|
var parsed = urlParse(sourceMapURL);
|
|
if (!parsed) {
|
|
throw new Error("sourceMapURL could not be parsed");
|
|
}
|
|
if (parsed.path) {
|
|
var index = parsed.path.lastIndexOf("/");
|
|
if (index >= 0) {
|
|
parsed.path = parsed.path.substring(0, index + 1);
|
|
}
|
|
}
|
|
sourceURL = join(urlGenerate(parsed), sourceURL);
|
|
}
|
|
return normalize(sourceURL);
|
|
};
|
|
exports.getArg = getArg;
|
|
var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
|
|
var dataUrlRegexp = /^data:.+\,.+$/;
|
|
exports.urlParse = urlParse;
|
|
exports.urlGenerate = urlGenerate;
|
|
var MAX_CACHED_INPUTS = 32;
|
|
var normalize = lruMemoize(function normalize(aPath) {
|
|
var path = aPath;
|
|
var url2 = urlParse(aPath);
|
|
if (url2) {
|
|
if (!url2.path) {
|
|
return aPath;
|
|
}
|
|
path = url2.path;
|
|
}
|
|
var isAbsolute = exports.isAbsolute(path);
|
|
var parts = [];
|
|
var start = 0;
|
|
var i = 0;
|
|
while (true) {
|
|
start = i;
|
|
i = path.indexOf("/", start);
|
|
if (i === -1) {
|
|
parts.push(path.slice(start));
|
|
break;
|
|
} else {
|
|
parts.push(path.slice(start, i));
|
|
while (i < path.length && path[i] === "/") {
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
for (var part, up = 0, i = parts.length - 1;i >= 0; i--) {
|
|
part = parts[i];
|
|
if (part === ".") {
|
|
parts.splice(i, 1);
|
|
} else if (part === "..") {
|
|
up++;
|
|
} else if (up > 0) {
|
|
if (part === "") {
|
|
parts.splice(i + 1, up);
|
|
up = 0;
|
|
} else {
|
|
parts.splice(i, 2);
|
|
up--;
|
|
}
|
|
}
|
|
}
|
|
path = parts.join("/");
|
|
if (path === "") {
|
|
path = isAbsolute ? "/" : ".";
|
|
}
|
|
if (url2) {
|
|
url2.path = path;
|
|
return urlGenerate(url2);
|
|
}
|
|
return path;
|
|
});
|
|
exports.normalize = normalize;
|
|
exports.join = join;
|
|
exports.isAbsolute = function(aPath) {
|
|
return aPath.charAt(0) === "/" || urlRegexp.test(aPath);
|
|
};
|
|
exports.relative = relative;
|
|
var supportsNullProto = function() {
|
|
var obj = Object.create(null);
|
|
return !("__proto__" in obj);
|
|
}();
|
|
exports.toSetString = supportsNullProto ? identity : toSetString;
|
|
exports.fromSetString = supportsNullProto ? identity : fromSetString;
|
|
exports.compareByOriginalPositions = compareByOriginalPositions;
|
|
exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;
|
|
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
|
|
exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;
|
|
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
|
|
exports.parseSourceMapInput = parseSourceMapInput;
|
|
exports.computeSourceURL = computeSourceURL;
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/array-set.js
|
|
var require_array_set = __commonJS((exports) => {
|
|
var ArraySet = function() {
|
|
this._array = [];
|
|
this._set = hasNativeMap ? new Map : Object.create(null);
|
|
};
|
|
var util2 = require_util8();
|
|
var has = Object.prototype.hasOwnProperty;
|
|
var hasNativeMap = typeof Map !== "undefined";
|
|
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
|
|
var set = new ArraySet;
|
|
for (var i = 0, len = aArray.length;i < len; i++) {
|
|
set.add(aArray[i], aAllowDuplicates);
|
|
}
|
|
return set;
|
|
};
|
|
ArraySet.prototype.size = function ArraySet_size() {
|
|
return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
|
|
};
|
|
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
|
|
var sStr = hasNativeMap ? aStr : util2.toSetString(aStr);
|
|
var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
|
|
var idx = this._array.length;
|
|
if (!isDuplicate || aAllowDuplicates) {
|
|
this._array.push(aStr);
|
|
}
|
|
if (!isDuplicate) {
|
|
if (hasNativeMap) {
|
|
this._set.set(aStr, idx);
|
|
} else {
|
|
this._set[sStr] = idx;
|
|
}
|
|
}
|
|
};
|
|
ArraySet.prototype.has = function ArraySet_has(aStr) {
|
|
if (hasNativeMap) {
|
|
return this._set.has(aStr);
|
|
} else {
|
|
var sStr = util2.toSetString(aStr);
|
|
return has.call(this._set, sStr);
|
|
}
|
|
};
|
|
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
|
|
if (hasNativeMap) {
|
|
var idx = this._set.get(aStr);
|
|
if (idx >= 0) {
|
|
return idx;
|
|
}
|
|
} else {
|
|
var sStr = util2.toSetString(aStr);
|
|
if (has.call(this._set, sStr)) {
|
|
return this._set[sStr];
|
|
}
|
|
}
|
|
throw new Error('"' + aStr + '" is not in the set.');
|
|
};
|
|
ArraySet.prototype.at = function ArraySet_at(aIdx) {
|
|
if (aIdx >= 0 && aIdx < this._array.length) {
|
|
return this._array[aIdx];
|
|
}
|
|
throw new Error("No element indexed by " + aIdx);
|
|
};
|
|
ArraySet.prototype.toArray = function ArraySet_toArray() {
|
|
return this._array.slice();
|
|
};
|
|
exports.ArraySet = ArraySet;
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/mapping-list.js
|
|
var require_mapping_list = __commonJS((exports) => {
|
|
var generatedPositionAfter = function(mappingA, mappingB) {
|
|
var lineA = mappingA.generatedLine;
|
|
var lineB = mappingB.generatedLine;
|
|
var columnA = mappingA.generatedColumn;
|
|
var columnB = mappingB.generatedColumn;
|
|
return lineB > lineA || lineB == lineA && columnB >= columnA || util2.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
|
|
};
|
|
var MappingList = function() {
|
|
this._array = [];
|
|
this._sorted = true;
|
|
this._last = { generatedLine: -1, generatedColumn: 0 };
|
|
};
|
|
var util2 = require_util8();
|
|
MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {
|
|
this._array.forEach(aCallback, aThisArg);
|
|
};
|
|
MappingList.prototype.add = function MappingList_add(aMapping) {
|
|
if (generatedPositionAfter(this._last, aMapping)) {
|
|
this._last = aMapping;
|
|
this._array.push(aMapping);
|
|
} else {
|
|
this._sorted = false;
|
|
this._array.push(aMapping);
|
|
}
|
|
};
|
|
MappingList.prototype.toArray = function MappingList_toArray() {
|
|
if (!this._sorted) {
|
|
this._array.sort(util2.compareByGeneratedPositionsInflated);
|
|
this._sorted = true;
|
|
}
|
|
return this._array;
|
|
};
|
|
exports.MappingList = MappingList;
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/source-map-generator.js
|
|
var require_source_map_generator = __commonJS((exports) => {
|
|
var SourceMapGenerator = function(aArgs) {
|
|
if (!aArgs) {
|
|
aArgs = {};
|
|
}
|
|
this._file = util2.getArg(aArgs, "file", null);
|
|
this._sourceRoot = util2.getArg(aArgs, "sourceRoot", null);
|
|
this._skipValidation = util2.getArg(aArgs, "skipValidation", false);
|
|
this._ignoreInvalidMapping = util2.getArg(aArgs, "ignoreInvalidMapping", false);
|
|
this._sources = new ArraySet;
|
|
this._names = new ArraySet;
|
|
this._mappings = new MappingList;
|
|
this._sourcesContents = null;
|
|
};
|
|
var base64VLQ = require_base64_vlq();
|
|
var util2 = require_util8();
|
|
var ArraySet = require_array_set().ArraySet;
|
|
var MappingList = require_mapping_list().MappingList;
|
|
SourceMapGenerator.prototype._version = 3;
|
|
SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) {
|
|
var sourceRoot = aSourceMapConsumer.sourceRoot;
|
|
var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {
|
|
file: aSourceMapConsumer.file,
|
|
sourceRoot
|
|
}));
|
|
aSourceMapConsumer.eachMapping(function(mapping) {
|
|
var newMapping = {
|
|
generated: {
|
|
line: mapping.generatedLine,
|
|
column: mapping.generatedColumn
|
|
}
|
|
};
|
|
if (mapping.source != null) {
|
|
newMapping.source = mapping.source;
|
|
if (sourceRoot != null) {
|
|
newMapping.source = util2.relative(sourceRoot, newMapping.source);
|
|
}
|
|
newMapping.original = {
|
|
line: mapping.originalLine,
|
|
column: mapping.originalColumn
|
|
};
|
|
if (mapping.name != null) {
|
|
newMapping.name = mapping.name;
|
|
}
|
|
}
|
|
generator.addMapping(newMapping);
|
|
});
|
|
aSourceMapConsumer.sources.forEach(function(sourceFile) {
|
|
var sourceRelative = sourceFile;
|
|
if (sourceRoot !== null) {
|
|
sourceRelative = util2.relative(sourceRoot, sourceFile);
|
|
}
|
|
if (!generator._sources.has(sourceRelative)) {
|
|
generator._sources.add(sourceRelative);
|
|
}
|
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
if (content != null) {
|
|
generator.setSourceContent(sourceFile, content);
|
|
}
|
|
});
|
|
return generator;
|
|
};
|
|
SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {
|
|
var generated = util2.getArg(aArgs, "generated");
|
|
var original = util2.getArg(aArgs, "original", null);
|
|
var source = util2.getArg(aArgs, "source", null);
|
|
var name = util2.getArg(aArgs, "name", null);
|
|
if (!this._skipValidation) {
|
|
if (this._validateMapping(generated, original, source, name) === false) {
|
|
return;
|
|
}
|
|
}
|
|
if (source != null) {
|
|
source = String(source);
|
|
if (!this._sources.has(source)) {
|
|
this._sources.add(source);
|
|
}
|
|
}
|
|
if (name != null) {
|
|
name = String(name);
|
|
if (!this._names.has(name)) {
|
|
this._names.add(name);
|
|
}
|
|
}
|
|
this._mappings.add({
|
|
generatedLine: generated.line,
|
|
generatedColumn: generated.column,
|
|
originalLine: original != null && original.line,
|
|
originalColumn: original != null && original.column,
|
|
source,
|
|
name
|
|
});
|
|
};
|
|
SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
|
|
var source = aSourceFile;
|
|
if (this._sourceRoot != null) {
|
|
source = util2.relative(this._sourceRoot, source);
|
|
}
|
|
if (aSourceContent != null) {
|
|
if (!this._sourcesContents) {
|
|
this._sourcesContents = Object.create(null);
|
|
}
|
|
this._sourcesContents[util2.toSetString(source)] = aSourceContent;
|
|
} else if (this._sourcesContents) {
|
|
delete this._sourcesContents[util2.toSetString(source)];
|
|
if (Object.keys(this._sourcesContents).length === 0) {
|
|
this._sourcesContents = null;
|
|
}
|
|
}
|
|
};
|
|
SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
|
|
var sourceFile = aSourceFile;
|
|
if (aSourceFile == null) {
|
|
if (aSourceMapConsumer.file == null) {
|
|
throw new Error("SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, " + 'or the source map\'s "file" property. Both were omitted.');
|
|
}
|
|
sourceFile = aSourceMapConsumer.file;
|
|
}
|
|
var sourceRoot = this._sourceRoot;
|
|
if (sourceRoot != null) {
|
|
sourceFile = util2.relative(sourceRoot, sourceFile);
|
|
}
|
|
var newSources = new ArraySet;
|
|
var newNames = new ArraySet;
|
|
this._mappings.unsortedForEach(function(mapping) {
|
|
if (mapping.source === sourceFile && mapping.originalLine != null) {
|
|
var original = aSourceMapConsumer.originalPositionFor({
|
|
line: mapping.originalLine,
|
|
column: mapping.originalColumn
|
|
});
|
|
if (original.source != null) {
|
|
mapping.source = original.source;
|
|
if (aSourceMapPath != null) {
|
|
mapping.source = util2.join(aSourceMapPath, mapping.source);
|
|
}
|
|
if (sourceRoot != null) {
|
|
mapping.source = util2.relative(sourceRoot, mapping.source);
|
|
}
|
|
mapping.originalLine = original.line;
|
|
mapping.originalColumn = original.column;
|
|
if (original.name != null) {
|
|
mapping.name = original.name;
|
|
}
|
|
}
|
|
}
|
|
var source = mapping.source;
|
|
if (source != null && !newSources.has(source)) {
|
|
newSources.add(source);
|
|
}
|
|
var name = mapping.name;
|
|
if (name != null && !newNames.has(name)) {
|
|
newNames.add(name);
|
|
}
|
|
}, this);
|
|
this._sources = newSources;
|
|
this._names = newNames;
|
|
aSourceMapConsumer.sources.forEach(function(sourceFile2) {
|
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile2);
|
|
if (content != null) {
|
|
if (aSourceMapPath != null) {
|
|
sourceFile2 = util2.join(aSourceMapPath, sourceFile2);
|
|
}
|
|
if (sourceRoot != null) {
|
|
sourceFile2 = util2.relative(sourceRoot, sourceFile2);
|
|
}
|
|
this.setSourceContent(sourceFile2, content);
|
|
}
|
|
}, this);
|
|
};
|
|
SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {
|
|
if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") {
|
|
var message = "original.line and original.column are not numbers -- you probably meant to omit " + "the original mapping entirely and only map the generated position. If so, pass " + "null for the original mapping instead of an object with empty or null values.";
|
|
if (this._ignoreInvalidMapping) {
|
|
if (typeof console !== "undefined" && console.warn) {
|
|
console.warn(message);
|
|
}
|
|
return false;
|
|
} else {
|
|
throw new Error(message);
|
|
}
|
|
}
|
|
if (aGenerated && "line" in aGenerated && "column" in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {
|
|
return;
|
|
} else if (aGenerated && "line" in aGenerated && "column" in aGenerated && aOriginal && "line" in aOriginal && "column" in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {
|
|
return;
|
|
} else {
|
|
var message = "Invalid mapping: " + JSON.stringify({
|
|
generated: aGenerated,
|
|
source: aSource,
|
|
original: aOriginal,
|
|
name: aName
|
|
});
|
|
if (this._ignoreInvalidMapping) {
|
|
if (typeof console !== "undefined" && console.warn) {
|
|
console.warn(message);
|
|
}
|
|
return false;
|
|
} else {
|
|
throw new Error(message);
|
|
}
|
|
}
|
|
};
|
|
SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {
|
|
var previousGeneratedColumn = 0;
|
|
var previousGeneratedLine = 1;
|
|
var previousOriginalColumn = 0;
|
|
var previousOriginalLine = 0;
|
|
var previousName = 0;
|
|
var previousSource = 0;
|
|
var result = "";
|
|
var next;
|
|
var mapping;
|
|
var nameIdx;
|
|
var sourceIdx;
|
|
var mappings = this._mappings.toArray();
|
|
for (var i = 0, len = mappings.length;i < len; i++) {
|
|
mapping = mappings[i];
|
|
next = "";
|
|
if (mapping.generatedLine !== previousGeneratedLine) {
|
|
previousGeneratedColumn = 0;
|
|
while (mapping.generatedLine !== previousGeneratedLine) {
|
|
next += ";";
|
|
previousGeneratedLine++;
|
|
}
|
|
} else {
|
|
if (i > 0) {
|
|
if (!util2.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
|
|
continue;
|
|
}
|
|
next += ",";
|
|
}
|
|
}
|
|
next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);
|
|
previousGeneratedColumn = mapping.generatedColumn;
|
|
if (mapping.source != null) {
|
|
sourceIdx = this._sources.indexOf(mapping.source);
|
|
next += base64VLQ.encode(sourceIdx - previousSource);
|
|
previousSource = sourceIdx;
|
|
next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);
|
|
previousOriginalLine = mapping.originalLine - 1;
|
|
next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);
|
|
previousOriginalColumn = mapping.originalColumn;
|
|
if (mapping.name != null) {
|
|
nameIdx = this._names.indexOf(mapping.name);
|
|
next += base64VLQ.encode(nameIdx - previousName);
|
|
previousName = nameIdx;
|
|
}
|
|
}
|
|
result += next;
|
|
}
|
|
return result;
|
|
};
|
|
SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
|
|
return aSources.map(function(source) {
|
|
if (!this._sourcesContents) {
|
|
return null;
|
|
}
|
|
if (aSourceRoot != null) {
|
|
source = util2.relative(aSourceRoot, source);
|
|
}
|
|
var key = util2.toSetString(source);
|
|
return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;
|
|
}, this);
|
|
};
|
|
SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {
|
|
var map = {
|
|
version: this._version,
|
|
sources: this._sources.toArray(),
|
|
names: this._names.toArray(),
|
|
mappings: this._serializeMappings()
|
|
};
|
|
if (this._file != null) {
|
|
map.file = this._file;
|
|
}
|
|
if (this._sourceRoot != null) {
|
|
map.sourceRoot = this._sourceRoot;
|
|
}
|
|
if (this._sourcesContents) {
|
|
map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
|
|
}
|
|
return map;
|
|
};
|
|
SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {
|
|
return JSON.stringify(this.toJSON());
|
|
};
|
|
exports.SourceMapGenerator = SourceMapGenerator;
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/binary-search.js
|
|
var require_binary_search = __commonJS((exports) => {
|
|
var recursiveSearch = function(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
|
|
var mid = Math.floor((aHigh - aLow) / 2) + aLow;
|
|
var cmp = aCompare(aNeedle, aHaystack[mid], true);
|
|
if (cmp === 0) {
|
|
return mid;
|
|
} else if (cmp > 0) {
|
|
if (aHigh - mid > 1) {
|
|
return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
|
|
}
|
|
if (aBias == exports.LEAST_UPPER_BOUND) {
|
|
return aHigh < aHaystack.length ? aHigh : -1;
|
|
} else {
|
|
return mid;
|
|
}
|
|
} else {
|
|
if (mid - aLow > 1) {
|
|
return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
|
|
}
|
|
if (aBias == exports.LEAST_UPPER_BOUND) {
|
|
return mid;
|
|
} else {
|
|
return aLow < 0 ? -1 : aLow;
|
|
}
|
|
}
|
|
};
|
|
exports.GREATEST_LOWER_BOUND = 1;
|
|
exports.LEAST_UPPER_BOUND = 2;
|
|
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
|
|
if (aHaystack.length === 0) {
|
|
return -1;
|
|
}
|
|
var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND);
|
|
if (index < 0) {
|
|
return -1;
|
|
}
|
|
while (index - 1 >= 0) {
|
|
if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
|
|
break;
|
|
}
|
|
--index;
|
|
}
|
|
return index;
|
|
};
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/quick-sort.js
|
|
var require_quick_sort = __commonJS((exports) => {
|
|
var SortTemplate = function(comparator) {
|
|
function swap(ary, x, y) {
|
|
var temp = ary[x];
|
|
ary[x] = ary[y];
|
|
ary[y] = temp;
|
|
}
|
|
function randomIntInRange(low, high) {
|
|
return Math.round(low + Math.random() * (high - low));
|
|
}
|
|
function doQuickSort(ary, comparator2, p, r) {
|
|
if (p < r) {
|
|
var pivotIndex = randomIntInRange(p, r);
|
|
var i = p - 1;
|
|
swap(ary, pivotIndex, r);
|
|
var pivot = ary[r];
|
|
for (var j = p;j < r; j++) {
|
|
if (comparator2(ary[j], pivot, false) <= 0) {
|
|
i += 1;
|
|
swap(ary, i, j);
|
|
}
|
|
}
|
|
swap(ary, i + 1, j);
|
|
var q = i + 1;
|
|
doQuickSort(ary, comparator2, p, q - 1);
|
|
doQuickSort(ary, comparator2, q + 1, r);
|
|
}
|
|
}
|
|
return doQuickSort;
|
|
};
|
|
var cloneSort = function(comparator) {
|
|
let template = SortTemplate.toString();
|
|
let templateFn = new Function(`return ${template}`)();
|
|
return templateFn(comparator);
|
|
};
|
|
var sortCache = new WeakMap;
|
|
exports.quickSort = function(ary, comparator, start = 0) {
|
|
let doQuickSort = sortCache.get(comparator);
|
|
if (doQuickSort === undefined) {
|
|
doQuickSort = cloneSort(comparator);
|
|
sortCache.set(comparator, doQuickSort);
|
|
}
|
|
doQuickSort(ary, comparator, start, ary.length - 1);
|
|
};
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/source-map-consumer.js
|
|
var require_source_map_consumer = __commonJS((exports) => {
|
|
var SourceMapConsumer = function(aSourceMap, aSourceMapURL) {
|
|
var sourceMap = aSourceMap;
|
|
if (typeof aSourceMap === "string") {
|
|
sourceMap = util2.parseSourceMapInput(aSourceMap);
|
|
}
|
|
return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
|
|
};
|
|
var BasicSourceMapConsumer = function(aSourceMap, aSourceMapURL) {
|
|
var sourceMap = aSourceMap;
|
|
if (typeof aSourceMap === "string") {
|
|
sourceMap = util2.parseSourceMapInput(aSourceMap);
|
|
}
|
|
var version = util2.getArg(sourceMap, "version");
|
|
var sources = util2.getArg(sourceMap, "sources");
|
|
var names = util2.getArg(sourceMap, "names", []);
|
|
var sourceRoot = util2.getArg(sourceMap, "sourceRoot", null);
|
|
var sourcesContent = util2.getArg(sourceMap, "sourcesContent", null);
|
|
var mappings = util2.getArg(sourceMap, "mappings");
|
|
var file = util2.getArg(sourceMap, "file", null);
|
|
if (version != this._version) {
|
|
throw new Error("Unsupported version: " + version);
|
|
}
|
|
if (sourceRoot) {
|
|
sourceRoot = util2.normalize(sourceRoot);
|
|
}
|
|
sources = sources.map(String).map(util2.normalize).map(function(source) {
|
|
return sourceRoot && util2.isAbsolute(sourceRoot) && util2.isAbsolute(source) ? util2.relative(sourceRoot, source) : source;
|
|
});
|
|
this._names = ArraySet.fromArray(names.map(String), true);
|
|
this._sources = ArraySet.fromArray(sources, true);
|
|
this._absoluteSources = this._sources.toArray().map(function(s) {
|
|
return util2.computeSourceURL(sourceRoot, s, aSourceMapURL);
|
|
});
|
|
this.sourceRoot = sourceRoot;
|
|
this.sourcesContent = sourcesContent;
|
|
this._mappings = mappings;
|
|
this._sourceMapURL = aSourceMapURL;
|
|
this.file = file;
|
|
};
|
|
var Mapping = function() {
|
|
this.generatedLine = 0;
|
|
this.generatedColumn = 0;
|
|
this.source = null;
|
|
this.originalLine = null;
|
|
this.originalColumn = null;
|
|
this.name = null;
|
|
};
|
|
var sortGenerated = function(array, start) {
|
|
let l = array.length;
|
|
let n = array.length - start;
|
|
if (n <= 1) {
|
|
return;
|
|
} else if (n == 2) {
|
|
let a = array[start];
|
|
let b = array[start + 1];
|
|
if (compareGenerated(a, b) > 0) {
|
|
array[start] = b;
|
|
array[start + 1] = a;
|
|
}
|
|
} else if (n < 20) {
|
|
for (let i = start;i < l; i++) {
|
|
for (let j = i;j > start; j--) {
|
|
let a = array[j - 1];
|
|
let b = array[j];
|
|
if (compareGenerated(a, b) <= 0) {
|
|
break;
|
|
}
|
|
array[j - 1] = b;
|
|
array[j] = a;
|
|
}
|
|
}
|
|
} else {
|
|
quickSort(array, compareGenerated, start);
|
|
}
|
|
};
|
|
var IndexedSourceMapConsumer = function(aSourceMap, aSourceMapURL) {
|
|
var sourceMap = aSourceMap;
|
|
if (typeof aSourceMap === "string") {
|
|
sourceMap = util2.parseSourceMapInput(aSourceMap);
|
|
}
|
|
var version = util2.getArg(sourceMap, "version");
|
|
var sections = util2.getArg(sourceMap, "sections");
|
|
if (version != this._version) {
|
|
throw new Error("Unsupported version: " + version);
|
|
}
|
|
this._sources = new ArraySet;
|
|
this._names = new ArraySet;
|
|
var lastOffset = {
|
|
line: -1,
|
|
column: 0
|
|
};
|
|
this._sections = sections.map(function(s) {
|
|
if (s.url) {
|
|
throw new Error("Support for url field in sections not implemented.");
|
|
}
|
|
var offset = util2.getArg(s, "offset");
|
|
var offsetLine = util2.getArg(offset, "line");
|
|
var offsetColumn = util2.getArg(offset, "column");
|
|
if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) {
|
|
throw new Error("Section offsets must be ordered and non-overlapping.");
|
|
}
|
|
lastOffset = offset;
|
|
return {
|
|
generatedOffset: {
|
|
generatedLine: offsetLine + 1,
|
|
generatedColumn: offsetColumn + 1
|
|
},
|
|
consumer: new SourceMapConsumer(util2.getArg(s, "map"), aSourceMapURL)
|
|
};
|
|
});
|
|
};
|
|
var util2 = require_util8();
|
|
var binarySearch = require_binary_search();
|
|
var ArraySet = require_array_set().ArraySet;
|
|
var base64VLQ = require_base64_vlq();
|
|
var quickSort = require_quick_sort().quickSort;
|
|
SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
|
|
return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
|
|
};
|
|
SourceMapConsumer.prototype._version = 3;
|
|
SourceMapConsumer.prototype.__generatedMappings = null;
|
|
Object.defineProperty(SourceMapConsumer.prototype, "_generatedMappings", {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: function() {
|
|
if (!this.__generatedMappings) {
|
|
this._parseMappings(this._mappings, this.sourceRoot);
|
|
}
|
|
return this.__generatedMappings;
|
|
}
|
|
});
|
|
SourceMapConsumer.prototype.__originalMappings = null;
|
|
Object.defineProperty(SourceMapConsumer.prototype, "_originalMappings", {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: function() {
|
|
if (!this.__originalMappings) {
|
|
this._parseMappings(this._mappings, this.sourceRoot);
|
|
}
|
|
return this.__originalMappings;
|
|
}
|
|
});
|
|
SourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
|
|
var c = aStr.charAt(index);
|
|
return c === ";" || c === ",";
|
|
};
|
|
SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
|
|
throw new Error("Subclasses must implement _parseMappings");
|
|
};
|
|
SourceMapConsumer.GENERATED_ORDER = 1;
|
|
SourceMapConsumer.ORIGINAL_ORDER = 2;
|
|
SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
|
|
SourceMapConsumer.LEAST_UPPER_BOUND = 2;
|
|
SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
|
|
var context = aContext || null;
|
|
var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
|
|
var mappings;
|
|
switch (order) {
|
|
case SourceMapConsumer.GENERATED_ORDER:
|
|
mappings = this._generatedMappings;
|
|
break;
|
|
case SourceMapConsumer.ORIGINAL_ORDER:
|
|
mappings = this._originalMappings;
|
|
break;
|
|
default:
|
|
throw new Error("Unknown order of iteration.");
|
|
}
|
|
var sourceRoot = this.sourceRoot;
|
|
var boundCallback = aCallback.bind(context);
|
|
var names = this._names;
|
|
var sources = this._sources;
|
|
var sourceMapURL = this._sourceMapURL;
|
|
for (var i = 0, n = mappings.length;i < n; i++) {
|
|
var mapping = mappings[i];
|
|
var source = mapping.source === null ? null : sources.at(mapping.source);
|
|
source = util2.computeSourceURL(sourceRoot, source, sourceMapURL);
|
|
boundCallback({
|
|
source,
|
|
generatedLine: mapping.generatedLine,
|
|
generatedColumn: mapping.generatedColumn,
|
|
originalLine: mapping.originalLine,
|
|
originalColumn: mapping.originalColumn,
|
|
name: mapping.name === null ? null : names.at(mapping.name)
|
|
});
|
|
}
|
|
};
|
|
SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
|
|
var line = util2.getArg(aArgs, "line");
|
|
var needle = {
|
|
source: util2.getArg(aArgs, "source"),
|
|
originalLine: line,
|
|
originalColumn: util2.getArg(aArgs, "column", 0)
|
|
};
|
|
needle.source = this._findSourceIndex(needle.source);
|
|
if (needle.source < 0) {
|
|
return [];
|
|
}
|
|
var mappings = [];
|
|
var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util2.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND);
|
|
if (index >= 0) {
|
|
var mapping = this._originalMappings[index];
|
|
if (aArgs.column === undefined) {
|
|
var originalLine = mapping.originalLine;
|
|
while (mapping && mapping.originalLine === originalLine) {
|
|
mappings.push({
|
|
line: util2.getArg(mapping, "generatedLine", null),
|
|
column: util2.getArg(mapping, "generatedColumn", null),
|
|
lastColumn: util2.getArg(mapping, "lastGeneratedColumn", null)
|
|
});
|
|
mapping = this._originalMappings[++index];
|
|
}
|
|
} else {
|
|
var originalColumn = mapping.originalColumn;
|
|
while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) {
|
|
mappings.push({
|
|
line: util2.getArg(mapping, "generatedLine", null),
|
|
column: util2.getArg(mapping, "generatedColumn", null),
|
|
lastColumn: util2.getArg(mapping, "lastGeneratedColumn", null)
|
|
});
|
|
mapping = this._originalMappings[++index];
|
|
}
|
|
}
|
|
}
|
|
return mappings;
|
|
};
|
|
exports.SourceMapConsumer = SourceMapConsumer;
|
|
BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
|
|
BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
|
|
BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
|
|
var relativeSource = aSource;
|
|
if (this.sourceRoot != null) {
|
|
relativeSource = util2.relative(this.sourceRoot, relativeSource);
|
|
}
|
|
if (this._sources.has(relativeSource)) {
|
|
return this._sources.indexOf(relativeSource);
|
|
}
|
|
var i;
|
|
for (i = 0;i < this._absoluteSources.length; ++i) {
|
|
if (this._absoluteSources[i] == aSource) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
BasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
|
|
var smc = Object.create(BasicSourceMapConsumer.prototype);
|
|
var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
|
|
var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
|
|
smc.sourceRoot = aSourceMap._sourceRoot;
|
|
smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);
|
|
smc.file = aSourceMap._file;
|
|
smc._sourceMapURL = aSourceMapURL;
|
|
smc._absoluteSources = smc._sources.toArray().map(function(s) {
|
|
return util2.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
|
|
});
|
|
var generatedMappings = aSourceMap._mappings.toArray().slice();
|
|
var destGeneratedMappings = smc.__generatedMappings = [];
|
|
var destOriginalMappings = smc.__originalMappings = [];
|
|
for (var i = 0, length = generatedMappings.length;i < length; i++) {
|
|
var srcMapping = generatedMappings[i];
|
|
var destMapping = new Mapping;
|
|
destMapping.generatedLine = srcMapping.generatedLine;
|
|
destMapping.generatedColumn = srcMapping.generatedColumn;
|
|
if (srcMapping.source) {
|
|
destMapping.source = sources.indexOf(srcMapping.source);
|
|
destMapping.originalLine = srcMapping.originalLine;
|
|
destMapping.originalColumn = srcMapping.originalColumn;
|
|
if (srcMapping.name) {
|
|
destMapping.name = names.indexOf(srcMapping.name);
|
|
}
|
|
destOriginalMappings.push(destMapping);
|
|
}
|
|
destGeneratedMappings.push(destMapping);
|
|
}
|
|
quickSort(smc.__originalMappings, util2.compareByOriginalPositions);
|
|
return smc;
|
|
};
|
|
BasicSourceMapConsumer.prototype._version = 3;
|
|
Object.defineProperty(BasicSourceMapConsumer.prototype, "sources", {
|
|
get: function() {
|
|
return this._absoluteSources.slice();
|
|
}
|
|
});
|
|
var compareGenerated = util2.compareByGeneratedPositionsDeflatedNoLine;
|
|
BasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
|
|
var generatedLine = 1;
|
|
var previousGeneratedColumn = 0;
|
|
var previousOriginalLine = 0;
|
|
var previousOriginalColumn = 0;
|
|
var previousSource = 0;
|
|
var previousName = 0;
|
|
var length = aStr.length;
|
|
var index = 0;
|
|
var cachedSegments = {};
|
|
var temp = {};
|
|
var originalMappings = [];
|
|
var generatedMappings = [];
|
|
var mapping, str, segment, end, value;
|
|
let subarrayStart = 0;
|
|
while (index < length) {
|
|
if (aStr.charAt(index) === ";") {
|
|
generatedLine++;
|
|
index++;
|
|
previousGeneratedColumn = 0;
|
|
sortGenerated(generatedMappings, subarrayStart);
|
|
subarrayStart = generatedMappings.length;
|
|
} else if (aStr.charAt(index) === ",") {
|
|
index++;
|
|
} else {
|
|
mapping = new Mapping;
|
|
mapping.generatedLine = generatedLine;
|
|
for (end = index;end < length; end++) {
|
|
if (this._charIsMappingSeparator(aStr, end)) {
|
|
break;
|
|
}
|
|
}
|
|
str = aStr.slice(index, end);
|
|
segment = [];
|
|
while (index < end) {
|
|
base64VLQ.decode(aStr, index, temp);
|
|
value = temp.value;
|
|
index = temp.rest;
|
|
segment.push(value);
|
|
}
|
|
if (segment.length === 2) {
|
|
throw new Error("Found a source, but no line and column");
|
|
}
|
|
if (segment.length === 3) {
|
|
throw new Error("Found a source and line, but no column");
|
|
}
|
|
mapping.generatedColumn = previousGeneratedColumn + segment[0];
|
|
previousGeneratedColumn = mapping.generatedColumn;
|
|
if (segment.length > 1) {
|
|
mapping.source = previousSource + segment[1];
|
|
previousSource += segment[1];
|
|
mapping.originalLine = previousOriginalLine + segment[2];
|
|
previousOriginalLine = mapping.originalLine;
|
|
mapping.originalLine += 1;
|
|
mapping.originalColumn = previousOriginalColumn + segment[3];
|
|
previousOriginalColumn = mapping.originalColumn;
|
|
if (segment.length > 4) {
|
|
mapping.name = previousName + segment[4];
|
|
previousName += segment[4];
|
|
}
|
|
}
|
|
generatedMappings.push(mapping);
|
|
if (typeof mapping.originalLine === "number") {
|
|
let currentSource = mapping.source;
|
|
while (originalMappings.length <= currentSource) {
|
|
originalMappings.push(null);
|
|
}
|
|
if (originalMappings[currentSource] === null) {
|
|
originalMappings[currentSource] = [];
|
|
}
|
|
originalMappings[currentSource].push(mapping);
|
|
}
|
|
}
|
|
}
|
|
sortGenerated(generatedMappings, subarrayStart);
|
|
this.__generatedMappings = generatedMappings;
|
|
for (var i = 0;i < originalMappings.length; i++) {
|
|
if (originalMappings[i] != null) {
|
|
quickSort(originalMappings[i], util2.compareByOriginalPositionsNoSource);
|
|
}
|
|
}
|
|
this.__originalMappings = [].concat(...originalMappings);
|
|
};
|
|
BasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) {
|
|
if (aNeedle[aLineName] <= 0) {
|
|
throw new TypeError("Line must be greater than or equal to 1, got " + aNeedle[aLineName]);
|
|
}
|
|
if (aNeedle[aColumnName] < 0) {
|
|
throw new TypeError("Column must be greater than or equal to 0, got " + aNeedle[aColumnName]);
|
|
}
|
|
return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
|
|
};
|
|
BasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {
|
|
for (var index = 0;index < this._generatedMappings.length; ++index) {
|
|
var mapping = this._generatedMappings[index];
|
|
if (index + 1 < this._generatedMappings.length) {
|
|
var nextMapping = this._generatedMappings[index + 1];
|
|
if (mapping.generatedLine === nextMapping.generatedLine) {
|
|
mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
|
|
continue;
|
|
}
|
|
}
|
|
mapping.lastGeneratedColumn = Infinity;
|
|
}
|
|
};
|
|
BasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {
|
|
var needle = {
|
|
generatedLine: util2.getArg(aArgs, "line"),
|
|
generatedColumn: util2.getArg(aArgs, "column")
|
|
};
|
|
var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util2.compareByGeneratedPositionsDeflated, util2.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND));
|
|
if (index >= 0) {
|
|
var mapping = this._generatedMappings[index];
|
|
if (mapping.generatedLine === needle.generatedLine) {
|
|
var source = util2.getArg(mapping, "source", null);
|
|
if (source !== null) {
|
|
source = this._sources.at(source);
|
|
source = util2.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
|
|
}
|
|
var name = util2.getArg(mapping, "name", null);
|
|
if (name !== null) {
|
|
name = this._names.at(name);
|
|
}
|
|
return {
|
|
source,
|
|
line: util2.getArg(mapping, "originalLine", null),
|
|
column: util2.getArg(mapping, "originalColumn", null),
|
|
name
|
|
};
|
|
}
|
|
}
|
|
return {
|
|
source: null,
|
|
line: null,
|
|
column: null,
|
|
name: null
|
|
};
|
|
};
|
|
BasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() {
|
|
if (!this.sourcesContent) {
|
|
return false;
|
|
}
|
|
return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function(sc) {
|
|
return sc == null;
|
|
});
|
|
};
|
|
BasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
|
|
if (!this.sourcesContent) {
|
|
return null;
|
|
}
|
|
var index = this._findSourceIndex(aSource);
|
|
if (index >= 0) {
|
|
return this.sourcesContent[index];
|
|
}
|
|
var relativeSource = aSource;
|
|
if (this.sourceRoot != null) {
|
|
relativeSource = util2.relative(this.sourceRoot, relativeSource);
|
|
}
|
|
var url2;
|
|
if (this.sourceRoot != null && (url2 = util2.urlParse(this.sourceRoot))) {
|
|
var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
|
|
if (url2.scheme == "file" && this._sources.has(fileUriAbsPath)) {
|
|
return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];
|
|
}
|
|
if ((!url2.path || url2.path == "/") && this._sources.has("/" + relativeSource)) {
|
|
return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
|
|
}
|
|
}
|
|
if (nullOnMissing) {
|
|
return null;
|
|
} else {
|
|
throw new Error('"' + relativeSource + '" is not in the SourceMap.');
|
|
}
|
|
};
|
|
BasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {
|
|
var source = util2.getArg(aArgs, "source");
|
|
source = this._findSourceIndex(source);
|
|
if (source < 0) {
|
|
return {
|
|
line: null,
|
|
column: null,
|
|
lastColumn: null
|
|
};
|
|
}
|
|
var needle = {
|
|
source,
|
|
originalLine: util2.getArg(aArgs, "line"),
|
|
originalColumn: util2.getArg(aArgs, "column")
|
|
};
|
|
var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util2.compareByOriginalPositions, util2.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND));
|
|
if (index >= 0) {
|
|
var mapping = this._originalMappings[index];
|
|
if (mapping.source === needle.source) {
|
|
return {
|
|
line: util2.getArg(mapping, "generatedLine", null),
|
|
column: util2.getArg(mapping, "generatedColumn", null),
|
|
lastColumn: util2.getArg(mapping, "lastGeneratedColumn", null)
|
|
};
|
|
}
|
|
}
|
|
return {
|
|
line: null,
|
|
column: null,
|
|
lastColumn: null
|
|
};
|
|
};
|
|
exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
|
|
IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
|
|
IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
|
|
IndexedSourceMapConsumer.prototype._version = 3;
|
|
Object.defineProperty(IndexedSourceMapConsumer.prototype, "sources", {
|
|
get: function() {
|
|
var sources = [];
|
|
for (var i = 0;i < this._sections.length; i++) {
|
|
for (var j = 0;j < this._sections[i].consumer.sources.length; j++) {
|
|
sources.push(this._sections[i].consumer.sources[j]);
|
|
}
|
|
}
|
|
return sources;
|
|
}
|
|
});
|
|
IndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
|
|
var needle = {
|
|
generatedLine: util2.getArg(aArgs, "line"),
|
|
generatedColumn: util2.getArg(aArgs, "column")
|
|
};
|
|
var sectionIndex = binarySearch.search(needle, this._sections, function(needle2, section2) {
|
|
var cmp = needle2.generatedLine - section2.generatedOffset.generatedLine;
|
|
if (cmp) {
|
|
return cmp;
|
|
}
|
|
return needle2.generatedColumn - section2.generatedOffset.generatedColumn;
|
|
});
|
|
var section = this._sections[sectionIndex];
|
|
if (!section) {
|
|
return {
|
|
source: null,
|
|
line: null,
|
|
column: null,
|
|
name: null
|
|
};
|
|
}
|
|
return section.consumer.originalPositionFor({
|
|
line: needle.generatedLine - (section.generatedOffset.generatedLine - 1),
|
|
column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),
|
|
bias: aArgs.bias
|
|
});
|
|
};
|
|
IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() {
|
|
return this._sections.every(function(s) {
|
|
return s.consumer.hasContentsOfAllSources();
|
|
});
|
|
};
|
|
IndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
|
|
for (var i = 0;i < this._sections.length; i++) {
|
|
var section = this._sections[i];
|
|
var content = section.consumer.sourceContentFor(aSource, true);
|
|
if (content || content === "") {
|
|
return content;
|
|
}
|
|
}
|
|
if (nullOnMissing) {
|
|
return null;
|
|
} else {
|
|
throw new Error('"' + aSource + '" is not in the SourceMap.');
|
|
}
|
|
};
|
|
IndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
|
|
for (var i = 0;i < this._sections.length; i++) {
|
|
var section = this._sections[i];
|
|
if (section.consumer._findSourceIndex(util2.getArg(aArgs, "source")) === -1) {
|
|
continue;
|
|
}
|
|
var generatedPosition = section.consumer.generatedPositionFor(aArgs);
|
|
if (generatedPosition) {
|
|
var ret = {
|
|
line: generatedPosition.line + (section.generatedOffset.generatedLine - 1),
|
|
column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0)
|
|
};
|
|
return ret;
|
|
}
|
|
}
|
|
return {
|
|
line: null,
|
|
column: null
|
|
};
|
|
};
|
|
IndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
|
|
this.__generatedMappings = [];
|
|
this.__originalMappings = [];
|
|
for (var i = 0;i < this._sections.length; i++) {
|
|
var section = this._sections[i];
|
|
var sectionMappings = section.consumer._generatedMappings;
|
|
for (var j = 0;j < sectionMappings.length; j++) {
|
|
var mapping = sectionMappings[j];
|
|
var source = section.consumer._sources.at(mapping.source);
|
|
source = util2.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
|
|
this._sources.add(source);
|
|
source = this._sources.indexOf(source);
|
|
var name = null;
|
|
if (mapping.name) {
|
|
name = section.consumer._names.at(mapping.name);
|
|
this._names.add(name);
|
|
name = this._names.indexOf(name);
|
|
}
|
|
var adjustedMapping = {
|
|
source,
|
|
generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1),
|
|
generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),
|
|
originalLine: mapping.originalLine,
|
|
originalColumn: mapping.originalColumn,
|
|
name
|
|
};
|
|
this.__generatedMappings.push(adjustedMapping);
|
|
if (typeof adjustedMapping.originalLine === "number") {
|
|
this.__originalMappings.push(adjustedMapping);
|
|
}
|
|
}
|
|
}
|
|
quickSort(this.__generatedMappings, util2.compareByGeneratedPositionsDeflated);
|
|
quickSort(this.__originalMappings, util2.compareByOriginalPositions);
|
|
};
|
|
exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
|
|
});
|
|
|
|
// node_modules/source-map-js/lib/source-node.js
|
|
var require_source_node = __commonJS((exports) => {
|
|
var SourceNode = function(aLine, aColumn, aSource, aChunks, aName) {
|
|
this.children = [];
|
|
this.sourceContents = {};
|
|
this.line = aLine == null ? null : aLine;
|
|
this.column = aColumn == null ? null : aColumn;
|
|
this.source = aSource == null ? null : aSource;
|
|
this.name = aName == null ? null : aName;
|
|
this[isSourceNode] = true;
|
|
if (aChunks != null)
|
|
this.add(aChunks);
|
|
};
|
|
var SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
|
|
var util2 = require_util8();
|
|
var REGEX_NEWLINE = /(\r?\n)/;
|
|
var NEWLINE_CODE = 10;
|
|
var isSourceNode = "$$$isSourceNode$$$";
|
|
SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
|
|
var node2 = new SourceNode;
|
|
var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
|
|
var remainingLinesIndex = 0;
|
|
var shiftNextLine = function() {
|
|
var lineContents = getNextLine();
|
|
var newLine = getNextLine() || "";
|
|
return lineContents + newLine;
|
|
function getNextLine() {
|
|
return remainingLinesIndex < remainingLines.length ? remainingLines[remainingLinesIndex++] : undefined;
|
|
}
|
|
};
|
|
var lastGeneratedLine = 1, lastGeneratedColumn = 0;
|
|
var lastMapping = null;
|
|
aSourceMapConsumer.eachMapping(function(mapping) {
|
|
if (lastMapping !== null) {
|
|
if (lastGeneratedLine < mapping.generatedLine) {
|
|
addMappingWithCode(lastMapping, shiftNextLine());
|
|
lastGeneratedLine++;
|
|
lastGeneratedColumn = 0;
|
|
} else {
|
|
var nextLine = remainingLines[remainingLinesIndex] || "";
|
|
var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);
|
|
remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);
|
|
lastGeneratedColumn = mapping.generatedColumn;
|
|
addMappingWithCode(lastMapping, code);
|
|
lastMapping = mapping;
|
|
return;
|
|
}
|
|
}
|
|
while (lastGeneratedLine < mapping.generatedLine) {
|
|
node2.add(shiftNextLine());
|
|
lastGeneratedLine++;
|
|
}
|
|
if (lastGeneratedColumn < mapping.generatedColumn) {
|
|
var nextLine = remainingLines[remainingLinesIndex] || "";
|
|
node2.add(nextLine.substr(0, mapping.generatedColumn));
|
|
remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
|
|
lastGeneratedColumn = mapping.generatedColumn;
|
|
}
|
|
lastMapping = mapping;
|
|
}, this);
|
|
if (remainingLinesIndex < remainingLines.length) {
|
|
if (lastMapping) {
|
|
addMappingWithCode(lastMapping, shiftNextLine());
|
|
}
|
|
node2.add(remainingLines.splice(remainingLinesIndex).join(""));
|
|
}
|
|
aSourceMapConsumer.sources.forEach(function(sourceFile) {
|
|
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
if (content != null) {
|
|
if (aRelativePath != null) {
|
|
sourceFile = util2.join(aRelativePath, sourceFile);
|
|
}
|
|
node2.setSourceContent(sourceFile, content);
|
|
}
|
|
});
|
|
return node2;
|
|
function addMappingWithCode(mapping, code) {
|
|
if (mapping === null || mapping.source === undefined) {
|
|
node2.add(code);
|
|
} else {
|
|
var source = aRelativePath ? util2.join(aRelativePath, mapping.source) : mapping.source;
|
|
node2.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name));
|
|
}
|
|
}
|
|
};
|
|
SourceNode.prototype.add = function SourceNode_add(aChunk) {
|
|
if (Array.isArray(aChunk)) {
|
|
aChunk.forEach(function(chunk) {
|
|
this.add(chunk);
|
|
}, this);
|
|
} else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
|
if (aChunk) {
|
|
this.children.push(aChunk);
|
|
}
|
|
} else {
|
|
throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk);
|
|
}
|
|
return this;
|
|
};
|
|
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
|
|
if (Array.isArray(aChunk)) {
|
|
for (var i = aChunk.length - 1;i >= 0; i--) {
|
|
this.prepend(aChunk[i]);
|
|
}
|
|
} else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
|
this.children.unshift(aChunk);
|
|
} else {
|
|
throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk);
|
|
}
|
|
return this;
|
|
};
|
|
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
|
|
var chunk;
|
|
for (var i = 0, len = this.children.length;i < len; i++) {
|
|
chunk = this.children[i];
|
|
if (chunk[isSourceNode]) {
|
|
chunk.walk(aFn);
|
|
} else {
|
|
if (chunk !== "") {
|
|
aFn(chunk, {
|
|
source: this.source,
|
|
line: this.line,
|
|
column: this.column,
|
|
name: this.name
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
SourceNode.prototype.join = function SourceNode_join(aSep) {
|
|
var newChildren;
|
|
var i;
|
|
var len = this.children.length;
|
|
if (len > 0) {
|
|
newChildren = [];
|
|
for (i = 0;i < len - 1; i++) {
|
|
newChildren.push(this.children[i]);
|
|
newChildren.push(aSep);
|
|
}
|
|
newChildren.push(this.children[i]);
|
|
this.children = newChildren;
|
|
}
|
|
return this;
|
|
};
|
|
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
|
|
var lastChild = this.children[this.children.length - 1];
|
|
if (lastChild[isSourceNode]) {
|
|
lastChild.replaceRight(aPattern, aReplacement);
|
|
} else if (typeof lastChild === "string") {
|
|
this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
|
|
} else {
|
|
this.children.push("".replace(aPattern, aReplacement));
|
|
}
|
|
return this;
|
|
};
|
|
SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
|
|
this.sourceContents[util2.toSetString(aSourceFile)] = aSourceContent;
|
|
};
|
|
SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {
|
|
for (var i = 0, len = this.children.length;i < len; i++) {
|
|
if (this.children[i][isSourceNode]) {
|
|
this.children[i].walkSourceContents(aFn);
|
|
}
|
|
}
|
|
var sources = Object.keys(this.sourceContents);
|
|
for (var i = 0, len = sources.length;i < len; i++) {
|
|
aFn(util2.fromSetString(sources[i]), this.sourceContents[sources[i]]);
|
|
}
|
|
};
|
|
SourceNode.prototype.toString = function SourceNode_toString() {
|
|
var str = "";
|
|
this.walk(function(chunk) {
|
|
str += chunk;
|
|
});
|
|
return str;
|
|
};
|
|
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
|
|
var generated = {
|
|
code: "",
|
|
line: 1,
|
|
column: 0
|
|
};
|
|
var map = new SourceMapGenerator(aArgs);
|
|
var sourceMappingActive = false;
|
|
var lastOriginalSource = null;
|
|
var lastOriginalLine = null;
|
|
var lastOriginalColumn = null;
|
|
var lastOriginalName = null;
|
|
this.walk(function(chunk, original) {
|
|
generated.code += chunk;
|
|
if (original.source !== null && original.line !== null && original.column !== null) {
|
|
if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {
|
|
map.addMapping({
|
|
source: original.source,
|
|
original: {
|
|
line: original.line,
|
|
column: original.column
|
|
},
|
|
generated: {
|
|
line: generated.line,
|
|
column: generated.column
|
|
},
|
|
name: original.name
|
|
});
|
|
}
|
|
lastOriginalSource = original.source;
|
|
lastOriginalLine = original.line;
|
|
lastOriginalColumn = original.column;
|
|
lastOriginalName = original.name;
|
|
sourceMappingActive = true;
|
|
} else if (sourceMappingActive) {
|
|
map.addMapping({
|
|
generated: {
|
|
line: generated.line,
|
|
column: generated.column
|
|
}
|
|
});
|
|
lastOriginalSource = null;
|
|
sourceMappingActive = false;
|
|
}
|
|
for (var idx = 0, length = chunk.length;idx < length; idx++) {
|
|
if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
|
|
generated.line++;
|
|
generated.column = 0;
|
|
if (idx + 1 === length) {
|
|
lastOriginalSource = null;
|
|
sourceMappingActive = false;
|
|
} else if (sourceMappingActive) {
|
|
map.addMapping({
|
|
source: original.source,
|
|
original: {
|
|
line: original.line,
|
|
column: original.column
|
|
},
|
|
generated: {
|
|
line: generated.line,
|
|
column: generated.column
|
|
},
|
|
name: original.name
|
|
});
|
|
}
|
|
} else {
|
|
generated.column++;
|
|
}
|
|
}
|
|
});
|
|
this.walkSourceContents(function(sourceFile, sourceContent) {
|
|
map.setSourceContent(sourceFile, sourceContent);
|
|
});
|
|
return { code: generated.code, map };
|
|
};
|
|
exports.SourceNode = SourceNode;
|
|
});
|
|
|
|
// node_modules/source-map-js/source-map.js
|
|
var require_source_map = __commonJS((exports) => {
|
|
exports.SourceMapGenerator = require_source_map_generator().SourceMapGenerator;
|
|
exports.SourceMapConsumer = require_source_map_consumer().SourceMapConsumer;
|
|
exports.SourceNode = require_source_node().SourceNode;
|
|
});
|
|
|
|
// node_modules/nanoid/non-secure/index.cjs
|
|
var require_non_secure = __commonJS((exports, module) => {
|
|
var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
var customAlphabet = (alphabet, defaultSize = 21) => {
|
|
return (size = defaultSize) => {
|
|
let id = "";
|
|
let i = size;
|
|
while (i--) {
|
|
id += alphabet[Math.random() * alphabet.length | 0];
|
|
}
|
|
return id;
|
|
};
|
|
};
|
|
var nanoid = (size = 21) => {
|
|
let id = "";
|
|
let i = size;
|
|
while (i--) {
|
|
id += urlAlphabet[Math.random() * 64 | 0];
|
|
}
|
|
return id;
|
|
};
|
|
module.exports = { nanoid, customAlphabet };
|
|
});
|
|
|
|
// node_modules/postcss/lib/previous-map.js
|
|
var require_previous_map = __commonJS((exports, module) => {
|
|
var fromBase64 = function(str) {
|
|
if (Buffer) {
|
|
return Buffer.from(str, "base64").toString();
|
|
} else {
|
|
return window.atob(str);
|
|
}
|
|
};
|
|
var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
|
|
var { existsSync, readFileSync } = __require("fs");
|
|
var { dirname, join } = __require("path");
|
|
|
|
class PreviousMap {
|
|
constructor(css, opts) {
|
|
if (opts.map === false)
|
|
return;
|
|
this.loadAnnotation(css);
|
|
this.inline = this.startWith(this.annotation, "data:");
|
|
let prev = opts.map ? opts.map.prev : undefined;
|
|
let text = this.loadMap(opts.from, prev);
|
|
if (!this.mapFile && opts.from) {
|
|
this.mapFile = opts.from;
|
|
}
|
|
if (this.mapFile)
|
|
this.root = dirname(this.mapFile);
|
|
if (text)
|
|
this.text = text;
|
|
}
|
|
consumer() {
|
|
if (!this.consumerCache) {
|
|
this.consumerCache = new SourceMapConsumer(this.text);
|
|
}
|
|
return this.consumerCache;
|
|
}
|
|
decodeInline(text) {
|
|
let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/;
|
|
let baseUri = /^data:application\/json;base64,/;
|
|
let charsetUri = /^data:application\/json;charset=utf-?8,/;
|
|
let uri = /^data:application\/json,/;
|
|
if (charsetUri.test(text) || uri.test(text)) {
|
|
return decodeURIComponent(text.substr(RegExp.lastMatch.length));
|
|
}
|
|
if (baseCharsetUri.test(text) || baseUri.test(text)) {
|
|
return fromBase64(text.substr(RegExp.lastMatch.length));
|
|
}
|
|
let encoding = text.match(/data:application\/json;([^,]+),/)[1];
|
|
throw new Error("Unsupported source map encoding " + encoding);
|
|
}
|
|
getAnnotationURL(sourceMapString) {
|
|
return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, "").trim();
|
|
}
|
|
isMap(map) {
|
|
if (typeof map !== "object")
|
|
return false;
|
|
return typeof map.mappings === "string" || typeof map._mappings === "string" || Array.isArray(map.sections);
|
|
}
|
|
loadAnnotation(css) {
|
|
let comments = css.match(/\/\*\s*# sourceMappingURL=/gm);
|
|
if (!comments)
|
|
return;
|
|
let start = css.lastIndexOf(comments.pop());
|
|
let end = css.indexOf("*/", start);
|
|
if (start > -1 && end > -1) {
|
|
this.annotation = this.getAnnotationURL(css.substring(start, end));
|
|
}
|
|
}
|
|
loadFile(path) {
|
|
this.root = dirname(path);
|
|
if (existsSync(path)) {
|
|
this.mapFile = path;
|
|
return readFileSync(path, "utf-8").toString().trim();
|
|
}
|
|
}
|
|
loadMap(file, prev) {
|
|
if (prev === false)
|
|
return false;
|
|
if (prev) {
|
|
if (typeof prev === "string") {
|
|
return prev;
|
|
} else if (typeof prev === "function") {
|
|
let prevPath = prev(file);
|
|
if (prevPath) {
|
|
let map = this.loadFile(prevPath);
|
|
if (!map) {
|
|
throw new Error("Unable to load previous source map: " + prevPath.toString());
|
|
}
|
|
return map;
|
|
}
|
|
} else if (prev instanceof SourceMapConsumer) {
|
|
return SourceMapGenerator.fromSourceMap(prev).toString();
|
|
} else if (prev instanceof SourceMapGenerator) {
|
|
return prev.toString();
|
|
} else if (this.isMap(prev)) {
|
|
return JSON.stringify(prev);
|
|
} else {
|
|
throw new Error("Unsupported previous source map format: " + prev.toString());
|
|
}
|
|
} else if (this.inline) {
|
|
return this.decodeInline(this.annotation);
|
|
} else if (this.annotation) {
|
|
let map = this.annotation;
|
|
if (file)
|
|
map = join(dirname(file), map);
|
|
return this.loadFile(map);
|
|
}
|
|
}
|
|
startWith(string, start) {
|
|
if (!string)
|
|
return false;
|
|
return string.substr(0, start.length) === start;
|
|
}
|
|
withContent() {
|
|
return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
|
|
}
|
|
}
|
|
module.exports = PreviousMap;
|
|
PreviousMap.default = PreviousMap;
|
|
});
|
|
|
|
// node_modules/postcss/lib/input.js
|
|
var require_input = __commonJS((exports, module) => {
|
|
var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
|
|
var { fileURLToPath, pathToFileURL } = __require("url");
|
|
var { isAbsolute, resolve } = __require("path");
|
|
var { nanoid } = require_non_secure();
|
|
var terminalHighlight = require_terminal_highlight();
|
|
var CssSyntaxError = require_css_syntax_error();
|
|
var PreviousMap = require_previous_map();
|
|
var fromOffsetCache = Symbol("fromOffsetCache");
|
|
var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
|
|
var pathAvailable = Boolean(resolve && isAbsolute);
|
|
|
|
class Input {
|
|
constructor(css, opts = {}) {
|
|
if (css === null || typeof css === "undefined" || typeof css === "object" && !css.toString) {
|
|
throw new Error(`PostCSS received ${css} instead of CSS string`);
|
|
}
|
|
this.css = css.toString();
|
|
if (this.css[0] === "\uFEFF" || this.css[0] === "\uFFFE") {
|
|
this.hasBOM = true;
|
|
this.css = this.css.slice(1);
|
|
} else {
|
|
this.hasBOM = false;
|
|
}
|
|
if (opts.from) {
|
|
if (!pathAvailable || /^\w+:\/\//.test(opts.from) || isAbsolute(opts.from)) {
|
|
this.file = opts.from;
|
|
} else {
|
|
this.file = resolve(opts.from);
|
|
}
|
|
}
|
|
if (pathAvailable && sourceMapAvailable) {
|
|
let map = new PreviousMap(this.css, opts);
|
|
if (map.text) {
|
|
this.map = map;
|
|
let file = map.consumer().file;
|
|
if (!this.file && file)
|
|
this.file = this.mapResolve(file);
|
|
}
|
|
}
|
|
if (!this.file) {
|
|
this.id = "<input css " + nanoid(6) + ">";
|
|
}
|
|
if (this.map)
|
|
this.map.file = this.from;
|
|
}
|
|
error(message, line, column, opts = {}) {
|
|
let result, endLine, endColumn;
|
|
if (line && typeof line === "object") {
|
|
let start = line;
|
|
let end = column;
|
|
if (typeof start.offset === "number") {
|
|
let pos = this.fromOffset(start.offset);
|
|
line = pos.line;
|
|
column = pos.col;
|
|
} else {
|
|
line = start.line;
|
|
column = start.column;
|
|
}
|
|
if (typeof end.offset === "number") {
|
|
let pos = this.fromOffset(end.offset);
|
|
endLine = pos.line;
|
|
endColumn = pos.col;
|
|
} else {
|
|
endLine = end.line;
|
|
endColumn = end.column;
|
|
}
|
|
} else if (!column) {
|
|
let pos = this.fromOffset(line);
|
|
line = pos.line;
|
|
column = pos.col;
|
|
}
|
|
let origin2 = this.origin(line, column, endLine, endColumn);
|
|
if (origin2) {
|
|
result = new CssSyntaxError(message, origin2.endLine === undefined ? origin2.line : { column: origin2.column, line: origin2.line }, origin2.endLine === undefined ? origin2.column : { column: origin2.endColumn, line: origin2.endLine }, origin2.source, origin2.file, opts.plugin);
|
|
} else {
|
|
result = new CssSyntaxError(message, endLine === undefined ? line : { column, line }, endLine === undefined ? column : { column: endColumn, line: endLine }, this.css, this.file, opts.plugin);
|
|
}
|
|
result.input = { column, endColumn, endLine, line, source: this.css };
|
|
if (this.file) {
|
|
if (pathToFileURL) {
|
|
result.input.url = pathToFileURL(this.file).toString();
|
|
}
|
|
result.input.file = this.file;
|
|
}
|
|
return result;
|
|
}
|
|
fromOffset(offset) {
|
|
let lastLine, lineToIndex;
|
|
if (!this[fromOffsetCache]) {
|
|
let lines = this.css.split("\n");
|
|
lineToIndex = new Array(lines.length);
|
|
let prevIndex = 0;
|
|
for (let i = 0, l = lines.length;i < l; i++) {
|
|
lineToIndex[i] = prevIndex;
|
|
prevIndex += lines[i].length + 1;
|
|
}
|
|
this[fromOffsetCache] = lineToIndex;
|
|
} else {
|
|
lineToIndex = this[fromOffsetCache];
|
|
}
|
|
lastLine = lineToIndex[lineToIndex.length - 1];
|
|
let min = 0;
|
|
if (offset >= lastLine) {
|
|
min = lineToIndex.length - 1;
|
|
} else {
|
|
let max = lineToIndex.length - 2;
|
|
let mid;
|
|
while (min < max) {
|
|
mid = min + (max - min >> 1);
|
|
if (offset < lineToIndex[mid]) {
|
|
max = mid - 1;
|
|
} else if (offset >= lineToIndex[mid + 1]) {
|
|
min = mid + 1;
|
|
} else {
|
|
min = mid;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
col: offset - lineToIndex[min] + 1,
|
|
line: min + 1
|
|
};
|
|
}
|
|
mapResolve(file) {
|
|
if (/^\w+:\/\//.test(file)) {
|
|
return file;
|
|
}
|
|
return resolve(this.map.consumer().sourceRoot || this.map.root || ".", file);
|
|
}
|
|
origin(line, column, endLine, endColumn) {
|
|
if (!this.map)
|
|
return false;
|
|
let consumer = this.map.consumer();
|
|
let from = consumer.originalPositionFor({ column, line });
|
|
if (!from.source)
|
|
return false;
|
|
let to;
|
|
if (typeof endLine === "number") {
|
|
to = consumer.originalPositionFor({ column: endColumn, line: endLine });
|
|
}
|
|
let fromUrl;
|
|
if (isAbsolute(from.source)) {
|
|
fromUrl = pathToFileURL(from.source);
|
|
} else {
|
|
fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile));
|
|
}
|
|
let result = {
|
|
column: from.column,
|
|
endColumn: to && to.column,
|
|
endLine: to && to.line,
|
|
line: from.line,
|
|
url: fromUrl.toString()
|
|
};
|
|
if (fromUrl.protocol === "file:") {
|
|
if (fileURLToPath) {
|
|
result.file = fileURLToPath(fromUrl);
|
|
} else {
|
|
throw new Error(`file: protocol is not available in this PostCSS build`);
|
|
}
|
|
}
|
|
let source = consumer.sourceContentFor(from.source);
|
|
if (source)
|
|
result.source = source;
|
|
return result;
|
|
}
|
|
toJSON() {
|
|
let json = {};
|
|
for (let name of ["hasBOM", "css", "file", "id"]) {
|
|
if (this[name] != null) {
|
|
json[name] = this[name];
|
|
}
|
|
}
|
|
if (this.map) {
|
|
json.map = { ...this.map };
|
|
if (json.map.consumerCache) {
|
|
json.map.consumerCache = undefined;
|
|
}
|
|
}
|
|
return json;
|
|
}
|
|
get from() {
|
|
return this.file || this.id;
|
|
}
|
|
}
|
|
module.exports = Input;
|
|
Input.default = Input;
|
|
if (terminalHighlight && terminalHighlight.registerInput) {
|
|
terminalHighlight.registerInput(Input);
|
|
}
|
|
});
|
|
|
|
// node_modules/postcss/lib/map-generator.js
|
|
var require_map_generator = __commonJS((exports, module) => {
|
|
var { SourceMapConsumer, SourceMapGenerator } = require_source_map();
|
|
var { dirname, relative, resolve, sep } = __require("path");
|
|
var { pathToFileURL } = __require("url");
|
|
var Input = require_input();
|
|
var sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);
|
|
var pathAvailable = Boolean(dirname && resolve && relative && sep);
|
|
|
|
class MapGenerator {
|
|
constructor(stringify, root, opts, cssString) {
|
|
this.stringify = stringify;
|
|
this.mapOpts = opts.map || {};
|
|
this.root = root;
|
|
this.opts = opts;
|
|
this.css = cssString;
|
|
this.originalCSS = cssString;
|
|
this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;
|
|
this.memoizedFileURLs = new Map;
|
|
this.memoizedPaths = new Map;
|
|
this.memoizedURLs = new Map;
|
|
}
|
|
addAnnotation() {
|
|
let content;
|
|
if (this.isInline()) {
|
|
content = "data:application/json;base64," + this.toBase64(this.map.toString());
|
|
} else if (typeof this.mapOpts.annotation === "string") {
|
|
content = this.mapOpts.annotation;
|
|
} else if (typeof this.mapOpts.annotation === "function") {
|
|
content = this.mapOpts.annotation(this.opts.to, this.root);
|
|
} else {
|
|
content = this.outputFile() + ".map";
|
|
}
|
|
let eol = "\n";
|
|
if (this.css.includes("\r\n"))
|
|
eol = "\r\n";
|
|
this.css += eol + "/*# sourceMappingURL=" + content + " */";
|
|
}
|
|
applyPrevMaps() {
|
|
for (let prev of this.previous()) {
|
|
let from = this.toUrl(this.path(prev.file));
|
|
let root = prev.root || dirname(prev.file);
|
|
let map;
|
|
if (this.mapOpts.sourcesContent === false) {
|
|
map = new SourceMapConsumer(prev.text);
|
|
if (map.sourcesContent) {
|
|
map.sourcesContent = null;
|
|
}
|
|
} else {
|
|
map = prev.consumer();
|
|
}
|
|
this.map.applySourceMap(map, from, this.toUrl(this.path(root)));
|
|
}
|
|
}
|
|
clearAnnotation() {
|
|
if (this.mapOpts.annotation === false)
|
|
return;
|
|
if (this.root) {
|
|
let node2;
|
|
for (let i = this.root.nodes.length - 1;i >= 0; i--) {
|
|
node2 = this.root.nodes[i];
|
|
if (node2.type !== "comment")
|
|
continue;
|
|
if (node2.text.indexOf("# sourceMappingURL=") === 0) {
|
|
this.root.removeChild(i);
|
|
}
|
|
}
|
|
} else if (this.css) {
|
|
this.css = this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm, "");
|
|
}
|
|
}
|
|
generate() {
|
|
this.clearAnnotation();
|
|
if (pathAvailable && sourceMapAvailable && this.isMap()) {
|
|
return this.generateMap();
|
|
} else {
|
|
let result = "";
|
|
this.stringify(this.root, (i) => {
|
|
result += i;
|
|
});
|
|
return [result];
|
|
}
|
|
}
|
|
generateMap() {
|
|
if (this.root) {
|
|
this.generateString();
|
|
} else if (this.previous().length === 1) {
|
|
let prev = this.previous()[0].consumer();
|
|
prev.file = this.outputFile();
|
|
this.map = SourceMapGenerator.fromSourceMap(prev, {
|
|
ignoreInvalidMapping: true
|
|
});
|
|
} else {
|
|
this.map = new SourceMapGenerator({
|
|
file: this.outputFile(),
|
|
ignoreInvalidMapping: true
|
|
});
|
|
this.map.addMapping({
|
|
generated: { column: 0, line: 1 },
|
|
original: { column: 0, line: 1 },
|
|
source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>"
|
|
});
|
|
}
|
|
if (this.isSourcesContent())
|
|
this.setSourcesContent();
|
|
if (this.root && this.previous().length > 0)
|
|
this.applyPrevMaps();
|
|
if (this.isAnnotation())
|
|
this.addAnnotation();
|
|
if (this.isInline()) {
|
|
return [this.css];
|
|
} else {
|
|
return [this.css, this.map];
|
|
}
|
|
}
|
|
generateString() {
|
|
this.css = "";
|
|
this.map = new SourceMapGenerator({
|
|
file: this.outputFile(),
|
|
ignoreInvalidMapping: true
|
|
});
|
|
let line = 1;
|
|
let column = 1;
|
|
let noSource = "<no source>";
|
|
let mapping = {
|
|
generated: { column: 0, line: 0 },
|
|
original: { column: 0, line: 0 },
|
|
source: ""
|
|
};
|
|
let lines, last;
|
|
this.stringify(this.root, (str, node2, type) => {
|
|
this.css += str;
|
|
if (node2 && type !== "end") {
|
|
mapping.generated.line = line;
|
|
mapping.generated.column = column - 1;
|
|
if (node2.source && node2.source.start) {
|
|
mapping.source = this.sourcePath(node2);
|
|
mapping.original.line = node2.source.start.line;
|
|
mapping.original.column = node2.source.start.column - 1;
|
|
this.map.addMapping(mapping);
|
|
} else {
|
|
mapping.source = noSource;
|
|
mapping.original.line = 1;
|
|
mapping.original.column = 0;
|
|
this.map.addMapping(mapping);
|
|
}
|
|
}
|
|
lines = str.match(/\n/g);
|
|
if (lines) {
|
|
line += lines.length;
|
|
last = str.lastIndexOf("\n");
|
|
column = str.length - last;
|
|
} else {
|
|
column += str.length;
|
|
}
|
|
if (node2 && type !== "start") {
|
|
let p = node2.parent || { raws: {} };
|
|
let childless = node2.type === "decl" || node2.type === "atrule" && !node2.nodes;
|
|
if (!childless || node2 !== p.last || p.raws.semicolon) {
|
|
if (node2.source && node2.source.end) {
|
|
mapping.source = this.sourcePath(node2);
|
|
mapping.original.line = node2.source.end.line;
|
|
mapping.original.column = node2.source.end.column - 1;
|
|
mapping.generated.line = line;
|
|
mapping.generated.column = column - 2;
|
|
this.map.addMapping(mapping);
|
|
} else {
|
|
mapping.source = noSource;
|
|
mapping.original.line = 1;
|
|
mapping.original.column = 0;
|
|
mapping.generated.line = line;
|
|
mapping.generated.column = column - 1;
|
|
this.map.addMapping(mapping);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
isAnnotation() {
|
|
if (this.isInline()) {
|
|
return true;
|
|
}
|
|
if (typeof this.mapOpts.annotation !== "undefined") {
|
|
return this.mapOpts.annotation;
|
|
}
|
|
if (this.previous().length) {
|
|
return this.previous().some((i) => i.annotation);
|
|
}
|
|
return true;
|
|
}
|
|
isInline() {
|
|
if (typeof this.mapOpts.inline !== "undefined") {
|
|
return this.mapOpts.inline;
|
|
}
|
|
let annotation = this.mapOpts.annotation;
|
|
if (typeof annotation !== "undefined" && annotation !== true) {
|
|
return false;
|
|
}
|
|
if (this.previous().length) {
|
|
return this.previous().some((i) => i.inline);
|
|
}
|
|
return true;
|
|
}
|
|
isMap() {
|
|
if (typeof this.opts.map !== "undefined") {
|
|
return !!this.opts.map;
|
|
}
|
|
return this.previous().length > 0;
|
|
}
|
|
isSourcesContent() {
|
|
if (typeof this.mapOpts.sourcesContent !== "undefined") {
|
|
return this.mapOpts.sourcesContent;
|
|
}
|
|
if (this.previous().length) {
|
|
return this.previous().some((i) => i.withContent());
|
|
}
|
|
return true;
|
|
}
|
|
outputFile() {
|
|
if (this.opts.to) {
|
|
return this.path(this.opts.to);
|
|
} else if (this.opts.from) {
|
|
return this.path(this.opts.from);
|
|
} else {
|
|
return "to.css";
|
|
}
|
|
}
|
|
path(file) {
|
|
if (this.mapOpts.absolute)
|
|
return file;
|
|
if (file.charCodeAt(0) === 60)
|
|
return file;
|
|
if (/^\w+:\/\//.test(file))
|
|
return file;
|
|
let cached = this.memoizedPaths.get(file);
|
|
if (cached)
|
|
return cached;
|
|
let from = this.opts.to ? dirname(this.opts.to) : ".";
|
|
if (typeof this.mapOpts.annotation === "string") {
|
|
from = dirname(resolve(from, this.mapOpts.annotation));
|
|
}
|
|
let path = relative(from, file);
|
|
this.memoizedPaths.set(file, path);
|
|
return path;
|
|
}
|
|
previous() {
|
|
if (!this.previousMaps) {
|
|
this.previousMaps = [];
|
|
if (this.root) {
|
|
this.root.walk((node2) => {
|
|
if (node2.source && node2.source.input.map) {
|
|
let map = node2.source.input.map;
|
|
if (!this.previousMaps.includes(map)) {
|
|
this.previousMaps.push(map);
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
let input = new Input(this.originalCSS, this.opts);
|
|
if (input.map)
|
|
this.previousMaps.push(input.map);
|
|
}
|
|
}
|
|
return this.previousMaps;
|
|
}
|
|
setSourcesContent() {
|
|
let already = {};
|
|
if (this.root) {
|
|
this.root.walk((node2) => {
|
|
if (node2.source) {
|
|
let from = node2.source.input.from;
|
|
if (from && !already[from]) {
|
|
already[from] = true;
|
|
let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));
|
|
this.map.setSourceContent(fromUrl, node2.source.input.css);
|
|
}
|
|
}
|
|
});
|
|
} else if (this.css) {
|
|
let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : "<no source>";
|
|
this.map.setSourceContent(from, this.css);
|
|
}
|
|
}
|
|
sourcePath(node2) {
|
|
if (this.mapOpts.from) {
|
|
return this.toUrl(this.mapOpts.from);
|
|
} else if (this.usesFileUrls) {
|
|
return this.toFileUrl(node2.source.input.from);
|
|
} else {
|
|
return this.toUrl(this.path(node2.source.input.from));
|
|
}
|
|
}
|
|
toBase64(str) {
|
|
if (Buffer) {
|
|
return Buffer.from(str).toString("base64");
|
|
} else {
|
|
return window.btoa(unescape(encodeURIComponent(str)));
|
|
}
|
|
}
|
|
toFileUrl(path) {
|
|
let cached = this.memoizedFileURLs.get(path);
|
|
if (cached)
|
|
return cached;
|
|
if (pathToFileURL) {
|
|
let fileURL = pathToFileURL(path).toString();
|
|
this.memoizedFileURLs.set(path, fileURL);
|
|
return fileURL;
|
|
} else {
|
|
throw new Error("`map.absolute` option is not available in this PostCSS build");
|
|
}
|
|
}
|
|
toUrl(path) {
|
|
let cached = this.memoizedURLs.get(path);
|
|
if (cached)
|
|
return cached;
|
|
if (sep === "\\") {
|
|
path = path.replace(/\\/g, "/");
|
|
}
|
|
let url2 = encodeURI(path).replace(/[#?]/g, encodeURIComponent);
|
|
this.memoizedURLs.set(path, url2);
|
|
return url2;
|
|
}
|
|
}
|
|
module.exports = MapGenerator;
|
|
});
|
|
|
|
// node_modules/postcss/lib/comment.js
|
|
var require_comment = __commonJS((exports, module) => {
|
|
var Node = require_node2();
|
|
|
|
class Comment extends Node {
|
|
constructor(defaults5) {
|
|
super(defaults5);
|
|
this.type = "comment";
|
|
}
|
|
}
|
|
module.exports = Comment;
|
|
Comment.default = Comment;
|
|
});
|
|
|
|
// node_modules/postcss/lib/container.js
|
|
var require_container = __commonJS((exports, module) => {
|
|
var cleanSource = function(nodes) {
|
|
return nodes.map((i) => {
|
|
if (i.nodes)
|
|
i.nodes = cleanSource(i.nodes);
|
|
delete i.source;
|
|
return i;
|
|
});
|
|
};
|
|
var markTreeDirty = function(node2) {
|
|
node2[isClean] = false;
|
|
if (node2.proxyOf.nodes) {
|
|
for (let i of node2.proxyOf.nodes) {
|
|
markTreeDirty(i);
|
|
}
|
|
}
|
|
};
|
|
var { isClean, my } = require_symbols6();
|
|
var Declaration = require_declaration();
|
|
var Comment = require_comment();
|
|
var Node = require_node2();
|
|
var parse;
|
|
var Rule;
|
|
var AtRule;
|
|
var Root;
|
|
|
|
class Container extends Node {
|
|
append(...children) {
|
|
for (let child of children) {
|
|
let nodes = this.normalize(child, this.last);
|
|
for (let node2 of nodes)
|
|
this.proxyOf.nodes.push(node2);
|
|
}
|
|
this.markDirty();
|
|
return this;
|
|
}
|
|
cleanRaws(keepBetween) {
|
|
super.cleanRaws(keepBetween);
|
|
if (this.nodes) {
|
|
for (let node2 of this.nodes)
|
|
node2.cleanRaws(keepBetween);
|
|
}
|
|
}
|
|
each(callback) {
|
|
if (!this.proxyOf.nodes)
|
|
return;
|
|
let iterator = this.getIterator();
|
|
let index, result;
|
|
while (this.indexes[iterator] < this.proxyOf.nodes.length) {
|
|
index = this.indexes[iterator];
|
|
result = callback(this.proxyOf.nodes[index], index);
|
|
if (result === false)
|
|
break;
|
|
this.indexes[iterator] += 1;
|
|
}
|
|
delete this.indexes[iterator];
|
|
return result;
|
|
}
|
|
every(condition) {
|
|
return this.nodes.every(condition);
|
|
}
|
|
getIterator() {
|
|
if (!this.lastEach)
|
|
this.lastEach = 0;
|
|
if (!this.indexes)
|
|
this.indexes = {};
|
|
this.lastEach += 1;
|
|
let iterator = this.lastEach;
|
|
this.indexes[iterator] = 0;
|
|
return iterator;
|
|
}
|
|
getProxyProcessor() {
|
|
return {
|
|
get(node2, prop) {
|
|
if (prop === "proxyOf") {
|
|
return node2;
|
|
} else if (!node2[prop]) {
|
|
return node2[prop];
|
|
} else if (prop === "each" || typeof prop === "string" && prop.startsWith("walk")) {
|
|
return (...args) => {
|
|
return node2[prop](...args.map((i) => {
|
|
if (typeof i === "function") {
|
|
return (child, index) => i(child.toProxy(), index);
|
|
} else {
|
|
return i;
|
|
}
|
|
}));
|
|
};
|
|
} else if (prop === "every" || prop === "some") {
|
|
return (cb) => {
|
|
return node2[prop]((child, ...other) => cb(child.toProxy(), ...other));
|
|
};
|
|
} else if (prop === "root") {
|
|
return () => node2.root().toProxy();
|
|
} else if (prop === "nodes") {
|
|
return node2.nodes.map((i) => i.toProxy());
|
|
} else if (prop === "first" || prop === "last") {
|
|
return node2[prop].toProxy();
|
|
} else {
|
|
return node2[prop];
|
|
}
|
|
},
|
|
set(node2, prop, value) {
|
|
if (node2[prop] === value)
|
|
return true;
|
|
node2[prop] = value;
|
|
if (prop === "name" || prop === "params" || prop === "selector") {
|
|
node2.markDirty();
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
}
|
|
index(child) {
|
|
if (typeof child === "number")
|
|
return child;
|
|
if (child.proxyOf)
|
|
child = child.proxyOf;
|
|
return this.proxyOf.nodes.indexOf(child);
|
|
}
|
|
insertAfter(exist, add) {
|
|
let existIndex = this.index(exist);
|
|
let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();
|
|
existIndex = this.index(exist);
|
|
for (let node2 of nodes)
|
|
this.proxyOf.nodes.splice(existIndex + 1, 0, node2);
|
|
let index;
|
|
for (let id in this.indexes) {
|
|
index = this.indexes[id];
|
|
if (existIndex < index) {
|
|
this.indexes[id] = index + nodes.length;
|
|
}
|
|
}
|
|
this.markDirty();
|
|
return this;
|
|
}
|
|
insertBefore(exist, add) {
|
|
let existIndex = this.index(exist);
|
|
let type = existIndex === 0 ? "prepend" : false;
|
|
let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();
|
|
existIndex = this.index(exist);
|
|
for (let node2 of nodes)
|
|
this.proxyOf.nodes.splice(existIndex, 0, node2);
|
|
let index;
|
|
for (let id in this.indexes) {
|
|
index = this.indexes[id];
|
|
if (existIndex <= index) {
|
|
this.indexes[id] = index + nodes.length;
|
|
}
|
|
}
|
|
this.markDirty();
|
|
return this;
|
|
}
|
|
normalize(nodes, sample) {
|
|
if (typeof nodes === "string") {
|
|
nodes = cleanSource(parse(nodes).nodes);
|
|
} else if (typeof nodes === "undefined") {
|
|
nodes = [];
|
|
} else if (Array.isArray(nodes)) {
|
|
nodes = nodes.slice(0);
|
|
for (let i of nodes) {
|
|
if (i.parent)
|
|
i.parent.removeChild(i, "ignore");
|
|
}
|
|
} else if (nodes.type === "root" && this.type !== "document") {
|
|
nodes = nodes.nodes.slice(0);
|
|
for (let i of nodes) {
|
|
if (i.parent)
|
|
i.parent.removeChild(i, "ignore");
|
|
}
|
|
} else if (nodes.type) {
|
|
nodes = [nodes];
|
|
} else if (nodes.prop) {
|
|
if (typeof nodes.value === "undefined") {
|
|
throw new Error("Value field is missed in node creation");
|
|
} else if (typeof nodes.value !== "string") {
|
|
nodes.value = String(nodes.value);
|
|
}
|
|
nodes = [new Declaration(nodes)];
|
|
} else if (nodes.selector) {
|
|
nodes = [new Rule(nodes)];
|
|
} else if (nodes.name) {
|
|
nodes = [new AtRule(nodes)];
|
|
} else if (nodes.text) {
|
|
nodes = [new Comment(nodes)];
|
|
} else {
|
|
throw new Error("Unknown node type in node creation");
|
|
}
|
|
let processed = nodes.map((i) => {
|
|
if (!i[my])
|
|
Container.rebuild(i);
|
|
i = i.proxyOf;
|
|
if (i.parent)
|
|
i.parent.removeChild(i);
|
|
if (i[isClean])
|
|
markTreeDirty(i);
|
|
if (typeof i.raws.before === "undefined") {
|
|
if (sample && typeof sample.raws.before !== "undefined") {
|
|
i.raws.before = sample.raws.before.replace(/\S/g, "");
|
|
}
|
|
}
|
|
i.parent = this.proxyOf;
|
|
return i;
|
|
});
|
|
return processed;
|
|
}
|
|
prepend(...children) {
|
|
children = children.reverse();
|
|
for (let child of children) {
|
|
let nodes = this.normalize(child, this.first, "prepend").reverse();
|
|
for (let node2 of nodes)
|
|
this.proxyOf.nodes.unshift(node2);
|
|
for (let id in this.indexes) {
|
|
this.indexes[id] = this.indexes[id] + nodes.length;
|
|
}
|
|
}
|
|
this.markDirty();
|
|
return this;
|
|
}
|
|
push(child) {
|
|
child.parent = this;
|
|
this.proxyOf.nodes.push(child);
|
|
return this;
|
|
}
|
|
removeAll() {
|
|
for (let node2 of this.proxyOf.nodes)
|
|
node2.parent = undefined;
|
|
this.proxyOf.nodes = [];
|
|
this.markDirty();
|
|
return this;
|
|
}
|
|
removeChild(child) {
|
|
child = this.index(child);
|
|
this.proxyOf.nodes[child].parent = undefined;
|
|
this.proxyOf.nodes.splice(child, 1);
|
|
let index;
|
|
for (let id in this.indexes) {
|
|
index = this.indexes[id];
|
|
if (index >= child) {
|
|
this.indexes[id] = index - 1;
|
|
}
|
|
}
|
|
this.markDirty();
|
|
return this;
|
|
}
|
|
replaceValues(pattern, opts, callback) {
|
|
if (!callback) {
|
|
callback = opts;
|
|
opts = {};
|
|
}
|
|
this.walkDecls((decl) => {
|
|
if (opts.props && !opts.props.includes(decl.prop))
|
|
return;
|
|
if (opts.fast && !decl.value.includes(opts.fast))
|
|
return;
|
|
decl.value = decl.value.replace(pattern, callback);
|
|
});
|
|
this.markDirty();
|
|
return this;
|
|
}
|
|
some(condition) {
|
|
return this.nodes.some(condition);
|
|
}
|
|
walk(callback) {
|
|
return this.each((child, i) => {
|
|
let result;
|
|
try {
|
|
result = callback(child, i);
|
|
} catch (e) {
|
|
throw child.addToError(e);
|
|
}
|
|
if (result !== false && child.walk) {
|
|
result = child.walk(callback);
|
|
}
|
|
return result;
|
|
});
|
|
}
|
|
walkAtRules(name, callback) {
|
|
if (!callback) {
|
|
callback = name;
|
|
return this.walk((child, i) => {
|
|
if (child.type === "atrule") {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
if (name instanceof RegExp) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === "atrule" && name.test(child.name)) {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
return this.walk((child, i) => {
|
|
if (child.type === "atrule" && child.name === name) {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
walkComments(callback) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === "comment") {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
walkDecls(prop, callback) {
|
|
if (!callback) {
|
|
callback = prop;
|
|
return this.walk((child, i) => {
|
|
if (child.type === "decl") {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
if (prop instanceof RegExp) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === "decl" && prop.test(child.prop)) {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
return this.walk((child, i) => {
|
|
if (child.type === "decl" && child.prop === prop) {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
walkRules(selector, callback) {
|
|
if (!callback) {
|
|
callback = selector;
|
|
return this.walk((child, i) => {
|
|
if (child.type === "rule") {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
if (selector instanceof RegExp) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === "rule" && selector.test(child.selector)) {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
return this.walk((child, i) => {
|
|
if (child.type === "rule" && child.selector === selector) {
|
|
return callback(child, i);
|
|
}
|
|
});
|
|
}
|
|
get first() {
|
|
if (!this.proxyOf.nodes)
|
|
return;
|
|
return this.proxyOf.nodes[0];
|
|
}
|
|
get last() {
|
|
if (!this.proxyOf.nodes)
|
|
return;
|
|
return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];
|
|
}
|
|
}
|
|
Container.registerParse = (dependant) => {
|
|
parse = dependant;
|
|
};
|
|
Container.registerRule = (dependant) => {
|
|
Rule = dependant;
|
|
};
|
|
Container.registerAtRule = (dependant) => {
|
|
AtRule = dependant;
|
|
};
|
|
Container.registerRoot = (dependant) => {
|
|
Root = dependant;
|
|
};
|
|
module.exports = Container;
|
|
Container.default = Container;
|
|
Container.rebuild = (node2) => {
|
|
if (node2.type === "atrule") {
|
|
Object.setPrototypeOf(node2, AtRule.prototype);
|
|
} else if (node2.type === "rule") {
|
|
Object.setPrototypeOf(node2, Rule.prototype);
|
|
} else if (node2.type === "decl") {
|
|
Object.setPrototypeOf(node2, Declaration.prototype);
|
|
} else if (node2.type === "comment") {
|
|
Object.setPrototypeOf(node2, Comment.prototype);
|
|
} else if (node2.type === "root") {
|
|
Object.setPrototypeOf(node2, Root.prototype);
|
|
}
|
|
node2[my] = true;
|
|
if (node2.nodes) {
|
|
node2.nodes.forEach((child) => {
|
|
Container.rebuild(child);
|
|
});
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/postcss/lib/document.js
|
|
var require_document = __commonJS((exports, module) => {
|
|
var Container = require_container();
|
|
var LazyResult;
|
|
var Processor;
|
|
|
|
class Document extends Container {
|
|
constructor(defaults5) {
|
|
super({ type: "document", ...defaults5 });
|
|
if (!this.nodes) {
|
|
this.nodes = [];
|
|
}
|
|
}
|
|
toResult(opts = {}) {
|
|
let lazy = new LazyResult(new Processor, this, opts);
|
|
return lazy.stringify();
|
|
}
|
|
}
|
|
Document.registerLazyResult = (dependant) => {
|
|
LazyResult = dependant;
|
|
};
|
|
Document.registerProcessor = (dependant) => {
|
|
Processor = dependant;
|
|
};
|
|
module.exports = Document;
|
|
Document.default = Document;
|
|
});
|
|
|
|
// node_modules/postcss/lib/warn-once.js
|
|
var require_warn_once = __commonJS((exports, module) => {
|
|
var printed = {};
|
|
module.exports = function warnOnce(message) {
|
|
if (printed[message])
|
|
return;
|
|
printed[message] = true;
|
|
if (typeof console !== "undefined" && console.warn) {
|
|
console.warn(message);
|
|
}
|
|
};
|
|
});
|
|
|
|
// node_modules/postcss/lib/warning.js
|
|
var require_warning = __commonJS((exports, module) => {
|
|
class Warning {
|
|
constructor(text, opts = {}) {
|
|
this.type = "warning";
|
|
this.text = text;
|
|
if (opts.node && opts.node.source) {
|
|
let range = opts.node.rangeBy(opts);
|
|
this.line = range.start.line;
|
|
this.column = range.start.column;
|
|
this.endLine = range.end.line;
|
|
this.endColumn = range.end.column;
|
|
}
|
|
for (let opt in opts)
|
|
this[opt] = opts[opt];
|
|
}
|
|
toString() {
|
|
if (this.node) {
|
|
return this.node.error(this.text, {
|
|
index: this.index,
|
|
plugin: this.plugin,
|
|
word: this.word
|
|
}).message;
|
|
}
|
|
if (this.plugin) {
|
|
return this.plugin + ": " + this.text;
|
|
}
|
|
return this.text;
|
|
}
|
|
}
|
|
module.exports = Warning;
|
|
Warning.default = Warning;
|
|
});
|
|
|
|
// node_modules/postcss/lib/result.js
|
|
var require_result = __commonJS((exports, module) => {
|
|
var Warning = require_warning();
|
|
|
|
class Result {
|
|
constructor(processor, root, opts) {
|
|
this.processor = processor;
|
|
this.messages = [];
|
|
this.root = root;
|
|
this.opts = opts;
|
|
this.css = undefined;
|
|
this.map = undefined;
|
|
}
|
|
toString() {
|
|
return this.css;
|
|
}
|
|
warn(text, opts = {}) {
|
|
if (!opts.plugin) {
|
|
if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
|
|
opts.plugin = this.lastPlugin.postcssPlugin;
|
|
}
|
|
}
|
|
let warning = new Warning(text, opts);
|
|
this.messages.push(warning);
|
|
return warning;
|
|
}
|
|
warnings() {
|
|
return this.messages.filter((i) => i.type === "warning");
|
|
}
|
|
get content() {
|
|
return this.css;
|
|
}
|
|
}
|
|
module.exports = Result;
|
|
Result.default = Result;
|
|
});
|
|
|
|
// node_modules/postcss/lib/at-rule.js
|
|
var require_at_rule = __commonJS((exports, module) => {
|
|
var Container = require_container();
|
|
|
|
class AtRule extends Container {
|
|
constructor(defaults5) {
|
|
super(defaults5);
|
|
this.type = "atrule";
|
|
}
|
|
append(...children) {
|
|
if (!this.proxyOf.nodes)
|
|
this.nodes = [];
|
|
return super.append(...children);
|
|
}
|
|
prepend(...children) {
|
|
if (!this.proxyOf.nodes)
|
|
this.nodes = [];
|
|
return super.prepend(...children);
|
|
}
|
|
}
|
|
module.exports = AtRule;
|
|
AtRule.default = AtRule;
|
|
Container.registerAtRule(AtRule);
|
|
});
|
|
|
|
// node_modules/postcss/lib/root.js
|
|
var require_root = __commonJS((exports, module) => {
|
|
var Container = require_container();
|
|
var LazyResult;
|
|
var Processor;
|
|
|
|
class Root extends Container {
|
|
constructor(defaults5) {
|
|
super(defaults5);
|
|
this.type = "root";
|
|
if (!this.nodes)
|
|
this.nodes = [];
|
|
}
|
|
normalize(child, sample, type) {
|
|
let nodes = super.normalize(child);
|
|
if (sample) {
|
|
if (type === "prepend") {
|
|
if (this.nodes.length > 1) {
|
|
sample.raws.before = this.nodes[1].raws.before;
|
|
} else {
|
|
delete sample.raws.before;
|
|
}
|
|
} else if (this.first !== sample) {
|
|
for (let node2 of nodes) {
|
|
node2.raws.before = sample.raws.before;
|
|
}
|
|
}
|
|
}
|
|
return nodes;
|
|
}
|
|
removeChild(child, ignore) {
|
|
let index = this.index(child);
|
|
if (!ignore && index === 0 && this.nodes.length > 1) {
|
|
this.nodes[1].raws.before = this.nodes[index].raws.before;
|
|
}
|
|
return super.removeChild(child);
|
|
}
|
|
toResult(opts = {}) {
|
|
let lazy = new LazyResult(new Processor, this, opts);
|
|
return lazy.stringify();
|
|
}
|
|
}
|
|
Root.registerLazyResult = (dependant) => {
|
|
LazyResult = dependant;
|
|
};
|
|
Root.registerProcessor = (dependant) => {
|
|
Processor = dependant;
|
|
};
|
|
module.exports = Root;
|
|
Root.default = Root;
|
|
Container.registerRoot(Root);
|
|
});
|
|
|
|
// node_modules/postcss/lib/list.js
|
|
var require_list = __commonJS((exports, module) => {
|
|
var list = {
|
|
comma(string) {
|
|
return list.split(string, [","], true);
|
|
},
|
|
space(string) {
|
|
let spaces = [" ", "\n", "\t"];
|
|
return list.split(string, spaces);
|
|
},
|
|
split(string, separators, last) {
|
|
let array = [];
|
|
let current = "";
|
|
let split = false;
|
|
let func = 0;
|
|
let inQuote = false;
|
|
let prevQuote = "";
|
|
let escape = false;
|
|
for (let letter of string) {
|
|
if (escape) {
|
|
escape = false;
|
|
} else if (letter === "\\") {
|
|
escape = true;
|
|
} else if (inQuote) {
|
|
if (letter === prevQuote) {
|
|
inQuote = false;
|
|
}
|
|
} else if (letter === '"' || letter === "'") {
|
|
inQuote = true;
|
|
prevQuote = letter;
|
|
} else if (letter === "(") {
|
|
func += 1;
|
|
} else if (letter === ")") {
|
|
if (func > 0)
|
|
func -= 1;
|
|
} else if (func === 0) {
|
|
if (separators.includes(letter))
|
|
split = true;
|
|
}
|
|
if (split) {
|
|
if (current !== "")
|
|
array.push(current.trim());
|
|
current = "";
|
|
split = false;
|
|
} else {
|
|
current += letter;
|
|
}
|
|
}
|
|
if (last || current !== "")
|
|
array.push(current.trim());
|
|
return array;
|
|
}
|
|
};
|
|
module.exports = list;
|
|
list.default = list;
|
|
});
|
|
|
|
// node_modules/postcss/lib/rule.js
|
|
var require_rule = __commonJS((exports, module) => {
|
|
var Container = require_container();
|
|
var list = require_list();
|
|
|
|
class Rule extends Container {
|
|
constructor(defaults5) {
|
|
super(defaults5);
|
|
this.type = "rule";
|
|
if (!this.nodes)
|
|
this.nodes = [];
|
|
}
|
|
get selectors() {
|
|
return list.comma(this.selector);
|
|
}
|
|
set selectors(values) {
|
|
let match = this.selector ? this.selector.match(/,\s*/) : null;
|
|
let sep = match ? match[0] : "," + this.raw("between", "beforeOpen");
|
|
this.selector = values.join(sep);
|
|
}
|
|
}
|
|
module.exports = Rule;
|
|
Rule.default = Rule;
|
|
Container.registerRule(Rule);
|
|
});
|
|
|
|
// node_modules/postcss/lib/parser.js
|
|
var require_parser = __commonJS((exports, module) => {
|
|
var findLastWithPosition = function(tokens) {
|
|
for (let i = tokens.length - 1;i >= 0; i--) {
|
|
let token = tokens[i];
|
|
let pos = token[3] || token[2];
|
|
if (pos)
|
|
return pos;
|
|
}
|
|
};
|
|
var Declaration = require_declaration();
|
|
var tokenizer = require_tokenize();
|
|
var Comment = require_comment();
|
|
var AtRule = require_at_rule();
|
|
var Root = require_root();
|
|
var Rule = require_rule();
|
|
var SAFE_COMMENT_NEIGHBOR = {
|
|
empty: true,
|
|
space: true
|
|
};
|
|
|
|
class Parser {
|
|
constructor(input) {
|
|
this.input = input;
|
|
this.root = new Root;
|
|
this.current = this.root;
|
|
this.spaces = "";
|
|
this.semicolon = false;
|
|
this.createTokenizer();
|
|
this.root.source = { input, start: { column: 1, line: 1, offset: 0 } };
|
|
}
|
|
atrule(token) {
|
|
let node2 = new AtRule;
|
|
node2.name = token[1].slice(1);
|
|
if (node2.name === "") {
|
|
this.unnamedAtrule(node2, token);
|
|
}
|
|
this.init(node2, token[2]);
|
|
let type;
|
|
let prev;
|
|
let shift;
|
|
let last = false;
|
|
let open = false;
|
|
let params = [];
|
|
let brackets = [];
|
|
while (!this.tokenizer.endOfFile()) {
|
|
token = this.tokenizer.nextToken();
|
|
type = token[0];
|
|
if (type === "(" || type === "[") {
|
|
brackets.push(type === "(" ? ")" : "]");
|
|
} else if (type === "{" && brackets.length > 0) {
|
|
brackets.push("}");
|
|
} else if (type === brackets[brackets.length - 1]) {
|
|
brackets.pop();
|
|
}
|
|
if (brackets.length === 0) {
|
|
if (type === ";") {
|
|
node2.source.end = this.getPosition(token[2]);
|
|
node2.source.end.offset++;
|
|
this.semicolon = true;
|
|
break;
|
|
} else if (type === "{") {
|
|
open = true;
|
|
break;
|
|
} else if (type === "}") {
|
|
if (params.length > 0) {
|
|
shift = params.length - 1;
|
|
prev = params[shift];
|
|
while (prev && prev[0] === "space") {
|
|
prev = params[--shift];
|
|
}
|
|
if (prev) {
|
|
node2.source.end = this.getPosition(prev[3] || prev[2]);
|
|
node2.source.end.offset++;
|
|
}
|
|
}
|
|
this.end(token);
|
|
break;
|
|
} else {
|
|
params.push(token);
|
|
}
|
|
} else {
|
|
params.push(token);
|
|
}
|
|
if (this.tokenizer.endOfFile()) {
|
|
last = true;
|
|
break;
|
|
}
|
|
}
|
|
node2.raws.between = this.spacesAndCommentsFromEnd(params);
|
|
if (params.length) {
|
|
node2.raws.afterName = this.spacesAndCommentsFromStart(params);
|
|
this.raw(node2, "params", params);
|
|
if (last) {
|
|
token = params[params.length - 1];
|
|
node2.source.end = this.getPosition(token[3] || token[2]);
|
|
node2.source.end.offset++;
|
|
this.spaces = node2.raws.between;
|
|
node2.raws.between = "";
|
|
}
|
|
} else {
|
|
node2.raws.afterName = "";
|
|
node2.params = "";
|
|
}
|
|
if (open) {
|
|
node2.nodes = [];
|
|
this.current = node2;
|
|
}
|
|
}
|
|
checkMissedSemicolon(tokens) {
|
|
let colon = this.colon(tokens);
|
|
if (colon === false)
|
|
return;
|
|
let founded = 0;
|
|
let token;
|
|
for (let j = colon - 1;j >= 0; j--) {
|
|
token = tokens[j];
|
|
if (token[0] !== "space") {
|
|
founded += 1;
|
|
if (founded === 2)
|
|
break;
|
|
}
|
|
}
|
|
throw this.input.error("Missed semicolon", token[0] === "word" ? token[3] + 1 : token[2]);
|
|
}
|
|
colon(tokens) {
|
|
let brackets = 0;
|
|
let token, type, prev;
|
|
for (let [i, element] of tokens.entries()) {
|
|
token = element;
|
|
type = token[0];
|
|
if (type === "(") {
|
|
brackets += 1;
|
|
}
|
|
if (type === ")") {
|
|
brackets -= 1;
|
|
}
|
|
if (brackets === 0 && type === ":") {
|
|
if (!prev) {
|
|
this.doubleColon(token);
|
|
} else if (prev[0] === "word" && prev[1] === "progid") {
|
|
continue;
|
|
} else {
|
|
return i;
|
|
}
|
|
}
|
|
prev = token;
|
|
}
|
|
return false;
|
|
}
|
|
comment(token) {
|
|
let node2 = new Comment;
|
|
this.init(node2, token[2]);
|
|
node2.source.end = this.getPosition(token[3] || token[2]);
|
|
node2.source.end.offset++;
|
|
let text = token[1].slice(2, -2);
|
|
if (/^\s*$/.test(text)) {
|
|
node2.text = "";
|
|
node2.raws.left = text;
|
|
node2.raws.right = "";
|
|
} else {
|
|
let match = text.match(/^(\s*)([^]*\S)(\s*)$/);
|
|
node2.text = match[2];
|
|
node2.raws.left = match[1];
|
|
node2.raws.right = match[3];
|
|
}
|
|
}
|
|
createTokenizer() {
|
|
this.tokenizer = tokenizer(this.input);
|
|
}
|
|
decl(tokens, customProperty) {
|
|
let node2 = new Declaration;
|
|
this.init(node2, tokens[0][2]);
|
|
let last = tokens[tokens.length - 1];
|
|
if (last[0] === ";") {
|
|
this.semicolon = true;
|
|
tokens.pop();
|
|
}
|
|
node2.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));
|
|
node2.source.end.offset++;
|
|
while (tokens[0][0] !== "word") {
|
|
if (tokens.length === 1)
|
|
this.unknownWord(tokens);
|
|
node2.raws.before += tokens.shift()[1];
|
|
}
|
|
node2.source.start = this.getPosition(tokens[0][2]);
|
|
node2.prop = "";
|
|
while (tokens.length) {
|
|
let type = tokens[0][0];
|
|
if (type === ":" || type === "space" || type === "comment") {
|
|
break;
|
|
}
|
|
node2.prop += tokens.shift()[1];
|
|
}
|
|
node2.raws.between = "";
|
|
let token;
|
|
while (tokens.length) {
|
|
token = tokens.shift();
|
|
if (token[0] === ":") {
|
|
node2.raws.between += token[1];
|
|
break;
|
|
} else {
|
|
if (token[0] === "word" && /\w/.test(token[1])) {
|
|
this.unknownWord([token]);
|
|
}
|
|
node2.raws.between += token[1];
|
|
}
|
|
}
|
|
if (node2.prop[0] === "_" || node2.prop[0] === "*") {
|
|
node2.raws.before += node2.prop[0];
|
|
node2.prop = node2.prop.slice(1);
|
|
}
|
|
let firstSpaces = [];
|
|
let next;
|
|
while (tokens.length) {
|
|
next = tokens[0][0];
|
|
if (next !== "space" && next !== "comment")
|
|
break;
|
|
firstSpaces.push(tokens.shift());
|
|
}
|
|
this.precheckMissedSemicolon(tokens);
|
|
for (let i = tokens.length - 1;i >= 0; i--) {
|
|
token = tokens[i];
|
|
if (token[1].toLowerCase() === "!important") {
|
|
node2.important = true;
|
|
let string = this.stringFrom(tokens, i);
|
|
string = this.spacesFromEnd(tokens) + string;
|
|
if (string !== " !important")
|
|
node2.raws.important = string;
|
|
break;
|
|
} else if (token[1].toLowerCase() === "important") {
|
|
let cache = tokens.slice(0);
|
|
let str = "";
|
|
for (let j = i;j > 0; j--) {
|
|
let type = cache[j][0];
|
|
if (str.trim().indexOf("!") === 0 && type !== "space") {
|
|
break;
|
|
}
|
|
str = cache.pop()[1] + str;
|
|
}
|
|
if (str.trim().indexOf("!") === 0) {
|
|
node2.important = true;
|
|
node2.raws.important = str;
|
|
tokens = cache;
|
|
}
|
|
}
|
|
if (token[0] !== "space" && token[0] !== "comment") {
|
|
break;
|
|
}
|
|
}
|
|
let hasWord = tokens.some((i) => i[0] !== "space" && i[0] !== "comment");
|
|
if (hasWord) {
|
|
node2.raws.between += firstSpaces.map((i) => i[1]).join("");
|
|
firstSpaces = [];
|
|
}
|
|
this.raw(node2, "value", firstSpaces.concat(tokens), customProperty);
|
|
if (node2.value.includes(":") && !customProperty) {
|
|
this.checkMissedSemicolon(tokens);
|
|
}
|
|
}
|
|
doubleColon(token) {
|
|
throw this.input.error("Double colon", { offset: token[2] }, { offset: token[2] + token[1].length });
|
|
}
|
|
emptyRule(token) {
|
|
let node2 = new Rule;
|
|
this.init(node2, token[2]);
|
|
node2.selector = "";
|
|
node2.raws.between = "";
|
|
this.current = node2;
|
|
}
|
|
end(token) {
|
|
if (this.current.nodes && this.current.nodes.length) {
|
|
this.current.raws.semicolon = this.semicolon;
|
|
}
|
|
this.semicolon = false;
|
|
this.current.raws.after = (this.current.raws.after || "") + this.spaces;
|
|
this.spaces = "";
|
|
if (this.current.parent) {
|
|
this.current.source.end = this.getPosition(token[2]);
|
|
this.current.source.end.offset++;
|
|
this.current = this.current.parent;
|
|
} else {
|
|
this.unexpectedClose(token);
|
|
}
|
|
}
|
|
endFile() {
|
|
if (this.current.parent)
|
|
this.unclosedBlock();
|
|
if (this.current.nodes && this.current.nodes.length) {
|
|
this.current.raws.semicolon = this.semicolon;
|
|
}
|
|
this.current.raws.after = (this.current.raws.after || "") + this.spaces;
|
|
this.root.source.end = this.getPosition(this.tokenizer.position());
|
|
}
|
|
freeSemicolon(token) {
|
|
this.spaces += token[1];
|
|
if (this.current.nodes) {
|
|
let prev = this.current.nodes[this.current.nodes.length - 1];
|
|
if (prev && prev.type === "rule" && !prev.raws.ownSemicolon) {
|
|
prev.raws.ownSemicolon = this.spaces;
|
|
this.spaces = "";
|
|
}
|
|
}
|
|
}
|
|
getPosition(offset) {
|
|
let pos = this.input.fromOffset(offset);
|
|
return {
|
|
column: pos.col,
|
|
line: pos.line,
|
|
offset
|
|
};
|
|
}
|
|
init(node2, offset) {
|
|
this.current.push(node2);
|
|
node2.source = {
|
|
input: this.input,
|
|
start: this.getPosition(offset)
|
|
};
|
|
node2.raws.before = this.spaces;
|
|
this.spaces = "";
|
|
if (node2.type !== "comment")
|
|
this.semicolon = false;
|
|
}
|
|
other(start) {
|
|
let end = false;
|
|
let type = null;
|
|
let colon = false;
|
|
let bracket = null;
|
|
let brackets = [];
|
|
let customProperty = start[1].startsWith("--");
|
|
let tokens = [];
|
|
let token = start;
|
|
while (token) {
|
|
type = token[0];
|
|
tokens.push(token);
|
|
if (type === "(" || type === "[") {
|
|
if (!bracket)
|
|
bracket = token;
|
|
brackets.push(type === "(" ? ")" : "]");
|
|
} else if (customProperty && colon && type === "{") {
|
|
if (!bracket)
|
|
bracket = token;
|
|
brackets.push("}");
|
|
} else if (brackets.length === 0) {
|
|
if (type === ";") {
|
|
if (colon) {
|
|
this.decl(tokens, customProperty);
|
|
return;
|
|
} else {
|
|
break;
|
|
}
|
|
} else if (type === "{") {
|
|
this.rule(tokens);
|
|
return;
|
|
} else if (type === "}") {
|
|
this.tokenizer.back(tokens.pop());
|
|
end = true;
|
|
break;
|
|
} else if (type === ":") {
|
|
colon = true;
|
|
}
|
|
} else if (type === brackets[brackets.length - 1]) {
|
|
brackets.pop();
|
|
if (brackets.length === 0)
|
|
bracket = null;
|
|
}
|
|
token = this.tokenizer.nextToken();
|
|
}
|
|
if (this.tokenizer.endOfFile())
|
|
end = true;
|
|
if (brackets.length > 0)
|
|
this.unclosedBracket(bracket);
|
|
if (end && colon) {
|
|
if (!customProperty) {
|
|
while (tokens.length) {
|
|
token = tokens[tokens.length - 1][0];
|
|
if (token !== "space" && token !== "comment")
|
|
break;
|
|
this.tokenizer.back(tokens.pop());
|
|
}
|
|
}
|
|
this.decl(tokens, customProperty);
|
|
} else {
|
|
this.unknownWord(tokens);
|
|
}
|
|
}
|
|
parse() {
|
|
let token;
|
|
while (!this.tokenizer.endOfFile()) {
|
|
token = this.tokenizer.nextToken();
|
|
switch (token[0]) {
|
|
case "space":
|
|
this.spaces += token[1];
|
|
break;
|
|
case ";":
|
|
this.freeSemicolon(token);
|
|
break;
|
|
case "}":
|
|
this.end(token);
|
|
break;
|
|
case "comment":
|
|
this.comment(token);
|
|
break;
|
|
case "at-word":
|
|
this.atrule(token);
|
|
break;
|
|
case "{":
|
|
this.emptyRule(token);
|
|
break;
|
|
default:
|
|
this.other(token);
|
|
break;
|
|
}
|
|
}
|
|
this.endFile();
|
|
}
|
|
precheckMissedSemicolon() {
|
|
}
|
|
raw(node2, prop, tokens, customProperty) {
|
|
let token, type;
|
|
let length = tokens.length;
|
|
let value = "";
|
|
let clean = true;
|
|
let next, prev;
|
|
for (let i = 0;i < length; i += 1) {
|
|
token = tokens[i];
|
|
type = token[0];
|
|
if (type === "space" && i === length - 1 && !customProperty) {
|
|
clean = false;
|
|
} else if (type === "comment") {
|
|
prev = tokens[i - 1] ? tokens[i - 1][0] : "empty";
|
|
next = tokens[i + 1] ? tokens[i + 1][0] : "empty";
|
|
if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
|
|
if (value.slice(-1) === ",") {
|
|
clean = false;
|
|
} else {
|
|
value += token[1];
|
|
}
|
|
} else {
|
|
clean = false;
|
|
}
|
|
} else {
|
|
value += token[1];
|
|
}
|
|
}
|
|
if (!clean) {
|
|
let raw = tokens.reduce((all2, i) => all2 + i[1], "");
|
|
node2.raws[prop] = { raw, value };
|
|
}
|
|
node2[prop] = value;
|
|
}
|
|
rule(tokens) {
|
|
tokens.pop();
|
|
let node2 = new Rule;
|
|
this.init(node2, tokens[0][2]);
|
|
node2.raws.between = this.spacesAndCommentsFromEnd(tokens);
|
|
this.raw(node2, "selector", tokens);
|
|
this.current = node2;
|
|
}
|
|
spacesAndCommentsFromEnd(tokens) {
|
|
let lastTokenType;
|
|
let spaces = "";
|
|
while (tokens.length) {
|
|
lastTokenType = tokens[tokens.length - 1][0];
|
|
if (lastTokenType !== "space" && lastTokenType !== "comment")
|
|
break;
|
|
spaces = tokens.pop()[1] + spaces;
|
|
}
|
|
return spaces;
|
|
}
|
|
spacesAndCommentsFromStart(tokens) {
|
|
let next;
|
|
let spaces = "";
|
|
while (tokens.length) {
|
|
next = tokens[0][0];
|
|
if (next !== "space" && next !== "comment")
|
|
break;
|
|
spaces += tokens.shift()[1];
|
|
}
|
|
return spaces;
|
|
}
|
|
spacesFromEnd(tokens) {
|
|
let lastTokenType;
|
|
let spaces = "";
|
|
while (tokens.length) {
|
|
lastTokenType = tokens[tokens.length - 1][0];
|
|
if (lastTokenType !== "space")
|
|
break;
|
|
spaces = tokens.pop()[1] + spaces;
|
|
}
|
|
return spaces;
|
|
}
|
|
stringFrom(tokens, from) {
|
|
let result = "";
|
|
for (let i = from;i < tokens.length; i++) {
|
|
result += tokens[i][1];
|
|
}
|
|
tokens.splice(from, tokens.length - from);
|
|
return result;
|
|
}
|
|
unclosedBlock() {
|
|
let pos = this.current.source.start;
|
|
throw this.input.error("Unclosed block", pos.line, pos.column);
|
|
}
|
|
unclosedBracket(bracket) {
|
|
throw this.input.error("Unclosed bracket", { offset: bracket[2] }, { offset: bracket[2] + 1 });
|
|
}
|
|
unexpectedClose(token) {
|
|
throw this.input.error("Unexpected }", { offset: token[2] }, { offset: token[2] + 1 });
|
|
}
|
|
unknownWord(tokens) {
|
|
throw this.input.error("Unknown word", { offset: tokens[0][2] }, { offset: tokens[0][2] + tokens[0][1].length });
|
|
}
|
|
unnamedAtrule(node2, token) {
|
|
throw this.input.error("At-rule without name", { offset: token[2] }, { offset: token[2] + token[1].length });
|
|
}
|
|
}
|
|
module.exports = Parser;
|
|
});
|
|
|
|
// node_modules/postcss/lib/parse.js
|
|
var require_parse3 = __commonJS((exports, module) => {
|
|
var parse = function(css, opts) {
|
|
let input = new Input(css, opts);
|
|
let parser = new Parser(input);
|
|
try {
|
|
parser.parse();
|
|
} catch (e) {
|
|
if (true) {
|
|
if (e.name === "CssSyntaxError" && opts && opts.from) {
|
|
if (/\.scss$/i.test(opts.from)) {
|
|
e.message += "\nYou tried to parse SCSS with " + "the standard CSS parser; " + "try again with the postcss-scss parser";
|
|
} else if (/\.sass/i.test(opts.from)) {
|
|
e.message += "\nYou tried to parse Sass with " + "the standard CSS parser; " + "try again with the postcss-sass parser";
|
|
} else if (/\.less$/i.test(opts.from)) {
|
|
e.message += "\nYou tried to parse Less with " + "the standard CSS parser; " + "try again with the postcss-less parser";
|
|
}
|
|
}
|
|
}
|
|
throw e;
|
|
}
|
|
return parser.root;
|
|
};
|
|
var Container = require_container();
|
|
var Parser = require_parser();
|
|
var Input = require_input();
|
|
module.exports = parse;
|
|
parse.default = parse;
|
|
Container.registerParse(parse);
|
|
});
|
|
|
|
// node_modules/postcss/lib/lazy-result.js
|
|
var require_lazy_result = __commonJS((exports, module) => {
|
|
var isPromise = function(obj) {
|
|
return typeof obj === "object" && typeof obj.then === "function";
|
|
};
|
|
var getEvents = function(node2) {
|
|
let key = false;
|
|
let type = TYPE_TO_CLASS_NAME[node2.type];
|
|
if (node2.type === "decl") {
|
|
key = node2.prop.toLowerCase();
|
|
} else if (node2.type === "atrule") {
|
|
key = node2.name.toLowerCase();
|
|
}
|
|
if (key && node2.append) {
|
|
return [
|
|
type,
|
|
type + "-" + key,
|
|
CHILDREN,
|
|
type + "Exit",
|
|
type + "Exit-" + key
|
|
];
|
|
} else if (key) {
|
|
return [type, type + "-" + key, type + "Exit", type + "Exit-" + key];
|
|
} else if (node2.append) {
|
|
return [type, CHILDREN, type + "Exit"];
|
|
} else {
|
|
return [type, type + "Exit"];
|
|
}
|
|
};
|
|
var toStack = function(node2) {
|
|
let events;
|
|
if (node2.type === "document") {
|
|
events = ["Document", CHILDREN, "DocumentExit"];
|
|
} else if (node2.type === "root") {
|
|
events = ["Root", CHILDREN, "RootExit"];
|
|
} else {
|
|
events = getEvents(node2);
|
|
}
|
|
return {
|
|
eventIndex: 0,
|
|
events,
|
|
iterator: 0,
|
|
node: node2,
|
|
visitorIndex: 0,
|
|
visitors: []
|
|
};
|
|
};
|
|
var cleanMarks = function(node2) {
|
|
node2[isClean] = false;
|
|
if (node2.nodes)
|
|
node2.nodes.forEach((i) => cleanMarks(i));
|
|
return node2;
|
|
};
|
|
var { isClean, my } = require_symbols6();
|
|
var MapGenerator = require_map_generator();
|
|
var stringify = require_stringify3();
|
|
var Container = require_container();
|
|
var Document = require_document();
|
|
var warnOnce = require_warn_once();
|
|
var Result = require_result();
|
|
var parse = require_parse3();
|
|
var Root = require_root();
|
|
var TYPE_TO_CLASS_NAME = {
|
|
atrule: "AtRule",
|
|
comment: "Comment",
|
|
decl: "Declaration",
|
|
document: "Document",
|
|
root: "Root",
|
|
rule: "Rule"
|
|
};
|
|
var PLUGIN_PROPS = {
|
|
AtRule: true,
|
|
AtRuleExit: true,
|
|
Comment: true,
|
|
CommentExit: true,
|
|
Declaration: true,
|
|
DeclarationExit: true,
|
|
Document: true,
|
|
DocumentExit: true,
|
|
Once: true,
|
|
OnceExit: true,
|
|
postcssPlugin: true,
|
|
prepare: true,
|
|
Root: true,
|
|
RootExit: true,
|
|
Rule: true,
|
|
RuleExit: true
|
|
};
|
|
var NOT_VISITORS = {
|
|
Once: true,
|
|
postcssPlugin: true,
|
|
prepare: true
|
|
};
|
|
var CHILDREN = 0;
|
|
var postcss = {};
|
|
|
|
class LazyResult {
|
|
constructor(processor, css, opts) {
|
|
this.stringified = false;
|
|
this.processed = false;
|
|
let root;
|
|
if (typeof css === "object" && css !== null && (css.type === "root" || css.type === "document")) {
|
|
root = cleanMarks(css);
|
|
} else if (css instanceof LazyResult || css instanceof Result) {
|
|
root = cleanMarks(css.root);
|
|
if (css.map) {
|
|
if (typeof opts.map === "undefined")
|
|
opts.map = {};
|
|
if (!opts.map.inline)
|
|
opts.map.inline = false;
|
|
opts.map.prev = css.map;
|
|
}
|
|
} else {
|
|
let parser = parse;
|
|
if (opts.syntax)
|
|
parser = opts.syntax.parse;
|
|
if (opts.parser)
|
|
parser = opts.parser;
|
|
if (parser.parse)
|
|
parser = parser.parse;
|
|
try {
|
|
root = parser(css, opts);
|
|
} catch (error) {
|
|
this.processed = true;
|
|
this.error = error;
|
|
}
|
|
if (root && !root[my]) {
|
|
Container.rebuild(root);
|
|
}
|
|
}
|
|
this.result = new Result(processor, root, opts);
|
|
this.helpers = { ...postcss, postcss, result: this.result };
|
|
this.plugins = this.processor.plugins.map((plugin) => {
|
|
if (typeof plugin === "object" && plugin.prepare) {
|
|
return { ...plugin, ...plugin.prepare(this.result) };
|
|
} else {
|
|
return plugin;
|
|
}
|
|
});
|
|
}
|
|
async() {
|
|
if (this.error)
|
|
return Promise.reject(this.error);
|
|
if (this.processed)
|
|
return Promise.resolve(this.result);
|
|
if (!this.processing) {
|
|
this.processing = this.runAsync();
|
|
}
|
|
return this.processing;
|
|
}
|
|
catch(onRejected) {
|
|
return this.async().catch(onRejected);
|
|
}
|
|
finally(onFinally) {
|
|
return this.async().then(onFinally, onFinally);
|
|
}
|
|
getAsyncError() {
|
|
throw new Error("Use process(css).then(cb) to work with async plugins");
|
|
}
|
|
handleError(error, node2) {
|
|
let plugin = this.result.lastPlugin;
|
|
try {
|
|
if (node2)
|
|
node2.addToError(error);
|
|
this.error = error;
|
|
if (error.name === "CssSyntaxError" && !error.plugin) {
|
|
error.plugin = plugin.postcssPlugin;
|
|
error.setMessage();
|
|
} else if (plugin.postcssVersion) {
|
|
if (true) {
|
|
let pluginName = plugin.postcssPlugin;
|
|
let pluginVer = plugin.postcssVersion;
|
|
let runtimeVer = this.result.processor.version;
|
|
let a = pluginVer.split(".");
|
|
let b = runtimeVer.split(".");
|
|
if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
|
|
console.error("Unknown error from PostCSS plugin. Your current PostCSS " + "version is " + runtimeVer + ", but " + pluginName + " uses " + pluginVer + ". Perhaps this is the source of the error below.");
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
if (console && console.error)
|
|
console.error(err);
|
|
}
|
|
return error;
|
|
}
|
|
prepareVisitors() {
|
|
this.listeners = {};
|
|
let add = (plugin, type, cb) => {
|
|
if (!this.listeners[type])
|
|
this.listeners[type] = [];
|
|
this.listeners[type].push([plugin, cb]);
|
|
};
|
|
for (let plugin of this.plugins) {
|
|
if (typeof plugin === "object") {
|
|
for (let event in plugin) {
|
|
if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {
|
|
throw new Error(`Unknown event ${event} in ${plugin.postcssPlugin}. ` + `Try to update PostCSS (${this.processor.version} now).`);
|
|
}
|
|
if (!NOT_VISITORS[event]) {
|
|
if (typeof plugin[event] === "object") {
|
|
for (let filter2 in plugin[event]) {
|
|
if (filter2 === "*") {
|
|
add(plugin, event, plugin[event][filter2]);
|
|
} else {
|
|
add(plugin, event + "-" + filter2.toLowerCase(), plugin[event][filter2]);
|
|
}
|
|
}
|
|
} else if (typeof plugin[event] === "function") {
|
|
add(plugin, event, plugin[event]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.hasListener = Object.keys(this.listeners).length > 0;
|
|
}
|
|
async runAsync() {
|
|
this.plugin = 0;
|
|
for (let i = 0;i < this.plugins.length; i++) {
|
|
let plugin = this.plugins[i];
|
|
let promise = this.runOnRoot(plugin);
|
|
if (isPromise(promise)) {
|
|
try {
|
|
await promise;
|
|
} catch (error) {
|
|
throw this.handleError(error);
|
|
}
|
|
}
|
|
}
|
|
this.prepareVisitors();
|
|
if (this.hasListener) {
|
|
let root = this.result.root;
|
|
while (!root[isClean]) {
|
|
root[isClean] = true;
|
|
let stack = [toStack(root)];
|
|
while (stack.length > 0) {
|
|
let promise = this.visitTick(stack);
|
|
if (isPromise(promise)) {
|
|
try {
|
|
await promise;
|
|
} catch (e) {
|
|
let node2 = stack[stack.length - 1].node;
|
|
throw this.handleError(e, node2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.listeners.OnceExit) {
|
|
for (let [plugin, visitor] of this.listeners.OnceExit) {
|
|
this.result.lastPlugin = plugin;
|
|
try {
|
|
if (root.type === "document") {
|
|
let roots = root.nodes.map((subRoot) => visitor(subRoot, this.helpers));
|
|
await Promise.all(roots);
|
|
} else {
|
|
await visitor(root, this.helpers);
|
|
}
|
|
} catch (e) {
|
|
throw this.handleError(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.processed = true;
|
|
return this.stringify();
|
|
}
|
|
runOnRoot(plugin) {
|
|
this.result.lastPlugin = plugin;
|
|
try {
|
|
if (typeof plugin === "object" && plugin.Once) {
|
|
if (this.result.root.type === "document") {
|
|
let roots = this.result.root.nodes.map((root) => plugin.Once(root, this.helpers));
|
|
if (isPromise(roots[0])) {
|
|
return Promise.all(roots);
|
|
}
|
|
return roots;
|
|
}
|
|
return plugin.Once(this.result.root, this.helpers);
|
|
} else if (typeof plugin === "function") {
|
|
return plugin(this.result.root, this.result);
|
|
}
|
|
} catch (error) {
|
|
throw this.handleError(error);
|
|
}
|
|
}
|
|
stringify() {
|
|
if (this.error)
|
|
throw this.error;
|
|
if (this.stringified)
|
|
return this.result;
|
|
this.stringified = true;
|
|
this.sync();
|
|
let opts = this.result.opts;
|
|
let str = stringify;
|
|
if (opts.syntax)
|
|
str = opts.syntax.stringify;
|
|
if (opts.stringifier)
|
|
str = opts.stringifier;
|
|
if (str.stringify)
|
|
str = str.stringify;
|
|
let map = new MapGenerator(str, this.result.root, this.result.opts);
|
|
let data4 = map.generate();
|
|
this.result.css = data4[0];
|
|
this.result.map = data4[1];
|
|
return this.result;
|
|
}
|
|
sync() {
|
|
if (this.error)
|
|
throw this.error;
|
|
if (this.processed)
|
|
return this.result;
|
|
this.processed = true;
|
|
if (this.processing) {
|
|
throw this.getAsyncError();
|
|
}
|
|
for (let plugin of this.plugins) {
|
|
let promise = this.runOnRoot(plugin);
|
|
if (isPromise(promise)) {
|
|
throw this.getAsyncError();
|
|
}
|
|
}
|
|
this.prepareVisitors();
|
|
if (this.hasListener) {
|
|
let root = this.result.root;
|
|
while (!root[isClean]) {
|
|
root[isClean] = true;
|
|
this.walkSync(root);
|
|
}
|
|
if (this.listeners.OnceExit) {
|
|
if (root.type === "document") {
|
|
for (let subRoot of root.nodes) {
|
|
this.visitSync(this.listeners.OnceExit, subRoot);
|
|
}
|
|
} else {
|
|
this.visitSync(this.listeners.OnceExit, root);
|
|
}
|
|
}
|
|
}
|
|
return this.result;
|
|
}
|
|
then(onFulfilled, onRejected) {
|
|
if (true) {
|
|
if (!("from" in this.opts)) {
|
|
warnOnce("Without `from` option PostCSS could generate wrong source map " + "and will not find Browserslist config. Set it to CSS file path " + "or to `undefined` to prevent this warning.");
|
|
}
|
|
}
|
|
return this.async().then(onFulfilled, onRejected);
|
|
}
|
|
toString() {
|
|
return this.css;
|
|
}
|
|
visitSync(visitors, node2) {
|
|
for (let [plugin, visitor] of visitors) {
|
|
this.result.lastPlugin = plugin;
|
|
let promise;
|
|
try {
|
|
promise = visitor(node2, this.helpers);
|
|
} catch (e) {
|
|
throw this.handleError(e, node2.proxyOf);
|
|
}
|
|
if (node2.type !== "root" && node2.type !== "document" && !node2.parent) {
|
|
return true;
|
|
}
|
|
if (isPromise(promise)) {
|
|
throw this.getAsyncError();
|
|
}
|
|
}
|
|
}
|
|
visitTick(stack) {
|
|
let visit = stack[stack.length - 1];
|
|
let { node: node2, visitors } = visit;
|
|
if (node2.type !== "root" && node2.type !== "document" && !node2.parent) {
|
|
stack.pop();
|
|
return;
|
|
}
|
|
if (visitors.length > 0 && visit.visitorIndex < visitors.length) {
|
|
let [plugin, visitor] = visitors[visit.visitorIndex];
|
|
visit.visitorIndex += 1;
|
|
if (visit.visitorIndex === visitors.length) {
|
|
visit.visitors = [];
|
|
visit.visitorIndex = 0;
|
|
}
|
|
this.result.lastPlugin = plugin;
|
|
try {
|
|
return visitor(node2.toProxy(), this.helpers);
|
|
} catch (e) {
|
|
throw this.handleError(e, node2);
|
|
}
|
|
}
|
|
if (visit.iterator !== 0) {
|
|
let iterator = visit.iterator;
|
|
let child;
|
|
while (child = node2.nodes[node2.indexes[iterator]]) {
|
|
node2.indexes[iterator] += 1;
|
|
if (!child[isClean]) {
|
|
child[isClean] = true;
|
|
stack.push(toStack(child));
|
|
return;
|
|
}
|
|
}
|
|
visit.iterator = 0;
|
|
delete node2.indexes[iterator];
|
|
}
|
|
let events = visit.events;
|
|
while (visit.eventIndex < events.length) {
|
|
let event = events[visit.eventIndex];
|
|
visit.eventIndex += 1;
|
|
if (event === CHILDREN) {
|
|
if (node2.nodes && node2.nodes.length) {
|
|
node2[isClean] = true;
|
|
visit.iterator = node2.getIterator();
|
|
}
|
|
return;
|
|
} else if (this.listeners[event]) {
|
|
visit.visitors = this.listeners[event];
|
|
return;
|
|
}
|
|
}
|
|
stack.pop();
|
|
}
|
|
walkSync(node2) {
|
|
node2[isClean] = true;
|
|
let events = getEvents(node2);
|
|
for (let event of events) {
|
|
if (event === CHILDREN) {
|
|
if (node2.nodes) {
|
|
node2.each((child) => {
|
|
if (!child[isClean])
|
|
this.walkSync(child);
|
|
});
|
|
}
|
|
} else {
|
|
let visitors = this.listeners[event];
|
|
if (visitors) {
|
|
if (this.visitSync(visitors, node2.toProxy()))
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
warnings() {
|
|
return this.sync().warnings();
|
|
}
|
|
get content() {
|
|
return this.stringify().content;
|
|
}
|
|
get css() {
|
|
return this.stringify().css;
|
|
}
|
|
get map() {
|
|
return this.stringify().map;
|
|
}
|
|
get messages() {
|
|
return this.sync().messages;
|
|
}
|
|
get opts() {
|
|
return this.result.opts;
|
|
}
|
|
get processor() {
|
|
return this.result.processor;
|
|
}
|
|
get root() {
|
|
return this.sync().root;
|
|
}
|
|
get [Symbol.toStringTag]() {
|
|
return "LazyResult";
|
|
}
|
|
}
|
|
LazyResult.registerPostcss = (dependant) => {
|
|
postcss = dependant;
|
|
};
|
|
module.exports = LazyResult;
|
|
LazyResult.default = LazyResult;
|
|
Root.registerLazyResult(LazyResult);
|
|
Document.registerLazyResult(LazyResult);
|
|
});
|
|
|
|
// node_modules/postcss/lib/no-work-result.js
|
|
var require_no_work_result = __commonJS((exports, module) => {
|
|
var MapGenerator = require_map_generator();
|
|
var stringify = require_stringify3();
|
|
var warnOnce = require_warn_once();
|
|
var parse = require_parse3();
|
|
var Result = require_result();
|
|
|
|
class NoWorkResult {
|
|
constructor(processor, css, opts) {
|
|
css = css.toString();
|
|
this.stringified = false;
|
|
this._processor = processor;
|
|
this._css = css;
|
|
this._opts = opts;
|
|
this._map = undefined;
|
|
let root;
|
|
let str = stringify;
|
|
this.result = new Result(this._processor, root, this._opts);
|
|
this.result.css = css;
|
|
let self2 = this;
|
|
Object.defineProperty(this.result, "root", {
|
|
get() {
|
|
return self2.root;
|
|
}
|
|
});
|
|
let map = new MapGenerator(str, root, this._opts, css);
|
|
if (map.isMap()) {
|
|
let [generatedCSS, generatedMap] = map.generate();
|
|
if (generatedCSS) {
|
|
this.result.css = generatedCSS;
|
|
}
|
|
if (generatedMap) {
|
|
this.result.map = generatedMap;
|
|
}
|
|
} else {
|
|
map.clearAnnotation();
|
|
this.result.css = map.css;
|
|
}
|
|
}
|
|
async() {
|
|
if (this.error)
|
|
return Promise.reject(this.error);
|
|
return Promise.resolve(this.result);
|
|
}
|
|
catch(onRejected) {
|
|
return this.async().catch(onRejected);
|
|
}
|
|
finally(onFinally) {
|
|
return this.async().then(onFinally, onFinally);
|
|
}
|
|
sync() {
|
|
if (this.error)
|
|
throw this.error;
|
|
return this.result;
|
|
}
|
|
then(onFulfilled, onRejected) {
|
|
if (true) {
|
|
if (!("from" in this._opts)) {
|
|
warnOnce("Without `from` option PostCSS could generate wrong source map " + "and will not find Browserslist config. Set it to CSS file path " + "or to `undefined` to prevent this warning.");
|
|
}
|
|
}
|
|
return this.async().then(onFulfilled, onRejected);
|
|
}
|
|
toString() {
|
|
return this._css;
|
|
}
|
|
warnings() {
|
|
return [];
|
|
}
|
|
get content() {
|
|
return this.result.css;
|
|
}
|
|
get css() {
|
|
return this.result.css;
|
|
}
|
|
get map() {
|
|
return this.result.map;
|
|
}
|
|
get messages() {
|
|
return [];
|
|
}
|
|
get opts() {
|
|
return this.result.opts;
|
|
}
|
|
get processor() {
|
|
return this.result.processor;
|
|
}
|
|
get root() {
|
|
if (this._root) {
|
|
return this._root;
|
|
}
|
|
let root;
|
|
let parser = parse;
|
|
try {
|
|
root = parser(this._css, this._opts);
|
|
} catch (error) {
|
|
this.error = error;
|
|
}
|
|
if (this.error) {
|
|
throw this.error;
|
|
} else {
|
|
this._root = root;
|
|
return root;
|
|
}
|
|
}
|
|
get [Symbol.toStringTag]() {
|
|
return "NoWorkResult";
|
|
}
|
|
}
|
|
module.exports = NoWorkResult;
|
|
NoWorkResult.default = NoWorkResult;
|
|
});
|
|
|
|
// node_modules/postcss/lib/processor.js
|
|
var require_processor = __commonJS((exports, module) => {
|
|
var NoWorkResult = require_no_work_result();
|
|
var LazyResult = require_lazy_result();
|
|
var Document = require_document();
|
|
var Root = require_root();
|
|
|
|
class Processor {
|
|
constructor(plugins = []) {
|
|
this.version = "8.4.40";
|
|
this.plugins = this.normalize(plugins);
|
|
}
|
|
normalize(plugins) {
|
|
let normalized = [];
|
|
for (let i of plugins) {
|
|
if (i.postcss === true) {
|
|
i = i();
|
|
} else if (i.postcss) {
|
|
i = i.postcss;
|
|
}
|
|
if (typeof i === "object" && Array.isArray(i.plugins)) {
|
|
normalized = normalized.concat(i.plugins);
|
|
} else if (typeof i === "object" && i.postcssPlugin) {
|
|
normalized.push(i);
|
|
} else if (typeof i === "function") {
|
|
normalized.push(i);
|
|
} else if (typeof i === "object" && (i.parse || i.stringify)) {
|
|
if (true) {
|
|
throw new Error("PostCSS syntaxes cannot be used as plugins. Instead, please use " + "one of the syntax/parser/stringifier options as outlined " + "in your PostCSS runner documentation.");
|
|
}
|
|
} else {
|
|
throw new Error(i + " is not a PostCSS plugin");
|
|
}
|
|
}
|
|
return normalized;
|
|
}
|
|
process(css, opts = {}) {
|
|
if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {
|
|
return new NoWorkResult(this, css, opts);
|
|
} else {
|
|
return new LazyResult(this, css, opts);
|
|
}
|
|
}
|
|
use(plugin) {
|
|
this.plugins = this.plugins.concat(this.normalize([plugin]));
|
|
return this;
|
|
}
|
|
}
|
|
module.exports = Processor;
|
|
Processor.default = Processor;
|
|
Root.registerProcessor(Processor);
|
|
Document.registerProcessor(Processor);
|
|
});
|
|
|
|
// node_modules/postcss/lib/fromJSON.js
|
|
var require_fromJSON = __commonJS((exports, module) => {
|
|
var fromJSON = function(json, inputs) {
|
|
if (Array.isArray(json))
|
|
return json.map((n) => fromJSON(n));
|
|
let { inputs: ownInputs, ...defaults5 } = json;
|
|
if (ownInputs) {
|
|
inputs = [];
|
|
for (let input of ownInputs) {
|
|
let inputHydrated = { ...input, __proto__: Input.prototype };
|
|
if (inputHydrated.map) {
|
|
inputHydrated.map = {
|
|
...inputHydrated.map,
|
|
__proto__: PreviousMap.prototype
|
|
};
|
|
}
|
|
inputs.push(inputHydrated);
|
|
}
|
|
}
|
|
if (defaults5.nodes) {
|
|
defaults5.nodes = json.nodes.map((n) => fromJSON(n, inputs));
|
|
}
|
|
if (defaults5.source) {
|
|
let { inputId, ...source } = defaults5.source;
|
|
defaults5.source = source;
|
|
if (inputId != null) {
|
|
defaults5.source.input = inputs[inputId];
|
|
}
|
|
}
|
|
if (defaults5.type === "root") {
|
|
return new Root(defaults5);
|
|
} else if (defaults5.type === "decl") {
|
|
return new Declaration(defaults5);
|
|
} else if (defaults5.type === "rule") {
|
|
return new Rule(defaults5);
|
|
} else if (defaults5.type === "comment") {
|
|
return new Comment(defaults5);
|
|
} else if (defaults5.type === "atrule") {
|
|
return new AtRule(defaults5);
|
|
} else {
|
|
throw new Error("Unknown node type: " + json.type);
|
|
}
|
|
};
|
|
var Declaration = require_declaration();
|
|
var PreviousMap = require_previous_map();
|
|
var Comment = require_comment();
|
|
var AtRule = require_at_rule();
|
|
var Input = require_input();
|
|
var Root = require_root();
|
|
var Rule = require_rule();
|
|
module.exports = fromJSON;
|
|
fromJSON.default = fromJSON;
|
|
});
|
|
|
|
// node_modules/postcss/lib/postcss.js
|
|
var require_postcss = __commonJS((exports, module) => {
|
|
var postcss = function(...plugins) {
|
|
if (plugins.length === 1 && Array.isArray(plugins[0])) {
|
|
plugins = plugins[0];
|
|
}
|
|
return new Processor(plugins);
|
|
};
|
|
var CssSyntaxError = require_css_syntax_error();
|
|
var Declaration = require_declaration();
|
|
var LazyResult = require_lazy_result();
|
|
var Container = require_container();
|
|
var Processor = require_processor();
|
|
var stringify = require_stringify3();
|
|
var fromJSON = require_fromJSON();
|
|
var Document = require_document();
|
|
var Warning = require_warning();
|
|
var Comment = require_comment();
|
|
var AtRule = require_at_rule();
|
|
var Result = require_result();
|
|
var Input = require_input();
|
|
var parse = require_parse3();
|
|
var list = require_list();
|
|
var Rule = require_rule();
|
|
var Root = require_root();
|
|
var Node = require_node2();
|
|
postcss.plugin = function plugin(name, initializer) {
|
|
let warningPrinted = false;
|
|
function creator(...args) {
|
|
if (console && console.warn && !warningPrinted) {
|
|
warningPrinted = true;
|
|
console.warn(name + ": postcss.plugin was deprecated. Migration guide:\n" + "https://evilmartians.com/chronicles/postcss-8-plugin-migration");
|
|
if (process.env.LANG && process.env.LANG.startsWith("cn")) {
|
|
console.warn(name + `: \u91CC\u9762 postcss.plugin \u88AB\u5F03\u7528. \u8FC1\u79FB\u6307\u5357:
|
|
` + "https://www.w3ctech.com/topic/2226");
|
|
}
|
|
}
|
|
let transformer = initializer(...args);
|
|
transformer.postcssPlugin = name;
|
|
transformer.postcssVersion = new Processor().version;
|
|
return transformer;
|
|
}
|
|
let cache;
|
|
Object.defineProperty(creator, "postcss", {
|
|
get() {
|
|
if (!cache)
|
|
cache = creator();
|
|
return cache;
|
|
}
|
|
});
|
|
creator.process = function(css, processOpts, pluginOpts) {
|
|
return postcss([creator(pluginOpts)]).process(css, processOpts);
|
|
};
|
|
return creator;
|
|
};
|
|
postcss.stringify = stringify;
|
|
postcss.parse = parse;
|
|
postcss.fromJSON = fromJSON;
|
|
postcss.list = list;
|
|
postcss.comment = (defaults5) => new Comment(defaults5);
|
|
postcss.atRule = (defaults5) => new AtRule(defaults5);
|
|
postcss.decl = (defaults5) => new Declaration(defaults5);
|
|
postcss.rule = (defaults5) => new Rule(defaults5);
|
|
postcss.root = (defaults5) => new Root(defaults5);
|
|
postcss.document = (defaults5) => new Document(defaults5);
|
|
postcss.CssSyntaxError = CssSyntaxError;
|
|
postcss.Declaration = Declaration;
|
|
postcss.Container = Container;
|
|
postcss.Processor = Processor;
|
|
postcss.Document = Document;
|
|
postcss.Comment = Comment;
|
|
postcss.Warning = Warning;
|
|
postcss.AtRule = AtRule;
|
|
postcss.Result = Result;
|
|
postcss.Input = Input;
|
|
postcss.Rule = Rule;
|
|
postcss.Root = Root;
|
|
postcss.Node = Node;
|
|
LazyResult.registerPostcss(postcss);
|
|
module.exports = postcss;
|
|
postcss.default = postcss;
|
|
});
|
|
|
|
// node_modules/sanitize-html/index.js
|
|
var require_sanitize_html = __commonJS((exports, module) => {
|
|
var each = function(obj, cb) {
|
|
if (obj) {
|
|
Object.keys(obj).forEach(function(key) {
|
|
cb(obj[key], key);
|
|
});
|
|
}
|
|
};
|
|
var has = function(obj, key) {
|
|
return {}.hasOwnProperty.call(obj, key);
|
|
};
|
|
var filter2 = function(a, cb) {
|
|
const n = [];
|
|
each(a, function(v) {
|
|
if (cb(v)) {
|
|
n.push(v);
|
|
}
|
|
});
|
|
return n;
|
|
};
|
|
var isEmptyObject = function(obj) {
|
|
for (const key in obj) {
|
|
if (has(obj, key)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
var stringifySrcset = function(parsedSrcset) {
|
|
return parsedSrcset.map(function(part) {
|
|
if (!part.url) {
|
|
throw new Error("URL missing");
|
|
}
|
|
return part.url + (part.w ? ` ${part.w}w` : "") + (part.h ? ` ${part.h}h` : "") + (part.d ? ` ${part.d}x` : "");
|
|
}).join(", ");
|
|
};
|
|
var sanitizeHtml = function(html, options, _recursing) {
|
|
if (html == null) {
|
|
return "";
|
|
}
|
|
if (typeof html === "number") {
|
|
html = html.toString();
|
|
}
|
|
let result = "";
|
|
let tempResult = "";
|
|
function Frame(tag, attribs) {
|
|
const that = this;
|
|
this.tag = tag;
|
|
this.attribs = attribs || {};
|
|
this.tagPosition = result.length;
|
|
this.text = "";
|
|
this.mediaChildren = [];
|
|
this.updateParentNodeText = function() {
|
|
if (stack.length) {
|
|
const parentFrame = stack[stack.length - 1];
|
|
parentFrame.text += that.text;
|
|
}
|
|
};
|
|
this.updateParentNodeMediaChildren = function() {
|
|
if (stack.length && mediaTags.includes(this.tag)) {
|
|
const parentFrame = stack[stack.length - 1];
|
|
parentFrame.mediaChildren.push(this.tag);
|
|
}
|
|
};
|
|
}
|
|
options = Object.assign({}, sanitizeHtml.defaults, options);
|
|
options.parser = Object.assign({}, htmlParserDefaults, options.parser);
|
|
const tagAllowed = function(name) {
|
|
return options.allowedTags === false || (options.allowedTags || []).indexOf(name) > -1;
|
|
};
|
|
vulnerableTags.forEach(function(tag) {
|
|
if (tagAllowed(tag) && !options.allowVulnerableTags) {
|
|
console.warn(`
|
|
|
|
\u26A0\uFE0F Your \`allowedTags\` option includes, \`${tag}\`, which is inherently\nvulnerable to XSS attacks. Please remove it from \`allowedTags\`.\nOr, to disable this warning, add the \`allowVulnerableTags\` option\nand ensure you are accounting for this risk.\n\n`);
|
|
}
|
|
});
|
|
const nonTextTagsArray = options.nonTextTags || [
|
|
"script",
|
|
"style",
|
|
"textarea",
|
|
"option"
|
|
];
|
|
let allowedAttributesMap;
|
|
let allowedAttributesGlobMap;
|
|
if (options.allowedAttributes) {
|
|
allowedAttributesMap = {};
|
|
allowedAttributesGlobMap = {};
|
|
each(options.allowedAttributes, function(attributes, tag) {
|
|
allowedAttributesMap[tag] = [];
|
|
const globRegex = [];
|
|
attributes.forEach(function(obj) {
|
|
if (typeof obj === "string" && obj.indexOf("*") >= 0) {
|
|
globRegex.push(escapeStringRegexp(obj).replace(/\\\*/g, ".*"));
|
|
} else {
|
|
allowedAttributesMap[tag].push(obj);
|
|
}
|
|
});
|
|
if (globRegex.length) {
|
|
allowedAttributesGlobMap[tag] = new RegExp("^(" + globRegex.join("|") + ")$");
|
|
}
|
|
});
|
|
}
|
|
const allowedClassesMap = {};
|
|
const allowedClassesGlobMap = {};
|
|
const allowedClassesRegexMap = {};
|
|
each(options.allowedClasses, function(classes, tag) {
|
|
if (allowedAttributesMap) {
|
|
if (!has(allowedAttributesMap, tag)) {
|
|
allowedAttributesMap[tag] = [];
|
|
}
|
|
allowedAttributesMap[tag].push("class");
|
|
}
|
|
allowedClassesMap[tag] = classes;
|
|
if (Array.isArray(classes)) {
|
|
const globRegex = [];
|
|
allowedClassesMap[tag] = [];
|
|
allowedClassesRegexMap[tag] = [];
|
|
classes.forEach(function(obj) {
|
|
if (typeof obj === "string" && obj.indexOf("*") >= 0) {
|
|
globRegex.push(escapeStringRegexp(obj).replace(/\\\*/g, ".*"));
|
|
} else if (obj instanceof RegExp) {
|
|
allowedClassesRegexMap[tag].push(obj);
|
|
} else {
|
|
allowedClassesMap[tag].push(obj);
|
|
}
|
|
});
|
|
if (globRegex.length) {
|
|
allowedClassesGlobMap[tag] = new RegExp("^(" + globRegex.join("|") + ")$");
|
|
}
|
|
}
|
|
});
|
|
const transformTagsMap = {};
|
|
let transformTagsAll;
|
|
each(options.transformTags, function(transform, tag) {
|
|
let transFun;
|
|
if (typeof transform === "function") {
|
|
transFun = transform;
|
|
} else if (typeof transform === "string") {
|
|
transFun = sanitizeHtml.simpleTransform(transform);
|
|
}
|
|
if (tag === "*") {
|
|
transformTagsAll = transFun;
|
|
} else {
|
|
transformTagsMap[tag] = transFun;
|
|
}
|
|
});
|
|
let depth;
|
|
let stack;
|
|
let skipMap;
|
|
let transformMap;
|
|
let skipText;
|
|
let skipTextDepth;
|
|
let addedText = false;
|
|
initializeState();
|
|
const parser = new htmlparser.Parser({
|
|
onopentag: function(name, attribs) {
|
|
if (options.enforceHtmlBoundary && name === "html") {
|
|
initializeState();
|
|
}
|
|
if (skipText) {
|
|
skipTextDepth++;
|
|
return;
|
|
}
|
|
const frame = new Frame(name, attribs);
|
|
stack.push(frame);
|
|
let skip = false;
|
|
const hasText = !!frame.text;
|
|
let transformedTag;
|
|
if (has(transformTagsMap, name)) {
|
|
transformedTag = transformTagsMap[name](name, attribs);
|
|
frame.attribs = attribs = transformedTag.attribs;
|
|
if (transformedTag.text !== undefined) {
|
|
frame.innerText = transformedTag.text;
|
|
}
|
|
if (name !== transformedTag.tagName) {
|
|
frame.name = name = transformedTag.tagName;
|
|
transformMap[depth] = transformedTag.tagName;
|
|
}
|
|
}
|
|
if (transformTagsAll) {
|
|
transformedTag = transformTagsAll(name, attribs);
|
|
frame.attribs = attribs = transformedTag.attribs;
|
|
if (name !== transformedTag.tagName) {
|
|
frame.name = name = transformedTag.tagName;
|
|
transformMap[depth] = transformedTag.tagName;
|
|
}
|
|
}
|
|
if (!tagAllowed(name) || options.disallowedTagsMode === "recursiveEscape" && !isEmptyObject(skipMap) || options.nestingLimit != null && depth >= options.nestingLimit) {
|
|
skip = true;
|
|
skipMap[depth] = true;
|
|
if (options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") {
|
|
if (nonTextTagsArray.indexOf(name) !== -1) {
|
|
skipText = true;
|
|
skipTextDepth = 1;
|
|
}
|
|
}
|
|
skipMap[depth] = true;
|
|
}
|
|
depth++;
|
|
if (skip) {
|
|
if (options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") {
|
|
return;
|
|
}
|
|
tempResult = result;
|
|
result = "";
|
|
}
|
|
result += "<" + name;
|
|
if (name === "script") {
|
|
if (options.allowedScriptHostnames || options.allowedScriptDomains) {
|
|
frame.innerText = "";
|
|
}
|
|
}
|
|
if (!allowedAttributesMap || has(allowedAttributesMap, name) || allowedAttributesMap["*"]) {
|
|
each(attribs, function(value, a) {
|
|
if (!VALID_HTML_ATTRIBUTE_NAME.test(a)) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
if (value === "" && !options.allowedEmptyAttributes.includes(a) && (options.nonBooleanAttributes.includes(a) || options.nonBooleanAttributes.includes("*"))) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
let passedAllowedAttributesMapCheck = false;
|
|
if (!allowedAttributesMap || has(allowedAttributesMap, name) && allowedAttributesMap[name].indexOf(a) !== -1 || allowedAttributesMap["*"] && allowedAttributesMap["*"].indexOf(a) !== -1 || has(allowedAttributesGlobMap, name) && allowedAttributesGlobMap[name].test(a) || allowedAttributesGlobMap["*"] && allowedAttributesGlobMap["*"].test(a)) {
|
|
passedAllowedAttributesMapCheck = true;
|
|
} else if (allowedAttributesMap && allowedAttributesMap[name]) {
|
|
for (const o of allowedAttributesMap[name]) {
|
|
if (isPlainObject2(o) && o.name && o.name === a) {
|
|
passedAllowedAttributesMapCheck = true;
|
|
let newValue = "";
|
|
if (o.multiple === true) {
|
|
const splitStrArray = value.split(" ");
|
|
for (const s of splitStrArray) {
|
|
if (o.values.indexOf(s) !== -1) {
|
|
if (newValue === "") {
|
|
newValue = s;
|
|
} else {
|
|
newValue += " " + s;
|
|
}
|
|
}
|
|
}
|
|
} else if (o.values.indexOf(value) >= 0) {
|
|
newValue = value;
|
|
}
|
|
value = newValue;
|
|
}
|
|
}
|
|
}
|
|
if (passedAllowedAttributesMapCheck) {
|
|
if (options.allowedSchemesAppliedToAttributes.indexOf(a) !== -1) {
|
|
if (naughtyHref(name, value)) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
}
|
|
if (name === "script" && a === "src") {
|
|
let allowed = true;
|
|
try {
|
|
const parsed = parseUrl2(value);
|
|
if (options.allowedScriptHostnames || options.allowedScriptDomains) {
|
|
const allowedHostname = (options.allowedScriptHostnames || []).find(function(hostname) {
|
|
return hostname === parsed.url.hostname;
|
|
});
|
|
const allowedDomain = (options.allowedScriptDomains || []).find(function(domain) {
|
|
return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
|
|
});
|
|
allowed = allowedHostname || allowedDomain;
|
|
}
|
|
} catch (e) {
|
|
allowed = false;
|
|
}
|
|
if (!allowed) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
}
|
|
if (name === "iframe" && a === "src") {
|
|
let allowed = true;
|
|
try {
|
|
const parsed = parseUrl2(value);
|
|
if (parsed.isRelativeUrl) {
|
|
allowed = has(options, "allowIframeRelativeUrls") ? options.allowIframeRelativeUrls : !options.allowedIframeHostnames && !options.allowedIframeDomains;
|
|
} else if (options.allowedIframeHostnames || options.allowedIframeDomains) {
|
|
const allowedHostname = (options.allowedIframeHostnames || []).find(function(hostname) {
|
|
return hostname === parsed.url.hostname;
|
|
});
|
|
const allowedDomain = (options.allowedIframeDomains || []).find(function(domain) {
|
|
return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);
|
|
});
|
|
allowed = allowedHostname || allowedDomain;
|
|
}
|
|
} catch (e) {
|
|
allowed = false;
|
|
}
|
|
if (!allowed) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
}
|
|
if (a === "srcset") {
|
|
try {
|
|
let parsed = parseSrcset(value);
|
|
parsed.forEach(function(value2) {
|
|
if (naughtyHref("srcset", value2.url)) {
|
|
value2.evil = true;
|
|
}
|
|
});
|
|
parsed = filter2(parsed, function(v) {
|
|
return !v.evil;
|
|
});
|
|
if (!parsed.length) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
} else {
|
|
value = stringifySrcset(filter2(parsed, function(v) {
|
|
return !v.evil;
|
|
}));
|
|
frame.attribs[a] = value;
|
|
}
|
|
} catch (e) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
}
|
|
if (a === "class") {
|
|
const allowedSpecificClasses = allowedClassesMap[name];
|
|
const allowedWildcardClasses = allowedClassesMap["*"];
|
|
const allowedSpecificClassesGlob = allowedClassesGlobMap[name];
|
|
const allowedSpecificClassesRegex = allowedClassesRegexMap[name];
|
|
const allowedWildcardClassesGlob = allowedClassesGlobMap["*"];
|
|
const allowedClassesGlobs = [
|
|
allowedSpecificClassesGlob,
|
|
allowedWildcardClassesGlob
|
|
].concat(allowedSpecificClassesRegex).filter(function(t) {
|
|
return t;
|
|
});
|
|
if (allowedSpecificClasses && allowedWildcardClasses) {
|
|
value = filterClasses(value, deepmerge(allowedSpecificClasses, allowedWildcardClasses), allowedClassesGlobs);
|
|
} else {
|
|
value = filterClasses(value, allowedSpecificClasses || allowedWildcardClasses, allowedClassesGlobs);
|
|
}
|
|
if (!value.length) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
}
|
|
if (a === "style") {
|
|
if (options.parseStyleAttributes) {
|
|
try {
|
|
const abstractSyntaxTree = postcssParse(name + " {" + value + "}", { map: false });
|
|
const filteredAST = filterCss(abstractSyntaxTree, options.allowedStyles);
|
|
value = stringifyStyleAttributes(filteredAST);
|
|
if (value.length === 0) {
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
} catch (e) {
|
|
if (typeof window !== "undefined") {
|
|
console.warn('Failed to parse "' + name + " {" + value + "}" + '", If you\'re running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547');
|
|
}
|
|
delete frame.attribs[a];
|
|
return;
|
|
}
|
|
} else if (options.allowedStyles) {
|
|
throw new Error("allowedStyles option cannot be used together with parseStyleAttributes: false.");
|
|
}
|
|
}
|
|
result += " " + a;
|
|
if (value && value.length) {
|
|
result += '="' + escapeHtml(value, true) + '"';
|
|
} else if (options.allowedEmptyAttributes.includes(a)) {
|
|
result += '=""';
|
|
}
|
|
} else {
|
|
delete frame.attribs[a];
|
|
}
|
|
});
|
|
}
|
|
if (options.selfClosing.indexOf(name) !== -1) {
|
|
result += " />";
|
|
} else {
|
|
result += ">";
|
|
if (frame.innerText && !hasText && !options.textFilter) {
|
|
result += escapeHtml(frame.innerText);
|
|
addedText = true;
|
|
}
|
|
}
|
|
if (skip) {
|
|
result = tempResult + escapeHtml(result);
|
|
tempResult = "";
|
|
}
|
|
},
|
|
ontext: function(text) {
|
|
if (skipText) {
|
|
return;
|
|
}
|
|
const lastFrame = stack[stack.length - 1];
|
|
let tag;
|
|
if (lastFrame) {
|
|
tag = lastFrame.tag;
|
|
text = lastFrame.innerText !== undefined ? lastFrame.innerText : text;
|
|
}
|
|
if (options.disallowedTagsMode === "completelyDiscard" && !tagAllowed(tag)) {
|
|
text = "";
|
|
} else if ((options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") && (tag === "script" || tag === "style")) {
|
|
result += text;
|
|
} else {
|
|
const escaped = escapeHtml(text, false);
|
|
if (options.textFilter && !addedText) {
|
|
result += options.textFilter(escaped, tag);
|
|
} else if (!addedText) {
|
|
result += escaped;
|
|
}
|
|
}
|
|
if (stack.length) {
|
|
const frame = stack[stack.length - 1];
|
|
frame.text += text;
|
|
}
|
|
},
|
|
onclosetag: function(name, isImplied) {
|
|
if (skipText) {
|
|
skipTextDepth--;
|
|
if (!skipTextDepth) {
|
|
skipText = false;
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
const frame = stack.pop();
|
|
if (!frame) {
|
|
return;
|
|
}
|
|
if (frame.tag !== name) {
|
|
stack.push(frame);
|
|
return;
|
|
}
|
|
skipText = options.enforceHtmlBoundary ? name === "html" : false;
|
|
depth--;
|
|
const skip = skipMap[depth];
|
|
if (skip) {
|
|
delete skipMap[depth];
|
|
if (options.disallowedTagsMode === "discard" || options.disallowedTagsMode === "completelyDiscard") {
|
|
frame.updateParentNodeText();
|
|
return;
|
|
}
|
|
tempResult = result;
|
|
result = "";
|
|
}
|
|
if (transformMap[depth]) {
|
|
name = transformMap[depth];
|
|
delete transformMap[depth];
|
|
}
|
|
if (options.exclusiveFilter && options.exclusiveFilter(frame)) {
|
|
result = result.substr(0, frame.tagPosition);
|
|
return;
|
|
}
|
|
frame.updateParentNodeMediaChildren();
|
|
frame.updateParentNodeText();
|
|
if (options.selfClosing.indexOf(name) !== -1 || isImplied && !tagAllowed(name) && ["escape", "recursiveEscape"].indexOf(options.disallowedTagsMode) >= 0) {
|
|
if (skip) {
|
|
result = tempResult;
|
|
tempResult = "";
|
|
}
|
|
return;
|
|
}
|
|
result += "</" + name + ">";
|
|
if (skip) {
|
|
result = tempResult + escapeHtml(result);
|
|
tempResult = "";
|
|
}
|
|
addedText = false;
|
|
}
|
|
}, options.parser);
|
|
parser.write(html);
|
|
parser.end();
|
|
return result;
|
|
function initializeState() {
|
|
result = "";
|
|
depth = 0;
|
|
stack = [];
|
|
skipMap = {};
|
|
transformMap = {};
|
|
skipText = false;
|
|
skipTextDepth = 0;
|
|
}
|
|
function escapeHtml(s, quote) {
|
|
if (typeof s !== "string") {
|
|
s = s + "";
|
|
}
|
|
if (options.parser.decodeEntities) {
|
|
s = s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
if (quote) {
|
|
s = s.replace(/"/g, """);
|
|
}
|
|
}
|
|
s = s.replace(/&(?![a-zA-Z0-9#]{1,20};)/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
if (quote) {
|
|
s = s.replace(/"/g, """);
|
|
}
|
|
return s;
|
|
}
|
|
function naughtyHref(name, href) {
|
|
href = href.replace(/[\x00-\x20]+/g, "");
|
|
while (true) {
|
|
const firstIndex = href.indexOf("<!--");
|
|
if (firstIndex === -1) {
|
|
break;
|
|
}
|
|
const lastIndex = href.indexOf("-->", firstIndex + 4);
|
|
if (lastIndex === -1) {
|
|
break;
|
|
}
|
|
href = href.substring(0, firstIndex) + href.substring(lastIndex + 3);
|
|
}
|
|
const matches = href.match(/^([a-zA-Z][a-zA-Z0-9.\-+]*):/);
|
|
if (!matches) {
|
|
if (href.match(/^[/\\]{2}/)) {
|
|
return !options.allowProtocolRelative;
|
|
}
|
|
return false;
|
|
}
|
|
const scheme = matches[1].toLowerCase();
|
|
if (has(options.allowedSchemesByTag, name)) {
|
|
return options.allowedSchemesByTag[name].indexOf(scheme) === -1;
|
|
}
|
|
return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1;
|
|
}
|
|
function parseUrl2(value) {
|
|
value = value.replace(/^(\w+:)?\s*[\\/]\s*[\\/]/, "$1//");
|
|
if (value.startsWith("relative:")) {
|
|
throw new Error("relative: exploit attempt");
|
|
}
|
|
let base = "relative://relative-site";
|
|
for (let i = 0;i < 100; i++) {
|
|
base += `/${i}`;
|
|
}
|
|
const parsed = new URL(value, base);
|
|
const isRelativeUrl = parsed && parsed.hostname === "relative-site" && parsed.protocol === "relative:";
|
|
return {
|
|
isRelativeUrl,
|
|
url: parsed
|
|
};
|
|
}
|
|
function filterCss(abstractSyntaxTree, allowedStyles) {
|
|
if (!allowedStyles) {
|
|
return abstractSyntaxTree;
|
|
}
|
|
const astRules = abstractSyntaxTree.nodes[0];
|
|
let selectedRule;
|
|
if (allowedStyles[astRules.selector] && allowedStyles["*"]) {
|
|
selectedRule = deepmerge(allowedStyles[astRules.selector], allowedStyles["*"]);
|
|
} else {
|
|
selectedRule = allowedStyles[astRules.selector] || allowedStyles["*"];
|
|
}
|
|
if (selectedRule) {
|
|
abstractSyntaxTree.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []);
|
|
}
|
|
return abstractSyntaxTree;
|
|
}
|
|
function stringifyStyleAttributes(filteredAST) {
|
|
return filteredAST.nodes[0].nodes.reduce(function(extractedAttributes, attrObject) {
|
|
extractedAttributes.push(`${attrObject.prop}:${attrObject.value}${attrObject.important ? " !important" : ""}`);
|
|
return extractedAttributes;
|
|
}, []).join(";");
|
|
}
|
|
function filterDeclarations(selectedRule) {
|
|
return function(allowedDeclarationsList, attributeObject) {
|
|
if (has(selectedRule, attributeObject.prop)) {
|
|
const matchesRegex = selectedRule[attributeObject.prop].some(function(regularExpression) {
|
|
return regularExpression.test(attributeObject.value);
|
|
});
|
|
if (matchesRegex) {
|
|
allowedDeclarationsList.push(attributeObject);
|
|
}
|
|
}
|
|
return allowedDeclarationsList;
|
|
};
|
|
}
|
|
function filterClasses(classes, allowed, allowedGlobs) {
|
|
if (!allowed) {
|
|
return classes;
|
|
}
|
|
classes = classes.split(/\s+/);
|
|
return classes.filter(function(clss) {
|
|
return allowed.indexOf(clss) !== -1 || allowedGlobs.some(function(glob) {
|
|
return glob.test(clss);
|
|
});
|
|
}).join(" ");
|
|
}
|
|
};
|
|
var htmlparser = require_lib7();
|
|
var escapeStringRegexp = require_escape_string_regexp();
|
|
var { isPlainObject: isPlainObject2 } = require_is_plain_object();
|
|
var deepmerge = require_cjs();
|
|
var parseSrcset = require_parse_srcset();
|
|
var { parse: postcssParse } = require_postcss();
|
|
var mediaTags = [
|
|
"img",
|
|
"audio",
|
|
"video",
|
|
"picture",
|
|
"svg",
|
|
"object",
|
|
"map",
|
|
"iframe",
|
|
"embed"
|
|
];
|
|
var vulnerableTags = ["script", "style"];
|
|
module.exports = sanitizeHtml;
|
|
var VALID_HTML_ATTRIBUTE_NAME = /^[^\0\t\n\f\r /<=>]+$/;
|
|
var htmlParserDefaults = {
|
|
decodeEntities: true
|
|
};
|
|
sanitizeHtml.defaults = {
|
|
allowedTags: [
|
|
"address",
|
|
"article",
|
|
"aside",
|
|
"footer",
|
|
"header",
|
|
"h1",
|
|
"h2",
|
|
"h3",
|
|
"h4",
|
|
"h5",
|
|
"h6",
|
|
"hgroup",
|
|
"main",
|
|
"nav",
|
|
"section",
|
|
"blockquote",
|
|
"dd",
|
|
"div",
|
|
"dl",
|
|
"dt",
|
|
"figcaption",
|
|
"figure",
|
|
"hr",
|
|
"li",
|
|
"main",
|
|
"ol",
|
|
"p",
|
|
"pre",
|
|
"ul",
|
|
"a",
|
|
"abbr",
|
|
"b",
|
|
"bdi",
|
|
"bdo",
|
|
"br",
|
|
"cite",
|
|
"code",
|
|
"data",
|
|
"dfn",
|
|
"em",
|
|
"i",
|
|
"kbd",
|
|
"mark",
|
|
"q",
|
|
"rb",
|
|
"rp",
|
|
"rt",
|
|
"rtc",
|
|
"ruby",
|
|
"s",
|
|
"samp",
|
|
"small",
|
|
"span",
|
|
"strong",
|
|
"sub",
|
|
"sup",
|
|
"time",
|
|
"u",
|
|
"var",
|
|
"wbr",
|
|
"caption",
|
|
"col",
|
|
"colgroup",
|
|
"table",
|
|
"tbody",
|
|
"td",
|
|
"tfoot",
|
|
"th",
|
|
"thead",
|
|
"tr"
|
|
],
|
|
nonBooleanAttributes: [
|
|
"abbr",
|
|
"accept",
|
|
"accept-charset",
|
|
"accesskey",
|
|
"action",
|
|
"allow",
|
|
"alt",
|
|
"as",
|
|
"autocapitalize",
|
|
"autocomplete",
|
|
"blocking",
|
|
"charset",
|
|
"cite",
|
|
"class",
|
|
"color",
|
|
"cols",
|
|
"colspan",
|
|
"content",
|
|
"contenteditable",
|
|
"coords",
|
|
"crossorigin",
|
|
"data",
|
|
"datetime",
|
|
"decoding",
|
|
"dir",
|
|
"dirname",
|
|
"download",
|
|
"draggable",
|
|
"enctype",
|
|
"enterkeyhint",
|
|
"fetchpriority",
|
|
"for",
|
|
"form",
|
|
"formaction",
|
|
"formenctype",
|
|
"formmethod",
|
|
"formtarget",
|
|
"headers",
|
|
"height",
|
|
"hidden",
|
|
"high",
|
|
"href",
|
|
"hreflang",
|
|
"http-equiv",
|
|
"id",
|
|
"imagesizes",
|
|
"imagesrcset",
|
|
"inputmode",
|
|
"integrity",
|
|
"is",
|
|
"itemid",
|
|
"itemprop",
|
|
"itemref",
|
|
"itemtype",
|
|
"kind",
|
|
"label",
|
|
"lang",
|
|
"list",
|
|
"loading",
|
|
"low",
|
|
"max",
|
|
"maxlength",
|
|
"media",
|
|
"method",
|
|
"min",
|
|
"minlength",
|
|
"name",
|
|
"nonce",
|
|
"optimum",
|
|
"pattern",
|
|
"ping",
|
|
"placeholder",
|
|
"popover",
|
|
"popovertarget",
|
|
"popovertargetaction",
|
|
"poster",
|
|
"preload",
|
|
"referrerpolicy",
|
|
"rel",
|
|
"rows",
|
|
"rowspan",
|
|
"sandbox",
|
|
"scope",
|
|
"shape",
|
|
"size",
|
|
"sizes",
|
|
"slot",
|
|
"span",
|
|
"spellcheck",
|
|
"src",
|
|
"srcdoc",
|
|
"srclang",
|
|
"srcset",
|
|
"start",
|
|
"step",
|
|
"style",
|
|
"tabindex",
|
|
"target",
|
|
"title",
|
|
"translate",
|
|
"type",
|
|
"usemap",
|
|
"value",
|
|
"width",
|
|
"wrap",
|
|
"onauxclick",
|
|
"onafterprint",
|
|
"onbeforematch",
|
|
"onbeforeprint",
|
|
"onbeforeunload",
|
|
"onbeforetoggle",
|
|
"onblur",
|
|
"oncancel",
|
|
"oncanplay",
|
|
"oncanplaythrough",
|
|
"onchange",
|
|
"onclick",
|
|
"onclose",
|
|
"oncontextlost",
|
|
"oncontextmenu",
|
|
"oncontextrestored",
|
|
"oncopy",
|
|
"oncuechange",
|
|
"oncut",
|
|
"ondblclick",
|
|
"ondrag",
|
|
"ondragend",
|
|
"ondragenter",
|
|
"ondragleave",
|
|
"ondragover",
|
|
"ondragstart",
|
|
"ondrop",
|
|
"ondurationchange",
|
|
"onemptied",
|
|
"onended",
|
|
"onerror",
|
|
"onfocus",
|
|
"onformdata",
|
|
"onhashchange",
|
|
"oninput",
|
|
"oninvalid",
|
|
"onkeydown",
|
|
"onkeypress",
|
|
"onkeyup",
|
|
"onlanguagechange",
|
|
"onload",
|
|
"onloadeddata",
|
|
"onloadedmetadata",
|
|
"onloadstart",
|
|
"onmessage",
|
|
"onmessageerror",
|
|
"onmousedown",
|
|
"onmouseenter",
|
|
"onmouseleave",
|
|
"onmousemove",
|
|
"onmouseout",
|
|
"onmouseover",
|
|
"onmouseup",
|
|
"onoffline",
|
|
"ononline",
|
|
"onpagehide",
|
|
"onpageshow",
|
|
"onpaste",
|
|
"onpause",
|
|
"onplay",
|
|
"onplaying",
|
|
"onpopstate",
|
|
"onprogress",
|
|
"onratechange",
|
|
"onreset",
|
|
"onresize",
|
|
"onrejectionhandled",
|
|
"onscroll",
|
|
"onscrollend",
|
|
"onsecuritypolicyviolation",
|
|
"onseeked",
|
|
"onseeking",
|
|
"onselect",
|
|
"onslotchange",
|
|
"onstalled",
|
|
"onstorage",
|
|
"onsubmit",
|
|
"onsuspend",
|
|
"ontimeupdate",
|
|
"ontoggle",
|
|
"onunhandledrejection",
|
|
"onunload",
|
|
"onvolumechange",
|
|
"onwaiting",
|
|
"onwheel"
|
|
],
|
|
disallowedTagsMode: "discard",
|
|
allowedAttributes: {
|
|
a: ["href", "name", "target"],
|
|
img: ["src", "srcset", "alt", "title", "width", "height", "loading"]
|
|
},
|
|
allowedEmptyAttributes: [
|
|
"alt"
|
|
],
|
|
selfClosing: ["img", "br", "hr", "area", "base", "basefont", "input", "link", "meta"],
|
|
allowedSchemes: ["http", "https", "ftp", "mailto", "tel"],
|
|
allowedSchemesByTag: {},
|
|
allowedSchemesAppliedToAttributes: ["href", "src", "cite"],
|
|
allowProtocolRelative: true,
|
|
enforceHtmlBoundary: false,
|
|
parseStyleAttributes: true
|
|
};
|
|
sanitizeHtml.simpleTransform = function(newTagName, newAttribs, merge2) {
|
|
merge2 = merge2 === undefined ? true : merge2;
|
|
newAttribs = newAttribs || {};
|
|
return function(tagName, attribs) {
|
|
let attrib;
|
|
if (merge2) {
|
|
for (attrib in newAttribs) {
|
|
attribs[attrib] = newAttribs[attrib];
|
|
}
|
|
} else {
|
|
attribs = newAttribs;
|
|
}
|
|
return {
|
|
tagName: newTagName,
|
|
attribs
|
|
};
|
|
};
|
|
};
|
|
});
|
|
|
|
// src/index.ts
|
|
var core = __toESM(require_core(), 1);
|
|
var github = __toESM(require_github(), 1);
|
|
|
|
// node_modules/axios/lib/helpers/bind.js
|
|
function bind(fn, thisArg) {
|
|
return function wrap() {
|
|
return fn.apply(thisArg, arguments);
|
|
};
|
|
}
|
|
|
|
// node_modules/axios/lib/utils.js
|
|
var isBuffer = function(val) {
|
|
return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);
|
|
};
|
|
var isArrayBufferView = function(val) {
|
|
let result;
|
|
if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) {
|
|
result = ArrayBuffer.isView(val);
|
|
} else {
|
|
result = val && val.buffer && isArrayBuffer(val.buffer);
|
|
}
|
|
return result;
|
|
};
|
|
var forEach = function(obj, fn, { allOwnKeys = false } = {}) {
|
|
if (obj === null || typeof obj === "undefined") {
|
|
return;
|
|
}
|
|
let i;
|
|
let l;
|
|
if (typeof obj !== "object") {
|
|
obj = [obj];
|
|
}
|
|
if (isArray(obj)) {
|
|
for (i = 0, l = obj.length;i < l; i++) {
|
|
fn.call(null, obj[i], i, obj);
|
|
}
|
|
} else {
|
|
const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);
|
|
const len = keys.length;
|
|
let key;
|
|
for (i = 0;i < len; i++) {
|
|
key = keys[i];
|
|
fn.call(null, obj[key], key, obj);
|
|
}
|
|
}
|
|
};
|
|
var findKey = function(obj, key) {
|
|
key = key.toLowerCase();
|
|
const keys = Object.keys(obj);
|
|
let i = keys.length;
|
|
let _key;
|
|
while (i-- > 0) {
|
|
_key = keys[i];
|
|
if (key === _key.toLowerCase()) {
|
|
return _key;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
var merge = function() {
|
|
const { caseless } = isContextDefined(this) && this || {};
|
|
const result = {};
|
|
const assignValue = (val, key) => {
|
|
const targetKey = caseless && findKey(result, key) || key;
|
|
if (isPlainObject(result[targetKey]) && isPlainObject(val)) {
|
|
result[targetKey] = merge(result[targetKey], val);
|
|
} else if (isPlainObject(val)) {
|
|
result[targetKey] = merge({}, val);
|
|
} else if (isArray(val)) {
|
|
result[targetKey] = val.slice();
|
|
} else {
|
|
result[targetKey] = val;
|
|
}
|
|
};
|
|
for (let i = 0, l = arguments.length;i < l; i++) {
|
|
arguments[i] && forEach(arguments[i], assignValue);
|
|
}
|
|
return result;
|
|
};
|
|
var isSpecCompliantForm = function(thing) {
|
|
return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === "FormData" && thing[Symbol.iterator]);
|
|
};
|
|
var { toString } = Object.prototype;
|
|
var { getPrototypeOf } = Object;
|
|
var kindOf = ((cache) => (thing) => {
|
|
const str = toString.call(thing);
|
|
return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
|
|
})(Object.create(null));
|
|
var kindOfTest = (type) => {
|
|
type = type.toLowerCase();
|
|
return (thing) => kindOf(thing) === type;
|
|
};
|
|
var typeOfTest = (type) => (thing) => typeof thing === type;
|
|
var { isArray } = Array;
|
|
var isUndefined = typeOfTest("undefined");
|
|
var isArrayBuffer = kindOfTest("ArrayBuffer");
|
|
var isString = typeOfTest("string");
|
|
var isFunction = typeOfTest("function");
|
|
var isNumber = typeOfTest("number");
|
|
var isObject = (thing) => thing !== null && typeof thing === "object";
|
|
var isBoolean = (thing) => thing === true || thing === false;
|
|
var isPlainObject = (val) => {
|
|
if (kindOf(val) !== "object") {
|
|
return false;
|
|
}
|
|
const prototype = getPrototypeOf(val);
|
|
return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);
|
|
};
|
|
var isDate = kindOfTest("Date");
|
|
var isFile = kindOfTest("File");
|
|
var isBlob = kindOfTest("Blob");
|
|
var isFileList = kindOfTest("FileList");
|
|
var isStream = (val) => isObject(val) && isFunction(val.pipe);
|
|
var isFormData = (thing) => {
|
|
let kind;
|
|
return thing && (typeof FormData === "function" && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === "formdata" || kind === "object" && isFunction(thing.toString) && thing.toString() === "[object FormData]"));
|
|
};
|
|
var isURLSearchParams = kindOfTest("URLSearchParams");
|
|
var [isReadableStream, isRequest, isResponse, isHeaders] = ["ReadableStream", "Request", "Response", "Headers"].map(kindOfTest);
|
|
var trim = (str) => str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
|
|
var _global = (() => {
|
|
if (typeof globalThis !== "undefined")
|
|
return globalThis;
|
|
return typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global;
|
|
})();
|
|
var isContextDefined = (context) => !isUndefined(context) && context !== _global;
|
|
var extend = (a, b, thisArg, { allOwnKeys } = {}) => {
|
|
forEach(b, (val, key) => {
|
|
if (thisArg && isFunction(val)) {
|
|
a[key] = bind(val, thisArg);
|
|
} else {
|
|
a[key] = val;
|
|
}
|
|
}, { allOwnKeys });
|
|
return a;
|
|
};
|
|
var stripBOM = (content) => {
|
|
if (content.charCodeAt(0) === 65279) {
|
|
content = content.slice(1);
|
|
}
|
|
return content;
|
|
};
|
|
var inherits = (constructor, superConstructor, props, descriptors) => {
|
|
constructor.prototype = Object.create(superConstructor.prototype, descriptors);
|
|
constructor.prototype.constructor = constructor;
|
|
Object.defineProperty(constructor, "super", {
|
|
value: superConstructor.prototype
|
|
});
|
|
props && Object.assign(constructor.prototype, props);
|
|
};
|
|
var toFlatObject = (sourceObj, destObj, filter, propFilter) => {
|
|
let props;
|
|
let i;
|
|
let prop;
|
|
const merged = {};
|
|
destObj = destObj || {};
|
|
if (sourceObj == null)
|
|
return destObj;
|
|
do {
|
|
props = Object.getOwnPropertyNames(sourceObj);
|
|
i = props.length;
|
|
while (i-- > 0) {
|
|
prop = props[i];
|
|
if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {
|
|
destObj[prop] = sourceObj[prop];
|
|
merged[prop] = true;
|
|
}
|
|
}
|
|
sourceObj = filter !== false && getPrototypeOf(sourceObj);
|
|
} while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
|
|
return destObj;
|
|
};
|
|
var endsWith = (str, searchString, position) => {
|
|
str = String(str);
|
|
if (position === undefined || position > str.length) {
|
|
position = str.length;
|
|
}
|
|
position -= searchString.length;
|
|
const lastIndex = str.indexOf(searchString, position);
|
|
return lastIndex !== -1 && lastIndex === position;
|
|
};
|
|
var toArray = (thing) => {
|
|
if (!thing)
|
|
return null;
|
|
if (isArray(thing))
|
|
return thing;
|
|
let i = thing.length;
|
|
if (!isNumber(i))
|
|
return null;
|
|
const arr = new Array(i);
|
|
while (i-- > 0) {
|
|
arr[i] = thing[i];
|
|
}
|
|
return arr;
|
|
};
|
|
var isTypedArray = ((TypedArray) => {
|
|
return (thing) => {
|
|
return TypedArray && thing instanceof TypedArray;
|
|
};
|
|
})(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array));
|
|
var forEachEntry = (obj, fn) => {
|
|
const generator = obj && obj[Symbol.iterator];
|
|
const iterator = generator.call(obj);
|
|
let result;
|
|
while ((result = iterator.next()) && !result.done) {
|
|
const pair = result.value;
|
|
fn.call(obj, pair[0], pair[1]);
|
|
}
|
|
};
|
|
var matchAll = (regExp, str) => {
|
|
let matches;
|
|
const arr = [];
|
|
while ((matches = regExp.exec(str)) !== null) {
|
|
arr.push(matches);
|
|
}
|
|
return arr;
|
|
};
|
|
var isHTMLForm = kindOfTest("HTMLFormElement");
|
|
var toCamelCase = (str) => {
|
|
return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) {
|
|
return p1.toUpperCase() + p2;
|
|
});
|
|
};
|
|
var hasOwnProperty = (({ hasOwnProperty: hasOwnProperty2 }) => (obj, prop) => hasOwnProperty2.call(obj, prop))(Object.prototype);
|
|
var isRegExp = kindOfTest("RegExp");
|
|
var reduceDescriptors = (obj, reducer) => {
|
|
const descriptors = Object.getOwnPropertyDescriptors(obj);
|
|
const reducedDescriptors = {};
|
|
forEach(descriptors, (descriptor, name) => {
|
|
let ret;
|
|
if ((ret = reducer(descriptor, name, obj)) !== false) {
|
|
reducedDescriptors[name] = ret || descriptor;
|
|
}
|
|
});
|
|
Object.defineProperties(obj, reducedDescriptors);
|
|
};
|
|
var freezeMethods = (obj) => {
|
|
reduceDescriptors(obj, (descriptor, name) => {
|
|
if (isFunction(obj) && ["arguments", "caller", "callee"].indexOf(name) !== -1) {
|
|
return false;
|
|
}
|
|
const value = obj[name];
|
|
if (!isFunction(value))
|
|
return;
|
|
descriptor.enumerable = false;
|
|
if ("writable" in descriptor) {
|
|
descriptor.writable = false;
|
|
return;
|
|
}
|
|
if (!descriptor.set) {
|
|
descriptor.set = () => {
|
|
throw Error("Can not rewrite read-only method \'" + name + "\'");
|
|
};
|
|
}
|
|
});
|
|
};
|
|
var toObjectSet = (arrayOrString, delimiter) => {
|
|
const obj = {};
|
|
const define2 = (arr) => {
|
|
arr.forEach((value) => {
|
|
obj[value] = true;
|
|
});
|
|
};
|
|
isArray(arrayOrString) ? define2(arrayOrString) : define2(String(arrayOrString).split(delimiter));
|
|
return obj;
|
|
};
|
|
var noop = () => {
|
|
};
|
|
var toFiniteNumber = (value, defaultValue) => {
|
|
return value != null && Number.isFinite(value = +value) ? value : defaultValue;
|
|
};
|
|
var ALPHA = "abcdefghijklmnopqrstuvwxyz";
|
|
var DIGIT = "0123456789";
|
|
var ALPHABET = {
|
|
DIGIT,
|
|
ALPHA,
|
|
ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT
|
|
};
|
|
var generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {
|
|
let str = "";
|
|
const { length } = alphabet;
|
|
while (size--) {
|
|
str += alphabet[Math.random() * length | 0];
|
|
}
|
|
return str;
|
|
};
|
|
var toJSONObject = (obj) => {
|
|
const stack = new Array(10);
|
|
const visit = (source, i) => {
|
|
if (isObject(source)) {
|
|
if (stack.indexOf(source) >= 0) {
|
|
return;
|
|
}
|
|
if (!("toJSON" in source)) {
|
|
stack[i] = source;
|
|
const target = isArray(source) ? [] : {};
|
|
forEach(source, (value, key) => {
|
|
const reducedValue = visit(value, i + 1);
|
|
!isUndefined(reducedValue) && (target[key] = reducedValue);
|
|
});
|
|
stack[i] = undefined;
|
|
return target;
|
|
}
|
|
}
|
|
return source;
|
|
};
|
|
return visit(obj, 0);
|
|
};
|
|
var isAsyncFn = kindOfTest("AsyncFunction");
|
|
var isThenable = (thing) => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);
|
|
var utils_default = {
|
|
isArray,
|
|
isArrayBuffer,
|
|
isBuffer,
|
|
isFormData,
|
|
isArrayBufferView,
|
|
isString,
|
|
isNumber,
|
|
isBoolean,
|
|
isObject,
|
|
isPlainObject,
|
|
isReadableStream,
|
|
isRequest,
|
|
isResponse,
|
|
isHeaders,
|
|
isUndefined,
|
|
isDate,
|
|
isFile,
|
|
isBlob,
|
|
isRegExp,
|
|
isFunction,
|
|
isStream,
|
|
isURLSearchParams,
|
|
isTypedArray,
|
|
isFileList,
|
|
forEach,
|
|
merge,
|
|
extend,
|
|
trim,
|
|
stripBOM,
|
|
inherits,
|
|
toFlatObject,
|
|
kindOf,
|
|
kindOfTest,
|
|
endsWith,
|
|
toArray,
|
|
forEachEntry,
|
|
matchAll,
|
|
isHTMLForm,
|
|
hasOwnProperty,
|
|
hasOwnProp: hasOwnProperty,
|
|
reduceDescriptors,
|
|
freezeMethods,
|
|
toObjectSet,
|
|
toCamelCase,
|
|
noop,
|
|
toFiniteNumber,
|
|
findKey,
|
|
global: _global,
|
|
isContextDefined,
|
|
ALPHABET,
|
|
generateString,
|
|
isSpecCompliantForm,
|
|
toJSONObject,
|
|
isAsyncFn,
|
|
isThenable
|
|
};
|
|
|
|
// node_modules/axios/lib/core/AxiosError.js
|
|
var AxiosError = function(message, code, config, request, response) {
|
|
Error.call(this);
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
} else {
|
|
this.stack = new Error().stack;
|
|
}
|
|
this.message = message;
|
|
this.name = "AxiosError";
|
|
code && (this.code = code);
|
|
config && (this.config = config);
|
|
request && (this.request = request);
|
|
response && (this.response = response);
|
|
};
|
|
utils_default.inherits(AxiosError, Error, {
|
|
toJSON: function toJSON() {
|
|
return {
|
|
message: this.message,
|
|
name: this.name,
|
|
description: this.description,
|
|
number: this.number,
|
|
fileName: this.fileName,
|
|
lineNumber: this.lineNumber,
|
|
columnNumber: this.columnNumber,
|
|
stack: this.stack,
|
|
config: utils_default.toJSONObject(this.config),
|
|
code: this.code,
|
|
status: this.response && this.response.status ? this.response.status : null
|
|
};
|
|
}
|
|
});
|
|
var prototype = AxiosError.prototype;
|
|
var descriptors = {};
|
|
[
|
|
"ERR_BAD_OPTION_VALUE",
|
|
"ERR_BAD_OPTION",
|
|
"ECONNABORTED",
|
|
"ETIMEDOUT",
|
|
"ERR_NETWORK",
|
|
"ERR_FR_TOO_MANY_REDIRECTS",
|
|
"ERR_DEPRECATED",
|
|
"ERR_BAD_RESPONSE",
|
|
"ERR_BAD_REQUEST",
|
|
"ERR_CANCELED",
|
|
"ERR_NOT_SUPPORT",
|
|
"ERR_INVALID_URL"
|
|
].forEach((code) => {
|
|
descriptors[code] = { value: code };
|
|
});
|
|
Object.defineProperties(AxiosError, descriptors);
|
|
Object.defineProperty(prototype, "isAxiosError", { value: true });
|
|
AxiosError.from = (error, code, config, request, response, customProps) => {
|
|
const axiosError = Object.create(prototype);
|
|
utils_default.toFlatObject(error, axiosError, function filter(obj) {
|
|
return obj !== Error.prototype;
|
|
}, (prop) => {
|
|
return prop !== "isAxiosError";
|
|
});
|
|
AxiosError.call(axiosError, error.message, code, config, request, response);
|
|
axiosError.cause = error;
|
|
axiosError.name = error.name;
|
|
customProps && Object.assign(axiosError, customProps);
|
|
return axiosError;
|
|
};
|
|
var AxiosError_default = AxiosError;
|
|
|
|
// node_modules/axios/lib/platform/node/classes/FormData.js
|
|
var import_form_data = __toESM(require_form_data(), 1);
|
|
var FormData_default = import_form_data.default;
|
|
|
|
// node_modules/axios/lib/helpers/toFormData.js
|
|
var isVisitable = function(thing) {
|
|
return utils_default.isPlainObject(thing) || utils_default.isArray(thing);
|
|
};
|
|
var removeBrackets = function(key) {
|
|
return utils_default.endsWith(key, "[]") ? key.slice(0, -2) : key;
|
|
};
|
|
var renderKey = function(path, key, dots) {
|
|
if (!path)
|
|
return key;
|
|
return path.concat(key).map(function each(token, i) {
|
|
token = removeBrackets(token);
|
|
return !dots && i ? "[" + token + "]" : token;
|
|
}).join(dots ? "." : "");
|
|
};
|
|
var isFlatArray = function(arr) {
|
|
return utils_default.isArray(arr) && !arr.some(isVisitable);
|
|
};
|
|
var toFormData = function(obj, formData, options) {
|
|
if (!utils_default.isObject(obj)) {
|
|
throw new TypeError("target must be an object");
|
|
}
|
|
formData = formData || new (FormData_default || FormData);
|
|
options = utils_default.toFlatObject(options, {
|
|
metaTokens: true,
|
|
dots: false,
|
|
indexes: false
|
|
}, false, function defined(option, source) {
|
|
return !utils_default.isUndefined(source[option]);
|
|
});
|
|
const metaTokens = options.metaTokens;
|
|
const visitor = options.visitor || defaultVisitor;
|
|
const dots = options.dots;
|
|
const indexes = options.indexes;
|
|
const _Blob = options.Blob || typeof Blob !== "undefined" && Blob;
|
|
const useBlob = _Blob && utils_default.isSpecCompliantForm(formData);
|
|
if (!utils_default.isFunction(visitor)) {
|
|
throw new TypeError("visitor must be a function");
|
|
}
|
|
function convertValue(value) {
|
|
if (value === null)
|
|
return "";
|
|
if (utils_default.isDate(value)) {
|
|
return value.toISOString();
|
|
}
|
|
if (!useBlob && utils_default.isBlob(value)) {
|
|
throw new AxiosError_default("Blob is not supported. Use a Buffer instead.");
|
|
}
|
|
if (utils_default.isArrayBuffer(value) || utils_default.isTypedArray(value)) {
|
|
return useBlob && typeof Blob === "function" ? new Blob([value]) : Buffer.from(value);
|
|
}
|
|
return value;
|
|
}
|
|
function defaultVisitor(value, key, path) {
|
|
let arr = value;
|
|
if (value && !path && typeof value === "object") {
|
|
if (utils_default.endsWith(key, "{}")) {
|
|
key = metaTokens ? key : key.slice(0, -2);
|
|
value = JSON.stringify(value);
|
|
} else if (utils_default.isArray(value) && isFlatArray(value) || (utils_default.isFileList(value) || utils_default.endsWith(key, "[]")) && (arr = utils_default.toArray(value))) {
|
|
key = removeBrackets(key);
|
|
arr.forEach(function each(el, index) {
|
|
!(utils_default.isUndefined(el) || el === null) && formData.append(indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + "[]", convertValue(el));
|
|
});
|
|
return false;
|
|
}
|
|
}
|
|
if (isVisitable(value)) {
|
|
return true;
|
|
}
|
|
formData.append(renderKey(path, key, dots), convertValue(value));
|
|
return false;
|
|
}
|
|
const stack = [];
|
|
const exposedHelpers = Object.assign(predicates, {
|
|
defaultVisitor,
|
|
convertValue,
|
|
isVisitable
|
|
});
|
|
function build(value, path) {
|
|
if (utils_default.isUndefined(value))
|
|
return;
|
|
if (stack.indexOf(value) !== -1) {
|
|
throw Error("Circular reference detected in " + path.join("."));
|
|
}
|
|
stack.push(value);
|
|
utils_default.forEach(value, function each(el, key) {
|
|
const result = !(utils_default.isUndefined(el) || el === null) && visitor.call(formData, el, utils_default.isString(key) ? key.trim() : key, path, exposedHelpers);
|
|
if (result === true) {
|
|
build(el, path ? path.concat(key) : [key]);
|
|
}
|
|
});
|
|
stack.pop();
|
|
}
|
|
if (!utils_default.isObject(obj)) {
|
|
throw new TypeError("data must be an object");
|
|
}
|
|
build(obj);
|
|
return formData;
|
|
};
|
|
var predicates = utils_default.toFlatObject(utils_default, {}, null, function filter(prop) {
|
|
return /^is[A-Z]/.test(prop);
|
|
});
|
|
var toFormData_default = toFormData;
|
|
|
|
// node_modules/axios/lib/helpers/AxiosURLSearchParams.js
|
|
var encode = function(str) {
|
|
const charMap = {
|
|
"!": "%21",
|
|
"'": "%27",
|
|
"(": "%28",
|
|
")": "%29",
|
|
"~": "%7E",
|
|
"%20": "+",
|
|
"%00": "\0"
|
|
};
|
|
return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {
|
|
return charMap[match];
|
|
});
|
|
};
|
|
var AxiosURLSearchParams = function(params, options) {
|
|
this._pairs = [];
|
|
params && toFormData_default(params, this, options);
|
|
};
|
|
var prototype2 = AxiosURLSearchParams.prototype;
|
|
prototype2.append = function append(name, value) {
|
|
this._pairs.push([name, value]);
|
|
};
|
|
prototype2.toString = function toString2(encoder) {
|
|
const _encode = encoder ? function(value) {
|
|
return encoder.call(this, value, encode);
|
|
} : encode;
|
|
return this._pairs.map(function each(pair) {
|
|
return _encode(pair[0]) + "=" + _encode(pair[1]);
|
|
}, "").join("&");
|
|
};
|
|
var AxiosURLSearchParams_default = AxiosURLSearchParams;
|
|
|
|
// node_modules/axios/lib/helpers/buildURL.js
|
|
var encode2 = function(val) {
|
|
return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
|
|
};
|
|
function buildURL(url, params, options) {
|
|
if (!params) {
|
|
return url;
|
|
}
|
|
const _encode = options && options.encode || encode2;
|
|
const serializeFn = options && options.serialize;
|
|
let serializedParams;
|
|
if (serializeFn) {
|
|
serializedParams = serializeFn(params, options);
|
|
} else {
|
|
serializedParams = utils_default.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams_default(params, options).toString(_encode);
|
|
}
|
|
if (serializedParams) {
|
|
const hashmarkIndex = url.indexOf("#");
|
|
if (hashmarkIndex !== -1) {
|
|
url = url.slice(0, hashmarkIndex);
|
|
}
|
|
url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams;
|
|
}
|
|
return url;
|
|
}
|
|
|
|
// node_modules/axios/lib/core/InterceptorManager.js
|
|
class InterceptorManager {
|
|
constructor() {
|
|
this.handlers = [];
|
|
}
|
|
use(fulfilled, rejected, options) {
|
|
this.handlers.push({
|
|
fulfilled,
|
|
rejected,
|
|
synchronous: options ? options.synchronous : false,
|
|
runWhen: options ? options.runWhen : null
|
|
});
|
|
return this.handlers.length - 1;
|
|
}
|
|
eject(id) {
|
|
if (this.handlers[id]) {
|
|
this.handlers[id] = null;
|
|
}
|
|
}
|
|
clear() {
|
|
if (this.handlers) {
|
|
this.handlers = [];
|
|
}
|
|
}
|
|
forEach(fn) {
|
|
utils_default.forEach(this.handlers, function forEachHandler(h) {
|
|
if (h !== null) {
|
|
fn(h);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
var InterceptorManager_default = InterceptorManager;
|
|
|
|
// node_modules/axios/lib/defaults/transitional.js
|
|
var transitional_default = {
|
|
silentJSONParsing: true,
|
|
forcedJSONParsing: true,
|
|
clarifyTimeoutError: false
|
|
};
|
|
|
|
// node_modules/axios/lib/platform/node/classes/URLSearchParams.js
|
|
import url from "url";
|
|
var URLSearchParams_default = url.URLSearchParams;
|
|
|
|
// node_modules/axios/lib/platform/node/index.js
|
|
var node_default = {
|
|
isNode: true,
|
|
classes: {
|
|
URLSearchParams: URLSearchParams_default,
|
|
FormData: FormData_default,
|
|
Blob: typeof Blob !== "undefined" && Blob || null
|
|
},
|
|
protocols: ["http", "https", "file", "data"]
|
|
};
|
|
|
|
// node_modules/axios/lib/platform/common/utils.js
|
|
var exports_utils = {};
|
|
__export(exports_utils, {
|
|
origin: () => origin,
|
|
hasStandardBrowserWebWorkerEnv: () => hasStandardBrowserWebWorkerEnv,
|
|
hasStandardBrowserEnv: () => hasStandardBrowserEnv,
|
|
hasBrowserEnv: () => hasBrowserEnv
|
|
});
|
|
var hasBrowserEnv = typeof window !== "undefined" && typeof document !== "undefined";
|
|
var hasStandardBrowserEnv = ((product) => {
|
|
return hasBrowserEnv && ["ReactNative", "NativeScript", "NS"].indexOf(product) < 0;
|
|
})(typeof navigator !== "undefined" && navigator.product);
|
|
var hasStandardBrowserWebWorkerEnv = (() => {
|
|
return typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope && typeof self.importScripts === "function";
|
|
})();
|
|
var origin = hasBrowserEnv && window.location.href || "http://localhost";
|
|
|
|
// node_modules/axios/lib/platform/index.js
|
|
var platform_default = {
|
|
...exports_utils,
|
|
...node_default
|
|
};
|
|
|
|
// node_modules/axios/lib/helpers/toURLEncodedForm.js
|
|
function toURLEncodedForm(data, options) {
|
|
return toFormData_default(data, new platform_default.classes.URLSearchParams, Object.assign({
|
|
visitor: function(value, key, path, helpers) {
|
|
if (platform_default.isNode && utils_default.isBuffer(value)) {
|
|
this.append(key, value.toString("base64"));
|
|
return false;
|
|
}
|
|
return helpers.defaultVisitor.apply(this, arguments);
|
|
}
|
|
}, options));
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/formDataToJSON.js
|
|
var parsePropPath = function(name) {
|
|
return utils_default.matchAll(/\w+|\[(\w*)]/g, name).map((match) => {
|
|
return match[0] === "[]" ? "" : match[1] || match[0];
|
|
});
|
|
};
|
|
var arrayToObject = function(arr) {
|
|
const obj = {};
|
|
const keys = Object.keys(arr);
|
|
let i;
|
|
const len = keys.length;
|
|
let key;
|
|
for (i = 0;i < len; i++) {
|
|
key = keys[i];
|
|
obj[key] = arr[key];
|
|
}
|
|
return obj;
|
|
};
|
|
var formDataToJSON = function(formData) {
|
|
function buildPath(path, value, target, index) {
|
|
let name = path[index++];
|
|
if (name === "__proto__")
|
|
return true;
|
|
const isNumericKey = Number.isFinite(+name);
|
|
const isLast = index >= path.length;
|
|
name = !name && utils_default.isArray(target) ? target.length : name;
|
|
if (isLast) {
|
|
if (utils_default.hasOwnProp(target, name)) {
|
|
target[name] = [target[name], value];
|
|
} else {
|
|
target[name] = value;
|
|
}
|
|
return !isNumericKey;
|
|
}
|
|
if (!target[name] || !utils_default.isObject(target[name])) {
|
|
target[name] = [];
|
|
}
|
|
const result = buildPath(path, value, target[name], index);
|
|
if (result && utils_default.isArray(target[name])) {
|
|
target[name] = arrayToObject(target[name]);
|
|
}
|
|
return !isNumericKey;
|
|
}
|
|
if (utils_default.isFormData(formData) && utils_default.isFunction(formData.entries)) {
|
|
const obj = {};
|
|
utils_default.forEachEntry(formData, (name, value) => {
|
|
buildPath(parsePropPath(name), value, obj, 0);
|
|
});
|
|
return obj;
|
|
}
|
|
return null;
|
|
};
|
|
var formDataToJSON_default = formDataToJSON;
|
|
|
|
// node_modules/axios/lib/defaults/index.js
|
|
var stringifySafely = function(rawValue, parser, encoder) {
|
|
if (utils_default.isString(rawValue)) {
|
|
try {
|
|
(parser || JSON.parse)(rawValue);
|
|
return utils_default.trim(rawValue);
|
|
} catch (e) {
|
|
if (e.name !== "SyntaxError") {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
return (encoder || JSON.stringify)(rawValue);
|
|
};
|
|
var defaults = {
|
|
transitional: transitional_default,
|
|
adapter: ["xhr", "http", "fetch"],
|
|
transformRequest: [function transformRequest(data, headers) {
|
|
const contentType = headers.getContentType() || "";
|
|
const hasJSONContentType = contentType.indexOf("application/json") > -1;
|
|
const isObjectPayload = utils_default.isObject(data);
|
|
if (isObjectPayload && utils_default.isHTMLForm(data)) {
|
|
data = new FormData(data);
|
|
}
|
|
const isFormData2 = utils_default.isFormData(data);
|
|
if (isFormData2) {
|
|
return hasJSONContentType ? JSON.stringify(formDataToJSON_default(data)) : data;
|
|
}
|
|
if (utils_default.isArrayBuffer(data) || utils_default.isBuffer(data) || utils_default.isStream(data) || utils_default.isFile(data) || utils_default.isBlob(data) || utils_default.isReadableStream(data)) {
|
|
return data;
|
|
}
|
|
if (utils_default.isArrayBufferView(data)) {
|
|
return data.buffer;
|
|
}
|
|
if (utils_default.isURLSearchParams(data)) {
|
|
headers.setContentType("application/x-www-form-urlencoded;charset=utf-8", false);
|
|
return data.toString();
|
|
}
|
|
let isFileList2;
|
|
if (isObjectPayload) {
|
|
if (contentType.indexOf("application/x-www-form-urlencoded") > -1) {
|
|
return toURLEncodedForm(data, this.formSerializer).toString();
|
|
}
|
|
if ((isFileList2 = utils_default.isFileList(data)) || contentType.indexOf("multipart/form-data") > -1) {
|
|
const _FormData = this.env && this.env.FormData;
|
|
return toFormData_default(isFileList2 ? { "files[]": data } : data, _FormData && new _FormData, this.formSerializer);
|
|
}
|
|
}
|
|
if (isObjectPayload || hasJSONContentType) {
|
|
headers.setContentType("application/json", false);
|
|
return stringifySafely(data);
|
|
}
|
|
return data;
|
|
}],
|
|
transformResponse: [function transformResponse(data) {
|
|
const transitional2 = this.transitional || defaults.transitional;
|
|
const forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing;
|
|
const JSONRequested = this.responseType === "json";
|
|
if (utils_default.isResponse(data) || utils_default.isReadableStream(data)) {
|
|
return data;
|
|
}
|
|
if (data && utils_default.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {
|
|
const silentJSONParsing = transitional2 && transitional2.silentJSONParsing;
|
|
const strictJSONParsing = !silentJSONParsing && JSONRequested;
|
|
try {
|
|
return JSON.parse(data);
|
|
} catch (e) {
|
|
if (strictJSONParsing) {
|
|
if (e.name === "SyntaxError") {
|
|
throw AxiosError_default.from(e, AxiosError_default.ERR_BAD_RESPONSE, this, null, this.response);
|
|
}
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
return data;
|
|
}],
|
|
timeout: 0,
|
|
xsrfCookieName: "XSRF-TOKEN",
|
|
xsrfHeaderName: "X-XSRF-TOKEN",
|
|
maxContentLength: -1,
|
|
maxBodyLength: -1,
|
|
env: {
|
|
FormData: platform_default.classes.FormData,
|
|
Blob: platform_default.classes.Blob
|
|
},
|
|
validateStatus: function validateStatus(status) {
|
|
return status >= 200 && status < 300;
|
|
},
|
|
headers: {
|
|
common: {
|
|
Accept: "application/json, text/plain, */*",
|
|
"Content-Type": undefined
|
|
}
|
|
}
|
|
};
|
|
utils_default.forEach(["delete", "get", "head", "post", "put", "patch"], (method) => {
|
|
defaults.headers[method] = {};
|
|
});
|
|
var defaults_default = defaults;
|
|
|
|
// node_modules/axios/lib/helpers/parseHeaders.js
|
|
var ignoreDuplicateOf = utils_default.toObjectSet([
|
|
"age",
|
|
"authorization",
|
|
"content-length",
|
|
"content-type",
|
|
"etag",
|
|
"expires",
|
|
"from",
|
|
"host",
|
|
"if-modified-since",
|
|
"if-unmodified-since",
|
|
"last-modified",
|
|
"location",
|
|
"max-forwards",
|
|
"proxy-authorization",
|
|
"referer",
|
|
"retry-after",
|
|
"user-agent"
|
|
]);
|
|
var parseHeaders_default = (rawHeaders) => {
|
|
const parsed = {};
|
|
let key;
|
|
let val;
|
|
let i;
|
|
rawHeaders && rawHeaders.split("\n").forEach(function parser(line) {
|
|
i = line.indexOf(":");
|
|
key = line.substring(0, i).trim().toLowerCase();
|
|
val = line.substring(i + 1).trim();
|
|
if (!key || parsed[key] && ignoreDuplicateOf[key]) {
|
|
return;
|
|
}
|
|
if (key === "set-cookie") {
|
|
if (parsed[key]) {
|
|
parsed[key].push(val);
|
|
} else {
|
|
parsed[key] = [val];
|
|
}
|
|
} else {
|
|
parsed[key] = parsed[key] ? parsed[key] + ", " + val : val;
|
|
}
|
|
});
|
|
return parsed;
|
|
};
|
|
|
|
// node_modules/axios/lib/core/AxiosHeaders.js
|
|
var normalizeHeader = function(header) {
|
|
return header && String(header).trim().toLowerCase();
|
|
};
|
|
var normalizeValue = function(value) {
|
|
if (value === false || value == null) {
|
|
return value;
|
|
}
|
|
return utils_default.isArray(value) ? value.map(normalizeValue) : String(value);
|
|
};
|
|
var parseTokens = function(str) {
|
|
const tokens = Object.create(null);
|
|
const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
|
|
let match;
|
|
while (match = tokensRE.exec(str)) {
|
|
tokens[match[1]] = match[2];
|
|
}
|
|
return tokens;
|
|
};
|
|
var matchHeaderValue = function(context, value, header, filter2, isHeaderNameFilter) {
|
|
if (utils_default.isFunction(filter2)) {
|
|
return filter2.call(this, value, header);
|
|
}
|
|
if (isHeaderNameFilter) {
|
|
value = header;
|
|
}
|
|
if (!utils_default.isString(value))
|
|
return;
|
|
if (utils_default.isString(filter2)) {
|
|
return value.indexOf(filter2) !== -1;
|
|
}
|
|
if (utils_default.isRegExp(filter2)) {
|
|
return filter2.test(value);
|
|
}
|
|
};
|
|
var formatHeader = function(header) {
|
|
return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => {
|
|
return char.toUpperCase() + str;
|
|
});
|
|
};
|
|
var buildAccessors = function(obj, header) {
|
|
const accessorName = utils_default.toCamelCase(" " + header);
|
|
["get", "set", "has"].forEach((methodName) => {
|
|
Object.defineProperty(obj, methodName + accessorName, {
|
|
value: function(arg1, arg2, arg3) {
|
|
return this[methodName].call(this, header, arg1, arg2, arg3);
|
|
},
|
|
configurable: true
|
|
});
|
|
});
|
|
};
|
|
var $internals = Symbol("internals");
|
|
var isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
|
|
|
|
class AxiosHeaders {
|
|
constructor(headers) {
|
|
headers && this.set(headers);
|
|
}
|
|
set(header, valueOrRewrite, rewrite) {
|
|
const self2 = this;
|
|
function setHeader(_value, _header, _rewrite) {
|
|
const lHeader = normalizeHeader(_header);
|
|
if (!lHeader) {
|
|
throw new Error("header name must be a non-empty string");
|
|
}
|
|
const key = utils_default.findKey(self2, lHeader);
|
|
if (!key || self2[key] === undefined || _rewrite === true || _rewrite === undefined && self2[key] !== false) {
|
|
self2[key || _header] = normalizeValue(_value);
|
|
}
|
|
}
|
|
const setHeaders = (headers, _rewrite) => utils_default.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));
|
|
if (utils_default.isPlainObject(header) || header instanceof this.constructor) {
|
|
setHeaders(header, valueOrRewrite);
|
|
} else if (utils_default.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {
|
|
setHeaders(parseHeaders_default(header), valueOrRewrite);
|
|
} else if (utils_default.isHeaders(header)) {
|
|
for (const [key, value] of header.entries()) {
|
|
setHeader(value, key, rewrite);
|
|
}
|
|
} else {
|
|
header != null && setHeader(valueOrRewrite, header, rewrite);
|
|
}
|
|
return this;
|
|
}
|
|
get(header, parser) {
|
|
header = normalizeHeader(header);
|
|
if (header) {
|
|
const key = utils_default.findKey(this, header);
|
|
if (key) {
|
|
const value = this[key];
|
|
if (!parser) {
|
|
return value;
|
|
}
|
|
if (parser === true) {
|
|
return parseTokens(value);
|
|
}
|
|
if (utils_default.isFunction(parser)) {
|
|
return parser.call(this, value, key);
|
|
}
|
|
if (utils_default.isRegExp(parser)) {
|
|
return parser.exec(value);
|
|
}
|
|
throw new TypeError("parser must be boolean|regexp|function");
|
|
}
|
|
}
|
|
}
|
|
has(header, matcher) {
|
|
header = normalizeHeader(header);
|
|
if (header) {
|
|
const key = utils_default.findKey(this, header);
|
|
return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));
|
|
}
|
|
return false;
|
|
}
|
|
delete(header, matcher) {
|
|
const self2 = this;
|
|
let deleted = false;
|
|
function deleteHeader(_header) {
|
|
_header = normalizeHeader(_header);
|
|
if (_header) {
|
|
const key = utils_default.findKey(self2, _header);
|
|
if (key && (!matcher || matchHeaderValue(self2, self2[key], key, matcher))) {
|
|
delete self2[key];
|
|
deleted = true;
|
|
}
|
|
}
|
|
}
|
|
if (utils_default.isArray(header)) {
|
|
header.forEach(deleteHeader);
|
|
} else {
|
|
deleteHeader(header);
|
|
}
|
|
return deleted;
|
|
}
|
|
clear(matcher) {
|
|
const keys = Object.keys(this);
|
|
let i = keys.length;
|
|
let deleted = false;
|
|
while (i--) {
|
|
const key = keys[i];
|
|
if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {
|
|
delete this[key];
|
|
deleted = true;
|
|
}
|
|
}
|
|
return deleted;
|
|
}
|
|
normalize(format) {
|
|
const self2 = this;
|
|
const headers = {};
|
|
utils_default.forEach(this, (value, header) => {
|
|
const key = utils_default.findKey(headers, header);
|
|
if (key) {
|
|
self2[key] = normalizeValue(value);
|
|
delete self2[header];
|
|
return;
|
|
}
|
|
const normalized = format ? formatHeader(header) : String(header).trim();
|
|
if (normalized !== header) {
|
|
delete self2[header];
|
|
}
|
|
self2[normalized] = normalizeValue(value);
|
|
headers[normalized] = true;
|
|
});
|
|
return this;
|
|
}
|
|
concat(...targets) {
|
|
return this.constructor.concat(this, ...targets);
|
|
}
|
|
toJSON(asStrings) {
|
|
const obj = Object.create(null);
|
|
utils_default.forEach(this, (value, header) => {
|
|
value != null && value !== false && (obj[header] = asStrings && utils_default.isArray(value) ? value.join(", ") : value);
|
|
});
|
|
return obj;
|
|
}
|
|
[Symbol.iterator]() {
|
|
return Object.entries(this.toJSON())[Symbol.iterator]();
|
|
}
|
|
toString() {
|
|
return Object.entries(this.toJSON()).map(([header, value]) => header + ": " + value).join("\n");
|
|
}
|
|
get [Symbol.toStringTag]() {
|
|
return "AxiosHeaders";
|
|
}
|
|
static from(thing) {
|
|
return thing instanceof this ? thing : new this(thing);
|
|
}
|
|
static concat(first, ...targets) {
|
|
const computed = new this(first);
|
|
targets.forEach((target) => computed.set(target));
|
|
return computed;
|
|
}
|
|
static accessor(header) {
|
|
const internals = this[$internals] = this[$internals] = {
|
|
accessors: {}
|
|
};
|
|
const accessors = internals.accessors;
|
|
const prototype3 = this.prototype;
|
|
function defineAccessor(_header) {
|
|
const lHeader = normalizeHeader(_header);
|
|
if (!accessors[lHeader]) {
|
|
buildAccessors(prototype3, _header);
|
|
accessors[lHeader] = true;
|
|
}
|
|
}
|
|
utils_default.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);
|
|
return this;
|
|
}
|
|
}
|
|
AxiosHeaders.accessor(["Content-Type", "Content-Length", "Accept", "Accept-Encoding", "User-Agent", "Authorization"]);
|
|
utils_default.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {
|
|
let mapped = key[0].toUpperCase() + key.slice(1);
|
|
return {
|
|
get: () => value,
|
|
set(headerValue) {
|
|
this[mapped] = headerValue;
|
|
}
|
|
};
|
|
});
|
|
utils_default.freezeMethods(AxiosHeaders);
|
|
var AxiosHeaders_default = AxiosHeaders;
|
|
|
|
// node_modules/axios/lib/core/transformData.js
|
|
function transformData(fns, response) {
|
|
const config = this || defaults_default;
|
|
const context = response || config;
|
|
const headers = AxiosHeaders_default.from(context.headers);
|
|
let data = context.data;
|
|
utils_default.forEach(fns, function transform(fn) {
|
|
data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);
|
|
});
|
|
headers.normalize();
|
|
return data;
|
|
}
|
|
|
|
// node_modules/axios/lib/cancel/isCancel.js
|
|
function isCancel(value) {
|
|
return !!(value && value.__CANCEL__);
|
|
}
|
|
|
|
// node_modules/axios/lib/cancel/CanceledError.js
|
|
var CanceledError = function(message, config, request) {
|
|
AxiosError_default.call(this, message == null ? "canceled" : message, AxiosError_default.ERR_CANCELED, config, request);
|
|
this.name = "CanceledError";
|
|
};
|
|
utils_default.inherits(CanceledError, AxiosError_default, {
|
|
__CANCEL__: true
|
|
});
|
|
var CanceledError_default = CanceledError;
|
|
|
|
// node_modules/axios/lib/core/settle.js
|
|
function settle(resolve, reject, response) {
|
|
const validateStatus2 = response.config.validateStatus;
|
|
if (!response.status || !validateStatus2 || validateStatus2(response.status)) {
|
|
resolve(response);
|
|
} else {
|
|
reject(new AxiosError_default("Request failed with status code " + response.status, [AxiosError_default.ERR_BAD_REQUEST, AxiosError_default.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response));
|
|
}
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/isAbsoluteURL.js
|
|
function isAbsoluteURL(url2) {
|
|
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/combineURLs.js
|
|
function combineURLs(baseURL, relativeURL) {
|
|
return relativeURL ? baseURL.replace(/\/?\/$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
|
|
}
|
|
|
|
// node_modules/axios/lib/core/buildFullPath.js
|
|
function buildFullPath(baseURL, requestedURL) {
|
|
if (baseURL && !isAbsoluteURL(requestedURL)) {
|
|
return combineURLs(baseURL, requestedURL);
|
|
}
|
|
return requestedURL;
|
|
}
|
|
|
|
// node_modules/proxy-from-env/index.js
|
|
var getProxyForUrl = function(url2) {
|
|
var parsedUrl = typeof url2 === "string" ? parseUrl(url2) : url2 || {};
|
|
var proto = parsedUrl.protocol;
|
|
var hostname = parsedUrl.host;
|
|
var port = parsedUrl.port;
|
|
if (typeof hostname !== "string" || !hostname || typeof proto !== "string") {
|
|
return "";
|
|
}
|
|
proto = proto.split(":", 1)[0];
|
|
hostname = hostname.replace(/:\d*$/, "");
|
|
port = parseInt(port) || DEFAULT_PORTS[proto] || 0;
|
|
if (!shouldProxy(hostname, port)) {
|
|
return "";
|
|
}
|
|
var proxy = getEnv("npm_config_" + proto + "_proxy") || getEnv(proto + "_proxy") || getEnv("npm_config_proxy") || getEnv("all_proxy");
|
|
if (proxy && proxy.indexOf("://") === -1) {
|
|
proxy = proto + "://" + proxy;
|
|
}
|
|
return proxy;
|
|
};
|
|
var shouldProxy = function(hostname, port) {
|
|
var NO_PROXY = (getEnv("npm_config_no_proxy") || getEnv("no_proxy")).toLowerCase();
|
|
if (!NO_PROXY) {
|
|
return true;
|
|
}
|
|
if (NO_PROXY === "*") {
|
|
return false;
|
|
}
|
|
return NO_PROXY.split(/[,\s]/).every(function(proxy) {
|
|
if (!proxy) {
|
|
return true;
|
|
}
|
|
var parsedProxy = proxy.match(/^(.+):(\d+)$/);
|
|
var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;
|
|
var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;
|
|
if (parsedProxyPort && parsedProxyPort !== port) {
|
|
return true;
|
|
}
|
|
if (!/^[.*]/.test(parsedProxyHostname)) {
|
|
return hostname !== parsedProxyHostname;
|
|
}
|
|
if (parsedProxyHostname.charAt(0) === "*") {
|
|
parsedProxyHostname = parsedProxyHostname.slice(1);
|
|
}
|
|
return !stringEndsWith.call(hostname, parsedProxyHostname);
|
|
});
|
|
};
|
|
var getEnv = function(key) {
|
|
return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || "";
|
|
};
|
|
var parseUrl = __require("url").parse;
|
|
var DEFAULT_PORTS = {
|
|
ftp: 21,
|
|
gopher: 70,
|
|
http: 80,
|
|
https: 443,
|
|
ws: 80,
|
|
wss: 443
|
|
};
|
|
var stringEndsWith = String.prototype.endsWith || function(s) {
|
|
return s.length <= this.length && this.indexOf(s, this.length - s.length) !== -1;
|
|
};
|
|
var $getProxyForUrl = getProxyForUrl;
|
|
|
|
// node_modules/axios/lib/adapters/http.js
|
|
var import_follow_redirects = __toESM(require_follow_redirects(), 1);
|
|
import http from "http";
|
|
import https from "https";
|
|
import util from "util";
|
|
import zlib from "zlib";
|
|
|
|
// node_modules/axios/lib/env/data.js
|
|
var VERSION = "1.7.2";
|
|
|
|
// node_modules/axios/lib/helpers/parseProtocol.js
|
|
function parseProtocol(url2) {
|
|
const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url2);
|
|
return match && match[1] || "";
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/fromDataURI.js
|
|
var DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;
|
|
function fromDataURI(uri, asBlob, options) {
|
|
const _Blob = options && options.Blob || platform_default.classes.Blob;
|
|
const protocol = parseProtocol(uri);
|
|
if (asBlob === undefined && _Blob) {
|
|
asBlob = true;
|
|
}
|
|
if (protocol === "data") {
|
|
uri = protocol.length ? uri.slice(protocol.length + 1) : uri;
|
|
const match = DATA_URL_PATTERN.exec(uri);
|
|
if (!match) {
|
|
throw new AxiosError_default("Invalid URL", AxiosError_default.ERR_INVALID_URL);
|
|
}
|
|
const mime = match[1];
|
|
const isBase64 = match[2];
|
|
const body = match[3];
|
|
const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? "base64" : "utf8");
|
|
if (asBlob) {
|
|
if (!_Blob) {
|
|
throw new AxiosError_default("Blob is not supported", AxiosError_default.ERR_NOT_SUPPORT);
|
|
}
|
|
return new _Blob([buffer], { type: mime });
|
|
}
|
|
return buffer;
|
|
}
|
|
throw new AxiosError_default("Unsupported protocol " + protocol, AxiosError_default.ERR_NOT_SUPPORT);
|
|
}
|
|
|
|
// node_modules/axios/lib/adapters/http.js
|
|
import stream3 from "stream";
|
|
|
|
// node_modules/axios/lib/helpers/AxiosTransformStream.js
|
|
import stream from "stream";
|
|
|
|
// node_modules/axios/lib/helpers/throttle.js
|
|
var throttle = function(fn, freq) {
|
|
let timestamp = 0;
|
|
const threshold = 1000 / freq;
|
|
let timer = null;
|
|
return function throttled() {
|
|
const force = this === true;
|
|
const now = Date.now();
|
|
if (force || now - timestamp > threshold) {
|
|
if (timer) {
|
|
clearTimeout(timer);
|
|
timer = null;
|
|
}
|
|
timestamp = now;
|
|
return fn.apply(null, arguments);
|
|
}
|
|
if (!timer) {
|
|
timer = setTimeout(() => {
|
|
timer = null;
|
|
timestamp = Date.now();
|
|
return fn.apply(null, arguments);
|
|
}, threshold - (now - timestamp));
|
|
}
|
|
};
|
|
};
|
|
var throttle_default = throttle;
|
|
|
|
// node_modules/axios/lib/helpers/speedometer.js
|
|
var speedometer = function(samplesCount, min) {
|
|
samplesCount = samplesCount || 10;
|
|
const bytes = new Array(samplesCount);
|
|
const timestamps = new Array(samplesCount);
|
|
let head = 0;
|
|
let tail = 0;
|
|
let firstSampleTS;
|
|
min = min !== undefined ? min : 1000;
|
|
return function push(chunkLength) {
|
|
const now = Date.now();
|
|
const startedAt = timestamps[tail];
|
|
if (!firstSampleTS) {
|
|
firstSampleTS = now;
|
|
}
|
|
bytes[head] = chunkLength;
|
|
timestamps[head] = now;
|
|
let i = tail;
|
|
let bytesCount = 0;
|
|
while (i !== head) {
|
|
bytesCount += bytes[i++];
|
|
i = i % samplesCount;
|
|
}
|
|
head = (head + 1) % samplesCount;
|
|
if (head === tail) {
|
|
tail = (tail + 1) % samplesCount;
|
|
}
|
|
if (now - firstSampleTS < min) {
|
|
return;
|
|
}
|
|
const passed = startedAt && now - startedAt;
|
|
return passed ? Math.round(bytesCount * 1000 / passed) : undefined;
|
|
};
|
|
};
|
|
var speedometer_default = speedometer;
|
|
|
|
// node_modules/axios/lib/helpers/AxiosTransformStream.js
|
|
var kInternals = Symbol("internals");
|
|
|
|
class AxiosTransformStream extends stream.Transform {
|
|
constructor(options) {
|
|
options = utils_default.toFlatObject(options, {
|
|
maxRate: 0,
|
|
chunkSize: 64 * 1024,
|
|
minChunkSize: 100,
|
|
timeWindow: 500,
|
|
ticksRate: 2,
|
|
samplesCount: 15
|
|
}, null, (prop, source) => {
|
|
return !utils_default.isUndefined(source[prop]);
|
|
});
|
|
super({
|
|
readableHighWaterMark: options.chunkSize
|
|
});
|
|
const self2 = this;
|
|
const internals = this[kInternals] = {
|
|
length: options.length,
|
|
timeWindow: options.timeWindow,
|
|
ticksRate: options.ticksRate,
|
|
chunkSize: options.chunkSize,
|
|
maxRate: options.maxRate,
|
|
minChunkSize: options.minChunkSize,
|
|
bytesSeen: 0,
|
|
isCaptured: false,
|
|
notifiedBytesLoaded: 0,
|
|
ts: Date.now(),
|
|
bytes: 0,
|
|
onReadCallback: null
|
|
};
|
|
const _speedometer = speedometer_default(internals.ticksRate * options.samplesCount, internals.timeWindow);
|
|
this.on("newListener", (event) => {
|
|
if (event === "progress") {
|
|
if (!internals.isCaptured) {
|
|
internals.isCaptured = true;
|
|
}
|
|
}
|
|
});
|
|
let bytesNotified = 0;
|
|
internals.updateProgress = throttle_default(function throttledHandler() {
|
|
const totalBytes = internals.length;
|
|
const bytesTransferred = internals.bytesSeen;
|
|
const progressBytes = bytesTransferred - bytesNotified;
|
|
if (!progressBytes || self2.destroyed)
|
|
return;
|
|
const rate = _speedometer(progressBytes);
|
|
bytesNotified = bytesTransferred;
|
|
process.nextTick(() => {
|
|
self2.emit("progress", {
|
|
loaded: bytesTransferred,
|
|
total: totalBytes,
|
|
progress: totalBytes ? bytesTransferred / totalBytes : undefined,
|
|
bytes: progressBytes,
|
|
rate: rate ? rate : undefined,
|
|
estimated: rate && totalBytes && bytesTransferred <= totalBytes ? (totalBytes - bytesTransferred) / rate : undefined,
|
|
lengthComputable: totalBytes != null
|
|
});
|
|
});
|
|
}, internals.ticksRate);
|
|
const onFinish = () => {
|
|
internals.updateProgress.call(true);
|
|
};
|
|
this.once("end", onFinish);
|
|
this.once("error", onFinish);
|
|
}
|
|
_read(size) {
|
|
const internals = this[kInternals];
|
|
if (internals.onReadCallback) {
|
|
internals.onReadCallback();
|
|
}
|
|
return super._read(size);
|
|
}
|
|
_transform(chunk, encoding, callback) {
|
|
const self2 = this;
|
|
const internals = this[kInternals];
|
|
const maxRate = internals.maxRate;
|
|
const readableHighWaterMark = this.readableHighWaterMark;
|
|
const timeWindow = internals.timeWindow;
|
|
const divider = 1000 / timeWindow;
|
|
const bytesThreshold = maxRate / divider;
|
|
const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;
|
|
function pushChunk(_chunk, _callback) {
|
|
const bytes = Buffer.byteLength(_chunk);
|
|
internals.bytesSeen += bytes;
|
|
internals.bytes += bytes;
|
|
if (internals.isCaptured) {
|
|
internals.updateProgress();
|
|
}
|
|
if (self2.push(_chunk)) {
|
|
process.nextTick(_callback);
|
|
} else {
|
|
internals.onReadCallback = () => {
|
|
internals.onReadCallback = null;
|
|
process.nextTick(_callback);
|
|
};
|
|
}
|
|
}
|
|
const transformChunk = (_chunk, _callback) => {
|
|
const chunkSize = Buffer.byteLength(_chunk);
|
|
let chunkRemainder = null;
|
|
let maxChunkSize = readableHighWaterMark;
|
|
let bytesLeft;
|
|
let passed = 0;
|
|
if (maxRate) {
|
|
const now = Date.now();
|
|
if (!internals.ts || (passed = now - internals.ts) >= timeWindow) {
|
|
internals.ts = now;
|
|
bytesLeft = bytesThreshold - internals.bytes;
|
|
internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;
|
|
passed = 0;
|
|
}
|
|
bytesLeft = bytesThreshold - internals.bytes;
|
|
}
|
|
if (maxRate) {
|
|
if (bytesLeft <= 0) {
|
|
return setTimeout(() => {
|
|
_callback(null, _chunk);
|
|
}, timeWindow - passed);
|
|
}
|
|
if (bytesLeft < maxChunkSize) {
|
|
maxChunkSize = bytesLeft;
|
|
}
|
|
}
|
|
if (maxChunkSize && chunkSize > maxChunkSize && chunkSize - maxChunkSize > minChunkSize) {
|
|
chunkRemainder = _chunk.subarray(maxChunkSize);
|
|
_chunk = _chunk.subarray(0, maxChunkSize);
|
|
}
|
|
pushChunk(_chunk, chunkRemainder ? () => {
|
|
process.nextTick(_callback, null, chunkRemainder);
|
|
} : _callback);
|
|
};
|
|
transformChunk(chunk, function transformNextChunk(err, _chunk) {
|
|
if (err) {
|
|
return callback(err);
|
|
}
|
|
if (_chunk) {
|
|
transformChunk(_chunk, transformNextChunk);
|
|
} else {
|
|
callback(null);
|
|
}
|
|
});
|
|
}
|
|
setLength(length) {
|
|
this[kInternals].length = +length;
|
|
return this;
|
|
}
|
|
}
|
|
var AxiosTransformStream_default = AxiosTransformStream;
|
|
|
|
// node_modules/axios/lib/adapters/http.js
|
|
import {EventEmitter} from "events";
|
|
|
|
// node_modules/axios/lib/helpers/formDataToStream.js
|
|
import {TextEncoder as TextEncoder2} from "util";
|
|
import {Readable} from "stream";
|
|
|
|
// node_modules/axios/lib/helpers/readBlob.js
|
|
var { asyncIterator } = Symbol;
|
|
var readBlob = async function* (blob) {
|
|
if (blob.stream) {
|
|
yield* blob.stream();
|
|
} else if (blob.arrayBuffer) {
|
|
yield await blob.arrayBuffer();
|
|
} else if (blob[asyncIterator]) {
|
|
yield* blob[asyncIterator]();
|
|
} else {
|
|
yield blob;
|
|
}
|
|
};
|
|
var readBlob_default = readBlob;
|
|
|
|
// node_modules/axios/lib/helpers/formDataToStream.js
|
|
var BOUNDARY_ALPHABET = utils_default.ALPHABET.ALPHA_DIGIT + "-_";
|
|
var textEncoder = new TextEncoder2;
|
|
var CRLF = "\r\n";
|
|
var CRLF_BYTES = textEncoder.encode(CRLF);
|
|
var CRLF_BYTES_COUNT = 2;
|
|
|
|
class FormDataPart {
|
|
constructor(name, value) {
|
|
const { escapeName } = this.constructor;
|
|
const isStringValue = utils_default.isString(value);
|
|
let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${!isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : ""}${CRLF}`;
|
|
if (isStringValue) {
|
|
value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF));
|
|
} else {
|
|
headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}`;
|
|
}
|
|
this.headers = textEncoder.encode(headers + CRLF);
|
|
this.contentLength = isStringValue ? value.byteLength : value.size;
|
|
this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;
|
|
this.name = name;
|
|
this.value = value;
|
|
}
|
|
async* encode() {
|
|
yield this.headers;
|
|
const { value } = this;
|
|
if (utils_default.isTypedArray(value)) {
|
|
yield value;
|
|
} else {
|
|
yield* readBlob_default(value);
|
|
}
|
|
yield CRLF_BYTES;
|
|
}
|
|
static escapeName(name) {
|
|
return String(name).replace(/[\r\n"]/g, (match) => ({
|
|
"\r": "%0D",
|
|
"\n": "%0A",
|
|
'"': "%22"
|
|
})[match]);
|
|
}
|
|
}
|
|
var formDataToStream = (form, headersHandler, options) => {
|
|
const {
|
|
tag = "form-data-boundary",
|
|
size = 25,
|
|
boundary = tag + "-" + utils_default.generateString(size, BOUNDARY_ALPHABET)
|
|
} = options || {};
|
|
if (!utils_default.isFormData(form)) {
|
|
throw TypeError("FormData instance required");
|
|
}
|
|
if (boundary.length < 1 || boundary.length > 70) {
|
|
throw Error("boundary must be 10-70 characters long");
|
|
}
|
|
const boundaryBytes = textEncoder.encode("--" + boundary + CRLF);
|
|
const footerBytes = textEncoder.encode("--" + boundary + "--" + CRLF + CRLF);
|
|
let contentLength = footerBytes.byteLength;
|
|
const parts = Array.from(form.entries()).map(([name, value]) => {
|
|
const part = new FormDataPart(name, value);
|
|
contentLength += part.size;
|
|
return part;
|
|
});
|
|
contentLength += boundaryBytes.byteLength * parts.length;
|
|
contentLength = utils_default.toFiniteNumber(contentLength);
|
|
const computedHeaders = {
|
|
"Content-Type": `multipart/form-data; boundary=${boundary}`
|
|
};
|
|
if (Number.isFinite(contentLength)) {
|
|
computedHeaders["Content-Length"] = contentLength;
|
|
}
|
|
headersHandler && headersHandler(computedHeaders);
|
|
return Readable.from(async function* () {
|
|
for (const part of parts) {
|
|
yield boundaryBytes;
|
|
yield* part.encode();
|
|
}
|
|
yield footerBytes;
|
|
}());
|
|
};
|
|
var formDataToStream_default = formDataToStream;
|
|
|
|
// node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js
|
|
import stream2 from "stream";
|
|
|
|
class ZlibHeaderTransformStream extends stream2.Transform {
|
|
__transform(chunk, encoding, callback) {
|
|
this.push(chunk);
|
|
callback();
|
|
}
|
|
_transform(chunk, encoding, callback) {
|
|
if (chunk.length !== 0) {
|
|
this._transform = this.__transform;
|
|
if (chunk[0] !== 120) {
|
|
const header = Buffer.alloc(2);
|
|
header[0] = 120;
|
|
header[1] = 156;
|
|
this.push(header, encoding);
|
|
}
|
|
}
|
|
this.__transform(chunk, encoding, callback);
|
|
}
|
|
}
|
|
var ZlibHeaderTransformStream_default = ZlibHeaderTransformStream;
|
|
|
|
// node_modules/axios/lib/helpers/callbackify.js
|
|
var callbackify = (fn, reducer) => {
|
|
return utils_default.isAsyncFn(fn) ? function(...args) {
|
|
const cb = args.pop();
|
|
fn.apply(this, args).then((value) => {
|
|
try {
|
|
reducer ? cb(null, ...reducer(value)) : cb(null, value);
|
|
} catch (err) {
|
|
cb(err);
|
|
}
|
|
}, cb);
|
|
} : fn;
|
|
};
|
|
var callbackify_default = callbackify;
|
|
|
|
// node_modules/axios/lib/adapters/http.js
|
|
var dispatchBeforeRedirect = function(options, responseDetails) {
|
|
if (options.beforeRedirects.proxy) {
|
|
options.beforeRedirects.proxy(options);
|
|
}
|
|
if (options.beforeRedirects.config) {
|
|
options.beforeRedirects.config(options, responseDetails);
|
|
}
|
|
};
|
|
var setProxy = function(options, configProxy, location) {
|
|
let proxy = configProxy;
|
|
if (!proxy && proxy !== false) {
|
|
const proxyUrl = $getProxyForUrl(location);
|
|
if (proxyUrl) {
|
|
proxy = new URL(proxyUrl);
|
|
}
|
|
}
|
|
if (proxy) {
|
|
if (proxy.username) {
|
|
proxy.auth = (proxy.username || "") + ":" + (proxy.password || "");
|
|
}
|
|
if (proxy.auth) {
|
|
if (proxy.auth.username || proxy.auth.password) {
|
|
proxy.auth = (proxy.auth.username || "") + ":" + (proxy.auth.password || "");
|
|
}
|
|
const base64 = Buffer.from(proxy.auth, "utf8").toString("base64");
|
|
options.headers["Proxy-Authorization"] = "Basic " + base64;
|
|
}
|
|
options.headers.host = options.hostname + (options.port ? ":" + options.port : "");
|
|
const proxyHost = proxy.hostname || proxy.host;
|
|
options.hostname = proxyHost;
|
|
options.host = proxyHost;
|
|
options.port = proxy.port;
|
|
options.path = location;
|
|
if (proxy.protocol) {
|
|
options.protocol = proxy.protocol.includes(":") ? proxy.protocol : `${proxy.protocol}:`;
|
|
}
|
|
}
|
|
options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {
|
|
setProxy(redirectOptions, configProxy, redirectOptions.href);
|
|
};
|
|
};
|
|
var zlibOptions = {
|
|
flush: zlib.constants.Z_SYNC_FLUSH,
|
|
finishFlush: zlib.constants.Z_SYNC_FLUSH
|
|
};
|
|
var brotliOptions = {
|
|
flush: zlib.constants.BROTLI_OPERATION_FLUSH,
|
|
finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH
|
|
};
|
|
var isBrotliSupported = utils_default.isFunction(zlib.createBrotliDecompress);
|
|
var { http: httpFollow, https: httpsFollow } = import_follow_redirects.default;
|
|
var isHttps = /https:?/;
|
|
var supportedProtocols = platform_default.protocols.map((protocol) => {
|
|
return protocol + ":";
|
|
});
|
|
var isHttpAdapterSupported = typeof process !== "undefined" && utils_default.kindOf(process) === "process";
|
|
var wrapAsync = (asyncExecutor) => {
|
|
return new Promise((resolve, reject) => {
|
|
let onDone;
|
|
let isDone;
|
|
const done = (value, isRejected) => {
|
|
if (isDone)
|
|
return;
|
|
isDone = true;
|
|
onDone && onDone(value, isRejected);
|
|
};
|
|
const _resolve = (value) => {
|
|
done(value);
|
|
resolve(value);
|
|
};
|
|
const _reject = (reason) => {
|
|
done(reason, true);
|
|
reject(reason);
|
|
};
|
|
asyncExecutor(_resolve, _reject, (onDoneHandler) => onDone = onDoneHandler).catch(_reject);
|
|
});
|
|
};
|
|
var resolveFamily = ({ address, family }) => {
|
|
if (!utils_default.isString(address)) {
|
|
throw TypeError("address must be a string");
|
|
}
|
|
return {
|
|
address,
|
|
family: family || (address.indexOf(".") < 0 ? 6 : 4)
|
|
};
|
|
};
|
|
var buildAddressEntry = (address, family) => resolveFamily(utils_default.isObject(address) ? address : { address, family });
|
|
var http_default = isHttpAdapterSupported && function httpAdapter(config) {
|
|
return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {
|
|
let { data: data2, lookup, family } = config;
|
|
const { responseType, responseEncoding } = config;
|
|
const method = config.method.toUpperCase();
|
|
let isDone;
|
|
let rejected = false;
|
|
let req;
|
|
if (lookup) {
|
|
const _lookup = callbackify_default(lookup, (value) => utils_default.isArray(value) ? value : [value]);
|
|
lookup = (hostname, opt, cb) => {
|
|
_lookup(hostname, opt, (err, arg0, arg1) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
const addresses = utils_default.isArray(arg0) ? arg0.map((addr) => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];
|
|
opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);
|
|
});
|
|
};
|
|
}
|
|
const emitter = new EventEmitter;
|
|
const onFinished = () => {
|
|
if (config.cancelToken) {
|
|
config.cancelToken.unsubscribe(abort);
|
|
}
|
|
if (config.signal) {
|
|
config.signal.removeEventListener("abort", abort);
|
|
}
|
|
emitter.removeAllListeners();
|
|
};
|
|
onDone((value, isRejected) => {
|
|
isDone = true;
|
|
if (isRejected) {
|
|
rejected = true;
|
|
onFinished();
|
|
}
|
|
});
|
|
function abort(reason) {
|
|
emitter.emit("abort", !reason || reason.type ? new CanceledError_default(null, config, req) : reason);
|
|
}
|
|
emitter.once("abort", reject);
|
|
if (config.cancelToken || config.signal) {
|
|
config.cancelToken && config.cancelToken.subscribe(abort);
|
|
if (config.signal) {
|
|
config.signal.aborted ? abort() : config.signal.addEventListener("abort", abort);
|
|
}
|
|
}
|
|
const fullPath = buildFullPath(config.baseURL, config.url);
|
|
const parsed = new URL(fullPath, "http://localhost");
|
|
const protocol = parsed.protocol || supportedProtocols[0];
|
|
if (protocol === "data:") {
|
|
let convertedData;
|
|
if (method !== "GET") {
|
|
return settle(resolve, reject, {
|
|
status: 405,
|
|
statusText: "method not allowed",
|
|
headers: {},
|
|
config
|
|
});
|
|
}
|
|
try {
|
|
convertedData = fromDataURI(config.url, responseType === "blob", {
|
|
Blob: config.env && config.env.Blob
|
|
});
|
|
} catch (err) {
|
|
throw AxiosError_default.from(err, AxiosError_default.ERR_BAD_REQUEST, config);
|
|
}
|
|
if (responseType === "text") {
|
|
convertedData = convertedData.toString(responseEncoding);
|
|
if (!responseEncoding || responseEncoding === "utf8") {
|
|
convertedData = utils_default.stripBOM(convertedData);
|
|
}
|
|
} else if (responseType === "stream") {
|
|
convertedData = stream3.Readable.from(convertedData);
|
|
}
|
|
return settle(resolve, reject, {
|
|
data: convertedData,
|
|
status: 200,
|
|
statusText: "OK",
|
|
headers: new AxiosHeaders_default,
|
|
config
|
|
});
|
|
}
|
|
if (supportedProtocols.indexOf(protocol) === -1) {
|
|
return reject(new AxiosError_default("Unsupported protocol " + protocol, AxiosError_default.ERR_BAD_REQUEST, config));
|
|
}
|
|
const headers = AxiosHeaders_default.from(config.headers).normalize();
|
|
headers.set("User-Agent", "axios/" + VERSION, false);
|
|
const onDownloadProgress = config.onDownloadProgress;
|
|
const onUploadProgress = config.onUploadProgress;
|
|
const maxRate = config.maxRate;
|
|
let maxUploadRate = undefined;
|
|
let maxDownloadRate = undefined;
|
|
if (utils_default.isSpecCompliantForm(data2)) {
|
|
const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i);
|
|
data2 = formDataToStream_default(data2, (formHeaders) => {
|
|
headers.set(formHeaders);
|
|
}, {
|
|
tag: `axios-${VERSION}-boundary`,
|
|
boundary: userBoundary && userBoundary[1] || undefined
|
|
});
|
|
} else if (utils_default.isFormData(data2) && utils_default.isFunction(data2.getHeaders)) {
|
|
headers.set(data2.getHeaders());
|
|
if (!headers.hasContentLength()) {
|
|
try {
|
|
const knownLength = await util.promisify(data2.getLength).call(data2);
|
|
Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);
|
|
} catch (e) {
|
|
}
|
|
}
|
|
} else if (utils_default.isBlob(data2)) {
|
|
data2.size && headers.setContentType(data2.type || "application/octet-stream");
|
|
headers.setContentLength(data2.size || 0);
|
|
data2 = stream3.Readable.from(readBlob_default(data2));
|
|
} else if (data2 && !utils_default.isStream(data2)) {
|
|
if (Buffer.isBuffer(data2)) {
|
|
} else if (utils_default.isArrayBuffer(data2)) {
|
|
data2 = Buffer.from(new Uint8Array(data2));
|
|
} else if (utils_default.isString(data2)) {
|
|
data2 = Buffer.from(data2, "utf-8");
|
|
} else {
|
|
return reject(new AxiosError_default("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream", AxiosError_default.ERR_BAD_REQUEST, config));
|
|
}
|
|
headers.setContentLength(data2.length, false);
|
|
if (config.maxBodyLength > -1 && data2.length > config.maxBodyLength) {
|
|
return reject(new AxiosError_default("Request body larger than maxBodyLength limit", AxiosError_default.ERR_BAD_REQUEST, config));
|
|
}
|
|
}
|
|
const contentLength = utils_default.toFiniteNumber(headers.getContentLength());
|
|
if (utils_default.isArray(maxRate)) {
|
|
maxUploadRate = maxRate[0];
|
|
maxDownloadRate = maxRate[1];
|
|
} else {
|
|
maxUploadRate = maxDownloadRate = maxRate;
|
|
}
|
|
if (data2 && (onUploadProgress || maxUploadRate)) {
|
|
if (!utils_default.isStream(data2)) {
|
|
data2 = stream3.Readable.from(data2, { objectMode: false });
|
|
}
|
|
data2 = stream3.pipeline([data2, new AxiosTransformStream_default({
|
|
length: contentLength,
|
|
maxRate: utils_default.toFiniteNumber(maxUploadRate)
|
|
})], utils_default.noop);
|
|
onUploadProgress && data2.on("progress", (progress) => {
|
|
onUploadProgress(Object.assign(progress, {
|
|
upload: true
|
|
}));
|
|
});
|
|
}
|
|
let auth = undefined;
|
|
if (config.auth) {
|
|
const username = config.auth.username || "";
|
|
const password = config.auth.password || "";
|
|
auth = username + ":" + password;
|
|
}
|
|
if (!auth && parsed.username) {
|
|
const urlUsername = parsed.username;
|
|
const urlPassword = parsed.password;
|
|
auth = urlUsername + ":" + urlPassword;
|
|
}
|
|
auth && headers.delete("authorization");
|
|
let path;
|
|
try {
|
|
path = buildURL(parsed.pathname + parsed.search, config.params, config.paramsSerializer).replace(/^\?/, "");
|
|
} catch (err) {
|
|
const customErr = new Error(err.message);
|
|
customErr.config = config;
|
|
customErr.url = config.url;
|
|
customErr.exists = true;
|
|
return reject(customErr);
|
|
}
|
|
headers.set("Accept-Encoding", "gzip, compress, deflate" + (isBrotliSupported ? ", br" : ""), false);
|
|
const options = {
|
|
path,
|
|
method,
|
|
headers: headers.toJSON(),
|
|
agents: { http: config.httpAgent, https: config.httpsAgent },
|
|
auth,
|
|
protocol,
|
|
family,
|
|
beforeRedirect: dispatchBeforeRedirect,
|
|
beforeRedirects: {}
|
|
};
|
|
!utils_default.isUndefined(lookup) && (options.lookup = lookup);
|
|
if (config.socketPath) {
|
|
options.socketPath = config.socketPath;
|
|
} else {
|
|
options.hostname = parsed.hostname;
|
|
options.port = parsed.port;
|
|
setProxy(options, config.proxy, protocol + "//" + parsed.hostname + (parsed.port ? ":" + parsed.port : "") + options.path);
|
|
}
|
|
let transport;
|
|
const isHttpsRequest = isHttps.test(options.protocol);
|
|
options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
|
|
if (config.transport) {
|
|
transport = config.transport;
|
|
} else if (config.maxRedirects === 0) {
|
|
transport = isHttpsRequest ? https : http;
|
|
} else {
|
|
if (config.maxRedirects) {
|
|
options.maxRedirects = config.maxRedirects;
|
|
}
|
|
if (config.beforeRedirect) {
|
|
options.beforeRedirects.config = config.beforeRedirect;
|
|
}
|
|
transport = isHttpsRequest ? httpsFollow : httpFollow;
|
|
}
|
|
if (config.maxBodyLength > -1) {
|
|
options.maxBodyLength = config.maxBodyLength;
|
|
} else {
|
|
options.maxBodyLength = Infinity;
|
|
}
|
|
if (config.insecureHTTPParser) {
|
|
options.insecureHTTPParser = config.insecureHTTPParser;
|
|
}
|
|
req = transport.request(options, function handleResponse(res) {
|
|
if (req.destroyed)
|
|
return;
|
|
const streams = [res];
|
|
const responseLength = +res.headers["content-length"];
|
|
if (onDownloadProgress) {
|
|
const transformStream = new AxiosTransformStream_default({
|
|
length: utils_default.toFiniteNumber(responseLength),
|
|
maxRate: utils_default.toFiniteNumber(maxDownloadRate)
|
|
});
|
|
onDownloadProgress && transformStream.on("progress", (progress) => {
|
|
onDownloadProgress(Object.assign(progress, {
|
|
download: true
|
|
}));
|
|
});
|
|
streams.push(transformStream);
|
|
}
|
|
let responseStream = res;
|
|
const lastRequest = res.req || req;
|
|
if (config.decompress !== false && res.headers["content-encoding"]) {
|
|
if (method === "HEAD" || res.statusCode === 204) {
|
|
delete res.headers["content-encoding"];
|
|
}
|
|
switch ((res.headers["content-encoding"] || "").toLowerCase()) {
|
|
case "gzip":
|
|
case "x-gzip":
|
|
case "compress":
|
|
case "x-compress":
|
|
streams.push(zlib.createUnzip(zlibOptions));
|
|
delete res.headers["content-encoding"];
|
|
break;
|
|
case "deflate":
|
|
streams.push(new ZlibHeaderTransformStream_default);
|
|
streams.push(zlib.createUnzip(zlibOptions));
|
|
delete res.headers["content-encoding"];
|
|
break;
|
|
case "br":
|
|
if (isBrotliSupported) {
|
|
streams.push(zlib.createBrotliDecompress(brotliOptions));
|
|
delete res.headers["content-encoding"];
|
|
}
|
|
}
|
|
}
|
|
responseStream = streams.length > 1 ? stream3.pipeline(streams, utils_default.noop) : streams[0];
|
|
const offListeners = stream3.finished(responseStream, () => {
|
|
offListeners();
|
|
onFinished();
|
|
});
|
|
const response = {
|
|
status: res.statusCode,
|
|
statusText: res.statusMessage,
|
|
headers: new AxiosHeaders_default(res.headers),
|
|
config,
|
|
request: lastRequest
|
|
};
|
|
if (responseType === "stream") {
|
|
response.data = responseStream;
|
|
settle(resolve, reject, response);
|
|
} else {
|
|
const responseBuffer = [];
|
|
let totalResponseBytes = 0;
|
|
responseStream.on("data", function handleStreamData(chunk) {
|
|
responseBuffer.push(chunk);
|
|
totalResponseBytes += chunk.length;
|
|
if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {
|
|
rejected = true;
|
|
responseStream.destroy();
|
|
reject(new AxiosError_default("maxContentLength size of " + config.maxContentLength + " exceeded", AxiosError_default.ERR_BAD_RESPONSE, config, lastRequest));
|
|
}
|
|
});
|
|
responseStream.on("aborted", function handlerStreamAborted() {
|
|
if (rejected) {
|
|
return;
|
|
}
|
|
const err = new AxiosError_default("maxContentLength size of " + config.maxContentLength + " exceeded", AxiosError_default.ERR_BAD_RESPONSE, config, lastRequest);
|
|
responseStream.destroy(err);
|
|
reject(err);
|
|
});
|
|
responseStream.on("error", function handleStreamError(err) {
|
|
if (req.destroyed)
|
|
return;
|
|
reject(AxiosError_default.from(err, null, config, lastRequest));
|
|
});
|
|
responseStream.on("end", function handleStreamEnd() {
|
|
try {
|
|
let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);
|
|
if (responseType !== "arraybuffer") {
|
|
responseData = responseData.toString(responseEncoding);
|
|
if (!responseEncoding || responseEncoding === "utf8") {
|
|
responseData = utils_default.stripBOM(responseData);
|
|
}
|
|
}
|
|
response.data = responseData;
|
|
} catch (err) {
|
|
return reject(AxiosError_default.from(err, null, config, response.request, response));
|
|
}
|
|
settle(resolve, reject, response);
|
|
});
|
|
}
|
|
emitter.once("abort", (err) => {
|
|
if (!responseStream.destroyed) {
|
|
responseStream.emit("error", err);
|
|
responseStream.destroy();
|
|
}
|
|
});
|
|
});
|
|
emitter.once("abort", (err) => {
|
|
reject(err);
|
|
req.destroy(err);
|
|
});
|
|
req.on("error", function handleRequestError(err) {
|
|
reject(AxiosError_default.from(err, null, config, req));
|
|
});
|
|
req.on("socket", function handleRequestSocket(socket) {
|
|
socket.setKeepAlive(true, 1000 * 60);
|
|
});
|
|
if (config.timeout) {
|
|
const timeout = parseInt(config.timeout, 10);
|
|
if (Number.isNaN(timeout)) {
|
|
reject(new AxiosError_default("error trying to parse `config.timeout` to int", AxiosError_default.ERR_BAD_OPTION_VALUE, config, req));
|
|
return;
|
|
}
|
|
req.setTimeout(timeout, function handleRequestTimeout() {
|
|
if (isDone)
|
|
return;
|
|
let timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded";
|
|
const transitional3 = config.transitional || transitional_default;
|
|
if (config.timeoutErrorMessage) {
|
|
timeoutErrorMessage = config.timeoutErrorMessage;
|
|
}
|
|
reject(new AxiosError_default(timeoutErrorMessage, transitional3.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED, config, req));
|
|
abort();
|
|
});
|
|
}
|
|
if (utils_default.isStream(data2)) {
|
|
let ended = false;
|
|
let errored = false;
|
|
data2.on("end", () => {
|
|
ended = true;
|
|
});
|
|
data2.once("error", (err) => {
|
|
errored = true;
|
|
req.destroy(err);
|
|
});
|
|
data2.on("close", () => {
|
|
if (!ended && !errored) {
|
|
abort(new CanceledError_default("Request stream has been aborted", config, req));
|
|
}
|
|
});
|
|
data2.pipe(req);
|
|
} else {
|
|
req.end(data2);
|
|
}
|
|
});
|
|
};
|
|
|
|
// node_modules/axios/lib/helpers/progressEventReducer.js
|
|
var progressEventReducer_default = (listener, isDownloadStream, freq = 3) => {
|
|
let bytesNotified = 0;
|
|
const _speedometer = speedometer_default(50, 250);
|
|
return throttle_default((e) => {
|
|
const loaded = e.loaded;
|
|
const total = e.lengthComputable ? e.total : undefined;
|
|
const progressBytes = loaded - bytesNotified;
|
|
const rate = _speedometer(progressBytes);
|
|
const inRange = loaded <= total;
|
|
bytesNotified = loaded;
|
|
const data2 = {
|
|
loaded,
|
|
total,
|
|
progress: total ? loaded / total : undefined,
|
|
bytes: progressBytes,
|
|
rate: rate ? rate : undefined,
|
|
estimated: rate && total && inRange ? (total - loaded) / rate : undefined,
|
|
event: e,
|
|
lengthComputable: total != null
|
|
};
|
|
data2[isDownloadStream ? "download" : "upload"] = true;
|
|
listener(data2);
|
|
}, freq);
|
|
};
|
|
|
|
// node_modules/axios/lib/helpers/isURLSameOrigin.js
|
|
var isURLSameOrigin_default = platform_default.hasStandardBrowserEnv ? function standardBrowserEnv() {
|
|
const msie = /(msie|trident)/i.test(navigator.userAgent);
|
|
const urlParsingNode = document.createElement("a");
|
|
let originURL;
|
|
function resolveURL(url2) {
|
|
let href = url2;
|
|
if (msie) {
|
|
urlParsingNode.setAttribute("href", href);
|
|
href = urlParsingNode.href;
|
|
}
|
|
urlParsingNode.setAttribute("href", href);
|
|
return {
|
|
href: urlParsingNode.href,
|
|
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "",
|
|
host: urlParsingNode.host,
|
|
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "",
|
|
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "",
|
|
hostname: urlParsingNode.hostname,
|
|
port: urlParsingNode.port,
|
|
pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname
|
|
};
|
|
}
|
|
originURL = resolveURL(window.location.href);
|
|
return function isURLSameOrigin(requestURL) {
|
|
const parsed = utils_default.isString(requestURL) ? resolveURL(requestURL) : requestURL;
|
|
return parsed.protocol === originURL.protocol && parsed.host === originURL.host;
|
|
};
|
|
}() : function nonStandardBrowserEnv() {
|
|
return function isURLSameOrigin() {
|
|
return true;
|
|
};
|
|
}();
|
|
|
|
// node_modules/axios/lib/helpers/cookies.js
|
|
var cookies_default = platform_default.hasStandardBrowserEnv ? {
|
|
write(name, value, expires, path, domain, secure) {
|
|
const cookie = [name + "=" + encodeURIComponent(value)];
|
|
utils_default.isNumber(expires) && cookie.push("expires=" + new Date(expires).toGMTString());
|
|
utils_default.isString(path) && cookie.push("path=" + path);
|
|
utils_default.isString(domain) && cookie.push("domain=" + domain);
|
|
secure === true && cookie.push("secure");
|
|
document.cookie = cookie.join("; ");
|
|
},
|
|
read(name) {
|
|
const match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)"));
|
|
return match ? decodeURIComponent(match[3]) : null;
|
|
},
|
|
remove(name) {
|
|
this.write(name, "", Date.now() - 86400000);
|
|
}
|
|
} : {
|
|
write() {
|
|
},
|
|
read() {
|
|
return null;
|
|
},
|
|
remove() {
|
|
}
|
|
};
|
|
|
|
// node_modules/axios/lib/core/mergeConfig.js
|
|
var headersToObject = (thing) => thing instanceof AxiosHeaders_default ? { ...thing } : thing;
|
|
function mergeConfig(config1, config2) {
|
|
config2 = config2 || {};
|
|
const config = {};
|
|
function getMergedValue(target, source, caseless) {
|
|
if (utils_default.isPlainObject(target) && utils_default.isPlainObject(source)) {
|
|
return utils_default.merge.call({ caseless }, target, source);
|
|
} else if (utils_default.isPlainObject(source)) {
|
|
return utils_default.merge({}, source);
|
|
} else if (utils_default.isArray(source)) {
|
|
return source.slice();
|
|
}
|
|
return source;
|
|
}
|
|
function mergeDeepProperties(a, b, caseless) {
|
|
if (!utils_default.isUndefined(b)) {
|
|
return getMergedValue(a, b, caseless);
|
|
} else if (!utils_default.isUndefined(a)) {
|
|
return getMergedValue(undefined, a, caseless);
|
|
}
|
|
}
|
|
function valueFromConfig2(a, b) {
|
|
if (!utils_default.isUndefined(b)) {
|
|
return getMergedValue(undefined, b);
|
|
}
|
|
}
|
|
function defaultToConfig2(a, b) {
|
|
if (!utils_default.isUndefined(b)) {
|
|
return getMergedValue(undefined, b);
|
|
} else if (!utils_default.isUndefined(a)) {
|
|
return getMergedValue(undefined, a);
|
|
}
|
|
}
|
|
function mergeDirectKeys(a, b, prop) {
|
|
if (prop in config2) {
|
|
return getMergedValue(a, b);
|
|
} else if (prop in config1) {
|
|
return getMergedValue(undefined, a);
|
|
}
|
|
}
|
|
const mergeMap = {
|
|
url: valueFromConfig2,
|
|
method: valueFromConfig2,
|
|
data: valueFromConfig2,
|
|
baseURL: defaultToConfig2,
|
|
transformRequest: defaultToConfig2,
|
|
transformResponse: defaultToConfig2,
|
|
paramsSerializer: defaultToConfig2,
|
|
timeout: defaultToConfig2,
|
|
timeoutMessage: defaultToConfig2,
|
|
withCredentials: defaultToConfig2,
|
|
withXSRFToken: defaultToConfig2,
|
|
adapter: defaultToConfig2,
|
|
responseType: defaultToConfig2,
|
|
xsrfCookieName: defaultToConfig2,
|
|
xsrfHeaderName: defaultToConfig2,
|
|
onUploadProgress: defaultToConfig2,
|
|
onDownloadProgress: defaultToConfig2,
|
|
decompress: defaultToConfig2,
|
|
maxContentLength: defaultToConfig2,
|
|
maxBodyLength: defaultToConfig2,
|
|
beforeRedirect: defaultToConfig2,
|
|
transport: defaultToConfig2,
|
|
httpAgent: defaultToConfig2,
|
|
httpsAgent: defaultToConfig2,
|
|
cancelToken: defaultToConfig2,
|
|
socketPath: defaultToConfig2,
|
|
responseEncoding: defaultToConfig2,
|
|
validateStatus: mergeDirectKeys,
|
|
headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)
|
|
};
|
|
utils_default.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {
|
|
const merge2 = mergeMap[prop] || mergeDeepProperties;
|
|
const configValue = merge2(config1[prop], config2[prop], prop);
|
|
utils_default.isUndefined(configValue) && merge2 !== mergeDirectKeys || (config[prop] = configValue);
|
|
});
|
|
return config;
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/resolveConfig.js
|
|
var resolveConfig_default = (config) => {
|
|
const newConfig = mergeConfig({}, config);
|
|
let { data: data2, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;
|
|
newConfig.headers = headers = AxiosHeaders_default.from(headers);
|
|
newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);
|
|
if (auth) {
|
|
headers.set("Authorization", "Basic " + btoa((auth.username || "") + ":" + (auth.password ? unescape(encodeURIComponent(auth.password)) : "")));
|
|
}
|
|
let contentType;
|
|
if (utils_default.isFormData(data2)) {
|
|
if (platform_default.hasStandardBrowserEnv || platform_default.hasStandardBrowserWebWorkerEnv) {
|
|
headers.setContentType(undefined);
|
|
} else if ((contentType = headers.getContentType()) !== false) {
|
|
const [type, ...tokens] = contentType ? contentType.split(";").map((token) => token.trim()).filter(Boolean) : [];
|
|
headers.setContentType([type || "multipart/form-data", ...tokens].join("; "));
|
|
}
|
|
}
|
|
if (platform_default.hasStandardBrowserEnv) {
|
|
withXSRFToken && utils_default.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));
|
|
if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin_default(newConfig.url)) {
|
|
const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies_default.read(xsrfCookieName);
|
|
if (xsrfValue) {
|
|
headers.set(xsrfHeaderName, xsrfValue);
|
|
}
|
|
}
|
|
}
|
|
return newConfig;
|
|
};
|
|
|
|
// node_modules/axios/lib/adapters/xhr.js
|
|
var isXHRAdapterSupported = typeof XMLHttpRequest !== "undefined";
|
|
var xhr_default = isXHRAdapterSupported && function(config) {
|
|
return new Promise(function dispatchXhrRequest(resolve, reject) {
|
|
const _config = resolveConfig_default(config);
|
|
let requestData = _config.data;
|
|
const requestHeaders = AxiosHeaders_default.from(_config.headers).normalize();
|
|
let { responseType } = _config;
|
|
let onCanceled;
|
|
function done() {
|
|
if (_config.cancelToken) {
|
|
_config.cancelToken.unsubscribe(onCanceled);
|
|
}
|
|
if (_config.signal) {
|
|
_config.signal.removeEventListener("abort", onCanceled);
|
|
}
|
|
}
|
|
let request = new XMLHttpRequest;
|
|
request.open(_config.method.toUpperCase(), _config.url, true);
|
|
request.timeout = _config.timeout;
|
|
function onloadend() {
|
|
if (!request) {
|
|
return;
|
|
}
|
|
const responseHeaders = AxiosHeaders_default.from("getAllResponseHeaders" in request && request.getAllResponseHeaders());
|
|
const responseData = !responseType || responseType === "text" || responseType === "json" ? request.responseText : request.response;
|
|
const response = {
|
|
data: responseData,
|
|
status: request.status,
|
|
statusText: request.statusText,
|
|
headers: responseHeaders,
|
|
config,
|
|
request
|
|
};
|
|
settle(function _resolve(value) {
|
|
resolve(value);
|
|
done();
|
|
}, function _reject(err) {
|
|
reject(err);
|
|
done();
|
|
}, response);
|
|
request = null;
|
|
}
|
|
if ("onloadend" in request) {
|
|
request.onloadend = onloadend;
|
|
} else {
|
|
request.onreadystatechange = function handleLoad() {
|
|
if (!request || request.readyState !== 4) {
|
|
return;
|
|
}
|
|
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) {
|
|
return;
|
|
}
|
|
setTimeout(onloadend);
|
|
};
|
|
}
|
|
request.onabort = function handleAbort() {
|
|
if (!request) {
|
|
return;
|
|
}
|
|
reject(new AxiosError_default("Request aborted", AxiosError_default.ECONNABORTED, _config, request));
|
|
request = null;
|
|
};
|
|
request.onerror = function handleError() {
|
|
reject(new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, _config, request));
|
|
request = null;
|
|
};
|
|
request.ontimeout = function handleTimeout() {
|
|
let timeoutErrorMessage = _config.timeout ? "timeout of " + _config.timeout + "ms exceeded" : "timeout exceeded";
|
|
const transitional4 = _config.transitional || transitional_default;
|
|
if (_config.timeoutErrorMessage) {
|
|
timeoutErrorMessage = _config.timeoutErrorMessage;
|
|
}
|
|
reject(new AxiosError_default(timeoutErrorMessage, transitional4.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED, _config, request));
|
|
request = null;
|
|
};
|
|
requestData === undefined && requestHeaders.setContentType(null);
|
|
if ("setRequestHeader" in request) {
|
|
utils_default.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {
|
|
request.setRequestHeader(key, val);
|
|
});
|
|
}
|
|
if (!utils_default.isUndefined(_config.withCredentials)) {
|
|
request.withCredentials = !!_config.withCredentials;
|
|
}
|
|
if (responseType && responseType !== "json") {
|
|
request.responseType = _config.responseType;
|
|
}
|
|
if (typeof _config.onDownloadProgress === "function") {
|
|
request.addEventListener("progress", progressEventReducer_default(_config.onDownloadProgress, true));
|
|
}
|
|
if (typeof _config.onUploadProgress === "function" && request.upload) {
|
|
request.upload.addEventListener("progress", progressEventReducer_default(_config.onUploadProgress));
|
|
}
|
|
if (_config.cancelToken || _config.signal) {
|
|
onCanceled = (cancel) => {
|
|
if (!request) {
|
|
return;
|
|
}
|
|
reject(!cancel || cancel.type ? new CanceledError_default(null, config, request) : cancel);
|
|
request.abort();
|
|
request = null;
|
|
};
|
|
_config.cancelToken && _config.cancelToken.subscribe(onCanceled);
|
|
if (_config.signal) {
|
|
_config.signal.aborted ? onCanceled() : _config.signal.addEventListener("abort", onCanceled);
|
|
}
|
|
}
|
|
const protocol = parseProtocol(_config.url);
|
|
if (protocol && platform_default.protocols.indexOf(protocol) === -1) {
|
|
reject(new AxiosError_default("Unsupported protocol " + protocol + ":", AxiosError_default.ERR_BAD_REQUEST, config));
|
|
return;
|
|
}
|
|
request.send(requestData || null);
|
|
});
|
|
};
|
|
|
|
// node_modules/axios/lib/helpers/composeSignals.js
|
|
var composeSignals = (signals, timeout) => {
|
|
let controller = new AbortController;
|
|
let aborted;
|
|
const onabort = function(cancel) {
|
|
if (!aborted) {
|
|
aborted = true;
|
|
unsubscribe();
|
|
const err = cancel instanceof Error ? cancel : this.reason;
|
|
controller.abort(err instanceof AxiosError_default ? err : new CanceledError_default(err instanceof Error ? err.message : err));
|
|
}
|
|
};
|
|
let timer = timeout && setTimeout(() => {
|
|
onabort(new AxiosError_default(`timeout ${timeout} of ms exceeded`, AxiosError_default.ETIMEDOUT));
|
|
}, timeout);
|
|
const unsubscribe = () => {
|
|
if (signals) {
|
|
timer && clearTimeout(timer);
|
|
timer = null;
|
|
signals.forEach((signal2) => {
|
|
signal2 && (signal2.removeEventListener ? signal2.removeEventListener("abort", onabort) : signal2.unsubscribe(onabort));
|
|
});
|
|
signals = null;
|
|
}
|
|
};
|
|
signals.forEach((signal2) => signal2 && signal2.addEventListener && signal2.addEventListener("abort", onabort));
|
|
const { signal } = controller;
|
|
signal.unsubscribe = unsubscribe;
|
|
return [signal, () => {
|
|
timer && clearTimeout(timer);
|
|
timer = null;
|
|
}];
|
|
};
|
|
var composeSignals_default = composeSignals;
|
|
|
|
// node_modules/axios/lib/helpers/trackStream.js
|
|
var streamChunk = function* (chunk, chunkSize) {
|
|
let len = chunk.byteLength;
|
|
if (!chunkSize || len < chunkSize) {
|
|
yield chunk;
|
|
return;
|
|
}
|
|
let pos = 0;
|
|
let end;
|
|
while (pos < len) {
|
|
end = pos + chunkSize;
|
|
yield chunk.slice(pos, end);
|
|
pos = end;
|
|
}
|
|
};
|
|
var readBytes = async function* (iterable, chunkSize, encode3) {
|
|
for await (const chunk of iterable) {
|
|
yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : await encode3(String(chunk)), chunkSize);
|
|
}
|
|
};
|
|
var trackStream = (stream4, chunkSize, onProgress, onFinish, encode3) => {
|
|
const iterator = readBytes(stream4, chunkSize, encode3);
|
|
let bytes = 0;
|
|
return new ReadableStream({
|
|
type: "bytes",
|
|
async pull(controller) {
|
|
const { done, value } = await iterator.next();
|
|
if (done) {
|
|
controller.close();
|
|
onFinish();
|
|
return;
|
|
}
|
|
let len = value.byteLength;
|
|
onProgress && onProgress(bytes += len);
|
|
controller.enqueue(new Uint8Array(value));
|
|
},
|
|
cancel(reason) {
|
|
onFinish(reason);
|
|
return iterator.return();
|
|
}
|
|
}, {
|
|
highWaterMark: 2
|
|
});
|
|
};
|
|
|
|
// node_modules/axios/lib/adapters/fetch.js
|
|
var fetchProgressDecorator = (total, fn) => {
|
|
const lengthComputable = total != null;
|
|
return (loaded) => setTimeout(() => fn({
|
|
lengthComputable,
|
|
total,
|
|
loaded
|
|
}));
|
|
};
|
|
var isFetchSupported = typeof fetch === "function" && typeof Request === "function" && typeof Response === "function";
|
|
var isReadableStreamSupported = isFetchSupported && typeof ReadableStream === "function";
|
|
var encodeText = isFetchSupported && (typeof TextEncoder === "function" ? ((encoder) => (str) => encoder.encode(str))(new TextEncoder) : async (str) => new Uint8Array(await new Response(str).arrayBuffer()));
|
|
var supportsRequestStream = isReadableStreamSupported && (() => {
|
|
let duplexAccessed = false;
|
|
const hasContentType = new Request(platform_default.origin, {
|
|
body: new ReadableStream,
|
|
method: "POST",
|
|
get duplex() {
|
|
duplexAccessed = true;
|
|
return "half";
|
|
}
|
|
}).headers.has("Content-Type");
|
|
return duplexAccessed && !hasContentType;
|
|
})();
|
|
var DEFAULT_CHUNK_SIZE = 64 * 1024;
|
|
var supportsResponseStream = isReadableStreamSupported && !!(() => {
|
|
try {
|
|
return utils_default.isReadableStream(new Response("").body);
|
|
} catch (err) {
|
|
}
|
|
})();
|
|
var resolvers = {
|
|
stream: supportsResponseStream && ((res) => res.body)
|
|
};
|
|
isFetchSupported && ((res) => {
|
|
["text", "arrayBuffer", "blob", "formData", "stream"].forEach((type) => {
|
|
!resolvers[type] && (resolvers[type] = utils_default.isFunction(res[type]) ? (res2) => res2[type]() : (_, config) => {
|
|
throw new AxiosError_default(`Response type '${type}' is not supported`, AxiosError_default.ERR_NOT_SUPPORT, config);
|
|
});
|
|
});
|
|
})(new Response);
|
|
var getBodyLength = async (body) => {
|
|
if (body == null) {
|
|
return 0;
|
|
}
|
|
if (utils_default.isBlob(body)) {
|
|
return body.size;
|
|
}
|
|
if (utils_default.isSpecCompliantForm(body)) {
|
|
return (await new Request(body).arrayBuffer()).byteLength;
|
|
}
|
|
if (utils_default.isArrayBufferView(body)) {
|
|
return body.byteLength;
|
|
}
|
|
if (utils_default.isURLSearchParams(body)) {
|
|
body = body + "";
|
|
}
|
|
if (utils_default.isString(body)) {
|
|
return (await encodeText(body)).byteLength;
|
|
}
|
|
};
|
|
var resolveBodyLength = async (headers, body) => {
|
|
const length = utils_default.toFiniteNumber(headers.getContentLength());
|
|
return length == null ? getBodyLength(body) : length;
|
|
};
|
|
var fetch_default = isFetchSupported && (async (config) => {
|
|
let {
|
|
url: url2,
|
|
method,
|
|
data: data2,
|
|
signal,
|
|
cancelToken,
|
|
timeout,
|
|
onDownloadProgress,
|
|
onUploadProgress,
|
|
responseType,
|
|
headers,
|
|
withCredentials = "same-origin",
|
|
fetchOptions
|
|
} = resolveConfig_default(config);
|
|
responseType = responseType ? (responseType + "").toLowerCase() : "text";
|
|
let [composedSignal, stopTimeout] = signal || cancelToken || timeout ? composeSignals_default([signal, cancelToken], timeout) : [];
|
|
let finished, request;
|
|
const onFinish = () => {
|
|
!finished && setTimeout(() => {
|
|
composedSignal && composedSignal.unsubscribe();
|
|
});
|
|
finished = true;
|
|
};
|
|
let requestContentLength;
|
|
try {
|
|
if (onUploadProgress && supportsRequestStream && method !== "get" && method !== "head" && (requestContentLength = await resolveBodyLength(headers, data2)) !== 0) {
|
|
let _request = new Request(url2, {
|
|
method: "POST",
|
|
body: data2,
|
|
duplex: "half"
|
|
});
|
|
let contentTypeHeader;
|
|
if (utils_default.isFormData(data2) && (contentTypeHeader = _request.headers.get("content-type"))) {
|
|
headers.setContentType(contentTypeHeader);
|
|
}
|
|
if (_request.body) {
|
|
data2 = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator(requestContentLength, progressEventReducer_default(onUploadProgress)), null, encodeText);
|
|
}
|
|
}
|
|
if (!utils_default.isString(withCredentials)) {
|
|
withCredentials = withCredentials ? "cors" : "omit";
|
|
}
|
|
request = new Request(url2, {
|
|
...fetchOptions,
|
|
signal: composedSignal,
|
|
method: method.toUpperCase(),
|
|
headers: headers.normalize().toJSON(),
|
|
body: data2,
|
|
duplex: "half",
|
|
withCredentials
|
|
});
|
|
let response = await fetch(request);
|
|
const isStreamResponse = supportsResponseStream && (responseType === "stream" || responseType === "response");
|
|
if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {
|
|
const options = {};
|
|
["status", "statusText", "headers"].forEach((prop) => {
|
|
options[prop] = response[prop];
|
|
});
|
|
const responseContentLength = utils_default.toFiniteNumber(response.headers.get("content-length"));
|
|
response = new Response(trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator(responseContentLength, progressEventReducer_default(onDownloadProgress, true)), isStreamResponse && onFinish, encodeText), options);
|
|
}
|
|
responseType = responseType || "text";
|
|
let responseData = await resolvers[utils_default.findKey(resolvers, responseType) || "text"](response, config);
|
|
!isStreamResponse && onFinish();
|
|
stopTimeout && stopTimeout();
|
|
return await new Promise((resolve, reject) => {
|
|
settle(resolve, reject, {
|
|
data: responseData,
|
|
headers: AxiosHeaders_default.from(response.headers),
|
|
status: response.status,
|
|
statusText: response.statusText,
|
|
config,
|
|
request
|
|
});
|
|
});
|
|
} catch (err) {
|
|
onFinish();
|
|
if (err && err.name === "TypeError" && /fetch/i.test(err.message)) {
|
|
throw Object.assign(new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, config, request), {
|
|
cause: err.cause || err
|
|
});
|
|
}
|
|
throw AxiosError_default.from(err, err && err.code, config, request);
|
|
}
|
|
});
|
|
|
|
// node_modules/axios/lib/adapters/adapters.js
|
|
var knownAdapters = {
|
|
http: http_default,
|
|
xhr: xhr_default,
|
|
fetch: fetch_default
|
|
};
|
|
utils_default.forEach(knownAdapters, (fn, value) => {
|
|
if (fn) {
|
|
try {
|
|
Object.defineProperty(fn, "name", { value });
|
|
} catch (e) {
|
|
}
|
|
Object.defineProperty(fn, "adapterName", { value });
|
|
}
|
|
});
|
|
var renderReason = (reason) => `- ${reason}`;
|
|
var isResolvedHandle = (adapter) => utils_default.isFunction(adapter) || adapter === null || adapter === false;
|
|
var adapters_default = {
|
|
getAdapter: (adapters) => {
|
|
adapters = utils_default.isArray(adapters) ? adapters : [adapters];
|
|
const { length } = adapters;
|
|
let nameOrAdapter;
|
|
let adapter;
|
|
const rejectedReasons = {};
|
|
for (let i = 0;i < length; i++) {
|
|
nameOrAdapter = adapters[i];
|
|
let id;
|
|
adapter = nameOrAdapter;
|
|
if (!isResolvedHandle(nameOrAdapter)) {
|
|
adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];
|
|
if (adapter === undefined) {
|
|
throw new AxiosError_default(`Unknown adapter '${id}'`);
|
|
}
|
|
}
|
|
if (adapter) {
|
|
break;
|
|
}
|
|
rejectedReasons[id || "#" + i] = adapter;
|
|
}
|
|
if (!adapter) {
|
|
const reasons = Object.entries(rejectedReasons).map(([id, state]) => `adapter ${id} ` + (state === false ? "is not supported by the environment" : "is not available in the build"));
|
|
let s = length ? reasons.length > 1 ? "since :\n" + reasons.map(renderReason).join("\n") : " " + renderReason(reasons[0]) : "as no adapter specified";
|
|
throw new AxiosError_default(`There is no suitable adapter to dispatch the request ` + s, "ERR_NOT_SUPPORT");
|
|
}
|
|
return adapter;
|
|
},
|
|
adapters: knownAdapters
|
|
};
|
|
|
|
// node_modules/axios/lib/core/dispatchRequest.js
|
|
var throwIfCancellationRequested = function(config) {
|
|
if (config.cancelToken) {
|
|
config.cancelToken.throwIfRequested();
|
|
}
|
|
if (config.signal && config.signal.aborted) {
|
|
throw new CanceledError_default(null, config);
|
|
}
|
|
};
|
|
function dispatchRequest(config) {
|
|
throwIfCancellationRequested(config);
|
|
config.headers = AxiosHeaders_default.from(config.headers);
|
|
config.data = transformData.call(config, config.transformRequest);
|
|
if (["post", "put", "patch"].indexOf(config.method) !== -1) {
|
|
config.headers.setContentType("application/x-www-form-urlencoded", false);
|
|
}
|
|
const adapter = adapters_default.getAdapter(config.adapter || defaults_default.adapter);
|
|
return adapter(config).then(function onAdapterResolution(response) {
|
|
throwIfCancellationRequested(config);
|
|
response.data = transformData.call(config, config.transformResponse, response);
|
|
response.headers = AxiosHeaders_default.from(response.headers);
|
|
return response;
|
|
}, function onAdapterRejection(reason) {
|
|
if (!isCancel(reason)) {
|
|
throwIfCancellationRequested(config);
|
|
if (reason && reason.response) {
|
|
reason.response.data = transformData.call(config, config.transformResponse, reason.response);
|
|
reason.response.headers = AxiosHeaders_default.from(reason.response.headers);
|
|
}
|
|
}
|
|
return Promise.reject(reason);
|
|
});
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/validator.js
|
|
var assertOptions = function(options, schema, allowUnknown) {
|
|
if (typeof options !== "object") {
|
|
throw new AxiosError_default("options must be an object", AxiosError_default.ERR_BAD_OPTION_VALUE);
|
|
}
|
|
const keys = Object.keys(options);
|
|
let i = keys.length;
|
|
while (i-- > 0) {
|
|
const opt = keys[i];
|
|
const validator = schema[opt];
|
|
if (validator) {
|
|
const value = options[opt];
|
|
const result = value === undefined || validator(value, opt, options);
|
|
if (result !== true) {
|
|
throw new AxiosError_default("option " + opt + " must be " + result, AxiosError_default.ERR_BAD_OPTION_VALUE);
|
|
}
|
|
continue;
|
|
}
|
|
if (allowUnknown !== true) {
|
|
throw new AxiosError_default("Unknown option " + opt, AxiosError_default.ERR_BAD_OPTION);
|
|
}
|
|
}
|
|
};
|
|
var validators = {};
|
|
["object", "boolean", "number", "function", "string", "symbol"].forEach((type, i) => {
|
|
validators[type] = function validator(thing) {
|
|
return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type;
|
|
};
|
|
});
|
|
var deprecatedWarnings = {};
|
|
validators.transitional = function transitional4(validator, version, message) {
|
|
function formatMessage(opt, desc) {
|
|
return "[Axios v" + VERSION + "] Transitional option \'" + opt + "\'" + desc + (message ? ". " + message : "");
|
|
}
|
|
return (value, opt, opts) => {
|
|
if (validator === false) {
|
|
throw new AxiosError_default(formatMessage(opt, " has been removed" + (version ? " in " + version : "")), AxiosError_default.ERR_DEPRECATED);
|
|
}
|
|
if (version && !deprecatedWarnings[opt]) {
|
|
deprecatedWarnings[opt] = true;
|
|
console.warn(formatMessage(opt, " has been deprecated since v" + version + " and will be removed in the near future"));
|
|
}
|
|
return validator ? validator(value, opt, opts) : true;
|
|
};
|
|
};
|
|
var validator_default = {
|
|
assertOptions,
|
|
validators
|
|
};
|
|
|
|
// node_modules/axios/lib/core/Axios.js
|
|
var validators2 = validator_default.validators;
|
|
|
|
class Axios {
|
|
constructor(instanceConfig) {
|
|
this.defaults = instanceConfig;
|
|
this.interceptors = {
|
|
request: new InterceptorManager_default,
|
|
response: new InterceptorManager_default
|
|
};
|
|
}
|
|
async request(configOrUrl, config) {
|
|
try {
|
|
return await this._request(configOrUrl, config);
|
|
} catch (err) {
|
|
if (err instanceof Error) {
|
|
let dummy;
|
|
Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : dummy = new Error;
|
|
const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, "") : "";
|
|
try {
|
|
if (!err.stack) {
|
|
err.stack = stack;
|
|
} else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ""))) {
|
|
err.stack += "\n" + stack;
|
|
}
|
|
} catch (e) {
|
|
}
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
_request(configOrUrl, config) {
|
|
if (typeof configOrUrl === "string") {
|
|
config = config || {};
|
|
config.url = configOrUrl;
|
|
} else {
|
|
config = configOrUrl || {};
|
|
}
|
|
config = mergeConfig(this.defaults, config);
|
|
const { transitional: transitional5, paramsSerializer, headers } = config;
|
|
if (transitional5 !== undefined) {
|
|
validator_default.assertOptions(transitional5, {
|
|
silentJSONParsing: validators2.transitional(validators2.boolean),
|
|
forcedJSONParsing: validators2.transitional(validators2.boolean),
|
|
clarifyTimeoutError: validators2.transitional(validators2.boolean)
|
|
}, false);
|
|
}
|
|
if (paramsSerializer != null) {
|
|
if (utils_default.isFunction(paramsSerializer)) {
|
|
config.paramsSerializer = {
|
|
serialize: paramsSerializer
|
|
};
|
|
} else {
|
|
validator_default.assertOptions(paramsSerializer, {
|
|
encode: validators2.function,
|
|
serialize: validators2.function
|
|
}, true);
|
|
}
|
|
}
|
|
config.method = (config.method || this.defaults.method || "get").toLowerCase();
|
|
let contextHeaders = headers && utils_default.merge(headers.common, headers[config.method]);
|
|
headers && utils_default.forEach(["delete", "get", "head", "post", "put", "patch", "common"], (method) => {
|
|
delete headers[method];
|
|
});
|
|
config.headers = AxiosHeaders_default.concat(contextHeaders, headers);
|
|
const requestInterceptorChain = [];
|
|
let synchronousRequestInterceptors = true;
|
|
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
|
|
if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config) === false) {
|
|
return;
|
|
}
|
|
synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
|
|
requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
|
|
});
|
|
const responseInterceptorChain = [];
|
|
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
|
|
responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
|
|
});
|
|
let promise;
|
|
let i = 0;
|
|
let len;
|
|
if (!synchronousRequestInterceptors) {
|
|
const chain = [dispatchRequest.bind(this), undefined];
|
|
chain.unshift.apply(chain, requestInterceptorChain);
|
|
chain.push.apply(chain, responseInterceptorChain);
|
|
len = chain.length;
|
|
promise = Promise.resolve(config);
|
|
while (i < len) {
|
|
promise = promise.then(chain[i++], chain[i++]);
|
|
}
|
|
return promise;
|
|
}
|
|
len = requestInterceptorChain.length;
|
|
let newConfig = config;
|
|
i = 0;
|
|
while (i < len) {
|
|
const onFulfilled = requestInterceptorChain[i++];
|
|
const onRejected = requestInterceptorChain[i++];
|
|
try {
|
|
newConfig = onFulfilled(newConfig);
|
|
} catch (error) {
|
|
onRejected.call(this, error);
|
|
break;
|
|
}
|
|
}
|
|
try {
|
|
promise = dispatchRequest.call(this, newConfig);
|
|
} catch (error) {
|
|
return Promise.reject(error);
|
|
}
|
|
i = 0;
|
|
len = responseInterceptorChain.length;
|
|
while (i < len) {
|
|
promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);
|
|
}
|
|
return promise;
|
|
}
|
|
getUri(config) {
|
|
config = mergeConfig(this.defaults, config);
|
|
const fullPath = buildFullPath(config.baseURL, config.url);
|
|
return buildURL(fullPath, config.params, config.paramsSerializer);
|
|
}
|
|
}
|
|
utils_default.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) {
|
|
Axios.prototype[method] = function(url2, config) {
|
|
return this.request(mergeConfig(config || {}, {
|
|
method,
|
|
url: url2,
|
|
data: (config || {}).data
|
|
}));
|
|
};
|
|
});
|
|
utils_default.forEach(["post", "put", "patch"], function forEachMethodWithData(method) {
|
|
function generateHTTPMethod(isForm) {
|
|
return function httpMethod(url2, data3, config) {
|
|
return this.request(mergeConfig(config || {}, {
|
|
method,
|
|
headers: isForm ? {
|
|
"Content-Type": "multipart/form-data"
|
|
} : {},
|
|
url: url2,
|
|
data: data3
|
|
}));
|
|
};
|
|
}
|
|
Axios.prototype[method] = generateHTTPMethod();
|
|
Axios.prototype[method + "Form"] = generateHTTPMethod(true);
|
|
});
|
|
var Axios_default = Axios;
|
|
|
|
// node_modules/axios/lib/cancel/CancelToken.js
|
|
class CancelToken {
|
|
constructor(executor) {
|
|
if (typeof executor !== "function") {
|
|
throw new TypeError("executor must be a function.");
|
|
}
|
|
let resolvePromise;
|
|
this.promise = new Promise(function promiseExecutor(resolve) {
|
|
resolvePromise = resolve;
|
|
});
|
|
const token = this;
|
|
this.promise.then((cancel) => {
|
|
if (!token._listeners)
|
|
return;
|
|
let i = token._listeners.length;
|
|
while (i-- > 0) {
|
|
token._listeners[i](cancel);
|
|
}
|
|
token._listeners = null;
|
|
});
|
|
this.promise.then = (onfulfilled) => {
|
|
let _resolve;
|
|
const promise = new Promise((resolve) => {
|
|
token.subscribe(resolve);
|
|
_resolve = resolve;
|
|
}).then(onfulfilled);
|
|
promise.cancel = function reject() {
|
|
token.unsubscribe(_resolve);
|
|
};
|
|
return promise;
|
|
};
|
|
executor(function cancel(message, config, request) {
|
|
if (token.reason) {
|
|
return;
|
|
}
|
|
token.reason = new CanceledError_default(message, config, request);
|
|
resolvePromise(token.reason);
|
|
});
|
|
}
|
|
throwIfRequested() {
|
|
if (this.reason) {
|
|
throw this.reason;
|
|
}
|
|
}
|
|
subscribe(listener) {
|
|
if (this.reason) {
|
|
listener(this.reason);
|
|
return;
|
|
}
|
|
if (this._listeners) {
|
|
this._listeners.push(listener);
|
|
} else {
|
|
this._listeners = [listener];
|
|
}
|
|
}
|
|
unsubscribe(listener) {
|
|
if (!this._listeners) {
|
|
return;
|
|
}
|
|
const index = this._listeners.indexOf(listener);
|
|
if (index !== -1) {
|
|
this._listeners.splice(index, 1);
|
|
}
|
|
}
|
|
static source() {
|
|
let cancel;
|
|
const token = new CancelToken(function executor(c) {
|
|
cancel = c;
|
|
});
|
|
return {
|
|
token,
|
|
cancel
|
|
};
|
|
}
|
|
}
|
|
var CancelToken_default = CancelToken;
|
|
|
|
// node_modules/axios/lib/helpers/spread.js
|
|
function spread(callback) {
|
|
return function wrap(arr) {
|
|
return callback.apply(null, arr);
|
|
};
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/isAxiosError.js
|
|
function isAxiosError(payload) {
|
|
return utils_default.isObject(payload) && payload.isAxiosError === true;
|
|
}
|
|
|
|
// node_modules/axios/lib/helpers/HttpStatusCode.js
|
|
var HttpStatusCode = {
|
|
Continue: 100,
|
|
SwitchingProtocols: 101,
|
|
Processing: 102,
|
|
EarlyHints: 103,
|
|
Ok: 200,
|
|
Created: 201,
|
|
Accepted: 202,
|
|
NonAuthoritativeInformation: 203,
|
|
NoContent: 204,
|
|
ResetContent: 205,
|
|
PartialContent: 206,
|
|
MultiStatus: 207,
|
|
AlreadyReported: 208,
|
|
ImUsed: 226,
|
|
MultipleChoices: 300,
|
|
MovedPermanently: 301,
|
|
Found: 302,
|
|
SeeOther: 303,
|
|
NotModified: 304,
|
|
UseProxy: 305,
|
|
Unused: 306,
|
|
TemporaryRedirect: 307,
|
|
PermanentRedirect: 308,
|
|
BadRequest: 400,
|
|
Unauthorized: 401,
|
|
PaymentRequired: 402,
|
|
Forbidden: 403,
|
|
NotFound: 404,
|
|
MethodNotAllowed: 405,
|
|
NotAcceptable: 406,
|
|
ProxyAuthenticationRequired: 407,
|
|
RequestTimeout: 408,
|
|
Conflict: 409,
|
|
Gone: 410,
|
|
LengthRequired: 411,
|
|
PreconditionFailed: 412,
|
|
PayloadTooLarge: 413,
|
|
UriTooLong: 414,
|
|
UnsupportedMediaType: 415,
|
|
RangeNotSatisfiable: 416,
|
|
ExpectationFailed: 417,
|
|
ImATeapot: 418,
|
|
MisdirectedRequest: 421,
|
|
UnprocessableEntity: 422,
|
|
Locked: 423,
|
|
FailedDependency: 424,
|
|
TooEarly: 425,
|
|
UpgradeRequired: 426,
|
|
PreconditionRequired: 428,
|
|
TooManyRequests: 429,
|
|
RequestHeaderFieldsTooLarge: 431,
|
|
UnavailableForLegalReasons: 451,
|
|
InternalServerError: 500,
|
|
NotImplemented: 501,
|
|
BadGateway: 502,
|
|
ServiceUnavailable: 503,
|
|
GatewayTimeout: 504,
|
|
HttpVersionNotSupported: 505,
|
|
VariantAlsoNegotiates: 506,
|
|
InsufficientStorage: 507,
|
|
LoopDetected: 508,
|
|
NotExtended: 510,
|
|
NetworkAuthenticationRequired: 511
|
|
};
|
|
Object.entries(HttpStatusCode).forEach(([key, value]) => {
|
|
HttpStatusCode[value] = key;
|
|
});
|
|
var HttpStatusCode_default = HttpStatusCode;
|
|
|
|
// node_modules/axios/lib/axios.js
|
|
var createInstance = function(defaultConfig) {
|
|
const context = new Axios_default(defaultConfig);
|
|
const instance = bind(Axios_default.prototype.request, context);
|
|
utils_default.extend(instance, Axios_default.prototype, context, { allOwnKeys: true });
|
|
utils_default.extend(instance, context, null, { allOwnKeys: true });
|
|
instance.create = function create(instanceConfig) {
|
|
return createInstance(mergeConfig(defaultConfig, instanceConfig));
|
|
};
|
|
return instance;
|
|
};
|
|
var axios = createInstance(defaults_default);
|
|
axios.Axios = Axios_default;
|
|
axios.CanceledError = CanceledError_default;
|
|
axios.CancelToken = CancelToken_default;
|
|
axios.isCancel = isCancel;
|
|
axios.VERSION = VERSION;
|
|
axios.toFormData = toFormData_default;
|
|
axios.AxiosError = AxiosError_default;
|
|
axios.Cancel = axios.CanceledError;
|
|
axios.all = function all(promises) {
|
|
return Promise.all(promises);
|
|
};
|
|
axios.spread = spread;
|
|
axios.isAxiosError = isAxiosError;
|
|
axios.mergeConfig = mergeConfig;
|
|
axios.AxiosHeaders = AxiosHeaders_default;
|
|
axios.formToJSON = (thing) => formDataToJSON_default(utils_default.isHTMLForm(thing) ? new FormData(thing) : thing);
|
|
axios.getAdapter = adapters_default.getAdapter;
|
|
axios.HttpStatusCode = HttpStatusCode_default;
|
|
axios.default = axios;
|
|
var axios_default = axios;
|
|
|
|
// src/index.ts
|
|
var import_sanitize_html = __toESM(require_sanitize_html(), 1);
|
|
import {readFile} from "node:fs/promises";
|
|
var freeloMention = function(username) {
|
|
return Object.keys(userPairing).includes(username) ? `<div><span data-freelo-mention="1" data-freelo-user-id="${userPairing[username]}">@${username}</span></div>` : `<a href="https://github.com/${username}">${username}</a>`;
|
|
};
|
|
var email = core.getInput("email");
|
|
var apiKey = core.getInput("api-key");
|
|
var projectId = core.getInput("project-id");
|
|
var taskId = core.getInput("task-id");
|
|
var tasklistId = core.getInput("tasklist-id");
|
|
var token = core.getInput("github-token");
|
|
if (!token) {
|
|
core.setFailed("No GitHub token passed");
|
|
throw new Error("No GitHub token passed");
|
|
}
|
|
var octokit = github.getOctokit(token);
|
|
var action = github.context.payload.action;
|
|
var issue = github.context.payload.issue;
|
|
var comment = github.context.payload.comment;
|
|
var apiEndpoint = "https://api.freelo.io/v1";
|
|
var defaultOptions = {
|
|
auth: {
|
|
username: email,
|
|
password: apiKey
|
|
},
|
|
headers: {
|
|
"User-Agent": "Freelo GitHub Action/1.0.0",
|
|
"Content-Type": "application/json"
|
|
}
|
|
};
|
|
var sanitizeOptions = {
|
|
allowedTags: ["a", "p", "i", "b", "strong"],
|
|
allowedAttributes: false
|
|
};
|
|
var userPairing = {};
|
|
try {
|
|
for (const u of (await readFile("./.github/freelo.txt", { encoding: "utf-8" })).split("\n")) {
|
|
const p = u.split(":");
|
|
userPairing[p[0]] = p[1];
|
|
}
|
|
} catch (e) {
|
|
console.log("No valid freelo.txt found in .github folder, skipping");
|
|
}
|
|
try {
|
|
if (!action) {
|
|
throw new Error("No action was passed");
|
|
}
|
|
if (!email || !apiKey || !projectId) {
|
|
throw new Error("You are missing a required parameter. Check the documentation for details.");
|
|
}
|
|
if (issue) {
|
|
if (issue.pull_request) {
|
|
throw new Error("Pull requests are not yet supported");
|
|
}
|
|
if (!tasklistId && !taskId) {
|
|
throw new Error("Either task-id or tasklist-id needs to be set!");
|
|
}
|
|
if (tasklistId) {
|
|
switch (action) {
|
|
case "opened": {
|
|
const taskComment = `
|
|
Created by: ${freeloMention(issue.user.login)}<br>
|
|
Description: ${import_sanitize_html.default(issue.body ?? "None", sanitizeOptions)}<br>
|
|
GitHub issue: <a href="${issue.url}">#${issue.number}</a><br>
|
|
Assigned to: ${issue.assignee ? `${freeloMention(issue.assignee.login)}` : "Nobody"}<br>
|
|
<i>(This action was performed automatically)</i>
|
|
`;
|
|
const taskContent = {
|
|
name: issue.title,
|
|
comment: {
|
|
content: taskComment
|
|
}
|
|
};
|
|
const res = await axios_default.post(`${apiEndpoint}/project/${projectId}/tasklist/${tasklistId}/tasks`, taskContent, defaultOptions);
|
|
if (res.status > 399) {
|
|
console.error(res.data);
|
|
throw new Error("Got an error response from Freelo API");
|
|
}
|
|
octokit.rest.issues.createComment({
|
|
issue_number: issue.number,
|
|
...github.context.repo,
|
|
body: `Freelo task assigned: <a href="https://app.freelo.io/task/${res.data.id}">${res.data.id}</a><br>Please do not edit or delete this comment as it is used to prevent duplication of tasks.`
|
|
});
|
|
break;
|
|
}
|
|
case "edited":
|
|
break;
|
|
case "closed": {
|
|
const comment2 = (await octokit.rest.issues.listComments({
|
|
...github.context.repo,
|
|
issue_number: issue.number,
|
|
mediaType: {
|
|
format: "html"
|
|
}
|
|
})).data.filter((i) => i.user?.type === "Bot");
|
|
console.log(comment2[0].user?.name);
|
|
if (comment2.length === 0)
|
|
break;
|
|
console.log(comment2.length);
|
|
console.log(comment2[0].body_html);
|
|
const taskId2 = /https:\/\/app.freelo.io\/task\/(\d+)/.exec(comment2[0].body_html ?? "");
|
|
if (!taskId2 || taskId2.length === 0) {
|
|
console.log("Comment found, but no Freelo task ID identified");
|
|
break;
|
|
}
|
|
console.log(`${apiEndpoint}/task/${taskId2[1]}/finish`);
|
|
const res = await axios_default.post(`${apiEndpoint}/task/${taskId2[1]}/finish`, null, defaultOptions);
|
|
if (res.status > 399) {
|
|
console.error(res.data);
|
|
throw new Error("Got an error response from Freelo API");
|
|
}
|
|
break;
|
|
}
|
|
case "reopened":
|
|
break;
|
|
case "assigned":
|
|
break;
|
|
case "unassigned":
|
|
break;
|
|
default:
|
|
throw new Error("Unknown action passed");
|
|
}
|
|
}
|
|
} else if (comment) {
|
|
} else {
|
|
throw new Error("You are running this action through an unsupported trigger");
|
|
}
|
|
} catch (error) {
|
|
core.setFailed(error?.message ?? "Unknown error");
|
|
}
|