Skip to content

Commit b60908e

Browse files
authored
feat: server entry (#43)
1 parent 1697251 commit b60908e

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

packages/dobs/src/builder/index.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ export async function buildServer(config: ResolvedServerConfig) {
4747
const [, configFileTemp] = await compileModule('dobs.config', {
4848
extensions: ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'],
4949
});
50+
const [, serverEntryTemp] = await compileModule(config.serverEntry, {
51+
extensions: ['', '.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'],
52+
});
5053
const formattedConfigFile = JSON.stringify(configFileTemp).replace(/\\/g, '/');
54+
const formattedServerEntry = JSON.stringify(serverEntryTemp).replace(/\\/g, '/');
5155

5256
writeFileSync(
5357
join(tempDirectory, '_temp.js'),
@@ -57,10 +61,13 @@ const _internal = require("dobs/_build");
5761
const _dobs_http = _internal.createHTTPServer;
5862
5963
const _config = _dobs.resolveConfig(${configFileTemp ? `require(${formattedConfigFile})` : '{}'} ?? {});
64+
const _server_entry = (${serverEntryTemp ? `require(${formattedServerEntry})` : '(() => {})'} ?? (() => {}));
6065
const _middlewares = _config?.middlewares;
6166
6267
const _app = _dobs_http();
6368
69+
_server_entry(_app);
70+
6471
_app.use(...[..._middlewares, _internal._buildInternalMiddleware({${rawRoutes.join(',\n')}}, _config)]);
6572
6673
_app.listen(process.env.PORT ?? _config.port, () => {console.log("server is running on " + (process.env.PORT ?? _config.port))});
@@ -74,7 +81,15 @@ _app.listen(process.env.PORT ?? _config.port, () => {console.log("server is runn
7481
file: outputFile,
7582
minify: true,
7683
},
77-
plugins: [nodeExternal({ allow: [formattedConfigFile.slice(1, -1), ...rawFiles] })],
84+
plugins: [
85+
nodeExternal({
86+
allow: [
87+
formattedConfigFile.slice(1, -1),
88+
formattedServerEntry.slice(1, -1),
89+
...rawFiles,
90+
],
91+
}),
92+
],
7893
});
7994

8095
writeFileSync(outputFilePackageJSON, JSON.stringify({ type: 'commonjs' }));

packages/dobs/src/config.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { createServer } from 'node:http';
2-
import type { Middleware } from '@dobsjs/http';
2+
import type { BaseServer, Middleware } from '@dobsjs/http';
33
import { deepmerge } from 'deepmerge-ts';
44
import { createPluginRunner, Plugin } from './plugin';
55

6+
export type ServerEntry = (server: BaseServer) => void;
7+
68
export interface ResolvedServerConfig {
79
/** port to serve (default: 8080) */
810
port: number;
@@ -30,6 +32,8 @@ export interface ResolvedServerConfig {
3032
};
3133

3234
plugins: Plugin[];
35+
36+
serverEntry: string;
3337
}
3438

3539
export type ServerConfig = Partial<ResolvedServerConfig>;
@@ -45,6 +49,7 @@ export const DEFAULT_CONFIG: ResolvedServerConfig = {
4549
directory: 'dist',
4650
},
4751
plugins: [],
52+
serverEntry: 'server.entry',
4853
};
4954

5055
export function resolveConfig(config: ServerConfig): ResolvedServerConfig {

packages/dobs/src/server/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { resolveConfig, ServerConfig } from '~/dobs/config';
55
import { createPluginRunner } from '~/dobs/plugin';
66

77
import { createRouterMiddleware } from './router';
8+
import { loadServerEntry } from './server-entry';
89

910
type CreateServerReturn<T extends ServerConfig> = T['mode'] extends 'middleware'
1011
? Middleware[]
@@ -21,10 +22,13 @@ export async function createDobsServer<T extends ServerConfig>(
2122

2223
const resolvedConfig = resolveConfig(config);
2324
const server = httpServer(resolvedConfig.createServer);
25+
const serverEntry = await loadServerEntry(resolvedConfig);
2426

2527
// [plugin] execute plugin.server
2628
await runner.execute('server', server);
2729

30+
// user server entry
31+
if (serverEntry) serverEntry(server);
2832
// user middleware
2933
server.middlewares.push(...resolvedConfig.middlewares);
3034
// router middleware
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { load } from 'module-loader-ts';
2+
import { isAbsolute, join } from 'node:path';
3+
4+
import type { ResolvedServerConfig, ServerEntry } from '~/dobs/config';
5+
6+
export async function loadServerEntry(
7+
config: ResolvedServerConfig,
8+
): Promise<ServerEntry> {
9+
let entry = config.serverEntry;
10+
11+
if (!isAbsolute(entry)) entry = join(config.cwd, entry);
12+
13+
return await load(entry, {
14+
extensions: ['', '.ts', '.js', '.mts', '.cts', '.mjs', '.cjs'],
15+
});
16+
}

0 commit comments

Comments
 (0)