Skip to content

Commit 989d88d

Browse files
refactor(TypeScript/ditsmod): upgrade to v3. (#9475)
1 parent 082b573 commit 989d88d

File tree

6 files changed

+28
-39
lines changed

6 files changed

+28
-39
lines changed

frameworks/TypeScript/ditsmod/benchmark_config.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"webserver": "None",
1919
"os": "Linux",
2020
"database_os": "Linux",
21-
"display_name": "ditsmod",
21+
"display_name": "ditsmod v3.0",
2222
"notes": "Simplified use of Dependency Injection (no request level injector).",
2323
"versus": "nodejs"
2424
},
@@ -41,7 +41,7 @@
4141
"webserver": "None",
4242
"os": "Linux",
4343
"database_os": "Linux",
44-
"display_name": "ditsmod [postgres]",
44+
"display_name": "ditsmod v3.0 [postgres]",
4545
"notes": "Simplified use of Dependency Injection (no request level injector).",
4646
"versus": "nodejs"
4747
},
@@ -64,7 +64,7 @@
6464
"webserver": "None",
6565
"os": "Linux",
6666
"database_os": "Linux",
67-
"display_name": "ditsmod [mysql]",
67+
"display_name": "ditsmod v3.0 [mysql]",
6868
"notes": "Simplified use of Dependency Injection (no request level injector).",
6969
"versus": "nodejs"
7070
},
@@ -84,7 +84,7 @@
8484
"webserver": "None",
8585
"os": "Linux",
8686
"database_os": "Linux",
87-
"display_name": "ditsmod on bun",
87+
"display_name": "ditsmod-bun v3.0",
8888
"notes": "Simplified use of Dependency Injection (no request level injector).",
8989
"versus": "bun"
9090
},
@@ -107,7 +107,7 @@
107107
"webserver": "None",
108108
"os": "Linux",
109109
"database_os": "Linux",
110-
"display_name": "ditsmod on bun [postgres]",
110+
"display_name": "ditsmod-bun v3.0 [postgres]",
111111
"notes": "Simplified use of Dependency Injection (no request level injector).",
112112
"versus": "bun"
113113
},
@@ -130,7 +130,7 @@
130130
"webserver": "None",
131131
"os": "Linux",
132132
"database_os": "Linux",
133-
"display_name": "ditsmod on bun [mysql]",
133+
"display_name": "ditsmod-bun v3.0 [mysql]",
134134
"notes": "Simplified use of Dependency Injection (no request level injector).",
135135
"versus": "bun"
136136
}

