@orieljs/framework 0.1.0-alpha.5 → 0.1.0-alpha.6

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.
@@ -1,611 +1,67 @@
1
- import { Token as Token$2 } from './contracts.js';
2
- import { S as ServiceProvider$3, A as Application$2 } from './index.d-DOlTeG-8.js';
1
+ import { BusDispatcher, Job, PendingBatchOptions, Class, PendingChain, PendingBatch, Batch, EventDispatcher, Listener, MailManager, Mailable, Address, MailRecipient, Mailer, PendingMail, SentMessage, MailTransport, NotificationDispatcher, Notifiable, Notification, NotificationChannel, QueueManager, QueuePayload, Queue, QueueJob, FilesystemManager, Filesystem, PutOptions, UploadedFile, Application, Session, View, Authenticatable, Container, AuthFactory, InertiaPage, ServiceProvider, ServiceProviderClass, DatabaseManager, ModelInstance, Row, Encrypter, Token, ExceptionHandler, ViewFactory, Rules, MessageBag, LiveSnapshot, LiveEffects, OrielError, ErrorKind, Htmlable, LiveManager, HttpRequest, LiveUpdateRequest, LiveUpdateResponse, MiddlewareClass, Router } from './contracts.js';
2
+ import { S as ServiceProvider$1 } from './index.d-BJyJx6U1.js';
3
3
 
4
- /** A typed, runtime-unique key for container bindings. */
5
- interface Token$1<T> {
6
- readonly id: symbol;
7
- readonly description: string;
8
- /** Phantom field: only carries T at the type level. Never set at runtime. */
9
- readonly __type?: T;
10
- }
11
- type Class$1<T> = abstract new (...args: any[]) => T;
12
- type Abstract$1<T> = Token$1<T> | Class$1<T>;
13
- type Factory$1<T> = (container: Container$1) => T;
14
- type Concrete$1<T> = Factory$1<T> | (new () => T);
15
- interface Container$1 {
16
- /** New instance on every make(). A class with no concrete binds to itself (constructed with no args). Root only; throws on a scope. */
17
- bind<T>(abstract: Abstract$1<T>, concrete?: Concrete$1<T>): void;
18
- /** One instance for the life of this container and its scopes. Root only; throws on a scope. */
19
- singleton<T>(abstract: Abstract$1<T>, concrete?: Concrete$1<T>): void;
20
- /** One instance per scope (e.g. per HTTP request or queue job). Root only; throws on a scope. */
21
- scoped<T>(abstract: Abstract$1<T>, concrete?: Concrete$1<T>): void;
22
- /** Register an existing object as a shared instance. Returns it. On a scope it stays local to that scope. */
23
- instance<T>(abstract: Abstract$1<T>, instance: T): T;
24
- /** Resolve. Unbound classes are constructed with `new Class()`. Unbound tokens throw BindingResolutionError. */
25
- make<T>(abstract: Abstract$1<T>): T;
26
- bound(abstract: Abstract$1<unknown>): boolean;
27
- resolved(abstract: Abstract$1<unknown>): boolean;
28
- /** Decorate or replace an instance each time it's resolved (applied before resolving callbacks). Root only; throws on a scope. */
29
- extend<T>(abstract: Abstract$1<T>, extender: (instance: T, container: Container$1) => T): void;
30
- /** Called after each resolution of the abstract. Root only; throws on a scope. */
31
- resolving<T>(abstract: Abstract$1<T>, callback: (instance: T, container: Container$1) => void): void;
32
- forgetInstance(abstract: Abstract$1<unknown>): void;
33
- /** A child container: shares bindings and singletons with its parent, and has its own scoped instances. Bindings can't be registered on it. */
34
- createScope(): Container$1;
35
- /** Run fn with this container as the "current" one for inject(), helpers and facades (AsyncLocalStorage). */
36
- run<R>(fn: () => R): R;
37
- }
38
- declare const Container$1: Token$1<Container$1>;
39
-
40
- /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
41
- interface Session$1 {
42
- getId(): string;
43
- start(): Promise<void>;
44
- save(): Promise<void>;
45
- all(): Record<string, unknown>;
46
- has(key: string): boolean;
47
- get<T = unknown>(key: string, defaultValue?: T): T;
48
- put(key: string | Record<string, unknown>, value?: unknown): void;
49
- push(key: string, value: unknown): void;
50
- pull<T = unknown>(key: string, defaultValue?: T): T;
51
- forget(...keys: string[]): void;
52
- flush(): void;
53
- flash(key: string, value: unknown): void;
54
- now(key: string, value: unknown): void;
55
- reflash(): void;
56
- keep(...keys: string[]): void;
57
- getOldInput<T = unknown>(key?: string, defaultValue?: T): T;
58
- flashInput(input: Record<string, unknown>): void;
59
- token(): string;
60
- regenerateToken(): void;
61
- regenerate(destroy?: boolean): Promise<void>;
62
- invalidate(): Promise<void>;
63
- previousUrl(): string | undefined;
64
- setPreviousUrl(url: string): void;
65
- }
66
- declare const Session$1: Token$2<Session$1>;
67
- interface UploadedFile$1 {
68
- readonly clientName: string;
69
- readonly mimeType: string;
70
- readonly size: number;
71
- extension(): string;
72
- arrayBuffer(): Promise<ArrayBuffer>;
73
- /** Stores on a Filesystem disk. Returns the stored path. */
74
- store(directory: string, disk?: string): Promise<string>;
75
- storeAs(directory: string, name: string, disk?: string): Promise<string>;
76
- }
77
-
78
- interface ServiceProvider$2 {
79
- /** Bind things into the container. Synchronous. Don't resolve other services here. */
80
- register?(): void;
81
- /** Runs after every provider is registered. May be async (e.g. importing route files). */
82
- boot?(): void | Promise<void>;
83
- }
84
- type ServiceProviderClass$1 = new (app: Application$1) => ServiceProvider$2;
85
- interface Application$1 extends Container$1 {
86
- readonly version: string;
87
- basePath(path?: string): string;
88
- appPath(path?: string): string;
89
- bootstrapPath(path?: string): string;
90
- configPath(path?: string): string;
91
- databasePath(path?: string): string;
92
- publicPath(path?: string): string;
93
- resourcePath(path?: string): string;
94
- storagePath(path?: string): string;
95
- /** With no args returns the environment name. With args returns whether it matches any of them. */
96
- environment(): string;
97
- environment(...environments: string[]): boolean;
98
- isProduction(): boolean;
99
- isLocal(): boolean;
100
- runningInConsole(): boolean;
101
- /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
102
- setRunningInConsole(value?: boolean): void;
103
- runningUnitTests(): boolean;
104
- /** Registers the provider. If the app is already booted, the provider is booted immediately. */
105
- register(provider: ServiceProvider$2 | ServiceProviderClass$1): Promise<ServiceProvider$2>;
106
- getProviders(): ServiceProvider$2[];
107
- boot(): Promise<void>;
108
- isBooted(): boolean;
109
- booting(callback: (app: Application$1) => void | Promise<void>): void;
110
- booted(callback: (app: Application$1) => void | Promise<void>): void;
111
- /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
112
- handle(request: Request): Promise<Response>;
113
- /** Register a callback that terminate() runs, in registration order. */
114
- terminating(callback: () => void | Promise<void>): void;
115
- terminate(): Promise<void>;
116
- }
117
- declare const Application$1: Token$2<Application$1>;
118
- interface ExceptionHandler {
119
- report(error: unknown): Promise<void>;
120
- shouldReport(error: unknown): boolean;
121
- /** `request` is the scoped HttpRequest (Contracts/Http) when available, else the raw Request. */
122
- render(request: unknown, error: unknown): Promise<Response>;
123
- }
124
- declare const ExceptionHandler: Token$2<ExceptionHandler>;
125
-
126
- interface Arrayable<T = unknown> {
127
- toArray(): T;
128
- }
129
- interface Htmlable$1 {
130
- toHtml(): string;
131
- }
132
- /** The minimal collection surface contracts rely on (implemented by @orieljs/collections). */
133
- interface Enumerable<T> extends Iterable<T>, Arrayable<unknown[]> {
134
- all(): T[];
135
- count(): number;
136
- isEmpty(): boolean;
137
- }
138
-
139
- interface Encrypter {
140
- /** JSON-serializes unless serialize=false (then value must be a string). AES-256-GCM, keyed by APP_KEY. */
141
- encrypt(value: unknown, serialize?: boolean): string;
142
- decrypt<T = unknown>(payload: string, unserialize?: boolean): T;
143
- encryptString(value: string): string;
144
- decryptString(payload: string): string;
145
- getKey(): Uint8Array;
146
- }
147
- declare const Encrypter: Token$2<Encrypter>;
148
-
149
- interface View extends Htmlable$1 {
150
- readonly name: string;
151
- with(key: string | Record<string, unknown>, value?: unknown): this;
152
- render(): Promise<string>;
153
- }
154
- /** Resolves 'posts.index' → resources/views/posts/index.tsx and renders it to HTML on the server. */
155
- interface ViewFactory {
156
- make(name: string, data?: Record<string, unknown>): View;
157
- exists(name: string): boolean;
158
- share(key: string | Record<string, unknown>, value?: unknown): void;
159
- composer(views: string | string[], composer: (view: View) => void | Promise<void>): void;
160
- /** Renders TSX (an element, a string, an Htmlable, a View, promises of them) to HTML, like Blade::render(). */
161
- renderToString(node: unknown): Promise<string>;
162
- }
163
- declare const ViewFactory: Token$2<ViewFactory>;
164
-
165
- type Operator = '=' | '!=' | '<>' | '<' | '<=' | '>' | '>=' | 'like' | 'not like' | 'ilike' | 'in' | 'not in';
166
- type Row = Record<string, unknown>;
167
- /** The minimal query surface other components rely on (Queue, Cache, Session, Validation, Notifications). */
168
- interface QueryBuilder<T = Row> {
169
- select(...columns: string[]): this;
170
- where(column: string, value: unknown): this;
171
- where(column: string, operator: Operator, value: unknown): this;
172
- where(conditions: Row): this;
173
- orWhere(column: string, value: unknown): this;
174
- orWhere(column: string, operator: Operator, value: unknown): this;
175
- whereIn(column: string, values: readonly unknown[]): this;
176
- whereNotIn(column: string, values: readonly unknown[]): this;
177
- whereNull(column: string): this;
178
- whereNotNull(column: string): this;
179
- orderBy(column: string, direction?: 'asc' | 'desc'): this;
180
- limit(count: number): this;
181
- offset(count: number): this;
182
- lockForUpdate(): this;
183
- get(): Promise<Enumerable<T>>;
184
- first(): Promise<T | undefined>;
185
- find(id: unknown): Promise<T | undefined>;
186
- value<V = unknown>(column: string): Promise<V | undefined>;
187
- pluck<V = unknown>(column: string): Promise<Enumerable<V>>;
188
- count(): Promise<number>;
189
- exists(): Promise<boolean>;
190
- insert(values: Row | Row[]): Promise<void>;
191
- /**
192
- * Inserts rows, skipping any that violate a unique key instead of failing (Laravel's insertOrIgnore). Returns the
193
- * number of rows inserted. Nothing is thrown for a duplicate, so a caller's transaction stays usable on Postgres.
194
- */
195
- insertOrIgnore(values: Row | Row[]): Promise<number>;
196
- insertGetId(values: Row, keyName?: string): Promise<number | string>;
197
- update(values: Row): Promise<number>;
198
- upsert(values: Row | Row[], uniqueBy: string[], update?: string[]): Promise<number>;
199
- increment(column: string, amount?: number, extra?: Row): Promise<number>;
200
- decrement(column: string, amount?: number, extra?: Row): Promise<number>;
201
- delete(): Promise<number>;
202
- }
203
- type DriverName = 'pgsql' | 'mysql' | 'sqlite';
204
- interface DatabaseConnection {
205
- getName(): string;
206
- getDriverName(): DriverName;
207
- table<T = Row>(table: string): QueryBuilder<T>;
208
- select<T = Row>(sql: string, bindings?: readonly unknown[]): Promise<T[]>;
209
- statement(sql: string, bindings?: readonly unknown[]): Promise<void>;
210
- /** Nested calls use savepoints. Rolls back if fn throws. */
211
- transaction<R>(fn: (connection: DatabaseConnection) => Promise<R>): Promise<R>;
212
- /**
213
- * Start a transaction that stays open, for every caller of this connection, until commit()/rollBack().
214
- * Nested calls use savepoints. Meant for test isolation (RefreshDatabase); app code uses transaction(fn).
215
- */
216
- beginTransaction(): Promise<void>;
217
- commit(): Promise<void>;
218
- /** Rolls back the innermost level opened by beginTransaction(). Does nothing when none is open. */
219
- rollBack(): Promise<void>;
220
- /** 0 outside a transaction. */
221
- transactionLevel(): number;
222
- }
223
- interface DatabaseManager extends DatabaseConnection {
224
- connection(name?: string): DatabaseConnection;
225
- disconnect(name?: string): Promise<void>;
226
- }
227
- declare const DatabaseManager: Token$2<DatabaseManager>;
228
- /** What non-Database components may rely on from a model instance. */
229
- interface ModelInstance {
230
- exists: boolean;
231
- getKey(): unknown;
232
- getKeyName(): string;
233
- getTable(): string;
234
- getRouteKey(): unknown;
235
- getRouteKeyName(): string;
236
- /** The value stored in a polymorphic `*_type` column for this model: its morph map alias, else its class name. */
237
- getMorphClass(): string;
238
- getAttribute<T = unknown>(key: string): T;
239
- setAttribute(key: string, value: unknown): this;
240
- fill(attributes: Row): this;
241
- save(): Promise<boolean>;
242
- delete(): Promise<boolean>;
243
- refresh(): Promise<this>;
244
- toArray(): Row;
245
- toJSON(): Row;
246
- }
247
-
248
- interface Authenticatable {
249
- getAuthIdentifierName(): string;
250
- getAuthIdentifier(): unknown;
251
- getAuthPassword(): string;
252
- getRememberToken(): string | undefined;
253
- setRememberToken(value: string): void;
254
- getRememberTokenName(): string;
255
- }
256
- type Credentials = Record<string, unknown>;
257
- interface UserProvider {
258
- retrieveById(id: unknown): Promise<Authenticatable | undefined>;
259
- retrieveByToken(id: unknown, token: string): Promise<Authenticatable | undefined>;
260
- updateRememberToken(user: Authenticatable, token: string): Promise<void>;
261
- retrieveByCredentials(credentials: Credentials): Promise<Authenticatable | undefined>;
262
- validateCredentials(user: Authenticatable, credentials: Credentials): Promise<boolean>;
263
- }
264
- interface Guard {
265
- check(): Promise<boolean>;
266
- guest(): Promise<boolean>;
267
- user<T extends Authenticatable = Authenticatable>(): Promise<T | undefined>;
268
- id(): Promise<unknown>;
269
- validate(credentials: Credentials): Promise<boolean>;
270
- hasUser(): boolean;
271
- setUser(user: Authenticatable): void;
272
- }
273
- interface StatefulGuard extends Guard {
274
- attempt(credentials: Credentials, remember?: boolean): Promise<boolean>;
275
- once(credentials: Credentials): Promise<boolean>;
276
- login(user: Authenticatable, remember?: boolean): Promise<void>;
277
- loginUsingId(id: unknown, remember?: boolean): Promise<Authenticatable | false>;
278
- logout(): Promise<void>;
279
- }
280
- interface AuthFactory {
281
- guard(name?: string): StatefulGuard | Guard;
282
- shouldUse(name: string): void;
283
- extend(driver: string, factory: (name: string, config: Record<string, unknown>) => Guard): void;
284
- provider(driver: string, factory: (config: Record<string, unknown>) => UserProvider): void;
285
- }
286
- declare const AuthFactory: Token$2<AuthFactory>;
287
-
288
- /** Options a job class may declare as public fields. Their presence (or implementing ShouldQueue) makes things queueable. */
289
- interface ShouldQueue {
290
- /**
291
- * Marks the class as queued at run time: `implements ShouldQueue` leaves no trace once compiled, so the interface
292
- * asks for `readonly shouldQueue = true`. Jobs, listeners, mailables and notifications carrying it are queued.
293
- */
294
- readonly shouldQueue: true;
295
- connection?: string;
296
- queue?: string;
297
- /** Seconds. */
298
- delay?: number;
299
- tries?: number;
300
- /** Seconds, or a per-attempt list. */
301
- backoff?: number | number[];
302
- /** Seconds. */
303
- timeout?: number;
304
- uniqueId?(): string;
305
- }
306
- /** A job: public fields are its serialized data; handle() runs on the worker (inject() works inside it). */
307
- interface Job extends Partial<ShouldQueue> {
308
- handle(): unknown | Promise<unknown>;
309
- failed?(error: unknown): void | Promise<void>;
310
- }
311
- interface QueuePayload {
312
- uuid: string;
313
- /** ClassRegistry name. */
314
- job: string;
315
- displayName: string;
316
- data: Record<string, unknown>;
317
- attempts: number;
318
- maxTries?: number;
319
- backoff?: number[];
320
- timeout?: number;
321
- /** Unix ms. */
322
- pushedAt: number;
323
- batchId?: string;
324
- chain?: QueuePayload[];
325
- /** Unix ms after which the job fails instead of retrying. */
326
- retryUntil?: number;
327
- /** Mark the job failed (instead of releasing it) when it times out. */
328
- failOnTimeout?: boolean;
329
- }
330
- interface QueueJob {
331
- getJobId(): string;
332
- getQueue(): string;
333
- payload(): QueuePayload;
334
- attempts(): number;
335
- delete(): Promise<void>;
336
- release(delaySeconds?: number): Promise<void>;
337
- /** Marks as failed: stores it via FailedJobProvider and calls job.failed(). */
338
- fail(error: unknown): Promise<void>;
339
- isDeleted(): boolean;
340
- isReleased(): boolean;
341
- }
342
- interface Queue {
343
- push(job: Job, queue?: string): Promise<string>;
344
- later(delaySeconds: number, job: Job, queue?: string): Promise<string>;
345
- pushRaw(payload: QueuePayload, queue?: string, delaySeconds?: number): Promise<string>;
346
- pop(queue?: string): Promise<QueueJob | undefined>;
347
- size(queue?: string): Promise<number>;
348
- clear(queue?: string): Promise<number>;
349
- }
350
- interface QueueManager extends Queue {
351
- connection(name?: string): Queue;
352
- extend(driver: string, factory: (config: Record<string, unknown>) => Queue): void;
353
- }
354
- declare const QueueManager: Token$2<QueueManager>;
355
-
356
- interface Batch {
357
- readonly id: string;
358
- readonly name: string;
359
- readonly totalJobs: number;
360
- readonly pendingJobs: number;
361
- readonly failedJobs: number;
362
- progress(): number;
363
- finished(): boolean;
364
- cancelled(): boolean;
365
- cancel(): Promise<void>;
366
- }
367
- interface PendingChain {
368
- onConnection(connection: string): this;
369
- onQueue(queue: string): this;
370
- /** Runs as a job if any job in the chain fails. Callbacks are jobs, because closures can't be serialized. */
371
- catch(job: Job): this;
372
- dispatch(): Promise<void>;
373
- }
374
- interface PendingBatch {
375
- name(name: string): this;
376
- onConnection(connection: string): this;
377
- onQueue(queue: string): this;
378
- allowFailures(allow?: boolean): this;
379
- then(job: Job): this;
380
- catch(job: Job): this;
381
- finally(job: Job): this;
382
- dispatch(): Promise<Batch>;
383
- }
384
- interface BusDispatcher {
385
- /** Queues it when the job is queueable (implements ShouldQueue / declares queue options), otherwise runs it now. */
386
- dispatch(job: Job): Promise<unknown>;
387
- dispatchSync(job: Job): Promise<unknown>;
388
- /** Runs after the current response is sent (or the current job finishes). */
389
- dispatchAfterResponse(job: Job): void;
390
- chain(jobs: Job[]): PendingChain;
391
- batch(jobs: Job[]): PendingBatch;
392
- findBatch(id: string): Promise<Batch | undefined>;
393
- }
394
- declare const BusDispatcher: Token$2<BusDispatcher>;
395
- /** What PendingBatch hands to the repository. Callbacks are jobs, because closures can't be serialized. */
396
- interface PendingBatchOptions {
397
- name: string;
398
- then: Job[];
399
- catch: Job[];
400
- finally: Job[];
401
- allowFailures: boolean;
402
- connection?: string;
403
- queue?: string;
404
- }
405
-
406
- interface Address {
407
- address: string;
408
- name?: string;
409
- }
410
- /** A plain email string, an Address, or anything with email (+ optional name), such as a User model. */
411
- type MailRecipient = string | Address | {
412
- email: string;
413
- name?: string;
414
- };
415
- interface Envelope {
416
- from?: MailRecipient;
417
- to?: MailRecipient[];
418
- cc?: MailRecipient[];
419
- bcc?: MailRecipient[];
420
- replyTo?: MailRecipient[];
421
- subject?: string;
422
- tags?: string[];
423
- metadata?: Record<string, string>;
424
- }
425
- interface Content {
426
- /** A View name, rendered by ViewFactory (TSX). */
427
- view?: string;
428
- /** A plain-text view name. */
429
- text?: string;
430
- /** Raw HTML (used when no view is given). */
431
- htmlString?: string;
432
- /** Raw plain-text body (used when no text view is given). */
433
- textString?: string;
434
- with?: Record<string, unknown>;
435
- }
436
- interface Attachment {
437
- name: string;
438
- path?: string;
439
- data?: Uint8Array | string;
440
- mime?: string;
441
- }
442
- /** Laravel 10+ style mailable: envelope() + content() + attachments(). */
443
- interface Mailable {
444
- envelope(): Envelope | Promise<Envelope>;
445
- content(): Content | Promise<Content>;
446
- attachments?(): Attachment[] | Promise<Attachment[]>;
447
- }
448
- /** Fully rendered message handed to a transport. */
449
- interface OutgoingMessage {
450
- from: Address;
451
- to: Address[];
452
- cc: Address[];
453
- bcc: Address[];
454
- replyTo: Address[];
455
- subject: string;
456
- html?: string;
457
- text?: string;
458
- attachments: Attachment[];
459
- headers: Record<string, string>;
460
- }
461
- interface SentMessage {
462
- messageId: string;
463
- message: OutgoingMessage;
464
- }
465
- interface MailTransport {
466
- send(message: OutgoingMessage): Promise<SentMessage>;
467
- }
468
- interface PendingMail {
469
- cc(recipients: MailRecipient | MailRecipient[]): this;
470
- bcc(recipients: MailRecipient | MailRecipient[]): this;
471
- send(mailable: Mailable): Promise<SentMessage | undefined>;
472
- queue(mailable: Mailable): Promise<void>;
473
- later(delaySeconds: number, mailable: Mailable): Promise<void>;
474
- }
475
- interface Mailer {
476
- to(recipients: MailRecipient | MailRecipient[]): PendingMail;
477
- /** Sends to the recipients given in the mailable's envelope. Queues it if the mailable is queueable. */
478
- send(mailable: Mailable): Promise<SentMessage | undefined>;
479
- queue(mailable: Mailable): Promise<void>;
480
- }
481
- interface MailManager extends Mailer {
482
- mailer(name?: string): Mailer;
483
- extend(transport: string, factory: (config: Record<string, unknown>) => MailTransport): void;
484
- }
485
- declare const MailManager: Token$2<MailManager>;
486
-
487
- interface Notifiable {
488
- /** e.g. 'mail' → email address, 'database' → the model itself. */
489
- routeNotificationFor(channel: string, notification: Notification): unknown;
490
- }
491
- interface Notification {
492
- /** Optional id; set by the dispatcher when missing. */
493
- id?: string;
494
- via(notifiable: Notifiable): string[];
495
- /** Returns a Mailable (Contracts/Mail) or the Notifications MailMessage builder. */
496
- toMail?(notifiable: Notifiable): unknown;
497
- toDatabase?(notifiable: Notifiable): Record<string, unknown>;
498
- toArray?(notifiable: Notifiable): Record<string, unknown>;
499
- }
500
- interface NotificationChannel {
501
- send(notifiable: Notifiable, notification: Notification): Promise<void>;
502
- }
503
- interface NotificationDispatcher {
504
- /** Queues it when the notification is queueable, otherwise sends immediately. */
505
- send(notifiables: Notifiable | Notifiable[], notification: Notification): Promise<void>;
506
- sendNow(notifiables: Notifiable | Notifiable[], notification: Notification, channels?: string[]): Promise<void>;
507
- /** On-demand: Notification.route('mail', 'a@b.c').notify(n). */
508
- route(channel: string, route: unknown): Notifiable & {
509
- notify(notification: Notification): Promise<void>;
510
- };
511
- extend(channel: string, factory: () => NotificationChannel): void;
512
- }
513
- declare const NotificationDispatcher: Token$2<NotificationDispatcher>;
514
-
515
- type ListenerClass<E> = Class$1<{
516
- handle(event: E): unknown;
517
- }>;
518
- type Listener<E> = ((event: E) => unknown) | ListenerClass<E>;
519
- interface EventDispatcher {
520
- /** Class events (recommended) or string events like 'eloquent.created: Post'. */
521
- listen<E>(events: Class$1<E> | string | Array<Class$1<E> | string>, listener: Listener<E>): void;
522
- hasListeners(event: Class$1<unknown> | string): boolean;
523
- /** Runs listeners in registration order. Listener classes that are queueable are queued. Returns results. */
524
- dispatch(event: object | string, payload?: unknown[]): Promise<unknown[]>;
525
- /** Stops at the first listener that returns something other than undefined. Returns that value. */
526
- until(event: object | string, payload?: unknown[]): Promise<unknown>;
527
- subscribe(subscriber: Class$1<{
528
- subscribe(events: EventDispatcher): void;
529
- }>): void;
530
- forget(event: Class$1<unknown> | string): void;
531
- }
532
- declare const EventDispatcher: Token$2<EventDispatcher>;
533
-
534
- interface PutOptions {
535
- visibility?: 'public' | 'private';
536
- mimeType?: string;
537
- }
538
- /** Paths are relative to the disk root. Throws on paths that escape it ('../'). */
539
- interface Filesystem {
540
- exists(path: string): Promise<boolean>;
541
- missing(path: string): Promise<boolean>;
542
- get(path: string): Promise<string>;
543
- getBytes(path: string): Promise<Uint8Array>;
544
- readStream(path: string): Promise<ReadableStream<Uint8Array>>;
545
- put(path: string, contents: string | Uint8Array | ReadableStream<Uint8Array>, options?: PutOptions): Promise<boolean>;
546
- /** Stores under a generated unique name. Returns the stored path. */
547
- putFile(directory: string, file: UploadedFile$1, options?: PutOptions): Promise<string>;
548
- putFileAs(directory: string, file: UploadedFile$1, name: string, options?: PutOptions): Promise<string>;
549
- delete(paths: string | string[]): Promise<boolean>;
550
- copy(from: string, to: string): Promise<boolean>;
551
- move(from: string, to: string): Promise<boolean>;
552
- size(path: string): Promise<number>;
553
- lastModified(path: string): Promise<Date>;
554
- mimeType(path: string): Promise<string | undefined>;
555
- url(path: string): string;
556
- temporaryUrl(path: string, expiresAt: Date): Promise<string>;
557
- files(directory?: string, recursive?: boolean): Promise<string[]>;
558
- directories(directory?: string, recursive?: boolean): Promise<string[]>;
559
- makeDirectory(path: string): Promise<boolean>;
560
- deleteDirectory(path: string): Promise<boolean>;
561
- /** Absolute local path (local disks only). */
562
- path(path: string): string;
563
- }
564
- interface FilesystemManager extends Filesystem {
565
- disk(name?: string): Filesystem;
566
- extend(driver: string, factory: (config: Record<string, unknown>) => Filesystem): void;
567
- }
568
- declare const FilesystemManager: Token$2<FilesystemManager>;
569
-
570
- /** Infinite-scroll metadata for one prop (page.scrollProps[path]). */
571
- interface InertiaScrollProp {
572
- pageName: string;
573
- previousPage: string | number | null;
574
- nextPage: string | number | null;
575
- currentPage: string | number | null;
576
- reset: boolean;
577
- }
578
- /** A once prop the client keeps between visits (page.onceProps[key]). `expiresAt` is epoch milliseconds. */
579
- interface InertiaOnceProp {
580
- prop: string;
581
- expiresAt: number | null;
582
- }
4
+ /** A date the tests travel to: a Date, an ISO string or milliseconds since the epoch. */
5
+ type TravelDate = Date | string | number;
6
+ /**
7
+ * Laravel's travelTo(): the clock stands at `date` (new Date(), Date.now() and now() all read it) until travelBack().
8
+ * With a callback, it runs there and the clock travels back after it; its result is returned.
9
+ */
10
+ declare function travelTo(date: TravelDate): void;
11
+ declare function travelTo<R>(date: TravelDate, callback: (date: Date) => R): R;
12
+ /** Laravel's travelBack(): the real clock again. Returns the real time. */
13
+ declare function travelBack(): Date;
14
+ /** Laravel's freezeTime(): holds the clock where it is now. Returns that time, or the callback's result. */
15
+ declare function freezeTime(): Date;
16
+ declare function freezeTime<R>(callback: (date: Date) => R): R;
17
+ /** Laravel's freezeSecond(): freezeTime() at the start of the current second. */
18
+ declare function freezeSecond(): Date;
19
+ declare function freezeSecond<R>(callback: (date: Date) => R): R;
20
+ /** Laravel's travel(5).minutes(): moves the clock on (a negative value moves it back) from where it stands. */
21
+ declare function travel(value: number): Wormhole;
583
22
  /**
584
- * The Inertia page object (protocol v3, @inertiajs/core 3.x). Only component, props, url and version are always
585
- * present; the other fields are left out when empty or false.
23
+ * Laravel's Wormhole: each unit moves the clock by `value` of it (months and years overflow as Carbon's do: 31 January
24
+ * plus a month is 3 March), in UTC. With a callback, it runs there, the clock travels back after it, and its result is
25
+ * returned. JavaScript dates hold milliseconds, so there are no microseconds.
586
26
  */
