@orieljs/framework 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/chunk-P64C7IEP.js +87 -0
- package/dist/chunk-P64C7IEP.js.map +1 -0
- package/dist/contracts.d.ts +1117 -0
- package/dist/contracts.js +85 -0
- package/dist/contracts.js.map +1 -0
- package/dist/index.d.ts +799 -0
- package/dist/index.js +1036 -0
- package/dist/index.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,1117 @@
|
|
|
1
|
+
/** A typed, runtime-unique key for container bindings. */
|
|
2
|
+
interface Token<T> {
|
|
3
|
+
readonly id: symbol;
|
|
4
|
+
readonly description: string;
|
|
5
|
+
/** Phantom field: only carries T at the type level. Never set at runtime. */
|
|
6
|
+
readonly __type?: T;
|
|
7
|
+
}
|
|
8
|
+
declare function token<T>(description: string): Token<T>;
|
|
9
|
+
type Class<T> = abstract new (...args: any[]) => T;
|
|
10
|
+
type Abstract<T> = Token<T> | Class<T>;
|
|
11
|
+
type Factory<T> = (container: Container) => T;
|
|
12
|
+
type Concrete<T> = Factory<T> | (new () => T);
|
|
13
|
+
interface Container {
|
|
14
|
+
/** New instance on every make(). A class with no concrete binds to itself (constructed with no args). Root only; throws on a scope. */
|
|
15
|
+
bind<T>(abstract: Abstract<T>, concrete?: Concrete<T>): void;
|
|
16
|
+
/** One instance for the life of this container and its scopes. Root only; throws on a scope. */
|
|
17
|
+
singleton<T>(abstract: Abstract<T>, concrete?: Concrete<T>): void;
|
|
18
|
+
/** One instance per scope (e.g. per HTTP request or queue job). Root only; throws on a scope. */
|
|
19
|
+
scoped<T>(abstract: Abstract<T>, concrete?: Concrete<T>): void;
|
|
20
|
+
/** Register an existing object as a shared instance. Returns it. On a scope it stays local to that scope. */
|
|
21
|
+
instance<T>(abstract: Abstract<T>, instance: T): T;
|
|
22
|
+
/** Resolve. Unbound classes are constructed with `new Class()`. Unbound tokens throw BindingResolutionError. */
|
|
23
|
+
make<T>(abstract: Abstract<T>): T;
|
|
24
|
+
bound(abstract: Abstract<unknown>): boolean;
|
|
25
|
+
resolved(abstract: Abstract<unknown>): boolean;
|
|
26
|
+
/** Decorate or replace an instance each time it's resolved (applied before resolving callbacks). Root only; throws on a scope. */
|
|
27
|
+
extend<T>(abstract: Abstract<T>, extender: (instance: T, container: Container) => T): void;
|
|
28
|
+
/** Called after each resolution of the abstract. Root only; throws on a scope. */
|
|
29
|
+
resolving<T>(abstract: Abstract<T>, callback: (instance: T, container: Container) => void): void;
|
|
30
|
+
forgetInstance(abstract: Abstract<unknown>): void;
|
|
31
|
+
/** A child container: shares bindings and singletons with its parent, and has its own scoped instances. Bindings can't be registered on it. */
|
|
32
|
+
createScope(): Container;
|
|
33
|
+
/** Run fn with this container as the "current" one for inject(), helpers and facades (AsyncLocalStorage). */
|
|
34
|
+
run<R>(fn: () => R): R;
|
|
35
|
+
}
|
|
36
|
+
declare const Container: Token<Container>;
|
|
37
|
+
|
|
38
|
+
interface ServiceProvider {
|
|
39
|
+
/** Bind things into the container. Synchronous. Don't resolve other services here. */
|
|
40
|
+
register?(): void;
|
|
41
|
+
/** Runs after every provider is registered. May be async (e.g. importing route files). */
|
|
42
|
+
boot?(): void | Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
type ServiceProviderClass = new (app: Application) => ServiceProvider;
|
|
45
|
+
interface Application extends Container {
|
|
46
|
+
readonly version: string;
|
|
47
|
+
basePath(path?: string): string;
|
|
48
|
+
appPath(path?: string): string;
|
|
49
|
+
bootstrapPath(path?: string): string;
|
|
50
|
+
configPath(path?: string): string;
|
|
51
|
+
databasePath(path?: string): string;
|
|
52
|
+
publicPath(path?: string): string;
|
|
53
|
+
resourcePath(path?: string): string;
|
|
54
|
+
storagePath(path?: string): string;
|
|
55
|
+
/** With no args returns the environment name. With args returns whether it matches any of them. */
|
|
56
|
+
environment(): string;
|
|
57
|
+
environment(...environments: string[]): boolean;
|
|
58
|
+
isProduction(): boolean;
|
|
59
|
+
isLocal(): boolean;
|
|
60
|
+
runningInConsole(): boolean;
|
|
61
|
+
/** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
|
|
62
|
+
setRunningInConsole(value?: boolean): void;
|
|
63
|
+
runningUnitTests(): boolean;
|
|
64
|
+
/** Registers the provider. If the app is already booted, the provider is booted immediately. */
|
|
65
|
+
register(provider: ServiceProvider | ServiceProviderClass): Promise<ServiceProvider>;
|
|
66
|
+
getProviders(): ServiceProvider[];
|
|
67
|
+
boot(): Promise<void>;
|
|
68
|
+
isBooted(): boolean;
|
|
69
|
+
booting(callback: (app: Application) => void | Promise<void>): void;
|
|
70
|
+
booted(callback: (app: Application) => void | Promise<void>): void;
|
|
71
|
+
/** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
|
|
72
|
+
handle(request: Request): Promise<Response>;
|
|
73
|
+
/** Register a callback that terminate() runs, in registration order. */
|
|
74
|
+
terminating(callback: () => void | Promise<void>): void;
|
|
75
|
+
terminate(): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
declare const Application: Token<Application>;
|
|
78
|
+
interface ExceptionHandler {
|
|
79
|
+
report(error: unknown): Promise<void>;
|
|
80
|
+
shouldReport(error: unknown): boolean;
|
|
81
|
+
/** `request` is the scoped HttpRequest (Contracts/Http) when available, else the raw Request. */
|
|
82
|
+
render(request: unknown, error: unknown): Promise<Response>;
|
|
83
|
+
}
|
|
84
|
+
declare const ExceptionHandler: Token<ExceptionHandler>;
|
|
85
|
+
/** Paths passed to Application.configure().withRouting(). Routing (Wave 1) loads them. */
|
|
86
|
+
interface RoutingPaths {
|
|
87
|
+
web?: string;
|
|
88
|
+
api?: string;
|
|
89
|
+
console?: string;
|
|
90
|
+
health?: string;
|
|
91
|
+
apiPrefix: string;
|
|
92
|
+
}
|
|
93
|
+
declare const RoutingPaths: Token<RoutingPaths>;
|
|
94
|
+
/** The object passed to Application.configure().withExceptions(e => …), like Laravel's Exceptions class. */
|
|
95
|
+
interface ExceptionsConfigurator {
|
|
96
|
+
/** Custom reporting. Return false to stop the default logging. */
|
|
97
|
+
report(callback: (error: unknown) => void | boolean | Promise<void | boolean>): this;
|
|
98
|
+
/** Custom rendering. Return undefined to fall through to the default rendering. */
|
|
99
|
+
render(callback: (error: unknown, request: unknown) => Response | undefined | Promise<Response | undefined>): this;
|
|
100
|
+
/** Never report errors of these classes. */
|
|
101
|
+
dontReport(...classes: Array<abstract new (...args: never[]) => Error>): this;
|
|
102
|
+
}
|
|
103
|
+
/** Callbacks collected by withMiddleware()/withExceptions(); invoked by Http / the exception handler (Wave 1). */
|
|
104
|
+
type ConfigCallbacks<T> = Array<(configurator: T) => void>;
|
|
105
|
+
/** Typed as unknown here because MiddlewareConfigurator lives in Contracts/Http; Http casts on use. */
|
|
106
|
+
declare const MiddlewareCallbacks: Token<ConfigCallbacks<unknown>>;
|
|
107
|
+
declare const ExceptionCallbacks: Token<ConfigCallbacks<ExceptionsConfigurator>>;
|
|
108
|
+
|
|
109
|
+
interface ConfigRepository {
|
|
110
|
+
has(key: string): boolean;
|
|
111
|
+
/** Dot notation: get('database.connections.sqlite.database'). */
|
|
112
|
+
get<T = unknown>(key: string, defaultValue?: T): T;
|
|
113
|
+
set(key: string, value: unknown): void;
|
|
114
|
+
set(values: Record<string, unknown>): void;
|
|
115
|
+
push(key: string, value: unknown): void;
|
|
116
|
+
all(): Record<string, unknown>;
|
|
117
|
+
}
|
|
118
|
+
declare const ConfigRepository: Token<ConfigRepository>;
|
|
119
|
+
|
|
120
|
+
interface Arrayable<T = unknown> {
|
|
121
|
+
toArray(): T;
|
|
122
|
+
}
|
|
123
|
+
interface Jsonable {
|
|
124
|
+
toJson(): string;
|
|
125
|
+
}
|
|
126
|
+
interface Htmlable {
|
|
127
|
+
toHtml(): string;
|
|
128
|
+
}
|
|
129
|
+
/** Anything a controller can return that knows how to become a Response. */
|
|
130
|
+
interface Responsable {
|
|
131
|
+
toResponse(request: unknown): Response | Promise<Response>;
|
|
132
|
+
}
|
|
133
|
+
/** The minimal collection surface contracts rely on (implemented by @orieljs/collections). */
|
|
134
|
+
interface Enumerable<T> extends Iterable<T>, Arrayable<unknown[]> {
|
|
135
|
+
all(): T[];
|
|
136
|
+
count(): number;
|
|
137
|
+
isEmpty(): boolean;
|
|
138
|
+
}
|
|
139
|
+
interface ClassRegistry {
|
|
140
|
+
/** Registers under `name` (default: cls.name). Throws if the name is already taken by a different class. */
|
|
141
|
+
register(cls: Class<unknown>, name?: string): string;
|
|
142
|
+
nameOf(cls: Class<unknown>): string | undefined;
|
|
143
|
+
resolve<T = unknown>(name: string): Class<T>;
|
|
144
|
+
has(name: string): boolean;
|
|
145
|
+
}
|
|
146
|
+
declare const ClassRegistry: Token<ClassRegistry>;
|
|
147
|
+
|
|
148
|
+
type PipeNext<T> = (passable: T) => Promise<unknown>;
|
|
149
|
+
type PipeClosure<T> = (passable: T, next: PipeNext<T>) => Promise<unknown> | unknown;
|
|
150
|
+
/** A class resolved from the container whose `via` method (default 'handle') is called; or a string alias 'name:param1,param2'. */
|
|
151
|
+
type Pipe<T> = PipeClosure<T> | Class<object> | string;
|
|
152
|
+
interface Pipeline<T = unknown> {
|
|
153
|
+
send(passable: T): this;
|
|
154
|
+
through(pipes: ReadonlyArray<Pipe<T>>): this;
|
|
155
|
+
pipe(...pipes: Array<Pipe<T>>): this;
|
|
156
|
+
/** Method called on class pipes. Default 'handle'. */
|
|
157
|
+
via(method: string): this;
|
|
158
|
+
then<R>(destination: (passable: T) => R | Promise<R>): Promise<R>;
|
|
159
|
+
thenReturn(): Promise<T>;
|
|
160
|
+
}
|
|
161
|
+
interface PipelineFactory {
|
|
162
|
+
make<T>(): Pipeline<T>;
|
|
163
|
+
}
|
|
164
|
+
declare const PipelineFactory: Token<PipelineFactory>;
|
|
165
|
+
|
|
166
|
+
/** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
|
|
167
|
+
interface Session {
|
|
168
|
+
getId(): string;
|
|
169
|
+
start(): Promise<void>;
|
|
170
|
+
save(): Promise<void>;
|
|
171
|
+
all(): Record<string, unknown>;
|
|
172
|
+
has(key: string): boolean;
|
|
173
|
+
get<T = unknown>(key: string, defaultValue?: T): T;
|
|
174
|
+
put(key: string | Record<string, unknown>, value?: unknown): void;
|
|
175
|
+
push(key: string, value: unknown): void;
|
|
176
|
+
pull<T = unknown>(key: string, defaultValue?: T): T;
|
|
177
|
+
forget(...keys: string[]): void;
|
|
178
|
+
flush(): void;
|
|
179
|
+
flash(key: string, value: unknown): void;
|
|
180
|
+
now(key: string, value: unknown): void;
|
|
181
|
+
reflash(): void;
|
|
182
|
+
keep(...keys: string[]): void;
|
|
183
|
+
getOldInput<T = unknown>(key?: string, defaultValue?: T): T;
|
|
184
|
+
flashInput(input: Record<string, unknown>): void;
|
|
185
|
+
token(): string;
|
|
186
|
+
regenerateToken(): void;
|
|
187
|
+
regenerate(destroy?: boolean): Promise<void>;
|
|
188
|
+
invalidate(): Promise<void>;
|
|
189
|
+
previousUrl(): string | undefined;
|
|
190
|
+
setPreviousUrl(url: string): void;
|
|
191
|
+
}
|
|
192
|
+
declare const Session: Token<Session>;
|
|
193
|
+
/** Storage driver (file, cookie, database, redis). */
|
|
194
|
+
interface SessionHandler {
|
|
195
|
+
read(id: string): Promise<string>;
|
|
196
|
+
write(id: string, data: string): Promise<void>;
|
|
197
|
+
destroy(id: string): Promise<void>;
|
|
198
|
+
gc(maxLifetimeSeconds: number): Promise<void>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Web-standard body/headers init types, derived from the runtime's global Response/Headers (no DOM lib needed). */
|
|
202
|
+
type BodyInit = ConstructorParameters<typeof Response>[0];
|
|
203
|
+
type HeadersInit = ConstructorParameters<typeof Headers>[0];
|
|
204
|
+
interface UploadedFile {
|
|
205
|
+
readonly clientName: string;
|
|
206
|
+
readonly mimeType: string;
|
|
207
|
+
readonly size: number;
|
|
208
|
+
extension(): string;
|
|
209
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
210
|
+
/** Stores on a Filesystem disk. Returns the stored path. */
|
|
211
|
+
store(directory: string, disk?: string): Promise<string>;
|
|
212
|
+
storeAs(directory: string, name: string, disk?: string): Promise<string>;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Oriel's request wrapper (one per request, scoped).
|
|
216
|
+
* The Http kernel awaits `load()` before any middleware runs, so every input accessor below is synchronous.
|
|
217
|
+
*/
|
|
218
|
+
interface HttpRequest {
|
|
219
|
+
readonly raw: Request;
|
|
220
|
+
load(): Promise<this>;
|
|
221
|
+
method(): string;
|
|
222
|
+
isMethod(method: string): boolean;
|
|
223
|
+
url(): string;
|
|
224
|
+
fullUrl(): string;
|
|
225
|
+
path(): string;
|
|
226
|
+
is(...patterns: string[]): boolean;
|
|
227
|
+
routeIs(...names: string[]): boolean;
|
|
228
|
+
header(name: string): string | undefined;
|
|
229
|
+
header(name: string, defaultValue: string): string;
|
|
230
|
+
bearerToken(): string | undefined;
|
|
231
|
+
ip(): string | undefined;
|
|
232
|
+
expectsJson(): boolean;
|
|
233
|
+
ajax(): boolean;
|
|
234
|
+
query<T = unknown>(key?: string, defaultValue?: T): T;
|
|
235
|
+
input<T = unknown>(key?: string, defaultValue?: T): T;
|
|
236
|
+
all(): Record<string, unknown>;
|
|
237
|
+
only(...keys: string[]): Record<string, unknown>;
|
|
238
|
+
except(...keys: string[]): Record<string, unknown>;
|
|
239
|
+
has(...keys: string[]): boolean;
|
|
240
|
+
filled(key: string): boolean;
|
|
241
|
+
boolean(key: string, defaultValue?: boolean): boolean;
|
|
242
|
+
integer(key: string, defaultValue?: number): number;
|
|
243
|
+
merge(values: Record<string, unknown>): this;
|
|
244
|
+
file(key: string): UploadedFile | undefined;
|
|
245
|
+
cookie(name: string): string | undefined;
|
|
246
|
+
/** Route parameter (after model binding), or every parameter when called with no key. */
|
|
247
|
+
route<T = unknown>(key?: string): T;
|
|
248
|
+
session(): Session;
|
|
249
|
+
/** The user resolved earlier by auth middleware. Undefined for guests. Use `await Auth.user()` to resolve lazily. */
|
|
250
|
+
user<T = unknown>(guard?: string): T | undefined;
|
|
251
|
+
setUserResolver(resolver: (guard?: string) => unknown): void;
|
|
252
|
+
}
|
|
253
|
+
declare const HttpRequest: Token<HttpRequest>;
|
|
254
|
+
type Next = (request: HttpRequest) => Promise<Response>;
|
|
255
|
+
interface Middleware {
|
|
256
|
+
handle(request: HttpRequest, next: Next, ...parameters: string[]): Promise<Response>;
|
|
257
|
+
terminate?(request: HttpRequest, response: Response): Promise<void>;
|
|
258
|
+
}
|
|
259
|
+
type MiddlewareClass = new (...args: any[]) => Middleware;
|
|
260
|
+
/** The object passed to Application.configure().withMiddleware(m => …), like Laravel's Middleware class. */
|
|
261
|
+
interface MiddlewareConfigurator {
|
|
262
|
+
append(...middleware: MiddlewareClass[]): this;
|
|
263
|
+
prepend(...middleware: MiddlewareClass[]): this;
|
|
264
|
+
web(options: {
|
|
265
|
+
append?: MiddlewareClass[];
|
|
266
|
+
prepend?: MiddlewareClass[];
|
|
267
|
+
remove?: MiddlewareClass[];
|
|
268
|
+
}): this;
|
|
269
|
+
api(options: {
|
|
270
|
+
append?: MiddlewareClass[];
|
|
271
|
+
prepend?: MiddlewareClass[];
|
|
272
|
+
remove?: MiddlewareClass[];
|
|
273
|
+
}): this;
|
|
274
|
+
alias(aliases: Record<string, MiddlewareClass>): this;
|
|
275
|
+
group(name: string, middleware: Array<MiddlewareClass | string>): this;
|
|
276
|
+
validateCsrfTokens(options: {
|
|
277
|
+
except: string[];
|
|
278
|
+
}): this;
|
|
279
|
+
redirectGuestsTo(url: string | ((request: HttpRequest) => string)): this;
|
|
280
|
+
}
|
|
281
|
+
interface HttpKernel {
|
|
282
|
+
handle(request: Request): Promise<Response>;
|
|
283
|
+
terminate?(request: Request, response: Response): Promise<void>;
|
|
284
|
+
}
|
|
285
|
+
declare const HttpKernel: Token<HttpKernel>;
|
|
286
|
+
interface ResponseFactory {
|
|
287
|
+
make(content?: BodyInit | null, status?: number, headers?: HeadersInit): Response;
|
|
288
|
+
json(data: unknown, status?: number, headers?: HeadersInit): Response;
|
|
289
|
+
noContent(status?: number): Response;
|
|
290
|
+
download(path: string, name?: string, headers?: HeadersInit): Promise<Response>;
|
|
291
|
+
stream(body: ReadableStream, status?: number, headers?: HeadersInit): Response;
|
|
292
|
+
}
|
|
293
|
+
declare const ResponseFactory: Token<ResponseFactory>;
|
|
294
|
+
|
|
295
|
+
/** Public method names of a controller (excludes non-function members). */
|
|
296
|
+
type ActionMethods<C> = {
|
|
297
|
+
[K in keyof C]: C[K] extends (...args: any[]) => unknown ? K : never;
|
|
298
|
+
}[keyof C] & string;
|
|
299
|
+
type ControllerAction<C> = readonly [Class<C>, ActionMethods<C>];
|
|
300
|
+
type RouteClosure = (...args: any[]) => unknown;
|
|
301
|
+
type RouteAction = RouteClosure | ControllerAction<any>;
|
|
302
|
+
type MiddlewareReference = string | MiddlewareClass;
|
|
303
|
+
interface Route {
|
|
304
|
+
readonly methods: readonly string[];
|
|
305
|
+
readonly uri: string;
|
|
306
|
+
getName(): string | undefined;
|
|
307
|
+
name(name: string): this;
|
|
308
|
+
middleware(...middleware: MiddlewareReference[]): this;
|
|
309
|
+
withoutMiddleware(...middleware: MiddlewareReference[]): this;
|
|
310
|
+
where(parameter: string, pattern: string): this;
|
|
311
|
+
where(patterns: Record<string, string>): this;
|
|
312
|
+
}
|
|
313
|
+
interface RouteRegistrar {
|
|
314
|
+
prefix(prefix: string): RouteRegistrar;
|
|
315
|
+
name(prefix: string): RouteRegistrar;
|
|
316
|
+
middleware(...middleware: MiddlewareReference[]): RouteRegistrar;
|
|
317
|
+
controller(controller: Class<unknown>): RouteRegistrar;
|
|
318
|
+
group(routes: () => void | Promise<void>): Promise<void>;
|
|
319
|
+
}
|
|
320
|
+
interface ResourceOptions {
|
|
321
|
+
only?: string[];
|
|
322
|
+
except?: string[];
|
|
323
|
+
parameters?: Record<string, string>;
|
|
324
|
+
names?: Record<string, string>;
|
|
325
|
+
}
|
|
326
|
+
interface Router {
|
|
327
|
+
get<C>(uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
328
|
+
post<C>(uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
329
|
+
put<C>(uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
330
|
+
patch<C>(uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
331
|
+
delete<C>(uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
332
|
+
options<C>(uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
333
|
+
any<C>(uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
334
|
+
match<C>(methods: string[], uri: string, action: ControllerAction<C> | RouteClosure): Route;
|
|
335
|
+
redirect(from: string, to: string, status?: number): Route;
|
|
336
|
+
view(uri: string, view: string, data?: Record<string, unknown>): Route;
|
|
337
|
+
resource(name: string, controller: Class<unknown>, options?: ResourceOptions): void;
|
|
338
|
+
apiResource(name: string, controller: Class<unknown>, options?: ResourceOptions): void;
|
|
339
|
+
fallback(action: RouteAction): Route;
|
|
340
|
+
prefix(prefix: string): RouteRegistrar;
|
|
341
|
+
name(prefix: string): RouteRegistrar;
|
|
342
|
+
middleware(...middleware: MiddlewareReference[]): RouteRegistrar;
|
|
343
|
+
controller(controller: Class<unknown>): RouteRegistrar;
|
|
344
|
+
/** Explicit model binding: Route.model('author', User). */
|
|
345
|
+
model(parameter: string, model: Class<unknown>): void;
|
|
346
|
+
/** Custom binding resolver. */
|
|
347
|
+
bind(parameter: string, resolver: (value: string) => unknown | Promise<unknown>): void;
|
|
348
|
+
pattern(parameter: string, pattern: string): void;
|
|
349
|
+
getRoutes(): readonly Route[];
|
|
350
|
+
current(): Route | undefined;
|
|
351
|
+
}
|
|
352
|
+
declare const Router: Token<Router>;
|
|
353
|
+
/**
|
|
354
|
+
* Resolves implicit route-model bindings by naming convention ({post} → Post).
|
|
355
|
+
* Bound by Database (Wave 1) so that Routing never imports Database.
|
|
356
|
+
* Returns undefined when no model matches the parameter name. Throws ModelNotFound when the model exists but the row doesn't.
|
|
357
|
+
*/
|
|
358
|
+
interface RouteModelResolver {
|
|
359
|
+
resolve(parameter: string, value: string, field?: string): Promise<unknown | undefined>;
|
|
360
|
+
resolveExplicit(model: Class<unknown>, value: string, field?: string): Promise<unknown>;
|
|
361
|
+
}
|
|
362
|
+
declare const RouteModelResolver: Token<RouteModelResolver>;
|
|
363
|
+
interface UrlGenerator {
|
|
364
|
+
to(path: string, query?: Record<string, unknown>, absolute?: boolean): string;
|
|
365
|
+
route(name: string, parameters?: unknown, absolute?: boolean): string;
|
|
366
|
+
asset(path: string): string;
|
|
367
|
+
current(): string;
|
|
368
|
+
previous(fallback?: string): string;
|
|
369
|
+
hasRoute(name: string): boolean;
|
|
370
|
+
}
|
|
371
|
+
declare const UrlGenerator: Token<UrlGenerator>;
|
|
372
|
+
interface RedirectResponse extends Responsable {
|
|
373
|
+
readonly targetUrl: string;
|
|
374
|
+
with(key: string | Record<string, unknown>, value?: unknown): this;
|
|
375
|
+
withErrors(errors: Record<string, string | string[]>, bag?: string): this;
|
|
376
|
+
withInput(input?: Record<string, unknown>): this;
|
|
377
|
+
withCookie(name: string, value: string, minutes?: number): this;
|
|
378
|
+
}
|
|
379
|
+
interface Redirector {
|
|
380
|
+
to(path: string, status?: number): RedirectResponse;
|
|
381
|
+
route(name: string, parameters?: unknown, status?: number): RedirectResponse;
|
|
382
|
+
back(fallback?: string, status?: number): RedirectResponse;
|
|
383
|
+
intended(fallback?: string): RedirectResponse;
|
|
384
|
+
away(url: string, status?: number): RedirectResponse;
|
|
385
|
+
}
|
|
386
|
+
declare const Redirector: Token<Redirector>;
|
|
387
|
+
|
|
388
|
+
interface Cookie {
|
|
389
|
+
name: string;
|
|
390
|
+
value: string;
|
|
391
|
+
/** Minutes until expiry. 0 = session cookie, negative = delete. */
|
|
392
|
+
minutes: number;
|
|
393
|
+
path: string;
|
|
394
|
+
domain?: string;
|
|
395
|
+
secure: boolean;
|
|
396
|
+
httpOnly: boolean;
|
|
397
|
+
sameSite: 'lax' | 'strict' | 'none';
|
|
398
|
+
}
|
|
399
|
+
interface CookieJar {
|
|
400
|
+
make(name: string, value: string, minutes?: number, options?: Partial<Omit<Cookie, 'name' | 'value' | 'minutes'>>): Cookie;
|
|
401
|
+
forever(name: string, value: string): Cookie;
|
|
402
|
+
forget(name: string): Cookie;
|
|
403
|
+
/** Queue a cookie to attach to the outgoing response (scoped per request). */
|
|
404
|
+
queue(cookie: Cookie): void;
|
|
405
|
+
queued(): Cookie[];
|
|
406
|
+
}
|
|
407
|
+
declare const CookieJar: Token<CookieJar>;
|
|
408
|
+
|
|
409
|
+
interface Encrypter {
|
|
410
|
+
/** JSON-serializes unless serialize=false (then value must be a string). AES-256-GCM, keyed by APP_KEY. */
|
|
411
|
+
encrypt(value: unknown, serialize?: boolean): string;
|
|
412
|
+
decrypt<T = unknown>(payload: string, unserialize?: boolean): T;
|
|
413
|
+
encryptString(value: string): string;
|
|
414
|
+
decryptString(payload: string): string;
|
|
415
|
+
getKey(): Uint8Array;
|
|
416
|
+
}
|
|
417
|
+
declare const Encrypter: Token<Encrypter>;
|
|
418
|
+
|
|
419
|
+
interface Hasher {
|
|
420
|
+
make(value: string): Promise<string>;
|
|
421
|
+
check(value: string, hashed: string): Promise<boolean>;
|
|
422
|
+
needsRehash(hashed: string): boolean;
|
|
423
|
+
info(hashed: string): {
|
|
424
|
+
algorithm: string;
|
|
425
|
+
options: Record<string, unknown>;
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
declare const Hasher: Token<Hasher>;
|
|
429
|
+
|
|
430
|
+
interface View extends Htmlable {
|
|
431
|
+
readonly name: string;
|
|
432
|
+
with(key: string | Record<string, unknown>, value?: unknown): this;
|
|
433
|
+
render(): Promise<string>;
|
|
434
|
+
}
|
|
435
|
+
/** Resolves 'posts.index' → resources/views/posts/index.tsx and renders it to HTML on the server. */
|
|
436
|
+
interface ViewFactory {
|
|
437
|
+
make(name: string, data?: Record<string, unknown>): View;
|
|
438
|
+
exists(name: string): boolean;
|
|
439
|
+
share(key: string | Record<string, unknown>, value?: unknown): void;
|
|
440
|
+
composer(views: string | string[], composer: (view: View) => void | Promise<void>): void;
|
|
441
|
+
}
|
|
442
|
+
declare const ViewFactory: Token<ViewFactory>;
|
|
443
|
+
|
|
444
|
+
type LogLevel = 'emergency' | 'alert' | 'critical' | 'error' | 'warning' | 'notice' | 'info' | 'debug';
|
|
445
|
+
interface Logger {
|
|
446
|
+
log(level: LogLevel, message: string, context?: Record<string, unknown>): void;
|
|
447
|
+
emergency(message: string, context?: Record<string, unknown>): void;
|
|
448
|
+
alert(message: string, context?: Record<string, unknown>): void;
|
|
449
|
+
critical(message: string, context?: Record<string, unknown>): void;
|
|
450
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
451
|
+
warning(message: string, context?: Record<string, unknown>): void;
|
|
452
|
+
notice(message: string, context?: Record<string, unknown>): void;
|
|
453
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
454
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
455
|
+
/** Adds context to every later log entry in the current scope (request or job). */
|
|
456
|
+
withContext(context: Record<string, unknown>): this;
|
|
457
|
+
}
|
|
458
|
+
interface LogManager extends Logger {
|
|
459
|
+
channel(name?: string): Logger;
|
|
460
|
+
stack(channels: string[]): Logger;
|
|
461
|
+
}
|
|
462
|
+
declare const LogManager: Token<LogManager>;
|
|
463
|
+
|
|
464
|
+
type ErrorKind = 'Http' | 'ModelNotFound' | 'Validation' | 'Authentication' | 'Authorization' | 'TokenMismatch' | 'BindingResolution' | 'CircularDependency' | 'ContainerNotAvailable';
|
|
465
|
+
/** Every error thrown by the framework implements this. The exception handler switches on `kind`. */
|
|
466
|
+
interface OrielError extends Error {
|
|
467
|
+
readonly kind: ErrorKind;
|
|
468
|
+
/** HTTP status the error should render as, when relevant. */
|
|
469
|
+
readonly status?: number;
|
|
470
|
+
readonly headers?: Record<string, string>;
|
|
471
|
+
}
|
|
472
|
+
interface ValidationError extends OrielError {
|
|
473
|
+
readonly kind: 'Validation';
|
|
474
|
+
readonly errors: Record<string, string[]>;
|
|
475
|
+
readonly errorBag: string;
|
|
476
|
+
/** Where to redirect for non-JSON requests (defaults to back()). */
|
|
477
|
+
readonly redirectTo?: string;
|
|
478
|
+
}
|
|
479
|
+
interface AuthenticationError extends OrielError {
|
|
480
|
+
readonly kind: 'Authentication';
|
|
481
|
+
readonly guards: string[];
|
|
482
|
+
readonly redirectTo?: string;
|
|
483
|
+
}
|
|
484
|
+
interface ModelNotFoundError extends OrielError {
|
|
485
|
+
readonly kind: 'ModelNotFound';
|
|
486
|
+
readonly model: string;
|
|
487
|
+
readonly ids: unknown[];
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
type Operator = '=' | '!=' | '<>' | '<' | '<=' | '>' | '>=' | 'like' | 'not like' | 'ilike' | 'in' | 'not in';
|
|
491
|
+
type Row = Record<string, unknown>;
|
|
492
|
+
/** The minimal query surface other components rely on (Queue, Cache, Session, Validation, Notifications). */
|
|
493
|
+
interface QueryBuilder<T = Row> {
|
|
494
|
+
select(...columns: string[]): this;
|
|
495
|
+
where(column: string, value: unknown): this;
|
|
496
|
+
where(column: string, operator: Operator, value: unknown): this;
|
|
497
|
+
where(conditions: Row): this;
|
|
498
|
+
orWhere(column: string, value: unknown): this;
|
|
499
|
+
orWhere(column: string, operator: Operator, value: unknown): this;
|
|
500
|
+
whereIn(column: string, values: readonly unknown[]): this;
|
|
501
|
+
whereNotIn(column: string, values: readonly unknown[]): this;
|
|
502
|
+
whereNull(column: string): this;
|
|
503
|
+
whereNotNull(column: string): this;
|
|
504
|
+
orderBy(column: string, direction?: 'asc' | 'desc'): this;
|
|
505
|
+
limit(count: number): this;
|
|
506
|
+
offset(count: number): this;
|
|
507
|
+
lockForUpdate(): this;
|
|
508
|
+
get(): Promise<Enumerable<T>>;
|
|
509
|
+
first(): Promise<T | undefined>;
|
|
510
|
+
find(id: unknown): Promise<T | undefined>;
|
|
511
|
+
value<V = unknown>(column: string): Promise<V | undefined>;
|
|
512
|
+
pluck<V = unknown>(column: string): Promise<Enumerable<V>>;
|
|
513
|
+
count(): Promise<number>;
|
|
514
|
+
exists(): Promise<boolean>;
|
|
515
|
+
insert(values: Row | Row[]): Promise<void>;
|
|
516
|
+
insertGetId(values: Row, keyName?: string): Promise<number | string>;
|
|
517
|
+
update(values: Row): Promise<number>;
|
|
518
|
+
upsert(values: Row | Row[], uniqueBy: string[], update?: string[]): Promise<number>;
|
|
519
|
+
increment(column: string, amount?: number, extra?: Row): Promise<number>;
|
|
520
|
+
decrement(column: string, amount?: number, extra?: Row): Promise<number>;
|
|
521
|
+
delete(): Promise<number>;
|
|
522
|
+
}
|
|
523
|
+
type DriverName = 'pgsql' | 'mysql' | 'sqlite';
|
|
524
|
+
interface DatabaseConnection {
|
|
525
|
+
getName(): string;
|
|
526
|
+
getDriverName(): DriverName;
|
|
527
|
+
table<T = Row>(table: string): QueryBuilder<T>;
|
|
528
|
+
select<T = Row>(sql: string, bindings?: readonly unknown[]): Promise<T[]>;
|
|
529
|
+
statement(sql: string, bindings?: readonly unknown[]): Promise<void>;
|
|
530
|
+
/** Nested calls use savepoints. Rolls back if fn throws. */
|
|
531
|
+
transaction<R>(fn: (connection: DatabaseConnection) => Promise<R>): Promise<R>;
|
|
532
|
+
}
|
|
533
|
+
interface DatabaseManager extends DatabaseConnection {
|
|
534
|
+
connection(name?: string): DatabaseConnection;
|
|
535
|
+
disconnect(name?: string): Promise<void>;
|
|
536
|
+
}
|
|
537
|
+
declare const DatabaseManager: Token<DatabaseManager>;
|
|
538
|
+
/** What non-Database components may rely on from a model instance. */
|
|
539
|
+
interface ModelInstance {
|
|
540
|
+
exists: boolean;
|
|
541
|
+
getKey(): unknown;
|
|
542
|
+
getKeyName(): string;
|
|
543
|
+
getTable(): string;
|
|
544
|
+
getRouteKey(): unknown;
|
|
545
|
+
getRouteKeyName(): string;
|
|
546
|
+
getAttribute<T = unknown>(key: string): T;
|
|
547
|
+
setAttribute(key: string, value: unknown): this;
|
|
548
|
+
fill(attributes: Row): this;
|
|
549
|
+
save(): Promise<boolean>;
|
|
550
|
+
delete(): Promise<boolean>;
|
|
551
|
+
refresh(): Promise<this>;
|
|
552
|
+
toArray(): Row;
|
|
553
|
+
toJSON(): Row;
|
|
554
|
+
}
|
|
555
|
+
interface ModelStatic<M extends ModelInstance = ModelInstance> {
|
|
556
|
+
new (): M;
|
|
557
|
+
query(): QueryBuilder<M>;
|
|
558
|
+
find(id: unknown): Promise<M | undefined>;
|
|
559
|
+
findOrFail(id: unknown): Promise<M>;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/** A rule object (Laravel's ValidationRule). Call fail() to reject the value. */
|
|
563
|
+
interface ValidationRule {
|
|
564
|
+
validate(attribute: string, value: unknown, fail: (message: string) => void, data: Record<string, unknown>): void | Promise<void>;
|
|
565
|
+
}
|
|
566
|
+
/** 'required|string|max:255', or an array mixing strings and rule objects. Keys support dot + `*` wildcards. */
|
|
567
|
+
type Rules = Record<string, string | ReadonlyArray<string | ValidationRule>>;
|
|
568
|
+
interface MessageBag {
|
|
569
|
+
has(key: string): boolean;
|
|
570
|
+
first(key?: string): string | undefined;
|
|
571
|
+
get(key: string): string[];
|
|
572
|
+
all(): string[];
|
|
573
|
+
isEmpty(): boolean;
|
|
574
|
+
count(): number;
|
|
575
|
+
toObject(): Record<string, string[]>;
|
|
576
|
+
}
|
|
577
|
+
interface Validator {
|
|
578
|
+
passes(): Promise<boolean>;
|
|
579
|
+
fails(): Promise<boolean>;
|
|
580
|
+
/** Only the keys that have rules. Throws ValidationError (Exceptions.ts) on failure. */
|
|
581
|
+
validated<T = Record<string, unknown>>(): Promise<T>;
|
|
582
|
+
/** Valid only after passes()/fails()/validated() has run. */
|
|
583
|
+
errors(): MessageBag;
|
|
584
|
+
after(callback: (validator: Validator) => void | Promise<void>): this;
|
|
585
|
+
}
|
|
586
|
+
type RuleCallback = (attribute: string, value: unknown, parameters: string[], data: Record<string, unknown>) => boolean | Promise<boolean>;
|
|
587
|
+
interface ValidationFactory {
|
|
588
|
+
make(data: Record<string, unknown>, rules: Rules, messages?: Record<string, string>, attributes?: Record<string, string>): Validator;
|
|
589
|
+
/** Registers a string rule, e.g. extend('uppercase', fn, ':attribute must be uppercase'). */
|
|
590
|
+
extend(name: string, callback: RuleCallback, message?: string): void;
|
|
591
|
+
}
|
|
592
|
+
declare const ValidationFactory: Token<ValidationFactory>;
|
|
593
|
+
|
|
594
|
+
interface Authenticatable {
|
|
595
|
+
getAuthIdentifierName(): string;
|
|
596
|
+
getAuthIdentifier(): unknown;
|
|
597
|
+
getAuthPassword(): string;
|
|
598
|
+
getRememberToken(): string | undefined;
|
|
599
|
+
setRememberToken(value: string): void;
|
|
600
|
+
getRememberTokenName(): string;
|
|
601
|
+
}
|
|
602
|
+
type Credentials = Record<string, unknown>;
|
|
603
|
+
interface UserProvider {
|
|
604
|
+
retrieveById(id: unknown): Promise<Authenticatable | undefined>;
|
|
605
|
+
retrieveByToken(id: unknown, token: string): Promise<Authenticatable | undefined>;
|
|
606
|
+
updateRememberToken(user: Authenticatable, token: string): Promise<void>;
|
|
607
|
+
retrieveByCredentials(credentials: Credentials): Promise<Authenticatable | undefined>;
|
|
608
|
+
validateCredentials(user: Authenticatable, credentials: Credentials): Promise<boolean>;
|
|
609
|
+
}
|
|
610
|
+
interface Guard {
|
|
611
|
+
check(): Promise<boolean>;
|
|
612
|
+
guest(): Promise<boolean>;
|
|
613
|
+
user<T extends Authenticatable = Authenticatable>(): Promise<T | undefined>;
|
|
614
|
+
id(): Promise<unknown>;
|
|
615
|
+
validate(credentials: Credentials): Promise<boolean>;
|
|
616
|
+
hasUser(): boolean;
|
|
617
|
+
setUser(user: Authenticatable): void;
|
|
618
|
+
}
|
|
619
|
+
interface StatefulGuard extends Guard {
|
|
620
|
+
attempt(credentials: Credentials, remember?: boolean): Promise<boolean>;
|
|
621
|
+
once(credentials: Credentials): Promise<boolean>;
|
|
622
|
+
login(user: Authenticatable, remember?: boolean): Promise<void>;
|
|
623
|
+
loginUsingId(id: unknown, remember?: boolean): Promise<Authenticatable | false>;
|
|
624
|
+
logout(): Promise<void>;
|
|
625
|
+
}
|
|
626
|
+
interface AuthFactory {
|
|
627
|
+
guard(name?: string): StatefulGuard | Guard;
|
|
628
|
+
shouldUse(name: string): void;
|
|
629
|
+
extend(driver: string, factory: (name: string, config: Record<string, unknown>) => Guard): void;
|
|
630
|
+
provider(driver: string, factory: (config: Record<string, unknown>) => UserProvider): void;
|
|
631
|
+
}
|
|
632
|
+
declare const AuthFactory: Token<AuthFactory>;
|
|
633
|
+
type AbilityCallback = (user: Authenticatable | undefined, ...args: unknown[]) => boolean | Promise<boolean>;
|
|
634
|
+
interface Gate {
|
|
635
|
+
define(ability: string, callback: AbilityCallback): this;
|
|
636
|
+
policy(model: Class<unknown>, policy: Class<unknown>): this;
|
|
637
|
+
before(callback: (user: Authenticatable | undefined, ability: string) => boolean | undefined | Promise<boolean | undefined>): this;
|
|
638
|
+
allows(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
639
|
+
denies(ability: string, ...args: unknown[]): Promise<boolean>;
|
|
640
|
+
/** Throws an Authorization OrielError (403) when denied. */
|
|
641
|
+
authorize(ability: string, ...args: unknown[]): Promise<void>;
|
|
642
|
+
any(abilities: string[], ...args: unknown[]): Promise<boolean>;
|
|
643
|
+
forUser(user: Authenticatable | undefined): Gate;
|
|
644
|
+
}
|
|
645
|
+
declare const Gate: Token<Gate>;
|
|
646
|
+
type PasswordStatus = 'passwords.sent' | 'passwords.reset' | 'passwords.user' | 'passwords.token' | 'passwords.throttled';
|
|
647
|
+
interface PasswordBroker {
|
|
648
|
+
sendResetLink(credentials: Credentials): Promise<PasswordStatus>;
|
|
649
|
+
reset(credentials: Credentials, callback: (user: Authenticatable, password: string) => Promise<void>): Promise<PasswordStatus>;
|
|
650
|
+
}
|
|
651
|
+
declare const PasswordBroker: Token<PasswordBroker>;
|
|
652
|
+
interface MustVerifyEmail {
|
|
653
|
+
hasVerifiedEmail(): boolean;
|
|
654
|
+
markEmailAsVerified(): Promise<boolean>;
|
|
655
|
+
sendEmailVerificationNotification(): Promise<void>;
|
|
656
|
+
getEmailForVerification(): string;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
|
|
660
|
+
interface ShouldQueue {
|
|
661
|
+
connection?: string;
|
|
662
|
+
queue?: string;
|
|
663
|
+
/** Seconds. */
|
|
664
|
+
delay?: number;
|
|
665
|
+
tries?: number;
|
|
666
|
+
/** Seconds, or a per-attempt list. */
|
|
667
|
+
backoff?: number | number[];
|
|
668
|
+
/** Seconds. */
|
|
669
|
+
timeout?: number;
|
|
670
|
+
uniqueId?(): string;
|
|
671
|
+
}
|
|
672
|
+
/** A job: public fields are its serialized data; handle() runs on the worker (inject() works inside it). */
|
|
673
|
+
interface Job extends Partial<ShouldQueue> {
|
|
674
|
+
handle(): unknown | Promise<unknown>;
|
|
675
|
+
failed?(error: unknown): void | Promise<void>;
|
|
676
|
+
}
|
|
677
|
+
interface QueuePayload {
|
|
678
|
+
uuid: string;
|
|
679
|
+
/** ClassRegistry name. */
|
|
680
|
+
job: string;
|
|
681
|
+
displayName: string;
|
|
682
|
+
data: Record<string, unknown>;
|
|
683
|
+
attempts: number;
|
|
684
|
+
maxTries?: number;
|
|
685
|
+
backoff?: number[];
|
|
686
|
+
timeout?: number;
|
|
687
|
+
/** Unix ms. */
|
|
688
|
+
pushedAt: number;
|
|
689
|
+
batchId?: string;
|
|
690
|
+
chain?: QueuePayload[];
|
|
691
|
+
}
|
|
692
|
+
interface QueueJob {
|
|
693
|
+
getJobId(): string;
|
|
694
|
+
getQueue(): string;
|
|
695
|
+
payload(): QueuePayload;
|
|
696
|
+
attempts(): number;
|
|
697
|
+
delete(): Promise<void>;
|
|
698
|
+
release(delaySeconds?: number): Promise<void>;
|
|
699
|
+
/** Marks as failed: stores it via FailedJobProvider and calls job.failed(). */
|
|
700
|
+
fail(error: unknown): Promise<void>;
|
|
701
|
+
isDeleted(): boolean;
|
|
702
|
+
isReleased(): boolean;
|
|
703
|
+
}
|
|
704
|
+
interface Queue {
|
|
705
|
+
push(job: Job, queue?: string): Promise<string>;
|
|
706
|
+
later(delaySeconds: number, job: Job, queue?: string): Promise<string>;
|
|
707
|
+
pushRaw(payload: QueuePayload, queue?: string, delaySeconds?: number): Promise<string>;
|
|
708
|
+
pop(queue?: string): Promise<QueueJob | undefined>;
|
|
709
|
+
size(queue?: string): Promise<number>;
|
|
710
|
+
clear(queue?: string): Promise<number>;
|
|
711
|
+
}
|
|
712
|
+
interface QueueManager extends Queue {
|
|
713
|
+
connection(name?: string): Queue;
|
|
714
|
+
extend(driver: string, factory: (config: Record<string, unknown>) => Queue): void;
|
|
715
|
+
}
|
|
716
|
+
declare const QueueManager: Token<QueueManager>;
|
|
717
|
+
interface FailedJob {
|
|
718
|
+
id: string;
|
|
719
|
+
connection: string;
|
|
720
|
+
queue: string;
|
|
721
|
+
payload: QueuePayload;
|
|
722
|
+
exception: string;
|
|
723
|
+
failedAt: Date;
|
|
724
|
+
}
|
|
725
|
+
interface FailedJobProvider {
|
|
726
|
+
log(connection: string, queue: string, payload: QueuePayload, error: unknown): Promise<string>;
|
|
727
|
+
all(): Promise<FailedJob[]>;
|
|
728
|
+
find(id: string): Promise<FailedJob | undefined>;
|
|
729
|
+
forget(id: string): Promise<boolean>;
|
|
730
|
+
flush(): Promise<void>;
|
|
731
|
+
}
|
|
732
|
+
declare const FailedJobProvider: Token<FailedJobProvider>;
|
|
733
|
+
|
|
734
|
+
interface Batch {
|
|
735
|
+
readonly id: string;
|
|
736
|
+
readonly name: string;
|
|
737
|
+
readonly totalJobs: number;
|
|
738
|
+
readonly pendingJobs: number;
|
|
739
|
+
readonly failedJobs: number;
|
|
740
|
+
progress(): number;
|
|
741
|
+
finished(): boolean;
|
|
742
|
+
cancelled(): boolean;
|
|
743
|
+
cancel(): Promise<void>;
|
|
744
|
+
}
|
|
745
|
+
interface PendingChain {
|
|
746
|
+
onConnection(connection: string): this;
|
|
747
|
+
onQueue(queue: string): this;
|
|
748
|
+
/** Runs as a job if any job in the chain fails. Callbacks are jobs, because closures can't be serialized. */
|
|
749
|
+
catch(job: Job): this;
|
|
750
|
+
dispatch(): Promise<void>;
|
|
751
|
+
}
|
|
752
|
+
interface PendingBatch {
|
|
753
|
+
name(name: string): this;
|
|
754
|
+
onConnection(connection: string): this;
|
|
755
|
+
onQueue(queue: string): this;
|
|
756
|
+
allowFailures(allow?: boolean): this;
|
|
757
|
+
then(job: Job): this;
|
|
758
|
+
catch(job: Job): this;
|
|
759
|
+
finally(job: Job): this;
|
|
760
|
+
dispatch(): Promise<Batch>;
|
|
761
|
+
}
|
|
762
|
+
interface BusDispatcher {
|
|
763
|
+
/** Queues it when the job is queueable (implements ShouldQueue / declares queue options), otherwise runs it now. */
|
|
764
|
+
dispatch(job: Job): Promise<unknown>;
|
|
765
|
+
dispatchSync(job: Job): Promise<unknown>;
|
|
766
|
+
/** Runs after the current response is sent (or the current job finishes). */
|
|
767
|
+
dispatchAfterResponse(job: Job): void;
|
|
768
|
+
chain(jobs: Job[]): PendingChain;
|
|
769
|
+
batch(jobs: Job[]): PendingBatch;
|
|
770
|
+
findBatch(id: string): Promise<Batch | undefined>;
|
|
771
|
+
}
|
|
772
|
+
declare const BusDispatcher: Token<BusDispatcher>;
|
|
773
|
+
|
|
774
|
+
/** A CLI command. Signature uses Laravel syntax: 'mail:send {user} {--queue=default}'. */
|
|
775
|
+
interface Command {
|
|
776
|
+
readonly signature: string;
|
|
777
|
+
readonly description: string;
|
|
778
|
+
handle(): number | void | Promise<number | void>;
|
|
779
|
+
}
|
|
780
|
+
interface ConsoleKernel {
|
|
781
|
+
/** Returns the exit code. */
|
|
782
|
+
handle(argv: string[]): Promise<number>;
|
|
783
|
+
call(command: string, parameters?: Record<string, unknown>): Promise<number>;
|
|
784
|
+
/** Output buffered from the last call(). */
|
|
785
|
+
output(): string;
|
|
786
|
+
all(): Record<string, Command>;
|
|
787
|
+
}
|
|
788
|
+
declare const ConsoleKernel: Token<ConsoleKernel>;
|
|
789
|
+
interface ScheduledEvent {
|
|
790
|
+
readonly expression: string;
|
|
791
|
+
cron(expression: string): this;
|
|
792
|
+
everyMinute(): this;
|
|
793
|
+
everyFiveMinutes(): this;
|
|
794
|
+
everyFifteenMinutes(): this;
|
|
795
|
+
everyThirtyMinutes(): this;
|
|
796
|
+
hourly(): this;
|
|
797
|
+
hourlyAt(minute: number): this;
|
|
798
|
+
daily(): this;
|
|
799
|
+
dailyAt(time: string): this;
|
|
800
|
+
twiceDaily(first?: number, second?: number): this;
|
|
801
|
+
weekly(): this;
|
|
802
|
+
weeklyOn(day: number, time?: string): this;
|
|
803
|
+
monthly(): this;
|
|
804
|
+
monthlyOn(day: number, time?: string): this;
|
|
805
|
+
yearly(): this;
|
|
806
|
+
weekdays(): this;
|
|
807
|
+
weekends(): this;
|
|
808
|
+
timezone(timezone: string): this;
|
|
809
|
+
between(start: string, end: string): this;
|
|
810
|
+
when(callback: () => boolean | Promise<boolean>): this;
|
|
811
|
+
skip(callback: () => boolean | Promise<boolean>): this;
|
|
812
|
+
/** Uses a cache lock (default 1440 minutes). */
|
|
813
|
+
withoutOverlapping(expiresAtMinutes?: number): this;
|
|
814
|
+
/** Uses a cache lock so only one server runs it. */
|
|
815
|
+
onOneServer(): this;
|
|
816
|
+
runInBackground(): this;
|
|
817
|
+
name(name: string): this;
|
|
818
|
+
description(description: string): this;
|
|
819
|
+
isDue(now: Date): boolean;
|
|
820
|
+
run(): Promise<void>;
|
|
821
|
+
}
|
|
822
|
+
interface Schedule {
|
|
823
|
+
command(command: string, parameters?: string[]): ScheduledEvent;
|
|
824
|
+
job(job: Job, queue?: string, connection?: string): ScheduledEvent;
|
|
825
|
+
call(callback: () => unknown | Promise<unknown>): ScheduledEvent;
|
|
826
|
+
events(): ScheduledEvent[];
|
|
827
|
+
dueEvents(now: Date): ScheduledEvent[];
|
|
828
|
+
}
|
|
829
|
+
declare const Schedule: Token<Schedule>;
|
|
830
|
+
|
|
831
|
+
interface Address {
|
|
832
|
+
address: string;
|
|
833
|
+
name?: string;
|
|
834
|
+
}
|
|
835
|
+
/** A plain email string, an Address, or anything with email (+ optional name), such as a User model. */
|
|
836
|
+
type MailRecipient = string | Address | {
|
|
837
|
+
email: string;
|
|
838
|
+
name?: string;
|
|
839
|
+
};
|
|
840
|
+
interface Envelope {
|
|
841
|
+
from?: MailRecipient;
|
|
842
|
+
to?: MailRecipient[];
|
|
843
|
+
cc?: MailRecipient[];
|
|
844
|
+
bcc?: MailRecipient[];
|
|
845
|
+
replyTo?: MailRecipient[];
|
|
846
|
+
subject?: string;
|
|
847
|
+
tags?: string[];
|
|
848
|
+
metadata?: Record<string, string>;
|
|
849
|
+
}
|
|
850
|
+
interface Content {
|
|
851
|
+
/** A View name, rendered by ViewFactory (TSX). */
|
|
852
|
+
view?: string;
|
|
853
|
+
/** A plain-text view name. */
|
|
854
|
+
text?: string;
|
|
855
|
+
/** Raw HTML (used when no view is given). */
|
|
856
|
+
htmlString?: string;
|
|
857
|
+
with?: Record<string, unknown>;
|
|
858
|
+
}
|
|
859
|
+
interface Attachment {
|
|
860
|
+
name: string;
|
|
861
|
+
path?: string;
|
|
862
|
+
data?: Uint8Array | string;
|
|
863
|
+
mime?: string;
|
|
864
|
+
}
|
|
865
|
+
/** Laravel 10+ style mailable: envelope() + content() + attachments(). */
|
|
866
|
+
interface Mailable {
|
|
867
|
+
envelope(): Envelope | Promise<Envelope>;
|
|
868
|
+
content(): Content | Promise<Content>;
|
|
869
|
+
attachments?(): Attachment[] | Promise<Attachment[]>;
|
|
870
|
+
}
|
|
871
|
+
/** Fully rendered message handed to a transport. */
|
|
872
|
+
interface OutgoingMessage {
|
|
873
|
+
from: Address;
|
|
874
|
+
to: Address[];
|
|
875
|
+
cc: Address[];
|
|
876
|
+
bcc: Address[];
|
|
877
|
+
replyTo: Address[];
|
|
878
|
+
subject: string;
|
|
879
|
+
html?: string;
|
|
880
|
+
text?: string;
|
|
881
|
+
attachments: Attachment[];
|
|
882
|
+
headers: Record<string, string>;
|
|
883
|
+
}
|
|
884
|
+
interface SentMessage {
|
|
885
|
+
messageId: string;
|
|
886
|
+
message: OutgoingMessage;
|
|
887
|
+
}
|
|
888
|
+
interface MailTransport {
|
|
889
|
+
send(message: OutgoingMessage): Promise<SentMessage>;
|
|
890
|
+
}
|
|
891
|
+
interface PendingMail {
|
|
892
|
+
cc(recipients: MailRecipient | MailRecipient[]): this;
|
|
893
|
+
bcc(recipients: MailRecipient | MailRecipient[]): this;
|
|
894
|
+
send(mailable: Mailable): Promise<SentMessage | undefined>;
|
|
895
|
+
queue(mailable: Mailable): Promise<void>;
|
|
896
|
+
later(delaySeconds: number, mailable: Mailable): Promise<void>;
|
|
897
|
+
}
|
|
898
|
+
interface Mailer {
|
|
899
|
+
to(recipients: MailRecipient | MailRecipient[]): PendingMail;
|
|
900
|
+
/** Sends to the recipients given in the mailable's envelope. Queues it if the mailable is queueable. */
|
|
901
|
+
send(mailable: Mailable): Promise<SentMessage | undefined>;
|
|
902
|
+
queue(mailable: Mailable): Promise<void>;
|
|
903
|
+
}
|
|
904
|
+
interface MailManager extends Mailer {
|
|
905
|
+
mailer(name?: string): Mailer;
|
|
906
|
+
extend(transport: string, factory: (config: Record<string, unknown>) => MailTransport): void;
|
|
907
|
+
}
|
|
908
|
+
declare const MailManager: Token<MailManager>;
|
|
909
|
+
|
|
910
|
+
interface Notifiable {
|
|
911
|
+
/** e.g. 'mail' → email address, 'database' → the model itself. */
|
|
912
|
+
routeNotificationFor(channel: string, notification: Notification): unknown;
|
|
913
|
+
}
|
|
914
|
+
interface Notification {
|
|
915
|
+
/** Optional id; set by the dispatcher when missing. */
|
|
916
|
+
id?: string;
|
|
917
|
+
via(notifiable: Notifiable): string[];
|
|
918
|
+
/** Returns a Mailable (Contracts/Mail) or the Notifications MailMessage builder. */
|
|
919
|
+
toMail?(notifiable: Notifiable): unknown;
|
|
920
|
+
toDatabase?(notifiable: Notifiable): Record<string, unknown>;
|
|
921
|
+
toArray?(notifiable: Notifiable): Record<string, unknown>;
|
|
922
|
+
}
|
|
923
|
+
interface NotificationChannel {
|
|
924
|
+
send(notifiable: Notifiable, notification: Notification): Promise<void>;
|
|
925
|
+
}
|
|
926
|
+
interface NotificationDispatcher {
|
|
927
|
+
/** Queues it when the notification is queueable, otherwise sends immediately. */
|
|
928
|
+
send(notifiables: Notifiable | Notifiable[], notification: Notification): Promise<void>;
|
|
929
|
+
sendNow(notifiables: Notifiable | Notifiable[], notification: Notification, channels?: string[]): Promise<void>;
|
|
930
|
+
/** On-demand: Notification.route('mail', 'a@b.c').notify(n). */
|
|
931
|
+
route(channel: string, route: unknown): Notifiable & {
|
|
932
|
+
notify(notification: Notification): Promise<void>;
|
|
933
|
+
};
|
|
934
|
+
extend(channel: string, factory: () => NotificationChannel): void;
|
|
935
|
+
}
|
|
936
|
+
declare const NotificationDispatcher: Token<NotificationDispatcher>;
|
|
937
|
+
|
|
938
|
+
interface Lock {
|
|
939
|
+
/** Tries once. Returns whether it was acquired. */
|
|
940
|
+
get(): Promise<boolean>;
|
|
941
|
+
/** Tries once. Runs the callback and releases if acquired, else returns false. */
|
|
942
|
+
get<T>(callback: () => T | Promise<T>): Promise<T | false>;
|
|
943
|
+
/** Waits up to `seconds` to acquire. Throws LockTimeout (an OrielError, kind 'Http', status 423) on timeout. */
|
|
944
|
+
block<T>(seconds: number, callback?: () => T | Promise<T>): Promise<T | true>;
|
|
945
|
+
release(): Promise<boolean>;
|
|
946
|
+
forceRelease(): Promise<void>;
|
|
947
|
+
owner(): string;
|
|
948
|
+
}
|
|
949
|
+
interface CacheRepository {
|
|
950
|
+
get<T = unknown>(key: string): Promise<T | undefined>;
|
|
951
|
+
get<T>(key: string, defaultValue: T | (() => T)): Promise<T>;
|
|
952
|
+
many<T = unknown>(keys: string[]): Promise<Record<string, T | undefined>>;
|
|
953
|
+
has(key: string): Promise<boolean>;
|
|
954
|
+
missing(key: string): Promise<boolean>;
|
|
955
|
+
/** ttl in seconds; undefined = forever. */
|
|
956
|
+
put(key: string, value: unknown, ttlSeconds?: number): Promise<boolean>;
|
|
957
|
+
/** Only stores if the key is missing. Atomic in every driver. */
|
|
958
|
+
add(key: string, value: unknown, ttlSeconds?: number): Promise<boolean>;
|
|
959
|
+
increment(key: string, by?: number): Promise<number>;
|
|
960
|
+
decrement(key: string, by?: number): Promise<number>;
|
|
961
|
+
forever(key: string, value: unknown): Promise<boolean>;
|
|
962
|
+
pull<T = unknown>(key: string, defaultValue?: T): Promise<T | undefined>;
|
|
963
|
+
forget(key: string): Promise<boolean>;
|
|
964
|
+
flush(): Promise<boolean>;
|
|
965
|
+
remember<T>(key: string, ttlSeconds: number, callback: () => T | Promise<T>): Promise<T>;
|
|
966
|
+
rememberForever<T>(key: string, callback: () => T | Promise<T>): Promise<T>;
|
|
967
|
+
lock(name: string, seconds?: number, owner?: string): Lock;
|
|
968
|
+
/** Only supported by the redis store. Others throw. */
|
|
969
|
+
tags(names: string | string[]): CacheRepository;
|
|
970
|
+
}
|
|
971
|
+
interface CacheManager extends CacheRepository {
|
|
972
|
+
store(name?: string): CacheRepository;
|
|
973
|
+
extend(driver: string, factory: (config: Record<string, unknown>) => CacheRepository): void;
|
|
974
|
+
}
|
|
975
|
+
declare const CacheManager: Token<CacheManager>;
|
|
976
|
+
|
|
977
|
+
type ListenerClass<E> = Class<{
|
|
978
|
+
handle(event: E): unknown;
|
|
979
|
+
}>;
|
|
980
|
+
type Listener<E> = ((event: E) => unknown) | ListenerClass<E>;
|
|
981
|
+
interface EventDispatcher {
|
|
982
|
+
/** Class events (recommended) or string events like 'eloquent.created: Post'. */
|
|
983
|
+
listen<E>(events: Class<E> | string | Array<Class<E> | string>, listener: Listener<E>): void;
|
|
984
|
+
hasListeners(event: Class<unknown> | string): boolean;
|
|
985
|
+
/** Runs listeners in registration order. Listener classes that are queueable are queued. Returns results. */
|
|
986
|
+
dispatch(event: object | string, payload?: unknown[]): Promise<unknown[]>;
|
|
987
|
+
/** Stops at the first listener that returns something other than undefined. Returns that value. */
|
|
988
|
+
until(event: object | string, payload?: unknown[]): Promise<unknown>;
|
|
989
|
+
subscribe(subscriber: Class<{
|
|
990
|
+
subscribe(events: EventDispatcher): void;
|
|
991
|
+
}>): void;
|
|
992
|
+
forget(event: Class<unknown> | string): void;
|
|
993
|
+
}
|
|
994
|
+
declare const EventDispatcher: Token<EventDispatcher>;
|
|
995
|
+
|
|
996
|
+
interface PutOptions {
|
|
997
|
+
visibility?: 'public' | 'private';
|
|
998
|
+
mimeType?: string;
|
|
999
|
+
}
|
|
1000
|
+
/** Paths are relative to the disk root. Throws on paths that escape it ('../'). */
|
|
1001
|
+
interface Filesystem {
|
|
1002
|
+
exists(path: string): Promise<boolean>;
|
|
1003
|
+
missing(path: string): Promise<boolean>;
|
|
1004
|
+
get(path: string): Promise<string>;
|
|
1005
|
+
getBytes(path: string): Promise<Uint8Array>;
|
|
1006
|
+
readStream(path: string): Promise<ReadableStream<Uint8Array>>;
|
|
1007
|
+
put(path: string, contents: string | Uint8Array | ReadableStream<Uint8Array>, options?: PutOptions): Promise<boolean>;
|
|
1008
|
+
/** Stores under a generated unique name. Returns the stored path. */
|
|
1009
|
+
putFile(directory: string, file: UploadedFile, options?: PutOptions): Promise<string>;
|
|
1010
|
+
putFileAs(directory: string, file: UploadedFile, name: string, options?: PutOptions): Promise<string>;
|
|
1011
|
+
delete(paths: string | string[]): Promise<boolean>;
|
|
1012
|
+
copy(from: string, to: string): Promise<boolean>;
|
|
1013
|
+
move(from: string, to: string): Promise<boolean>;
|
|
1014
|
+
size(path: string): Promise<number>;
|
|
1015
|
+
lastModified(path: string): Promise<Date>;
|
|
1016
|
+
mimeType(path: string): Promise<string | undefined>;
|
|
1017
|
+
url(path: string): string;
|
|
1018
|
+
temporaryUrl(path: string, expiresAt: Date): Promise<string>;
|
|
1019
|
+
files(directory?: string, recursive?: boolean): Promise<string[]>;
|
|
1020
|
+
directories(directory?: string, recursive?: boolean): Promise<string[]>;
|
|
1021
|
+
makeDirectory(path: string): Promise<boolean>;
|
|
1022
|
+
deleteDirectory(path: string): Promise<boolean>;
|
|
1023
|
+
/** Absolute local path (local disks only). */
|
|
1024
|
+
path(path: string): string;
|
|
1025
|
+
}
|
|
1026
|
+
interface FilesystemManager extends Filesystem {
|
|
1027
|
+
disk(name?: string): Filesystem;
|
|
1028
|
+
extend(driver: string, factory: (config: Record<string, unknown>) => Filesystem): void;
|
|
1029
|
+
}
|
|
1030
|
+
declare const FilesystemManager: Token<FilesystemManager>;
|
|
1031
|
+
|
|
1032
|
+
/** The Inertia page object (protocol v2). */
|
|
1033
|
+
interface InertiaPage {
|
|
1034
|
+
component: string;
|
|
1035
|
+
props: Record<string, unknown>;
|
|
1036
|
+
url: string;
|
|
1037
|
+
version: string | null;
|
|
1038
|
+
encryptHistory?: boolean;
|
|
1039
|
+
clearHistory?: boolean;
|
|
1040
|
+
mergeProps?: string[];
|
|
1041
|
+
deferredProps?: Record<string, string[]>;
|
|
1042
|
+
}
|
|
1043
|
+
interface InertiaResponse extends Responsable {
|
|
1044
|
+
with(key: string | Record<string, unknown>, value?: unknown): this;
|
|
1045
|
+
withViewData(key: string | Record<string, unknown>, value?: unknown): this;
|
|
1046
|
+
}
|
|
1047
|
+
type PropCallback<T = unknown> = () => T | Promise<T>;
|
|
1048
|
+
interface InertiaFactory {
|
|
1049
|
+
render(component: string, props?: Record<string, unknown>): InertiaResponse;
|
|
1050
|
+
share(key: string | Record<string, unknown>, value?: unknown): void;
|
|
1051
|
+
getShared(key?: string): unknown;
|
|
1052
|
+
version(version: string | (() => string | Promise<string>)): void;
|
|
1053
|
+
/** Only evaluated on partial reloads that ask for it. */
|
|
1054
|
+
optional<T>(callback: PropCallback<T>): unknown;
|
|
1055
|
+
/** Loaded in a follow-up request after the first render. */
|
|
1056
|
+
defer<T>(callback: PropCallback<T>, group?: string): unknown;
|
|
1057
|
+
/** Always included, even in partial reloads. */
|
|
1058
|
+
always<T>(value: T | PropCallback<T>): unknown;
|
|
1059
|
+
/** Merged with the existing client-side value instead of replacing it. */
|
|
1060
|
+
merge<T>(value: T | PropCallback<T>): unknown;
|
|
1061
|
+
/** 409 + X-Inertia-Location for external redirects. */
|
|
1062
|
+
location(url: string): Response;
|
|
1063
|
+
setRootView(view: string): void;
|
|
1064
|
+
}
|
|
1065
|
+
declare const InertiaFactory: Token<InertiaFactory>;
|
|
1066
|
+
|
|
1067
|
+
interface LiveSnapshot {
|
|
1068
|
+
data: Record<string, unknown>;
|
|
1069
|
+
memo: {
|
|
1070
|
+
id: string;
|
|
1071
|
+
/** ClassRegistry name of the component. */
|
|
1072
|
+
name: string;
|
|
1073
|
+
path: string;
|
|
1074
|
+
method: string;
|
|
1075
|
+
children: Record<string, [tag: string, id: string]>;
|
|
1076
|
+
errors: Record<string, string[]>;
|
|
1077
|
+
};
|
|
1078
|
+
/** HMAC-SHA256 of JSON(data + memo), keyed by APP_KEY. */
|
|
1079
|
+
checksum: string;
|
|
1080
|
+
}
|
|
1081
|
+
interface LiveEffects {
|
|
1082
|
+
html?: string;
|
|
1083
|
+
dispatches?: Array<{
|
|
1084
|
+
name: string;
|
|
1085
|
+
params: unknown[];
|
|
1086
|
+
}>;
|
|
1087
|
+
redirect?: string;
|
|
1088
|
+
returns?: unknown[];
|
|
1089
|
+
}
|
|
1090
|
+
interface LiveUpdateRequest {
|
|
1091
|
+
components: Array<{
|
|
1092
|
+
/** JSON-encoded LiveSnapshot. */
|
|
1093
|
+
snapshot: string;
|
|
1094
|
+
updates: Record<string, unknown>;
|
|
1095
|
+
calls: Array<{
|
|
1096
|
+
method: string;
|
|
1097
|
+
params: unknown[];
|
|
1098
|
+
}>;
|
|
1099
|
+
}>;
|
|
1100
|
+
}
|
|
1101
|
+
interface LiveUpdateResponse {
|
|
1102
|
+
components: Array<{
|
|
1103
|
+
snapshot: string;
|
|
1104
|
+
effects: LiveEffects;
|
|
1105
|
+
}>;
|
|
1106
|
+
}
|
|
1107
|
+
interface LiveManager {
|
|
1108
|
+
register(component: Class<unknown>, name?: string): void;
|
|
1109
|
+
/** Server-renders the first HTML (snapshot embedded). */
|
|
1110
|
+
mount(component: string | Class<unknown>, params?: Record<string, unknown>): Promise<string>;
|
|
1111
|
+
/** Checks checksums and CSRF, then applies updates and calls, re-renders and returns new snapshots. */
|
|
1112
|
+
update(request: LiveUpdateRequest): Promise<LiveUpdateResponse>;
|
|
1113
|
+
isLiveRequest(request: HttpRequest): boolean;
|
|
1114
|
+
}
|
|
1115
|
+
declare const LiveManager: Token<LiveManager>;
|
|
1116
|
+
|
|
1117
|
+
export { type AbilityCallback, type Abstract, type ActionMethods, type Address, Application, type Arrayable, type Attachment, AuthFactory, type Authenticatable, type AuthenticationError, type Batch, type BodyInit, BusDispatcher, CacheManager, type CacheRepository, type Class, ClassRegistry, type Command, type Concrete, type ConfigCallbacks, ConfigRepository, ConsoleKernel, Container, type Content, type ControllerAction, type Cookie, CookieJar, type Credentials, type DatabaseConnection, DatabaseManager, type DriverName, Encrypter, type Enumerable, type Envelope, type ErrorKind, EventDispatcher, ExceptionCallbacks, ExceptionHandler, type ExceptionsConfigurator, type Factory, type FailedJob, FailedJobProvider, type Filesystem, FilesystemManager, Gate, type Guard, Hasher, type HeadersInit, type Htmlable, HttpKernel, HttpRequest, InertiaFactory, type InertiaPage, type InertiaResponse, type Job, type Jsonable, type Listener, type ListenerClass, type LiveEffects, LiveManager, type LiveSnapshot, type LiveUpdateRequest, type LiveUpdateResponse, type Lock, type LogLevel, LogManager, type Logger, MailManager, type MailRecipient, type MailTransport, type Mailable, type Mailer, type MessageBag, type Middleware, MiddlewareCallbacks, type MiddlewareClass, type MiddlewareConfigurator, type MiddlewareReference, type ModelInstance, type ModelNotFoundError, type ModelStatic, type MustVerifyEmail, type Next, type Notifiable, type Notification, type NotificationChannel, NotificationDispatcher, type Operator, type OrielError, type OutgoingMessage, PasswordBroker, type PasswordStatus, type PendingBatch, type PendingChain, type PendingMail, type Pipe, type PipeClosure, type PipeNext, type Pipeline, PipelineFactory, type PropCallback, type PutOptions, type QueryBuilder, type Queue, type QueueJob, QueueManager, type QueuePayload, type RedirectResponse, Redirector, type ResourceOptions, type Responsable, ResponseFactory, type Route, type RouteAction, type RouteClosure, RouteModelResolver, type RouteRegistrar, Router, RoutingPaths, type Row, type RuleCallback, type Rules, Schedule, type ScheduledEvent, type SentMessage, type ServiceProvider, type ServiceProviderClass, Session, type SessionHandler, type ShouldQueue, type StatefulGuard, type Token, type UploadedFile, UrlGenerator, type UserProvider, type ValidationError, ValidationFactory, type ValidationRule, type Validator, type View, ViewFactory, token };
|