@lunoxjs/core
Version:
Laravel-Flavoured NodeJs framework
1,084 lines (999 loc) • 37.1 kB
TypeScript
import { Middleware as Middleware$1, IError, Response as Response$1, Request as Request$1, Polka } from 'polka';
import { File } from 'formidable';
import * as express_session from 'express-session';
import { Session, Store } from 'express-session';
import { Validator as Validator$1 } from '@kodepandai/node-input-validator';
import { StorageManager } from '@kodepandai/flydrive';
import { AsyncLocalStorage } from 'async_hooks';
import { Command as Command$1 } from 'commander';
declare class Repository {
static symbol: symbol;
/** All configuration items */
protected items: ObjectOf<any>;
constructor(items: ObjectOf<any>);
/**
* Determine if the given configuration value exists.
*/
has(key: string): boolean;
/**
* Get the specified configuration value.
*/
get<T = any>(key?: string, defaultValue?: T): T;
/**
* Get all of the configuration items for the application.
*/
all(): ObjectOf<any>;
/**
* Set a given configuration value.
*/
set(key: string, value: any | null): void;
}
interface Binding {
concrete: Concrete;
shared: boolean;
}
declare class Container {
/** The container's shared instances. */
instances: Record<string | symbol, any>;
/** The container's bindings. */
protected bindings: Record<string | symbol, Binding>;
/** Register a binding with the container. */
bind(abstract: string | symbol, concrete: Concrete, shared?: boolean): void;
/** Register shared binding in container. */
singleton(abstract: string | symbol, concrete: Concrete): void;
/** Instantiate a concrete instance of the given type. */
build<T>(abstract: string | symbol, params?: Record<string, any>): T;
/** Resolve the given type from the container. */
make<T = any>(abstract: string | symbol, params?: {}): T;
/** Register an existing instance as shared in the container. */
instance(abstract: string | symbol, instance: any): any;
}
interface Bootstrapper {
bootstrap: (app: Application) => Promise<void>;
}
declare class Command {
protected lunox: Application;
SUCCESS: 0;
FAILURE: 1;
INVALID: 2;
protected signature: string;
protected description: string;
protected args: ObjectOf<string>;
protected opts: ObjectOf<any>;
handle(): Promise<0 | 1 | 2>;
getSignature(): string;
getDescription(): string;
setArguments(args: ObjectOf<string>): void;
setOptions(opts: ObjectOf<any>): void;
setLunox(lunox: Application): void;
arguments(): ObjectOf<string>;
argument(key: string): string;
options(): ObjectOf<any>;
option(key: string): any;
protected info(message: string): void;
protected line(message: string): void;
protected error(message: string): void;
protected newLine(line?: number): void;
protected comment(message: string): void;
tryCommand(name: string, run: () => Promise<void>, onError: (error: string) => void): Promise<void>;
shellExec(command: string, watch?: boolean): Promise<void>;
}
declare class Kernel$1 {
protected app: Application;
protected program: Command$1;
protected bootstrappers: Class<Bootstrapper>[];
constructor(app: Application);
handle(): Promise<void>;
/**
* Register built in commans for the application
*/
protected builtinCommands(): Promise<void>;
/**
* Register the Closure based commands for the application.
*/
protected commands(): Promise<void>;
protected load(paths: string): Promise<void>;
protected registerCommand(commandInstance: Command): void;
}
declare abstract class ServiceProvider {
protected app: Application;
constructor(app: Application);
register(): Promise<void>;
boot(): Promise<void>;
commands(commands: (typeof Command)[]): void;
}
declare class Cookie {
protected name: string;
protected value: any;
protected expires: number;
protected path: string;
protected domain: string | undefined | null;
protected secure: boolean;
protected httpOnly: boolean;
protected raw: boolean;
protected sameSite: "lax" | "strict" | "none" | undefined | null;
constructor(name: string, value: any, expires?: number, path?: string, domain?: string | undefined | null, secure?: boolean, httpOnly?: boolean, raw?: boolean, sameSite?: "lax" | "strict" | "none" | undefined | null);
static fromString(_cookie: string): Cookie | null;
static getExpiresTimeFromLifeTime(lifetime: number | string): number;
getName(): string;
getExpiresTime(): number;
getPath(): string;
getDomain(): string | null | undefined;
isSecure(): boolean;
isHttpOnly(): boolean;
isRaw(): boolean;
getSameSite(): "lax" | "strict" | "none" | null | undefined;
getValue(): any;
toString(): string;
}
declare class Validator extends Validator$1 {
protected _inputs: ObjectOf<any>;
constructor(data: ObjectOf<any>, rules: ObjectOf<any>, messages: ObjectOf<any>, customAttributes?: ObjectOf<any>);
fails(): Promise<boolean>;
validate(inputs?: ObjectOf<any>): Promise<any>;
}
interface Rule {
name: string;
passes: (args: string[] | undefined, value: any) => Promise<boolean>;
message?: string;
}
declare class Factory {
static symbol: symbol;
protected app: Application;
constructor(app: Application);
make(data: ObjectOf<any>, rules: ObjectOf<string>, messages?: ObjectOf<string>, customAttributes?: ObjectOf<string>): Validator;
extend(rule: Rule): void;
}
declare class FormRequest extends _default$a {
/**
* validator instance.
*/
protected validator: Validator | null;
/**
* Get rules for validator.
*/
rules(): Record<string, any>;
/**
* Get custom messages for validator errors.
*/
messages(): Record<string, any>;
/**
* Set validator instance.
*/
setValidator(validator: Validator): this;
/**
* Get custom attributes for validator errors.
*/
attributes(): Record<string, any>;
/**
* Validate this form request.
*/
validateForm(): Promise<any>;
/**
* Create default validator instance
*/
protected createDefaultValidator(factory: Factory): Validator;
/**
* Get validator instance for the request.
*/
protected getValidatorInstance(): Validator;
}
type NativeMiddleware = Middleware$1;
type NextFunction = (req: Request) => Response;
type MiddlewareStack = null | Middleware | string | (Middleware | string)[];
interface Middleware {
handle?: (req: Request, next: NextFunction, ...args: any[]) => Promise<Response>;
handleAfter?: (res: Response, req: Request) => Promise<Response>;
handleNative?: NativeMiddleware;
}
declare class Kernel {
protected app: Application;
protected middleware: (Middleware | Class<Middleware>)[];
protected middlewareGroups: Record<string, (Middleware | Class<Middleware>)[]>;
protected routeMiddleware: Record<string, Middleware | Class<Middleware>>;
protected bootstrappers: Class<Bootstrapper>[];
constructor(app: Application);
start(): Promise<Application>;
private handleMiddleware;
private send;
protected reportException(e: string | IError): void;
protected renderException(req: Request, e: string | IError): Promise<Response>;
}
type CipherTypes = "aes-128-cbc" | "aes-256-cbc" | "aes-128-gcm" | "aes-256-gcm";
interface JsonPayload {
iv: string;
mac: string;
value: string;
}
declare class Encrypter {
static symbol: symbol;
protected key: Buffer;
protected cipher: CipherTypes;
private static supportedCiphers;
constructor(key: Buffer, cipher?: CipherTypes);
getKey(): Buffer;
static supported(key: Buffer, cipher: CipherTypes): boolean;
static generateKey(cipher: CipherTypes): Buffer;
encrypt(value: any, needSerialize?: boolean): string;
encryptString(value: string): string;
decrypt(payloadString: string, needUnserialize?: boolean): any;
decryptString(payloadString: string): any;
hash(iv: string, value: string): string;
hashHmac(algoritm: "sha1" | "sha256", data: string, key: Buffer): string;
protected getJsonPayload(payload: string): JsonPayload;
protected isValidPayload(payload: ObjectOf<any>): boolean;
protected isValidMac(payload: JsonPayload): boolean;
static hashEquals(answer: string, guess: string): boolean;
static base64Encode(value: string | Buffer): string;
static base64Decode(value: string): Buffer;
}
interface AppConfig {
name: string;
env: string;
key: string;
cipher: CipherTypes;
providers: (typeof ServiceProvider)[];
}
interface SessionConfig {
driver: "file" | "cookie" | "database";
lifetime: number;
files: string;
table: string;
cookie: string;
path: string;
domain?: string;
http_only: boolean;
same_site: "lax" | "strict" | "none" | null;
secure: boolean;
}
declare class VerifyCsrfToken implements Middleware {
protected app: Application;
protected encrypter: Encrypter;
protected except: string[];
protected addHttpCookie: boolean;
constructor();
handle(req: Request, next: NextFunction): Promise<Response>;
protected isReading(req: Request): boolean;
protected runningUnitTests(): boolean | null;
protected inExceptArray(req: Request): boolean;
protected tokensMatch(req: Request): boolean;
protected getTokenFromRequest(req: Request): any;
shouldAddXsrfTokenCookie(): boolean;
protected addCookieToResponse(req: Request, res: Response): void;
protected newCookie(req: Request, config: SessionConfig): Cookie;
}
interface ResponseHeaders {
[key: string]: any;
getCookies: () => Cookie[];
setCookie: (cookie: Cookie) => void;
}
declare class Response {
protected original: any;
protected status: number;
protected _headers: Record<string, any>;
protected res?: Response$1;
protected cookies: Cookie[];
constructor(content: any, status?: number, headers?: Record<string, any>);
getCookies(): Cookie[];
setCookie(cookie: Cookie): void;
getOriginal(): any;
getStatus(): number;
get headers(): ResponseHeaders;
setCookiesToHeaders(): void;
setOriginal(data: any): this;
setServerResponse(res: Response$1): this;
mergeResponse(res: Response): void;
getServerResponse(): Response$1 | undefined;
setHeader(key: string, value: string | string[]): this;
}
interface ResponseRenderer {
render(request: Request): Promise<Response>;
}
declare class Application extends Container {
protected _basePath: string;
protected isBooted: boolean;
config: Repository;
responseRenderers: Class<ResponseRenderer>[];
protected isRunningInConsole: boolean | null;
constructor(basePath?: string | null);
setBasePath(basePath: string | null): string;
basePath(_path?: string): string;
configPath(_path?: string): string;
storagePath(_path?: string): string;
bindPaths(): void;
bootstrapWith(bootstrappers: Class<Bootstrapper>[]): Promise<void>;
register(provider: ServiceProvider): Promise<void>;
registerConfiguredProviders(): Promise<void>;
boot(): Promise<void>;
protected registerBaseServiceProviders(): Promise<void>;
abort(code: number, message?: string, headers?: ObjectOf<string>): void;
runningInConsole(): boolean | null;
runingUnitTests(): boolean;
}
declare class UploadedFile {
protected file: File | File[];
constructor(file: File | File[]);
path(): string;
getClientOriginalExtension(): string;
getClientOriginalName(): string | null;
getClientMimeType(): string | null;
move(directory: string, name?: string | null): void;
private failIfArray;
private moveFile;
}
interface ExtendedRequest extends Request$1 {
session?: Session;
}
interface ExtendedSession extends Partial<Session> {
__old?: any;
__lastAccess?: any;
sessionStore?: Store;
[key: string]: any;
}
declare class SessionManager {
static symbol: symbol;
protected app: Application;
protected session: ExtendedSession;
protected request: Request;
protected started: boolean;
constructor(app: Application);
setRequest(request: Request): this;
get(key: string): any;
/**
* get flashed session.
*/
getFlashed(): any;
old(key?: string): any;
all(withFlashed?: boolean, withAuth?: boolean, withToken?: boolean): {
[x: string]: any;
__old?: any;
__lastAccess?: any;
sessionStore?: Store | undefined;
id?: string | undefined;
cookie?: express_session.Cookie | undefined;
regenerate?: ((callback: (err: any) => void) => Session) | undefined;
destroy?: ((callback: (err: any) => void) => Session) | undefined;
reload?: ((callback: (err: any) => void) => Session) | undefined;
resetMaxAge?: (() => Session) | undefined;
save?: ((callback?: ((err: any) => void) | undefined) => Session) | undefined;
touch?: (() => Session) | undefined;
};
put(key: string, value: any): void;
/**
* flash session to view. Will be removed on next request.
*/
flash(key: string, value: any): void;
has(key: string): boolean;
exists(key: string): boolean;
save(): Promise<unknown>;
flush(): Promise<unknown>;
remove(key: string): void;
forget(keys: string[]): void;
static getDefaultDriver(): string;
static getStore(session: any): Promise<Store>;
private static getStoreConfig;
static getConfig(): SessionConfig;
migrate(destroy?: boolean): Promise<boolean>;
start(): Promise<void>;
regenerateToken(): void;
token(): any;
isStarted(): boolean;
}
interface Authenticatable {
getAuthIdentifierName(): string;
getAuthPassword(): string;
getAuthIdentifier(): string;
/**
* Get the token value for the "remember me" session.
*/
getRememberToken(): string;
/**
* Get the column name for the "remember me" token.
*/
getRememberTokenName(): string;
/**
* Set the token value for the "remember me" session.
*/
setRememberToken(token: string): void;
}
interface Credentials {
password?: string;
[key: string]: any;
}
interface Guard {
check(): Promise<boolean>;
guest(): Promise<boolean>;
user<T = Authenticatable>(): Promise<T | undefined>;
id(): Promise<string | undefined>;
validate(credentials: Credentials): Promise<boolean>;
setUser(user: Authenticatable): void;
}
interface StatefulGuard extends Guard {
attempt: (credentials: Credentials, remember?: boolean) => Promise<boolean>;
login(user: Authenticatable, remember?: boolean): Promise<void>;
logout(): Promise<void>;
}
interface UserProvider {
validateCredentials(user: Authenticatable, credentials: Credentials): boolean;
retrieveByCredentials(credentials: Credentials): Promise<Authenticatable | undefined>;
retrieveById(id: string): Promise<Authenticatable | undefined>;
/**
* Update the "remember me" token for the given user in storage.
*/
updateRememberToken(user: Authenticatable, token: string): Promise<void>;
/**
* Retrieve a user by their unique identifier and "remember me" token.
*/
retrieveByToken(identifier: any, token: string): Promise<Authenticatable | undefined>;
}
interface ExceptionHandler {
render(req: Request, e: Error): Promise<Response>;
report(e: Error): void;
}
interface HttpExceptionInterface {
getStatusCode(): number;
getHeaders(): ObjectOf<string>;
getPrevious(): Error | null;
}
type Method = "post" | "delete" | "get" | "put" | "patch" | "all";
interface Routes {
prefix: string;
uri: string;
method: Method;
action: RouteCallback;
middleware: (string | Middleware)[];
controllerMiddleware: (string | Middleware)[];
[key: string]: any;
}
type RouteCallback = (req: Request, ...params: any) => any;
interface HttpController {
[key: string]: RouteCallback;
}
interface Configuration {
driver: string;
url?: string;
host: string;
port: string;
database: string;
username: string;
password: string;
useNullAsDefault?: boolean;
pool?: {
min?: number;
max?: number;
idleTimeoutMillis?: number;
};
}
declare abstract class GuardHelper {
protected _user?: Authenticatable;
protected provider: UserProvider;
user<T = Authenticatable>(): Promise<T | undefined>;
protected authenticate(): Authenticatable;
check(): Promise<boolean>;
guest(): Promise<boolean>;
id(): Promise<string | undefined>;
getProvider(): UserProvider;
setProvider(provider: UserProvider): void;
}
declare class Recaller {
protected recaller: string;
constructor(recaller: string);
/**
* Determine if the recaller is valid.
*/
valid(): boolean;
/**
* Determine if the recaller is an valid string.
*/
protected properString(): boolean;
/**
* Determine if the recaller has all segments.
*/
protected hasAllSegments(): boolean;
/**
* Get the user ID from the recaller
*/
id(): string;
/**
* Get the "remember token" from the recaller
*/
token(): string;
}
declare class SessionGuard extends GuardHelper implements StatefulGuard {
name: string;
session: SessionManager;
request: Request;
lastAttempted: Authenticatable | undefined;
/**
* The number of minutes that the "remember me" cookie should be valid for.
*/
protected rememberDuration: number;
protected loggedOut: boolean;
/**
* Indicates if a token user retrieval has been attempted.
*/
protected recallAttempted: boolean;
/**
* Indicates if the user was authenticated via a recaller cookie.
*/
protected viaRemember: boolean;
constructor(name: string, provider: UserProvider, session: SessionManager, request: Request);
validate(credentials: Credentials): Promise<boolean>;
once(credentials: Credentials): Promise<boolean>;
attempt(credentials?: Credentials, remember?: boolean): Promise<boolean>;
protected hasValidCredentials(user: Authenticatable | undefined, credentials: Credentials): boolean;
login(user: Authenticatable, remember?: boolean): Promise<void>;
/**
* Queue the recaller cookie into the cookie jar.
*/
protected queueRecallerCookie(user: Authenticatable): void;
/**
* Create a "remember me" cookie for a given ID.
*/
protected createRecaller(value: string): Cookie;
/**
* Get the number of minutes the remember me cookie should be valid for.
*/
protected getRememberDuration(): number;
/**
* Set the number of minutes the remember me cookie should be valid for.
*/
setRememberDuration(minutes: number): this;
/**
* Create a new "remember me" token for the user if one doesn't already exist.
*/
protected ensureRememberTokenIsSet(user: Authenticatable): Promise<void>;
/**
* Refresh the "remember me" token for the user.
*/
protected cycleRememberToken(user: Authenticatable): Promise<void>;
logout(): Promise<void>;
setUser(user: Authenticatable): this;
getName(): string;
protected updateSession(id: string): Promise<void>;
user<T = Authenticatable>(): Promise<T | undefined>;
/**
* Pull a user from the repository by its "remember me" cookie token.
*/
protected userFromRecaller(recaller: Recaller): Promise<Authenticatable | undefined>;
/**
* Get the decrypted recaller cookie for the request.
*/
protected recaller(): Recaller | undefined;
/**
* Get the name of the cookie used to store the "recaller".
*/
protected getRecallerName(): string;
/**
* Remove the user data from the session and cookies.
*/
protected clearUserDataFromStorage(): void;
}
type UserProviderCreator = (config: Record<string, any>) => UserProvider;
declare class AuthManager {
static symbol: symbol;
protected app: Application;
protected guards: Record<string, StatefulGuard>;
protected request: Request;
protected static userProviders: Record<string, UserProviderCreator>;
constructor(app: Application);
setRequest(request: Request): this;
guard(name?: string): StatefulGuard;
getDefaultDriver(): string;
static registerUserProvider(name: string, providerCreator: UserProviderCreator): void;
protected resolve(name: string): StatefulGuard;
protected getConfig(name: string): Record<string, any>;
protected createSessionDriver(name: string, config: Record<string, any>): SessionGuard;
createUserProvider(provider: string): UserProvider;
protected getProviderConfiguration(provider?: string): Record<string, any> | undefined;
protected config<T>(key: string): T;
getDefaultUserProvider(): string;
__get(method: keyof StatefulGuard): any;
}
declare const _default$c: typeof AuthManager & Class<StatefulGuard, any[]>;
type Macro = (...arg: any[]) => any;
declare class Macroable {
protected static macros: ObjectOf<Macro>;
/**
* Register a custom macro
*/
static macro(name: string, macro: Macro): void;
/**
* Check if macro is registered
*/
static hasMacro(name: string): boolean;
/**
* Flush the existing macros
*/
static flushMacros(): void;
/**
* Dynamically handle call to the class
*/
protected static __getStatic(method: string): any;
/**
* Dynamically handle call to the class
*/
protected __get(method: string): any;
}
declare const _default$b: typeof Macroable;
declare class CookieJar {
protected _queued: ObjectOf<Record<string, Cookie>>;
/**
* Create new Cookie instance
*/
make(name: string, value: any, minutes?: number, path?: string, domain?: string | undefined | null, secure?: boolean, httpOnly?: boolean, raw?: boolean, sameSite?: "lax" | "strict" | "none" | undefined | null): Cookie;
/**
* Queue a cookie to send with the next response.
*/
queue(...params: any[]): void;
/**
* Get the cookies which have been queued for the next request.
*/
getQueuedCookies(): Cookie[];
/**
* Flush the cookies which have been queued for the next request.
*/
flushQueuedCookies(): this;
/**
* Expire the given cookie.
*/
forget(name: string, path?: string, domain?: string | undefined | null): Cookie;
}
interface RequestCookies {
[key: string]: any;
set: (key: string, value: any) => void;
get: (key: string) => any;
}
declare class Request extends _default$b {
protected static macros: Record<string, Macro>;
static symbol: symbol;
protected app: Application;
files: Record<string, UploadedFile>;
protected req: ExtendedRequest;
protected data: Record<string, any>;
protected sessionManager: SessionManager | null;
protected authManager: (AuthManager & StatefulGuard) | null;
protected _cookies: Record<string, any> | null;
protected _cookieJar: CookieJar | null;
protected router: Partial<Routes>;
protected formRequest: FormRequest | null;
constructor(app: Application, req: ExtendedRequest);
get<T = any>(key: string, defaultValue?: any): T;
input(key: string, defaultValue?: any): any;
header(key: string): string | string[] | undefined;
only(keys: string[]): Record<string, any>;
all(): any;
allFiles(): Record<string, UploadedFile>;
file(key: string): UploadedFile;
method(): string;
merge(newData: Record<string, any>): this;
getOriginalRequest(): ExtendedRequest;
instance(): this;
session(): SessionManager;
get cookies(): RequestCookies;
get cookieJar(): CookieJar;
protected setCookie(key: string, value: any): void;
protected getCookie(key: string): any;
auth(): AuthManager & StatefulGuard;
wantsJson(): boolean;
/**
* Validate request inputs.
*/
validate(rules: Record<string, string>, messages?: Record<string, string>, customAttributes?: Record<string, string>): Promise<any>;
/**
* set Form Request for validation.
*/
setFormRequest(formRequest: typeof FormRequest): FormRequest;
/**
* Get Form Request instance
*/
getFormRequest(): FormRequest | null;
is(...patterns: any[]): boolean;
/**
* Set router data to request instance
*/
setRouter(router: Routes): void;
/**
* Get router data from current route
*/
getRouter(): Partial<Routes>;
}
interface Request {
macro: (name: string, macro: Macro) => any;
[key: string]: any;
}
declare const _default$a: typeof Request;
type Concrete = NewableFunction | (() => any);
type CallBack = (...params: any[]) => any;
interface ObjectOf<T> {
[key: string]: T;
}
type Class<I, Args extends any[] = any[]> = new (...args: Args) => I;
type Server = Polka;
type OnServer = (req: Request, ctx: any) => Promise<ObjectOf<any>>;
type Trait<Base = any, T = any> = (s: Base) => T;
declare const Traitable: <T>(superclass: T) => TraitBuilder<T>;
declare class TraitBuilder<T> {
superclass: T;
constructor(superclass: T);
use(...traits: Trait[]): T;
}
declare const AuthenticatableTrait: Trait<any>;
declare class AuthServiceProvider extends ServiceProvider {
register(): Promise<void>;
}
declare class FilesystemServiceProvider extends ServiceProvider {
register(): Promise<void>;
boot(): Promise<void>;
}
declare class HttpException extends Error implements HttpExceptionInterface {
private statusCode;
private headers;
private previous;
constructor(statusCode: number, message?: string, previous?: Error | null, headers?: ObjectOf<string>);
getStatusCode(): number;
getHeaders(): ObjectOf<string>;
getPrevious(): Error | null;
}
declare class NotFoundHttpException extends HttpException {
constructor(message?: string, previous?: Error | null, headers?: ObjectOf<string>);
}
declare class RedirectResponse extends Response {
protected request: Request;
protected isWithInput: boolean;
protected inputExcept: string[];
protected session: ObjectOf<any>;
protected url: string;
constructor(url: string);
setRequest(req: Request): Request;
withInput(options?: {
except: string | string[];
}): this;
with(session: ObjectOf<any>): this;
}
declare abstract class ViewFactory implements ResponseRenderer {
protected app: Application;
protected path: string;
protected data: Record<string, any>;
protected ctx: Record<string, any>;
constructor(app: Application);
make(_path: string, data?: Record<string, any>): this;
withContext(ctx: Record<string, any>): this;
render(req: Request): Promise<Response>;
}
type renderUsing<E> = (e: E, req: Request) => Response | ViewFactory;
type reportUsing<E> = (e: E) => void;
interface renderCallback<E> {
exception: Class<E>;
renderUsing: renderUsing<E>;
}
interface reportCallback<E> {
exception: Class<E>;
reportUsing: reportUsing<E>;
}
declare class Handler implements ExceptionHandler {
static symbol: symbol;
protected container: Container;
protected reportCallbacks: reportCallback<any>[];
protected renderCallbacks: renderCallback<any>[];
protected dontReport: Class<Error>[];
protected internalDontReport: Class<Error>[];
constructor(container: Container);
render(req: Request, e: any): Promise<Response>;
protected prepareException(e: any): any;
report(e: any): void;
reportable<E = Error>(exception: Class<E>, reportUsing: reportUsing<E>): void;
renderable<E = Error>(exception: Class<E>, renderUsing: renderUsing<E>): void;
protected register(): void;
protected shouldntReport(e: Class<Error>): boolean;
}
declare class BadMethodCallException extends Error {
}
declare class RuntimeException extends Error {
}
interface IOptions {
only: string | string[];
except: string | string[];
}
declare class ControllerMiddlewareOptions {
protected options: IOptions;
constructor(options: IOptions);
only(methods: string | string[]): this;
except(methods: string | string[]): this;
}
declare abstract class Controller {
protected middlewares: {
middleware: string | Middleware;
options: IOptions;
}[];
/**
* Execute an action on the controller.
*/
callAction(this: any, method: string, parameters: any[]): any;
/**
* Register middleware on the controller
*/
middleware(middleware: MiddlewareStack): ControllerMiddlewareOptions;
/**
* Get the middleware assigned to the controller.
*/
getMiddleware(): {
middleware: string | Middleware;
options: IOptions;
}[];
}
type RouteAction<T> = RouteCallback | [Class<T>, Exclude<keyof T, keyof Controller>];
declare class Router extends _default$b {
protected routes: Routes[];
protected prefixStack: string[];
protected middlewareStack: MiddlewareStack[];
protected deep: number;
protected calledAction: string;
protected static macros: ObjectOf<Macro>;
constructor();
private addRoutes;
get: <T>(uri: string, action: RouteAction<T>, ctx?: ObjectOf<any>) => this;
post: <T>(uri: string, action: RouteAction<T>, ctx?: ObjectOf<any>) => this;
delete: <T>(uri: string, action: RouteAction<T>, ctx?: ObjectOf<any>) => this;
patch: <T>(uri: string, action: RouteAction<T>, ctx?: ObjectOf<any>) => this;
put: <T>(uri: string, action: RouteAction<T>, ctx?: ObjectOf<any>) => this;
all: <T>(uri: string, action: RouteAction<T>, ctx?: ObjectOf<any>) => this;
getRoutes(): Routes[];
prefix(prefix: string): this;
middleware(middleware: MiddlewareStack): this;
group(callback: string | CallBack): Promise<void>;
private flattenMiddleware;
/**
* This method just to reset calledAction when Route facade called
* See implementation in Support/Facade class
*/
protected facadeCalled(): void;
/**
* determine if the given options should included in particular method
*/
private methodIncludedByOptions;
}
interface Router {
macro: (name: string, macro: Macro) => any;
[key: string]: any;
}
declare const _default$9: typeof Router;
declare class RoutingServiceProvider extends ServiceProvider {
register(): Promise<void>;
}
declare const useMagic: <T>(clazz: any, ...params: any[]) => T;
declare class Str {
protected static studlyCache: ObjectOf<string>;
static plural(value: string, count?: number): string;
static ucfirst(value: string): string;
static snake(value: string, glue?: string): string;
static contains(haystack: string, needles: string | string[]): boolean;
static is(pattern: string | string[], value: string): boolean;
static random(length?: number): string;
/**
* Convert a value to studly caps case.
*/
static studly(value: string): string;
}
declare class Arr {
static wrap<T = string>(value: T[] | T | null): T[];
}
declare abstract class Facade {
protected static facadeId: string | null;
protected static app: Application;
protected static resolvedInstance: Record<string | symbol, any>;
static setApplicationFacade(app: Application): void;
static getFacadeAccessor(): Class<any> | string | symbol;
static __getStatic(name: string, abstract: string | symbol): (...args: any) => any;
protected static resolveFacadeInstance(abstract: string | symbol): any;
}
declare class ExtendedFacade extends Facade {
}
declare const _default$8: typeof Facade;
declare class Env {
static symbol: symbol;
constructor();
get(key: string, defaultValue?: string | boolean | null | number): any;
}
declare const _default$7: Env & typeof ExtendedFacade;
declare const _default$6: Encrypter & typeof ExtendedFacade;
declare class ResponseFactory {
static symbol: symbol;
constructor();
make(content?: any, status?: number, headers?: ObjectOf<string>): Response;
}
declare const _default$5: ResponseFactory & typeof ExtendedFacade;
declare const _default$4: Router & typeof ExtendedFacade;
declare class FilesystemManager extends StorageManager {
static symbol: symbol;
protected app: Application;
constructor(app: Application);
isUsingS3(): boolean;
registerS3Driver(): Promise<void>;
}
declare const _default$3: FilesystemManager & typeof ExtendedFacade;
declare function useFacade<T>(clazz: any): T & typeof ExtendedFacade;
declare const _default$2: Factory & typeof ExtendedFacade;
declare const _default$1: Repository & typeof ExtendedFacade;
declare const _default: AsyncLocalStorage<Map<string | symbol, any>> & typeof ExtendedFacade;
declare class ValidationException extends Error {
status: number;
protected validator: Validator;
constructor(validator: Validator);
errors(): any;
}
declare class ValidationServiceProvider extends ServiceProvider {
register(): Promise<void>;
boot(): Promise<void>;
}
declare const StartSession: Middleware;
declare class SessionServiceProvider extends ServiceProvider {
register(): Promise<void>;
boot(): Promise<void>;
}
declare class TokenMismatchException extends Error {
}
declare class CookieValuePrefix {
/**
* Create a new cookie value prefix for the given cookie name.
*/
static create(cookieName: string, key: Buffer): string;
/**
* Validate a cookie value contains a valid prefix. If it does, return the cookie value with the prefix removed. Otherwise, return null.
*/
static validate(cookieName: string, cookieValue: string, key: Buffer): string | null;
/**
* Remove the cookie value prefix.
*/
static remove(cookieValue: string): string;
}
declare class AddQueuedCookiesToResponse implements Middleware {
handleAfter(res: Response, req: Request): Promise<Response>;
}
declare class EncryptCookie implements Middleware {
protected encrypter: Encrypter;
protected except: string[];
constructor(encrypter?: Encrypter);
handle(req: Request, next: NextFunction): Promise<Response>;
handleAfter(res: Response): Promise<Response>;
protected decrypt(req: Request): Request;
protected encrypt(res: Response): Response;
isDisabled(key: string): boolean;
protected decryptCookie(cookie: string): string;
/**
* validate and remove the cookie value prefix from the value
*/
protected validateValue(key: string, value: string): string | null;
/**
* Duplicate a cookie with a new value.
*/
protected duplicate(cookie: Cookie, value: any): Cookie;
}
declare class DecryptException extends RuntimeException {
}
declare class EncryptionServiceProvider extends ServiceProvider {
register(): Promise<void>;
protected parseKey(config: AppConfig): Buffer;
protected key(config: AppConfig): string;
}
declare class MissingAppKeyException extends Error {
constructor(message?: string);
}
declare abstract class TestCase {
protected app: Application;
static make<T extends TestCase>(this: new () => T): T;
/**
* Setup the test environment
*/
protected setUp(): Promise<void>;
/**
* Refresh the application instance
*/
protected refreshApplication(): Promise<void>;
abstract createApplication(): Promise<Application>;
/**
* Clean up the test environtment before next test.
*/
protected tearDown(): void;
}
export { AddQueuedCookiesToResponse, _default as Als, AppConfig, Application, Arr, _default$c as AuthManager, AuthServiceProvider, Authenticatable, AuthenticatableTrait, BadMethodCallException, Bootstrapper, CallBack, CipherTypes, Class, Command, Concrete, _default$1 as Config, Configuration, Kernel$1 as ConsoleKernel, Controller, Cookie, CookieValuePrefix, Credentials, _default$6 as Crypt, DecryptException, EncryptCookie, Encrypter, EncryptionServiceProvider, _default$7 as Env, ExceptionHandler, ExtendedFacade, ExtendedRequest, _default$8 as Facade, FilesystemServiceProvider, FormRequest, Guard, Handler, HttpController, HttpException, HttpExceptionInterface, Request as HttpRequest, Response as HttpResponse, JsonPayload, Kernel, Method, Middleware, MiddlewareStack, MissingAppKeyException, NativeMiddleware, NextFunction, NotFoundHttpException, ObjectOf, OnServer, RedirectResponse, _default$a as Request, _default$5 as Response, ResponseRenderer, _default$4 as Route, RouteCallback, _default$9 as Router, Routes, RoutingServiceProvider, Rule, RuntimeException, Server, ServiceProvider, SessionConfig, SessionManager, SessionServiceProvider, StartSession, StatefulGuard, _default$3 as Storage, Str, TestCase, TokenMismatchException, Trait, Traitable, UserProvider, ValidationException, ValidationServiceProvider, _default$2 as Validator, VerifyCsrfToken, ViewFactory, useFacade, useMagic };