Socket
Socket
Sign inDemoInstall

elysia

Package Overview
Dependencies
7
Maintainers
1
Versions
331
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.4 to 1.0.5

tsconfig.dts.json

36

dist/cjs/compose.d.ts

@@ -1,19 +0,11 @@

import { E as Elysia, L as LifeCycleStore, S as SchemaValidator, H as Handler, C as ComposedHandler } from './dynamic-handle-DrPvRYu3.js';
import { TAnySchema } from '@sinclair/typebox';
import { Sucrose } from './sucrose.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
declare const hasReturn: (fnLiteral: string) => boolean;
declare const hasType: (type: string, schema: TAnySchema) => any;
declare const hasProperty: (expectedProperty: string, schema: TAnySchema) => boolean | undefined;
declare const hasTransform: (schema: TAnySchema) => any;
declare const isAsync: (fn: Function) => boolean;
declare const composeHandler: ({ app, path, method, localHook, hooks, validator, handler, allowMeta, appInference: { event: eventInference, trace: traceInference } }: {
import { type Elysia } from '.';
import type { TAnySchema } from '@sinclair/typebox';
import { Sucrose } from './sucrose';
import type { ComposedHandler, Handler, LifeCycleStore, SchemaValidator } from './types';
export declare const hasReturn: (fnLiteral: string) => boolean;
export declare const hasType: (type: string, schema: TAnySchema) => any;
export declare const hasProperty: (expectedProperty: string, schema: TAnySchema) => boolean | undefined;
export declare const hasTransform: (schema: TAnySchema) => any;
export declare const isAsync: (fn: Function) => boolean;
export declare const composeHandler: ({ app, path, method, localHook, hooks, validator, handler, allowMeta, appInference: { event: eventInference, trace: traceInference } }: {
app: Elysia<any, any, any, any, any, any, any, any>;

@@ -32,6 +24,4 @@ path: string;

}) => ComposedHandler;
declare const composeGeneralHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
declare const composeErrorHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
declare const jitRoute: (index: number) => string;
export { composeErrorHandler, composeGeneralHandler, composeHandler, hasProperty, hasReturn, hasTransform, hasType, isAsync, jitRoute };
export declare const composeGeneralHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
export declare const composeErrorHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
export declare const jitRoute: (index: number) => string;

@@ -1,10 +0,71 @@

export { az as Context, aA as PreContext } from './dynamic-handle-DrPvRYu3.js';
import './error.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import '@sinclair/typebox/system';
import 'undici-types';
/// <reference types="node" />
import type { StatusMap, InvertedStatusMap } from './utils';
import type { Cookie, ElysiaCookie } from './cookies';
import { error, type ELYSIA_RESPONSE } from './error';
import type { RouteSchema, Prettify, GetPathParameter, SingletonBase } from './types';
type InvertedStatusMapKey = keyof InvertedStatusMap;
type WithoutNullableKeys<Type> = {
[Key in keyof Type]-?: NonNullable<Type[Key]>;
};
export type Context<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Prettify<{
body: Route['body'];
query: undefined extends Route['query'] ? Record<string, string | undefined> : Route['query'];
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? Record<GetPathParameter<Path>, string> : never : Route['params'];
headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers'];
cookie: undefined extends Route['cookie'] ? Record<string, Cookie<any>> : Record<string, Cookie<any>> & WithoutNullableKeys<{
[key in keyof Route['cookie']]: Cookie<Route['cookie'][key]>;
}>;
set: {
headers: Record<string, string> & {
'Set-Cookie'?: string | string[];
};
status?: number | keyof StatusMap;
redirect?: string;
/**
* ! Internal Property
*
* Use `Context.cookie` instead
*/
cookie?: Record<string, ElysiaCookie>;
};
path: string;
request: Request;
store: Singleton['store'];
} & (Route['response'] extends {
200: unknown;
} ? {
error: <const Code extends keyof Route['response'] | InvertedStatusMap[Extract<InvertedStatusMapKey, keyof Route['response']>], const T extends Code extends keyof Route['response'] ? Route['response'][Code] : Code extends keyof StatusMap ? Route['response'][StatusMap[Code]] : never>(code: Code, response: T) => {
[ELYSIA_RESPONSE]: Code extends keyof StatusMap ? StatusMap[Code] : Code;
response: T;
_type: {
[ERROR_CODE in Code extends keyof StatusMap ? StatusMap[Code] : Code]: T;
};
};
} : {
error: typeof error;
}) & Singleton['decorator'] & Singleton['derive'] & Singleton['resolve']>;
export type PreContext<in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = Prettify<{
store: Singleton['store'];
request: Request;
set: {
headers: {
[header: string]: string;
} & {
['Set-Cookie']?: string | string[];
};
status?: number;
redirect?: string;
};
error: typeof error;
} & Singleton['decorator']>;
export {};

@@ -1,10 +0,138 @@

export { e as Cookie, c as CookieOptions, d as ElysiaCookie, f as createCookieJar, p as parseCookie } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
import type { Context } from './context';
import type { Prettify } from './types';
export interface CookieOptions {
/**
* Specifies the value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.3|Domain Set-Cookie attribute}. By default, no
* domain is set, and most clients will consider the cookie to apply to only
* the current domain.
*/
domain?: string | undefined;
/**
* Specifies the `Date` object to be the value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.1|`Expires` `Set-Cookie` attribute}. By default,
* no expiration is set, and most clients will consider this a "non-persistent cookie" and will delete
* it on a condition like exiting a web browser application.
*
* *Note* the {@link https://tools.ietf.org/html/rfc6265#section-5.3|cookie storage model specification}
* states that if both `expires` and `maxAge` are set, then `maxAge` takes precedence, but it is
* possible not all clients by obey this, so if both are set, they should
* point to the same date and time.
*/
expires?: Date | undefined;
/**
* Specifies the boolean value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.6|`HttpOnly` `Set-Cookie` attribute}.
* When truthy, the `HttpOnly` attribute is set, otherwise it is not. By
* default, the `HttpOnly` attribute is not set.
*
* *Note* be careful when setting this to true, as compliant clients will
* not allow client-side JavaScript to see the cookie in `document.cookie`.
*/
httpOnly?: boolean | undefined;
/**
* Specifies the number (in seconds) to be the value for the `Max-Age`
* `Set-Cookie` attribute. The given number will be converted to an integer
* by rounding down. By default, no maximum age is set.
*
* *Note* the {@link https://tools.ietf.org/html/rfc6265#section-5.3|cookie storage model specification}
* states that if both `expires` and `maxAge` are set, then `maxAge` takes precedence, but it is
* possible not all clients by obey this, so if both are set, they should
* point to the same date and time.
*/
maxAge?: number | undefined;
/**
* Specifies the value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.4|`Path` `Set-Cookie` attribute}.
* By default, the path is considered the "default path".
*/
path?: string | undefined;
/**
* Specifies the `string` to be the value for the [`Priority` `Set-Cookie` attribute][rfc-west-cookie-priority-00-4.1].
*
* - `'low'` will set the `Priority` attribute to `Low`.
* - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set.
* - `'high'` will set the `Priority` attribute to `High`.
*
* More information about the different priority levels can be found in
* [the specification][rfc-west-cookie-priority-00-4.1].
*
* **note** This is an attribute that has not yet been fully standardized, and may change in the future.
* This also means many clients may ignore this attribute until they understand it.
*/
priority?: 'low' | 'medium' | 'high' | undefined;
/**
* Specifies the boolean or string to be the value for the {@link https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7|`SameSite` `Set-Cookie` attribute}.
*
* - `true` will set the `SameSite` attribute to `Strict` for strict same
* site enforcement.
* - `false` will not set the `SameSite` attribute.
* - `'lax'` will set the `SameSite` attribute to Lax for lax same site
* enforcement.
* - `'strict'` will set the `SameSite` attribute to Strict for strict same
* site enforcement.
* - `'none'` will set the SameSite attribute to None for an explicit
* cross-site cookie.
*
* More information about the different enforcement levels can be found in {@link https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7|the specification}.
*
* *note* This is an attribute that has not yet been fully standardized, and may change in the future. This also means many clients may ignore this attribute until they understand it.
*/
sameSite?: true | false | 'lax' | 'strict' | 'none' | undefined;
/**
* Specifies the boolean value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.5|`Secure` `Set-Cookie` attribute}. When truthy, the
* `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set.
*
* *Note* be careful when setting this to `true`, as compliant clients will
* not send the cookie back to the server in the future if the browser does
* not have an HTTPS connection.
*/
secure?: boolean | undefined;
/**
* Secret key for signing cookie
*
* If array is passed, will use Key Rotation.
*
* Key rotation is when an encryption key is retired
* and replaced by generating a new cryptographic key.
*/
secrets?: string | string[];
}
export type ElysiaCookie = Prettify<CookieOptions & {
value?: unknown;
}>;
type Updater<T> = T | ((value: T) => T);
export declare class Cookie<T> implements ElysiaCookie {
private name;
private jar;
private initial;
constructor(name: string, jar: Record<string, ElysiaCookie>, initial?: Partial<ElysiaCookie>);
get cookie(): ElysiaCookie;
set cookie(jar: ElysiaCookie);
get value(): T;
set value(value: T);
get expires(): Date | undefined;
set expires(expires: Date | undefined);
get maxAge(): number | undefined;
set maxAge(maxAge: number | undefined);
get domain(): string | undefined;
set domain(domain: string | undefined);
get path(): string | undefined;
set path(path: string | undefined);
get secure(): boolean | undefined;
set secure(secure: boolean | undefined);
get httpOnly(): boolean | undefined;
set httpOnly(httpOnly: boolean | undefined);
get sameSite(): boolean | "lax" | "strict" | "none" | undefined;
set sameSite(sameSite: boolean | "lax" | "strict" | "none" | undefined);
get priority(): "low" | "medium" | "high" | undefined;
set priority(priority: "low" | "medium" | "high" | undefined);
get secrets(): string | string[] | undefined;
set secrets(secrets: string | string[] | undefined);
update(config: Updater<Partial<ElysiaCookie>>): this;
set(config: Updater<Partial<ElysiaCookie>>): this;
remove(): this | undefined;
toString(): string;
}
export declare const createCookieJar: (set: Context['set'], store: Record<string, ElysiaCookie>, initial?: Partial<ElysiaCookie>) => Record<string, Cookie<unknown>>;
export declare const parseCookie: (set: Context['set'], cookieString?: string | null, { secret, sign, ...initial }?: CookieOptions & {
secret?: string | string[] | undefined;
sign?: string | true | string[] | undefined;
}) => Promise<Record<string, Cookie<unknown>>>;
export {};

@@ -164,2 +164,5 @@ "use strict";

var import_compiler = require("@sinclair/typebox/compiler");
var isISO8601 = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var isFormalDate = /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/;
var isShortenDate = /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/;
try {

@@ -178,10 +181,20 @@ import_system.TypeSystem.Format(

);
import_system.TypeSystem.Format(
"date",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format(
"date-time",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format("date", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
import_system.TypeSystem.Format("date-time", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
} catch {

@@ -188,0 +201,0 @@ }

@@ -1,10 +0,14 @@

export { aP as DynamicHandler, aR as createDynamicErrorHandler, aQ as createDynamicHandler } from './dynamic-handle-DrPvRYu3.js';
import './error.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import '@sinclair/typebox/system';
import 'undici-types';
/// <reference types="node" />
/// <reference types="bun-types" />
import type { Elysia } from '.';
import { ElysiaErrors } from './error';
import type { Context } from './context';
import type { Handler, LifeCycleStore, SchemaValidator } from './types';
export type DynamicHandler = {
handle: Handler<any, any>;
content?: string;
hooks: LifeCycleStore;
validator?: SchemaValidator;
};
export declare const createDynamicHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => (request: Request) => Promise<Response>;
export declare const createDynamicErrorHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => (context: Context, error: ElysiaErrors) => Promise<import("undici-types").Response>;

@@ -365,2 +365,5 @@ "use strict";

var import_compiler = require("@sinclair/typebox/compiler");
var isISO8601 = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var isFormalDate = /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/;
var isShortenDate = /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/;
try {

@@ -379,10 +382,20 @@ import_system.TypeSystem.Format(

);
import_system.TypeSystem.Format(
"date",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format(
"date-time",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format("date", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
import_system.TypeSystem.Format("date-time", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
} catch {

@@ -389,0 +402,0 @@ }

@@ -1,11 +0,9 @@

import * as undici_types from 'undici-types';
import { TSchema } from '@sinclair/typebox';
import { TypeCheck } from '@sinclair/typebox/compiler';
declare const ERROR_CODE: unique symbol;
declare const ELYSIA_RESPONSE: unique symbol;
type ELYSIA_RESPONSE = typeof ELYSIA_RESPONSE;
declare const isProduction: boolean;
type ElysiaErrors = InternalServerError | NotFoundError | ParseError | ValidationError | InvalidCookieSignature;
declare const error: <const Code extends number | "Continue" | "Switching Protocols" | "Processing" | "Early Hints" | "OK" | "Created" | "Accepted" | "Non-Authoritative Information" | "No Content" | "Reset Content" | "Partial Content" | "Multi-Status" | "Already Reported" | "Multiple Choices" | "Moved Permanently" | "Found" | "See Other" | "Not Modified" | "Temporary Redirect" | "Permanent Redirect" | "Bad Request" | "Unauthorized" | "Payment Required" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Payload Too Large" | "URI Too Long" | "Unsupported Media Type" | "Range Not Satisfiable" | "Expectation Failed" | "I'm a teapot" | "Misdirected Request" | "Unprocessable Content" | "Locked" | "Failed Dependency" | "Too Early" | "Upgrade Required" | "Precondition Required" | "Too Many Requests" | "Request Header Fields Too Large" | "Unavailable For Legal Reasons" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported" | "Variant Also Negotiates" | "Insufficient Storage" | "Loop Detected" | "Not Extended" | "Network Authentication Required", const T = Code extends 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 300 | 301 | 302 | 303 | 304 | 307 | 308 | 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 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
import type { TSchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
export declare const ERROR_CODE: unique symbol;
export declare const ELYSIA_RESPONSE: unique symbol;
export type ELYSIA_RESPONSE = typeof ELYSIA_RESPONSE;
export declare const isProduction: boolean;
export type ElysiaErrors = InternalServerError | NotFoundError | ParseError | ValidationError | InvalidCookieSignature;
export declare const error: <const Code extends number | "Continue" | "Switching Protocols" | "Processing" | "Early Hints" | "OK" | "Created" | "Accepted" | "Non-Authoritative Information" | "No Content" | "Reset Content" | "Partial Content" | "Multi-Status" | "Already Reported" | "Multiple Choices" | "Moved Permanently" | "Found" | "See Other" | "Not Modified" | "Temporary Redirect" | "Permanent Redirect" | "Bad Request" | "Unauthorized" | "Payment Required" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Payload Too Large" | "URI Too Long" | "Unsupported Media Type" | "Range Not Satisfiable" | "Expectation Failed" | "I'm a teapot" | "Misdirected Request" | "Unprocessable Content" | "Locked" | "Failed Dependency" | "Too Early" | "Upgrade Required" | "Precondition Required" | "Too Many Requests" | "Request Header Fields Too Large" | "Unavailable For Legal Reasons" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported" | "Variant Also Negotiates" | "Insufficient Storage" | "Loop Detected" | "Not Extended" | "Network Authentication Required", const T = Code extends 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 300 | 301 | 302 | 303 | 304 | 307 | 308 | 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 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
readonly 100: "Continue";

@@ -198,3 +196,3 @@ readonly 101: "Switching Protocols";

};
declare class InternalServerError extends Error {
export declare class InternalServerError extends Error {
code: string;

@@ -204,3 +202,3 @@ status: number;

}
declare class NotFoundError extends Error {
export declare class NotFoundError extends Error {
code: string;

@@ -210,3 +208,3 @@ status: number;

}
declare class ParseError extends Error {
export declare class ParseError extends Error {
body?: unknown;

@@ -217,3 +215,3 @@ code: string;

}
declare class InvalidCookieSignature extends Error {
export declare class InvalidCookieSignature extends Error {
key: string;

@@ -224,3 +222,3 @@ code: string;

}
declare class ValidationError extends Error {
export declare class ValidationError extends Error {
type: string;

@@ -235,5 +233,3 @@ validator: TSchema | TypeCheck<any>;

get model(): any;
toResponse(headers?: Record<string, any>): undici_types.Response;
toResponse(headers?: Record<string, any>): import("undici-types").Response;
}
export { ELYSIA_RESPONSE, ERROR_CODE, type ElysiaErrors, InternalServerError, InvalidCookieSignature, NotFoundError, ParseError, ValidationError, error, isProduction };

@@ -83,2 +83,5 @@ "use strict";

var import_compiler = require("@sinclair/typebox/compiler");
var isISO8601 = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var isFormalDate = /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/;
var isShortenDate = /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/;
try {

@@ -97,10 +100,20 @@ import_system.TypeSystem.Format(

);
import_system.TypeSystem.Format(
"date",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format(
"date-time",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format("date", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
import_system.TypeSystem.Format("date-time", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
} catch {

@@ -107,0 +120,0 @@ }

@@ -1,10 +0,10 @@

import 'undici-types';
export { aO as errorToResponse, aI as isNotEmpty, aN as mapCompactResponse, aM as mapEarlyResponse, aL as mapResponse, aJ as parseSetCookies, aK as serializeCookie } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import '@sinclair/typebox/system';
/// <reference types="node" />
/// <reference types="bun-types" />
import type { Context } from './context';
export declare const isNotEmpty: (obj: Object) => boolean;
export declare const parseSetCookies: (headers: Headers, setCookie: string[]) => Headers;
export declare const serializeCookie: (cookies: Context['set']['cookie']) => string | string[] | undefined;
export declare const mapResponse: (response: unknown, set: Context['set'], request?: Request) => Response;
export declare const mapEarlyResponse: (response: unknown, set: Context['set'], request?: Request) => Response | undefined;
export declare const mapCompactResponse: (response: unknown, request?: Request) => Response;
export declare const errorToResponse: (error: Error, set?: Context['set']) => import("undici-types").Response;

@@ -268,2 +268,5 @@ "use strict";

var import_compiler = require("@sinclair/typebox/compiler");
var isISO8601 = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var isFormalDate = /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/;
var isShortenDate = /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/;
try {

@@ -282,10 +285,20 @@ import_system.TypeSystem.Format(

);
import_system.TypeSystem.Format(
"date",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format(
"date-time",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format("date", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
import_system.TypeSystem.Format("date-time", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
} catch {

@@ -292,0 +305,0 @@ }

@@ -1,13 +0,3 @@

import { L as LifeCycleStore, H as Handler, T as TraceHandler } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
declare namespace Sucrose {
import type { Handler, LifeCycleStore, TraceHandler } from './types';
export declare namespace Sucrose {
interface Inference {

@@ -46,3 +36,3 @@ queries: string[];

*/
declare const separateFunction: (code: string) => [string, string];
export declare const separateFunction: (code: string) => [string, string];
/**

@@ -56,3 +46,3 @@ * Get range between bracket pair

*/
declare const bracketPairRange: (parameter: string) => [number, number];
export declare const bracketPairRange: (parameter: string) => [number, number];
/**

@@ -67,3 +57,3 @@ * Similar to `bracketPairRange` but in reverse order

*/
declare const bracketPairRangeReverse: (parameter: string) => [number, number];
export declare const bracketPairRangeReverse: (parameter: string) => [number, number];
/**

@@ -77,3 +67,3 @@ * Retrieve only root paramters of a function

*/
declare const retrieveRootParamters: (parameter: string) => string;
export declare const retrieveRootParamters: (parameter: string) => string;
/**

@@ -84,3 +74,3 @@ * Find inference from parameter

*/
declare const findParameterReference: (parameter: string, inference: Sucrose.Inference) => string;
export declare const findParameterReference: (parameter: string, inference: Sucrose.Inference) => string;
/**

@@ -91,3 +81,3 @@ * Find inference from parameter

*/
declare const findTraceParameterReference: (parameter: string, inference: Sucrose.TraceInference) => string;
export declare const findTraceParameterReference: (parameter: string, inference: Sucrose.TraceInference) => string;
/**

@@ -101,20 +91,18 @@ * Find alias of variable from function body

*/
declare const findAlias: (type: string, body: string, depth?: number) => string[];
declare const extractMainParameter: (parameter: string) => string | undefined;
export declare const findAlias: (type: string, body: string, depth?: number) => string[];
export declare const extractMainParameter: (parameter: string) => string | undefined;
/**
* Analyze if context is mentioned in body
*/
declare const inferBodyReference: (code: string, aliases: string[], inference: Sucrose.Inference) => string[];
declare const removeDefaultParameter: (parameter: string) => string;
declare const validateInferencedQueries: (queries: string[]) => boolean;
export declare const inferBodyReference: (code: string, aliases: string[], inference: Sucrose.Inference) => string[];
export declare const removeDefaultParameter: (parameter: string) => string;
export declare const validateInferencedQueries: (queries: string[]) => boolean;
/**
* Analyze if context is mentioned in body
*/
declare const inferTraceBodyReference: (code: string, aliases: string[], inference: Sucrose.TraceInference) => string[];
declare const sucrose: (lifeCycle: Sucrose.LifeCycle, inference?: Sucrose.Inference) => Sucrose.Inference;
export declare const inferTraceBodyReference: (code: string, aliases: string[], inference: Sucrose.TraceInference) => string[];
export declare const sucrose: (lifeCycle: Sucrose.LifeCycle, inference?: Sucrose.Inference) => Sucrose.Inference;
/**
* Analyze if context is mentioned in body in a trace
*/
declare const sucroseTrace: (traces: TraceHandler[], inference?: Sucrose.TraceInference) => Sucrose.TraceInference;
export { Sucrose, bracketPairRange, bracketPairRangeReverse, extractMainParameter, findAlias, findParameterReference, findTraceParameterReference, inferBodyReference, inferTraceBodyReference, removeDefaultParameter, retrieveRootParamters, separateFunction, sucrose, sucroseTrace, validateInferencedQueries };
export declare const sucroseTrace: (traces: TraceHandler[], inference?: Sucrose.TraceInference) => Sucrose.TraceInference;

@@ -1,14 +0,2 @@

import { a as TraceReporter, T as TraceHandler, b as TraceStream } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
declare const createTraceListener: (getReporter: () => TraceReporter, totalListener: number, handler: TraceHandler<any, any>) => (trace: TraceStream) => Promise<void>;
export { createTraceListener };
import type { TraceHandler, TraceReporter, TraceStream } from './types';
export declare const createTraceListener: (getReporter: () => TraceReporter, totalListener: number, handler: TraceHandler<any, any>) => (trace: TraceStream) => Promise<void>;

@@ -1,10 +0,69 @@

import '@sinclair/typebox';
export { TypeCheck, TypeCompiler } from '@sinclair/typebox/compiler';
export { aD as ElysiaType, aC as ElysiaTypeOptions, aE as TCookie, aB as t } from './dynamic-handle-DrPvRYu3.js';
export { TypeSystem, TypeSystemDuplicateFormat, TypeSystemDuplicateTypeKind, TypeSystemPolicy } from '@sinclair/typebox/system';
import 'bun';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
/// <reference types="node" />
/// <reference types="bun-types" />
import { DateOptions, NumberOptions, TDate } from '@sinclair/typebox';
import { type SchemaOptions, type TNull, type TUnion, type TSchema, type TUndefined, TProperties, ObjectOptions, TObject, TNumber, TBoolean } from '@sinclair/typebox';
import { type TypeCheck } from '@sinclair/typebox/compiler';
import type { CookieOptions } from './cookies';
import type { MaybeArray } from './types';
declare const t: import("@sinclair/typebox").JavaScriptTypeBuilder;
export declare namespace ElysiaTypeOptions {
type Numeric = NumberOptions;
type FileUnit = number | `${number}${'k' | 'm'}`;
interface File extends SchemaOptions {
type?: MaybeArray<(string & {}) | 'image' | 'image/jpeg' | 'image/png' | 'image/gif' | 'image/tiff' | 'image/x-icon' | 'image/svg' | 'image/webp' | 'image/avif' | 'audio' | 'audio/mpeg' | 'audio/x-ms-wma' | 'audio/vnd.rn-realaudio' | 'audio/x-wav' | 'video' | 'video/mpeg' | 'video/mp4' | 'video/quicktime' | 'video/x-ms-wmv' | 'video/x-msvideo' | 'video/x-flv' | 'video/webm' | 'text' | 'text/css' | 'text/csv' | 'text/html' | 'text/javascript' | 'text/plain' | 'text/xml' | 'application' | 'application/ogg' | 'application/pdf' | 'application/xhtml' | 'application/html' | 'application/json' | 'application/ld+json' | 'application/xml' | 'application/zip' | 'font' | 'font/woff2' | 'font/woff' | 'font/ttf' | 'font/otf'>;
minSize?: FileUnit;
maxSize?: FileUnit;
}
interface Files extends File {
minItems?: number;
maxItems?: number;
}
}
declare const Files: (options?: Partial<ElysiaTypeOptions.Files> | undefined) => import("@sinclair/typebox").TUnsafe<File[]>;
export declare const ElysiaType: {
readonly Numeric: (property?: NumberOptions) => TNumber;
readonly Date: (property?: DateOptions) => TDate;
readonly BooleanString: (property?: SchemaOptions) => TBoolean;
readonly ObjectString: <T extends TProperties = {}>(properties?: T, options?: ObjectOptions) => TObject<T>;
readonly File: (options?: Partial<ElysiaTypeOptions.File> | undefined) => import("@sinclair/typebox").TUnsafe<File>;
readonly Files: (options?: ElysiaTypeOptions.Files) => import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnsafe<File[]>, File[]>;
readonly Nullable: <T_1 extends TSchema>(schema: T_1) => TUnion<[T_1, TNull]>;
/**
* Allow Optional, Nullable and Undefined
*/
readonly MaybeEmpty: <T_2 extends TSchema>(schema: T_2) => TUnion<[T_2, TUndefined]>;
readonly Cookie: <T_3 extends TProperties>(properties: T_3, options?: (ObjectOptions & CookieOptions & {
/**
* Secret key for signing cookie
*
* If array is passed, will use Key Rotation.
*
* Key rotation is when an encryption key is retired
* and replaced by generating a new cryptographic key.
*/
secrets?: string | string[] | undefined;
/**
* Specified cookie name to be signed globally
*/
sign?: readonly ((string & {}) | keyof T_3)[] | undefined;
}) | undefined) => TObject<T_3>;
};
export type TCookie = (typeof ElysiaType)['Cookie'];
declare module '@sinclair/typebox' {
interface JavaScriptTypeBuilder {
BooleanString: typeof ElysiaType.BooleanString;
ObjectString: typeof ElysiaType.ObjectString;
Numeric: typeof ElysiaType.Numeric;
File: typeof ElysiaType.File;
Files: typeof ElysiaType.Files;
Nullable: typeof ElysiaType.Nullable;
MaybeEmpty: typeof ElysiaType.MaybeEmpty;
Cookie: typeof ElysiaType.Cookie;
}
interface SchemaOptions {
error?: string | ((type: string, validator: TypeCheck<any>, value: unknown) => string | void);
}
}
export { t };
export { TypeSystemPolicy, TypeSystem, TypeSystemDuplicateFormat, TypeSystemDuplicateTypeKind } from '@sinclair/typebox/system';
export { TypeCompiler, TypeCheck } from '@sinclair/typebox/compiler';

@@ -262,2 +262,5 @@ "use strict";

var import_compiler2 = require("@sinclair/typebox/compiler");
var isISO8601 = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var isFormalDate = /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/;
var isShortenDate = /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/;
try {

@@ -276,10 +279,20 @@ import_system.TypeSystem.Format(

);
import_system.TypeSystem.Format(
"date",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format(
"date-time",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format("date", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
import_system.TypeSystem.Format("date-time", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
} catch {

@@ -286,0 +299,0 @@ }

@@ -1,10 +0,575 @@

export { $ as AddPrefix, a0 as AddPrefixCapitalize, a1 as AddSuffix, a2 as AddSuffixCapitalize, A as AfterHandler, a4 as BaseMacro, K as BodyHandler, a3 as Checksum, aa as ComposeElysiaResponse, C as ComposedHandler, t as ContentType, a9 as CreateEden, D as DefinitionBase, g as ElysiaConfig, a6 as ElysiaFn, l as EphemeralType, W as ErrorHandler, G as GetPathParameter, Q as GracefulHandler, u as HTTPMethod, H as Handler, w as InlineHandler, I as InputSchema, Z as InternalRoute, X as Isolate, s as LifeCycleEvent, L as LifeCycleStore, ac as LifeCycleType, _ as ListenCallback, Y as LocalHook, a7 as MacroManager, a8 as MacroQueue, a5 as MacroToProperty, y as MapResponse, M as MaybeArray, h as MaybePromise, ab as MergeElysiaInstances, v as MergeSchema, n as MetadataBase, O as ObjectValues, x as OptionalHandler, j as Partial2, N as PreHandler, P as Prettify, i as Prettify2, R as Reconcile, m as RouteBase, o as RouteSchema, S as SchemaValidator, k as SingletonBase, B as TraceEvent, T as TraceHandler, J as TraceListener, F as TraceProcess, a as TraceReporter, b as TraceStream, z as TransformHandler, r as UnwrapGroupGuardRoute, q as UnwrapRoute, U as UnwrapSchema, V as VoidHandler } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'memoirist';
import '@sinclair/typebox/system';
import 'undici-types';
/// <reference types="bun-types" />
/// <reference types="node" />
/// <reference types="bun-types" />
import type { Elysia } from '.';
import type { Serve, Server, WebSocketHandler } from 'bun';
import type { TSchema, TObject, Static, TAnySchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
import type { OpenAPIV3 } from 'openapi-types';
import type { EventEmitter } from 'eventemitter3';
import type { CookieOptions } from './cookies';
import type { Context, PreContext } from './context';
import type { ELYSIA_RESPONSE, InternalServerError, InvalidCookieSignature, NotFoundError, ParseError, ValidationError } from './error';
type PartialServe = Partial<Serve>;
export type ElysiaConfig<Prefix extends string | undefined, Scoped extends boolean | undefined> = {
prefix?: Prefix;
scoped?: Scoped;
name?: string;
seed?: unknown;
serve?: PartialServe;
/**
* Warm up Elysia before starting the server
*
* This will perform Ahead of Time compilation and generate code for route handlers
*
* If set to false, Elysia will perform Just in Time compilation
*
* Only required for root instance (instance which use listen) to effect
*
* ! If performing a benchmark, it's recommended to set this to `true`
*
* @default false
*/
precompile?: boolean | {
/**
* Perform dynamic code generation for route handlers before starting the server
*
* @default false
*/
compose?: boolean;
/**
* Perform Ahead of Time compilation for schema before starting the server
*
* @default false
*/
schema?: boolean;
};
/**
* Disable `new Error` thrown marked as Error on Bun 0.6
*/
forceErrorEncapsulation?: boolean;
/**
* Disable sucrose dynamic query inference
*/
forceDynamicQuery?: boolean;
/**
* Disable Ahead of Time compliation
*
* Reduced performance but faster startup time
*/
aot?: boolean;
/**
* Whether should Elysia tolerate suffix '/' or vice-versa
*
* @default false
*/
strictPath?: boolean;
/**
* If set to true, other Elysia handler will not inherits global life-cycle, store, decorators from the current instance
*
* @default false
*/
websocket?: Omit<WebSocketHandler<any>, 'open' | 'close' | 'message' | 'drain'>;
cookie?: CookieOptions & {
/**
* Specified cookie name to be signed globally
*/
sign?: true | string | string[];
};
/**
* Capture more detail information for each dependencies
*/
analytic?: boolean;
/**
* Enable experimental features
*/
experimental?: {};
};
export type MaybeArray<T> = T | T[];
export type MaybePromise<T> = T | Promise<T>;
export type ObjectValues<T extends object> = T[keyof T];
type IsPathParameter<Part extends string> = Part extends `:${infer Parameter}` ? Parameter : Part extends `*` ? '*' : never;
export type GetPathParameter<Path extends string> = Path extends `${infer A}/${infer B}` ? IsPathParameter<A> | GetPathParameter<B> : IsPathParameter<Path>;
export type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
export type Prettify2<T> = {
[K in keyof T]: Prettify<T[K]>;
} & {};
export type Partial2<T> = {
[K in keyof T]?: Partial<T[K]>;
};
export type Reconcile<A extends Object, B extends Object> = {
[key in keyof A as key extends keyof B ? never : key]: A[key];
} extends infer Collision ? {} extends Collision ? {
[key in keyof B]: B[key];
} : Prettify<Collision & {
[key in keyof B]: B[key];
}> : never;
export interface SingletonBase {
decorator: Record<string, unknown>;
store: Record<string, unknown>;
derive: Record<string, unknown>;
resolve: Record<string, unknown>;
}
export interface EphemeralType {
derive: SingletonBase['derive'];
resolve: SingletonBase['resolve'];
schema: MetadataBase['schema'];
}
export interface DefinitionBase {
type: Record<string, unknown>;
error: Record<string, Error>;
}
export type RouteBase = Record<string, unknown>;
export interface MetadataBase {
schema: RouteSchema;
macro: BaseMacro;
}
export interface RouteSchema {
body?: unknown;
headers?: unknown;
query?: unknown;
params?: unknown;
cookie?: unknown;
response?: unknown;
}
export type UnwrapSchema<Schema extends TSchema | string | undefined, Definitions extends Record<string, unknown> = {}> = undefined extends Schema ? unknown : Schema extends TSchema ? Static<NonNullable<Schema>> : Schema extends string ? Definitions extends Record<Schema, infer NamedSchema> ? NamedSchema : Definitions : unknown;
export interface UnwrapRoute<in out Schema extends InputSchema<any>, in out Definitions extends DefinitionBase['type'] = {}> {
body: UnwrapSchema<Schema['body'], Definitions>;
headers: UnwrapSchema<Schema['headers'], Definitions>;
query: UnwrapSchema<Schema['query'], Definitions>;
params: UnwrapSchema<Schema['params'], Definitions>;
cookie: UnwrapSchema<Schema['cookie'], Definitions>;
response: Schema['response'] extends TSchema | string ? UnwrapSchema<Schema['response'], Definitions> : Schema['response'] extends {
200: TAnySchema | string;
} ? {
[k in keyof Schema['response']]: UnwrapSchema<Schema['response'][k], Definitions>;
} : unknown | void;
}
export interface UnwrapGroupGuardRoute<in out Schema extends InputSchema<any>, in out Definitions extends Record<string, unknown> = {}, Path extends string = ''> {
body: UnwrapSchema<Schema['body'], Definitions>;
headers: UnwrapSchema<Schema['headers'], Definitions> extends infer A extends Record<string, unknown> ? A : undefined;
query: UnwrapSchema<Schema['query'], Definitions> extends infer A extends Record<string, unknown> ? A : undefined;
params: UnwrapSchema<Schema['params'], Definitions> extends infer A extends Record<string, unknown> ? A : Path extends `${string}/${':' | '*'}${string}` ? Record<GetPathParameter<Path>, string> : never;
cookie: UnwrapSchema<Schema['cookie'], Definitions> extends infer A extends Record<string, unknown> ? A : undefined;
response: Schema['response'] extends TSchema | string ? UnwrapSchema<Schema['response'], Definitions> : Schema['response'] extends {
[k in string]: TSchema | string;
} ? UnwrapSchema<Schema['response'][keyof Schema['response']], Definitions> : unknown | void;
}
export interface LifeCycleStore {
type?: ContentType;
start: GracefulHandler<any>[];
request: PreHandler<any, any>[];
parse: BodyHandler<any, any>[];
transform: TransformHandler<any, any>[];
beforeHandle: OptionalHandler<any, any>[];
afterHandle: AfterHandler<any, any>[];
mapResponse: MapResponse<any, any>[];
onResponse: VoidHandler<any, any>[];
trace: TraceHandler<any, any>[];
error: ErrorHandler<any, any, any>[];
stop: GracefulHandler<any>[];
}
export type LifeCycleEvent = 'start' | 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'response' | 'error' | 'stop';
export type ContentType = MaybeArray<(string & {}) | 'none' | 'text' | 'json' | 'formdata' | 'urlencoded' | 'arrayBuffer' | 'text/plain' | 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'>;
export type HTTPMethod = (string & {}) | 'ACL' | 'BIND' | 'CHECKOUT' | 'CONNECT' | 'COPY' | 'DELETE' | 'GET' | 'HEAD' | 'LINK' | 'LOCK' | 'M-SEARCH' | 'MERGE' | 'MKACTIVITY' | 'MKCALENDAR' | 'MKCOL' | 'MOVE' | 'NOTIFY' | 'OPTIONS' | 'PATCH' | 'POST' | 'PROPFIND' | 'PROPPATCH' | 'PURGE' | 'PUT' | 'REBIND' | 'REPORT' | 'SEARCH' | 'SOURCE' | 'SUBSCRIBE' | 'TRACE' | 'UNBIND' | 'UNLINK' | 'UNLOCK' | 'UNSUBSCRIBE' | 'ALL';
export interface InputSchema<Name extends string = string> {
body?: TSchema | Name;
headers?: TObject | Name;
query?: TObject | Name;
params?: TObject | Name;
cookie?: TObject | Name;
response?: TSchema | Record<number, TSchema> | Name | Record<number, Name | TSchema>;
}
export interface MergeSchema<in out A extends RouteSchema, in out B extends RouteSchema> {
body: undefined extends A['body'] ? B['body'] : A['body'];
headers: undefined extends A['headers'] ? B['headers'] : A['headers'];
query: undefined extends A['query'] ? B['query'] : A['query'];
params: undefined extends A['params'] ? B['params'] : A['params'];
cookie: undefined extends A['cookie'] ? B['cookie'] : A['cookie'];
response: undefined extends A['response'] ? B['response'] : A['response'];
}
export type Handler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>) => Route['response'] extends {
200: unknown;
} ? Response | MaybePromise<Route['response'][keyof Route['response']]> : Response | MaybePromise<Route['response']>;
export type InlineHandler<Route extends RouteSchema = {}, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = ((context: Context<Route, Singleton, Path>) => Route['response'] extends {
200: unknown;
} ? Response | MaybePromise<Route['response'][keyof Route['response']] | {
[Status in keyof Route['response']]: {
_type: Record<Status, Route['response'][Status]>;
[ELYSIA_RESPONSE]: Status;
};
}[keyof Route['response']]> : Response | MaybePromise<Route['response']>) | (unknown extends Route['response'] ? string | number | Object : Route['response'] extends {
200: unknown;
} ? Route['response'][keyof Route['response']] : Route['response']);
export type OptionalHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Handler<Route, Singleton, Path> extends (context: infer Context) => infer Returned ? (context: Context) => Returned | MaybePromise<void> : never;
export type AfterHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Handler<Route, Singleton, Path> extends (context: infer Context) => infer Returned ? (context: Prettify<{
response: Route['response'];
} & Context>) => Returned | MaybePromise<void> : never;
export type MapResponse<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Handler<Omit<Route, 'response'> & {
response: MaybePromise<Response | undefined | void>;
}, Singleton & {
derive: {
response: Route['response'];
};
}, Path>;
export type VoidHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = (context: Context<Route, Singleton>) => MaybePromise<void>;
export type TransformHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, BasePath extends string = ''> = {
(context: Prettify<Context<Route, Omit<Singleton, 'resolve'> & {
resolve: {};
}, BasePath>>): MaybePromise<void>;
$elysiaHookType?: LifeCycleType;
$elysiaChecksum?: number;
$elysia?: 'derive' | 'resolve' | (string & {});
};
export type TraceEvent = 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'error' | 'response' extends infer Events extends string ? Events | `${Events}.unit` | 'handle' | 'exit' : never;
export type TraceStream = {
id: number;
event: TraceEvent;
type: 'begin' | 'end';
time: number;
name?: string;
unit?: number;
};
export type TraceReporter = EventEmitter<{
[res in `res${number}.${number}`]: undefined;
} & {
event(stream: TraceStream): MaybePromise<void>;
}>;
export type TraceProcess<Type extends 'begin' | 'end' = 'begin' | 'end'> = Type extends 'begin' ? Prettify<{
name: string;
time: number;
skip: boolean;
end: Promise<TraceProcess<'end'>>;
children: Promise<TraceProcess<'begin'>>[];
}> : number;
export type TraceHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = {
(lifecycle: Prettify<{
context: Context<Route, Singleton>;
set: Context['set'];
id: number;
time: number;
} & {
[x in 'request' | 'parse' | 'transform' | 'beforeHandle' | 'handle' | 'afterHandle' | 'error' | 'response']: Promise<TraceProcess<'begin'>>;
} & {
store: Singleton['store'];
}>): MaybePromise<void>;
$elysiaHookType?: LifeCycleType;
$elysiaChecksum?: number;
};
export type TraceListener = EventEmitter<{
[event in TraceEvent | 'all']: (trace: TraceProcess) => MaybePromise<void>;
}>;
export type BodyHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>, contentType: string) => MaybePromise<any>;
export type PreHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = (context: PreContext<Singleton>) => MaybePromise<Route['response'] | void>;
export type GracefulHandler<in Instance extends Elysia<any, any, any, any, any, any, any, any>> = (data: Instance) => any;
export type ErrorHandler<T extends Record<string, Error> = {}, Route extends RouteSchema = {}, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = (context: Prettify<Omit<Context<Route, Singleton>, 'error'> & ({
request: Request;
code: 'UNKNOWN';
error: Readonly<Error>;
set: Context['set'];
} | {
request: Request;
code: 'VALIDATION';
error: Readonly<ValidationError>;
set: Context['set'];
} | {
request: Request;
code: 'NOT_FOUND';
error: Readonly<NotFoundError>;
set: Context['set'];
} | {
request: Request;
code: 'PARSE';
error: Readonly<ParseError>;
set: Context['set'];
} | {
request: Request;
code: 'INTERNAL_SERVER_ERROR';
error: Readonly<InternalServerError>;
set: Context['set'];
} | {
request: Request;
code: 'INVALID_COOKIE_SIGNATURE';
error: Readonly<InvalidCookieSignature>;
set: Context['set'];
} | {
[K in keyof T]: {
request: Request;
code: K;
error: Readonly<T[K]>;
set: Context['set'];
};
}[keyof T])>) => any | Promise<any>;
export type Isolate<T> = {
[P in keyof T]: T[P];
};
type LocalHookDetail = Partial<OpenAPIV3.OperationObject>;
export type LocalHook<LocalSchema extends InputSchema, Schema extends RouteSchema, Singleton extends SingletonBase, Errors extends Record<string, Error>, Extension extends BaseMacro, Path extends string = '', TypedRoute extends RouteSchema = Schema extends {
params: Record<string, unknown>;
} ? Schema : Schema & {
params: undefined extends Schema['params'] ? Record<GetPathParameter<Path>, string> : Schema['params'];
}> = (LocalSchema extends {} ? LocalSchema : Isolate<LocalSchema>) & Extension & {
/**
* Short for 'Content-Type'
*
* Available:
* - 'none': do not parse body
* - 'text' / 'text/plain': parse body as string
* - 'json' / 'application/json': parse body as json
* - 'formdata' / 'multipart/form-data': parse body as form-data
* - 'urlencoded' / 'application/x-www-form-urlencoded: parse body as urlencoded
* - 'arraybuffer': parse body as readable stream
*/
type?: ContentType;
detail?: LocalHookDetail;
/**
* Custom body parser
*/
parse?: MaybeArray<BodyHandler<TypedRoute, Singleton>>;
/**
* Transform context's value
*/
transform?: MaybeArray<TransformHandler<TypedRoute, Singleton>>;
/**
* Execute before main handler
*/
beforeHandle?: MaybeArray<OptionalHandler<TypedRoute, Singleton>>;
/**
* Execute after main handler
*/
afterHandle?: MaybeArray<AfterHandler<TypedRoute, Singleton>>;
/**
* Execute after main handler
*/
mapResponse?: MaybeArray<MapResponse<TypedRoute, Singleton>>;
/**
* Catch error
*/
error?: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>;
/**
* Custom body parser
*/
onResponse?: MaybeArray<VoidHandler<TypedRoute, Singleton>>;
};
export type ComposedHandler = {
(context: Context): MaybePromise<Response>;
compose(): Function;
composed: Function;
};
export interface InternalRoute {
method: HTTPMethod;
path: string;
composed: ComposedHandler | Response | null;
handler: Handler;
hooks: LocalHook<any, any, any, any, any, any, any>;
}
export type SchemaValidator = {
body?: TypeCheck<any>;
headers?: TypeCheck<any>;
query?: TypeCheck<any>;
params?: TypeCheck<any>;
cookie?: TypeCheck<any>;
response?: Record<number, TypeCheck<any>>;
};
export type ListenCallback = (server: Server) => MaybePromise<void>;
export type AddPrefix<Prefix extends string, T> = {
[K in keyof T as Prefix extends string ? `${Prefix}${K & string}` : K]: T[K];
};
export type AddPrefixCapitalize<Prefix extends string, T> = {
[K in keyof T as `${Prefix}${Capitalize<K & string>}`]: T[K];
};
export type AddSuffix<Suffix extends string, T> = {
[K in keyof T as `${K & string}${Suffix}`]: T[K];
};
export type AddSuffixCapitalize<Suffix extends string, T> = {
[K in keyof T as `${K & string}${Capitalize<Suffix>}`]: T[K];
};
export type Checksum = {
name?: string;
seed?: unknown;
checksum: number;
stack?: string;
routes?: InternalRoute[];
decorators?: SingletonBase['decorator'];
store?: SingletonBase['store'];
type?: DefinitionBase['type'];
error?: DefinitionBase['error'];
dependencies?: Record<string, Checksum[]>;
derive?: {
fn: string;
stack: string;
}[];
resolve?: {
fn: string;
stack: string;
}[];
};
export type BaseMacro = Record<string, Record<string, unknown> | ((...a: any) => unknown)>;
export type MacroToProperty<in out T extends BaseMacro> = Prettify<{
[K in keyof T]: T[K] extends Function ? T[K] extends (a: infer Params) => any ? Params | undefined : T[K] : T[K] extends BaseMacro ? MacroToProperty<T[K]> : never;
}>;
export type ElysiaFn = {
(...a: any[]): any;
$elysiaHookType?: LifeCycleType;
$elysiaChecksum?: number;
};
export interface MacroManager<in out TypedRoute extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, in out Errors extends Record<string, Error> = {}> {
onParse(fn: MaybeArray<BodyHandler<TypedRoute, Singleton>>): unknown;
onParse(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<BodyHandler<TypedRoute, Singleton>>): unknown;
onTransform(fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
onTransform(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
onBeforeHandle(fn: MaybeArray<OptionalHandler<TypedRoute, Singleton>>): unknown;
onBeforeHandle(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<OptionalHandler<TypedRoute, Singleton>>): unknown;
onAfterHandle(fn: MaybeArray<AfterHandler<TypedRoute, Singleton>>): unknown;
onAfterHandle(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<AfterHandler<TypedRoute, Singleton>>): unknown;
onError(fn: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>): unknown;
onError(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>): unknown;
onResponse(fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
onResponse(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
mapResponse(fn: MaybeArray<MapResponse<TypedRoute, Singleton>>): unknown;
mapResponse(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<MapResponse<TypedRoute, Singleton>>): unknown;
events: {
global: Prettify<LifeCycleStore & RouteSchema>;
local: Prettify<LifeCycleStore & RouteSchema>;
};
}
export type MacroQueue = {
(manager: MacroManager<any, any, any>): unknown;
$elysiaChecksum?: number;
}[];
type _CreateEden<Path extends string, Property extends Record<string, unknown> = {}> = Path extends `${infer Start}/${infer Rest}` ? {
[x in Start]: _CreateEden<Rest, Property>;
} : {
[x in Path]: Property;
};
export type CreateEden<Path extends string, Property extends Record<string, unknown> = {}> = Path extends `/${infer Rest}` ? _CreateEden<Rest, Property> : Path extends '' ? _CreateEden<'index', Property> : _CreateEden<Path, Property>;
export type ComposeElysiaResponse<Response, Handle> = Handle extends (...a: any[]) => infer A ? _ComposeElysiaResponse<Response, Awaited<A>> : _ComposeElysiaResponse<Response, Awaited<Handle>>;
type _ComposeElysiaResponse<Response, Handle> = Prettify<unknown extends Response ? {
200: Exclude<Handle, {
[ELYSIA_RESPONSE]: any;
}>;
} & {
[ErrorResponse in Extract<Handle, {
response: any;
}> as ErrorResponse extends {
[ELYSIA_RESPONSE]: infer Status extends number;
} ? Status : never]: ErrorResponse['response'];
} : Response extends {
200: unknown;
} ? Response : {
200: Response;
}>;
export type MergeElysiaInstances<Instances extends Elysia<any, any, any, any, any, any>[] = [], Prefix extends string = '', Scoped extends boolean = false, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Definitions extends DefinitionBase = {
type: {};
error: {};
}, Metadata extends MetadataBase = {
schema: {};
macro: {};
}, Routes extends RouteBase = {}> = Instances extends [
infer Current extends Elysia<any, any, any, any, any, any>,
...infer Rest extends Elysia<any, any, any, any, any, any>[]
] ? Current['_types']['Scoped'] extends true ? MergeElysiaInstances<Rest, Prefix, Scoped, Singleton, Definitions, Metadata, Routes> : MergeElysiaInstances<Rest, Prefix, Scoped, Singleton & Current['_types']['Singleton'], Definitions & Current['_types']['Definitions'], Metadata & Current['_types']['Metadata'], Routes & (Prefix extends `` ? Current['_routes'] : AddPrefix<Prefix, Current['_routes']>)> : Elysia<Prefix, Scoped, {
decorator: Prettify<Singleton['decorator']>;
store: Prettify<Singleton['store']>;
derive: Prettify<Singleton['derive']>;
resolve: Prettify<Singleton['resolve']>;
}, {
type: Prettify<Definitions['type']>;
error: Prettify<Definitions['error']>;
}, {
schema: Prettify<Metadata['schema']>;
macro: Prettify<Metadata['macro']>;
}, Routes>;
export type LifeCycleType = 'global' | 'local' | 'scoped';
export type ExcludeElysiaResponse<T> = Exclude<Awaited<T>, {
[ELYSIA_RESPONSE]: any;
}>;
export {};

@@ -1,10 +0,192 @@

import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
export { as as InvertedStatusMap, ay as PromiseGroup, ar as StatusMap, ap as asHookType, am as checksum, aw as createMacroManager, aq as filterGlobalHook, an as getCookieValidator, al as getResponseSchemaValidator, ak as getSchemaValidator, ax as isNumericString, af as mergeCookie, ae as mergeDeep, aj as mergeHook, ao as mergeLifeCycle, ag as mergeObjectArray, ai as mergeResponse, ah as primitiveHooks, ad as replaceUrlPath, at as signCookie, av as traceBackMacro, au as unsignCookie } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
import { TSchema } from '@sinclair/typebox';
import { TypeCheck } from '@sinclair/typebox/compiler';
import type { LifeCycleStore, LocalHook, MaybeArray, InputSchema, ElysiaFn, LifeCycleType } from './types';
import type { CookieOptions } from './cookies';
export declare const replaceUrlPath: (url: string, pathname: string) => string;
export declare const mergeDeep: <A extends Record<string, any>, B extends Record<string, any>>(target: A, source: B, { skipKeys }?: {
skipKeys?: string[] | undefined;
}) => A & B;
export declare const mergeCookie: <const A extends Object, const B extends Object>(a: A, b: B) => A & B;
export declare const mergeObjectArray: <T extends ElysiaFn>(a?: T | T[], b?: T | T[]) => T[];
export declare const primitiveHooks: readonly ["start", "request", "parse", "transform", "resolve", "beforeHandle", "afterHandle", "onResponse", "mapResponse", "trace", "error", "stop", "body", "headers", "params", "query", "response", "type", "detail"];
export declare const mergeResponse: (a: InputSchema['response'], b: InputSchema['response']) => string | TSchema | {
[x: number]: any;
} | undefined;
export declare const mergeHook: (a?: LocalHook<any, any, any, any, any, any, any> | LifeCycleStore, b?: LocalHook<any, any, any, any, any, any, any>) => LifeCycleStore;
export declare const getSchemaValidator: (s: TSchema | string | undefined, { models, additionalProperties, dynamic }: {
models?: Record<string, TSchema> | undefined;
additionalProperties?: boolean | undefined;
dynamic?: boolean | undefined;
}) => TypeCheck<TSchema> | undefined;
export declare const getResponseSchemaValidator: (s: InputSchema['response'] | undefined, { models, additionalProperties, dynamic }: {
models?: Record<string, TSchema> | undefined;
additionalProperties?: boolean | undefined;
dynamic?: boolean | undefined;
}) => Record<number, TypeCheck<any>> | undefined;
export declare const checksum: (s: string) => number;
export declare const getCookieValidator: ({ validator, defaultConfig, config, dynamic, models }: {
validator: TSchema | string | undefined;
defaultConfig: CookieOptions | undefined;
config: CookieOptions;
dynamic: boolean;
models: Record<string, TSchema> | undefined;
}) => TypeCheck<TSchema> | undefined;
export declare const mergeLifeCycle: (a: LifeCycleStore, b: LifeCycleStore | LocalHook<any, any, any, any, any, any, any>, checksum?: number) => LifeCycleStore;
export declare const asHookType: <T extends MaybeArray<ElysiaFn> | undefined>(fn: T, inject: LifeCycleType, { skipIfHasType }?: {
skipIfHasType?: boolean | undefined;
}) => T;
export declare const filterGlobalHook: (hook: LocalHook<any, any, any, any, any, any, any>) => LocalHook<any, any, any, any, any, any, any>;
export declare const StatusMap: {
readonly Continue: 100;
readonly 'Switching Protocols': 101;
readonly Processing: 102;
readonly 'Early Hints': 103;
readonly OK: 200;
readonly Created: 201;
readonly Accepted: 202;
readonly 'Non-Authoritative Information': 203;
readonly 'No Content': 204;
readonly 'Reset Content': 205;
readonly 'Partial Content': 206;
readonly 'Multi-Status': 207;
readonly 'Already Reported': 208;
readonly 'Multiple Choices': 300;
readonly 'Moved Permanently': 301;
readonly Found: 302;
readonly 'See Other': 303;
readonly 'Not Modified': 304;
readonly 'Temporary Redirect': 307;
readonly 'Permanent Redirect': 308;
readonly 'Bad Request': 400;
readonly Unauthorized: 401;
readonly 'Payment Required': 402;
readonly Forbidden: 403;
readonly 'Not Found': 404;
readonly 'Method Not Allowed': 405;
readonly 'Not Acceptable': 406;
readonly 'Proxy Authentication Required': 407;
readonly 'Request Timeout': 408;
readonly Conflict: 409;
readonly Gone: 410;
readonly 'Length Required': 411;
readonly 'Precondition Failed': 412;
readonly 'Payload Too Large': 413;
readonly 'URI Too Long': 414;
readonly 'Unsupported Media Type': 415;
readonly 'Range Not Satisfiable': 416;
readonly 'Expectation Failed': 417;
readonly "I'm a teapot": 418;
readonly 'Misdirected Request': 421;
readonly 'Unprocessable Content': 422;
readonly Locked: 423;
readonly 'Failed Dependency': 424;
readonly 'Too Early': 425;
readonly 'Upgrade Required': 426;
readonly 'Precondition Required': 428;
readonly 'Too Many Requests': 429;
readonly 'Request Header Fields Too Large': 431;
readonly 'Unavailable For Legal Reasons': 451;
readonly 'Internal Server Error': 500;
readonly 'Not Implemented': 501;
readonly 'Bad Gateway': 502;
readonly 'Service Unavailable': 503;
readonly 'Gateway Timeout': 504;
readonly 'HTTP Version Not Supported': 505;
readonly 'Variant Also Negotiates': 506;
readonly 'Insufficient Storage': 507;
readonly 'Loop Detected': 508;
readonly 'Not Extended': 510;
readonly 'Network Authentication Required': 511;
};
export declare const InvertedStatusMap: {
readonly 100: "Continue";
readonly 101: "Switching Protocols";
readonly 102: "Processing";
readonly 103: "Early Hints";
readonly 200: "OK";
readonly 201: "Created";
readonly 202: "Accepted";
readonly 203: "Non-Authoritative Information";
readonly 204: "No Content";
readonly 205: "Reset Content";
readonly 206: "Partial Content";
readonly 207: "Multi-Status";
readonly 208: "Already Reported";
readonly 300: "Multiple Choices";
readonly 301: "Moved Permanently";
readonly 302: "Found";
readonly 303: "See Other";
readonly 304: "Not Modified";
readonly 307: "Temporary Redirect";
readonly 308: "Permanent Redirect";
readonly 400: "Bad Request";
readonly 401: "Unauthorized";
readonly 402: "Payment Required";
readonly 403: "Forbidden";
readonly 404: "Not Found";
readonly 405: "Method Not Allowed";
readonly 406: "Not Acceptable";
readonly 407: "Proxy Authentication Required";
readonly 408: "Request Timeout";
readonly 409: "Conflict";
readonly 410: "Gone";
readonly 411: "Length Required";
readonly 412: "Precondition Failed";
readonly 413: "Payload Too Large";
readonly 414: "URI Too Long";
readonly 415: "Unsupported Media Type";
readonly 416: "Range Not Satisfiable";
readonly 417: "Expectation Failed";
readonly 418: "I'm a teapot";
readonly 421: "Misdirected Request";
readonly 422: "Unprocessable Content";
readonly 423: "Locked";
readonly 424: "Failed Dependency";
readonly 425: "Too Early";
readonly 426: "Upgrade Required";
readonly 428: "Precondition Required";
readonly 429: "Too Many Requests";
readonly 431: "Request Header Fields Too Large";
readonly 451: "Unavailable For Legal Reasons";
readonly 500: "Internal Server Error";
readonly 501: "Not Implemented";
readonly 502: "Bad Gateway";
readonly 503: "Service Unavailable";
readonly 504: "Gateway Timeout";
readonly 505: "HTTP Version Not Supported";
readonly 506: "Variant Also Negotiates";
readonly 507: "Insufficient Storage";
readonly 508: "Loop Detected";
readonly 510: "Not Extended";
readonly 511: "Network Authentication Required";
};
export type StatusMap = typeof StatusMap;
export type InvertedStatusMap = typeof InvertedStatusMap;
export declare const signCookie: (val: string, secret: string | null) => Promise<string>;
export declare const unsignCookie: (input: string, secret: string | null) => Promise<string | false>;
export declare const traceBackMacro: (extension: unknown, property: Record<string, unknown>, hooks?: Record<string, unknown>) => void;
export declare const createMacroManager: ({ globalHook, localHook }: {
globalHook: LifeCycleStore;
localHook: LocalHook<any, any, any, any, any, any, any>;
}) => (stackName: keyof LifeCycleStore) => (type: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
} | MaybeArray<Function>, fn?: MaybeArray<Function>) => void;
export declare const isNumericString: (message: string) => boolean;
export declare class PromiseGroup implements PromiseLike<void> {
onError: (error: any) => void;
root: Promise<any> | null;
promises: Promise<any>[];
constructor(onError?: (error: any) => void);
/**
* The number of promises still being awaited.
*/
get size(): number;
/**
* Add a promise to the group.
* @returns The promise that was added.
*/
add<T>(promise: Promise<T>): Promise<T>;
private drain;
then<TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;
}

@@ -182,2 +182,5 @@ "use strict";

var import_compiler = require("@sinclair/typebox/compiler");
var isISO8601 = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var isFormalDate = /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/;
var isShortenDate = /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/;
try {

@@ -196,10 +199,20 @@ import_system.TypeSystem.Format(

);
import_system.TypeSystem.Format(
"date",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format(
"date-time",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format("date", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
import_system.TypeSystem.Format("date-time", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
} catch {

@@ -206,0 +219,0 @@ }

@@ -1,10 +0,33 @@

import 'bun';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
export { aG as ElysiaWS, aF as websocket } from '../dynamic-handle-DrPvRYu3.js';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import '../error.js';
import 'undici-types';
import '@sinclair/typebox/system';
/// <reference types="bun-types" />
/// <reference types="bun-types" />
import type { ServerWebSocket, WebSocketHandler } from 'bun';
import type { TSchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
import type { Context } from '../context';
import type { SingletonBase, RouteSchema } from '../types';
export declare const websocket: WebSocketHandler<any>;
export declare class ElysiaWS<WS extends ServerWebSocket<{
id?: string;
validator?: TypeCheck<TSchema>;
}>, Route extends RouteSchema = RouteSchema, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> {
raw: WS;
data: Context<Route, Singleton>;
validator?: TypeCheck<TSchema>;
constructor(raw: WS, data: Context<Route, Singleton>);
get id(): string;
set id(newID: string);
get publish(): (topic: string, data?: Route['response'], compress?: boolean) => this;
get send(): (data: Route['response']) => this;
get subscribe(): (room: string) => this;
get unsubscribe(): (room: string) => this;
get cork(): (callback: () => this) => this;
get close(): () => this;
get terminate(): () => void;
get isSubscribed(): (topic: string) => boolean;
get remoteAddress(): string;
}

@@ -78,2 +78,5 @@ "use strict";

var import_compiler = require("@sinclair/typebox/compiler");
var isISO8601 = /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/;
var isFormalDate = /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{2}\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT(?:\+|-)\d{4}\s\([^)]+\)/;
var isShortenDate = /^(?:(?:(?:(?:0?[1-9]|[12][0-9]|3[01])[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:19|20)\d{2})|(?:(?:19|20)\d{2}[/\s-](?:0?[1-9]|1[0-2])[/\s-](?:0?[1-9]|[12][0-9]|3[01]))))(?:\s(?:1[012]|0?[1-9]):[0-5][0-9](?::[0-5][0-9])?(?:\s[AP]M)?)?$/;
try {

@@ -92,10 +95,20 @@ import_system.TypeSystem.Format(

);
import_system.TypeSystem.Format(
"date",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format(
"date-time",
(value) => !Number.isNaN(new Date(value).getTime())
);
import_system.TypeSystem.Format("date", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
import_system.TypeSystem.Format("date-time", (value) => {
const temp = value.replace(/"/g, "");
if (isISO8601.test(temp) || isFormalDate.test(temp) || isShortenDate.test(temp)) {
const date = new Date(temp);
if (!Number.isNaN(date.getTime()))
return true;
}
return false;
});
} catch {

@@ -102,0 +115,0 @@ }

@@ -1,10 +0,57 @@

import 'bun';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
export { aH as WS } from '../dynamic-handle-DrPvRYu3.js';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import '../error.js';
import 'undici-types';
import '@sinclair/typebox/system';
/// <reference types="bun-types" />
/// <reference types="bun-types" />
/// <reference types="bun-types" />
import type { ServerWebSocket, WebSocketHandler } from 'bun';
import type { TSchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
import type { ElysiaWS } from '.';
import type { Context } from '../context';
import type { SingletonBase, Handler, VoidHandler, ErrorHandler, InputSchema, RouteSchema, Isolate, GetPathParameter, MaybeArray, BaseMacro } from '../types';
export declare namespace WS {
type Config = Omit<WebSocketHandler, 'open' | 'message' | 'close' | 'drain'>;
type LocalHook<LocalSchema extends InputSchema, Route extends RouteSchema, Singleton extends SingletonBase, Errors extends Record<string, Error>, Extension extends BaseMacro, Path extends string = '', TypedRoute extends RouteSchema = keyof Route['params'] extends never ? Route & {
params: Record<GetPathParameter<Path>, string>;
} : Route> = (LocalSchema extends {} ? LocalSchema : Isolate<LocalSchema>) & Extension & Omit<Partial<WebSocketHandler<Context>>, 'open' | 'message' | 'close' | 'drain' | 'publish' | 'publishToSelf'> & (ElysiaWS<ServerWebSocket<{
validator?: TypeCheck<TSchema>;
}>, TypedRoute, Singleton> extends infer WS ? {
transform?: MaybeArray<VoidHandler<TypedRoute, Singleton>>;
transformMessage?: MaybeArray<VoidHandler<TypedRoute, Singleton>>;
beforeHandle?: MaybeArray<Handler<TypedRoute, Singleton>>;
/**
* Catch error
*/
error?: MaybeArray<ErrorHandler<Errors>>;
/**
* Headers to register to websocket before `upgrade`
*/
upgrade?: Bun.HeadersInit | ((context: Context) => Bun.HeadersInit);
/**
* The {@link ServerWebSocket} has been opened
*
* @param ws The {@link ServerWebSocket} that was opened
*/
open?: (ws: WS) => void | Promise<void>;
/**
* Handle an incoming message to a {@link ServerWebSocket}
*
* @param ws The {@link ServerWebSocket} that received the message
* @param message The message received
*
* To change `message` to be an `ArrayBuffer` instead of a `Uint8Array`, set `ws.binaryType = "arraybuffer"`
*/
message?: (ws: WS, message: Route['body']) => any;
/**
* The {@link ServerWebSocket} is being closed
* @param ws The {@link ServerWebSocket} that was closed
* @param code The close code
* @param message The close message
*/
close?: (ws: WS, code: number, message: string) => void | Promise<void>;
/**
* The {@link ServerWebSocket} is ready for more data
*
* @param ws The {@link ServerWebSocket} that is ready
*/
drain?: (ws: WS) => void | Promise<void>;
} : {});
}

@@ -1,19 +0,11 @@

import { E as Elysia, L as LifeCycleStore, S as SchemaValidator, H as Handler, C as ComposedHandler } from './dynamic-handle-DrPvRYu3.js';
import { TAnySchema } from '@sinclair/typebox';
import { Sucrose } from './sucrose.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
declare const hasReturn: (fnLiteral: string) => boolean;
declare const hasType: (type: string, schema: TAnySchema) => any;
declare const hasProperty: (expectedProperty: string, schema: TAnySchema) => boolean | undefined;
declare const hasTransform: (schema: TAnySchema) => any;
declare const isAsync: (fn: Function) => boolean;
declare const composeHandler: ({ app, path, method, localHook, hooks, validator, handler, allowMeta, appInference: { event: eventInference, trace: traceInference } }: {
import { type Elysia } from '.';
import type { TAnySchema } from '@sinclair/typebox';
import { Sucrose } from './sucrose';
import type { ComposedHandler, Handler, LifeCycleStore, SchemaValidator } from './types';
export declare const hasReturn: (fnLiteral: string) => boolean;
export declare const hasType: (type: string, schema: TAnySchema) => any;
export declare const hasProperty: (expectedProperty: string, schema: TAnySchema) => boolean | undefined;
export declare const hasTransform: (schema: TAnySchema) => any;
export declare const isAsync: (fn: Function) => boolean;
export declare const composeHandler: ({ app, path, method, localHook, hooks, validator, handler, allowMeta, appInference: { event: eventInference, trace: traceInference } }: {
app: Elysia<any, any, any, any, any, any, any, any>;

@@ -32,6 +24,4 @@ path: string;

}) => ComposedHandler;
declare const composeGeneralHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
declare const composeErrorHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
declare const jitRoute: (index: number) => string;
export { composeErrorHandler, composeGeneralHandler, composeHandler, hasProperty, hasReturn, hasTransform, hasType, isAsync, jitRoute };
export declare const composeGeneralHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
export declare const composeErrorHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => any;
export declare const jitRoute: (index: number) => string;

@@ -1,10 +0,71 @@

export { az as Context, aA as PreContext } from './dynamic-handle-DrPvRYu3.js';
import './error.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import '@sinclair/typebox/system';
import 'undici-types';
/// <reference types="node" />
import type { StatusMap, InvertedStatusMap } from './utils';
import type { Cookie, ElysiaCookie } from './cookies';
import { error, type ELYSIA_RESPONSE } from './error';
import type { RouteSchema, Prettify, GetPathParameter, SingletonBase } from './types';
type InvertedStatusMapKey = keyof InvertedStatusMap;
type WithoutNullableKeys<Type> = {
[Key in keyof Type]-?: NonNullable<Type[Key]>;
};
export type Context<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Prettify<{
body: Route['body'];
query: undefined extends Route['query'] ? Record<string, string | undefined> : Route['query'];
params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? Record<GetPathParameter<Path>, string> : never : Route['params'];
headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers'];
cookie: undefined extends Route['cookie'] ? Record<string, Cookie<any>> : Record<string, Cookie<any>> & WithoutNullableKeys<{
[key in keyof Route['cookie']]: Cookie<Route['cookie'][key]>;
}>;
set: {
headers: Record<string, string> & {
'Set-Cookie'?: string | string[];
};
status?: number | keyof StatusMap;
redirect?: string;
/**
* ! Internal Property
*
* Use `Context.cookie` instead
*/
cookie?: Record<string, ElysiaCookie>;
};
path: string;
request: Request;
store: Singleton['store'];
} & (Route['response'] extends {
200: unknown;
} ? {
error: <const Code extends keyof Route['response'] | InvertedStatusMap[Extract<InvertedStatusMapKey, keyof Route['response']>], const T extends Code extends keyof Route['response'] ? Route['response'][Code] : Code extends keyof StatusMap ? Route['response'][StatusMap[Code]] : never>(code: Code, response: T) => {
[ELYSIA_RESPONSE]: Code extends keyof StatusMap ? StatusMap[Code] : Code;
response: T;
_type: {
[ERROR_CODE in Code extends keyof StatusMap ? StatusMap[Code] : Code]: T;
};
};
} : {
error: typeof error;
}) & Singleton['decorator'] & Singleton['derive'] & Singleton['resolve']>;
export type PreContext<in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = Prettify<{
store: Singleton['store'];
request: Request;
set: {
headers: {
[header: string]: string;
} & {
['Set-Cookie']?: string | string[];
};
status?: number;
redirect?: string;
};
error: typeof error;
} & Singleton['decorator']>;
export {};

@@ -1,10 +0,138 @@

export { e as Cookie, c as CookieOptions, d as ElysiaCookie, f as createCookieJar, p as parseCookie } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
import type { Context } from './context';
import type { Prettify } from './types';
export interface CookieOptions {
/**
* Specifies the value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.3|Domain Set-Cookie attribute}. By default, no
* domain is set, and most clients will consider the cookie to apply to only
* the current domain.
*/
domain?: string | undefined;
/**
* Specifies the `Date` object to be the value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.1|`Expires` `Set-Cookie` attribute}. By default,
* no expiration is set, and most clients will consider this a "non-persistent cookie" and will delete
* it on a condition like exiting a web browser application.
*
* *Note* the {@link https://tools.ietf.org/html/rfc6265#section-5.3|cookie storage model specification}
* states that if both `expires` and `maxAge` are set, then `maxAge` takes precedence, but it is
* possible not all clients by obey this, so if both are set, they should
* point to the same date and time.
*/
expires?: Date | undefined;
/**
* Specifies the boolean value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.6|`HttpOnly` `Set-Cookie` attribute}.
* When truthy, the `HttpOnly` attribute is set, otherwise it is not. By
* default, the `HttpOnly` attribute is not set.
*
* *Note* be careful when setting this to true, as compliant clients will
* not allow client-side JavaScript to see the cookie in `document.cookie`.
*/
httpOnly?: boolean | undefined;
/**
* Specifies the number (in seconds) to be the value for the `Max-Age`
* `Set-Cookie` attribute. The given number will be converted to an integer
* by rounding down. By default, no maximum age is set.
*
* *Note* the {@link https://tools.ietf.org/html/rfc6265#section-5.3|cookie storage model specification}
* states that if both `expires` and `maxAge` are set, then `maxAge` takes precedence, but it is
* possible not all clients by obey this, so if both are set, they should
* point to the same date and time.
*/
maxAge?: number | undefined;
/**
* Specifies the value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.4|`Path` `Set-Cookie` attribute}.
* By default, the path is considered the "default path".
*/
path?: string | undefined;
/**
* Specifies the `string` to be the value for the [`Priority` `Set-Cookie` attribute][rfc-west-cookie-priority-00-4.1].
*
* - `'low'` will set the `Priority` attribute to `Low`.
* - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set.
* - `'high'` will set the `Priority` attribute to `High`.
*
* More information about the different priority levels can be found in
* [the specification][rfc-west-cookie-priority-00-4.1].
*
* **note** This is an attribute that has not yet been fully standardized, and may change in the future.
* This also means many clients may ignore this attribute until they understand it.
*/
priority?: 'low' | 'medium' | 'high' | undefined;
/**
* Specifies the boolean or string to be the value for the {@link https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7|`SameSite` `Set-Cookie` attribute}.
*
* - `true` will set the `SameSite` attribute to `Strict` for strict same
* site enforcement.
* - `false` will not set the `SameSite` attribute.
* - `'lax'` will set the `SameSite` attribute to Lax for lax same site
* enforcement.
* - `'strict'` will set the `SameSite` attribute to Strict for strict same
* site enforcement.
* - `'none'` will set the SameSite attribute to None for an explicit
* cross-site cookie.
*
* More information about the different enforcement levels can be found in {@link https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7|the specification}.
*
* *note* This is an attribute that has not yet been fully standardized, and may change in the future. This also means many clients may ignore this attribute until they understand it.
*/
sameSite?: true | false | 'lax' | 'strict' | 'none' | undefined;
/**
* Specifies the boolean value for the {@link https://tools.ietf.org/html/rfc6265#section-5.2.5|`Secure` `Set-Cookie` attribute}. When truthy, the
* `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set.
*
* *Note* be careful when setting this to `true`, as compliant clients will
* not send the cookie back to the server in the future if the browser does
* not have an HTTPS connection.
*/
secure?: boolean | undefined;
/**
* Secret key for signing cookie
*
* If array is passed, will use Key Rotation.
*
* Key rotation is when an encryption key is retired
* and replaced by generating a new cryptographic key.
*/
secrets?: string | string[];
}
export type ElysiaCookie = Prettify<CookieOptions & {
value?: unknown;
}>;
type Updater<T> = T | ((value: T) => T);
export declare class Cookie<T> implements ElysiaCookie {
private name;
private jar;
private initial;
constructor(name: string, jar: Record<string, ElysiaCookie>, initial?: Partial<ElysiaCookie>);
get cookie(): ElysiaCookie;
set cookie(jar: ElysiaCookie);
get value(): T;
set value(value: T);
get expires(): Date | undefined;
set expires(expires: Date | undefined);
get maxAge(): number | undefined;
set maxAge(maxAge: number | undefined);
get domain(): string | undefined;
set domain(domain: string | undefined);
get path(): string | undefined;
set path(path: string | undefined);
get secure(): boolean | undefined;
set secure(secure: boolean | undefined);
get httpOnly(): boolean | undefined;
set httpOnly(httpOnly: boolean | undefined);
get sameSite(): boolean | "lax" | "strict" | "none" | undefined;
set sameSite(sameSite: boolean | "lax" | "strict" | "none" | undefined);
get priority(): "low" | "medium" | "high" | undefined;
set priority(priority: "low" | "medium" | "high" | undefined);
get secrets(): string | string[] | undefined;
set secrets(secrets: string | string[] | undefined);
update(config: Updater<Partial<ElysiaCookie>>): this;
set(config: Updater<Partial<ElysiaCookie>>): this;
remove(): this | undefined;
toString(): string;
}
export declare const createCookieJar: (set: Context['set'], store: Record<string, ElysiaCookie>, initial?: Partial<ElysiaCookie>) => Record<string, Cookie<unknown>>;
export declare const parseCookie: (set: Context['set'], cookieString?: string | null, { secret, sign, ...initial }?: CookieOptions & {
secret?: string | string[] | undefined;
sign?: string | true | string[] | undefined;
}) => Promise<Record<string, Cookie<unknown>>>;
export {};

@@ -1,10 +0,14 @@

export { aP as DynamicHandler, aR as createDynamicErrorHandler, aQ as createDynamicHandler } from './dynamic-handle-DrPvRYu3.js';
import './error.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import '@sinclair/typebox/system';
import 'undici-types';
/// <reference types="node" />
/// <reference types="bun-types" />
import type { Elysia } from '.';
import { ElysiaErrors } from './error';
import type { Context } from './context';
import type { Handler, LifeCycleStore, SchemaValidator } from './types';
export type DynamicHandler = {
handle: Handler<any, any>;
content?: string;
hooks: LifeCycleStore;
validator?: SchemaValidator;
};
export declare const createDynamicHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => (request: Request) => Promise<Response>;
export declare const createDynamicErrorHandler: (app: Elysia<any, any, any, any, any, any, any, any>) => (context: Context, error: ElysiaErrors) => Promise<import("undici-types").Response>;

@@ -1,11 +0,9 @@

import * as undici_types from 'undici-types';
import { TSchema } from '@sinclair/typebox';
import { TypeCheck } from '@sinclair/typebox/compiler';
declare const ERROR_CODE: unique symbol;
declare const ELYSIA_RESPONSE: unique symbol;
type ELYSIA_RESPONSE = typeof ELYSIA_RESPONSE;
declare const isProduction: boolean;
type ElysiaErrors = InternalServerError | NotFoundError | ParseError | ValidationError | InvalidCookieSignature;
declare const error: <const Code extends number | "Continue" | "Switching Protocols" | "Processing" | "Early Hints" | "OK" | "Created" | "Accepted" | "Non-Authoritative Information" | "No Content" | "Reset Content" | "Partial Content" | "Multi-Status" | "Already Reported" | "Multiple Choices" | "Moved Permanently" | "Found" | "See Other" | "Not Modified" | "Temporary Redirect" | "Permanent Redirect" | "Bad Request" | "Unauthorized" | "Payment Required" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Payload Too Large" | "URI Too Long" | "Unsupported Media Type" | "Range Not Satisfiable" | "Expectation Failed" | "I'm a teapot" | "Misdirected Request" | "Unprocessable Content" | "Locked" | "Failed Dependency" | "Too Early" | "Upgrade Required" | "Precondition Required" | "Too Many Requests" | "Request Header Fields Too Large" | "Unavailable For Legal Reasons" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported" | "Variant Also Negotiates" | "Insufficient Storage" | "Loop Detected" | "Not Extended" | "Network Authentication Required", const T = Code extends 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 300 | 301 | 302 | 303 | 304 | 307 | 308 | 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 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
import type { TSchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
export declare const ERROR_CODE: unique symbol;
export declare const ELYSIA_RESPONSE: unique symbol;
export type ELYSIA_RESPONSE = typeof ELYSIA_RESPONSE;
export declare const isProduction: boolean;
export type ElysiaErrors = InternalServerError | NotFoundError | ParseError | ValidationError | InvalidCookieSignature;
export declare const error: <const Code extends number | "Continue" | "Switching Protocols" | "Processing" | "Early Hints" | "OK" | "Created" | "Accepted" | "Non-Authoritative Information" | "No Content" | "Reset Content" | "Partial Content" | "Multi-Status" | "Already Reported" | "Multiple Choices" | "Moved Permanently" | "Found" | "See Other" | "Not Modified" | "Temporary Redirect" | "Permanent Redirect" | "Bad Request" | "Unauthorized" | "Payment Required" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Payload Too Large" | "URI Too Long" | "Unsupported Media Type" | "Range Not Satisfiable" | "Expectation Failed" | "I'm a teapot" | "Misdirected Request" | "Unprocessable Content" | "Locked" | "Failed Dependency" | "Too Early" | "Upgrade Required" | "Precondition Required" | "Too Many Requests" | "Request Header Fields Too Large" | "Unavailable For Legal Reasons" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported" | "Variant Also Negotiates" | "Insufficient Storage" | "Loop Detected" | "Not Extended" | "Network Authentication Required", const T = Code extends 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 300 | 301 | 302 | 303 | 304 | 307 | 308 | 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 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
readonly 100: "Continue";

@@ -198,3 +196,3 @@ readonly 101: "Switching Protocols";

};
declare class InternalServerError extends Error {
export declare class InternalServerError extends Error {
code: string;

@@ -204,3 +202,3 @@ status: number;

}
declare class NotFoundError extends Error {
export declare class NotFoundError extends Error {
code: string;

@@ -210,3 +208,3 @@ status: number;

}
declare class ParseError extends Error {
export declare class ParseError extends Error {
body?: unknown;

@@ -217,3 +215,3 @@ code: string;

}
declare class InvalidCookieSignature extends Error {
export declare class InvalidCookieSignature extends Error {
key: string;

@@ -224,3 +222,3 @@ code: string;

}
declare class ValidationError extends Error {
export declare class ValidationError extends Error {
type: string;

@@ -235,5 +233,3 @@ validator: TSchema | TypeCheck<any>;

get model(): any;
toResponse(headers?: Record<string, any>): undici_types.Response;
toResponse(headers?: Record<string, any>): import("undici-types").Response;
}
export { ELYSIA_RESPONSE, ERROR_CODE, type ElysiaErrors, InternalServerError, InvalidCookieSignature, NotFoundError, ParseError, ValidationError, error, isProduction };

@@ -1,10 +0,10 @@

import 'undici-types';
export { aO as errorToResponse, aI as isNotEmpty, aN as mapCompactResponse, aM as mapEarlyResponse, aL as mapResponse, aJ as parseSetCookies, aK as serializeCookie } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import '@sinclair/typebox/system';
/// <reference types="node" />
/// <reference types="bun-types" />
import type { Context } from './context';
export declare const isNotEmpty: (obj: Object) => boolean;
export declare const parseSetCookies: (headers: Headers, setCookie: string[]) => Headers;
export declare const serializeCookie: (cookies: Context['set']['cookie']) => string | string[] | undefined;
export declare const mapResponse: (response: unknown, set: Context['set'], request?: Request) => Response;
export declare const mapEarlyResponse: (response: unknown, set: Context['set'], request?: Request) => Response | undefined;
export declare const mapCompactResponse: (response: unknown, request?: Request) => Response;
export declare const errorToResponse: (error: Error, set?: Context['set']) => import("undici-types").Response;

@@ -1,13 +0,3 @@

import { L as LifeCycleStore, H as Handler, T as TraceHandler } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
declare namespace Sucrose {
import type { Handler, LifeCycleStore, TraceHandler } from './types';
export declare namespace Sucrose {
interface Inference {

@@ -46,3 +36,3 @@ queries: string[];

*/
declare const separateFunction: (code: string) => [string, string];
export declare const separateFunction: (code: string) => [string, string];
/**

@@ -56,3 +46,3 @@ * Get range between bracket pair

*/
declare const bracketPairRange: (parameter: string) => [number, number];
export declare const bracketPairRange: (parameter: string) => [number, number];
/**

@@ -67,3 +57,3 @@ * Similar to `bracketPairRange` but in reverse order

*/
declare const bracketPairRangeReverse: (parameter: string) => [number, number];
export declare const bracketPairRangeReverse: (parameter: string) => [number, number];
/**

@@ -77,3 +67,3 @@ * Retrieve only root paramters of a function

*/
declare const retrieveRootParamters: (parameter: string) => string;
export declare const retrieveRootParamters: (parameter: string) => string;
/**

@@ -84,3 +74,3 @@ * Find inference from parameter

*/
declare const findParameterReference: (parameter: string, inference: Sucrose.Inference) => string;
export declare const findParameterReference: (parameter: string, inference: Sucrose.Inference) => string;
/**

@@ -91,3 +81,3 @@ * Find inference from parameter

*/
declare const findTraceParameterReference: (parameter: string, inference: Sucrose.TraceInference) => string;
export declare const findTraceParameterReference: (parameter: string, inference: Sucrose.TraceInference) => string;
/**

@@ -101,20 +91,18 @@ * Find alias of variable from function body

*/
declare const findAlias: (type: string, body: string, depth?: number) => string[];
declare const extractMainParameter: (parameter: string) => string | undefined;
export declare const findAlias: (type: string, body: string, depth?: number) => string[];
export declare const extractMainParameter: (parameter: string) => string | undefined;
/**
* Analyze if context is mentioned in body
*/
declare const inferBodyReference: (code: string, aliases: string[], inference: Sucrose.Inference) => string[];
declare const removeDefaultParameter: (parameter: string) => string;
declare const validateInferencedQueries: (queries: string[]) => boolean;
export declare const inferBodyReference: (code: string, aliases: string[], inference: Sucrose.Inference) => string[];
export declare const removeDefaultParameter: (parameter: string) => string;
export declare const validateInferencedQueries: (queries: string[]) => boolean;
/**
* Analyze if context is mentioned in body
*/
declare const inferTraceBodyReference: (code: string, aliases: string[], inference: Sucrose.TraceInference) => string[];
declare const sucrose: (lifeCycle: Sucrose.LifeCycle, inference?: Sucrose.Inference) => Sucrose.Inference;
export declare const inferTraceBodyReference: (code: string, aliases: string[], inference: Sucrose.TraceInference) => string[];
export declare const sucrose: (lifeCycle: Sucrose.LifeCycle, inference?: Sucrose.Inference) => Sucrose.Inference;
/**
* Analyze if context is mentioned in body in a trace
*/
declare const sucroseTrace: (traces: TraceHandler[], inference?: Sucrose.TraceInference) => Sucrose.TraceInference;
export { Sucrose, bracketPairRange, bracketPairRangeReverse, extractMainParameter, findAlias, findParameterReference, findTraceParameterReference, inferBodyReference, inferTraceBodyReference, removeDefaultParameter, retrieveRootParamters, separateFunction, sucrose, sucroseTrace, validateInferencedQueries };
export declare const sucroseTrace: (traces: TraceHandler[], inference?: Sucrose.TraceInference) => Sucrose.TraceInference;

@@ -1,14 +0,2 @@

import { a as TraceReporter, T as TraceHandler, b as TraceStream } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
declare const createTraceListener: (getReporter: () => TraceReporter, totalListener: number, handler: TraceHandler<any, any>) => (trace: TraceStream) => Promise<void>;
export { createTraceListener };
import type { TraceHandler, TraceReporter, TraceStream } from './types';
export declare const createTraceListener: (getReporter: () => TraceReporter, totalListener: number, handler: TraceHandler<any, any>) => (trace: TraceStream) => Promise<void>;

@@ -1,10 +0,69 @@

import '@sinclair/typebox';
export { TypeCheck, TypeCompiler } from '@sinclair/typebox/compiler';
export { aD as ElysiaType, aC as ElysiaTypeOptions, aE as TCookie, aB as t } from './dynamic-handle-DrPvRYu3.js';
export { TypeSystem, TypeSystemDuplicateFormat, TypeSystemDuplicateTypeKind, TypeSystemPolicy } from '@sinclair/typebox/system';
import 'bun';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
/// <reference types="node" />
/// <reference types="bun-types" />
import { DateOptions, NumberOptions, TDate } from '@sinclair/typebox';
import { type SchemaOptions, type TNull, type TUnion, type TSchema, type TUndefined, TProperties, ObjectOptions, TObject, TNumber, TBoolean } from '@sinclair/typebox';
import { type TypeCheck } from '@sinclair/typebox/compiler';
import type { CookieOptions } from './cookies';
import type { MaybeArray } from './types';
declare const t: import("@sinclair/typebox").JavaScriptTypeBuilder;
export declare namespace ElysiaTypeOptions {
type Numeric = NumberOptions;
type FileUnit = number | `${number}${'k' | 'm'}`;
interface File extends SchemaOptions {
type?: MaybeArray<(string & {}) | 'image' | 'image/jpeg' | 'image/png' | 'image/gif' | 'image/tiff' | 'image/x-icon' | 'image/svg' | 'image/webp' | 'image/avif' | 'audio' | 'audio/mpeg' | 'audio/x-ms-wma' | 'audio/vnd.rn-realaudio' | 'audio/x-wav' | 'video' | 'video/mpeg' | 'video/mp4' | 'video/quicktime' | 'video/x-ms-wmv' | 'video/x-msvideo' | 'video/x-flv' | 'video/webm' | 'text' | 'text/css' | 'text/csv' | 'text/html' | 'text/javascript' | 'text/plain' | 'text/xml' | 'application' | 'application/ogg' | 'application/pdf' | 'application/xhtml' | 'application/html' | 'application/json' | 'application/ld+json' | 'application/xml' | 'application/zip' | 'font' | 'font/woff2' | 'font/woff' | 'font/ttf' | 'font/otf'>;
minSize?: FileUnit;
maxSize?: FileUnit;
}
interface Files extends File {
minItems?: number;
maxItems?: number;
}
}
declare const Files: (options?: Partial<ElysiaTypeOptions.Files> | undefined) => import("@sinclair/typebox").TUnsafe<File[]>;
export declare const ElysiaType: {
readonly Numeric: (property?: NumberOptions) => TNumber;
readonly Date: (property?: DateOptions) => TDate;
readonly BooleanString: (property?: SchemaOptions) => TBoolean;
readonly ObjectString: <T extends TProperties = {}>(properties?: T, options?: ObjectOptions) => TObject<T>;
readonly File: (options?: Partial<ElysiaTypeOptions.File> | undefined) => import("@sinclair/typebox").TUnsafe<File>;
readonly Files: (options?: ElysiaTypeOptions.Files) => import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnsafe<File[]>, File[]>;
readonly Nullable: <T_1 extends TSchema>(schema: T_1) => TUnion<[T_1, TNull]>;
/**
* Allow Optional, Nullable and Undefined
*/
readonly MaybeEmpty: <T_2 extends TSchema>(schema: T_2) => TUnion<[T_2, TUndefined]>;
readonly Cookie: <T_3 extends TProperties>(properties: T_3, options?: (ObjectOptions & CookieOptions & {
/**
* Secret key for signing cookie
*
* If array is passed, will use Key Rotation.
*
* Key rotation is when an encryption key is retired
* and replaced by generating a new cryptographic key.
*/
secrets?: string | string[] | undefined;
/**
* Specified cookie name to be signed globally
*/
sign?: readonly ((string & {}) | keyof T_3)[] | undefined;
}) | undefined) => TObject<T_3>;
};
export type TCookie = (typeof ElysiaType)['Cookie'];
declare module '@sinclair/typebox' {
interface JavaScriptTypeBuilder {
BooleanString: typeof ElysiaType.BooleanString;
ObjectString: typeof ElysiaType.ObjectString;
Numeric: typeof ElysiaType.Numeric;
File: typeof ElysiaType.File;
Files: typeof ElysiaType.Files;
Nullable: typeof ElysiaType.Nullable;
MaybeEmpty: typeof ElysiaType.MaybeEmpty;
Cookie: typeof ElysiaType.Cookie;
}
interface SchemaOptions {
error?: string | ((type: string, validator: TypeCheck<any>, value: unknown) => string | void);
}
}
export { t };
export { TypeSystemPolicy, TypeSystem, TypeSystemDuplicateFormat, TypeSystemDuplicateTypeKind } from '@sinclair/typebox/system';
export { TypeCompiler, TypeCheck } from '@sinclair/typebox/compiler';

@@ -1,10 +0,575 @@

export { $ as AddPrefix, a0 as AddPrefixCapitalize, a1 as AddSuffix, a2 as AddSuffixCapitalize, A as AfterHandler, a4 as BaseMacro, K as BodyHandler, a3 as Checksum, aa as ComposeElysiaResponse, C as ComposedHandler, t as ContentType, a9 as CreateEden, D as DefinitionBase, g as ElysiaConfig, a6 as ElysiaFn, l as EphemeralType, W as ErrorHandler, G as GetPathParameter, Q as GracefulHandler, u as HTTPMethod, H as Handler, w as InlineHandler, I as InputSchema, Z as InternalRoute, X as Isolate, s as LifeCycleEvent, L as LifeCycleStore, ac as LifeCycleType, _ as ListenCallback, Y as LocalHook, a7 as MacroManager, a8 as MacroQueue, a5 as MacroToProperty, y as MapResponse, M as MaybeArray, h as MaybePromise, ab as MergeElysiaInstances, v as MergeSchema, n as MetadataBase, O as ObjectValues, x as OptionalHandler, j as Partial2, N as PreHandler, P as Prettify, i as Prettify2, R as Reconcile, m as RouteBase, o as RouteSchema, S as SchemaValidator, k as SingletonBase, B as TraceEvent, T as TraceHandler, J as TraceListener, F as TraceProcess, a as TraceReporter, b as TraceStream, z as TransformHandler, r as UnwrapGroupGuardRoute, q as UnwrapRoute, U as UnwrapSchema, V as VoidHandler } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'memoirist';
import '@sinclair/typebox/system';
import 'undici-types';
/// <reference types="bun-types" />
/// <reference types="node" />
/// <reference types="bun-types" />
import type { Elysia } from '.';
import type { Serve, Server, WebSocketHandler } from 'bun';
import type { TSchema, TObject, Static, TAnySchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
import type { OpenAPIV3 } from 'openapi-types';
import type { EventEmitter } from 'eventemitter3';
import type { CookieOptions } from './cookies';
import type { Context, PreContext } from './context';
import type { ELYSIA_RESPONSE, InternalServerError, InvalidCookieSignature, NotFoundError, ParseError, ValidationError } from './error';
type PartialServe = Partial<Serve>;
export type ElysiaConfig<Prefix extends string | undefined, Scoped extends boolean | undefined> = {
prefix?: Prefix;
scoped?: Scoped;
name?: string;
seed?: unknown;
serve?: PartialServe;
/**
* Warm up Elysia before starting the server
*
* This will perform Ahead of Time compilation and generate code for route handlers
*
* If set to false, Elysia will perform Just in Time compilation
*
* Only required for root instance (instance which use listen) to effect
*
* ! If performing a benchmark, it's recommended to set this to `true`
*
* @default false
*/
precompile?: boolean | {
/**
* Perform dynamic code generation for route handlers before starting the server
*
* @default false
*/
compose?: boolean;
/**
* Perform Ahead of Time compilation for schema before starting the server
*
* @default false
*/
schema?: boolean;
};
/**
* Disable `new Error` thrown marked as Error on Bun 0.6
*/
forceErrorEncapsulation?: boolean;
/**
* Disable sucrose dynamic query inference
*/
forceDynamicQuery?: boolean;
/**
* Disable Ahead of Time compliation
*
* Reduced performance but faster startup time
*/
aot?: boolean;
/**
* Whether should Elysia tolerate suffix '/' or vice-versa
*
* @default false
*/
strictPath?: boolean;
/**
* If set to true, other Elysia handler will not inherits global life-cycle, store, decorators from the current instance
*
* @default false
*/
websocket?: Omit<WebSocketHandler<any>, 'open' | 'close' | 'message' | 'drain'>;
cookie?: CookieOptions & {
/**
* Specified cookie name to be signed globally
*/
sign?: true | string | string[];
};
/**
* Capture more detail information for each dependencies
*/
analytic?: boolean;
/**
* Enable experimental features
*/
experimental?: {};
};
export type MaybeArray<T> = T | T[];
export type MaybePromise<T> = T | Promise<T>;
export type ObjectValues<T extends object> = T[keyof T];
type IsPathParameter<Part extends string> = Part extends `:${infer Parameter}` ? Parameter : Part extends `*` ? '*' : never;
export type GetPathParameter<Path extends string> = Path extends `${infer A}/${infer B}` ? IsPathParameter<A> | GetPathParameter<B> : IsPathParameter<Path>;
export type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
export type Prettify2<T> = {
[K in keyof T]: Prettify<T[K]>;
} & {};
export type Partial2<T> = {
[K in keyof T]?: Partial<T[K]>;
};
export type Reconcile<A extends Object, B extends Object> = {
[key in keyof A as key extends keyof B ? never : key]: A[key];
} extends infer Collision ? {} extends Collision ? {
[key in keyof B]: B[key];
} : Prettify<Collision & {
[key in keyof B]: B[key];
}> : never;
export interface SingletonBase {
decorator: Record<string, unknown>;
store: Record<string, unknown>;
derive: Record<string, unknown>;
resolve: Record<string, unknown>;
}
export interface EphemeralType {
derive: SingletonBase['derive'];
resolve: SingletonBase['resolve'];
schema: MetadataBase['schema'];
}
export interface DefinitionBase {
type: Record<string, unknown>;
error: Record<string, Error>;
}
export type RouteBase = Record<string, unknown>;
export interface MetadataBase {
schema: RouteSchema;
macro: BaseMacro;
}
export interface RouteSchema {
body?: unknown;
headers?: unknown;
query?: unknown;
params?: unknown;
cookie?: unknown;
response?: unknown;
}
export type UnwrapSchema<Schema extends TSchema | string | undefined, Definitions extends Record<string, unknown> = {}> = undefined extends Schema ? unknown : Schema extends TSchema ? Static<NonNullable<Schema>> : Schema extends string ? Definitions extends Record<Schema, infer NamedSchema> ? NamedSchema : Definitions : unknown;
export interface UnwrapRoute<in out Schema extends InputSchema<any>, in out Definitions extends DefinitionBase['type'] = {}> {
body: UnwrapSchema<Schema['body'], Definitions>;
headers: UnwrapSchema<Schema['headers'], Definitions>;
query: UnwrapSchema<Schema['query'], Definitions>;
params: UnwrapSchema<Schema['params'], Definitions>;
cookie: UnwrapSchema<Schema['cookie'], Definitions>;
response: Schema['response'] extends TSchema | string ? UnwrapSchema<Schema['response'], Definitions> : Schema['response'] extends {
200: TAnySchema | string;
} ? {
[k in keyof Schema['response']]: UnwrapSchema<Schema['response'][k], Definitions>;
} : unknown | void;
}
export interface UnwrapGroupGuardRoute<in out Schema extends InputSchema<any>, in out Definitions extends Record<string, unknown> = {}, Path extends string = ''> {
body: UnwrapSchema<Schema['body'], Definitions>;
headers: UnwrapSchema<Schema['headers'], Definitions> extends infer A extends Record<string, unknown> ? A : undefined;
query: UnwrapSchema<Schema['query'], Definitions> extends infer A extends Record<string, unknown> ? A : undefined;
params: UnwrapSchema<Schema['params'], Definitions> extends infer A extends Record<string, unknown> ? A : Path extends `${string}/${':' | '*'}${string}` ? Record<GetPathParameter<Path>, string> : never;
cookie: UnwrapSchema<Schema['cookie'], Definitions> extends infer A extends Record<string, unknown> ? A : undefined;
response: Schema['response'] extends TSchema | string ? UnwrapSchema<Schema['response'], Definitions> : Schema['response'] extends {
[k in string]: TSchema | string;
} ? UnwrapSchema<Schema['response'][keyof Schema['response']], Definitions> : unknown | void;
}
export interface LifeCycleStore {
type?: ContentType;
start: GracefulHandler<any>[];
request: PreHandler<any, any>[];
parse: BodyHandler<any, any>[];
transform: TransformHandler<any, any>[];
beforeHandle: OptionalHandler<any, any>[];
afterHandle: AfterHandler<any, any>[];
mapResponse: MapResponse<any, any>[];
onResponse: VoidHandler<any, any>[];
trace: TraceHandler<any, any>[];
error: ErrorHandler<any, any, any>[];
stop: GracefulHandler<any>[];
}
export type LifeCycleEvent = 'start' | 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'response' | 'error' | 'stop';
export type ContentType = MaybeArray<(string & {}) | 'none' | 'text' | 'json' | 'formdata' | 'urlencoded' | 'arrayBuffer' | 'text/plain' | 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'>;
export type HTTPMethod = (string & {}) | 'ACL' | 'BIND' | 'CHECKOUT' | 'CONNECT' | 'COPY' | 'DELETE' | 'GET' | 'HEAD' | 'LINK' | 'LOCK' | 'M-SEARCH' | 'MERGE' | 'MKACTIVITY' | 'MKCALENDAR' | 'MKCOL' | 'MOVE' | 'NOTIFY' | 'OPTIONS' | 'PATCH' | 'POST' | 'PROPFIND' | 'PROPPATCH' | 'PURGE' | 'PUT' | 'REBIND' | 'REPORT' | 'SEARCH' | 'SOURCE' | 'SUBSCRIBE' | 'TRACE' | 'UNBIND' | 'UNLINK' | 'UNLOCK' | 'UNSUBSCRIBE' | 'ALL';
export interface InputSchema<Name extends string = string> {
body?: TSchema | Name;
headers?: TObject | Name;
query?: TObject | Name;
params?: TObject | Name;
cookie?: TObject | Name;
response?: TSchema | Record<number, TSchema> | Name | Record<number, Name | TSchema>;
}
export interface MergeSchema<in out A extends RouteSchema, in out B extends RouteSchema> {
body: undefined extends A['body'] ? B['body'] : A['body'];
headers: undefined extends A['headers'] ? B['headers'] : A['headers'];
query: undefined extends A['query'] ? B['query'] : A['query'];
params: undefined extends A['params'] ? B['params'] : A['params'];
cookie: undefined extends A['cookie'] ? B['cookie'] : A['cookie'];
response: undefined extends A['response'] ? B['response'] : A['response'];
}
export type Handler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>) => Route['response'] extends {
200: unknown;
} ? Response | MaybePromise<Route['response'][keyof Route['response']]> : Response | MaybePromise<Route['response']>;
export type InlineHandler<Route extends RouteSchema = {}, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = ((context: Context<Route, Singleton, Path>) => Route['response'] extends {
200: unknown;
} ? Response | MaybePromise<Route['response'][keyof Route['response']] | {
[Status in keyof Route['response']]: {
_type: Record<Status, Route['response'][Status]>;
[ELYSIA_RESPONSE]: Status;
};
}[keyof Route['response']]> : Response | MaybePromise<Route['response']>) | (unknown extends Route['response'] ? string | number | Object : Route['response'] extends {
200: unknown;
} ? Route['response'][keyof Route['response']] : Route['response']);
export type OptionalHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Handler<Route, Singleton, Path> extends (context: infer Context) => infer Returned ? (context: Context) => Returned | MaybePromise<void> : never;
export type AfterHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Handler<Route, Singleton, Path> extends (context: infer Context) => infer Returned ? (context: Prettify<{
response: Route['response'];
} & Context>) => Returned | MaybePromise<void> : never;
export type MapResponse<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = Handler<Omit<Route, 'response'> & {
response: MaybePromise<Response | undefined | void>;
}, Singleton & {
derive: {
response: Route['response'];
};
}, Path>;
export type VoidHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = (context: Context<Route, Singleton>) => MaybePromise<void>;
export type TransformHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, BasePath extends string = ''> = {
(context: Prettify<Context<Route, Omit<Singleton, 'resolve'> & {
resolve: {};
}, BasePath>>): MaybePromise<void>;
$elysiaHookType?: LifeCycleType;
$elysiaChecksum?: number;
$elysia?: 'derive' | 'resolve' | (string & {});
};
export type TraceEvent = 'request' | 'parse' | 'transform' | 'beforeHandle' | 'afterHandle' | 'error' | 'response' extends infer Events extends string ? Events | `${Events}.unit` | 'handle' | 'exit' : never;
export type TraceStream = {
id: number;
event: TraceEvent;
type: 'begin' | 'end';
time: number;
name?: string;
unit?: number;
};
export type TraceReporter = EventEmitter<{
[res in `res${number}.${number}`]: undefined;
} & {
event(stream: TraceStream): MaybePromise<void>;
}>;
export type TraceProcess<Type extends 'begin' | 'end' = 'begin' | 'end'> = Type extends 'begin' ? Prettify<{
name: string;
time: number;
skip: boolean;
end: Promise<TraceProcess<'end'>>;
children: Promise<TraceProcess<'begin'>>[];
}> : number;
export type TraceHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = {
(lifecycle: Prettify<{
context: Context<Route, Singleton>;
set: Context['set'];
id: number;
time: number;
} & {
[x in 'request' | 'parse' | 'transform' | 'beforeHandle' | 'handle' | 'afterHandle' | 'error' | 'response']: Promise<TraceProcess<'begin'>>;
} & {
store: Singleton['store'];
}>): MaybePromise<void>;
$elysiaHookType?: LifeCycleType;
$elysiaChecksum?: number;
};
export type TraceListener = EventEmitter<{
[event in TraceEvent | 'all']: (trace: TraceProcess) => MaybePromise<void>;
}>;
export type BodyHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Path extends string = ''> = (context: Context<Route, Singleton, Path>, contentType: string) => MaybePromise<any>;
export type PreHandler<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = (context: PreContext<Singleton>) => MaybePromise<Route['response'] | void>;
export type GracefulHandler<in Instance extends Elysia<any, any, any, any, any, any, any, any>> = (data: Instance) => any;
export type ErrorHandler<T extends Record<string, Error> = {}, Route extends RouteSchema = {}, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> = (context: Prettify<Omit<Context<Route, Singleton>, 'error'> & ({
request: Request;
code: 'UNKNOWN';
error: Readonly<Error>;
set: Context['set'];
} | {
request: Request;
code: 'VALIDATION';
error: Readonly<ValidationError>;
set: Context['set'];
} | {
request: Request;
code: 'NOT_FOUND';
error: Readonly<NotFoundError>;
set: Context['set'];
} | {
request: Request;
code: 'PARSE';
error: Readonly<ParseError>;
set: Context['set'];
} | {
request: Request;
code: 'INTERNAL_SERVER_ERROR';
error: Readonly<InternalServerError>;
set: Context['set'];
} | {
request: Request;
code: 'INVALID_COOKIE_SIGNATURE';
error: Readonly<InvalidCookieSignature>;
set: Context['set'];
} | {
[K in keyof T]: {
request: Request;
code: K;
error: Readonly<T[K]>;
set: Context['set'];
};
}[keyof T])>) => any | Promise<any>;
export type Isolate<T> = {
[P in keyof T]: T[P];
};
type LocalHookDetail = Partial<OpenAPIV3.OperationObject>;
export type LocalHook<LocalSchema extends InputSchema, Schema extends RouteSchema, Singleton extends SingletonBase, Errors extends Record<string, Error>, Extension extends BaseMacro, Path extends string = '', TypedRoute extends RouteSchema = Schema extends {
params: Record<string, unknown>;
} ? Schema : Schema & {
params: undefined extends Schema['params'] ? Record<GetPathParameter<Path>, string> : Schema['params'];
}> = (LocalSchema extends {} ? LocalSchema : Isolate<LocalSchema>) & Extension & {
/**
* Short for 'Content-Type'
*
* Available:
* - 'none': do not parse body
* - 'text' / 'text/plain': parse body as string
* - 'json' / 'application/json': parse body as json
* - 'formdata' / 'multipart/form-data': parse body as form-data
* - 'urlencoded' / 'application/x-www-form-urlencoded: parse body as urlencoded
* - 'arraybuffer': parse body as readable stream
*/
type?: ContentType;
detail?: LocalHookDetail;
/**
* Custom body parser
*/
parse?: MaybeArray<BodyHandler<TypedRoute, Singleton>>;
/**
* Transform context's value
*/
transform?: MaybeArray<TransformHandler<TypedRoute, Singleton>>;
/**
* Execute before main handler
*/
beforeHandle?: MaybeArray<OptionalHandler<TypedRoute, Singleton>>;
/**
* Execute after main handler
*/
afterHandle?: MaybeArray<AfterHandler<TypedRoute, Singleton>>;
/**
* Execute after main handler
*/
mapResponse?: MaybeArray<MapResponse<TypedRoute, Singleton>>;
/**
* Catch error
*/
error?: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>;
/**
* Custom body parser
*/
onResponse?: MaybeArray<VoidHandler<TypedRoute, Singleton>>;
};
export type ComposedHandler = {
(context: Context): MaybePromise<Response>;
compose(): Function;
composed: Function;
};
export interface InternalRoute {
method: HTTPMethod;
path: string;
composed: ComposedHandler | Response | null;
handler: Handler;
hooks: LocalHook<any, any, any, any, any, any, any>;
}
export type SchemaValidator = {
body?: TypeCheck<any>;
headers?: TypeCheck<any>;
query?: TypeCheck<any>;
params?: TypeCheck<any>;
cookie?: TypeCheck<any>;
response?: Record<number, TypeCheck<any>>;
};
export type ListenCallback = (server: Server) => MaybePromise<void>;
export type AddPrefix<Prefix extends string, T> = {
[K in keyof T as Prefix extends string ? `${Prefix}${K & string}` : K]: T[K];
};
export type AddPrefixCapitalize<Prefix extends string, T> = {
[K in keyof T as `${Prefix}${Capitalize<K & string>}`]: T[K];
};
export type AddSuffix<Suffix extends string, T> = {
[K in keyof T as `${K & string}${Suffix}`]: T[K];
};
export type AddSuffixCapitalize<Suffix extends string, T> = {
[K in keyof T as `${K & string}${Capitalize<Suffix>}`]: T[K];
};
export type Checksum = {
name?: string;
seed?: unknown;
checksum: number;
stack?: string;
routes?: InternalRoute[];
decorators?: SingletonBase['decorator'];
store?: SingletonBase['store'];
type?: DefinitionBase['type'];
error?: DefinitionBase['error'];
dependencies?: Record<string, Checksum[]>;
derive?: {
fn: string;
stack: string;
}[];
resolve?: {
fn: string;
stack: string;
}[];
};
export type BaseMacro = Record<string, Record<string, unknown> | ((...a: any) => unknown)>;
export type MacroToProperty<in out T extends BaseMacro> = Prettify<{
[K in keyof T]: T[K] extends Function ? T[K] extends (a: infer Params) => any ? Params | undefined : T[K] : T[K] extends BaseMacro ? MacroToProperty<T[K]> : never;
}>;
export type ElysiaFn = {
(...a: any[]): any;
$elysiaHookType?: LifeCycleType;
$elysiaChecksum?: number;
};
export interface MacroManager<in out TypedRoute extends RouteSchema = {}, in out Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, in out Errors extends Record<string, Error> = {}> {
onParse(fn: MaybeArray<BodyHandler<TypedRoute, Singleton>>): unknown;
onParse(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<BodyHandler<TypedRoute, Singleton>>): unknown;
onTransform(fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
onTransform(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
onBeforeHandle(fn: MaybeArray<OptionalHandler<TypedRoute, Singleton>>): unknown;
onBeforeHandle(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<OptionalHandler<TypedRoute, Singleton>>): unknown;
onAfterHandle(fn: MaybeArray<AfterHandler<TypedRoute, Singleton>>): unknown;
onAfterHandle(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<AfterHandler<TypedRoute, Singleton>>): unknown;
onError(fn: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>): unknown;
onError(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<ErrorHandler<Errors, TypedRoute, Singleton>>): unknown;
onResponse(fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
onResponse(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<VoidHandler<TypedRoute, Singleton>>): unknown;
mapResponse(fn: MaybeArray<MapResponse<TypedRoute, Singleton>>): unknown;
mapResponse(options: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
}, fn: MaybeArray<MapResponse<TypedRoute, Singleton>>): unknown;
events: {
global: Prettify<LifeCycleStore & RouteSchema>;
local: Prettify<LifeCycleStore & RouteSchema>;
};
}
export type MacroQueue = {
(manager: MacroManager<any, any, any>): unknown;
$elysiaChecksum?: number;
}[];
type _CreateEden<Path extends string, Property extends Record<string, unknown> = {}> = Path extends `${infer Start}/${infer Rest}` ? {
[x in Start]: _CreateEden<Rest, Property>;
} : {
[x in Path]: Property;
};
export type CreateEden<Path extends string, Property extends Record<string, unknown> = {}> = Path extends `/${infer Rest}` ? _CreateEden<Rest, Property> : Path extends '' ? _CreateEden<'index', Property> : _CreateEden<Path, Property>;
export type ComposeElysiaResponse<Response, Handle> = Handle extends (...a: any[]) => infer A ? _ComposeElysiaResponse<Response, Awaited<A>> : _ComposeElysiaResponse<Response, Awaited<Handle>>;
type _ComposeElysiaResponse<Response, Handle> = Prettify<unknown extends Response ? {
200: Exclude<Handle, {
[ELYSIA_RESPONSE]: any;
}>;
} & {
[ErrorResponse in Extract<Handle, {
response: any;
}> as ErrorResponse extends {
[ELYSIA_RESPONSE]: infer Status extends number;
} ? Status : never]: ErrorResponse['response'];
} : Response extends {
200: unknown;
} ? Response : {
200: Response;
}>;
export type MergeElysiaInstances<Instances extends Elysia<any, any, any, any, any, any>[] = [], Prefix extends string = '', Scoped extends boolean = false, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}, Definitions extends DefinitionBase = {
type: {};
error: {};
}, Metadata extends MetadataBase = {
schema: {};
macro: {};
}, Routes extends RouteBase = {}> = Instances extends [
infer Current extends Elysia<any, any, any, any, any, any>,
...infer Rest extends Elysia<any, any, any, any, any, any>[]
] ? Current['_types']['Scoped'] extends true ? MergeElysiaInstances<Rest, Prefix, Scoped, Singleton, Definitions, Metadata, Routes> : MergeElysiaInstances<Rest, Prefix, Scoped, Singleton & Current['_types']['Singleton'], Definitions & Current['_types']['Definitions'], Metadata & Current['_types']['Metadata'], Routes & (Prefix extends `` ? Current['_routes'] : AddPrefix<Prefix, Current['_routes']>)> : Elysia<Prefix, Scoped, {
decorator: Prettify<Singleton['decorator']>;
store: Prettify<Singleton['store']>;
derive: Prettify<Singleton['derive']>;
resolve: Prettify<Singleton['resolve']>;
}, {
type: Prettify<Definitions['type']>;
error: Prettify<Definitions['error']>;
}, {
schema: Prettify<Metadata['schema']>;
macro: Prettify<Metadata['macro']>;
}, Routes>;
export type LifeCycleType = 'global' | 'local' | 'scoped';
export type ExcludeElysiaResponse<T> = Exclude<Awaited<T>, {
[ELYSIA_RESPONSE]: any;
}>;
export {};

@@ -1,10 +0,192 @@

import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
export { as as InvertedStatusMap, ay as PromiseGroup, ar as StatusMap, ap as asHookType, am as checksum, aw as createMacroManager, aq as filterGlobalHook, an as getCookieValidator, al as getResponseSchemaValidator, ak as getSchemaValidator, ax as isNumericString, af as mergeCookie, ae as mergeDeep, aj as mergeHook, ao as mergeLifeCycle, ag as mergeObjectArray, ai as mergeResponse, ah as primitiveHooks, ad as replaceUrlPath, at as signCookie, av as traceBackMacro, au as unsignCookie } from './dynamic-handle-DrPvRYu3.js';
import 'bun';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import './error.js';
import 'undici-types';
import '@sinclair/typebox/system';
import { TSchema } from '@sinclair/typebox';
import { TypeCheck } from '@sinclair/typebox/compiler';
import type { LifeCycleStore, LocalHook, MaybeArray, InputSchema, ElysiaFn, LifeCycleType } from './types';
import type { CookieOptions } from './cookies';
export declare const replaceUrlPath: (url: string, pathname: string) => string;
export declare const mergeDeep: <A extends Record<string, any>, B extends Record<string, any>>(target: A, source: B, { skipKeys }?: {
skipKeys?: string[] | undefined;
}) => A & B;
export declare const mergeCookie: <const A extends Object, const B extends Object>(a: A, b: B) => A & B;
export declare const mergeObjectArray: <T extends ElysiaFn>(a?: T | T[], b?: T | T[]) => T[];
export declare const primitiveHooks: readonly ["start", "request", "parse", "transform", "resolve", "beforeHandle", "afterHandle", "onResponse", "mapResponse", "trace", "error", "stop", "body", "headers", "params", "query", "response", "type", "detail"];
export declare const mergeResponse: (a: InputSchema['response'], b: InputSchema['response']) => string | TSchema | {
[x: number]: any;
} | undefined;
export declare const mergeHook: (a?: LocalHook<any, any, any, any, any, any, any> | LifeCycleStore, b?: LocalHook<any, any, any, any, any, any, any>) => LifeCycleStore;
export declare const getSchemaValidator: (s: TSchema | string | undefined, { models, additionalProperties, dynamic }: {
models?: Record<string, TSchema> | undefined;
additionalProperties?: boolean | undefined;
dynamic?: boolean | undefined;
}) => TypeCheck<TSchema> | undefined;
export declare const getResponseSchemaValidator: (s: InputSchema['response'] | undefined, { models, additionalProperties, dynamic }: {
models?: Record<string, TSchema> | undefined;
additionalProperties?: boolean | undefined;
dynamic?: boolean | undefined;
}) => Record<number, TypeCheck<any>> | undefined;
export declare const checksum: (s: string) => number;
export declare const getCookieValidator: ({ validator, defaultConfig, config, dynamic, models }: {
validator: TSchema | string | undefined;
defaultConfig: CookieOptions | undefined;
config: CookieOptions;
dynamic: boolean;
models: Record<string, TSchema> | undefined;
}) => TypeCheck<TSchema> | undefined;
export declare const mergeLifeCycle: (a: LifeCycleStore, b: LifeCycleStore | LocalHook<any, any, any, any, any, any, any>, checksum?: number) => LifeCycleStore;
export declare const asHookType: <T extends MaybeArray<ElysiaFn> | undefined>(fn: T, inject: LifeCycleType, { skipIfHasType }?: {
skipIfHasType?: boolean | undefined;
}) => T;
export declare const filterGlobalHook: (hook: LocalHook<any, any, any, any, any, any, any>) => LocalHook<any, any, any, any, any, any, any>;
export declare const StatusMap: {
readonly Continue: 100;
readonly 'Switching Protocols': 101;
readonly Processing: 102;
readonly 'Early Hints': 103;
readonly OK: 200;
readonly Created: 201;
readonly Accepted: 202;
readonly 'Non-Authoritative Information': 203;
readonly 'No Content': 204;
readonly 'Reset Content': 205;
readonly 'Partial Content': 206;
readonly 'Multi-Status': 207;
readonly 'Already Reported': 208;
readonly 'Multiple Choices': 300;
readonly 'Moved Permanently': 301;
readonly Found: 302;
readonly 'See Other': 303;
readonly 'Not Modified': 304;
readonly 'Temporary Redirect': 307;
readonly 'Permanent Redirect': 308;
readonly 'Bad Request': 400;
readonly Unauthorized: 401;
readonly 'Payment Required': 402;
readonly Forbidden: 403;
readonly 'Not Found': 404;
readonly 'Method Not Allowed': 405;
readonly 'Not Acceptable': 406;
readonly 'Proxy Authentication Required': 407;
readonly 'Request Timeout': 408;
readonly Conflict: 409;
readonly Gone: 410;
readonly 'Length Required': 411;
readonly 'Precondition Failed': 412;
readonly 'Payload Too Large': 413;
readonly 'URI Too Long': 414;
readonly 'Unsupported Media Type': 415;
readonly 'Range Not Satisfiable': 416;
readonly 'Expectation Failed': 417;
readonly "I'm a teapot": 418;
readonly 'Misdirected Request': 421;
readonly 'Unprocessable Content': 422;
readonly Locked: 423;
readonly 'Failed Dependency': 424;
readonly 'Too Early': 425;
readonly 'Upgrade Required': 426;
readonly 'Precondition Required': 428;
readonly 'Too Many Requests': 429;
readonly 'Request Header Fields Too Large': 431;
readonly 'Unavailable For Legal Reasons': 451;
readonly 'Internal Server Error': 500;
readonly 'Not Implemented': 501;
readonly 'Bad Gateway': 502;
readonly 'Service Unavailable': 503;
readonly 'Gateway Timeout': 504;
readonly 'HTTP Version Not Supported': 505;
readonly 'Variant Also Negotiates': 506;
readonly 'Insufficient Storage': 507;
readonly 'Loop Detected': 508;
readonly 'Not Extended': 510;
readonly 'Network Authentication Required': 511;
};
export declare const InvertedStatusMap: {
readonly 100: "Continue";
readonly 101: "Switching Protocols";
readonly 102: "Processing";
readonly 103: "Early Hints";
readonly 200: "OK";
readonly 201: "Created";
readonly 202: "Accepted";
readonly 203: "Non-Authoritative Information";
readonly 204: "No Content";
readonly 205: "Reset Content";
readonly 206: "Partial Content";
readonly 207: "Multi-Status";
readonly 208: "Already Reported";
readonly 300: "Multiple Choices";
readonly 301: "Moved Permanently";
readonly 302: "Found";
readonly 303: "See Other";
readonly 304: "Not Modified";
readonly 307: "Temporary Redirect";
readonly 308: "Permanent Redirect";
readonly 400: "Bad Request";
readonly 401: "Unauthorized";
readonly 402: "Payment Required";
readonly 403: "Forbidden";
readonly 404: "Not Found";
readonly 405: "Method Not Allowed";
readonly 406: "Not Acceptable";
readonly 407: "Proxy Authentication Required";
readonly 408: "Request Timeout";
readonly 409: "Conflict";
readonly 410: "Gone";
readonly 411: "Length Required";
readonly 412: "Precondition Failed";
readonly 413: "Payload Too Large";
readonly 414: "URI Too Long";
readonly 415: "Unsupported Media Type";
readonly 416: "Range Not Satisfiable";
readonly 417: "Expectation Failed";
readonly 418: "I'm a teapot";
readonly 421: "Misdirected Request";
readonly 422: "Unprocessable Content";
readonly 423: "Locked";
readonly 424: "Failed Dependency";
readonly 425: "Too Early";
readonly 426: "Upgrade Required";
readonly 428: "Precondition Required";
readonly 429: "Too Many Requests";
readonly 431: "Request Header Fields Too Large";
readonly 451: "Unavailable For Legal Reasons";
readonly 500: "Internal Server Error";
readonly 501: "Not Implemented";
readonly 502: "Bad Gateway";
readonly 503: "Service Unavailable";
readonly 504: "Gateway Timeout";
readonly 505: "HTTP Version Not Supported";
readonly 506: "Variant Also Negotiates";
readonly 507: "Insufficient Storage";
readonly 508: "Loop Detected";
readonly 510: "Not Extended";
readonly 511: "Network Authentication Required";
};
export type StatusMap = typeof StatusMap;
export type InvertedStatusMap = typeof InvertedStatusMap;
export declare const signCookie: (val: string, secret: string | null) => Promise<string>;
export declare const unsignCookie: (input: string, secret: string | null) => Promise<string | false>;
export declare const traceBackMacro: (extension: unknown, property: Record<string, unknown>, hooks?: Record<string, unknown>) => void;
export declare const createMacroManager: ({ globalHook, localHook }: {
globalHook: LifeCycleStore;
localHook: LocalHook<any, any, any, any, any, any, any>;
}) => (stackName: keyof LifeCycleStore) => (type: {
insert?: 'before' | 'after';
stack?: 'global' | 'local';
} | MaybeArray<Function>, fn?: MaybeArray<Function>) => void;
export declare const isNumericString: (message: string) => boolean;
export declare class PromiseGroup implements PromiseLike<void> {
onError: (error: any) => void;
root: Promise<any> | null;
promises: Promise<any>[];
constructor(onError?: (error: any) => void);
/**
* The number of promises still being awaited.
*/
get size(): number;
/**
* Add a promise to the group.
* @returns The promise that was added.
*/
add<T>(promise: Promise<T>): Promise<T>;
private drain;
then<TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;
}

@@ -1,10 +0,33 @@

import 'bun';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
export { aG as ElysiaWS, aF as websocket } from '../dynamic-handle-DrPvRYu3.js';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import '../error.js';
import 'undici-types';
import '@sinclair/typebox/system';
/// <reference types="bun-types" />
/// <reference types="bun-types" />
import type { ServerWebSocket, WebSocketHandler } from 'bun';
import type { TSchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
import type { Context } from '../context';
import type { SingletonBase, RouteSchema } from '../types';
export declare const websocket: WebSocketHandler<any>;
export declare class ElysiaWS<WS extends ServerWebSocket<{
id?: string;
validator?: TypeCheck<TSchema>;
}>, Route extends RouteSchema = RouteSchema, Singleton extends SingletonBase = {
decorator: {};
store: {};
derive: {};
resolve: {};
}> {
raw: WS;
data: Context<Route, Singleton>;
validator?: TypeCheck<TSchema>;
constructor(raw: WS, data: Context<Route, Singleton>);
get id(): string;
set id(newID: string);
get publish(): (topic: string, data?: Route['response'], compress?: boolean) => this;
get send(): (data: Route['response']) => this;
get subscribe(): (room: string) => this;
get unsubscribe(): (room: string) => this;
get cork(): (callback: () => this) => this;
get close(): () => this;
get terminate(): () => void;
get isSubscribed(): (topic: string) => boolean;
get remoteAddress(): string;
}

@@ -1,10 +0,57 @@

import 'bun';
import '@sinclair/typebox';
import '@sinclair/typebox/compiler';
export { aH as WS } from '../dynamic-handle-DrPvRYu3.js';
import 'memoirist';
import 'openapi-types';
import 'eventemitter3';
import '../error.js';
import 'undici-types';
import '@sinclair/typebox/system';
/// <reference types="bun-types" />
/// <reference types="bun-types" />
/// <reference types="bun-types" />
import type { ServerWebSocket, WebSocketHandler } from 'bun';
import type { TSchema } from '@sinclair/typebox';
import type { TypeCheck } from '@sinclair/typebox/compiler';
import type { ElysiaWS } from '.';
import type { Context } from '../context';
import type { SingletonBase, Handler, VoidHandler, ErrorHandler, InputSchema, RouteSchema, Isolate, GetPathParameter, MaybeArray, BaseMacro } from '../types';
export declare namespace WS {
type Config = Omit<WebSocketHandler, 'open' | 'message' | 'close' | 'drain'>;
type LocalHook<LocalSchema extends InputSchema, Route extends RouteSchema, Singleton extends SingletonBase, Errors extends Record<string, Error>, Extension extends BaseMacro, Path extends string = '', TypedRoute extends RouteSchema = keyof Route['params'] extends never ? Route & {
params: Record<GetPathParameter<Path>, string>;
} : Route> = (LocalSchema extends {} ? LocalSchema : Isolate<LocalSchema>) & Extension & Omit<Partial<WebSocketHandler<Context>>, 'open' | 'message' | 'close' | 'drain' | 'publish' | 'publishToSelf'> & (ElysiaWS<ServerWebSocket<{
validator?: TypeCheck<TSchema>;
}>, TypedRoute, Singleton> extends infer WS ? {
transform?: MaybeArray<VoidHandler<TypedRoute, Singleton>>;
transformMessage?: MaybeArray<VoidHandler<TypedRoute, Singleton>>;
beforeHandle?: MaybeArray<Handler<TypedRoute, Singleton>>;
/**
* Catch error
*/
error?: MaybeArray<ErrorHandler<Errors>>;
/**
* Headers to register to websocket before `upgrade`
*/
upgrade?: Bun.HeadersInit | ((context: Context) => Bun.HeadersInit);
/**
* The {@link ServerWebSocket} has been opened
*
* @param ws The {@link ServerWebSocket} that was opened
*/
open?: (ws: WS) => void | Promise<void>;
/**
* Handle an incoming message to a {@link ServerWebSocket}
*
* @param ws The {@link ServerWebSocket} that received the message
* @param message The message received
*
* To change `message` to be an `ArrayBuffer` instead of a `Uint8Array`, set `ws.binaryType = "arraybuffer"`
*/
message?: (ws: WS, message: Route['body']) => any;
/**
* The {@link ServerWebSocket} is being closed
* @param ws The {@link ServerWebSocket} that was closed
* @param code The close code
* @param message The close message
*/
close?: (ws: WS, code: number, message: string) => void | Promise<void>;
/**
* The {@link ServerWebSocket} is ready for more data
*
* @param ws The {@link ServerWebSocket} that is ready
*/
drain?: (ws: WS) => void | Promise<void>;
} : {});
}
{
"name": "elysia",
"description": "Ergonomic Framework for Human",
"version": "1.0.4",
"version": "1.0.5",
"author": {

@@ -15,72 +15,60 @@ "name": "saltyAom",

".": {
"bun": "./dist/bun/index.js",
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/cjs/index.js",
"types": "./dist/index.d.ts"
"require": "./dist/cjs/index.js"
},
"./ws": {
"bun": "./dist/ws/index.js",
"types": "./dist/ws/index.d.ts",
"import": "./dist/ws/index.mjs",
"require": "./dist/cjs/ws/index.js",
"types": "./dist/ws/index.d.ts"
"require": "./dist/cjs/ws/index.js"
},
"./compose": {
"bun": "./dist/compose.js",
"types": "./dist/compose.d.ts",
"import": "./dist/compose.mjs",
"require": "./dist/cjs/compose.js",
"types": "./dist/compose.d.ts"
"require": "./dist/cjs/compose.js"
},
"./context": {
"bun": "./dist/context.js",
"types": "./dist/context.d.ts",
"import": "./dist/context.mjs",
"require": "./dist/cjs/context.js",
"types": "./dist/context.d.ts"
"require": "./dist/cjs/context.js"
},
"./cookie": {
"bun": "./dist/cookie.js",
"types": "./dist/cookie.d.ts",
"import": "./dist/cookie.mjs",
"require": "./dist/cjs/cookie.js",
"types": "./dist/cookie.d.ts"
"require": "./dist/cjs/cookie.js"
},
"./error": {
"bun": "./dist/error.js",
"types": "./dist/error.d.ts",
"import": "./dist/error.mjs",
"require": "./dist/cjs/error.js",
"types": "./dist/error.d.ts"
"require": "./dist/cjs/error.js"
},
"./handler": {
"bun": "./dist/handler.js",
"types": "./dist/handler.d.ts",
"import": "./dist/handler.mjs",
"require": "./dist/cjs/handler.js",
"types": "./dist/handler.d.ts"
"require": "./dist/cjs/handler.js"
},
"./schema": {
"bun": "./dist/schema.js",
"types": "./dist/schema.d.ts",
"import": "./dist/schema.mjs",
"require": "./dist/cjs/schema.js",
"types": "./dist/schema.d.ts"
"require": "./dist/cjs/schema.js"
},
"./trace": {
"bun": "./dist/trace.js",
"types": "./dist/trace.d.ts",
"import": "./dist/trace.mjs",
"require": "./dist/cjs/trace.js",
"types": "./dist/trace.d.ts"
"require": "./dist/cjs/trace.js"
},
"./type-system": {
"bun": "./dist/type-system.js",
"types": "./dist/type-system.d.ts",
"import": "./dist/type-system.mjs",
"require": "./dist/cjs/type-system.js",
"types": "./dist/type-system.d.ts"
"require": "./dist/cjs/type-system.js"
},
"./types": {
"bun": "./dist/types.js",
"types": "./dist/types.d.ts",
"import": "./dist/types.mjs",
"require": "./dist/cjs/types.js",
"types": "./dist/types.d.ts"
"require": "./dist/cjs/types.js"
},
"./utils": {
"bun": "./dist/utils.js",
"types": "./dist/utils.d.ts",
"import": "./dist/utils.mjs",
"require": "./dist/cjs/utils.js",
"types": "./dist/utils.d.ts"
"require": "./dist/cjs/utils.js"
}

@@ -130,5 +118,3 @@ },

"memoirist": "0.1.6",
"ts-toolbelt": "^9.6.0",
"tsup": "^8.0.2",
"type-fest": "^4.10.1",
"typescript": "^5.4.2"

@@ -135,0 +121,0 @@ },

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc