namirasoft-node 1.2.12 → 1.2.13
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.
- package/dist/BaseApplication.d.ts +13 -10
- package/dist/BaseApplication.js +78 -21
- package/dist/BaseApplication.js.map +1 -1
- package/package.json +1 -1
- package/src/BaseApplication.ts +91 -34
|
@@ -2,28 +2,27 @@ import express, { Router } from 'express';
|
|
|
2
2
|
import { BaseDatabase } from './BaseDatabase';
|
|
3
3
|
import { ILogger } from "namirasoft-log";
|
|
4
4
|
import { BaseApplicationLink } from './BaseApplicationLink';
|
|
5
|
+
import { PackageService } from 'namirasoft-core';
|
|
5
6
|
import { ApplicationSchema } from 'namirasoft-schema';
|
|
6
7
|
export declare abstract class BaseApplication<D extends BaseDatabase> {
|
|
7
|
-
private
|
|
8
|
+
private linkLoader?;
|
|
9
|
+
private links;
|
|
10
|
+
protected pkg: PackageService;
|
|
11
|
+
protected title: string;
|
|
8
12
|
protected description: string;
|
|
9
13
|
protected logo: string;
|
|
10
14
|
protected version: string;
|
|
11
15
|
protected base_path: string;
|
|
12
16
|
protected swagger_path: string;
|
|
13
17
|
protected swagger_dir: string;
|
|
14
|
-
private linkLoader?;
|
|
15
|
-
private links;
|
|
16
18
|
express: express.Express;
|
|
17
19
|
database: D;
|
|
18
20
|
logger: ILogger;
|
|
21
|
+
constructor(base_path: string, swagger_path?: string | null);
|
|
19
22
|
protected abstract getDatabase(): D;
|
|
20
23
|
protected abstract getLogger(): ILogger;
|
|
21
|
-
protected abstract getRouter(): Promise<Router>;
|
|
22
24
|
protected abstract getPort(): number;
|
|
23
|
-
|
|
24
|
-
setLinkLoader(linkLoader: () => Promise<void>): void;
|
|
25
|
-
addLink(link: BaseApplicationLink): void;
|
|
26
|
-
addSwaggerLink(): void;
|
|
25
|
+
protected abstract getControllers(): any[];
|
|
27
26
|
start(): Promise<void>;
|
|
28
27
|
protected startCrashHandler(): Promise<void>;
|
|
29
28
|
protected startDatabase(): Promise<void>;
|
|
@@ -31,7 +30,11 @@ export declare abstract class BaseApplication<D extends BaseDatabase> {
|
|
|
31
30
|
protected createSwagger(): Promise<void>;
|
|
32
31
|
protected startSwagger(): Promise<void>;
|
|
33
32
|
protected startHomePage(): Promise<void>;
|
|
33
|
+
protected startOthers(): Promise<void>;
|
|
34
|
+
protected getRouter(): Promise<Router>;
|
|
34
35
|
protected saveSchema(): Promise<void>;
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
getSchema(): Promise<ApplicationSchema>;
|
|
37
|
+
setLinkLoader(linkLoader: () => Promise<void>): void;
|
|
38
|
+
addLink(link: BaseApplicationLink): void;
|
|
39
|
+
addSwaggerLink(): void;
|
|
37
40
|
}
|
package/dist/BaseApplication.js
CHANGED
|
@@ -45,15 +45,16 @@ const swagger_jsdoc_1 = __importDefault(require("swagger-jsdoc"));
|
|
|
45
45
|
const namirasoft_core_1 = require("namirasoft-core");
|
|
46
46
|
const namirasoft_schema_1 = require("namirasoft-schema");
|
|
47
47
|
const EnvService_1 = require("./EnvService");
|
|
48
|
+
const BaseController_1 = require("./BaseController");
|
|
48
49
|
class BaseApplication {
|
|
49
50
|
constructor(base_path, swagger_path = null) {
|
|
50
|
-
var _a, _b, _c, _d;
|
|
51
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
51
52
|
this.links = [];
|
|
52
|
-
|
|
53
|
-
this.title = (_a =
|
|
54
|
-
this.description = (
|
|
55
|
-
this.logo = (
|
|
56
|
-
this.version = (
|
|
53
|
+
this.pkg = namirasoft_core_1.PackageService.getMain();
|
|
54
|
+
this.title = (_b = (_a = this.pkg) === null || _a === void 0 ? void 0 : _a.getTitle()) !== null && _b !== void 0 ? _b : "";
|
|
55
|
+
this.description = (_d = (_c = this.pkg) === null || _c === void 0 ? void 0 : _c.getDescription()) !== null && _d !== void 0 ? _d : "";
|
|
56
|
+
this.logo = (_f = (_e = this.pkg) === null || _e === void 0 ? void 0 : _e.getLogo()) !== null && _f !== void 0 ? _f : "";
|
|
57
|
+
this.version = (_h = (_g = this.pkg) === null || _g === void 0 ? void 0 : _g.getVersion()) !== null && _h !== void 0 ? _h : "";
|
|
57
58
|
this.base_path = base_path;
|
|
58
59
|
this.swagger_path = swagger_path !== null && swagger_path !== void 0 ? swagger_path : (base_path + "/swagger");
|
|
59
60
|
this.swagger_dir = "./swagger";
|
|
@@ -61,20 +62,7 @@ class BaseApplication {
|
|
|
61
62
|
this.addLink = this.addLink.bind(this);
|
|
62
63
|
this.addSwaggerLink = this.addSwaggerLink.bind(this);
|
|
63
64
|
}
|
|
64
|
-
|
|
65
|
-
this.linkLoader = linkLoader;
|
|
66
|
-
}
|
|
67
|
-
addLink(link) {
|
|
68
|
-
this.links.push(link);
|
|
69
|
-
}
|
|
70
|
-
addSwaggerLink() {
|
|
71
|
-
this.addLink({
|
|
72
|
-
name: "Swagger",
|
|
73
|
-
url: this.swagger_path + "/",
|
|
74
|
-
logo: "https://static.namirasoft.com/logo/swagger/base.png",
|
|
75
|
-
description: this.description + " Swagger"
|
|
76
|
-
});
|
|
77
|
-
}
|
|
65
|
+
// start
|
|
78
66
|
start() {
|
|
79
67
|
return __awaiter(this, void 0, void 0, function* () {
|
|
80
68
|
yield this.startCrashHandler();
|
|
@@ -87,7 +75,7 @@ class BaseApplication {
|
|
|
87
75
|
yield this.startSwagger();
|
|
88
76
|
yield this.startHomePage();
|
|
89
77
|
}
|
|
90
|
-
yield this.
|
|
78
|
+
yield this.startOthers();
|
|
91
79
|
}
|
|
92
80
|
else {
|
|
93
81
|
yield this.saveSchema();
|
|
@@ -228,12 +216,81 @@ class BaseApplication {
|
|
|
228
216
|
});
|
|
229
217
|
});
|
|
230
218
|
}
|
|
219
|
+
startOthers() {
|
|
220
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
221
|
+
}
|
|
222
|
+
getRouter() {
|
|
223
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
224
|
+
const router = express_1.default.Router({ mergeParams: true });
|
|
225
|
+
let controllers = this.getControllers();
|
|
226
|
+
for (let i = 0; i < controllers.length; i++) {
|
|
227
|
+
try {
|
|
228
|
+
const Template = controllers[i];
|
|
229
|
+
const template = new Template(this, null, null);
|
|
230
|
+
let info = template.getInfo();
|
|
231
|
+
let func = (req, res) => {
|
|
232
|
+
let controller = new Template(this, req, res);
|
|
233
|
+
controller.run();
|
|
234
|
+
};
|
|
235
|
+
let path = this.base_path + info.path;
|
|
236
|
+
let ps = yield template.getParametersSchema();
|
|
237
|
+
for (let p of ps)
|
|
238
|
+
path = path.replace(`{${p.name}}`, `:${p.name}`);
|
|
239
|
+
if (info.method == namirasoft_core_1.HTTPMethod.GET)
|
|
240
|
+
router.get(path, func);
|
|
241
|
+
else if (info.method == namirasoft_core_1.HTTPMethod.POST)
|
|
242
|
+
router.post(path, func);
|
|
243
|
+
else if (info.method == namirasoft_core_1.HTTPMethod.PUT)
|
|
244
|
+
router.put(path, func);
|
|
245
|
+
else if (info.method == namirasoft_core_1.HTTPMethod.DELETE)
|
|
246
|
+
router.delete(path, func);
|
|
247
|
+
else
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
this.logger.onCatchError(error);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return router;
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
// schema
|
|
231
258
|
saveSchema() {
|
|
232
259
|
return __awaiter(this, void 0, void 0, function* () {
|
|
233
260
|
let schema = yield this.getSchema();
|
|
234
261
|
schema.toFile("./application.schema");
|
|
235
262
|
});
|
|
236
263
|
}
|
|
264
|
+
getSchema() {
|
|
265
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
266
|
+
let schema = new namirasoft_schema_1.ApplicationSchema(this.pkg);
|
|
267
|
+
let controllers = this.getControllers();
|
|
268
|
+
for (let i = 0; i < controllers.length; i++) {
|
|
269
|
+
const Template = controllers[i];
|
|
270
|
+
const template = new Template(this, null, null);
|
|
271
|
+
template.database = this.database;
|
|
272
|
+
if (template instanceof BaseController_1.BaseController)
|
|
273
|
+
schema.controllers.push(yield template.getSchema());
|
|
274
|
+
}
|
|
275
|
+
schema.check();
|
|
276
|
+
return schema;
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// public
|
|
280
|
+
setLinkLoader(linkLoader) {
|
|
281
|
+
this.linkLoader = linkLoader;
|
|
282
|
+
}
|
|
283
|
+
addLink(link) {
|
|
284
|
+
this.links.push(link);
|
|
285
|
+
}
|
|
286
|
+
addSwaggerLink() {
|
|
287
|
+
this.addLink({
|
|
288
|
+
name: "Swagger",
|
|
289
|
+
url: this.swagger_path + "/",
|
|
290
|
+
logo: "https://static.namirasoft.com/logo/swagger/base.png",
|
|
291
|
+
description: this.description + " Swagger"
|
|
292
|
+
});
|
|
293
|
+
}
|
|
237
294
|
}
|
|
238
295
|
exports.BaseApplication = BaseApplication;
|
|
239
296
|
//# sourceMappingURL=BaseApplication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseApplication.js","sourceRoot":"","sources":["../src/BaseApplication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA0C;AAC1C,gDAAwB;AACxB,uCAAyB;AACzB,2CAA6B;AAC7B,4EAA2C;AAC3C,kEAAyC;AAIzC,
|
|
1
|
+
{"version":3,"file":"BaseApplication.js","sourceRoot":"","sources":["../src/BaseApplication.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/BaseApplication.ts
CHANGED
|
@@ -7,35 +7,33 @@ import swaggerJSDoc from 'swagger-jsdoc';
|
|
|
7
7
|
import { BaseDatabase } from './BaseDatabase';
|
|
8
8
|
import { ILogger } from "namirasoft-log";
|
|
9
9
|
import { BaseApplicationLink } from './BaseApplicationLink';
|
|
10
|
-
import { PackageService } from 'namirasoft-core';
|
|
11
|
-
import { ApplicationSchema, SwaggerApplicationBuilder } from 'namirasoft-schema';
|
|
10
|
+
import { HTTPMethod, PackageService } from 'namirasoft-core';
|
|
11
|
+
import { ApplicationSchema, BaseVariableSchema, SwaggerApplicationBuilder } from 'namirasoft-schema';
|
|
12
12
|
import { EnvService } from './EnvService';
|
|
13
|
+
import { BaseController } from './BaseController';
|
|
13
14
|
|
|
14
15
|
export abstract class BaseApplication<D extends BaseDatabase>
|
|
15
16
|
{
|
|
16
|
-
private
|
|
17
|
+
private linkLoader?: () => Promise<void>;
|
|
18
|
+
private links: BaseApplicationLink[] = [];
|
|
19
|
+
protected pkg: PackageService;
|
|
20
|
+
protected title: string;
|
|
17
21
|
protected description: string;
|
|
18
22
|
protected logo: string;
|
|
19
23
|
protected version: string;
|
|
20
24
|
protected base_path: string;
|
|
21
25
|
protected swagger_path: string;
|
|
22
26
|
protected swagger_dir: string;
|
|
23
|
-
private linkLoader?: () => Promise<void>;
|
|
24
|
-
private links: BaseApplicationLink[] = [];
|
|
25
27
|
public express!: express.Express;
|
|
26
28
|
public database!: D;
|
|
27
29
|
public logger: ILogger;
|
|
28
|
-
protected abstract getDatabase(): D;
|
|
29
|
-
protected abstract getLogger(): ILogger;
|
|
30
|
-
protected abstract getRouter(): Promise<Router>;
|
|
31
|
-
protected abstract getPort(): number;
|
|
32
30
|
constructor(base_path: string, swagger_path: string | null = null)
|
|
33
31
|
{
|
|
34
|
-
|
|
35
|
-
this.title =
|
|
36
|
-
this.description =
|
|
37
|
-
this.logo =
|
|
38
|
-
this.version =
|
|
32
|
+
this.pkg = PackageService.getMain();
|
|
33
|
+
this.title = this.pkg?.getTitle() ?? "";
|
|
34
|
+
this.description = this.pkg?.getDescription() ?? "";
|
|
35
|
+
this.logo = this.pkg?.getLogo() ?? "";
|
|
36
|
+
this.version = this.pkg?.getVersion() ?? "";
|
|
39
37
|
this.base_path = base_path;
|
|
40
38
|
this.swagger_path = swagger_path ?? (base_path + "/swagger");
|
|
41
39
|
this.swagger_dir = "./swagger";
|
|
@@ -43,23 +41,11 @@ export abstract class BaseApplication<D extends BaseDatabase>
|
|
|
43
41
|
this.addLink = this.addLink.bind(this);
|
|
44
42
|
this.addSwaggerLink = this.addSwaggerLink.bind(this);
|
|
45
43
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
{
|
|
52
|
-
this.links.push(link);
|
|
53
|
-
}
|
|
54
|
-
addSwaggerLink()
|
|
55
|
-
{
|
|
56
|
-
this.addLink({
|
|
57
|
-
name: "Swagger",
|
|
58
|
-
url: this.swagger_path + "/",
|
|
59
|
-
logo: "https://static.namirasoft.com/logo/swagger/base.png",
|
|
60
|
-
description: this.description + " Swagger"
|
|
61
|
-
});
|
|
62
|
-
}
|
|
44
|
+
protected abstract getDatabase(): D;
|
|
45
|
+
protected abstract getLogger(): ILogger;
|
|
46
|
+
protected abstract getPort(): number;
|
|
47
|
+
protected abstract getControllers(): any[];
|
|
48
|
+
// start
|
|
63
49
|
async start()
|
|
64
50
|
{
|
|
65
51
|
await this.startCrashHandler();
|
|
@@ -74,7 +60,7 @@ export abstract class BaseApplication<D extends BaseDatabase>
|
|
|
74
60
|
await this.startSwagger();
|
|
75
61
|
await this.startHomePage();
|
|
76
62
|
}
|
|
77
|
-
await this.
|
|
63
|
+
await this.startOthers();
|
|
78
64
|
}
|
|
79
65
|
else
|
|
80
66
|
{
|
|
@@ -224,11 +210,82 @@ export abstract class BaseApplication<D extends BaseDatabase>
|
|
|
224
210
|
});
|
|
225
211
|
});
|
|
226
212
|
}
|
|
213
|
+
protected async startOthers(): Promise<void>
|
|
214
|
+
{ }
|
|
215
|
+
protected async getRouter(): Promise<Router>
|
|
216
|
+
{
|
|
217
|
+
const router = express.Router({ mergeParams: true });
|
|
218
|
+
let controllers = this.getControllers();
|
|
219
|
+
for (let i = 0; i < controllers.length; i++)
|
|
220
|
+
{
|
|
221
|
+
try
|
|
222
|
+
{
|
|
223
|
+
const Template = controllers[i] as any;
|
|
224
|
+
const template = new Template(this, null, null);
|
|
225
|
+
let info = template.getInfo();
|
|
226
|
+
let func = (req: express.Request, res: express.Response) =>
|
|
227
|
+
{
|
|
228
|
+
let controller = new Template(this, req, res);
|
|
229
|
+
controller.run();
|
|
230
|
+
};
|
|
231
|
+
let path = this.base_path + info.path;
|
|
232
|
+
let ps: BaseVariableSchema[] = await template.getParametersSchema();
|
|
233
|
+
for (let p of ps)
|
|
234
|
+
path = path.replace(`{${p.name}}`, `:${p.name}`);
|
|
235
|
+
if (info.method == HTTPMethod.GET)
|
|
236
|
+
router.get(path, func);
|
|
237
|
+
else if (info.method == HTTPMethod.POST)
|
|
238
|
+
router.post(path, func);
|
|
239
|
+
else if (info.method == HTTPMethod.PUT)
|
|
240
|
+
router.put(path, func);
|
|
241
|
+
else if (info.method == HTTPMethod.DELETE)
|
|
242
|
+
router.delete(path, func);
|
|
243
|
+
else
|
|
244
|
+
break;
|
|
245
|
+
} catch (error)
|
|
246
|
+
{
|
|
247
|
+
this.logger.onCatchError(error);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return router;
|
|
251
|
+
}
|
|
252
|
+
// schema
|
|
227
253
|
protected async saveSchema()
|
|
228
254
|
{
|
|
229
255
|
let schema = await this.getSchema();
|
|
230
256
|
schema.toFile("./application.schema");
|
|
231
257
|
}
|
|
232
|
-
|
|
233
|
-
|
|
258
|
+
async getSchema(): Promise<ApplicationSchema>
|
|
259
|
+
{
|
|
260
|
+
let schema = new ApplicationSchema(this.pkg);
|
|
261
|
+
let controllers = this.getControllers();
|
|
262
|
+
for (let i = 0; i < controllers.length; i++)
|
|
263
|
+
{
|
|
264
|
+
const Template = controllers[i] as any;
|
|
265
|
+
const template = new Template(this, null, null);
|
|
266
|
+
template.database = this.database;
|
|
267
|
+
if (template instanceof BaseController)
|
|
268
|
+
schema.controllers.push(await template.getSchema());
|
|
269
|
+
}
|
|
270
|
+
schema.check();
|
|
271
|
+
return schema;
|
|
272
|
+
}
|
|
273
|
+
// public
|
|
274
|
+
setLinkLoader(linkLoader: () => Promise<void>)
|
|
275
|
+
{
|
|
276
|
+
this.linkLoader = linkLoader;
|
|
277
|
+
}
|
|
278
|
+
addLink(link: BaseApplicationLink)
|
|
279
|
+
{
|
|
280
|
+
this.links.push(link);
|
|
281
|
+
}
|
|
282
|
+
addSwaggerLink()
|
|
283
|
+
{
|
|
284
|
+
this.addLink({
|
|
285
|
+
name: "Swagger",
|
|
286
|
+
url: this.swagger_path + "/",
|
|
287
|
+
logo: "https://static.namirasoft.com/logo/swagger/base.png",
|
|
288
|
+
description: this.description + " Swagger"
|
|
289
|
+
});
|
|
290
|
+
}
|
|
234
291
|
}
|