UNPKG

@tarojs/taro-alipay

Version:
1,758 lines (1,447 loc) 110 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var taro = require('@tarojs/taro'); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } /* eslint-disable */ var objectIs = Object.is || function (x, y) { if (x === y) { return x !== 0 || 1 / x === 1 / y; } return x !== x && y !== y; }; function shallowEqual(obj1, obj2) { if (_typeof(obj1) !== 'object' && _typeof(obj2) !== 'object') { return obj1 === obj2; } if (obj1 === null && obj2 === null) { return true; } if (obj1 === null || obj2 === null) { return false; } if (objectIs(obj1, obj2)) { return true; } var obj1Keys = obj1 ? Object.keys(obj1) : []; var obj2Keys = obj2 ? Object.keys(obj2) : []; if (obj1Keys.length !== obj2Keys.length) { return false; } for (var i = 0; i < obj1Keys.length; i++) { var obj1KeyItem = obj1Keys[i]; if (!obj2.hasOwnProperty(obj1KeyItem) || !objectIs(obj1[obj1KeyItem], obj2[obj1KeyItem])) { return false; } } return true; } var SimpleMap = /*#__PURE__*/function () { function SimpleMap() { _classCallCheck(this, SimpleMap); this.cache = []; this.size = 0; } _createClass(SimpleMap, [{ key: "set", value: function set(k, v) { var len = this.cache.length; if (!len) { this.cache.push({ k: k, v: v }); this.size += 1; return; } for (var i = 0; i < len; i++) { var item = this.cache[i]; if (item.k === k) { item.v = v; return; } } this.cache.push({ k: k, v: v }); this.size += 1; } }, { key: "get", value: function get(k) { var len = this.cache.length; if (!len) { return; } for (var i = 0; i < len; i++) { var item = this.cache[i]; if (item.k === k) { return item.v; } } } }, { key: "has", value: function has(k) { var len = this.cache.length; if (!len) { return false; } for (var i = 0; i < len; i++) { var item = this.cache[i]; if (item.k === k) { return true; } } return false; } }, { key: "delete", value: function _delete(k) { var len = this.cache.length; for (var i = 0; i < len; i++) { var item = this.cache[i]; if (item.k === k) { this.cache.splice(i, 1); this.size -= 1; return true; } } return false; } }, { key: "clear", value: function clear() { var len = this.cache.length; this.size = 0; if (!len) { return; } while (len) { this.cache.pop(); len--; } } }]); return SimpleMap; }(); function addLeadingSlash(path) { return path.charAt(0) === '/' ? path : '/' + path; } function getCurrentPageUrl() { var pages = getCurrentPages(); var currentPage = pages[pages.length - 1]; return addLeadingSlash(currentPage.route || currentPage.__route__); } var nextTick = function nextTick(fn) { var _fn; for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } fn = typeof fn === 'function' ? (_fn = fn).bind.apply(_fn, [null].concat(args)) : fn; var timerFunc = my.nextTick ? my.nextTick : setTimeout; timerFunc(fn); }; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } /** Detect free variable `global` from Node.js. */ var freeGlobal = _typeof(commonjsGlobal) == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var _freeGlobal = freeGlobal; /** Detect free variable `self`. */ var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = _freeGlobal || freeSelf || Function('return this')(); var _root = root; /** Built-in value references. */ var _Symbol2 = _root.Symbol; var _Symbol = _Symbol2; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } var _getRawTag = getRawTag; /** Used for built-in method references. */ var objectProto$1 = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString$1 = objectProto$1.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString$1.call(value); } var _objectToString = objectToString; /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag$1 && symToStringTag$1 in Object(value) ? _getRawTag(value) : _objectToString(value); } var _baseGetTag = baseGetTag; /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function (arg) { return func(transform(arg)); }; } var _overArg = overArg; /** Built-in value references. */ var getPrototype = _overArg(Object.getPrototypeOf, Object); var _getPrototype = getPrototype; /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && _typeof(value) == 'object'; } var isObjectLike_1 = isObjectLike; /** `Object#toString` result references. */ var objectTag = '[object Object]'; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto$2 = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto$2.hasOwnProperty; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject(value) { if (!isObjectLike_1(value) || _baseGetTag(value) != objectTag) { return false; } var proto = _getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty$1.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } var isPlainObject_1 = isPlainObject; function isEmptyObject(obj) { if (!obj || !isPlainObject_1(obj)) { return false; } for (var n in obj) { if (obj.hasOwnProperty(n)) { return false; } } return true; } function isUndefined(o) { return o === undefined; } function isFunction(arg) { return typeof arg === 'function'; } function isArray(arg) { return Array.isArray(arg); } function shakeFnFromObject(obj) { var newObj; if (isArray(obj)) { newObj = []; var len = obj.length; for (var i = 0; i < len; i++) { newObj.push(shakeFnFromObject(obj[i])); } } else if (isPlainObject_1(obj)) { newObj = {}; for (var key in obj) { if (isFunction(obj[key])) { continue; } var ret = shakeFnFromObject(obj[key]); newObj[key] = ret; } } else { return obj; } return newObj; } var keyList = Object.keys; var hasProp = Object.prototype.hasOwnProperty; function diffArrToPath(to, from) { var res = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var keyPrev = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; var len = to.length; var _loop = function _loop(i) { var toItem = to[i]; var fromItem = from[i]; var targetKey = "".concat(keyPrev, "[").concat(i, "]"); if (toItem === fromItem) { return "continue"; } else if (_typeof(toItem) !== _typeof(fromItem)) { res[targetKey] = toItem; } else { if (_typeof(toItem) !== 'object') { res[targetKey] = toItem; } else { var arrTo = isArray(toItem); var arrFrom = isArray(fromItem); if (arrTo !== arrFrom) { res[targetKey] = toItem; } else if (arrTo && arrFrom) { if (toItem.length < fromItem.length) { res[targetKey] = toItem; } else { // 数组 diffArrToPath(toItem, fromItem, res, "".concat(targetKey)); } } else { if (!toItem || !fromItem || keyList(toItem).length < keyList(fromItem).length) { res[targetKey] = toItem; } else { // 对象 var shouldDiffObject = true; Object.keys(fromItem).some(function (key) { if (typeof toItem[key] === 'undefined' && typeof fromItem[key] !== 'undefined') { shouldDiffObject = false; return true; } }); if (shouldDiffObject) { diffObjToPath(toItem, fromItem, res, "".concat(targetKey, ".")); } else { res[targetKey] = toItem; } } } } } }; for (var i = 0; i < len; i++) { var _ret = _loop(i); if (_ret === "continue") continue; } return res; } // 比较的对象均为plainObject,且函数已被过滤 function diffObjToPath(to, from) { var res = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var keyPrev = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; var keys = keyList(to); var len = keys.length; var _loop2 = function _loop2(i) { var key = keys[i]; var toItem = to[key]; var fromItem = from[key]; var targetKey = "".concat(keyPrev).concat(key); if (toItem === fromItem) { return "continue"; } else if (!hasProp.call(from, key)) { res[targetKey] = toItem; } else if (_typeof(toItem) !== _typeof(fromItem)) { res[targetKey] = toItem; } else { if (_typeof(toItem) !== 'object') { res[targetKey] = toItem; } else { var arrTo = isArray(toItem); var arrFrom = isArray(fromItem); if (arrTo !== arrFrom) { res[targetKey] = toItem; } else if (arrTo && arrFrom) { if (toItem.length < fromItem.length) { res[targetKey] = toItem; } else { // 数组 diffArrToPath(toItem, fromItem, res, "".concat(targetKey)); } } else { // null if (!toItem || !fromItem) { res[targetKey] = toItem; } else { // 对象 var shouldDiffObject = true; Object.keys(fromItem).some(function (key) { if (typeof toItem[key] === 'undefined' && typeof fromItem[key] !== 'undefined') { shouldDiffObject = false; return true; } }); if (shouldDiffObject) { diffObjToPath(toItem, fromItem, res, "".concat(targetKey, ".")); } else { res[targetKey] = toItem; } } } } } }; for (var i = 0; i < len; i++) { var _ret2 = _loop2(i); if (_ret2 === "continue") continue; } return res; } function queryToJson(str) { var dec = decodeURIComponent; var qp = str.split('&'); var ret = {}; var name; var val; for (var i = 0, l = qp.length, item; i < l; ++i) { item = qp[i]; if (item.length) { var s = item.indexOf('='); if (s < 0) { name = dec(item); val = ''; } else { name = dec(item.slice(0, s)); val = dec(item.slice(s + 1)); } if (typeof ret[name] === 'string') { // inline'd type check ret[name] = [ret[name]]; } if (isArray(ret[name])) { ret[name].push(val); } else { ret[name] = val; } } } return ret; // Object } var _loadTime = new Date().getTime().toString(); var _i = 1; function getUniqueKey() { return _loadTime + _i++; } function getObjChainValue(obj, keyChain) { var keys = keyChain.split('.'); for (var i = 0, len = keys.length; i < len; i++) { var key = keys[i]; if (i === len - 1) return obj[key]; obj = obj[key]; } } function getElementById(component, id, type) { if (!component) return null; var res; if (type === 'component') { var childs = component.$component.$childs || {}; res = childs[id.replace('#', '')] || null; } else { var query = my.createSelectorQuery()["in"](component); res = query.select(id); } if (res) return res; return null; } function genId() { if (!my.taroCompCounter) { my.taroCompCounter = 0; } return String(my.taroCompCounter++); } if (!my.compIdsMapper) { try { my.compIdsMapper = new Map(); } catch (error) { my.compIdsMapper = new SimpleMap(); } } function genCompid(key, isNeedCreate) { if (!taro.Current || !taro.Current.current || !taro.Current.current.$scope) return []; var prevId = my.compIdsMapper.get(key); if (isNeedCreate) { var id = genId(); my.compIdsMapper.set(key, id); return [prevId, id]; } else { var _id = prevId || genId(); !prevId && my.compIdsMapper.set(key, _id); return [null, _id]; } } var prefix = 0; function genCompPrefix() { return String(prefix++); } var data = {}; function cacheDataSet(key, val) { data[key] = val; } function cacheDataGet(key, delelteAfterGet) { var temp = data[key]; delelteAfterGet && delete data[key]; return temp; } function cacheDataHas(key) { return key in data; } var anonymousFnNamePreffix = 'funPrivate'; var COLLECT_CHILDS = 'onTaroCollectChilds'; var preloadPrivateKey = '__preload_'; var PRELOAD_DATA_KEY = 'preload'; var preloadInitedComponent = '$preloadComponent'; var pageExtraFns = ['onTitleClick', 'onOptionMenuClick', 'onPageScroll', 'onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onTabItemTap']; function bindStaticFns(weappComponentConf, ComponentClass) { for (var key in ComponentClass) { typeof ComponentClass[key] === 'function' && (weappComponentConf[key] = ComponentClass[key]); } // 低版本 IOS 下部分属性不能直接访问 Object.getOwnPropertyNames(ComponentClass).forEach(function (key) { var excludes = ['arguments', 'caller', 'length', 'name', 'prototype']; if (excludes.indexOf(key) < 0) { typeof ComponentClass[key] === 'function' && (weappComponentConf[key] = ComponentClass[key]); } }); } function isToBeEvent(event) { if (!event || _typeof(event) !== 'object' || !event.timeStamp && !event.target) { return false; } return true; } function processEventTarget(ev) { var event = Object.assign({}, ev); var currentTarget = event.currentTarget, detail = event.detail, target = event.target; if (currentTarget && currentTarget.pageX && currentTarget.pageY) { currentTarget.x = currentTarget.pageX; currentTarget.y = currentTarget.pageY; } if (detail && detail.pageX && detail.pageY) { detail.x = detail.pageX; detail.y = detail.pageY; } if (target && target.pageX && target.pageY) { target.x = target.pageX; target.y = target.pageY; } return event; } function processEvent(eventHandlerName, obj) { if (obj[eventHandlerName]) return; obj[eventHandlerName] = function (event) { var scope = this.$component; if (!scope || !scope[eventHandlerName]) return; var callScope = scope; if (!isToBeEvent(event)) { return scope[eventHandlerName].apply(callScope, arguments); } else { // 将支付宝的 event 事件对象的字段,对齐微信小程序的 event = processEventTarget(event); } event.preventDefault = function () {}; event.stopPropagation = function () {}; event.currentTarget = event.currentTarget || event.target || {}; if (event.target) { Object.assign(event.target, event.detail); } Object.assign(event.currentTarget, event.detail); var isAnonymousFn = eventHandlerName.indexOf(anonymousFnNamePreffix) > -1; var realArgs = []; var datasetArgs = []; var dataset = event.currentTarget.dataset || {}; var bindArgs = {}; var eventType = event.type.toLocaleLowerCase(); Object.keys(dataset).forEach(function (key) { var keyLower = key.toLocaleLowerCase(); if (/^e/.test(keyLower)) { // 小程序属性里中划线后跟一个下划线会解析成不同的结果 keyLower = keyLower.replace(/^e/, ''); keyLower = keyLower.replace(/^on/, '').toLocaleLowerCase(); if (keyLower.indexOf(eventType) >= 0) { var argName = keyLower.replace(eventType, ''); if (/^(a[a-z]|so)$/.test(argName)) { bindArgs[argName] = dataset[key]; } } } }); // 普通的事件(非匿名函数),会直接call if (!isAnonymousFn) { if ('so' in bindArgs) { if (bindArgs['so'] !== 'this') { callScope = bindArgs['so']; } delete bindArgs['so']; } if (!isEmptyObject(bindArgs)) { datasetArgs = Object.keys(bindArgs).sort().map(function (key) { return bindArgs[key]; }); } realArgs = [].concat(_toConsumableArray(datasetArgs), [event]); } else { // 匿名函数,会将scope作为第一个参数 var _scope = null; if ('so' in bindArgs) { if (bindArgs['so'] !== 'this') { _scope = bindArgs['so']; } delete bindArgs['so']; } if (!isEmptyObject(bindArgs)) { datasetArgs = Object.keys(bindArgs).sort().map(function (key) { return bindArgs[key]; }); } realArgs = [_scope].concat(_toConsumableArray(datasetArgs), [event]); } return scope[eventHandlerName].apply(callScope, realArgs); }; } function bindEvents(weappComponentConf, events, isPage) { weappComponentConf.methods = weappComponentConf.methods || {}; var target = isPage ? weappComponentConf : weappComponentConf.methods; events.forEach(function (name) { processEvent(name, target); }); } function filterProps() { var defaultProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var propsFromPropsManager = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var curAllProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var newProps = Object.assign({}, curAllProps, propsFromPropsManager); if (!isEmptyObject(defaultProps)) { for (var propName in defaultProps) { if (newProps[propName] === undefined) { newProps[propName] = defaultProps[propName]; } } } return newProps; } function componentTrigger(component, key, args) { args = args || []; if (key === 'componentDidMount') { if (component['$$refs'] && component['$$refs'].length > 0) { var refs = {}; component['$$refs'].forEach(function (ref) { var target; if (ref.type === 'component') { var childs = component.$childs || {}; target = childs[ref.id] || null; } else { var query = my.createSelectorQuery()["in"](component.$scope); target = query.select("#".concat(ref.id)); } taro.commitAttachRef(ref, target, component, refs, true); ref.target = target; }); component.refs = Object.assign({}, component.refs || {}, refs); } } if (key === 'componentWillUnmount') { if (component.$scope.props) { var compid = component.$scope.props.compid; if (compid) my.propsManager["delete"](compid); } } component[key] && typeof component[key] === 'function' && component[key].apply(component, _toConsumableArray(args)); if (key === 'componentWillMount') { component._dirty = false; component._disable = false; component.state = component.getState(); } if (key === 'componentWillUnmount') { component._dirty = true; component._disable = true; component.$router = { params: {}, path: '' }; component._pendingStates = []; component._pendingCallbacks = []; // refs taro.detachAllRef(component); var scope = component.$scope; if (component.$scope.$page && typeof component.props[COLLECT_CHILDS] === 'function' && typeof scope.props.id === 'string') { component.props[COLLECT_CHILDS](null, scope.props.id); } } } function initComponent(isPage) { if (this.$component.__isReady) return; this.$component.__isReady = true; mountComponent(this.$component); } function createComponent(ComponentClass, isPage) { var initData = {}; var componentProps = filterProps(ComponentClass.defaultProps); var componentInstance = new ComponentClass(componentProps); componentInstance._constructor && componentInstance._constructor(componentProps); try { taro.Current.current = componentInstance; taro.Current.index = 0; componentInstance.state = componentInstance._createData() || componentInstance.state; } catch (err) { if (isPage) { console.warn("[Taro warn] \u8BF7\u7ED9\u9875\u9762\u63D0\u4F9B\u521D\u59CB `state` \u4EE5\u63D0\u9AD8\u521D\u6B21\u6E32\u67D3\u6027\u80FD\uFF01"); } else { console.warn("[Taro warn] \u8BF7\u7ED9\u7EC4\u4EF6\u63D0\u4F9B\u4E00\u4E2A `defaultProps` \u4EE5\u63D0\u9AD8\u521D\u6B21\u6E32\u67D3\u6027\u80FD\uFF01"); } console.warn(err); } initData = Object.assign({}, initData, componentInstance.props, componentInstance.state); var weappComponentConf = { data: initData }; if (isPage) { Object.assign(weappComponentConf, { onLoad: function onLoad() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (cacheDataHas(preloadInitedComponent)) { this.$component = cacheDataGet(preloadInitedComponent, true); this.$component.$componentType = 'PAGE'; } else { this.$component = new ComponentClass({}, isPage); } this.$component._init(this); this.$component.render = this.$component._createData; this.$component.__propTypes = ComponentClass.propTypes; if (cacheDataHas(PRELOAD_DATA_KEY)) { var data = cacheDataGet(PRELOAD_DATA_KEY, true); this.$component.$router.preload = data; } // merge App router params var app = getApp(); if (app.$router && app.$router.params && app.$router.params.query && Object.keys(app.$router.params.query).length && getCurrentPages().length === 1) { Object.assign(this.$component.$router.params, options, app.$router.params.query); } else { Object.assign(this.$component.$router.params, options); } this.$component.$router.path = getCurrentPageUrl(); // preload if (cacheDataHas(options[preloadPrivateKey])) { this.$component.$preloadData = cacheDataGet(options[preloadPrivateKey], true); } else { this.$component.$preloadData = null; } initComponent.apply(this, [isPage]); }, onUnload: function onUnload() { componentTrigger(this.$component, 'componentWillUnmount'); var component = this.$component; var events = component.$$renderPropsEvents; component.hooks.forEach(function (hook) { if (isFunction(hook.cleanup)) { hook.cleanup(); } }); if (isArray(events)) { events.forEach(function (e) { return taro.eventCenter.off(e); }); } }, onShow: function onShow() { this.$component && this.$component.__mounted && componentTrigger(this.$component, 'componentDidShow'); }, onHide: function onHide() { componentTrigger(this.$component, 'componentDidHide'); } }); pageExtraFns.forEach(function (fn) { if (componentInstance[fn] && typeof componentInstance[fn] === 'function') { weappComponentConf[fn] = function () { var component = this.$component; if (component && component[fn] && typeof component[fn] === 'function') { return component[fn].apply(component, arguments); } }; } }); ComponentClass.$$componentPath && cacheDataSet(ComponentClass.$$componentPath, ComponentClass); } else { Object.assign(weappComponentConf, { didMount: function didMount() { var compid = this.props.compid; var props = filterProps(ComponentClass.defaultProps, my.propsManager.map[compid], {}); this.$component = new ComponentClass(props, isPage); this.$component._init(this); this.$component.render = this.$component._createData; this.$component.__propTypes = ComponentClass.propTypes; if (compid) { my.propsManager.observers[compid] = { component: this.$component, ComponentClass: ComponentClass }; } initComponent.apply(this, [isPage]); }, didUpdate: function didUpdate(prevProps, prevData) { // 父组件每次更新,其渲染渲染的子自定义组件每次会生成不同的 compid // 但组件 didmount 中的 this.props.compid 只会是第一次 setData 的 // 因此要对自组件 didmount 前父组件多次 setData 的情况进行兜底 var previd = prevProps.compid; var compid = this.props.compid; if (previd && compid && previd !== compid && !my.propsManager.map[previd] && my.propsManager.map[compid] && !my.propsManager.observers[compid]) { my.propsManager.observers[compid] = { component: this.$component, ComponentClass: ComponentClass }; var nextProps = filterProps(ComponentClass.defaultProps, my.propsManager.map[compid], this.$component.props); this.$component.props = nextProps; updateComponent(this.$component); } }, didUnmount: function didUnmount() { var component = this.$component; componentTrigger(component, 'componentWillUnmount'); component.hooks.forEach(function (hook) { if (isFunction(hook.cleanup)) { hook.cleanup(); } }); } }); } bindStaticFns(weappComponentConf, ComponentClass); ComponentClass['$$events'] && bindEvents(weappComponentConf, ComponentClass['$$events'], isPage); return weappComponentConf; } /** @license React v16.13.1 * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var b = "function" === typeof Symbol && Symbol["for"], c = b ? Symbol["for"]("react.element") : 60103, d = b ? Symbol["for"]("react.portal") : 60106, e = b ? Symbol["for"]("react.fragment") : 60107, f = b ? Symbol["for"]("react.strict_mode") : 60108, g = b ? Symbol["for"]("react.profiler") : 60114, h = b ? Symbol["for"]("react.provider") : 60109, k = b ? Symbol["for"]("react.context") : 60110, l = b ? Symbol["for"]("react.async_mode") : 60111, m = b ? Symbol["for"]("react.concurrent_mode") : 60111, n = b ? Symbol["for"]("react.forward_ref") : 60112, p = b ? Symbol["for"]("react.suspense") : 60113, q = b ? Symbol["for"]("react.suspense_list") : 60120, r = b ? Symbol["for"]("react.memo") : 60115, t = b ? Symbol["for"]("react.lazy") : 60116, v = b ? Symbol["for"]("react.block") : 60121, w = b ? Symbol["for"]("react.fundamental") : 60117, x = b ? Symbol["for"]("react.responder") : 60118, y = b ? Symbol["for"]("react.scope") : 60119; function z(a) { if ("object" === _typeof(a) && null !== a) { var u = a.$$typeof; switch (u) { case c: switch (a = a.type, a) { case l: case m: case e: case g: case f: case p: return a; default: switch (a = a && a.$$typeof, a) { case k: case n: case t: case r: case h: return a; default: return u; } } case d: return u; } } } function A(a) { return z(a) === m; } var AsyncMode = l; var ConcurrentMode = m; var ContextConsumer = k; var ContextProvider = h; var Element = c; var ForwardRef = n; var Fragment = e; var Lazy = t; var Memo = r; var Portal = d; var Profiler = g; var StrictMode = f; var Suspense = p; var isAsyncMode = function isAsyncMode(a) { return A(a) || z(a) === l; }; var isConcurrentMode = A; var isContextConsumer = function isContextConsumer(a) { return z(a) === k; }; var isContextProvider = function isContextProvider(a) { return z(a) === h; }; var isElement = function isElement(a) { return "object" === _typeof(a) && null !== a && a.$$typeof === c; }; var isForwardRef = function isForwardRef(a) { return z(a) === n; }; var isFragment = function isFragment(a) { return z(a) === e; }; var isLazy = function isLazy(a) { return z(a) === t; }; var isMemo = function isMemo(a) { return z(a) === r; }; var isPortal = function isPortal(a) { return z(a) === d; }; var isProfiler = function isProfiler(a) { return z(a) === g; }; var isStrictMode = function isStrictMode(a) { return z(a) === f; }; var isSuspense = function isSuspense(a) { return z(a) === p; }; var isValidElementType = function isValidElementType(a) { return "string" === typeof a || "function" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || "object" === _typeof(a) && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v); }; var typeOf = z; var reactIs_production_min = { AsyncMode: AsyncMode, ConcurrentMode: ConcurrentMode, ContextConsumer: ContextConsumer, ContextProvider: ContextProvider, Element: Element, ForwardRef: ForwardRef, Fragment: Fragment, Lazy: Lazy, Memo: Memo, Portal: Portal, Profiler: Profiler, StrictMode: StrictMode, Suspense: Suspense, isAsyncMode: isAsyncMode, isConcurrentMode: isConcurrentMode, isContextConsumer: isContextConsumer, isContextProvider: isContextProvider, isElement: isElement, isForwardRef: isForwardRef, isFragment: isFragment, isLazy: isLazy, isMemo: isMemo, isPortal: isPortal, isProfiler: isProfiler, isStrictMode: isStrictMode, isSuspense: isSuspense, isValidElementType: isValidElementType, typeOf: typeOf }; var reactIs_development = createCommonjsModule(function (module, exports) { if (process.env.NODE_ENV !== "production") { (function () { // nor polyfill, then a plain number is used for performance. var hasSymbol = typeof Symbol === 'function' && Symbol["for"]; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol["for"]('react.element') : 0xeac7; var REACT_PORTAL_TYPE = hasSymbol ? Symbol["for"]('react.portal') : 0xeaca; var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol["for"]('react.fragment') : 0xeacb; var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol["for"]('react.strict_mode') : 0xeacc; var REACT_PROFILER_TYPE = hasSymbol ? Symbol["for"]('react.profiler') : 0xead2; var REACT_PROVIDER_TYPE = hasSymbol ? Symbol["for"]('react.provider') : 0xeacd; var REACT_CONTEXT_TYPE = hasSymbol ? Symbol["for"]('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary // (unstable) APIs that have been removed. Can we remove the symbols? var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol["for"]('react.async_mode') : 0xeacf; var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol["for"]('react.concurrent_mode') : 0xeacf; var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol["for"]('react.forward_ref') : 0xead0; var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol["for"]('react.suspense') : 0xead1; var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol["for"]('react.suspense_list') : 0xead8; var REACT_MEMO_TYPE = hasSymbol ? Symbol["for"]('react.memo') : 0xead3; var REACT_LAZY_TYPE = hasSymbol ? Symbol["for"]('react.lazy') : 0xead4; var REACT_BLOCK_TYPE = hasSymbol ? Symbol["for"]('react.block') : 0xead9; var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol["for"]('react.fundamental') : 0xead5; var REACT_RESPONDER_TYPE = hasSymbol ? Symbol["for"]('react.responder') : 0xead6; var REACT_SCOPE_TYPE = hasSymbol ? Symbol["for"]('react.scope') : 0xead7; function isValidElementType(type) { return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || _typeof(type) === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); } function typeOf(object) { if (_typeof(object) === 'object' && object !== null) { var $$typeof = object.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: var type = object.type; switch (type) { case REACT_ASYNC_MODE_TYPE: case REACT_CONCURRENT_MODE_TYPE: case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: return type; default: var $$typeofType = type && type.$$typeof; switch ($$typeofType) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: case REACT_PROVIDER_TYPE: return $$typeofType; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } return undefined; } // AsyncMode is deprecated along with isAsyncMode var AsyncMode = REACT_ASYNC_MODE_TYPE; var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; var ContextConsumer = REACT_CONTEXT_TYPE; var ContextProvider = REACT_PROVIDER_TYPE; var Element = REACT_ELEMENT_TYPE; var ForwardRef = REACT_FORWARD_REF_TYPE; var Fragment = REACT_FRAGMENT_TYPE; var Lazy = REACT_LAZY_TYPE; var Memo = REACT_MEMO_TYPE; var Portal = REACT_PORTAL_TYPE; var Profiler = REACT_PROFILER_TYPE; var StrictMode = REACT_STRICT_MODE_TYPE; var Suspense = REACT_SUSPENSE_TYPE; var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated function isAsyncMode(object) { { if (!hasWarnedAboutDeprecatedIsAsyncMode) { hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); } } return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; } function isConcurrentMode(object) { return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; } function isContextConsumer(object) { return typeOf(object) === REACT_CONTEXT_TYPE; } function isContextProvider(object) { return typeOf(object) === REACT_PROVIDER_TYPE; } function isElement(object) { return _typeof(object) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } function isForwardRef(object) { return typeOf(object) === REACT_FORWARD_REF_TYPE; } function isFragment(object) { return typeOf(object) === REACT_FRAGMENT_TYPE; } function isLazy(object) { return typeOf(object) === REACT_LAZY_TYPE; } function isMemo(object) { return typeOf(object) === REACT_MEMO_TYPE; } function isPortal(object) { return typeOf(object) === REACT_PORTAL_TYPE; } function isProfiler(object) { return typeOf(object) === REACT_PROFILER_TYPE; } function isStrictMode(object) { return typeOf(object) === REACT_STRICT_MODE_TYPE; } function isSuspense(object) { return typeOf(object) === REACT_SUSPENSE_TYPE; } exports.AsyncMode = AsyncMode; exports.ConcurrentMode = ConcurrentMode; exports.ContextConsumer = ContextConsumer; exports.ContextProvider = ContextProvider; exports.Element = Element; exports.ForwardRef = ForwardRef; exports.Fragment = Fragment; exports.Lazy = Lazy; exports.Memo = Memo; exports.Portal = Portal; exports.Profiler = Profiler; exports.StrictMode = StrictMode; exports.Suspense = Suspense; exports.isAsyncMode = isAsyncMode; exports.isConcurrentMode = isConcurrentMode; exports.isContextConsumer = isContextConsumer; exports.isContextProvider = isContextProvider; exports.isElement = isElement; exports.isForwardRef = isForwardRef; exports.isFragment = isFragment; exports.isLazy = isLazy; exports.isMemo = isMemo; exports.isPortal = isPortal; exports.isProfiler = isProfiler; exports.isStrictMode = isStrictMode; exports.isSuspense = isSuspense; exports.isValidElementType = isValidElementType; exports.typeOf = typeOf; })(); } }); var reactIs_development_1 = reactIs_development.AsyncMode; var reactIs_development_2 = reactIs_development.ConcurrentMode; var reactIs_development_3 = reactIs_development.ContextConsumer; var reactIs_development_4 = reactIs_development.ContextProvider; var reactIs_development_5 = reactIs_development.Element; var reactIs_development_6 = reactIs_development.ForwardRef; var reactIs_development_7 = reactIs_development.Fragment; var reactIs_development_8 = reactIs_development.Lazy; var reactIs_development_9 = reactIs_development.Memo; var reactIs_development_10 = reactIs_development.Portal; var reactIs_development_11 = reactIs_development.Profiler; var reactIs_development_12 = reactIs_development.StrictMode; var reactIs_development_13 = reactIs_development.Suspense; var reactIs_development_14 = reactIs_development.isAsyncMode; var reactIs_development_15 = reactIs_development.isConcurrentMode; var reactIs_development_16 = reactIs_development.isContextConsumer; var reactIs_development_17 = reactIs_development.isContextProvider; var reactIs_development_18 = reactIs_development.isElement; var reactIs_development_19 = reactIs_development.isForwardRef; var reactIs_development_20 = reactIs_development.isFragment; var reactIs_development_21 = reactIs_development.isLazy; var reactIs_development_22 = reactIs_development.isMemo; var reactIs_development_23 = reactIs_development.isPortal; var reactIs_development_24 = reactIs_development.isProfiler; var reactIs_development_25 = reactIs_development.isStrictMode; var reactIs_development_26 = reactIs_development.isSuspense; var reactIs_development_27 = reactIs_development.isValidElementType; var reactIs_development_28 = reactIs_development.typeOf; var reactIs = createCommonjsModule(function (module) { if (process.env.NODE_ENV === 'production') { module.exports = reactIs_production_min; } else { module.exports = reactIs_development; } }); /* object-assign (c) Sindre Sorhus @license MIT */ /* eslint-disable no-unused-vars */ var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty$2 = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError('Object.assign cannot be called with null or undefined'); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } // Detect buggy property enumeration order in older V8 versions. // https://bugs.chromium.org/p/v8/issues/detail?id=4118 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers test1[5] = 'de'; if (Object.getOwnPropertyNames(test1)[0] === '5') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test2 = {}; for (var i = 0; i < 10; i++) { test2['_' + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function (n) { return test2[n]; }); if (order2.join('') !== '0123456789') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test3 = {}; 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { return false; } return true; } catch (err) { // We don't expect any of the above to throw, but better to be safe. return false; } } var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty$2.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var ReactPropTypesSecret = 'SECRET_DO