Skip to content

Commit 18d3dce

Browse files
authored
Merge pull request #911 from elysiajs/seele
Release 1.2: Seele
2 parents 4ed9465 + dbd3142 commit 18d3dce

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+6702
-3456
lines changed

build.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ const tsupConfig: Options = {
66
splitting: false,
77
sourcemap: false,
88
clean: true,
9-
bundle: true
9+
bundle: false,
10+
minify: false
1011
// outExtension() {
1112
// return {
1213
// js: '.js'
@@ -33,6 +34,35 @@ await Promise.all([
3334
})
3435
])
3536

37+
// ? Fix mjs import
38+
const glob = new Bun.Glob('./dist/**/*.mjs')
39+
40+
for await (const entry of glob.scan('.')) {
41+
const content = await Bun.file(entry).text()
42+
43+
await Bun.write(
44+
entry,
45+
content
46+
.replace(
47+
// Named import
48+
/(import|export)\s*\{([a-zA-Z0-9_,\s$]*)\}\s*from\s*['"]([a-zA-Z0-9./-]*[./][a-zA-Z0-9./-]*)['"]/g,
49+
'$1{$2}from"$3.mjs"'
50+
)
51+
.replace(
52+
// Default import
53+
/(import|export) ([a-zA-Z0-9_$]+) from\s*['"]([a-zA-Z0-9./-]*[./][a-zA-Z0-9./-]*)['"]/g,
54+
'$1 $2 from"$3.mjs"'
55+
)
56+
)
57+
58+
// await fs.writeFile(
59+
// entry,
60+
// (await fs.readFile(entry))
61+
// .toString()
62+
// .replaceAll(/require\("(.+)\.js"\);/g, 'require("$1.cjs");'),
63+
// );
64+
}
65+
3666
await $`tsc --project tsconfig.dts.json`
3767

3868
await Bun.build({
@@ -45,7 +75,12 @@ await Bun.build({
4575
},
4676
target: 'bun',
4777
sourcemap: 'external',
48-
external: ['@sinclair/typebox']
78+
external: [
79+
'@sinclair/typebox',
80+
'cookie',
81+
'fast-decode-uri-component',
82+
'memoirist'
83+
]
4984
})
5085

5186
await Promise.all([

bun.lockb

-2.25 KB
Binary file not shown.

example/a.ts

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
import { Elysia, t } from '../src'
2-
import { req } from '../test/utils'
32

4-
const api = new Elysia().get('/', ({ query }) => query, {
5-
query: t.Object({
6-
date: t.Date()
7-
})
3+
export const auth = new Elysia().macro({
4+
isAuth(isAuth: boolean) {
5+
return {
6+
resolve() {
7+
return {
8+
user: 'saltyaom'
9+
}
10+
}
11+
}
12+
},
13+
role(role: 'admin' | 'user') {
14+
return {}
15+
}
816
})
917

10-
api.handle(req(`/?date=${Date.now()}`)).then(x => x.json()).then(console.log)
11-
12-
// const app = new Elysia()
13-
// .get('/', () => 'ok', {
14-
// query: t.Object({
15-
// key1: t.Union([t.Array(t.String()), t.String()])
16-
// })
17-
// })
18-
19-
// app.handle(req('/?key1=ab&key1=cd&z=が'))
20-
// .then((x) => x.status)
21-
// .then(console.log)
18+
new Elysia().ws('/ws', {
19+
ping: (message) => message
20+
})

example/ab.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { createServer } from 'http'
2+
3+
createServer((req, res) => {
4+
res.statusCode = 201
5+
res.
6+
res.writeHead(200, {
7+
'content-type': 'application/json'
8+
})
9+
res.end('a')
10+
}).listen(3000)

example/app.ts

Whitespace-only changes.

example/d.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
interface Node<T = unknown, Nodes extends Node<any, any>[] = []> {
2+
value: T
3+
neighbors: Nodes
4+
}
5+
6+
type A = Node<1, [B, C]> // Node<1, [Node<2>, Node<3>]>
7+
type B = Node<2, [A, D]> // Node<2, [Node<1>, Node<3>]>
8+
type C = Node<3, [A, B]> // Node<3, [Node<1>, Node<2>]>
9+
type D = Node<4, [B, C]> // Node<4, [Node<2>, Node<3>]>
10+
11+
type FilterOut<Arr extends any[], Target> =
12+
Arr extends [
13+
infer Head,
14+
...infer Tail
15+
]
16+
? Head extends Target
17+
? FilterOut<Tail, Target>
18+
: [Head, ...FilterOut<Tail, Target>]
19+
: []
20+
21+
type BFS<
22+
Root extends Node<any, any[]>,
23+
ToFind,
24+
Searched extends Node<any, any>[] = []
25+
> = Root extends (Searched['length'] extends 0 ? never : Searched[number])
26+
? FilterOut<Root['neighbors'], Searched[number]> extends [
27+
infer Current extends Node<any, any>
28+
]
29+
? BFS<Current, ToFind, [...Searched, Root]>
30+
: never
31+
: Root['value'] extends ToFind
32+
? Root & { __order: Searched }
33+
: Root['neighbors'] extends [
34+
infer Current extends Node<any, any>,
35+
...infer Rest extends Node<any, any>[]
36+
]
37+
? Current['value'] extends ToFind
38+
? Current
39+
: Rest extends [infer Next extends Node<any, any>]
40+
? BFS<Next, ToFind, [...Searched, Root]>
41+
: never
42+
: never
43+
44+
45+
type Result = BFS<A, 4> // Node<4, [Node<2>, Node<3>]>
46+
47+
48+
49+
50+
51+
52+
53+
54+
55+
56+
function breadthFirstSearch<T>(
57+
root: Node<unknown, Node<any, any>[]>,
58+
toFind: T,
59+
searched: Node<any, any>[] = []
60+
): Node<T> | null {
61+
if (searched.includes(root)) return null
62+
if (root.value === toFind) return root as Node<T>
63+
64+
for (const current of root.neighbors) {
65+
if (current.value === toFind) return current
66+
67+
const a = breadthFirstSearch(current, toFind, [...searched, root])
68+
}
69+
70+
return null
71+
}

package.json

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "elysia",
33
"description": "Ergonomic Framework for Human",
4-
"version": "1.1.27",
4+
"version": "1.2.0",
55
"author": {
66
"name": "saltyAom",
77
"url": "https://github.com/SaltyAom",
@@ -23,6 +23,16 @@
2323
"import": "./dist/ws/index.mjs",
2424
"require": "./dist/cjs/ws/index.js"
2525
},
26+
"./ws/types": {
27+
"types": "./dist/ws/types.d.ts",
28+
"import": "./dist/ws/types.mjs",
29+
"require": "./dist/cjs/ws/types.js"
30+
},
31+
"./ws/bun": {
32+
"types": "./dist/ws/bun.d.ts",
33+
"import": "./dist/ws/bun.mjs",
34+
"require": "./dist/cjs/ws/bun.js"
35+
},
2636
"./compose": {
2737
"types": "./dist/compose.d.ts",
2838
"import": "./dist/compose.mjs",
@@ -43,11 +53,6 @@
4353
"import": "./dist/error.mjs",
4454
"require": "./dist/cjs/error.js"
4555
},
46-
"./handler": {
47-
"types": "./dist/handler.d.ts",
48-
"import": "./dist/handler.mjs",
49-
"require": "./dist/cjs/handler.js"
50-
},
5156
"./sucrose": {
5257
"types": "./dist/sucrose.d.ts",
5358
"import": "./dist/sucrose.mjs",
@@ -77,6 +82,51 @@
7782
"types": "./dist/fast-querystring.d.ts",
7883
"import": "./dist/fast-querystring.mjs",
7984
"require": "./dist/cjs/fast-querystring.js"
85+
},
86+
"./adapter": {
87+
"types": "./dist/adapter/index.d.ts",
88+
"import": "./dist/adapter/index.mjs",
89+
"require": "./dist/cjs/adapter/index.js"
90+
},
91+
"./adapter/bun": {
92+
"types": "./dist/adapter/bun/index.d.ts",
93+
"import": "./dist/adapter/bun/index.mjs",
94+
"require": "./dist/cjs/adapter/bun/index.js"
95+
},
96+
"./adapter/bun/handler": {
97+
"types": "./dist/adapter/bun/handler.d.ts",
98+
"import": "./dist/adapter/bun/handler.mjs",
99+
"require": "./dist/cjs/adapter/bun/handler.js"
100+
},
101+
"./adapter/web-standard": {
102+
"types": "./dist/adapter/web-standard/index.d.ts",
103+
"import": "./dist/adapter/web-standard/index.mjs",
104+
"require": "./dist/cjs/adapter/web-standard/index.js"
105+
},
106+
"./adapter/web-standard/handler": {
107+
"types": "./dist/adapter/web-standard/handler.d.ts",
108+
"import": "./dist/adapter/web-standard/handler.mjs",
109+
"require": "./dist/cjs/adapter/web-standard/handler.js"
110+
},
111+
"./universal": {
112+
"types": "./dist/universal/index.d.ts",
113+
"import": "./dist/universal/index.mjs",
114+
"require": "./dist/cjs/universal/index.js"
115+
},
116+
"./universal/server": {
117+
"types": "./dist/universal/server.d.ts",
118+
"import": "./dist/universal/server.mjs",
119+
"require": "./dist/cjs/universal/server.js"
120+
},
121+
"./universal/env": {
122+
"types": "./dist/universal/env.d.ts",
123+
"import": "./dist/universal/env.mjs",
124+
"require": "./dist/cjs/universal/env.js"
125+
},
126+
"./universal/file": {
127+
"types": "./dist/universal/file.d.ts",
128+
"import": "./dist/universal/file.mjs",
129+
"require": "./dist/cjs/universal/file.js"
80130
}
81131
},
82132
"repository": {
@@ -103,9 +153,10 @@
103153
"release": "npm run build && npm run test && npm publish"
104154
},
105155
"dependencies": {
106-
"@sinclair/typebox": "0.32.34",
107-
"cookie": "^1.0.1",
156+
"@sinclair/typebox": "^0.34.13",
157+
"cookie": "^1.0.2",
108158
"fast-decode-uri-component": "^1.0.1",
159+
"memoirist": "^0.2.0",
109160
"openapi-types": "^12.1.3"
110161
},
111162
"devDependencies": {
@@ -119,13 +170,12 @@
119170
"eslint-plugin-security": "^2.1.0",
120171
"eslint-plugin-sonarjs": "^0.23.0",
121172
"expect-type": "^0.16.0",
122-
"memoirist": "^0.2.0",
123173
"prettier": "^3.3.3",
124-
"tsup": "^8.0.2",
125-
"typescript": "^5.5.2"
174+
"tsup": "^8.3.5",
175+
"typescript": "^5.7.2"
126176
},
127177
"peerDependencies": {
128-
"@sinclair/typebox": ">= 0.32.0",
178+
"@sinclair/typebox": ">= 0.34.0",
129179
"openapi-types": ">= 12.0.0",
130180
"typescript": ">= 5.0.0"
131181
},

src/adapter/bun/handler.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import type { Context } from '../../context'
2+
import type { AnyLocalHook } from '../../types'
3+
4+
import {
5+
mapResponse,
6+
mapEarlyResponse,
7+
mapCompactResponse,
8+
createStaticHandler
9+
} from '../web-standard/handler'
10+
11+
export const createNativeStaticHandler = (
12+
handle: unknown,
13+
hooks: AnyLocalHook,
14+
setHeaders: Context['set']['headers'] = {}
15+
): (() => Response) | undefined => {
16+
if (typeof handle === 'function' || handle instanceof Blob) return
17+
18+
const response = mapResponse(handle, {
19+
headers: setHeaders
20+
})
21+
22+
if (
23+
hooks.parse.length === 0 &&
24+
hooks.transform.length === 0 &&
25+
hooks.beforeHandle.length === 0 &&
26+
hooks.afterHandle.length === 0
27+
) {
28+
if (!response.headers.has('content-type'))
29+
response.headers.append('content-type', 'text/plain;charset=utf-8')
30+
31+
return response.clone.bind(response)
32+
}
33+
}
34+
35+
export {
36+
mapResponse,
37+
mapEarlyResponse,
38+
mapCompactResponse,
39+
createStaticHandler
40+
}

0 commit comments

Comments
 (0)