Skip to content

Commit

Permalink
RegExp-escape tags and prefixes, and allow multi-char prefixes
Browse files Browse the repository at this point in the history
  • Loading branch information
nebrelbug committed May 15, 2020
1 parent ab0106e commit 58d8a4d
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 25 deletions.
15 changes: 10 additions & 5 deletions dist/browser/eta.dev.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/browser/eta.dev.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/browser/eta.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/browser/eta.min.js.map

Large diffs are not rendered by default.

15 changes: 10 additions & 5 deletions dist/eta.cjs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/eta.cjs.js.map

Large diffs are not rendered by default.

15 changes: 10 additions & 5 deletions dist/eta.es.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/eta.es.js.map

Large diffs are not rendered by default.

21 changes: 16 additions & 5 deletions src/parse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ var singleQuoteReg = /'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g

var doubleQuoteReg = /"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g

function escapeRegExp (string: string) {
// From MDN
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string
}

export default function parse (str: string, env: EtaConfig): Array<AstObject> {
var buffer: Array<AstObject> = []
var trimLeftOfNextStr: string | false = false
Expand Down Expand Up @@ -66,12 +71,18 @@ export default function parse (str: string, env: EtaConfig): Array<AstObject> {
}
}

var prefixes = (parseOptions.exec + parseOptions.interpolate + parseOptions.raw)
.split('')
.join('|')
var prefixes = parseOptions.exec + parseOptions.interpolate + parseOptions.raw

prefixes = prefixes.split('').reduce(function (accumulator, currentValue) {
return accumulator + '|' + escapeRegExp(currentValue)
})

var parseOpenReg = new RegExp(
'([^]*?)' + escapeRegExp(env.tags[0]) + '(-|_)?\\s*(' + prefixes + ')?\\s*',
'g'
)

var parseOpenReg = new RegExp('([^]*?)' + env.tags[0] + '(-|_)?\\s*(' + prefixes + ')?\\s*', 'g')
var parseCloseReg = new RegExp('\'|"|`|\\/\\*|(\\s*(-|_)?' + env.tags[1] + ')', 'g')
var parseCloseReg = new RegExp('\'|"|`|\\/\\*|(\\s*(-|_)?' + escapeRegExp(env.tags[1]) + ')', 'g')
// TODO: benchmark having the \s* on either side vs using str.trim()

var m
Expand Down

0 comments on commit 58d8a4d

Please sign in to comment.