From 4719e1ea8f2aaa3e07ff9a8c565443cb3a79ec63 Mon Sep 17 00:00:00 2001 From: chrisftian Date: Wed, 17 Aug 2022 14:40:52 +0800 Subject: [PATCH] feat/1.4.0 (#156) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * upd * upd 暂存 * upd 暂存 * upd * upd:webpack升级 * rebuild * upd delay * rebuild * upd:升级webpack * upd * v0.0.3 留下userId入口 * add beacon * upd * upd * upd * upd * 默认打开上报 * upd * upd * 还原demo * 默认关闭上报;修改版本号; Co-authored-by: chrisftian --- .DS_Store | Bin 0 -> 8196 bytes .babelrc | 3 + dist/cos-js-sdk-v5.js | 22899 +++++++++++++++++++++--------------- dist/cos-js-sdk-v5.min.js | 2 +- index.d.ts | 8 + lib/beacon.min.js | 1 + package.json | 16 +- server/sts.js | 22 +- src/advance.js | 87 +- src/base.js | 71 +- src/cos.js | 7 +- src/tracker.js | 344 + src/util.js | 33 +- webpack.config.js | 40 +- 14 files changed, 13893 insertions(+), 9640 deletions(-) create mode 100644 .DS_Store create mode 100644 .babelrc create mode 100644 lib/beacon.min.js create mode 100644 src/tracker.js diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..45587451735fbd5bf67cc6ad6c0f393322157aa6 GIT binary patch literal 8196 zcmeHM%Wl&^6ulFh)(J(V5>m?o;SIYGB>|eUKuXg_P>Giaf(4*9u0v`_?I@212tnB+ z_Bpvs3pg|5M)o9GRf0;LE6rSc=A5y8X6D*AAtF}pxp|^xBC=4pPoG3J z#dtq26P5^DIGKS@o6TUyX$B6?(-UajpcT*xXa%$aS^=%VQBVNyY;M+!_rC1awN^kY za4Z$z@xeynz7+bA^dfYi5-9+@iDqFq7N7p`HgAA0g?=PGT3}34;U$%YDFzEO2PWz0 zFNOG#^pZ|YTp8npS7u>`!otLZ*#b_iB)zV+0$PDd1$gdmQkELzQCG>|*U*>!BTNwI z4{)?gJ#rNE7X_Ufqdko7Q$TI1$2siW1jhlcPjz6k^o%+<^A*lpg|k5Gbc5FDHeII* z-K0D4S=u94;r&v02JK+{RveXRC@7O$+|3>Z3hu`goQLrg4UP3#IH%ufg};@2b6QQW z)6M06vV>utn47n(l$AP_dQ#mD`qgf&+v}8T?MM9VZmqlPgva-TpgBISIS;&ge=B`v zJ@C6V&#$)y*>mfFJbvi;ZqP3WJ>Tt!ajLSzvXWMEE4?%rtQIo%O0F=>*n_KuT*kh9 zX=OM}T1yx5*EYBJUcMT<9=>^xXMwRW1k-7GKCVCDi0dVE*sr$zX5e!@IX;C}UugLP zv*V(4sT0@K_zGNfy;(61Rzn%Y&HNjBUrTK0;Dx&}Q|E>So!63g{%-Dt8DxZM- zl_F-NSj8{Btk4wi)z?c&rvskzX(Y6~tvt@`^E$2v2*BrxxUhcz3mJ5E HJQes0^bgVd literal 0 HcmV?d00001 diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..8aa924d --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env"] +} \ No newline at end of file diff --git a/dist/cos-js-sdk-v5.js b/dist/cos-js-sdk-v5.js index 908d601..899f17a 100644 --- a/dist/cos-js-sdk-v5.js +++ b/dist/cos-js-sdk-v5.js @@ -7,7 +7,7 @@ exports["COS"] = factory(); else root["COS"] = factory(); -})(typeof self !== 'undefined' ? self : this, function() { +})(window, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; @@ -46,14 +46,34 @@ return /******/ (function(modules) { // webpackBootstrap /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -69,4361 +89,5851 @@ return /******/ (function(modules) { // webpackBootstrap /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/dist/"; /******/ +/******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 6); +/******/ return __webpack_require__(__webpack_require__.s = "./index.js"); /******/ }) /************************************************************************/ -/******/ ([ -/* 0 */ +/******/ ({ + +/***/ "./index.js": +/*!******************!*\ + !*** ./index.js ***! + \******************/ +/*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) { +var COS = __webpack_require__(/*! ./src/cos */ "./src/cos.js"); -var md5 = __webpack_require__(8); -var CryptoJS = __webpack_require__(11); -var xml2json = __webpack_require__(12); -var json2xml = __webpack_require__(17); +module.exports = COS; -function camSafeUrlEncode(str) { - return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A'); -} +/***/ }), -function getObjectKeys(obj, forKey) { - var list = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key); +/***/ "./lib/beacon.min.js": +/*!***************************!*\ + !*** ./lib/beacon.min.js ***! + \***************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +!function (t, e) { + "object" == ( false ? undefined : _typeof(exports)) && "undefined" != typeof module ? module.exports = e() : true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (e), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : + __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined; +}(this, function () { + "use strict"; + + var _t = function t(e, r) { + return (_t = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (t, e) { + t.__proto__ = e; + } || function (t, e) { + for (var r in e) { + Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]); + } + })(e, r); + }; + + var _e = function e() { + return (_e = Object.assign || function (t) { + for (var e, r = 1, n = arguments.length; r < n; r++) { + for (var o in e = arguments[r]) { + Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]); + } + } + + return t; + }).apply(this, arguments); + }; + + function r(t, e, r, n) { + return new (r || (r = Promise))(function (o, i) { + function a(t) { + try { + c(n.next(t)); + } catch (t) { + i(t); } - } - return list.sort(function (a, b) { - a = a.toLowerCase(); - b = b.toLowerCase(); - return a === b ? 0 : a > b ? 1 : -1; - }); -}; + } -/** - * obj转为string - * @param {Object} obj 需要转的对象,必须 - * @param {Boolean} lowerCaseKey key是否转为小写,默认false,非必须 - * @return {String} data 返回字符串 - */ -var obj2str = function (obj, lowerCaseKey) { - var i, key, val; - var list = []; - var keyList = getObjectKeys(obj); - for (i = 0; i < keyList.length; i++) { - key = keyList[i]; - val = obj[key] === undefined || obj[key] === null ? '' : '' + obj[key]; - key = lowerCaseKey ? camSafeUrlEncode(key).toLowerCase() : camSafeUrlEncode(key); - val = camSafeUrlEncode(val) || ''; - list.push(key + '=' + val); - } - return list.join('&'); -}; + function s(t) { + try { + c(n["throw"](t)); + } catch (t) { + i(t); + } + } -// 可以签入签名的headers -var signHeaders = ['content-disposition', 'content-encoding', 'content-length', 'content-md5', 'expect', 'host', 'if-match', 'if-modified-since', 'if-none-match', 'if-unmodified-since', 'origin', 'range', 'response-cache-control', 'response-content-disposition', 'response-content-encoding', 'response-content-language', 'response-content-type', 'response-expires', 'transfer-encoding', 'versionid']; + function c(t) { + var e; + t.done ? o(t.value) : (e = t.value, e instanceof r ? e : new r(function (t) { + t(e); + })).then(a, s); + } -var getSignHeaderObj = function (headers) { - var signHeaderObj = {}; - for (var i in headers) { - var key = i.toLowerCase(); - if (key.indexOf('x-cos-') > -1 || signHeaders.indexOf(key) > -1) { - signHeaderObj[i] = headers[i]; - } + c((n = n.apply(t, e || [])).next()); + }); + } + + function n(t, e) { + var r, + n, + o, + i, + a = { + label: 0, + sent: function sent() { + if (1 & o[0]) throw o[1]; + return o[1]; + }, + trys: [], + ops: [] + }; + return i = { + next: s(0), + "throw": s(1), + "return": s(2) + }, "function" == typeof Symbol && (i[Symbol.iterator] = function () { + return this; + }), i; + + function s(i) { + return function (s) { + return function (i) { + if (r) throw new TypeError("Generator is already executing."); + + for (; a;) { + try { + if (r = 1, n && (o = 2 & i[0] ? n["return"] : i[0] ? n["throw"] || ((o = n["return"]) && o.call(n), 0) : n.next) && !(o = o.call(n, i[1])).done) return o; + + switch (n = 0, o && (i = [2 & i[0], o.value]), i[0]) { + case 0: + case 1: + o = i; + break; + + case 4: + return a.label++, { + value: i[1], + done: !1 + }; + + case 5: + a.label++, n = i[1], i = [0]; + continue; + + case 7: + i = a.ops.pop(), a.trys.pop(); + continue; + + default: + if (!(o = a.trys, (o = o.length > 0 && o[o.length - 1]) || 6 !== i[0] && 2 !== i[0])) { + a = 0; + continue; + } + + if (3 === i[0] && (!o || i[1] > o[0] && i[1] < o[3])) { + a.label = i[1]; + break; + } + + if (6 === i[0] && a.label < o[1]) { + a.label = o[1], o = i; + break; + } + + if (o && a.label < o[2]) { + a.label = o[2], a.ops.push(i); + break; + } + + o[2] && a.ops.pop(), a.trys.pop(); + continue; + } + + i = e.call(t, a); + } catch (t) { + i = [6, t], n = 0; + } finally { + r = o = 0; + } + } + + if (5 & i[0]) throw i[1]; + return { + value: i[0] ? i[1] : void 0, + done: !0 + }; + }([i, s]); + }; } - return signHeaderObj; -}; + } + + var o = "__BEACON_", + i = "__BEACON_deviceId", + a = "last_report_time", + s = "sending_event_ids", + c = "beacon_config", + u = "beacon_config_request_time", + l = function () { + function t() { + var t = this; + this.emit = function (e, r) { + if (t) { + var n, + o = t.__EventsList[e]; + + if (null == o ? void 0 : o.length) { + o = o.slice(); + + for (var i = 0; i < o.length; i++) { + n = o[i]; + + try { + var a = n.callback.apply(t, [r]); + if (1 === n.type && t.remove(e, n.callback), !1 === a) break; + } catch (t) { + throw t; + } + } + } -//测试用的key后面可以去掉 -var getAuth = function (opt) { - opt = opt || {}; - - var SecretId = opt.SecretId; - var SecretKey = opt.SecretKey; - var KeyTime = opt.KeyTime; - var method = (opt.method || opt.Method || 'get').toLowerCase(); - var queryParams = clone(opt.Query || opt.params || {}); - var headers = getSignHeaderObj(clone(opt.Headers || opt.headers || {})); - - var Key = opt.Key || ''; - var pathname; - if (opt.UseRawKey) { - pathname = opt.Pathname || opt.pathname || '/' + Key; - } else { - pathname = opt.Pathname || opt.pathname || Key; - pathname.indexOf('/') !== 0 && (pathname = '/' + pathname); + return t; + } + }, this.__EventsList = {}; } - // ForceSignHost明确传入false才不加入host签名 - var forceSignHost = opt.ForceSignHost === false ? false : true; - - // 如果有传入存储桶且需要强制签名,那么签名默认加 Host 参与计算,避免跨桶访问 - if (!headers.Host && !headers.host && opt.Bucket && opt.Region && forceSignHost) headers.Host = opt.Bucket + '.cos.' + opt.Region + '.myqcloud.com'; + return t.prototype.indexOf = function (t, e) { + for (var r = 0; r < t.length; r++) { + if (t[r].callback === e) return r; + } - if (!SecretId) throw new Error('missing param SecretId'); - if (!SecretKey) throw new Error('missing param SecretKey'); + return -1; + }, t.prototype.on = function (t, e, r) { + if (void 0 === r && (r = 0), this) { + var n = this.__EventsList[t]; - // 签名有效起止时间 - var now = Math.round(getSkewTime(opt.SystemClockOffset) / 1000) - 1; - var exp = now; - - var Expires = opt.Expires || opt.expires; - if (Expires === undefined) { - exp += 900; // 签名过期时间为当前 + 900s - } else { - exp += Expires * 1 || 0; - } + if (n || (n = this.__EventsList[t] = []), -1 === this.indexOf(n, e)) { + var o = { + name: t, + type: r || 0, + callback: e + }; + return n.push(o), this; + } - // 要用到的 Authorization 参数列表 - var qSignAlgorithm = 'sha1'; - var qAk = SecretId; - var qSignTime = KeyTime || now + ';' + exp; - var qKeyTime = KeyTime || now + ';' + exp; - var qHeaderList = getObjectKeys(headers, true).join(';').toLowerCase(); - var qUrlParamList = getObjectKeys(queryParams, true).join(';').toLowerCase(); + return this; + } + }, t.prototype.one = function (t, e) { + this.on(t, e, 1); + }, t.prototype.remove = function (t, e) { + if (this) { + var r = this.__EventsList[t]; + if (!r) return null; - // 签名算法说明文档:https://www.qcloud.com/document/product/436/7778 - // 步骤一:计算 SignKey - var signKey = CryptoJS.HmacSHA1(qKeyTime, SecretKey).toString(); + if (!e) { + try { + delete this.__EventsList[t]; + } catch (t) {} - // 步骤二:构成 FormatString - var formatString = [method, pathname, util.obj2str(queryParams, true), util.obj2str(headers, true), ''].join('\n'); + return null; + } - // 步骤三:计算 StringToSign - var stringToSign = ['sha1', qSignTime, CryptoJS.SHA1(formatString).toString(), ''].join('\n'); + if (r.length) { + var n = this.indexOf(r, e); + r.splice(n, 1); + } - // 步骤四:计算 Signature - var qSignature = CryptoJS.HmacSHA1(stringToSign, signKey).toString(); + return this; + } + }, t; + }(); + + function h(t, e) { + for (var r = {}, n = 0, o = Object.keys(t); n < o.length; n++) { + var i = o[n], + a = t[i]; + if ("string" == typeof a) r[f(i)] = f(a);else { + if (e) throw new Error("value mast be string !!!!"); + r[f(String(i))] = f(String(a)); + } + } - // 步骤五:构造 Authorization - var authorization = ['q-sign-algorithm=' + qSignAlgorithm, 'q-ak=' + qAk, 'q-sign-time=' + qSignTime, 'q-key-time=' + qKeyTime, 'q-header-list=' + qHeaderList, 'q-url-param-list=' + qUrlParamList, 'q-signature=' + qSignature].join('&'); + return r; + } - return authorization; -}; + function f(t) { + if ("string" != typeof t) return t; -var readIntBE = function (chunk, size, offset) { - var bytes = size / 8; - var buf = chunk.slice(offset, offset + bytes); - new Uint8Array(buf).reverse(); - return new { 8: Uint8Array, 16: Uint16Array, 32: Uint32Array }[size](buf)[0]; -}; -var buf2str = function (chunk, start, end, isUtf8) { - var buf = chunk.slice(start, end); - var str = ''; - new Uint8Array(buf).forEach(function (charCode) { - str += String.fromCharCode(charCode); - }); - if (isUtf8) str = decodeURIComponent(escape(str)); - return str; -}; -var parseSelectPayload = function (chunk) { - var header = {}; - var body = buf2str(chunk); - var result = { records: [] }; - while (chunk.byteLength) { - var totalLength = readIntBE(chunk, 32, 0); - var headerLength = readIntBE(chunk, 32, 4); - var payloadRestLength = totalLength - headerLength - 16; - var offset = 0; - var content; - chunk = chunk.slice(12); - // 获取 Message 的 header 信息 - while (offset < headerLength) { - var headerNameLength = readIntBE(chunk, 8, offset); - var headerName = buf2str(chunk, offset + 1, offset + 1 + headerNameLength); - var headerValueLength = readIntBE(chunk, 16, offset + headerNameLength + 2); - var headerValue = buf2str(chunk, offset + headerNameLength + 4, offset + headerNameLength + 4 + headerValueLength); - header[headerName] = headerValue; - offset += headerNameLength + 4 + headerValueLength; - } - if (header[':event-type'] === 'Records') { - content = buf2str(chunk, offset, offset + payloadRestLength, true); - result.records.push(content); - } else if (header[':event-type'] === 'Stats') { - content = buf2str(chunk, offset, offset + payloadRestLength, true); - result.stats = util.xml2json(content).Stats; - } else if (header[':event-type'] === 'error') { - var errCode = header[':error-code']; - var errMessage = header[':error-message']; - var err = new Error(errMessage); - err.message = errMessage; - err.name = err.code = errCode; - result.error = err; - } else if (['Progress', 'Continuation', 'End'].includes(header[':event-type'])) { - // do nothing - } - chunk = chunk.slice(offset + payloadRestLength + 4); + try { + return t.replace(new RegExp("\\|", "g"), "%7C").replace(new RegExp("\\&", "g"), "%26").replace(new RegExp("\\=", "g"), "%3D").replace(new RegExp("\\+", "g"), "%2B"); + } catch (t) { + return ""; + } + } + + function p(t) { + return String(t.A99) + String(t.A100); + } + + var d = function d() {}; + + var v = function () { + function t(t) { + var r = this; + this.lifeCycle = new l(), this.uploadJobQueue = [], this.additionalParams = {}, this.delayTime = 0, this._normalLogPipeline = function (t) { + if (!t || !t.reduce || !t.length) throw new TypeError("createPipeline 方法需要传入至少有一个 pipe 的数组"); + return 1 === t.length ? function (e, r) { + t[0](e, r || d); + } : t.reduce(function (t, e) { + return function (r, n) { + return void 0 === n && (n = d), t(r, function (t) { + return null == e ? void 0 : e(t, n); + }); + }; + }); + }([function (t) { + r.send({ + url: r.strategy.getUploadUrl(), + data: t, + method: "post", + contentType: "application/json;charset=UTF-8" + }, function () { + var e = r.config.onReportSuccess; + "function" == typeof e && e(JSON.stringify(t.events)); + }, function () { + var e = r.config.onReportFail; + "function" == typeof e && e(JSON.stringify(t.events)); + }); + }]), function (t, e) { + if (!t) throw e instanceof Error ? e : new Error(e); + }(Boolean(t.appkey), "appkey must be initial"), this.config = _e({}, t); } - return { - payload: result.records.join(''), - body: body - }; -}; -var getSourceParams = function (source) { - var parser = this.options.CopySourceParser; - if (parser) return parser(source); - var m = source.match(/^([^.]+-\d+)\.cos(v6|-cdc)?\.([^.]+)\.myqcloud\.com\/(.+)$/); - if (!m) return null; - return { Bucket: m[1], Region: m[3], Key: m[4] }; -}; + return t.prototype.onUserAction = function (t, e) { + this.preReport(t, e, !1); + }, t.prototype.onDirectUserAction = function (t, e) { + this.preReport(t, e, !0); + }, t.prototype.preReport = function (t, e, r) { + t ? this.strategy.isEventUpOnOff() && (this.strategy.isBlackEvent(t) || this.strategy.isSampleEvent(t) || this.onReport(t, e, r)) : this.errorReport.reportError("602", " no eventCode"); + }, t.prototype.addAdditionalParams = function (t) { + for (var e = 0, r = Object.keys(t); e < r.length; e++) { + var n = r[e]; + this.additionalParams[n] = t[n]; + } + }, t.prototype.setChannelId = function (t) { + this.commonInfo.channelID = String(t); + }, t.prototype.setOpenId = function (t) { + this.commonInfo.openid = String(t); + }, t.prototype.setUnionid = function (t) { + this.commonInfo.unid = String(t); + }, t.prototype.getDeviceId = function () { + return this.commonInfo.deviceId; + }, t.prototype.getCommonInfo = function () { + return this.commonInfo; + }, t.prototype.removeSendingId = function (t) { + try { + var e = JSON.parse(this.storage.getItem(s)), + r = e.indexOf(t); + -1 != r && (e.splice(r, 1), this.storage.setItem(s, JSON.stringify(e))); + } catch (t) {} + }, t; + }(), + y = function () { + function t(t, e, r, n) { + this.requestParams = {}, this.network = n, this.requestParams.attaid = "00400014144", this.requestParams.token = "6478159937", this.requestParams.product_id = t.appkey, this.requestParams.platform = r, this.requestParams.uin = e.deviceId, this.requestParams.model = "", this.requestParams.os = r, this.requestParams.app_version = t.appVersion, this.requestParams.sdk_version = e.sdkVersion, this.requestParams.error_stack = "", this.uploadUrl = t.isOversea ? "https://htrace.wetvinfo.com/kv" : "https://h.trace.qq.com/kv"; + } -var noop = function () {}; + return t.prototype.reportError = function (t, e) { + this.requestParams._dc = Math.random(), this.requestParams.error_msg = e, this.requestParams.error_code = t, this.network.get(this.uploadUrl, { + params: this.requestParams + })["catch"](function (t) {}); + }, t; + }(), + g = function () { + function t(t, e, r, n) { + this.strategy = { + isEventUpOnOff: !0, + httpsUploadUrl: "https://otheve.beacon.qq.com/analytics/v2_upload", + requestInterval: 30, + blacklist: [], + samplelist: [] + }, this.realSample = {}, this.appkey = "", this.appkey = t.appkey, this.storage = r; + + try { + var o = JSON.parse(this.storage.getItem(c)); + o && this.processData(o); + } catch (t) {} + + t.isOversea && (this.strategy.httpsUploadUrl = "https://svibeacon.onezapp.com/analytics/v2_upload"), !t.isOversea && this.needRequestConfig() && this.requestConfig(t.appVersion, e, n); + } -// 清除对象里值为的 undefined 或 null 的属性 -var clearKey = function (obj) { - var retObj = {}; - for (var key in obj) { - if (obj.hasOwnProperty(key) && obj[key] !== undefined && obj[key] !== null) { - retObj[key] = obj[key]; - } + return t.prototype.requestConfig = function (t, e, r) { + var n = this; + this.storage.setItem(u, Date.now().toString()), r.post("https://oth.str.beacon.qq.com/trpc.beacon.configserver.BeaconConfigService/QueryConfig", { + platformId: "undefined" == typeof wx ? "3" : "4", + mainAppKey: this.appkey, + appVersion: t, + sdkVersion: e.sdkVersion, + osVersion: e.userAgent, + model: "", + packageName: "", + params: { + A3: e.deviceId + } + }).then(function (t) { + if (0 == t.data.ret) try { + var e = JSON.parse(t.data.beaconConfig); + e && (n.processData(e), n.storage.setItem(c, t.data.beaconConfig)); + } catch (t) {} else n.processData(null), n.storage.setItem(c, ""); + })["catch"](function (t) {}); + }, t.prototype.processData = function (t) { + var e, r, n, o, i; + this.strategy.isEventUpOnOff = null !== (e = null == t ? void 0 : t.isEventUpOnOff) && void 0 !== e ? e : this.strategy.isEventUpOnOff, this.strategy.httpsUploadUrl = null !== (r = null == t ? void 0 : t.httpsUploadUrl) && void 0 !== r ? r : this.strategy.httpsUploadUrl, this.strategy.requestInterval = null !== (n = null == t ? void 0 : t.requestInterval) && void 0 !== n ? n : this.strategy.requestInterval, this.strategy.blacklist = null !== (o = null == t ? void 0 : t.blacklist) && void 0 !== o ? o : this.strategy.blacklist, this.strategy.samplelist = null !== (i = null == t ? void 0 : t.samplelist) && void 0 !== i ? i : this.strategy.samplelist; + + for (var a = 0, s = this.strategy.samplelist; a < s.length; a++) { + var c = s[a].split(","); + 2 == c.length && (this.realSample[c[0]] = c[1]); + } + }, t.prototype.needRequestConfig = function () { + var t = Number(this.storage.getItem(u)); + return Date.now() - t > 60 * this.strategy.requestInterval * 1e3; + }, t.prototype.getUploadUrl = function () { + return this.strategy.httpsUploadUrl + "?appkey=" + this.appkey; + }, t.prototype.isBlackEvent = function (t) { + return -1 != this.strategy.blacklist.indexOf(t); + }, t.prototype.isEventUpOnOff = function () { + return this.strategy.isEventUpOnOff; + }, t.prototype.isSampleEvent = function (t) { + return !!Object.prototype.hasOwnProperty.call(this.realSample, t) && this.realSample[t] < Math.floor(Math.random() * Math.floor(1e4)); + }, t; + }(), + m = "session_storage_key", + w = function () { + function t(t, e, r) { + this.beacon = r, this.storage = t, this.duration = e, this.appkey = r.config.appkey; } - return retObj; -}; -var readAsBinaryString = function (blob, callback) { - var readFun; - var fr = new FileReader(); - if (FileReader.prototype.readAsBinaryString) { - readFun = FileReader.prototype.readAsBinaryString; - fr.onload = function () { - callback(this.result); - }; - } else if (FileReader.prototype.readAsArrayBuffer) { - // 在 ie11 添加 readAsBinaryString 兼容 - readFun = function (fileData) { - var binary = ""; - var pt = this; - var reader = new FileReader(); - reader.onload = function (e) { - var bytes = new Uint8Array(reader.result); - var length = bytes.byteLength; - for (var i = 0; i < length; i++) { - binary += String.fromCharCode(bytes[i]); - } - callback(binary); - }; - reader.readAsArrayBuffer(fileData); + return t.prototype.getSession = function () { + var t = this.storage.getItem(m); + if (!t) return this.createSession(); + var e = "", + r = 0; + + try { + var n = JSON.parse(t) || { + sessionId: void 0, + sessionStart: void 0 }; - } else { - console.error('FileReader not support readAsBinaryString'); + if (!n.sessionId || !n.sessionStart) return this.createSession(); + var o = Number(this.storage.getItem(a)); + if (Date.now() - o > this.duration) return this.createSession(); + e = n.sessionId, r = n.sessionStart; + } catch (t) {} + + return { + sessionId: e, + sessionStart: r + }; + }, t.prototype.createSession = function () { + var t = Date.now(), + e = { + sessionId: this.appkey + "_" + t.toString(), + sessionStart: t + }; + this.storage.setItem(m, JSON.stringify(e)), this.storage.setItem(a, t.toString()); + var r = "is_new_user", + n = this.storage.getItem(r); + return this.beacon.onDirectUserAction("rqd_applaunched", { + A21: n ? "N" : "Y" + }), this.storage.setItem(r, JSON.stringify(!1)), e; + }, t; + }(); + + function b() { + var t = navigator.userAgent, + e = t.indexOf("compatible") > -1 && t.indexOf("MSIE") > -1, + r = t.indexOf("Edge") > -1 && !e, + n = t.indexOf("Trident") > -1 && t.indexOf("rv:11.0") > -1; + + if (e) { + new RegExp("MSIE (\\d+\\.\\d+);").test(t); + var o = parseFloat(RegExp.$1); + return 7 == o ? 7 : 8 == o ? 8 : 9 == o ? 9 : 10 == o ? 10 : 6; } - readFun.call(fr, blob); -}; -var fileSliceNeedCopy = function () { - var compareVersion = function (a, b) { - a = a.split('.'); - b = b.split('.'); - for (var i = 0; i < b.length; i++) { - if (a[i] !== b[i]) { - return parseInt(a[i]) > parseInt(b[i]) ? 1 : -1; - } + return r ? -2 : n ? 11 : -1; + } + + var _S = function S() { + return (_S = Object.assign || function (t) { + for (var e, r = 1, n = arguments.length; r < n; r++) { + for (var o in e = arguments[r]) { + Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]); } - return 0; - }; - var check = function (ua) { - if (!ua) return false; - var ChromeVersion = (ua.match(/Chrome\/([.\d]+)/) || [])[1]; - var QBCoreVersion = (ua.match(/QBCore\/([.\d]+)/) || [])[1]; - var QQBrowserVersion = (ua.match(/QQBrowser\/([.\d]+)/) || [])[1]; - var need = ChromeVersion && compareVersion(ChromeVersion, '53.0.2785.116') < 0 && QBCoreVersion && compareVersion(QBCoreVersion, '3.53.991.400') < 0 && QQBrowserVersion && compareVersion(QQBrowserVersion, '9.0.2524.400') <= 0 || false; - return need; - }; - return check(typeof navigator !== 'undefined' && navigator.userAgent); -}(); + } + + return t; + }).apply(this, arguments); + }; + + var E, + I = function () { + function t(t, e) { + void 0 === e && (e = {}), this.reportOptions = {}, this.config = t, this.reportOptions = e; + } -// 获取文件分片 -var fileSlice = function (file, start, end, isUseToUpload, callback) { - var blob; - if (file.slice) { - blob = file.slice(start, end); - } else if (file.mozSlice) { - blob = file.mozSlice(start, end); - } else if (file.webkitSlice) { - blob = file.webkitSlice(start, end); - } - if (isUseToUpload && fileSliceNeedCopy) { - var reader = new FileReader(); - reader.onload = function (e) { - blob = null; - callback(new Blob([reader.result])); + return t.canUseDB = function () { + return !!(null === window || void 0 === window ? void 0 : window.indexedDB); + }, t.prototype.openDB = function () { + var e = this; + return new Promise(function (r, n) { + if (!t.canUseDB()) return n({ + message: "当前不支持 indexeddb" + }); + var o = e.config, + i = o.name, + a = o.version, + s = o.stores, + c = indexedDB.open(i, a); + c.onsuccess = function () { + e.db = c.result, r(), _S({ + result: 1, + func: "open", + params: JSON.stringify(e.config) + }, e.reportOptions); + }, c.onerror = function (t) { + var r, o; + n(t), _S({ + result: 0, + func: "open", + params: JSON.stringify(e.config), + error_msg: null === (o = null === (r = t.target) || void 0 === r ? void 0 : r.error) || void 0 === o ? void 0 : o.message + }, e.reportOptions); + }, c.onupgradeneeded = function () { + e.db = c.result; + + try { + null == s || s.forEach(function (t) { + e.createStore(t); + }); + } catch (t) { + _S({ + result: 0, + func: "open", + params: JSON.stringify(e.config), + error_msg: t.message + }, e.reportOptions), n(t); + } }; - reader.readAsArrayBuffer(blob); - } else { - callback(blob); + }); + }, t.prototype.useStore = function (t) { + return this.storeName = t, this; + }, t.prototype.deleteDB = function () { + var t = this; + return this.closeDB(), new Promise(function (e, r) { + var n = indexedDB.deleteDatabase(t.config.name); + n.onsuccess = function () { + return e(); + }, n.onerror = r; + }); + }, t.prototype.closeDB = function () { + var t; + null === (t = this.db) || void 0 === t || t.close(), this.db = null; + }, t.prototype.getStoreCount = function () { + var t = this; + return new Promise(function (e, r) { + var n = t.getStore("readonly").count(); + n.onsuccess = function () { + return e(n.result); + }, n.onerror = r; + }); + }, t.prototype.clearStore = function () { + var t = this; + return new Promise(function (e, r) { + var n = t.getStore("readwrite").clear(); + n.onsuccess = function () { + return e(); + }, n.onerror = r; + }); + }, t.prototype.add = function (t, e) { + var r = this; + return new Promise(function (n, o) { + var i = r.getStore("readwrite").add(t, e); + i.onsuccess = function () { + n(i.result); + }, i.onerror = o; + }); + }, t.prototype.put = function (t, e) { + var r = this; + return new Promise(function (n, o) { + var i = r.getStore("readwrite").put(t, e); + i.onsuccess = function () { + n(i.result); + }, i.onerror = o; + }); + }, t.prototype.getStoreAllData = function () { + var t = this; + return new Promise(function (e, r) { + var n = t.getStore("readonly").openCursor(), + o = []; + n.onsuccess = function () { + var t; + + if (null === (t = n.result) || void 0 === t ? void 0 : t.value) { + var r = n.result.value; + o.push(r), n.result["continue"](); + } else e(o); + }, n.onerror = r; + }); + }, t.prototype.getDataRangeByIndex = function (t, e, r, n, o) { + var i = this; + return new Promise(function (a, s) { + var c = i.getStore().index(t), + u = IDBKeyRange.bound(e, r, n, o), + l = [], + h = c.openCursor(u); + h.onsuccess = function () { + var t; + (null === (t = null == h ? void 0 : h.result) || void 0 === t ? void 0 : t.value) ? (l.push(null == h ? void 0 : h.result.value), null == h || h.result["continue"]()) : a(l); + }, h.onerror = s; + }); + }, t.prototype.removeDataByIndex = function (t, e, r, n, o) { + var i = this; + return new Promise(function (a, s) { + var c = i.getStore("readwrite").index(t), + u = IDBKeyRange.bound(e, r, n, o), + l = c.openCursor(u), + h = 0; + l.onsuccess = function (t) { + var e = t.target.result; + e ? (h += 1, e["delete"](), e["continue"]()) : a(h); + }, l.onerror = s; + }); + }, t.prototype.createStore = function (t) { + var e = t.name, + r = t.indexes, + n = void 0 === r ? [] : r, + o = t.options; + + if (this.db) { + this.db.objectStoreNames.contains(e) && this.db.deleteObjectStore(e); + var i = this.db.createObjectStore(e, o); + n.forEach(function (t) { + i.createIndex(t.indexName, t.keyPath, t.options); + }); + } + }, t.prototype.getStore = function (t) { + var e; + return void 0 === t && (t = "readonly"), null === (e = this.db) || void 0 === e ? void 0 : e.transaction(this.storeName, t).objectStore(this.storeName); + }, t; + }(), + O = "event_table_v3", + k = "eventId", + x = function () { + function t(t) { + this.isReady = !1, this.taskQueue = Promise.resolve(), this.db = new I({ + name: "Beacon_" + t + "_V3", + version: 1, + stores: [{ + name: O, + options: { + keyPath: k + }, + indexes: [{ + indexName: k, + keyPath: k, + options: { + unique: !0 + } + }] + }] + }), this.open(); } -}; -// 获取文件内容的 MD5 -var getBodyMd5 = function (UploadCheckContentMd5, Body, callback, onProgress) { - callback = callback || noop; - if (UploadCheckContentMd5) { - if (typeof Body === 'string') { - callback(util.md5(Body, true)); - } else if (Blob && Body instanceof Blob) { - util.getFileMd5(Body, function (err, md5) { - callback(md5); - }, onProgress); - } else { - callback(); - } - } else { - callback(); + return t.prototype.getCount = function () { + var t = this; + return this.readyExec(function () { + return t.db.getStoreCount(); + }); + }, t.prototype.setItem = function (t, e) { + var r = this; + return this.readyExec(function () { + return r.db.add({ + eventId: t, + value: e + }); + }); + }, t.prototype.getItem = function (t) { + return r(this, void 0, void 0, function () { + var e = this; + return n(this, function (r) { + return [2, this.readyExec(function () { + return e.db.getDataRangeByIndex(k, t, t); + })]; + }); + }); + }, t.prototype.removeItem = function (t) { + var e = this; + return this.readyExec(function () { + return e.db.removeDataByIndex(k, t, t); + }); + }, t.prototype.updateItem = function (t, e) { + var r = this; + return this.readyExec(function () { + return r.db.put({ + eventId: t, + value: e + }); + }); + }, t.prototype.iterate = function (t) { + var e = this; + return this.readyExec(function () { + return e.db.getStoreAllData().then(function (e) { + e.forEach(function (e) { + t(e.value); + }); + }); + }); + }, t.prototype.open = function () { + return r(this, void 0, void 0, function () { + var t = this; + return n(this, function (e) { + switch (e.label) { + case 0: + return this.taskQueue = this.taskQueue.then(function () { + return t.db.openDB(); + }), [4, this.taskQueue]; + + case 1: + return e.sent(), this.isReady = !0, this.db.useStore(O), [2]; + } + }); + }); + }, t.prototype.readyExec = function (t) { + return this.isReady ? t() : (this.taskQueue = this.taskQueue.then(function () { + return t(); + }), this.taskQueue); + }, t; + }(), + C = function () { + function t(t) { + this.keyObject = {}, this.storage = t; } -}; -// 获取文件 md5 值 -var md5ChunkSize = 1024 * 1024; -var getFileMd5 = function (blob, callback, onProgress) { - var size = blob.size; - var loaded = 0; - var md5ctx = md5.getCtx(); - var next = function (start) { - if (start >= size) { - var hash = md5ctx.digest('hex'); - callback(null, hash); - return; - } - var end = Math.min(size, start + md5ChunkSize); - util.fileSlice(blob, start, end, false, function (chunk) { - readAsBinaryString(chunk, function (content) { - chunk = null; - md5ctx = md5ctx.update(content, true); - loaded += content.length; - content = null; - if (onProgress) onProgress({ loaded: loaded, total: size, percent: Math.round(loaded / size * 10000) / 10000 }); - next(start + md5ChunkSize); - }); + return t.prototype.getCount = function () { + return this.storage.getStoreCount(); + }, t.prototype.removeItem = function (t) { + this.storage.removeItem(t), delete this.keyObject[t]; + }, t.prototype.setItem = function (t, e) { + var r = JSON.stringify(e); + this.storage.setItem(t, r), this.keyObject[t] = e; + }, t.prototype.iterate = function (t) { + for (var e = Object.keys(this.keyObject), r = 0; r < e.length; r++) { + var n = this.storage.getItem(e[r]); + t(JSON.parse(n)); + } + }, t; + }(), + _ = function () { + function t(t, e) { + var r = this; + this.dbEventCount = 0, b() > 0 || !window.indexedDB || /X5Lite/.test(navigator.userAgent) ? (this.store = new C(e), this.dbEventCount = this.store.getCount()) : (this.store = new x(t), this.getCount().then(function (t) { + r.dbEventCount = t; + })); + } + + return t.prototype.getCount = function () { + return r(this, void 0, void 0, function () { + return n(this, function (t) { + switch (t.label) { + case 0: + return t.trys.push([0, 2,, 3]), [4, this.store.getCount()]; + + case 1: + return [2, t.sent()]; + + case 2: + return t.sent(), [2, Promise.reject()]; + + case 3: + return [2]; + } + }); + }); + }, t.prototype.insertEvent = function (t, e) { + return r(this, void 0, void 0, function () { + var r, o; + return n(this, function (n) { + switch (n.label) { + case 0: + if (this.dbEventCount >= 1e4) return [2, Promise.reject()]; + r = p(t.mapValue), n.label = 1; + + case 1: + return n.trys.push([1, 3,, 4]), this.dbEventCount++, [4, this.store.setItem(r, t)]; + + case 2: + return [2, n.sent()]; + + case 3: + return o = n.sent(), e && e(o, t), this.dbEventCount--, [2, Promise.reject()]; + + case 4: + return [2]; + } + }); + }); + }, t.prototype.getEvents = function () { + return r(this, void 0, void 0, function () { + var t; + return n(this, function (e) { + switch (e.label) { + case 0: + t = [], e.label = 1; + + case 1: + return e.trys.push([1, 3,, 4]), [4, this.store.iterate(function (e) { + t.push(e); + })]; + + case 2: + return e.sent(), [2, Promise.all(t)]; + + case 3: + return e.sent(), [2, Promise.all(t)]; + + case 4: + return [2]; + } + }); + }); + }, t.prototype.removeEvent = function (t) { + return r(this, void 0, void 0, function () { + var e; + return n(this, function (r) { + switch (r.label) { + case 0: + e = p(t.mapValue), r.label = 1; + + case 1: + return r.trys.push([1, 3,, 4]), this.dbEventCount--, [4, this.store.removeItem(e)]; + + case 2: + return [2, r.sent()]; + + case 3: + return r.sent(), this.dbEventCount++, [2, Promise.reject()]; + + case 4: + return [2]; + } }); + }); + }, t; + }(), + _A = function A() { + return (_A = Object.assign || function (t) { + for (var e, r = 1, n = arguments.length; r < n; r++) { + for (var o in e = arguments[r]) { + Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]); + } + } + + return t; + }).apply(this, arguments); + }; + + function P(t) { + try { + return decodeURIComponent(t.replace(/\+/g, " ")); + } catch (t) { + return null; + } + } + + function j(t, e) { + var r = [null, void 0, "", NaN].includes(t); + if (e.isSkipEmpty && r) return null; + var n = !e.isSkipEmpty && r ? "" : t; + + try { + return e.encode ? encodeURIComponent(n) : n; + } catch (t) { + return null; + } + } + + function D(t) { + var e = t.split("#"), + r = e[0], + n = e[1], + o = void 0 === n ? "" : n, + i = r.split("?"), + a = i[0], + s = i[1], + c = void 0 === s ? "" : s, + u = P(o), + l = Object.create(null); + return c.split("&").forEach(function (t) { + var e = t.split("="), + r = e[0], + n = e[1], + o = void 0 === n ? "" : n, + i = P(r), + a = P(o); + null === i || null === a || "" === i && "" === a || l[i] || (l[i] = a); + }), { + url: a, + query: l, + hash: u }; - next(0); -}; + } -function clone(obj) { - return map(obj, function (v) { - return typeof v === 'object' && v !== null ? clone(v) : v; + function T(t, e) { + void 0 === e && (e = { + encode: !0, + isSkipEmpty: !1 }); -} - -function attr(obj, name, defaultValue) { - return obj && name in obj ? obj[name] : defaultValue; -} -function extend(target, source) { - each(source, function (val, key) { - target[key] = source[key]; + var r = t.url, + n = t.query, + o = void 0 === n ? {} : n, + i = t.hash, + a = r.split("#"), + s = a[0], + c = a[1], + u = void 0 === c ? "" : c, + l = s.split("?")[0], + h = [], + f = j(i || u, e), + p = _A(_A({}, D(r).query), o); + + return Object.keys(p).forEach(function (t) { + var r = j(t, e), + n = j(p[t], e); + null !== r && null !== n && h.push(r + "=" + n); + }), l + (h.length ? "?" + h.join("&") : "") + (f ? "#" + f : ""); + } + + function N(t, e) { + return new Promise(function (r, n) { + if (e && document.querySelectorAll("script[data-tag=" + e + "]").length) return r(); + + var o = document.createElement("script"), + i = _A({ + type: "text/javascript", + charset: "utf-8" + }, t); + + Object.keys(i).forEach(function (t) { + return function (t, e, r) { + if (t) return void 0 === r ? t.getAttribute(e) : t.setAttribute(e, r); + }(o, t, i[t]); + }), e && (o.dataset.tag = e), o.onload = function () { + return r(); + }, o.onreadystatechange = function () { + var t = o.readyState; + ["complete", "loaded"].includes(t) && (o.onreadystatechange = null, r()); + }, o.onerror = n, document.body.appendChild(o); }); - return target; -} + } -function isArray(arr) { - return arr instanceof Array; -} + !function (t) { + t[t.equal = 0] = "equal", t[t.low = -1] = "low", t[t.high = 1] = "high"; + }(E || (E = {})); -function isInArray(arr, item) { - var flag = false; - for (var i = 0; i < arr.length; i++) { - if (item === arr[i]) { - flag = true; - break; + var _U = function U() { + return (_U = Object.assign || function (t) { + for (var e, r = 1, n = arguments.length; r < n; r++) { + for (var o in e = arguments[r]) { + Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]); } - } - return flag; -} + } -function makeArray(arr) { - return isArray(arr) ? arr : [arr]; -} + return t; + }).apply(this, arguments); + }; -function each(obj, fn) { - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - fn(obj[i], i); + function q(t, e, r, n) { + return new (r || (r = Promise))(function (o, i) { + function a(t) { + try { + c(n.next(t)); + } catch (t) { + i(t); } - } -} + } -function map(obj, fn) { - var o = isArray(obj) ? [] : {}; - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - o[i] = fn(obj[i], i); + function s(t) { + try { + c(n["throw"](t)); + } catch (t) { + i(t); } - } - return o; -} + } -function filter(obj, fn) { - var iaArr = isArray(obj); - var o = iaArr ? [] : {}; - for (var i in obj) { - if (obj.hasOwnProperty(i)) { - if (fn(obj[i], i)) { - if (iaArr) { - o.push(obj[i]); - } else { - o[i] = obj[i]; - } - } - } - } - return o; -} + function c(t) { + var e; + t.done ? o(t.value) : (e = t.value, e instanceof r ? e : new r(function (t) { + t(e); + })).then(a, s); + } -var binaryBase64 = function (str) { - var i, - len, - char, - res = ''; - for (i = 0, len = str.length / 2; i < len; i++) { - char = parseInt(str[i * 2] + str[i * 2 + 1], 16); - res += String.fromCharCode(char); - } - return btoa(res); -}; -var uuid = function () { - var S4 = function () { - return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1); + c((n = n.apply(t, e || [])).next()); + }); + } + + function R(t, e) { + var r, + n, + o, + i, + a = { + label: 0, + sent: function sent() { + if (1 & o[0]) throw o[1]; + return o[1]; + }, + trys: [], + ops: [] }; - return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); -}; + return i = { + next: s(0), + "throw": s(1), + "return": s(2) + }, "function" == typeof Symbol && (i[Symbol.iterator] = function () { + return this; + }), i; + + function s(i) { + return function (s) { + return function (i) { + if (r) throw new TypeError("Generator is already executing."); + + for (; a;) { + try { + if (r = 1, n && (o = 2 & i[0] ? n["return"] : i[0] ? n["throw"] || ((o = n["return"]) && o.call(n), 0) : n.next) && !(o = o.call(n, i[1])).done) return o; + + switch (n = 0, o && (i = [2 & i[0], o.value]), i[0]) { + case 0: + case 1: + o = i; + break; + + case 4: + return a.label++, { + value: i[1], + done: !1 + }; + + case 5: + a.label++, n = i[1], i = [0]; + continue; + + case 7: + i = a.ops.pop(), a.trys.pop(); + continue; + + default: + if (!((o = (o = a.trys).length > 0 && o[o.length - 1]) || 6 !== i[0] && 2 !== i[0])) { + a = 0; + continue; + } + + if (3 === i[0] && (!o || i[1] > o[0] && i[1] < o[3])) { + a.label = i[1]; + break; + } + + if (6 === i[0] && a.label < o[1]) { + a.label = o[1], o = i; + break; + } + + if (o && a.label < o[2]) { + a.label = o[2], a.ops.push(i); + break; + } + + o[2] && a.ops.pop(), a.trys.pop(); + continue; + } + + i = e.call(t, a); + } catch (t) { + i = [6, t], n = 0; + } finally { + r = o = 0; + } + } + + if (5 & i[0]) throw i[1]; + return { + value: i[0] ? i[1] : void 0, + done: !0 + }; + }([i, s]); + }; + } + } -var hasMissingParams = function (apiName, params) { - var Bucket = params.Bucket; - var Region = params.Region; - var Key = params.Key; - var Domain = this.options.Domain; - var checkBucket = !Domain || typeof Domain === 'string' && Domain.indexOf('{Bucket}') > -1; - var checkRegion = !Domain || typeof Domain === 'string' && Domain.indexOf('{Region}') > -1; - if (apiName.indexOf('Bucket') > -1 || apiName === 'deleteMultipleObject' || apiName === 'multipartList' || apiName === 'listObjectVersions') { - if (checkBucket && !Bucket) return 'Bucket'; - if (checkRegion && !Region) return 'Region'; - } else if (apiName.indexOf('Object') > -1 || apiName.indexOf('multipart') > -1 || apiName === 'sliceUploadFile' || apiName === 'abortUploadTask') { - if (checkBucket && !Bucket) return 'Bucket'; - if (checkRegion && !Region) return 'Region'; - if (!Key) return 'Key'; + var L = function () { + function t() { + this.interceptors = []; } - return false; -}; -var formatParams = function (apiName, params) { + return t.prototype.use = function (t, e) { + return this.interceptors.push({ + resolved: t, + rejected: e + }), this.interceptors.length - 1; + }, t.prototype.traverse = function (t, e) { + void 0 === e && (e = !1); + var r = Promise.resolve(t); + return (e ? Array.prototype.reduceRight : Array.prototype.reduce).call(this.interceptors, function (t, e) { + if (e) { + var n = e.resolved, + o = e.rejected; + r = r.then(n, o); + } - // 复制参数对象 - params = extend({}, params); - - // 统一处理 Headers - if (apiName !== 'getAuth' && apiName !== 'getV4Auth' && apiName !== 'getObjectUrl') { - var Headers = params.Headers || {}; - if (params && typeof params === 'object') { - (function () { - for (var key in params) { - if (params.hasOwnProperty(key) && key.indexOf('x-cos-') > -1) { - Headers[key] = params[key]; - } - } - })(); - - var headerMap = { - // params headers - 'x-cos-mfa': 'MFA', - 'Content-MD5': 'ContentMD5', - 'Content-Length': 'ContentLength', - 'Content-Type': 'ContentType', - 'Expect': 'Expect', - 'Expires': 'Expires', - 'Cache-Control': 'CacheControl', - 'Content-Disposition': 'ContentDisposition', - 'Content-Encoding': 'ContentEncoding', - 'Range': 'Range', - 'If-Modified-Since': 'IfModifiedSince', - 'If-Unmodified-Since': 'IfUnmodifiedSince', - 'If-Match': 'IfMatch', - 'If-None-Match': 'IfNoneMatch', - 'x-cos-copy-source': 'CopySource', - 'x-cos-copy-source-Range': 'CopySourceRange', - 'x-cos-metadata-directive': 'MetadataDirective', - 'x-cos-copy-source-If-Modified-Since': 'CopySourceIfModifiedSince', - 'x-cos-copy-source-If-Unmodified-Since': 'CopySourceIfUnmodifiedSince', - 'x-cos-copy-source-If-Match': 'CopySourceIfMatch', - 'x-cos-copy-source-If-None-Match': 'CopySourceIfNoneMatch', - 'x-cos-acl': 'ACL', - 'x-cos-grant-read': 'GrantRead', - 'x-cos-grant-write': 'GrantWrite', - 'x-cos-grant-full-control': 'GrantFullControl', - 'x-cos-grant-read-acp': 'GrantReadAcp', - 'x-cos-grant-write-acp': 'GrantWriteAcp', - 'x-cos-storage-class': 'StorageClass', - 'x-cos-traffic-limit': 'TrafficLimit', - 'x-cos-mime-limit': 'MimeLimit', - // SSE-C - 'x-cos-server-side-encryption-customer-algorithm': 'SSECustomerAlgorithm', - 'x-cos-server-side-encryption-customer-key': 'SSECustomerKey', - 'x-cos-server-side-encryption-customer-key-MD5': 'SSECustomerKeyMD5', - // SSE-COS、SSE-KMS - 'x-cos-server-side-encryption': 'ServerSideEncryption', - 'x-cos-server-side-encryption-cos-kms-key-id': 'SSEKMSKeyId', - 'x-cos-server-side-encryption-context': 'SSEContext' - }; - util.each(headerMap, function (paramKey, headerKey) { - if (params[paramKey] !== undefined) { - Headers[headerKey] = params[paramKey]; - } - }); + return t; + }, ""), r; + }, t.prototype.eject = function (t) { + this.interceptors[t] && (this.interceptors[t] = null); + }, t; + }(), + B = { + defaults: { + timeout: 0, + method: "GET", + mode: "cors", + redirect: "follow", + credentials: "same-origin" + }, + headers: { + common: { + Accept: "application/json, text/plain, */*" + }, + POST: { + "Content-Type": "application/x-www-form-urlencoded" + }, + PUT: { + "Content-Type": "application/x-www-form-urlencoded" + }, + PATCH: { + "Content-Type": "application/x-www-form-urlencoded" + } + }, + baseURL: "", + polyfillUrl: "https://vm.gtimg.cn/comps/script/fetch.min.js", + interceptors: { + request: new L(), + response: new L() + } + }, + J = /^([a-z][a-z\d+\-.]*:)?\/\//i, + M = Object.prototype.toString; + + function V(t) { + return q(this, void 0, void 0, function () { + var e; + return R(this, function (r) { + switch (r.label) { + case 0: + if (window.fetch) return [2]; + r.label = 1; + + case 1: + return r.trys.push([1, 3,, 4]), [4, N({ + src: t + })]; + + case 2: + return r.sent(), [3, 4]; + + case 3: + throw e = r.sent(), function (t) { + if ("undefined" != typeof Image) { + var e = new Image(1, 1), + r = _U({ + attaid: "0f400053130", + token: "6552374442", + comps: "@tencent/ovb-request", + version: "1.1.18", + ua: navigator.userAgent, + url: location.href, + _dc: Math.random() + }, t), + n = Object.keys(r).map(function (t) { + return t + "=" + encodeURIComponent(r[t]); + }).join("&"); + + e.src = "https://h.trace.qq.com/kv?" + n; + } + }({ + func: "loadPolyfill", + result: 0, + params: t, + error_msg: e.message + }), new Error("加载 polyfill " + t + " 失败: " + e.message); + + case 4: + return [2]; + } + }); + }); + } + + function G(t) { + return ["Accept", "Content-Type"].forEach(function (e) { + return r = e, void ((n = t.headers) && Object.keys(n).forEach(function (t) { + t !== r && t.toUpperCase() === r.toUpperCase() && (n[r] = n[t], delete n[t]); + })); + var r, n; + }), function (t) { + if ("[object Object]" !== M.call(t)) return !1; + var e = Object.getPrototypeOf(t); + return null === e || e === Object.prototype; + }(t.body) && (t.body = JSON.stringify(t.body), t.headers && (t.headers["Content-Type"] = "application/json;charset=utf-8")), t; + } + + function F(t) { + return q(this, void 0, void 0, function () { + var e, r, n, o, i, a, s, c, u, l, h, f, p, d, v, y, g; + return R(this, function (m) { + switch (m.label) { + case 0: + return e = B.baseURL, r = B.defaults, n = B.interceptors, [4, V(B.polyfillUrl)]; + + case 1: + return m.sent(), (o = _U(_U({}, r), t)).headers || (o.headers = function (t) { + void 0 === t && (t = "GET"); + var e = B.headers[t] || {}; + return _U(_U({}, B.headers.common), e); + }(o.method)), G(o), [4, n.request.traverse(o, !0)]; + + case 2: + if ((i = m.sent()) instanceof Error) throw i; + return i.url = function (t, e) { + return !t || J.test(e) ? e : t.replace(/\/+$/, "") + "/" + e.replace(/^\/+/, ""); + }(e, i.url), a = i.url, s = i.timeout, c = i.params, u = i.method, l = ["GET", "DELETE", "OPTIONS", "HEAD"].includes(void 0 === u ? "GET" : u) && !!c, h = l ? T({ + url: a, + query: c + }) : a, f = [], s && !i.signal && (v = new Promise(function (t) { + p = setTimeout(function () { + t(new Error("timeout")); + }, s); + }), f.push(v), d = new AbortController(), i.signal = d.signal), f.push(fetch(h, i)["catch"](function (t) { + return t; + })), [4, Promise.race(f)]; + + case 3: + return y = m.sent(), p && clearTimeout(p), [4, n.response.traverse(y)]; + + case 4: + if ((g = m.sent()) instanceof Error) throw null == d || d.abort(), g; + return [2, g]; + } + }); + }); + } + + var Q = function () { + function t(t) { + B.interceptors.request.use(function (r) { + var n = r.url, + o = r.method, + i = r.body, + a = i; + + if (t.onReportBeforeSend) { + var s = t.onReportBeforeSend({ + url: n, + method: o, + data: i ? JSON.parse(i) : null + }); + a = (null == s ? void 0 : s.data) ? JSON.stringify(s.data) : null; + } + + if ("GET" !== o && !a) throw new Error("No data for sdk, cancel."); + return _e(_e({}, r), { + body: a + }); + }); + } - params.Headers = clearKey(Headers); - } + return t.prototype.get = function (t, o) { + return r(this, void 0, void 0, function () { + var r, i; + return n(this, function (n) { + switch (n.label) { + case 0: + return [4, F(_e({ + url: t + }, o))]; + + case 1: + return [4, (r = n.sent()).json()]; + + case 2: + return i = n.sent(), [2, Promise.resolve({ + data: i, + status: r.status, + statusText: r.statusText, + headers: r.headers + })]; + } + }); + }); + }, t.prototype.post = function (t, o, i) { + return r(this, void 0, void 0, function () { + var r, a; + return n(this, function (n) { + switch (n.label) { + case 0: + return [4, F(_e({ + url: t, + body: o, + method: "POST" + }, i))]; + + case 1: + return [4, (r = n.sent()).json()]; + + case 2: + return a = n.sent(), [2, Promise.resolve({ + data: a, + status: r.status, + statusText: r.statusText, + headers: r.headers + })]; + } + }); + }); + }, t; + }(), + K = function () { + function t(t) { + this.appkey = t; } - return params; -}; + return t.prototype.getItem = function (t) { + try { + return window.localStorage.getItem(this.getStoreKey(t)); + } catch (t) { + return ""; + } + }, t.prototype.removeItem = function (t) { + try { + window.localStorage.removeItem(this.getStoreKey(t)); + } catch (t) {} + }, t.prototype.setItem = function (t, e) { + try { + window.localStorage.setItem(this.getStoreKey(t), e); + } catch (t) {} + }, t.prototype.setSessionItem = function (t, e) { + try { + window.sessionStorage.setItem(this.getStoreKey(t), e); + } catch (t) {} + }, t.prototype.getSessionItem = function (t) { + try { + return window.sessionStorage.getItem(this.getStoreKey(t)); + } catch (t) { + return ""; + } + }, t.prototype.getStoreKey = function (t) { + return o + this.appkey + "_" + t; + }, t.prototype.createDeviceId = function () { + try { + var t = window.localStorage.getItem(i); + return t || (t = function (t) { + for (var e = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789", r = "", n = 0; n < t; n++) { + r += e.charAt(Math.floor(Math.random() * e.length)); + } + + return r; + }(32), window.localStorage.setItem(i, t)), t; + } catch (t) { + return ""; + } + }, t.prototype.clear = function () { + try { + for (var t = window.localStorage.length, e = 0; e < t; e++) { + var r = window.localStorage.key(e); + (null == r ? void 0 : r.substr(0, 9)) == o && window.localStorage.removeItem(r); + } + } catch (t) {} + }, t.prototype.getStoreCount = function () { + var t = 0; + + try { + t = window.localStorage.length; + } catch (t) {} + + return t; + }, t; + }(); + + "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self && self; + + var W = function (t) { + var e = { + exports: {} + }; + return t(e, e.exports), e.exports; + }(function (t, e) { + t.exports = function () { + function t(t, e, r, n, o, i, a) { + try { + var s = t[i](a), + c = s.value; + } catch (t) { + return void r(t); + } + + s.done ? e(c) : Promise.resolve(c).then(n, o); + } + + function e(t, e) { + for (var r = 0; r < e.length; r++) { + var n = e[r]; + n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n); + } + } + + var r, + n = (function (t) { + t = function (t) { + var e, + r = Object.prototype, + n = r.hasOwnProperty, + o = "function" == typeof Symbol ? Symbol : {}, + i = o.iterator || "@@iterator", + a = o.asyncIterator || "@@asyncIterator", + s = o.toStringTag || "@@toStringTag"; + + function c(t, e, r) { + return Object.defineProperty(t, e, { + value: r, + enumerable: !0, + configurable: !0, + writable: !0 + }), t[e]; + } + + try { + c({}, ""); + } catch (r) { + c = function c(t, e, r) { + return t[e] = r; + }; + } -var apiWrapper = function (apiName, apiFn) { - return function (params, callback) { + function u(t, r, n, o) { + var i, a, s, c; + return r = r && r.prototype instanceof y ? r : y, r = Object.create(r.prototype), o = new k(o || []), r._invoke = (i = t, a = n, s = o, c = h, function (t, r) { + if (c === p) throw new Error("Generator is already running"); - var self = this; + if (c === d) { + if ("throw" === t) throw r; + return C(); + } - // 处理参数 - if (typeof params === 'function') { - callback = params; - params = {}; - } + for (s.method = t, s.arg = r;;) { + var n = s.delegate; - // 整理参数格式 - params = formatParams(apiName, params); + if (n) { + var o = function t(r, n) { + var o; - // 代理回调函数 - var formatResult = function (result) { - if (result && result.headers) { - result.headers['x-cos-request-id'] && (result.RequestId = result.headers['x-cos-request-id']); - result.headers['x-ci-request-id'] && (result.RequestId = result.headers['x-ci-request-id']); - result.headers['x-cos-version-id'] && (result.VersionId = result.headers['x-cos-version-id']); - result.headers['x-cos-delete-marker'] && (result.DeleteMarker = result.headers['x-cos-delete-marker']); - } - return result; - }; - var _callback = function (err, data) { - callback && callback(formatResult(err), formatResult(data)); - }; + if ((o = r.iterator[n.method]) === e) { + if (n.delegate = null, "throw" === n.method) { + if (r.iterator["return"] && (n.method = "return", n.arg = e, t(r, n), "throw" === n.method)) return v; + n.method = "throw", n.arg = new TypeError("The iterator does not provide a 'throw' method"); + } - var checkParams = function () { - if (apiName !== 'getService' && apiName !== 'abortUploadTask') { - // 判断参数是否完整 - var missingResult = hasMissingParams.call(self, apiName, params); - if (missingResult) { - return 'missing param ' + missingResult; - } - // 判断 region 格式 - if (params.Region) { - if (self.options.CompatibilityMode) { - if (!/^([a-z\d-.]+)$/.test(params.Region)) { - return 'Region format error.'; - } - } else { - if (params.Region.indexOf('cos.') > -1) { - return 'param Region should not be start with "cos."'; - } else if (!/^([a-z\d-]+)$/.test(params.Region)) { - return 'Region format error.'; - } - } - // 判断 region 格式 - if (!self.options.CompatibilityMode && params.Region.indexOf('-') === -1 && params.Region !== 'yfb' && params.Region !== 'default' && params.Region !== 'accelerate') { - console.warn('warning: param Region format error, find help here: https://cloud.tencent.com/document/product/436/6224'); - } - } - // 兼容不带 AppId 的 Bucket - if (params.Bucket) { - if (!/^([a-z\d-]+)-(\d+)$/.test(params.Bucket)) { - if (params.AppId) { - params.Bucket = params.Bucket + '-' + params.AppId; - } else if (self.options.AppId) { - params.Bucket = params.Bucket + '-' + self.options.AppId; - } else { - return 'Bucket should format as "test-1250000000".'; - } + return v; } - if (params.AppId) { - console.warn('warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g Bucket:"test-1250000000" ).'); - delete params.AppId; - } - } - // 如果 Key 是 / 开头,强制去掉第一个 / - if (!self.options.UseRawKey && params.Key && params.Key.substr(0, 1) === '/') { - params.Key = params.Key.substr(1); - } - } - }; - var errMsg = checkParams(); - var isSync = apiName === 'getAuth' || apiName === 'getObjectUrl'; - if (typeof Promise === 'function' && !isSync && !callback) { - return new Promise(function (resolve, reject) { - callback = function (err, data) { - err ? reject(err) : resolve(data); - }; - if (errMsg) return _callback(util.error(new Error(errMsg))); - apiFn.call(self, params, _callback); - }); - } else { - if (errMsg) return _callback(util.error(new Error(errMsg))); - var res = apiFn.call(self, params, _callback); - if (isSync) return res; - } - }; -}; + return "throw" === (o = l(o, r.iterator, n.arg)).type ? (n.method = "throw", n.arg = o.arg, n.delegate = null, v) : (o = o.arg) ? o.done ? (n[r.resultName] = o.value, n.next = r.nextLoc, "return" !== n.method && (n.method = "next", n.arg = e), n.delegate = null, v) : o : (n.method = "throw", n.arg = new TypeError("iterator result is not an object"), n.delegate = null, v); + }(n, s); -var throttleOnProgress = function (total, onProgress) { - var self = this; - var size0 = 0; - var size1 = 0; - var time0 = Date.now(); - var time1; - var timer; + if (o) { + if (o === v) continue; + return o; + } + } - function update() { - timer = 0; - if (onProgress && typeof onProgress === 'function') { - time1 = Date.now(); - var speed = Math.max(0, Math.round((size1 - size0) / ((time1 - time0) / 1000) * 100) / 100) || 0; - var percent; - if (size1 === 0 && total === 0) { - percent = 1; - } else { - percent = Math.floor(size1 / total * 100) / 100 || 0; - } - time0 = time1; - size0 = size1; + if ("next" === s.method) s.sent = s._sent = s.arg;else if ("throw" === s.method) { + if (c === h) throw c = d, s.arg; + s.dispatchException(s.arg); + } else "return" === s.method && s.abrupt("return", s.arg); + + if (c = p, "normal" === (o = l(i, a, s)).type) { + if (c = s.done ? d : f, o.arg !== v) return { + value: o.arg, + done: s.done + }; + } else "throw" === o.type && (c = d, s.method = "throw", s.arg = o.arg); + } + }), r; + } + + function l(t, e, r) { try { - onProgress({ loaded: size1, total: total, speed: speed, percent: percent }); - } catch (e) {} - } - } + return { + type: "normal", + arg: t.call(e, r) + }; + } catch (t) { + return { + type: "throw", + arg: t + }; + } + } - return function (info, immediately) { - if (info) { - size1 = info.loaded; - total = info.total; - } - if (immediately) { - clearTimeout(timer); - update(); - } else { - if (timer) return; - timer = setTimeout(update, self.options.ProgressInterval); - } - }; -}; + t.wrap = u; + var h = "suspendedStart", + f = "suspendedYield", + p = "executing", + d = "completed", + v = {}; -var getFileSize = function (api, params, callback) { - var size; - if (typeof params.Body === 'string') { - params.Body = new Blob([params.Body], { type: 'text/plain' }); - } else if (params.Body instanceof ArrayBuffer) { - params.Body = new Blob([params.Body]); - } - if (params.Body && (params.Body instanceof Blob || params.Body.toString() === '[object File]' || params.Body.toString() === '[object Blob]')) { - size = params.Body.size; - } else { - callback(util.error(new Error('params body format error, Only allow File|Blob|String.'))); - return; - } - params.ContentLength = size; - callback(null, size); -}; + function y() {} -// 获取调正的时间戳 -var getSkewTime = function (offset) { - return Date.now() + (offset || 0); -}; + function g() {} -var error = function (err, opt) { - var sourceErr = err; - err.message = err.message || null; + function m() {} - if (typeof opt === 'string') { - err.error = opt; - err.message = opt; - } else if (typeof opt === 'object' && opt !== null) { - extend(err, opt); - if (opt.code || opt.name) err.code = opt.code || opt.name; - if (opt.message) err.message = opt.message; - if (opt.stack) err.stack = opt.stack; - } + var w = {}; + w[i] = function () { + return this; + }, (o = (o = Object.getPrototypeOf) && o(o(x([])))) && o !== r && n.call(o, i) && (w = o); + var b = m.prototype = y.prototype = Object.create(w); - if (typeof Object.defineProperty === 'function') { - Object.defineProperty(err, 'name', { writable: true, enumerable: false }); - Object.defineProperty(err, 'message', { enumerable: true }); - } + function S(t) { + ["next", "throw", "return"].forEach(function (e) { + c(t, e, function (t) { + return this._invoke(e, t); + }); + }); + } + + function E(t, e) { + var r; + + this._invoke = function (o, i) { + function a() { + return new e(function (r, a) { + !function r(o, i, a, s) { + if ("throw" !== (o = l(t[o], t, i)).type) { + var c = o.arg; + return (i = c.value) && "object" == _typeof(i) && n.call(i, "__await") ? e.resolve(i.__await).then(function (t) { + r("next", t, a, s); + }, function (t) { + r("throw", t, a, s); + }) : e.resolve(i).then(function (t) { + c.value = t, a(c); + }, function (t) { + return r("throw", t, a, s); + }); + } - err.name = opt && opt.name || err.name || err.code || 'Error'; - if (!err.code) err.code = err.name; - if (!err.error) err.error = clone(sourceErr); // 兼容老的错误格式 + s(o.arg); + }(o, i, r, a); + }); + } - return err; -}; + return r = r ? r.then(a, a) : a(); + }; + } -var isWebWorker = function () { - // 有限判断 worker 环境的 constructor name 其次用 worker 独有的 FileReaderSync 兜底 详细参考 https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Using_web_workers - return typeof globalThis === 'object' && (globalThis.constructor.name === 'DedicatedWorkerGlobalScope' || globalThis.FileReaderSync); -}; + function I(t) { + var e = { + tryLoc: t[0] + }; + 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); + } + + function O(t) { + var e = t.completion || {}; + e.type = "normal", delete e.arg, t.completion = e; + } + + function k(t) { + this.tryEntries = [{ + tryLoc: "root" + }], t.forEach(I, this), this.reset(!0); + } + + function x(t) { + if (t) { + if (r = t[i]) return r.call(t); + if ("function" == typeof t.next) return t; + + if (!isNaN(t.length)) { + var r, + o = -1; + return (r = function r() { + for (; ++o < t.length;) { + if (n.call(t, o)) return r.value = t[o], r.done = !1, r; + } + + return r.value = e, r.done = !0, r; + }).next = r; + } + } -var isNode = function () { - // 得兜底 web worker 环境中 webpack 用了 process 插件之类的情况 - return typeof window !== 'object' && typeof process === 'object' && "function" === 'function' && !isWebWorker(); -}; + return { + next: C + }; + } -var isCIHost = function (url) { - return (/^https?:\/\/([^/]+\.)?ci\.[^/]+/.test(url) - ); -}; + function C() { + return { + value: e, + done: !0 + }; + } -var util = { - noop: noop, - formatParams: formatParams, - apiWrapper: apiWrapper, - xml2json: xml2json, - json2xml: json2xml, - md5: md5, - clearKey: clearKey, - fileSlice: fileSlice, - getBodyMd5: getBodyMd5, - getFileMd5: getFileMd5, - binaryBase64: binaryBase64, - extend: extend, - isArray: isArray, - isInArray: isInArray, - makeArray: makeArray, - each: each, - map: map, - filter: filter, - clone: clone, - attr: attr, - uuid: uuid, - camSafeUrlEncode: camSafeUrlEncode, - throttleOnProgress: throttleOnProgress, - getFileSize: getFileSize, - getSkewTime: getSkewTime, - error: error, - obj2str: obj2str, - getAuth: getAuth, - parseSelectPayload: parseSelectPayload, - getSourceParams: getSourceParams, - isBrowser: true, - isNode: isNode, - isCIHost: isCIHost -}; + return ((g.prototype = b.constructor = m).constructor = g).displayName = c(m, s, "GeneratorFunction"), t.isGeneratorFunction = function (t) { + return !!(t = "function" == typeof t && t.constructor) && (t === g || "GeneratorFunction" === (t.displayName || t.name)); + }, t.mark = function (t) { + return Object.setPrototypeOf ? Object.setPrototypeOf(t, m) : (t.__proto__ = m, c(t, s, "GeneratorFunction")), t.prototype = Object.create(b), t; + }, t.awrap = function (t) { + return { + __await: t + }; + }, S(E.prototype), E.prototype[a] = function () { + return this; + }, t.AsyncIterator = E, t.async = function (e, r, n, o, i) { + void 0 === i && (i = Promise); + var a = new E(u(e, r, n, o), i); + return t.isGeneratorFunction(r) ? a : a.next().then(function (t) { + return t.done ? t.value : a.next(); + }); + }, S(b), c(b, s, "Generator"), b[i] = function () { + return this; + }, b.toString = function () { + return "[object Generator]"; + }, t.keys = function (t) { + var e, + r = []; + + for (e in t) { + r.push(e); + } -module.exports = util; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + return r.reverse(), function e() { + for (; r.length;) { + var n = r.pop(); + if (n in t) return e.value = n, e.done = !1, e; + } -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { + return e.done = !0, e; + }; + }, t.values = x, k.prototype = { + constructor: k, + reset: function reset(t) { + if (this.prev = 0, this.next = 0, this.sent = this._sent = e, this.done = !1, this.delegate = null, this.method = "next", this.arg = e, this.tryEntries.forEach(O), !t) for (var r in this) { + "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = e); + } + }, + stop: function stop() { + this.done = !0; + var t = this.tryEntries[0].completion; + if ("throw" === t.type) throw t.arg; + return this.rval; + }, + dispatchException: function dispatchException(t) { + if (this.done) throw t; + var r = this; + + function o(n, o) { + return s.type = "throw", s.arg = t, r.next = n, o && (r.method = "next", r.arg = e), !!o; + } + + for (var i = this.tryEntries.length - 1; 0 <= i; --i) { + var a = this.tryEntries[i], + s = a.completion; + if ("root" === a.tryLoc) return o("end"); + + if (a.tryLoc <= this.prev) { + var c = n.call(a, "catchLoc"), + u = n.call(a, "finallyLoc"); + + if (c && u) { + if (this.prev < a.catchLoc) return o(a.catchLoc, !0); + if (this.prev < a.finallyLoc) return o(a.finallyLoc); + } else if (c) { + if (this.prev < a.catchLoc) return o(a.catchLoc, !0); + } else { + if (!u) throw new Error("try statement without catch or finally"); + if (this.prev < a.finallyLoc) return o(a.finallyLoc); + } + } + } + }, + abrupt: function abrupt(t, e) { + for (var r = this.tryEntries.length - 1; 0 <= r; --r) { + var o = this.tryEntries[r]; -"use strict"; + if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { + var i = o; + break; + } + } + var a = (i = i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc ? null : i) ? i.completion : {}; + return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, v) : this.complete(a); + }, + complete: function complete(t, e) { + if ("throw" === t.type) throw t.arg; + return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), v; + }, + finish: function finish(t) { + for (var e = this.tryEntries.length - 1; 0 <= e; --e) { + var r = this.tryEntries[e]; + if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), O(r), v; + } + }, + "catch": function _catch(t) { + for (var e = this.tryEntries.length - 1; 0 <= e; --e) { + var r = this.tryEntries[e]; + + if (r.tryLoc === t) { + var n, + o = r.completion; + return "throw" === o.type && (n = o.arg, O(r)), n; + } + } -/** - * "Shallow freezes" an object to render it immutable. - * Uses `Object.freeze` if available, - * otherwise the immutability is only in the type. - * - * Is used to create "enum like" objects. - * - * @template T - * @param {T} object the object to freeze - * @param {Pick = Object} oc `Object` by default, - * allows to inject custom object constructor for tests - * @returns {Readonly} - * - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze - */ -function freeze(object, oc) { - if (oc === undefined) { - oc = Object - } - return oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object -} + throw new Error("illegal catch attempt"); + }, + delegateYield: function delegateYield(t, r, n) { + return this.delegate = { + iterator: x(t), + resultName: r, + nextLoc: n + }, "next" === this.method && (this.arg = e), v; + } + }, t; + }(t.exports); -/** - * Since we can not rely on `Object.assign` we provide a simplified version - * that is sufficient for our needs. - * - * @param {Object} target - * @param {Object | null | undefined} source - * - * @returns {Object} target - * @throws TypeError if target is not an object - * - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign - */ -function assign(target, source) { - if (target === null || typeof target !== 'object') { - throw new TypeError('target is not an object') - } - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - return target -} + try { + regeneratorRuntime = t; + } catch (e) { + Function("r", "regeneratorRuntime = r")(t); + } + }(r = { + exports: {} + }), r.exports); + return function () { + function r(t) { + !function (t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function"); + }(this, r), this.version = "1.0.0"; + var e = Array.prototype.map, + n = Array.prototype.forEach; + t && (this.hasher = t), this.each = function (t, e, r) { + if (null != t) if (n && t.forEach === n) t.forEach(e, r);else if (t.length === +t.length) { + for (var o = 0, i = t.length; o < i; o++) { + if (e.call(r, t[o], o, t) === {}) return; + } + } else for (var a in t) { + if (t.hasOwnProperty(a) && e.call(r, t[a], a, t) === {}) return; + } + }, this.map = function (t, r, n) { + var o = []; + return null == t ? o : e && t.map === e ? t.map(r, n) : (this.each(t, function (t, e, i) { + o[o.length] = r.call(n, t, e, i); + }), o); + }; + } + + var o, i, a, s; + return o = r, (i = [{ + key: "getQimei36", + value: function value(t, e) { + var r = this; + this.getHid().then(function (n) { + var o = "3BJr" + t.substring(0, 2) + (n && n.substring(3, 7)), + i = new XMLHttpRequest(); + i.open("POST", "https://snowflake.qq.com/ola/h5", !0), i.setRequestHeader("Content-Type", "application/json"), i.onreadystatechange = function () { + if (i.readyState == XMLHttpRequest.DONE && 200 == i.status) try { + e && e(JSON.parse(i.responseText)); + } catch (t) { + e(null); + } + }, i.send(JSON.stringify({ + appKey: t, + hid: n, + sign: o, + version: r.version + })); + }); + } + }, { + key: "getHid", + value: (a = n.mark(function t() { + var e, r; + return n.wrap(function (t) { + for (;;) { + switch (t.prev = t.next) { + case 0: + return (e = []).push((n = void 0, (n = [Math.floor(window.screen.width * window.devicePixelRatio), Math.floor(window.screen.height * window.devicePixelRatio)]).sort().reverse(), n.join("x"))), e.push((n = void 0, (n = [Math.floor(window.screen.availWidth * window.devicePixelRatio), Math.floor(window.screen.availHeight * window.devicePixelRatio)]).sort().reverse(), n.join("x"))), e.push(navigator.deviceMemory), e.push(!!window.sessionStorage), e.push(!!window.indexedDB), e.push(navigator.productSub), e.push(navigator.hardwareConcurrency), e.push(this.getWebglVendorAndRenderer()), e.push(new Date().getTimezoneOffset()), t.next = 12, this.getFactor(); + + case 12: + if (r = t.sent, e.push(r), this.hasher) return t.abrupt("return", this.hasher(e.join("###"), 31)); + t.next = 18; + break; + + case 18: + return t.abrupt("return", this.x64hash128(e.join("###"), 31)); + + case 19: + case "end": + return t.stop(); + } + } -/** - * All mime types that are allowed as input to `DOMParser.parseFromString` - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN - * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec - * @see DOMParser.prototype.parseFromString - */ -var MIME_TYPE = freeze({ - /** - * `text/html`, the only mime type that triggers treating an XML document as HTML. - * - * @see DOMParser.SupportedType.isHTML - * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration - * @see https://en.wikipedia.org/wiki/HTML Wikipedia - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN - * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec - */ - HTML: 'text/html', + var n; + }, t, this); + }), s = function s() { + var e = this, + r = arguments; + return new Promise(function (n, o) { + var i = a.apply(e, r); - /** - * Helper method to check a mime type if it indicates an HTML document - * - * @param {string} [value] - * @returns {boolean} - * - * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration - * @see https://en.wikipedia.org/wiki/HTML Wikipedia - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN - * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring */ - isHTML: function (value) { - return value === MIME_TYPE.HTML - }, + function s(e) { + t(i, n, o, s, c, "next", e); + } - /** - * `application/xml`, the standard mime type for XML documents. - * - * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration - * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303 - * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia - */ - XML_APPLICATION: 'application/xml', + function c(e) { + t(i, n, o, s, c, "throw", e); + } - /** - * `text/html`, an alias for `application/xml`. - * - * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303 - * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration - * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia - */ - XML_TEXT: 'text/xml', + s(void 0); + }); + }, function () { + return s.apply(this, arguments); + }) + }, { + key: "getUserAgent", + value: function value() { + return navigator.userAgent; + } + }, { + key: "getNative", + value: function value() { + var t = this; + this.getHid().then(function (e) { + JSInterface.callback(t.version, e, t.getUserAgent()); + }); + } + }, { + key: "getWebglVendorAndRenderer", + value: function value() { + try { + var t = function () { + var t = document.createElement("canvas"), + e = null; + + try { + e = t.getContext("webgl") || t.getContext("experimental-webgl"); + } catch (t) {} + + return e || null; + }(), + e = t.getExtension("WEBGL_debug_renderer_info"), + r = [t.getParameter(e.UNMASKED_VENDOR_WEBGL), t.getParameter(e.UNMASKED_RENDERER_WEBGL)].join("~"), + n = t.getExtension("WEBGL_lose_context"); + + return null != n && n.loseContext(), r; + } catch (t) { + return null; + } + } + }, { + key: "getFactor", + value: function value() { + return new Promise(function (t, e) { + var r = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection; + r ? function () { + var e = new r({ + iceServers: [] + }); + e.createDataChannel("", { + reliable: !1 + }), e.onicecandidate = function (t) { + t.candidate && i("a=".concat(t.candidate.candidate)); + }, e.createOffer(function (t) { + i(t.sdp), e.setLocalDescription(t); + }, function (t) {}); + var n = Object.create(null); + + function o(e) { + if (!(e in n)) { + n[e] = !0; + + for (var r = Object.keys(n).filter(function (t) { + return n[t]; + }), o = 0; o < r.length; o++) { + 16 < r[o].length && (r.splice(o, 1), o--); + } - /** - * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace, - * but is parsed as an XML document. - * - * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration - * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec - * @see https://en.wikipedia.org/wiki/XHTML Wikipedia - */ - XML_XHTML_APPLICATION: 'application/xhtml+xml', + t(r[0]); + } + } - /** - * `image/svg+xml`, - * - * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration - * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1 - * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia - */ - XML_SVG_IMAGE: 'image/svg+xml', -}) + function i(t) { + (0 < arguments.length && void 0 !== t ? t : "").split("\r\n").forEach(function (t, e, r) { + var n, i; + ~t.indexOf("a=candidate") ? (i = (n = t.split(" "))[4], "host" === n[7] && o(i)) : ~t.indexOf("c=") && o(t.split(" ")[2]); + }); + } -/** - * Namespaces that are used in this code base. - * - * @see http://www.w3.org/TR/REC-xml-names - */ -var NAMESPACE = freeze({ - /** - * The XHTML namespace. - * - * @see http://www.w3.org/1999/xhtml - */ - HTML: 'http://www.w3.org/1999/xhtml', + n["0.0.0.0"] = !1; + }() : t(null); + }); + } + }, { + key: "x64hash128", + value: function value(t, e) { + for (var r = function r(t, e) { + t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]], e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]]; + var r = [0, 0, 0, 0]; + return r[3] += t[3] + e[3], r[2] += r[3] >>> 16, r[3] &= 65535, r[2] += t[2] + e[2], r[1] += r[2] >>> 16, r[2] &= 65535, r[1] += t[1] + e[1], r[0] += r[1] >>> 16, r[1] &= 65535, r[0] += t[0] + e[0], r[0] &= 65535, [r[0] << 16 | r[1], r[2] << 16 | r[3]]; + }, n = function n(t, e) { + t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]], e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]]; + var r = [0, 0, 0, 0]; + return r[3] += t[3] * e[3], r[2] += r[3] >>> 16, r[3] &= 65535, r[2] += t[2] * e[3], r[1] += r[2] >>> 16, r[2] &= 65535, r[2] += t[3] * e[2], r[1] += r[2] >>> 16, r[2] &= 65535, r[1] += t[1] * e[3], r[0] += r[1] >>> 16, r[1] &= 65535, r[1] += t[2] * e[2], r[0] += r[1] >>> 16, r[1] &= 65535, r[1] += t[3] * e[1], r[0] += r[1] >>> 16, r[1] &= 65535, r[0] += t[0] * e[3] + t[1] * e[2] + t[2] * e[1] + t[3] * e[0], r[0] &= 65535, [r[0] << 16 | r[1], r[2] << 16 | r[3]]; + }, o = function o(t, e) { + return 32 == (e %= 64) ? [t[1], t[0]] : e < 32 ? [t[0] << e | t[1] >>> 32 - e, t[1] << e | t[0] >>> 32 - e] : [t[1] << (e -= 32) | t[0] >>> 32 - e, t[0] << e | t[1] >>> 32 - e]; + }, i = function i(t, e) { + return 0 == (e %= 64) ? t : e < 32 ? [t[0] << e | t[1] >>> 32 - e, t[1] << e] : [t[1] << e - 32, 0]; + }, a = function a(t, e) { + return [t[0] ^ e[0], t[1] ^ e[1]]; + }, s = function s(t) { + return t = a(t, [0, t[0] >>> 1]), t = n(t, [4283543511, 3981806797]), t = a(t, [0, t[0] >>> 1]), t = n(t, [3301882366, 444984403]), a(t, [0, t[0] >>> 1]); + }, c = (t = t || "").length % 16, u = t.length - c, l = [0, e = e || 0], h = [0, e], f = [0, 0], p = [0, 0], d = [2277735313, 289559509], v = [1291169091, 658871167], y = 0; y < u; y += 16) { + f = [255 & t.charCodeAt(y + 4) | (255 & t.charCodeAt(y + 5)) << 8 | (255 & t.charCodeAt(y + 6)) << 16 | (255 & t.charCodeAt(y + 7)) << 24, 255 & t.charCodeAt(y) | (255 & t.charCodeAt(y + 1)) << 8 | (255 & t.charCodeAt(y + 2)) << 16 | (255 & t.charCodeAt(y + 3)) << 24], p = [255 & t.charCodeAt(y + 12) | (255 & t.charCodeAt(y + 13)) << 8 | (255 & t.charCodeAt(y + 14)) << 16 | (255 & t.charCodeAt(y + 15)) << 24, 255 & t.charCodeAt(y + 8) | (255 & t.charCodeAt(y + 9)) << 8 | (255 & t.charCodeAt(y + 10)) << 16 | (255 & t.charCodeAt(y + 11)) << 24], f = o(f = n(f, d), 31), f = n(f, v), l = r(l = o(l = a(l, f), 27), h), l = r(n(l, [0, 5]), [0, 1390208809]), p = o(p = n(p, v), 33), p = n(p, d), h = r(h = o(h = a(h, p), 31), l), h = r(n(h, [0, 5]), [0, 944331445]); + } - /** - * Checks if `uri` equals `NAMESPACE.HTML`. - * - * @param {string} [uri] - * - * @see NAMESPACE.HTML - */ - isHTML: function (uri) { - return uri === NAMESPACE.HTML - }, + switch (f = [0, 0], p = [0, 0], c) { + case 15: + p = a(p, i([0, t.charCodeAt(y + 14)], 48)); - /** - * The SVG namespace. - * - * @see http://www.w3.org/2000/svg - */ - SVG: 'http://www.w3.org/2000/svg', + case 14: + p = a(p, i([0, t.charCodeAt(y + 13)], 40)); - /** - * The `xml:` namespace. - * - * @see http://www.w3.org/XML/1998/namespace - */ - XML: 'http://www.w3.org/XML/1998/namespace', + case 13: + p = a(p, i([0, t.charCodeAt(y + 12)], 32)); - /** - * The `xmlns:` namespace - * - * @see https://www.w3.org/2000/xmlns/ - */ - XMLNS: 'http://www.w3.org/2000/xmlns/', -}) + case 12: + p = a(p, i([0, t.charCodeAt(y + 11)], 24)); -exports.assign = assign; -exports.freeze = freeze; -exports.MIME_TYPE = MIME_TYPE; -exports.NAMESPACE = NAMESPACE; + case 11: + p = a(p, i([0, t.charCodeAt(y + 10)], 16)); + + case 10: + p = a(p, i([0, t.charCodeAt(y + 9)], 8)); + case 9: + p = a(p, [0, t.charCodeAt(y + 8)]), p = o(p = n(p, v), 33), p = n(p, d), h = a(h, p); + + case 8: + f = a(f, i([0, t.charCodeAt(y + 7)], 56)); + + case 7: + f = a(f, i([0, t.charCodeAt(y + 6)], 48)); + + case 6: + f = a(f, i([0, t.charCodeAt(y + 5)], 40)); + + case 5: + f = a(f, i([0, t.charCodeAt(y + 4)], 32)); + + case 4: + f = a(f, i([0, t.charCodeAt(y + 3)], 24)); + + case 3: + f = a(f, i([0, t.charCodeAt(y + 2)], 16)); + + case 2: + f = a(f, i([0, t.charCodeAt(y + 1)], 8)); + + case 1: + f = a(f, [t.charCodeAt(y)]), f = o(f = n(f, d), 31), f = n(f, v), l = a(l, f); + } + + return l = a(l, [0, t.length]), h = r(h = a(h, [0, t.length]), l = r(l, h)), l = s(l), h = r(h = s(h), l = r(l, h)), ("00000000" + (l[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (l[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (h[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h[1] >>> 0).toString(16)).slice(-8); + } + }]) && e(o.prototype, i), r; + }(); + }(); + }), + H = "logid_start", + z = "4.5.6-web"; + + return function (r) { + function n(t) { + var e = r.call(this, t) || this; + e.qimei36 = "", e.uselessCycleTaskNum = 0, e.underWeakNet = !1, e.send = function (t, r, n) { + e.storage.setItem(a, Date.now().toString()), e.network.post(e.uploadUrl || e.strategy.getUploadUrl(), t.data).then(function (n) { + var o; + 100 == (null === (o = null == n ? void 0 : n.data) || void 0 === o ? void 0 : o.result) ? e.delayTime = 1e3 * n.data.delayTime : e.delayTime = 0, r && r(t.data), t.data.events.forEach(function (t) { + e.store.removeEvent(t).then(function () { + e.removeSendingId(p(t.mapValue)); + }); + }), e.doCustomCycleTask(); + })["catch"](function (r) { + var o = t.data.events; + e.errorReport.reportError(r.code ? r.code.toString() : "600", r.message), n && n(t.data); + var i = JSON.parse(e.storage.getItem(s)); + o.forEach(function (t) { + i && -1 != i.indexOf(p(t)) && e.store.insertEvent(t, function (t, r) { + t && e.errorReport.reportError("604", "insertEvent fail!"); + }), e.removeSendingId(p(t)); + }), e.monitorUploadFailed(); + }); + }; + var n, + o, + i = b(); + return e.isUnderIE8 = i > 0 && i < 8, e.isUnderIE8 || (e.isUnderIE = i > 0, t.needInitQimei && e.initQimei(t.appkey), e.network = new Q(t), e.storage = new K(t.appkey), e.initCommonInfo(t), e.store = new _(t.appkey, e.storage), e.errorReport = new y(e.config, e.commonInfo, "web", e.network), e.strategy = new g(e.config, e.commonInfo, e.storage, e.network), e.logidStartTime = e.storage.getItem(H), e.logidStartTime || (e.logidStartTime = Date.now().toString(), e.storage.setItem(H, e.logidStartTime)), n = e.logidStartTime, o = Date.now() - Number.parseFloat(n), Math.floor(o / 864e5) >= 365 && e.storage.clear(), e.initSession(t), e.onDirectUserAction("rqd_js_init", {}), setTimeout(function () { + return e.lifeCycle.emit("init"); + }, 0), e.initDelayTime = t.delay ? t.delay : 1e3, e.cycleTask(e.initDelayTime)), e; + } + + return function (e, r) { + if ("function" != typeof r && null !== r) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + + function n() { + this.constructor = e; + } + + _t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n()); + }(n, r), n.prototype.initQimei = function (t) { + var e = this; + new W().getQimei36(t, function (t) { + e.qimei36 = t.q36; + }); + }, n.prototype.initSession = function (t) { + var e = 18e5; + t.sessionDuration && t.sessionDuration > 3e4 && (e = t.sessionDuration), this.beaconSession = new w(this.storage, e, this); + }, n.prototype.initCommonInfo = function (t) { + var e = Number(this.storage.getItem(a)); + + try { + var r = JSON.parse(this.storage.getItem(s)); + (Date.now() - e > 3e4 || !r) && this.storage.setItem(s, JSON.stringify([])); + } catch (t) {} + + t.uploadUrl && (this.uploadUrl = t.uploadUrl + "?appkey=" + t.appkey); + var n = [window.screen.width, window.screen.height]; + window.devicePixelRatio && n.push(window.devicePixelRatio), this.commonInfo = { + deviceId: this.storage.createDeviceId(), + language: navigator && navigator.language || "zh_CN", + query: window.location.search, + userAgent: navigator.userAgent, + pixel: n.join("*"), + channelID: t.channelID ? String(t.channelID) : "", + openid: t.openid ? String(t.openid) : "", + unid: t.unionid ? String(t.unionid) : "", + sdkVersion: z + }, this.config.appVersion = t.versionCode ? String(t.versionCode) : "", this.config.strictMode = t.strictMode; + }, n.prototype.cycleTask = function (t) { + var e = this; + this.intervalID = window.setInterval(function () { + e.store.getEvents().then(function (t) { + var r = [], + n = JSON.parse(e.storage.getItem(s)); + n || (n = []), t && t.forEach(function (t) { + var e = p(t.mapValue); + -1 == n.indexOf(e) && (r.push(t), n.push(e)); + }), 0 != r.length && (e.storage.setItem(s, JSON.stringify(n)), e._normalLogPipeline(e.assembleData(r))); + })["catch"](function (t) {}); + }, t); + }, n.prototype.onReport = function (t, e, r) { + var n = this; + if (this.isUnderIE8) this.errorReport.reportError("601", "UnderIE8");else { + var o = this.generateData(t, e, r); + if (r && 0 == this.delayTime && !this.underWeakNet) this._normalLogPipeline(this.assembleData(o));else { + var i = o.shift(); + i && this.store.insertEvent(i, function (t) { + t && n.errorReport.reportError("604", "insertEvent fail!"); + })["catch"](function (t) { + n._normalLogPipeline(n.assembleData(o)); + }); + } + } + }, n.prototype.onSendBeacon = function (t, e) { + if (this.isUnderIE) this.errorReport.reportError("605", "UnderIE");else { + var r = this.assembleData(this.generateData(t, e, !0)); + "function" == typeof navigator.sendBeacon && navigator.sendBeacon(this.uploadUrl || this.strategy.getUploadUrl(), JSON.stringify(r)); + } + }, n.prototype.generateData = function (t, r, n) { + var o = [], + i = "4.5.6-web_" + (n ? "direct_log_id" : "normal_log_id"), + a = Number(this.storage.getItem(i)); + return a = a || 1, r = _e(_e({}, r), { + A99: n ? "Y" : "N", + A100: a.toString(), + A72: z, + A88: this.logidStartTime + }), a++, this.storage.setItem(i, a.toString()), o.push({ + eventCode: t, + eventTime: Date.now().toString(), + mapValue: h(r, this.config.strictMode) + }), o; + }, n.prototype.assembleData = function (t) { + var r = this.beaconSession.getSession(); + return { + appVersion: this.config.appVersion ? f(this.config.appVersion) : "", + sdkId: "js", + sdkVersion: z, + mainAppKey: this.config.appkey, + platformId: 3, + common: h(_e(_e({}, this.additionalParams), { + A2: this.commonInfo.deviceId, + A8: this.commonInfo.openid, + A12: this.commonInfo.language, + A17: this.commonInfo.pixel, + A23: this.commonInfo.channelID, + A50: this.commonInfo.unid, + A76: r.sessionId, + A101: this.commonInfo.userAgent, + A102: window.location.href, + A104: document.referrer, + A119: this.commonInfo.query, + A153: this.qimei36 + }), !1), + events: t + }; + }, n.prototype.monitorUploadFailed = function () { + this.uselessCycleTaskNum++, this.uselessCycleTaskNum >= 5 && (window.clearInterval(this.intervalID), this.cycleTask(6e4), this.underWeakNet = !0); + }, n.prototype.doCustomCycleTask = function () { + this.uselessCycleTaskNum >= 5 && (window.clearInterval(this.intervalID), this.cycleTask(this.initDelayTime)), this.uselessCycleTaskNum = 0, this.underWeakNet = !1; + }, n; + }(v); +}); +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/_webpack@4.46.0@webpack/buildin/global.js */ "./node_modules/_webpack@4.46.0@webpack/buildin/global.js"))) /***/ }), -/* 2 */ -/***/ (function(module, exports) { -// shim for using process in browser -var process = module.exports = {}; +/***/ "./lib/crypto.js": +/*!***********************!*\ + !*** ./lib/crypto.js ***! + \***********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. +/* WEBPACK VAR INJECTION */(function(module) {function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -var cachedSetTimeout; -var cachedClearTimeout; +/* + CryptoJS v3.1.2 + code.google.com/p/crypto-js + (c) 2009-2013 by Jeff Mott. All rights reserved. + code.google.com/p/crypto-js/wiki/License + */ +var CryptoJS = CryptoJS || function (g, l) { + var e = {}, + d = e.lib = {}, + m = function m() {}, + k = d.Base = { + extend: function extend(a) { + m.prototype = this; + var c = new m(); + a && c.mixIn(a); + c.hasOwnProperty("init") || (c.init = function () { + c.$super.init.apply(this, arguments); + }); + c.init.prototype = c; + c.$super = this; + return c; + }, + create: function create() { + var a = this.extend(); + a.init.apply(a, arguments); + return a; + }, + init: function init() {}, + mixIn: function mixIn(a) { + for (var c in a) { + a.hasOwnProperty(c) && (this[c] = a[c]); + } -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; + a.hasOwnProperty("toString") && (this.toString = a.toString); + }, + clone: function clone() { + return this.init.prototype.extend(this); } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; + }, + p = d.WordArray = k.extend({ + init: function init(a, c) { + a = this.words = a || []; + this.sigBytes = c != l ? c : 4 * a.length; + }, + toString: function toString(a) { + return (a || n).stringify(this); + }, + concat: function concat(a) { + var c = this.words, + q = a.words, + f = this.sigBytes; + a = a.sigBytes; + this.clamp(); + if (f % 4) for (var b = 0; b < a; b++) { + c[f + b >>> 2] |= (q[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((f + b) % 4); + } else if (65535 < q.length) for (b = 0; b < a; b += 4) { + c[f + b >>> 2] = q[b >>> 2]; + } else c.push.apply(c, q); + this.sigBytes += a; + return this; + }, + clamp: function clamp() { + var a = this.words, + c = this.sigBytes; + a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4); + a.length = g.ceil(c / 4); + }, + clone: function clone() { + var a = k.clone.call(this); + a.words = this.words.slice(0); + return a; + }, + random: function random(a) { + for (var c = [], b = 0; b < a; b += 4) { + c.push(4294967296 * g.random() | 0); + } + + return new p.init(c, a); } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); + }), + b = e.enc = {}, + n = b.Hex = { + stringify: function stringify(a) { + var c = a.words; + a = a.sigBytes; + + for (var b = [], f = 0; f < a; f++) { + var d = c[f >>> 2] >>> 24 - 8 * (f % 4) & 255; + b.push((d >>> 4).toString(16)); + b.push((d & 15).toString(16)); + } + + return b.join(""); + }, + parse: function parse(a) { + for (var c = a.length, b = [], f = 0; f < c; f += 2) { + b[f >>> 3] |= parseInt(a.substr(f, 2), 16) << 24 - 4 * (f % 8); + } + + return new p.init(b, c / 2); } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); + }, + j = b.Latin1 = { + stringify: function stringify(a) { + var c = a.words; + a = a.sigBytes; + + for (var b = [], f = 0; f < a; f++) { + b.push(String.fromCharCode(c[f >>> 2] >>> 24 - 8 * (f % 4) & 255)); + } + + return b.join(""); + }, + parse: function parse(a) { + for (var c = a.length, b = [], f = 0; f < c; f++) { + b[f >>> 2] |= (a.charCodeAt(f) & 255) << 24 - 8 * (f % 4); + } + + return new p.init(b, c); } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } + }, + h = b.Utf8 = { + stringify: function stringify(a) { + try { + return decodeURIComponent(escape(j.stringify(a))); + } catch (c) { + throw Error("Malformed UTF-8 data"); + } + }, + parse: function parse(a) { + return j.parse(unescape(encodeURIComponent(a))); } + }, + r = d.BufferedBlockAlgorithm = k.extend({ + reset: function reset() { + this._data = new p.init(); + this._nDataBytes = 0; + }, + _append: function _append(a) { + "string" == typeof a && (a = h.parse(a)); + this._data.concat(a); -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); + this._nDataBytes += a.sigBytes; + }, + _process: function _process(a) { + var c = this._data, + b = c.words, + f = c.sigBytes, + d = this.blockSize, + e = f / (4 * d), + e = a ? g.ceil(e) : g.max((e | 0) - this._minBufferSize, 0); + a = e * d; + f = g.min(4 * a, f); + + if (a) { + for (var k = 0; k < a; k += d) { + this._doProcessBlock(b, k); + } + + k = b.splice(0, a); + c.sigBytes -= f; + } + + return new p.init(k, f); + }, + clone: function clone() { + var a = k.clone.call(this); + a._data = this._data.clone(); + return a; + }, + _minBufferSize: 0 + }); + + d.Hasher = r.extend({ + cfg: k.extend(), + init: function init(a) { + this.cfg = this.cfg.extend(a); + this.reset(); + }, + reset: function reset() { + r.reset.call(this); + + this._doReset(); + }, + update: function update(a) { + this._append(a); + + this._process(); + + return this; + }, + finalize: function finalize(a) { + a && this._append(a); + return this._doFinalize(); + }, + blockSize: 16, + _createHelper: function _createHelper(a) { + return function (b, d) { + return new a.init(d).finalize(b); + }; + }, + _createHmacHelper: function _createHmacHelper(a) { + return function (b, d) { + return new s.HMAC.init(a, d).finalize(b); + }; } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); + }); + var s = e.algo = {}; + return e; +}(Math); + +(function () { + var g = CryptoJS, + l = g.lib, + e = l.WordArray, + d = l.Hasher, + m = [], + l = g.algo.SHA1 = d.extend({ + _doReset: function _doReset() { + this._hash = new e.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]); + }, + _doProcessBlock: function _doProcessBlock(d, e) { + for (var b = this._hash.words, n = b[0], j = b[1], h = b[2], g = b[3], l = b[4], a = 0; 80 > a; a++) { + if (16 > a) m[a] = d[e + a] | 0;else { + var c = m[a - 3] ^ m[a - 8] ^ m[a - 14] ^ m[a - 16]; + m[a] = c << 1 | c >>> 31; + } + c = (n << 5 | n >>> 27) + l + m[a]; + c = 20 > a ? c + ((j & h | ~j & g) + 1518500249) : 40 > a ? c + ((j ^ h ^ g) + 1859775393) : 60 > a ? c + ((j & h | j & g | h & g) - 1894007588) : c + ((j ^ h ^ g) - 899497514); + l = g; + g = h; + h = j << 30 | j >>> 2; + j = n; + n = c; + } + + b[0] = b[0] + n | 0; + b[1] = b[1] + j | 0; + b[2] = b[2] + h | 0; + b[3] = b[3] + g | 0; + b[4] = b[4] + l | 0; + }, + _doFinalize: function _doFinalize() { + var d = this._data, + e = d.words, + b = 8 * this._nDataBytes, + g = 8 * d.sigBytes; + e[g >>> 5] |= 128 << 24 - g % 32; + e[(g + 64 >>> 9 << 4) + 14] = Math.floor(b / 4294967296); + e[(g + 64 >>> 9 << 4) + 15] = b; + d.sigBytes = 4 * e.length; + + this._process(); + + return this._hash; + }, + clone: function clone() { + var e = d.clone.call(this); + e._hash = this._hash.clone(); + return e; } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } + }); + g.SHA1 = d._createHelper(l); + g.HmacSHA1 = d._createHmacHelper(l); +})(); + +(function () { + var g = CryptoJS, + l = g.enc.Utf8; + g.algo.HMAC = g.lib.Base.extend({ + init: function init(e, d) { + e = this._hasher = new e.init(); + "string" == typeof d && (d = l.parse(d)); + var g = e.blockSize, + k = 4 * g; + d.sigBytes > k && (d = e.finalize(d)); + d.clamp(); + + for (var p = this._oKey = d.clone(), b = this._iKey = d.clone(), n = p.words, j = b.words, h = 0; h < g; h++) { + n[h] ^= 1549556828, j[h] ^= 909522486; + } + + p.sigBytes = b.sigBytes = k; + this.reset(); + }, + reset: function reset() { + var e = this._hasher; + e.reset(); + e.update(this._iKey); + }, + update: function update(e) { + this._hasher.update(e); + + return this; + }, + finalize: function finalize(e) { + var d = this._hasher; + e = d.finalize(e); + d.reset(); + return d.finalize(this._oKey.clone().concat(e)); } + }); +})(); + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + /** + * Base64 encoding strategy. + */ + + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function stringify(wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; // Clamp excess bits + wordArray.clamp(); // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff; + var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff; + var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff; + var triplet = byte1 << 16 | byte2 << 8 | byte3; + + for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) { + base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f)); + } + } // Add padding + + + var paddingChar = map.charAt(64); + + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function parse(base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; // Ignore padding + + var paddingChar = map.charAt(64); + + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + + if (paddingIndex != -1) { + base64StrLength = paddingIndex; + } + } // Convert + + + var words = []; + var nBytes = 0; + + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = map.indexOf(base64Str.charAt(i - 1)) << i % 4 * 2; + var bits2 = map.indexOf(base64Str.charAt(i)) >>> 6 - i % 4 * 2; + words[nBytes >>> 2] |= (bits1 | bits2) << 24 - nBytes % 4 * 8; + nBytes++; + } + } + + return WordArray.create(words, nBytes); + }, + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; +})(); + +if (( false ? undefined : _typeof(module)) === 'object') { + module.exports = CryptoJS; +} else { + window.CryptoJS = CryptoJS; } -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/_webpack@4.46.0@webpack/buildin/module.js */ "./node_modules/_webpack@4.46.0@webpack/buildin/module.js")(module))) -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; +/***/ }), + +/***/ "./lib/json2xml.js": +/*!*************************!*\ + !*** ./lib/json2xml.js ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +//copyright Ryan Day 2010 , Joscha Feth 2013 [MIT Licensed] +var element_start_char = "a-zA-Z_\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FFF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"; +var element_non_start_char = "-.0-9\xB7\u0300-\u036F\u203F\u2040"; +var element_replace = new RegExp("^([^" + element_start_char + "])|^((x|X)(m|M)(l|L))|([^" + element_start_char + element_non_start_char + "])", "g"); +var not_safe_in_xml = /[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm; + +var objKeys = function objKeys(obj) { + var l = []; + + if (obj instanceof Object) { + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + l.push(k); + } } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; + } + + return l; +}; + +var process_to_xml = function process_to_xml(node_data, options) { + var makeNode = function makeNode(name, content, attributes, level, hasSubNodes) { + var indent_value = options.indent !== undefined ? options.indent : "\t"; + var indent = options.prettyPrint ? '\n' + new Array(level).join(indent_value) : ''; + + if (options.removeIllegalNameCharacters) { + name = name.replace(element_replace, '_'); } - if (queue.length) { - drainQueue(); + + var node = [indent, '<', name, attributes || '']; + + if (content && content.length > 0) { + node.push('>'); + node.push(content); + hasSubNodes && node.push(indent); + node.push(''); + } else { + node.push('/>'); } -} -function drainQueue() { - if (draining) { - return; + return node.join(''); + }; + + return function fn(node_data, node_descriptor, level) { + var type = _typeof(node_data); + + if (Array.isArray ? Array.isArray(node_data) : node_data instanceof Array) { + type = 'array'; + } else if (node_data instanceof Date) { + type = 'date'; } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); + switch (type) { + //if value is an array create child nodes from values + case 'array': + var ret = []; + node_data.map(function (v) { + ret.push(fn(v, 1, level + 1)); //entries that are values of an array are the only ones that can be special node descriptors + }); + options.prettyPrint && ret.push('\n'); + return ret.join(''); + break; + + case 'date': + // cast dates to ISO 8601 date (soap likes it) + return node_data.toJSON ? node_data.toJSON() : node_data + ''; + break; + + case 'object': + var nodes = []; + + for (var name in node_data) { + if (node_data.hasOwnProperty(name)) { + if (node_data[name] instanceof Array) { + for (var j = 0; j < node_data[name].length; j++) { + if (node_data[name].hasOwnProperty(j)) { + nodes.push(makeNode(name, fn(node_data[name][j], 0, level + 1), null, level + 1, objKeys(node_data[name][j]).length)); + } + } + } else { + nodes.push(makeNode(name, fn(node_data[name], 0, level + 1), null, level + 1)); } + } } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); + options.prettyPrint && nodes.length > 0 && nodes.push('\n'); + return nodes.join(''); + break; + + case 'function': + return node_data(); + break; + + default: + return options.escape ? esc(node_data) : '' + node_data; } + }(node_data, 0, 0); }; -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; +var xml_header = function xml_header(standalone) { + var ret = [''); + return ret.join(''); +}; -process.listeners = function (name) { return [] } +function esc(str) { + return ('' + str).replace(/&/g, '&').replace(//g, '>').replace(/'/g, ''').replace(/"/g, '"').replace(not_safe_in_xml, ''); +} -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; +module.exports = function (obj, options) { + if (!options) { + options = { + xmlHeader: { + standalone: true + }, + prettyPrint: true, + indent: " ", + escape: true + }; + } -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; + if (typeof obj == 'string') { + try { + obj = JSON.parse(obj.toString()); + } catch (e) { + return false; + } + } + + var xmlheader = ''; + var docType = ''; + + if (options) { + if (_typeof(options) == 'object') { + // our config is an object + if (options.xmlHeader) { + // the user wants an xml header + xmlheader = xml_header(!!options.xmlHeader.standalone); + } + + if (typeof options.docType != 'undefined') { + docType = ''; + } + } else { + // our config is a boolean value, so just add xml header + xmlheader = xml_header(); + } + } + options = options || {}; + var ret = [xmlheader, options.prettyPrint && docType ? '\n' : '', docType, process_to_xml(obj, options)]; + return ret.join('').replace(/\n{2,}/g, '\n').replace(/\s+$/g, ''); +}; /***/ }), -/* 3 */ + +/***/ "./lib/md5.js": +/*!********************!*\ + !*** ./lib/md5.js ***! + \********************/ +/*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -var conventions = __webpack_require__(1); +/* WEBPACK VAR INJECTION */(function(process, global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -var NAMESPACE = conventions.NAMESPACE; +/* https://github.com/emn178/js-md5 */ +(function () { + 'use strict'; + + var ERROR = 'input is invalid type'; + var WINDOW = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object'; + var root = WINDOW ? window : {}; + + if (root.JS_MD5_NO_WINDOW) { + WINDOW = false; + } + + var WEB_WORKER = !WINDOW && (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object'; + var NODE_JS = !root.JS_MD5_NO_NODE_JS && (typeof process === "undefined" ? "undefined" : _typeof(process)) === 'object' && process.versions && process.versions.node; + + if (NODE_JS) { + root = global; + } else if (WEB_WORKER) { + root = self; + } + + var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && ( false ? undefined : _typeof(module)) === 'object' && module.exports; + var AMD = true && __webpack_require__(/*! !webpack amd options */ "./node_modules/_webpack@4.46.0@webpack/buildin/amd-options.js"); + var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined'; + var HEX_CHARS = '0123456789abcdef'.split(''); + var EXTRA = [128, 32768, 8388608, -2147483648]; + var SHIFT = [0, 8, 16, 24]; + var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64']; + var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + var blocks = [], + buffer8; + + if (ARRAY_BUFFER) { + var buffer = new ArrayBuffer(68); + buffer8 = new Uint8Array(buffer); + blocks = new Uint32Array(buffer); + } + + if (root.JS_MD5_NO_NODE_JS || !Array.isArray) { + Array.isArray = function (obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + }; + } -/** - * A prerequisite for `[].filter`, to drop elements that are empty - * @param {string} input - * @returns {boolean} - */ -function notEmptyString (input) { - return input !== '' -} -/** - * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace - * @see https://infra.spec.whatwg.org/#ascii-whitespace - * - * @param {string} input - * @returns {string[]} (can be empty) - */ -function splitOnASCIIWhitespace(input) { - // U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE - return input ? input.split(/[\t\n\f\r ]+/).filter(notEmptyString) : [] -} + if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) { + ArrayBuffer.isView = function (obj) { + return _typeof(obj) === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer; + }; + } + /** + * @method hex + * @memberof md5 + * @description Output hash as hex string + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {String} Hex string + * @example + * md5.hex('The quick brown fox jumps over the lazy dog'); + * // equal to + * md5('The quick brown fox jumps over the lazy dog'); + */ + + /** + * @method digest + * @memberof md5 + * @description Output hash as bytes array + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {Array} Bytes array + * @example + * md5.digest('The quick brown fox jumps over the lazy dog'); + */ + + /** + * @method array + * @memberof md5 + * @description Output hash as bytes array + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {Array} Bytes array + * @example + * md5.array('The quick brown fox jumps over the lazy dog'); + */ + + /** + * @method arrayBuffer + * @memberof md5 + * @description Output hash as ArrayBuffer + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {ArrayBuffer} ArrayBuffer + * @example + * md5.arrayBuffer('The quick brown fox jumps over the lazy dog'); + */ + + /** + * @method buffer + * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead. + * @memberof md5 + * @description Output hash as ArrayBuffer + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {ArrayBuffer} ArrayBuffer + * @example + * md5.buffer('The quick brown fox jumps over the lazy dog'); + */ + + /** + * @method base64 + * @memberof md5 + * @description Output hash as base64 string + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {String} base64 string + * @example + * md5.base64('The quick brown fox jumps over the lazy dog'); + */ + + + var createOutputMethod = function createOutputMethod(outputType) { + return function (message, isBinStr) { + return new Md5(true).update(message, isBinStr)[outputType](); + }; + }; + /** + * @method create + * @memberof md5 + * @description Create Md5 object + * @returns {Md5} Md5 object. + * @example + * var hash = md5.create(); + */ + + /** + * @method update + * @memberof md5 + * @description Create and update Md5 object + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {Md5} Md5 object. + * @example + * var hash = md5.update('The quick brown fox jumps over the lazy dog'); + * // equal to + * var hash = md5.create(); + * hash.update('The quick brown fox jumps over the lazy dog'); + */ + + + var createMethod = function createMethod() { + var method = createOutputMethod('hex'); -/** - * Adds element as a key to current if it is not already present. - * - * @param {Record} current - * @param {string} element - * @returns {Record} - */ -function orderedSetReducer (current, element) { - if (!current.hasOwnProperty(element)) { - current[element] = true; - } - return current; -} + if (NODE_JS) { + method = nodeWrap(method); + } -/** - * @see https://infra.spec.whatwg.org/#ordered-set - * @param {string} input - * @returns {string[]} - */ -function toOrderedSet(input) { - if (!input) return []; - var list = splitOnASCIIWhitespace(input); - return Object.keys(list.reduce(orderedSetReducer, {})) -} + method.getCtx = method.create = function () { + return new Md5(); + }; -/** - * Uses `list.indexOf` to implement something like `Array.prototype.includes`, - * which we can not rely on being available. - * - * @param {any[]} list - * @returns {function(any): boolean} - */ -function arrayIncludes (list) { - return function(element) { - return list && list.indexOf(element) !== -1; - } -} + method.update = function (message) { + return method.create().update(message); + }; -function copy(src,dest){ - for(var p in src){ - dest[p] = src[p]; - } -} + for (var i = 0; i < OUTPUT_TYPES.length; ++i) { + var type = OUTPUT_TYPES[i]; + method[type] = createOutputMethod(type); + } -/** -^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? -^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? - */ -function _extends(Class,Super){ - var pt = Class.prototype; - if(!(pt instanceof Super)){ - function t(){}; - t.prototype = Super.prototype; - t = new t(); - copy(pt,t); - Class.prototype = pt = t; - } - if(pt.constructor != Class){ - if(typeof Class != 'function'){ - console.error("unknown Class:"+Class) - } - pt.constructor = Class - } -} + return method; + }; + + var nodeWrap = function nodeWrap(method) { + var crypto = eval("require('crypto')"); + var Buffer = eval("require('buffer').Buffer"); + + var nodeMethod = function nodeMethod(message) { + if (typeof message === 'string') { + return crypto.createHash('md5').update(message, 'utf8').digest('hex'); + } else { + if (message === null || message === undefined) { + throw ERROR; + } else if (message.constructor === ArrayBuffer) { + message = new Uint8Array(message); + } + } + + if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer) { + return crypto.createHash('md5').update(new Buffer(message)).digest('hex'); + } else { + return method(message); + } + }; -// Node Types -var NodeType = {} -var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; -var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; -var TEXT_NODE = NodeType.TEXT_NODE = 3; -var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; -var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; -var ENTITY_NODE = NodeType.ENTITY_NODE = 6; -var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; -var COMMENT_NODE = NodeType.COMMENT_NODE = 8; -var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; -var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; -var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; -var NOTATION_NODE = NodeType.NOTATION_NODE = 12; + return nodeMethod; + }; + /** + * Md5 class + * @class Md5 + * @description This is internal class. + * @see {@link md5.create} + */ + + + function Md5(sharedMemory) { + if (sharedMemory) { + blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; + this.blocks = blocks; + this.buffer8 = buffer8; + } else { + if (ARRAY_BUFFER) { + var buffer = new ArrayBuffer(68); + this.buffer8 = new Uint8Array(buffer); + this.blocks = new Uint32Array(buffer); + } else { + this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + } + } -// ExceptionCode -var ExceptionCode = {} -var ExceptionMessage = {}; -var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); -var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); -var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); -var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); -var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); -var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); -var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); -var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); -var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); -var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); -//level2 -var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); -var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); -var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); -var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); -var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); + this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0; + this.finalized = this.hashed = false; + this.first = true; + } + /** + * @method update + * @memberof Md5 + * @instance + * @description Update hash + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {Md5} Md5 object. + * @see {@link md5.update} + */ + + + Md5.prototype.update = function (message, isBinStr) { + if (this.finalized) { + return; + } -/** - * DOM Level 2 - * Object DOMException - * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html - */ -function DOMException(code, message) { - if(message instanceof Error){ - var error = message; - }else{ - error = this; - Error.call(this, ExceptionMessage[code]); - this.message = ExceptionMessage[code]; - if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); - } - error.code = code; - if(message) this.message = this.message + ": " + message; - return error; + var code, + index = 0, + i, + length = message.length, + blocks = this.blocks; + var buffer8 = this.buffer8; + + while (index < length) { + if (this.hashed) { + this.hashed = false; + blocks[0] = blocks[16]; + blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; + } + + if (ARRAY_BUFFER) { + for (i = this.start; index < length && i < 64; ++index) { + code = message.charCodeAt(index); + + if (isBinStr || code < 0x80) { + buffer8[i++] = code; + } else if (code < 0x800) { + buffer8[i++] = 0xc0 | code >> 6; + buffer8[i++] = 0x80 | code & 0x3f; + } else if (code < 0xd800 || code >= 0xe000) { + buffer8[i++] = 0xe0 | code >> 12; + buffer8[i++] = 0x80 | code >> 6 & 0x3f; + buffer8[i++] = 0x80 | code & 0x3f; + } else { + code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); + buffer8[i++] = 0xf0 | code >> 18; + buffer8[i++] = 0x80 | code >> 12 & 0x3f; + buffer8[i++] = 0x80 | code >> 6 & 0x3f; + buffer8[i++] = 0x80 | code & 0x3f; + } + } + } else { + for (i = this.start; index < length && i < 64; ++index) { + code = message.charCodeAt(index); + + if (isBinStr || code < 0x80) { + blocks[i >> 2] |= code << SHIFT[i++ & 3]; + } else if (code < 0x800) { + blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; + } else if (code < 0xd800 || code >= 0xe000) { + blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; + } else { + code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); + blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; + } + } + } + + this.lastByteIndex = i; + this.bytes += i - this.start; + + if (i >= 64) { + this.start = i - 64; + this.hash(); + this.hashed = true; + } else { + this.start = i; + } + } + + if (this.bytes > 4294967295) { + this.hBytes += this.bytes / 4294967296 << 0; + this.bytes = this.bytes % 4294967296; + } + + return this; + }; + + Md5.prototype.finalize = function () { + if (this.finalized) { + return; + } + + this.finalized = true; + var blocks = this.blocks, + i = this.lastByteIndex; + blocks[i >> 2] |= EXTRA[i & 3]; + + if (i >= 56) { + if (!this.hashed) { + this.hash(); + } + + blocks[0] = blocks[16]; + blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; + } + + blocks[14] = this.bytes << 3; + blocks[15] = this.hBytes << 3 | this.bytes >>> 29; + this.hash(); + }; + + Md5.prototype.hash = function () { + var a, + b, + c, + d, + bc, + da, + blocks = this.blocks; + + if (this.first) { + a = blocks[0] - 680876937; + a = (a << 7 | a >>> 25) - 271733879 << 0; + d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708; + d = (d << 12 | d >>> 20) + a << 0; + c = (-271733879 ^ d & (a ^ -271733879)) + blocks[2] - 1126478375; + c = (c << 17 | c >>> 15) + d << 0; + b = (a ^ c & (d ^ a)) + blocks[3] - 1316259209; + b = (b << 22 | b >>> 10) + c << 0; + } else { + a = this.h0; + b = this.h1; + c = this.h2; + d = this.h3; + a += (d ^ b & (c ^ d)) + blocks[0] - 680876936; + a = (a << 7 | a >>> 25) + b << 0; + d += (c ^ a & (b ^ c)) + blocks[1] - 389564586; + d = (d << 12 | d >>> 20) + a << 0; + c += (b ^ d & (a ^ b)) + blocks[2] + 606105819; + c = (c << 17 | c >>> 15) + d << 0; + b += (a ^ c & (d ^ a)) + blocks[3] - 1044525330; + b = (b << 22 | b >>> 10) + c << 0; + } + + a += (d ^ b & (c ^ d)) + blocks[4] - 176418897; + a = (a << 7 | a >>> 25) + b << 0; + d += (c ^ a & (b ^ c)) + blocks[5] + 1200080426; + d = (d << 12 | d >>> 20) + a << 0; + c += (b ^ d & (a ^ b)) + blocks[6] - 1473231341; + c = (c << 17 | c >>> 15) + d << 0; + b += (a ^ c & (d ^ a)) + blocks[7] - 45705983; + b = (b << 22 | b >>> 10) + c << 0; + a += (d ^ b & (c ^ d)) + blocks[8] + 1770035416; + a = (a << 7 | a >>> 25) + b << 0; + d += (c ^ a & (b ^ c)) + blocks[9] - 1958414417; + d = (d << 12 | d >>> 20) + a << 0; + c += (b ^ d & (a ^ b)) + blocks[10] - 42063; + c = (c << 17 | c >>> 15) + d << 0; + b += (a ^ c & (d ^ a)) + blocks[11] - 1990404162; + b = (b << 22 | b >>> 10) + c << 0; + a += (d ^ b & (c ^ d)) + blocks[12] + 1804603682; + a = (a << 7 | a >>> 25) + b << 0; + d += (c ^ a & (b ^ c)) + blocks[13] - 40341101; + d = (d << 12 | d >>> 20) + a << 0; + c += (b ^ d & (a ^ b)) + blocks[14] - 1502002290; + c = (c << 17 | c >>> 15) + d << 0; + b += (a ^ c & (d ^ a)) + blocks[15] + 1236535329; + b = (b << 22 | b >>> 10) + c << 0; + a += (c ^ d & (b ^ c)) + blocks[1] - 165796510; + a = (a << 5 | a >>> 27) + b << 0; + d += (b ^ c & (a ^ b)) + blocks[6] - 1069501632; + d = (d << 9 | d >>> 23) + a << 0; + c += (a ^ b & (d ^ a)) + blocks[11] + 643717713; + c = (c << 14 | c >>> 18) + d << 0; + b += (d ^ a & (c ^ d)) + blocks[0] - 373897302; + b = (b << 20 | b >>> 12) + c << 0; + a += (c ^ d & (b ^ c)) + blocks[5] - 701558691; + a = (a << 5 | a >>> 27) + b << 0; + d += (b ^ c & (a ^ b)) + blocks[10] + 38016083; + d = (d << 9 | d >>> 23) + a << 0; + c += (a ^ b & (d ^ a)) + blocks[15] - 660478335; + c = (c << 14 | c >>> 18) + d << 0; + b += (d ^ a & (c ^ d)) + blocks[4] - 405537848; + b = (b << 20 | b >>> 12) + c << 0; + a += (c ^ d & (b ^ c)) + blocks[9] + 568446438; + a = (a << 5 | a >>> 27) + b << 0; + d += (b ^ c & (a ^ b)) + blocks[14] - 1019803690; + d = (d << 9 | d >>> 23) + a << 0; + c += (a ^ b & (d ^ a)) + blocks[3] - 187363961; + c = (c << 14 | c >>> 18) + d << 0; + b += (d ^ a & (c ^ d)) + blocks[8] + 1163531501; + b = (b << 20 | b >>> 12) + c << 0; + a += (c ^ d & (b ^ c)) + blocks[13] - 1444681467; + a = (a << 5 | a >>> 27) + b << 0; + d += (b ^ c & (a ^ b)) + blocks[2] - 51403784; + d = (d << 9 | d >>> 23) + a << 0; + c += (a ^ b & (d ^ a)) + blocks[7] + 1735328473; + c = (c << 14 | c >>> 18) + d << 0; + b += (d ^ a & (c ^ d)) + blocks[12] - 1926607734; + b = (b << 20 | b >>> 12) + c << 0; + bc = b ^ c; + a += (bc ^ d) + blocks[5] - 378558; + a = (a << 4 | a >>> 28) + b << 0; + d += (bc ^ a) + blocks[8] - 2022574463; + d = (d << 11 | d >>> 21) + a << 0; + da = d ^ a; + c += (da ^ b) + blocks[11] + 1839030562; + c = (c << 16 | c >>> 16) + d << 0; + b += (da ^ c) + blocks[14] - 35309556; + b = (b << 23 | b >>> 9) + c << 0; + bc = b ^ c; + a += (bc ^ d) + blocks[1] - 1530992060; + a = (a << 4 | a >>> 28) + b << 0; + d += (bc ^ a) + blocks[4] + 1272893353; + d = (d << 11 | d >>> 21) + a << 0; + da = d ^ a; + c += (da ^ b) + blocks[7] - 155497632; + c = (c << 16 | c >>> 16) + d << 0; + b += (da ^ c) + blocks[10] - 1094730640; + b = (b << 23 | b >>> 9) + c << 0; + bc = b ^ c; + a += (bc ^ d) + blocks[13] + 681279174; + a = (a << 4 | a >>> 28) + b << 0; + d += (bc ^ a) + blocks[0] - 358537222; + d = (d << 11 | d >>> 21) + a << 0; + da = d ^ a; + c += (da ^ b) + blocks[3] - 722521979; + c = (c << 16 | c >>> 16) + d << 0; + b += (da ^ c) + blocks[6] + 76029189; + b = (b << 23 | b >>> 9) + c << 0; + bc = b ^ c; + a += (bc ^ d) + blocks[9] - 640364487; + a = (a << 4 | a >>> 28) + b << 0; + d += (bc ^ a) + blocks[12] - 421815835; + d = (d << 11 | d >>> 21) + a << 0; + da = d ^ a; + c += (da ^ b) + blocks[15] + 530742520; + c = (c << 16 | c >>> 16) + d << 0; + b += (da ^ c) + blocks[2] - 995338651; + b = (b << 23 | b >>> 9) + c << 0; + a += (c ^ (b | ~d)) + blocks[0] - 198630844; + a = (a << 6 | a >>> 26) + b << 0; + d += (b ^ (a | ~c)) + blocks[7] + 1126891415; + d = (d << 10 | d >>> 22) + a << 0; + c += (a ^ (d | ~b)) + blocks[14] - 1416354905; + c = (c << 15 | c >>> 17) + d << 0; + b += (d ^ (c | ~a)) + blocks[5] - 57434055; + b = (b << 21 | b >>> 11) + c << 0; + a += (c ^ (b | ~d)) + blocks[12] + 1700485571; + a = (a << 6 | a >>> 26) + b << 0; + d += (b ^ (a | ~c)) + blocks[3] - 1894986606; + d = (d << 10 | d >>> 22) + a << 0; + c += (a ^ (d | ~b)) + blocks[10] - 1051523; + c = (c << 15 | c >>> 17) + d << 0; + b += (d ^ (c | ~a)) + blocks[1] - 2054922799; + b = (b << 21 | b >>> 11) + c << 0; + a += (c ^ (b | ~d)) + blocks[8] + 1873313359; + a = (a << 6 | a >>> 26) + b << 0; + d += (b ^ (a | ~c)) + blocks[15] - 30611744; + d = (d << 10 | d >>> 22) + a << 0; + c += (a ^ (d | ~b)) + blocks[6] - 1560198380; + c = (c << 15 | c >>> 17) + d << 0; + b += (d ^ (c | ~a)) + blocks[13] + 1309151649; + b = (b << 21 | b >>> 11) + c << 0; + a += (c ^ (b | ~d)) + blocks[4] - 145523070; + a = (a << 6 | a >>> 26) + b << 0; + d += (b ^ (a | ~c)) + blocks[11] - 1120210379; + d = (d << 10 | d >>> 22) + a << 0; + c += (a ^ (d | ~b)) + blocks[2] + 718787259; + c = (c << 15 | c >>> 17) + d << 0; + b += (d ^ (c | ~a)) + blocks[9] - 343485551; + b = (b << 21 | b >>> 11) + c << 0; + + if (this.first) { + this.h0 = a + 1732584193 << 0; + this.h1 = b - 271733879 << 0; + this.h2 = c - 1732584194 << 0; + this.h3 = d + 271733878 << 0; + this.first = false; + } else { + this.h0 = this.h0 + a << 0; + this.h1 = this.h1 + b << 0; + this.h2 = this.h2 + c << 0; + this.h3 = this.h3 + d << 0; + } + }; + /** + * @method hex + * @memberof Md5 + * @instance + * @description Output hash as hex string + * @returns {String} Hex string + * @see {@link md5.hex} + * @example + * hash.hex(); + */ + + + Md5.prototype.hex = function () { + this.finalize(); + var h0 = this.h0, + h1 = this.h1, + h2 = this.h2, + h3 = this.h3; + return HEX_CHARS[h0 >> 4 & 0x0F] + HEX_CHARS[h0 & 0x0F] + HEX_CHARS[h0 >> 12 & 0x0F] + HEX_CHARS[h0 >> 8 & 0x0F] + HEX_CHARS[h0 >> 20 & 0x0F] + HEX_CHARS[h0 >> 16 & 0x0F] + HEX_CHARS[h0 >> 28 & 0x0F] + HEX_CHARS[h0 >> 24 & 0x0F] + HEX_CHARS[h1 >> 4 & 0x0F] + HEX_CHARS[h1 & 0x0F] + HEX_CHARS[h1 >> 12 & 0x0F] + HEX_CHARS[h1 >> 8 & 0x0F] + HEX_CHARS[h1 >> 20 & 0x0F] + HEX_CHARS[h1 >> 16 & 0x0F] + HEX_CHARS[h1 >> 28 & 0x0F] + HEX_CHARS[h1 >> 24 & 0x0F] + HEX_CHARS[h2 >> 4 & 0x0F] + HEX_CHARS[h2 & 0x0F] + HEX_CHARS[h2 >> 12 & 0x0F] + HEX_CHARS[h2 >> 8 & 0x0F] + HEX_CHARS[h2 >> 20 & 0x0F] + HEX_CHARS[h2 >> 16 & 0x0F] + HEX_CHARS[h2 >> 28 & 0x0F] + HEX_CHARS[h2 >> 24 & 0x0F] + HEX_CHARS[h3 >> 4 & 0x0F] + HEX_CHARS[h3 & 0x0F] + HEX_CHARS[h3 >> 12 & 0x0F] + HEX_CHARS[h3 >> 8 & 0x0F] + HEX_CHARS[h3 >> 20 & 0x0F] + HEX_CHARS[h3 >> 16 & 0x0F] + HEX_CHARS[h3 >> 28 & 0x0F] + HEX_CHARS[h3 >> 24 & 0x0F]; + }; + /** + * @method toString + * @memberof Md5 + * @instance + * @description Output hash as hex string + * @returns {String} Hex string + * @see {@link md5.hex} + * @example + * hash.toString(); + */ + + + Md5.prototype.toString = Md5.prototype.hex; + /** + * @method digest + * @memberof Md5 + * @instance + * @description Output hash as bytes array + * @returns {Array} Bytes array + * @see {@link md5.digest} + * @example + * hash.digest(); + */ + + Md5.prototype.digest = function (format) { + if (format === 'hex') return this.hex(); + this.finalize(); + var h0 = this.h0, + h1 = this.h1, + h2 = this.h2, + h3 = this.h3; + var res = [h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >> 24 & 0xFF]; + return res; + }; + /** + * @method array + * @memberof Md5 + * @instance + * @description Output hash as bytes array + * @returns {Array} Bytes array + * @see {@link md5.array} + * @example + * hash.array(); + */ + + + Md5.prototype.array = Md5.prototype.digest; + /** + * @method arrayBuffer + * @memberof Md5 + * @instance + * @description Output hash as ArrayBuffer + * @returns {ArrayBuffer} ArrayBuffer + * @see {@link md5.arrayBuffer} + * @example + * hash.arrayBuffer(); + */ + + Md5.prototype.arrayBuffer = function () { + this.finalize(); + var buffer = new ArrayBuffer(16); + var blocks = new Uint32Array(buffer); + blocks[0] = this.h0; + blocks[1] = this.h1; + blocks[2] = this.h2; + blocks[3] = this.h3; + return buffer; + }; + /** + * @method buffer + * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead. + * @memberof Md5 + * @instance + * @description Output hash as ArrayBuffer + * @returns {ArrayBuffer} ArrayBuffer + * @see {@link md5.buffer} + * @example + * hash.buffer(); + */ + + + Md5.prototype.buffer = Md5.prototype.arrayBuffer; + /** + * @method base64 + * @memberof Md5 + * @instance + * @description Output hash as base64 string + * @returns {String} base64 string + * @see {@link md5.base64} + * @example + * hash.base64(); + */ + + Md5.prototype.base64 = function () { + var v1, + v2, + v3, + base64Str = '', + bytes = this.array(); + + for (var i = 0; i < 15;) { + v1 = bytes[i++]; + v2 = bytes[i++]; + v3 = bytes[i++]; + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + BASE64_ENCODE_CHAR[v3 & 63]; + } + + v1 = bytes[i]; + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[v1 << 4 & 63] + '=='; + return base64Str; + }; + + var exports = createMethod(); + + if (COMMON_JS) { + module.exports = exports; + } else { + /** + * @method md5 + * @description Md5 hash function, export to global in browsers. + * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash + * @returns {String} md5 hashes + * @example + * md5(''); // d41d8cd98f00b204e9800998ecf8427e + * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6 + * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0 + * + * // It also supports UTF-8 encoding + * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07 + * + * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` + * md5([]); // d41d8cd98f00b204e9800998ecf8427e + * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e + */ + root.md5 = exports; + + if (AMD) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { + return exports; + }).call(exports, __webpack_require__, exports, module), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } + } +})(); +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/_process@0.11.10@process/browser.js */ "./node_modules/_process@0.11.10@process/browser.js"), __webpack_require__(/*! ./../node_modules/_webpack@4.46.0@webpack/buildin/global.js */ "./node_modules/_webpack@4.46.0@webpack/buildin/global.js"), __webpack_require__(/*! ./../node_modules/_webpack@4.46.0@webpack/buildin/module.js */ "./node_modules/_webpack@4.46.0@webpack/buildin/module.js")(module))) + +/***/ }), + +/***/ "./lib/request.js": +/*!************************!*\ + !*** ./lib/request.js ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var stringifyPrimitive = function stringifyPrimitive(v) { + switch (_typeof(v)) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } }; -DOMException.prototype = Error.prototype; -copy(ExceptionCode,DOMException) -/** - * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 - * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. - * The items in the NodeList are accessible via an integral index, starting from 0. - */ -function NodeList() { +var queryStringify = function queryStringify(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + + if (obj === null) { + obj = undefined; + } + + if (_typeof(obj) === 'object') { + return Object.keys(obj).map(function (k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + + if (Array.isArray(obj[k])) { + return obj[k].map(function (v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).filter(Boolean).join(sep); + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj)); }; -NodeList.prototype = { - /** - * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. - * @standard level1 - */ - length:0, - /** - * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. - * @standard level1 - * @param index unsigned long - * Index into the collection. - * @return Node - * The node at the indexth position in the NodeList, or null if that is not a valid index. - */ - item: function(index) { - return this[index] || null; - }, - toString:function(isHTML,nodeFilter){ - for(var buf = [], i = 0;i=0){ - var lastIndex = list.length-1 - while(i0 || key == 'xmlns'){ -// return null; -// } - //console.log() - var i = this.length; - while(i--){ - var attr = this[i]; - //console.log(attr.nodeName,key) - if(attr.nodeName == key){ - return attr; - } - } - }, - setNamedItem: function(attr) { - var el = attr.ownerElement; - if(el && el!=this._ownerElement){ - throw new DOMException(INUSE_ATTRIBUTE_ERR); - } - var oldAttr = this.getNamedItem(attr.nodeName); - _addNamedNode(this._ownerElement,this,attr,oldAttr); - return oldAttr; - }, - /* returns Node */ - setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR - var el = attr.ownerElement, oldAttr; - if(el && el!=this._ownerElement){ - throw new DOMException(INUSE_ATTRIBUTE_ERR); - } - oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); - _addNamedNode(this._ownerElement,this,attr,oldAttr); - return oldAttr; - }, + if (/^(?:true|false)$/i.test(sValue)) { + return sValue.toLowerCase() === "true"; + } - /* returns Node */ - removeNamedItem: function(key) { - var attr = this.getNamedItem(key); - _removeNamedNode(this._ownerElement,this,attr); - return attr; - - - },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR - - //for level2 - removeNamedItemNS:function(namespaceURI,localName){ - var attr = this.getNamedItemNS(namespaceURI,localName); - _removeNamedNode(this._ownerElement,this,attr); - return attr; - }, - getNamedItemNS: function(namespaceURI, localName) { - var i = this.length; - while(i--){ - var node = this[i]; - if(node.localName == localName && node.namespaceURI == namespaceURI){ - return node; - } - } - return null; - } + if (isFinite(sValue)) { + return parseFloat(sValue); + } + + return sValue; + }; + + this.parseString = function (xmlString, opt) { + if (xmlString) { + var xml = this.stringToXML(xmlString); + + if (xml.getElementsByTagName('parsererror').length) { + return null; + } else { + return this.parseXML(xml, opt); + } + } else { + return null; + } + }; + + this.parseXML = function (oXMLParent, opt) { + // initialize options + for (var key in opt) { + options[key] = opt[key]; + } + + var vResult = {}, + nLength = 0, + sCollectedTxt = ""; // iterate over the children + + var childNum = oXMLParent.childNodes.length; + + if (childNum) { + for (var oNode, sProp, vContent, nItem = 0; nItem < oXMLParent.childNodes.length; nItem++) { + oNode = oXMLParent.childNodes.item(nItem); + + if (oNode.nodeType === 4) { + if (options.mergeCDATA) { + sCollectedTxt += oNode.nodeValue; + } + } + /* nodeType is "CDATASection" (4) */ + else if (oNode.nodeType === 3) { + sCollectedTxt += oNode.nodeValue; + } + /* nodeType is "Text" (3) */ + else if (oNode.nodeType === 1) { + /* nodeType is "Element" (1) */ + if (nLength === 0) { + vResult = {}; + } // using nodeName to support browser (IE) implementation with no 'localName' property + + + if (options.stripElemPrefix) { + sProp = oNode.nodeName.replace(prefixMatch, ''); + } else { + sProp = oNode.nodeName; + } + + vContent = xmlToJSON.parseXML(oNode); + + if (vResult.hasOwnProperty(sProp)) { + if (vResult[sProp].constructor !== Array) { + vResult[sProp] = [vResult[sProp]]; + } + + vResult[sProp].push(vContent); + } else { + vResult[sProp] = vContent; + nLength++; + } + } + } + } + + if (!Object.keys(vResult).length) { + // vResult = sCollectedTxt.replace(trimMatch, '') || ''; // by carsonxu 修复 getBucket返回的 Key 是 " /" 这种场景 + vResult = sCollectedTxt || ''; + } + + return vResult; + }; // Convert xmlDocument to a string + // Returns null on failure + + + this.xmlToString = function (xmlDoc) { + try { + var xmlString = xmlDoc.xml ? xmlDoc.xml : new XMLSerializer().serializeToString(xmlDoc); + return xmlString; + } catch (err) { + return null; + } + }; // Convert a string to XML Node Structure + // Returns null on failure + + + this.stringToXML = function (xmlString) { + try { + var xmlDoc = null; + + if (window.DOMParser) { + var parser = new DOMParser(); + xmlDoc = parser.parseFromString(xmlString, "text/xml"); + return xmlDoc; + } else { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = false; + xmlDoc.loadXML(xmlString); + return xmlDoc; + } + } catch (e) { + return null; + } + }; + + return this; +}.call({}); + +var xml2json = function xml2json(xmlString) { + return xmlToJSON.parseString(xmlString); }; +module.exports = xml2json; + +/***/ }), + +/***/ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/conventions.js": +/*!******************************************************************************!*\ + !*** ./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/conventions.js ***! + \******************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + /** - * The DOMImplementation interface represents an object providing methods - * which are not dependent on any particular document. - * Such an object is returned by the `Document.implementation` property. + * "Shallow freezes" an object to render it immutable. + * Uses `Object.freeze` if available, + * otherwise the immutability is only in the type. * - * __The individual methods describe the differences compared to the specs.__ + * Is used to create "enum like" objects. * - * @constructor + * @template T + * @param {T} object the object to freeze + * @param {Pick = Object} oc `Object` by default, + * allows to inject custom object constructor for tests + * @returns {Readonly} * - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN - * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial) - * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core - * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core - * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze */ -function DOMImplementation() { +function freeze(object, oc) { + if (oc === undefined) { + oc = Object + } + return oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object } -DOMImplementation.prototype = { +/** + * Since we can not rely on `Object.assign` we provide a simplified version + * that is sufficient for our needs. + * + * @param {Object} target + * @param {Object | null | undefined} source + * + * @returns {Object} target + * @throws TypeError if target is not an object + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign + */ +function assign(target, source) { + if (target === null || typeof target !== 'object') { + throw new TypeError('target is not an object') + } + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + return target +} + +/** + * All mime types that are allowed as input to `DOMParser.parseFromString` + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec + * @see DOMParser.prototype.parseFromString + */ +var MIME_TYPE = freeze({ /** - * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported. - * The different implementations fairly diverged in what kind of features were reported. - * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use. + * `text/html`, the only mime type that triggers treating an XML document as HTML. * - * @deprecated It is deprecated and modern browsers return true in all cases. + * @see DOMParser.SupportedType.isHTML + * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration + * @see https://en.wikipedia.org/wiki/HTML Wikipedia + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec + */ + HTML: 'text/html', + + /** + * Helper method to check a mime type if it indicates an HTML document * - * @param {string} feature - * @param {string} [version] - * @returns {boolean} always true + * @param {string} [value] + * @returns {boolean} * - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN - * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core - * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard - */ - hasFeature: function(feature, version) { - return true; + * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration + * @see https://en.wikipedia.org/wiki/HTML Wikipedia + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring */ + isHTML: function (value) { + return value === MIME_TYPE.HTML }, + /** - * Creates an XML Document object of the specified type with its document element. - * - * __It behaves slightly different from the description in the living standard__: - * - There is no interface/class `XMLDocument`, it returns a `Document` instance. - * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared. - * - this implementation is not validating names or qualified names - * (when parsing XML strings, the SAX parser takes care of that) + * `application/xml`, the standard mime type for XML documents. * - * @param {string|null} namespaceURI - * @param {string} qualifiedName - * @param {DocumentType=null} doctype - * @returns {Document} + * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration + * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303 + * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia + */ + XML_APPLICATION: 'application/xml', + + /** + * `text/html`, an alias for `application/xml`. * - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN - * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial) - * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core - * - * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract - * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names - * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names + * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303 + * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration + * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia */ - createDocument: function(namespaceURI, qualifiedName, doctype){ - var doc = new Document(); - doc.implementation = this; - doc.childNodes = new NodeList(); - doc.doctype = doctype || null; - if (doctype){ - doc.appendChild(doctype); - } - if (qualifiedName){ - var root = doc.createElementNS(namespaceURI, qualifiedName); - doc.appendChild(root); - } - return doc; - }, + XML_TEXT: 'text/xml', + /** - * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`. - * - * __This behavior is slightly different from the in the specs__: - * - this implementation is not validating names or qualified names - * (when parsing XML strings, the SAX parser takes care of that) - * - * @param {string} qualifiedName - * @param {string} [publicId] - * @param {string} [systemId] - * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation - * or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()` - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN - * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core - * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard + * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace, + * but is parsed as an XML document. * - * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract - * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names - * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names + * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration + * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec + * @see https://en.wikipedia.org/wiki/XHTML Wikipedia */ - createDocumentType: function(qualifiedName, publicId, systemId){ - var node = new DocumentType(); - node.name = qualifiedName; - node.nodeName = qualifiedName; - node.publicId = publicId || ''; - node.systemId = systemId || ''; - - return node; - } -}; + XML_XHTML_APPLICATION: 'application/xhtml+xml', + /** + * `image/svg+xml`, + * + * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration + * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1 + * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia + */ + XML_SVG_IMAGE: 'image/svg+xml', +}) /** - * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + * Namespaces that are used in this code base. + * + * @see http://www.w3.org/TR/REC-xml-names */ +var NAMESPACE = freeze({ + /** + * The XHTML namespace. + * + * @see http://www.w3.org/1999/xhtml + */ + HTML: 'http://www.w3.org/1999/xhtml', -function Node() { -}; - -Node.prototype = { - firstChild : null, - lastChild : null, - previousSibling : null, - nextSibling : null, - attributes : null, - parentNode : null, - childNodes : null, - ownerDocument : null, - nodeValue : null, - namespaceURI : null, - prefix : null, - localName : null, - // Modified in DOM Level 2: - insertBefore:function(newChild, refChild){//raises - return _insertBefore(this,newChild,refChild); - }, - replaceChild:function(newChild, oldChild){//raises - this.insertBefore(newChild,oldChild); - if(oldChild){ - this.removeChild(oldChild); - } - }, - removeChild:function(oldChild){ - return _removeChild(this,oldChild); - }, - appendChild:function(newChild){ - return this.insertBefore(newChild,null); - }, - hasChildNodes:function(){ - return this.firstChild != null; - }, - cloneNode:function(deep){ - return cloneNode(this.ownerDocument||this,this,deep); - }, - // Modified in DOM Level 2: - normalize:function(){ - var child = this.firstChild; - while(child){ - var next = child.nextSibling; - if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ - this.removeChild(next); - child.appendData(next.data); - }else{ - child.normalize(); - child = next; - } - } - }, - // Introduced in DOM Level 2: - isSupported:function(feature, version){ - return this.ownerDocument.implementation.hasFeature(feature,version); + /** + * Checks if `uri` equals `NAMESPACE.HTML`. + * + * @param {string} [uri] + * + * @see NAMESPACE.HTML + */ + isHTML: function (uri) { + return uri === NAMESPACE.HTML }, - // Introduced in DOM Level 2: - hasAttributes:function(){ - return this.attributes.length>0; - }, + /** - * Look up the prefix associated to the given namespace URI, starting from this node. - * **The default namespace declarations are ignored by this method.** - * See Namespace Prefix Lookup for details on the algorithm used by this method. + * The SVG namespace. * - * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._ + * @see http://www.w3.org/2000/svg + */ + SVG: 'http://www.w3.org/2000/svg', + + /** + * The `xml:` namespace. * - * @param {string | null} namespaceURI - * @returns {string | null} - * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix - * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo - * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix - * @see https://github.com/xmldom/xmldom/issues/322 + * @see http://www.w3.org/XML/1998/namespace */ - lookupPrefix:function(namespaceURI){ - var el = this; - while(el){ - var map = el._nsMap; - //console.dir(map) - if(map){ - for(var n in map){ - if(map[n] == namespaceURI){ - return n; - } - } - } - el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; - } - return null; - }, - // Introduced in DOM Level 3: - lookupNamespaceURI:function(prefix){ - var el = this; - while(el){ - var map = el._nsMap; - //console.dir(map) - if(map){ - if(prefix in map){ - return map[prefix] ; - } - } - el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; - } - return null; - }, - // Introduced in DOM Level 3: - isDefaultNamespace:function(namespaceURI){ - var prefix = this.lookupPrefix(namespaceURI); - return prefix == null; - } -}; + XML: 'http://www.w3.org/XML/1998/namespace', + /** + * The `xmlns:` namespace + * + * @see https://www.w3.org/2000/xmlns/ + */ + XMLNS: 'http://www.w3.org/2000/xmlns/', +}) -function _xmlEncoder(c){ - return c == '<' && '<' || - c == '>' && '>' || - c == '&' && '&' || - c == '"' && '"' || - '&#'+c.charCodeAt()+';' -} +exports.assign = assign; +exports.freeze = freeze; +exports.MIME_TYPE = MIME_TYPE; +exports.NAMESPACE = NAMESPACE; -copy(NodeType,Node); -copy(NodeType,Node.prototype); +/***/ }), -/** - * @param callback return true for continue,false for break - * @return boolean true: break visit; - */ -function _visitNode(node,callback){ - if(callback(node)){ - return true; - } - if(node = node.firstChild){ - do{ - if(_visitNode(node,callback)){return true} - }while(node=node.nextSibling) - } -} +/***/ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/dom-parser.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/dom-parser.js ***! + \*****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { +var conventions = __webpack_require__(/*! ./conventions */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/conventions.js"); +var dom = __webpack_require__(/*! ./dom */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/dom.js") +var entities = __webpack_require__(/*! ./entities */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/entities.js"); +var sax = __webpack_require__(/*! ./sax */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/sax.js"); +var DOMImplementation = dom.DOMImplementation; -function Document(){ -} +var NAMESPACE = conventions.NAMESPACE; -function _onAddAttribute(doc,el,newAttr){ - doc && doc._inc++; - var ns = newAttr.namespaceURI ; - if(ns === NAMESPACE.XMLNS){ - //update namespace - el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value - } -} +var ParseError = sax.ParseError; +var XMLReader = sax.XMLReader; -function _onRemoveAttribute(doc,el,newAttr,remove){ - doc && doc._inc++; - var ns = newAttr.namespaceURI ; - if(ns === NAMESPACE.XMLNS){ - //update namespace - delete el._nsMap[newAttr.prefix?newAttr.localName:''] - } +/** + * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends: + * + * > XML parsed entities are often stored in computer files which, + * > for editing convenience, are organized into lines. + * > These lines are typically separated by some combination + * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA). + * > + * > To simplify the tasks of applications, the XML processor must behave + * > as if it normalized all line breaks in external parsed entities (including the document entity) + * > on input, before parsing, by translating all of the following to a single #xA character: + * > + * > 1. the two-character sequence #xD #xA + * > 2. the two-character sequence #xD #x85 + * > 3. the single character #x85 + * > 4. the single character #x2028 + * > 5. any #xD character that is not immediately followed by #xA or #x85. + * + * @param {string} input + * @returns {string} + */ +function normalizeLineEndings(input) { + return input + .replace(/\r[\n\u0085]/g, '\n') + .replace(/[\r\u0085\u2028]/g, '\n') } /** - * Updates `el.childNodes`, updating the indexed items and it's `length`. - * Passing `newChild` means it will be appended. - * Otherwise it's assumed that an item has been removed, - * and `el.firstNode` and it's `.nextSibling` are used - * to walk the current list of child nodes. + * @typedef Locator + * @property {number} [columnNumber] + * @property {number} [lineNumber] + */ + +/** + * @typedef DOMParserOptions + * @property {DOMHandler} [domBuilder] + * @property {Function} [errorHandler] + * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing + * defaults to `normalizeLineEndings` + * @property {Locator} [locator] + * @property {Record} [xmlns] * - * @param {Document} doc - * @param {Node} el - * @param {Node} [newChild] - * @private + * @see normalizeLineEndings */ -function _onUpdateChild (doc, el, newChild) { - if(doc && doc._inc){ - doc._inc++; - //update childNodes - var cs = el.childNodes; - if (newChild) { - cs[cs.length++] = newChild; - } else { - var child = el.firstChild; - var i = 0; - while (child) { - cs[i++] = child; - child = child.nextSibling; - } - cs.length = i; - delete cs[cs.length]; - } - } -} /** - * Removes the connections between `parentNode` and `child` - * and any existing `child.previousSibling` or `child.nextSibling`. + * The DOMParser interface provides the ability to parse XML or HTML source code + * from a string into a DOM `Document`. * - * @see https://github.com/xmldom/xmldom/issues/135 - * @see https://github.com/xmldom/xmldom/issues/145 + * _xmldom is different from the spec in that it allows an `options` parameter, + * to override the default behavior._ * - * @param {Node} parentNode - * @param {Node} child - * @returns {Node} the child that was removed. - * @private + * @param {DOMParserOptions} [options] + * @constructor + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization */ -function _removeChild (parentNode, child) { - var previous = child.previousSibling; - var next = child.nextSibling; - if (previous) { - previous.nextSibling = next; - } else { - parentNode.firstChild = next; +function DOMParser(options){ + this.options = options ||{locator:{}}; +} + +DOMParser.prototype.parseFromString = function(source,mimeType){ + var options = this.options; + var sax = new XMLReader(); + var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler + var errorHandler = options.errorHandler; + var locator = options.locator; + var defaultNSMap = options.xmlns||{}; + var isHTML = /\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1; + var entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES; + if(locator){ + domBuilder.setDocumentLocator(locator) } - if (next) { - next.previousSibling = previous; + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(isHTML){ + defaultNSMap[''] = NAMESPACE.HTML; + } + defaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML; + var normalize = options.normalizeLineEndings || normalizeLineEndings; + if (source && typeof source === 'string') { + sax.parse( + normalize(source), + defaultNSMap, + entityMap + ) } else { - parentNode.lastChild = previous; + sax.errorHandler.error('invalid doc source') } - child.parentNode = null; - child.previousSibling = null; - child.nextSibling = null; - _onUpdateChild(parentNode.ownerDocument, parentNode); - return child; + return domBuilder.doc; } -/** - * preformance key(refChild == null) - */ -function _insertBefore(parentNode,newChild,nextChild){ - var cp = newChild.parentNode; - if(cp){ - cp.removeChild(newChild);//remove and update - } - if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ - var newFirst = newChild.firstChild; - if (newFirst == null) { - return newChild; +function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; } - var newLast = newChild.lastChild; - }else{ - newFirst = newLast = newChild; - } - var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; - - newFirst.previousSibling = pre; - newLast.nextSibling = nextChild; - - - if(pre){ - pre.nextSibling = newFirst; - }else{ - parentNode.firstChild = newFirst; - } - if(nextChild == null){ - parentNode.lastChild = newLast; - }else{ - nextChild.previousSibling = newLast; + errorImpl = domBuilder ; } - do{ - newFirst.parentNode = parentNode; - }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) - _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); - //console.log(parentNode.lastChild.nextSibling == null) - if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { - newChild.firstChild = newChild.lastChild = null; + var errorHandler = {} + var isCallback = errorImpl instanceof Function; + locator = locator||{} + function build(key){ + var fn = errorImpl[key]; + if(!fn && isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; + } + errorHandler[key] = fn && function(msg){ + fn('[xmldom '+key+']\t'+msg+_locator(locator)); + }||function(){}; } - return newChild; + build('warning'); + build('error'); + build('fatalError'); + return errorHandler; } +//console.log('#\n\n\n\n\n\n\n####') /** - * Appends `newChild` to `parentNode`. - * If `newChild` is already connected to a `parentNode` it is first removed from it. + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler * - * @see https://github.com/xmldom/xmldom/issues/135 - * @see https://github.com/xmldom/xmldom/issues/145 - * @param {Node} parentNode - * @param {Node} newChild - * @returns {Node} - * @private + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html */ -function _appendSingleChild (parentNode, newChild) { - if (newChild.parentNode) { - newChild.parentNode.removeChild(newChild); - } - newChild.parentNode = parentNode; - newChild.previousSibling = parentNode.lastChild; - newChild.nextSibling = null; - if (newChild.previousSibling) { - newChild.previousSibling.nextSibling = newChild; - } else { - parentNode.firstChild = newChild; - } - parentNode.lastChild = newChild; - _onUpdateChild(parentNode.ownerDocument, parentNode, newChild); - return newChild; +function DOMHandler() { + this.cdata = false; +} +function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; } +/** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ +DOMHandler.prototype = { + startDocument : function() { + this.doc = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.doc.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.doc; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; -Document.prototype = { - //implementation : null, - nodeName : '#document', - nodeType : DOCUMENT_NODE, - /** - * The DocumentType node of the document. - * - * @readonly - * @type DocumentType - */ - doctype : null, - documentElement : null, - _inc : 1, - - insertBefore : function(newChild, refChild){//raises - if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ - var child = newChild.firstChild; - while(child){ - var next = child.nextSibling; - this.insertBefore(child,refChild); - child = next; - } - return newChild; - } - if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){ - this.documentElement = newChild; - } - - return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; - }, - removeChild : function(oldChild){ - if(this.documentElement == oldChild){ - this.documentElement = null; - } - return _removeChild(this,oldChild); + this.locator && position(this.locator,el) + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + this.locator &&position(attrs.getLocator(i),attr); + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr) + } }, - // Introduced in DOM Level 2: - importNode : function(importedNode,deep){ - return importNode(this,importedNode,deep); + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement + var tagName = current.tagName; + this.currentElement = current.parentNode; }, - // Introduced in DOM Level 2: - getElementById : function(id){ - var rtv = null; - _visitNode(this.documentElement,function(node){ - if(node.nodeType == ELEMENT_NODE){ - if(node.getAttribute('id') == id){ - rtv = node; - return true; - } - } - }) - return rtv; + startPrefixMapping:function(prefix, uri) { }, - - /** - * The `getElementsByClassName` method of `Document` interface returns an array-like object - * of all child elements which have **all** of the given class name(s). - * - * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters. - * - * - * Warning: This is a live LiveNodeList. - * Changes in the DOM will reflect in the array as the changes occur. - * If an element selected by this array no longer qualifies for the selector, - * it will automatically be removed. Be aware of this for iteration purposes. - * - * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName - * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname - */ - getElementsByClassName: function(classNames) { - var classNamesSet = toOrderedSet(classNames) - return new LiveNodeList(this, function(base) { - var ls = []; - if (classNamesSet.length > 0) { - _visitNode(base.documentElement, function(node) { - if(node !== base && node.nodeType === ELEMENT_NODE) { - var nodeClassNames = node.getAttribute('class') - // can be null if the attribute does not exist - if (nodeClassNames) { - // before splitting and iterating just compare them for the most common case - var matches = classNames === nodeClassNames; - if (!matches) { - var nodeClassNamesSet = toOrderedSet(nodeClassNames) - matches = classNamesSet.every(arrayIncludes(nodeClassNamesSet)) - } - if(matches) { - ls.push(node); - } - } - } - }); - } - return ls; - }); + endPrefixMapping:function(prefix) { }, - - //document factory method: - createElement : function(tagName){ - var node = new Element(); - node.ownerDocument = this; - node.nodeName = tagName; - node.tagName = tagName; - node.localName = tagName; - node.childNodes = new NodeList(); - var attrs = node.attributes = new NamedNodeMap(); - attrs._ownerElement = node; - return node; + processingInstruction:function(target, data) { + var ins = this.doc.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins) + appendElement(this, ins); }, - createDocumentFragment : function(){ - var node = new DocumentFragment(); - node.ownerDocument = this; - node.childNodes = new NodeList(); - return node; + ignorableWhitespace:function(ch, start, length) { }, - createTextNode : function(data){ - var node = new Text(); - node.ownerDocument = this; - node.appendData(data) - return node; + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments) + //console.log(chars) + if(chars){ + if (this.cdata) { + var charNode = this.doc.createCDATASection(chars); + } else { + var charNode = this.doc.createTextNode(chars); + } + if(this.currentElement){ + this.currentElement.appendChild(charNode); + }else if(/^\s*$/.test(chars)){ + this.doc.appendChild(charNode); + //process xml + } + this.locator && position(this.locator,charNode) + } }, - createComment : function(data){ - var node = new Comment(); - node.ownerDocument = this; - node.appendData(data) - return node; + skippedEntity:function(name) { }, - createCDATASection : function(data){ - var node = new CDATASection(); - node.ownerDocument = this; - node.appendData(data) - return node; + endDocument:function() { + this.doc.normalize(); }, - createProcessingInstruction : function(target,data){ - var node = new ProcessingInstruction(); - node.ownerDocument = this; - node.tagName = node.target = target; - node.nodeValue= node.data = data; - return node; + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } }, - createAttribute : function(name){ - var node = new Attr(); - node.ownerDocument = this; - node.name = name; - node.nodeName = name; - node.localName = name; - node.specified = true; - return node; + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments) + var comm = this.doc.createComment(chars); + this.locator && position(this.locator,comm) + appendElement(this, comm); }, - createEntityReference : function(name){ - var node = new EntityReference(); - node.ownerDocument = this; - node.nodeName = name; - return node; + + startCDATA:function() { + //used in characters() methods + this.cdata = true; }, - // Introduced in DOM Level 2: - createElementNS : function(namespaceURI,qualifiedName){ - var node = new Element(); - var pl = qualifiedName.split(':'); - var attrs = node.attributes = new NamedNodeMap(); - node.childNodes = new NodeList(); - node.ownerDocument = this; - node.nodeName = qualifiedName; - node.tagName = qualifiedName; - node.namespaceURI = namespaceURI; - if(pl.length == 2){ - node.prefix = pl[0]; - node.localName = pl[1]; - }else{ - //el.prefix = null; - node.localName = qualifiedName; - } - attrs._ownerElement = node; - return node; + endCDATA:function() { + this.cdata = false; }, - // Introduced in DOM Level 2: - createAttributeNS : function(namespaceURI,qualifiedName){ - var node = new Attr(); - var pl = qualifiedName.split(':'); - node.ownerDocument = this; - node.nodeName = qualifiedName; - node.name = qualifiedName; - node.namespaceURI = namespaceURI; - node.specified = true; - if(pl.length == 2){ - node.prefix = pl[0]; - node.localName = pl[1]; - }else{ - //el.prefix = null; - node.localName = qualifiedName; - } - return node; - } -}; -_extends(Document,Node); - -function Element() { - this._nsMap = {}; -}; -Element.prototype = { - nodeType : ELEMENT_NODE, - hasAttribute : function(name){ - return this.getAttributeNode(name)!=null; + startDTD:function(name, publicId, systemId) { + var impl = this.doc.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt) + appendElement(this, dt); + this.doc.doctype = dt; + } }, - getAttribute : function(name){ - var attr = this.getAttributeNode(name); - return attr && attr.value || ''; + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn('[xmldom warning]\t'+error,_locator(this.locator)); }, - getAttributeNode : function(name){ - return this.attributes.getNamedItem(name); - }, - setAttribute : function(name, value){ - var attr = this.ownerDocument.createAttribute(name); - attr.value = attr.nodeValue = "" + value; - this.setAttributeNode(attr) - }, - removeAttribute : function(name){ - var attr = this.getAttributeNode(name) - attr && this.removeAttributeNode(attr); - }, - - //four real opeartion method - appendChild:function(newChild){ - if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ - return this.insertBefore(newChild,null); - }else{ - return _appendSingleChild(this,newChild); - } - }, - setAttributeNode : function(newAttr){ - return this.attributes.setNamedItem(newAttr); - }, - setAttributeNodeNS : function(newAttr){ - return this.attributes.setNamedItemNS(newAttr); - }, - removeAttributeNode : function(oldAttr){ - //console.log(this == oldAttr.ownerElement) - return this.attributes.removeNamedItem(oldAttr.nodeName); - }, - //get real attribute name,and remove it by removeAttributeNode - removeAttributeNS : function(namespaceURI, localName){ - var old = this.getAttributeNodeNS(namespaceURI, localName); - old && this.removeAttributeNode(old); - }, - - hasAttributeNS : function(namespaceURI, localName){ - return this.getAttributeNodeNS(namespaceURI, localName)!=null; - }, - getAttributeNS : function(namespaceURI, localName){ - var attr = this.getAttributeNodeNS(namespaceURI, localName); - return attr && attr.value || ''; - }, - setAttributeNS : function(namespaceURI, qualifiedName, value){ - var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); - attr.value = attr.nodeValue = "" + value; - this.setAttributeNode(attr) - }, - getAttributeNodeNS : function(namespaceURI, localName){ - return this.attributes.getNamedItemNS(namespaceURI, localName); - }, - - getElementsByTagName : function(tagName){ - return new LiveNodeList(this,function(base){ - var ls = []; - _visitNode(base,function(node){ - if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ - ls.push(node); - } - }); - return ls; - }); + error:function(error) { + console.error('[xmldom error]\t'+error,_locator(this.locator)); }, - getElementsByTagNameNS : function(namespaceURI, localName){ - return new LiveNodeList(this,function(base){ - var ls = []; - _visitNode(base,function(node){ - if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ - ls.push(node); - } - }); - return ls; - - }); + fatalError:function(error) { + throw new ParseError(error, this.locator); } -}; -Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; -Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; - - -_extends(Element,Node); -function Attr() { -}; -Attr.prototype.nodeType = ATTRIBUTE_NODE; -_extends(Attr,Node); - - -function CharacterData() { -}; -CharacterData.prototype = { - data : '', - substringData : function(offset, count) { - return this.data.substring(offset, offset+count); - }, - appendData: function(text) { - text = this.data+text; - this.nodeValue = this.data = text; - this.length = text.length; - }, - insertData: function(offset,text) { - this.replaceData(offset,0,text); - - }, - appendChild:function(newChild){ - throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR]) - }, - deleteData: function(offset, count) { - this.replaceData(offset,count,""); - }, - replaceData: function(offset, count, text) { - var start = this.data.substring(0,offset); - var end = this.data.substring(offset+count); - text = start + text + end; - this.nodeValue = this.data = text; - this.length = text.length; +} +function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' } } -_extends(CharacterData,Node); -function Text() { -}; -Text.prototype = { - nodeName : "#text", - nodeType : TEXT_NODE, - splitText : function(offset) { - var text = this.data; - var newText = text.substring(offset); - text = text.substring(0, offset); - this.data = this.nodeValue = text; - this.length = text.length; - var newNode = this.ownerDocument.createTextNode(newText); - if(this.parentNode){ - this.parentNode.insertBefore(newNode, this.nextSibling); +function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; } - return newNode; + return chars; } } -_extends(Text,CharacterData); -function Comment() { -}; -Comment.prototype = { - nodeName : "#comment", - nodeType : COMMENT_NODE -} -_extends(Comment,CharacterData); -function CDATASection() { -}; -CDATASection.prototype = { - nodeName : "#cdata-section", - nodeType : CDATA_SECTION_NODE -} -_extends(CDATASection,CharacterData); +/* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ +"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null} +}) +/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ +function appendElement (hander,node) { + if (!hander.currentElement) { + hander.doc.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } +}//appendChild and setAttributeNS are preformance key -function DocumentType() { -}; -DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; -_extends(DocumentType,Node); +exports.__DOMHandler = DOMHandler; +exports.normalizeLineEndings = normalizeLineEndings; +exports.DOMParser = DOMParser; -function Notation() { -}; -Notation.prototype.nodeType = NOTATION_NODE; -_extends(Notation,Node); -function Entity() { -}; -Entity.prototype.nodeType = ENTITY_NODE; -_extends(Entity,Node); +/***/ }), -function EntityReference() { -}; -EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; -_extends(EntityReference,Node); +/***/ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/dom.js": +/*!**********************************************************************!*\ + !*** ./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/dom.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -function DocumentFragment() { -}; -DocumentFragment.prototype.nodeName = "#document-fragment"; -DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; -_extends(DocumentFragment,Node); +var conventions = __webpack_require__(/*! ./conventions */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/conventions.js"); +var NAMESPACE = conventions.NAMESPACE; -function ProcessingInstruction() { +/** + * A prerequisite for `[].filter`, to drop elements that are empty + * @param {string} input + * @returns {boolean} + */ +function notEmptyString (input) { + return input !== '' } -ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; -_extends(ProcessingInstruction,Node); -function XMLSerializer(){} -XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){ - return nodeSerializeToString.call(node,isHtml,nodeFilter); +/** + * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace + * @see https://infra.spec.whatwg.org/#ascii-whitespace + * + * @param {string} input + * @returns {string[]} (can be empty) + */ +function splitOnASCIIWhitespace(input) { + // U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE + return input ? input.split(/[\t\n\f\r ]+/).filter(notEmptyString) : [] } -Node.prototype.toString = nodeSerializeToString; -function nodeSerializeToString(isHtml,nodeFilter){ - var buf = []; - var refNode = this.nodeType == 9 && this.documentElement || this; - var prefix = refNode.prefix; - var uri = refNode.namespaceURI; - - if(uri && prefix == null){ - //console.log(prefix) - var prefix = refNode.lookupPrefix(uri); - if(prefix == null){ - //isHTML = true; - var visibleNamespaces=[ - {namespace:uri,prefix:null} - //{namespace:uri,prefix:''} - ] - } + +/** + * Adds element as a key to current if it is not already present. + * + * @param {Record} current + * @param {string} element + * @returns {Record} + */ +function orderedSetReducer (current, element) { + if (!current.hasOwnProperty(element)) { + current[element] = true; } - serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces); - //console.log('###',this.nodeType,uri,prefix,buf.join('')) - return buf.join(''); + return current; } -function needNamespaceDefine(node, isHTML, visibleNamespaces) { - var prefix = node.prefix || ''; - var uri = node.namespaceURI; - // According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) , - // and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl : - // > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty. - // in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using) - // and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared : - // > [...] Furthermore, the attribute value [...] must not be an empty string. - // so serializing empty namespace value like xmlns:ds="" would produce an invalid XML document. - if (!uri) { - return false; - } - if (prefix === "xml" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) { - return false; - } - - var i = visibleNamespaces.length - while (i--) { - var ns = visibleNamespaces[i]; - // get namespace prefix - if (ns.prefix === prefix) { - return ns.namespace !== uri; - } - } - return true; +/** + * @see https://infra.spec.whatwg.org/#ordered-set + * @param {string} input + * @returns {string[]} + */ +function toOrderedSet(input) { + if (!input) return []; + var list = splitOnASCIIWhitespace(input); + return Object.keys(list.reduce(orderedSetReducer, {})) } + /** - * Well-formed constraint: No < in Attribute Values - * > The replacement text of any entity referred to directly or indirectly - * > in an attribute value must not contain a <. - * @see https://www.w3.org/TR/xml11/#CleanAttrVals - * @see https://www.w3.org/TR/xml11/#NT-AttValue + * Uses `list.indexOf` to implement something like `Array.prototype.includes`, + * which we can not rely on being available. * - * Literal whitespace other than space that appear in attribute values - * are serialized as their entity references, so they will be preserved. - * (In contrast to whitespace literals in the input which are normalized to spaces) - * @see https://www.w3.org/TR/xml11/#AVNormalize - * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes + * @param {any[]} list + * @returns {function(any): boolean} */ -function addSerializedAttribute(buf, qualifiedName, value) { - buf.push(' ', qualifiedName, '="', value.replace(/[<>&"\t\n\r]/g, _xmlEncoder), '"') +function arrayIncludes (list) { + return function(element) { + return list && list.indexOf(element) !== -1; + } } -function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){ - if (!visibleNamespaces) { - visibleNamespaces = []; +function copy(src,dest){ + for(var p in src){ + dest[p] = src[p]; } +} - if(nodeFilter){ - node = nodeFilter(node); - if(node){ - if(typeof node == 'string'){ - buf.push(node); - return; - } - }else{ - return; +/** +^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? +^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? + */ +function _extends(Class,Super){ + var pt = Class.prototype; + if(!(pt instanceof Super)){ + function t(){}; + t.prototype = Super.prototype; + t = new t(); + copy(pt,t); + Class.prototype = pt = t; + } + if(pt.constructor != Class){ + if(typeof Class != 'function'){ + console.error("unknown Class:"+Class) } - //buf.sort.apply(attrs, attributeSorter); + pt.constructor = Class } +} - switch(node.nodeType){ - case ELEMENT_NODE: - var attrs = node.attributes; - var len = attrs.length; - var child = node.firstChild; - var nodeName = node.tagName; - - isHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML +// Node Types +var NodeType = {} +var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; +var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; +var TEXT_NODE = NodeType.TEXT_NODE = 3; +var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; +var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; +var ENTITY_NODE = NodeType.ENTITY_NODE = 6; +var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; +var COMMENT_NODE = NodeType.COMMENT_NODE = 8; +var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; +var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; +var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; +var NOTATION_NODE = NodeType.NOTATION_NODE = 12; - var prefixedNodeName = nodeName - if (!isHTML && !node.prefix && node.namespaceURI) { - var defaultNS - // lookup current default ns from `xmlns` attribute - for (var ai = 0; ai < attrs.length; ai++) { - if (attrs.item(ai).name === 'xmlns') { - defaultNS = attrs.item(ai).value - break - } - } - if (!defaultNS) { - // lookup current default ns in visibleNamespaces - for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { - var namespace = visibleNamespaces[nsi] - if (namespace.prefix === '' && namespace.namespace === node.namespaceURI) { - defaultNS = namespace.namespace - break - } - } - } - if (defaultNS !== node.namespaceURI) { - for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { - var namespace = visibleNamespaces[nsi] - if (namespace.namespace === node.namespaceURI) { - if (namespace.prefix) { - prefixedNodeName = namespace.prefix + ':' + nodeName - } - break - } - } - } - } +// ExceptionCode +var ExceptionCode = {} +var ExceptionMessage = {}; +var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); +var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); +var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); +var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); +var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); +var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); +var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); +var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); +var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); +var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); +//level2 +var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); +var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); +var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); +var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); +var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); - buf.push('<', prefixedNodeName); +/** + * DOM Level 2 + * Object DOMException + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html + * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html + */ +function DOMException(code, message) { + if(message instanceof Error){ + var error = message; + }else{ + error = this; + Error.call(this, ExceptionMessage[code]); + this.message = ExceptionMessage[code]; + if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); + } + error.code = code; + if(message) this.message = this.message + ": " + message; + return error; +}; +DOMException.prototype = Error.prototype; +copy(ExceptionCode,DOMException) - for(var i=0;i'); - //if is cdata child node - if(isHTML && /^script$/i.test(nodeName)){ - while(child){ - if(child.data){ - buf.push(child.data); - }else{ - serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); - } - child = child.nextSibling; - } - }else - { - while(child){ - serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); - child = child.nextSibling; - } - } - buf.push(''); - }else{ - buf.push('/>'); - } - // remove added visible namespaces - //visibleNamespaces.length = startVisibleNamespaces; - return; - case DOCUMENT_NODE: - case DOCUMENT_FRAGMENT_NODE: - var child = node.firstChild; - while(child){ - serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); - child = child.nextSibling; - } - return; - case ATTRIBUTE_NODE: - return addSerializedAttribute(buf, node.name, node.value); - case TEXT_NODE: - /** - * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form, - * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. - * If they are needed elsewhere, they must be escaped using either numeric character references or the strings - * `&` and `<` respectively. - * The right angle bracket (>) may be represented using the string " > ", and must, for compatibility, - * be escaped using either `>` or a character reference when it appears in the string `]]>` in content, - * when that string is not marking the end of a CDATA section. - * - * In the content of elements, character data is any string of characters - * which does not contain the start-delimiter of any markup - * and does not include the CDATA-section-close delimiter, `]]>`. - * - * @see https://www.w3.org/TR/xml/#NT-CharData - * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node - */ - return buf.push(node.data - .replace(/[<&>]/g,_xmlEncoder) - ); - case CDATA_SECTION_NODE: - return buf.push( ''); - case COMMENT_NODE: - return buf.push( ""); - case DOCUMENT_TYPE_NODE: - var pubid = node.publicId; - var sysid = node.systemId; - buf.push(''); - }else if(sysid && sysid!='.'){ - buf.push(' SYSTEM ', sysid, '>'); - }else{ - var sub = node.internalSubset; - if(sub){ - buf.push(" [",sub,"]"); - } - buf.push(">"); - } - return; - case PROCESSING_INSTRUCTION_NODE: - return buf.push( ""); - case ENTITY_REFERENCE_NODE: - return buf.push( '&',node.nodeName,';'); - //case ENTITY_NODE: - //case NOTATION_NODE: - default: - buf.push('??',node.nodeName); +function LiveNodeList(node,refresh){ + this._node = node; + this._refresh = refresh + _updateLiveList(this); +} +function _updateLiveList(list){ + var inc = list._node._inc || list._node.ownerDocument._inc; + if(list._inc != inc){ + var ls = list._refresh(list._node); + //console.log(ls.length) + __set__(list,'length',ls.length); + copy(ls,list); + list._inc = inc; } } -function importNode(doc,node,deep){ - var node2; - switch (node.nodeType) { - case ELEMENT_NODE: - node2 = node.cloneNode(false); - node2.ownerDocument = doc; - //var attrs = node2.attributes; - //var len = attrs.length; - //for(var i=0;i=0){ + var lastIndex = list.length-1 + while(i0 || key == 'xmlns'){ +// return null; +// } + //console.log() + var i = this.length; + while(i--){ + var attr = this[i]; + //console.log(attr.nodeName,key) + if(attr.nodeName == key){ + return attr; } - }); - - Object.defineProperty(Node.prototype,'textContent',{ - get:function(){ - return getTextContent(this); - }, - - set:function(data){ - switch(this.nodeType){ - case ELEMENT_NODE: - case DOCUMENT_FRAGMENT_NODE: - while(this.firstChild){ - this.removeChild(this.firstChild); - } - if(data || String(data)){ - this.appendChild(this.ownerDocument.createTextNode(data)); - } - break; + } + }, + setNamedItem: function(attr) { + var el = attr.ownerElement; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + var oldAttr = this.getNamedItem(attr.nodeName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + /* returns Node */ + setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR + var el = attr.ownerElement, oldAttr; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, - default: - this.data = data; - this.value = data; - this.nodeValue = data; - } - } - }) + /* returns Node */ + removeNamedItem: function(key) { + var attr = this.getNamedItem(key); + _removeNamedNode(this._ownerElement,this,attr); + return attr; - function getTextContent(node){ - switch(node.nodeType){ - case ELEMENT_NODE: - case DOCUMENT_FRAGMENT_NODE: - var buf = []; - node = node.firstChild; - while(node){ - if(node.nodeType!==7 && node.nodeType !==8){ - buf.push(getTextContent(node)); - } - node = node.nextSibling; - } - return buf.join(''); - default: - return node.nodeValue; + + },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR + + //for level2 + removeNamedItemNS:function(namespaceURI,localName){ + var attr = this.getNamedItemNS(namespaceURI,localName); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + }, + getNamedItemNS: function(namespaceURI, localName) { + var i = this.length; + while(i--){ + var node = this[i]; + if(node.localName == localName && node.namespaceURI == namespaceURI){ + return node; } } - - __set__ = function(object,key,value){ - //console.log(value) - object['$$'+key] = value - } + return null; } -}catch(e){//ie8 -} - -//if(typeof require == 'function'){ - exports.DocumentType = DocumentType; - exports.DOMException = DOMException; - exports.DOMImplementation = DOMImplementation; - exports.Element = Element; - exports.Node = Node; - exports.NodeList = NodeList; - exports.XMLSerializer = XMLSerializer; -//} - - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - -var initEvent = function (cos) { - var listeners = {}; - var getList = function (action) { - !listeners[action] && (listeners[action] = []); - return listeners[action]; - }; - cos.on = function (action, callback) { - if (action === 'task-list-update') { - console.warn('warning: Event "' + action + '" has been deprecated. Please use "list-update" instead.'); - } - getList(action).push(callback); - }; - cos.off = function (action, callback) { - var list = getList(action); - for (var i = list.length - 1; i >= 0; i--) { - callback === list[i] && list.splice(i, 1); - } - }; - cos.emit = function (action, data) { - var list = getList(action).map(function (cb) { - return cb; - }); - for (var i = 0; i < list.length; i++) { - list[i](data); - } - }; -}; - -var EventProxy = function () { - initEvent(this); }; -module.exports.init = initEvent; -module.exports.EventProxy = EventProxy; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -var util = __webpack_require__(0); +/** + * The DOMImplementation interface represents an object providing methods + * which are not dependent on any particular document. + * Such an object is returned by the `Document.implementation` property. + * + * __The individual methods describe the differences compared to the specs.__ + * + * @constructor + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN + * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial) + * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core + * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core + * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard + */ +function DOMImplementation() { +} -// 按照文件特征值,缓存 UploadId -var cacheKey = 'cos_sdk_upload_cache'; -var expires = 30 * 24 * 3600; -var cache; -var timer; +DOMImplementation.prototype = { + /** + * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported. + * The different implementations fairly diverged in what kind of features were reported. + * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use. + * + * @deprecated It is deprecated and modern browsers return true in all cases. + * + * @param {string} feature + * @param {string} [version] + * @returns {boolean} always true + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN + * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core + * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard + */ + hasFeature: function(feature, version) { + return true; + }, + /** + * Creates an XML Document object of the specified type with its document element. + * + * __It behaves slightly different from the description in the living standard__: + * - There is no interface/class `XMLDocument`, it returns a `Document` instance. + * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared. + * - this implementation is not validating names or qualified names + * (when parsing XML strings, the SAX parser takes care of that) + * + * @param {string|null} namespaceURI + * @param {string} qualifiedName + * @param {DocumentType=null} doctype + * @returns {Document} + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN + * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial) + * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core + * + * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract + * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names + * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names + */ + createDocument: function(namespaceURI, qualifiedName, doctype){ + var doc = new Document(); + doc.implementation = this; + doc.childNodes = new NodeList(); + doc.doctype = doctype || null; + if (doctype){ + doc.appendChild(doctype); + } + if (qualifiedName){ + var root = doc.createElementNS(namespaceURI, qualifiedName); + doc.appendChild(root); + } + return doc; + }, + /** + * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`. + * + * __This behavior is slightly different from the in the specs__: + * - this implementation is not validating names or qualified names + * (when parsing XML strings, the SAX parser takes care of that) + * + * @param {string} qualifiedName + * @param {string} [publicId] + * @param {string} [systemId] + * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation + * or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()` + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN + * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core + * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard + * + * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract + * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names + * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names + */ + createDocumentType: function(qualifiedName, publicId, systemId){ + var node = new DocumentType(); + node.name = qualifiedName; + node.nodeName = qualifiedName; + node.publicId = publicId || ''; + node.systemId = systemId || ''; -var getCache = function () { - try { - var val = JSON.parse(localStorage.getItem(cacheKey)); - } catch (e) {} - if (!val) val = []; - cache = val; -}; -var setCache = function () { - try { - localStorage.setItem(cacheKey, JSON.stringify(cache)); - } catch (e) {} + return node; + } }; -var init = function () { - if (cache) return; - getCache.call(this); - // 清理太老旧的数据 - var changed = false; - var now = Math.round(Date.now() / 1000); - for (var i = cache.length - 1; i >= 0; i--) { - var mtime = cache[i][2]; - if (!mtime || mtime + expires < now) { - cache.splice(i, 1); - changed = true; - } - } - changed && setCache(); -}; -// 把缓存存到本地 -var save = function () { - if (timer) return; - timer = setTimeout(function () { - setCache(); - timer = null; - }, 400); +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + */ + +function Node() { }; -var mod = { - using: {}, - // 标记 UploadId 正在使用 - setUsing: function (uuid) { - mod.using[uuid] = true; - }, - // 标记 UploadId 已经没在使用 - removeUsing: function (uuid) { - delete mod.using[uuid]; - }, - // 用上传参数生成哈希值 - getFileId: function (file, ChunkSize, Bucket, Key) { - if (file.name && file.size && file.lastModifiedDate && ChunkSize) { - return util.md5([file.name, file.size, file.lastModifiedDate, ChunkSize, Bucket, Key].join('::')); - } else { - return null; - } +Node.prototype = { + firstChild : null, + lastChild : null, + previousSibling : null, + nextSibling : null, + attributes : null, + parentNode : null, + childNodes : null, + ownerDocument : null, + nodeValue : null, + namespaceURI : null, + prefix : null, + localName : null, + // Modified in DOM Level 2: + insertBefore:function(newChild, refChild){//raises + return _insertBefore(this,newChild,refChild); + }, + replaceChild:function(newChild, oldChild){//raises + this.insertBefore(newChild,oldChild); + if(oldChild){ + this.removeChild(oldChild); + } + }, + removeChild:function(oldChild){ + return _removeChild(this,oldChild); + }, + appendChild:function(newChild){ + return this.insertBefore(newChild,null); + }, + hasChildNodes:function(){ + return this.firstChild != null; + }, + cloneNode:function(deep){ + return cloneNode(this.ownerDocument||this,this,deep); + }, + // Modified in DOM Level 2: + normalize:function(){ + var child = this.firstChild; + while(child){ + var next = child.nextSibling; + if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ + this.removeChild(next); + child.appendData(next.data); + }else{ + child.normalize(); + child = next; + } + } + }, + // Introduced in DOM Level 2: + isSupported:function(feature, version){ + return this.ownerDocument.implementation.hasFeature(feature,version); + }, + // Introduced in DOM Level 2: + hasAttributes:function(){ + return this.attributes.length>0; }, - // 获取文件对应的 UploadId 列表 - getUploadIdList: function (uuid) { - if (!uuid) return null; - init.call(this); - var list = []; - for (var i = 0; i < cache.length; i++) { - if (cache[i][0] === uuid) list.push(cache[i][1]); - } - return list.length ? list : null; + /** + * Look up the prefix associated to the given namespace URI, starting from this node. + * **The default namespace declarations are ignored by this method.** + * See Namespace Prefix Lookup for details on the algorithm used by this method. + * + * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._ + * + * @param {string | null} namespaceURI + * @returns {string | null} + * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix + * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo + * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix + * @see https://github.com/xmldom/xmldom/issues/322 + */ + lookupPrefix:function(namespaceURI){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + for(var n in map){ + if(map[n] == namespaceURI){ + return n; + } + } + } + el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; + } + return null; }, - // 缓存 UploadId - saveUploadId: function (uuid, UploadId, limit) { - init.call(this); - if (!uuid) return; - // 清理没用的 UploadId,js 文件没有 FilePath ,只清理相同记录 - for (var i = cache.length - 1; i >= 0; i--) { - var item = cache[i]; - if (item[0] === uuid && item[1] === UploadId) { - cache.splice(i, 1); - } - } - cache.unshift([uuid, UploadId, Math.round(Date.now() / 1000)]); - if (cache.length > limit) cache.splice(limit); - save(); + // Introduced in DOM Level 3: + lookupNamespaceURI:function(prefix){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + if(prefix in map){ + return map[prefix] ; + } + } + el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; + } + return null; }, - // UploadId 已用完,移除掉 - removeUploadId: function (UploadId) { - init.call(this); - delete mod.using[UploadId]; - for (var i = cache.length - 1; i >= 0; i--) { - if (cache[i][1] === UploadId) cache.splice(i, 1); - } - save(); + // Introduced in DOM Level 3: + isDefaultNamespace:function(namespaceURI){ + var prefix = this.lookupPrefix(namespaceURI); + return prefix == null; } }; -module.exports = mod; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -var COS = __webpack_require__(7); -module.exports = COS; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; +function _xmlEncoder(c){ + return c == '<' && '<' || + c == '>' && '>' || + c == '&' && '&' || + c == '"' && '"' || + '&#'+c.charCodeAt()+';' +} -var util = __webpack_require__(0); -var event = __webpack_require__(4); -var task = __webpack_require__(18); -var base = __webpack_require__(19); -var advance = __webpack_require__(21); +copy(NodeType,Node); +copy(NodeType,Node.prototype); -var defaultOptions = { - AppId: '', // AppId 已废弃,请拼接到 Bucket 后传入,例如:test-1250000000 - SecretId: '', - SecretKey: '', - SecurityToken: '', // 使用临时密钥需要注意自行刷新 Token - ChunkRetryTimes: 2, - FileParallelLimit: 3, - ChunkParallelLimit: 3, - ChunkSize: 1024 * 1024, - SliceSize: 1024 * 1024, - CopyChunkParallelLimit: 20, - CopyChunkSize: 1024 * 1024 * 10, - CopySliceSize: 1024 * 1024 * 10, - MaxPartNumber: 10000, - ProgressInterval: 1000, - Domain: '', - ServiceDomain: '', - Protocol: '', - CompatibilityMode: false, - ForcePathStyle: false, - UseRawKey: false, - Timeout: 0, // 单位毫秒,0 代表不设置超时时间 - CorrectClockSkew: true, - SystemClockOffset: 0, // 单位毫秒,ms - UploadCheckContentMd5: false, - UploadQueueSize: 10000, - UploadAddMetaMd5: false, - UploadIdCacheLimit: 50, - UseAccelerate: false, - ForceSignHost: true // 默认将host加入签名计算,关闭后可能导致越权风险,建议保持为true -}; +/** + * @param callback return true for continue,false for break + * @return boolean true: break visit; + */ +function _visitNode(node,callback){ + if(callback(node)){ + return true; + } + if(node = node.firstChild){ + do{ + if(_visitNode(node,callback)){return true} + }while(node=node.nextSibling) + } +} -// 对外暴露的类 -var COS = function (options) { - this.options = util.extend(util.clone(defaultOptions), options || {}); - this.options.FileParallelLimit = Math.max(1, this.options.FileParallelLimit); - this.options.ChunkParallelLimit = Math.max(1, this.options.ChunkParallelLimit); - this.options.ChunkRetryTimes = Math.max(0, this.options.ChunkRetryTimes); - this.options.ChunkSize = Math.max(1024 * 1024, this.options.ChunkSize); - this.options.CopyChunkParallelLimit = Math.max(1, this.options.CopyChunkParallelLimit); - this.options.CopyChunkSize = Math.max(1024 * 1024, this.options.CopyChunkSize); - this.options.CopySliceSize = Math.max(0, this.options.CopySliceSize); - this.options.MaxPartNumber = Math.max(1024, Math.min(10000, this.options.MaxPartNumber)); - this.options.Timeout = Math.max(0, this.options.Timeout); - if (this.options.AppId) { - console.warn('warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g: "test-1250000000").'); - } - if (this.options.SecretId && this.options.SecretId.indexOf(' ') > -1) { - console.error('error: SecretId格式错误,请检查'); - console.error('error: SecretId format is incorrect. Please check'); - } - if (this.options.SecretKey && this.options.SecretKey.indexOf(' ') > -1) { - console.error('error: SecretKey格式错误,请检查'); - console.error('error: SecretKey format is incorrect. Please check'); - } - if (util.isNode()) { - console.warn('warning: cos-js-sdk-v5 不支持 nodejs 环境使用,请改用 cos-nodejs-sdk-v5,参考文档: https://cloud.tencent.com/document/product/436/8629'); - console.warn('warning: cos-js-sdk-v5 does not support nodejs environment. Please use cos-nodejs-sdk-v5 instead. See: https://cloud.tencent.com/document/product/436/8629'); - } - event.init(this); - task.init(this); -}; -base.init(COS, task); -advance.init(COS, task); -COS.util = { - md5: util.md5, - xml2json: util.xml2json, - json2xml: util.json2xml -}; -COS.getAuthorization = util.getAuth; -COS.version = '1.3.10'; +function Document(){ +} -module.exports = COS; +function _onAddAttribute(doc,el,newAttr){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns === NAMESPACE.XMLNS){ + //update namespace + el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value + } +} -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { +function _onRemoveAttribute(doc,el,newAttr,remove){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns === NAMESPACE.XMLNS){ + //update namespace + delete el._nsMap[newAttr.prefix?newAttr.localName:''] + } +} -/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/* https://github.com/emn178/js-md5 */ -(function () { - 'use strict'; +/** + * Updates `el.childNodes`, updating the indexed items and it's `length`. + * Passing `newChild` means it will be appended. + * Otherwise it's assumed that an item has been removed, + * and `el.firstNode` and it's `.nextSibling` are used + * to walk the current list of child nodes. + * + * @param {Document} doc + * @param {Node} el + * @param {Node} [newChild] + * @private + */ +function _onUpdateChild (doc, el, newChild) { + if(doc && doc._inc){ + doc._inc++; + //update childNodes + var cs = el.childNodes; + if (newChild) { + cs[cs.length++] = newChild; + } else { + var child = el.firstChild; + var i = 0; + while (child) { + cs[i++] = child; + child = child.nextSibling; + } + cs.length = i; + delete cs[cs.length]; + } + } +} - var ERROR = 'input is invalid type'; - var WINDOW = typeof window === 'object'; - var root = WINDOW ? window : {}; - if (root.JS_MD5_NO_WINDOW) { - WINDOW = false; - } - var WEB_WORKER = !WINDOW && typeof self === 'object'; - var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node; - if (NODE_JS) { - root = global; - } else if (WEB_WORKER) { - root = self; - } - var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports; - var AMD = "function" === 'function' && __webpack_require__(10); - var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined'; - var HEX_CHARS = '0123456789abcdef'.split(''); - var EXTRA = [128, 32768, 8388608, -2147483648]; - var SHIFT = [0, 8, 16, 24]; - var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64']; - var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - - var blocks = [], - buffer8; - if (ARRAY_BUFFER) { - var buffer = new ArrayBuffer(68); - buffer8 = new Uint8Array(buffer); - blocks = new Uint32Array(buffer); - } +/** + * Removes the connections between `parentNode` and `child` + * and any existing `child.previousSibling` or `child.nextSibling`. + * + * @see https://github.com/xmldom/xmldom/issues/135 + * @see https://github.com/xmldom/xmldom/issues/145 + * + * @param {Node} parentNode + * @param {Node} child + * @returns {Node} the child that was removed. + * @private + */ +function _removeChild (parentNode, child) { + var previous = child.previousSibling; + var next = child.nextSibling; + if (previous) { + previous.nextSibling = next; + } else { + parentNode.firstChild = next; + } + if (next) { + next.previousSibling = previous; + } else { + parentNode.lastChild = previous; + } + child.parentNode = null; + child.previousSibling = null; + child.nextSibling = null; + _onUpdateChild(parentNode.ownerDocument, parentNode); + return child; +} +/** + * preformance key(refChild == null) + */ +function _insertBefore(parentNode,newChild,nextChild){ + var cp = newChild.parentNode; + if(cp){ + cp.removeChild(newChild);//remove and update + } + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + var newFirst = newChild.firstChild; + if (newFirst == null) { + return newChild; + } + var newLast = newChild.lastChild; + }else{ + newFirst = newLast = newChild; + } + var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; - if (root.JS_MD5_NO_NODE_JS || !Array.isArray) { - Array.isArray = function (obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; - }; - } - - if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) { - ArrayBuffer.isView = function (obj) { - return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer; - }; - } - - /** - * @method hex - * @memberof md5 - * @description Output hash as hex string - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {String} Hex string - * @example - * md5.hex('The quick brown fox jumps over the lazy dog'); - * // equal to - * md5('The quick brown fox jumps over the lazy dog'); - */ - /** - * @method digest - * @memberof md5 - * @description Output hash as bytes array - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {Array} Bytes array - * @example - * md5.digest('The quick brown fox jumps over the lazy dog'); - */ - /** - * @method array - * @memberof md5 - * @description Output hash as bytes array - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {Array} Bytes array - * @example - * md5.array('The quick brown fox jumps over the lazy dog'); - */ - /** - * @method arrayBuffer - * @memberof md5 - * @description Output hash as ArrayBuffer - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {ArrayBuffer} ArrayBuffer - * @example - * md5.arrayBuffer('The quick brown fox jumps over the lazy dog'); - */ - /** - * @method buffer - * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead. - * @memberof md5 - * @description Output hash as ArrayBuffer - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {ArrayBuffer} ArrayBuffer - * @example - * md5.buffer('The quick brown fox jumps over the lazy dog'); - */ - /** - * @method base64 - * @memberof md5 - * @description Output hash as base64 string - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {String} base64 string - * @example - * md5.base64('The quick brown fox jumps over the lazy dog'); - */ - var createOutputMethod = function (outputType) { - return function (message, isBinStr) { - return new Md5(true).update(message, isBinStr)[outputType](); - }; - }; - - /** - * @method create - * @memberof md5 - * @description Create Md5 object - * @returns {Md5} Md5 object. - * @example - * var hash = md5.create(); - */ - /** - * @method update - * @memberof md5 - * @description Create and update Md5 object - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {Md5} Md5 object. - * @example - * var hash = md5.update('The quick brown fox jumps over the lazy dog'); - * // equal to - * var hash = md5.create(); - * hash.update('The quick brown fox jumps over the lazy dog'); - */ - var createMethod = function () { - var method = createOutputMethod('hex'); - if (NODE_JS) { - method = nodeWrap(method); - } - method.getCtx = method.create = function () { - return new Md5(); - }; - method.update = function (message) { - return method.create().update(message); - }; - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method[type] = createOutputMethod(type); - } - return method; - }; - - var nodeWrap = function (method) { - var crypto = eval("require('crypto')"); - var Buffer = eval("require('buffer').Buffer"); - var nodeMethod = function (message) { - if (typeof message === 'string') { - return crypto.createHash('md5').update(message, 'utf8').digest('hex'); - } else { - if (message === null || message === undefined) { - throw ERROR; - } else if (message.constructor === ArrayBuffer) { - message = new Uint8Array(message); - } - } - if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer) { - return crypto.createHash('md5').update(new Buffer(message)).digest('hex'); - } else { - return method(message); - } - }; - return nodeMethod; - }; - - /** - * Md5 class - * @class Md5 - * @description This is internal class. - * @see {@link md5.create} - */ - function Md5(sharedMemory) { - if (sharedMemory) { - blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; - this.blocks = blocks; - this.buffer8 = buffer8; - } else { - if (ARRAY_BUFFER) { - var buffer = new ArrayBuffer(68); - this.buffer8 = new Uint8Array(buffer); - this.blocks = new Uint32Array(buffer); - } else { - this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - } - this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0; - this.finalized = this.hashed = false; - this.first = true; - } - - /** - * @method update - * @memberof Md5 - * @instance - * @description Update hash - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {Md5} Md5 object. - * @see {@link md5.update} - */ - Md5.prototype.update = function (message, isBinStr) { - if (this.finalized) { - return; - } - - var code, - index = 0, - i, - length = message.length, - blocks = this.blocks; - var buffer8 = this.buffer8; - - while (index < length) { - if (this.hashed) { - this.hashed = false; - blocks[0] = blocks[16]; - blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; - } - - if (ARRAY_BUFFER) { - for (i = this.start; index < length && i < 64; ++index) { - code = message.charCodeAt(index); - if (isBinStr || code < 0x80) { - buffer8[i++] = code; - } else if (code < 0x800) { - buffer8[i++] = 0xc0 | code >> 6; - buffer8[i++] = 0x80 | code & 0x3f; - } else if (code < 0xd800 || code >= 0xe000) { - buffer8[i++] = 0xe0 | code >> 12; - buffer8[i++] = 0x80 | code >> 6 & 0x3f; - buffer8[i++] = 0x80 | code & 0x3f; - } else { - code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); - buffer8[i++] = 0xf0 | code >> 18; - buffer8[i++] = 0x80 | code >> 12 & 0x3f; - buffer8[i++] = 0x80 | code >> 6 & 0x3f; - buffer8[i++] = 0x80 | code & 0x3f; - } - } - } else { - for (i = this.start; index < length && i < 64; ++index) { - code = message.charCodeAt(index); - if (isBinStr || code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); - blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } - } - } - this.lastByteIndex = i; - this.bytes += i - this.start; - if (i >= 64) { - this.start = i - 64; - this.hash(); - this.hashed = true; - } else { - this.start = i; - } - } - if (this.bytes > 4294967295) { - this.hBytes += this.bytes / 4294967296 << 0; - this.bytes = this.bytes % 4294967296; - } - return this; - }; - - Md5.prototype.finalize = function () { - if (this.finalized) { - return; - } - this.finalized = true; - var blocks = this.blocks, - i = this.lastByteIndex; - blocks[i >> 2] |= EXTRA[i & 3]; - if (i >= 56) { - if (!this.hashed) { - this.hash(); - } - blocks[0] = blocks[16]; - blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0; - } - blocks[14] = this.bytes << 3; - blocks[15] = this.hBytes << 3 | this.bytes >>> 29; - this.hash(); - }; - - Md5.prototype.hash = function () { - var a, - b, - c, - d, - bc, - da, - blocks = this.blocks; - - if (this.first) { - a = blocks[0] - 680876937; - a = (a << 7 | a >>> 25) - 271733879 << 0; - d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708; - d = (d << 12 | d >>> 20) + a << 0; - c = (-271733879 ^ d & (a ^ -271733879)) + blocks[2] - 1126478375; - c = (c << 17 | c >>> 15) + d << 0; - b = (a ^ c & (d ^ a)) + blocks[3] - 1316259209; - b = (b << 22 | b >>> 10) + c << 0; - } else { - a = this.h0; - b = this.h1; - c = this.h2; - d = this.h3; - a += (d ^ b & (c ^ d)) + blocks[0] - 680876936; - a = (a << 7 | a >>> 25) + b << 0; - d += (c ^ a & (b ^ c)) + blocks[1] - 389564586; - d = (d << 12 | d >>> 20) + a << 0; - c += (b ^ d & (a ^ b)) + blocks[2] + 606105819; - c = (c << 17 | c >>> 15) + d << 0; - b += (a ^ c & (d ^ a)) + blocks[3] - 1044525330; - b = (b << 22 | b >>> 10) + c << 0; - } - - a += (d ^ b & (c ^ d)) + blocks[4] - 176418897; - a = (a << 7 | a >>> 25) + b << 0; - d += (c ^ a & (b ^ c)) + blocks[5] + 1200080426; - d = (d << 12 | d >>> 20) + a << 0; - c += (b ^ d & (a ^ b)) + blocks[6] - 1473231341; - c = (c << 17 | c >>> 15) + d << 0; - b += (a ^ c & (d ^ a)) + blocks[7] - 45705983; - b = (b << 22 | b >>> 10) + c << 0; - a += (d ^ b & (c ^ d)) + blocks[8] + 1770035416; - a = (a << 7 | a >>> 25) + b << 0; - d += (c ^ a & (b ^ c)) + blocks[9] - 1958414417; - d = (d << 12 | d >>> 20) + a << 0; - c += (b ^ d & (a ^ b)) + blocks[10] - 42063; - c = (c << 17 | c >>> 15) + d << 0; - b += (a ^ c & (d ^ a)) + blocks[11] - 1990404162; - b = (b << 22 | b >>> 10) + c << 0; - a += (d ^ b & (c ^ d)) + blocks[12] + 1804603682; - a = (a << 7 | a >>> 25) + b << 0; - d += (c ^ a & (b ^ c)) + blocks[13] - 40341101; - d = (d << 12 | d >>> 20) + a << 0; - c += (b ^ d & (a ^ b)) + blocks[14] - 1502002290; - c = (c << 17 | c >>> 15) + d << 0; - b += (a ^ c & (d ^ a)) + blocks[15] + 1236535329; - b = (b << 22 | b >>> 10) + c << 0; - a += (c ^ d & (b ^ c)) + blocks[1] - 165796510; - a = (a << 5 | a >>> 27) + b << 0; - d += (b ^ c & (a ^ b)) + blocks[6] - 1069501632; - d = (d << 9 | d >>> 23) + a << 0; - c += (a ^ b & (d ^ a)) + blocks[11] + 643717713; - c = (c << 14 | c >>> 18) + d << 0; - b += (d ^ a & (c ^ d)) + blocks[0] - 373897302; - b = (b << 20 | b >>> 12) + c << 0; - a += (c ^ d & (b ^ c)) + blocks[5] - 701558691; - a = (a << 5 | a >>> 27) + b << 0; - d += (b ^ c & (a ^ b)) + blocks[10] + 38016083; - d = (d << 9 | d >>> 23) + a << 0; - c += (a ^ b & (d ^ a)) + blocks[15] - 660478335; - c = (c << 14 | c >>> 18) + d << 0; - b += (d ^ a & (c ^ d)) + blocks[4] - 405537848; - b = (b << 20 | b >>> 12) + c << 0; - a += (c ^ d & (b ^ c)) + blocks[9] + 568446438; - a = (a << 5 | a >>> 27) + b << 0; - d += (b ^ c & (a ^ b)) + blocks[14] - 1019803690; - d = (d << 9 | d >>> 23) + a << 0; - c += (a ^ b & (d ^ a)) + blocks[3] - 187363961; - c = (c << 14 | c >>> 18) + d << 0; - b += (d ^ a & (c ^ d)) + blocks[8] + 1163531501; - b = (b << 20 | b >>> 12) + c << 0; - a += (c ^ d & (b ^ c)) + blocks[13] - 1444681467; - a = (a << 5 | a >>> 27) + b << 0; - d += (b ^ c & (a ^ b)) + blocks[2] - 51403784; - d = (d << 9 | d >>> 23) + a << 0; - c += (a ^ b & (d ^ a)) + blocks[7] + 1735328473; - c = (c << 14 | c >>> 18) + d << 0; - b += (d ^ a & (c ^ d)) + blocks[12] - 1926607734; - b = (b << 20 | b >>> 12) + c << 0; - bc = b ^ c; - a += (bc ^ d) + blocks[5] - 378558; - a = (a << 4 | a >>> 28) + b << 0; - d += (bc ^ a) + blocks[8] - 2022574463; - d = (d << 11 | d >>> 21) + a << 0; - da = d ^ a; - c += (da ^ b) + blocks[11] + 1839030562; - c = (c << 16 | c >>> 16) + d << 0; - b += (da ^ c) + blocks[14] - 35309556; - b = (b << 23 | b >>> 9) + c << 0; - bc = b ^ c; - a += (bc ^ d) + blocks[1] - 1530992060; - a = (a << 4 | a >>> 28) + b << 0; - d += (bc ^ a) + blocks[4] + 1272893353; - d = (d << 11 | d >>> 21) + a << 0; - da = d ^ a; - c += (da ^ b) + blocks[7] - 155497632; - c = (c << 16 | c >>> 16) + d << 0; - b += (da ^ c) + blocks[10] - 1094730640; - b = (b << 23 | b >>> 9) + c << 0; - bc = b ^ c; - a += (bc ^ d) + blocks[13] + 681279174; - a = (a << 4 | a >>> 28) + b << 0; - d += (bc ^ a) + blocks[0] - 358537222; - d = (d << 11 | d >>> 21) + a << 0; - da = d ^ a; - c += (da ^ b) + blocks[3] - 722521979; - c = (c << 16 | c >>> 16) + d << 0; - b += (da ^ c) + blocks[6] + 76029189; - b = (b << 23 | b >>> 9) + c << 0; - bc = b ^ c; - a += (bc ^ d) + blocks[9] - 640364487; - a = (a << 4 | a >>> 28) + b << 0; - d += (bc ^ a) + blocks[12] - 421815835; - d = (d << 11 | d >>> 21) + a << 0; - da = d ^ a; - c += (da ^ b) + blocks[15] + 530742520; - c = (c << 16 | c >>> 16) + d << 0; - b += (da ^ c) + blocks[2] - 995338651; - b = (b << 23 | b >>> 9) + c << 0; - a += (c ^ (b | ~d)) + blocks[0] - 198630844; - a = (a << 6 | a >>> 26) + b << 0; - d += (b ^ (a | ~c)) + blocks[7] + 1126891415; - d = (d << 10 | d >>> 22) + a << 0; - c += (a ^ (d | ~b)) + blocks[14] - 1416354905; - c = (c << 15 | c >>> 17) + d << 0; - b += (d ^ (c | ~a)) + blocks[5] - 57434055; - b = (b << 21 | b >>> 11) + c << 0; - a += (c ^ (b | ~d)) + blocks[12] + 1700485571; - a = (a << 6 | a >>> 26) + b << 0; - d += (b ^ (a | ~c)) + blocks[3] - 1894986606; - d = (d << 10 | d >>> 22) + a << 0; - c += (a ^ (d | ~b)) + blocks[10] - 1051523; - c = (c << 15 | c >>> 17) + d << 0; - b += (d ^ (c | ~a)) + blocks[1] - 2054922799; - b = (b << 21 | b >>> 11) + c << 0; - a += (c ^ (b | ~d)) + blocks[8] + 1873313359; - a = (a << 6 | a >>> 26) + b << 0; - d += (b ^ (a | ~c)) + blocks[15] - 30611744; - d = (d << 10 | d >>> 22) + a << 0; - c += (a ^ (d | ~b)) + blocks[6] - 1560198380; - c = (c << 15 | c >>> 17) + d << 0; - b += (d ^ (c | ~a)) + blocks[13] + 1309151649; - b = (b << 21 | b >>> 11) + c << 0; - a += (c ^ (b | ~d)) + blocks[4] - 145523070; - a = (a << 6 | a >>> 26) + b << 0; - d += (b ^ (a | ~c)) + blocks[11] - 1120210379; - d = (d << 10 | d >>> 22) + a << 0; - c += (a ^ (d | ~b)) + blocks[2] + 718787259; - c = (c << 15 | c >>> 17) + d << 0; - b += (d ^ (c | ~a)) + blocks[9] - 343485551; - b = (b << 21 | b >>> 11) + c << 0; - - if (this.first) { - this.h0 = a + 1732584193 << 0; - this.h1 = b - 271733879 << 0; - this.h2 = c - 1732584194 << 0; - this.h3 = d + 271733878 << 0; - this.first = false; - } else { - this.h0 = this.h0 + a << 0; - this.h1 = this.h1 + b << 0; - this.h2 = this.h2 + c << 0; - this.h3 = this.h3 + d << 0; - } - }; - - /** - * @method hex - * @memberof Md5 - * @instance - * @description Output hash as hex string - * @returns {String} Hex string - * @see {@link md5.hex} - * @example - * hash.hex(); - */ - Md5.prototype.hex = function () { - this.finalize(); + newFirst.previousSibling = pre; + newLast.nextSibling = nextChild; + + + if(pre){ + pre.nextSibling = newFirst; + }else{ + parentNode.firstChild = newFirst; + } + if(nextChild == null){ + parentNode.lastChild = newLast; + }else{ + nextChild.previousSibling = newLast; + } + do{ + newFirst.parentNode = parentNode; + }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) + _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); + //console.log(parentNode.lastChild.nextSibling == null) + if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { + newChild.firstChild = newChild.lastChild = null; + } + return newChild; +} - var h0 = this.h0, - h1 = this.h1, - h2 = this.h2, - h3 = this.h3; +/** + * Appends `newChild` to `parentNode`. + * If `newChild` is already connected to a `parentNode` it is first removed from it. + * + * @see https://github.com/xmldom/xmldom/issues/135 + * @see https://github.com/xmldom/xmldom/issues/145 + * @param {Node} parentNode + * @param {Node} newChild + * @returns {Node} + * @private + */ +function _appendSingleChild (parentNode, newChild) { + if (newChild.parentNode) { + newChild.parentNode.removeChild(newChild); + } + newChild.parentNode = parentNode; + newChild.previousSibling = parentNode.lastChild; + newChild.nextSibling = null; + if (newChild.previousSibling) { + newChild.previousSibling.nextSibling = newChild; + } else { + parentNode.firstChild = newChild; + } + parentNode.lastChild = newChild; + _onUpdateChild(parentNode.ownerDocument, parentNode, newChild); + return newChild; +} - return HEX_CHARS[h0 >> 4 & 0x0F] + HEX_CHARS[h0 & 0x0F] + HEX_CHARS[h0 >> 12 & 0x0F] + HEX_CHARS[h0 >> 8 & 0x0F] + HEX_CHARS[h0 >> 20 & 0x0F] + HEX_CHARS[h0 >> 16 & 0x0F] + HEX_CHARS[h0 >> 28 & 0x0F] + HEX_CHARS[h0 >> 24 & 0x0F] + HEX_CHARS[h1 >> 4 & 0x0F] + HEX_CHARS[h1 & 0x0F] + HEX_CHARS[h1 >> 12 & 0x0F] + HEX_CHARS[h1 >> 8 & 0x0F] + HEX_CHARS[h1 >> 20 & 0x0F] + HEX_CHARS[h1 >> 16 & 0x0F] + HEX_CHARS[h1 >> 28 & 0x0F] + HEX_CHARS[h1 >> 24 & 0x0F] + HEX_CHARS[h2 >> 4 & 0x0F] + HEX_CHARS[h2 & 0x0F] + HEX_CHARS[h2 >> 12 & 0x0F] + HEX_CHARS[h2 >> 8 & 0x0F] + HEX_CHARS[h2 >> 20 & 0x0F] + HEX_CHARS[h2 >> 16 & 0x0F] + HEX_CHARS[h2 >> 28 & 0x0F] + HEX_CHARS[h2 >> 24 & 0x0F] + HEX_CHARS[h3 >> 4 & 0x0F] + HEX_CHARS[h3 & 0x0F] + HEX_CHARS[h3 >> 12 & 0x0F] + HEX_CHARS[h3 >> 8 & 0x0F] + HEX_CHARS[h3 >> 20 & 0x0F] + HEX_CHARS[h3 >> 16 & 0x0F] + HEX_CHARS[h3 >> 28 & 0x0F] + HEX_CHARS[h3 >> 24 & 0x0F]; - }; +Document.prototype = { + //implementation : null, + nodeName : '#document', + nodeType : DOCUMENT_NODE, + /** + * The DocumentType node of the document. + * + * @readonly + * @type DocumentType + */ + doctype : null, + documentElement : null, + _inc : 1, - /** - * @method toString - * @memberof Md5 - * @instance - * @description Output hash as hex string - * @returns {String} Hex string - * @see {@link md5.hex} - * @example - * hash.toString(); - */ - Md5.prototype.toString = Md5.prototype.hex; + insertBefore : function(newChild, refChild){//raises + if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ + var child = newChild.firstChild; + while(child){ + var next = child.nextSibling; + this.insertBefore(child,refChild); + child = next; + } + return newChild; + } + if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){ + this.documentElement = newChild; + } - /** - * @method digest - * @memberof Md5 - * @instance - * @description Output hash as bytes array - * @returns {Array} Bytes array - * @see {@link md5.digest} - * @example - * hash.digest(); - */ - Md5.prototype.digest = function (format) { - if (format === 'hex') return this.hex(); - this.finalize(); - - var h0 = this.h0, - h1 = this.h1, - h2 = this.h2, - h3 = this.h3; - var res = [h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >> 24 & 0xFF]; - return res; - }; + return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; + }, + removeChild : function(oldChild){ + if(this.documentElement == oldChild){ + this.documentElement = null; + } + return _removeChild(this,oldChild); + }, + // Introduced in DOM Level 2: + importNode : function(importedNode,deep){ + return importNode(this,importedNode,deep); + }, + // Introduced in DOM Level 2: + getElementById : function(id){ + var rtv = null; + _visitNode(this.documentElement,function(node){ + if(node.nodeType == ELEMENT_NODE){ + if(node.getAttribute('id') == id){ + rtv = node; + return true; + } + } + }) + return rtv; + }, - /** - * @method array - * @memberof Md5 - * @instance - * @description Output hash as bytes array - * @returns {Array} Bytes array - * @see {@link md5.array} - * @example - * hash.array(); - */ - Md5.prototype.array = Md5.prototype.digest; + /** + * The `getElementsByClassName` method of `Document` interface returns an array-like object + * of all child elements which have **all** of the given class name(s). + * + * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters. + * + * + * Warning: This is a live LiveNodeList. + * Changes in the DOM will reflect in the array as the changes occur. + * If an element selected by this array no longer qualifies for the selector, + * it will automatically be removed. Be aware of this for iteration purposes. + * + * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName + * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname + */ + getElementsByClassName: function(classNames) { + var classNamesSet = toOrderedSet(classNames) + return new LiveNodeList(this, function(base) { + var ls = []; + if (classNamesSet.length > 0) { + _visitNode(base.documentElement, function(node) { + if(node !== base && node.nodeType === ELEMENT_NODE) { + var nodeClassNames = node.getAttribute('class') + // can be null if the attribute does not exist + if (nodeClassNames) { + // before splitting and iterating just compare them for the most common case + var matches = classNames === nodeClassNames; + if (!matches) { + var nodeClassNamesSet = toOrderedSet(nodeClassNames) + matches = classNamesSet.every(arrayIncludes(nodeClassNamesSet)) + } + if(matches) { + ls.push(node); + } + } + } + }); + } + return ls; + }); + }, - /** - * @method arrayBuffer - * @memberof Md5 - * @instance - * @description Output hash as ArrayBuffer - * @returns {ArrayBuffer} ArrayBuffer - * @see {@link md5.arrayBuffer} - * @example - * hash.arrayBuffer(); - */ - Md5.prototype.arrayBuffer = function () { - this.finalize(); - - var buffer = new ArrayBuffer(16); - var blocks = new Uint32Array(buffer); - blocks[0] = this.h0; - blocks[1] = this.h1; - blocks[2] = this.h2; - blocks[3] = this.h3; - return buffer; - }; - - /** - * @method buffer - * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead. - * @memberof Md5 - * @instance - * @description Output hash as ArrayBuffer - * @returns {ArrayBuffer} ArrayBuffer - * @see {@link md5.buffer} - * @example - * hash.buffer(); - */ - Md5.prototype.buffer = Md5.prototype.arrayBuffer; - - /** - * @method base64 - * @memberof Md5 - * @instance - * @description Output hash as base64 string - * @returns {String} base64 string - * @see {@link md5.base64} - * @example - * hash.base64(); - */ - Md5.prototype.base64 = function () { - var v1, - v2, - v3, - base64Str = '', - bytes = this.array(); - for (var i = 0; i < 15;) { - v1 = bytes[i++]; - v2 = bytes[i++]; - v3 = bytes[i++]; - base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + BASE64_ENCODE_CHAR[v3 & 63]; - } - v1 = bytes[i]; - base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[v1 << 4 & 63] + '=='; - return base64Str; - }; - - var exports = createMethod(); - - if (COMMON_JS) { - module.exports = exports; - } else { - /** - * @method md5 - * @description Md5 hash function, export to global in browsers. - * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash - * @returns {String} md5 hashes - * @example - * md5(''); // d41d8cd98f00b204e9800998ecf8427e - * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6 - * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0 - * - * // It also supports UTF-8 encoding - * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07 - * - * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` - * md5([]); // d41d8cd98f00b204e9800998ecf8427e - * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e - */ - root.md5 = exports; - if (AMD) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { - return exports; - }).call(exports, __webpack_require__, exports, module), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } - } -})(); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(9))) - -/***/ }), -/* 9 */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 10 */ -/***/ (function(module, exports) { - -/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ -module.exports = __webpack_amd_options__; - -/* WEBPACK VAR INJECTION */}.call(exports, {})) - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -/* - CryptoJS v3.1.2 - code.google.com/p/crypto-js - (c) 2009-2013 by Jeff Mott. All rights reserved. - code.google.com/p/crypto-js/wiki/License - */ -var CryptoJS = CryptoJS || function (g, l) { - var e = {}, - d = e.lib = {}, - m = function () {}, - k = d.Base = { extend: function (a) { - m.prototype = this;var c = new m();a && c.mixIn(a);c.hasOwnProperty("init") || (c.init = function () { - c.$super.init.apply(this, arguments); - });c.init.prototype = c;c.$super = this;return c; - }, create: function () { - var a = this.extend();a.init.apply(a, arguments);return a; - }, init: function () {}, mixIn: function (a) { - for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);a.hasOwnProperty("toString") && (this.toString = a.toString); - }, clone: function () { - return this.init.prototype.extend(this); - } }, - p = d.WordArray = k.extend({ init: function (a, c) { - a = this.words = a || [];this.sigBytes = c != l ? c : 4 * a.length; - }, toString: function (a) { - return (a || n).stringify(this); - }, concat: function (a) { - var c = this.words, - q = a.words, - f = this.sigBytes;a = a.sigBytes;this.clamp();if (f % 4) for (var b = 0; b < a; b++) c[f + b >>> 2] |= (q[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((f + b) % 4);else if (65535 < q.length) for (b = 0; b < a; b += 4) c[f + b >>> 2] = q[b >>> 2];else c.push.apply(c, q);this.sigBytes += a;return this; - }, clamp: function () { - var a = this.words, - c = this.sigBytes;a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);a.length = g.ceil(c / 4); - }, clone: function () { - var a = k.clone.call(this);a.words = this.words.slice(0);return a; - }, random: function (a) { - for (var c = [], b = 0; b < a; b += 4) c.push(4294967296 * g.random() | 0);return new p.init(c, a); - } }), - b = e.enc = {}, - n = b.Hex = { stringify: function (a) { - var c = a.words;a = a.sigBytes;for (var b = [], f = 0; f < a; f++) { - var d = c[f >>> 2] >>> 24 - 8 * (f % 4) & 255;b.push((d >>> 4).toString(16));b.push((d & 15).toString(16)); - }return b.join(""); - }, parse: function (a) { - for (var c = a.length, b = [], f = 0; f < c; f += 2) b[f >>> 3] |= parseInt(a.substr(f, 2), 16) << 24 - 4 * (f % 8);return new p.init(b, c / 2); - } }, - j = b.Latin1 = { stringify: function (a) { - var c = a.words;a = a.sigBytes;for (var b = [], f = 0; f < a; f++) b.push(String.fromCharCode(c[f >>> 2] >>> 24 - 8 * (f % 4) & 255));return b.join(""); - }, parse: function (a) { - for (var c = a.length, b = [], f = 0; f < c; f++) b[f >>> 2] |= (a.charCodeAt(f) & 255) << 24 - 8 * (f % 4);return new p.init(b, c); - } }, - h = b.Utf8 = { stringify: function (a) { - try { - return decodeURIComponent(escape(j.stringify(a))); - } catch (c) { - throw Error("Malformed UTF-8 data"); - } - }, parse: function (a) { - return j.parse(unescape(encodeURIComponent(a))); - } }, - r = d.BufferedBlockAlgorithm = k.extend({ reset: function () { - this._data = new p.init();this._nDataBytes = 0; - }, _append: function (a) { - "string" == typeof a && (a = h.parse(a));this._data.concat(a);this._nDataBytes += a.sigBytes; - }, _process: function (a) { - var c = this._data, - b = c.words, - f = c.sigBytes, - d = this.blockSize, - e = f / (4 * d), - e = a ? g.ceil(e) : g.max((e | 0) - this._minBufferSize, 0);a = e * d;f = g.min(4 * a, f);if (a) { - for (var k = 0; k < a; k += d) this._doProcessBlock(b, k);k = b.splice(0, a);c.sigBytes -= f; - }return new p.init(k, f); - }, clone: function () { - var a = k.clone.call(this); - a._data = this._data.clone();return a; - }, _minBufferSize: 0 });d.Hasher = r.extend({ cfg: k.extend(), init: function (a) { - this.cfg = this.cfg.extend(a);this.reset(); - }, reset: function () { - r.reset.call(this);this._doReset(); - }, update: function (a) { - this._append(a);this._process();return this; - }, finalize: function (a) { - a && this._append(a);return this._doFinalize(); - }, blockSize: 16, _createHelper: function (a) { - return function (b, d) { - return new a.init(d).finalize(b); - }; - }, _createHmacHelper: function (a) { - return function (b, d) { - return new s.HMAC.init(a, d).finalize(b); - }; - } });var s = e.algo = {};return e; -}(Math); -(function () { - var g = CryptoJS, - l = g.lib, - e = l.WordArray, - d = l.Hasher, - m = [], - l = g.algo.SHA1 = d.extend({ _doReset: function () { - this._hash = new e.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]); - }, _doProcessBlock: function (d, e) { - for (var b = this._hash.words, n = b[0], j = b[1], h = b[2], g = b[3], l = b[4], a = 0; 80 > a; a++) { - if (16 > a) m[a] = d[e + a] | 0;else { - var c = m[a - 3] ^ m[a - 8] ^ m[a - 14] ^ m[a - 16];m[a] = c << 1 | c >>> 31; - }c = (n << 5 | n >>> 27) + l + m[a];c = 20 > a ? c + ((j & h | ~j & g) + 1518500249) : 40 > a ? c + ((j ^ h ^ g) + 1859775393) : 60 > a ? c + ((j & h | j & g | h & g) - 1894007588) : c + ((j ^ h ^ g) - 899497514);l = g;g = h;h = j << 30 | j >>> 2;j = n;n = c; - }b[0] = b[0] + n | 0;b[1] = b[1] + j | 0;b[2] = b[2] + h | 0;b[3] = b[3] + g | 0;b[4] = b[4] + l | 0; - }, _doFinalize: function () { - var d = this._data, - e = d.words, - b = 8 * this._nDataBytes, - g = 8 * d.sigBytes;e[g >>> 5] |= 128 << 24 - g % 32;e[(g + 64 >>> 9 << 4) + 14] = Math.floor(b / 4294967296);e[(g + 64 >>> 9 << 4) + 15] = b;d.sigBytes = 4 * e.length;this._process();return this._hash; - }, clone: function () { - var e = d.clone.call(this);e._hash = this._hash.clone();return e; - } });g.SHA1 = d._createHelper(l);g.HmacSHA1 = d._createHmacHelper(l); -})(); -(function () { - var g = CryptoJS, - l = g.enc.Utf8;g.algo.HMAC = g.lib.Base.extend({ init: function (e, d) { - e = this._hasher = new e.init();"string" == typeof d && (d = l.parse(d));var g = e.blockSize, - k = 4 * g;d.sigBytes > k && (d = e.finalize(d));d.clamp();for (var p = this._oKey = d.clone(), b = this._iKey = d.clone(), n = p.words, j = b.words, h = 0; h < g; h++) n[h] ^= 1549556828, j[h] ^= 909522486;p.sigBytes = b.sigBytes = k;this.reset(); - }, reset: function () { - var e = this._hasher;e.reset();e.update(this._iKey); - }, update: function (e) { - this._hasher.update(e);return this; - }, finalize: function (e) { - var d = this._hasher;e = d.finalize(e);d.reset();return d.finalize(this._oKey.clone().concat(e)); - } }); -})(); - -(function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; + //document factory method: + createElement : function(tagName){ + var node = new Element(); + node.ownerDocument = this; + node.nodeName = tagName; + node.tagName = tagName; + node.localName = tagName; + node.childNodes = new NodeList(); + var attrs = node.attributes = new NamedNodeMap(); + attrs._ownerElement = node; + return node; + }, + createDocumentFragment : function(){ + var node = new DocumentFragment(); + node.ownerDocument = this; + node.childNodes = new NodeList(); + return node; + }, + createTextNode : function(data){ + var node = new Text(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createComment : function(data){ + var node = new Comment(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createCDATASection : function(data){ + var node = new CDATASection(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createProcessingInstruction : function(target,data){ + var node = new ProcessingInstruction(); + node.ownerDocument = this; + node.tagName = node.target = target; + node.nodeValue= node.data = data; + return node; + }, + createAttribute : function(name){ + var node = new Attr(); + node.ownerDocument = this; + node.name = name; + node.nodeName = name; + node.localName = name; + node.specified = true; + return node; + }, + createEntityReference : function(name){ + var node = new EntityReference(); + node.ownerDocument = this; + node.nodeName = name; + return node; + }, + // Introduced in DOM Level 2: + createElementNS : function(namespaceURI,qualifiedName){ + var node = new Element(); + var pl = qualifiedName.split(':'); + var attrs = node.attributes = new NamedNodeMap(); + node.childNodes = new NodeList(); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.tagName = qualifiedName; + node.namespaceURI = namespaceURI; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + attrs._ownerElement = node; + return node; + }, + // Introduced in DOM Level 2: + createAttributeNS : function(namespaceURI,qualifiedName){ + var node = new Attr(); + var pl = qualifiedName.split(':'); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.name = qualifiedName; + node.namespaceURI = namespaceURI; + node.specified = true; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + return node; + } +}; +_extends(Document,Node); - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff; - var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff; - var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff; - - var triplet = byte1 << 16 | byte2 << 8 | byte3; - - for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) { - base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f)); - } - } - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } +function Element() { + this._nsMap = {}; +}; +Element.prototype = { + nodeType : ELEMENT_NODE, + hasAttribute : function(name){ + return this.getAttributeNode(name)!=null; + }, + getAttribute : function(name){ + var attr = this.getAttributeNode(name); + return attr && attr.value || ''; + }, + getAttributeNode : function(name){ + return this.attributes.getNamedItem(name); + }, + setAttribute : function(name, value){ + var attr = this.ownerDocument.createAttribute(name); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + removeAttribute : function(name){ + var attr = this.getAttributeNode(name) + attr && this.removeAttributeNode(attr); + }, + + //four real opeartion method + appendChild:function(newChild){ + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + return this.insertBefore(newChild,null); + }else{ + return _appendSingleChild(this,newChild); + } + }, + setAttributeNode : function(newAttr){ + return this.attributes.setNamedItem(newAttr); + }, + setAttributeNodeNS : function(newAttr){ + return this.attributes.setNamedItemNS(newAttr); + }, + removeAttributeNode : function(oldAttr){ + //console.log(this == oldAttr.ownerElement) + return this.attributes.removeNamedItem(oldAttr.nodeName); + }, + //get real attribute name,and remove it by removeAttributeNode + removeAttributeNS : function(namespaceURI, localName){ + var old = this.getAttributeNodeNS(namespaceURI, localName); + old && this.removeAttributeNode(old); + }, + + hasAttributeNS : function(namespaceURI, localName){ + return this.getAttributeNodeNS(namespaceURI, localName)!=null; + }, + getAttributeNS : function(namespaceURI, localName){ + var attr = this.getAttributeNodeNS(namespaceURI, localName); + return attr && attr.value || ''; + }, + setAttributeNS : function(namespaceURI, qualifiedName, value){ + var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + getAttributeNodeNS : function(namespaceURI, localName){ + return this.attributes.getNamedItemNS(namespaceURI, localName); + }, + + getElementsByTagName : function(tagName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ + ls.push(node); + } + }); + return ls; + }); + }, + getElementsByTagNameNS : function(namespaceURI, localName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ + ls.push(node); + } + }); + return ls; + + }); + } +}; +Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; +Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; - return base64Chars.join(''); - }, - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } +_extends(Element,Node); +function Attr() { +}; +Attr.prototype.nodeType = ATTRIBUTE_NODE; +_extends(Attr,Node); - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << i % 4 * 2; - var bits2 = map.indexOf(base64Str.charAt(i)) >>> 6 - i % 4 * 2; - words[nBytes >>> 2] |= (bits1 | bits2) << 24 - nBytes % 4 * 8; - nBytes++; - } - } - return WordArray.create(words, nBytes); - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; -})(); +function CharacterData() { +}; +CharacterData.prototype = { + data : '', + substringData : function(offset, count) { + return this.data.substring(offset, offset+count); + }, + appendData: function(text) { + text = this.data+text; + this.nodeValue = this.data = text; + this.length = text.length; + }, + insertData: function(offset,text) { + this.replaceData(offset,0,text); + + }, + appendChild:function(newChild){ + throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR]) + }, + deleteData: function(offset, count) { + this.replaceData(offset,count,""); + }, + replaceData: function(offset, count, text) { + var start = this.data.substring(0,offset); + var end = this.data.substring(offset+count); + text = start + text + end; + this.nodeValue = this.data = text; + this.length = text.length; + } +} +_extends(CharacterData,Node); +function Text() { +}; +Text.prototype = { + nodeName : "#text", + nodeType : TEXT_NODE, + splitText : function(offset) { + var text = this.data; + var newText = text.substring(offset); + text = text.substring(0, offset); + this.data = this.nodeValue = text; + this.length = text.length; + var newNode = this.ownerDocument.createTextNode(newText); + if(this.parentNode){ + this.parentNode.insertBefore(newNode, this.nextSibling); + } + return newNode; + } +} +_extends(Text,CharacterData); +function Comment() { +}; +Comment.prototype = { + nodeName : "#comment", + nodeType : COMMENT_NODE +} +_extends(Comment,CharacterData); -if (true) { - module.exports = CryptoJS; -} else { - window.CryptoJS = CryptoJS; +function CDATASection() { +}; +CDATASection.prototype = { + nodeName : "#cdata-section", + nodeType : CDATA_SECTION_NODE } +_extends(CDATASection,CharacterData); -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { -/* Copyright 2015 William Summers, MetaTribal LLC - * adapted from https://developer.mozilla.org/en-US/docs/JXON - * - * Licensed under the MIT License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/MIT - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @author William Summers - * https://github.com/metatribal/xmlToJSON - */ -var DOMParser = __webpack_require__(13).DOMParser; +function DocumentType() { +}; +DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; +_extends(DocumentType,Node); -var xmlToJSON = function () { +function Notation() { +}; +Notation.prototype.nodeType = NOTATION_NODE; +_extends(Notation,Node); - this.version = "1.3.5"; +function Entity() { +}; +Entity.prototype.nodeType = ENTITY_NODE; +_extends(Entity,Node); - var options = { // set up the default options - mergeCDATA: true, // extract cdata and merge with text - normalize: true, // collapse multiple spaces to single space - stripElemPrefix: true // for elements of same name in diff namespaces, you can enable namespaces and access the nskey property - }; +function EntityReference() { +}; +EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; +_extends(EntityReference,Node); - var prefixMatch = new RegExp(/(?!xmlns)^.*:/); - var trimMatch = new RegExp(/^\s+|\s+$/g); +function DocumentFragment() { +}; +DocumentFragment.prototype.nodeName = "#document-fragment"; +DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; +_extends(DocumentFragment,Node); - this.grokType = function (sValue) { - if (/^\s*$/.test(sValue)) { - return null; - } - if (/^(?:true|false)$/i.test(sValue)) { - return sValue.toLowerCase() === "true"; - } - if (isFinite(sValue)) { - return parseFloat(sValue); - } - return sValue; - }; - this.parseString = function (xmlString, opt) { - if (xmlString) { - var xml = this.stringToXML(xmlString); - if (xml.getElementsByTagName('parsererror').length) { - return null; - } else { - return this.parseXML(xml, opt); - } - } else { - return null; - } - }; +function ProcessingInstruction() { +} +ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; +_extends(ProcessingInstruction,Node); +function XMLSerializer(){} +XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){ + return nodeSerializeToString.call(node,isHtml,nodeFilter); +} +Node.prototype.toString = nodeSerializeToString; +function nodeSerializeToString(isHtml,nodeFilter){ + var buf = []; + var refNode = this.nodeType == 9 && this.documentElement || this; + var prefix = refNode.prefix; + var uri = refNode.namespaceURI; + + if(uri && prefix == null){ + //console.log(prefix) + var prefix = refNode.lookupPrefix(uri); + if(prefix == null){ + //isHTML = true; + var visibleNamespaces=[ + {namespace:uri,prefix:null} + //{namespace:uri,prefix:''} + ] + } + } + serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces); + //console.log('###',this.nodeType,uri,prefix,buf.join('')) + return buf.join(''); +} - this.parseXML = function (oXMLParent, opt) { +function needNamespaceDefine(node, isHTML, visibleNamespaces) { + var prefix = node.prefix || ''; + var uri = node.namespaceURI; + // According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) , + // and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl : + // > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty. + // in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using) + // and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared : + // > [...] Furthermore, the attribute value [...] must not be an empty string. + // so serializing empty namespace value like xmlns:ds="" would produce an invalid XML document. + if (!uri) { + return false; + } + if (prefix === "xml" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) { + return false; + } + + var i = visibleNamespaces.length + while (i--) { + var ns = visibleNamespaces[i]; + // get namespace prefix + if (ns.prefix === prefix) { + return ns.namespace !== uri; + } + } + return true; +} +/** + * Well-formed constraint: No < in Attribute Values + * > The replacement text of any entity referred to directly or indirectly + * > in an attribute value must not contain a <. + * @see https://www.w3.org/TR/xml11/#CleanAttrVals + * @see https://www.w3.org/TR/xml11/#NT-AttValue + * + * Literal whitespace other than space that appear in attribute values + * are serialized as their entity references, so they will be preserved. + * (In contrast to whitespace literals in the input which are normalized to spaces) + * @see https://www.w3.org/TR/xml11/#AVNormalize + * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes + */ +function addSerializedAttribute(buf, qualifiedName, value) { + buf.push(' ', qualifiedName, '="', value.replace(/[<>&"\t\n\r]/g, _xmlEncoder), '"') +} - // initialize options - for (var key in opt) { - options[key] = opt[key]; - } +function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){ + if (!visibleNamespaces) { + visibleNamespaces = []; + } - var vResult = {}, - nLength = 0, - sCollectedTxt = ""; + if(nodeFilter){ + node = nodeFilter(node); + if(node){ + if(typeof node == 'string'){ + buf.push(node); + return; + } + }else{ + return; + } + //buf.sort.apply(attrs, attributeSorter); + } - // iterate over the children - var childNum = oXMLParent.childNodes.length; - if (childNum) { - for (var oNode, sProp, vContent, nItem = 0; nItem < oXMLParent.childNodes.length; nItem++) { - oNode = oXMLParent.childNodes.item(nItem); + switch(node.nodeType){ + case ELEMENT_NODE: + var attrs = node.attributes; + var len = attrs.length; + var child = node.firstChild; + var nodeName = node.tagName; + + isHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML - if (oNode.nodeType === 4) { - if (options.mergeCDATA) { - sCollectedTxt += oNode.nodeValue; - } - } /* nodeType is "CDATASection" (4) */ - else if (oNode.nodeType === 3) { - sCollectedTxt += oNode.nodeValue; - } /* nodeType is "Text" (3) */ - else if (oNode.nodeType === 1) { - /* nodeType is "Element" (1) */ - - if (nLength === 0) { - vResult = {}; - } - - // using nodeName to support browser (IE) implementation with no 'localName' property - if (options.stripElemPrefix) { - sProp = oNode.nodeName.replace(prefixMatch, ''); - } else { - sProp = oNode.nodeName; - } - - vContent = xmlToJSON.parseXML(oNode); - - if (vResult.hasOwnProperty(sProp)) { - if (vResult[sProp].constructor !== Array) { - vResult[sProp] = [vResult[sProp]]; - } - vResult[sProp].push(vContent); - } else { - vResult[sProp] = vContent; - nLength++; - } - } - } - } + var prefixedNodeName = nodeName + if (!isHTML && !node.prefix && node.namespaceURI) { + var defaultNS + // lookup current default ns from `xmlns` attribute + for (var ai = 0; ai < attrs.length; ai++) { + if (attrs.item(ai).name === 'xmlns') { + defaultNS = attrs.item(ai).value + break + } + } + if (!defaultNS) { + // lookup current default ns in visibleNamespaces + for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { + var namespace = visibleNamespaces[nsi] + if (namespace.prefix === '' && namespace.namespace === node.namespaceURI) { + defaultNS = namespace.namespace + break + } + } + } + if (defaultNS !== node.namespaceURI) { + for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { + var namespace = visibleNamespaces[nsi] + if (namespace.namespace === node.namespaceURI) { + if (namespace.prefix) { + prefixedNodeName = namespace.prefix + ':' + nodeName + } + break + } + } + } + } - if (!Object.keys(vResult).length) { - // vResult = sCollectedTxt.replace(trimMatch, '') || ''; // by carsonxu 修复 getBucket返回的 Key 是 " /" 这种场景 - vResult = sCollectedTxt || ''; - } + buf.push('<', prefixedNodeName); - return vResult; - }; - - // Convert xmlDocument to a string - // Returns null on failure - this.xmlToString = function (xmlDoc) { - try { - var xmlString = xmlDoc.xml ? xmlDoc.xml : new XMLSerializer().serializeToString(xmlDoc); - return xmlString; - } catch (err) { - return null; - } - }; - - // Convert a string to XML Node Structure - // Returns null on failure - this.stringToXML = function (xmlString) { - try { - var xmlDoc = null; - - if (window.DOMParser) { - - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(xmlString, "text/xml"); - - return xmlDoc; - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = false; - xmlDoc.loadXML(xmlString); - - return xmlDoc; - } - } catch (e) { - return null; - } - }; - - return this; -}.call({}); - -var xml2json = function (xmlString) { - return xmlToJSON.parseString(xmlString); -}; + for(var i=0;i'); + //if is cdata child node + if(isHTML && /^script$/i.test(nodeName)){ + while(child){ + if(child.data){ + buf.push(child.data); + }else{ + serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); + } + child = child.nextSibling; + } + }else + { + while(child){ + serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); + child = child.nextSibling; + } + } + buf.push(''); + }else{ + buf.push('/>'); + } + // remove added visible namespaces + //visibleNamespaces.length = startVisibleNamespaces; + return; + case DOCUMENT_NODE: + case DOCUMENT_FRAGMENT_NODE: + var child = node.firstChild; + while(child){ + serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); + child = child.nextSibling; + } + return; + case ATTRIBUTE_NODE: + return addSerializedAttribute(buf, node.name, node.value); + case TEXT_NODE: + /** + * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form, + * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. + * If they are needed elsewhere, they must be escaped using either numeric character references or the strings + * `&` and `<` respectively. + * The right angle bracket (>) may be represented using the string " > ", and must, for compatibility, + * be escaped using either `>` or a character reference when it appears in the string `]]>` in content, + * when that string is not marking the end of a CDATA section. + * + * In the content of elements, character data is any string of characters + * which does not contain the start-delimiter of any markup + * and does not include the CDATA-section-close delimiter, `]]>`. + * + * @see https://www.w3.org/TR/xml/#NT-CharData + * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node + */ + return buf.push(node.data + .replace(/[<&>]/g,_xmlEncoder) + ); + case CDATA_SECTION_NODE: + return buf.push( ''); + case COMMENT_NODE: + return buf.push( ""); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push(''); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM ', sysid, '>'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( ""); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } +} +function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i XML parsed entities are often stored in computer files which, - * > for editing convenience, are organized into lines. - * > These lines are typically separated by some combination - * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA). - * > - * > To simplify the tasks of applications, the XML processor must behave - * > as if it normalized all line breaks in external parsed entities (including the document entity) - * > on input, before parsing, by translating all of the following to a single #xA character: - * > - * > 1. the two-character sequence #xD #xA - * > 2. the two-character sequence #xD #x85 - * > 3. the single character #x85 - * > 4. the single character #x2028 - * > 5. any #xD character that is not immediately followed by #xA or #x85. - * - * @param {string} input - * @returns {string} - */ -function normalizeLineEndings(input) { - return input - .replace(/\r[\n\u0085]/g, '\n') - .replace(/[\r\u0085\u2028]/g, '\n') -} +/***/ }), -/** - * @typedef Locator - * @property {number} [columnNumber] - * @property {number} [lineNumber] - */ +/***/ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/entities.js": +/*!***************************************************************************!*\ + !*** ./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/entities.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -/** - * @typedef DOMParserOptions - * @property {DOMHandler} [domBuilder] - * @property {Function} [errorHandler] - * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing - * defaults to `normalizeLineEndings` - * @property {Locator} [locator] - * @property {Record} [xmlns] - * - * @see normalizeLineEndings - */ +var freeze = __webpack_require__(/*! ./conventions */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/conventions.js").freeze; /** - * The DOMParser interface provides the ability to parse XML or HTML source code - * from a string into a DOM `Document`. - * - * _xmldom is different from the spec in that it allows an `options` parameter, - * to override the default behavior._ - * - * @param {DOMParserOptions} [options] - * @constructor + * The entities that are predefined in every XML document. * - * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser - * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization + * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1 + * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0 + * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia */ -function DOMParser(options){ - this.options = options ||{locator:{}}; -} - -DOMParser.prototype.parseFromString = function(source,mimeType){ - var options = this.options; - var sax = new XMLReader(); - var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler - var errorHandler = options.errorHandler; - var locator = options.locator; - var defaultNSMap = options.xmlns||{}; - var isHTML = /\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1; - var entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES; - if(locator){ - domBuilder.setDocumentLocator(locator) - } - - sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); - sax.domBuilder = options.domBuilder || domBuilder; - if(isHTML){ - defaultNSMap[''] = NAMESPACE.HTML; - } - defaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML; - var normalize = options.normalizeLineEndings || normalizeLineEndings; - if (source && typeof source === 'string') { - sax.parse( - normalize(source), - defaultNSMap, - entityMap - ) - } else { - sax.errorHandler.error('invalid doc source') - } - return domBuilder.doc; -} -function buildErrorHandler(errorImpl,domBuilder,locator){ - if(!errorImpl){ - if(domBuilder instanceof DOMHandler){ - return domBuilder; - } - errorImpl = domBuilder ; - } - var errorHandler = {} - var isCallback = errorImpl instanceof Function; - locator = locator||{} - function build(key){ - var fn = errorImpl[key]; - if(!fn && isCallback){ - fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; - } - errorHandler[key] = fn && function(msg){ - fn('[xmldom '+key+']\t'+msg+_locator(locator)); - }||function(){}; - } - build('warning'); - build('error'); - build('fatalError'); - return errorHandler; -} +exports.XML_ENTITIES = freeze({amp:'&', apos:"'", gt:'>', lt:'<', quot:'"'}) -//console.log('#\n\n\n\n\n\n\n####') /** - * +ContentHandler+ErrorHandler - * +LexicalHandler+EntityResolver2 - * -DeclHandler-DTDHandler + * A map of currently 241 entities that are detected in an HTML document. + * They contain all entries from `XML_ENTITIES`. * - * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler - * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 - * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html - */ -function DOMHandler() { - this.cdata = false; -} -function position(locator,node){ - node.lineNumber = locator.lineNumber; - node.columnNumber = locator.columnNumber; -} -/** - * @see org.xml.sax.ContentHandler#startDocument - * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html - */ -DOMHandler.prototype = { - startDocument : function() { - this.doc = new DOMImplementation().createDocument(null, null, null); - if (this.locator) { - this.doc.documentURI = this.locator.systemId; - } - }, - startElement:function(namespaceURI, localName, qName, attrs) { - var doc = this.doc; - var el = doc.createElementNS(namespaceURI, qName||localName); - var len = attrs.length; - appendElement(this, el); - this.currentElement = el; - - this.locator && position(this.locator,el) - for (var i = 0 ; i < len; i++) { - var namespaceURI = attrs.getURI(i); - var value = attrs.getValue(i); - var qName = attrs.getQName(i); - var attr = doc.createAttributeNS(namespaceURI, qName); - this.locator &&position(attrs.getLocator(i),attr); - attr.value = attr.nodeValue = value; - el.setAttributeNode(attr) - } - }, - endElement:function(namespaceURI, localName, qName) { - var current = this.currentElement - var tagName = current.tagName; - this.currentElement = current.parentNode; - }, - startPrefixMapping:function(prefix, uri) { - }, - endPrefixMapping:function(prefix) { - }, - processingInstruction:function(target, data) { - var ins = this.doc.createProcessingInstruction(target, data); - this.locator && position(this.locator,ins) - appendElement(this, ins); - }, - ignorableWhitespace:function(ch, start, length) { - }, - characters:function(chars, start, length) { - chars = _toString.apply(this,arguments) - //console.log(chars) - if(chars){ - if (this.cdata) { - var charNode = this.doc.createCDATASection(chars); - } else { - var charNode = this.doc.createTextNode(chars); - } - if(this.currentElement){ - this.currentElement.appendChild(charNode); - }else if(/^\s*$/.test(chars)){ - this.doc.appendChild(charNode); - //process xml - } - this.locator && position(this.locator,charNode) - } - }, - skippedEntity:function(name) { - }, - endDocument:function() { - this.doc.normalize(); - }, - setDocumentLocator:function (locator) { - if(this.locator = locator){// && !('lineNumber' in locator)){ - locator.lineNumber = 0; - } - }, - //LexicalHandler - comment:function(chars, start, length) { - chars = _toString.apply(this,arguments) - var comm = this.doc.createComment(chars); - this.locator && position(this.locator,comm) - appendElement(this, comm); - }, - - startCDATA:function() { - //used in characters() methods - this.cdata = true; - }, - endCDATA:function() { - this.cdata = false; - }, - - startDTD:function(name, publicId, systemId) { - var impl = this.doc.implementation; - if (impl && impl.createDocumentType) { - var dt = impl.createDocumentType(name, publicId, systemId); - this.locator && position(this.locator,dt) - appendElement(this, dt); - this.doc.doctype = dt; - } - }, - /** - * @see org.xml.sax.ErrorHandler - * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html - */ - warning:function(error) { - console.warn('[xmldom warning]\t'+error,_locator(this.locator)); - }, - error:function(error) { - console.error('[xmldom error]\t'+error,_locator(this.locator)); - }, - fatalError:function(error) { - throw new ParseError(error, this.locator); - } -} -function _locator(l){ - if(l){ - return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' - } -} -function _toString(chars,start,length){ - if(typeof chars == 'string'){ - return chars.substr(start,length) - }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") - if(chars.length >= start+length || start){ - return new java.lang.String(chars,start,length)+''; - } - return chars; - } -} - -/* - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html - * used method of org.xml.sax.ext.LexicalHandler: - * #comment(chars, start, length) - * #startCDATA() - * #endCDATA() - * #startDTD(name, publicId, systemId) - * - * - * IGNORED method of org.xml.sax.ext.LexicalHandler: - * #endDTD() - * #startEntity(name) - * #endEntity(name) - * - * - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html - * IGNORED method of org.xml.sax.ext.DeclHandler - * #attributeDecl(eName, aName, type, mode, value) - * #elementDecl(name, model) - * #externalEntityDecl(name, publicId, systemId) - * #internalEntityDecl(name, value) - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html - * IGNORED method of org.xml.sax.EntityResolver2 - * #resolveEntity(String name,String publicId,String baseURI,String systemId) - * #resolveEntity(publicId, systemId) - * #getExternalSubset(name, baseURI) - * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html - * IGNORED method of org.xml.sax.DTDHandler - * #notationDecl(name, publicId, systemId) {}; - * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; - */ -"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ - DOMHandler.prototype[key] = function(){return null} -}) - -/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ -function appendElement (hander,node) { - if (!hander.currentElement) { - hander.doc.appendChild(node); - } else { - hander.currentElement.appendChild(node); - } -}//appendChild and setAttributeNS are preformance key - -exports.__DOMHandler = DOMHandler; -exports.normalizeLineEndings = normalizeLineEndings; -exports.DOMParser = DOMParser; - - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __webpack_require__) { - -var freeze = __webpack_require__(1).freeze; - -/** - * The entities that are predefined in every XML document. - * - * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1 - * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0 - * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia - */ -exports.XML_ENTITIES = freeze({amp:'&', apos:"'", gt:'>', lt:'<', quot:'"'}) - -/** - * A map of currently 241 entities that are detected in an HTML document. - * They contain all entries from `XML_ENTITIES`. - * - * @see XML_ENTITIES - * @see DOMParser.parseFromString - * @see DOMImplementation.prototype.createHTMLDocument - * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec - * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names - * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML - * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML) - * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML) + * @see XML_ENTITIES + * @see DOMParser.parseFromString + * @see DOMImplementation.prototype.createHTMLDocument + * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec + * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names + * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML + * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML) + * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML) */ exports.HTML_ENTITIES = freeze({ lt: '<', @@ -4669,6220 +6179,8427 @@ exports.HTML_ENTITIES = freeze({ diams: "♦" }); -/** - * @deprecated use `HTML_ENTITIES` instead - * @see HTML_ENTITIES - */ -exports.entityMap = exports.HTML_ENTITIES +/** + * @deprecated use `HTML_ENTITIES` instead + * @see HTML_ENTITIES + */ +exports.entityMap = exports.HTML_ENTITIES + + +/***/ }), + +/***/ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/index.js": +/*!************************************************************************!*\ + !*** ./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/index.js ***! + \************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var dom = __webpack_require__(/*! ./dom */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/dom.js") +exports.DOMImplementation = dom.DOMImplementation +exports.XMLSerializer = dom.XMLSerializer +exports.DOMParser = __webpack_require__(/*! ./dom-parser */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/dom-parser.js").DOMParser + + +/***/ }), + +/***/ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/sax.js": +/*!**********************************************************************!*\ + !*** ./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/sax.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var NAMESPACE = __webpack_require__(/*! ./conventions */ "./node_modules/_@xmldom_xmldom@0.8.2@@xmldom/xmldom/lib/conventions.js").NAMESPACE; + +//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] +//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] +//[5] Name ::= NameStartChar (NameChar)* +var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF +var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"); +var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); +//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/ +//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',') + +//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE +//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE +var S_TAG = 0;//tag name offerring +var S_ATTR = 1;//attr name offerring +var S_ATTR_SPACE=2;//attr name end and space offer +var S_EQ = 3;//=space? +var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only) +var S_ATTR_END = 5;//attr value end and no space(quot end) +var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer) +var S_TAG_CLOSE = 7;//closed el + +/** + * Creates an error that will not be caught by XMLReader aka the SAX parser. + * + * @param {string} message + * @param {any?} locator Optional, can provide details about the location in the source + * @constructor + */ +function ParseError(message, locator) { + this.message = message + this.locator = locator + if(Error.captureStackTrace) Error.captureStackTrace(this, ParseError); +} +ParseError.prototype = new Error(); +ParseError.prototype.name = ParseError.name + +function XMLReader(){ + +} + +XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}) + parse(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } +} +function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if (Object.hasOwnProperty.call(entityMap, k)) { + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + if(end>start){ + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end + } + } + function position(p,m){ + while(p>=lineEnd && (m = linePattern.exec(source))){ + lineStart = m.index; + lineEnd = lineStart + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = p-lineStart+1; + } + var lineStart = 0; + var lineEnd = 0; + var linePattern = /.*(?:\r\n?|\n)|.*$/g + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}] + var closeMap = {}; + var start = 0; + while(true){ + try{ + var tagStart = source.indexOf('<',start); + if(tagStart<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.doc; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(tagStart>start){ + appendText(tagStart); + } + switch(source.charAt(tagStart+1)){ + case '/': + var end = source.indexOf('>',tagStart+3); + var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, ''); + var config = parseStack.pop(); + if(end<0){ + + tagName = source.substring(tagStart+2).replace(/[\s<].*/,''); + errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName); + end = tagStart+1+tagName.length; + }else if(tagName.match(/\s + locator&&position(tagStart); + end = parseInstruction(source,tagStart,domBuilder); + break; + case '!':// start){ + start = end; + }else{ + //TODO: 这里有可能sax回退,有位置错误风险 + appendText(Math.max(tagStart,start)+1); + } + } +} +function copyLocator(f,t){ + t.lineNumber = f.lineNumber; + t.columnNumber = f.columnNumber; + return t; +} + +/** + * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){ + + /** + * @param {string} qname + * @param {string} value + * @param {number} startIndex + */ + function addAttribute(qname, value, startIndex) { + if (el.attributeNames.hasOwnProperty(qname)) { + errorHandler.fatalError('Attribute ' + qname + ' redefined') + } + el.addValue( + qname, + // @see https://www.w3.org/TR/xml/#AVNormalize + // since the xmldom sax parser does not "interpret" DTD the following is not implemented: + // - recursive replacement of (DTD) entity references + // - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA + value.replace(/[\t\n\r]/g, ' ').replace(/&#?\w+;/g, entityReplacer), + startIndex + ) + } + var attrName; + var value; + var p = ++start; + var s = S_TAG;//status + while(true){ + var c = source.charAt(p); + switch(c){ + case '=': + if(s === S_ATTR){//attrName + attrName = source.slice(start,p); + s = S_EQ; + }else if(s === S_ATTR_SPACE){ + s = S_EQ; + }else{ + //fatalError: equal must after attrName or space after attrName + throw new Error('attribute equal must after attrName'); // No known test case + } + break; + case '\'': + case '"': + if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE + ){//equal + if(s === S_ATTR){ + errorHandler.warning('attribute value must after "="') + attrName = source.slice(start,p) + } + start = p+1; + p = source.indexOf(c,start) + if(p>0){ + value = source.slice(start, p); + addAttribute(attrName, value, start-1); + s = S_ATTR_END; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_ATTR_NOQUOT_VALUE){ + value = source.slice(start, p); + addAttribute(attrName, value, start); + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_ATTR_END + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); // No known test case + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + s =S_TAG_CLOSE; + el.closed = true; + case S_ATTR_NOQUOT_VALUE: + case S_ATTR: + case S_ATTR_SPACE: + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") // No known test case + } + break; + case ''://end document + errorHandler.error('unexpected end of input'); + if(s == S_TAG){ + el.setTagName(source.slice(start,p)); + } + return p; + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + break;//normal + case S_ATTR_NOQUOT_VALUE://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1) + } + case S_ATTR_SPACE: + if(s === S_ATTR_SPACE){ + value = attrName; + } + if(s == S_ATTR_NOQUOT_VALUE){ + errorHandler.warning('attribute "'+value+'" missed quot(")!'); + addAttribute(attrName, value, start) + }else{ + if(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') + } + addAttribute(value, value, start) + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } +// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_TAG_SPACE; + break; + case S_ATTR: + attrName = source.slice(start,p) + s = S_ATTR_SPACE; + break; + case S_ATTR_NOQUOT_VALUE: + var value = source.slice(start, p); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + addAttribute(attrName, value, start) + case S_ATTR_END: + s = S_TAG_SPACE; + break; + //case S_TAG_SPACE: + //case S_EQ: + //case S_ATTR_SPACE: + // void();break; + //case S_TAG_CLOSE: + //ignore warning + } + }else{//not space +//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE +//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_ATTR_NOQUOT_VALUE:void();break; + case S_ATTR_SPACE: + var tagName = el.tagName; + if (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) { + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!') + } + addAttribute(attrName, attrName, start); + start = p; + s = S_ATTR; + break; + case S_ATTR_END: + errorHandler.warning('attribute space is required"'+attrName+'"!!') + case S_TAG_SPACE: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_ATTR_NOQUOT_VALUE; + start = p; + break; + case S_TAG_CLOSE: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + }//end outer switch + //console.log('p++',p) + p++; + } +} +/** + * @return true if has new namespace define + */ +function appendElement(el,domBuilder,currentNSMap){ + var tagName = el.tagName; + var localNSMap = null; + //var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName + }else{ + localName = qName; + prefix = null + nsPrefix = qName === 'xmlns' && '' + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {} + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}) + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = NAMESPACE.XMLNS + domBuilder.startPrefixMapping(nsPrefix, value) + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = NAMESPACE.XML; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix || ''] + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for(prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + //parseStack.push(el); + return true; + } +} +function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; +} +function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = source.lastIndexOf('') + if(pos',start+4); + //append comment source.substring(4,end)//',start+4); - //append comment source.substring(4,end)//