nodester 0.2.9 → 0.3.1
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/dependencies/mysql2.js +3 -0
- package/dependencies/pg.js +3 -0
- package/dependencies/sequelize.js +3 -0
- package/lib/query/traverse.js +16 -13
- package/lib/router/handlers.util.js +1 -1
- package/lib/router/index.js +29 -6
- package/lib/router/markers.js +2 -2
- package/lib/router/routes.util.js +37 -26
- package/lib/validators/arguments.js +1 -1
- package/package.json +6 -1
- /package/lib/utils/{dates.util.js → dates.js} +0 -0
package/lib/query/traverse.js
CHANGED
|
@@ -171,6 +171,7 @@ function traverse(queryNode, filter=null, model=null) {
|
|
|
171
171
|
|
|
172
172
|
const clausesEntries = Object.entries(clauses);
|
|
173
173
|
for (let [clauseName, value] of clausesEntries) {
|
|
174
|
+
|
|
174
175
|
// If clause is not available:
|
|
175
176
|
if (filter != null) {
|
|
176
177
|
if (filter.clauses.indexOf(clauseName) === -1)
|
|
@@ -270,7 +271,7 @@ function traverse(queryNode, filter=null, model=null) {
|
|
|
270
271
|
|
|
271
272
|
case null:
|
|
272
273
|
case undefined:
|
|
273
|
-
newQuery.order = [ ['id', 'desc'] ];
|
|
274
|
+
// newQuery.order = [ ['id', 'desc'] ];
|
|
274
275
|
break;
|
|
275
276
|
|
|
276
277
|
default:
|
|
@@ -298,13 +299,22 @@ function traverse(queryNode, filter=null, model=null) {
|
|
|
298
299
|
|
|
299
300
|
|
|
300
301
|
// Where:
|
|
302
|
+
|
|
303
|
+
// Set aatributes from Query:
|
|
301
304
|
const whereEntries = Object.entries(where);
|
|
302
|
-
for (let [attribute, value] of whereEntries) {
|
|
303
|
-
_parseWhereEntry(attribute, value, newQuery.where
|
|
305
|
+
for (let [ attribute, value ] of whereEntries) {
|
|
306
|
+
_parseWhereEntry(attribute, value, newQuery.where);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Static attributes override previously set attributes:
|
|
310
|
+
const staticAttributesEntries = Object.entries(filter.statics.attributes);
|
|
311
|
+
for (let [ attribute, staticValue ] of staticAttributesEntries) {
|
|
312
|
+
newQuery.where[attribute] = _parseValue(staticValue, attribute);
|
|
304
313
|
}
|
|
305
314
|
|
|
306
|
-
//
|
|
307
|
-
|
|
315
|
+
// If "where" was not set in any way,
|
|
316
|
+
// remove it from the db query:
|
|
317
|
+
if (Object.entries(newQuery.where).length === 0) {
|
|
308
318
|
delete newQuery.where;
|
|
309
319
|
}
|
|
310
320
|
// Where\
|
|
@@ -360,9 +370,8 @@ function _addAssociationQuery(associationQuery, includeName, resultQuery) {
|
|
|
360
370
|
}
|
|
361
371
|
|
|
362
372
|
|
|
363
|
-
function _parseWhereEntry(attribute, value, whereHolder
|
|
373
|
+
function _parseWhereEntry(attribute, value, whereHolder) {
|
|
364
374
|
let _value = value;
|
|
365
|
-
const staticAttribute = staticAttributes[attribute];
|
|
366
375
|
|
|
367
376
|
// If attribute is Op (not, like, or, etc.):
|
|
368
377
|
if (attribute in Op) {
|
|
@@ -373,12 +382,6 @@ function _parseWhereEntry(attribute, value, whereHolder, staticAttributes) {
|
|
|
373
382
|
whereHolder[op] = _value;
|
|
374
383
|
return;
|
|
375
384
|
}
|
|
376
|
-
|
|
377
|
-
// Static value overrides any other:
|
|
378
|
-
if (!!staticAttribute) {
|
|
379
|
-
whereHolder[attribute] = staticAttribute;
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
385
|
|
|
383
386
|
whereHolder[attribute] = _parseValue(_value, attribute);
|
|
384
387
|
}
|
package/lib/router/index.js
CHANGED
|
@@ -331,10 +331,26 @@ module.exports = class NodesterRouter {
|
|
|
331
331
|
|
|
332
332
|
const handlerType = typeOf(handler);
|
|
333
333
|
|
|
334
|
-
if (handlerType === 'Object'
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
334
|
+
if (handlerType === 'Object') {
|
|
335
|
+
if (!this.paths.controllers && !this.paths.providers) {
|
|
336
|
+
const msg = `Please set 'controllersPath' or 'providersPath' during Router initialization.`;
|
|
337
|
+
const err = new TypeError(msg);
|
|
338
|
+
throw err;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (!!handler.before) {
|
|
342
|
+
ensure(handler.before, 'array|function', 'handler.before');
|
|
343
|
+
|
|
344
|
+
if ( Array.isArray(handler.before) ) {
|
|
345
|
+
const middlewares = [ ...handler.before ];
|
|
346
|
+
|
|
347
|
+
handler.before = new MiddlewaresStack();
|
|
348
|
+
|
|
349
|
+
for (let middlewareBefore of middlewares) {
|
|
350
|
+
handler.before.add(middlewareBefore);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
338
354
|
}
|
|
339
355
|
|
|
340
356
|
const wrapped = wrapRouteHandler.call(this, parsedRoute, handler);
|
|
@@ -412,8 +428,15 @@ module.exports = class NodesterRouter {
|
|
|
412
428
|
const markerFn = this._markers.get(markerName);
|
|
413
429
|
|
|
414
430
|
return {
|
|
415
|
-
route: (route, fn) =>
|
|
416
|
-
|
|
431
|
+
route: (route, fn) => {
|
|
432
|
+
ensure(route, 'object,required', 'route');
|
|
433
|
+
ensure(fn, 'object,required', 'fn');
|
|
434
|
+
return MarkerMethods.onlyRoute.call(self, route, fn, markerFn)
|
|
435
|
+
},
|
|
436
|
+
use: (fnOrRouter) => {
|
|
437
|
+
ensure(fnOrRouter, 'function|object,required', 'fnOrRouter');
|
|
438
|
+
return MarkerMethods.onlyUse.call(self, fnOrRouter, markerFn);
|
|
439
|
+
}
|
|
417
440
|
}
|
|
418
441
|
}
|
|
419
442
|
catch(error) {
|
package/lib/router/markers.js
CHANGED
|
@@ -53,7 +53,7 @@ function _onlyRoute(route, fn, markerFn) {
|
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
55
|
*
|
|
56
|
-
* @param {Function} fnOrRouter
|
|
56
|
+
* @param {Function|NodesterRouter} fnOrRouter
|
|
57
57
|
* @param {Function} markerFn
|
|
58
58
|
*
|
|
59
59
|
*/
|
|
@@ -67,7 +67,7 @@ function _onlyUse(fnOrRouter, markerFn) {
|
|
|
67
67
|
return next();
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
const isRouter = fnOrRouter.constructor.name === 'NodesterRouter';
|
|
70
|
+
const isRouter = !!fnOrRouter.constructor && fnOrRouter.constructor?.name === 'NodesterRouter';
|
|
71
71
|
|
|
72
72
|
const fn = isRouter ? fnOrRouter.handle.bind(fnOrRouter) : fnOrRouter;
|
|
73
73
|
await fn.call(this, req, res, next);
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
8
|
+
const MiddlewaresStack = require('nodester/stacks/middlewares');
|
|
9
|
+
|
|
8
10
|
// Utils:
|
|
9
11
|
const { typeOf } = require('nodester/utils/types');
|
|
10
12
|
const { parseRouteHandler } = require('./handlers.util');
|
|
@@ -38,6 +40,33 @@ function _validateParsedRouteMethood(parsedRoute) {
|
|
|
38
40
|
function _wrapRouteHandler(routeInstance, handler) {
|
|
39
41
|
const handlerType = typeOf(handler);
|
|
40
42
|
|
|
43
|
+
let parsedHandler = null;
|
|
44
|
+
let providedAction = null;
|
|
45
|
+
|
|
46
|
+
if (handlerType === 'Object') {
|
|
47
|
+
parsedHandler = parseRouteHandler(handler);
|
|
48
|
+
|
|
49
|
+
// If Controller:
|
|
50
|
+
if (parsedHandler.controllerName !== undefined) {
|
|
51
|
+
// Get method (action) from Controller:
|
|
52
|
+
const controller = this._controllers.get(parsedHandler.controllerName);
|
|
53
|
+
const controllerAction = controller[parsedHandler.actionName];
|
|
54
|
+
|
|
55
|
+
providedAction = controllerAction;
|
|
56
|
+
}
|
|
57
|
+
// If Controller\
|
|
58
|
+
|
|
59
|
+
// If Provider:
|
|
60
|
+
else {
|
|
61
|
+
// Get method (action) from Provider:
|
|
62
|
+
const provider = this._providers.get(parsedHandler.providerName);
|
|
63
|
+
const providerAction = provider[parsedHandler.actionName];
|
|
64
|
+
|
|
65
|
+
providedAction = providerAction;
|
|
66
|
+
}
|
|
67
|
+
// If Provider\
|
|
68
|
+
}
|
|
69
|
+
|
|
41
70
|
const wrapped = async (req, res, next) => {
|
|
42
71
|
// Get route without SearchParams.
|
|
43
72
|
const route = req.url.split('?')[0];
|
|
@@ -57,34 +86,16 @@ function _wrapRouteHandler(routeInstance, handler) {
|
|
|
57
86
|
}
|
|
58
87
|
// If handler is an Object:
|
|
59
88
|
else {
|
|
60
|
-
const parsedHandler = parseRouteHandler(handler);
|
|
61
|
-
|
|
62
|
-
let providedAction = null;
|
|
63
|
-
|
|
64
|
-
// If Controller:
|
|
65
|
-
if (parsedHandler.controllerName !== undefined) {
|
|
66
|
-
// Get method (action) from Controller:
|
|
67
|
-
const controller = this._controllers.get(parsedHandler.controllerName);
|
|
68
|
-
const controllerAction = controller[parsedHandler.actionName];
|
|
69
|
-
|
|
70
|
-
providedAction = controllerAction;
|
|
71
|
-
}
|
|
72
|
-
// If Controller\
|
|
73
|
-
|
|
74
|
-
// If Provider:
|
|
75
|
-
else {
|
|
76
|
-
// Get method (action) from Provider:
|
|
77
|
-
const provider = this._providers.get(parsedHandler.providerName);
|
|
78
|
-
const providerAction = provider[parsedHandler.actionName];
|
|
79
|
-
|
|
80
|
-
providedAction = providerAction;
|
|
81
|
-
}
|
|
82
|
-
// If Provider\
|
|
83
|
-
|
|
84
89
|
// If User set any middleware before:
|
|
85
|
-
if (
|
|
90
|
+
if (!!parsedHandler.before) {
|
|
86
91
|
const _next = () => providedAction(req, res);
|
|
87
|
-
|
|
92
|
+
|
|
93
|
+
if (typeOf(parsedHandler.before) === 'function') {
|
|
94
|
+
await parsedHandler.before(req, res, _next);
|
|
95
|
+
}
|
|
96
|
+
else if (parsedHandler.before instanceof MiddlewaresStack) {
|
|
97
|
+
await parsedHandler.before.process(req, res, _next);
|
|
98
|
+
}
|
|
88
99
|
}
|
|
89
100
|
// If response was not sent,
|
|
90
101
|
// perform action
|
|
@@ -82,7 +82,7 @@ function _ensure(argument, rules, argumentName) {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
if (mismatchedTypesCount === types.length && argument !== undefined) {
|
|
85
|
-
const err = new TypeError(`${ name } must be of type ${ types.join('
|
|
85
|
+
const err = new TypeError(`${ name } must be of type: ${ types.join(' or ') }.`);
|
|
86
86
|
Error.captureStackTrace(err, _ensure);
|
|
87
87
|
throw err;
|
|
88
88
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nodester",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "A versatile REST framework for Node.js",
|
|
5
5
|
"directories": {
|
|
6
6
|
"docs": "docs",
|
|
@@ -19,6 +19,10 @@
|
|
|
19
19
|
|
|
20
20
|
"./controllers/methods": "./lib/controllers/methods/index.js",
|
|
21
21
|
"./controllers/mixins": "./lib/controllers/mixins/index.js",
|
|
22
|
+
|
|
23
|
+
"./dependencies/mysql2": "./dependencies/mysql2.js",
|
|
24
|
+
"./dependencies/pg": "./dependencies/pg.js",
|
|
25
|
+
"./dependencies/sequelize": "./dependencies/sequelize.js",
|
|
22
26
|
|
|
23
27
|
"./database/connection": "./lib/database/connection.js",
|
|
24
28
|
"./database/migration": "./lib/database/migration.js",
|
|
@@ -61,6 +65,7 @@
|
|
|
61
65
|
"./stacks/markers": "./lib/stacks/MarkersStack.js",
|
|
62
66
|
"./stacks/middlewares": "./lib/stacks/MiddlewaresStack.js",
|
|
63
67
|
|
|
68
|
+
"./utils/dates": "./lib/utils/dates.js",
|
|
64
69
|
"./utils/sql": "./lib/utils/sql.util.js",
|
|
65
70
|
"./utils/strings": "./lib/utils/strings.util.js",
|
|
66
71
|
"./utils/sanitizations": "./lib/utils/sanitizations.util.js",
|
|
File without changes
|