@kerebron/extension-server-hono 0.4.27 → 0.4.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/HonoYjsMemAdapter.d.ts +41 -0
- package/esm/HonoYjsMemAdapter.d.ts.map +1 -0
- package/esm/HonoYjsMemAdapter.js +204 -0
- package/esm/HonoYjsMemAdapter.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.d.ts +15 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.js +65 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/compose.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.d.ts +452 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.js +411 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/context.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.d.ts +70 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.js +63 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.d.ts +221 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.js +392 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.d.ts +60 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.js +62 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.d.ts +2 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.js +2 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.d.ts +314 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.js +328 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/request.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.d.ts +98 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.js +26 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/router.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.d.ts +574 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.js +12 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/types.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.d.ts +80 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.js +112 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.d.ts +5 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.js +5 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.d.ts +9 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.js +6 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.d.ts +45 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.js +123 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.d.ts +33 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.js +6 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.d.ts +71 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.js +84 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.d.ts +75 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.js +6 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.js.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.d.ts +30 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.d.ts.map +1 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.js +256 -0
- package/esm/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.js.map +1 -0
- package/esm/mod.d.ts +5 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +2 -0
- package/esm/mod.js.map +1 -0
- package/esm/package.json +3 -0
- package/package.json +5 -2
- package/src/HonoYjsMemAdapter.ts +264 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/compose.ts +73 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/context.ts +770 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/helper/websocket/index.ts +140 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/hono-base.ts +539 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/http-exception.ts +78 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/request/constants.ts +1 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/request.ts +487 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/router.ts +103 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/types.ts +2489 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/body.ts +229 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/constants.ts +4 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/headers.ts +333 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/html.ts +182 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/http-status.ts +72 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/mime.ts +96 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/types.ts +116 -0
- package/src/deps/jsr.io/@hono/hono/4.11.3/src/utils/url.ts +310 -0
- package/src/mod.ts +5 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* HTML utility.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const HtmlEscapedCallbackPhase = {
|
|
7
|
+
Stringify: 1,
|
|
8
|
+
BeforeStream: 2,
|
|
9
|
+
Stream: 3,
|
|
10
|
+
} as const
|
|
11
|
+
type HtmlEscapedCallbackOpts = {
|
|
12
|
+
buffer?: [string]
|
|
13
|
+
phase: (typeof HtmlEscapedCallbackPhase)[keyof typeof HtmlEscapedCallbackPhase]
|
|
14
|
+
context: Readonly<object> // An object unique to each JSX tree. This object is used as the WeakMap key.
|
|
15
|
+
}
|
|
16
|
+
export type HtmlEscapedCallback = (opts: HtmlEscapedCallbackOpts) => Promise<string> | undefined
|
|
17
|
+
export type HtmlEscaped = {
|
|
18
|
+
isEscaped: true
|
|
19
|
+
callbacks?: HtmlEscapedCallback[]
|
|
20
|
+
}
|
|
21
|
+
export type HtmlEscapedString = string & HtmlEscaped
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* StringBuffer contains string and Promise<string> alternately
|
|
25
|
+
* The length of the array will be odd, the odd numbered element will be a string,
|
|
26
|
+
* and the even numbered element will be a Promise<string>.
|
|
27
|
+
* When concatenating into a single string, it must be processed from the tail.
|
|
28
|
+
* @example
|
|
29
|
+
* [
|
|
30
|
+
* 'framework.',
|
|
31
|
+
* Promise.resolve('ultra fast'),
|
|
32
|
+
* 'a ',
|
|
33
|
+
* Promise.resolve('is '),
|
|
34
|
+
* 'Hono',
|
|
35
|
+
* ]
|
|
36
|
+
*/
|
|
37
|
+
export type StringBuffer = (string | Promise<string>)[]
|
|
38
|
+
export type StringBufferWithCallbacks = StringBuffer & { callbacks: HtmlEscapedCallback[] }
|
|
39
|
+
|
|
40
|
+
export const raw = (value: unknown, callbacks?: HtmlEscapedCallback[]): HtmlEscapedString => {
|
|
41
|
+
const escapedString = new String(value) as HtmlEscapedString
|
|
42
|
+
escapedString.isEscaped = true
|
|
43
|
+
escapedString.callbacks = callbacks
|
|
44
|
+
|
|
45
|
+
return escapedString
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// The `escapeToBuffer` implementation is based on code from the MIT licensed `react-dom` package.
|
|
49
|
+
// https://github.com/facebook/react/blob/main/packages/react-dom-bindings/src/server/escapeTextForBrowser.js
|
|
50
|
+
|
|
51
|
+
const escapeRe = /[&<>'"]/
|
|
52
|
+
|
|
53
|
+
export const stringBufferToString = async (
|
|
54
|
+
buffer: StringBuffer,
|
|
55
|
+
callbacks: HtmlEscapedCallback[] | undefined
|
|
56
|
+
): Promise<HtmlEscapedString> => {
|
|
57
|
+
let str = ''
|
|
58
|
+
callbacks ||= []
|
|
59
|
+
const resolvedBuffer = await Promise.all(buffer)
|
|
60
|
+
for (let i = resolvedBuffer.length - 1; ; i--) {
|
|
61
|
+
str += resolvedBuffer[i]
|
|
62
|
+
i--
|
|
63
|
+
if (i < 0) {
|
|
64
|
+
break
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let r = resolvedBuffer[i]
|
|
68
|
+
if (typeof r === 'object') {
|
|
69
|
+
callbacks.push(...((r as HtmlEscapedString).callbacks || []))
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const isEscaped = (r as HtmlEscapedString).isEscaped
|
|
73
|
+
r = await (typeof r === 'object' ? (r as HtmlEscapedString).toString() : r)
|
|
74
|
+
if (typeof r === 'object') {
|
|
75
|
+
callbacks.push(...((r as HtmlEscapedString).callbacks || []))
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if ((r as HtmlEscapedString).isEscaped ?? isEscaped) {
|
|
79
|
+
str += r
|
|
80
|
+
} else {
|
|
81
|
+
const buf = [str]
|
|
82
|
+
escapeToBuffer(r, buf)
|
|
83
|
+
str = buf[0]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return raw(str, callbacks)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export const escapeToBuffer = (str: string, buffer: StringBuffer): void => {
|
|
91
|
+
const match = str.search(escapeRe)
|
|
92
|
+
if (match === -1) {
|
|
93
|
+
buffer[0] += str
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
let escape
|
|
98
|
+
let index
|
|
99
|
+
let lastIndex = 0
|
|
100
|
+
|
|
101
|
+
for (index = match; index < str.length; index++) {
|
|
102
|
+
switch (str.charCodeAt(index)) {
|
|
103
|
+
case 34: // "
|
|
104
|
+
escape = '"'
|
|
105
|
+
break
|
|
106
|
+
case 39: // '
|
|
107
|
+
escape = '''
|
|
108
|
+
break
|
|
109
|
+
case 38: // &
|
|
110
|
+
escape = '&'
|
|
111
|
+
break
|
|
112
|
+
case 60: // <
|
|
113
|
+
escape = '<'
|
|
114
|
+
break
|
|
115
|
+
case 62: // >
|
|
116
|
+
escape = '>'
|
|
117
|
+
break
|
|
118
|
+
default:
|
|
119
|
+
continue
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
buffer[0] += str.substring(lastIndex, index) + escape
|
|
123
|
+
lastIndex = index + 1
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
buffer[0] += str.substring(lastIndex, index)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export const resolveCallbackSync = (str: string | HtmlEscapedString): string => {
|
|
130
|
+
const callbacks = (str as HtmlEscapedString).callbacks as HtmlEscapedCallback[]
|
|
131
|
+
if (!callbacks?.length) {
|
|
132
|
+
return str
|
|
133
|
+
}
|
|
134
|
+
const buffer: [string] = [str]
|
|
135
|
+
const context = {}
|
|
136
|
+
|
|
137
|
+
callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }))
|
|
138
|
+
|
|
139
|
+
return buffer[0]
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export const resolveCallback = async (
|
|
143
|
+
str: string | HtmlEscapedString | Promise<string>,
|
|
144
|
+
phase: (typeof HtmlEscapedCallbackPhase)[keyof typeof HtmlEscapedCallbackPhase],
|
|
145
|
+
preserveCallbacks: boolean,
|
|
146
|
+
context: object,
|
|
147
|
+
buffer?: [string]
|
|
148
|
+
): Promise<string> => {
|
|
149
|
+
if (typeof str === 'object' && !(str instanceof String)) {
|
|
150
|
+
if (!((str as unknown) instanceof Promise)) {
|
|
151
|
+
str = (str as unknown as string).toString() // HtmlEscapedString object to string
|
|
152
|
+
}
|
|
153
|
+
if ((str as string | Promise<string>) instanceof Promise) {
|
|
154
|
+
str = await (str as unknown as Promise<string>)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const callbacks = (str as HtmlEscapedString).callbacks as HtmlEscapedCallback[]
|
|
159
|
+
if (!callbacks?.length) {
|
|
160
|
+
return Promise.resolve(str)
|
|
161
|
+
}
|
|
162
|
+
if (buffer) {
|
|
163
|
+
buffer[0] += str
|
|
164
|
+
} else {
|
|
165
|
+
buffer = [str as string]
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then((res) =>
|
|
169
|
+
Promise.all(
|
|
170
|
+
res
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
172
|
+
.filter<string>(Boolean as any)
|
|
173
|
+
.map((str) => resolveCallback(str, phase, false, context, buffer))
|
|
174
|
+
).then(() => (buffer as [string])[0])
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
if (preserveCallbacks) {
|
|
178
|
+
return raw(await resStr, callbacks)
|
|
179
|
+
} else {
|
|
180
|
+
return resStr
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* HTTP Status utility.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type InfoStatusCode = 100 | 101 | 102 | 103
|
|
7
|
+
export type SuccessStatusCode = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226
|
|
8
|
+
export type DeprecatedStatusCode = 305 | 306
|
|
9
|
+
export type RedirectStatusCode = 300 | 301 | 302 | 303 | 304 | DeprecatedStatusCode | 307 | 308
|
|
10
|
+
export type ClientErrorStatusCode =
|
|
11
|
+
| 400
|
|
12
|
+
| 401
|
|
13
|
+
| 402
|
|
14
|
+
| 403
|
|
15
|
+
| 404
|
|
16
|
+
| 405
|
|
17
|
+
| 406
|
|
18
|
+
| 407
|
|
19
|
+
| 408
|
|
20
|
+
| 409
|
|
21
|
+
| 410
|
|
22
|
+
| 411
|
|
23
|
+
| 412
|
|
24
|
+
| 413
|
|
25
|
+
| 414
|
|
26
|
+
| 415
|
|
27
|
+
| 416
|
|
28
|
+
| 417
|
|
29
|
+
| 418
|
|
30
|
+
| 421
|
|
31
|
+
| 422
|
|
32
|
+
| 423
|
|
33
|
+
| 424
|
|
34
|
+
| 425
|
|
35
|
+
| 426
|
|
36
|
+
| 428
|
|
37
|
+
| 429
|
|
38
|
+
| 431
|
|
39
|
+
| 451
|
|
40
|
+
export type ServerErrorStatusCode = 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* `UnofficialStatusCode` can be used to specify an unofficial status code.
|
|
44
|
+
* @example
|
|
45
|
+
*
|
|
46
|
+
* ```ts
|
|
47
|
+
* app.get('/unknown', (c) => {
|
|
48
|
+
* return c.text("Unknown Error", 520 as UnofficialStatusCode)
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export type UnofficialStatusCode = -1
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @deprecated
|
|
56
|
+
* Use `UnofficialStatusCode` instead.
|
|
57
|
+
*/
|
|
58
|
+
export type UnOfficalStatusCode = UnofficialStatusCode
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* If you want to use an unofficial status, use `UnofficialStatusCode`.
|
|
62
|
+
*/
|
|
63
|
+
export type StatusCode =
|
|
64
|
+
| InfoStatusCode
|
|
65
|
+
| SuccessStatusCode
|
|
66
|
+
| RedirectStatusCode
|
|
67
|
+
| ClientErrorStatusCode
|
|
68
|
+
| ServerErrorStatusCode
|
|
69
|
+
| UnofficialStatusCode
|
|
70
|
+
|
|
71
|
+
export type ContentlessStatusCode = 101 | 204 | 205 | 304
|
|
72
|
+
export type ContentfulStatusCode = Exclude<StatusCode, ContentlessStatusCode>
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* MIME utility.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const getMimeType = (
|
|
7
|
+
filename: string,
|
|
8
|
+
mimes: Record<string, string> = baseMimes
|
|
9
|
+
): string | undefined => {
|
|
10
|
+
const regexp = /\.([a-zA-Z0-9]+?)$/
|
|
11
|
+
const match = filename.match(regexp)
|
|
12
|
+
if (!match) {
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
let mimeType = mimes[match[1]]
|
|
16
|
+
if (mimeType && mimeType.startsWith('text')) {
|
|
17
|
+
mimeType += '; charset=utf-8'
|
|
18
|
+
}
|
|
19
|
+
return mimeType
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const getExtension = (mimeType: string): string | undefined => {
|
|
23
|
+
for (const ext in baseMimes) {
|
|
24
|
+
if (baseMimes[ext] === mimeType) {
|
|
25
|
+
return ext
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { baseMimes as mimes }
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Union types for BaseMime
|
|
34
|
+
*/
|
|
35
|
+
export type BaseMime = (typeof _baseMimes)[keyof typeof _baseMimes]
|
|
36
|
+
|
|
37
|
+
const _baseMimes = {
|
|
38
|
+
aac: 'audio/aac',
|
|
39
|
+
avi: 'video/x-msvideo',
|
|
40
|
+
avif: 'image/avif',
|
|
41
|
+
av1: 'video/av1',
|
|
42
|
+
bin: 'application/octet-stream',
|
|
43
|
+
bmp: 'image/bmp',
|
|
44
|
+
css: 'text/css',
|
|
45
|
+
csv: 'text/csv',
|
|
46
|
+
eot: 'application/vnd.ms-fontobject',
|
|
47
|
+
epub: 'application/epub+zip',
|
|
48
|
+
gif: 'image/gif',
|
|
49
|
+
gz: 'application/gzip',
|
|
50
|
+
htm: 'text/html',
|
|
51
|
+
html: 'text/html',
|
|
52
|
+
ico: 'image/x-icon',
|
|
53
|
+
ics: 'text/calendar',
|
|
54
|
+
jpeg: 'image/jpeg',
|
|
55
|
+
jpg: 'image/jpeg',
|
|
56
|
+
js: 'text/javascript',
|
|
57
|
+
json: 'application/json',
|
|
58
|
+
jsonld: 'application/ld+json',
|
|
59
|
+
map: 'application/json',
|
|
60
|
+
mid: 'audio/x-midi',
|
|
61
|
+
midi: 'audio/x-midi',
|
|
62
|
+
mjs: 'text/javascript',
|
|
63
|
+
mp3: 'audio/mpeg',
|
|
64
|
+
mp4: 'video/mp4',
|
|
65
|
+
mpeg: 'video/mpeg',
|
|
66
|
+
oga: 'audio/ogg',
|
|
67
|
+
ogv: 'video/ogg',
|
|
68
|
+
ogx: 'application/ogg',
|
|
69
|
+
opus: 'audio/opus',
|
|
70
|
+
otf: 'font/otf',
|
|
71
|
+
pdf: 'application/pdf',
|
|
72
|
+
png: 'image/png',
|
|
73
|
+
rtf: 'application/rtf',
|
|
74
|
+
svg: 'image/svg+xml',
|
|
75
|
+
tif: 'image/tiff',
|
|
76
|
+
tiff: 'image/tiff',
|
|
77
|
+
ts: 'video/mp2t',
|
|
78
|
+
ttf: 'font/ttf',
|
|
79
|
+
txt: 'text/plain',
|
|
80
|
+
wasm: 'application/wasm',
|
|
81
|
+
webm: 'video/webm',
|
|
82
|
+
weba: 'audio/webm',
|
|
83
|
+
webmanifest: 'application/manifest+json',
|
|
84
|
+
webp: 'image/webp',
|
|
85
|
+
woff: 'font/woff',
|
|
86
|
+
woff2: 'font/woff2',
|
|
87
|
+
xhtml: 'application/xhtml+xml',
|
|
88
|
+
xml: 'application/xml',
|
|
89
|
+
zip: 'application/zip',
|
|
90
|
+
'3gp': 'video/3gpp',
|
|
91
|
+
'3g2': 'video/3gpp2',
|
|
92
|
+
gltf: 'model/gltf+json',
|
|
93
|
+
glb: 'model/gltf-binary',
|
|
94
|
+
} as const
|
|
95
|
+
|
|
96
|
+
const baseMimes: Record<string, BaseMime> = _baseMimes
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* Types utility.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
|
+
export type Expect<T extends true> = T
|
|
8
|
+
export type Equal<X, Y> =
|
|
9
|
+
(<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false
|
|
10
|
+
export type NotEqual<X, Y> = true extends Equal<X, Y> ? false : true
|
|
11
|
+
|
|
12
|
+
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
|
|
13
|
+
k: infer I
|
|
14
|
+
) => void
|
|
15
|
+
? I
|
|
16
|
+
: never
|
|
17
|
+
|
|
18
|
+
export type RemoveBlankRecord<T> =
|
|
19
|
+
T extends Record<infer K, unknown> ? (K extends string ? T : never) : never
|
|
20
|
+
|
|
21
|
+
export type IfAnyThenEmptyObject<T> = 0 extends 1 & T ? {} : T
|
|
22
|
+
|
|
23
|
+
export type JSONPrimitive = string | boolean | number | null
|
|
24
|
+
export type JSONArray = (JSONPrimitive | JSONObject | JSONArray)[]
|
|
25
|
+
export type JSONObject = {
|
|
26
|
+
[key: string]: JSONPrimitive | JSONArray | JSONObject | object | InvalidJSONValue
|
|
27
|
+
}
|
|
28
|
+
export type InvalidJSONValue = undefined | symbol | ((...args: unknown[]) => unknown)
|
|
29
|
+
|
|
30
|
+
type InvalidToNull<T> = T extends InvalidJSONValue ? null : T
|
|
31
|
+
|
|
32
|
+
type IsInvalid<T> = T extends InvalidJSONValue ? true : false
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* symbol keys are omitted through `JSON.stringify`
|
|
36
|
+
*/
|
|
37
|
+
type OmitSymbolKeys<T> = { [K in keyof T as K extends symbol ? never : K]: T[K] }
|
|
38
|
+
|
|
39
|
+
export type JSONValue = JSONObject | JSONArray | JSONPrimitive
|
|
40
|
+
/**
|
|
41
|
+
* Convert a type to a JSON-compatible type.
|
|
42
|
+
*
|
|
43
|
+
* Non-JSON values such as `Date` implement `.toJSON()`,
|
|
44
|
+
* so they can be transformed to a value assignable to `JSONObject`
|
|
45
|
+
*
|
|
46
|
+
* `JSON.stringify()` throws a `TypeError` when it encounters a `bigint` value,
|
|
47
|
+
* unless a custom `replacer` function or `.toJSON()` method is provided.
|
|
48
|
+
*
|
|
49
|
+
* This behaviour can be controlled by the `TError` generic type parameter,
|
|
50
|
+
* which defaults to `bigint | ReadonlyArray<bigint>`.
|
|
51
|
+
* You can set it to `never` to disable this check.
|
|
52
|
+
*/
|
|
53
|
+
export type JSONParsed<T, TError = bigint | ReadonlyArray<bigint>> = T extends {
|
|
54
|
+
toJSON(): infer J
|
|
55
|
+
}
|
|
56
|
+
? (() => J) extends () => JSONPrimitive
|
|
57
|
+
? J
|
|
58
|
+
: (() => J) extends () => { toJSON(): unknown }
|
|
59
|
+
? {}
|
|
60
|
+
: JSONParsed<J, TError>
|
|
61
|
+
: T extends JSONPrimitive
|
|
62
|
+
? T
|
|
63
|
+
: T extends InvalidJSONValue
|
|
64
|
+
? never
|
|
65
|
+
: T extends ReadonlyArray<unknown>
|
|
66
|
+
? { [K in keyof T]: JSONParsed<InvalidToNull<T[K]>, TError> }
|
|
67
|
+
: T extends Set<unknown> | Map<unknown, unknown> | Record<string, never>
|
|
68
|
+
? {}
|
|
69
|
+
: T extends object
|
|
70
|
+
? T[keyof T] extends TError
|
|
71
|
+
? never
|
|
72
|
+
: {
|
|
73
|
+
[K in keyof OmitSymbolKeys<T> as IsInvalid<T[K]> extends true
|
|
74
|
+
? never
|
|
75
|
+
: K]: boolean extends IsInvalid<T[K]>
|
|
76
|
+
? JSONParsed<T[K], TError> | undefined
|
|
77
|
+
: JSONParsed<T[K], TError>
|
|
78
|
+
}
|
|
79
|
+
: T extends unknown
|
|
80
|
+
? T extends TError
|
|
81
|
+
? never
|
|
82
|
+
: JSONValue
|
|
83
|
+
: never
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability.
|
|
87
|
+
* @copyright from sindresorhus/type-fest
|
|
88
|
+
*/
|
|
89
|
+
export type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* A simple extension of Simplify that will deeply traverse array elements.
|
|
93
|
+
*/
|
|
94
|
+
export type SimplifyDeepArray<T> = T extends any[]
|
|
95
|
+
? { [E in keyof T]: SimplifyDeepArray<T[E]> }
|
|
96
|
+
: Simplify<T>
|
|
97
|
+
|
|
98
|
+
export type InterfaceToType<T> = T extends Function ? T : { [K in keyof T]: InterfaceToType<T[K]> }
|
|
99
|
+
|
|
100
|
+
export type RequiredKeysOf<BaseType extends object> = Exclude<
|
|
101
|
+
{
|
|
102
|
+
[Key in keyof BaseType]: BaseType extends Record<Key, BaseType[Key]> ? Key : never
|
|
103
|
+
}[keyof BaseType],
|
|
104
|
+
undefined
|
|
105
|
+
>
|
|
106
|
+
|
|
107
|
+
export type HasRequiredKeys<BaseType extends object> =
|
|
108
|
+
RequiredKeysOf<BaseType> extends never ? false : true
|
|
109
|
+
|
|
110
|
+
export type IsAny<T> = boolean extends (T extends never ? true : false) ? true : false
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* String literal types with auto-completion
|
|
114
|
+
* @see https://github.com/Microsoft/TypeScript/issues/29729
|
|
115
|
+
*/
|
|
116
|
+
export type StringLiteralUnion<T> = T | (string & Record<never, never>)
|