diff --git a/lib/index.js b/lib/index.js index 9c04897..5b44d18 100644 --- a/lib/index.js +++ b/lib/index.js @@ -110,7 +110,7 @@ function parseParameters(value) { return value .replace( - /\s+([-\w]+)(?:=(?:"((?:\\[\s\S]|[^"])+)"|'((?:\\[\s\S]|[^'])+)'|((?:\\[\s\S]|[^"'\s])+)))?/gi, + /\s+([-\w]+)(?:=(?:"((?:\\[\s\S]|[^"])*)"|'((?:\\[\s\S]|[^'])*)'|((?:\\[\s\S]|[^"'\s])+)))?/gi, replacer ) .replace(/\s+/g, '') @@ -128,14 +128,15 @@ function parseParameters(value) { // eslint-disable-next-line max-params function replacer(_, $1, $2, $3, $4) { /** @type {MarkerParameterValue} */ - let value = $2 || $3 || $4 || '' + + let value = $2 === undefined ? ($3 === undefined ? $4 : $3) : $2; const number = Number(value) - if (value === 'true' || value === '') { + if (value === 'true' || value === undefined) { value = true } else if (value === 'false') { value = false - } else if (!Number.isNaN(number)) { + } else if (value.trim() && !Number.isNaN(number)) { value = number } diff --git a/test.js b/test.js index ffc5866..abc45a0 100644 --- a/test.js +++ b/test.js @@ -164,6 +164,32 @@ test('commentMaker', () => { null, 'marker stop for invalid parameters (#3)' ) + + html = {type: 'html', value: ''} + + assert.deepEqual( + commentMarker(html), + { + name: 'foo', + attributes: 'bar=""', + parameters: {bar: ''}, + node: html + }, + 'marker with empty string attribute' + ) + + html = {type: 'html', value: ''} + + assert.deepEqual( + commentMarker(html), + { + name: 'foo', + attributes: 'bar=" "', + parameters: {bar: ' '}, + node: html + }, + 'marker with whitespace attribute' + ) }) test('comment node', () => {