@hazeljs/core 0.2.0-rc.3 → 0.2.0-rc.5
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/__tests__/hazel-module.test.d.ts.map +1 -1
- package/dist/__tests__/hazel-module.test.js +93 -0
- package/dist/hazel-app.d.ts +2 -1
- package/dist/hazel-app.d.ts.map +1 -1
- package/dist/hazel-app.js +4 -23
- package/dist/hazel-module.d.ts +16 -0
- package/dist/hazel-module.d.ts.map +1 -1
- package/dist/hazel-module.js +47 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazel-module.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/hazel-module.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hazel-module.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/hazel-module.test.ts"],"names":[],"mappings":"AAQA,OAAO,kBAAkB,CAAC"}
|
|
@@ -103,6 +103,99 @@ describe('HazelModule', () => {
|
|
|
103
103
|
expect(metadata?.providers).toEqual([]);
|
|
104
104
|
});
|
|
105
105
|
});
|
|
106
|
+
describe('collectControllersFromModule', () => {
|
|
107
|
+
it('should collect controllers from a module', () => {
|
|
108
|
+
class Ctrl1 {
|
|
109
|
+
}
|
|
110
|
+
class Ctrl2 {
|
|
111
|
+
}
|
|
112
|
+
let TestModule = class TestModule {
|
|
113
|
+
};
|
|
114
|
+
TestModule = __decorate([
|
|
115
|
+
(0, hazel_module_1.HazelModule)({
|
|
116
|
+
controllers: [Ctrl1, Ctrl2],
|
|
117
|
+
})
|
|
118
|
+
], TestModule);
|
|
119
|
+
const controllers = (0, hazel_module_1.collectControllersFromModule)(TestModule);
|
|
120
|
+
expect(controllers).toHaveLength(2);
|
|
121
|
+
expect(controllers).toContain(Ctrl1);
|
|
122
|
+
expect(controllers).toContain(Ctrl2);
|
|
123
|
+
});
|
|
124
|
+
it('should collect controllers from imported modules', () => {
|
|
125
|
+
class ChildCtrl {
|
|
126
|
+
}
|
|
127
|
+
let ChildModule = class ChildModule {
|
|
128
|
+
};
|
|
129
|
+
ChildModule = __decorate([
|
|
130
|
+
(0, hazel_module_1.HazelModule)({
|
|
131
|
+
controllers: [ChildCtrl],
|
|
132
|
+
})
|
|
133
|
+
], ChildModule);
|
|
134
|
+
let ParentModule = class ParentModule {
|
|
135
|
+
};
|
|
136
|
+
ParentModule = __decorate([
|
|
137
|
+
(0, hazel_module_1.HazelModule)({
|
|
138
|
+
imports: [ChildModule],
|
|
139
|
+
controllers: [],
|
|
140
|
+
})
|
|
141
|
+
], ParentModule);
|
|
142
|
+
const controllers = (0, hazel_module_1.collectControllersFromModule)(ParentModule);
|
|
143
|
+
expect(controllers).toHaveLength(1);
|
|
144
|
+
expect(controllers).toContain(ChildCtrl);
|
|
145
|
+
});
|
|
146
|
+
it('should avoid duplicates when same module is imported multiple times', () => {
|
|
147
|
+
class Ctrl {
|
|
148
|
+
}
|
|
149
|
+
let ChildModule = class ChildModule {
|
|
150
|
+
};
|
|
151
|
+
ChildModule = __decorate([
|
|
152
|
+
(0, hazel_module_1.HazelModule)({
|
|
153
|
+
controllers: [Ctrl],
|
|
154
|
+
})
|
|
155
|
+
], ChildModule);
|
|
156
|
+
let ParentModule = class ParentModule {
|
|
157
|
+
};
|
|
158
|
+
ParentModule = __decorate([
|
|
159
|
+
(0, hazel_module_1.HazelModule)({
|
|
160
|
+
imports: [ChildModule, ChildModule],
|
|
161
|
+
controllers: [],
|
|
162
|
+
})
|
|
163
|
+
], ParentModule);
|
|
164
|
+
const controllers = (0, hazel_module_1.collectControllersFromModule)(ParentModule);
|
|
165
|
+
expect(controllers).toHaveLength(1);
|
|
166
|
+
expect(controllers).toContain(Ctrl);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe('collectModulesFromModule', () => {
|
|
170
|
+
it('should collect modules from the tree', () => {
|
|
171
|
+
let ChildModule = class ChildModule {
|
|
172
|
+
};
|
|
173
|
+
ChildModule = __decorate([
|
|
174
|
+
(0, hazel_module_1.HazelModule)({})
|
|
175
|
+
], ChildModule);
|
|
176
|
+
let ParentModule = class ParentModule {
|
|
177
|
+
};
|
|
178
|
+
ParentModule = __decorate([
|
|
179
|
+
(0, hazel_module_1.HazelModule)({
|
|
180
|
+
imports: [ChildModule],
|
|
181
|
+
})
|
|
182
|
+
], ParentModule);
|
|
183
|
+
const modules = (0, hazel_module_1.collectModulesFromModule)(ParentModule);
|
|
184
|
+
expect(modules).toHaveLength(2);
|
|
185
|
+
expect(modules.map((m) => m.name)).toContain('ParentModule');
|
|
186
|
+
expect(modules.map((m) => m.name)).toContain('ChildModule');
|
|
187
|
+
});
|
|
188
|
+
it('should mark dynamic modules', () => {
|
|
189
|
+
let StaticModule = class StaticModule {
|
|
190
|
+
};
|
|
191
|
+
StaticModule = __decorate([
|
|
192
|
+
(0, hazel_module_1.HazelModule)({})
|
|
193
|
+
], StaticModule);
|
|
194
|
+
const modules = (0, hazel_module_1.collectModulesFromModule)(StaticModule);
|
|
195
|
+
expect(modules).toHaveLength(1);
|
|
196
|
+
expect(modules[0].isDynamic).toBe(false);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
106
199
|
describe('HazelModuleInstance', () => {
|
|
107
200
|
describe('initialization', () => {
|
|
108
201
|
it('should initialize module without metadata', () => {
|
package/dist/hazel-app.d.ts
CHANGED
|
@@ -29,7 +29,8 @@ export declare class HazelApp {
|
|
|
29
29
|
private proxyHandlers;
|
|
30
30
|
constructor(moduleType: Type<unknown>);
|
|
31
31
|
private initialize;
|
|
32
|
-
|
|
32
|
+
/** Get the root module type (for inspector and tooling) */
|
|
33
|
+
getModuleType(): Type<unknown>;
|
|
33
34
|
register<T>(component: Type<T>): HazelApp;
|
|
34
35
|
get(path: string, ...handlers: Array<(req: Request, res: Response) => void>): HazelApp;
|
|
35
36
|
post(path: string, ...handlers: Array<(req: Request, res: Response) => void>): HazelApp;
|
package/dist/hazel-app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazel-app.d.ts","sourceRoot":"","sources":["../src/hazel-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE/D,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI5D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAuB,MAAM,UAAU,CAAC;AACnE,OAAO,EAAqB,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"hazel-app.d.ts","sourceRoot":"","sources":["../src/hazel-app.ts"],"names":[],"mappings":"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"}
|
package/dist/hazel-app.js
CHANGED
|
@@ -17,7 +17,6 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
17
17
|
const shutdown_1 = require("./shutdown");
|
|
18
18
|
const health_1 = require("./health");
|
|
19
19
|
const timeout_middleware_1 = require("./middleware/timeout.middleware");
|
|
20
|
-
const MODULE_METADATA_KEY = 'hazel:module';
|
|
21
20
|
class HttpResponse {
|
|
22
21
|
constructor(res) {
|
|
23
22
|
this.res = res;
|
|
@@ -86,11 +85,7 @@ class HazelApp {
|
|
|
86
85
|
}
|
|
87
86
|
initialize() {
|
|
88
87
|
logger_1.default.debug('Initializing module:', { moduleName: this.moduleType.name });
|
|
89
|
-
const
|
|
90
|
-
logger_1.default.debug('Module metadata:', metadata);
|
|
91
|
-
// Collect all controllers from the module tree (root + imports, recursively)
|
|
92
|
-
const allControllers = this.collectControllers(this.moduleType);
|
|
93
|
-
// Register all controllers with the router
|
|
88
|
+
const allControllers = (0, hazel_module_1.collectControllersFromModule)(this.moduleType);
|
|
94
89
|
if (allControllers.length > 0) {
|
|
95
90
|
logger_1.default.debug('Registering controllers:', {
|
|
96
91
|
controllers: allControllers.map((c) => c.name),
|
|
@@ -100,23 +95,9 @@ class HazelApp {
|
|
|
100
95
|
});
|
|
101
96
|
}
|
|
102
97
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
visited.add(moduleRef);
|
|
107
|
-
const metadata = (0, hazel_module_1.getModuleMetadata)(moduleRef) || {};
|
|
108
|
-
const controllers = [];
|
|
109
|
-
// Collect from imported modules first
|
|
110
|
-
if (metadata.imports) {
|
|
111
|
-
for (const importedModule of metadata.imports) {
|
|
112
|
-
controllers.push(...this.collectControllers(importedModule, visited));
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
// Then collect from this module
|
|
116
|
-
if (metadata.controllers) {
|
|
117
|
-
controllers.push(...metadata.controllers);
|
|
118
|
-
}
|
|
119
|
-
return controllers;
|
|
98
|
+
/** Get the root module type (for inspector and tooling) */
|
|
99
|
+
getModuleType() {
|
|
100
|
+
return this.moduleType;
|
|
120
101
|
}
|
|
121
102
|
register(component) {
|
|
122
103
|
const instance = new component();
|
package/dist/hazel-module.d.ts
CHANGED
|
@@ -19,6 +19,22 @@ export interface ModuleOptions {
|
|
|
19
19
|
export declare function HazelModule(options: ModuleOptions): ClassDecorator;
|
|
20
20
|
export declare const Module: typeof HazelModule;
|
|
21
21
|
export declare function getModuleMetadata(target: object): ModuleOptions | undefined;
|
|
22
|
+
/** Module ref for inspection (name + whether it's a dynamic module) */
|
|
23
|
+
export interface ModuleRef {
|
|
24
|
+
moduleType: Type<unknown> | DynamicModule;
|
|
25
|
+
name: string;
|
|
26
|
+
isDynamic: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Recursively collect all modules from the module tree.
|
|
30
|
+
* Useful for inspection, debugging, and tooling.
|
|
31
|
+
*/
|
|
32
|
+
export declare function collectModulesFromModule(moduleRef: Type<unknown> | DynamicModule, visited?: Set<Type<unknown> | DynamicModule>): ModuleRef[];
|
|
33
|
+
/**
|
|
34
|
+
* Recursively collect all controller classes from the module tree.
|
|
35
|
+
* Used by HazelApp for route registration and by inspector/tooling.
|
|
36
|
+
*/
|
|
37
|
+
export declare function collectControllersFromModule(moduleRef: Type<unknown> | DynamicModule, visited?: Set<Type<unknown> | DynamicModule>): Type<unknown>[];
|
|
22
38
|
export declare class HazelModuleInstance {
|
|
23
39
|
private readonly moduleType;
|
|
24
40
|
private container;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazel-module.d.ts","sourceRoot":"","sources":["../src/hazel-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAS,MAAM,aAAa,CAAC;AAM/C,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CAIlE;AAGD,eAAO,MAAM,MAAM,oBAAc,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAa3E;AAED,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,SAAS,CAAY;gBAEA,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa;IAOtE,OAAO,CAAC,UAAU;IA6GlB,YAAY,IAAI,SAAS;CAG1B"}
|
|
1
|
+
{"version":3,"file":"hazel-module.d.ts","sourceRoot":"","sources":["../src/hazel-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAS,MAAM,aAAa,CAAC;AAM/C,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CAIlE;AAGD,eAAO,MAAM,MAAM,oBAAc,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAa3E;AAED,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,EACxC,OAAO,qCAA2C,GACjD,SAAS,EAAE,CAkBb;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,EACxC,OAAO,qCAA2C,GACjD,IAAI,CAAC,OAAO,CAAC,EAAE,CAuBjB;AAED,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,SAAS,CAAY;gBAEA,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa;IAOtE,OAAO,CAAC,UAAU;IA6GlB,YAAY,IAAI,SAAS;CAG1B"}
|
package/dist/hazel-module.js
CHANGED
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.HazelModuleInstance = exports.Module = void 0;
|
|
7
7
|
exports.HazelModule = HazelModule;
|
|
8
8
|
exports.getModuleMetadata = getModuleMetadata;
|
|
9
|
+
exports.collectModulesFromModule = collectModulesFromModule;
|
|
10
|
+
exports.collectControllersFromModule = collectControllersFromModule;
|
|
9
11
|
require("reflect-metadata");
|
|
10
12
|
const container_1 = require("./container");
|
|
11
13
|
const logger_1 = __importDefault(require("./logger"));
|
|
@@ -33,6 +35,51 @@ function getModuleMetadata(target) {
|
|
|
33
35
|
}
|
|
34
36
|
return undefined;
|
|
35
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Recursively collect all modules from the module tree.
|
|
40
|
+
* Useful for inspection, debugging, and tooling.
|
|
41
|
+
*/
|
|
42
|
+
function collectModulesFromModule(moduleRef, visited = new Set()) {
|
|
43
|
+
if (visited.has(moduleRef))
|
|
44
|
+
return [];
|
|
45
|
+
visited.add(moduleRef);
|
|
46
|
+
const metadata = getModuleMetadata(moduleRef);
|
|
47
|
+
const moduleType = moduleRef.module ?? moduleRef;
|
|
48
|
+
const name = moduleType?.name ?? 'DynamicModule';
|
|
49
|
+
const isDynamic = !!moduleRef.module;
|
|
50
|
+
const results = [{ moduleType: moduleRef, name, isDynamic }];
|
|
51
|
+
if (metadata?.imports) {
|
|
52
|
+
for (const imported of metadata.imports) {
|
|
53
|
+
results.push(...collectModulesFromModule(imported, visited));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Recursively collect all controller classes from the module tree.
|
|
60
|
+
* Used by HazelApp for route registration and by inspector/tooling.
|
|
61
|
+
*/
|
|
62
|
+
function collectControllersFromModule(moduleRef, visited = new Set()) {
|
|
63
|
+
if (visited.has(moduleRef))
|
|
64
|
+
return [];
|
|
65
|
+
visited.add(moduleRef);
|
|
66
|
+
const metadata = getModuleMetadata(moduleRef) || {};
|
|
67
|
+
const controllers = [];
|
|
68
|
+
if (metadata.imports) {
|
|
69
|
+
for (const imported of metadata.imports) {
|
|
70
|
+
controllers.push(...collectControllersFromModule(imported, visited));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (metadata.controllers) {
|
|
74
|
+
for (const ctrl of metadata.controllers) {
|
|
75
|
+
const cls = ctrl.useClass ?? ctrl;
|
|
76
|
+
if (cls && typeof cls === 'function') {
|
|
77
|
+
controllers.push(cls);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return controllers;
|
|
82
|
+
}
|
|
36
83
|
class HazelModuleInstance {
|
|
37
84
|
constructor(moduleType) {
|
|
38
85
|
this.moduleType = moduleType;
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import 'reflect-metadata';
|
|
6
6
|
export { HazelApp, type EarlyHttpHandler, type ProxyHandler } from './hazel-app';
|
|
7
|
-
export { HazelModule, Module, HazelModuleInstance, getModuleMetadata } from './hazel-module';
|
|
8
|
-
export type { ModuleOptions, DynamicModule } from './hazel-module';
|
|
7
|
+
export { HazelModule, Module, HazelModuleInstance, getModuleMetadata, collectModulesFromModule, collectControllersFromModule, } from './hazel-module';
|
|
8
|
+
export type { ModuleOptions, DynamicModule, ModuleRef } from './hazel-module';
|
|
9
9
|
export { ShutdownManager } from './shutdown';
|
|
10
10
|
export type { ShutdownHandler } from './shutdown';
|
|
11
11
|
export { HealthCheckManager, BuiltInHealthChecks } from './health';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,8 +7,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
10
|
+
exports.HttpError = exports.Scope = exports.Container = exports.CUSTOM_METADATA_PREFIX = exports.createParamDecorator = exports.getMetadata = exports.SetMetadata = exports.ApiOperation = exports.ApiTags = exports.Retry = exports.Session = exports.Optional = exports.Timeout = exports.AITask = exports.SkipAuth = exports.Public = exports.UseGuards = exports.UseInterceptors = exports.UsePipes = exports.Inject = exports.Redirect = exports.Header = exports.HttpCode = exports.Headers = exports.Host = exports.Ip = exports.Res = exports.Req = exports.Query = exports.Param = exports.Body = exports.Patch = exports.Delete = exports.Put = exports.Post = exports.Get = exports.Service = exports.Injectable = exports.Controller = exports.TimeoutMiddleware = exports.BuiltInHealthChecks = exports.HealthCheckManager = exports.ShutdownManager = exports.collectControllersFromModule = exports.collectModulesFromModule = exports.getModuleMetadata = exports.HazelModuleInstance = exports.Module = exports.HazelModule = exports.HazelApp = void 0;
|
|
11
|
+
exports.sanitizeSql = exports.sanitizeEmail = exports.sanitizeUrl = exports.sanitizeString = exports.sanitizeHtml = exports.RequestParser = exports.Router = exports.Validator = exports.default = exports.logger = exports.UploadedFiles = exports.UploadedFile = exports.FileUploadInterceptor = exports.CsrfMiddleware = exports.RateLimitMiddleware = exports.SecurityHeadersMiddleware = exports.LoggerMiddleware = exports.CorsMiddleware = exports.GlobalMiddlewareManager = exports.extractVersion = exports.matchVersion = exports.getVersionMetadata = exports.VersioningType = exports.Version = exports.RouteMatcher = exports.TestingModuleBuilder = exports.TestingModule = exports.Test = exports.HttpExceptionFilter = exports.getFilterExceptions = exports.Catch = exports.ArgumentsHostImpl = exports.RetryInterceptor = exports.ValidationPipe = exports.ParseIntPipe = exports.ValidationError = exports.RequestTimeoutError = exports.InternalServerErrorException = exports.ConflictException = exports.NotFoundException = exports.ForbiddenException = exports.UnauthorizedException = exports.BadRequestException = exports.HttpException = exports.InternalServerError = exports.ConflictError = exports.NotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.BadRequestError = void 0;
|
|
12
|
+
exports.escapeHtml = exports.sanitizeObject = void 0;
|
|
12
13
|
// Import reflect-metadata to enable decorator metadata
|
|
13
14
|
// Users don't need to import this manually
|
|
14
15
|
require("reflect-metadata");
|
|
@@ -20,6 +21,8 @@ Object.defineProperty(exports, "HazelModule", { enumerable: true, get: function
|
|
|
20
21
|
Object.defineProperty(exports, "Module", { enumerable: true, get: function () { return hazel_module_1.Module; } });
|
|
21
22
|
Object.defineProperty(exports, "HazelModuleInstance", { enumerable: true, get: function () { return hazel_module_1.HazelModuleInstance; } });
|
|
22
23
|
Object.defineProperty(exports, "getModuleMetadata", { enumerable: true, get: function () { return hazel_module_1.getModuleMetadata; } });
|
|
24
|
+
Object.defineProperty(exports, "collectModulesFromModule", { enumerable: true, get: function () { return hazel_module_1.collectModulesFromModule; } });
|
|
25
|
+
Object.defineProperty(exports, "collectControllersFromModule", { enumerable: true, get: function () { return hazel_module_1.collectControllersFromModule; } });
|
|
23
26
|
// Shutdown & Health
|
|
24
27
|
var shutdown_1 = require("./shutdown");
|
|
25
28
|
Object.defineProperty(exports, "ShutdownManager", { enumerable: true, get: function () { return shutdown_1.ShutdownManager; } });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hazeljs/core",
|
|
3
|
-
"version": "0.2.0-rc.
|
|
3
|
+
"version": "0.2.0-rc.5",
|
|
4
4
|
"description": "Core HazelJS framework - Dependency injection, routing, decorators, and base functionality",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"url": "https://github.com/hazeljs/hazel-js/issues"
|
|
64
64
|
},
|
|
65
65
|
"homepage": "https://hazeljs.com",
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "84ad3db0f24f75a9d55c6eec5997849fed3aa00e"
|
|
67
67
|
}
|