parseJS,
walkJS
} from '../utils'
-import { globalsWhitelist } from '@vue/shared'
+import { isGloballyWhitelisted, makeMap } from '@vue/shared'
-const literalsWhitelist = new Set([`true`, `false`, `null`, `this`])
+const isLiteralWhitelisted = makeMap('true,false,null,this')
export const transformExpression: NodeTransform = (node, context) => {
if (node.type === NodeTypes.INTERPOLATION) {
if (
!asParams &&
!context.identifiers[rawExp] &&
- !globalsWhitelist.has(rawExp) &&
- !literalsWhitelist.has(rawExp)
+ !isGloballyWhitelisted(rawExp) &&
+ !isLiteralWhitelisted(rawExp)
) {
node.content = `_ctx.${rawExp}`
} else if (!context.identifiers[rawExp]) {
// not in an Array destructure pattern
!(parent.type === 'ArrayPattern') &&
// skip whitelisted globals
- !globalsWhitelist.has(identifier.name) &&
+ !isGloballyWhitelisted(identifier.name) &&
// special case for webpack compilation
identifier.name !== `require` &&
// is a special keyword but parsed as identifier
-const HTMLTagSet = new Set([
- 'html',
- 'body',
- 'base',
- 'head',
- 'link',
- 'meta',
- 'style',
- 'title',
- 'address',
- 'article',
- 'aside',
- 'footer',
- 'header',
- 'h1',
- 'h2',
- 'h3',
- 'h4',
- 'h5',
- 'h6',
- 'hgroup',
- 'nav',
- 'section',
- 'div',
- 'dd',
- 'dl',
- 'dt',
- 'figcaption',
- 'figure',
- 'picture',
- 'hr',
- 'img',
- 'li',
- 'main',
- 'ol',
- 'p',
- 'pre',
- 'ul',
- 'a',
- 'b',
- 'abbr',
- 'bdi',
- 'bdo',
- 'br',
- 'cite',
- 'code',
- 'data',
- 'dfn',
- 'em',
- 'i',
- 'kbd',
- 'mark',
- 'q',
- 'rp',
- 'rt',
- 'rtc',
- 'ruby',
- 's',
- 'samp',
- 'small',
- 'span',
- 'strong',
- 'sub',
- 'sup',
- 'time',
- 'u',
- 'var',
- 'wbr',
- 'area',
- 'audio',
- 'map',
- 'track',
- 'video',
- 'embed',
- 'object',
- 'param',
- 'source',
- 'canvas',
- 'script',
- 'noscript',
- 'del',
- 'ins',
- 'caption',
- 'col',
- 'colgroup',
- 'table',
- 'thead',
- 'tbody',
- 'td',
- 'th',
- 'tr',
- 'button',
- 'datalist',
- 'fieldset',
- 'form',
- 'input',
- 'label',
- 'legend',
- 'meter',
- 'optgroup',
- 'option',
- 'output',
- 'progress',
- 'select',
- 'textarea',
- 'details',
- 'dialog',
- 'menu',
- 'menuitem',
- 'summary',
- 'content',
- 'element',
- 'shadow',
- 'template',
- 'blockquote',
- 'iframe',
- 'tfoot'
-])
+import { makeMap } from './makeMap'
+
+const HTML_TAGS =
+ 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +
+ 'header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,' +
+ 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +
+ 'data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,' +
+ 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +
+ 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +
+ 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +
+ 'option,output,progress,select,textarea,details,dialog,menu,menuitem,' +
+ 'summary,content,element,shadow,template,blockquote,iframe,tfoot'
/**
* this list is intentionally selective, only covering SVG elements that may
* contain child elements.
*/
-const SVGTagSet = new Set([
- 'svg',
- 'animate',
- 'circle',
- 'clippath',
- 'cursor',
- 'defs',
- 'desc',
- 'ellipse',
- 'filter',
- 'font-face',
- 'foreignObject',
- 'g',
- 'glyph',
- 'image',
- 'line',
- 'marker',
- 'mask',
- 'missing-glyph',
- 'path',
- 'pattern',
- 'polygon',
- 'polyline',
- 'rect',
- 'switch',
- 'symbol',
- 'text',
- 'textpath',
- 'tspan',
- 'use',
- 'view'
-])
+const SVG_TAGS =
+ 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
+ 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
+ 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view'
-const VoidTagSet = new Set([
- 'area',
- 'base',
- 'br',
- 'col',
- 'embed',
- 'hr',
- 'img',
- 'input',
- 'link',
- 'meta',
- 'param',
- 'source',
- 'track',
- 'wbr'
-])
+const VOID_TAGS =
+ 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'
-export const isVoidTag = (tag: string) => VoidTagSet.has(tag)
-export const isHTMLTag = (tag: string) => HTMLTagSet.has(tag)
-export const isSVGTag = (tag: string) => SVGTagSet.has(tag)
+export const isHTMLTag = makeMap(HTML_TAGS)
+export const isSVGTag = makeMap(SVG_TAGS)
+export const isVoidTag = makeMap(VOID_TAGS)