Skip to content

Commit 4bb4d2b

Browse files
kopptheZakaryCode
andauthored
fix(weapp): 修复微信 Map 组件在 Android 环境下且小程序基础库 v3.4.10+ 出现的属性配置异常 (#16603)
* fix(weapp): 修复微信 Map 组件在 Android 环境下且小程序基础库 v3.4.10+ 出现的属性配置异常 1. 优化 isNumber 判断逻辑; 2. 修复微信 Map 组件 setting 属性的默认设置值问题; * test: update snapshots * test: update snapshots * chore: 更新 typescript 版本 * test: update snapshots --------- Co-authored-by: Zakary <zakarycode@gmail.com>
1 parent bcbd228 commit 4bb4d2b

26 files changed

+7009
-6728
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@
153153
"ts-jest": "^29.1.2",
154154
"tslib": "^2.6.2",
155155
"ts-node": "^10.9.1",
156-
"typescript": "^5.4.5",
156+
"typescript": "~5.4.5",
157157
"vitest": "^1.6.0"
158158
},
159159
"pnpm": {

packages/shared/src/is.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,18 @@ export function isFunction (o: unknown): o is (...args: any[]) => any {
2323
}
2424

2525
export function isNumber (o: unknown): o is number {
26+
if (Number.isFinite) return Number.isFinite(o)
2627
return typeof o === 'number'
2728
}
2829

2930
export function isBooleanStringLiteral (o: unknown): o is string {
3031
return o === 'true' || o === 'false'
3132
}
3233

34+
export function isObjectStringLiteral (o: unknown): o is string {
35+
return o === '{}'
36+
}
37+
3338
export const isArray = Array.isArray
3439

3540
export const isWebPlatform = () => process.env.TARO_ENV === 'h5' || process.env.TARO_PLATFORM === 'web'

packages/shared/src/template.ts

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
singleQuote,
2020
voidElements
2121
} from './components'
22-
import { isBooleanStringLiteral, isFunction, isNumber, isString } from './is'
22+
import { isBooleanStringLiteral, isFunction, isNumber, isObjectStringLiteral, isString } from './is'
2323
import { Shortcuts } from './shortcuts'
2424
import { capitalize, getComponentsAlias, hasOwn, indent, toCamelCase, toDashed, toKebabCase } from './utils'
2525

