From 29355d95d061d5cd858e8ad47fed8e2731eb321d Mon Sep 17 00:00:00 2001 From: Valentin Duricu Date: Mon, 14 May 2018 17:10:30 +0300 Subject: [PATCH 1/4] Version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4607a13..1ae1665 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "puzzle-framework-lite", - "version": "1.0.1", + "version": "1.1.0", "description": "A lite modular framework for micro applications/services.", "main": "src/server.js", "scripts": { From 6f13a6bcdfeaa0324487d988a629a5612bceaeb9 Mon Sep 17 00:00:00 2001 From: Valentin Duricu Date: Mon, 14 May 2018 17:19:31 +0300 Subject: [PATCH 2/4] Module bundler --- src/utils/bundle.js | 15 +++++++++++++++ src/utils/index.js | 7 +++++++ 2 files changed, 22 insertions(+) create mode 100644 src/utils/bundle.js create mode 100644 src/utils/index.js diff --git a/src/utils/bundle.js b/src/utils/bundle.js new file mode 100644 index 0000000..eeebc15 --- /dev/null +++ b/src/utils/bundle.js @@ -0,0 +1,15 @@ +"use strict"; + +/** + * To be used when you need to bundle multiple modules in a + * bigger module. + * + * @memberOf {utils} + * @alias {bundle} + * + * @param {string} moduleName The name of the module. + * @param {Object} moduleClass The module that needs to be bundled. + */ +module.exports = (moduleName, moduleClass) => { + puzzle.modules.register(moduleName, new moduleClass()); +}; diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..bf39760 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,7 @@ +"use strict"; + +/** + * Utils that provide some ways to extend the framework. + * + * @namespace utils + */ From dcfe0efc20a44fa64f45f116773bcf1b2509eee8 Mon Sep 17 00:00:00 2001 From: Valentin Duricu Date: Sat, 26 May 2018 19:12:13 +0300 Subject: [PATCH 3/4] Bugfixes, enhancements for the bigger Puzzle Framework --- .eslintrc | 2 -- src/core/PEngine.js | 40 +++++++++++++++++++++--------- src/middleware/ResponseHelper.js | 4 +-- src/puzzle/Log.js | 42 +++++++++++++++++--------------- src/puzzle/ServerBootstrap.js | 1 + src/puzzle/index.js | 10 ++++++++ 6 files changed, 65 insertions(+), 34 deletions(-) diff --git a/.eslintrc b/.eslintrc index c03c5be..c78957f 100644 --- a/.eslintrc +++ b/.eslintrc @@ -24,8 +24,6 @@ "chai-expect/terminating-properties": 1 }, "globals": { - "engine": true, - "pUtils": true, "puzzle": true }, "env": { diff --git a/src/core/PEngine.js b/src/core/PEngine.js index 5139d60..e8c1b55 100644 --- a/src/core/PEngine.js +++ b/src/core/PEngine.js @@ -32,6 +32,15 @@ class PEngine extends PObject { this._init(); } + /** + * Is the lite version of the framework used? + * + * @return {boolean} + */ + get lite() { + return global.puzzleLight; + } + /** * Getter for engine version. * @@ -40,6 +49,14 @@ class PEngine extends PObject { get version() { return this._version; } + /** + * Setter for engine version. + * + * @param {*} packageJson The frameworks package.json file + */ + set version(packageJson) { + this._version = new PVersion(packageJson.version); + } /** * Getter for application information. @@ -94,6 +111,15 @@ class PEngine extends PObject { null; } + /** + * Sets the logger instance. + * + * @param {object} logger The logger object. + */ + set log(logger) { + this._logger = logger; + } + /** * Returns the log level used by the logger. * @@ -105,15 +131,6 @@ class PEngine extends PObject { ""; } - /** - * Sets the logger instance. - * - * @param {object} logger The logger object. - */ - set log(logger) { - this._logger = logger; - } - /** * Module getter method. * @@ -169,14 +186,15 @@ class PEngine extends PObject { } /** - * Returns the module you need to use. + * Returns the module you need to use. Can be extended to use files relative + * to current project/framework. * * @param {string} moduleName The module name. * * @return {*} */ import(moduleName) { - return require(`../${moduleName}`); + return require(`${__dirname}/../${moduleName}`); } /** diff --git a/src/middleware/ResponseHelper.js b/src/middleware/ResponseHelper.js index 06703ad..aed6a67 100644 --- a/src/middleware/ResponseHelper.js +++ b/src/middleware/ResponseHelper.js @@ -57,8 +57,8 @@ module.exports = () => { const { message: errorMessage } = error; const code = error.httpCode || 500; - engine.log.error(errorMessage); - engine.log.error(error.stack); + puzzle.log.error(errorMessage); + puzzle.log.error(error.stack); return res.error(errorType, errorMessage, code); }; diff --git a/src/puzzle/Log.js b/src/puzzle/Log.js index a7c9ad0..d553142 100644 --- a/src/puzzle/Log.js +++ b/src/puzzle/Log.js @@ -49,28 +49,32 @@ class Log extends PLog { this.logLevel = "info"; } - if (this.isValid(logConfig.file) && logConfig.file !== "") { - if (logConfig.rotate === true) { - rotate.register(logConfig.file, { - schedule: logConfig.schedule || "5m", - count: logConfig.count, - size: logConfig.size, - compress: logConfig.compress - }); - } - - this.logger = new logger( - this.logLevel, - fs.createWriteStream(path.resolve(logConfig.file), { - flags: "a" - }) - ); - - + if (!this.isValid(logConfig.file) || logConfig.file === "") { + this.logger = new logger(this.logLevel); return; } - this.logger = new logger(this.logLevel); + if (logConfig.rotate === true) { + rotate.register(logConfig.file, { + schedule: logConfig.schedule || "5m", + count: logConfig.count, + size: logConfig.size, + compress: logConfig.compress + }); + } + + /** + * File Stream used for logger. + * + * @property {WriteStream} + */ + this.stream = fs.createWriteStream(path.resolve(logConfig.file), { + flags: "a" + }); + this.logger = new logger( + this.logLevel, + this.stream + ); } } diff --git a/src/puzzle/ServerBootstrap.js b/src/puzzle/ServerBootstrap.js index 3cb669e..d47a286 100644 --- a/src/puzzle/ServerBootstrap.js +++ b/src/puzzle/ServerBootstrap.js @@ -17,6 +17,7 @@ class ServerBootstrap extends PRuntime { puzzle.log.info("Application started"); puzzle.log.info("-".repeat(30)); puzzle.log.info(`Puzzle Framework Version: ${puzzle.version.version}`); + puzzle.log.info(`Framework type: ${puzzle.lite ? "Lite" : "Full"}`); puzzle.log.info(`Environment: ${puzzle.env}`); puzzle.log.info(`Logging level: ${puzzle.logLevel}`); puzzle.log.info("-".repeat(30)); diff --git a/src/puzzle/index.js b/src/puzzle/index.js index ca4d19b..dc161ae 100644 --- a/src/puzzle/index.js +++ b/src/puzzle/index.js @@ -21,5 +21,15 @@ if (global.puzzle === null || global.puzzle === undefined) { */ global.puzzle = puzzleInstance; } +if (global.puzzleLight === null || global.puzzleLight === undefined) { + /** + * The global instance of the framework engine. + * + * Use 'puzzle' whenever you need some functionality from the application. + * + * @alias puzzle + */ + global.puzzleLight = true; +} module.exports = puzzleInstance; From ff53be8c645da20a64896777393d01292e288c62 Mon Sep 17 00:00:00 2001 From: Valentin Duricu Date: Sat, 26 May 2018 19:18:34 +0300 Subject: [PATCH 4/4] Updated tests --- test/core/PEngine.test.js | 4 ++-- test/puzzle/ServerBootstrap.test.js | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/test/core/PEngine.test.js b/test/core/PEngine.test.js index 6a3603d..64110d4 100644 --- a/test/core/PEngine.test.js +++ b/test/core/PEngine.test.js @@ -38,10 +38,10 @@ describe("PEngine class check", () => { expect(pobj.version.version).to.equal(packageJson.version); }); - it("version should not be overrideable", () => { + it("version should be overrideable", () => { const pobj = new PEngine(); - expect(() => (pobj.version = "test")).to.throw(); + expect(() => (pobj.version = "test")).to.not.throw(); expect(pobj.version.className).to.equal("PVersion"); expect(pobj.version.version).to.equal(packageJson.version); }); diff --git a/test/puzzle/ServerBootstrap.test.js b/test/puzzle/ServerBootstrap.test.js index d245cba..8d40dbb 100644 --- a/test/puzzle/ServerBootstrap.test.js +++ b/test/puzzle/ServerBootstrap.test.js @@ -46,6 +46,7 @@ describe("ServerBootstrap class check", () => { "[INFO] Application started", `[INFO] ${"-".repeat(30)}`, `[INFO] Puzzle Framework Version: ${puzzle.app.version}`, + `[INFO] Framework type: Lite`, `[INFO] Environment: ${puzzle.env}`, "[INFO] Logging level: test", `[INFO] ${"-".repeat(30)}`