@@ -28,9 +28,9 @@ const getVisitor = ({ $program, usedCompilers }) => ({
2828 if ( ! shouldProcess ( $this , usedCompilers ) ) return
2929
3030 // I. validate template
31- validateTemplate ( $this , usedCompilers )
31+ validateTemplate ( $this )
3232
33- const compiler = usedCompilers [ $this . node . tag . name ]
33+ const compiler = usedCompilers . get ( $this . node . tag . name )
3434
3535 // II. compile template
3636 const source = $this . node . quasi . quasis [ 0 ] ?. value ?. raw || ''
@@ -90,13 +90,13 @@ function insertAfterImports ($program, expressionStatement) {
9090 }
9191}
9292
93- function shouldProcess ( $template , usedCompilers = { } ) {
93+ function shouldProcess ( $template , usedCompilers ) {
9494 if ( ! $template . get ( 'tag' ) . isIdentifier ( ) ) return
95- if ( ! usedCompilers [ $template . node . tag . name ] ) return
95+ if ( ! usedCompilers . has ( $template . node . tag . name ) ) return
9696 return true
9797}
9898
99- function validateTemplate ( $template , usedCompilers = { } ) {
99+ function validateTemplate ( $template ) {
100100 const { node : { quasi } } = $template
101101
102102 if ( quasi . expressions . length > 0 ) {
@@ -107,16 +107,17 @@ function validateTemplate ($template, usedCompilers = {}) {
107107}
108108
109109function getUsedCompilers ( $program , state ) {
110- const res = { }
110+ const res = new Map ( )
111111 const magicImports = state . opts . magicImports || DEFAULT_MAGIC_IMPORTS
112112 for ( const $import of $program . get ( 'body' ) ) {
113113 if ( ! $import . isImportDeclaration ( ) ) continue
114114 if ( ! magicImports . includes ( $import . node . source . value ) ) continue
115115 for ( const $specifier of $import . get ( 'specifiers' ) ) {
116116 if ( ! $specifier . isImportSpecifier ( ) ) continue
117117 const { local, imported } = $specifier . node
118- if ( compilers [ imported . name ] ) {
119- res [ local . name ] = compilers [ imported . name ]
118+ // it's important to use hasOwnProperty here to avoid prototype pollution issues, like 'toString'
119+ if ( Object . prototype . hasOwnProperty . call ( compilers , imported . name ) ) {
120+ res . set ( local . name , compilers [ imported . name ] )
120121 }
121122 }
122123 }
0 commit comments