@@ -134,17 +134,15 @@ export class BaseTemplate {
134134

135135
for (let prop in component) {
136136
if (hasOwn(component, prop)) {
137+
const propInCamelCase = toCamelCase(prop)
138+
const propAlias = componentAlias[propInCamelCase] || propInCamelCase
137139
let propValue = component[prop]
140+
138141
if (prop.startsWith('bind') || propValue === 'eh') {
139142
propValue = 'eh'
140143
} else if (propValue === '') {
141-
const propInCamelCase = toCamelCase(prop)
142-
const propAlias = componentAlias[propInCamelCase] || propInCamelCase
143144
propValue = `i.${propAlias}`
144145
} else if (isBooleanStringLiteral(propValue) || isNumber(+propValue)) {
145-
const propInCamelCase = toCamelCase(prop)
146-
const propAlias = componentAlias[propInCamelCase] || propInCamelCase
147-
148146
// cursor 默认取最后输入框最后一位 fix #13809
149147
if (prop === 'cursor') {
150148
propValue = `i.${componentAlias.value}?i.${componentAlias.value}.length:-1`
@@ -153,9 +151,11 @@ export class BaseTemplate {
153151
propValue = this.supportXS
154152
? `xs.b(i.${propAlias},${propValue})`
155153
: `i.${propAlias}===undefined?${propValue}:i.${propAlias}`
154+
} else if (isObjectStringLiteral(propValue)) {
155+
propValue = this.supportXS
156+
? `xs.d(i.${propAlias})`
157+
: `i.${propAlias}===undefined?${propValue}:i.${propAlias}`
156158
} else {
157-
const propInCamelCase = toCamelCase(prop)
158-
const propAlias = componentAlias[propInCamelCase] || propInCamelCase
159159
propValue = `i.${propAlias}||${propValue || singleQuote('')}`
160160
}
161161

@@ -267,9 +267,17 @@ export class BaseTemplate {
267267

268268
const patchValue = patcher[attr]
269269
if (isBooleanStringLiteral(patchValue) || isNumber(patchValue) || isString(patchValue)) {
270-
const propValue = this.supportXS
271-
? `xs.b(i.${toCamelCase(attr)},${patchValue})`
272-
: `i.${toCamelCase(attr)}===undefined?${patchValue}:i.${toCamelCase(attr)}`
270+
let propValue = ''
271+
272+
if (this.supportXS) {
273+
if (isObjectStringLiteral(patchValue)) {
274+
propValue = `xs.d(i.${toCamelCase(attr)})`
275+
}
276+
propValue = `xs.b(i.${toCamelCase(attr)},${patchValue})`
277+
} else {
278+
propValue = `i.${toCamelCase(attr)}===undefined?${patchValue}:i.${toCamelCase(attr)}`
279+
}
280+
273281
return str + ` ${attr}="{{${propValue}}}"`
274282
}
275283
return str + ` ${attr}="{{i.${toCamelCase(attr)}}}"`
@@ -537,6 +545,9 @@ ${this.buildXsTemplate()}
537545
return a === undefined ? b : a
538546
},
539547
c: ${this.buildXSTepFocus(Shortcuts.NodeName)},
548+
d: function (a) {
549+
return a === undefined ? {} : a
550+
},
540551
e: function (n) {
541552
return 'tmpl_' + n + '_${Shortcuts.Container}'
542553
},

packages/taro-cli-convertor/__tests__/__snapshots__/config.test.ts.snap

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,18 @@ class App extends React.Component {
3636
return this.props.children;
3737
}
3838
}
39-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
40-
this.props.children
41-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
42-
this.props
43-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
44-
React.Component
4539
INFO [taro-cli-convertor] parseAst - 解析CallExpression
4640
withWeapp(cacheOptions.getOptionsFromCache(), true)
4741
INFO [taro-cli-convertor] parseAst - 解析CallExpression
4842
cacheOptions.getOptionsFromCache()
4943
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
5044
cacheOptions.getOptionsFromCache
45+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
46+
React.Component
47+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
48+
this.props.children
49+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
50+
this.props
5151
INFO [taro-cli-convertor] parseAst - 解析ExportDefaultDeclaration
5252
export default App;
5353
INFO [taro-cli-convertor] parseAst - 解析StringLiteral
@@ -70,6 +70,10 @@ INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
7070
require("@tarojs/with-weapp")
7171
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
7272
cacheOptions.setOptionsToCache({})
73+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
74+
withWeapp(cacheOptions.getOptionsFromCache(), true)
75+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
76+
cacheOptions.getOptionsFromCache()
7377
INFO [taro-cli-convertor] convertToOptional - 解析ClassBody
7478
{
7579
render() {
@@ -88,10 +92,6 @@ INFO [taro-cli-convertor] convertToOptional - 解析MemberExpression
8892
return this.props.children;
8993
}
9094
}
91-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
92-
withWeapp(cacheOptions.getOptionsFromCache(), true)
93-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
94-
cacheOptions.getOptionsFromCache()
9595
INFO [taro-cli-convertor] parseAst - 解析VariableDeclaration
9696
const {
9797
cacheOptions
@@ -154,20 +154,20 @@ class _C extends React.Component {
154154
return <View><Text>{motto}</Text></View>;
155155
}
156156
}
157-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
158-
this.data
159-
INFO [taro-cli-convertor] parseAst - 解析JSXElement
160-
<View><Text>{motto}</Text></View>
161-
INFO [taro-cli-convertor] parseAst - 解析JSXElement
162-
<Text>{motto}</Text>
163-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
164-
React.Component
165157
INFO [taro-cli-convertor] parseAst - 解析CallExpression
166158
withWeapp(cacheOptions.getOptionsFromCache())
167159
INFO [taro-cli-convertor] parseAst - 解析CallExpression
168160
cacheOptions.getOptionsFromCache()
169161
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
170162
cacheOptions.getOptionsFromCache
163+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
164+
React.Component
165+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
166+
this.data
167+
INFO [taro-cli-convertor] parseAst - 解析JSXElement
168+
<View><Text>{motto}</Text></View>
169+
INFO [taro-cli-convertor] parseAst - 解析JSXElement
170+
<Text>{motto}</Text>
171171
INFO [taro-cli-convertor] parseAst - 解析ExportDefaultDeclaration
172172
export default _C;
173173
INFO [taro-cli-convertor] parseAst - 解析StringLiteral
@@ -205,6 +205,10 @@ data: {
205205
}
206206
INFO [taro-cli-convertor] convertToOptional - 解析ObjectProperty
207207
motto: 'Hello World'
208+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
209+
withWeapp(cacheOptions.getOptionsFromCache())
210+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
211+
cacheOptions.getOptionsFromCache()
208212
INFO [taro-cli-convertor] convertToOptional - 解析ClassBody
209213
{
210214
render() {
@@ -225,10 +229,6 @@ INFO [taro-cli-convertor] convertToOptional - 解析MemberExpression
225229
}
226230
INFO [taro-cli-convertor] convertToOptional - 解析ObjectProperty
227231
motto
228-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
229-
withWeapp(cacheOptions.getOptionsFromCache())
230-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
231-
cacheOptions.getOptionsFromCache()
232232
INFO [taro-cli-convertor] parseAst - 解析VariableDeclaration
233233
const {
234234
cacheOptions
@@ -284,18 +284,18 @@ class App extends React.Component {
284284
return this.props.children;
285285
}
286286
}
287-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
288-
this.props.children
289-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
290-
this.props
291-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
292-
React.Component
293287
INFO [taro-cli-convertor] parseAst - 解析CallExpression
294288
withWeapp(cacheOptions.getOptionsFromCache(), true)
295289
INFO [taro-cli-convertor] parseAst - 解析CallExpression
296290
cacheOptions.getOptionsFromCache()
297291
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
298292
cacheOptions.getOptionsFromCache
293+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
294+
React.Component
295+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
296+
this.props.children
297+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
298+
this.props
299299
INFO [taro-cli-convertor] parseAst - 解析ExportDefaultDeclaration
300300
export default App;
301301
INFO [taro-cli-convertor] parseAst - 解析StringLiteral
@@ -318,6 +318,10 @@ INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
318318
require("@tarojs/with-weapp")
319319
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
320320
cacheOptions.setOptionsToCache({})
321+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
322+
withWeapp(cacheOptions.getOptionsFromCache(), true)
323+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
324+
cacheOptions.getOptionsFromCache()
321325
INFO [taro-cli-convertor] convertToOptional - 解析ClassBody
322326
{
323327
render() {
@@ -336,10 +340,6 @@ INFO [taro-cli-convertor] convertToOptional - 解析MemberExpression
336340
return this.props.children;
337341
}
338342
}
339-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
340-
withWeapp(cacheOptions.getOptionsFromCache(), true)
341-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
342-
cacheOptions.getOptionsFromCache()
343343
INFO [taro-cli-convertor] parseAst - 解析VariableDeclaration
344344
const {
345345
cacheOptions
@@ -402,20 +402,20 @@ class _C extends React.Component {
402402
return <View><Text>{motto}</Text></View>;
403403
}
404404
}
405-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
406-
this.data
407-
INFO [taro-cli-convertor] parseAst - 解析JSXElement
408-
<View><Text>{motto}</Text></View>
409-
INFO [taro-cli-convertor] parseAst - 解析JSXElement
410-
<Text>{motto}</Text>
411-
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
412-
React.Component
413405
INFO [taro-cli-convertor] parseAst - 解析CallExpression
414406
withWeapp(cacheOptions.getOptionsFromCache())
415407
INFO [taro-cli-convertor] parseAst - 解析CallExpression
416408
cacheOptions.getOptionsFromCache()
417409
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
418410
cacheOptions.getOptionsFromCache
411+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
412+
React.Component
413+
INFO [taro-cli-convertor] parseAst - 解析MemberExpression
414+
this.data
415+
INFO [taro-cli-convertor] parseAst - 解析JSXElement
416+
<View><Text>{motto}</Text></View>
417+
INFO [taro-cli-convertor] parseAst - 解析JSXElement
418+
<Text>{motto}</Text>
419419
INFO [taro-cli-convertor] parseAst - 解析ExportDefaultDeclaration
420420
export default _C;
421421
INFO [taro-cli-convertor] parseAst - 解析StringLiteral
@@ -453,6 +453,10 @@ data: {
453453
}
454454
INFO [taro-cli-convertor] convertToOptional - 解析ObjectProperty
455455
motto: 'Hello World'
456+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
457+
withWeapp(cacheOptions.getOptionsFromCache())
458+
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
459+
cacheOptions.getOptionsFromCache()
456460
INFO [taro-cli-convertor] convertToOptional - 解析ClassBody
457461
{
458462
render() {
@@ -473,10 +477,6 @@ INFO [taro-cli-convertor] convertToOptional - 解析MemberExpression
473477
}
474478
INFO [taro-cli-convertor] convertToOptional - 解析ObjectProperty
475479
motto
476-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
477-
withWeapp(cacheOptions.getOptionsFromCache())
478-
INFO [taro-cli-convertor] convertToOptional - 解析CallExpression
479-
cacheOptions.getOptionsFromCache()
480480
INFO [taro-cli-convertor] parseAst - 解析VariableDeclaration
481481
const {
482482
cacheOptions

packages/taro-framework-solid/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"webpack-chain": "^6.5.1",
4545
"esbuild": "~0.19.5",
4646
"solid-js": "^1.8.16",
47-
"typescript": "^5.3.3",
47+
"typescript": "~5.4.5",
4848
"vite": "^4.2.0"
4949
},
5050
"peerDependencies": {

packages/taro-h5/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
"react-test-renderer": "^18.2.0",
7171
"rollup": "^3.29.4",
7272
"rollup-plugin-node-externals": "^5.0.0",
73-
"rollup-plugin-ts": "^3.0.2",
73+
"rollup-plugin-ts": "^3.4.5",
7474
"@rollup/plugin-node-resolve": "^15.2.3"
7575
},
7676
"peerDependencies": {

packages/taro-platform-harmony/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"rollup": "^3.29.4",
4848
"rollup-plugin-copy": "workspace:*",
4949
"rollup-plugin-node-externals": "^5.0.0",
50-
"rollup-plugin-ts": "^3.0.2",
50+
"rollup-plugin-ts": "^3.4.5",
5151
"solid-js": "^1.8.16",
5252
"tslib": "^2.4.0"
5353
}

packages/taro-platform-weapp/src/components.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const _true = 'true'
22
const _false = 'false'
33
const _empty = ''
44
const _zero = '0'
5+
const _object = '{}'
56

67
export const components = {
78
// ======== 调整属性 ========
@@ -39,7 +40,7 @@ export const components = {
3940
'enable-traffic': _false,
4041
'enable-poi': _true,
4142
'enable-building': _true,
42-
setting: '[]',
43+
setting: _object,
4344
bindLabelTap: _empty,
4445
bindRegionChange: _empty,
4546
bindPoiTap: _empty,

packages/taro-runtime/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@
3939
"@vue/runtime-core": "^3.4.23",
4040
"lodash": "^4.17.21",
4141
"react": "^18.2.0",
42-
"rollup-plugin-ts": "^3.0.2"
42+
"rollup-plugin-ts": "^3.4.5"
4343
}
4444
}

packages/taro-transformer-wx/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"eslint-plugin-taro": "^2.2.19",
5151
"lodash": "^4.17.21",
5252
"prettier": "^2.8.8",
53-
"typescript": "^5.4.5"
53+
"typescript": "~5.4.5"
5454
},
5555
"devDependencies": {
5656
"@types/babel__core": "^7.20.5",

0 commit comments

Comments
 (0)