a post-component library for building user-interfaces on the web.
at push-wyoyzropkuyl 36 lines 1.0 kB view raw
1import { html, type HTML } from './index.ts' 2 3declare global { 4 var __DEV__: boolean 5} 6 7export interface ToString { 8 toString(): string 9} 10 11export type Displayable = null | undefined | ToString | Node | Renderable | Iterable<Displayable> | HTML 12export interface Renderable { 13 render(): Displayable 14} 15 16export function is_renderable(value: unknown): value is Renderable { 17 return typeof value === 'object' && value !== null && 'render' in value 18} 19 20export function is_iterable(value: unknown): value is Iterable<unknown> { 21 return typeof value === 'object' && value !== null && Symbol.iterator in value 22} 23 24export function assert(value: unknown, message?: string): asserts value { 25 if (!__DEV__) return 26 if (!value) throw new Error(message ?? 'assertion failed') 27} 28 29export const html_tag: unique symbol = Symbol() 30export function is_html(value: any): value is HTML { 31 return typeof value === 'object' && value !== null && html_tag in value 32} 33 34export function single_part_template(part: Displayable): HTML { 35 return html`${part}` 36}