@mpxjs/core 2.8.25-alpha → 2.8.27

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.
@@ -1,5 +1,5 @@
1
1
  // declaration for mpx mode
2
- declare let __mpx_mode__: 'wx' | 'ali' | 'swan' | 'qq' | 'tt' | 'dd' | 'qa' | 'jd' | 'web' | 'tenon'
2
+ declare let __mpx_mode__: 'wx' | 'ali' | 'swan' | 'qq' | 'tt' | 'web' | 'dd' | 'qa' | 'jd'
3
3
 
4
4
  // declaration for mpx env
5
5
  declare let __mpx_env__: string
package/README.md CHANGED
@@ -1,3 +1,4 @@
1
1
  # 小程序框架 [**MPX** 介绍文档](https://didi.github.io/mpx)
2
2
 
3
3
  ## 跨平台代码编写指南
4
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mpxjs/core",
3
- "version": "2.8.25-alpha",
3
+ "version": "2.8.27",
4
4
  "description": "mpx runtime core",
5
5
  "keywords": [
6
6
  "miniprogram",
@@ -19,13 +19,11 @@
19
19
  ],
20
20
  "main": "src/index.js",
21
21
  "dependencies": {
22
- "@mpxjs/utils": "^2.8.23-alpha",
22
+ "@mpxjs/utils": "^2.8.15",
23
23
  "lodash": "^4.1.1",
24
24
  "miniprogram-api-typings": "^3.0.2"
25
25
  },
26
26
  "peerDependencies": {
27
- "@hummer/tenon-store": "^1.4.0",
28
- "@hummer/tenon-vue": "^1.5.1",
29
27
  "@mpxjs/api-proxy": "^2.7.44",
30
28
  "@mpxjs/store": "^2.8.0",
31
29
  "vue": "^2.7.10",
@@ -49,5 +47,5 @@
49
47
  "url": "https://github.com/didi/mpx/issues"
50
48
  },
51
49
  "sideEffects": false,
52
- "gitHead": "345dc10820535a06d9aee8d2a1e6cc735ba08882"
50
+ "gitHead": "f5b31d1f4f7602f103e5757f910f267d46bb91b1"
53
51
  }
@@ -1,13 +1,11 @@
1
1
  import * as wxLifecycle from '../platform/patch/wx/lifecycle'
2
2
  import * as aliLifecycle from '../platform/patch/ali/lifecycle'
3
3
  import * as webLifecycle from '../platform/patch/web/lifecycle'
4
- import * as tenonLifecycle from '../platform/patch/tenon/lifecycle'
5
4
  import * as swanLifecycle from '../platform/patch/swan/lifecycle'
6
5
  import { mergeLifecycle } from './mergeLifecycle'
7
6
  import { error } from '@mpxjs/utils'
8
7
  import wxToAliRule from './wxToAli'
9
8
  import wxToWebRule from './wxToWeb'
10
- import wxToTenonRule from './wxToTenon'
11
9
  import wxToSwanRule from './wxToSwan'
12
10
  import wxToQqRule from './wxToQq'
13
11
  import wxToTtRule from './wxToTt'
