Skip to content

Commit 4fc78f0

Browse files
committed
🎉 feat: ponyfill for node 18, probably
1 parent 23a0d4f commit 4fc78f0

8 files changed

Lines changed: 74 additions & 48 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# 1.2.2 - 27 Dec 2024
2+
Bug fix:
3+
- Set minimum Elysia version to 1.2.7
4+
- Response doesn't reconcile when handler return `Response` is used with `mapResponse`
5+
- [#11](https://github.com/elysiajs/node/pull/11) `Content-Length` with `UTF-8` 2-byte characters
6+
- Ponyfill for `fs.openAsBlob` and `Promise.withResolve`
7+
18
# 1.2.1 - 25 Dec 2024
29
Change:
310
- Set minimum Elysia version to 1.2.3

build.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ await Promise.all([
1616
build({
1717
outDir: 'dist',
1818
format: 'esm',
19-
target: 'node20',
19+
target: 'node18',
2020
cjsInterop: false,
2121
...tsupConfig
2222
}),
2323
// ? tsup cjs
2424
build({
2525
outDir: 'dist/cjs',
2626
format: 'cjs',
27-
target: 'node20',
27+
target: 'node18',
2828
// dts: true,
2929
...tsupConfig
3030
})

bun.lockb

384 Bytes
Binary file not shown.

example/index.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import { Elysia, file } from 'elysia'
2+
import { cors } from '@elysiajs/cors'
23
import { node } from '../src'
34

45
const plugin = async () => new Elysia().get('/async', () => 'ok')
56

67
const app = new Elysia({
7-
adapter: node()
8+
// adapter: node()
89
})
9-
.get('/image', () => file('test/kyuukurarin.mp4'))
10+
.use(cors())
11+
.get('/image', () => file('test/kyuukurarin.mp4'))
1012
.post('/', ({ body }) => body, {
1113
type: 'json'
1214
})
13-
.get('/', 'ok')
15+
.get('/', () => 'ok')
1416
.listen(3000)

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@elysiajs/node",
3-
"version": "1.2.1",
3+
"version": "1.2.2",
44
"description": "Plugin for Elysia for retreiving Bearer token",
55
"license": "MIT",
66
"scripts": {
@@ -15,7 +15,7 @@
1515
"ws": "^8.18.0"
1616
},
1717
"peerDependencies": {
18-
"elysia": ">= 1.2.3",
18+
"elysia": ">= 1.2.7",
1919
"bufferutil": ">= 4.0.1",
2020
"formidable": ">= 3.5.2",
2121
"ws": ">= 8.18.0"
@@ -26,10 +26,11 @@
2626
}
2727
},
2828
"devDependencies": {
29+
"@elysiajs/cors": "^1.2.0",
2930
"@types/formidable": "^3.4.5",
3031
"@types/node": "^22.10.2",
3132
"@types/ws": "^8.5.13",
32-
"elysia": "1.2.3",
33+
"elysia": "1.2.7",
3334
"eslint": "9.17.0",
3435
"light-my-request": "^6.4.0",
3536
"tsup": "^8.3.5",

src/handler.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ export const mapResponse = (
359359
return [response, set as any]
360360

361361
case 'Response':
362-
mergeResponseWithSetHeaders(response as Response, set)
362+
response = mergeResponseWithSetHeaders(response as Response, set)
363363

364364
if (
365365
(response as Response).headers.get('transfer-encoding') ===
@@ -417,7 +417,10 @@ export const mapResponse = (
417417

418418
default:
419419
if (response instanceof Response) {
420-
mergeResponseWithSetHeaders(response as Response, set)
420+
response = mergeResponseWithSetHeaders(
421+
response as Response,
422+
set
423+
)
421424

422425
return [
423426
responseToValue(
@@ -604,7 +607,7 @@ export const mapEarlyResponse = (
604607
return [response, set as any]
605608

606609
case 'Response':
607-
mergeResponseWithSetHeaders(response as Response, set)
610+
response = mergeResponseWithSetHeaders(response as Response, set)
608611

609612
if (
610613
(response as Response).headers.get('transfer-encoding') ===
@@ -662,7 +665,10 @@ export const mapEarlyResponse = (
662665

663666
default:
664667
if (response instanceof Response) {
665-
mergeResponseWithSetHeaders(response as Response, set)
668+
response = mergeResponseWithSetHeaders(
669+
response as Response,
670+
set
671+
)
666672

667673
return [
668674
responseToValue(response, res, set as SetResponse),

src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { mapResponse, mapEarlyResponse, mapCompactResponse } from './handler'
1919

2020
import { attachWebSocket } from './ws'
2121
import { WebStandardAdapter } from 'elysia/adapter/web-standard'
22-
import { readFileToWebStandardFile, unwrapArrayIfSingle } from './utils'
22+
import { readFileToWebStandardFile, unwrapArrayIfSingle, withResolvers } from './utils'
2323

2424
export const ElysiaNodeContext = Symbol('ElysiaNodeContext')
2525

@@ -332,7 +332,7 @@ export const node = () => {
332332
app.fetch = webStandardApp.fetch
333333

334334
const { promise: serverInfo, resolve: setServerInfo } =
335-
Promise.withResolvers<Server>()
335+
withResolvers<Server>()
336336

337337
// @ts-expect-error closest possible type
338338
app.server = serverInfo
@@ -369,7 +369,7 @@ export const node = () => {
369369
// @ts-expect-error
370370
get pendingRequests() {
371371
const { promise, resolve, reject } =
372-
Promise.withResolvers<number>()
372+
withResolvers<number>()
373373

374374
server.getConnections((error, total) => {
375375
if (error) reject(error)

src/utils.ts

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
1-
import { openAsBlob } from 'fs'
1+
import fs from 'fs'
2+
3+
export const withResolvers = <T>() => {
4+
let resolve: (value: T | PromiseLike<T>) => void
5+
let reject: (reason?: unknown) => void
6+
const promise = new Promise<T>((res, rej) => {
7+
resolve = res
8+
reject = rej
9+
})
10+
return { promise, resolve: resolve!, reject: reject! }
11+
}
212

313
export const unwrapArrayIfSingle = <T extends unknown[]>(
414
x: T
@@ -23,39 +33,39 @@ export const readFileToWebStandardFile = (
2333
for (let i = 0; i < files.length; i++)
2434
buffers.push(
2535
new Promise<File>((resolve, reject) => {
26-
// if (openAsBlob)
27-
resolve(
28-
openAsBlob(files[i].filepath).then(
29-
(blob) =>
30-
new File([blob], files[i].originalFilename, {
31-
type: files[i].mimetype,
32-
lastModified:
33-
files[i].lastModifiedDate.getTime()
34-
})
36+
if (fs.openAsBlob)
37+
resolve(
38+
fs.openAsBlob(files[i].filepath).then(
39+
(blob) =>
40+
new File([blob], files[i].originalFilename, {
41+
type: files[i].mimetype,
42+
lastModified:
43+
files[i].lastModifiedDate.getTime()
44+
})
45+
)
46+
)
47+
else {
48+
const buffer = Array<any>()
49+
const stream = fs.createReadStream(files[i].filepath)
50+
51+
stream.on('data', (chunk) => buffer.push(chunk))
52+
stream.on('end', () =>
53+
resolve(
54+
new File(
55+
[new Blob([Buffer.concat(buffer)])],
56+
files[i].originalFilename,
57+
{
58+
type: files[i].mimetype,
59+
lastModified:
60+
files[i].lastModifiedDate.getTime()
61+
}
62+
)
63+
)
64+
)
65+
stream.on('error', (err) =>
66+
reject(`error converting stream - ${err}`)
3567
)
36-
)
37-
// else {
38-
// const buffer = Array<any>()
39-
// const stream = createReadStream(files[i].filepath)
40-
41-
// stream.on('data', (chunk) => buffer.push(chunk))
42-
// stream.on('end', () =>
43-
// resolve(
44-
// new File(
45-
// [new Blob([Buffer.concat(buffer)])],
46-
// files[i].originalFilename,
47-
// {
48-
// type: files[i].mimetype,
49-
// lastModified:
50-
// files[i].lastModifiedDate.getTime()
51-
// }
52-
// )
53-
// )
54-
// )
55-
// stream.on('error', (err) =>
56-
// reject(`error converting stream - ${err}`)
57-
// )
58-
// }
68+
}
5969
})
6070
)
6171

0 commit comments

Comments
 (0)