vector-framework 1.0.0 → 1.2.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/README.md +87 -634
- package/dist/auth/protected.d.ts.map +1 -1
- package/dist/auth/protected.js.map +1 -1
- package/dist/cache/manager.d.ts +5 -2
- package/dist/cache/manager.d.ts.map +1 -1
- package/dist/cache/manager.js +21 -12
- package/dist/cache/manager.js.map +1 -1
- package/dist/cli/index.js +60 -126
- 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 +2774 -599
- 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 +2 -2
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/config-loader.js +18 -18
- package/dist/core/config-loader.js.map +1 -1
- package/dist/core/router.d.ts +41 -15
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +465 -150
- package/dist/core/router.js.map +1 -1
- package/dist/core/server.d.ts +17 -3
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +274 -33
- package/dist/core/server.js.map +1 -1
- package/dist/core/vector.d.ts +9 -8
- package/dist/core/vector.d.ts.map +1 -1
- package/dist/core/vector.js +40 -32
- 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 +1 -1
- package/dist/dev/route-scanner.d.ts.map +1 -1
- package/dist/dev/route-scanner.js +37 -43
- 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 +84 -84
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1314 -8
- package/dist/index.mjs +1314 -8
- package/dist/middleware/manager.d.ts +1 -1
- 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 +1313 -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 +273 -0
- package/dist/openapi/generator.js.map +1 -0
- package/dist/types/index.d.ts +70 -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/path.d.ts +7 -0
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js +14 -3
- 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 +1 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +24 -19
- package/src/auth/protected.ts +3 -13
- package/src/cache/manager.ts +25 -30
- package/src/cli/index.ts +62 -141
- package/src/cli/option-resolution.ts +40 -0
- package/src/constants/index.ts +7 -0
- package/src/core/config-loader.ts +20 -22
- package/src/core/router.ts +535 -155
- package/src/core/server.ts +354 -45
- package/src/core/vector.ts +71 -61
- package/src/dev/route-generator.ts +1 -3
- package/src/dev/route-scanner.ts +38 -51
- package/src/http.ts +117 -187
- package/src/index.ts +3 -3
- package/src/middleware/manager.ts +8 -11
- package/src/openapi/assets/tailwindcdn.js +83 -0
- package/src/openapi/docs-ui.ts +1317 -0
- package/src/openapi/generator.ts +359 -0
- package/src/types/index.ts +104 -17
- package/src/types/standard-schema.ts +147 -0
- package/src/utils/cors.ts +101 -0
- package/src/utils/path.ts +19 -4
- package/src/utils/schema-validation.ts +123 -0
- package/src/utils/validation.ts +1 -0
package/dist/core/vector.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { AuthManager } from
|
|
2
|
-
import { CacheManager } from
|
|
3
|
-
import { RouteGenerator } from
|
|
4
|
-
import { RouteScanner } from
|
|
5
|
-
import { MiddlewareManager } from
|
|
6
|
-
import { toFileUrl } from
|
|
7
|
-
import { VectorRouter } from
|
|
8
|
-
import { VectorServer } from
|
|
1
|
+
import { AuthManager } from '../auth/protected';
|
|
2
|
+
import { CacheManager } from '../cache/manager';
|
|
3
|
+
import { RouteGenerator } from '../dev/route-generator';
|
|
4
|
+
import { RouteScanner } from '../dev/route-scanner';
|
|
5
|
+
import { MiddlewareManager } from '../middleware/manager';
|
|
6
|
+
import { toFileUrl } from '../utils/path';
|
|
7
|
+
import { VectorRouter } from './router';
|
|
8
|
+
import { VectorServer } from './server';
|
|
9
9
|
// Internal-only class - not exposed to users
|
|
10
10
|
export class Vector {
|
|
11
11
|
static instance;
|
|
@@ -48,13 +48,15 @@ export class Vector {
|
|
|
48
48
|
getCacheHandler() {
|
|
49
49
|
return this._cacheHandler;
|
|
50
50
|
}
|
|
51
|
-
// Internal method to add route
|
|
52
51
|
addRoute(options, handler) {
|
|
53
|
-
|
|
52
|
+
this.router.route(options, handler);
|
|
54
53
|
}
|
|
55
54
|
// Internal method to start server - only called by CLI
|
|
56
55
|
async startServer(config) {
|
|
57
56
|
this.config = { ...this.config, ...config };
|
|
57
|
+
const routeDefaults = { ...this.config.defaults?.route };
|
|
58
|
+
this.router.setRouteBooleanDefaults(routeDefaults);
|
|
59
|
+
this.router.setDevelopmentMode(this.config.development);
|
|
58
60
|
// Clear previous middleware to avoid accumulation across multiple starts
|
|
59
61
|
this.middlewareManager.clear();
|
|
60
62
|
// Only clear routes if we're doing auto-discovery
|
|
@@ -75,7 +77,7 @@ export class Vector {
|
|
|
75
77
|
return bunServer;
|
|
76
78
|
}
|
|
77
79
|
async discoverRoutes() {
|
|
78
|
-
const routesDir = this.config.routesDir ||
|
|
80
|
+
const routesDir = this.config.routesDir || './routes';
|
|
79
81
|
const excludePatterns = this.config.routeExcludePatterns;
|
|
80
82
|
// Always create a new RouteScanner with the current config's routesDir
|
|
81
83
|
// to ensure we're using the correct path from the user's config
|
|
@@ -93,20 +95,19 @@ export class Vector {
|
|
|
93
95
|
try {
|
|
94
96
|
const importPath = toFileUrl(route.path);
|
|
95
97
|
const module = await import(importPath);
|
|
96
|
-
const exported = route.name ===
|
|
98
|
+
const exported = route.name === 'default' ? module.default : module[route.name];
|
|
97
99
|
if (exported) {
|
|
98
100
|
if (this.isRouteDefinition(exported)) {
|
|
99
101
|
// Use router.route() to ensure middleware is applied
|
|
100
|
-
|
|
101
|
-
this.
|
|
102
|
-
this.logRouteLoaded(routeDef.options);
|
|
102
|
+
this.router.route(exported.options, exported.handler);
|
|
103
|
+
this.logRouteLoaded(exported.options);
|
|
103
104
|
}
|
|
104
105
|
else if (this.isRouteEntry(exported)) {
|
|
105
106
|
// Legacy support for direct RouteEntry (won't have middleware)
|
|
106
107
|
this.router.addRoute(exported);
|
|
107
108
|
this.logRouteLoaded(exported);
|
|
108
109
|
}
|
|
109
|
-
else if (typeof exported ===
|
|
110
|
+
else if (typeof exported === 'function') {
|
|
110
111
|
this.router.route(route.options, exported);
|
|
111
112
|
this.logRouteLoaded(route.options);
|
|
112
113
|
}
|
|
@@ -116,29 +117,26 @@ export class Vector {
|
|
|
116
117
|
console.error(`Failed to load route ${route.name} from ${route.path}:`, error);
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
|
-
// Ensure routes are properly sorted after loading all
|
|
120
|
-
this.router.sortRoutes();
|
|
121
120
|
}
|
|
122
121
|
}
|
|
123
122
|
catch (error) {
|
|
124
|
-
if (error.code !==
|
|
125
|
-
error
|
|
126
|
-
console.error("Failed to discover routes:", error);
|
|
123
|
+
if (error.code !== 'ENOENT' && error.code !== 'ENOTDIR') {
|
|
124
|
+
console.error('Failed to discover routes:', error);
|
|
127
125
|
}
|
|
128
126
|
}
|
|
129
127
|
}
|
|
130
128
|
async loadRoute(routeModule) {
|
|
131
|
-
if (typeof routeModule ===
|
|
129
|
+
if (typeof routeModule === 'function') {
|
|
132
130
|
const routeEntry = routeModule();
|
|
133
|
-
if (
|
|
131
|
+
if (this.isRouteEntry(routeEntry)) {
|
|
134
132
|
this.router.addRoute(routeEntry);
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
|
-
else if (routeModule && typeof routeModule ===
|
|
135
|
+
else if (routeModule && typeof routeModule === 'object') {
|
|
138
136
|
for (const [, value] of Object.entries(routeModule)) {
|
|
139
|
-
if (typeof value ===
|
|
137
|
+
if (typeof value === 'function') {
|
|
140
138
|
const routeEntry = value();
|
|
141
|
-
if (
|
|
139
|
+
if (this.isRouteEntry(routeEntry)) {
|
|
142
140
|
this.router.addRoute(routeEntry);
|
|
143
141
|
}
|
|
144
142
|
}
|
|
@@ -146,14 +144,24 @@ export class Vector {
|
|
|
146
144
|
}
|
|
147
145
|
}
|
|
148
146
|
isRouteEntry(value) {
|
|
149
|
-
|
|
147
|
+
if (!Array.isArray(value) || value.length < 3) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
const [method, matcher, handlers, path] = value;
|
|
151
|
+
return (typeof method === 'string' &&
|
|
152
|
+
matcher instanceof RegExp &&
|
|
153
|
+
Array.isArray(handlers) &&
|
|
154
|
+
handlers.length > 0 &&
|
|
155
|
+
handlers.every((handler) => typeof handler === 'function') &&
|
|
156
|
+
(path === undefined || typeof path === 'string'));
|
|
150
157
|
}
|
|
151
158
|
isRouteDefinition(value) {
|
|
152
|
-
return (value &&
|
|
153
|
-
typeof value ===
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
return (value !== null &&
|
|
160
|
+
typeof value === 'object' &&
|
|
161
|
+
'entry' in value &&
|
|
162
|
+
'options' in value &&
|
|
163
|
+
'handler' in value &&
|
|
164
|
+
typeof value.handler === 'function');
|
|
157
165
|
}
|
|
158
166
|
logRouteLoaded(_) {
|
|
159
167
|
// Silent - no logging
|
package/dist/core/vector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/core/vector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/core/vector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-generator.d.ts","sourceRoot":"","sources":["../../src/dev/route-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,SAAkC;IAIlD,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"route-generator.d.ts","sourceRoot":"","sources":["../../src/dev/route-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,SAAkC;IAIlD,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDjD,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAsBjE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-generator.js","sourceRoot":"","sources":["../../src/dev/route-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG9C,MAAM,OAAO,cAAc;IACjB,UAAU,CAAS;IAE3B,YAAY,UAAU,GAAG,+BAA+B;QACtD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAwB;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B,CAAC;QAE1D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,aAAa,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;iBAC9D,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;iBACnB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAE7B,MAAM,UAAU,GAAG,SAAS,WAAW,EAAE,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEvF,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;gBACjD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"route-generator.js","sourceRoot":"","sources":["../../src/dev/route-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-scanner.d.ts","sourceRoot":"","sources":["../../src/dev/route-scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAe9C;gBAEU,SAAS,SAAa,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"route-scanner.d.ts","sourceRoot":"","sources":["../../src/dev/route-scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAe9C;gBAEU,SAAS,SAAa,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE;IAMxD,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAqBvC,OAAO,CAAC,UAAU;YAwBJ,aAAa;IA0E3B,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI;CASjC"}
|
|
@@ -1,29 +1,28 @@
|
|
|
1
|
-
import { existsSync, promises as fs } from
|
|
2
|
-
import { join, relative, resolve, sep } from
|
|
1
|
+
import { existsSync, promises as fs } from 'node:fs';
|
|
2
|
+
import { join, relative, resolve, sep } from 'node:path';
|
|
3
3
|
export class RouteScanner {
|
|
4
4
|
routesDir;
|
|
5
5
|
excludePatterns;
|
|
6
6
|
static DEFAULT_EXCLUDE_PATTERNS = [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
'*.test.ts',
|
|
8
|
+
'*.test.js',
|
|
9
|
+
'*.test.tsx',
|
|
10
|
+
'*.test.jsx',
|
|
11
|
+
'*.spec.ts',
|
|
12
|
+
'*.spec.js',
|
|
13
|
+
'*.spec.tsx',
|
|
14
|
+
'*.spec.jsx',
|
|
15
|
+
'*.tests.ts',
|
|
16
|
+
'*.tests.js',
|
|
17
|
+
'**/__tests__/**',
|
|
18
|
+
'*.interface.ts',
|
|
19
|
+
'*.type.ts',
|
|
20
|
+
'*.d.ts',
|
|
21
21
|
];
|
|
22
|
-
constructor(routesDir =
|
|
22
|
+
constructor(routesDir = './routes', excludePatterns) {
|
|
23
23
|
// Always resolve from the current working directory (user's project)
|
|
24
24
|
this.routesDir = resolve(process.cwd(), routesDir);
|
|
25
|
-
this.excludePatterns =
|
|
26
|
-
excludePatterns || RouteScanner.DEFAULT_EXCLUDE_PATTERNS;
|
|
25
|
+
this.excludePatterns = excludePatterns || RouteScanner.DEFAULT_EXCLUDE_PATTERNS;
|
|
27
26
|
}
|
|
28
27
|
async scan() {
|
|
29
28
|
const routes = [];
|
|
@@ -35,7 +34,7 @@ export class RouteScanner {
|
|
|
35
34
|
await this.scanDirectory(this.routesDir, routes);
|
|
36
35
|
}
|
|
37
36
|
catch (error) {
|
|
38
|
-
if (error.code ===
|
|
37
|
+
if (error.code === 'ENOENT') {
|
|
39
38
|
console.warn(` ✗ Routes directory not accessible: ${this.routesDir}`);
|
|
40
39
|
return [];
|
|
41
40
|
}
|
|
@@ -48,20 +47,21 @@ export class RouteScanner {
|
|
|
48
47
|
for (const pattern of this.excludePatterns) {
|
|
49
48
|
// Convert glob pattern to regex
|
|
50
49
|
const regexPattern = pattern
|
|
51
|
-
.replace(/\./g,
|
|
52
|
-
.replace(
|
|
53
|
-
.replace(
|
|
54
|
-
.replace(
|
|
50
|
+
.replace(/\./g, '\\.') // Escape dots
|
|
51
|
+
.replace(/\*\*/g, '__GLOBSTAR__') // protect ** before * replacement
|
|
52
|
+
.replace(/\*/g, '[^/]*') // * matches anything except /
|
|
53
|
+
.replace(/__GLOBSTAR__/g, '.*') // ** matches anything including /
|
|
54
|
+
.replace(/\?/g, '.'); // ? matches single character
|
|
55
55
|
const regex = new RegExp(`^${regexPattern}$`);
|
|
56
56
|
// Check both the full relative path and just the filename
|
|
57
|
-
const filename = relativePath.split(sep).pop() ||
|
|
57
|
+
const filename = relativePath.split(sep).pop() || '';
|
|
58
58
|
if (regex.test(relativePath) || regex.test(filename)) {
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
return false;
|
|
63
63
|
}
|
|
64
|
-
async scanDirectory(dir, routes, basePath =
|
|
64
|
+
async scanDirectory(dir, routes, basePath = '') {
|
|
65
65
|
const entries = await fs.readdir(dir);
|
|
66
66
|
for (const entry of entries) {
|
|
67
67
|
const fullPath = join(dir, entry);
|
|
@@ -70,42 +70,36 @@ export class RouteScanner {
|
|
|
70
70
|
const newBasePath = basePath ? `${basePath}/${entry}` : entry;
|
|
71
71
|
await this.scanDirectory(fullPath, routes, newBasePath);
|
|
72
72
|
}
|
|
73
|
-
else if (entry.endsWith(
|
|
73
|
+
else if (entry.endsWith('.ts') || entry.endsWith('.js')) {
|
|
74
74
|
// Skip excluded files (test files, etc.)
|
|
75
75
|
if (this.isExcluded(fullPath)) {
|
|
76
76
|
continue;
|
|
77
77
|
}
|
|
78
78
|
const routePath = relative(this.routesDir, fullPath)
|
|
79
|
-
.replace(/\.(ts|js)$/,
|
|
79
|
+
.replace(/\.(ts|js)$/, '')
|
|
80
80
|
.split(sep)
|
|
81
|
-
.join(
|
|
81
|
+
.join('/');
|
|
82
82
|
try {
|
|
83
83
|
// Convert Windows paths to URLs for import
|
|
84
|
-
const importPath = process.platform ===
|
|
85
|
-
? `file:///${fullPath.replace(/\\/g, "/")}`
|
|
86
|
-
: fullPath;
|
|
84
|
+
const importPath = process.platform === 'win32' ? `file:///${fullPath.replace(/\\/g, '/')}` : fullPath;
|
|
87
85
|
const module = await import(importPath);
|
|
88
|
-
if (module.default && typeof module.default ===
|
|
86
|
+
if (module.default && typeof module.default === 'function') {
|
|
89
87
|
routes.push({
|
|
90
|
-
name:
|
|
88
|
+
name: 'default',
|
|
91
89
|
path: fullPath,
|
|
92
|
-
method:
|
|
90
|
+
method: 'GET',
|
|
93
91
|
options: {
|
|
94
|
-
method:
|
|
92
|
+
method: 'GET',
|
|
95
93
|
path: `/${routePath}`,
|
|
96
94
|
expose: true,
|
|
97
95
|
},
|
|
98
96
|
});
|
|
99
97
|
}
|
|
100
98
|
for (const [name, value] of Object.entries(module)) {
|
|
101
|
-
if (name ===
|
|
99
|
+
if (name === 'default')
|
|
102
100
|
continue;
|
|
103
101
|
// Check for new RouteDefinition format
|
|
104
|
-
if (value &&
|
|
105
|
-
typeof value === "object" &&
|
|
106
|
-
"entry" in value &&
|
|
107
|
-
"options" in value &&
|
|
108
|
-
"handler" in value) {
|
|
102
|
+
if (value && typeof value === 'object' && 'entry' in value && 'options' in value && 'handler' in value) {
|
|
109
103
|
const routeDef = value;
|
|
110
104
|
routes.push({
|
|
111
105
|
name,
|
|
@@ -137,7 +131,7 @@ export class RouteScanner {
|
|
|
137
131
|
}
|
|
138
132
|
}
|
|
139
133
|
enableWatch(callback) {
|
|
140
|
-
if (typeof Bun !==
|
|
134
|
+
if (typeof Bun !== 'undefined' && Bun.env.NODE_ENV === 'development') {
|
|
141
135
|
console.log(`Watching for route changes in ${this.routesDir}`);
|
|
142
136
|
setInterval(async () => {
|
|
143
137
|
await callback();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-scanner.js","sourceRoot":"","sources":["../../src/dev/route-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGzD,MAAM,OAAO,YAAY;IACf,SAAS,CAAS;IAClB,eAAe,CAAW;IAC1B,MAAM,CAAU,wBAAwB,GAAG;QACjD,WAAW;QACX,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,iBAAiB;QACjB,gBAAgB;QAChB,WAAW;QACX,QAAQ;KACT,CAAC;IAEF,YAAY,SAAS,GAAG,UAAU,EAAE,eAA0B;QAC5D,qEAAqE;QACrE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,eAAe
|
|
1
|
+
{"version":3,"file":"route-scanner.js","sourceRoot":"","sources":["../../src/dev/route-scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/http.d.ts
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export interface ProtectedRequest<TTypes extends VectorTypes = DefaultVectorTypes> extends IRequest {
|
|
4
|
-
authUser?: GetAuthType<TTypes>;
|
|
5
|
-
}
|
|
6
|
-
export declare const preflight: (request: Request) => Response | undefined, corsify: (response: Response, request?: Request) => Response;
|
|
7
|
-
interface ExtendedApiOptions extends ApiOptions {
|
|
1
|
+
import type { CacheOptions, DefaultVectorTypes, InferRouteInputFromSchemaDefinition, RouteSchemaDefinition, VectorRequest, VectorTypes } from './types';
|
|
2
|
+
interface ExtendedApiOptions<TSchemaDef extends RouteSchemaDefinition | undefined = RouteSchemaDefinition | undefined> extends ApiOptions<TSchemaDef> {
|
|
8
3
|
method: string;
|
|
9
4
|
path: string;
|
|
10
5
|
}
|
|
11
|
-
export interface RouteDefinition<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
12
|
-
entry:
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
export interface RouteDefinition<TTypes extends VectorTypes = DefaultVectorTypes, TValidatedInput = undefined, TSchemaDef extends RouteSchemaDefinition | undefined = RouteSchemaDefinition | undefined> {
|
|
7
|
+
entry: {
|
|
8
|
+
method: string;
|
|
9
|
+
path: string;
|
|
10
|
+
};
|
|
11
|
+
options: ExtendedApiOptions<TSchemaDef>;
|
|
12
|
+
handler: (req: VectorRequest<TTypes, TValidatedInput>) => Promise<unknown> | unknown;
|
|
15
13
|
}
|
|
16
|
-
export declare function route<TTypes extends VectorTypes = DefaultVectorTypes>(options: ExtendedApiOptions
|
|
14
|
+
export declare function route<TTypes extends VectorTypes = DefaultVectorTypes, TSchemaDef extends RouteSchemaDefinition | undefined = RouteSchemaDefinition | undefined>(options: ExtendedApiOptions<TSchemaDef>, fn: (req: VectorRequest<TTypes, InferRouteInputFromSchemaDefinition<TSchemaDef>>) => Promise<unknown> | unknown): RouteDefinition<TTypes, InferRouteInputFromSchemaDefinition<TSchemaDef>, TSchemaDef>;
|
|
17
15
|
declare const ApiResponse: {
|
|
18
16
|
success: <T>(data: T, contentType?: string) => Response;
|
|
19
17
|
created: <T>(data: T, contentType?: string) => Response;
|
|
@@ -65,14 +63,16 @@ export declare const APIError: {
|
|
|
65
63
|
};
|
|
66
64
|
export declare function createResponse(statusCode: number, data?: unknown, contentType?: string): Response;
|
|
67
65
|
export declare const protectedRoute: <TTypes extends VectorTypes = DefaultVectorTypes>(request: VectorRequest<TTypes>, responseContentType?: string) => Promise<void>;
|
|
68
|
-
export interface ApiOptions {
|
|
66
|
+
export interface ApiOptions<TSchemaDef extends RouteSchemaDefinition | undefined = RouteSchemaDefinition | undefined> {
|
|
69
67
|
auth?: boolean;
|
|
70
68
|
expose?: boolean;
|
|
71
69
|
rawRequest?: boolean;
|
|
70
|
+
validate?: boolean;
|
|
72
71
|
rawResponse?: boolean;
|
|
73
72
|
cache?: CacheOptions | number | null;
|
|
74
73
|
responseContentType?: string;
|
|
74
|
+
schema?: TSchemaDef;
|
|
75
75
|
}
|
|
76
|
-
export declare function api<TTypes extends VectorTypes = DefaultVectorTypes>(options: ApiOptions, fn: (request: VectorRequest<TTypes>) => Promise<unknown>): (request:
|
|
76
|
+
export declare function api<TTypes extends VectorTypes = DefaultVectorTypes, TValidatedInput = undefined>(options: ApiOptions, fn: (request: VectorRequest<TTypes, TValidatedInput>) => Promise<unknown> | unknown): (request: Request) => Promise<unknown>;
|
|
77
77
|
export default ApiResponse;
|
|
78
78
|
//# sourceMappingURL=http.d.ts.map
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|