UNPKG

@mpxjs/webpack-plugin

Version:

mpx compile core

41 lines (37 loc) 1.06 kB
const Parser = require('fastparse') const processMatch = function (match, strUntilValue, name, value, index) { if (!this.isRelevantTagAttr(this.currentTag, name)) return this.results.push({ start: index + strUntilValue.length, length: value.length, value, name, tag: this.currentTag }) } const parser = new Parser({ outside: { '<!--.*?-->': true, '<![CDATA[.*?]]>': true, '<[!\\?].*?>': true, '</[^>]+>': true, '<([a-zA-Z\\-:]+)\\s*': function (match, tagName) { this.currentTag = tagName return 'inside' } }, inside: { '\\s+': true, // eat up whitespace '>': 'outside', // end of attributes '(([0-9a-zA-Z\\-:]+)\\s*=\\s*")([^"]*)"': processMatch, '(([0-9a-zA-Z\\-:]+)\\s*=\\s*\')([^\']*)\'': processMatch, '(([0-9a-zA-Z\\-:]+)\\s*=\\s*)([^\\s>]+)': processMatch } }) module.exports = function parse (html, isRelevantTagAttr) { return parser.parse('outside', html, { currentTag: null, results: [], isRelevantTagAttr: isRelevantTagAttr }).results }