@hazeljs/core 0.2.3 → 0.3.0
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/hazel-app.d.ts +6 -0
- package/dist/hazel-app.d.ts.map +1 -1
- package/dist/hazel-app.js +26 -0
- package/package.json +2 -2
package/dist/hazel-app.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare class HazelApp {
|
|
|
22
22
|
private shutdownManager;
|
|
23
23
|
private healthManager;
|
|
24
24
|
private requestTimeout;
|
|
25
|
+
private globalPrefix;
|
|
25
26
|
private corsEnabled;
|
|
26
27
|
private corsOptions?;
|
|
27
28
|
private timeoutMiddleware?;
|
|
@@ -69,6 +70,11 @@ export declare class HazelApp {
|
|
|
69
70
|
* Set request timeout
|
|
70
71
|
*/
|
|
71
72
|
setRequestTimeout(timeout: number, options?: TimeoutOptions): void;
|
|
73
|
+
/**
|
|
74
|
+
* Set a global prefix for all routes (e.g. '/api/v1').
|
|
75
|
+
* Requests that don't match the prefix will receive a 404.
|
|
76
|
+
*/
|
|
77
|
+
setGlobalPrefix(prefix: string): void;
|
|
72
78
|
/**
|
|
73
79
|
* Enable CORS
|
|
74
80
|
*/
|
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;AAE3D,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,KAChB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,sGAAsG;AACtG,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,OAAO,CAAC,CAAC;AAwEtB,qBAAa,QAAQ;
|
|
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
|
@@ -86,6 +86,7 @@ class HazelApp {
|
|
|
86
86
|
this.moduleType = moduleType;
|
|
87
87
|
this.server = null;
|
|
88
88
|
this.requestTimeout = 30000; // 30 seconds default
|
|
89
|
+
this.globalPrefix = '';
|
|
89
90
|
this.corsEnabled = false;
|
|
90
91
|
this.earlyHandlers = [];
|
|
91
92
|
this.proxyHandlers = [];
|
|
@@ -294,6 +295,19 @@ class HazelApp {
|
|
|
294
295
|
}
|
|
295
296
|
throw error;
|
|
296
297
|
}
|
|
298
|
+
// Strip global prefix from URL before routing
|
|
299
|
+
if (this.globalPrefix && req.url) {
|
|
300
|
+
const urlPath = req.url.split('?')[0];
|
|
301
|
+
if (urlPath === this.globalPrefix || urlPath.startsWith(this.globalPrefix + '/')) {
|
|
302
|
+
req.url = req.url.slice(this.globalPrefix.length) || '/';
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
// URL doesn't match the global prefix → 404
|
|
306
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
307
|
+
res.end(JSON.stringify({ statusCode: 404, message: 'Not Found' }));
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
297
311
|
// Proxy handlers (e.g. API gateway) - run before router
|
|
298
312
|
const pathname = (req.url || '/').split('?')[0];
|
|
299
313
|
for (const { pathPrefix, handler } of this.proxyHandlers) {
|
|
@@ -475,6 +489,18 @@ class HazelApp {
|
|
|
475
489
|
this.timeoutMiddleware = new timeout_middleware_1.TimeoutMiddleware({ ...options, timeout });
|
|
476
490
|
logger_1.default.debug(`Request timeout set to ${timeout}ms`);
|
|
477
491
|
}
|
|
492
|
+
/**
|
|
493
|
+
* Set a global prefix for all routes (e.g. '/api/v1').
|
|
494
|
+
* Requests that don't match the prefix will receive a 404.
|
|
495
|
+
*/
|
|
496
|
+
setGlobalPrefix(prefix) {
|
|
497
|
+
// Normalize: ensure leading slash, no trailing slash
|
|
498
|
+
this.globalPrefix = prefix.startsWith('/') ? prefix : `/${prefix}`;
|
|
499
|
+
if (this.globalPrefix.endsWith('/')) {
|
|
500
|
+
this.globalPrefix = this.globalPrefix.slice(0, -1);
|
|
501
|
+
}
|
|
502
|
+
logger_1.default.debug(`Global prefix set to "${this.globalPrefix}"`);
|
|
503
|
+
}
|
|
478
504
|
/**
|
|
479
505
|
* Enable CORS
|
|
480
506
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hazeljs/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
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.ai",
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "14c91213d93aa7eb907cb71b1d7104ddc4556327"
|
|
67
67
|
}
|