@inertiajs/core 2.2.14 → 2.2.16

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inertiajs/core",
3
- "version": "2.2.14",
3
+ "version": "2.2.16",
4
4
  "license": "MIT",
5
5
  "description": "A framework for creating server-driven single page apps.",
6
6
  "contributors": [
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@types/lodash-es": "^4.17.12",
48
- "axios": "^1.12.2",
48
+ "axios": "^1.13.2",
49
49
  "lodash-es": "^4.17.21",
50
50
  "qs": "^6.14.0"
51
51
  },
@@ -55,8 +55,8 @@
55
55
  "@types/nprogress": "^0.2.3",
56
56
  "@types/qs": "^6.14.0",
57
57
  "es-check": "^9.4.4",
58
- "esbuild": "^0.25.11",
59
- "esbuild-node-externals": "^1.18.0",
58
+ "esbuild": "^0.25.12",
59
+ "esbuild-node-externals": "^1.19.1",
60
60
  "typescript": "^5.9.3"
61
61
  },
62
62
  "scripts": {
package/types/config.d.ts CHANGED
@@ -6,12 +6,17 @@ type ConfigValue<T, K extends ConfigKeys<T>> = K extends `${infer P}.${infer Res
6
6
  type ConfigSetObject<T> = {
7
7
  [K in ConfigKeys<T>]?: ConfigValue<T, K>;
8
8
  };
9
+ type FirstLevelOptional<T> = {
10
+ [K in keyof T]?: T[K] extends object ? {
11
+ [P in keyof T[K]]?: T[K][P];
12
+ } : T[K];
13
+ };
9
14
  export declare class Config<TConfig extends {} = {}> {
10
- protected config: Partial<TConfig>;
15
+ protected config: FirstLevelOptional<TConfig>;
11
16
  protected defaults: TConfig;
12
17
  constructor(defaults: TConfig);
13
18
  extend<TExtension extends {}>(defaults?: TExtension): Config<TConfig & TExtension>;
14
- replace(newConfig: Partial<TConfig>): void;
19
+ replace(newConfig: FirstLevelOptional<TConfig>): void;
15
20
  get<K extends ConfigKeys<TConfig>>(key: K): ConfigValue<TConfig, K>;
16
21
  set<K extends ConfigKeys<TConfig>>(keyOrValues: K | Partial<ConfigSetObject<TConfig>>, value?: ConfigValue<TConfig, K>): void;
17
22
  }
@@ -1,2 +1,3 @@
1
1
  export declare const getScrollableParent: (element: HTMLElement | null) => HTMLElement | null;
2
- export declare const getElementsInViewportFromCollection: (referenceElement: HTMLElement, elements: HTMLElement[]) => HTMLElement[];
2
+ export declare const getElementsInViewportFromCollection: (elements: HTMLElement[], referenceElement?: HTMLElement) => HTMLElement[];
3
+ export declare const requestAnimationFrame: (cb: () => void, times?: number) => void;
package/types/files.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import { FormDataConvertible, RequestPayload } from './types';
2
+ export declare const isFile: (value: unknown) => boolean;
2
3
  export declare function hasFiles(data: RequestPayload | FormDataConvertible): boolean;
@@ -1,3 +1,3 @@
1
- import { FormDataConvertible } from './types';
1
+ import type { FormDataConvertible, QueryStringArrayFormatOption } from './types';
2
2
  export declare const isFormData: (value: any) => value is FormData;
3
- export declare function objectToFormData(source: Record<string, FormDataConvertible>, form?: FormData, parentKey?: string | null): FormData;
3
+ export declare function objectToFormData(source: Record<string, FormDataConvertible>, form?: FormData, parentKey?: string | null, queryStringArrayFormat?: QueryStringArrayFormatOption): FormData;
package/types/router.d.ts CHANGED
@@ -11,7 +11,7 @@ export declare class Router {
11
11
  delete<T extends RequestPayload = RequestPayload>(url: URL | string | UrlMethodPair, options?: Omit<VisitOptions<T>, 'method'>): void;
12
12
  reload<T extends RequestPayload = RequestPayload>(options?: ReloadOptions<T>): void;
13
13
  remember(data: unknown, key?: string): void;
14
- restore(key?: string): unknown;
14
+ restore<T = unknown>(key?: string): T | undefined;
15
15
  on<TEventName extends GlobalEventNames>(type: TEventName, callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>): VoidFunction;
16
16
  cancel(): void;
17
17
  cancelAll(): void;
package/types/types.d.ts CHANGED
@@ -41,10 +41,21 @@ export type FormDataConvertible = Array<FormDataConvertible> | {
41
41
  export type FormDataType<T extends object> = {
42
42
  [K in keyof T]: T[K] extends infer U ? U extends FormDataConvertibleValue ? U : U extends (...args: unknown[]) => unknown ? never : U extends object | Array<unknown> ? FormDataType<U> : never : never;
43
43
  };
44
- export type FormDataKeys<T> = T extends Function | FormDataConvertibleValue ? never : T extends Array<unknown> ? number extends T['length'] ? `${number}` | (0 extends 1 & T[number] ? never : `${number}.${FormDataKeys<T[number]>}`) : Extract<keyof T, `${number}`> | {
45
- [Key in Extract<keyof T, `${number}`>]: 0 extends 1 & T[Key & string] ? never : `${Key & string}.${FormDataKeys<T[Key & string]> & string}`;
46
- }[Extract<keyof T, `${number}`>] : string extends keyof T ? string : Extract<keyof T, string> | {
47
- [Key in Extract<keyof T, string>]: 0 extends 1 & T[Key] ? never : `${Key}.${FormDataKeys<T[Key]> & string}`;
44
+ /**
45
+ * Uses `0 extends 1 & T` to detect `any` type and prevent infinite recursion.
46
+ */
47
+ export type FormDataKeys<T> = T extends Function | FormDataConvertibleValue ? never : T extends unknown[] ? ArrayFormDataKeys<T> : T extends Record<string, unknown> ? ObjectFormDataKeys<T> : never;
48
+ /**
49
+ * Helper type for array form data keys
50
+ */
51
+ type ArrayFormDataKeys<T extends unknown[]> = number extends T['length'] ? `${number}` | (0 extends 1 & T[number] ? never : T[number] extends FormDataConvertibleValue ? never : `${number}.${FormDataKeys<T[number]>}`) : Extract<keyof T, `${number}`> | {
52
+ [Key in Extract<keyof T, `${number}`>]: 0 extends 1 & T[Key] ? never : T[Key] extends FormDataConvertibleValue ? never : `${Key & string}.${FormDataKeys<T[Key & string] & string>}`;
53
+ }[Extract<keyof T, `${number}`>];
54
+ /**
55
+ * Helper type for object form data keys
56
+ */
57
+ type ObjectFormDataKeys<T extends Record<string, unknown>> = string extends keyof T ? string : Extract<keyof T, string> | {
58
+ [Key in Extract<keyof T, string>]: 0 extends 1 & T[Key] ? never : T[Key] extends FormDataConvertibleValue ? never : T[Key] extends any[] ? `${Key}.${FormDataKeys<T[Key]> & string}` : T[Key] extends Record<string, any> ? `${Key}.${FormDataKeys<T[Key]> & string}` : never;
48
59
  }[Extract<keyof T, string>];
49
60
  type PartialFormDataErrors<T> = {
50
61
  [K in string extends keyof T ? string : Extract<keyof FormDataError<T>, string>]?: ErrorValue;
@@ -110,6 +121,7 @@ export type PageHandler<ComponentType = Component> = ({ component, page, preserv
110
121
  preserveState: boolean;
111
122
  }) => Promise<unknown>;
112
123
  export type PreserveStateOption = boolean | 'errors' | ((page: Page) => boolean);
124
+ export type QueryStringArrayFormatOption = 'indices' | 'brackets';
113
125
  export type Progress = AxiosProgressEvent;
114
126
  export type LocationVisit = {
115
127
  preserveScroll: boolean;
@@ -129,7 +141,7 @@ export type Visit<T extends RequestPayload = RequestPayload> = {
129
141
  headers: Record<string, string>;
130
142
  errorBag: string | null;
131
143
  forceFormData: boolean;
132
- queryStringArrayFormat: 'indices' | 'brackets';
144
+ queryStringArrayFormat: QueryStringArrayFormatOption;
133
145
  async: boolean;
134
146
  showProgress: boolean;
135
147
  prefetch: boolean;
@@ -280,11 +292,16 @@ export type InternalActiveVisit = ActiveVisit & {
280
292
  };
281
293
  export type VisitId = unknown;
282
294
  export type Component = unknown;
295
+ type FirstLevelOptional<T> = {
296
+ [K in keyof T]?: T[K] extends object ? {
297
+ [P in keyof T[K]]?: T[K][P];
298
+ } : T[K];
299
+ };
283
300
  interface CreateInertiaAppOptions<TComponentResolver, TSetupOptions, TSetupReturn, TAdditionalInertiaAppConfig> {
284
301
  resolve: TComponentResolver;
285
302
  setup: (options: TSetupOptions) => TSetupReturn;
286
303
  title?: HeadManagerTitleCallback;
287
- defaults?: Partial<InertiaAppConfig & TAdditionalInertiaAppConfig>;
304
+ defaults?: FirstLevelOptional<InertiaAppConfig & TAdditionalInertiaAppConfig>;
288
305
  }
289
306
  export interface CreateInertiaAppOptionsForCSR<SharedProps extends PageProps, TComponentResolver, TSetupOptions, TSetupReturn, TAdditionalInertiaAppConfig> extends CreateInertiaAppOptions<TComponentResolver, TSetupOptions, TSetupReturn, TAdditionalInertiaAppConfig> {
290
307
  id?: string;
@@ -331,12 +348,13 @@ export type InertiaAppConfig = {
331
348
  recentlySuccessfulDuration: number;
332
349
  };
333
350
  future: {
334
- preserveEqualProps?: boolean;
335
- useDataInertiaHeadAttribute?: boolean;
336
- useDialogForErrorModal?: boolean;
351
+ preserveEqualProps: boolean;
352
+ useDataInertiaHeadAttribute: boolean;
353
+ useDialogForErrorModal: boolean;
337
354
  };
338
355
  prefetch: {
339
356
  cacheFor: CacheForOption | CacheForOption[];
357
+ hoverDelay: number;
340
358
  };
341
359
  visitOptions?: (href: string, options: VisitOptions) => VisitOptions;
342
360
  };
package/types/url.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { FormDataConvertible, Method, RequestPayload, UrlMethodPair, VisitOptions } from './types';
1
+ import type { FormDataConvertible, Method, QueryStringArrayFormatOption, RequestPayload, UrlMethodPair, VisitOptions } from './types';
2
2
  export declare function hrefToUrl(href: string | URL): URL;
3
3
  export declare const transformUrlAndData: (href: string | URL, data: RequestPayload, method: Method, forceFormData: VisitOptions["forceFormData"], queryStringArrayFormat: VisitOptions["queryStringArrayFormat"]) => [URL, RequestPayload];
4
4
  type MergeDataIntoQueryStringDataReturnType<T extends RequestPayload> = T extends Record<string, FormDataConvertible> ? Record<string, FormDataConvertible> : RequestPayload;
5
- export declare function mergeDataIntoQueryString<T extends RequestPayload>(method: Method, href: URL | string, data: T, qsArrayFormat?: 'indices' | 'brackets'): [string, MergeDataIntoQueryStringDataReturnType<T>];
5
+ export declare function mergeDataIntoQueryString<T extends RequestPayload>(method: Method, href: URL | string, data: T, qsArrayFormat?: QueryStringArrayFormatOption): [string, MergeDataIntoQueryStringDataReturnType<T>];
6
6
  export declare function urlWithoutHash(url: URL | Location): URL;
7
7
  export declare const setHashIfSameUrl: (originUrl: URL | Location, destinationUrl: URL | Location) => void;
8
8
  export declare const isSameUrlWithoutHash: (url1: URL | Location, url2: URL | Location) => boolean;