refactor: use global whitelist for render proxy has check

This commit is contained in:
Evan You
2019-10-02 10:37:06 -04:00
parent d87255ce46
commit 191db785bd
4 changed files with 20 additions and 23 deletions

View File

@@ -23,6 +23,7 @@ import {
parseJS,
walkJS
} from '../utils'
import { globalsWhitelist } from '@vue/shared'
export const transformExpression: NodeTransform = (node, context) => {
if (node.type === NodeTypes.INTERPOLATION) {
@@ -215,17 +216,6 @@ const isPropertyShorthand = (node: Node, parent: Node) =>
const isStaticPropertyKey = (node: Node, parent: Node) =>
isPropertyKey(node, parent) && (parent as Property).value !== node
const globals = new Set(
(
'Infinity,undefined,NaN,isFinite,isNaN,' +
'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
'require,' + // for webpack
'arguments,'
) // parsed as identifier but is a special keyword...
.split(',')
)
function shouldPrefix(identifier: Identifier, parent: Node) {
if (
!(
@@ -245,8 +235,12 @@ function shouldPrefix(identifier: Identifier, parent: Node) {
) &&
// not in an Array destructure pattern
!(parent.type === 'ArrayPattern') &&
// skip globals + commonly used shorthands
!globals.has(identifier.name)
// skip whitelisted globals
!globalsWhitelist.has(identifier.name) &&
// special case for webpack compilation
identifier.name !== `require` &&
// is a special keyword but parsed as identifier
identifier.name !== `arguments`
) {
return true
}