11import { Element } from "./elements.ts" ;
2-
3- export type Falsy = false | "" | 0 | 0n | undefined | null ;
4-
5- export const Falsy = new Set ( [ false , "" , 0 , 0n , undefined , null ] ) ;
6- // deno-lint-ignore no-explicit-any
7- export const isFalsy = ( n : any ) : n is Falsy => Falsy . has ( n ) ;
2+ import { Falsy , isFalsy } from "./util.ts" ;
83
94export type Attr = Record < string , string > ;
105
116export type TextNode = string ;
127
13- export type Nodeish < Tag extends Element = Element > =
14- | Node < Tag >
15- | TextNode
16- | Falsy ;
8+ export class HTMLNode {
9+ constructor ( public htmlString : string ) { }
10+ }
1711
1812export class Node < Tag extends Element = Element , Attrs extends Attr = Attr > {
1913 constructor (
@@ -23,9 +17,15 @@ export class Node<Tag extends Element = Element, Attrs extends Attr = Attr> {
2317 ) { }
2418}
2519
20+ export type Nodeish < Tag extends Element = Element > =
21+ | Node < Tag >
22+ | TextNode
23+ | HTMLNode
24+ | Falsy ;
25+
2626// deno-lint-ignore no-explicit-any
27- export const isNode = ( n : any ) : n is Node | TextNode =>
28- n instanceof Node || typeof n === "string" ;
27+ export const isNode = ( n : any ) : n is Node | HTMLNode | TextNode =>
28+ n instanceof Node || n instanceof HTMLNode || typeof n === "string" ;
2929
3030export function h < Tag extends Element = Element , Attrs extends Attr = Attr > (
3131 elem : Tag ,
@@ -71,7 +71,7 @@ export function h(
7171export type hElement < Tag extends Element = Element > =
7272 //
7373 ( ( props ?: Attr ) => Node < Tag > ) &
74- ( < TNodeish extends Nodeish > ( childNode : TNodeish ) => Node < Tag > ) &
74+ ( ( ... childNodes : Nodeish [ ] ) => Node < Tag > ) &
7575 ( ( props : Attr , ...childNodes : Nodeish [ ] ) => Node < Tag > ) ;
7676
7777export const elements = < Elems extends Element [ ] > ( ...elems : Elems ) => {
@@ -86,3 +86,7 @@ export const elements = <Elems extends Element[]>(...elems: Elems) => {
8686 > ;
8787 } ;
8888} ;
89+
90+ export function trust ( html : string ) {
91+ return new HTMLNode ( html ) ;
92+ }
0 commit comments