@webtypen/webframez-core 0.3.11 → 0.3.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/dev/app.ts CHANGED
@@ -6,6 +6,7 @@ import { BaseKernelWeb } from "../src/BaseKernelWeb";
6
6
  import { Route } from "../src/Router/Route";
7
7
  import { Request } from "../src/Router/Request";
8
8
  import { Response } from "../src/Router/Response";
9
+ import { MODULES } from "./modules";
9
10
 
10
11
  class Kernel extends BaseKernelWeb {
11
12
  static controller: { [key: string]: any } = {};
@@ -21,7 +22,14 @@ app.boot({
21
22
  },
22
23
  port: process.env.PORT ? process.env.PORT : 3000,
23
24
  basename: process.env.BASENAME ? process.env.BASENAME : null,
25
+ modules: MODULES,
24
26
  routesFunction: () => {
27
+ Route.get("/status", (req: Request, res: Response) => {
28
+ res.send({
29
+ message: "Seems to run ;)",
30
+ });
31
+ });
32
+
25
33
  Route.group({ prefix: "/main", middleware: [] }, () => {
26
34
  Route.group({ prefix: "/test", middleware: [] }, () => {
27
35
  Route.get("/:test/details", (req: Request, res: Response) => {
@@ -0,0 +1,3 @@
1
+ import { TestModuleProvider } from "./test-module/TestModuleProvider";
2
+
3
+ export const MODULES = [TestModuleProvider];
@@ -0,0 +1,8 @@
1
+ import { Request } from "../../../../src/Router/Request";
2
+ import { Response } from "../../../../src/Router/Response";
3
+
4
+ export class TestModuleController {
5
+ async test(req: Request, res: Response) {
6
+ res.send({ status: "success", message: "TestModuleController looks great ..." });
7
+ }
8
+ }
@@ -0,0 +1,30 @@
1
+ import { ModuleProvider } from "../../../src/Modules/ModuleProvider";
2
+ import { Request } from "../../../src/Router/Request";
3
+ import { Response } from "../../../src/Router/Response";
4
+ import { Route } from "../../../src/Router/Route";
5
+ import { TestModuleController } from "./Controller/TestModuleController";
6
+
7
+ export class TestModuleProvider extends ModuleProvider {
8
+ static key = "test-module";
9
+
10
+ controller = {
11
+ TestModuleController: TestModuleController,
12
+ };
13
+
14
+ routes() {
15
+ Route.group({ middleware: [] }, () => {
16
+ Route.get("/", (req: Request, res: Response) => {
17
+ res.send({
18
+ module: "TestModule",
19
+ status: "active",
20
+ });
21
+ });
22
+
23
+ Route.get("/testmodule", "TestModuleController@test");
24
+ });
25
+ }
26
+
27
+ boot() {
28
+ console.log("On Booot");
29
+ }
30
+ }
@@ -69,10 +69,7 @@ export declare class DataBuilder {
69
69
  data?: undefined;
70
70
  } | {
71
71
  status: string;
72
- data: {
73
- _id: any;
74
- redirect: any;
75
- };
72
+ data: any;
76
73
  errors?: undefined;
77
74
  }>;
78
75
  delete(db: any, req: any): Promise<{
@@ -366,9 +366,13 @@ class DataBuilder {
366
366
  };
367
367
  }
368
368
  if (type.unmapped) {
369
+ const appendData = {};
369
370
  try {
370
371
  if (typeof type.schema.beforeSave === "function") {
371
- yield type.schema.beforeSave(req.body.data, req);
372
+ const result = yield type.schema.beforeSave(req.body.data, req);
373
+ if (result && result.__append_data) {
374
+ Object.assign(appendData, result.__append_data);
375
+ }
372
376
  }
373
377
  }
374
378
  catch (e) {
@@ -376,7 +380,10 @@ class DataBuilder {
376
380
  }
377
381
  try {
378
382
  if (typeof type.schema.afterSave === "function") {
379
- yield type.schema.afterSave(req.body.data, req);
383
+ const result = yield type.schema.afterSave(req.body.data, req);
384
+ if (result && result.__append_data) {
385
+ Object.assign(appendData, result.__append_data);
386
+ }
380
387
  }
381
388
  }
382
389
  catch (e) {
@@ -389,10 +396,7 @@ class DataBuilder {
389
396
  }
390
397
  return {
391
398
  status: "success",
392
- data: {
393
- _id: req.body.data._id ? req.body.data._id : "__unmapped",
394
- redirect: redirect,
395
- },
399
+ data: Object.assign({ _id: req.body.data._id ? req.body.data._id : "__unmapped", redirect: redirect }, appendData),
396
400
  };
397
401
  }
398
402
  if (!req.body.__builder_id || req.body.__builder_id.toString().trim() === "") {
@@ -0,0 +1,12 @@
1
+ export declare class ModuleProvider {
2
+ static key: string;
3
+ controller: {
4
+ [key: string]: any;
5
+ };
6
+ middleware: {
7
+ [key: string]: any;
8
+ };
9
+ boot(): void;
10
+ routes(): void;
11
+ bootByRouter(): void;
12
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModuleProvider = void 0;
4
+ class ModuleProvider {
5
+ constructor() {
6
+ this.controller = {};
7
+ this.middleware = {};
8
+ }
9
+ boot() { }
10
+ routes() { }
11
+ bootByRouter() {
12
+ this.boot();
13
+ this.routes();
14
+ }
15
+ }
16
+ exports.ModuleProvider = ModuleProvider;
17
+ ModuleProvider.key = "example-module";
@@ -0,0 +1,6 @@
1
+ export declare class ModulesLoader {
2
+ private loadedModules;
3
+ load(modules: any[]): void;
4
+ initRoutes(): void;
5
+ loadKernel(kernel: any): void;
6
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModulesLoader = void 0;
4
+ class ModulesLoader {
5
+ constructor() {
6
+ this.loadedModules = {};
7
+ }
8
+ load(modules) {
9
+ for (let modClass of modules) {
10
+ if (!modClass || !modClass.key || modClass.disabled === true)
11
+ continue;
12
+ this.loadedModules[modClass.key] = new modClass();
13
+ this.loadedModules[modClass.key].boot();
14
+ }
15
+ }
16
+ initRoutes() {
17
+ for (let key in this.loadedModules) {
18
+ this.loadedModules[key].routes();
19
+ }
20
+ }
21
+ loadKernel(kernel) {
22
+ if (!kernel)
23
+ return;
24
+ for (let key in this.loadedModules) {
25
+ if (this.loadedModules[key].controller) {
26
+ for (let ctrlKey in this.loadedModules[key].controller) {
27
+ kernel.controller[ctrlKey] = this.loadedModules[key].controller[ctrlKey];
28
+ }
29
+ for (let mwKey in this.loadedModules[key].middleware) {
30
+ kernel.middleware[mwKey] = this.loadedModules[key].middleware[mwKey];
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ exports.ModulesLoader = ModulesLoader;
@@ -191,10 +191,12 @@ class RouterFacade {
191
191
  else {
192
192
  for (const route in routes) {
193
193
  const routeObj = routes[route];
194
- const regex = routeObj.path
195
- .replace(/\/:\w+\?/g, "(?:/([^/]+))?")
196
- .replace(/\/:\w+/g, "/([^/]+)")
197
- .replace(/\//g, "\\/");
194
+ const regex = "^" +
195
+ routeObj.path
196
+ .replace(/\/:\w+\?/g, "(?:/([^/]+))?")
197
+ .replace(/\/:\w+/g, "/([^/]+)")
198
+ .replace(/\//g, "\\/") +
199
+ "$";
198
200
  const match = url.match(regex);
199
201
  if (match) {
200
202
  if (request) {
@@ -1,7 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  import http from "http";
3
+ import { ModulesLoader } from "./Modules/ModulesLoader";
3
4
  export declare class WebApplication {
4
5
  private server;
6
+ modulesLoader: ModulesLoader | null;
5
7
  /**
6
8
  * Init the routes and start the http-server
7
9
  */
@@ -9,7 +9,11 @@ const Config_1 = require("./Config");
9
9
  const Router_1 = require("./Router/Router");
10
10
  const QueueJobsRegisty_1 = require("./Queue/QueueJobsRegisty");
11
11
  const DatatableRegistry_1 = require("./Datatable/DatatableRegistry");
12
+ const ModulesLoader_1 = require("./Modules/ModulesLoader");
12
13
  class WebApplication {
14
+ constructor() {
15
+ this.modulesLoader = null;
16
+ }
13
17
  /**
14
18
  * Init the routes and start the http-server
15
19
  */
@@ -19,6 +23,11 @@ class WebApplication {
19
23
  Config_1.Config.register(key, options.config[key]);
20
24
  }
21
25
  }
26
+ this.modulesLoader = new ModulesLoader_1.ModulesLoader();
27
+ this.modulesLoader.load(options && options.modules ? options.modules : []);
28
+ if (options && options.kernel) {
29
+ this.modulesLoader.loadKernel(options.kernel);
30
+ }
22
31
  Router_1.Router.init({
23
32
  mode: options && options.mode ? options.mode : null,
24
33
  kernel: options && options.kernel ? options.kernel : null,
@@ -26,6 +35,7 @@ class WebApplication {
26
35
  routesFunction: options && options.routesFunction ? options.routesFunction : null,
27
36
  tempDir: options && options.tempDir ? options.tempDir : null,
28
37
  });
38
+ this.modulesLoader.initRoutes();
29
39
  if (options && options.datatables) {
30
40
  DatatableRegistry_1.DatatableRegistry.registerMany(options.datatables);
31
41
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webtypen/webframez-core",
3
- "version": "0.3.11",
3
+ "version": "0.3.13",
4
4
  "description": "The core package of the typescript based webframez (web-framework) by webtypen.de",
5
5
  "homepage": "https://webtypen.de/",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  import { Controller } from "./Controller/Controller";
2
2
 
3
3
  export class BaseKernelWeb {
4
- static controller: { [key: string]: Controller } = {};
5
- static middleware: { [key: string]: any };
4
+ static controller: { [key: string]: Controller } = {};
5
+ static middleware: { [key: string]: any };
6
6
  }
@@ -449,9 +449,13 @@ export class DataBuilder {
449
449
  }
450
450
 
451
451
  if (type.unmapped) {
452
+ const appendData: any = {};
452
453
  try {
453
454
  if (typeof type.schema.beforeSave === "function") {
454
- await type.schema.beforeSave(req.body.data, req);
455
+ const result = await type.schema.beforeSave(req.body.data, req);
456
+ if (result && result.__append_data) {
457
+ Object.assign(appendData, result.__append_data);
458
+ }
455
459
  }
456
460
  } catch (e: any) {
457
461
  throw e;
@@ -459,7 +463,10 @@ export class DataBuilder {
459
463
 
460
464
  try {
461
465
  if (typeof type.schema.afterSave === "function") {
462
- await type.schema.afterSave(req.body.data, req);
466
+ const result = await type.schema.afterSave(req.body.data, req);
467
+ if (result && result.__append_data) {
468
+ Object.assign(appendData, result.__append_data);
469
+ }
463
470
  }
464
471
  } catch (e: any) {
465
472
  throw e;
@@ -476,6 +483,7 @@ export class DataBuilder {
476
483
  data: {
477
484
  _id: req.body.data._id ? req.body.data._id : "__unmapped",
478
485
  redirect: redirect,
486
+ ...appendData,
479
487
  },
480
488
  };
481
489
  }
@@ -0,0 +1,15 @@
1
+ export class ModuleProvider {
2
+ static key: string = "example-module";
3
+
4
+ controller: { [key: string]: any } = {};
5
+ middleware: { [key: string]: any } = {};
6
+
7
+ boot() {}
8
+
9
+ routes() {}
10
+
11
+ bootByRouter() {
12
+ this.boot();
13
+ this.routes();
14
+ }
15
+ }
@@ -0,0 +1,34 @@
1
+ export class ModulesLoader {
2
+ private loadedModules: { [key: string]: any } = {};
3
+
4
+ load(modules: any[]) {
5
+ for (let modClass of modules) {
6
+ if (!modClass || !modClass.key || modClass.disabled === true) continue;
7
+
8
+ this.loadedModules[modClass.key] = new modClass();
9
+ this.loadedModules[modClass.key].boot();
10
+ }
11
+ }
12
+
13
+ initRoutes() {
14
+ for (let key in this.loadedModules) {
15
+ this.loadedModules[key].routes();
16
+ }
17
+ }
18
+
19
+ loadKernel(kernel: any) {
20
+ if (!kernel) return;
21
+
22
+ for (let key in this.loadedModules) {
23
+ if (this.loadedModules[key].controller) {
24
+ for (let ctrlKey in this.loadedModules[key].controller) {
25
+ kernel.controller[ctrlKey] = this.loadedModules[key].controller[ctrlKey];
26
+ }
27
+
28
+ for (let mwKey in this.loadedModules[key].middleware) {
29
+ kernel.middleware[mwKey] = this.loadedModules[key].middleware[mwKey];
30
+ }
31
+ }
32
+ }
33
+ }
34
+ }
@@ -223,10 +223,13 @@ class RouterFacade {
223
223
  } else {
224
224
  for (const route in routes) {
225
225
  const routeObj = routes[route];
226
- const regex = routeObj.path
227
- .replace(/\/:\w+\?/g, "(?:/([^/]+))?")
228
- .replace(/\/:\w+/g, "/([^/]+)")
229
- .replace(/\//g, "\\/");
226
+ const regex =
227
+ "^" +
228
+ routeObj.path
229
+ .replace(/\/:\w+\?/g, "(?:/([^/]+))?")
230
+ .replace(/\/:\w+/g, "/([^/]+)")
231
+ .replace(/\//g, "\\/") +
232
+ "$";
230
233
  const match = url.match(regex);
231
234
 
232
235
  if (match) {
@@ -3,9 +3,11 @@ import { Config } from "./Config";
3
3
  import { Router } from "./Router/Router";
4
4
  import { QueueJobsRegisty } from "./Queue/QueueJobsRegisty";
5
5
  import { DatatableRegistry } from "./Datatable/DatatableRegistry";
6
+ import { ModulesLoader } from "./Modules/ModulesLoader";
6
7
 
7
8
  export class WebApplication {
8
9
  private server!: Server;
10
+ modulesLoader: ModulesLoader | null = null;
9
11
 
10
12
  /**
11
13
  * Init the routes and start the http-server
@@ -17,6 +19,13 @@ export class WebApplication {
17
19
  }
18
20
  }
19
21
 
22
+ this.modulesLoader = new ModulesLoader();
23
+ this.modulesLoader.load(options && options.modules ? options.modules : []);
24
+
25
+ if (options && options.kernel) {
26
+ this.modulesLoader.loadKernel(options.kernel);
27
+ }
28
+
20
29
  Router.init({
21
30
  mode: options && options.mode ? options.mode : null,
22
31
  kernel: options && options.kernel ? options.kernel : null,
@@ -25,6 +34,8 @@ export class WebApplication {
25
34
  tempDir: options && options.tempDir ? options.tempDir : null,
26
35
  });
27
36
 
37
+ this.modulesLoader.initRoutes();
38
+
28
39
  if (options && options.datatables) {
29
40
  DatatableRegistry.registerMany(options.datatables);
30
41
  }