1- import render from 'dom-serializer'
2- import { selectAll , selectOne } from 'css-select'
3- import { DomUtils , parseDocument } from 'htmlparser2'
4-
5- const { getAttributeValue, textContent } = DomUtils
1+ import Docpa from 'docpa'
62
73function getRowWithColumns (
8- tableDoc : ReturnType < typeof parseDocument > ,
4+ tableDoc : Docpa ,
95 selectors : [ string , string ] ,
106 shouldBeText : boolean ,
117 trim : boolean
128) {
139 const rowSelector = selectors [ 0 ] || 'tr'
1410 const colSelector = selectors [ 1 ] || 'td,th'
1511
16- return selectAll ( rowSelector , tableDoc ) . map ( ( tr ) =>
17- selectAll ( colSelector , tr ) . map ( ( td ) => {
18- const rowspan = ( td && + getAttributeValue ( td as any , 'rowspan' ) ! ) || 1
19- const colspan = ( td && + getAttributeValue ( td as any , 'colspan' ) ! ) || 1
20- const value =
21- ( td && ( shouldBeText ? textContent ( td ) : render ( td . children ) ) ) || ''
12+ return tableDoc . querySelectorAll ( rowSelector ) . map ( ( tr ) => {
13+ if ( ! tr ) return [ ]
14+ return tr . querySelectorAll ( colSelector ) . map ( ( td ) => {
15+ if ( ! td ) return { value : '' , colspan : 1 , rowspan : 1 }
16+
17+ const rowspan = + ( td . getAttribute ( 'rowspan' ) || 1 ) || 1
18+ const colspan = + ( td . getAttribute ( 'colspan' ) || 1 ) || 1
19+
20+ const value = ( shouldBeText ? td . textContent : td . innerHTML ) || ''
21+
2222 return { value : trim ? value . trim ( ) : value , colspan, rowspan }
2323 } )
24- )
24+ } )
2525}
2626
2727interface ParseTableOptions {
@@ -39,8 +39,8 @@ function parseTable(html: string, options: ParseTableOptions) {
3939 trim = true ,
4040 } = options
4141
42- const document = parseDocument ( html )
43- const table = selectOne ( tableSelector , document )
42+ const document = new Docpa ( html )
43+ const table = document . querySelector ( tableSelector )
4444
4545 if ( ! table ) throw new Error ( `${ tableSelector } not found in document.` )
4646
0 commit comments