UNPKG

@tarojs/taro-swan

Version:
1,718 lines (1,409 loc) 101 kB
import { Current, commitAttachRef, detachAllRef, eventCenter, internal_safe_get, internal_safe_set, invokeEffects, getIsUsingDiff, internal_force_update, onAndSyncApis, noPromiseApis, otherApis, initPxTransform, Link, getEnv, Events, ENV_TYPE, createRef, render, internal_inline_style, internal_get_original, interceptors, RefsArray, handleLoopRef, useEffect, useLayoutEffect, useReducer, useState, useDidShow, useDidHide, usePullDownRefresh, useReachBottom, usePageScroll, useResize, useShareAppMessage, useTabItemTap, useRouter, useScope, useRef, useCallback, useMemo, useImperativeHandle, useContext, createContext, memo, setIsUsingDiff } from '@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 = swan.nextTick ? swan.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; } var _loadTime = new Date().getTime().toString(); function getElementById(component, id, type) { if (!component) return null; var res; if (type === 'component') { res = component.selectComponent(id); res = res ? res.$component || res : null; } else { var query = swan.createSelectorQuery()["in"](component); res = query.select(id); } if (res) return res; return null; } var id$1 = 0; function genId() { return String(id$1++); } var compIdsMapper; try { compIdsMapper = new Map(); } catch (error) { compIdsMapper = new SimpleMap(); } function genCompid(key, isNeedCreate) { if (!Current || !Current.current || !Current.current.$scope) return []; var prevId = compIdsMapper.get(key); if (isNeedCreate) { var _id = genId(); compIdsMapper.set(key, _id); return [prevId, _id]; } else { var _id2 = prevId || genId(); !prevId && compIdsMapper.set(key, _id2); return [null, _id2]; } } 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 Manager = /*#__PURE__*/function () { function Manager() { _classCallCheck(this, Manager); _defineProperty(this, "map", {}); _defineProperty(this, "observers", {}); } _createClass(Manager, [{ key: "set", value: function set() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var compid = arguments.length > 1 ? arguments[1] : undefined; var previd = arguments.length > 2 ? arguments[2] : undefined; if (!compid) return; if (previd) { this["delete"](previd); } var observers = this.observers; if (!this.map[compid]) { Object.defineProperty(this.map, compid, { configurable: true, get: function get() { return this["__".concat(compid)]; }, set: function set(props) { this["__".concat(compid)] = props; var component = observers[compid] && observers[compid].component; var ComponentClass = observers[compid] && observers[compid].ComponentClass; if (!component || !ComponentClass || !component.__isReady) return; var nextProps = filterProps(ComponentClass.defaultProps, props, component.props); component.props = nextProps; nextTick(function () { component._unsafeCallUpdate = true; updateComponent(component); component._unsafeCallUpdate = false; }); } }); } this.map[compid] = props; } }, { key: "delete", value: function _delete(compid) { delete this.map[compid]; delete this.map["__".concat(compid)]; delete this.observers[compid]; } }]); return Manager; }(); var propsManager = new Manager(); var anonymousFnNamePreffix = 'funPrivate'; var PRELOAD_DATA_KEY = 'preload'; var pageExtraFns = ['onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onPageScroll', 'onTabItemTap']; function bindProperties(weappComponentConf, ComponentClass, isPage) { weappComponentConf.properties = {}; weappComponentConf.properties.compid = { type: null, value: null, observer: function observer(newVal, oldVal) { var _this = this; initComponent.apply(this, [ComponentClass, isPage]); if (oldVal && oldVal !== newVal) { var extraProps = this.data.extraProps; var component = this.$component; propsManager.observers[newVal] = { component: component, ComponentClass: component.constructor }; var nextProps = filterProps(component.constructor.defaultProps, propsManager.map[newVal], component.props, extraProps || null); this.$component.props = nextProps; nextTick(function () { _this.$component._unsafeCallUpdate = true; updateComponent(_this.$component); _this.$component._unsafeCallUpdate = false; }); } } }; } function bindBehaviors(weappComponentConf, ComponentClass) { if (ComponentClass.behaviors) { weappComponentConf.behaviors = ComponentClass.behaviors; } } function bindStaticOptions(weappComponentConf, ComponentClass) { if (ComponentClass.options) { weappComponentConf.options = ComponentClass.options; } } 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 processEvent(eventHandlerName, obj) { if (obj[eventHandlerName]) return; obj[eventHandlerName] = function (event) { if (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 scope = this.$component; if (!scope || !scope[eventHandlerName]) return; var callScope = scope; var isAnonymousFn = eventHandlerName.indexOf(anonymousFnNamePreffix) > -1; var realArgs = []; var detailArgs = []; var datasetArgs = []; var isScopeBinded = false; // 解析从dataset中传过来的参数 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/, ''); if (keyLower.indexOf(eventType) >= 0) { var argName = keyLower.replace(eventType, ''); if (/^(a[a-z]|so)$/.test(argName)) { bindArgs[argName] = dataset[key]; } } } }); // 如果是通过triggerEvent触发,并且带有参数 if (event.__arguments && event.__arguments.length > 0) { detailArgs = event.__arguments; } // 普通的事件(非匿名函数),会直接call if (!isAnonymousFn) { if ('so' in bindArgs) { if (bindArgs['so'] !== 'this') { callScope = bindArgs['so']; } isScopeBinded = true; delete bindArgs['so']; } if (detailArgs.length > 0) { !isScopeBinded && detailArgs[0] && (callScope = detailArgs[0]); detailArgs.shift(); } if (!isEmptyObject(bindArgs)) { datasetArgs = Object.keys(bindArgs).sort().map(function (key) { return bindArgs[key]; }); } realArgs = [].concat(_toConsumableArray(datasetArgs), _toConsumableArray(detailArgs), [event]); } else { // 匿名函数,会将scope作为第一个参数 var _scope = null; if ('so' in bindArgs) { if (bindArgs['so'] !== 'this') { _scope = bindArgs['so']; } isScopeBinded = true; delete bindArgs['so']; } if (detailArgs.length > 0) { !isScopeBinded && detailArgs[0] && (callScope = detailArgs[0]); detailArgs.shift(); } if (!isEmptyObject(bindArgs)) { datasetArgs = Object.keys(bindArgs).sort().map(function (key) { return bindArgs[key]; }); } realArgs = [_scope].concat(_toConsumableArray(datasetArgs), _toConsumableArray(detailArgs), [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) { if (key === 'componentDidMount') { if (component['$$refs'] && component['$$refs'].length > 0) { var refs = {}; component['$$refs'].forEach(function (ref) { var target; var query = swan.createSelectorQuery()["in"](component.$scope); if (ref.type === 'component') { target = component.$scope.selectComponent("#".concat(ref.id)); target = target && target.$component || target; } else { target = query.select("#".concat(ref.id)); } commitAttachRef(ref, target, component, refs, true); ref.target = target; }); component.refs = Object.assign({}, component.refs || {}, refs); } if (component['$$hasLoopRef']) { Current.current = component; component._disableEffect = true; component._createData(component.state, component.props, true); component._disableEffect = false; Current.current = null; } } if (key === 'componentWillUnmount') { var compid = component.$scope.data.compid; if (compid) propsManager["delete"](compid); } args = args || []; component[key] && typeof component[key] === 'function' && component[key].apply(component, _toConsumableArray(args)); if (key === 'componentWillUnmount') { component._dirty = true; component._disable = true; component.$router = { params: {}, path: '' }; component._pendingStates = []; component._pendingCallbacks = []; // refs detachAllRef(component); } if (key === 'componentWillMount') { component._dirty = false; component._disable = false; component.state = component.getState(); } } var hasPageInited = false; function initComponent(ComponentClass, isPage) { if (!this.$component || this.$component.__isReady) return; // ready之后才可以setData, // ready之前,小程序组件初始化时仍然会触发observer,__isReady为否的时候放弃处理observer this.$component.__isReady = true; if (isPage && !hasPageInited) { hasPageInited = true; } // 页面Ready的时候setData更新,此时并未didMount,触发observer但不会触发子组件更新 // 小程序组件ready,但是数据并没有ready,需要通过updateComponent来初始化数据,setData完成之后才是真正意义上的组件ready // 动态组件执行改造函数副本的时,在初始化数据前计算好props if (hasPageInited && !isPage) { var compid = this.data.compid; if (compid) { propsManager.observers[compid] = { component: this.$component, ComponentClass: ComponentClass }; } var nextProps = filterProps(ComponentClass.defaultProps, propsManager.map[compid], this.$component.props); this.$component.props = nextProps; } if (hasPageInited || isPage) { 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 { Current.current = componentInstance; 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, created: function created() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; isPage && (hasPageInited = false); this.$component = new ComponentClass({}, isPage); this.$component._init(this); this.$component.render = this.$component._createData; this.$component.__propTypes = ComponentClass.propTypes; Object.assign(this.$component.$router.params, options); if (isPage && cacheDataHas(PRELOAD_DATA_KEY)) { var data = cacheDataGet(PRELOAD_DATA_KEY, true); this.$component.$router.preload = data; } }, attached: function attached() {}, ready: function ready() {}, detached: function detached() { var component = this.$component; componentTrigger(component, 'componentWillUnmount'); component.hooks.forEach(function (hook) { if (isFunction(hook.cleanup)) { hook.cleanup(); } }); var events = component.$$renderPropsEvents; if (isArray(events)) { events.forEach(function (e) { return eventCenter.off(e); }); } } }; if (isPage) { weappComponentConf.methods = weappComponentConf.methods || {}; weappComponentConf.methods['onLoad'] = function () { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; Object.assign(this.$component.$router.params, options); this.$component.$router.path = getCurrentPageUrl(); initComponent.apply(this, [ComponentClass, isPage]); }; weappComponentConf.methods['onReady'] = weappComponentConf['ready']; weappComponentConf.methods['onShow'] = function () { componentTrigger(this.$component, 'componentDidShow'); }; weappComponentConf.methods['onHide'] = function () { componentTrigger(this.$component, 'componentDidHide'); }; pageExtraFns.forEach(function (fn) { if (componentInstance[fn] && typeof componentInstance[fn] === 'function') { weappComponentConf.methods[fn] = function () { var component = this.$component; if (component && component[fn] && typeof component[fn] === 'function') { return component[fn].apply(component, arguments); } }; } }); } else { weappComponentConf.pageLifetimes = weappComponentConf.pageLifetimes || {}; weappComponentConf.pageLifetimes['show'] = function () { componentTrigger(this.$component, 'componentDidShow'); }; weappComponentConf.pageLifetimes['hide'] = function () { componentTrigger(this.$component, 'componentDidHide'); }; } bindProperties(weappComponentConf, ComponentClass, isPage); bindBehaviors(weappComponentConf, ComponentClass); bindStaticFns(weappComponentConf, ComponentClass); bindStaticOptions(weappComponentConf, ComponentClass); ComponentClass['$$events'] && bindEvents(weappComponentConf, ComponentClass['$$events'], isPage); if (ComponentClass['externalClasses'] && ComponentClass['externalClasses'].length) { weappComponentConf['externalClasses'] = ComponentClass['externalClasses']; } 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;