@mpxjs/core 2.10.15-prelease.1 → 2.10.16-beta.2
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/@types/global.d.ts +3 -0
- package/@types/index.d.ts +16 -27
- package/package.json +6 -2
- package/src/convertor/wxToAli.js +1 -1
- package/src/convertor/wxToReact.js +1 -1
- package/src/convertor/wxToSwan.js +1 -1
- package/src/convertor/wxToTt.js +1 -1
- package/src/convertor/wxToWeb.js +1 -1
- package/src/core/transferOptions.js +1 -1
- package/src/platform/builtInMixins/styleHelperMixin.ios.js +9 -7
- package/src/platform/patch/getDefaultOptions.ios.js +33 -30
package/@types/global.d.ts
CHANGED
package/@types/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import type { GetComputedType } from '@mpxjs/store'
|
|
11
11
|
import type { ScaledSize } from 'react-native'
|
|
12
|
+
import type { ComponentType } from 'react'
|
|
12
13
|
export * from '@mpxjs/store'
|
|
13
14
|
|
|
14
15
|
// utils
|
|
@@ -126,9 +127,17 @@ interface Context {
|
|
|
126
127
|
type ExtendedComponentOptions = {
|
|
127
128
|
disconnectOnUnmounted?: boolean
|
|
128
129
|
shallowReactivePattern?: RegExp
|
|
130
|
+
/**
|
|
131
|
+
* 是否禁用render函数的useMemo,仅输出RN支持
|
|
132
|
+
*/
|
|
133
|
+
disableMemo?: boolean
|
|
129
134
|
} & WechatMiniprogram.Component.ComponentOptions
|
|
130
135
|
|
|
131
136
|
interface ComponentOpt<D extends Data, P extends Properties, C, M extends Methods, Mi extends Array<any>, S extends Record<any, any>> extends Partial<WechatMiniprogram.Component.Lifetimes & WechatMiniprogram.Component.OtherOption> {
|
|
137
|
+
/**
|
|
138
|
+
* ReactNative 原生组件注册
|
|
139
|
+
*/
|
|
140
|
+
components?: Record<string, ComponentType>,
|
|
132
141
|
data?: D
|
|
133
142
|
properties?: P
|
|
134
143
|
computed?: C
|
|
@@ -221,7 +230,7 @@ type WxComponentIns<D extends Data = {}, P extends Properties = {}, M extends Me
|
|
|
221
230
|
Omit<WechatMiniprogram.Component.Instance<D, P, M>, 'selectComponent' | 'selectAllComponents'>
|
|
222
231
|
& ReplaceWxComponentIns
|
|
223
232
|
|
|
224
|
-
type ComponentIns<D extends Data = {}, P extends Properties = {}, C = {}, M extends Methods = {}, Mi extends Array<any> = [], S extends Record<any, any> = {}, O = {}> =
|
|
233
|
+
export type ComponentIns<D extends Data = {}, P extends Properties = {}, C = {}, M extends Methods = {}, Mi extends Array<any> = [], S extends Record<any, any> = {}, O = {}> =
|
|
225
234
|
GetDataType<D> & UnboxMixinsField<Mi, 'data'> &
|
|
226
235
|
M & UnboxMixinsField<Mi, 'methods'> & { [K in keyof S]: S[K] extends Ref<infer V> ? V : S[K] } &
|
|
227
236
|
GetPropsType<P & UnboxMixinsField<Mi, 'properties'>> &
|
|
@@ -296,7 +305,7 @@ export interface RnConfig {
|
|
|
296
305
|
* - `true`:允许退出应用
|
|
297
306
|
* - `false`:阻止退出应用
|
|
298
307
|
*/
|
|
299
|
-
onAppBack?: () => boolean
|
|
308
|
+
onAppBack?: (delta: number) => boolean
|
|
300
309
|
|
|
301
310
|
/**
|
|
302
311
|
* 是否禁用框架内部的 AppStateChange 监听。
|
|
@@ -356,26 +365,6 @@ export interface RnConfig {
|
|
|
356
365
|
dimensions: T
|
|
357
366
|
) => T | void
|
|
358
367
|
|
|
359
|
-
/**
|
|
360
|
-
* 异步分包加载配置。
|
|
361
|
-
*/
|
|
362
|
-
asyncChunk?: {
|
|
363
|
-
/**
|
|
364
|
-
* 加载超时时长配置,单位为毫秒。
|
|
365
|
-
*/
|
|
366
|
-
timeout: number
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* 异步分包页面加载超时或失败时,自定义兜底页面文件路径。
|
|
370
|
-
*/
|
|
371
|
-
fallback: string
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* 异步分包页面加载时,自定义 loading 页面文件路径。
|
|
375
|
-
*/
|
|
376
|
-
loading: string
|
|
377
|
-
}
|
|
378
|
-
|
|
379
368
|
/**
|
|
380
369
|
* 加载并执行异步分包的方法。
|
|
381
370
|
*
|
|
@@ -399,10 +388,10 @@ interface MpxConfig {
|
|
|
399
388
|
ignoreWarning: boolean | string | RegExp | ((msg: string, location: string, e: Error) => boolean)
|
|
400
389
|
ignoreProxyWhiteList: Array<string>
|
|
401
390
|
observeClassInstance: boolean | Array<AnyConstructor>
|
|
402
|
-
errorHandler: (msg: String, location: String, e: Error) =>
|
|
403
|
-
warnHandler: (msg: String, location: String, e: Error) =>
|
|
404
|
-
proxyEventHandler: (e: WechatMiniprogram.CustomEvent, target: ComponentIns<{}, {}, {}, {}, []>) =>
|
|
405
|
-
setDataHandler: (data: object, target: ComponentIns<{}, {}, {}, {}, []>) =>
|
|
391
|
+
errorHandler: (msg: String, location: String, e: Error) => void
|
|
392
|
+
warnHandler: (msg: String, location: String, e: Error) => void
|
|
393
|
+
proxyEventHandler: (e: WechatMiniprogram.CustomEvent, target: ComponentIns<{}, {}, {}, {}, []>) => void
|
|
394
|
+
setDataHandler: (data: object, target: ComponentIns<{}, {}, {}, {}, []>) => void
|
|
406
395
|
forceFlushSync: boolean,
|
|
407
396
|
webRouteConfig: object,
|
|
408
397
|
webConfig: object,
|
|
@@ -413,7 +402,7 @@ interface MpxConfig {
|
|
|
413
402
|
*/
|
|
414
403
|
webviewConfig: WebviewConfig,
|
|
415
404
|
/** react-native 相关配置,用于挂载事件等,如 onShareAppMessage */
|
|
416
|
-
rnConfig
|
|
405
|
+
rnConfig: RnConfig,
|
|
417
406
|
}
|
|
418
407
|
|
|
419
408
|
type SupportedMode = 'wx' | 'ali' | 'qq' | 'swan' | 'tt' | 'web' | 'qa'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mpxjs/core",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.16-beta.2",
|
|
4
4
|
"description": "mpx runtime core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"miniprogram",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"main": "src/index.js",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@mpxjs/utils": "^2.10.
|
|
22
|
+
"@mpxjs/utils": "^2.10.16",
|
|
23
23
|
"lodash": "^4.1.1",
|
|
24
24
|
"miniprogram-api-typings": "^3.10.0"
|
|
25
25
|
},
|
|
@@ -93,6 +93,10 @@
|
|
|
93
93
|
"optional": true
|
|
94
94
|
}
|
|
95
95
|
},
|
|
96
|
+
"devDependencies": {
|
|
97
|
+
"@types/react": "^18.2.79",
|
|
98
|
+
"react-native": "^0.74.5"
|
|
99
|
+
},
|
|
96
100
|
"publishConfig": {
|
|
97
101
|
"registry": "https://registry.npmjs.org",
|
|
98
102
|
"access": "public"
|
package/src/convertor/wxToAli.js
CHANGED
|
@@ -7,7 +7,7 @@ import { implemented } from '../core/implement'
|
|
|
7
7
|
const unsupported = ['moved', 'definitionFilter']
|
|
8
8
|
|
|
9
9
|
function convertErrorDesc (key) {
|
|
10
|
-
error(`Options.${key} is not supported in runtime conversion from wx to ali.`, global.currentResource)
|
|
10
|
+
error(`Options.${key} is not supported in runtime conversion from wx to ali.`, global.currentResource || global.currentModuleId)
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
function notSupportTip (options) {
|
|
@@ -8,7 +8,7 @@ import { implemented } from '../core/implement'
|
|
|
8
8
|
const unsupported = ['moved', 'definitionFilter']
|
|
9
9
|
|
|
10
10
|
function convertErrorDesc (key) {
|
|
11
|
-
error(`Options.${key} is not supported in runtime conversion from wx to react native.`, global.currentResource)
|
|
11
|
+
error(`Options.${key} is not supported in runtime conversion from wx to react native.`, global.currentResource || global.currentModuleId)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
function notSupportTip (options) {
|
|
@@ -12,7 +12,7 @@ const BEHAVIORS_MAP = {
|
|
|
12
12
|
const unsupported = ['moved', 'relations']
|
|
13
13
|
|
|
14
14
|
function convertErrorDesc (key) {
|
|
15
|
-
error(`Options.${key} is not supported in runtime conversion from wx to swan.`, global.currentResource)
|
|
15
|
+
error(`Options.${key} is not supported in runtime conversion from wx to swan.`, global.currentResource || global.currentModuleId)
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
function notSupportTip (options) {
|
package/src/convertor/wxToTt.js
CHANGED
|
@@ -12,7 +12,7 @@ export default {
|
|
|
12
12
|
if (options.behaviors) {
|
|
13
13
|
options.behaviors.forEach((behavior, idx) => {
|
|
14
14
|
if (BEHAVIORS_MAP.includes(behavior)) {
|
|
15
|
-
error(`Built-in behavior "${behavior}" is not supported in tt environment!`, global.currentResource)
|
|
15
|
+
error(`Built-in behavior "${behavior}" is not supported in tt environment!`, global.currentResource || global.currentModuleId)
|
|
16
16
|
options.behaviors.splice(idx, 1)
|
|
17
17
|
}
|
|
18
18
|
})
|
package/src/convertor/wxToWeb.js
CHANGED
|
@@ -14,7 +14,7 @@ import { implemented } from '../core/implement'
|
|
|
14
14
|
const unsupported = ['moved', 'definitionFilter', 'onShareAppMessage']
|
|
15
15
|
|
|
16
16
|
function convertErrorDesc (key) {
|
|
17
|
-
error(`Options.${key} is not supported in runtime conversion from wx to web.`, global.currentResource)
|
|
17
|
+
error(`Options.${key} is not supported in runtime conversion from wx to web.`, global.currentResource || global.currentModuleId)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
function notSupportTip (options) {
|
|
@@ -13,7 +13,7 @@ export default function transferOptions (options, type, needConvert = true) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
// 文件编译路径
|
|
16
|
-
options.mpxFileResource = global.currentResource
|
|
16
|
+
options.mpxFileResource = global.currentResource || global.currentModuleId
|
|
17
17
|
// 注入全局写入的mixins,原生模式下不进行注入
|
|
18
18
|
if (!options.__nativeRender__) {
|
|
19
19
|
options = mergeInjectedMixins(options, type)
|
|
@@ -8,10 +8,6 @@ const rawDimensions = {
|
|
|
8
8
|
}
|
|
9
9
|
let width, height
|
|
10
10
|
|
|
11
|
-
// TODO 临时适配折叠屏场景适配
|
|
12
|
-
// const isLargeFoldableLike = (__mpx_mode__ === 'android') && (height / width < 1.5) && (width > 600)
|
|
13
|
-
// if (isLargeFoldableLike) width = width / 2
|
|
14
|
-
|
|
15
11
|
function customDimensions (dimensions) {
|
|
16
12
|
if (typeof Mpx.config.rnConfig?.customDimensions === 'function') {
|
|
17
13
|
dimensions = Mpx.config.rnConfig.customDimensions(dimensions) || dimensions
|
|
@@ -236,12 +232,18 @@ export default function styleHelperMixin () {
|
|
|
236
232
|
flex: 0,
|
|
237
233
|
height: 0,
|
|
238
234
|
width: 0,
|
|
239
|
-
|
|
240
|
-
|
|
235
|
+
paddingTop: 0,
|
|
236
|
+
paddingRight: 0,
|
|
237
|
+
paddingBottom: 0,
|
|
238
|
+
paddingLeft: 0,
|
|
239
|
+
marginTop: 0,
|
|
240
|
+
marginRight: 0,
|
|
241
|
+
marginBottom: 0,
|
|
242
|
+
marginLeft: 0,
|
|
241
243
|
overflow: 'hidden'
|
|
242
244
|
})
|
|
243
245
|
}
|
|
244
|
-
const isEmpty = isNativeStaticStyle ? result.length
|
|
246
|
+
const isEmpty = isNativeStaticStyle ? !result.length : isEmptyObject(result)
|
|
245
247
|
return isEmpty ? empty : result
|
|
246
248
|
}
|
|
247
249
|
}
|
|
@@ -3,7 +3,7 @@ import * as ReactNative from 'react-native'
|
|
|
3
3
|
import { ReactiveEffect } from '../../observer/effect'
|
|
4
4
|
import { watch } from '../../observer/watch'
|
|
5
5
|
import { del, reactive, set } from '../../observer/reactive'
|
|
6
|
-
import { hasOwn, isFunction, noop, isObject, isArray, getByPath, collectDataset, hump2dash, dash2hump, callWithErrorHandling, wrapMethodsWithErrorHandling, error, setFocusedNavigation } from '@mpxjs/utils'
|
|
6
|
+
import { hasOwn, isFunction, noop, isObject, isArray, getByPath, collectDataset, hump2dash, dash2hump, callWithErrorHandling, wrapMethodsWithErrorHandling, error, warn, setFocusedNavigation } from '@mpxjs/utils'
|
|
7
7
|
import MpxProxy from '../../core/proxy'
|
|
8
8
|
import { BEFOREUPDATE, ONLOAD, UPDATED, ONSHOW, ONHIDE, ONRESIZE, REACTHOOKSEXEC } from '../../core/innerLifecycle'
|
|
9
9
|
import mergeOptions from '../../core/mergeOptions'
|
|
@@ -13,12 +13,12 @@ import MpxKeyboardAvoidingView from '@mpxjs/webpack-plugin/lib/runtime/component
|
|
|
13
13
|
import {
|
|
14
14
|
IntersectionObserverContext,
|
|
15
15
|
KeyboardAvoidContext,
|
|
16
|
+
ProviderContext,
|
|
16
17
|
RouteContext
|
|
17
18
|
} from '@mpxjs/webpack-plugin/lib/runtime/components/react/dist/context'
|
|
18
19
|
import { PortalHost, useSafeAreaInsets } from '../env/navigationHelper'
|
|
19
20
|
import { useInnerHeaderHeight } from '../env/nav'
|
|
20
21
|
|
|
21
|
-
const ProviderContext = createContext(null)
|
|
22
22
|
function getSystemInfo () {
|
|
23
23
|
const windowDimensions = ReactNative.Dimensions.get('window')
|
|
24
24
|
const screenDimensions = ReactNative.Dimensions.get('screen')
|
|
@@ -497,7 +497,6 @@ function getLayoutData (headerHeight) {
|
|
|
497
497
|
|
|
498
498
|
export function PageWrapperHOC (WrappedComponent, pageConfig = {}) {
|
|
499
499
|
return function PageWrapperCom ({ navigation, route, ...props }) {
|
|
500
|
-
const rootRef = useRef(null)
|
|
501
500
|
const keyboardAvoidRef = useRef(null)
|
|
502
501
|
const intersectionObservers = useRef({})
|
|
503
502
|
const currentPageId = useMemo(() => ++pageId, [])
|
|
@@ -545,36 +544,36 @@ export function PageWrapperHOC (WrappedComponent, pageConfig = {}) {
|
|
|
545
544
|
// android存在第一次打开insets都返回为0情况,后续会触发第二次渲染后正确
|
|
546
545
|
navigation.insets = useSafeAreaInsets()
|
|
547
546
|
return withKeyboardAvoidingView(
|
|
548
|
-
|
|
549
|
-
{
|
|
550
|
-
style: {
|
|
551
|
-
flex: 1,
|
|
552
|
-
backgroundColor: currentPageConfig?.backgroundColor || '#fff',
|
|
553
|
-
// 解决页面内有元素定位relative left为负值的时候,回退的时候还能看到对应元素问题
|
|
554
|
-
overflow: 'hidden'
|
|
555
|
-
},
|
|
556
|
-
ref: rootRef
|
|
557
|
-
},
|
|
558
|
-
createElement(RouteContext.Provider,
|
|
559
|
-
{
|
|
560
|
-
value: routeContextValRef.current
|
|
561
|
-
},
|
|
562
|
-
createElement(IntersectionObserverContext.Provider,
|
|
547
|
+
createElement(ReactNative.View,
|
|
563
548
|
{
|
|
564
|
-
|
|
549
|
+
style: {
|
|
550
|
+
flex: 1,
|
|
551
|
+
// 页面容器背景色
|
|
552
|
+
backgroundColor: currentPageConfig?.backgroundColorContent || '#fff',
|
|
553
|
+
// 解决页面内有元素定位relative left为负值的时候,回退的时候还能看到对应元素问题
|
|
554
|
+
overflow: 'hidden'
|
|
555
|
+
}
|
|
565
556
|
},
|
|
566
|
-
createElement(
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
557
|
+
createElement(RouteContext.Provider,
|
|
558
|
+
{
|
|
559
|
+
value: routeContextValRef.current
|
|
560
|
+
},
|
|
561
|
+
createElement(IntersectionObserverContext.Provider,
|
|
562
|
+
{
|
|
563
|
+
value: intersectionObservers.current
|
|
564
|
+
},
|
|
565
|
+
createElement(PortalHost,
|
|
566
|
+
null,
|
|
567
|
+
createElement(WrappedComponent, {
|
|
568
|
+
...props,
|
|
569
|
+
navigation,
|
|
570
|
+
route,
|
|
571
|
+
id: currentPageId
|
|
572
|
+
})
|
|
573
|
+
)
|
|
574
|
+
)
|
|
574
575
|
)
|
|
575
|
-
)
|
|
576
576
|
)
|
|
577
|
-
)
|
|
578
577
|
)
|
|
579
578
|
}
|
|
580
579
|
}
|
|
@@ -593,7 +592,7 @@ export function getDefaultOptions ({ type, rawOptions = {}, currentInject }) {
|
|
|
593
592
|
const instanceRef = useRef(null)
|
|
594
593
|
const propsRef = useRef(null)
|
|
595
594
|
const intersectionCtx = useContext(IntersectionObserverContext)
|
|
596
|
-
const { pageId } = useContext(RouteContext) || {}
|
|
595
|
+
const { pageId, navigation } = useContext(RouteContext) || {}
|
|
597
596
|
const parentProvides = useContext(ProviderContext)
|
|
598
597
|
let relation = null
|
|
599
598
|
if (hasDescendantRelation || hasAncestorRelation) {
|
|
@@ -652,6 +651,10 @@ export function getDefaultOptions ({ type, rawOptions = {}, currentInject }) {
|
|
|
652
651
|
usePageEffect(proxy, pageId)
|
|
653
652
|
useEffect(() => {
|
|
654
653
|
proxy.mounted()
|
|
654
|
+
if (navigation.camera?.multi) {
|
|
655
|
+
navigation.camera.multi = false
|
|
656
|
+
warn('<camera>: 一个页面只能插入一个')
|
|
657
|
+
}
|
|
655
658
|
return () => {
|
|
656
659
|
proxy.unmounted()
|
|
657
660
|
proxy.target.__resetInstance()
|