a post-component library for building user-interfaces on the web.
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}