@@ -21,9 +19,6 @@ let pageMode
21
19
  if (__mpx_mode__ === 'web') {
22
20
  lifecycleInfo = webLifecycle
23
21
  pageMode = ''
24
- } else if (__mpx_mode__ === 'tenon') {
25
- lifecycleInfo = tenonLifecycle
26
- pageMode = ''
27
22
  } else if (__mpx_mode__ === 'ali') {
28
23
  lifecycleInfo = aliLifecycle
29
24
  pageMode = ''
@@ -55,7 +50,6 @@ const rulesMap = {
55
50
  local: { ...defaultConvertRule },
56
51
  default: defaultConvertRule,
57
52
  wxToWeb: wxToWebRule,
58
- wxToTenon: wxToTenonRule,
59
53
  wxToAli: wxToAliRule,
60
54
  wxToSwan: wxToSwanRule,
61
55
  wxToQq: { ...defaultConvertRule, ...wxToQqRule },
@@ -1,7 +1,6 @@
1
1
  const convertModes = {
2
2
  'wx-ali': 'wxToAli',
3
3
  'wx-web': 'wxToWeb',
4
- 'wx-tenon': 'wxToTenon',
5
4
  'wx-swan': 'wxToSwan',
6
5
  'wx-qq': 'wxToQq',
7
6
  'wx-tt': 'wxToTt',
package/src/core/proxy.js CHANGED
@@ -102,7 +102,7 @@ export default class MpxProxy {
102
102
  this.ignoreProxyMap = makeMap(Mpx.config.ignoreProxyWhiteList)
103
103
  // 收集setup中动态注册的hooks,小程序与web环境都需要
104
104
  this.hooks = {}
105
- if (__mpx_mode__ !== 'web' && __mpx_mode__ !== 'tenon') {
105
+ if (__mpx_mode__ !== 'web') {
106
106
  this.scope = effectScope(true)
107
107
  // props响应式数据代理
108
108
  this.props = {}
@@ -124,8 +124,8 @@ export default class MpxProxy {
124
124
  }
125
125
 
126
126
  created () {
127
- if (__mpx_mode__ !== 'web' && __mpx_mode__ !== 'tenon') {
128
- // web和tenon中BEFORECREATE钩子通过vue的beforeCreate钩子单独驱动
127
+ if (__mpx_mode__ !== 'web') {
128
+ // web中BEFORECREATE钩子通过vue的beforeCreate钩子单独驱动
129
129
  this.callHook(BEFORECREATE)
130
130
  setCurrentInstance(this)
131
131
  this.initProps()
@@ -139,7 +139,7 @@ export default class MpxProxy {
139
139
  this.state = CREATED
140
140
  this.callHook(CREATED)
141
141
 
142
- if (__mpx_mode__ !== 'web' && __mpx_mode__ !== 'tenon') {
142
+ if (__mpx_mode__ !== 'web') {
143
143
  this.initRender()
144
144
  }
145
145
 
@@ -210,7 +210,7 @@ export default class MpxProxy {
210
210
  }
211
211
  // 挂载$rawOptions
212
212
  this.target.$rawOptions = this.options
213
- if (__mpx_mode__ !== 'web' && __mpx_mode__ !== 'tenon') {
213
+ if (__mpx_mode__ !== 'web') {
214
214
  // 挂载$watch
215
215
  this.target.$watch = this.watch.bind(this)
216
216
  // 强制执行render
package/src/index.js CHANGED
@@ -118,7 +118,7 @@ function factory () {
118
118
  Object.assign(Mpx, APIs)
119
119
  Object.assign(Mpx.prototype, InstanceAPIs)
120
120
  // 输出web时在mpx上挂载Vue对象
121
- if (__mpx_mode__ === 'web' || __mpx_mode__ === 'tenon') {
121
+ if (__mpx_mode__ === 'web') {
122
122
  Mpx.__vue = Vue
123
123
  }
124
124
  return Mpx
@@ -26,11 +26,6 @@ export default function getBuiltInMixins (options, type) {
26
26
  // 由于relation可能是通过mixin注入的,不能通过当前的用户options中是否存在relations来简单判断是否注入该项mixin
27
27
  relationsMixin(type)
28
28
  ]
29
- } else if (__mpx_mode__ === 'tenon') {
30
- bulitInMixins = [
31
- proxyEventMixin(),
32
- pageStatusMixin(type)
33
- ]
34
29
  } else {
35
30
  // 此为差异抹平类mixins,原生模式下也需要注入也抹平平台差异
36
31
  bulitInMixins = [
@@ -61,13 +61,6 @@ export default function createApp (option, config = {}) {
61
61
  }
62
62
  }
63
63
  })
64
- } else if (__mpx_mode__ === 'tenon') {
65
- // todo add tenon mixins
66
- builtInMixins.push({
67
- onLaunch () {
68
- // console.log('tenon mixins')
69
- }
70
- })
71
64
  } else {
72
65
  builtInMixins.push({
73
66
  onLaunch () {
@@ -80,7 +73,7 @@ export default function createApp (option, config = {}) {
80
73
  rawOptions.mixins = builtInMixins
81
74
  const defaultOptions = filterOptions(spreadProp(mergeOptions(rawOptions, 'app', false), 'methods'), appData)
82
75
 
83
- if (__mpx_mode__ === 'web' || __mpx_mode__ === 'tenon') {
76
+ if (__mpx_mode__ === 'web') {
84
77
  global.__mpxOptionsMap = global.__mpxOptionsMap || {}
85
78
  global.__mpxOptionsMap[global.currentModuleId] = defaultOptions
86
79
  global.getApp = function () {
@@ -3,7 +3,7 @@ import { makeMap } from '@mpxjs/utils'
3
3
 
4
4
  let builtInKeys
5
5
 
6
- if (__mpx_mode__ === 'web' || __mpx_mode__ === 'tenon') {
6
+ if (__mpx_mode__ === 'web') {
7
7
  builtInKeys = [
8
8
  'proto',
9
9
  'mixins',
@@ -4,7 +4,6 @@ import { getDefaultOptions as getWxDefaultOptions } from './wx/getDefaultOptions
4
4
  import { getDefaultOptions as getAliDefaultOptions } from './ali/getDefaultOptions'
5
5
  import { getDefaultOptions as getSwanDefaultOptions } from './swan/getDefaultOptions'
6
6
  import { getDefaultOptions as getWebDefaultOptions } from './web/getDefaultOptions'
7
- import { getDefaultOptions as getTenonDefaultOptions } from './tenon/getDefaultOptions'
8
7
  import { error } from '@mpxjs/utils'
9
8
 
10
9
  export default function createFactory (type) {
@@ -12,7 +11,7 @@ export default function createFactory (type) {
12
11
  options.__nativeRender__ = !!isNative
13
12
  options.__type__ = type
14
13
  let ctor
15
- if (__mpx_mode__ !== 'web' && __mpx_mode__ !== 'tenon') {
14
+ if (__mpx_mode__ !== 'web') {
16
15
  if (customCtor) {
17
16
  ctor = customCtor
18
17
  customCtorType = customCtorType || type
@@ -42,8 +41,6 @@ export default function createFactory (type) {
42
41
  let getDefaultOptions
43
42
  if (__mpx_mode__ === 'web') {
44
43
  getDefaultOptions = getWebDefaultOptions
45
- } else if (__mpx_mode__ === 'tenon') {
46
- getDefaultOptions = getTenonDefaultOptions
47
44
  } else if (__mpx_mode__ === 'ali') {
48
45
  getDefaultOptions = getAliDefaultOptions
49
46
  } else if (__mpx_mode__ === 'swan') {
@@ -60,7 +57,7 @@ export default function createFactory (type) {
60
57
  // 将合并后的用户定义的rawOptions传入获取当前应该注入的内建mixins
61
58
  rawOptions.mixins = getBuiltInMixins(rawOptions, type)
62
59
  const defaultOptions = getDefaultOptions(type, { rawOptions, currentInject })
63
- if (__mpx_mode__ === 'web' || __mpx_mode__ === 'tenon') {
60
+ if (__mpx_mode__ === 'web') {
64
61
  global.__mpxOptionsMap = global.__mpxOptionsMap || {}
65
62
  global.__mpxOptionsMap[global.currentModuleId] = defaultOptions
66
63
  } else if (ctor) {
@@ -1,86 +0,0 @@
1
- import * as wxLifecycle from '../platform/patch/wx/lifecycle'
2
- import * as tenonLifecycle from '../platform/patch/tenon/lifecycle'
3
- import { mergeLifecycle } from './mergeLifecycle'
4
- import { error, isObject, diffAndCloneA, hasOwn } from '@mpxjs/utils'
5
- import { implemented } from '../core/implement'
6
- import { CREATED, UNMOUNTED } from '../core/innerLifecycle'
7
-
8
- // 暂不支持的wx选项,后期需要各种花式支持
9
- const unsupported = [
10
- 'moved',
11
- 'definitionFilter',
12
- 'onShareAppMessage',
13
- 'activated',
14
- 'deactivated',
15
- 'pageShow',
16
- 'pageHide',
17
- 'onPullDownRefresh',
18
- 'onReachBottom',
19
- 'onPageScroll',
20
- 'onTabItemTap',
21
- 'onResize',
22
- 'onUnhandledRejection',
23
- 'onThemeChange'
24
- ]
25
-
26
- function convertErrorDesc (key) {
27
- error(`Options.${key} is not supported in runtime conversion from wx to tenon.`, global.currentResource)
28
- }
29
-
30
- function notSupportTip (options) {
31
- unsupported.forEach(key => {
32
- if (options[key]) {
33
- if (!implemented[key]) {
34
- process.env.NODE_ENV !== 'production' && convertErrorDesc(key)
35
- delete options[key]
36
- } else if (implemented[key].remove) {
37
- delete options[key]
38
- }
39
- }
40
- })
41
- }
42
-
43
- export default {
44
- lifecycle: mergeLifecycle(wxLifecycle.LIFECYCLE),
45
- lifecycle2: mergeLifecycle(tenonLifecycle.LIFECYCLE),
46
- pageMode: 'blend',
47
- // support传递为true以将methods外层的方法函数合入methods中
48
- support: true,
49
- // wx输出tenon时额外将onLoad代理到CREATED
50
- lifecycleProxyMap: Object.assign({}, wxLifecycle.lifecycleProxyMap, {
51
- [CREATED]: ['created', 'attached', 'onLoad'],
52
- [UNMOUNTED]: ['destroyed', 'detached', 'onUnload', 'unmounted']
53
- }),
54
- convert (options) {
55
- const props = Object.assign({}, options.properties, options.props)
56
- if (props) {
57
- Object.keys(props).forEach(key => {
58
- const prop = props[key]
59
- if (prop) {
60
- if (hasOwn(prop, 'type')) {
61
- const newProp = {}
62
- if (hasOwn(prop, 'optionalTypes')) {
63
- newProp.type = [prop.type, ...prop.optionalTypes]
64
- } else {
65
- newProp.type = prop.type
66
- }
67
- if (hasOwn(prop, 'value')) {
68
- // vue中对于引用类型数据需要使用函数返回
69
- newProp.default = isObject(prop.value)
70
- ? function propFn () {
71
- return diffAndCloneA(prop.value).clone
72
- }
73
- : prop.value
74
- }
75
- props[key] = newProp
76
- } else {
77
- props[key] = prop
78
- }
79
- }
80
- })
81
- options.props = props
82
- delete options.properties
83
- }
84
- notSupportTip(options)
85
- }
86
- }
@@ -1,40 +0,0 @@
1
- import { CREATED, ONSHOW, ONHIDE } from '../../core/innerLifecycle'
2
-
3
- export default function pageStatusMixin (mixinType) {
4
- if (mixinType === 'page') {
5
- return {
6
- data: {
7
- mpxPageStatus: 'show'
8
- },
9
- onShow () {
10
- this.mpxPageStatus = 'show'
11
- this.__mpxProxy.callHook(ONSHOW)
12
- },
13
- onHide () {
14
- this.mpxPageStatus = 'hide'
15
- this.__mpxProxy.callHook(ONHIDE)
16
- },
17
- onBack () {
18
- this.onBack && this.onBack()
19
- }
20
- }
21
- }
22
- // components
23
- return {
24
- [CREATED] () {
25
- const pageInstance = global.__currentPageInstance
26
- if (!pageInstance) return
27
- this.$watch(
28
- () => pageInstance.mpxPageStatus,
29
- status => {
30
- if (!status) return
31
- const pageLifetimes = (this.$rawOptions && this.$rawOptions.pageLifetimes) || {}
32
- // show & hide
33
- if (status in pageLifetimes && typeof pageLifetimes[status] === 'function') {
34
- pageLifetimes[status].call(this)
35
- }
36
- }
37
- )
38
- }
39
- }
40
- }
@@ -1,46 +0,0 @@
1
- import { setByPath } from '@mpxjs/utils'
2
-
3
- export default function proxyEventMixin () {
4
- const methods = {
5
- triggerEvent (eventName, eventDetail) {
6
- return this.$emit(eventName, {
7
- type: eventName,
8
- detail: eventDetail
9
- })
10
- },
11
- __model (expr, $event, valuePath = ['value'], filterMethod) {
12
- const innerFilter = {
13
- trim: val => typeof val === 'string' && val.trim()
14
- }
15
- const originValue = valuePath.reduce((acc, cur) => acc[cur], $event.detail)
16
- const value = filterMethod ? (innerFilter[filterMethod] ? innerFilter[filterMethod](originValue) : typeof this[filterMethod] === 'function' && this[filterMethod]) : originValue
17
- setByPath(this, expr, value)
18
- },
19
- getOpenerEventChannel () {
20
- const router = global.__mpxRouter
21
- const eventChannel = router && router.__mpxAction && router.__mpxAction.eventChannel
22
- return eventChannel
23
- }
24
- }
25
-
26
- return {
27
- beforeCreate () {
28
- const modelEvent = this.$attrs.mpxModelEvent
29
- const modelEventId = this.$attrs.mpxModelEventId
30
- if (modelEvent && modelEventId) {
31
- Hummer.notifyCenter.addEventListener(modelEventId, (e) => {
32
- this.$emit('mpxModel', e)
33
- })
34
- }
35
- },
36
- beforeDestroy () {
37
- const modelEvent = this.$attrs.mpxModelEvent
38
- const modelEventId = this.$attrs.mpxModelEventId
39
- if (modelEvent && modelEventId) {
40
- Hummer.notifyCenter.removeEventListener(modelEventId)
41
- }
42
- },
43
-
44
- methods
45
- }
46
- }
@@ -1,57 +0,0 @@
1
- import builtInKeysMap from '../builtInKeysMap'
2
- import mergeOptions from '../../../core/mergeOptions'
3
- import MPXProxy from '../../../core/proxy'
4
- import { diffAndCloneA } from '@mpxjs/utils'
5
- import { UPDATED, CREATED, MOUNTED, UNMOUNTED } from '../../../core/innerLifecycle'
6
-
7
- function filterOptions (options) {
8
- const newOptions = {}
9
- Object.keys(options).forEach(key => {
10
- if (builtInKeysMap[key]) {
11
- return
12
- }
13
- if (key === 'data' || key === 'dataFn') {
14
- newOptions.data = function mergeFn () {
15
- return Object.assign(
16
- diffAndCloneA(options.data || {}).clone,
17
- options.dataFn && options.dataFn.call(this)
18
- )
19
- }
20
- } else {
21
- newOptions[key] = options[key]
22
- }
23
- })
24
- return newOptions
25
- }
26
-
27
- function initProxy (context, rawOptions) {
28
- // 缓存options
29
- context.$rawOptions = rawOptions
30
- // 创建proxy对象
31
- context.__mpxProxy = new MPXProxy(rawOptions, context)
32
- context.__mpxProxy.callHook(CREATED, Hummer.pageInfo && Hummer.pageInfo.params && [Hummer.pageInfo.params])
33
- }
34
-
35
- export function getDefaultOptions (type, { rawOptions = {}, currentInject }) {
36
- const hookNames = type === 'page' ? ['onLoad', 'onReady', 'onUnload'] : ['created', 'mounted', 'unmounted']
37
- const rootMixins = [{
38
- [hookNames[0]] (...params) {
39
- if (!this.__mpxProxy) {
40
- initProxy(this, rawOptions, currentInject, params)
41
- }
42
- },
43
- [hookNames[1]] () {
44
- this.__mpxProxy && this.__mpxProxy.callHook(MOUNTED, Hummer.pageInfo && Hummer.pageInfo.params && [Hummer.pageInfo.params])
45
- },
46
- updated () {
47
- this.__mpxProxy && this.__mpxProxy.callHook(UPDATED)
48
- },
49
- [hookNames[2]] () {
50
- this.__mpxProxy && this.__mpxProxy.callHook(UNMOUNTED)
51
- }
52
- }]
53
- // 为了在builtMixin中可以使用某些rootMixin实现的特性(如数据响应等),此处builtInMixin在rootMixin之后执行,但是当builtInMixin使用存在对应内建生命周期的目标平台声明周期写法时,可能会出现用户生命周期比builtInMixin中的生命周期先执行的情况,为了避免这种情况发生,builtInMixin应该尽可能使用内建生命周期来编写
54
- rawOptions.mixins = rawOptions.mixins ? rootMixins.concat(rawOptions.mixins) : rootMixins
55
- rawOptions = mergeOptions(rawOptions, type, false)
56
- return filterOptions(rawOptions)
57
- }
@@ -1,48 +0,0 @@
1
- const COMPONENT_HOOKS = [
2
- 'beforeCreate',
3
- 'created',
4
- 'beforeMount',
5
- 'mounted',
6
- 'beforeUpdate',
7
- 'updated',
8
- // 'activated',
9
- // 'deactivated',
10
- 'beforeDestroy',
11
- 'destroyed',
12
- 'errorCaptured',
13
- 'beforeUnmount',
14
- 'unmounted'
15
- // 'onPageNotFound'
16
- ]
17
-
18
- const PAGE_HOOKS = [
19
- ...COMPONENT_HOOKS,
20
- 'onLoad',
21
- 'onReady',
22
- 'onShow',
23
- 'onHide',
24
- 'onUnload'
25
- // 'onBack',
26
- // 'onPullDownRefresh',
27
- // 'onReachBottom',
28
- // 'onPageScroll',
29
- // 'onTabItemTap',
30
- // 'onResize'
31
- ]
32
-
33
- const APP_HOOKS = [
34
- ...COMPONENT_HOOKS,
35
- 'onLaunch',
36
- 'onShow',
37
- 'onHide',
38
- 'onError'
39
- // 'onPageNotFound',
40
- // 'onUnhandledRejection',
41
- // 'onThemeChange'
42
- ]
43
-
44
- export const LIFECYCLE = {
45
- APP_HOOKS,
46
- PAGE_HOOKS,
47
- COMPONENT_HOOKS
48
- }
package/src/vue.tenon.js DELETED
@@ -1,13 +0,0 @@
1
- import {
2
- reactive,
3
- computed,
4
- toRaw,
5
- watch
6
- } from '@hummer/tenon-vue'
7
-
8
- export default {
9
- reactive,
10
- computed,
11
- toRaw,
12
- watch
13
- }