vector-framework 0.8.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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +508 -0
  3. package/dist/auth/protected.d.ts +9 -0
  4. package/dist/auth/protected.d.ts.map +1 -0
  5. package/dist/auth/protected.js +26 -0
  6. package/dist/auth/protected.js.map +1 -0
  7. package/dist/cache/manager.d.ts +21 -0
  8. package/dist/cache/manager.d.ts.map +1 -0
  9. package/dist/cache/manager.js +92 -0
  10. package/dist/cache/manager.js.map +1 -0
  11. package/dist/cli/index.d.ts +3 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +142 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/constants/index.d.ts +84 -0
  16. package/dist/constants/index.d.ts.map +1 -0
  17. package/dist/constants/index.js +88 -0
  18. package/dist/constants/index.js.map +1 -0
  19. package/dist/core/router.d.ts +26 -0
  20. package/dist/core/router.d.ts.map +1 -0
  21. package/dist/core/router.js +208 -0
  22. package/dist/core/router.js.map +1 -0
  23. package/dist/core/server.d.ts +18 -0
  24. package/dist/core/server.d.ts.map +1 -0
  25. package/dist/core/server.js +89 -0
  26. package/dist/core/server.js.map +1 -0
  27. package/dist/core/vector.d.ts +43 -0
  28. package/dist/core/vector.d.ts.map +1 -0
  29. package/dist/core/vector.js +179 -0
  30. package/dist/core/vector.js.map +1 -0
  31. package/dist/dev/route-generator.d.ts +8 -0
  32. package/dist/dev/route-generator.d.ts.map +1 -0
  33. package/dist/dev/route-generator.js +77 -0
  34. package/dist/dev/route-generator.js.map +1 -0
  35. package/dist/dev/route-scanner.d.ts +9 -0
  36. package/dist/dev/route-scanner.d.ts.map +1 -0
  37. package/dist/dev/route-scanner.js +85 -0
  38. package/dist/dev/route-scanner.js.map +1 -0
  39. package/dist/errors/index.d.ts +24 -0
  40. package/dist/errors/index.d.ts.map +1 -0
  41. package/dist/errors/index.js +73 -0
  42. package/dist/errors/index.js.map +1 -0
  43. package/dist/http.d.ts +73 -0
  44. package/dist/http.d.ts.map +1 -0
  45. package/dist/http.js +143 -0
  46. package/dist/http.js.map +1 -0
  47. package/dist/index.d.ts +13 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +21 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/index.mjs +21 -0
  52. package/dist/middleware/manager.d.ts +11 -0
  53. package/dist/middleware/manager.d.ts.map +1 -0
  54. package/dist/middleware/manager.js +35 -0
  55. package/dist/middleware/manager.js.map +1 -0
  56. package/dist/types/index.d.ts +85 -0
  57. package/dist/types/index.d.ts.map +1 -0
  58. package/dist/types/index.js +2 -0
  59. package/dist/types/index.js.map +1 -0
  60. package/dist/utils/logger.d.ts +25 -0
  61. package/dist/utils/logger.d.ts.map +1 -0
  62. package/dist/utils/logger.js +68 -0
  63. package/dist/utils/logger.js.map +1 -0
  64. package/dist/utils/validation.d.ts +5 -0
  65. package/dist/utils/validation.d.ts.map +1 -0
  66. package/dist/utils/validation.js +48 -0
  67. package/dist/utils/validation.js.map +1 -0
  68. package/package.json +110 -0
  69. package/src/auth/protected.ts +41 -0
  70. package/src/cache/manager.ts +133 -0
  71. package/src/cli/index.ts +157 -0
  72. package/src/constants/index.ts +93 -0
  73. package/src/core/router.ts +258 -0
  74. package/src/core/server.ts +107 -0
  75. package/src/core/vector.ts +228 -0
  76. package/src/dev/route-generator.ts +93 -0
  77. package/src/dev/route-scanner.ts +97 -0
  78. package/src/errors/index.ts +91 -0
  79. package/src/http.ts +331 -0
  80. package/src/index.ts +19 -0
  81. package/src/middleware/manager.ts +53 -0
  82. package/src/types/index.ts +126 -0
  83. package/src/utils/logger.ts +87 -0
  84. package/src/utils/validation.ts +58 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env bun
