From 74c165ccbdbb6eba0c6b9e325163f9e1e5d3692f Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Fri, 20 Aug 2021 09:20:33 +0100 Subject: [PATCH 01/10] test: break test to demonstrate bug --- test/test-core.spec.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/test/test-core.spec.ts b/test/test-core.spec.ts index 17f889b..535acd3 100644 --- a/test/test-core.spec.ts +++ b/test/test-core.spec.ts @@ -243,7 +243,7 @@ test('should be not converting html entity name', t => { }); test('should parse with source locations', t => { - const html = '

Test

\n

Foo

'; + const html = '

Test

\n

Foo


'; const tree = parser(html, { sourceLocations: true }); const expected = [ { @@ -284,12 +284,25 @@ test('should parse with source locations', t => { line: 2, column: 1 }, + end: { + line: 2, + column: 13 + } + } + }, + { + tag: 'hr', + location: { + start: { + line: 2, + column: 14 + }, end: { line: 2, column: 17 } } - } + }, ]; t.deepEqual(tree, expected); }); From 1bd66334eeb681440db14b9ab2ef4056c5a34ff4 Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Fri, 20 Aug 2021 19:57:37 +0100 Subject: [PATCH 02/10] Use patched version --- package-lock.json | 42 +++++++++++++++++++++++++++++++++++++----- package.json | 2 +- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7ee3da5..5189964 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4447,6 +4447,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz", "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==", + "dev": true, "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.0.1", @@ -7314,14 +7315,45 @@ "dev": true }, "htmlparser2": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz", - "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==", + "version": "github:fb55/htmlparser2#5ab080e67833e97e58a8b3d6dc7364aceb7dd5cb", + "from": "github:fb55/htmlparser2#5ab080e67833e97e58a8b3d6dc7364aceb7dd5cb", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.4.4", - "entities": "^2.0.0" + "domutils": "^2.5.2", + "entities": "^3.0.1" + }, + "dependencies": { + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + } } }, "http-cache-semantics": { diff --git a/package.json b/package.json index 4c71c52..697f2cd 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "posthtmltree" ], "dependencies": { - "htmlparser2": "^6.0.0" + "htmlparser2": "github:fb55/htmlparser2#5ab080e67833e97e58a8b3d6dc7364aceb7dd5cb" }, "devDependencies": { "@antfu/eslint-config-ts": "^0.4.3", From fb96d68e00df4d3d0f54340d23c3acaf0e1e8d0d Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Fri, 20 Aug 2021 20:30:02 +0100 Subject: [PATCH 03/10] Force in something that works --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index d9bdd82..9df4f5b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -143,7 +143,7 @@ export const parser = (html: string, options: Options = {}): Node[] => { const buf: Node | undefined = bufArray.pop(); if (buf && typeof buf === 'object' && buf.location && parser.endIndex !== null) { - buf.location.end = locationTracker.getPosition(parser.endIndex); + buf.location.end = locationTracker.getPosition((!parser.tagname || parser.tagname === buf.tag) ? parser.endIndex : parser.startIndex - 1); } if (buf) { From 4f00e5c06df3f856b2d2126963cf69704181995c Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Fri, 20 Aug 2021 21:19:53 +0100 Subject: [PATCH 04/10] Use release --- package-lock.json | 5 +++-- package.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5189964..6a2cbf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7315,8 +7315,9 @@ "dev": true }, "htmlparser2": { - "version": "github:fb55/htmlparser2#5ab080e67833e97e58a8b3d6dc7364aceb7dd5cb", - "from": "github:fb55/htmlparser2#5ab080e67833e97e58a8b3d6dc7364aceb7dd5cb", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.0.0.tgz", + "integrity": "sha512-IhdltX9BWhYQft4UPA92jFasNajskja0om6vU0DaIEL4OseCg5zE+mHAMr51AT89TbzzECrQWJ4CZ5NVYTPlKw==", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", diff --git a/package.json b/package.json index 697f2cd..bc19848 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "posthtmltree" ], "dependencies": { - "htmlparser2": "github:fb55/htmlparser2#5ab080e67833e97e58a8b3d6dc7364aceb7dd5cb" + "htmlparser2": "^7.0.0" }, "devDependencies": { "@antfu/eslint-config-ts": "^0.4.3", From 667ccf6da7aaefbb76ba529b850836aeef78b246 Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Sun, 22 Aug 2021 20:35:30 +0100 Subject: [PATCH 05/10] Try and record previous indicies and rewrite if needed --- src/index.ts | 26 +++++++++++++++++++----- src/location-tracker.ts | 7 ++++++- test/test-core.spec.ts | 44 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 70 insertions(+), 7 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9df4f5b..a922c78 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,11 +44,16 @@ export const parser = (html: string, options: Options = {}): Node[] => { const locationTracker = new LocationTracker(html); const bufArray: Node[] = []; const results: Node[] = []; + let lastIndices: [number, number]; - function bufferArrayLast(): Node { + function bufferArrayLast(): Node | undefined { return bufArray[bufArray.length - 1]; } + function resultsLast(): Node | undefined { + return results[results.length - 1]; + } + function isDirective(directive: Directive, tag: string): boolean { if (directive.name instanceof RegExp) { const regex = new RegExp(directive.name.source, 'i'); @@ -122,10 +127,20 @@ export const parser = (html: string, options: Options = {}): Node[] => { } function onopentag(tag: string, attrs: Attributes) { - const start = locationTracker.getPosition(parser.startIndex); const buf: NodeTag = { tag }; if (options.sourceLocations) { + if (lastIndices?.[0] === parser.startIndex && lastIndices?.[1] === parser.endIndex) { + // The last closing tag was inferred, so we need to update its end location + const last = bufferArrayLast() || resultsLast(); + + if (typeof last === 'object' && Array.isArray(last.content) && last.location) { + last.location.end = locationTracker.getPosition(parser.startIndex - 1) + } + } + + const start = locationTracker.getPosition(parser.startIndex); + buf.location = { start, end: start @@ -142,8 +157,9 @@ export const parser = (html: string, options: Options = {}): Node[] => { function onclosetag() { const buf: Node | undefined = bufArray.pop(); - if (buf && typeof buf === 'object' && buf.location && parser.endIndex !== null) { - buf.location.end = locationTracker.getPosition((!parser.tagname || parser.tagname === buf.tag) ? parser.endIndex : parser.startIndex - 1); + if (buf && typeof buf === 'object' && buf.location && buf.location.end === buf.location.start && parser.endIndex !== null) { + lastIndices = [parser.startIndex, parser.endIndex]; + buf.location.end = locationTracker.getPosition(parser.endIndex); } if (buf) { @@ -167,7 +183,7 @@ export const parser = (html: string, options: Options = {}): Node[] => { } function ontext(text: string) { - const last: Node = bufferArrayLast(); + const last = bufferArrayLast(); if (last === undefined) { results.push(text); diff --git a/src/location-tracker.ts b/src/location-tracker.ts index 033959c..bbcc81c 100644 --- a/src/location-tracker.ts +++ b/src/location-tracker.ts @@ -25,7 +25,12 @@ export class LocationTracker { getPosition(index: number): Position { if (index < this.lastIndex) { - throw new Error('Source indices must be monotonic'); + this.lastPosition = { + line: 1, + column: 1 + }; + + this.lastIndex = 0; } while (this.lastIndex < index) { diff --git a/test/test-core.spec.ts b/test/test-core.spec.ts index 535acd3..18c036b 100644 --- a/test/test-core.spec.ts +++ b/test/test-core.spec.ts @@ -243,7 +243,7 @@ test('should be not converting html entity name', t => { }); test('should parse with source locations', t => { - const html = '

Test

\n

Foo


'; + const html = '

Test

\n

Foo


Bar\n


'; const tree = parser(html, { sourceLocations: true }); const expected = [ { @@ -303,6 +303,48 @@ test('should parse with source locations', t => { } } }, + { + tag: 'p', + location: { + start: { + line: 2, + column: 18, + }, + end: { + line: 2, + column: 21, + }, + }, + }, + { + tag: 'p', + content: [ + 'Bar\n', + ], + location: { + start: { + line: 2, + column: 22 + }, + end: { + line: 2, + column: 28 + } + } + }, + { + tag: 'hr', + location: { + start: { + line: 3, + column: 1 + }, + end: { + line: 3, + column: 4 + } + } + }, ]; t.deepEqual(tree, expected); }); From c9fde6390551e8dcabd87da9d08b242747f23292 Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Mon, 23 Aug 2021 14:01:05 +0100 Subject: [PATCH 06/10] Use patched version --- package-lock.json | 5 ++--- package.json | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a2cbf2..86ba362 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7315,9 +7315,8 @@ "dev": true }, "htmlparser2": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.0.0.tgz", - "integrity": "sha512-IhdltX9BWhYQft4UPA92jFasNajskja0om6vU0DaIEL4OseCg5zE+mHAMr51AT89TbzzECrQWJ4CZ5NVYTPlKw==", + "version": "github:fb55/htmlparser2#da67eba77cbb938e489373181ff40245d422d1c7", + "from": "github:fb55/htmlparser2#da67eba77cbb938e489373181ff40245d422d1c7", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", diff --git a/package.json b/package.json index bc19848..5bdfa64 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "posthtmltree" ], "dependencies": { - "htmlparser2": "^7.0.0" + "htmlparser2": "github:fb55/htmlparser2#da67eba77cbb938e489373181ff40245d422d1c7" }, "devDependencies": { "@antfu/eslint-config-ts": "^0.4.3", From 41845391201256ec5e676c2d98ef292a80924b5c Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Tue, 24 Aug 2021 09:04:16 +0100 Subject: [PATCH 07/10] Use updated patched version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86ba362..c73568a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7315,8 +7315,8 @@ "dev": true }, "htmlparser2": { - "version": "github:fb55/htmlparser2#da67eba77cbb938e489373181ff40245d422d1c7", - "from": "github:fb55/htmlparser2#da67eba77cbb938e489373181ff40245d422d1c7", + "version": "github:fb55/htmlparser2#a2b0bf3fd8332c36575973c77e75d491e34ad30e", + "from": "github:fb55/htmlparser2#a2b0bf3fd8332c36575973c77e75d491e34ad30e", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", diff --git a/package.json b/package.json index 5bdfa64..3ee1f68 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "posthtmltree" ], "dependencies": { - "htmlparser2": "github:fb55/htmlparser2#da67eba77cbb938e489373181ff40245d422d1c7" + "htmlparser2": "github:fb55/htmlparser2#a2b0bf3fd8332c36575973c77e75d491e34ad30e" }, "devDependencies": { "@antfu/eslint-config-ts": "^0.4.3", From 2c5332156e6f45c2a1734592a3980a6f8d7f39e6 Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Sat, 28 Aug 2021 19:33:40 +0100 Subject: [PATCH 08/10] Use release --- package-lock.json | 13 +++++++------ package.json | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index c73568a..b111dc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7315,19 +7315,20 @@ "dev": true }, "htmlparser2": { - "version": "github:fb55/htmlparser2#a2b0bf3fd8332c36575973c77e75d491e34ad30e", - "from": "github:fb55/htmlparser2#a2b0bf3fd8332c36575973c77e75d491e34ad30e", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.1.0.tgz", + "integrity": "sha512-C5W4WAg8imoK0gklCyLSaRR4aL8oyBmaMsYDXtQsIEIpTTJq9bv4ewHQpxaTaGK2kqwyZnsu34tqGlRG23LW/Q==", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.5.2", + "domutils": "^2.8.0", "entities": "^3.0.1" }, "dependencies": { "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", diff --git a/package.json b/package.json index 3ee1f68..10769e4 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "posthtmltree" ], "dependencies": { - "htmlparser2": "github:fb55/htmlparser2#a2b0bf3fd8332c36575973c77e75d491e34ad30e" + "htmlparser2": "^7.1.0" }, "devDependencies": { "@antfu/eslint-config-ts": "^0.4.3", From 4847a0899347758cd96829518fa6059aa7b13f6b Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Sun, 29 Aug 2021 22:13:39 +0100 Subject: [PATCH 09/10] Use isImplied --- package-lock.json | 12 ++++++------ package.json | 2 +- src/index.ts | 37 +++++++++++++------------------------ src/location-tracker.ts | 7 +------ 4 files changed, 21 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index b111dc8..e6c8811 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7315,9 +7315,9 @@ "dev": true }, "htmlparser2": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.1.0.tgz", - "integrity": "sha512-C5W4WAg8imoK0gklCyLSaRR4aL8oyBmaMsYDXtQsIEIpTTJq9bv4ewHQpxaTaGK2kqwyZnsu34tqGlRG23LW/Q==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.1.1.tgz", + "integrity": "sha512-hZb0lfG0hbhR/hB879zbBr8Opv0Be9Zp+JYHgqTw5epF++aotu/zmMTPLy/60iJyR1MaD/3pYRp7xYteXsZMEA==", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -7341,9 +7341,9 @@ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "requires": { "domelementtype": "^2.2.0" } diff --git a/package.json b/package.json index 10769e4..20b8423 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "posthtmltree" ], "dependencies": { - "htmlparser2": "^7.1.0" + "htmlparser2": "^7.1.1" }, "devDependencies": { "@antfu/eslint-config-ts": "^0.4.3", diff --git a/src/index.ts b/src/index.ts index a922c78..1f7e689 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,16 +44,12 @@ export const parser = (html: string, options: Options = {}): Node[] => { const locationTracker = new LocationTracker(html); const bufArray: Node[] = []; const results: Node[] = []; - let lastIndices: [number, number]; + let lastOpenTagEndIndex = 0; - function bufferArrayLast(): Node | undefined { + function bufferArrayLast(): Node { return bufArray[bufArray.length - 1]; } - function resultsLast(): Node | undefined { - return results[results.length - 1]; - } - function isDirective(directive: Directive, tag: string): boolean { if (directive.name instanceof RegExp) { const regex = new RegExp(directive.name.source, 'i'); @@ -130,21 +126,11 @@ export const parser = (html: string, options: Options = {}): Node[] => { const buf: NodeTag = { tag }; if (options.sourceLocations) { - if (lastIndices?.[0] === parser.startIndex && lastIndices?.[1] === parser.endIndex) { - // The last closing tag was inferred, so we need to update its end location - const last = bufferArrayLast() || resultsLast(); - - if (typeof last === 'object' && Array.isArray(last.content) && last.location) { - last.location.end = locationTracker.getPosition(parser.startIndex - 1) - } - } - - const start = locationTracker.getPosition(parser.startIndex); - buf.location = { - start, - end: start + start: locationTracker.getPosition(parser.startIndex), + end: locationTracker.getPosition(parser.endIndex), }; + lastOpenTagEndIndex = parser.endIndex; } if (Object.keys(attrs).length > 0) { @@ -154,12 +140,15 @@ export const parser = (html: string, options: Options = {}): Node[] => { bufArray.push(buf); } - function onclosetag() { + function onclosetag(name: string, isImplied: boolean) { const buf: Node | undefined = bufArray.pop(); - if (buf && typeof buf === 'object' && buf.location && buf.location.end === buf.location.start && parser.endIndex !== null) { - lastIndices = [parser.startIndex, parser.endIndex]; - buf.location.end = locationTracker.getPosition(parser.endIndex); + if (buf && typeof buf === 'object' && buf.location && parser.endIndex !== null) { + if (!isImplied) { + buf.location.end = locationTracker.getPosition(parser.endIndex); + } else if (lastOpenTagEndIndex < parser.startIndex) { + buf.location.end = locationTracker.getPosition(parser.startIndex - 1); + } } if (buf) { @@ -183,7 +172,7 @@ export const parser = (html: string, options: Options = {}): Node[] => { } function ontext(text: string) { - const last = bufferArrayLast(); + const last: Node = bufferArrayLast(); if (last === undefined) { results.push(text); diff --git a/src/location-tracker.ts b/src/location-tracker.ts index bbcc81c..033959c 100644 --- a/src/location-tracker.ts +++ b/src/location-tracker.ts @@ -25,12 +25,7 @@ export class LocationTracker { getPosition(index: number): Position { if (index < this.lastIndex) { - this.lastPosition = { - line: 1, - column: 1 - }; - - this.lastIndex = 0; + throw new Error('Source indices must be monotonic'); } while (this.lastIndex < index) { From 5166475c953917c6aa3d9c76931f78011fdc54cc Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Sun, 29 Aug 2021 22:19:47 +0100 Subject: [PATCH 10/10] Linting --- src/index.ts | 2 +- test/test-core.spec.ts | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/index.ts b/src/index.ts index 1f7e689..a2e447b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -128,7 +128,7 @@ export const parser = (html: string, options: Options = {}): Node[] => { if (options.sourceLocations) { buf.location = { start: locationTracker.getPosition(parser.startIndex), - end: locationTracker.getPosition(parser.endIndex), + end: locationTracker.getPosition(parser.endIndex) }; lastOpenTagEndIndex = parser.endIndex; } diff --git a/test/test-core.spec.ts b/test/test-core.spec.ts index 18c036b..aebac75 100644 --- a/test/test-core.spec.ts +++ b/test/test-core.spec.ts @@ -308,18 +308,18 @@ test('should parse with source locations', t => { location: { start: { line: 2, - column: 18, + column: 18 }, end: { line: 2, - column: 21, - }, - }, + column: 21 + } + } }, { tag: 'p', content: [ - 'Bar\n', + 'Bar\n' ], location: { start: { @@ -344,7 +344,7 @@ test('should parse with source locations', t => { column: 4 } } - }, + } ]; t.deepEqual(tree, expected); });