@zenofolio/hyper-decor 1.0.42 → 1.0.45
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/.mocharc.js +2 -2
- package/README.md +1 -1
- package/dist/__internals/constants.d.ts +1 -0
- package/dist/__internals/constants.js +2 -1
- package/dist/__internals/store.d.ts +19 -0
- package/dist/__internals/transform/middleware.transform.d.ts +3 -0
- package/dist/__internals/transform/middleware.transform.js +18 -0
- package/dist/common/helpers/scopes.d.ts +3 -3
- package/dist/common/helpers/scopes.js +7 -8
- package/dist/decorators/HyperApp.js +4 -2
- package/dist/decorators/Middleware.d.ts +2 -1
- package/dist/decorators/types.d.ts +11 -3
- package/dist/decorators/types.js +4 -0
- package/dist/extension.js +5 -2
- package/hyper-express-decorators.d.ts +1 -0
- package/package.json +2 -4
package/.mocharc.js
CHANGED
package/README.md
CHANGED
|
@@ -3,6 +3,7 @@ export declare const KEY_TYPE_CONTROLLER = "hyper:type:controller";
|
|
|
3
3
|
export declare const KEY_TYPE_MODULE = "hyper:type:module";
|
|
4
4
|
export declare const KEY_TYPE_ROUTE = "hyper:type:route";
|
|
5
5
|
export declare const KEY_TYPE_SERVICE = "hyper:type:service";
|
|
6
|
+
export declare const KEY_TYPE_GUARD = "hyper:type:guard";
|
|
6
7
|
export type KeyTypes = typeof KEY_TYPE_APP | typeof KEY_TYPE_CONTROLLER | typeof KEY_TYPE_MODULE | typeof KEY_TYPE_SERVICE | typeof KEY_TYPE_ROUTE;
|
|
7
8
|
export declare const KEY_PARAMS_APP = "hyper:type:app";
|
|
8
9
|
export declare const KEY_PARAMS_CONTROLLER = "hyper:type:controller";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.METADATA_STATE_KEYS = exports.METADATA_PARAMS_KEYS = exports.METADATA_METHOD_KEYS = exports.METADATA_STORE_KEYS = exports.METADATA_KEYS = exports.METADATA_HYPER_TYPE = exports.DESIGN_TYPE = exports.DESIGN_RETURNTYPE = exports.DESIGN_PARAMTYPES = exports.KEY_STATE_BY_PASS = exports.KEY_STATE_PREPARED = exports.KEY_STATE_CREATED = exports.KEY_STATE_UPDATED = exports.KEY_PARAMS_PASS = exports.KEY_PARAMS_ROLE = exports.KEY_PARAMS_SCOPE = exports.KEY_PARAMS_MIDDLEWARES = exports.KEY_PARAMS_PARAM = exports.KEY_PARAMS_ROUTE = exports.KEY_PARAMS_MODULE = exports.KEY_PARAMS_CONTROLLER = exports.KEY_PARAMS_APP = exports.KEY_TYPE_SERVICE = exports.KEY_TYPE_ROUTE = exports.KEY_TYPE_MODULE = exports.KEY_TYPE_CONTROLLER = exports.KEY_TYPE_APP = void 0;
|
|
3
|
+
exports.METADATA_STATE_KEYS = exports.METADATA_PARAMS_KEYS = exports.METADATA_METHOD_KEYS = exports.METADATA_STORE_KEYS = exports.METADATA_KEYS = exports.METADATA_HYPER_TYPE = exports.DESIGN_TYPE = exports.DESIGN_RETURNTYPE = exports.DESIGN_PARAMTYPES = exports.KEY_STATE_BY_PASS = exports.KEY_STATE_PREPARED = exports.KEY_STATE_CREATED = exports.KEY_STATE_UPDATED = exports.KEY_PARAMS_PASS = exports.KEY_PARAMS_ROLE = exports.KEY_PARAMS_SCOPE = exports.KEY_PARAMS_MIDDLEWARES = exports.KEY_PARAMS_PARAM = exports.KEY_PARAMS_ROUTE = exports.KEY_PARAMS_MODULE = exports.KEY_PARAMS_CONTROLLER = exports.KEY_PARAMS_APP = exports.KEY_TYPE_GUARD = exports.KEY_TYPE_SERVICE = exports.KEY_TYPE_ROUTE = exports.KEY_TYPE_MODULE = exports.KEY_TYPE_CONTROLLER = exports.KEY_TYPE_APP = void 0;
|
|
4
4
|
//////////////////////////////
|
|
5
5
|
/// Types constants
|
|
6
6
|
//////////////////////////////
|
|
@@ -9,6 +9,7 @@ exports.KEY_TYPE_CONTROLLER = "hyper:type:controller";
|
|
|
9
9
|
exports.KEY_TYPE_MODULE = "hyper:type:module";
|
|
10
10
|
exports.KEY_TYPE_ROUTE = "hyper:type:route";
|
|
11
11
|
exports.KEY_TYPE_SERVICE = "hyper:type:service";
|
|
12
|
+
exports.KEY_TYPE_GUARD = "hyper:type:guard";
|
|
12
13
|
//////////////////////////////
|
|
13
14
|
/// Params constants
|
|
14
15
|
//////////////////////////////
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
import { MiddlewareHandler } from "hyper-express";
|
|
2
|
+
import { RoleType, ScopeType } from "../decorators";
|
|
3
|
+
interface HyperAppStoreItemBase {
|
|
4
|
+
middlewares: Set<MiddlewareHandler>;
|
|
5
|
+
roles: Set<RoleType>;
|
|
6
|
+
scopes: Set<ScopeType>;
|
|
7
|
+
}
|
|
8
|
+
interface HyperAppStoreRoute extends HyperAppStoreItemBase {
|
|
9
|
+
method: string;
|
|
10
|
+
path: string;
|
|
11
|
+
handler: string;
|
|
12
|
+
}
|
|
13
|
+
export interface HyperAppStoreController extends HyperAppStoreItemBase {
|
|
14
|
+
routes: Map<string, HyperAppStoreRoute>;
|
|
15
|
+
}
|
|
16
|
+
export interface HyperAppStoreModule {
|
|
17
|
+
controllers: Map<string, string>;
|
|
18
|
+
}
|
|
1
19
|
export default class HyperAppStore {
|
|
2
20
|
private roles;
|
|
3
21
|
private scopes;
|
|
@@ -8,3 +26,4 @@ export default class HyperAppStore {
|
|
|
8
26
|
addRole(role: string): void;
|
|
9
27
|
addModuleRole(module: string, role: string): void;
|
|
10
28
|
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = middlewareTransformer;
|
|
4
|
+
const tsyringe_1 = require("tsyringe");
|
|
5
|
+
function middlewareTransformer(list) {
|
|
6
|
+
return list
|
|
7
|
+
.map((middleware) => {
|
|
8
|
+
if (typeof middleware === "function") {
|
|
9
|
+
if (middleware.constructor) {
|
|
10
|
+
const instance = tsyringe_1.container.resolve(middleware);
|
|
11
|
+
return instance.handle.bind(instance);
|
|
12
|
+
}
|
|
13
|
+
return middleware;
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
})
|
|
17
|
+
.filter((middleware) => middleware);
|
|
18
|
+
}
|
|
@@ -16,8 +16,8 @@ export declare const getScopes: (request: Request) => string[] | undefined;
|
|
|
16
16
|
/**
|
|
17
17
|
* Check if request has required scopes
|
|
18
18
|
*
|
|
19
|
-
* @param request
|
|
20
|
-
* @param scopes
|
|
21
|
-
* @returns
|
|
19
|
+
* @param request - The incoming request
|
|
20
|
+
* @param scopes - Required scopes to check
|
|
21
|
+
* @returns `true` if the request has all required scopes, otherwise `false`
|
|
22
22
|
*/
|
|
23
23
|
export declare const hasScopes: (request: Request, scopes: HyperScopeOptions) => boolean;
|
|
@@ -33,15 +33,14 @@ exports.getScopes = getScopes;
|
|
|
33
33
|
/**
|
|
34
34
|
* Check if request has required scopes
|
|
35
35
|
*
|
|
36
|
-
* @param request
|
|
37
|
-
* @param scopes
|
|
38
|
-
* @returns
|
|
36
|
+
* @param request - The incoming request
|
|
37
|
+
* @param scopes - Required scopes to check
|
|
38
|
+
* @returns `true` if the request has all required scopes, otherwise `false`
|
|
39
39
|
*/
|
|
40
40
|
const hasScopes = (request, scopes) => {
|
|
41
|
-
const requestScopes = (0, exports.getScopes)(request);
|
|
42
|
-
if (
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
return (0, object_util_1.$array)(scopes).every((scope) => requestScopes.includes(scope));
|
|
41
|
+
const requestScopes = new Set((0, exports.getScopes)(request) || []);
|
|
42
|
+
if (requestScopes.has("*"))
|
|
43
|
+
return true;
|
|
44
|
+
return (0, object_util_1.$array)(scopes).every(scope => requestScopes.has(scope));
|
|
46
45
|
};
|
|
47
46
|
exports.hasScopes = hasScopes;
|
|
@@ -14,8 +14,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.HyperApp = void 0;
|
|
16
16
|
require("reflect-metadata");
|
|
17
|
-
const constants_1 = require("../__internals/constants");
|
|
18
17
|
const hyper_express_1 = require("hyper-express");
|
|
18
|
+
const constants_1 = require("../__internals/constants");
|
|
19
19
|
const decorator_base_1 = require("../__internals/decorator-base");
|
|
20
20
|
const path_util_1 = require("../__internals/utils/path.util");
|
|
21
21
|
const scope_transfrom_1 = __importDefault(require("../__internals/transform/scope.transfrom"));
|
|
@@ -24,6 +24,7 @@ const object_util_1 = require("../__internals/utils/object.util");
|
|
|
24
24
|
const merge_metadata_1 = require("../__internals/helpers/merge-metadata");
|
|
25
25
|
const tsyringe_1 = require("tsyringe");
|
|
26
26
|
const collectors_1 = require("../collectors");
|
|
27
|
+
const middleware_transform_1 = __importDefault(require("../__internals/transform/middleware.transform"));
|
|
27
28
|
/**
|
|
28
29
|
* Decorator to define the main application class with assigned modules.
|
|
29
30
|
* @param modules - List of modules to be used in the application.
|
|
@@ -89,6 +90,7 @@ const HyperApp = (options) => (0, decorator_base_1.DecoratorHelper)({
|
|
|
89
90
|
content.push("");
|
|
90
91
|
});
|
|
91
92
|
(_c = options.logger) === null || _c === void 0 ? void 0 : _c.call(this, content.join("\n"));
|
|
93
|
+
this.storeLogs = {};
|
|
92
94
|
}
|
|
93
95
|
};
|
|
94
96
|
});
|
|
@@ -106,7 +108,7 @@ function getData(target) {
|
|
|
106
108
|
const app = (0, decorator_base_1.getDecorData)(constants_1.KEY_PARAMS_APP, target);
|
|
107
109
|
const module = (0, decorator_base_1.getDecorData)(constants_1.KEY_PARAMS_MODULE, target);
|
|
108
110
|
const controller = (0, decorator_base_1.getDecorData)(constants_1.KEY_TYPE_CONTROLLER, target);
|
|
109
|
-
const middlewares = (_a = (0, decorator_base_1.getDecorData)(constants_1.KEY_PARAMS_MIDDLEWARES, target)) !== null && _a !== void 0 ? _a : [];
|
|
111
|
+
const middlewares = (0, middleware_transform_1.default)((_a = (0, decorator_base_1.getDecorData)(constants_1.KEY_PARAMS_MIDDLEWARES, target)) !== null && _a !== void 0 ? _a : []);
|
|
110
112
|
const scopes = (_b = (0, decorator_base_1.getDecorData)(constants_1.KEY_PARAMS_SCOPE, target)) !== null && _b !== void 0 ? _b : [];
|
|
111
113
|
const roles = (_c = (0, decorator_base_1.getDecorData)(constants_1.KEY_PARAMS_ROLE, target)) !== null && _c !== void 0 ? _c : [];
|
|
112
114
|
const routes = (_d = (0, decorator_base_1.getDecorData)(constants_1.KEY_PARAMS_ROUTE, target)) !== null && _d !== void 0 ? _d : {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
import { MiddlewareHandler } from "hyper-express";
|
|
3
|
+
import { MiddlewareType } from "./types";
|
|
3
4
|
/**
|
|
4
5
|
* Middleware decorator to attach middleware to controllers, modules, and routes.
|
|
5
6
|
*/
|
|
6
7
|
export declare const Middleware: {
|
|
7
|
-
(...middleware:
|
|
8
|
+
(...middleware: MiddlewareType[]): ClassDecorator & MethodDecorator;
|
|
8
9
|
/**
|
|
9
10
|
* Exclude middleware from matching paths.
|
|
10
11
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MiddlewareHandler, Request, Response, ServerConstructorOptions } from "hyper-express";
|
|
1
|
+
import type { MiddlewareHandler, MiddlewareNext, Request, Response, ServerConstructorOptions } from "hyper-express";
|
|
2
2
|
export type Constructor<R extends any = any> = new (...args: any[]) => R;
|
|
3
3
|
export type ConstructorDecorator = (target: Constructor, kay?: any, descriptor?: PropertyDescriptor) => Constructor;
|
|
4
4
|
export type HyperClassDecorator<T> = (options?: T) => ConstructorDecorator;
|
|
@@ -21,7 +21,9 @@ export interface HyperAppMetadata {
|
|
|
21
21
|
imports?: Constructor[];
|
|
22
22
|
options?: ServerConstructorOptions;
|
|
23
23
|
}
|
|
24
|
-
export
|
|
24
|
+
export interface HyperAppDecorator {
|
|
25
|
+
(options?: HyperAppMetadata): (target: Constructor) => Constructor;
|
|
26
|
+
}
|
|
25
27
|
export type HyperModuleMetadata = {
|
|
26
28
|
path: string;
|
|
27
29
|
name?: string;
|
|
@@ -82,8 +84,14 @@ export interface RouteMetadata {
|
|
|
82
84
|
propertyKey: string;
|
|
83
85
|
handler: (...args: any[]) => any;
|
|
84
86
|
}
|
|
87
|
+
export declare abstract class MiddlewareClass {
|
|
88
|
+
abstract handle(req: Request, res: Response, next: MiddlewareNext): void;
|
|
89
|
+
}
|
|
90
|
+
export interface MiddlewareClassConstructor {
|
|
91
|
+
new (...args: any[]): MiddlewareClass;
|
|
92
|
+
}
|
|
85
93
|
/**
|
|
86
94
|
* Type definition for Middleware.
|
|
87
95
|
* Middleware can be a single handler or an array of handlers.
|
|
88
96
|
*/
|
|
89
|
-
export type MiddlewareType = MiddlewareHandler |
|
|
97
|
+
export type MiddlewareType = MiddlewareHandler | MiddlewareClassConstructor;
|
package/dist/decorators/types.js
CHANGED
package/dist/extension.js
CHANGED
|
@@ -18,6 +18,9 @@ const requestMethods = {
|
|
|
18
18
|
setScopes(scopes) {
|
|
19
19
|
(0, helpers_1.setScopes)(this, scopes);
|
|
20
20
|
},
|
|
21
|
+
setFullScopes() {
|
|
22
|
+
(0, helpers_1.setScopes)(this, ["*"]);
|
|
23
|
+
},
|
|
21
24
|
hasScopes(scopes) {
|
|
22
25
|
return (0, helpers_1.hasScopes)(this, scopes);
|
|
23
26
|
},
|
|
@@ -25,8 +28,8 @@ const requestMethods = {
|
|
|
25
28
|
return (0, helpers_1.getScopes)(this);
|
|
26
29
|
},
|
|
27
30
|
setRoleScopes(role, scopes) {
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
(0, helpers_1.setRole)(this, role);
|
|
32
|
+
(0, helpers_1.setScopes)(this, scopes);
|
|
30
33
|
},
|
|
31
34
|
};
|
|
32
35
|
/////////////////////////////
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenofolio/hyper-decor",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.45",
|
|
4
4
|
"description": "Project core with utilities and features",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"author": "zenozaga",
|
|
@@ -24,10 +24,8 @@
|
|
|
24
24
|
"typescript": "5.6.2"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@zenofolio/hyper-decor": "file:",
|
|
28
27
|
"core-decorators": "^0.20.0",
|
|
29
28
|
"file-type": "^19.5.0",
|
|
30
|
-
"hyper-express-decorators": "file:",
|
|
31
29
|
"reflect-metadata": "^0.2.2",
|
|
32
30
|
"tsyringe": "^4.8.0"
|
|
33
31
|
},
|
|
@@ -58,4 +56,4 @@
|
|
|
58
56
|
"default": "./src/extension.ts"
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
|
-
}
|
|
59
|
+
}
|