* deps: bump ws * deps: bump lightningcss * deps: workerpool * deps: various types * deps: chalk * deps: globby * deps: preact * deps: tsx * deps: @floating-ui/dom * deps: esbuild * deps: types + prettier * deps: rimraf, typescript * deps: remark/rehype/unified ecosystem * format
		
			
				
	
	
		
			28 lines
		
	
	
		
			720 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			720 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Components, Jsx, toJsxRuntime } from "hast-util-to-jsx-runtime"
 | 
						|
import { Node, Root } from "hast"
 | 
						|
import { Fragment, jsx, jsxs } from "preact/jsx-runtime"
 | 
						|
import { trace } from "./trace"
 | 
						|
import { type FilePath } from "./path"
 | 
						|
 | 
						|
const customComponents: Components = {
 | 
						|
  table: (props) => (
 | 
						|
    <div class="table-container">
 | 
						|
      <table {...props} />
 | 
						|
    </div>
 | 
						|
  ),
 | 
						|
}
 | 
						|
 | 
						|
export function htmlToJsx(fp: FilePath, tree: Node) {
 | 
						|
  try {
 | 
						|
    return toJsxRuntime(tree as Root, {
 | 
						|
      Fragment,
 | 
						|
      jsx: jsx as Jsx,
 | 
						|
      jsxs: jsxs as Jsx,
 | 
						|
      elementAttributeNameCase: "html",
 | 
						|
      components: customComponents,
 | 
						|
    })
 | 
						|
  } catch (e) {
 | 
						|
    trace(`Failed to parse Markdown in \`${fp}\` into JSX`, e as Error)
 | 
						|
  }
 | 
						|
}
 |