vixy 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026-present Hisam Fahri
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # vixy
2
+
3
+ To install dependencies:
4
+
5
+ ```bash
6
+ bun install
7
+ ```
8
+
9
+ To run:
10
+
11
+ ```bash
12
+ bun run index.ts
13
+ ```
14
+
15
+ This project was created using `bun init` in bun v1.3.6. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
@@ -0,0 +1,53 @@
1
+ import type { ContentfulStatusCode, ContentlessStatusCode, RedirectStatusCode } from "./lib/status-code";
2
+ export interface VixyRequest {
3
+ raw: Request;
4
+ param: (name: string) => string | undefined;
5
+ params: Record<string, string>;
6
+ query: {
7
+ (): Record<string, string>;
8
+ (name: string): string | undefined;
9
+ };
10
+ queries: (name: string) => string[] | undefined;
11
+ header: (name: string) => string | undefined;
12
+ cookie: {
13
+ (): Record<string, string>;
14
+ (name: string): string | undefined;
15
+ };
16
+ json: () => Promise<any>;
17
+ text: () => Promise<string>;
18
+ formData: () => Promise<FormData>;
19
+ arrayBuffer: () => Promise<ArrayBuffer>;
20
+ blob: () => Promise<Blob>;
21
+ href: string;
22
+ pathname: string;
23
+ routePathname: string;
24
+ setContext: <T = any>(key: string, value: T) => void;
25
+ getContext: <T = any>(key: string) => T | undefined;
26
+ }
27
+ export interface CookieOptions {
28
+ expires?: Date;
29
+ maxAge?: number;
30
+ domain?: string;
31
+ path?: string;
32
+ secure?: boolean;
33
+ httpOnly?: boolean;
34
+ sameSite?: "Strict" | "Lax" | "None";
35
+ }
36
+ export interface VixyResponse {
37
+ header: (key: string, value: any) => void;
38
+ cookie: (key: string, value: string, options?: CookieOptions) => void;
39
+ json: (data: any, status?: ContentfulStatusCode) => Response;
40
+ text: (content: string, status?: ContentfulStatusCode) => Response;
41
+ html: (content: string, status?: ContentfulStatusCode) => Response;
42
+ null: (status?: ContentlessStatusCode) => Response;
43
+ redirect: (location: string, status?: RedirectStatusCode) => Response;
44
+ }
45
+ export declare class VixyContext {
46
+ req: VixyRequest;
47
+ res: VixyResponse;
48
+ private bodyCache;
49
+ private customHeaders;
50
+ private contextStore;
51
+ constructor(rawRequest: Request, params?: Record<string, string>, routePathname?: string);
52
+ }
53
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ export class VixyContext {
2
+ req;
3
+ res;
4
+ bodyCache = null;
5
+ customHeaders = {};
6
+ contextStore = {};
7
+ constructor(rawRequest, params = {}, routePathname = "") {
8
+ const url = new URL(rawRequest.url);
9
+ const searchParams = url.searchParams;
10
+ // Parse cookies from Cookie header
11
+ const parseCookies = () => {
12
+ const cookieHeader = rawRequest.headers.get("Cookie");
13
+ if (!cookieHeader) {
14
+ return {};
15
+ }
16
+ const cookies = {};
17
+ const pairs = cookieHeader.split(";");
18
+ for (const pair of pairs) {
19
+ const trimmed = pair.trim();
20
+ const equalsIndex = trimmed.indexOf("=");
21
+ if (equalsIndex === -1) {
22
+ continue;
23
+ }
24
+ const name = trimmed.substring(0, equalsIndex).trim();
25
+ const value = trimmed.substring(equalsIndex + 1).trim();
26
+ if (name) {
27
+ cookies[name] = value;
28
+ }
29
+ }
30
+ return cookies;
31
+ };
32
+ const cookiesCache = parseCookies();
33
+ // Create cookie function with overloads
34
+ const cookieFn = ((name) => {
35
+ if (name === undefined) {
36
+ // Return all cookies as an object
37
+ return cookiesCache;
38
+ }
39
+ // Return specific cookie
40
+ return cookiesCache[name];
41
+ });
42
+ // Create query function with overloads
43
+ const queryFn = ((name) => {
44
+ if (name === undefined) {
45
+ // Return all query params as an object
46
+ const allParams = {};
47
+ searchParams.forEach((value, key) => {
48
+ allParams[key] = value;
49
+ });
50
+ return allParams;
51
+ }
52
+ // Return specific query param
53
+ return searchParams.get(name) ?? undefined;
54
+ });
55
+ // Cache the body to prevent "Body already used" errors
56
+ const getBodyCache = async () => {
57
+ if (this.bodyCache === null) {
58
+ this.bodyCache = await rawRequest.arrayBuffer();
59
+ }
60
+ return this.bodyCache;
61
+ };
62
+ this.req = {
63
+ raw: rawRequest,
64
+ params: params,
65
+ param: (name) => params[name],
66
+ query: queryFn,
67
+ queries: (name) => {
68
+ const values = searchParams.getAll(name);
69
+ return values.length > 0 ? values : undefined;
70
+ },
71
+ header: (name) => rawRequest.headers.get(name) ?? undefined,
72
+ cookie: cookieFn,
73
+ json: async () => {
74
+ const buffer = await getBodyCache();
75
+ const text = new TextDecoder().decode(buffer);
76
+ return JSON.parse(text);
77
+ },
78
+ text: async () => {
79
+ const buffer = await getBodyCache();
80
+ return new TextDecoder().decode(buffer);
81
+ },
82
+ formData: async () => {
83
+ const buffer = await getBodyCache();
84
+ const blob = new Blob([buffer]);
85
+ const contentType = rawRequest.headers.get("Content-Type") ?? "";
86
+ const response = new Response(blob, {
87
+ headers: { "Content-Type": contentType },
88
+ });
89
+ // Bun has native FormData support,
90
+ // so we ignore the undici deprecation warning
91
+ return response.formData();
92
+ },
93
+ arrayBuffer: async () => {
94
+ return getBodyCache();
95
+ },
96
+ blob: async () => {
97
+ const buffer = await getBodyCache();
98
+ return new Blob([buffer]);
99
+ },
100
+ href: rawRequest.url,
101
+ pathname: url.pathname,
102
+ routePathname: routePathname,
103
+ setContext: (key, value) => {
104
+ this.contextStore[key] = value;
105
+ },
106
+ getContext: (key) => {
107
+ return this.contextStore[key];
108
+ },
109
+ };
110
+ this.res = {
111
+ header: (key, value) => {
112
+ this.customHeaders[key] = String(value);
113
+ },
114
+ cookie: (key, value, options) => {
115
+ const parts = [`${key}=${value}`];
116
+ if (options?.maxAge !== undefined) {
117
+ parts.push(`Max-Age=${options.maxAge}`);
118
+ }
119
+ else if (options?.expires !== undefined) {
120
+ parts.push(`Expires=${options.expires.toUTCString()}`);
121
+ }
122
+ if (options?.domain !== undefined) {
123
+ parts.push(`Domain=${options.domain}`);
124
+ }
125
+ if (options?.path !== undefined) {
126
+ parts.push(`Path=${options.path}`);
127
+ }
128
+ if (options?.secure === true) {
129
+ parts.push("Secure");
130
+ }
131
+ if (options?.httpOnly === true) {
132
+ parts.push("HttpOnly");
133
+ }
134
+ if (options?.sameSite !== undefined) {
135
+ parts.push(`SameSite=${options.sameSite}`);
136
+ }
137
+ const cookieString = parts.join("; ");
138
+ this.res.header("Set-Cookie", cookieString);
139
+ },
140
+ text: (content, status = 200) => {
141
+ return new Response(content, {
142
+ status,
143
+ headers: { "Content-Type": "text/plain", ...this.customHeaders },
144
+ });
145
+ },
146
+ json: (data, status = 200) => {
147
+ return new Response(JSON.stringify(data), {
148
+ status,
149
+ headers: {
150
+ "Content-Type": "application/json",
151
+ ...this.customHeaders,
152
+ },
153
+ });
154
+ },
155
+ html: (content, status = 200) => {
156
+ return new Response(content, {
157
+ status,
158
+ headers: { "Content-Type": "text/html", ...this.customHeaders },
159
+ });
160
+ },
161
+ null: (status = 204) => {
162
+ return new Response(null, { status, headers: this.customHeaders });
163
+ },
164
+ redirect: (location, status = 302) => {
165
+ return new Response(null, {
166
+ status,
167
+ headers: { Location: location, ...this.customHeaders },
168
+ });
169
+ },
170
+ };
171
+ }
172
+ }
173
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { VixyContext } from "./context";
2
+ type Method = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS";
3
+ type Handler = (c: VixyContext) => Response | Promise<Response>;
4
+ export type Next = () => Promise<void>;
5
+ type Middleware = (c: VixyContext, next: Next) => Promise<Response | void>;
6
+ export default class Vixy {
7
+ private router;
8
+ private notFoundHandler?;
9
+ private globalMiddleware;
10
+ constructor();
11
+ private convertWildcardPath;
12
+ use(path: string, middleware: Middleware): this;
13
+ private matchesMiddlewarePath;
14
+ private executeMiddlewareChain;
15
+ private registerRoute;
16
+ private extractHandlerAndMiddleware;
17
+ on(methods: Method | Method[], paths: string | string[], handler: Handler): this;
18
+ on(methods: Method | Method[], paths: string | string[], middleware: Middleware, handler: Handler): this;
19
+ get(path: string, handler: Handler): this;
20
+ get(path: string, middleware: Middleware, handler: Handler): this;
21
+ post(path: string, handler: Handler): this;
22
+ post(path: string, middleware: Middleware, handler: Handler): this;
23
+ put(path: string, handler: Handler): this;
24
+ put(path: string, middleware: Middleware, handler: Handler): this;
25
+ delete(path: string, handler: Handler): this;
26
+ delete(path: string, middleware: Middleware, handler: Handler): this;
27
+ patch(path: string, handler: Handler): this;
28
+ patch(path: string, middleware: Middleware, handler: Handler): this;
29
+ options(path: string, handler: Handler): this;
30
+ options(path: string, middleware: Middleware, handler: Handler): this;
31
+ notFound(handler: Handler): this;
32
+ fetch(req: Request): Promise<Response>;
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtE,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,WAAW,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEhE,MAAM,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvC,KAAK,UAAU,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAa3E,MAAM,CAAC,OAAO,OAAO,IAAI;IACvB,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,eAAe,CAAC,CAAU;IAClC,OAAO,CAAC,gBAAgB,CAAyB;;IAUjD,OAAO,CAAC,mBAAmB;IAQ3B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAK/C,OAAO,CAAC,qBAAqB;YAgBf,sBAAsB;IAwCpC,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,2BAA2B;IAUnC,EAAE,CACA,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,EAAE,OAAO,GACf,IAAI;IACP,EAAE,CACA,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,GACf,IAAI;IAmBP,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOjE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAC1C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOlE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOjE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAC5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOpE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAC3C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOnE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOrE,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK1B,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;CAwC7C"}
package/dist/index.js ADDED
@@ -0,0 +1,159 @@
1
+ import FindMyWay from "find-my-way";
2
+ import { VixyContext } from "./context";
3
+ export default class Vixy {
4
+ router;
5
+ notFoundHandler;
6
+ globalMiddleware = [];
7
+ constructor() {
8
+ this.fetch = this.fetch.bind(this);
9
+ this.router = FindMyWay({
10
+ defaultRoute: () => { },
11
+ });
12
+ }
13
+ convertWildcardPath(path) {
14
+ let wildcardCount = 0;
15
+ return path.replace(/\*/g, () => {
16
+ wildcardCount++;
17
+ return `:wildcard${wildcardCount}`;
18
+ });
19
+ }
20
+ use(path, middleware) {
21
+ this.globalMiddleware.push({ path, middleware });
22
+ return this;
23
+ }
24
+ matchesMiddlewarePath(middlewarePath, requestPath) {
25
+ if (middlewarePath === "*") {
26
+ return true;
27
+ }
28
+ if (middlewarePath.endsWith("/*")) {
29
+ const prefix = middlewarePath.slice(0, -2);
30
+ return requestPath.startsWith(prefix);
31
+ }
32
+ return middlewarePath === requestPath;
33
+ }
34
+ async executeMiddlewareChain(context, middlewares, finalHandler) {
35
+ let index = 0;
36
+ let response;
37
+ const next = async () => {
38
+ if (index >= middlewares.length) {
39
+ response = await finalHandler(context);
40
+ return;
41
+ }
42
+ const middleware = middlewares[index];
43
+ index++;
44
+ if (!middleware) {
45
+ return next();
46
+ }
47
+ const result = await middleware(context, next);
48
+ if (result !== undefined) {
49
+ throw { __isResponse: true, response: result };
50
+ }
51
+ };
52
+ try {
53
+ await next();
54
+ return response;
55
+ }
56
+ catch (error) {
57
+ if (typeof error === "object" &&
58
+ error !== null &&
59
+ "__isResponse" in error &&
60
+ "response" in error) {
61
+ return error.response;
62
+ }
63
+ throw error;
64
+ }
65
+ }
66
+ registerRoute(method, path, middleware, handler) {
67
+ const convertedPath = this.convertWildcardPath(path);
68
+ const store = {
69
+ handler,
70
+ path,
71
+ middleware,
72
+ };
73
+ this.router.on(method, convertedPath, () => { }, store);
74
+ }
75
+ // Helper type for middleware chain
76
+ extractHandlerAndMiddleware(handlers) {
77
+ return {
78
+ handler: handlers[handlers.length - 1],
79
+ middleware: handlers.slice(0, -1),
80
+ };
81
+ }
82
+ on(methods, paths, ...handlers) {
83
+ const methodArray = Array.isArray(methods) ? methods : [methods];
84
+ const pathArray = Array.isArray(paths) ? paths : [paths];
85
+ const { handler, middleware } = this.extractHandlerAndMiddleware(handlers);
86
+ for (const method of methodArray) {
87
+ for (const path of pathArray) {
88
+ this.registerRoute(method, path, middleware, handler);
89
+ }
90
+ }
91
+ return this;
92
+ }
93
+ get(path, ...handlers) {
94
+ const { handler, middleware } = this.extractHandlerAndMiddleware(handlers);
95
+ this.registerRoute("GET", path, middleware, handler);
96
+ return this;
97
+ }
98
+ post(path, ...handlers) {
99
+ const { handler, middleware } = this.extractHandlerAndMiddleware(handlers);
100
+ this.registerRoute("POST", path, middleware, handler);
101
+ return this;
102
+ }
103
+ put(path, ...handlers) {
104
+ const { handler, middleware } = this.extractHandlerAndMiddleware(handlers);
105
+ this.registerRoute("PUT", path, middleware, handler);
106
+ return this;
107
+ }
108
+ delete(path, ...handlers) {
109
+ const { handler, middleware } = this.extractHandlerAndMiddleware(handlers);
110
+ this.registerRoute("DELETE", path, middleware, handler);
111
+ return this;
112
+ }
113
+ patch(path, ...handlers) {
114
+ const { handler, middleware } = this.extractHandlerAndMiddleware(handlers);
115
+ this.registerRoute("PATCH", path, middleware, handler);
116
+ return this;
117
+ }
118
+ options(path, ...handlers) {
119
+ const { handler, middleware } = this.extractHandlerAndMiddleware(handlers);
120
+ this.registerRoute("OPTIONS", path, middleware, handler);
121
+ return this;
122
+ }
123
+ notFound(handler) {
124
+ this.notFoundHandler = handler;
125
+ return this;
126
+ }
127
+ async fetch(req) {
128
+ const url = new URL(req.url);
129
+ const pathname = url.pathname;
130
+ const method = req.method;
131
+ const route = this.router.find(method, pathname);
132
+ if (route && route.store) {
133
+ const { handler, path, middleware } = route.store;
134
+ const params = {};
135
+ if (route.params) {
136
+ for (const [key, value] of Object.entries(route.params)) {
137
+ if (!key.startsWith("wildcard")) {
138
+ params[key] = value;
139
+ }
140
+ }
141
+ }
142
+ const context = new VixyContext(req, params, path);
143
+ const globalMiddlewares = [];
144
+ for (const entry of this.globalMiddleware) {
145
+ if (this.matchesMiddlewarePath(entry.path, pathname)) {
146
+ globalMiddlewares.push(entry.middleware);
147
+ }
148
+ }
149
+ const allMiddleware = [...globalMiddlewares, ...middleware];
150
+ return await this.executeMiddlewareChain(context, allMiddleware, handler);
151
+ }
152
+ if (this.notFoundHandler) {
153
+ const context = new VixyContext(req, {}, pathname);
154
+ return await this.notFoundHandler(context);
155
+ }
156
+ return new Response("Not Found", { status: 404 });
157
+ }
158
+ }
159
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ type PartitionedCookieConstraint = {
2
+ partitioned: true;
3
+ secure: true;
4
+ } | {
5
+ partitioned?: boolean;
6
+ secure?: boolean;
7
+ };
8
+ export type CookieOptions = {
9
+ domain?: string;
10
+ expires?: Date;
11
+ httpOnly?: boolean;
12
+ maxAge?: number;
13
+ path?: string;
14
+ secure?: boolean;
15
+ sameSite?: "Strict" | "Lax" | "None";
16
+ partitioned?: boolean;
17
+ priority?: "Low" | "Medium" | "High";
18
+ } & PartitionedCookieConstraint;
19
+ export {};
20
+ //# sourceMappingURL=cookie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../src/lib/cookie.ts"],"names":[],"mappings":"AAAA,KAAK,2BAA2B,GAC5B;IACE,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC;CACd,GACD;IACE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC,GAAG,2BAA2B,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=cookie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/lib/cookie.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ export type InfoStatusCode = 100 | 101 | 102 | 103;
2
+ export type SuccessStatusCode = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;
3
+ export type DeprecatedStatusCode = 305 | 306;
4
+ export type RedirectStatusCode = 300 | 301 | 302 | 303 | 304 | DeprecatedStatusCode | 307 | 308;
5
+ export type ClientErrorStatusCode = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451;
6
+ export type ServerErrorStatusCode = 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;
7
+ /**
8
+ * `UnofficialStatusCode` can be used to specify an unofficial status code.
9
+ */
10
+ export type UnofficialStatusCode = -1;
11
+ /**
12
+ * If you want to use an unofficial status, use `UnofficialStatusCode`.
13
+ */
14
+ export type StatusCode = InfoStatusCode | SuccessStatusCode | RedirectStatusCode | ClientErrorStatusCode | ServerErrorStatusCode | UnofficialStatusCode;
15
+ export type ContentlessStatusCode = 101 | 204 | 205 | 304;
16
+ export type ContentfulStatusCode = Exclude<StatusCode, ContentlessStatusCode>;
17
+ //# sourceMappingURL=status-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-code.d.ts","sourceRoot":"","sources":["../../src/lib/status-code.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACnD,MAAM,MAAM,iBAAiB,GACzB,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAC;AACR,MAAM,MAAM,oBAAoB,GAAG,GAAG,GAAG,GAAG,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAC1B,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,oBAAoB,GACpB,GAAG,GACH,GAAG,CAAC;AACR,MAAM,MAAM,qBAAqB,GAC7B,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAC;AACR,MAAM,MAAM,qBAAqB,GAC7B,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAC;AAER;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,qBAAqB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC1D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: © 2026 Yusuke Wada and Hono contributors
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * This file is a derivative of Hono.js
6
+ * (https://raw.githubusercontent.com/honojs/hono/4a03f4f9cded9f0ed95aeefe7ed95e8a5170260b/src/utils/http-status.ts)
7
+ */
8
+ //# sourceMappingURL=status-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-code.js","sourceRoot":"","sources":["../../src/lib/status-code.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "vixy",
3
+ "version": "0.0.1",
4
+ "description": "A fast, modern, and extendible web framework",
5
+ "license": "MIT",
6
+ "author": "Hisam Fahri <iam@hisamafahri.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+ssh://git@github.com/hisamafahri/vixy.git"
10
+ },
11
+ "main": "./dist/index.js",
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "import": "./dist/index.js",
18
+ "types": "./dist/index.d.ts"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "README.md",
24
+ "LICENSE"
25
+ ],
26
+ "keywords": [
27
+ "vixy",
28
+ "http",
29
+ "app",
30
+ "web-app",
31
+ "framework",
32
+ "api",
33
+ "router",
34
+ "middleware",
35
+ "typescript",
36
+ "bun",
37
+ "node",
38
+ "http",
39
+ "server"
40
+ ],
41
+ "bugs": {
42
+ "url": "https://github.com/hisamafahri/vixy/issues"
43
+ },
44
+ "homepage": "https://github.com/hisamafahri/vixy#readme",
45
+ "scripts": {
46
+ "build": "tsc -p tsconfig.build.json",
47
+ "prepublishOnly": "bun run build",
48
+ "test": "vitest"
49
+ },
50
+ "devDependencies": {
51
+ "@types/bun": "latest",
52
+ "prettier": "^3.8.1",
53
+ "prettier-plugin-organize-imports": "^4.3.0",
54
+ "vitest": "^4.0.18"
55
+ },
56
+ "peerDependencies": {
57
+ "typescript": "^5"
58
+ },
59
+ "dependencies": {
60
+ "find-my-way": "9.4.0"
61
+ }
62
+ }