587
- interface InertiaPage {
588
- component: string;
589
- props: Record<string, unknown>;
590
- /** Path and query, never absolute: '/posts?page=2'. */
591
- url: string;
592
- /** '' when the app has no asset version. */
593
- version: string;
594
- sharedProps?: string[];
595
- mergeProps?: string[];
596
- prependProps?: string[];
597
- deepMergeProps?: string[];
598
- /** '<prop path>.<key field>', e.g. 'posts.data.id'. */
599
- matchPropsOn?: string[];
600
- /** Group name → prop paths loaded after the first render. */
601
- deferredProps?: Record<string, string[]>;
602
- rescuedProps?: string[];
603
- scrollProps?: Record<string, InertiaScrollProp>;
604
- onceProps?: Record<string, InertiaOnceProp>;
605
- clearHistory?: true;
606
- encryptHistory?: true;
607
- flash?: Record<string, unknown>;
608
- preserveFragment?: true;
27
+ declare class Wormhole {
28
+ #private;
29
+ readonly value: number;
30
+ constructor(value: number);
31
+ millisecond(): void;
32
+ millisecond<R>(callback: () => R): R;
33
+ milliseconds(): void;
34
+ milliseconds<R>(callback: () => R): R;
35
+ second(): void;
36
+ second<R>(callback: () => R): R;
37
+ seconds(): void;
38
+ seconds<R>(callback: () => R): R;
39
+ minute(): void;
40
+ minute<R>(callback: () => R): R;
41
+ minutes(): void;
42
+ minutes<R>(callback: () => R): R;
43
+ hour(): void;
44
+ hour<R>(callback: () => R): R;
45
+ hours(): void;
46
+ hours<R>(callback: () => R): R;
47
+ day(): void;
48
+ day<R>(callback: () => R): R;
49
+ days(): void;
50
+ days<R>(callback: () => R): R;
51
+ week(): void;
52
+ week<R>(callback: () => R): R;
53
+ weeks(): void;
54
+ weeks<R>(callback: () => R): R;
55
+ month(): void;
56
+ month<R>(callback: () => R): R;
57
+ months(): void;
58
+ months<R>(callback: () => R): R;
59
+ year(): void;
60
+ year<R>(callback: () => R): R;
61
+ years(): void;
62
+ years<R>(callback: () => R): R;
63
+ /** Laravel's Wormhole::back(). */
64
+ static back(): Date;
609
65
  }
610
66
 
611
67
  /**
@@ -623,7 +79,7 @@ declare class PendingCommand implements PromiseLike<number> {
623
79
  readonly parameters: Record<string, unknown>;
624
80
  private readonly checks;
625
81
  private result;
626
- constructor(app: Application$1, command: string, parameters?: Record<string, unknown>);
82
+ constructor(app: Application, command: string, parameters?: Record<string, unknown>);
627
83
  /** A line of output equals `line` exactly; with no argument, the command printed something. */
628
84
  expectsOutput(line?: string): this;
629
85
  /** No line equals `line`; with no argument, the command printed nothing at all. */
@@ -767,9 +223,9 @@ interface ResponseContext {
767
223
  /** The raw request sent to the kernel (redirect URLs are resolved against it). */
768
224
  request?: Request;
769
225
  /** The application that handled it. */
770
- app?: Application$1;
226
+ app?: Application;
771
227
  /** The request's session after the response. */
772
- session?: Session$1;
228
+ session?: Session;
773
229
  /** Views made while handling the request, in order. */
774
230
  views?: View[];
775
231
  /** The last error the exception handler rendered. */
@@ -881,7 +337,7 @@ declare class TestResponse {
881
337
  /** Validation errors for these keys (message fragments match with "contains"): JSON body or session. */
882
338
  assertInvalid(errors: ExpectedErrors, errorBag?: string, responseKey?: string): this;
883
339
  /** The request's session after the response (flashed data is still there). */
884
- session(): Session$1;
340
+ session(): Session;
885
341
  /** A key (with an optional value or predicate), several keys, or a { key: value } record. */
886
342
  assertSessionHas(key: string | string[] | Record<string, unknown>, value?: unknown): this;
887
343
  assertSessionHasAll(bindings: Record<string, unknown>): this;
@@ -946,7 +402,7 @@ interface RequestOptions {
946
402
  * requests, actingAs users and options, plus the dispatch itself.
947
403
  */
948
404
  declare class HttpClient {
949
- protected readonly app: Application$1;
405
+ protected readonly app: Application;
950
406
  readonly headers: Record<string, string>;
951
407
  /** Cookies to encrypt on send (withCookie) and to send as-is (withUnencryptedCookie, or captured from responses). */
952
408
  readonly cookies: Map<string, {
@@ -965,10 +421,10 @@ declare class HttpClient {
965
421
  previousUrl: string | undefined;
966
422
  /** Requests whose actingAs users reached the guards (the AuthFactory they went through). */
967
423
  private readonly actingAsApplied;
968
- constructor(app: Application$1);
424
+ constructor(app: Application);
969
425
  request(method: string, uri: string, options?: RequestOptions): Promise<TestResponse>;
970
426
  /** Runs `fn` in a scope prepared like a request's (carried session, actingAs users), e.g. for assertAuthenticated(). */
971
- inScope<T>(fn: (scope: Container$1) => T | Promise<T>): Promise<T>;
427
+ inScope<T>(fn: (scope: Container) => T | Promise<T>): Promise<T>;
972
428
  /**
973
429
  * Runs `run` in a request scope like this client's requests have (a request for `method uri` bound, the carried
974
430
  * session, actingAs users), then carries the session and the users on, as after a request. Live.test() runs its
@@ -978,16 +434,16 @@ declare class HttpClient {
978
434
  /** Runs the request through the app's real HttpKernel, in a request scope this client owns. */
979
435
  protected send(request: Request): Promise<TestResponse>;
980
436
  /** Prepares the request scope: recorders, the carried session and actingAs users. */
981
- protected beforeRequest(scope: Container$1, context: ResponseContext): void;
437
+ protected beforeRequest(scope: Container, context: ResponseContext): void;
982
438
  /** Keeps the session for the next request, like Laravel's per-test session store, and the guards' users. */
983
- protected afterRequest(_scope: Container$1, context: ResponseContext): Promise<void>;
439
+ protected afterRequest(_scope: Container, context: ResponseContext): Promise<void>;
984
440
  /**
985
441
  * Laravel's actingAs() sets the user on the guard once, so a logout (or a login as someone else) in the
986
442
  * request sticks. Reads each actingAs guard back and forgets or replaces its user to match.
987
443
  */
988
444
  protected syncActingAs(auth: AuthFactory): Promise<void>;
989
445
  /** The request's (scoped) Session, created now so the carried attributes are in place before StartSession. */
990
- protected scopeSession(scope: Container$1): Session$1 | undefined;
446
+ protected scopeSession(scope: Container): Session | undefined;
991
447
  buildRequest(method: string, uri: string, options: RequestOptions): Request;
992
448
  protected baseUrl(): string;
993
449
  protected cookieHeader(): string;
@@ -1032,20 +488,20 @@ declare abstract class InteractsWithApplication {
1032
488
  hooks?: TestHooks;
1033
489
  }, options?: BootOptions): T;
1034
490
  /** The current test's application. */
1035
- get app(): Application$1;
491
+ get app(): Application;
1036
492
  /**
1037
493
  * A fresh application for one test. tests/TestCase.ts overrides this to call bootstrap/app's factory.
1038
494
  * The default builds one at basePath() with providers(), for package tests with no skeleton.
1039
495
  */
1040
- createApplication(): Promise<Application$1>;
496
+ createApplication(): Promise<Application>;
1041
497
  /** Used by the default createApplication(). */
1042
498
  protected basePath(): string;
1043
499
  /** Used by the default createApplication(). */
1044
- protected providers(): Array<ServiceProvider$2 | ServiceProviderClass$1>;
500
+ protected providers(): Array<ServiceProvider | ServiceProviderClass>;
1045
501
  /** The variables applied (unless already set) before each application is created. */
1046
502
  protected environment(): Record<string, string>;
1047
503
  /** Adjust the fresh app before it boots, e.g. `app.make(ConfigRepository).set('mail.default', 'array')`. */
1048
- protected defineEnvironment(_app: Application$1): void | Promise<void>;
504
+ protected defineEnvironment(_app: Application): void | Promise<void>;
1049
505
  setUp(): Promise<void>;
1050
506
  tearDown(): Promise<void>;
1051
507
  /**
@@ -1143,11 +599,28 @@ declare abstract class InteractsWithConsole extends InteractsWithDatabase {
1143
599
  artisan(command: string, parameters?: Record<string, unknown>): PendingCommand;
1144
600
  }
1145
601
 
602
+ /**
603
+ * Laravel's InteractsWithTime: `t.travelTo(date)`, `t.travel(5).minutes()`, `t.freezeTime()`, `t.travelBack()`.
604
+ * The functions of the same names do the same outside a test case. A test case's tearDown travels back, so each of its
605
+ * tests ends in the real time; with the plain functions, call `travelBack()` in your own `afterEach()` or pass a callback.
606
+ */
607
+ declare abstract class InteractsWithTime extends InteractsWithConsole {
608
+ travelTo(date: TravelDate): void;
609
+ travelTo<R>(date: TravelDate, callback: (date: Date) => R): R;
610
+ travel(value: number): Wormhole;
611
+ travelBack(): Date;
612
+ freezeTime(): Date;
613
+ freezeTime<R>(callback: (date: Date) => R): R;
614
+ freezeSecond(): Date;
615
+ freezeSecond<R>(callback: (date: Date) => R): R;
616
+ tearDown(): Promise<void>;
617
+ }
618
+
1146
619
  /**
1147
620
  * Laravel's TestCase. Extend it in tests/TestCase.ts (override createApplication() and set `static hooks`),
1148
621
  * then in each file: `const t = TestCase.boot()`, or `TestCase.boot({ uses: [RefreshDatabase] })`.
1149
622
  */
1150
- declare abstract class TestCase extends InteractsWithConsole {
623
+ declare abstract class TestCase extends InteractsWithTime {
1151
624
  }
1152
625
 
1153
626
  /**
@@ -1188,9 +661,9 @@ declare const RefreshDatabaseState: {
1188
661
  migrated: boolean;
1189
662
  };
1190
663
  /** Runs a console command through the ConsoleKernel contract; a non-zero exit fails the test with its output. */
1191
- declare function runCommand(app: Application$1, command: string, parameters?: Record<string, unknown>): Promise<void>;
664
+ declare function runCommand(app: Application, command: string, parameters?: Record<string, unknown>): Promise<void>;
1192
665
  /** Laravel's usingInMemoryDatabase(): the default connection's database is ':memory:'. */
1193
- declare function usingInMemoryDatabase(app: Application$1): boolean;
666
+ declare function usingInMemoryDatabase(app: Application): boolean;
1194
667
  /**
1195
668
  * Laravel's RefreshDatabase.
1196
669
  * - In-memory SQLite: every test's new application has an empty database, so it just runs `migrate`.
@@ -1204,11 +677,11 @@ declare const DatabaseMigrations: TestTrait;
1204
677
  declare const DatabaseTransactions: TestTrait;
1205
678
 
1206
679
  /** What an assertion targets: a class (exact constructor), or a name (a string event, a class name or a registry name). */
1207
- type Target<T = unknown> = Class$1<T> | string;
680
+ type Target<T = unknown> = Class<T> | string;
1208
681
  /** A count, or a filter over the recorded items. */
1209
682
  type CountOrFilter<A extends unknown[]> = number | ((...args: A) => boolean);
1210
683
  /** Swaps the fake in through the facade machinery (`facade(token).swap(fake)`: an instance on the current container). */
1211
- declare function install<T extends object, F extends T>(token: Token$1<T>, fake: F): F;
684
+ declare function install<T extends object, F extends T>(token: Token<T>, fake: F): F;
1212
685
  declare function nameOf(target: Target | object): string;
1213
686
  /** A recorded object (or string event) matches a target: same constructor, or the same (class) name. */
1214
687
  declare function matches(item: unknown, target: Target): boolean;
@@ -1219,6 +692,8 @@ interface DispatchedEvent {
1219
692
  payload: unknown[];
1220
693
  }
1221
694
  type EventFilter<E> = (event: E, payload: unknown[]) => boolean;
695
+ /** A listener as assertListening() expects it: a class, a [class, method] pair, a closure, or Function for any closure. */
696
+ type ExpectedListener = Listener<never> | readonly [Class<object>, string] | FunctionConstructor;
1222
697
  /**
1223
698
  * Laravel's Event::fake(): records dispatched events instead of running listeners. With a list, only those
1224
699
  * events are faked and everything else reaches the original dispatcher (so model events keep working).
@@ -1235,25 +710,31 @@ declare class EventFake implements EventDispatcher {
1235
710
  static fakeExcept(eventsToDispatch: Target | Target[]): EventFake;
1236
711
  private static original;
1237
712
  except(events: Target | Target[]): this;
1238
- listen<E>(events: Class$1<E> | string | Array<Class$1<E> | string>, listener: Listener<E>): void;
1239
- hasListeners(event: Class$1<unknown> | string): boolean;
713
+ listen<E>(events: Class<E> | string | Array<Class<E> | string>, listener: Listener<E>): void;
714
+ hasListeners(event: Class<unknown> | string): boolean;
1240
715
  dispatch(event: object | string, payload?: unknown[]): Promise<unknown[]>;
1241
716
  /** Faked events return undefined (never false), so halting model events such as `saving` still proceed. */
1242
717
  until(event: object | string, payload?: unknown[]): Promise<unknown>;
1243
- subscribe(subscriber: Class$1<{
718
+ subscribe(subscriber: Class<{
1244
719
  subscribe(events: EventDispatcher): void;
1245
720
  }>): void;
1246
- forget(event: Class$1<unknown> | string): void;
721
+ forget(event: Class<unknown> | string): void;
1247
722
  /** Dispatched at least once; a number asserts the exact count; a function filters (event, payload). */
1248
- assertDispatched<E>(event: Class$1<E> | string, callback?: CountOrFilter<[E, unknown[]]>): void;
1249
- assertDispatchedTimes<E>(event: Class$1<E> | string, times?: number): void;
1250
- assertNotDispatched<E>(event: Class$1<E> | string, callback?: EventFilter<E>): void;
723
+ assertDispatched<E>(event: Class<E> | string, callback?: CountOrFilter<[E, unknown[]]>): void;
724
+ assertDispatchedTimes<E>(event: Class<E> | string, times?: number): void;
725
+ assertNotDispatched<E>(event: Class<E> | string, callback?: EventFilter<E>): void;
1251
726
  assertNothingDispatched(): void;
1252
- /** The original dispatcher has a listener for the event. */
1253
- assertListening(event: Class$1<unknown> | string): void;
727
+ /**
728
+ * Laravel's assertListening(event, listener): the original dispatcher has that listener for the event (a class, a
729
+ * [class, method] pair, the same closure, or Function for any closure; wildcard listeners count for a string event).
730
+ * With only the event, any listener will do.
731
+ */
732
+ assertListening(event: Class<unknown> | string, listener?: ExpectedListener): void;
1254
733
  /** The recorded events (objects, or names for string events) that match. */
1255
- dispatched<E>(event: Class$1<E> | string, callback?: EventFilter<E>): E[];
1256
- hasDispatched(event: Class$1<unknown> | string): boolean;
734
+ dispatched<E>(event: Class<E> | string, callback?: EventFilter<E>): E[];
735
+ hasDispatched(event: Class<unknown> | string): boolean;
736
+ /** The original dispatcher's listeners for the event, as registered, wildcard ones included for a string event. */
737
+ private listenersFor;
1257
738
  private shouldFake;
1258
739
  }
1259
740
 
@@ -1407,6 +888,8 @@ declare class MailFake implements MailManager {
1407
888
  mailer(name?: string): Mailer;
1408
889
  to(recipients: MailRecipient | MailRecipient[]): PendingMail;
1409
890
  send(mailable: Mailable): Promise<SentMessage | undefined>;
891
+ /** Recorded as sent, never queued, like the real sendNow(). */
892
+ sendNow(mailable: Mailable): Promise<SentMessage | undefined>;
1410
893
  queue(mailable: Mailable): Promise<void>;
1411
894
  extend(_transport: string, _factory: (config: Record<string, unknown>) => MailTransport): void;
1412
895
  /** Sent (not queued) at least once; a number asserts the count; a filter gets (mailable, record). */
@@ -1428,6 +911,7 @@ declare class MailFake implements MailManager {
1428
911
  hasQueued(mailable: Target<Mailable>): boolean;
1429
912
  private pending;
1430
913
  private sendVia;
914
+ private sendNowVia;
1431
915
  private queueVia;
1432
916
  private record;
1433
917
  private matching;
@@ -1476,7 +960,7 @@ declare class NotificationFake implements NotificationDispatcher {
1476
960
  /** Sent this many times in total, to anyone. */
1477
961
  assertSentTimes(notification: Target<Notification>, times: number): void;
1478
962
  assertCount(expected: number): void;
1479
- sent<N extends Notification>(notifiable: Notifiable, notification: Target<N> | Class$1<N>, callback?: Filter<N>): N[];
963
+ sent<N extends Notification>(notifiable: Notifiable, notification: Target<N> | Class<N>, callback?: Filter<N>): N[];
1480
964
  hasSent(notifiable: Notifiable, notification: Target<Notification>): boolean;
1481
965
  private record;
1482
966
  }
@@ -1507,12 +991,12 @@ declare class FakeDisk implements Filesystem {
1507
991
  getBytes(path: string): Promise<Uint8Array>;
1508
992
  readStream(path: string): Promise<ReadableStream<Uint8Array>>;
1509
993
  put(path: string, contents: string | Uint8Array | ReadableStream<Uint8Array>, options?: PutOptions): Promise<boolean>;
1510
- putFile(directory: string, file: UploadedFile$1, options?: PutOptions): Promise<string>;
994
+ putFile(directory: string, file: UploadedFile, options?: PutOptions): Promise<string>;
1511
995
  /**
1512
996
  * The upload's own type, as the S3 disk sends it: its extension(), never the MIME type the client sent as such nor
1513
997
  * the stored name's type.
1514
998
  */
1515
- putFileAs(directory: string, file: UploadedFile$1, name: string, options?: PutOptions): Promise<string>;
999
+ putFileAs(directory: string, file: UploadedFile, name: string, options?: PutOptions): Promise<string>;
1516
1000
  private write;
1517
1001
  delete(paths: string | string[]): Promise<boolean>;
1518
1002
  copy(from: string, to: string): Promise<boolean>;
@@ -1554,8 +1038,8 @@ declare class StorageFake implements FilesystemManager {
1554
1038
  getBytes(path: string): Promise<Uint8Array<ArrayBufferLike>>;
1555
1039
  readStream(path: string): Promise<ReadableStream<Uint8Array<ArrayBufferLike>>>;
1556
1040
  put(path: string, contents: string | Uint8Array | ReadableStream<Uint8Array>, options?: PutOptions): Promise<boolean>;
1557
- putFile(directory: string, file: UploadedFile$1, options?: PutOptions): Promise<string>;
1558
- putFileAs(directory: string, file: UploadedFile$1, name: string, options?: PutOptions): Promise<string>;
1041
+ putFile(directory: string, file: UploadedFile, options?: PutOptions): Promise<string>;
1042
+ putFileAs(directory: string, file: UploadedFile, name: string, options?: PutOptions): Promise<string>;
1559
1043
  delete(paths: string | string[]): Promise<boolean>;
1560
1044
  copy(from: string, to: string): Promise<boolean>;
1561
1045
  move(from: string, to: string): Promise<boolean>;
@@ -1587,346 +1071,6 @@ declare const FakeFile: {
1587
1071
  image(name: string, width?: number, height?: number): File;
1588
1072
  };
1589
1073
 
1590
- /** A typed, runtime-unique key for container bindings. */
1591
- interface Token<T> {
1592
- readonly id: symbol;
1593
- readonly description: string;
1594
- /** Phantom field: only carries T at the type level. Never set at runtime. */
1595
- readonly __type?: T;
1596
- }
1597
- type Class<T> = abstract new (...args: any[]) => T;
1598
- type Abstract<T> = Token<T> | Class<T>;
1599
- type Factory<T> = (container: Container) => T;
1600
- type Concrete<T> = Factory<T> | (new () => T);
1601
- interface Container {
1602
- /** New instance on every make(). A class with no concrete binds to itself (constructed with no args). Root only; throws on a scope. */
1603
- bind<T>(abstract: Abstract<T>, concrete?: Concrete<T>): void;
1604
- /** One instance for the life of this container and its scopes. Root only; throws on a scope. */
1605
- singleton<T>(abstract: Abstract<T>, concrete?: Concrete<T>): void;
1606
- /** One instance per scope (e.g. per HTTP request or queue job). Root only; throws on a scope. */
1607
- scoped<T>(abstract: Abstract<T>, concrete?: Concrete<T>): void;
1608
- /** Register an existing object as a shared instance. Returns it. On a scope it stays local to that scope. */
1609
- instance<T>(abstract: Abstract<T>, instance: T): T;
1610
- /** Resolve. Unbound classes are constructed with `new Class()`. Unbound tokens throw BindingResolutionError. */
1611
- make<T>(abstract: Abstract<T>): T;
1612
- bound(abstract: Abstract<unknown>): boolean;
1613
- resolved(abstract: Abstract<unknown>): boolean;
1614
- /** Decorate or replace an instance each time it's resolved (applied before resolving callbacks). Root only; throws on a scope. */
1615
- extend<T>(abstract: Abstract<T>, extender: (instance: T, container: Container) => T): void;
1616
- /** Called after each resolution of the abstract. Root only; throws on a scope. */
1617
- resolving<T>(abstract: Abstract<T>, callback: (instance: T, container: Container) => void): void;
1618
- forgetInstance(abstract: Abstract<unknown>): void;
1619
- /** A child container: shares bindings and singletons with its parent, and has its own scoped instances. Bindings can't be registered on it. */
1620
- createScope(): Container;
1621
- /** Run fn with this container as the "current" one for inject(), helpers and facades (AsyncLocalStorage). */
1622
- run<R>(fn: () => R): R;
1623
- }
1624
- declare const Container: Token<Container>;
1625
-
1626
- /** The session of the current request (scoped). Loaded and saved by the StartSession middleware. */
1627
- interface Session {
1628
- getId(): string;
1629
- start(): Promise<void>;
1630
- save(): Promise<void>;
1631
- all(): Record<string, unknown>;
1632
- has(key: string): boolean;
1633
- get<T = unknown>(key: string, defaultValue?: T): T;
1634
- put(key: string | Record<string, unknown>, value?: unknown): void;
1635
- push(key: string, value: unknown): void;
1636
- pull<T = unknown>(key: string, defaultValue?: T): T;
1637
- forget(...keys: string[]): void;
1638
- flush(): void;
1639
- flash(key: string, value: unknown): void;
1640
- now(key: string, value: unknown): void;
1641
- reflash(): void;
1642
- keep(...keys: string[]): void;
1643
- getOldInput<T = unknown>(key?: string, defaultValue?: T): T;
1644
- flashInput(input: Record<string, unknown>): void;
1645
- token(): string;
1646
- regenerateToken(): void;
1647
- regenerate(destroy?: boolean): Promise<void>;
1648
- invalidate(): Promise<void>;
1649
- previousUrl(): string | undefined;
1650
- setPreviousUrl(url: string): void;
1651
- }
1652
- declare const Session: Token$2<Session>;
1653
-
1654
- /** A rule object (Laravel's ValidationRule). Call fail() to reject the value. */
1655
- interface ValidationRule {
1656
- validate(attribute: string, value: unknown, fail: (message: string) => void, data: Record<string, unknown>): void | Promise<void>;
1657
- }
1658
- /** 'required|string|max:255', or an array mixing strings and rule objects. Keys support dot + `*` wildcards. */
1659
- type Rules = Record<string, string | ReadonlyArray<string | ValidationRule>>;
1660
- interface MessageBag {
1661
- has(key: string): boolean;
1662
- first(key?: string): string | undefined;
1663
- get(key: string): string[];
1664
- all(): string[];
1665
- isEmpty(): boolean;
1666
- count(): number;
1667
- toObject(): Record<string, string[]>;
1668
- }
1669
- interface UploadedFile {
1670
- readonly clientName: string;
1671
- readonly mimeType: string;
1672
- readonly size: number;
1673
- extension(): string;
1674
- arrayBuffer(): Promise<ArrayBuffer>;
1675
- /** Stores on a Filesystem disk. Returns the stored path. */
1676
- store(directory: string, disk?: string): Promise<string>;
1677
- storeAs(directory: string, name: string, disk?: string): Promise<string>;
1678
- }
1679
- /**
1680
- * Oriel's request wrapper (one per request, scoped).
1681
- * The Http kernel awaits `load()` before any middleware runs, so every input accessor below is synchronous.
1682
- */
1683
- interface HttpRequest {
1684
- readonly raw: Request;
1685
- load(): Promise<this>;
1686
- method(): string;
1687
- isMethod(method: string): boolean;
1688
- url(): string;
1689
- fullUrl(): string;
1690
- path(): string;
1691
- is(...patterns: string[]): boolean;
1692
- routeIs(...names: string[]): boolean;
1693
- header(name: string): string | undefined;
1694
- header(name: string, defaultValue: string): string;
1695
- bearerToken(): string | undefined;
1696
- ip(): string | undefined;
1697
- /** The raw body as text (Laravel's getContent()); '' when there is none. */
1698
- content(): string;
1699
- expectsJson(): boolean;
1700
- ajax(): boolean;
1701
- query<T = unknown>(key?: string, defaultValue?: T): T;
1702
- input<T = unknown>(key?: string, defaultValue?: T): T;
1703
- all(): Record<string, unknown>;
1704
- only(...keys: string[]): Record<string, unknown>;
1705
- except(...keys: string[]): Record<string, unknown>;
1706
- has(...keys: string[]): boolean;
1707
- filled(key: string): boolean;
1708
- boolean(key: string, defaultValue?: boolean): boolean;
1709
- integer(key: string, defaultValue?: number): number;
1710
- merge(values: Record<string, unknown>): this;
1711
- file(key: string): UploadedFile | undefined;
1712
- cookie(name: string): string | undefined;
1713
- /** Replace the parsed request cookies (EncryptCookies calls this after decrypting). */
1714
- setCookies(cookies: Record<string, string>): void;
1715
- /** Route parameter (after model binding), or every parameter when called with no key. */
1716
- route<T = unknown>(key?: string): T;
1717
- session(): Session;
1718
- /** The user resolved earlier by auth middleware. Undefined for guests. Use `await Auth.user()` to resolve lazily. */
1719
- user<T = unknown>(guard?: string): T | undefined;
1720
- setUserResolver(resolver: (guard?: string) => unknown): void;
1721
- /** Validates this request's input via the ValidationFactory; throws a Validation OrielError (422) on failure. */
1722
- validate<T = Record<string, unknown>>(rules: Rules, messages?: Record<string, string>, attributes?: Record<string, string>): Promise<T>;
1723
- }
1724
- declare const HttpRequest: Token$2<HttpRequest>;
1725
- type Next = (request: HttpRequest) => Promise<Response>;
1726
- interface Middleware {
1727
- handle(request: HttpRequest, next: Next, ...parameters: string[]): Promise<Response>;
1728
- terminate?(request: HttpRequest, response: Response): Promise<void>;
1729
- }
1730
- type MiddlewareClass = new (...args: any[]) => Middleware;
1731
-
1732
- interface ServiceProvider$1 {
1733
- /** Bind things into the container. Synchronous. Don't resolve other services here. */
1734
- register?(): void;
1735
- /** Runs after every provider is registered. May be async (e.g. importing route files). */
1736
- boot?(): void | Promise<void>;
1737
- }
1738
- type ServiceProviderClass = new (app: Application) => ServiceProvider$1;
1739
- interface Application extends Container {
1740
- readonly version: string;
1741
- basePath(path?: string): string;
1742
- appPath(path?: string): string;
1743
- bootstrapPath(path?: string): string;
1744
- configPath(path?: string): string;
1745
- databasePath(path?: string): string;
1746
- publicPath(path?: string): string;
1747
- resourcePath(path?: string): string;
1748
- storagePath(path?: string): string;
1749
- /** With no args returns the environment name. With args returns whether it matches any of them. */
1750
- environment(): string;
1751
- environment(...environments: string[]): boolean;
1752
- isProduction(): boolean;
1753
- isLocal(): boolean;
1754
- runningInConsole(): boolean;
1755
- /** Mark the app as running in the console (the CLI entry point calls this). Defaults to true. */
1756
- setRunningInConsole(value?: boolean): void;
1757
- runningUnitTests(): boolean;
1758
- /** Registers the provider. If the app is already booted, the provider is booted immediately. */
1759
- register(provider: ServiceProvider$1 | ServiceProviderClass): Promise<ServiceProvider$1>;
1760
- getProviders(): ServiceProvider$1[];
1761
- boot(): Promise<void>;
1762
- isBooted(): boolean;
1763
- booting(callback: (app: Application) => void | Promise<void>): void;
1764
- booted(callback: (app: Application) => void | Promise<void>): void;
1765
- /** Handle one HTTP request in a fresh request scope via the bound HttpKernel. */
1766
- handle(request: Request): Promise<Response>;
1767
- /** Register a callback that terminate() runs, in registration order. */
1768
- terminating(callback: () => void | Promise<void>): void;
1769
- terminate(): Promise<void>;
1770
- }
1771
- declare const Application: Token$2<Application>;
1772
- interface Htmlable {
1773
- toHtml(): string;
1774
- }
1775
-
1776
- /** Public method names of a controller (excludes non-function members). */
1777
- type ActionMethods<C> = {
1778
- [K in keyof C]: C[K] extends (...args: any[]) => unknown ? K : never;
1779
- }[keyof C] & string;
1780
- type ControllerAction<C> = readonly [Class<C>, ActionMethods<C>];
1781
- type RouteClosure = (...args: any[]) => unknown;
1782
- /** A class with __invoke(): Route.get('/counter', Counter) (single-action controllers, full-page Live components). */
1783
- type InvokableClass = Class<{
1784
- __invoke(...args: any[]): unknown;
1785
- }>;
1786
- type RouteAction = RouteClosure | ControllerAction<any> | InvokableClass;
1787
- type MiddlewareReference = string | MiddlewareClass;
1788
- interface Route {
1789
- readonly methods: readonly string[];
1790
- readonly uri: string;
1791
- getName(): string | undefined;
1792
- name(name: string): this;
1793
- middleware(...middleware: Array<MiddlewareReference | readonly MiddlewareReference[]>): this;
1794
- withoutMiddleware(...middleware: MiddlewareReference[]): this;
1795
- where(parameter: string, pattern: string): this;
1796
- where(patterns: Record<string, string>): this;
1797
- }
1798
- interface RouteRegistrar {
1799
- prefix(prefix: string): RouteRegistrar;
1800
- name(prefix: string): RouteRegistrar;
1801
- middleware(...middleware: Array<MiddlewareReference | readonly MiddlewareReference[]>): RouteRegistrar;
1802
- controller(controller: Class<unknown>): RouteRegistrar;
1803
- group(routes: () => void | Promise<void>): Promise<void>;
1804
- }
1805
- interface ResourceOptions {
1806
- only?: string[];
1807
- except?: string[];
1808
- parameters?: Record<string, string>;
1809
- names?: Record<string, string>;
1810
- }
1811
- interface Router {
1812
- get<C>(uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1813
- post<C>(uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1814
- put<C>(uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1815
- patch<C>(uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1816
- delete<C>(uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1817
- options<C>(uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1818
- any<C>(uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1819
- match<C>(methods: string[], uri: string, action: ControllerAction<C> | RouteClosure | InvokableClass | string): Route;
1820
- redirect(from: string, to: string, status?: number): Route;
1821
- view(uri: string, view: string, data?: Record<string, unknown>): Route;
1822
- /** Route.inertia('/about', 'About', props): a GET route that renders an Inertia page (Laravel's Route::inertia). */
1823
- inertia(uri: string, component: string, props?: Record<string, unknown>): Route;
1824
- resource(name: string, controller: Class<unknown>, options?: ResourceOptions): void;
1825
- apiResource(name: string, controller: Class<unknown>, options?: ResourceOptions): void;
1826
- fallback(action: RouteAction): Route;
1827
- prefix(prefix: string): RouteRegistrar;
1828
- name(prefix: string): RouteRegistrar;
1829
- middleware(...middleware: Array<MiddlewareReference | readonly MiddlewareReference[]>): RouteRegistrar;
1830
- controller(controller: Class<unknown>): RouteRegistrar;
1831
- /** Explicit model binding: Route.model('author', User). */
1832
- model(parameter: string, model: Class<unknown>): void;
1833
- /** Custom binding resolver. */
1834
- bind(parameter: string, resolver: (value: string) => unknown | Promise<unknown>): void;
1835
- pattern(parameter: string, pattern: string): void;
1836
- /** Name a middleware class, e.g. aliasMiddleware('auth', Authenticate). */
1837
- aliasMiddleware(name: string, middleware: MiddlewareClass): this;
1838
- /** Define (or replace) a middleware group such as 'web' or 'api'. */
1839
- middlewareGroup(name: string, middleware: MiddlewareReference[]): this;
1840
- /** Append to a group unless it is already present. */
1841
- pushMiddlewareToGroup(group: string, middleware: MiddlewareReference): this;
1842
- getMiddlewareGroups(): Record<string, MiddlewareReference[]>;
1843
- getRoutes(): readonly Route[];
1844
- current(): Route | undefined;
1845
- /** Match the request, bind parameters, run the route middleware and the action. Called by the Http kernel. */
1846
- dispatch(request: HttpRequest): Promise<Response>;
1847
- }
1848
- declare const Router: Token$2<Router>;
1849
-
1850
- type ErrorKind = 'Http' | 'Server' | 'ModelNotFound' | 'Validation' | 'Authentication' | 'Authorization' | 'TokenMismatch' | 'BindingResolution' | 'CircularDependency' | 'ContainerNotAvailable';
1851
- /** Every error thrown by the framework implements this. The exception handler switches on `kind`. */
1852
- interface OrielError extends Error {
1853
- readonly kind: ErrorKind;
1854
- /** HTTP status the error should render as, when relevant. */
1855
- readonly status?: number;
1856
- readonly headers?: Record<string, string>;
1857
- }
1858
-
1859
- interface LiveSnapshot {
1860
- data: Record<string, unknown>;
1861
- memo: {
1862
- id: string;
1863
- /** ClassRegistry name of the component. */
1864
- name: string;
1865
- path: string;
1866
- method: string;
1867
- children: Record<string, [tag: string, id: string]>;
1868
- errors: Record<string, string[]>;
1869
- };
1870
- /** HMAC-SHA256 of JSON(data + memo), keyed by APP_KEY. */
1871
- checksum: string;
1872
- }
1873
- interface LiveEffects {
1874
- html?: string;
1875
- /** Browser events from this.dispatch(); `self` keeps one on this component, `to` sends it to one component name. */
1876
- dispatches?: Array<{
1877
- name: string;
1878
- params: Record<string, unknown>;
1879
- self?: true;
1880
- to?: string;
1881
- }>;
1882
- /** Events this component listens to (@On, static listeners); sent with the first render. */
1883
- listeners?: string[];
1884
- redirect?: string;
1885
- /** Follow `redirect` with o:navigate instead of a full page load. */
1886
- redirectUsingNavigate?: true;
1887
- returns?: unknown[];
1888
- }
1889
- interface LiveUpdateRequest {
1890
- components: Array<{
1891
- /** JSON-encoded LiveSnapshot. */
1892
- snapshot: string;
1893
- updates: Record<string, unknown>;
1894
- calls: Array<{
1895
- method: string;
1896
- params: unknown[];
1897
- }>;
1898
- }>;
1899
- }
1900
- interface LiveUpdateResponse {
1901
- components: Array<{
1902
- snapshot: string;
1903
- effects: LiveEffects;
1904
- }>;
1905
- }
1906
- interface LiveManager {
1907
- register(component: Class<unknown>, name?: string): void;
1908
- /** Server-renders the first HTML (snapshot embedded). `key` identifies a child inside its parent (o:key). */
1909
- mount(component: string | Class<unknown>, params?: Record<string, unknown>, key?: string): Promise<string>;
1910
- /** Checks checksums and CSRF, then applies updates and calls, re-renders and returns new snapshots. */
1911
- update(request: LiveUpdateRequest): Promise<LiveUpdateResponse>;
1912
- /**
1913
- * A full-page component (Route.get('/counter', Counter)): mounts `component` (a component instance) with the current route's parameters and
1914
- * returns the response, its layout view or a redirect.
1915
- */
1916
- page(component: object): Promise<unknown>;
1917
- isLiveRequest(request: HttpRequest): boolean;
1918
- }
1919
- declare const LiveManager: Token$2<LiveManager>;
1920
-
1921
- declare abstract class ServiceProvider implements ServiceProvider$3 {
1922
- protected readonly app: Application$2;
1923
- constructor(app: Application$2);
1924
- register(): void;
1925
- boot(): void | Promise<void>;
1926
- /** Package defaults under `key`; values the app already set win (shallow merge, like Laravel). */
1927
- protected mergeConfigFrom(defaults: Record<string, unknown>, key: string): void;
1928
- }
1929
-
1930
1074
  /** Marks Live component classes (Symbol.for, so two copies of the package agree). */
1931
1075
  declare const COMPONENT: unique symbol;
1932
1076
  /** A browser event queued by dispatch(). `to` is resolved to a component name when the effects are built. */
@@ -1999,6 +1143,13 @@ declare abstract class Component {
1999
1143
  reset(...properties: string[]): void;
2000
1144
  /** Keeps the current HTML: the response carries the new state but no `html` effect. */
2001
1145
  skipRender(): void;
1146
+ /**
1147
+ * An action for an `o:` directive, typed against its method: `o:click={this.$action(this.delete, tag.id)}` writes
1148
+ * `delete(5)`, and a string where `delete` takes a number is a type error. The arguments are written as JSON, the
1149
+ * trailing `undefined` ones left out so the method's defaults apply. The method must be one of this component's
1150
+ * actions (a public method of its class, not a hook and not @Locked); anything else throws while rendering.
1151
+ */
1152
+ $action<P extends unknown[]>(method: (...params: P) => unknown, ...params: NoInfer<P>): string;
2002
1153
  /** A full-page component as a route action: Route.get('/counter', Counter). Route parameters go to mount(). */
2003
1154
  __invoke(): Promise<unknown>;
2004
1155
  }
@@ -2050,6 +1201,9 @@ declare class Testable<C extends Component = Component> {
2050
1201
  assertDontSee(...values: string[]): this;
2051
1202
  /** Each value appears in the rendered HTML as written (not escaped). */
2052
1203
  assertSeeHtml(...values: string[]): this;
1204
+ /** Each value, HTML-escaped, appears in the rendered text: the HTML with its tags stripped (Livewire's assertSeeText). */
1205
+ assertSeeText(...values: string[]): this;
1206
+ assertDontSeeText(...values: string[]): this;
2053
1207
  assertDispatched(name: string, params?: Record<string, unknown>): this;
2054
1208
  assertNotDispatched(name: string): this;
2055
1209
  /** The error bag has errors for every key given (or any error at all with no keys). */
@@ -2154,7 +1308,7 @@ declare const UPDATE_URI = "/oriel/live/update";
2154
1308
  * registers POST /oriel/live/update (named `live.update`, in the `web` group: sessions and CSRF apply), the make:live
2155
1309
  * command, and the components under app/Live.
2156
1310
  */
2157
- declare class LiveServiceProvider extends ServiceProvider {
1311
+ declare class LiveServiceProvider extends ServiceProvider$1 {
2158
1312
  register(): void;
2159
1313
  boot(): Promise<void>;
2160
1314
  }
@@ -2264,4 +1418,4 @@ interface PaginationProps {
2264
1418
  */
2265
1419
  declare function Pagination({ paginator, class: className }: PaginationProps): Htmlable;
2266
1420
 
2267
- export { type JsonStructure as $, AnonymousNotifiable as A, BusFake as B, Component as C, type BootOptions as D, EventFake as E, FakeDisk as F, type CountOrFilter as G, DatabaseMigrations as H, InvalidLiveRequestError as I, type DatabaseTestOptions as J, DatabaseTransactions as K, Live as L, MailFake as M, NotificationFake as N, On as O, PERSISTENT_MIDDLEWARE as P, QueueFake as Q, type DispatchedEvent as R, type ExpectedErrors as S, type Target as T, UPDATE_URI as U, FakeFile as V, WithPagination as W, HttpClient as X, InteractsWithApplication as Y, InteractsWithConsole as Z, InteractsWithDatabase as _, type ComponentResult as a, MailRecord as a0, MakesHttpRequests as a1, PendingCommand as a2, type PushedJob as a3, RefreshDatabase as a4, RefreshDatabaseState as a5, type RequestData as a6, type RequestOptions as a7, type ResponseContext as a8, type ResponseCookie as a9, usingInMemoryDatabase as aA, type SentNotification as aa, StorageFake as ab, TESTING_ENVIRONMENT as ac, type TableOrModel as ad, TestCase as ae, type TestHooks as af, TestResponse as ag, type TestTrait as ah, actingAsAuthFactory as ai, addresses as aj, applyEnvironment as ak, cookieHeader as al, cookiePrefix as am, decryptCookie as an, encryptCookie as ao, flatten as ap, guessMimeType as aq, inertiaPageOf as ar, install as as, isExpired as at, matches as au, nameOf as av, recordingExceptionHandler as aw, recordingViewFactory as ax, responseCookies as ay, runCommand as az, Computed as b, CorruptComponentPayloadError as c, ErrorBag as d, LiveComponentManager as e, LiveComponentNotFoundError as f, LiveError as g, type LiveProps as h, LiveServiceProvider as i, Locked as j, MethodNotCallableError as k, type Paginated as l, Pagination as m, type PaginationProps as n, type PaginationSource as o, PendingEvent as p, type PersistentMiddleware as q, PropertyNotUpdatableError as r, TestRequestScope as s, Testable as t, componentName as u, live as v, persistentMiddleware as w, AssertableInertia as x, AssertableJson as y, type BatchRecord as z };
1421
+ export { InteractsWithDatabase as $, AnonymousNotifiable as A, BusFake as B, Component as C, type CountOrFilter as D, EventFake as E, DatabaseMigrations as F, type DatabaseTestOptions as G, DatabaseTransactions as H, InvalidLiveRequestError as I, type DispatchedEvent as J, type ExpectedErrors as K, Live as L, MailFake as M, NotificationFake as N, On as O, PERSISTENT_MIDDLEWARE as P, QueueFake as Q, type ExpectedListener as R, StorageFake as S, TestRequestScope as T, UPDATE_URI as U, FakeDisk as V, WithPagination as W, FakeFile as X, HttpClient as Y, InteractsWithApplication as Z, InteractsWithConsole as _, type ComponentResult as a, InteractsWithTime as a0, type JsonStructure as a1, MailRecord as a2, MakesHttpRequests as a3, PendingCommand as a4, type PushedJob as a5, RefreshDatabase as a6, RefreshDatabaseState as a7, type RequestData as a8, type RequestOptions as a9, matches as aA, nameOf as aB, recordingExceptionHandler as aC, recordingViewFactory as aD, responseCookies as aE, runCommand as aF, travel as aG, travelBack as aH, travelTo as aI, usingInMemoryDatabase as aJ, type ResponseContext as aa, type ResponseCookie as ab, type SentNotification as ac, TESTING_ENVIRONMENT as ad, type TableOrModel as ae, type Target as af, TestCase as ag, type TestHooks as ah, TestResponse as ai, type TestTrait as aj, type TravelDate as ak, Wormhole as al, actingAsAuthFactory as am, addresses as an, applyEnvironment as ao, cookieHeader as ap, cookiePrefix as aq, decryptCookie as ar, encryptCookie as as, flatten as at, freezeSecond as au, freezeTime as av, guessMimeType as aw, inertiaPageOf as ax, install as ay, isExpired as az, Computed as b, CorruptComponentPayloadError as c, ErrorBag as d, LiveComponentManager as e, LiveComponentNotFoundError as f, LiveError as g, type LiveProps as h, LiveServiceProvider as i, Locked as j, MethodNotCallableError as k, type Paginated as l, Pagination as m, type PaginationProps as n, type PaginationSource as o, PendingEvent as p, type PersistentMiddleware as q, PropertyNotUpdatableError as r, Testable as s, componentName as t, live as u, persistentMiddleware as v, AssertableInertia as w, AssertableJson as x, type BatchRecord as y, type BootOptions as z };