frameworks/TypeScript/ditsmod/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
"author": "Костя Третяк",
1515
"license": "MIT",
1616
"dependencies": {
17-
"@ditsmod/core": "~2.55.0",
18-
"@ditsmod/routing": "~2.3.0",
17+
"@ditsmod/core": "^3.0.0-alpha.2",
18+
"@ditsmod/routing": "^3.0.0-alpha.2",
1919
"handlebars": "^4.7.8",
2020
"lru-cache": "^11.0.0",
2121
"mariadb": "^3.3.1",

frameworks/TypeScript/ditsmod/src/app/app.module.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ import { Providers, rootModule } from '@ditsmod/core';
22
import { PRE_ROUTER_EXTENSIONS, RoutingModule } from '@ditsmod/routing';
33

44
import { OneController } from './one.controller.js';
5-
import { DbService } from './db.service.js';
65
import { InitExtension } from './init.extension.js';
76
import { DB_INIT_EXTENSIONS } from './tokens.js';
8-
import { ModelService } from './types.js';
97

108
@rootModule({
119
imports: [RoutingModule],
12-
providersPerApp: new Providers().passThrough(DbService).passThrough(ModelService).useLogConfig({ level: 'off' }),
13-
extensions: [{ extension: InitExtension, groupToken: DB_INIT_EXTENSIONS, nextToken: PRE_ROUTER_EXTENSIONS }],
10+
providersPerApp: new Providers().useLogConfig({ level: 'off' }),
11+
extensions: [{ extension: InitExtension, group: DB_INIT_EXTENSIONS, beforeGroup: PRE_ROUTER_EXTENSIONS }],
1412
controllers: [OneController],
1513
})
1614
export class AppModule {}

frameworks/TypeScript/ditsmod/src/app/init.extension.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,12 @@ import { ModelService } from './types.js';
55

66
@injectable()
77
export class InitExtension implements Extension<void> {
8-
#inited: boolean;
9-
108
constructor(
119
private perAppService: PerAppService,
1210
private logger: Logger,
1311
) {}
1412

15-
async init(): Promise<void> {
16-
if (this.#inited) {
17-
return;
18-
}
19-
13+
async stage1(): Promise<void> {
2014
const dbType = process.env.DATABASE as 'mysql' | 'postgres';
2115

2216
if (dbType == 'mysql') {
@@ -28,13 +22,13 @@ export class InitExtension implements Extension<void> {
2822
} else {
2923
this.logger.log('warn', `Unknown database "${dbType}"`);
3024
}
31-
32-
this.#inited = true;
3325
}
3426

3527
protected async setDbService(useClass: Class) {
36-
const injector = this.perAppService.injector.resolveAndCreateChild([{ token: ModelService, useClass }]);
37-
const dbService = injector.pull(DbService) as DbService;
28+
const dbService = this.perAppService.injector
29+
.resolveAndCreateChild([DbService, { token: ModelService, useClass }])
30+
.get(DbService) as DbService;
31+
3832
await dbService.setWorldsToCache();
3933
this.perAppService.providers.push({ token: DbService, useValue: dbService });
4034
}

frameworks/TypeScript/ditsmod/src/app/one.controller.ts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { AnyObj, controller, RequestContext, SingletonRequestContext, route } from '@ditsmod/core';
1+
import { AnyObj, controller, RequestContext, SingletonRequestContext, optional } from '@ditsmod/core';
2+
import { route } from '@ditsmod/routing';
23
import Handlebars from 'handlebars';
34

45
import { DbService } from './db.service.js';
@@ -27,9 +28,9 @@ const tmpl = Handlebars.compile(
2728
].join(''),
2829
);
2930

30-
@controller({ isSingleton: true })
31+
@controller({ scope: 'module' })
3132
export class OneController {
32-
constructor(private dbService: DbService) {}
33+
constructor(@optional() private dbService: DbService) {}
3334

3435
@route('GET', 'db')
3536
async getSingleQuery(ctx: RequestContext) {
@@ -61,28 +62,24 @@ export class OneController {
6162
const fortunes = await this.dbService.findAllFortunes();
6263
fortunes.push(additionalFortune);
6364
fortunes.sort(compare);
64-
ctx.nodeRes.setHeader('Server', 'Ditsmod');
65-
ctx.nodeRes.setHeader('Content-Type', 'text/html; charset=utf-8');
66-
ctx.nodeRes.end(tmpl({ fortunes }));
65+
ctx.rawRes.setHeader('Server', 'Ditsmod');
66+
ctx.rawRes.setHeader('Content-Type', 'text/html; charset=utf-8');
67+
ctx.rawRes.end(tmpl({ fortunes }));
6768
}
6869

6970
@route('GET', 'plaintext')
7071
getHello(ctx: SingletonRequestContext) {
71-
ctx.nodeRes.setHeader('Server', 'Ditsmod');
72-
ctx.nodeRes.setHeader('Content-Type', 'text/plain; charset=utf-8');
73-
ctx.nodeRes.end('Hello, World!');
72+
ctx.rawRes.setHeader('Server', 'Ditsmod');
73+
ctx.rawRes.setHeader('Content-Type', 'text/plain; charset=utf-8');
74+
ctx.rawRes.end('Hello, World!');
7475
}
7576

7677
@route('GET', 'json')
7778
getJson(ctx: SingletonRequestContext) {
78-
ctx.nodeRes.setHeader('Server', 'Ditsmod');
79-
ctx.nodeRes.setHeader('Content-Type', 'application/json; charset=utf-8');
80-
ctx.nodeRes.end(JSON.stringify({ message: 'Hello, World!' }));
79+
this.sendJson(ctx, { message: 'Hello, World!' });
8180
}
8281

8382
protected sendJson(ctx: RequestContext, value: AnyObj) {
84-
ctx.nodeRes.setHeader('Server', 'Ditsmod');
85-
ctx.nodeRes.setHeader('Content-Type', 'application/json; charset=utf-8');
86-
ctx.nodeRes.end(JSON.stringify(value));
83+
ctx.setHeader('Server', 'Ditsmod').sendJson(value);
8784
}
8885
}

frameworks/TypeScript/ditsmod/src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ if (numCpus > 1 && cluster.isPrimary) {
1313
}
1414
} else {
1515
const serverOptions: ServerOptions = { keepAlive: true, keepAliveTimeout: 0 };
16-
const app = await new Application().bootstrap(AppModule, { serverOptions });
16+
const app = await Application.create(AppModule, { serverOptions });
1717
app.server.listen(8080, '0.0.0.0');
1818
}

0 commit comments

Comments
 (0)