vector-framework 1.2.1 → 1.2.3
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 +18 -6
- package/dist/auth/protected.d.ts +4 -4
- package/dist/auth/protected.d.ts.map +1 -1
- package/dist/auth/protected.js +10 -7
- package/dist/auth/protected.js.map +1 -1
- package/dist/cache/manager.d.ts +2 -0
- package/dist/cache/manager.d.ts.map +1 -1
- package/dist/cache/manager.js +21 -4
- package/dist/cache/manager.js.map +1 -1
- package/dist/checkpoint/artifacts/compressor.d.ts +5 -0
- package/dist/checkpoint/artifacts/compressor.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/compressor.js +24 -0
- package/dist/checkpoint/artifacts/compressor.js.map +1 -0
- package/dist/checkpoint/artifacts/decompress-worker.d.ts +2 -0
- package/dist/checkpoint/artifacts/decompress-worker.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/decompress-worker.js +31 -0
- package/dist/checkpoint/artifacts/decompress-worker.js.map +1 -0
- package/dist/checkpoint/artifacts/hasher.d.ts +2 -0
- package/dist/checkpoint/artifacts/hasher.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/hasher.js +7 -0
- package/dist/checkpoint/artifacts/hasher.js.map +1 -0
- package/dist/checkpoint/artifacts/manifest.d.ts +6 -0
- package/dist/checkpoint/artifacts/manifest.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/manifest.js +55 -0
- package/dist/checkpoint/artifacts/manifest.js.map +1 -0
- package/dist/checkpoint/artifacts/materializer.d.ts +16 -0
- package/dist/checkpoint/artifacts/materializer.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/materializer.js +168 -0
- package/dist/checkpoint/artifacts/materializer.js.map +1 -0
- package/dist/checkpoint/artifacts/packager.d.ts +12 -0
- package/dist/checkpoint/artifacts/packager.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/packager.js +82 -0
- package/dist/checkpoint/artifacts/packager.js.map +1 -0
- package/dist/checkpoint/artifacts/repository.d.ts +11 -0
- package/dist/checkpoint/artifacts/repository.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/repository.js +29 -0
- package/dist/checkpoint/artifacts/repository.js.map +1 -0
- package/dist/checkpoint/artifacts/store.d.ts +13 -0
- package/dist/checkpoint/artifacts/store.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/store.js +85 -0
- package/dist/checkpoint/artifacts/store.js.map +1 -0
- package/dist/checkpoint/artifacts/types.d.ts +21 -0
- package/dist/checkpoint/artifacts/types.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/types.js +2 -0
- package/dist/checkpoint/artifacts/types.js.map +1 -0
- package/dist/checkpoint/artifacts/worker-decompressor.d.ts +17 -0
- package/dist/checkpoint/artifacts/worker-decompressor.d.ts.map +1 -0
- package/dist/checkpoint/artifacts/worker-decompressor.js +148 -0
- package/dist/checkpoint/artifacts/worker-decompressor.js.map +1 -0
- package/dist/checkpoint/asset-store.d.ts +10 -0
- package/dist/checkpoint/asset-store.d.ts.map +1 -0
- package/dist/checkpoint/asset-store.js +46 -0
- package/dist/checkpoint/asset-store.js.map +1 -0
- package/dist/checkpoint/bundler.d.ts +15 -0
- package/dist/checkpoint/bundler.d.ts.map +1 -0
- package/dist/checkpoint/bundler.js +45 -0
- package/dist/checkpoint/bundler.js.map +1 -0
- package/dist/checkpoint/cli.d.ts +2 -0
- package/dist/checkpoint/cli.d.ts.map +1 -0
- package/dist/checkpoint/cli.js +157 -0
- package/dist/checkpoint/cli.js.map +1 -0
- package/dist/checkpoint/entrypoint-generator.d.ts +17 -0
- package/dist/checkpoint/entrypoint-generator.d.ts.map +1 -0
- package/dist/checkpoint/entrypoint-generator.js +251 -0
- package/dist/checkpoint/entrypoint-generator.js.map +1 -0
- package/dist/checkpoint/forwarder.d.ts +6 -0
- package/dist/checkpoint/forwarder.d.ts.map +1 -0
- package/dist/checkpoint/forwarder.js +74 -0
- package/dist/checkpoint/forwarder.js.map +1 -0
- package/dist/checkpoint/gateway.d.ts +11 -0
- package/dist/checkpoint/gateway.d.ts.map +1 -0
- package/dist/checkpoint/gateway.js +30 -0
- package/dist/checkpoint/gateway.js.map +1 -0
- package/dist/checkpoint/ipc.d.ts +12 -0
- package/dist/checkpoint/ipc.d.ts.map +1 -0
- package/dist/checkpoint/ipc.js +96 -0
- package/dist/checkpoint/ipc.js.map +1 -0
- package/dist/checkpoint/manager.d.ts +20 -0
- package/dist/checkpoint/manager.d.ts.map +1 -0
- package/dist/checkpoint/manager.js +214 -0
- package/dist/checkpoint/manager.js.map +1 -0
- package/dist/checkpoint/process-manager.d.ts +35 -0
- package/dist/checkpoint/process-manager.d.ts.map +1 -0
- package/dist/checkpoint/process-manager.js +203 -0
- package/dist/checkpoint/process-manager.js.map +1 -0
- package/dist/checkpoint/resolver.d.ts +25 -0
- package/dist/checkpoint/resolver.d.ts.map +1 -0
- package/dist/checkpoint/resolver.js +95 -0
- package/dist/checkpoint/resolver.js.map +1 -0
- package/dist/checkpoint/socket-path.d.ts +2 -0
- package/dist/checkpoint/socket-path.d.ts.map +1 -0
- package/dist/checkpoint/socket-path.js +51 -0
- package/dist/checkpoint/socket-path.js.map +1 -0
- package/dist/checkpoint/types.d.ts +54 -0
- package/dist/checkpoint/types.d.ts.map +1 -0
- package/dist/checkpoint/types.js +2 -0
- package/dist/checkpoint/types.js.map +1 -0
- package/dist/cli/index.js +10 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/option-resolution.d.ts +1 -1
- package/dist/cli/option-resolution.d.ts.map +1 -1
- package/dist/cli/option-resolution.js.map +1 -1
- package/dist/cli.js +3817 -350
- package/dist/core/config-loader.d.ts +1 -0
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/config-loader.js +10 -2
- package/dist/core/config-loader.js.map +1 -1
- package/dist/core/router.d.ts +24 -3
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +398 -249
- package/dist/core/router.js.map +1 -1
- package/dist/core/server.d.ts +3 -0
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +35 -10
- package/dist/core/server.js.map +1 -1
- package/dist/core/vector.d.ts +3 -0
- package/dist/core/vector.d.ts.map +1 -1
- package/dist/core/vector.js +51 -1
- package/dist/core/vector.js.map +1 -1
- package/dist/dev/route-scanner.d.ts.map +1 -1
- package/dist/dev/route-scanner.js +2 -1
- package/dist/dev/route-scanner.js.map +1 -1
- package/dist/errors/index.cjs +2 -0
- package/dist/http.d.ts +32 -7
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +144 -13
- package/dist/http.js.map +1 -1
- package/dist/index.cjs +2657 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1433
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1301 -77
- package/dist/middleware/manager.d.ts +3 -3
- package/dist/middleware/manager.d.ts.map +1 -1
- package/dist/middleware/manager.js +9 -8
- package/dist/middleware/manager.js.map +1 -1
- package/dist/openapi/docs-ui.d.ts.map +1 -1
- package/dist/openapi/docs-ui.js +1097 -61
- package/dist/openapi/docs-ui.js.map +1 -1
- package/dist/openapi/generator.d.ts +2 -1
- package/dist/openapi/generator.d.ts.map +1 -1
- package/dist/openapi/generator.js +332 -16
- package/dist/openapi/generator.js.map +1 -1
- package/dist/types/index.d.ts +71 -28
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +24 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +3 -2
- package/dist/utils/validation.js.map +1 -1
- package/package.json +9 -14
- package/src/auth/protected.ts +11 -8
- package/src/cache/manager.ts +23 -4
- package/src/checkpoint/artifacts/compressor.ts +30 -0
- package/src/checkpoint/artifacts/decompress-worker.ts +49 -0
- package/src/checkpoint/artifacts/hasher.ts +6 -0
- package/src/checkpoint/artifacts/manifest.ts +72 -0
- package/src/checkpoint/artifacts/materializer.ts +211 -0
- package/src/checkpoint/artifacts/packager.ts +100 -0
- package/src/checkpoint/artifacts/repository.ts +36 -0
- package/src/checkpoint/artifacts/store.ts +102 -0
- package/src/checkpoint/artifacts/types.ts +24 -0
- package/src/checkpoint/artifacts/worker-decompressor.ts +192 -0
- package/src/checkpoint/asset-store.ts +61 -0
- package/src/checkpoint/bundler.ts +64 -0
- package/src/checkpoint/cli.ts +177 -0
- package/src/checkpoint/entrypoint-generator.ts +275 -0
- package/src/checkpoint/forwarder.ts +84 -0
- package/src/checkpoint/gateway.ts +40 -0
- package/src/checkpoint/ipc.ts +107 -0
- package/src/checkpoint/manager.ts +254 -0
- package/src/checkpoint/process-manager.ts +250 -0
- package/src/checkpoint/resolver.ts +124 -0
- package/src/checkpoint/socket-path.ts +61 -0
- package/src/checkpoint/types.ts +63 -0
- package/src/cli/index.ts +11 -2
- package/src/cli/option-resolution.ts +5 -1
- package/src/core/config-loader.ts +11 -2
- package/src/core/router.ts +505 -264
- package/src/core/server.ts +51 -11
- package/src/core/vector.ts +60 -1
- package/src/dev/route-scanner.ts +2 -1
- package/src/http.ts +219 -19
- package/src/index.ts +3 -2
- package/src/middleware/manager.ts +10 -10
- package/src/openapi/docs-ui.ts +1097 -61
- package/src/openapi/generator.ts +380 -13
- package/src/types/index.ts +83 -30
- package/src/utils/validation.ts +5 -3
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { StandardJSONSchemaV1, StandardSchemaV1, StandardTypedV1 } from './standard-schema';
|
|
2
2
|
import type { Server } from 'bun';
|
|
3
|
+
import type { CheckpointConfig } from '../checkpoint/types';
|
|
3
4
|
export interface DefaultAuthUser {
|
|
4
5
|
id: string;
|
|
5
6
|
email?: string;
|
|
@@ -9,47 +10,45 @@ export interface DefaultAuthUser {
|
|
|
9
10
|
}
|
|
10
11
|
export interface VectorTypes {
|
|
11
12
|
auth?: any;
|
|
12
|
-
context?: any;
|
|
13
13
|
cache?: any;
|
|
14
14
|
metadata?: any;
|
|
15
15
|
}
|
|
16
16
|
export interface DefaultVectorTypes extends VectorTypes {
|
|
17
17
|
auth: DefaultAuthUser;
|
|
18
|
-
context: Record<string, any>;
|
|
19
18
|
cache: any;
|
|
20
19
|
metadata: Record<string, any>;
|
|
21
20
|
}
|
|
22
21
|
export type GetAuthType<T extends VectorTypes> = T['auth'] extends undefined ? DefaultAuthUser : T['auth'];
|
|
23
|
-
export type GetContextType<T extends VectorTypes> = T['context'] extends undefined ? Record<string, any> : T['context'];
|
|
24
22
|
export type GetCacheType<T extends VectorTypes> = T['cache'] extends undefined ? any : T['cache'];
|
|
25
23
|
export type GetMetadataType<T extends VectorTypes> = T['metadata'] extends undefined ? Record<string, any> : T['metadata'];
|
|
26
24
|
export type AuthUser = DefaultAuthUser;
|
|
27
|
-
type
|
|
28
|
-
[key: string]: string | string[] | undefined;
|
|
29
|
-
};
|
|
30
|
-
type DefaultParamsShape = Record<string, string>;
|
|
31
|
-
type DefaultCookiesShape = Record<string, string>;
|
|
32
|
-
type BaseVectorRequest = Omit<Request, 'body' | 'json' | 'text' | 'formData' | 'arrayBuffer' | 'blob'>;
|
|
25
|
+
type BaseVectorRequest = Request;
|
|
33
26
|
type InferValidatedSection<TValidatedInput, TKey extends string, TFallback> = [TValidatedInput] extends [undefined] ? TFallback : TValidatedInput extends Record<string, unknown> ? TKey extends keyof TValidatedInput ? TValidatedInput[TKey] : TFallback : TFallback;
|
|
34
27
|
type InferValidatedInputValue<TValidatedInput> = [TValidatedInput] extends [undefined] ? unknown : TValidatedInput;
|
|
28
|
+
type ValidatedInputField<TValidatedInput> = [TValidatedInput] extends [undefined] ? {
|
|
29
|
+
validatedInput?: InferValidatedInputValue<TValidatedInput>;
|
|
30
|
+
} : {
|
|
31
|
+
validatedInput: InferValidatedInputValue<TValidatedInput>;
|
|
32
|
+
};
|
|
35
33
|
export type BunRouteHandler = (req: Request) => Response | Promise<Response>;
|
|
36
34
|
export type BunMethodMap = Record<string, BunRouteHandler>;
|
|
37
35
|
export type BunRouteTable = Record<string, BunMethodMap | Response>;
|
|
38
36
|
export type LegacyRouteEntry = [string, RegExp, [BunRouteHandler, ...BunRouteHandler[]], string?];
|
|
39
|
-
|
|
37
|
+
type VectorRequestTypeBrand<TTypes extends VectorTypes, TValidatedInput> = {
|
|
38
|
+
readonly __vectorTypesBrand__?: TTypes;
|
|
39
|
+
readonly __validatedInputBrand__?: TValidatedInput;
|
|
40
|
+
};
|
|
41
|
+
export type VectorRequest<TTypes extends VectorTypes = DefaultVectorTypes, TValidatedInput = undefined> = BaseVectorRequest & VectorRequestTypeBrand<TTypes, TValidatedInput>;
|
|
42
|
+
export type VectorContext<TTypes extends VectorTypes = DefaultVectorTypes, TValidatedInput = undefined> = {
|
|
43
|
+
request: VectorRequest<TTypes, TValidatedInput>;
|
|
40
44
|
authUser?: GetAuthType<TTypes>;
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
metadata: GetMetadataType<TTypes>;
|
|
46
|
+
params: InferValidatedSection<TValidatedInput, 'params', Record<string, string>>;
|
|
47
|
+
query: InferValidatedSection<TValidatedInput, 'query', Record<string, string | string[]>>;
|
|
48
|
+
cookies: InferValidatedSection<TValidatedInput, 'cookies', Record<string, string>>;
|
|
43
49
|
content?: InferValidatedSection<TValidatedInput, 'body', any>;
|
|
44
|
-
body?: InferValidatedSection<TValidatedInput, 'body', any>;
|
|
45
|
-
params?: InferValidatedSection<TValidatedInput, 'params', DefaultParamsShape>;
|
|
46
|
-
query: InferValidatedSection<TValidatedInput, 'query', DefaultQueryShape>;
|
|
47
|
-
headers: Headers;
|
|
48
|
-
cookies?: InferValidatedSection<TValidatedInput, 'cookies', DefaultCookiesShape>;
|
|
49
|
-
validatedInput?: InferValidatedInputValue<TValidatedInput>;
|
|
50
|
-
startTime?: number;
|
|
51
50
|
[key: string]: any;
|
|
52
|
-
}
|
|
51
|
+
} & ValidatedInputField<TValidatedInput>;
|
|
53
52
|
export interface CacheOptions {
|
|
54
53
|
key?: string;
|
|
55
54
|
ttl?: number;
|
|
@@ -61,6 +60,46 @@ export interface RouteSchemaDefinition<TInput extends StandardRouteSchema | unde
|
|
|
61
60
|
input?: TInput;
|
|
62
61
|
output?: TOutput;
|
|
63
62
|
tag?: string;
|
|
63
|
+
summary?: string;
|
|
64
|
+
description?: string;
|
|
65
|
+
descrition?: string;
|
|
66
|
+
}
|
|
67
|
+
export declare enum OpenApiSecuritySchemeType {
|
|
68
|
+
ApiKey = "apiKey",
|
|
69
|
+
Http = "http",
|
|
70
|
+
MutualTls = "mutualTLS",
|
|
71
|
+
OAuth2 = "oauth2",
|
|
72
|
+
OpenIdConnect = "openIdConnect"
|
|
73
|
+
}
|
|
74
|
+
export declare enum HttpAuthScheme {
|
|
75
|
+
Basic = "basic",
|
|
76
|
+
Bearer = "bearer",
|
|
77
|
+
Digest = "digest"
|
|
78
|
+
}
|
|
79
|
+
export declare enum AuthKind {
|
|
80
|
+
ApiKey = "ApiKey",
|
|
81
|
+
HttpBasic = "HttpBasic",
|
|
82
|
+
HttpBearer = "HttpBearer",
|
|
83
|
+
HttpDigest = "HttpDigest",
|
|
84
|
+
OAuth2 = "OAuth2",
|
|
85
|
+
OpenIdConnect = "OpenIdConnect",
|
|
86
|
+
MutualTls = "MutualTls"
|
|
87
|
+
}
|
|
88
|
+
export type RouteAuthOption = boolean | AuthKind;
|
|
89
|
+
export interface OpenAPISecurityScheme {
|
|
90
|
+
type: OpenApiSecuritySchemeType | ({} & string);
|
|
91
|
+
description?: string;
|
|
92
|
+
name?: string;
|
|
93
|
+
in?: 'query' | 'header' | 'cookie';
|
|
94
|
+
scheme?: string;
|
|
95
|
+
bearerFormat?: string;
|
|
96
|
+
flows?: Record<string, unknown>;
|
|
97
|
+
openIdConnectUrl?: string;
|
|
98
|
+
[key: string]: unknown;
|
|
99
|
+
}
|
|
100
|
+
export interface OpenAPIAuthOptions {
|
|
101
|
+
securitySchemeNames?: Partial<Record<AuthKind, string>>;
|
|
102
|
+
securitySchemes?: Partial<Record<AuthKind, OpenAPISecurityScheme>>;
|
|
64
103
|
}
|
|
65
104
|
export type InferStandardSchemaInput<TSchema extends StandardRouteSchema> = StandardSchemaV1.InferInput<TSchema>;
|
|
66
105
|
export type InferStandardSchemaOutput<TSchema extends StandardRouteSchema> = StandardSchemaV1.InferOutput<TSchema>;
|
|
@@ -71,8 +110,9 @@ export type InferRouteInputFromSchemaDefinition<TSchemaDef extends RouteSchemaDe
|
|
|
71
110
|
export interface RouteOptions<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
72
111
|
method: string;
|
|
73
112
|
path: string;
|
|
74
|
-
auth?:
|
|
113
|
+
auth?: RouteAuthOption;
|
|
75
114
|
expose?: boolean;
|
|
115
|
+
deprecated?: boolean;
|
|
76
116
|
cache?: CacheOptions | number;
|
|
77
117
|
rawRequest?: boolean;
|
|
78
118
|
validate?: boolean;
|
|
@@ -82,7 +122,7 @@ export interface RouteOptions<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
|
82
122
|
schema?: RouteSchemaDefinition;
|
|
83
123
|
}
|
|
84
124
|
export interface RouteBooleanDefaults {
|
|
85
|
-
auth?:
|
|
125
|
+
auth?: RouteAuthOption;
|
|
86
126
|
expose?: boolean;
|
|
87
127
|
rawRequest?: boolean;
|
|
88
128
|
validate?: boolean;
|
|
@@ -92,7 +132,7 @@ export interface VectorDefaults {
|
|
|
92
132
|
route?: RouteBooleanDefaults;
|
|
93
133
|
}
|
|
94
134
|
export interface VectorConfig<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
95
|
-
port?: number;
|
|
135
|
+
port?: number | string;
|
|
96
136
|
hostname?: string;
|
|
97
137
|
reusePort?: boolean;
|
|
98
138
|
development?: boolean;
|
|
@@ -107,6 +147,7 @@ export interface VectorConfig<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
|
107
147
|
openapi?: OpenAPIOptions | boolean;
|
|
108
148
|
startup?: StartupHandler;
|
|
109
149
|
shutdown?: ShutdownHandler;
|
|
150
|
+
checkpoint?: CheckpointConfig;
|
|
110
151
|
}
|
|
111
152
|
export interface StartVectorContext {
|
|
112
153
|
configSource: 'user' | 'default';
|
|
@@ -126,7 +167,7 @@ export interface StartedVectorApp<TTypes extends VectorTypes = DefaultVectorType
|
|
|
126
167
|
shutdown: () => Promise<void>;
|
|
127
168
|
}
|
|
128
169
|
export interface VectorConfigSchema<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
129
|
-
port?: number;
|
|
170
|
+
port?: number | string;
|
|
130
171
|
hostname?: string;
|
|
131
172
|
reusePort?: boolean;
|
|
132
173
|
development?: boolean;
|
|
@@ -142,6 +183,7 @@ export interface VectorConfigSchema<TTypes extends VectorTypes = DefaultVectorTy
|
|
|
142
183
|
openapi?: OpenAPIOptions | boolean;
|
|
143
184
|
startup?: StartupHandler;
|
|
144
185
|
shutdown?: ShutdownHandler;
|
|
186
|
+
checkpoint?: CheckpointConfig;
|
|
145
187
|
types?: VectorTypes;
|
|
146
188
|
}
|
|
147
189
|
export interface CorsOptions {
|
|
@@ -168,14 +210,15 @@ export interface OpenAPIOptions {
|
|
|
168
210
|
target?: 'openapi-3.0' | 'draft-2020-12' | 'draft-07' | ({} & string);
|
|
169
211
|
docs?: boolean | OpenAPIDocsOptions;
|
|
170
212
|
info?: OpenAPIInfoOptions;
|
|
213
|
+
auth?: OpenAPIAuthOptions;
|
|
171
214
|
}
|
|
172
|
-
export type BeforeMiddlewareHandler<TTypes extends VectorTypes = DefaultVectorTypes> = (
|
|
173
|
-
export type AfterMiddlewareHandler<TTypes extends VectorTypes = DefaultVectorTypes> = (response: Response,
|
|
215
|
+
export type BeforeMiddlewareHandler<TTypes extends VectorTypes = DefaultVectorTypes> = (context: VectorContext<TTypes>) => Promise<void | Response> | void | Response;
|
|
216
|
+
export type AfterMiddlewareHandler<TTypes extends VectorTypes = DefaultVectorTypes> = (response: Response, context: VectorContext<TTypes>) => Promise<Response> | Response;
|
|
174
217
|
export type MiddlewareHandler = BeforeMiddlewareHandler | AfterMiddlewareHandler;
|
|
175
218
|
export type StartupHandler = () => Promise<void> | void;
|
|
176
219
|
export type ShutdownHandler = () => Promise<void> | void;
|
|
177
|
-
export type RouteHandler<TTypes extends VectorTypes = DefaultVectorTypes, TValidatedInput = undefined> = (
|
|
178
|
-
export type ProtectedHandler<TTypes extends VectorTypes = DefaultVectorTypes> = (
|
|
220
|
+
export type RouteHandler<TTypes extends VectorTypes = DefaultVectorTypes, TValidatedInput = undefined> = (context: VectorContext<TTypes, TValidatedInput>) => Promise<any> | any;
|
|
221
|
+
export type ProtectedHandler<TTypes extends VectorTypes = DefaultVectorTypes> = (context: VectorContext<TTypes>) => Promise<GetAuthType<TTypes>> | GetAuthType<TTypes>;
|
|
179
222
|
export type CacheHandler = (key: string, factory: () => Promise<any>, ttl: number) => Promise<any>;
|
|
180
223
|
export interface RouteDefinition<TTypes extends VectorTypes = DefaultVectorTypes, TValidatedInput = undefined> {
|
|
181
224
|
options: RouteOptions<TTypes>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
|
@@ -1,2 +1,25 @@
|
|
|
1
|
-
export
|
|
1
|
+
export var OpenApiSecuritySchemeType;
|
|
2
|
+
(function (OpenApiSecuritySchemeType) {
|
|
3
|
+
OpenApiSecuritySchemeType["ApiKey"] = "apiKey";
|
|
4
|
+
OpenApiSecuritySchemeType["Http"] = "http";
|
|
5
|
+
OpenApiSecuritySchemeType["MutualTls"] = "mutualTLS";
|
|
6
|
+
OpenApiSecuritySchemeType["OAuth2"] = "oauth2";
|
|
7
|
+
OpenApiSecuritySchemeType["OpenIdConnect"] = "openIdConnect";
|
|
8
|
+
})(OpenApiSecuritySchemeType || (OpenApiSecuritySchemeType = {}));
|
|
9
|
+
export var HttpAuthScheme;
|
|
10
|
+
(function (HttpAuthScheme) {
|
|
11
|
+
HttpAuthScheme["Basic"] = "basic";
|
|
12
|
+
HttpAuthScheme["Bearer"] = "bearer";
|
|
13
|
+
HttpAuthScheme["Digest"] = "digest";
|
|
14
|
+
})(HttpAuthScheme || (HttpAuthScheme = {}));
|
|
15
|
+
export var AuthKind;
|
|
16
|
+
(function (AuthKind) {
|
|
17
|
+
AuthKind["ApiKey"] = "ApiKey";
|
|
18
|
+
AuthKind["HttpBasic"] = "HttpBasic";
|
|
19
|
+
AuthKind["HttpBearer"] = "HttpBearer";
|
|
20
|
+
AuthKind["HttpDigest"] = "HttpDigest";
|
|
21
|
+
AuthKind["OAuth2"] = "OAuth2";
|
|
22
|
+
AuthKind["OpenIdConnect"] = "OpenIdConnect";
|
|
23
|
+
AuthKind["MutualTls"] = "MutualTls";
|
|
24
|
+
})(AuthKind || (AuthKind = {}));
|
|
2
25
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAyGA,MAAM,CAAN,IAAY,yBAMX;AAND,WAAY,yBAAyB;IACnC,8CAAiB,CAAA;IACjB,0CAAa,CAAA;IACb,oDAAuB,CAAA;IACvB,8CAAiB,CAAA;IACjB,4DAA+B,CAAA;AACjC,CAAC,EANW,yBAAyB,KAAzB,yBAAyB,QAMpC;AAED,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,mCAAiB,CAAA;IACjB,mCAAiB,CAAA;AACnB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB;AAED,MAAM,CAAN,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,2CAA+B,CAAA;IAC/B,mCAAuB,CAAA;AACzB,CAAC,EARW,QAAQ,KAAR,QAAQ,QAQnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,UAAU,CAAC;AAE1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAiBjE;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,UAAU,CAAC;AAE1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAiBjE;AAmCD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -20,10 +20,11 @@ function validatePort(port) {
|
|
|
20
20
|
if (port === undefined) {
|
|
21
21
|
return DEFAULT_CONFIG.PORT;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
const normalizedPort = Number(port);
|
|
24
|
+
if (!Number.isInteger(normalizedPort) || normalizedPort < 1 || normalizedPort > 65535) {
|
|
24
25
|
throw new Error(`Invalid port: ${port}. Port must be between 1 and 65535.`);
|
|
25
26
|
}
|
|
26
|
-
return
|
|
27
|
+
return normalizedPort;
|
|
27
28
|
}
|
|
28
29
|
function validateCorsOptions(cors) {
|
|
29
30
|
if (cors === false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,eAAe,GAAiB;QACpC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ;QACpD,SAAS,EAAE,MAAM,CAAC,SAAS,KAAK,KAAK;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,KAAK;QACxC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,cAAc,CAAC,UAAU;QACxD,YAAY,EAAE,MAAM,CAAC,YAAY,KAAK,KAAK;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAChE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IAEF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,eAAe,GAAiB;QACpC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ;QACpD,SAAS,EAAE,MAAM,CAAC,SAAS,KAAK,KAAK;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,KAAK;QACxC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,cAAc,CAAC,UAAU;QACxD,YAAY,EAAE,MAAM,CAAC,YAAY,KAAK,KAAK;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAChE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IAEF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,IAAsB;IAC1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,qCAAqC,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA2B;IACtD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,MAAM,EAAE,GAAG;YACX,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;YAC/C,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;YAClE,aAAa,EAAE,CAAC,eAAe,CAAC;YAChC,MAAM,EAAE,cAAc,CAAC,YAAY;SACpC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAClF,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vector-framework",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"author": "webhie-com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/webhie-com/vector.git"
|
|
8
8
|
},
|
|
9
|
-
"main": "./dist/index.
|
|
9
|
+
"main": "./dist/index.cjs",
|
|
10
10
|
"module": "./dist/index.mjs",
|
|
11
11
|
"dependencies": {},
|
|
12
12
|
"devDependencies": {
|
|
@@ -26,22 +26,16 @@
|
|
|
26
26
|
".": {
|
|
27
27
|
"types": "./dist/index.d.ts",
|
|
28
28
|
"import": "./dist/index.mjs",
|
|
29
|
-
"require": "./dist/index.
|
|
30
|
-
},
|
|
31
|
-
"./middleware": {
|
|
32
|
-
"types": "./dist/middleware/index.d.ts",
|
|
33
|
-
"import": "./dist/middleware/index.mjs",
|
|
34
|
-
"require": "./dist/middleware/index.js"
|
|
29
|
+
"require": "./dist/index.cjs"
|
|
35
30
|
},
|
|
36
31
|
"./types": {
|
|
37
32
|
"types": "./dist/types/index.d.ts",
|
|
38
|
-
"
|
|
39
|
-
"require": "./dist/types/index.js"
|
|
33
|
+
"default": "./dist/types/index.js"
|
|
40
34
|
},
|
|
41
35
|
"./errors": {
|
|
42
36
|
"types": "./dist/errors/index.d.ts",
|
|
43
|
-
"import": "./dist/errors/index.
|
|
44
|
-
"require": "./dist/errors/index.
|
|
37
|
+
"import": "./dist/errors/index.js",
|
|
38
|
+
"require": "./dist/errors/index.cjs"
|
|
45
39
|
}
|
|
46
40
|
},
|
|
47
41
|
"bin": {
|
|
@@ -81,7 +75,7 @@
|
|
|
81
75
|
"build:lib": "bun run build:clean && bun run build:ts && bun run build:bundle && bun run build:cli",
|
|
82
76
|
"build:clean": "rm -rf dist",
|
|
83
77
|
"build:ts": "tsc",
|
|
84
|
-
"build:bundle": "bun build src/index.ts --format esm --minify --outfile dist/index.mjs && bun build src/index.ts --format cjs --minify --outfile dist/index.
|
|
78
|
+
"build:bundle": "bun build src/index.ts --target bun --format esm --minify --outfile dist/index.mjs && bun build src/index.ts --target bun --format cjs --minify --outfile dist/index.cjs && bun build src/errors/index.ts --target bun --format cjs --minify --outfile dist/errors/index.cjs",
|
|
85
79
|
"build:cli": "bun build src/cli/index.ts --target bun --outfile dist/cli.js",
|
|
86
80
|
"local:cli:build": "bun run build:lib",
|
|
87
81
|
"local:cli:dev": "bun run dist/cli.js dev --config ./vector.config.ts",
|
|
@@ -90,10 +84,11 @@
|
|
|
90
84
|
"test:unit": "bun test tests/*.test.ts",
|
|
91
85
|
"test:watch": "bun test --watch tests/*.test.ts",
|
|
92
86
|
"test:coverage": "bun test --coverage tests/*.test.ts",
|
|
93
|
-
"test:e2e": "bun test --max-concurrency 1 tests/e2e/e2e.test.ts tests/e2e/zod-io.e2e.test.ts",
|
|
87
|
+
"test:e2e": "bun test --max-concurrency 1 tests/e2e/e2e.test.ts tests/e2e/zod-io.e2e.test.ts tests/e2e/package-exports.test.ts",
|
|
94
88
|
"test:load": "bun run tests/e2e/load.test.ts",
|
|
95
89
|
"test:soak": "bun run tests/e2e/soak.test.ts",
|
|
96
90
|
"test:benchmark": "bun run tests/e2e/benchmark.test.ts",
|
|
91
|
+
"test:benchmark:checkpoint": "bun run tests/e2e/checkpoint-raw-fetch-no-rate-limit.ts",
|
|
97
92
|
"test:benchmark:io-schema": "bun run tests/e2e/concurrency-io-schema-benchmark.ts",
|
|
98
93
|
"test:all": "bun test ./tests/**/*.test.ts",
|
|
99
94
|
"test:perf": "bun run test:load && bun run test:soak && bun run test:benchmark",
|
package/src/auth/protected.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DefaultVectorTypes, GetAuthType, ProtectedHandler,
|
|
1
|
+
import type { DefaultVectorTypes, GetAuthType, ProtectedHandler, VectorContext, VectorTypes } from '../types';
|
|
2
2
|
|
|
3
3
|
export class AuthManager<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
4
4
|
private protectedHandler: ProtectedHandler<TTypes> | null = null;
|
|
@@ -11,25 +11,28 @@ export class AuthManager<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
|
11
11
|
this.protectedHandler = null;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
async authenticate(
|
|
14
|
+
async authenticate(context: VectorContext<TTypes>): Promise<GetAuthType<TTypes> | null> {
|
|
15
15
|
if (!this.protectedHandler) {
|
|
16
16
|
throw new Error('Protected handler not configured. Use vector.protected() to set authentication handler.');
|
|
17
17
|
}
|
|
18
|
+
if (!context || typeof context !== 'object' || !(context as any).request) {
|
|
19
|
+
throw new Error('Authentication context is invalid: missing request');
|
|
20
|
+
}
|
|
18
21
|
|
|
19
22
|
try {
|
|
20
|
-
const authUser = await this.protectedHandler(
|
|
21
|
-
|
|
23
|
+
const authUser = await this.protectedHandler(context);
|
|
24
|
+
context.authUser = authUser;
|
|
22
25
|
return authUser;
|
|
23
26
|
} catch (error) {
|
|
24
27
|
throw new Error(`Authentication failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
|
|
28
|
-
isAuthenticated(
|
|
29
|
-
return !!
|
|
31
|
+
isAuthenticated(context: VectorContext<TTypes>): boolean {
|
|
32
|
+
return !!context.authUser;
|
|
30
33
|
}
|
|
31
34
|
|
|
32
|
-
getUser(
|
|
33
|
-
return
|
|
35
|
+
getUser(context: VectorContext<TTypes>): GetAuthType<TTypes> | null {
|
|
36
|
+
return context.authUser || null;
|
|
34
37
|
}
|
|
35
38
|
}
|
package/src/cache/manager.ts
CHANGED
|
@@ -41,12 +41,13 @@ export class CacheManager<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
|
41
41
|
const cached = this.memoryCache.get(key);
|
|
42
42
|
|
|
43
43
|
if (this.isCacheValid(cached, now)) {
|
|
44
|
-
return cached!.value as T;
|
|
44
|
+
return this.cloneCachedValue(cached!.value as T);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
// Deduplicate concurrent requests for the same key (cache stampede prevention)
|
|
48
48
|
if (this.inflight.has(key)) {
|
|
49
|
-
|
|
49
|
+
const inflightValue = (await this.inflight.get(key)!) as T;
|
|
50
|
+
return this.cloneCachedValue(inflightValue);
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
const promise = (async () => {
|
|
@@ -69,17 +70,35 @@ export class CacheManager<TTypes extends VectorTypes = DefaultVectorTypes> {
|
|
|
69
70
|
|
|
70
71
|
private setInMemoryCache(key: string, value: any, ttl: number): void {
|
|
71
72
|
const expires = Date.now() + ttl * 1000;
|
|
72
|
-
this.memoryCache.set(key, { value, expires });
|
|
73
|
+
this.memoryCache.set(key, { value: this.cloneForStore(value), expires });
|
|
73
74
|
|
|
74
75
|
this.scheduleCleanup();
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
private cloneForStore<T>(value: T): T {
|
|
79
|
+
if (value instanceof Response) {
|
|
80
|
+
return value.clone() as unknown as T;
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private cloneCachedValue<T>(value: T): T {
|
|
86
|
+
if (value instanceof Response) {
|
|
87
|
+
return value.clone() as unknown as T;
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
|
|
77
92
|
private scheduleCleanup(): void {
|
|
78
93
|
if (this.cleanupInterval) return;
|
|
79
94
|
|
|
80
|
-
|
|
95
|
+
const timer = setInterval(() => {
|
|
81
96
|
this.cleanupExpired();
|
|
82
97
|
}, 60000); // Clean up every minute
|
|
98
|
+
if (typeof (timer as any).unref === 'function') {
|
|
99
|
+
(timer as any).unref();
|
|
100
|
+
}
|
|
101
|
+
this.cleanupInterval = timer;
|
|
83
102
|
}
|
|
84
103
|
|
|
85
104
|
private cleanupExpired(): void {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CheckpointCompressionCodec } from '../types';
|
|
2
|
+
|
|
3
|
+
export const DEFAULT_ASSET_CODEC: CheckpointCompressionCodec = 'gzip';
|
|
4
|
+
|
|
5
|
+
export function compressBytes(input: Uint8Array, codec: CheckpointCompressionCodec = DEFAULT_ASSET_CODEC): Uint8Array {
|
|
6
|
+
const normalized = new Uint8Array(input);
|
|
7
|
+
switch (codec) {
|
|
8
|
+
case 'none':
|
|
9
|
+
return normalized;
|
|
10
|
+
case 'gzip':
|
|
11
|
+
return Bun.gzipSync(normalized);
|
|
12
|
+
default:
|
|
13
|
+
throw new Error(`Unsupported compression codec: ${codec}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function decompressBytes(
|
|
18
|
+
input: Uint8Array,
|
|
19
|
+
codec: CheckpointCompressionCodec = DEFAULT_ASSET_CODEC
|
|
20
|
+
): Uint8Array {
|
|
21
|
+
const normalized = new Uint8Array(input);
|
|
22
|
+
switch (codec) {
|
|
23
|
+
case 'none':
|
|
24
|
+
return normalized;
|
|
25
|
+
case 'gzip':
|
|
26
|
+
return Bun.gunzipSync(normalized);
|
|
27
|
+
default:
|
|
28
|
+
throw new Error(`Unsupported compression codec: ${codec}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CheckpointCompressionCodec } from '../types';
|
|
2
|
+
|
|
3
|
+
interface DecompressWorkerRequest {
|
|
4
|
+
id: number;
|
|
5
|
+
codec: CheckpointCompressionCodec;
|
|
6
|
+
input: ArrayBuffer;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface DecompressWorkerResponse {
|
|
10
|
+
id: number;
|
|
11
|
+
output?: ArrayBuffer;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const worker = globalThis as unknown as Worker;
|
|
16
|
+
|
|
17
|
+
worker.onmessage = (event: MessageEvent<DecompressWorkerRequest>) => {
|
|
18
|
+
const request = event.data;
|
|
19
|
+
const response: DecompressWorkerResponse = { id: request.id };
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const input = new Uint8Array(request.input);
|
|
23
|
+
const output = decompressInWorker(input, request.codec);
|
|
24
|
+
const outputBuffer = toArrayBuffer(output);
|
|
25
|
+
response.output = outputBuffer;
|
|
26
|
+
worker.postMessage(response, [outputBuffer]);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
response.error = error instanceof Error ? error.message : String(error);
|
|
29
|
+
worker.postMessage(response);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
function decompressInWorker(
|
|
34
|
+
input: Uint8Array<ArrayBuffer>,
|
|
35
|
+
codec: CheckpointCompressionCodec
|
|
36
|
+
): Uint8Array<ArrayBufferLike> {
|
|
37
|
+
switch (codec) {
|
|
38
|
+
case 'none':
|
|
39
|
+
return input;
|
|
40
|
+
case 'gzip':
|
|
41
|
+
return Bun.gunzipSync(input);
|
|
42
|
+
default:
|
|
43
|
+
throw new Error(`Unsupported compression codec: ${codec}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function toArrayBuffer(input: Uint8Array<ArrayBufferLike>): ArrayBuffer {
|
|
48
|
+
return new Uint8Array(input).buffer;
|
|
49
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export function sha256Hex(content: Uint8Array | ArrayBuffer): string {
|
|
2
|
+
const bytes = content instanceof Uint8Array ? content : new Uint8Array(content);
|
|
3
|
+
const hashBuffer = Bun.SHA256.hash(bytes);
|
|
4
|
+
const hashBytes = new Uint8Array(hashBuffer.buffer, hashBuffer.byteOffset, hashBuffer.byteLength);
|
|
5
|
+
return Buffer.from(hashBytes).toString('hex');
|
|
6
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { basename, isAbsolute, relative } from 'node:path';
|
|
2
|
+
import type { CheckpointAssetRecord } from '../types';
|
|
3
|
+
|
|
4
|
+
const UNSAFE_SEGMENT_PATTERN = /[^a-zA-Z0-9._/-]/g;
|
|
5
|
+
const WINDOWS_DRIVE_ABS_PATTERN = /^[a-zA-Z]:[\\/]/;
|
|
6
|
+
const WINDOWS_UNC_ABS_PATTERN = /^\\\\[^\\]+\\[^\\]+/;
|
|
7
|
+
|
|
8
|
+
export function normalizeLogicalPath(input: string): string {
|
|
9
|
+
const normalizedInput = normalizeSlashes(input).trim();
|
|
10
|
+
const rel = isAbsolutePathPortable(normalizedInput) ? toPortableRelativePath(normalizedInput) : normalizedInput;
|
|
11
|
+
|
|
12
|
+
const cleaned = rel
|
|
13
|
+
.split('/')
|
|
14
|
+
.filter((segment) => segment.length > 0 && segment !== '.' && segment !== '..')
|
|
15
|
+
.join('/');
|
|
16
|
+
|
|
17
|
+
const sanitized = cleaned.replace(UNSAFE_SEGMENT_PATTERN, '_').replace(/^\/+/, '');
|
|
18
|
+
if (sanitized.length > 0) {
|
|
19
|
+
return sanitized;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const fallback = basename(normalizedInput).replace(UNSAFE_SEGMENT_PATTERN, '_');
|
|
23
|
+
return fallback.length > 0 ? `external/${fallback}` : 'external/asset.bin';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function normalizeRelativePath(input: string): string {
|
|
27
|
+
return normalizeSlashes(input).replace(/^\/+/, '');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function isAbsolutePathPortable(input: string): boolean {
|
|
31
|
+
const normalized = normalizeSlashes(input).trim();
|
|
32
|
+
return isAbsolute(normalized) || WINDOWS_DRIVE_ABS_PATTERN.test(normalized) || WINDOWS_UNC_ABS_PATTERN.test(input);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function computeAssetFingerprint(assets: CheckpointAssetRecord[]): string {
|
|
36
|
+
const stable = assets
|
|
37
|
+
.map((asset) => ({
|
|
38
|
+
type: asset.type,
|
|
39
|
+
logicalPath: asset.logicalPath,
|
|
40
|
+
contentHash: asset.contentHash ?? asset.hash,
|
|
41
|
+
blobHash: asset.blobHash ?? '',
|
|
42
|
+
blobPath: asset.blobPath ?? asset.storedPath,
|
|
43
|
+
codec: asset.codec ?? 'none',
|
|
44
|
+
size: asset.contentSize ?? asset.size,
|
|
45
|
+
}))
|
|
46
|
+
.sort((a, b) =>
|
|
47
|
+
`${a.type}:${a.logicalPath}:${a.contentHash}:${a.blobHash}`.localeCompare(
|
|
48
|
+
`${b.type}:${b.logicalPath}:${b.contentHash}:${b.blobHash}`
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
return JSON.stringify(stable);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function normalizeSlashes(value: string): string {
|
|
56
|
+
return value.replace(/\\/g, '/');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function toPortableRelativePath(input: string): string {
|
|
60
|
+
const normalized = normalizeSlashes(input);
|
|
61
|
+
if (WINDOWS_DRIVE_ABS_PATTERN.test(normalized)) {
|
|
62
|
+
return normalized.replace(/^[a-zA-Z]:/, '').replace(/^\/+/, '');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (WINDOWS_UNC_ABS_PATTERN.test(input)) {
|
|
66
|
+
return normalizeSlashes(input)
|
|
67
|
+
.replace(/^\\\\[^\\]+\\[^\\]+/, '')
|
|
68
|
+
.replace(/^\/+/, '');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return normalizeSlashes(relative(process.cwd(), normalized));
|
|
72
|
+
}
|