• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

teableio / teable / 11872411717

16 Nov 2024 06:42PM UTC coverage: 84.059% (-0.2%) from 84.283%
11872411717

Pull #1093

github

web-flow
Merge 07a151da5 into abcf35fa1
Pull Request #1093: feat: lookup filter

5975 of 6281 branches covered (95.13%)

599 of 681 new or added lines in 21 files covered. (87.96%)

39 existing lines in 6 files now uncovered.

38973 of 46364 relevant lines covered (84.06%)

1598.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

12.22
/apps/nestjs-backend/src/ws/ws.gateway.dev.ts
1
import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
2✔
2
import { Injectable, Logger } from '@nestjs/common';
2✔
3
import { ConfigService } from '@nestjs/config';
2✔
4
import WebSocketJSONStream from '@teamwork/websocket-json-stream';
2✔
5
import type { Request } from 'express';
2✔
6
import type { WebSocket } from 'ws';
2✔
7
import { Server } from 'ws';
2✔
8
import { ShareDbService } from '../share-db/share-db.service';
2✔
9

2✔
10
@Injectable()
2✔
11
export class DevWsGateway implements OnModuleInit, OnModuleDestroy {
2!
12
  private logger = new Logger(DevWsGateway.name);
×
13

×
14
  server!: Server;
×
15

×
16
  constructor(
×
17
    private readonly shareDb: ShareDbService,
×
18
    private readonly configService: ConfigService
×
19
  ) {}
×
20

×
21
  handleConnection = async (webSocket: WebSocket, request: Request) => {
×
22
    this.logger.log('ws:on:connection');
×
23
    try {
×
24
      const stream = new WebSocketJSONStream(webSocket);
×
NEW
25
      this.shareDb.listen(stream, request);
×
26
    } catch (error) {
×
27
      webSocket.send(JSON.stringify({ error }));
×
28
      webSocket.close();
×
29
    }
×
30
  };
×
31

×
32
  handleError = (error: Error) => {
×
33
    this.logger.error('ws:on:error', error?.stack);
×
34
  };
×
35

×
36
  handleClose = () => {
×
NEW
37
    this.logger.log('ws:on:close');
×
38
  };
×
39

×
40
  onModuleInit() {
×
41
    const port = this.configService.get<number>('SOCKET_PORT');
×
42

×
43
    this.server = new Server({ port, path: '/socket' });
×
44
    this.logger.log(`DevWsGateway afterInit, Port:${port}`);
×
45

×
46
    this.server.on('connection', this.handleConnection);
×
47

×
48
    this.server.on('error', this.handleError);
×
49

×
50
    this.server.on('close', this.handleClose);
×
51
  }
×
52

×
NEW
53
  async onModuleDestroy() {
×
54
    try {
×
NEW
55
      this.logger.log('Starting graceful shutdown...');
×
NEW
56
      this.server?.clients.forEach((client) => {
×
NEW
57
        client.terminate();
×
58
      });
×
NEW
59

×
NEW
60
      await Promise.all([
×
NEW
61
        new Promise((resolve) => {
×
NEW
62
          this.shareDb.close((err) => {
×
NEW
63
            if (err) {
×
NEW
64
              this.logger.error('ShareDb close error', err?.stack);
×
NEW
65
            } else {
×
NEW
66
              this.logger.log('ShareDb closed successfully');
×
NEW
67
            }
×
NEW
68
            resolve(null);
×
NEW
69
          });
×
NEW
70
        }),
×
NEW
71

×
NEW
72
        new Promise((resolve) => {
×
NEW
73
          this.server.close((err) => {
×
NEW
74
            if (err) {
×
NEW
75
              this.logger.error('DevWsGateway close error', err?.stack);
×
NEW
76
            } else {
×
NEW
77
              this.logger.log('WebSocket server closed successfully');
×
NEW
78
            }
×
NEW
79
            resolve(null);
×
NEW
80
          });
×
NEW
81
        }),
×
NEW
82
      ]);
×
NEW
83

×
NEW
84
      this.logger.log('Graceful had shutdown completed');
×
NEW
85
      process.exit(0);
×
86
    } catch (err) {
×
87
      this.logger.error('dev module close error: ' + (err as Error).message, (err as Error)?.stack);
×
88
    }
×
89
  }
×
90
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc