Skip to content

Commit f2dadec

Browse files
committed
move response factories to dedicated folders
1 parent 732cf3f commit f2dadec

File tree

9 files changed

+55
-57
lines changed

9 files changed

+55
-57
lines changed

packages/bunshine/index.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,19 @@ export {
4545
} from './src/middleware/serveFiles/serveFiles';
4646
export { trailingSlashes } from './src/middleware/trailingSlashes/trailingSlashes';
4747
export { default as ms } from './src/ms/ms';
48-
export { default as buildFileResponse } from './src/responseFactories/buildFileResponse';
49-
export { default as factory } from './src/responseFactories/factory';
48+
export { default as factory } from './src/responseFactories/factory/factory';
5049
export {
5150
default as file,
5251
type FileResponseOptions,
53-
} from './src/responseFactories/file';
54-
export { default as json } from './src/responseFactories/json';
55-
export { default as redirect } from './src/responseFactories/redirect';
52+
} from './src/responseFactories/file/file';
53+
export { default as json } from './src/responseFactories/json/json';
54+
export { default as redirect } from './src/responseFactories/redirect/redirect';
5655
export {
5756
default as sse,
5857
type SseClose,
5958
type SseSend,
6059
type SseSetupFunction,
61-
} from './src/responseFactories/sse';
60+
} from './src/responseFactories/sse/sse';
6261
export {
6362
default as SocketRouter,
6463
type BunHandlers,

packages/bunshine/src/Context/Context.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import type { BunFile, Server } from 'bun';
22
import type HttpRouter from '../HttpRouter/HttpRouter';
3-
import factory from '../responseFactories/factory';
4-
import file, { type FileResponseOptions } from '../responseFactories/file';
5-
import json from '../responseFactories/json';
6-
import redirect from '../responseFactories/redirect';
7-
import sse, { type SseSetupFunction } from '../responseFactories/sse';
3+
import factory from '../responseFactories/factory/factory';
4+
import file, { type FileResponseOptions } from '../responseFactories/file/file';
5+
import json from '../responseFactories/json/json';
6+
import redirect from '../responseFactories/redirect/redirect';
7+
import sse, { type SseSetupFunction } from '../responseFactories/sse/sse';
88

99
const textPlain = factory('text/plain');
1010
const textJs = factory('text/javascript');

packages/bunshine/src/responseFactories/factory.ts renamed to packages/bunshine/src/responseFactories/factory/factory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Context from '../Context/Context';
1+
import Context from '../../Context/Context';
22

33
export type Factory = (body: string, init?: ResponseInit) => Response;
44

packages/bunshine/src/responseFactories/file.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

packages/bunshine/src/responseFactories/buildFileResponse.ts renamed to packages/bunshine/src/responseFactories/file/file.ts

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,48 @@
11
import { BunFile } from 'bun';
2-
import getMimeType from '../getMimeType/getMimeType';
2+
import path from 'node:path';
3+
import Context from '../../Context/Context';
4+
import getMimeType from '../../getMimeType/getMimeType';
5+
import parseRangeHeader from '../../parseRangeHeader/parseRangeHeader';
36

4-
export default async function buildFileResponse({
7+
export type FileResponseOptions = {
8+
range?: string;
9+
chunkSize?: number;
10+
disposition?: 'inline' | 'attachment';
11+
acceptRanges?: boolean;
12+
};
13+
export default async function file(
14+
this: Context,
15+
filenameOrBunFile: string | BunFile,
16+
fileOptions: FileResponseOptions = {}
17+
) {
18+
let file =
19+
typeof filenameOrBunFile === 'string'
20+
? Bun.file(filenameOrBunFile)
21+
: filenameOrBunFile;
22+
if (!(await file.exists())) {
23+
return new Response('File not found', { status: 404 });
24+
}
25+
26+
const resp = await buildFileResponse({
27+
file,
28+
acceptRanges: fileOptions.acceptRanges !== false,
29+
chunkSize: fileOptions.chunkSize,
30+
rangeHeader: fileOptions.range,
31+
method: this.request.method,
32+
});
33+
if (fileOptions.disposition === 'attachment') {
34+
const filename = path.basename(file.name!);
35+
resp.headers.set(
36+
'Content-Disposition',
37+
`${fileOptions.disposition}; filename="${filename}"`
38+
);
39+
} else if (fileOptions.disposition === 'inline') {
40+
resp.headers.set('Content-Disposition', 'inline');
41+
}
42+
return resp;
43+
}
44+
45+
function buildFileResponse({
546
file,
647
acceptRanges,
748
chunkSize,

packages/bunshine/src/responseFactories/json.ts renamed to packages/bunshine/src/responseFactories/json/json.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Context from '../Context/Context';
1+
import Context from '../../Context/Context';
22

33
export default function json(
44
this: Context,

0 commit comments

Comments
 (0)