Skip to content

Commit c6cce70

Browse files
authored
fix: v-t argument evaluation (#39)
1 parent c5fea6f commit c6cce70

File tree

3 files changed

+1167
-1071
lines changed

3 files changed

+1167
-1071
lines changed

package.json

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
"Type: Documentation": ":pencil: Documentation"
2424
}
2525
},
26-
"dependencies": {},
26+
"dependencies": {
27+
"@babel/parser": "^7.9.6"
28+
},
2729
"devDependencies": {
2830
"@vue/server-test-utils": "^1.0.0-beta.29",
2931
"@vue/test-utils": "^1.0.0-beta.29",
@@ -34,11 +36,11 @@
3436
"jest-serializer-vue": "^2.0.2",
3537
"lerna-changelog": "^1.0.0",
3638
"shipjs": "^0.18.0",
37-
"vue": "^2.6.8",
38-
"vue-i18n": "^8.9.0",
39+
"vue": "^2.6.11",
40+
"vue-i18n": "^8.17.0",
3941
"vue-jest": "^3.0.0",
40-
"vue-server-renderer": "^2.6.8",
41-
"vue-template-compiler": "^2.6.8"
42+
"vue-server-renderer": "^2.6.11",
43+
"vue-template-compiler": "^2.6.11"
4244
},
4345
"engines": {
4446
"node": ">= 10.0"

src/util.js

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
const stringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g
2-
const ecmaKeywordsRE = new RegExp('(?<!\\.)\\b' + (
3-
'delete,typeof,instanceof,void,do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
4-
'alert,eval,super,throw,while,yield,delete,export,import,return,switch,default,' +
5-
'extends,finally,continue,debugger,function,arguments'
6-
).split(',').join('\\b(?!\\.)|(?<!\\.)\\b') + '\\b(?!\\.)')
1+
const parser = require('@babel/parser')
72

83
function warn (msg, err) {
94
if (typeof console !== 'undefined') {
@@ -44,15 +39,16 @@ function removeAttr (el, name) {
4439
function evaluateValue (expression) {
4540
const ret = { status: 'ng', value: undefined }
4641

47-
if (expression.match(ecmaKeywordsRE)) { return ret }
48-
if (!expression.match(stringRE)) { return ret }
49-
5042
try {
51-
const val = (new Function(`return ${expression.trim()}`))()
52-
ret.status = 'ok'
53-
ret.value = val
43+
const ast = parser.parse(`const a = ${expression.trim()}`)
44+
const node = ast.program.body[0].declarations[0].init
45+
if (node.type === 'StringLiteral' || node.type === 'ObjectExpression') {
46+
const val = (new Function(`return ${expression.trim()}`))()
47+
ret.status = 'ok'
48+
ret.value = val
49+
}
5450
} catch (e) { }
55-
51+
5652
return ret
5753
}
5854

0 commit comments

Comments
 (0)