2
+ import { join } from 'node:path';
3
+ import { parseArgs } from 'node:util';
4
+ import vector from '../core/vector';
5
+ const { values, positionals } = parseArgs({
6
+ args: Bun.argv.slice(2),
7
+ options: {
8
+ port: {
9
+ type: 'string',
10
+ short: 'p',
11
+ default: '3000',
12
+ },
13
+ host: {
14
+ type: 'string',
15
+ short: 'h',
16
+ default: 'localhost',
17
+ },
18
+ routes: {
19
+ type: 'string',
20
+ short: 'r',
21
+ default: './routes',
22
+ },
23
+ watch: {
24
+ type: 'boolean',
25
+ short: 'w',
26
+ default: true,
27
+ },
28
+ cors: {
29
+ type: 'boolean',
30
+ default: true,
31
+ },
32
+ },
33
+ strict: true,
34
+ allowPositionals: true,
35
+ });
36
+ const command = positionals[0] || 'dev';
37
+ async function runDev() {
38
+ const isDev = command === 'dev';
39
+ console.log(`\n→ Starting Vector ${isDev ? 'development' : 'production'} server\n`);
40
+ const config = {
41
+ port: Number.parseInt(values.port),
42
+ hostname: values.host,
43
+ routesDir: values.routes,
44
+ development: isDev,
45
+ autoDiscover: true,
46
+ cors: values.cors
47
+ ? {
48
+ origin: '*',
49
+ credentials: true,
50
+ allowHeaders: 'Content-Type, Authorization',
51
+ allowMethods: 'GET, POST, PUT, PATCH, DELETE, OPTIONS',
52
+ exposeHeaders: 'Authorization',
53
+ maxAge: 86400,
54
+ }
55
+ : undefined,
56
+ };
57
+ try {
58
+ const userConfigPath = join(process.cwd(), 'vector.config.ts');
59
+ try {
60
+ const userConfig = await import(userConfigPath);
61
+ if (userConfig.default) {
62
+ Object.assign(config, userConfig.default);
63
+ }
64
+ }
65
+ catch {
66
+ // No user config file, use defaults
67
+ }
68
+ await vector.serve(config);
69
+ const gray = '\x1b[90m';
70
+ const reset = '\x1b[0m';
71
+ const cyan = '\x1b[36m';
72
+ const green = '\x1b[32m';
73
+ console.log(` ${gray}Routes${reset} ${config.routesDir}`);
74
+ if (isDev && values.watch) {
75
+ console.log(` ${gray}Watching${reset} Enabled`);
76
+ }
77
+ console.log(` ${gray}CORS${reset} ${values.cors ? 'Enabled' : 'Disabled'}`);
78
+ console.log(` ${gray}Mode${reset} ${isDev ? 'Development' : 'Production'}\n`);
79
+ console.log(` ${green}Ready${reset} → ${cyan}http://${config.hostname}:${config.port}${reset}\n`);
80
+ }
81
+ catch (error) {
82
+ console.error('[ERROR] Failed to start server:', error);
83
+ process.exit(1);
84
+ }
85
+ }
86
+ async function runBuild() {
87
+ console.log('\n→ Building Vector application\n');
88
+ try {
89
+ const { RouteScanner } = await import('../dev/route-scanner');
90
+ const { RouteGenerator } = await import('../dev/route-generator');
91
+ const scanner = new RouteScanner(values.routes);
92
+ const generator = new RouteGenerator();
93
+ const routes = await scanner.scan();
94
+ await generator.generate(routes);
95
+ console.log(` Generated ${routes.length} routes`);
96
+ const buildProcess = Bun.spawn([
97
+ 'bun',
98
+ 'build',
99
+ 'src/index.ts',
100
+ '--outdir',
101
+ 'dist',
102
+ '--minify',
103
+ ]);
104
+ await buildProcess.exited;
105
+ console.log('\n ✓ Build complete\n');
106
+ }
107
+ catch (error) {
108
+ console.error('[ERROR] Build failed:', error);
109
+ process.exit(1);
110
+ }
111
+ }
112
+ switch (command) {
113
+ case 'dev':
114
+ await runDev();
115
+ break;
116
+ case 'build':
117
+ await runBuild();
118
+ break;
119
+ case 'start':
120
+ process.env.NODE_ENV = 'production';
121
+ await runDev();
122
+ break;
123
+ default:
124
+ console.error(`Unknown command: ${command}`);
125
+ console.log(`
126
+ Usage: vector [command] [options]
127
+
128
+ Commands:
129
+ dev Start development server (default)
130
+ build Build for production
131
+ start Start production server
132
+
133
+ Options:
134
+ -p, --port <port> Port to listen on (default: 3000)
135
+ -h, --host <host> Hostname to bind to (default: localhost)
136
+ -r, --routes <dir> Routes directory (default: ./routes)
137
+ -w, --watch Watch for file changes (default: true)
138
+ --cors Enable CORS (default: true)
139
+ `);
140
+ process.exit(1);
141
+ }
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ export declare const HTTP_STATUS: {
2
+ readonly OK: 200;
3
+ readonly CREATED: 201;
4
+ readonly ACCEPTED: 202;
5
+ readonly NON_AUTHORITATIVE_INFORMATION: 203;
6
+ readonly NO_CONTENT: 204;
7
+ readonly RESET_CONTENT: 205;
8
+ readonly PARTIAL_CONTENT: 206;
9
+ readonly MULTI_STATUS: 207;
10
+ readonly ALREADY_REPORTED: 208;
11
+ readonly IM_USED: 226;
12
+ readonly MULTIPLE_CHOICES: 300;
13
+ readonly MOVED_PERMANENTLY: 301;
14
+ readonly FOUND: 302;
15
+ readonly SEE_OTHER: 303;
16
+ readonly NOT_MODIFIED: 304;
17
+ readonly USE_PROXY: 305;
18
+ readonly TEMPORARY_REDIRECT: 307;
19
+ readonly PERMANENT_REDIRECT: 308;
20
+ readonly BAD_REQUEST: 400;
21
+ readonly UNAUTHORIZED: 401;
22
+ readonly PAYMENT_REQUIRED: 402;
23
+ readonly FORBIDDEN: 403;
24
+ readonly NOT_FOUND: 404;
25
+ readonly METHOD_NOT_ALLOWED: 405;
26
+ readonly NOT_ACCEPTABLE: 406;
27
+ readonly PROXY_AUTHENTICATION_REQUIRED: 407;
28
+ readonly REQUEST_TIMEOUT: 408;
29
+ readonly CONFLICT: 409;
30
+ readonly GONE: 410;
31
+ readonly LENGTH_REQUIRED: 411;
32
+ readonly PRECONDITION_FAILED: 412;
33
+ readonly PAYLOAD_TOO_LARGE: 413;
34
+ readonly URI_TOO_LONG: 414;
35
+ readonly UNSUPPORTED_MEDIA_TYPE: 415;
36
+ readonly RANGE_NOT_SATISFIABLE: 416;
37
+ readonly EXPECTATION_FAILED: 417;
38
+ readonly IM_A_TEAPOT: 418;
39
+ readonly MISDIRECTED_REQUEST: 421;
40
+ readonly UNPROCESSABLE_ENTITY: 422;
41
+ readonly LOCKED: 423;
42
+ readonly FAILED_DEPENDENCY: 424;
43
+ readonly TOO_EARLY: 425;
44
+ readonly UPGRADE_REQUIRED: 426;
45
+ readonly PRECONDITION_REQUIRED: 428;
46
+ readonly TOO_MANY_REQUESTS: 429;
47
+ readonly REQUEST_HEADER_FIELDS_TOO_LARGE: 431;
48
+ readonly UNAVAILABLE_FOR_LEGAL_REASONS: 451;
49
+ readonly INTERNAL_SERVER_ERROR: 500;
50
+ readonly NOT_IMPLEMENTED: 501;
51
+ readonly BAD_GATEWAY: 502;
52
+ readonly SERVICE_UNAVAILABLE: 503;
53
+ readonly GATEWAY_TIMEOUT: 504;
54
+ readonly HTTP_VERSION_NOT_SUPPORTED: 505;
55
+ readonly VARIANT_ALSO_NEGOTIATES: 506;
56
+ readonly INSUFFICIENT_STORAGE: 507;
57
+ readonly LOOP_DETECTED: 508;
58
+ readonly NOT_EXTENDED: 510;
59
+ readonly NETWORK_AUTHENTICATION_REQUIRED: 511;
60
+ };
61
+ export declare const DEFAULT_CONFIG: {
62
+ readonly PORT: 3000;
63
+ readonly HOSTNAME: "localhost";
64
+ readonly ROUTES_DIR: "./routes";
65
+ readonly CACHE_TTL: 0;
66
+ readonly CORS_MAX_AGE: 86400;
67
+ };
68
+ export declare const CONTENT_TYPES: {
69
+ readonly JSON: "application/json";
70
+ readonly TEXT: "text/plain";
71
+ readonly HTML: "text/html";
72
+ readonly FORM_URLENCODED: "application/x-www-form-urlencoded";
73
+ readonly MULTIPART: "multipart/form-data";
74
+ };
75
+ export declare const HTTP_METHODS: {
76
+ readonly GET: "GET";
77
+ readonly POST: "POST";
78
+ readonly PUT: "PUT";
79
+ readonly PATCH: "PATCH";
80
+ readonly DELETE: "DELETE";
81
+ readonly OPTIONS: "OPTIONS";
82
+ readonly HEAD: "HEAD";
83
+ };
84
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEd,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC"}
@@ -0,0 +1,88 @@
1
+ export const HTTP_STATUS = {
2
+ // 2xx Success
3
+ OK: 200,
4
+ CREATED: 201,
5
+ ACCEPTED: 202,
6
+ NON_AUTHORITATIVE_INFORMATION: 203,
7
+ NO_CONTENT: 204,
8
+ RESET_CONTENT: 205,
9
+ PARTIAL_CONTENT: 206,
10
+ MULTI_STATUS: 207,
11
+ ALREADY_REPORTED: 208,
12
+ IM_USED: 226,
13
+ // 3xx Redirection
14
+ MULTIPLE_CHOICES: 300,
15
+ MOVED_PERMANENTLY: 301,
16
+ FOUND: 302,
17
+ SEE_OTHER: 303,
18
+ NOT_MODIFIED: 304,
19
+ USE_PROXY: 305,
20
+ TEMPORARY_REDIRECT: 307,
21
+ PERMANENT_REDIRECT: 308,
22
+ // 4xx Client Errors
23
+ BAD_REQUEST: 400,
24
+ UNAUTHORIZED: 401,
25
+ PAYMENT_REQUIRED: 402,
26
+ FORBIDDEN: 403,
27
+ NOT_FOUND: 404,
28
+ METHOD_NOT_ALLOWED: 405,
29
+ NOT_ACCEPTABLE: 406,
30
+ PROXY_AUTHENTICATION_REQUIRED: 407,
31
+ REQUEST_TIMEOUT: 408,
32
+ CONFLICT: 409,
33
+ GONE: 410,
34
+ LENGTH_REQUIRED: 411,
35
+ PRECONDITION_FAILED: 412,
36
+ PAYLOAD_TOO_LARGE: 413,
37
+ URI_TOO_LONG: 414,
38
+ UNSUPPORTED_MEDIA_TYPE: 415,
39
+ RANGE_NOT_SATISFIABLE: 416,
40
+ EXPECTATION_FAILED: 417,
41
+ IM_A_TEAPOT: 418,
42
+ MISDIRECTED_REQUEST: 421,
43
+ UNPROCESSABLE_ENTITY: 422,
44
+ LOCKED: 423,
45
+ FAILED_DEPENDENCY: 424,
46
+ TOO_EARLY: 425,
47
+ UPGRADE_REQUIRED: 426,
48
+ PRECONDITION_REQUIRED: 428,
49
+ TOO_MANY_REQUESTS: 429,
50
+ REQUEST_HEADER_FIELDS_TOO_LARGE: 431,
51
+ UNAVAILABLE_FOR_LEGAL_REASONS: 451,
52
+ // 5xx Server Errors
53
+ INTERNAL_SERVER_ERROR: 500,
54
+ NOT_IMPLEMENTED: 501,
55
+ BAD_GATEWAY: 502,
56
+ SERVICE_UNAVAILABLE: 503,
57
+ GATEWAY_TIMEOUT: 504,
58
+ HTTP_VERSION_NOT_SUPPORTED: 505,
59
+ VARIANT_ALSO_NEGOTIATES: 506,
60
+ INSUFFICIENT_STORAGE: 507,
61
+ LOOP_DETECTED: 508,
62
+ NOT_EXTENDED: 510,
63
+ NETWORK_AUTHENTICATION_REQUIRED: 511,
64
+ };
65
+ export const DEFAULT_CONFIG = {
66
+ PORT: 3000,
67
+ HOSTNAME: 'localhost',
68
+ ROUTES_DIR: './routes',
69
+ CACHE_TTL: 0,
70
+ CORS_MAX_AGE: 86400,
71
+ };
72
+ export const CONTENT_TYPES = {
73
+ JSON: 'application/json',
74
+ TEXT: 'text/plain',
75
+ HTML: 'text/html',
76
+ FORM_URLENCODED: 'application/x-www-form-urlencoded',
77
+ MULTIPART: 'multipart/form-data',
78
+ };
79
+ export const HTTP_METHODS = {
80
+ GET: 'GET',
81
+ POST: 'POST',
82
+ PUT: 'PUT',
83
+ PATCH: 'PATCH',
84
+ DELETE: 'DELETE',
85
+ OPTIONS: 'OPTIONS',
86
+ HEAD: 'HEAD',
87
+ };
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,cAAc;IACd,EAAE,EAAE,GAAG;IACP,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,6BAA6B,EAAE,GAAG;IAClC,UAAU,EAAE,GAAG;IACf,aAAa,EAAE,GAAG;IAClB,eAAe,EAAE,GAAG;IACpB,YAAY,EAAE,GAAG;IACjB,gBAAgB,EAAE,GAAG;IACrB,OAAO,EAAE,GAAG;IAEZ,kBAAkB;IAClB,gBAAgB,EAAE,GAAG;IACrB,iBAAiB,EAAE,GAAG;IACtB,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,GAAG;IACd,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,kBAAkB,EAAE,GAAG;IACvB,kBAAkB,EAAE,GAAG;IAEvB,oBAAoB;IACpB,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,gBAAgB,EAAE,GAAG;IACrB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,kBAAkB,EAAE,GAAG;IACvB,cAAc,EAAE,GAAG;IACnB,6BAA6B,EAAE,GAAG;IAClC,eAAe,EAAE,GAAG;IACpB,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;IACT,eAAe,EAAE,GAAG;IACpB,mBAAmB,EAAE,GAAG;IACxB,iBAAiB,EAAE,GAAG;IACtB,YAAY,EAAE,GAAG;IACjB,sBAAsB,EAAE,GAAG;IAC3B,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,GAAG;IACxB,oBAAoB,EAAE,GAAG;IACzB,MAAM,EAAE,GAAG;IACX,iBAAiB,EAAE,GAAG;IACtB,SAAS,EAAE,GAAG;IACd,gBAAgB,EAAE,GAAG;IACrB,qBAAqB,EAAE,GAAG;IAC1B,iBAAiB,EAAE,GAAG;IACtB,+BAA+B,EAAE,GAAG;IACpC,6BAA6B,EAAE,GAAG;IAElC,oBAAoB;IACpB,qBAAqB,EAAE,GAAG;IAC1B,eAAe,EAAE,GAAG;IACpB,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,GAAG;IACxB,eAAe,EAAE,GAAG;IACpB,0BAA0B,EAAE,GAAG;IAC/B,uBAAuB,EAAE,GAAG;IAC5B,oBAAoB,EAAE,GAAG;IACzB,aAAa,EAAE,GAAG;IAClB,YAAY,EAAE,GAAG;IACjB,+BAA+B,EAAE,GAAG;CAC5B,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,UAAU;IACtB,SAAS,EAAE,CAAC;IACZ,YAAY,EAAE,KAAK;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,WAAW;IACjB,eAAe,EAAE,mCAAmC;IACpD,SAAS,EAAE,qBAAqB;CACxB,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;CACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { RouteEntry } from 'itty-router';
2
+ import type { AuthManager } from '../auth/protected';
3
+ import type { CacheManager } from '../cache/manager';
4
+ import type { MiddlewareManager } from '../middleware/manager';
5
+ import type { DefaultVectorTypes, RouteHandler, RouteOptions, VectorTypes } from '../types';
6
+ export declare class VectorRouter<TTypes extends VectorTypes = DefaultVectorTypes> {
7
+ private middlewareManager;
8
+ private authManager;
9
+ private cacheManager;
10
+ private routes;
11
+ constructor(middlewareManager: MiddlewareManager<TTypes>, authManager: AuthManager<TTypes>, cacheManager: CacheManager<TTypes>);
12
+ private getRouteSpecificity;
13
+ private isStaticSegment;
14
+ private isParamSegment;
15
+ private isWildcardSegment;
16
+ private isExactPath;
17
+ sortRoutes(): void;
18
+ private extractPath;
19
+ route(options: RouteOptions<TTypes>, handler: RouteHandler<TTypes>): RouteEntry;
20
+ private createRouteRegex;
21
+ private wrapHandler;
22
+ addRoute(routeEntry: RouteEntry): void;
23
+ getRoutes(): RouteEntry[];
24
+ handle(request: Request): Promise<Response>;
25
+ }
26
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/core/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EAEZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAElB,qBAAa,YAAY,CAAC,MAAM,SAAS,WAAW,GAAG,kBAAkB;IACvE,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAAoB;gBAGhC,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAC5C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC;IAOpC,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,WAAW;IAInB,UAAU,IAAI,IAAI;IAYlB,OAAO,CAAC,WAAW;IAKnB,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,UAAU;IAc/E,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,WAAW;IA4GnB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAK/B,SAAS,IAAI,UAAU,EAAE;IAInB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAyBlD"}
@@ -0,0 +1,208 @@
1
+ import { APIError, createResponse } from '../http';
2
+ export class VectorRouter {
3
+ middlewareManager;
4
+ authManager;
5
+ cacheManager;
6
+ routes = [];
7
+ constructor(middlewareManager, authManager, cacheManager) {
8
+ this.middlewareManager = middlewareManager;
9
+ this.authManager = authManager;
10
+ this.cacheManager = cacheManager;
11
+ }
12
+ getRouteSpecificity(path) {
13
+ const STATIC_SEGMENT_WEIGHT = 1000;
14
+ const PARAM_SEGMENT_WEIGHT = 10;
15
+ const WILDCARD_WEIGHT = 1;
16
+ const EXACT_MATCH_BONUS = 10000;
17
+ let score = 0;
18
+ const segments = path.split('/').filter(Boolean);
19
+ for (const segment of segments) {
20
+ if (this.isStaticSegment(segment)) {
21
+ score += STATIC_SEGMENT_WEIGHT;
22
+ }
23
+ else if (this.isParamSegment(segment)) {
24
+ score += PARAM_SEGMENT_WEIGHT;
25
+ }
26
+ else if (this.isWildcardSegment(segment)) {
27
+ score += WILDCARD_WEIGHT;
28
+ }
29
+ }
30
+ score += path.length;
31
+ if (this.isExactPath(path)) {
32
+ score += EXACT_MATCH_BONUS;
33
+ }
34
+ return score;
35
+ }
36
+ isStaticSegment(segment) {
37
+ return !segment.startsWith(':') && !segment.includes('*');
38
+ }
39
+ isParamSegment(segment) {
40
+ return segment.startsWith(':');
41
+ }
42
+ isWildcardSegment(segment) {
43
+ return segment.includes('*');
44
+ }
45
+ isExactPath(path) {
46
+ return !path.includes(':') && !path.includes('*');
47
+ }
48
+ sortRoutes() {
49
+ this.routes.sort((a, b) => {
50
+ const pathA = this.extractPath(a);
51
+ const pathB = this.extractPath(b);
52
+ const scoreA = this.getRouteSpecificity(pathA);
53
+ const scoreB = this.getRouteSpecificity(pathB);
54
+ return scoreB - scoreA;
55
+ });
56
+ }
57
+ extractPath(route) {
58
+ const PATH_INDEX = 3;
59
+ return route[PATH_INDEX] || '';
60
+ }
61
+ route(options, handler) {
62
+ const wrappedHandler = this.wrapHandler(options, handler);
63
+ const routeEntry = [
64
+ options.method.toUpperCase(),
65
+ this.createRouteRegex(options.path),
66
+ [wrappedHandler],
67
+ options.path,
68
+ ];
69
+ this.routes.push(routeEntry);
70
+ this.sortRoutes(); // Sort routes after adding
71
+ return routeEntry;
72
+ }
73
+ createRouteRegex(path) {
74
+ return RegExp(`^${path
75
+ .replace(/\/+(\/|$)/g, '$1')
76
+ .replace(/(\/?\.?):(\w+)\+/g, '($1(?<$2>*))')
77
+ .replace(/(\/?\.?):(\w+)/g, '($1(?<$2>[^$1/]+?))')
78
+ .replace(/\./g, '\\.')
79
+ .replace(/(\/?)\*/g, '($1.*)?')}/*$`);
80
+ }
81
+ wrapHandler(options, handler) {
82
+ return async (request) => {
83
+ // Ensure request has required properties
84
+ const vectorRequest = request;
85
+ // Initialize context if not present
86
+ if (!vectorRequest.context) {
87
+ vectorRequest.context = {};
88
+ }
89
+ // Parse query parameters from URL (handles duplicate params as arrays)
90
+ if (!vectorRequest.query && vectorRequest.url) {
91
+ const url = new URL(vectorRequest.url);
92
+ const query = {};
93
+ for (let [k, v] of url.searchParams) {
94
+ query[k] = query[k] ? [].concat(query[k], v) : v;
95
+ }
96
+ vectorRequest.query = query;
97
+ }
98
+ // Add metadata to request if provided
99
+ if (options.metadata) {
100
+ vectorRequest.metadata = options.metadata;
101
+ }
102
+ request = vectorRequest;
103
+ try {
104
+ if (!options.expose) {
105
+ return APIError.forbidden('Forbidden');
106
+ }
107
+ const beforeResult = await this.middlewareManager.executeBefore(request);
108
+ if (beforeResult instanceof Response) {
109
+ return beforeResult;
110
+ }
111
+ request = beforeResult;
112
+ if (options.auth) {
113
+ try {
114
+ await this.authManager.authenticate(request);
115
+ }
116
+ catch (error) {
117
+ return APIError.unauthorized(error instanceof Error ? error.message : 'Authentication failed', options.responseContentType);
118
+ }
119
+ }
120
+ if (!options.rawRequest && request.method !== 'GET' && request.method !== 'HEAD') {
121
+ try {
122
+ const contentType = request.headers.get('content-type');
123
+ if (contentType?.includes('application/json')) {
124
+ request.content = await request.json();
125
+ }
126
+ else if (contentType?.includes('application/x-www-form-urlencoded')) {
127
+ request.content = Object.fromEntries(await request.formData());
128
+ }
129
+ else if (contentType?.includes('multipart/form-data')) {
130
+ request.content = await request.formData();
131
+ }
132
+ else {
133
+ request.content = await request.text();
134
+ }
135
+ }
136
+ catch {
137
+ request.content = null;
138
+ }
139
+ }
140
+ let result;
141
+ const cacheOptions = options.cache;
142
+ if (cacheOptions && typeof cacheOptions === 'number' && cacheOptions > 0) {
143
+ const cacheKey = this.cacheManager.generateKey(request, {
144
+ authUser: request.authUser,
145
+ });
146
+ result = await this.cacheManager.get(cacheKey, () => handler(request), cacheOptions);
147
+ }
148
+ else if (cacheOptions && typeof cacheOptions === 'object' && cacheOptions.ttl) {
149
+ const cacheKey = cacheOptions.key ||
150
+ this.cacheManager.generateKey(request, {
151
+ authUser: request.authUser,
152
+ });
153
+ result = await this.cacheManager.get(cacheKey, () => handler(request), cacheOptions.ttl);
154
+ }
155
+ else {
156
+ result = await handler(request);
157
+ }
158
+ let response;
159
+ if (options.rawResponse || result instanceof Response) {
160
+ response = result instanceof Response ? result : new Response(result);
161
+ }
162
+ else {
163
+ response = createResponse(200, result, options.responseContentType);
164
+ }
165
+ response = await this.middlewareManager.executeFinally(response, request);
166
+ return response;
167
+ }
168
+ catch (error) {
169
+ if (error instanceof Response) {
170
+ return error;
171
+ }
172
+ console.error('Route handler error:', error);
173
+ return APIError.internalServerError(error instanceof Error ? error.message : String(error), options.responseContentType);
174
+ }
175
+ };
176
+ }
177
+ addRoute(routeEntry) {
178
+ this.routes.push(routeEntry);
179
+ this.sortRoutes(); // Sort routes after adding a new one
180
+ }
181
+ getRoutes() {
182
+ return this.routes;
183
+ }
184
+ async handle(request) {
185
+ const url = new URL(request.url);
186
+ const pathname = url.pathname;
187
+ for (const [method, regex, handlers] of this.routes) {
188
+ if (request.method === 'OPTIONS' || request.method === method) {
189
+ const match = pathname.match(regex);
190
+ if (match) {
191
+ const req = request;
192
+ // Initialize context for new request
193
+ if (!req.context) {
194
+ req.context = {};
195
+ }
196
+ req.params = match.groups || {};
197
+ for (const handler of handlers) {
198
+ const response = await handler(req);
199
+ if (response)
200
+ return response;
201
+ }
202
+ }
203
+ }
204
+ }
205
+ return APIError.notFound('Route not found');
206
+ }
207
+ }
208
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/core/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Server } from 'bun';
2
+ import type { DefaultVectorTypes, VectorConfig, VectorTypes } from '../types';
3
+ import type { VectorRouter } from './router';
4
+ export declare class VectorServer<TTypes extends VectorTypes = DefaultVectorTypes> {
5
+ private server;
6
+ private router;
7
+ private config;
8
+ private corsHandler;
9
+ constructor(router: VectorRouter<TTypes>, config: VectorConfig<TTypes>);
10
+ private normalizeCorsOptions;
11
+ start(): Promise<Server>;
12
+ stop(): void;
13
+ getServer(): Server | null;
14
+ getPort(): number;
15
+ getHostname(): string;
16
+ getUrl(): string;
17
+ }
18
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAElC,OAAO,KAAK,EAAe,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,qBAAa,YAAY,CAAC,MAAM,SAAS,WAAW,GAAG,kBAAkB;IACvE,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAM;gBAEb,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC;IAUtE,OAAO,CAAC,oBAAoB;IAiBtB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA2C9B,IAAI;IAQJ,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,OAAO,IAAI,MAAM;IAIjB,WAAW,IAAI,MAAM;IAIrB,MAAM,IAAI,MAAM;CAKjB"}