vector-framework 1.1.1 → 1.2.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/README.md +99 -628
- package/dist/auth/protected.d.ts +1 -0
- package/dist/auth/protected.d.ts.map +1 -1
- package/dist/auth/protected.js +3 -0
- package/dist/auth/protected.js.map +1 -1
- package/dist/cache/manager.d.ts +1 -0
- package/dist/cache/manager.d.ts.map +1 -1
- package/dist/cache/manager.js +5 -7
- package/dist/cache/manager.js.map +1 -1
- package/dist/cli/graceful-shutdown.d.ts +15 -0
- package/dist/cli/graceful-shutdown.d.ts.map +1 -0
- package/dist/cli/graceful-shutdown.js +42 -0
- package/dist/cli/graceful-shutdown.js.map +1 -0
- package/dist/cli/index.js +46 -97
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/option-resolution.d.ts +4 -0
- package/dist/cli/option-resolution.d.ts.map +1 -0
- package/dist/cli/option-resolution.js +28 -0
- package/dist/cli/option-resolution.js.map +1 -0
- package/dist/cli.js +3423 -660
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +6 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/config-loader.js +7 -2
- package/dist/core/config-loader.js.map +1 -1
- package/dist/core/router.d.ts +41 -17
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +432 -153
- package/dist/core/router.js.map +1 -1
- package/dist/core/server.d.ts +17 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +471 -31
- package/dist/core/server.js.map +1 -1
- package/dist/core/vector.d.ts +8 -5
- package/dist/core/vector.d.ts.map +1 -1
- package/dist/core/vector.js +53 -14
- package/dist/core/vector.js.map +1 -1
- package/dist/dev/route-generator.d.ts.map +1 -1
- package/dist/dev/route-generator.js.map +1 -1
- package/dist/dev/route-scanner.d.ts.map +1 -1
- package/dist/dev/route-scanner.js +1 -5
- package/dist/dev/route-scanner.js.map +1 -1
- package/dist/http.d.ts +14 -14
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +34 -41
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1420 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1420 -8
- package/dist/middleware/manager.d.ts.map +1 -1
- package/dist/middleware/manager.js +4 -0
- package/dist/middleware/manager.js.map +1 -1
- package/dist/openapi/docs-ui.d.ts +2 -0
- package/dist/openapi/docs-ui.d.ts.map +1 -0
- package/dist/openapi/docs-ui.js +1425 -0
- package/dist/openapi/docs-ui.js.map +1 -0
- package/dist/openapi/generator.d.ts +12 -0
- package/dist/openapi/generator.d.ts.map +1 -0
- package/dist/openapi/generator.js +502 -0
- package/dist/openapi/generator.js.map +1 -0
- package/dist/start-vector.d.ts +3 -0
- package/dist/start-vector.d.ts.map +1 -0
- package/dist/start-vector.js +38 -0
- package/dist/start-vector.js.map +1 -0
- package/dist/types/index.d.ts +95 -11
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/standard-schema.d.ts +118 -0
- package/dist/types/standard-schema.d.ts.map +1 -0
- package/dist/types/standard-schema.js +2 -0
- package/dist/types/standard-schema.js.map +1 -0
- package/dist/utils/cors.d.ts +13 -0
- package/dist/utils/cors.d.ts.map +1 -0
- package/dist/utils/cors.js +89 -0
- package/dist/utils/cors.js.map +1 -0
- package/dist/utils/logger.js +1 -1
- package/dist/utils/path.d.ts +6 -0
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js +5 -0
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/schema-validation.d.ts +31 -0
- package/dist/utils/schema-validation.d.ts.map +1 -0
- package/dist/utils/schema-validation.js +77 -0
- package/dist/utils/schema-validation.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +3 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +15 -12
- package/src/auth/protected.ts +7 -13
- package/src/cache/manager.ts +8 -18
- package/src/cli/graceful-shutdown.ts +60 -0
- package/src/cli/index.ts +52 -115
- package/src/cli/option-resolution.ts +40 -0
- package/src/constants/index.ts +7 -0
- package/src/core/config-loader.ts +7 -4
- package/src/core/router.ts +502 -156
- package/src/core/server.ts +610 -33
- package/src/core/vector.ts +87 -33
- package/src/dev/route-generator.ts +1 -3
- package/src/dev/route-scanner.ts +2 -9
- package/src/http.ts +85 -125
- package/src/index.ts +4 -3
- package/src/middleware/manager.ts +4 -0
- package/src/openapi/assets/favicon/android-chrome-192x192.png +0 -0
- package/src/openapi/assets/favicon/android-chrome-512x512.png +0 -0
- package/src/openapi/assets/favicon/apple-touch-icon.png +0 -0
- package/src/openapi/assets/favicon/favicon-16x16.png +0 -0
- package/src/openapi/assets/favicon/favicon-32x32.png +0 -0
- package/src/openapi/assets/favicon/favicon.ico +0 -0
- package/src/openapi/assets/favicon/site.webmanifest +11 -0
- package/src/openapi/assets/logo.svg +12 -0
- package/src/openapi/assets/logo_dark.svg +6 -0
- package/src/openapi/assets/logo_icon.png +0 -0
- package/src/openapi/assets/logo_white.svg +6 -0
- package/src/openapi/assets/tailwindcdn.js +83 -0
- package/src/openapi/docs-ui.ts +1435 -0
- package/src/openapi/generator.ts +586 -0
- package/src/start-vector.ts +50 -0
- package/src/types/index.ts +138 -17
- package/src/types/standard-schema.ts +147 -0
- package/src/utils/cors.ts +101 -0
- package/src/utils/logger.ts +1 -1
- package/src/utils/path.ts +6 -0
- package/src/utils/schema-validation.ts +123 -0
- package/src/utils/validation.ts +3 -0
package/dist/auth/protected.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { DefaultVectorTypes, GetAuthType, ProtectedHandler, VectorRequest,
|
|
|
2
2
|
export declare class AuthManager<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
3
3
|
private protectedHandler;
|
|
4
4
|
setProtectedHandler(handler: ProtectedHandler<TTypes>): void;
|
|
5
|
+
clearProtectedHandler(): void;
|
|
5
6
|
authenticate(request: VectorRequest<TTypes>): Promise<GetAuthType<TTypes> | null>;
|
|
6
7
|
isAuthenticated(request: VectorRequest<TTypes>): boolean;
|
|
7
8
|
getUser(request: VectorRequest<TTypes>): GetAuthType<TTypes> | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protected.d.ts","sourceRoot":"","sources":["../../src/auth/protected.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"protected.d.ts","sourceRoot":"","sources":["../../src/auth/protected.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9G,qBAAa,WAAW,CAAC,MAAM,SAAS,WAAW,GAAG,kBAAkB;IACtE,OAAO,CAAC,gBAAgB,CAAyC;IAEjE,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAIrD,qBAAqB;IAIf,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAcvF,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO;IAIxD,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;CAGpE"}
|
package/dist/auth/protected.js
CHANGED
|
@@ -3,6 +3,9 @@ export class AuthManager {
|
|
|
3
3
|
setProtectedHandler(handler) {
|
|
4
4
|
this.protectedHandler = handler;
|
|
5
5
|
}
|
|
6
|
+
clearProtectedHandler() {
|
|
7
|
+
this.protectedHandler = null;
|
|
8
|
+
}
|
|
6
9
|
async authenticate(request) {
|
|
7
10
|
if (!this.protectedHandler) {
|
|
8
11
|
throw new Error('Protected handler not configured. Use vector.protected() to set authentication handler.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protected.js","sourceRoot":"","sources":["../../src/auth/protected.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protected.js","sourceRoot":"","sources":["../../src/auth/protected.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACd,gBAAgB,GAAoC,IAAI,CAAC;IAEjE,mBAAmB,CAAC,OAAiC;QACnD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IAClC,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA8B;QAC/C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAED,eAAe,CAAC,OAA8B;QAC5C,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,OAA8B;QACpC,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAClC,CAAC;CACF"}
|
package/dist/cache/manager.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare class CacheManager<TTypes extends VectorTypes = DefaultVectorType
|
|
|
5
5
|
private cleanupInterval;
|
|
6
6
|
private inflight;
|
|
7
7
|
setCacheHandler(handler: CacheHandler): void;
|
|
8
|
+
clearCacheHandler(): void;
|
|
8
9
|
get<T = GetCacheType<TTypes>>(key: string, factory: () => Promise<T>, ttl?: number): Promise<T>;
|
|
9
10
|
private getFromMemoryCache;
|
|
10
11
|
private isCacheValid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAO5F,qBAAa,YAAY,CAAC,MAAM,SAAS,WAAW,GAAG,kBAAkB;IACvE,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAwC;IAExD,eAAe,CAAC,OAAO,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAO5F,qBAAa,YAAY,CAAC,MAAM,SAAS,WAAW,GAAG,kBAAkB;IACvE,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAwC;IAExD,eAAe,CAAC,OAAO,EAAE,YAAY;IAIrC,iBAAiB;IAIX,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,EAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,GAAG,GAAE,MAAiC,GACrC,OAAO,CAAC,CAAC,CAAC;YAYC,kBAAkB;IA2BhC,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IActB,KAAK,IAAI,IAAI;IAQP,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAE,MAAiC,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYzB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;QAAE,UAAU,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,MAAM;CAK3F"}
|
package/dist/cache/manager.js
CHANGED
|
@@ -7,6 +7,9 @@ export class CacheManager {
|
|
|
7
7
|
setCacheHandler(handler) {
|
|
8
8
|
this.cacheHandler = handler;
|
|
9
9
|
}
|
|
10
|
+
clearCacheHandler() {
|
|
11
|
+
this.cacheHandler = null;
|
|
12
|
+
}
|
|
10
13
|
async get(key, factory, ttl = DEFAULT_CONFIG.CACHE_TTL) {
|
|
11
14
|
if (ttl <= 0) {
|
|
12
15
|
return factory();
|
|
@@ -99,13 +102,8 @@ export class CacheManager {
|
|
|
99
102
|
}
|
|
100
103
|
generateKey(request, options) {
|
|
101
104
|
const url = request._parsedUrl ?? new URL(request.url);
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
url.pathname,
|
|
105
|
-
url.search,
|
|
106
|
-
options?.authUser?.id != null ? String(options.authUser.id) : 'anonymous',
|
|
107
|
-
];
|
|
108
|
-
return parts.join(':');
|
|
105
|
+
const userId = options?.authUser?.id != null ? String(options.authUser.id) : 'anonymous';
|
|
106
|
+
return `${request.method}:${url.pathname}:${url.search}:${userId}`;
|
|
109
107
|
}
|
|
110
108
|
}
|
|
111
109
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ9C,MAAM,OAAO,YAAY;IACf,YAAY,GAAwB,IAAI,CAAC;IACzC,WAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;IACjD,eAAe,GAAiB,IAAI,CAAC;IACrC,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;IAExD,eAAe,CAAC,OAAqB;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,OAAyB,EACzB,MAAc,cAAc,CAAC,SAAS;QAEtC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAe,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ9C,MAAM,OAAO,YAAY;IACf,YAAY,GAAwB,IAAI,CAAC;IACzC,WAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;IACjD,eAAe,GAAiB,IAAI,CAAC;IACrC,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;IAExD,eAAe,CAAC,OAAqB;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,OAAyB,EACzB,MAAc,cAAc,CAAC,SAAS;QAEtC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAe,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAI,GAAW,EAAE,OAAyB,EAAE,GAAW;QACrF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,MAAO,CAAC,KAAU,CAAC;QAC5B,CAAC;QAED,+EAA+E;QAC/E,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAM,CAAC;QAC9C,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC;QACvB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAA6B,EAAE,GAAW;QAC7D,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;IACpD,CAAC;IAEO,gBAAgB,CAAC,GAAW,EAAE,KAAU,EAAE,GAAW;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAE9C,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QAEjC,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;IACrC,CAAC;IAEO,cAAc;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxD,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAA2B,GAAW,EAAE,KAAQ,EAAE,MAAc,cAAc,CAAC,SAAS;QAC/F,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,uDAAuD;YACvD,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,OAAuC,EAAE,OAA4B;QAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACzF,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;IACrE,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type SignalEvent = 'SIGINT' | 'SIGTERM';
|
|
2
|
+
interface ShutdownTarget {
|
|
3
|
+
shutdown?: () => Promise<void> | void;
|
|
4
|
+
stop?: () => void;
|
|
5
|
+
}
|
|
6
|
+
interface GracefulShutdownOptions {
|
|
7
|
+
getTarget: () => ShutdownTarget | null | undefined;
|
|
8
|
+
on?: (event: SignalEvent, listener: () => void) => void;
|
|
9
|
+
off?: (event: SignalEvent, listener: () => void) => void;
|
|
10
|
+
exit?: (code: number) => void;
|
|
11
|
+
logError?: (message?: any, ...optionalParams: any[]) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function installGracefulShutdownHandlers(options: GracefulShutdownOptions): () => void;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=graceful-shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graceful-shutdown.d.ts","sourceRoot":"","sources":["../../src/cli/graceful-shutdown.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExC,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE,MAAM,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACxD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CAC9D;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,IAAI,CA4C5F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export function installGracefulShutdownHandlers(options) {
|
|
2
|
+
const on = options.on ?? ((event, listener) => process.on(event, listener));
|
|
3
|
+
const off = options.off ?? ((event, listener) => process.off(event, listener));
|
|
4
|
+
const exit = options.exit ?? ((code) => process.exit(code));
|
|
5
|
+
const logError = options.logError ?? console.error;
|
|
6
|
+
let shuttingDown = false;
|
|
7
|
+
const handleSignal = async (signal) => {
|
|
8
|
+
if (shuttingDown) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
shuttingDown = true;
|
|
12
|
+
try {
|
|
13
|
+
const target = options.getTarget();
|
|
14
|
+
if (target) {
|
|
15
|
+
if (typeof target.shutdown === 'function') {
|
|
16
|
+
await target.shutdown();
|
|
17
|
+
}
|
|
18
|
+
else if (typeof target.stop === 'function') {
|
|
19
|
+
target.stop();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exit(0);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logError(`[vector] Graceful shutdown failed after ${signal}:`, error);
|
|
26
|
+
exit(1);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const onSigint = () => {
|
|
30
|
+
void handleSignal('SIGINT');
|
|
31
|
+
};
|
|
32
|
+
const onSigterm = () => {
|
|
33
|
+
void handleSignal('SIGTERM');
|
|
34
|
+
};
|
|
35
|
+
on('SIGINT', onSigint);
|
|
36
|
+
on('SIGTERM', onSigterm);
|
|
37
|
+
return () => {
|
|
38
|
+
off('SIGINT', onSigint);
|
|
39
|
+
off('SIGTERM', onSigterm);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=graceful-shutdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graceful-shutdown.js","sourceRoot":"","sources":["../../src/cli/graceful-shutdown.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,+BAA+B,CAAC,OAAgC;IAC9E,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,KAAkB,EAAE,QAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,KAAkB,EAAE,QAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IACnD,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,MAAM,YAAY,GAAG,KAAK,EAAE,MAAmB,EAAiB,EAAE;QAChE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC1C,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC1B,CAAC;qBAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC7C,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,2CAA2C,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,KAAK,YAAY,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvB,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEzB,OAAO,GAAG,EAAE;QACV,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxB,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import { watch } from 'node:fs';
|
|
3
3
|
import { parseArgs } from 'node:util';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { resolveHost, resolvePort, resolveRoutesDir } from './option-resolution';
|
|
5
|
+
import { installGracefulShutdownHandlers } from './graceful-shutdown';
|
|
6
|
+
import { startVector } from '../start-vector';
|
|
6
7
|
// Compatibility layer for both Node and Bun
|
|
7
8
|
const args = typeof Bun !== 'undefined' ? Bun.argv.slice(2) : process.argv.slice(2);
|
|
8
9
|
const { values, positionals } = parseArgs({
|
|
@@ -41,10 +42,14 @@ const { values, positionals } = parseArgs({
|
|
|
41
42
|
allowPositionals: true,
|
|
42
43
|
});
|
|
43
44
|
const command = positionals[0] || 'dev';
|
|
45
|
+
const hasRoutesOption = args.some((arg) => arg === '--routes' || arg === '-r' || arg.startsWith('--routes='));
|
|
46
|
+
const hasHostOption = args.some((arg) => arg === '--host' || arg === '-h' || arg.startsWith('--host='));
|
|
47
|
+
const hasPortOption = args.some((arg) => arg === '--port' || arg === '-p' || arg.startsWith('--port='));
|
|
44
48
|
async function runDev() {
|
|
45
49
|
const isDev = command === 'dev';
|
|
46
50
|
let server = null;
|
|
47
|
-
let
|
|
51
|
+
let app = null;
|
|
52
|
+
let removeShutdownHandlers = null;
|
|
48
53
|
async function startServer() {
|
|
49
54
|
// Create a timeout promise that rejects after 10 seconds
|
|
50
55
|
const timeoutPromise = new Promise((_, reject) => {
|
|
@@ -54,42 +59,31 @@ async function runDev() {
|
|
|
54
59
|
});
|
|
55
60
|
// Create the actual server start promise
|
|
56
61
|
const serverStartPromise = (async () => {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const authHandler = await configLoader.loadAuthHandler();
|
|
83
|
-
if (authHandler) {
|
|
84
|
-
vector.setProtectedHandler(authHandler);
|
|
85
|
-
}
|
|
86
|
-
// Load and set cache handler if configured
|
|
87
|
-
const cacheHandler = await configLoader.loadCacheHandler();
|
|
88
|
-
if (cacheHandler) {
|
|
89
|
-
vector.setCacheHandler(cacheHandler);
|
|
90
|
-
}
|
|
91
|
-
// Start the server
|
|
92
|
-
server = await vector.startServer(config);
|
|
62
|
+
const explicitConfigPath = values.config;
|
|
63
|
+
app = await startVector({
|
|
64
|
+
configPath: explicitConfigPath,
|
|
65
|
+
mutateConfig: (loadedConfig) => {
|
|
66
|
+
const config = { ...loadedConfig };
|
|
67
|
+
config.port = resolvePort(config.port, hasPortOption, values.port);
|
|
68
|
+
config.hostname = resolveHost(config.hostname, hasHostOption, values.host);
|
|
69
|
+
config.routesDir = resolveRoutesDir(config.routesDir, hasRoutesOption, values.routes);
|
|
70
|
+
config.development = config.development ?? isDev;
|
|
71
|
+
config.autoDiscover = true; // Always auto-discover routes
|
|
72
|
+
if (config.cors === undefined && values.cors) {
|
|
73
|
+
config.cors = {
|
|
74
|
+
origin: '*',
|
|
75
|
+
credentials: true,
|
|
76
|
+
allowHeaders: 'Content-Type, Authorization',
|
|
77
|
+
allowMethods: 'GET, POST, PUT, PATCH, DELETE, OPTIONS',
|
|
78
|
+
exposeHeaders: 'Authorization',
|
|
79
|
+
maxAge: 86400,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return config;
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
server = app.server;
|
|
86
|
+
const config = app.config;
|
|
93
87
|
// Verify the server is actually running
|
|
94
88
|
if (!server || !server.port) {
|
|
95
89
|
throw new Error('Server started but is not responding correctly');
|
|
@@ -97,7 +91,7 @@ async function runDev() {
|
|
|
97
91
|
const cyan = '\x1b[36m';
|
|
98
92
|
const reset = '\x1b[0m';
|
|
99
93
|
console.log(`\nListening on ${cyan}http://${config.hostname}:${config.port}${reset}\n`);
|
|
100
|
-
return { server,
|
|
94
|
+
return { server, app, config };
|
|
101
95
|
})();
|
|
102
96
|
// Race between server startup and timeout
|
|
103
97
|
return await Promise.race([serverStartPromise, timeoutPromise]);
|
|
@@ -106,6 +100,11 @@ async function runDev() {
|
|
|
106
100
|
// Start the server initially
|
|
107
101
|
const result = await startServer();
|
|
108
102
|
server = result.server;
|
|
103
|
+
if (!removeShutdownHandlers) {
|
|
104
|
+
removeShutdownHandlers = installGracefulShutdownHandlers({
|
|
105
|
+
getTarget: () => app,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
109
108
|
// Setup file watching for hot reload
|
|
110
109
|
if (isDev && values.watch) {
|
|
111
110
|
try {
|
|
@@ -141,8 +140,8 @@ async function runDev() {
|
|
|
141
140
|
// Clear changed files
|
|
142
141
|
changedFiles.clear();
|
|
143
142
|
// Stop the current server
|
|
144
|
-
if (
|
|
145
|
-
|
|
143
|
+
if (app) {
|
|
144
|
+
app.stop();
|
|
146
145
|
}
|
|
147
146
|
// Small delay to ensure file system operations complete
|
|
148
147
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
@@ -150,7 +149,7 @@ async function runDev() {
|
|
|
150
149
|
try {
|
|
151
150
|
const result = await startServer();
|
|
152
151
|
server = result.server;
|
|
153
|
-
|
|
152
|
+
app = result.app;
|
|
154
153
|
}
|
|
155
154
|
catch (error) {
|
|
156
155
|
console.error('\n[Reload Error]', error.message || error);
|
|
@@ -182,64 +181,15 @@ async function runDev() {
|
|
|
182
181
|
process.exit(1);
|
|
183
182
|
}
|
|
184
183
|
}
|
|
185
|
-
async function runBuild() {
|
|
186
|
-
try {
|
|
187
|
-
const { RouteScanner } = await import('../dev/route-scanner');
|
|
188
|
-
const { RouteGenerator } = await import('../dev/route-generator');
|
|
189
|
-
// Step 1: Scan and generate routes
|
|
190
|
-
const scanner = new RouteScanner(values.routes);
|
|
191
|
-
const generator = new RouteGenerator();
|
|
192
|
-
const routes = await scanner.scan();
|
|
193
|
-
await generator.generate(routes);
|
|
194
|
-
// Step 2: Build the application with Bun
|
|
195
|
-
if (typeof Bun !== 'undefined') {
|
|
196
|
-
// Build the CLI as an executable
|
|
197
|
-
const buildProcess = Bun.spawn([
|
|
198
|
-
'bun',
|
|
199
|
-
'build',
|
|
200
|
-
'src/cli/index.ts',
|
|
201
|
-
'--target',
|
|
202
|
-
'bun',
|
|
203
|
-
'--outfile',
|
|
204
|
-
'dist/server.js',
|
|
205
|
-
'--minify',
|
|
206
|
-
]);
|
|
207
|
-
const exitCode = await buildProcess.exited;
|
|
208
|
-
if (exitCode !== 0) {
|
|
209
|
-
throw new Error(`Build failed with exit code ${exitCode}`);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
// For Node.js, use child_process
|
|
214
|
-
const { spawnSync } = await import('child_process');
|
|
215
|
-
const result = spawnSync('bun', ['build', 'src/cli/index.ts', '--target', 'bun', '--outfile', 'dist/server.js', '--minify'], {
|
|
216
|
-
stdio: 'inherit',
|
|
217
|
-
shell: true,
|
|
218
|
-
});
|
|
219
|
-
if (result.status !== 0) {
|
|
220
|
-
throw new Error(`Build failed with exit code ${result.status}`);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
console.log('\nBuild complete: dist/server.js\n');
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
const red = '\x1b[31m';
|
|
227
|
-
const reset = '\x1b[0m';
|
|
228
|
-
console.error(`\n${red}Error: ${error.message || error}${reset}\n`);
|
|
229
|
-
process.exit(1);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
184
|
switch (command) {
|
|
233
185
|
case 'dev':
|
|
234
186
|
await runDev();
|
|
235
187
|
break;
|
|
236
|
-
case '
|
|
237
|
-
await runBuild();
|
|
238
|
-
break;
|
|
239
|
-
case 'start':
|
|
188
|
+
case 'start': {
|
|
240
189
|
process.env.NODE_ENV = 'production';
|
|
241
190
|
await runDev();
|
|
242
191
|
break;
|
|
192
|
+
}
|
|
243
193
|
default:
|
|
244
194
|
console.error(`Unknown command: ${command}`);
|
|
245
195
|
console.log(`
|
|
@@ -247,15 +197,14 @@ Usage: vector [command] [options]
|
|
|
247
197
|
|
|
248
198
|
Commands:
|
|
249
199
|
dev Start development server (default)
|
|
250
|
-
build Build for production
|
|
251
200
|
start Start production server
|
|
252
201
|
|
|
253
202
|
Options:
|
|
254
203
|
-p, --port <port> Port to listen on (default: 3000)
|
|
255
204
|
-h, --host <host> Hostname to bind to (default: localhost)
|
|
256
|
-
-r, --routes <dir> Routes directory (
|
|
205
|
+
-r, --routes <dir> Routes directory (dev/start)
|
|
257
206
|
-w, --watch Watch for file changes (default: true)
|
|
258
|
-
-c, --config <path> Path to config file (
|
|
207
|
+
-c, --config <path> Path to config file (dev/start)
|
|
259
208
|
--cors Enable CORS (default: true)
|
|
260
209
|
`);
|
|
261
210
|
process.exit(1);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,4CAA4C;AAC5C,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IACxC,IAAI;IACJ,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,MAAM;SAChB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,WAAW;SACrB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,UAAU;SACpB;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,IAAI;SACd;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;SACX;KACF;IACD,MAAM,EAAE,IAAI;IACZ,gBAAgB,EAAE,IAAI;CACvB,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AACxC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9G,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACxG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAExG,KAAK,UAAU,MAAM;IACnB,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,CAAC;IAEhC,IAAI,MAAM,GAAQ,IAAI,CAAC;IACvB,IAAI,GAAG,GAAiC,IAAI,CAAC;IAC7C,IAAI,sBAAsB,GAAwB,IAAI,CAAC;IAEvD,KAAK,UAAU,WAAW;QACxB,yDAAyD;QACzD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YACtD,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,yCAAyC;QACzC,MAAM,kBAAkB,GAAG,CAAC,KAAK,IAAuE,EAAE;YACxG,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAA4B,CAAC;YAC/D,GAAG,GAAG,MAAM,WAAW,CAAC;gBACtB,UAAU,EAAE,kBAAkB;gBAC9B,YAAY,EAAE,CAAC,YAAY,EAAE,EAAE;oBAC7B,MAAM,MAAM,GAAG,EAAE,GAAG,YAAY,EAAyB,CAAC;oBAC1D,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,IAAc,CAAC,CAAC;oBAC7E,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,IAAc,CAAC,CAAC;oBACrF,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,MAAgB,CAAC,CAAC;oBAChG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;oBACjD,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,8BAA8B;oBAE1D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;wBAC7C,MAAM,CAAC,IAAI,GAAG;4BACZ,MAAM,EAAE,GAAG;4BACX,WAAW,EAAE,IAAI;4BACjB,YAAY,EAAE,6BAA6B;4BAC3C,YAAY,EAAE,wCAAwC;4BACtD,aAAa,EAAE,eAAe;4BAC9B,MAAM,EAAE,KAAK;yBACd,CAAC;oBACJ,CAAC;oBAED,OAAO,MAAM,CAAC;gBAChB,CAAC;aACF,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YACpB,MAAM,MAAM,GAAG,GAAG,CAAC,MAA6B,CAAC;YAEjD,wCAAwC;YACxC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,IAAI,GAAG,UAAU,CAAC;YACxB,MAAM,KAAK,GAAG,SAAS,CAAC;YAExB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,UAAU,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;YAExF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,EAAE,CAAC;QAEL,0CAA0C;QAC1C,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAEvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,sBAAsB,GAAG,+BAA+B,CAAC;gBACvD,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG;aACrB,CAAC,CAAC;QACL,CAAC;QAED,qCAAqC;QACrC,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,IAAI,aAAa,GAAQ,IAAI,CAAC;gBAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;gBACvC,IAAI,cAAc,GAAG,CAAC,CAAC;gBAEvB,6CAA6C;gBAC7C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;oBAC9D,kEAAkE;oBAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,IAAI,WAAW,IAAI,GAAG,GAAG,cAAc,GAAG,IAAI;wBAAE,OAAO;oBAEvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/F,IACE,QAAQ;wBACR,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;wBACpF,CAAC,QAAQ;wBACT,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,oBAAoB;wBACvD,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,yBAAyB;sBAC7D,CAAC;wBACD,sBAAsB;wBACtB,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAE3B,6CAA6C;wBAC7C,IAAI,aAAa,EAAE,CAAC;4BAClB,YAAY,CAAC,aAAa,CAAC,CAAC;wBAC9B,CAAC;wBAED,aAAa,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;4BACpC,IAAI,WAAW,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;gCAAE,OAAO;4BAEnD,WAAW,GAAG,IAAI,CAAC;4BACnB,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAE5B,sBAAsB;4BACtB,YAAY,CAAC,KAAK,EAAE,CAAC;4BAErB,0BAA0B;4BAC1B,IAAI,GAAG,EAAE,CAAC;gCACR,GAAG,CAAC,IAAI,EAAE,CAAC;4BACb,CAAC;4BAED,wDAAwD;4BACxD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;4BAEzD,qBAAqB;4BACrB,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;gCACnC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gCACvB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;4BACnB,CAAC;4BAAC,OAAO,KAAU,EAAE,CAAC;gCACpB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;gCAC1D,oEAAoE;4BACtE,CAAC;oCAAS,CAAC;gCACT,gDAAgD;gCAChD,0DAA0D;gCAC1D,WAAW,GAAG,KAAK,CAAC;4BACtB,CAAC;wBACH,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,8BAA8B;oBACzC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,MAAM,GAAG,UAAU,CAAC;gBAC1B,MAAM,KAAK,GAAG,SAAS,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,uCAAuC,KAAK,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,UAAU,CAAC;QACvB,MAAM,KAAK,GAAG,SAAS,CAAC;QAExB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,KAAK,CAAC,OAAO,IAAI,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;QAEpE,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,KAAK;QACR,MAAM,MAAM,EAAE,CAAC;QACf,MAAM;IACR,KAAK,OAAO,CAAC,CAAC,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;QACpC,MAAM,MAAM,EAAE,CAAC;QACf,MAAM;IACR,CAAC;IACD;QACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcf,CAAC,CAAC;QACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function resolveRoutesDir(configRoutesDir: string | null | undefined, hasRoutesOption: boolean, cliRoutes: string): string;
|
|
2
|
+
export declare function resolvePort(configPort: number | null | undefined, hasPortOption: boolean, cliPort: string): number;
|
|
3
|
+
export declare function resolveHost(configHost: string | null | undefined, hasHostOption: boolean, cliHost: string): string;
|
|
4
|
+
//# sourceMappingURL=option-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-resolution.d.ts","sourceRoot":"","sources":["../../src/cli/option-resolution.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,eAAe,EAAE,OAAO,EACxB,SAAS,EAAE,MAAM,GAChB,MAAM,CAMR;AAYD,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOlH;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQlH"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function resolveRoutesDir(configRoutesDir, hasRoutesOption, cliRoutes) {
|
|
2
|
+
if (hasRoutesOption) {
|
|
3
|
+
return cliRoutes;
|
|
4
|
+
}
|
|
5
|
+
return configRoutesDir ?? cliRoutes;
|
|
6
|
+
}
|
|
7
|
+
function parseAndValidatePort(value) {
|
|
8
|
+
const parsed = typeof value === 'number' ? value : Number.parseInt(String(value), 10);
|
|
9
|
+
if (!Number.isInteger(parsed) || parsed < 0 || parsed > 65535) {
|
|
10
|
+
throw new Error(`Invalid port value: ${String(value)}`);
|
|
11
|
+
}
|
|
12
|
+
return parsed;
|
|
13
|
+
}
|
|
14
|
+
export function resolvePort(configPort, hasPortOption, cliPort) {
|
|
15
|
+
if (hasPortOption) {
|
|
16
|
+
return parseAndValidatePort(cliPort);
|
|
17
|
+
}
|
|
18
|
+
const resolved = configPort ?? cliPort;
|
|
19
|
+
return parseAndValidatePort(resolved);
|
|
20
|
+
}
|
|
21
|
+
export function resolveHost(configHost, hasHostOption, cliHost) {
|
|
22
|
+
const resolved = hasHostOption ? cliHost : (configHost ?? cliHost);
|
|
23
|
+
if (typeof resolved !== 'string' || resolved.length === 0) {
|
|
24
|
+
throw new Error(`Invalid host value: ${String(resolved)}`);
|
|
25
|
+
}
|
|
26
|
+
return resolved;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=option-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-resolution.js","sourceRoot":"","sources":["../../src/cli/option-resolution.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAC9B,eAA0C,EAC1C,eAAwB,EACxB,SAAiB;IAEjB,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,eAAe,IAAI,SAAS,CAAC;AACtC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAqC,EAAE,aAAsB,EAAE,OAAe;IACxG,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC;IACvC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAqC,EAAE,aAAsB,EAAE,OAAe;IACxG,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC;IAEnE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|