mirror of
https://github.com/honojs/hono.git
synced 2024-12-01 10:51:01 +00:00
b3e465a103
* feat: types for JSX elements * make it minimal * add children * denoify * fixed some attributes * denoify * `dateTime` to `datetime` * remove `onxxx` * feat: Declare in the Hono namespace so that it can be overridden by the user. (#1616) * feat: Declare in the Hono namespace so that it can be overridden by the user. * feat: Use interface instead of type to enable overwriting ```ts declare global { namespace JSX { interface IntrinsicElements { 'my-custom-element': Hono.HTMLAttributes & { 'x-event'?: 'click' | 'scroll'; } } } } ``` --------- Co-authored-by: Yusuke Wada <yusuke@kamawada.com> * remove `onxxx` * denoify --------- Co-authored-by: Taku Amano <taku@taaas.jp>
607 lines
18 KiB
TypeScript
607 lines
18 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
|
|
/**
|
|
* This code is based on React.
|
|
* https://github.com/facebook/react
|
|
* MIT License
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*/
|
|
|
|
declare global {
|
|
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
namespace Hono {
|
|
type CrossOrigin = 'anonymous' | 'use-credentials' | '' | undefined
|
|
type CSSProperties = {}
|
|
type AnyAttributes = { [attributeName: string]: any }
|
|
|
|
interface JSXAttributes {
|
|
dangerouslySetInnerHTML?: {
|
|
__html: string
|
|
}
|
|
}
|
|
|
|
interface HTMLAttributes extends JSXAttributes, AnyAttributes {
|
|
accesskey?: string | undefined
|
|
autofocus?: boolean | undefined
|
|
class?: string | undefined
|
|
contenteditable?: boolean | 'inherit' | undefined
|
|
contextmenu?: string | undefined
|
|
dir?: string | undefined
|
|
draggable?: boolean | undefined
|
|
hidden?: boolean | undefined
|
|
id?: string | undefined
|
|
lang?: string | undefined
|
|
nonce?: string | undefined
|
|
placeholder?: string | undefined
|
|
slot?: string | undefined
|
|
spellcheck?: boolean | undefined
|
|
style?: CSSProperties | undefined
|
|
tabindex?: number | undefined
|
|
title?: string | undefined
|
|
translate?: 'yes' | 'no' | undefined
|
|
}
|
|
|
|
type HTMLAttributeReferrerPolicy =
|
|
| ''
|
|
| 'no-referrer'
|
|
| 'no-referrer-when-downgrade'
|
|
| 'origin'
|
|
| 'origin-when-cross-origin'
|
|
| 'same-origin'
|
|
| 'strict-origin'
|
|
| 'strict-origin-when-cross-origin'
|
|
| 'unsafe-url'
|
|
|
|
type HTMLAttributeAnchorTarget = '_self' | '_blank' | '_parent' | '_top' | string
|
|
|
|
interface AnchorHTMLAttributes extends HTMLAttributes {
|
|
download?: any
|
|
href?: string | undefined
|
|
hreflang?: string | undefined
|
|
media?: string | undefined
|
|
ping?: string | undefined
|
|
target?: HTMLAttributeAnchorTarget | undefined
|
|
type?: string | undefined
|
|
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
|
|
}
|
|
|
|
interface AudioHTMLAttributes extends MediaHTMLAttributes {}
|
|
|
|
interface AreaHTMLAttributes extends HTMLAttributes {
|
|
alt?: string | undefined
|
|
coords?: string | undefined
|
|
download?: any
|
|
href?: string | undefined
|
|
hreflang?: string | undefined
|
|
media?: string | undefined
|
|
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
|
|
shape?: string | undefined
|
|
target?: string | undefined
|
|
}
|
|
|
|
interface BaseHTMLAttributes extends HTMLAttributes {
|
|
href?: string | undefined
|
|
target?: string | undefined
|
|
}
|
|
|
|
interface BlockquoteHTMLAttributes extends HTMLAttributes {
|
|
cite?: string | undefined
|
|
}
|
|
|
|
interface ButtonHTMLAttributes extends HTMLAttributes {
|
|
disabled?: boolean | undefined
|
|
form?: string | undefined
|
|
formenctype?: string | undefined
|
|
formmethod?: string | undefined
|
|
formnovalidate?: boolean | undefined
|
|
formtarget?: string | undefined
|
|
name?: string | undefined
|
|
type?: 'submit' | 'reset' | 'button' | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface CanvasHTMLAttributes extends HTMLAttributes {
|
|
height?: number | string | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface ColHTMLAttributes extends HTMLAttributes {
|
|
span?: number | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface ColgroupHTMLAttributes extends HTMLAttributes {
|
|
span?: number | undefined
|
|
}
|
|
|
|
interface DataHTMLAttributes extends HTMLAttributes {
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface DetailsHTMLAttributes extends HTMLAttributes {
|
|
open?: boolean | undefined
|
|
}
|
|
|
|
interface DelHTMLAttributes extends HTMLAttributes {
|
|
cite?: string | undefined
|
|
dateTime?: string | undefined
|
|
}
|
|
|
|
interface DialogHTMLAttributes extends HTMLAttributes {
|
|
open?: boolean | undefined
|
|
}
|
|
|
|
interface EmbedHTMLAttributes extends HTMLAttributes {
|
|
height?: number | string | undefined
|
|
src?: string | undefined
|
|
type?: string | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface FieldsetHTMLAttributes extends HTMLAttributes {
|
|
disabled?: boolean | undefined
|
|
form?: string | undefined
|
|
name?: string | undefined
|
|
}
|
|
|
|
interface FormHTMLAttributes extends HTMLAttributes {
|
|
'accept-charset'?: string | undefined
|
|
autocomplete?: string | undefined
|
|
enctype?: string | undefined
|
|
method?: string | undefined
|
|
name?: string | undefined
|
|
novalidate?: boolean | undefined
|
|
target?: string | undefined
|
|
}
|
|
|
|
interface HtmlHTMLAttributes extends HTMLAttributes {
|
|
manifest?: string | undefined
|
|
}
|
|
|
|
interface IframeHTMLAttributes extends HTMLAttributes {
|
|
allow?: string | undefined
|
|
allowfullscreen?: boolean | undefined
|
|
height?: number | string | undefined
|
|
loading?: 'eager' | 'lazy' | undefined
|
|
name?: string | undefined
|
|
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
|
|
sandbox?: string | undefined
|
|
seamless?: boolean | undefined
|
|
src?: string | undefined
|
|
srcdoc?: string | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface ImgHTMLAttributes extends HTMLAttributes {
|
|
alt?: string | undefined
|
|
crossorigin?: CrossOrigin
|
|
decoding?: 'async' | 'auto' | 'sync' | undefined
|
|
height?: number | string | undefined
|
|
loading?: 'eager' | 'lazy' | undefined
|
|
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
|
|
sizes?: string | undefined
|
|
src?: string | undefined
|
|
srcset?: string | undefined
|
|
usemap?: string | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface InsHTMLAttributes extends HTMLAttributes {
|
|
cite?: string | undefined
|
|
datetime?: string | undefined
|
|
}
|
|
|
|
type HTMLInputTypeAttribute =
|
|
| 'button'
|
|
| 'checkbox'
|
|
| 'color'
|
|
| 'date'
|
|
| 'datetime-local'
|
|
| 'email'
|
|
| 'file'
|
|
| 'hidden'
|
|
| 'image'
|
|
| 'month'
|
|
| 'number'
|
|
| 'password'
|
|
| 'radio'
|
|
| 'range'
|
|
| 'reset'
|
|
| 'search'
|
|
| 'submit'
|
|
| 'tel'
|
|
| 'text'
|
|
| 'time'
|
|
| 'url'
|
|
| 'week'
|
|
| string
|
|
|
|
interface InputHTMLAttributes extends HTMLAttributes {
|
|
accept?: string | undefined
|
|
alt?: string | undefined
|
|
autocomplete?: string | undefined
|
|
capture?: boolean | 'user' | 'environment' | undefined // https://www.w3.org/TR/html-media-capture/#the-capture-attribute
|
|
checked?: boolean | undefined
|
|
disabled?: boolean | undefined
|
|
enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send' | undefined
|
|
form?: string | undefined
|
|
formenctype?: string | undefined
|
|
formmethod?: string | undefined
|
|
formnovalidate?: boolean | undefined
|
|
formtarget?: string | undefined
|
|
height?: number | string | undefined
|
|
list?: string | undefined
|
|
max?: number | string | undefined
|
|
maxlength?: number | undefined
|
|
min?: number | string | undefined
|
|
minlength?: number | undefined
|
|
multiple?: boolean | undefined
|
|
name?: string | undefined
|
|
pattern?: string | undefined
|
|
placeholder?: string | undefined
|
|
readonly?: boolean | undefined
|
|
required?: boolean | undefined
|
|
size?: number | undefined
|
|
src?: string | undefined
|
|
step?: number | string | undefined
|
|
type?: HTMLInputTypeAttribute | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface KeygenHTMLAttributes extends HTMLAttributes {
|
|
challenge?: string | undefined
|
|
disabled?: boolean | undefined
|
|
form?: string | undefined
|
|
keytype?: string | undefined
|
|
name?: string | undefined
|
|
}
|
|
|
|
interface LabelHTMLAttributes extends HTMLAttributes {
|
|
form?: string | undefined
|
|
for?: string | undefined
|
|
}
|
|
|
|
interface LiHTMLAttributes extends HTMLAttributes {
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface LinkHTMLAttributes extends HTMLAttributes {
|
|
as?: string | undefined
|
|
crossorigin?: CrossOrigin
|
|
href?: string | undefined
|
|
hreflang?: string | undefined
|
|
integrity?: string | undefined
|
|
media?: string | undefined
|
|
imagesrcset?: string | undefined
|
|
imagesizes?: string | undefined
|
|
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
|
|
sizes?: string | undefined
|
|
type?: string | undefined
|
|
charSet?: string | undefined
|
|
}
|
|
|
|
interface MapHTMLAttributes extends HTMLAttributes {
|
|
name?: string | undefined
|
|
}
|
|
|
|
interface MenuHTMLAttributes extends HTMLAttributes {
|
|
type?: string | undefined
|
|
}
|
|
|
|
interface MediaHTMLAttributes extends HTMLAttributes {
|
|
autoplay?: boolean | undefined
|
|
controls?: boolean | undefined
|
|
controlslist?: string | undefined
|
|
crossorigin?: CrossOrigin
|
|
loop?: boolean | undefined
|
|
mediagroup?: string | undefined
|
|
muted?: boolean | undefined
|
|
playsinline?: boolean | undefined
|
|
preload?: string | undefined
|
|
src?: string | undefined
|
|
}
|
|
|
|
interface MetaHTMLAttributes extends HTMLAttributes {
|
|
charset?: string | undefined
|
|
'http-equiv'?: string | undefined
|
|
name?: string | undefined
|
|
media?: string | undefined
|
|
content?: string | undefined
|
|
}
|
|
|
|
interface MeterHTMLAttributes extends HTMLAttributes {
|
|
form?: string | undefined
|
|
high?: number | undefined
|
|
low?: number | undefined
|
|
max?: number | string | undefined
|
|
min?: number | string | undefined
|
|
optimum?: number | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface QuoteHTMLAttributes extends HTMLAttributes {
|
|
cite?: string | undefined
|
|
}
|
|
|
|
interface ObjectHTMLAttributes extends HTMLAttributes {
|
|
data?: string | undefined
|
|
form?: string | undefined
|
|
height?: number | string | undefined
|
|
name?: string | undefined
|
|
type?: string | undefined
|
|
usemap?: string | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface OlHTMLAttributes extends HTMLAttributes {
|
|
reversed?: boolean | undefined
|
|
start?: number | undefined
|
|
type?: '1' | 'a' | 'A' | 'i' | 'I' | undefined
|
|
}
|
|
|
|
interface OptgroupHTMLAttributes extends HTMLAttributes {
|
|
disabled?: boolean | undefined
|
|
label?: string | undefined
|
|
}
|
|
|
|
interface OptionHTMLAttributes extends HTMLAttributes {
|
|
disabled?: boolean | undefined
|
|
label?: string | undefined
|
|
selected?: boolean | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface OutputHTMLAttributes extends HTMLAttributes {
|
|
form?: string | undefined
|
|
for?: string | undefined
|
|
name?: string | undefined
|
|
}
|
|
|
|
interface ParamHTMLAttributes extends HTMLAttributes {
|
|
name?: string | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface ProgressHTMLAttributes extends HTMLAttributes {
|
|
max?: number | string | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface SlotHTMLAttributes extends HTMLAttributes {
|
|
name?: string | undefined
|
|
}
|
|
|
|
interface ScriptHTMLAttributes extends HTMLAttributes {
|
|
async?: boolean | undefined
|
|
crossorigin?: CrossOrigin
|
|
defer?: boolean | undefined
|
|
integrity?: string | undefined
|
|
nomodule?: boolean | undefined
|
|
referrerpolicy?: HTMLAttributeReferrerPolicy | undefined
|
|
src?: string | undefined
|
|
type?: string | undefined
|
|
}
|
|
|
|
interface SelectHTMLAttributes extends HTMLAttributes {
|
|
autocomplete?: string | undefined
|
|
disabled?: boolean | undefined
|
|
form?: string | undefined
|
|
multiple?: boolean | undefined
|
|
name?: string | undefined
|
|
required?: boolean | undefined
|
|
size?: number | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
}
|
|
|
|
interface SourceHTMLAttributes extends HTMLAttributes {
|
|
height?: number | string | undefined
|
|
media?: string | undefined
|
|
sizes?: string | undefined
|
|
src?: string | undefined
|
|
srcset?: string | undefined
|
|
type?: string | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface StyleHTMLAttributes extends HTMLAttributes {
|
|
media?: string | undefined
|
|
scoped?: boolean | undefined
|
|
type?: string | undefined
|
|
}
|
|
|
|
interface TableHTMLAttributes extends HTMLAttributes {
|
|
align?: 'left' | 'center' | 'right' | undefined
|
|
bgcolor?: string | undefined
|
|
border?: number | undefined
|
|
cellpadding?: number | string | undefined
|
|
cellspacing?: number | string | undefined
|
|
frame?: boolean | undefined
|
|
rules?: 'none' | 'groups' | 'rows' | 'columns' | 'all' | undefined
|
|
summary?: string | undefined
|
|
width?: number | string | undefined
|
|
}
|
|
|
|
interface TextareaHTMLAttributes extends HTMLAttributes {
|
|
autocomplete?: string | undefined
|
|
cols?: number | undefined
|
|
dirname?: string | undefined
|
|
disabled?: boolean | undefined
|
|
form?: string | undefined
|
|
maxlength?: number | undefined
|
|
minlength?: number | undefined
|
|
name?: string | undefined
|
|
placeholder?: string | undefined
|
|
readonly?: boolean | undefined
|
|
required?: boolean | undefined
|
|
rows?: number | undefined
|
|
value?: string | ReadonlyArray<string> | number | undefined
|
|
wrap?: string | undefined
|
|
}
|
|
|
|
interface TdHTMLAttributes extends HTMLAttributes {
|
|
align?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined
|
|
colspan?: number | undefined
|
|
headers?: string | undefined
|
|
rowspan?: number | undefined
|
|
scope?: string | undefined
|
|
abbr?: string | undefined
|
|
height?: number | string | undefined
|
|
width?: number | string | undefined
|
|
valign?: 'top' | 'middle' | 'bottom' | 'baseline' | undefined
|
|
}
|
|
|
|
interface ThHTMLAttributes extends HTMLAttributes {
|
|
align?: 'left' | 'center' | 'right' | 'justify' | 'char' | undefined
|
|
colspan?: number | undefined
|
|
headers?: string | undefined
|
|
rowspan?: number | undefined
|
|
scope?: string | undefined
|
|
abbr?: string | undefined
|
|
}
|
|
|
|
interface TimeHTMLAttributes extends HTMLAttributes {
|
|
datetime?: string | undefined
|
|
}
|
|
|
|
interface TrackHTMLAttributes extends HTMLAttributes {
|
|
default?: boolean | undefined
|
|
kind?: string | undefined
|
|
label?: string | undefined
|
|
src?: string | undefined
|
|
srclang?: string | undefined
|
|
}
|
|
|
|
interface VideoHTMLAttributes extends MediaHTMLAttributes {
|
|
height?: number | string | undefined
|
|
playsinline?: boolean | undefined
|
|
poster?: string | undefined
|
|
width?: number | string | undefined
|
|
disablePictureInPicture?: boolean | undefined
|
|
disableRemotePlayback?: boolean | undefined
|
|
}
|
|
|
|
interface IntrinsicElements {
|
|
a: AnchorHTMLAttributes
|
|
abbr: HTMLAttributes
|
|
address: HTMLAttributes
|
|
area: AreaHTMLAttributes
|
|
article: HTMLAttributes
|
|
aside: HTMLAttributes
|
|
audio: AudioHTMLAttributes
|
|
b: HTMLAttributes
|
|
base: BaseHTMLAttributes
|
|
bdi: HTMLAttributes
|
|
bdo: HTMLAttributes
|
|
big: HTMLAttributes
|
|
blockquote: BlockquoteHTMLAttributes
|
|
body: HTMLAttributes
|
|
br: HTMLAttributes
|
|
button: ButtonHTMLAttributes
|
|
canvas: CanvasHTMLAttributes
|
|
caption: HTMLAttributes
|
|
center: HTMLAttributes
|
|
cite: HTMLAttributes
|
|
code: HTMLAttributes
|
|
col: ColHTMLAttributes
|
|
colgroup: ColgroupHTMLAttributes
|
|
data: DataHTMLAttributes
|
|
datalist: HTMLAttributes
|
|
dd: HTMLAttributes
|
|
del: DelHTMLAttributes
|
|
details: DetailsHTMLAttributes
|
|
dfn: HTMLAttributes
|
|
dialog: DialogHTMLAttributes
|
|
div: HTMLAttributes
|
|
dl: HTMLAttributes
|
|
dt: HTMLAttributes
|
|
em: HTMLAttributes
|
|
embed: EmbedHTMLAttributes
|
|
fieldset: FieldsetHTMLAttributes
|
|
figcaption: HTMLAttributes
|
|
figure: HTMLAttributes
|
|
footer: HTMLAttributes
|
|
form: FormHTMLAttributes
|
|
h1: HTMLAttributes
|
|
h2: HTMLAttributes
|
|
h3: HTMLAttributes
|
|
h4: HTMLAttributes
|
|
h5: HTMLAttributes
|
|
h6: HTMLAttributes
|
|
head: HTMLAttributes
|
|
header: HTMLAttributes
|
|
hgroup: HTMLAttributes
|
|
hr: HTMLAttributes
|
|
html: HtmlHTMLAttributes
|
|
i: HTMLAttributes
|
|
iframe: IframeHTMLAttributes
|
|
img: ImgHTMLAttributes
|
|
input: InputHTMLAttributes
|
|
ins: InsHTMLAttributes
|
|
kbd: HTMLAttributes
|
|
keygen: KeygenHTMLAttributes
|
|
label: LabelHTMLAttributes
|
|
legend: HTMLAttributes
|
|
li: LiHTMLAttributes
|
|
link: LinkHTMLAttributes
|
|
main: HTMLAttributes
|
|
map: MapHTMLAttributes
|
|
mark: HTMLAttributes
|
|
menu: MenuHTMLAttributes
|
|
menuitem: HTMLAttributes
|
|
meta: MetaHTMLAttributes
|
|
meter: MeterHTMLAttributes
|
|
nav: HTMLAttributes
|
|
noscript: HTMLAttributes
|
|
object: ObjectHTMLAttributes
|
|
ol: OlHTMLAttributes
|
|
optgroup: OptgroupHTMLAttributes
|
|
option: OptionHTMLAttributes
|
|
output: OutputHTMLAttributes
|
|
p: HTMLAttributes
|
|
param: ParamHTMLAttributes
|
|
picture: HTMLAttributes
|
|
pre: HTMLAttributes
|
|
progress: ProgressHTMLAttributes
|
|
q: QuoteHTMLAttributes
|
|
rp: HTMLAttributes
|
|
rt: HTMLAttributes
|
|
ruby: HTMLAttributes
|
|
s: HTMLAttributes
|
|
samp: HTMLAttributes
|
|
search: HTMLAttributes
|
|
slot: SlotHTMLAttributes
|
|
script: ScriptHTMLAttributes
|
|
section: HTMLAttributes
|
|
select: SelectHTMLAttributes
|
|
small: HTMLAttributes
|
|
source: SourceHTMLAttributes
|
|
span: HTMLAttributes
|
|
strong: HTMLAttributes
|
|
style: StyleHTMLAttributes
|
|
sub: HTMLAttributes
|
|
summary: HTMLAttributes
|
|
sup: HTMLAttributes
|
|
table: TableHTMLAttributes
|
|
template: HTMLAttributes
|
|
tbody: HTMLAttributes
|
|
td: TdHTMLAttributes
|
|
textarea: TextareaHTMLAttributes
|
|
tfoot: HTMLAttributes
|
|
th: ThHTMLAttributes
|
|
thead: HTMLAttributes
|
|
time: TimeHTMLAttributes
|
|
title: HTMLAttributes
|
|
tr: HTMLAttributes
|
|
track: TrackHTMLAttributes
|
|
u: HTMLAttributes
|
|
ul: HTMLAttributes
|
|
var: HTMLAttributes
|
|
video: VideoHTMLAttributes
|
|
wbr: HTMLAttributes
|
|
}
|
|
}
|
|
}
|
|
|
|
export interface IntrinsicElements extends Hono.IntrinsicElements {}
|