@tarojs/taro-alipay
Version:
Taro alipay framework
1,758 lines (1,447 loc) • 110 kB
JavaScript
'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