namirasoft-node 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,15 @@
1
1
  import express, { Router } from 'express';
2
2
  import { BaseDatabase } from './BaseDatabase';
3
3
  import { ILogger } from "namirasoft-log";
4
+ import { BaseApplicationLink } from './BaseApplicationLink';
4
5
  export declare abstract class BaseApplication<D extends BaseDatabase> {
5
6
  private title;
6
7
  private description;
8
+ private logo;
7
9
  private version;
10
+ private serverPath;
8
11
  private swaggerPath;
12
+ private links;
9
13
  app: express.Express;
10
14
  database: D;
11
15
  logger: ILogger;
@@ -13,10 +17,12 @@ export declare abstract class BaseApplication<D extends BaseDatabase> {
13
17
  protected abstract getLogger(): ILogger;
14
18
  protected abstract getRouter(): Router;
15
19
  protected abstract getPort(): number;
16
- constructor(title: string, description: string, version: string, swaggerPath: string);
20
+ constructor(title: string, description: string, logo: string, version: string, serverPath: string, swaggerPath?: string | null);
21
+ addLink(link: BaseApplicationLink): void;
17
22
  start(): void;
18
23
  protected startCrashHandler(): void;
19
24
  protected startDatabase(): void;
20
25
  protected startServer(): void;
21
26
  protected startSwagger(): void;
27
+ protected startHomePage(): void;
22
28
  }
@@ -15,21 +15,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.BaseApplication = void 0;
16
16
  const express_1 = __importDefault(require("express"));
17
17
  const cors_1 = __importDefault(require("cors"));
18
+ const fs_1 = __importDefault(require("fs"));
18
19
  const swagger_ui_express_1 = __importDefault(require("swagger-ui-express"));
19
20
  const swagger_jsdoc_1 = __importDefault(require("swagger-jsdoc"));
20
21
  class BaseApplication {
21
- constructor(title, description, version, swaggerPath) {
22
+ constructor(title, description, logo, version, serverPath, swaggerPath = null) {
23
+ this.links = [];
22
24
  this.title = title;
23
25
  this.description = description;
26
+ this.logo = logo;
24
27
  this.version = version;
25
- this.swaggerPath = swaggerPath;
28
+ this.serverPath = serverPath;
29
+ this.swaggerPath = swaggerPath !== null && swaggerPath !== void 0 ? swaggerPath : (serverPath + "/swagger");
26
30
  this.logger = this.getLogger();
27
31
  }
32
+ addLink(link) {
33
+ this.links.push(link);
34
+ }
28
35
  start() {
29
36
  this.startCrashHandler();
30
37
  this.startDatabase();
31
38
  this.startServer();
32
39
  this.startSwagger();
40
+ this.startHomePage();
33
41
  }
34
42
  startCrashHandler() {
35
43
  process.on('unhandledRejection', (reason) => {
@@ -85,11 +93,11 @@ class BaseApplication {
85
93
  // email: "accounts@namirasoft.com",
86
94
  // },
87
95
  },
88
- // servers: [
89
- // {
90
- // url: "http://localhost:3000",
91
- // },
92
- // ],
96
+ servers: [
97
+ {
98
+ url: this.serverPath,
99
+ },
100
+ ],
93
101
  },
94
102
  apis: ['./src/route/*.ts'],
95
103
  };
@@ -97,7 +105,35 @@ class BaseApplication {
97
105
  var options = {
98
106
  explorer: true
99
107
  };
100
- this.app.use(this.swaggerPath, swagger_ui_express_1.default.serve, swagger_ui_express_1.default.setup(swaggerSpec, options));
108
+ this.app.use(this.swaggerPath + "/", swagger_ui_express_1.default.serve, swagger_ui_express_1.default.setup(swaggerSpec, options));
109
+ }
110
+ startHomePage() {
111
+ this.app.get('/', (_, res) => {
112
+ fs_1.default.readFile('./public/index.html', 'utf8', (err, data) => {
113
+ if (err)
114
+ return res.status(500).send('Error reading HTML file');
115
+ data = data.replace(/\@title/gm, this.title);
116
+ data = data.replace(/\@description/gm, this.description);
117
+ data = data.replace(/\@logo/gm, this.logo);
118
+ let match = /<\@row>(.*)<\/\@row>/gm.exec(data);
119
+ if (match) {
120
+ let rows = [];
121
+ this.links.forEach(link => {
122
+ if (match) {
123
+ let row = match[1];
124
+ row = row.replace(/\@row_title/gm, link.title);
125
+ row = row.replace(/\@row_description/gm, link.description);
126
+ row = row.replace(/\@row_image/gm, link.image);
127
+ row = row.replace(/\@row_link/gm, link.link);
128
+ rows.push(row);
129
+ }
130
+ });
131
+ data.replace(match[0], rows.join(" "));
132
+ }
133
+ res.send(data);
134
+ return;
135
+ });
136
+ });
101
137
  }
102
138
  }
103
139
  exports.BaseApplication = BaseApplication;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseApplication.js","sourceRoot":"","sources":["../src/BaseApplication.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseApplication.js","sourceRoot":"","sources":["../src/BaseApplication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type BaseApplicationLink = {
2
+ title: string;
3
+ description: string;
4
+ link: string;
5
+ image: string;
6
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=BaseApplicationLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseApplicationLink.js","sourceRoot":"","sources":["../src/BaseApplicationLink.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "namirasoft-node",
3
3
  "description": "Namira Software Corporation Node Package",
4
- "version": "1.0.1",
4
+ "version": "1.0.2",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "scripts": {},
@@ -1,16 +1,21 @@
1
1
  import express, { Router } from 'express';
2
2
  import cors from "cors";
3
+ import fs from "fs";
3
4
  import swaggerUi from 'swagger-ui-express';
4
5
  import swaggerJSDoc from 'swagger-jsdoc';
5
6
  import { BaseDatabase } from './BaseDatabase';
6
7
  import { ILogger } from "namirasoft-log";
8
+ import { BaseApplicationLink } from './BaseApplicationLink';
7
9
 
8
10
  export abstract class BaseApplication<D extends BaseDatabase>
9
11
  {
10
12
  private title: string;
11
13
  private description: string;
14
+ private logo: string;
12
15
  private version: string;
16
+ private serverPath: string;
13
17
  private swaggerPath: string;
18
+ private links: BaseApplicationLink[] = [];
14
19
  public app!: express.Express;
15
20
  public database!: D;
16
21
  public logger: ILogger;
@@ -18,20 +23,27 @@ export abstract class BaseApplication<D extends BaseDatabase>
18
23
  protected abstract getLogger(): ILogger;
19
24
  protected abstract getRouter(): Router;
20
25
  protected abstract getPort(): number;
21
- constructor(title: string, description: string, version: string, swaggerPath: string)
26
+ constructor(title: string, description: string, logo: string, version: string, serverPath: string, swaggerPath: string | null = null)
22
27
  {
23
28
  this.title = title;
24
29
  this.description = description;
30
+ this.logo = logo;
25
31
  this.version = version;
26
- this.swaggerPath = swaggerPath;
32
+ this.serverPath = serverPath;
33
+ this.swaggerPath = swaggerPath ?? (serverPath + "/swagger");
27
34
  this.logger = this.getLogger();
28
35
  }
36
+ addLink(link: BaseApplicationLink)
37
+ {
38
+ this.links.push(link);
39
+ }
29
40
  start()
30
41
  {
31
42
  this.startCrashHandler();
32
43
  this.startDatabase();
33
44
  this.startServer();
34
45
  this.startSwagger();
46
+ this.startHomePage();
35
47
  }
36
48
  protected startCrashHandler(): void
37
49
  {
@@ -95,11 +107,11 @@ export abstract class BaseApplication<D extends BaseDatabase>
95
107
  // email: "accounts@namirasoft.com",
96
108
  // },
97
109
  },
98
- // servers: [
99
- // {
100
- // url: "http://localhost:3000",
101
- // },
102
- // ],
110
+ servers: [
111
+ {
112
+ url: this.serverPath,
113
+ },
114
+ ],
103
115
  },
104
116
  apis: ['./src/route/*.ts'],
105
117
  };
@@ -107,6 +119,41 @@ export abstract class BaseApplication<D extends BaseDatabase>
107
119
  var options = {
108
120
  explorer: true
109
121
  };
110
- this.app.use(this.swaggerPath, swaggerUi.serve, swaggerUi.setup(swaggerSpec, options));
122
+ this.app.use(this.swaggerPath + "/", swaggerUi.serve, swaggerUi.setup(swaggerSpec, options));
123
+ }
124
+ protected startHomePage(): void
125
+ {
126
+ this.app.get('/', (_, res) =>
127
+ {
128
+ fs.readFile('./public/index.html', 'utf8', (err: any, data: string) =>
129
+ {
130
+ if (err)
131
+ return res.status(500).send('Error reading HTML file');
132
+
133
+ data = data.replace(/\@title/gm, this.title);
134
+ data = data.replace(/\@description/gm, this.description);
135
+ data = data.replace(/\@logo/gm, this.logo);
136
+ let match = /<\@row>(.*)<\/\@row>/gm.exec(data);
137
+ if (match)
138
+ {
139
+ let rows: string[] = [];
140
+ this.links.forEach(link =>
141
+ {
142
+ if (match)
143
+ {
144
+ let row = match[1];
145
+ row = row.replace(/\@row_title/gm, link.title);
146
+ row = row.replace(/\@row_description/gm, link.description);
147
+ row = row.replace(/\@row_image/gm, link.image);
148
+ row = row.replace(/\@row_link/gm, link.link);
149
+ rows.push(row);
150
+ }
151
+ });
152
+ data.replace(match[0], rows.join(" "));
153
+ }
154
+ res.send(data);
155
+ return;
156
+ });
157
+ });
111
158
  }
112
159
  }
@@ -0,0 +1,7 @@
1
+ export type BaseApplicationLink =
2
+ {
3
+ title: string;
4
+ description: string;
5
+ link: string;
6
+ image: string;
7
+ };