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
|
@@ -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;IAI/C,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"}
|
|
@@ -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,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
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { CacheHandler, DefaultVectorTypes, GetCacheType, VectorTypes } from
|
|
1
|
+
import type { CacheHandler, DefaultVectorTypes, GetCacheType, VectorTypes } from '../types';
|
|
2
2
|
export declare class CacheManager<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
3
3
|
private cacheHandler;
|
|
4
4
|
private memoryCache;
|
|
5
5
|
private cleanupInterval;
|
|
6
|
+
private inflight;
|
|
6
7
|
setCacheHandler(handler: CacheHandler): void;
|
|
7
8
|
get<T = GetCacheType<TTypes>>(key: string, factory: () => Promise<T>, ttl?: number): Promise<T>;
|
|
8
9
|
private getFromMemoryCache;
|
|
@@ -14,7 +15,9 @@ export declare class CacheManager<TTypes extends VectorTypes = DefaultVectorType
|
|
|
14
15
|
set<T = GetCacheType<TTypes>>(key: string, value: T, ttl?: number): Promise<void>;
|
|
15
16
|
delete(key: string): boolean;
|
|
16
17
|
has(key: string): boolean;
|
|
17
|
-
generateKey(request: Request
|
|
18
|
+
generateKey(request: Request & {
|
|
19
|
+
_parsedUrl?: URL;
|
|
20
|
+
}, options?: {
|
|
18
21
|
authUser?: any;
|
|
19
22
|
}): string;
|
|
20
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
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;IAI/B,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
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { DEFAULT_CONFIG } from
|
|
1
|
+
import { DEFAULT_CONFIG } from '../constants';
|
|
2
2
|
export class CacheManager {
|
|
3
3
|
cacheHandler = null;
|
|
4
4
|
memoryCache = new Map();
|
|
5
5
|
cleanupInterval = null;
|
|
6
|
+
inflight = new Map();
|
|
6
7
|
setCacheHandler(handler) {
|
|
7
8
|
this.cacheHandler = handler;
|
|
8
9
|
}
|
|
@@ -21,9 +22,22 @@ export class CacheManager {
|
|
|
21
22
|
if (this.isCacheValid(cached, now)) {
|
|
22
23
|
return cached.value;
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
this.
|
|
26
|
-
|
|
25
|
+
// Deduplicate concurrent requests for the same key (cache stampede prevention)
|
|
26
|
+
if (this.inflight.has(key)) {
|
|
27
|
+
return (await this.inflight.get(key));
|
|
28
|
+
}
|
|
29
|
+
const promise = (async () => {
|
|
30
|
+
const value = await factory();
|
|
31
|
+
this.setInMemoryCache(key, value, ttl);
|
|
32
|
+
return value;
|
|
33
|
+
})();
|
|
34
|
+
this.inflight.set(key, promise);
|
|
35
|
+
try {
|
|
36
|
+
return await promise;
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
this.inflight.delete(key);
|
|
40
|
+
}
|
|
27
41
|
}
|
|
28
42
|
isCacheValid(entry, now) {
|
|
29
43
|
return entry !== undefined && entry.expires > now;
|
|
@@ -84,14 +98,9 @@ export class CacheManager {
|
|
|
84
98
|
return true;
|
|
85
99
|
}
|
|
86
100
|
generateKey(request, options) {
|
|
87
|
-
const url = new URL(request.url);
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
url.pathname,
|
|
91
|
-
url.search,
|
|
92
|
-
options?.authUser?.id || "anonymous",
|
|
93
|
-
];
|
|
94
|
-
return parts.join(":");
|
|
101
|
+
const url = request._parsedUrl ?? new URL(request.url);
|
|
102
|
+
const userId = options?.authUser?.id != null ? String(options.authUser.id) : 'anonymous';
|
|
103
|
+
return `${request.method}:${url.pathname}:${url.search}:${userId}`;
|
|
95
104
|
}
|
|
96
105
|
}
|
|
97
106
|
//# 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;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,78 +1,83 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import { watch } from
|
|
3
|
-
import { parseArgs } from
|
|
4
|
-
import { getVectorInstance } from
|
|
5
|
-
import { ConfigLoader } from
|
|
2
|
+
import { watch } from 'node:fs';
|
|
3
|
+
import { parseArgs } from 'node:util';
|
|
4
|
+
import { getVectorInstance } from '../core/vector';
|
|
5
|
+
import { ConfigLoader } from '../core/config-loader';
|
|
6
|
+
import { resolveHost, resolvePort, resolveRoutesDir } from './option-resolution';
|
|
6
7
|
// Compatibility layer for both Node and Bun
|
|
7
|
-
const args = typeof Bun !==
|
|
8
|
+
const args = typeof Bun !== 'undefined' ? Bun.argv.slice(2) : process.argv.slice(2);
|
|
8
9
|
const { values, positionals } = parseArgs({
|
|
9
10
|
args,
|
|
10
11
|
options: {
|
|
11
12
|
port: {
|
|
12
|
-
type:
|
|
13
|
-
short:
|
|
14
|
-
default:
|
|
13
|
+
type: 'string',
|
|
14
|
+
short: 'p',
|
|
15
|
+
default: '3000',
|
|
15
16
|
},
|
|
16
17
|
host: {
|
|
17
|
-
type:
|
|
18
|
-
short:
|
|
19
|
-
default:
|
|
18
|
+
type: 'string',
|
|
19
|
+
short: 'h',
|
|
20
|
+
default: 'localhost',
|
|
20
21
|
},
|
|
21
22
|
routes: {
|
|
22
|
-
type:
|
|
23
|
-
short:
|
|
24
|
-
default:
|
|
23
|
+
type: 'string',
|
|
24
|
+
short: 'r',
|
|
25
|
+
default: './routes',
|
|
25
26
|
},
|
|
26
27
|
watch: {
|
|
27
|
-
type:
|
|
28
|
-
short:
|
|
28
|
+
type: 'boolean',
|
|
29
|
+
short: 'w',
|
|
29
30
|
default: true,
|
|
30
31
|
},
|
|
31
32
|
cors: {
|
|
32
|
-
type:
|
|
33
|
+
type: 'boolean',
|
|
33
34
|
default: true,
|
|
34
35
|
},
|
|
35
36
|
config: {
|
|
36
|
-
type:
|
|
37
|
-
short:
|
|
37
|
+
type: 'string',
|
|
38
|
+
short: 'c',
|
|
38
39
|
},
|
|
39
40
|
},
|
|
40
41
|
strict: true,
|
|
41
42
|
allowPositionals: true,
|
|
42
43
|
});
|
|
43
|
-
const command = positionals[0] ||
|
|
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
|
-
const isDev = command ===
|
|
49
|
+
const isDev = command === 'dev';
|
|
46
50
|
let server = null;
|
|
47
51
|
let vector = null;
|
|
48
52
|
async function startServer() {
|
|
49
53
|
// Create a timeout promise that rejects after 10 seconds
|
|
50
54
|
const timeoutPromise = new Promise((_, reject) => {
|
|
51
55
|
setTimeout(() => {
|
|
52
|
-
reject(new Error(
|
|
56
|
+
reject(new Error('Server startup timed out (10s)'));
|
|
53
57
|
}, 10000);
|
|
54
58
|
});
|
|
55
59
|
// Create the actual server start promise
|
|
56
60
|
const serverStartPromise = (async () => {
|
|
57
|
-
|
|
58
|
-
const configLoader = new ConfigLoader(
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
config.
|
|
64
|
-
config.
|
|
61
|
+
const explicitConfigPath = values.config;
|
|
62
|
+
const configLoader = new ConfigLoader(explicitConfigPath);
|
|
63
|
+
const loadedConfig = await configLoader.load();
|
|
64
|
+
const config = { ...loadedConfig };
|
|
65
|
+
// Merge CLI options with loaded config.
|
|
66
|
+
// Explicit --port/--host always override config values.
|
|
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);
|
|
65
70
|
config.development = config.development ?? isDev;
|
|
66
71
|
config.autoDiscover = true; // Always auto-discover routes
|
|
67
72
|
// Apply CLI CORS option if not explicitly set in config
|
|
68
73
|
// Only apply default CORS if config.cors is undefined (not set)
|
|
69
74
|
if (config.cors === undefined && values.cors) {
|
|
70
75
|
config.cors = {
|
|
71
|
-
origin:
|
|
76
|
+
origin: '*',
|
|
72
77
|
credentials: true,
|
|
73
|
-
allowHeaders:
|
|
74
|
-
allowMethods:
|
|
75
|
-
exposeHeaders:
|
|
78
|
+
allowHeaders: 'Content-Type, Authorization',
|
|
79
|
+
allowMethods: 'GET, POST, PUT, PATCH, DELETE, OPTIONS',
|
|
80
|
+
exposeHeaders: 'Authorization',
|
|
76
81
|
maxAge: 86400,
|
|
77
82
|
};
|
|
78
83
|
}
|
|
@@ -92,10 +97,10 @@ async function runDev() {
|
|
|
92
97
|
server = await vector.startServer(config);
|
|
93
98
|
// Verify the server is actually running
|
|
94
99
|
if (!server || !server.port) {
|
|
95
|
-
throw new Error(
|
|
100
|
+
throw new Error('Server started but is not responding correctly');
|
|
96
101
|
}
|
|
97
|
-
const cyan =
|
|
98
|
-
const reset =
|
|
102
|
+
const cyan = '\x1b[36m';
|
|
103
|
+
const reset = '\x1b[0m';
|
|
99
104
|
console.log(`\nListening on ${cyan}http://${config.hostname}:${config.port}${reset}\n`);
|
|
100
105
|
return { server, vector, config };
|
|
101
106
|
})();
|
|
@@ -119,16 +124,13 @@ async function runDev() {
|
|
|
119
124
|
const now = Date.now();
|
|
120
125
|
if (isReloading || now - lastReloadTime < 1000)
|
|
121
126
|
return;
|
|
127
|
+
const segments = filename ? filename.split(/[/\\]/) : [];
|
|
128
|
+
const excluded = segments.some((s) => ['node_modules', '.git', '.vector', 'dist'].includes(s));
|
|
122
129
|
if (filename &&
|
|
123
|
-
(filename.endsWith(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
!filename.
|
|
127
|
-
!filename.includes(".git") &&
|
|
128
|
-
!filename.includes(".vector") && // Ignore generated files
|
|
129
|
-
!filename.includes("dist") && // Ignore dist folder
|
|
130
|
-
!filename.includes("bun.lockb") && // Ignore lock files
|
|
131
|
-
!filename.endsWith(".generated.ts") // Ignore generated files
|
|
130
|
+
(filename.endsWith('.ts') || filename.endsWith('.js') || filename.endsWith('.json')) &&
|
|
131
|
+
!excluded &&
|
|
132
|
+
!filename.includes('bun.lockb') && // Ignore lock files
|
|
133
|
+
!filename.endsWith('.generated.ts') // Ignore generated files
|
|
132
134
|
) {
|
|
133
135
|
// Track changed files
|
|
134
136
|
changedFiles.add(filename);
|
|
@@ -149,16 +151,6 @@ async function runDev() {
|
|
|
149
151
|
}
|
|
150
152
|
// Small delay to ensure file system operations complete
|
|
151
153
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
152
|
-
// Clear module cache to ensure fresh imports
|
|
153
|
-
// Note: Bun uses ESM and doesn't have require.cache
|
|
154
|
-
// The Loader API will handle module reloading automatically
|
|
155
|
-
if (typeof require !== 'undefined' && require.cache) {
|
|
156
|
-
for (const key in require.cache) {
|
|
157
|
-
if (!key.includes("node_modules")) {
|
|
158
|
-
delete require.cache[key];
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
154
|
// Restart the server
|
|
163
155
|
try {
|
|
164
156
|
const result = await startServer();
|
|
@@ -166,7 +158,7 @@ async function runDev() {
|
|
|
166
158
|
vector = result.vector;
|
|
167
159
|
}
|
|
168
160
|
catch (error) {
|
|
169
|
-
console.error(
|
|
161
|
+
console.error('\n[Reload Error]', error.message || error);
|
|
170
162
|
// Don't exit the process on reload failures, just continue watching
|
|
171
163
|
}
|
|
172
164
|
finally {
|
|
@@ -179,88 +171,31 @@ async function runDev() {
|
|
|
179
171
|
});
|
|
180
172
|
}
|
|
181
173
|
catch {
|
|
182
|
-
const yellow =
|
|
183
|
-
const reset =
|
|
174
|
+
const yellow = '\x1b[33m';
|
|
175
|
+
const reset = '\x1b[0m';
|
|
184
176
|
console.warn(`${yellow}Warning: File watching not available${reset}`);
|
|
185
177
|
}
|
|
186
178
|
}
|
|
187
179
|
}
|
|
188
180
|
catch (error) {
|
|
189
|
-
const red =
|
|
190
|
-
const reset =
|
|
181
|
+
const red = '\x1b[31m';
|
|
182
|
+
const reset = '\x1b[0m';
|
|
191
183
|
console.error(`\n${red}Error: ${error.message || error}${reset}\n`);
|
|
192
|
-
if (error.stack && process.env.NODE_ENV ===
|
|
184
|
+
if (error.stack && process.env.NODE_ENV === 'development') {
|
|
193
185
|
console.error(error.stack);
|
|
194
186
|
}
|
|
195
187
|
process.exit(1);
|
|
196
188
|
}
|
|
197
189
|
}
|
|
198
|
-
async function runBuild() {
|
|
199
|
-
try {
|
|
200
|
-
const { RouteScanner } = await import("../dev/route-scanner");
|
|
201
|
-
const { RouteGenerator } = await import("../dev/route-generator");
|
|
202
|
-
// Step 1: Scan and generate routes
|
|
203
|
-
const scanner = new RouteScanner(values.routes);
|
|
204
|
-
const generator = new RouteGenerator();
|
|
205
|
-
const routes = await scanner.scan();
|
|
206
|
-
await generator.generate(routes);
|
|
207
|
-
// Step 2: Build the application with Bun
|
|
208
|
-
if (typeof Bun !== "undefined") {
|
|
209
|
-
// Build the CLI as an executable
|
|
210
|
-
const buildProcess = Bun.spawn([
|
|
211
|
-
"bun",
|
|
212
|
-
"build",
|
|
213
|
-
"src/cli/index.ts",
|
|
214
|
-
"--target",
|
|
215
|
-
"bun",
|
|
216
|
-
"--outfile",
|
|
217
|
-
"dist/server.js",
|
|
218
|
-
"--minify",
|
|
219
|
-
]);
|
|
220
|
-
const exitCode = await buildProcess.exited;
|
|
221
|
-
if (exitCode !== 0) {
|
|
222
|
-
throw new Error(`Build failed with exit code ${exitCode}`);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
// For Node.js, use child_process
|
|
227
|
-
const { spawnSync } = await import("child_process");
|
|
228
|
-
const result = spawnSync("bun", [
|
|
229
|
-
"build",
|
|
230
|
-
"src/cli/index.ts",
|
|
231
|
-
"--target",
|
|
232
|
-
"bun",
|
|
233
|
-
"--outfile",
|
|
234
|
-
"dist/server.js",
|
|
235
|
-
"--minify",
|
|
236
|
-
], {
|
|
237
|
-
stdio: "inherit",
|
|
238
|
-
shell: true,
|
|
239
|
-
});
|
|
240
|
-
if (result.status !== 0) {
|
|
241
|
-
throw new Error(`Build failed with exit code ${result.status}`);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
console.log("\nBuild complete: dist/server.js\n");
|
|
245
|
-
}
|
|
246
|
-
catch (error) {
|
|
247
|
-
const red = "\x1b[31m";
|
|
248
|
-
const reset = "\x1b[0m";
|
|
249
|
-
console.error(`\n${red}Error: ${error.message || error}${reset}\n`);
|
|
250
|
-
process.exit(1);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
190
|
switch (command) {
|
|
254
|
-
case
|
|
191
|
+
case 'dev':
|
|
255
192
|
await runDev();
|
|
256
193
|
break;
|
|
257
|
-
case
|
|
258
|
-
|
|
259
|
-
break;
|
|
260
|
-
case "start":
|
|
261
|
-
process.env.NODE_ENV = "production";
|
|
194
|
+
case 'start': {
|
|
195
|
+
process.env.NODE_ENV = 'production';
|
|
262
196
|
await runDev();
|
|
263
197
|
break;
|
|
198
|
+
}
|
|
264
199
|
default:
|
|
265
200
|
console.error(`Unknown command: ${command}`);
|
|
266
201
|
console.log(`
|
|
@@ -268,15 +203,14 @@ Usage: vector [command] [options]
|
|
|
268
203
|
|
|
269
204
|
Commands:
|
|
270
205
|
dev Start development server (default)
|
|
271
|
-
build Build for production
|
|
272
206
|
start Start production server
|
|
273
207
|
|
|
274
208
|
Options:
|
|
275
209
|
-p, --port <port> Port to listen on (default: 3000)
|
|
276
210
|
-h, --host <host> Hostname to bind to (default: localhost)
|
|
277
|
-
-r, --routes <dir> Routes directory (
|
|
211
|
+
-r, --routes <dir> Routes directory (dev/start)
|
|
278
212
|
-w, --watch Watch for file changes (default: true)
|
|
279
|
-
-c, --config <path> Path to config file (
|
|
213
|
+
-c, --config <path> Path to config file (dev/start)
|
|
280
214
|
--cors Enable CORS (default: true)
|
|
281
215
|
`);
|
|
282
216
|
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,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|