@tarojs/with-weapp 4.0.0-beta.8 → 4.0.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1,30 +1,17 @@
1
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
3
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
5
- import _createClass from '@babel/runtime/helpers/createClass';
6
- import _assertThisInitialized from '@babel/runtime/helpers/assertThisInitialized';
7
- import _get from '@babel/runtime/helpers/get';
8
- import _inherits from '@babel/runtime/helpers/inherits';
9
- import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
10
- import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
11
- import _typeof from '@babel/runtime/helpers/typeof';
12
1
  import { getCurrentInstance } from '@tarojs/runtime';
13
2
  import { nextTick, eventCenter, createSelectorQuery, createIntersectionObserver, createMediaQueryObserver } from '@tarojs/taro';
14
3
 
15
- var json = JSON;
16
- var clone = function clone(obj) {
17
- return json.parse(stringify(obj));
18
- };
19
- var isArray = Array.isArray || function (x) {
4
+ const json = JSON;
5
+ const clone = obj => json.parse(stringify(obj));
6
+ const isArray = Array.isArray || function (x) {
20
7
  return {}.toString.call(x) === '[object Array]';
21
8
  };
22
- var objectKeys = Object.keys || function (obj) {
23
- var has = Object.prototype.hasOwnProperty || function () {
9
+ const objectKeys = Object.keys || function (obj) {
10
+ const has = Object.prototype.hasOwnProperty || function () {
24
11
  return true;
25
12
  };
26
- var keys = [];
27
- for (var key in obj) {
13
+ const keys = [];
14
+ for (const key in obj) {
28
15
  if (has.call(obj, key)) keys.push(key);
29
16
  }
30
17
  return keys;
@@ -34,20 +21,20 @@ function stringify(obj, opts) {
34
21
  if (typeof opts === 'function') opts = {
35
22
  cmp: opts
36
23
  };
37
- var space = opts.space || '';
24
+ let space = opts.space || '';
38
25
  if (typeof space === 'number') space = Array(space + 1).join(' ');
39
- var cycles = typeof opts.cycles === 'boolean' ? opts.cycles : false;
40
- var replacer = opts.replacer || function (key, value) {
26
+ const cycles = typeof opts.cycles === 'boolean' ? opts.cycles : false;
27
+ const replacer = opts.replacer || function (key, value) {
41
28
  return value;
42
29
  };
43
- var cmp = opts.cmp && function (f) {
30
+ const cmp = opts.cmp && function (f) {
44
31
  return function (node) {
45
32
  return function (a, b) {
46
- var aobj = {
33
+ const aobj = {
47
34
  key: a,
48
35
  value: node[a]
49
36
  };
50
- var bobj = {
37
+ const bobj = {
51
38
  key: b,
52
39
  value: node[b]
53
40
  };
@@ -55,10 +42,10 @@ function stringify(obj, opts) {
55
42
  };
56
43
  };
57
44
  }(opts.cmp);
58
- var seen = [];
45
+ const seen = [];
59
46
  return function stringify(parent, key, node, level) {
60
- var indent = space ? '\n' + new Array(level + 1).join(space) : '';
61
- var colonSeparator = space ? ': ' : ':';
47
+ const indent = space ? '\n' + new Array(level + 1).join(space) : '';
48
+ const colonSeparator = space ? ': ' : ':';
62
49
  if (node && node.toJSON && typeof node.toJSON === 'function') {
63
50
  node = node.toJSON();
64
51
  }
@@ -66,13 +53,13 @@ function stringify(obj, opts) {
66
53
  if (node === undefined) {
67
54
  return;
68
55
  }
69
- if (_typeof(node) !== 'object' || node === null) {
56
+ if (typeof node !== 'object' || node === null) {
70
57
  return json.stringify(node);
71
58
  }
72
59
  if (isArray(node)) {
73
- var out = [];
74
- for (var i = 0; i < node.length; i++) {
75
- var item = stringify(node, i, node[i], level + 1) || json.stringify(null);
60
+ const out = [];
61
+ for (let i = 0; i < node.length; i++) {
62
+ const item = stringify(node, i, node[i], level + 1) || json.stringify(null);
76
63
  out.push(indent + space + item);
77
64
  }
78
65
  return '[' + out.join(',') + indent + ']';
@@ -81,17 +68,17 @@ function stringify(obj, opts) {
81
68
  if (cycles) return json.stringify('__cycle__');
82
69
  throw new TypeError('Converting circular structure to JSON');
83
70
  } else seen.push(node);
84
- var keys = objectKeys(node).sort(cmp && cmp(node));
85
- var _out = [];
86
- for (var _i = 0; _i < keys.length; _i++) {
87
- var _key = keys[_i];
88
- var value = stringify(node, _key, node[_key], level + 1);
71
+ const keys = objectKeys(node).sort(cmp && cmp(node));
72
+ const out = [];
73
+ for (let i = 0; i < keys.length; i++) {
74
+ const key = keys[i];
75
+ const value = stringify(node, key, node[key], level + 1);
89
76
  if (!value) continue;
90
- var keyValue = json.stringify(_key) + colonSeparator + value;
91
- _out.push(indent + space + keyValue);
77
+ const keyValue = json.stringify(key) + colonSeparator + value;
78
+ out.push(indent + space + keyValue);
92
79
  }
93
80
  seen.splice(seen.indexOf(node), 1);
94
- return '{' + _out.join(',') + indent + '}';
81
+ return '{' + out.join(',') + indent + '}';
95
82
  }
96
83
  }({
97
84
  '': obj
@@ -99,23 +86,23 @@ function stringify(obj, opts) {
99
86
  }
100
87
 
101
88
  /*eslint-disable*/
102
- var ARRAYTYPE = '[object Array]';
103
- var OBJECTTYPE = '[object Object]';
104
- var FUNCTIONTYPE = '[object Function]';
89
+ const ARRAYTYPE = '[object Array]';
90
+ const OBJECTTYPE = '[object Object]';
91
+ const FUNCTIONTYPE = '[object Function]';
105
92
  function diff(current, pre) {
106
- var result = {};
93
+ const result = {};
107
94
  syncKeys(current, pre);
108
95
  _diff(current, pre, '', result);
109
96
  return result;
110
97
  }
111
98
  function syncKeys(current, pre) {
112
99
  if (current === pre) return;
113
- var rootCurrentType = type(current);
114
- var rootPreType = type(pre);
100
+ const rootCurrentType = type(current);
101
+ const rootPreType = type(pre);
115
102
  if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
116
103
  // if(Object.keys(current).length >= Object.keys(pre).length){
117
- for (var key in pre) {
118
- var currentValue = current[key];
104
+ for (let key in pre) {
105
+ const currentValue = current[key];
119
106
  if (currentValue === undefined) {
120
107
  current[key] = null;
121
108
  } else {
@@ -125,7 +112,7 @@ function syncKeys(current, pre) {
125
112
  // }
126
113
  } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
127
114
  if (current.length >= pre.length) {
128
- pre.forEach(function (item, index) {
115
+ pre.forEach((item, index) => {
129
116
  syncKeys(current[index], item);
130
117
  });
131
118
  }
@@ -133,17 +120,17 @@ function syncKeys(current, pre) {
133
120
  }
134
121
  function _diff(current, pre, path, result) {
135
122
  if (current === pre) return;
136
- var rootCurrentType = type(current);
137
- var rootPreType = type(pre);
123
+ const rootCurrentType = type(current);
124
+ const rootPreType = type(pre);
138
125
  if (rootCurrentType == OBJECTTYPE) {
139
126
  if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
140
127
  setResult(result, path, current);
141
128
  } else {
142
- var _loop = function _loop(key) {
143
- var currentValue = current[key];
144
- var preValue = pre[key];
145
- var currentType = type(currentValue);
146
- var preType = type(preValue);
129
+ for (let key in current) {
130
+ const currentValue = current[key];
131
+ const preValue = pre[key];
132
+ const currentType = type(currentValue);
133
+ const preType = type(preValue);
147
134
  if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
148
135
  if (currentValue != pre[key]) {
149
136
  setResult(result, (path == '' ? '' : path + '.') + key, currentValue);
@@ -155,7 +142,7 @@ function _diff(current, pre, path, result) {
155
142
  if (currentValue.length < preValue.length) {
156
143
  setResult(result, (path == '' ? '' : path + '.') + key, currentValue);
157
144
  } else {
158
- currentValue.forEach(function (item, index) {
145
+ currentValue.forEach((item, index) => {
159
146
  _diff(item, preValue[index], (path == '' ? '' : path + '.') + key + '[' + index + ']', result);
160
147
  });
161
148
  }
@@ -164,14 +151,11 @@ function _diff(current, pre, path, result) {
164
151
  if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
165
152
  setResult(result, (path == '' ? '' : path + '.') + key, currentValue);
166
153
  } else {
167
- for (var subKey in currentValue) {
154
+ for (let subKey in currentValue) {
168
155
  _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + '.') + key + '.' + subKey, result);
169
156
  }
170
157
  }
171
158
  }
172
- };
173
- for (var key in current) {
174
- _loop(key);
175
159
  }
176
160
  }
177
161
  } else if (rootCurrentType == ARRAYTYPE) {
@@ -181,7 +165,7 @@ function _diff(current, pre, path, result) {
181
165
  if (current.length < pre.length) {
182
166
  setResult(result, path, current);
183
167
  } else {
184
- current.forEach(function (item, index) {
168
+ current.forEach((item, index) => {
185
169
  _diff(item, pre[index], path + '[' + index + ']', result);
186
170
  });
187
171
  }
@@ -199,7 +183,6 @@ function type(obj) {
199
183
  return Object.prototype.toString.call(obj);
200
184
  }
201
185
 
202
- var _lifecycleMap;
203
186
  var TaroLifeCycles;
204
187
  (function (TaroLifeCycles) {
205
188
  TaroLifeCycles["WillMount"] = "componentWillMount";
@@ -208,16 +191,20 @@ var TaroLifeCycles;
208
191
  TaroLifeCycles["DidHide"] = "componentDidHide";
209
192
  TaroLifeCycles["WillUnmount"] = "componentWillUnmount";
210
193
  })(TaroLifeCycles || (TaroLifeCycles = {}));
211
- var lifecycleMap = (_lifecycleMap = {}, _defineProperty(_lifecycleMap, TaroLifeCycles.WillMount, ['created']), _defineProperty(_lifecycleMap, TaroLifeCycles.DidMount, ['attached']), _defineProperty(_lifecycleMap, TaroLifeCycles.DidShow, ['onShow']), _defineProperty(_lifecycleMap, TaroLifeCycles.DidHide, ['onHide']), _defineProperty(_lifecycleMap, TaroLifeCycles.WillUnmount, ['detached', 'onUnload']), _lifecycleMap);
212
- var lifecycles = new Set(['ready']);
213
- for (var key in lifecycleMap) {
214
- var lifecycle = lifecycleMap[key];
215
- lifecycle.forEach(function (l) {
216
- return lifecycles.add(l);
217
- });
194
+ const lifecycleMap = {
195
+ [TaroLifeCycles.WillMount]: ['created'],
196
+ [TaroLifeCycles.DidMount]: ['attached'],
197
+ [TaroLifeCycles.DidShow]: ['onShow'],
198
+ [TaroLifeCycles.DidHide]: ['onHide'],
199
+ [TaroLifeCycles.WillUnmount]: ['detached', 'onUnload']
200
+ };
201
+ const lifecycles = new Set(['ready']);
202
+ for (const key in lifecycleMap) {
203
+ const lifecycle = lifecycleMap[key];
204
+ lifecycle.forEach(l => lifecycles.add(l));
218
205
  }
219
- var uniquePageLifecycle = ['onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onShareTimeline', 'onAddToFavorites', 'onPageScroll', 'onResize', 'onTabItemTap'];
220
- var appOptions = ['onLaunch', 'onShow', 'onHide', 'onError', 'onPageNotFound', 'onUnhandledRejection', 'onThemeChange'];
206
+ const uniquePageLifecycle = ['onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onShareTimeline', 'onAddToFavorites', 'onPageScroll', 'onResize', 'onTabItemTap'];
207
+ const appOptions = ['onLaunch', 'onShow', 'onHide', 'onError', 'onPageNotFound', 'onUnhandledRejection', 'onThemeChange'];
221
208
 
222
209
  /**
223
210
  * Simple bind, faster than native
@@ -225,7 +212,7 @@ var appOptions = ['onLaunch', 'onShow', 'onHide', 'onError', 'onPageNotFound', '
225
212
  function bind(fn /*: Function */, ctx /*: Object */) {
226
213
  if (!fn) return false;
227
214
  function boundFn(a) {
228
- var l /*: number */ = arguments.length;
215
+ const l /*: number */ = arguments.length;
229
216
  return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);
230
217
  }
231
218
  // record original fn length
@@ -239,7 +226,7 @@ function safeGet(obj, propsArg, defaultValue) {
239
226
  if (!obj) {
240
227
  return defaultValue;
241
228
  }
242
- var props, prop;
229
+ let props, prop;
243
230
  if (Array.isArray(propsArg)) {
244
231
  props = propsArg.slice(0);
245
232
  }
@@ -247,7 +234,7 @@ function safeGet(obj, propsArg, defaultValue) {
247
234
  props = propsArg.replace(/\[(.+?)\]/g, '.$1');
248
235
  props = props.split('.');
249
236
  }
250
- if (_typeof(propsArg) === 'symbol') {
237
+ if (typeof propsArg === 'symbol') {
251
238
  props = [propsArg];
252
239
  }
253
240
  if (!Array.isArray(props)) {
@@ -270,14 +257,14 @@ function safeSet(obj, props, value) {
270
257
  props = props.replace(/\[(.+?)\]/g, '.$1');
271
258
  props = props.split('.');
272
259
  }
273
- if (_typeof(props) === 'symbol') {
260
+ if (typeof props === 'symbol') {
274
261
  props = [props];
275
262
  }
276
- var lastProp = props.pop();
263
+ const lastProp = props.pop();
277
264
  if (!lastProp) {
278
265
  return false;
279
266
  }
280
- var thisProp;
267
+ let thisProp;
281
268
  while (thisProp = props.shift()) {
282
269
  if (typeof obj[thisProp] === 'undefined') {
283
270
  obj[thisProp] = {};
@@ -285,12 +272,12 @@ function safeSet(obj, props, value) {
285
272
  // 直接按路径修改 this.state 可能会导致 nextProps 也被修改
286
273
  // 因此按路径寻找时,每一层都复制一遍
287
274
  if (Array.isArray(obj[thisProp])) {
288
- obj[thisProp] = _toConsumableArray(obj[thisProp]);
289
- } else if (_typeof(obj[thisProp]) === 'object') {
275
+ obj[thisProp] = [...obj[thisProp]];
276
+ } else if (typeof obj[thisProp] === 'object') {
290
277
  obj[thisProp] = Object.assign({}, obj[thisProp]);
291
278
  }
292
279
  obj = obj[thisProp];
293
- if (!obj || _typeof(obj) !== 'object') {
280
+ if (!obj || typeof obj !== 'object') {
294
281
  return false;
295
282
  }
296
283
  }
@@ -300,26 +287,24 @@ function safeSet(obj, props, value) {
300
287
  function report(msg) {
301
288
  console.warn('[Taro Convert Warning] ' + msg);
302
289
  }
303
- var nonsupport = new Map([['onError', '不支持 App 的 onError 生命周期方法。'], ['onPageNotFound', '不支持 App 的 onPageNotFound 生命周期方法。'], ['onUnhandledRejection', '不支持 App 的 onUnhandledRejection 生命周期方法。'], ['onThemeChange', '不支持 App 的 onThemeChange 生命周期方法。'], ['moved', '不支持自定义组件的 moved 生命周期。'], ['externalClasses', '不支持自定义组件的 externalClasses 功能。'], ['relations', '不支持自定义组件的 relations 功能。'], ['options', '不支持自定义组件的 options 功能。'], ['definitionFilter', '不支持自定义组件的 definitionFilter 功能。'], ['selectComponent', 'selectComponent 方法产生不到目标效果,请使用 React 的 ref 进行重构。'], ['selectAllComponents', 'selectAllComponents 方法产生不到目标效果,请使用 React 的 ref 进行重构。'], ['selectOwnerComponent', 'selectOwnerComponent 方法产生不到目标效果,请使用 React 语法重构。'], ['groupSetData', 'groupSetData 方法产生不到目标效果,请使用 React 语法重构。']]);
290
+ const nonsupport = new Map([['onError', '不支持 App 的 onError 生命周期方法。'], ['onPageNotFound', '不支持 App 的 onPageNotFound 生命周期方法。'], ['onUnhandledRejection', '不支持 App 的 onUnhandledRejection 生命周期方法。'], ['onThemeChange', '不支持 App 的 onThemeChange 生命周期方法。'], ['moved', '不支持自定义组件的 moved 生命周期。'], ['externalClasses', '不支持自定义组件的 externalClasses 功能。'], ['relations', '不支持自定义组件的 relations 功能。'], ['options', '不支持自定义组件的 options 功能。'], ['definitionFilter', '不支持自定义组件的 definitionFilter 功能。'], ['selectComponent', 'selectComponent 方法产生不到目标效果,请使用 React 的 ref 进行重构。'], ['selectAllComponents', 'selectAllComponents 方法产生不到目标效果,请使用 React 的 ref 进行重构。'], ['selectOwnerComponent', 'selectOwnerComponent 方法产生不到目标效果,请使用 React 语法重构。'], ['groupSetData', 'groupSetData 方法产生不到目标效果,请使用 React 语法重构。']]);
304
291
  function flattenBehaviors(behavior, behaviorMap) {
305
292
  if (typeof behavior === 'string') {
306
- return report("\u4E0D\u652F\u6301\u4F7F\u7528\u5185\u7F6E Behavior: [".concat(behavior, "]"));
293
+ return report(`不支持使用内置 Behavior: [${behavior}]`);
307
294
  }
308
- var subBehaviors = behavior.behaviors;
295
+ const subBehaviors = behavior.behaviors;
309
296
  if (subBehaviors === null || subBehaviors === void 0 ? void 0 : subBehaviors.length) {
310
- subBehaviors.forEach(function (subBehavior) {
311
- return flattenBehaviors(subBehavior, behaviorMap);
312
- });
297
+ subBehaviors.forEach(subBehavior => flattenBehaviors(subBehavior, behaviorMap));
313
298
  }
314
- Object.keys(behavior).forEach(function (key) {
299
+ Object.keys(behavior).forEach(key => {
315
300
  // 不支持的属性
316
301
  if (nonsupport.has(key)) {
317
- var advise = nonsupport.get(key);
302
+ const advise = nonsupport.get(key);
318
303
  return report(advise);
319
304
  }
320
305
  if (behaviorMap.has(key)) {
321
- var list = behaviorMap.get(key);
322
- var value = behavior[key];
306
+ const list = behaviorMap.get(key);
307
+ const value = behavior[key];
323
308
  list.push(value);
324
309
  }
325
310
  });
@@ -328,21 +313,21 @@ function flattenBehaviors(behavior, behaviorMap) {
328
313
  /**
329
314
  * 该模块仅存放 convert 转换时用到的工具函数或变量
330
315
  */
331
- var cacheOptions = {
316
+ const cacheOptions = {
332
317
  cacheOptions: {},
333
- setOptionsToCache: function setOptionsToCache(options) {
318
+ setOptionsToCache: function (options) {
334
319
  if (Object.keys(options).length !== 0) {
335
320
  this.cacheOptions = options;
336
321
  }
337
322
  },
338
- getOptionsFromCache: function getOptionsFromCache() {
323
+ getOptionsFromCache: function () {
339
324
  return this.cacheOptions;
340
325
  }
341
326
  };
342
327
  function toCamelCase(s) {
343
- var camel = '';
344
- var nextCap = false;
345
- for (var i = 0; i < s.length; i++) {
328
+ let camel = '';
329
+ let nextCap = false;
330
+ for (let i = 0; i < s.length; i++) {
346
331
  if (s[i] !== '-') {
347
332
  camel += nextCap ? s[i].toUpperCase() : s[i];
348
333
  nextCap = false;
@@ -352,25 +337,23 @@ function toCamelCase(s) {
352
337
  }
353
338
  return camel;
354
339
  }
355
- var convertToArray = function convertToArray(value, fn) {
340
+ const convertToArray = function (value, fn) {
356
341
  if (value instanceof Array) {
357
342
  return value.map(fn);
358
343
  } else if (typeof value === 'number') {
359
344
  return Array.from({
360
345
  length: value
361
- }, function (_, index) {
362
- return index;
363
- }).map(fn);
346
+ }, (_, index) => index).map(fn);
364
347
  } else if (typeof value === 'string') {
365
348
  return Array.from(value).map(fn);
366
- } else if (_typeof(value) === 'object' && value !== null && Object.getPrototypeOf(value) === Object.prototype) {
367
- var result = Object.keys(value).map(function (item) {
349
+ } else if (typeof value === 'object' && value !== null && Object.getPrototypeOf(value) === Object.prototype) {
350
+ const result = Object.keys(value).map(item => {
368
351
  return fn(value[item], item);
369
352
  });
370
353
  return result;
371
354
  }
372
355
  };
373
- var getTarget = function getTarget(target, Taro) {
356
+ const getTarget = (target, Taro) => {
374
357
  if (!target) {
375
358
  return {
376
359
  dataset: {}
@@ -382,11 +365,11 @@ var getTarget = function getTarget(target, Taro) {
382
365
  dataset: target.fullDataset
383
366
  };
384
367
  }
385
- var fullDataset = {};
368
+ const fullDataset = {};
386
369
  // 获取元素的所有属性
387
- var targetAttrKeys = Object.keys(target);
370
+ const targetAttrKeys = Object.keys(target);
388
371
  // 遍历所有属性
389
- for (var i = 0; i < targetAttrKeys.length; i++) {
372
+ for (let i = 0; i < targetAttrKeys.length; i++) {
390
373
  if (targetAttrKeys[i].startsWith('data-')) {
391
374
  fullDataset[toCamelCase(targetAttrKeys[i].replace(/^data-/, '').toLowerCase())] = target[targetAttrKeys[i]];
392
375
  }
@@ -399,16 +382,11 @@ var getTarget = function getTarget(target, Taro) {
399
382
  return target;
400
383
  };
401
384
 
402
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
403
- 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); }
404
- 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; }
405
- 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); }; }
406
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
407
385
  function defineGetter(component, key, getter) {
408
386
  Object.defineProperty(component, key, {
409
387
  enumerable: true,
410
388
  configurable: true,
411
- get: function get() {
389
+ get: () => {
412
390
  if (getter === 'props') {
413
391
  return component.props;
414
392
  }
@@ -427,32 +405,31 @@ function propToState(newValue, _oldValue, key) {
427
405
  function isFunction(o) {
428
406
  return typeof o === 'function';
429
407
  }
430
- function withWeapp(weappConf) {
431
- var isApp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
432
- if (_typeof(weappConf) === 'object' && Object.keys(weappConf).length === 0) {
408
+ function withWeapp(weappConf, isApp = false) {
409
+ if (typeof weappConf === 'object' && Object.keys(weappConf).length === 0) {
433
410
  report('withWeapp 请传入“App/页面/组件“的配置对象。如果原生写法使用了基类,请将基类组合后的配置对象传入,详情请参考文档。');
434
411
  }
435
- return function (ConnectComponent) {
412
+ return ConnectComponent => {
436
413
  var _a;
437
- var behaviorMap = new Map([['properties', []], ['data', []], ['methods', []], ['created', []], ['attached', []], ['ready', []], ['detached', []], ['lifetimes', []]]);
438
- var behaviorProperties = {};
414
+ const behaviorMap = new Map([['properties', []], ['data', []], ['methods', []], ['created', []], ['attached', []], ['ready', []], ['detached', []], ['lifetimes', []]]);
415
+ const behaviorProperties = {};
439
416
  if ((_a = weappConf.behaviors) === null || _a === void 0 ? void 0 : _a.length) {
440
- var behaviors = weappConf.behaviors;
441
- behaviors.forEach(function (behavior) {
442
- return flattenBehaviors(behavior, behaviorMap);
443
- });
444
- var propertiesList = behaviorMap.get('properties');
417
+ const {
418
+ behaviors
419
+ } = weappConf;
420
+ behaviors.forEach(behavior => flattenBehaviors(behavior, behaviorMap));
421
+ const propertiesList = behaviorMap.get('properties');
445
422
  if (propertiesList.length) {
446
- propertiesList.forEach(function (property) {
423
+ propertiesList.forEach(property => {
447
424
  Object.assign(behaviorProperties, property);
448
425
  });
449
- Object.keys(behaviorProperties).forEach(function (propName) {
450
- var propValue = behaviorProperties[propName];
426
+ Object.keys(behaviorProperties).forEach(propName => {
427
+ const propValue = behaviorProperties[propName];
451
428
  if (!weappConf.properties) {
452
429
  weappConf.properties = {};
453
430
  }
454
431
  if (!weappConf.properties.hasOwnProperty(propName)) {
455
- if (propValue && _typeof(propValue) === 'object' && propValue.value) {
432
+ if (propValue && typeof propValue === 'object' && propValue.value) {
456
433
  propValue.value = clone(propValue.value);
457
434
  }
458
435
  weappConf.properties[propName] = propValue;
@@ -460,45 +437,38 @@ function withWeapp(weappConf) {
460
437
  });
461
438
  }
462
439
  }
463
- var BaseComponent = /*#__PURE__*/function (_ConnectComponent) {
464
- _inherits(BaseComponent, _ConnectComponent);
465
- var _super = _createSuper(BaseComponent);
466
- function BaseComponent(props) {
467
- var _this;
468
- _classCallCheck(this, BaseComponent);
469
- _this = _super.call(this, props);
470
- _this._observeProps = [];
440
+ class BaseComponent extends ConnectComponent {
441
+ constructor(props) {
442
+ super(props);
443
+ this._observeProps = [];
471
444
  // mixins 可以多次调用生命周期
472
- _this.willMounts = [];
473
- _this.didMounts = [];
474
- _this.didHides = [];
475
- _this.didShows = [];
476
- _this.willUnmounts = [];
477
- _this.eventDestroyList = [];
478
- _this.current = getCurrentInstance();
479
- _this.taroGlobalData = Object.create(null);
480
- _this.safeExecute = function (func) {
481
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
482
- args[_key - 1] = arguments[_key];
483
- }
484
- if (isFunction(func)) func.apply(_assertThisInitialized(_this), args);
445
+ this.willMounts = [];
446
+ this.didMounts = [];
447
+ this.didHides = [];
448
+ this.didShows = [];
449
+ this.willUnmounts = [];
450
+ this.eventDestroyList = [];
451
+ this.current = getCurrentInstance();
452
+ this.taroGlobalData = Object.create(null);
453
+ this.safeExecute = (func, ...args) => {
454
+ if (isFunction(func)) func.apply(this, args);
485
455
  };
486
- _this.setData = function (obj, callback) {
487
- var oldState;
488
- if (_this.observers && Object.keys(Object.keys(_this.observers))) {
489
- oldState = clone(_this.state);
456
+ this.setData = (obj, callback) => {
457
+ let oldState;
458
+ if (this.observers && Object.keys(Object.keys(this.observers))) {
459
+ oldState = clone(this.state);
490
460
  }
491
- Object.keys(obj).forEach(function (key) {
492
- safeSet(_this.state, key, obj[key]);
461
+ Object.keys(obj).forEach(key => {
462
+ safeSet(this.state, key, obj[key]);
493
463
  });
494
- _this.setState(_this.state, function () {
495
- _this.triggerObservers(_this.state, oldState);
464
+ this.setState(this.state, () => {
465
+ this.triggerObservers(this.state, oldState);
496
466
  if (callback) {
497
- callback.call(_assertThisInitialized(_this));
467
+ callback.call(this);
498
468
  }
499
469
  });
500
470
  };
501
- _this.triggerEvent = function (eventName, detail, options) {
471
+ this.triggerEvent = (eventName, detail, options) => {
502
472
  if (options) {
503
473
  report('triggerEvent 不支持事件选项。');
504
474
  }
@@ -508,561 +478,467 @@ function withWeapp(weappConf) {
508
478
  return match[1].toUpperCase();
509
479
  });
510
480
  }
511
- var props = _this.props;
512
- var dataset = {};
513
- for (var key in props) {
481
+ const props = this.props;
482
+ const dataset = {};
483
+ for (const key in props) {
514
484
  if (!key.startsWith('data-')) continue;
515
485
  dataset[key.replace(/^data-/, '')] = props[key];
516
486
  }
517
- var func = props["on".concat(eventName[0].toUpperCase()).concat(eventName.slice(1))];
487
+ const func = props[`on${eventName[0].toUpperCase()}${eventName.slice(1)}`];
518
488
  if (isFunction(func)) {
519
- func.call(_assertThisInitialized(_this), {
489
+ func.call(this, {
520
490
  type: eventName,
521
- detail: detail,
491
+ detail,
522
492
  target: {
523
493
  id: props.id || '',
524
- dataset: dataset
494
+ dataset
525
495
  },
526
496
  currentTarget: {
527
497
  id: props.id || '',
528
- dataset: dataset
498
+ dataset
529
499
  }
530
500
  });
531
501
  }
532
502
  };
533
- _this.hasBehavior = _this.componentMethodsProxy('hasBehavior');
534
- _this.createSelectorQuery = _this.componentMethodsProxy('createSelectorQuery');
535
- _this.createIntersectionObserver = _this.componentMethodsProxy('createIntersectionObserver');
536
- _this.createMediaQueryObserver = _this.componentMethodsProxy('createMediaQueryObserver');
537
- _this.getRelationNodes = _this.componentMethodsProxy('getRelationNodes');
538
- _this.getTabBar = _this.componentMethodsProxy('getTabBar');
539
- _this.getPageId = _this.componentMethodsProxy('getPageId');
540
- _this.animate = _this.componentMethodsProxy('animate');
541
- _this.clearAnimation = _this.componentMethodsProxy('clearAnimation');
542
- _this.setUpdatePerformanceListener = _this.componentMethodsProxy('setUpdatePerformanceListener');
543
- _this.state = _this.state || {};
544
- _this.init(weappConf);
545
- defineGetter(_assertThisInitialized(_this), 'data', 'state');
546
- defineGetter(_assertThisInitialized(_this), 'properties', 'props');
547
- return _this;
503
+ this.hasBehavior = this.componentMethodsProxy('hasBehavior');
504
+ this.createSelectorQuery = this.componentMethodsProxy('createSelectorQuery');
505
+ this.createIntersectionObserver = this.componentMethodsProxy('createIntersectionObserver');
506
+ this.createMediaQueryObserver = this.componentMethodsProxy('createMediaQueryObserver');
507
+ this.getRelationNodes = this.componentMethodsProxy('getRelationNodes');
508
+ this.getTabBar = this.componentMethodsProxy('getTabBar');
509
+ this.getPageId = this.componentMethodsProxy('getPageId');
510
+ this.animate = this.componentMethodsProxy('animate');
511
+ this.clearAnimation = this.componentMethodsProxy('clearAnimation');
512
+ this.setUpdatePerformanceListener = this.componentMethodsProxy('setUpdatePerformanceListener');
513
+ this.state = this.state || {};
514
+ this.init(weappConf);
515
+ defineGetter(this, 'data', 'state');
516
+ defineGetter(this, 'properties', 'props');
548
517
  }
549
- _createClass(BaseComponent, [{
550
- key: "initProps",
551
- value: function initProps(props) {
552
- var properties = {};
553
- for (var propKey in props) {
554
- if (props.hasOwnProperty(propKey)) {
555
- var propValue = props[propKey];
556
- // propValue 可能是 null, 构造函数, 对象
557
- var observers = [propToState];
558
- if (propValue === null || propValue === undefined) {
559
- // propValue为null、undefined情况
560
- properties[propKey] = null;
561
- } else if (isFunction(propValue)) {
562
- // propValue为Function,即Array、String、Boolean等情况时
563
- if (propValue.name === 'Array') {
564
- properties[propKey] = [];
565
- } else if (propValue.name === 'String') {
566
- properties[propKey] = '';
567
- } else if (propValue.name === 'Boolean') {
568
- properties[propKey] = false;
569
- } else if (propValue.name === 'Number') {
570
- properties[propKey] = 0;
571
- } else {
572
- properties[propKey] = null;
573
- }
574
- } else if (_typeof(propValue) === 'object') {
575
- // propValue为对象时
576
- properties[propKey] = propValue.value;
577
- if (propValue.observer) {
578
- observers.push(propValue.observer);
579
- }
518
+ initProps(props) {
519
+ const properties = {};
520
+ for (const propKey in props) {
521
+ if (props.hasOwnProperty(propKey)) {
522
+ const propValue = props[propKey];
523
+ // propValue 可能是 null, 构造函数, 对象
524
+ const observers = [propToState];
525
+ if (propValue === null || propValue === undefined) {
526
+ // propValue为null、undefined情况
527
+ properties[propKey] = null;
528
+ } else if (isFunction(propValue)) {
529
+ // propValue为Function,即Array、String、Boolean等情况时
530
+ if (propValue.name === 'Array') {
531
+ properties[propKey] = [];
532
+ } else if (propValue.name === 'String') {
533
+ properties[propKey] = '';
534
+ } else if (propValue.name === 'Boolean') {
535
+ properties[propKey] = false;
536
+ } else if (propValue.name === 'Number') {
537
+ properties[propKey] = 0;
580
538
  } else {
581
539
  properties[propKey] = null;
582
540
  }
583
- this._observeProps.push({
584
- name: propKey,
585
- observers: observers
586
- });
541
+ } else if (typeof propValue === 'object') {
542
+ // propValue为对象时
543
+ properties[propKey] = propValue.value;
544
+ if (propValue.observer) {
545
+ observers.push(propValue.observer);
546
+ }
547
+ } else {
548
+ properties[propKey] = null;
587
549
  }
550
+ this._observeProps.push({
551
+ name: propKey,
552
+ observers: observers
553
+ });
588
554
  }
589
- this.state = Object.assign(Object.assign({}, properties), this.state);
590
555
  }
591
- }, {
592
- key: "init",
593
- value: function init(options) {
594
- var _this2 = this;
595
- var _a, _b, _c;
596
- // 处理 Behaviors
597
- if ((_a = options.behaviors) === null || _a === void 0 ? void 0 : _a.length) {
598
- var _iterator = _createForOfIteratorHelper(behaviorMap.entries()),
599
- _step;
600
- try {
601
- var _loop = function _loop() {
602
- var _step$value = _slicedToArray(_step.value, 2),
603
- key = _step$value[0],
604
- list = _step$value[1];
605
- switch (key) {
606
- case 'created':
607
- case 'attached':
608
- case 'detached':
609
- case 'ready':
610
- list.forEach(function (fn) {
611
- return _this2.initLifeCycles(key, fn);
612
- });
613
- break;
614
- }
615
- };
616
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
617
- _loop();
618
- }
619
- } catch (err) {
620
- _iterator.e(err);
621
- } finally {
622
- _iterator.f();
556
+ this.state = Object.assign(Object.assign({}, properties), this.state);
557
+ }
558
+ init(options) {
559
+ var _a, _b, _c;
560
+ // 处理 Behaviors
561
+ if ((_a = options.behaviors) === null || _a === void 0 ? void 0 : _a.length) {
562
+ for (const [key, list] of behaviorMap.entries()) {
563
+ switch (key) {
564
+ case 'created':
565
+ case 'attached':
566
+ case 'detached':
567
+ case 'ready':
568
+ list.forEach(fn => this.initLifeCycles(key, fn));
569
+ break;
623
570
  }
624
571
  }
625
- for (var confKey in options) {
626
- // 不支持的属性
627
- if (nonsupport.has(confKey)) {
628
- var advise = nonsupport.get(confKey);
629
- report(advise);
630
- }
631
- var confValue = options[confKey];
632
- switch (confKey) {
633
- case 'behaviors':
634
- break;
635
- case 'data':
636
- {
637
- if (isApp) {
638
- this[confKey] = confValue;
639
- if (!appOptions.includes(confKey)) {
640
- this.defineProperty(this.taroGlobalData, confKey, this);
641
- }
642
- } else {
643
- this.state = Object.assign(Object.assign({}, confValue), this.state);
572
+ }
573
+ for (const confKey in options) {
574
+ // 不支持的属性
575
+ if (nonsupport.has(confKey)) {
576
+ const advise = nonsupport.get(confKey);
577
+ report(advise);
578
+ }
579
+ const confValue = options[confKey];
580
+ switch (confKey) {
581
+ case 'behaviors':
582
+ break;
583
+ case 'data':
584
+ {
585
+ if (isApp) {
586
+ this[confKey] = confValue;
587
+ if (!appOptions.includes(confKey)) {
588
+ this.defineProperty(this.taroGlobalData, confKey, this);
644
589
  }
645
- break;
590
+ } else {
591
+ this.state = Object.assign(Object.assign({}, confValue), this.state);
646
592
  }
647
- case 'properties':
648
- this.initProps(Object.assign(behaviorProperties, confValue));
649
593
  break;
650
- case 'methods':
651
- for (var key in confValue) {
652
- var method = confValue[key];
653
- this[key] = bind(method, this);
594
+ }
595
+ case 'properties':
596
+ this.initProps(Object.assign(behaviorProperties, confValue));
597
+ break;
598
+ case 'methods':
599
+ for (const key in confValue) {
600
+ const method = confValue[key];
601
+ this[key] = bind(method, this);
602
+ }
603
+ break;
604
+ case 'lifetimes':
605
+ for (const key in confValue) {
606
+ this.initLifeCycles(key, confValue[key]);
607
+ }
608
+ break;
609
+ case 'pageLifetimes':
610
+ for (const key in confValue) {
611
+ const cb = confValue[key];
612
+ switch (key) {
613
+ case 'show':
614
+ {
615
+ this.initLifeCycleListener('show', cb);
616
+ break;
617
+ }
618
+ case 'hide':
619
+ {
620
+ this.initLifeCycleListener('hide', cb);
621
+ break;
622
+ }
623
+ case 'resize':
624
+ {
625
+ report('不支持组件所在页面的生命周期 pageLifetimes.resize。');
626
+ break;
627
+ }
654
628
  }
655
- break;
656
- case 'lifetimes':
657
- for (var _key2 in confValue) {
658
- this.initLifeCycles(_key2, confValue[_key2]);
629
+ }
630
+ break;
631
+ default:
632
+ if (lifecycles.has(confKey)) {
633
+ // 优先使用 lifetimes 中定义的生命周期
634
+ if ((_b = options.lifetimes) === null || _b === void 0 ? void 0 : _b[confKey]) {
635
+ break;
659
636
  }
660
- break;
661
- case 'pageLifetimes':
662
- for (var _key3 in confValue) {
663
- var cb = confValue[_key3];
664
- switch (_key3) {
665
- case 'show':
666
- {
667
- this.initLifeCycleListener('show', cb);
668
- break;
669
- }
670
- case 'hide':
671
- {
672
- this.initLifeCycleListener('hide', cb);
673
- break;
674
- }
675
- case 'resize':
676
- {
677
- report('不支持组件所在页面的生命周期 pageLifetimes.resize。');
678
- break;
679
- }
680
- }
637
+ const lifecycle = options[confKey];
638
+ this.initLifeCycles(confKey, lifecycle);
639
+ } else if (isFunction(confValue)) {
640
+ this[confKey] = bind(confValue, this);
641
+ if (isApp && !appOptions.includes(confKey)) {
642
+ this.defineProperty(this.taroGlobalData, confKey, this);
681
643
  }
682
- break;
683
- default:
684
- if (lifecycles.has(confKey)) {
685
- // 优先使用 lifetimes 中定义的生命周期
686
- if ((_b = options.lifetimes) === null || _b === void 0 ? void 0 : _b[confKey]) {
687
- break;
688
- }
689
- var lifecycle = options[confKey];
690
- this.initLifeCycles(confKey, lifecycle);
691
- } else if (isFunction(confValue)) {
692
- this[confKey] = bind(confValue, this);
693
- if (isApp && !appOptions.includes(confKey)) {
694
- this.defineProperty(this.taroGlobalData, confKey, this);
695
- }
696
- // 原生页面和 Taro 页面中共计只能定义一次的生命周期
697
- if (uniquePageLifecycle.includes(confKey) && ConnectComponent.prototype[confKey]) {
698
- report("\u751F\u547D\u5468\u671F ".concat(confKey, " \u5DF2\u5728\u539F\u751F\u90E8\u5206\u8FDB\u884C\u5B9A\u4E49\uFF0CReact \u90E8\u5206\u7684\u5B9A\u4E49\u5C06\u4E0D\u4F1A\u88AB\u6267\u884C\u3002"));
699
- }
700
- } else {
701
- this[confKey] = confValue;
702
- if (isApp && !appOptions.includes(confKey)) {
703
- this.defineProperty(this.taroGlobalData, confKey, this);
704
- }
644
+ // 原生页面和 Taro 页面中共计只能定义一次的生命周期
645
+ if (uniquePageLifecycle.includes(confKey) && ConnectComponent.prototype[confKey]) {
646
+ report(`生命周期 ${confKey} 已在原生部分进行定义,React 部分的定义将不会被执行。`);
705
647
  }
706
- break;
707
- }
708
- }
709
- // 处理 Behaviors
710
- if ((_c = options.behaviors) === null || _c === void 0 ? void 0 : _c.length) {
711
- var behaviorData = {};
712
- var methods = {};
713
- var _iterator2 = _createForOfIteratorHelper(behaviorMap.entries()),
714
- _step2;
715
- try {
716
- var _loop2 = function _loop2() {
717
- var _step2$value = _slicedToArray(_step2.value, 2),
718
- key = _step2$value[0],
719
- list = _step2$value[1];
720
- switch (key) {
721
- case 'data':
722
- [].concat(_toConsumableArray(list), [_this2.state]).forEach(function (dataObject, index) {
723
- Object.keys(dataObject).forEach(function (dataKey) {
724
- var value = dataObject[dataKey];
725
- var preValue = behaviorData[dataKey];
726
- var valueType = _typeof(value);
727
- var preValueType = _typeof(preValue);
728
- if (valueType === 'object') {
729
- if (!value) {
730
- behaviorData[dataKey] = value;
731
- } else if (preValueType !== 'object' || !preValueType || Array.isArray(value)) {
732
- behaviorData[dataKey] = index === list.length ? value : clone(value);
733
- } else {
734
- var newVal = Object.assign({}, preValue, value);
735
- behaviorData[dataKey] = index === list.length ? newVal : clone(newVal);
736
- }
737
- } else {
738
- behaviorData[dataKey] = value;
739
- }
740
- });
741
- });
742
- _this2.state = behaviorData;
743
- break;
744
- case 'methods':
745
- list.forEach(function (methodsObject) {
746
- Object.assign(methods, methodsObject);
747
- });
748
- Object.keys(methods).forEach(function (methodName) {
749
- if (!_this2[methodName]) {
750
- var _method = methods[methodName];
751
- _this2[methodName] = bind(_method, _this2);
752
- }
753
- });
754
- break;
755
- case 'lifetimes':
756
- list.forEach(function (lifetimesObject) {
757
- for (var _key4 in lifetimesObject) {
758
- _this2.initLifeCycles(_key4, lifetimesObject[_key4]);
759
- }
760
- });
761
- break;
762
- default:
763
- break;
648
+ } else {
649
+ this[confKey] = confValue;
650
+ if (isApp && !appOptions.includes(confKey)) {
651
+ this.defineProperty(this.taroGlobalData, confKey, this);
764
652
  }
765
- };
766
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
767
- _loop2();
768
653
  }
769
- } catch (err) {
770
- _iterator2.e(err);
771
- } finally {
772
- _iterator2.f();
773
- }
654
+ break;
774
655
  }
775
656
  }
776
- }, {
777
- key: "initLifeCycles",
778
- value: function initLifeCycles(lifecycleName, lifecycle) {
779
- // 不支持的生命周期
780
- if (nonsupport.has(lifecycleName)) {
781
- var advise = nonsupport.get(lifecycleName);
782
- return report(advise);
783
- }
784
- if (lifecycleName === 'ready') {
785
- // 如果组件是延时渲染的,页面 onReady 的事件已经 emit 了,因此使用 componentDidMount + nextTick 模拟
786
- if (this.current.page.onReady.called) {
787
- this.didMounts.push(function () {
788
- var _this3 = this;
789
- for (var _len2 = arguments.length, args = new Array(_len2), _key5 = 0; _key5 < _len2; _key5++) {
790
- args[_key5] = arguments[_key5];
791
- }
792
- nextTick(function () {
793
- if (isFunction(lifecycle)) {
794
- lifecycle.apply(_this3, args);
657
+ // 处理 Behaviors
658
+ if ((_c = options.behaviors) === null || _c === void 0 ? void 0 : _c.length) {
659
+ const behaviorData = {};
660
+ const methods = {};
661
+ for (const [key, list] of behaviorMap.entries()) {
662
+ switch (key) {
663
+ case 'data':
664
+ [...list, this.state].forEach((dataObject, index) => {
665
+ Object.keys(dataObject).forEach(dataKey => {
666
+ const value = dataObject[dataKey];
667
+ const preValue = behaviorData[dataKey];
668
+ const valueType = typeof value;
669
+ const preValueType = typeof preValue;
670
+ if (valueType === 'object') {
671
+ if (!value) {
672
+ behaviorData[dataKey] = value;
673
+ } else if (preValueType !== 'object' || !preValueType || Array.isArray(value)) {
674
+ behaviorData[dataKey] = index === list.length ? value : clone(value);
675
+ } else {
676
+ const newVal = Object.assign({}, preValue, value);
677
+ behaviorData[dataKey] = index === list.length ? newVal : clone(newVal);
678
+ }
679
+ } else {
680
+ behaviorData[dataKey] = value;
681
+ }
682
+ });
683
+ });
684
+ this.state = behaviorData;
685
+ break;
686
+ case 'methods':
687
+ list.forEach(methodsObject => {
688
+ Object.assign(methods, methodsObject);
689
+ });
690
+ Object.keys(methods).forEach(methodName => {
691
+ if (!this[methodName]) {
692
+ const method = methods[methodName];
693
+ this[methodName] = bind(method, this);
795
694
  }
796
695
  });
797
- });
798
- } else {
799
- this.initLifeCycleListener('ready', lifecycle);
800
- }
801
- } else {
802
- for (var lifecycleKey in lifecycleMap) {
803
- var cycleNames = lifecycleMap[lifecycleKey];
804
- if (cycleNames.indexOf(lifecycleName) !== -1) {
805
- switch (lifecycleKey) {
806
- case TaroLifeCycles.DidHide:
807
- this.didHides.push(lifecycle);
808
- break;
809
- case TaroLifeCycles.DidMount:
810
- this.didMounts.push(lifecycle);
811
- break;
812
- case TaroLifeCycles.DidShow:
813
- this.didShows.push(lifecycle);
814
- break;
815
- case TaroLifeCycles.WillMount:
816
- this.willMounts.push(lifecycle);
817
- break;
818
- case TaroLifeCycles.WillUnmount:
819
- this.willUnmounts.push(lifecycle);
820
- break;
821
- }
822
- }
696
+ break;
697
+ case 'lifetimes':
698
+ list.forEach(lifetimesObject => {
699
+ for (const key in lifetimesObject) {
700
+ this.initLifeCycles(key, lifetimesObject[key]);
701
+ }
702
+ });
703
+ break;
823
704
  }
824
705
  }
825
- // mixins 不会覆盖已经设置的生命周期,加入到 this 是为了形如 this.created() 的调用
826
- if (!isFunction(this[lifecycleName])) {
827
- this[lifecycleName] = lifecycle;
828
- }
829
- }
830
- }, {
831
- key: "initLifeCycleListener",
832
- value: function initLifeCycleListener(name, cb) {
833
- // 组件的 ready、show、hide 需要利用页面事件触发
834
- var router = this.current.router;
835
- var lifecycleName = "on".concat(name[0].toUpperCase()).concat(name.slice(1));
836
- cb = cb.bind(this);
837
- (router === null || router === void 0 ? void 0 : router[lifecycleName]) && eventCenter.on(router[lifecycleName], cb);
838
- // unMount 时需要取消事件监听
839
- this.eventDestroyList.push(function () {
840
- return eventCenter.off(router[lifecycleName], cb);
841
- });
842
706
  }
843
- }, {
844
- key: "executeLifeCycles",
845
- value: function executeLifeCycles(funcs) {
846
- for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key6 = 1; _key6 < _len3; _key6++) {
847
- args[_key6 - 1] = arguments[_key6];
848
- }
849
- for (var i = 0; i < funcs.length; i++) {
850
- var func = funcs[i];
851
- this.safeExecute.apply(this, [func].concat(args));
852
- }
707
+ }
708
+ initLifeCycles(lifecycleName, lifecycle) {
709
+ // 不支持的生命周期
710
+ if (nonsupport.has(lifecycleName)) {
711
+ const advise = nonsupport.get(lifecycleName);
712
+ return report(advise);
853
713
  }
854
- }, {
855
- key: "triggerPropertiesObservers",
856
- value: function triggerPropertiesObservers(prevProps, nextProps) {
857
- var _this4 = this;
858
- this._observeProps.forEach(function (_ref) {
859
- var key = _ref.name,
860
- observers = _ref.observers;
861
- var prop = prevProps === null || prevProps === void 0 ? void 0 : prevProps[key];
862
- var nextProp = nextProps[key];
863
- // 小程序是深比较不同之后才 trigger observer
864
- if (!isEqual(prop, nextProp)) {
865
- observers.forEach(function (observer) {
866
- if (typeof observer === 'string') {
867
- var ob = _this4[observer];
868
- if (isFunction(ob)) {
869
- ob.call(_this4, nextProp, prop, key);
870
- }
871
- } else if (isFunction(observer)) {
872
- observer.call(_this4, nextProp, prop, key);
714
+ if (lifecycleName === 'ready') {
715
+ // 如果组件是延时渲染的,页面 onReady 的事件已经 emit 了,因此使用 componentDidMount + nextTick 模拟
716
+ if (this.current.page.onReady.called) {
717
+ this.didMounts.push(function (...args) {
718
+ nextTick(() => {
719
+ if (isFunction(lifecycle)) {
720
+ lifecycle.apply(this, args);
873
721
  }
874
722
  });
875
- }
876
- });
877
- }
878
- }, {
879
- key: "triggerObservers",
880
- value: function triggerObservers(current, prev) {
881
- var observers = this.observers;
882
- if (observers == null) {
883
- return;
884
- }
885
- if (Object.keys(observers).length === 0) {
886
- return;
887
- }
888
- var result = diff(current, prev);
889
- var resultKeys = Object.keys(result);
890
- if (resultKeys.length === 0) {
891
- return;
892
- }
893
- for (var observerKey in observers) {
894
- if (/\*\*/.test(observerKey)) {
895
- report('数据监听器 observers 不支持使用通配符 **。');
896
- continue;
897
- }
898
- var keys = observerKey.split(',').map(function (k) {
899
- return k.trim();
900
723
  });
901
- var isModified = false;
902
- for (var i = 0; i < keys.length; i++) {
903
- var key = keys[i];
904
- for (var j = 0; j < resultKeys.length; j++) {
905
- var resultKey = resultKeys[j];
906
- if (resultKey.startsWith(key) || key.startsWith(resultKey) && key.endsWith(']')) {
907
- isModified = true;
908
- }
909
- }
910
- }
911
- if (isModified) {
912
- observers[observerKey].apply(this, keys.map(function (key) {
913
- return safeGet(current, key);
914
- }));
915
- }
724
+ } else {
725
+ this.initLifeCycleListener('ready', lifecycle);
916
726
  }
917
- }
918
- }, {
919
- key: "defineProperty",
920
- value: function defineProperty(target, key, data) {
921
- Object.defineProperty(target, key, {
922
- configurable: true,
923
- enumerable: true,
924
- set: function set(value) {
925
- data[key] = value;
926
- },
927
- get: function get() {
928
- return data[key];
727
+ } else {
728
+ for (const lifecycleKey in lifecycleMap) {
729
+ const cycleNames = lifecycleMap[lifecycleKey];
730
+ if (cycleNames.indexOf(lifecycleName) !== -1) {
731
+ switch (lifecycleKey) {
732
+ case TaroLifeCycles.DidHide:
733
+ this.didHides.push(lifecycle);
734
+ break;
735
+ case TaroLifeCycles.DidMount:
736
+ this.didMounts.push(lifecycle);
737
+ break;
738
+ case TaroLifeCycles.DidShow:
739
+ this.didShows.push(lifecycle);
740
+ break;
741
+ case TaroLifeCycles.WillMount:
742
+ this.willMounts.push(lifecycle);
743
+ break;
744
+ case TaroLifeCycles.WillUnmount:
745
+ this.willUnmounts.push(lifecycle);
746
+ break;
747
+ }
929
748
  }
930
- });
931
- }
932
- }, {
933
- key: "privateStopNoop",
934
- value: function privateStopNoop() {
935
- var e;
936
- var fn;
937
- if (arguments.length === 2) {
938
- fn = arguments.length <= 0 ? undefined : arguments[0];
939
- e = arguments.length <= 1 ? undefined : arguments[1];
940
- } else if (arguments.length === 1) {
941
- e = arguments.length <= 0 ? undefined : arguments[0];
942
749
  }
943
- if (e.type === 'touchmove') {
944
- report('catchtouchmove 转换后只能停止回调函数的冒泡,不能阻止滚动穿透。如要阻止滚动穿透,可以手动给编译后的 View 组件加上 catchMove 属性');
945
- }
946
- e.stopPropagation();
947
- isFunction(fn) && fn(e);
948
- }
949
- // ================ React 生命周期 ================
950
- }, {
951
- key: "componentWillMount",
952
- value: function componentWillMount() {
953
- this.safeExecute(_get(_getPrototypeOf(BaseComponent.prototype), "componentWillMount", this));
954
- this.executeLifeCycles(this.willMounts, this.current.router || {});
955
- this.triggerObservers(this.data, BaseComponent.defaultProps);
956
- this.triggerPropertiesObservers(BaseComponent.defaultProps, this.props);
957
- }
958
- }, {
959
- key: "componentDidMount",
960
- value: function componentDidMount() {
961
- this.safeExecute(_get(_getPrototypeOf(BaseComponent.prototype), "componentDidMount", this));
962
- this.executeLifeCycles(this.didMounts);
963
- }
964
- }, {
965
- key: "componentWillUnmount",
966
- value: function componentWillUnmount() {
967
- this.eventDestroyList.forEach(function (fn) {
968
- return fn();
969
- });
970
- this.safeExecute(_get(_getPrototypeOf(BaseComponent.prototype), "componentWillUnmount", this));
971
- this.executeLifeCycles(this.willUnmounts);
972
- }
973
- }, {
974
- key: "componentDidHide",
975
- value: function componentDidHide() {
976
- this.safeExecute(_get(_getPrototypeOf(BaseComponent.prototype), "componentDidHide", this));
977
- this.executeLifeCycles(this.didHides);
978
750
  }
979
- }, {
980
- key: "componentDidShow",
981
- value: function componentDidShow() {
982
- this.safeExecute(_get(_getPrototypeOf(BaseComponent.prototype), "componentDidShow", this), this.current.router || {});
983
- this.executeLifeCycles(this.didShows, this.current.router || {});
751
+ // mixins 不会覆盖已经设置的生命周期,加入到 this 是为了形如 this.created() 的调用
752
+ if (!isFunction(this[lifecycleName])) {
753
+ this[lifecycleName] = lifecycle;
984
754
  }
985
- }, {
986
- key: "componentWillReceiveProps",
987
- value: function componentWillReceiveProps(nextProps) {
988
- this.triggerObservers(nextProps, this.props);
989
- this.triggerPropertiesObservers(this.props, nextProps);
990
- this.safeExecute(_get(_getPrototypeOf(BaseComponent.prototype), "componentWillReceiveProps", this));
755
+ }
756
+ initLifeCycleListener(name, cb) {
757
+ // 组件的 ready、show、hide 需要利用页面事件触发
758
+ const {
759
+ router
760
+ } = this.current;
761
+ const lifecycleName = `on${name[0].toUpperCase()}${name.slice(1)}`;
762
+ cb = cb.bind(this);
763
+ (router === null || router === void 0 ? void 0 : router[lifecycleName]) && eventCenter.on(router[lifecycleName], cb);
764
+ // unMount 时需要取消事件监听
765
+ this.eventDestroyList.push(() => eventCenter.off(router[lifecycleName], cb));
766
+ }
767
+ executeLifeCycles(funcs, ...args) {
768
+ for (let i = 0; i < funcs.length; i++) {
769
+ const func = funcs[i];
770
+ this.safeExecute(func, ...args);
991
771
  }
992
- // ================ 小程序 App, Page, Component 实例属性与方法 ================
993
- }, {
994
- key: "is",
995
- get: function get() {
996
- return this.current.page.is;
772
+ }
773
+ triggerPropertiesObservers(prevProps, nextProps) {
774
+ this._observeProps.forEach(({
775
+ name: key,
776
+ observers
777
+ }) => {
778
+ const prop = prevProps === null || prevProps === void 0 ? void 0 : prevProps[key];
779
+ const nextProp = nextProps[key];
780
+ // 小程序是深比较不同之后才 trigger observer
781
+ if (!isEqual(prop, nextProp)) {
782
+ observers.forEach(observer => {
783
+ if (typeof observer === 'string') {
784
+ const ob = this[observer];
785
+ if (isFunction(ob)) {
786
+ ob.call(this, nextProp, prop, key);
787
+ }
788
+ } else if (isFunction(observer)) {
789
+ observer.call(this, nextProp, prop, key);
790
+ }
791
+ });
792
+ }
793
+ });
794
+ }
795
+ triggerObservers(current, prev) {
796
+ const observers = this.observers;
797
+ if (observers == null) {
798
+ return;
997
799
  }
998
- }, {
999
- key: "id",
1000
- get: function get() {
1001
- return this.current.page.id;
800
+ if (Object.keys(observers).length === 0) {
801
+ return;
1002
802
  }
1003
- }, {
1004
- key: "dataset",
1005
- get: function get() {
1006
- return this.current.page.dataset;
803
+ const result = diff(current, prev);
804
+ const resultKeys = Object.keys(result);
805
+ if (resultKeys.length === 0) {
806
+ return;
1007
807
  }
1008
- }, {
1009
- key: "componentMethodsProxy",
1010
- value: function componentMethodsProxy(method) {
1011
- var _this5 = this;
1012
- return function () {
1013
- var page = _this5.current.page;
1014
- if (page === null || page === void 0 ? void 0 : page[method]) {
1015
- return page[method].apply(page, arguments);
1016
- } else if (method === 'createSelectorQuery') {
1017
- return createSelectorQuery();
1018
- } else if (method === 'createIntersectionObserver') {
1019
- // @ts-ignore
1020
- return createIntersectionObserver.apply(void 0, arguments);
1021
- } else if (method === 'createMediaQueryObserver') {
1022
- return createMediaQueryObserver();
1023
- } else {
1024
- console.error("page \u4E0B\u6CA1\u6709 ".concat(method, " \u65B9\u6CD5"));
808
+ for (const observerKey in observers) {
809
+ if (/\*\*/.test(observerKey)) {
810
+ report('数据监听器 observers 不支持使用通配符 **。');
811
+ continue;
812
+ }
813
+ const keys = observerKey.split(',').map(k => k.trim());
814
+ let isModified = false;
815
+ for (let i = 0; i < keys.length; i++) {
816
+ const key = keys[i];
817
+ for (let j = 0; j < resultKeys.length; j++) {
818
+ const resultKey = resultKeys[j];
819
+ if (resultKey.startsWith(key) || key.startsWith(resultKey) && key.endsWith(']')) {
820
+ isModified = true;
821
+ }
1025
822
  }
1026
- };
1027
- }
1028
- }, {
1029
- key: "selectComponent",
1030
- value: function selectComponent() {
1031
- report(nonsupport.get('selectComponent'));
1032
- }
1033
- }, {
1034
- key: "selectAllComponents",
1035
- value: function selectAllComponents() {
1036
- report(nonsupport.get('selectAllComponents'));
823
+ }
824
+ if (isModified) {
825
+ observers[observerKey].apply(this, keys.map(key => safeGet(current, key)));
826
+ }
1037
827
  }
1038
- }, {
1039
- key: "selectOwnerComponent",
1040
- value: function selectOwnerComponent() {
1041
- report(nonsupport.get('selectOwnerComponent'));
828
+ }
829
+ defineProperty(target, key, data) {
830
+ Object.defineProperty(target, key, {
831
+ configurable: true,
832
+ enumerable: true,
833
+ set(value) {
834
+ data[key] = value;
835
+ },
836
+ get() {
837
+ return data[key];
838
+ }
839
+ });
840
+ }
841
+ privateStopNoop(...args) {
842
+ let e;
843
+ let fn;
844
+ if (args.length === 2) {
845
+ fn = args[0];
846
+ e = args[1];
847
+ } else if (args.length === 1) {
848
+ e = args[0];
1042
849
  }
1043
- }, {
1044
- key: "groupSetData",
1045
- value: function groupSetData() {
1046
- report(nonsupport.get('groupSetData'));
850
+ if (e.type === 'touchmove') {
851
+ report('catchtouchmove 转换后只能停止回调函数的冒泡,不能阻止滚动穿透。如要阻止滚动穿透,可以手动给编译后的 View 组件加上 catchMove 属性');
1047
852
  }
1048
- }]);
1049
- return BaseComponent;
1050
- }(ConnectComponent);
1051
- var props = weappConf.properties;
853
+ e.stopPropagation();
854
+ isFunction(fn) && fn(e);
855
+ }
856
+ // ================ React 生命周期 ================
857
+ componentWillMount() {
858
+ this.safeExecute(super.componentWillMount);
859
+ this.executeLifeCycles(this.willMounts, this.current.router || {});
860
+ this.triggerObservers(this.data, BaseComponent.defaultProps);
861
+ this.triggerPropertiesObservers(BaseComponent.defaultProps, this.props);
862
+ }
863
+ componentDidMount() {
864
+ this.safeExecute(super.componentDidMount);
865
+ this.executeLifeCycles(this.didMounts);
866
+ }
867
+ componentWillUnmount() {
868
+ this.eventDestroyList.forEach(fn => fn());
869
+ this.safeExecute(super.componentWillUnmount);
870
+ this.executeLifeCycles(this.willUnmounts);
871
+ }
872
+ componentDidHide() {
873
+ this.safeExecute(super.componentDidHide);
874
+ this.executeLifeCycles(this.didHides);
875
+ }
876
+ componentDidShow() {
877
+ this.safeExecute(super.componentDidShow, this.current.router || {});
878
+ this.executeLifeCycles(this.didShows, this.current.router || {});
879
+ }
880
+ componentWillReceiveProps(nextProps) {
881
+ this.triggerObservers(nextProps, this.props);
882
+ this.triggerPropertiesObservers(this.props, nextProps);
883
+ this.safeExecute(super.componentWillReceiveProps);
884
+ }
885
+ // ================ 小程序 App, Page, Component 实例属性与方法 ================
886
+ get is() {
887
+ return this.current.page.is;
888
+ }
889
+ get id() {
890
+ return this.current.page.id;
891
+ }
892
+ get dataset() {
893
+ return this.current.page.dataset;
894
+ }
895
+ componentMethodsProxy(method) {
896
+ return (...args) => {
897
+ const page = this.current.page;
898
+ if (page === null || page === void 0 ? void 0 : page[method]) {
899
+ return page[method](...args);
900
+ } else if (method === 'createSelectorQuery') {
901
+ return createSelectorQuery();
902
+ } else if (method === 'createIntersectionObserver') {
903
+ // @ts-ignore
904
+ return createIntersectionObserver(...args);
905
+ } else if (method === 'createMediaQueryObserver') {
906
+ return createMediaQueryObserver();
907
+ } else {
908
+ console.error(`page 下没有 ${method} 方法`);
909
+ }
910
+ };
911
+ }
912
+ selectComponent() {
913
+ report(nonsupport.get('selectComponent'));
914
+ }
915
+ selectAllComponents() {
916
+ report(nonsupport.get('selectAllComponents'));
917
+ }
918
+ selectOwnerComponent() {
919
+ report(nonsupport.get('selectOwnerComponent'));
920
+ }
921
+ groupSetData() {
922
+ report(nonsupport.get('groupSetData'));
923
+ }
924
+ }
925
+ const props = weappConf.properties;
1052
926
  if (props) {
1053
- for (var propKey in props) {
1054
- var propValue = props[propKey];
927
+ for (const propKey in props) {
928
+ const propValue = props[propKey];
1055
929
  if (propValue != null && !isFunction(propValue)) {
1056
930
  if (propValue.value !== undefined) {
1057
931
  // 如果是 null 也赋值到 defaultProps
1058
- BaseComponent.defaultProps = Object.assign(_defineProperty({}, propKey, propValue.value), BaseComponent.defaultProps);
932
+ BaseComponent.defaultProps = Object.assign({
933
+ [propKey]: propValue.value
934
+ }, BaseComponent.defaultProps);
1059
935
  }
1060
936
  }
1061
937
  }
1062
938
  }
1063
- var staticOptions = ['externalClasses', 'relations', 'options'];
1064
- staticOptions.forEach(function (option) {
1065
- var value = weappConf[option];
939
+ const staticOptions = ['externalClasses', 'relations', 'options'];
940
+ staticOptions.forEach(option => {
941
+ const value = weappConf[option];
1066
942
  if (value != null) {
1067
943
  BaseComponent[option] = value;
1068
944
  }