Skip to content

Commit 68515ac

Browse files
committed
feat: implement method 'new' to ExpressServer
1 parent 544a94c commit 68515ac

File tree

4 files changed

+54
-10
lines changed

4 files changed

+54
-10
lines changed

examples/server-express-only/src/settings.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ export default defineSettings({
4040
ServerDomain,
4141
{
4242
servers: {
43-
default: {
44-
server: ExpressServerAdapter,
43+
default: ExpressServerAdapter.new({
4544
port: 4000,
4645
validation: {
4746
handler: () => {
@@ -58,7 +57,7 @@ export default defineSettings({
5857
handler500: async (response) => {
5958
return response;
6059
},
61-
},
60+
})
6261
},
6362
},
6463
],

libs/express-adapter/src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export { ExpressServerAdapter } from './server';
1+
export { ExpressServerAdapter, expressServerAdapter } from './server';
22
export { requestAdapter as ExpressRequestAdapter } from './request';
3-
export * from './types';
4-
export { ExpressServerAdapter as default } from './server';
3+
export * from './types';

libs/express-adapter/src/server.ts

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { serverAdapter } from '@palmares/server';
1+
import { AllServerSettingsType, ServerAdapter, serverAdapter, ServerRouterAdapter, ServerSettingsType } from '@palmares/server';
22
import express, { type Express } from 'express';
33

44
import { requestAdapter } from './request';
@@ -8,6 +8,7 @@ import { routerAdapter } from './router';
88
import type { ServerSettingsTypeExpress } from './types';
99
import type { Domain } from '@palmares/core';
1010
import type multer from 'multer';
11+
import { ExpressRequestAdapter } from '.';
1112

1213
export const servers = new Map<
1314
string,
@@ -54,5 +55,50 @@ const expressServerAdapter = serverAdapter({
5455
}
5556
});
5657

57-
export { expressServerAdapter as ExpressServerAdapter };
58-
export { expressServerAdapter as default };
58+
let defaultConfig = {} as ServerSettingsTypeExpress;
59+
60+
class ExpressServerAdapter extends ServerAdapter {
61+
$$type = '$PServerAdapter';
62+
request = new requestAdapter();
63+
response = new responseAdapter();
64+
routers = new routerAdapter();
65+
66+
// eslint-disable-next-line ts/require-await
67+
async load(serverName: string, _domains: Domain[], settings: ServerSettingsTypeExpress) {
68+
let server: Express | undefined = servers.get(serverName)?.server;
69+
if (!server) {
70+
server = express();
71+
servers.set(serverName, { server, settings });
72+
}
73+
if (settings.customServerSettings?.middlewares) {
74+
settings.customServerSettings.middlewares.forEach((middleware) => {
75+
server.use(middleware);
76+
});
77+
}
78+
return server;
79+
}
80+
81+
// eslint-disable-next-line ts/require-await
82+
static close(serverName: string) {
83+
servers.get(serverName)?.httpServer?.close();
84+
servers.delete(serverName);
85+
}
86+
87+
// eslint-disable-next-line ts/require-await
88+
async start(_serverName: string, server: Express, port: number, logServerStart: () => void) {
89+
server.listen(port, () => logServerStart());
90+
}
91+
92+
static new(args: Omit<ServerSettingsTypeExpress, 'server'>) {
93+
defaultConfig = {
94+
server: this,
95+
...args,
96+
};
97+
98+
return {
99+
server: this,
100+
};
101+
}
102+
}
103+
104+
export { ExpressServerAdapter, expressServerAdapter };

packages/server/src/app/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import type { AllServerSettingsType } from '../types';
1212
/**
1313
* This is the http app server, it is responsible for loading the server and starting it configuring all of
1414
* the routes of the application.
15-
*
15+
*
1616
* The life cycle of the app is explained on '@palmares/core', but it's basically:
1717
* - `load`: Loads the constructor.
1818
* - `start`: Starts the appServer.

0 commit comments

Comments
 (0)