inertiax-core 11.0.11 → 11.0.13

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/dist/index.js CHANGED
@@ -64,8 +64,8 @@ function fireEvent(name, options) {
64
64
  var fireBeforeEvent = (visit) => {
65
65
  return fireEvent("before", { cancelable: true, detail: { visit } });
66
66
  };
67
- var fireErrorEvent = (errors) => {
68
- return fireEvent("error", { detail: { errors } });
67
+ var fireErrorEvent = (errors, { page: page2, visitId } = {}) => {
68
+ return fireEvent("error", { detail: { errors, page: page2, visitId } });
69
69
  };
70
70
  var fireNetworkErrorEvent = (error) => {
71
71
  return fireEvent("networkError", { cancelable: true, detail: { error } });
@@ -79,8 +79,11 @@ var fireHttpExceptionEvent = (response) => {
79
79
  var fireBeforeUpdateEvent = (page2) => {
80
80
  return fireEvent("beforeUpdate", { detail: { page: page2 } });
81
81
  };
82
- var fireNavigateEvent = (page2) => {
83
- return fireEvent("navigate", { detail: { page: page2 } });
82
+ var fireNavigateEvent = (page2, { cached = false, visitId } = {}) => {
83
+ return fireEvent("navigate", { detail: { page: page2, cached, visitId } });
84
+ };
85
+ var fireClientVisitEvent = (page2, { replace, visitId }) => {
86
+ return fireEvent("clientVisit", { detail: { page: page2, replace, visitId } });
84
87
  };
85
88
  var fireProgressEvent = (progress3) => {
86
89
  return fireEvent("progress", { detail: { progress: progress3 } });
@@ -88,8 +91,8 @@ var fireProgressEvent = (progress3) => {
88
91
  var fireStartEvent = (visit) => {
89
92
  return fireEvent("start", { detail: { visit } });
90
93
  };
91
- var fireSuccessEvent = (page2) => {
92
- return fireEvent("success", { detail: { page: page2 } });
94
+ var fireSuccessEvent = (page2, { visitId } = {}) => {
95
+ return fireEvent("success", { detail: { page: page2, visitId } });
93
96
  };
94
97
  var firePrefetchedEvent = (response, visit) => {
95
98
  return fireEvent("prefetched", { detail: { fetchedAt: Date.now(), response, visit } });
@@ -808,11 +811,15 @@ var PrefetchedRequests = class {
808
811
  use(prefetched, params) {
809
812
  const id = `${params.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`;
810
813
  this.currentUseId = id;
814
+ const consumedParams = {
815
+ ...params,
816
+ cached: true
817
+ };
811
818
  return prefetched.response.then((response) => {
812
819
  if (this.currentUseId !== id) {
813
820
  return;
814
821
  }
815
- response.mergeParams({ ...params, onPrefetched: () => {
822
+ response.mergeParams({ ...consumedParams, onPrefetched: () => {
816
823
  } });
817
824
  this.removeSingleUseItems(params);
818
825
  return response.handle();
@@ -848,6 +855,7 @@ var PrefetchedRequests = class {
848
855
  this.withoutPurposePrefetchHeader(params1),
849
856
  this.withoutPurposePrefetchHeader(params2),
850
857
  [
858
+ "id",
851
859
  "showProgress",
852
860
  "replace",
853
861
  "prefetch",
@@ -869,7 +877,8 @@ var PrefetchedRequests = class {
869
877
  "viewTransition",
870
878
  "optimistic",
871
879
  "component",
872
- "pageProps"
880
+ "pageProps",
881
+ "cached"
873
882
  ]
874
883
  );
875
884
  }
@@ -1348,6 +1357,7 @@ var CurrentFramePage = class {
1348
1357
  constructor(frameId) {
1349
1358
  this.frameId = frameId;
1350
1359
  }
1360
+ frameId;
1351
1361
  page;
1352
1362
  swapComponent;
1353
1363
  resolveComponent;
@@ -1383,7 +1393,9 @@ var CurrentFramePage = class {
1383
1393
  updateBrowserUrl = this.frameId === DEFAULT_FRAME_ID3,
1384
1394
  preserveScroll = false,
1385
1395
  preserveState = false,
1386
- viewTransition = false
1396
+ viewTransition = false,
1397
+ cached = false,
1398
+ visitId
1387
1399
  } = {}) {
1388
1400
  if (Object.keys(page2.deferredProps || {}).length) {
1389
1401
  this.pendingDeferredProps = {
@@ -1452,7 +1464,7 @@ var CurrentFramePage = class {
1452
1464
  }
1453
1465
  this.pendingDeferredProps = null;
1454
1466
  if (!replace) {
1455
- fireNavigateEvent(page2);
1467
+ fireNavigateEvent(page2, { cached, visitId });
1456
1468
  }
1457
1469
  });
1458
1470
  });
@@ -1793,6 +1805,19 @@ var NavigationType = class {
1793
1805
  };
1794
1806
  var navigationType = new NavigationType();
1795
1807
 
1808
+ // src/uid.ts
1809
+ function uid() {
1810
+ const cryptoObj = typeof window !== "undefined" ? window.crypto : void 0;
1811
+ if (cryptoObj?.randomUUID) {
1812
+ return cryptoObj.randomUUID();
1813
+ }
1814
+ const randomByte = () => cryptoObj?.getRandomValues ? cryptoObj.getRandomValues(new Uint8Array(1))[0] : Math.floor(Math.random() * 256);
1815
+ return "10000000-1000-4000-8000-100000000000".replace(
1816
+ /[018]/g,
1817
+ (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16)
1818
+ );
1819
+ }
1820
+
1796
1821
  // src/initialVisit.ts
1797
1822
  var InitialVisit = class {
1798
1823
  static handle(frameId = "_top") {
@@ -1812,9 +1837,10 @@ var InitialVisit = class {
1812
1837
  }
1813
1838
  const scrollRegions = history.getScrollRegions(frameId);
1814
1839
  history.decrypt(null, frameId).then((data) => {
1815
- page.set(data, { preserveScroll: true, preserveState: true }, frameId).then(() => {
1840
+ const visitId = uid();
1841
+ page.set(data, { preserveScroll: true, preserveState: true, visitId }, frameId).then(() => {
1816
1842
  Scroll.restore(scrollRegions, frameId);
1817
- fireNavigateEvent(page.get(frameId));
1843
+ fireNavigateEvent(page.get(frameId), { visitId });
1818
1844
  });
1819
1845
  }).catch(() => {
1820
1846
  eventHandler.onMissingHistoryItem(frameId);
@@ -1834,17 +1860,19 @@ var InitialVisit = class {
1834
1860
  page.setUrlHash(window.location.hash, frameId);
1835
1861
  }
1836
1862
  history.decrypt(page.get(frameId), frameId).then(() => {
1863
+ const visitId = uid();
1837
1864
  const rememberedState = history.getState(history.rememberedState, {}, frameId);
1838
1865
  const scrollRegions = history.getScrollRegions(frameId);
1839
1866
  page.remember(rememberedState, frameId);
1840
1867
  page.set(page.get(frameId), {
1841
1868
  preserveScroll: locationVisit.preserveScroll,
1842
- preserveState: true
1869
+ preserveState: true,
1870
+ visitId
1843
1871
  }, frameId).then(() => {
1844
1872
  if (locationVisit.preserveScroll) {
1845
1873
  Scroll.restore(scrollRegions, frameId);
1846
1874
  }
1847
- this.fireInitialEvents(frameId);
1875
+ this.fireInitialEvents(frameId, visitId);
1848
1876
  });
1849
1877
  }).catch(() => {
1850
1878
  eventHandler.onMissingHistoryItem(frameId);
@@ -1855,18 +1883,19 @@ var InitialVisit = class {
1855
1883
  if (typeof window !== "undefined") {
1856
1884
  page.setUrlHash(window.location.hash, frameId);
1857
1885
  }
1858
- page.set(page.get(frameId), { preserveScroll: true, preserveState: true }, frameId).then(() => {
1886
+ const visitId = uid();
1887
+ page.set(page.get(frameId), { preserveScroll: true, preserveState: true, visitId }, frameId).then(() => {
1859
1888
  if (navigationType.isReload()) {
1860
1889
  Scroll.restore(history.getScrollRegions(frameId), frameId);
1861
1890
  } else {
1862
1891
  Scroll.scrollToAnchor(frameId);
1863
1892
  }
1864
- this.fireInitialEvents(frameId);
1893
+ this.fireInitialEvents(frameId, visitId);
1865
1894
  });
1866
1895
  }
1867
- static fireInitialEvents(frameId = "_top") {
1896
+ static fireInitialEvents(frameId, visitId) {
1868
1897
  const page2 = page.get(frameId);
1869
- fireNavigateEvent(page2);
1898
+ fireNavigateEvent(page2, { visitId });
1870
1899
  if (Object.keys(page2.flash).length > 0) {
1871
1900
  queueMicrotask(() => fireFlashEvent(page2.flash));
1872
1901
  }
@@ -2265,6 +2294,46 @@ var http = {
2265
2294
  processError: httpHandlers.processError.bind(httpHandlers)
2266
2295
  };
2267
2296
 
2297
+ // src/interceptors.ts
2298
+ var VisitInterceptors = class {
2299
+ requestHandlers = [];
2300
+ responseHandlers = [];
2301
+ onVisitRequest(handler) {
2302
+ this.requestHandlers.push(handler);
2303
+ return () => {
2304
+ this.requestHandlers = this.requestHandlers.filter((h) => h !== handler);
2305
+ };
2306
+ }
2307
+ onVisitResponse(handler) {
2308
+ this.responseHandlers.push(handler);
2309
+ return () => {
2310
+ this.responseHandlers = this.responseHandlers.filter((h) => h !== handler);
2311
+ };
2312
+ }
2313
+ async processRequest(visit, config2) {
2314
+ let result = config2;
2315
+ for (const handler of this.requestHandlers) {
2316
+ result = await handler(visit, result);
2317
+ }
2318
+ return result;
2319
+ }
2320
+ async processResponse(visit, response) {
2321
+ let result = response;
2322
+ for (const handler of this.responseHandlers) {
2323
+ result = await handler(visit, result);
2324
+ }
2325
+ return result;
2326
+ }
2327
+ };
2328
+ var interceptors = new VisitInterceptors();
2329
+ function exposeInterceptors() {
2330
+ if (typeof window === "undefined") {
2331
+ return;
2332
+ }
2333
+ ;
2334
+ window.__inertia_interceptors__ = interceptors;
2335
+ }
2336
+
2268
2337
  // src/requestParams.ts
2269
2338
  var RequestParams = class _RequestParams {
2270
2339
  callbacks = [];
@@ -2514,6 +2583,10 @@ var Response = class _Response {
2514
2583
  this.originatingPage = originatingPage;
2515
2584
  this.router = router2;
2516
2585
  }
2586
+ requestParams;
2587
+ response;
2588
+ originatingPage;
2589
+ router;
2517
2590
  wasPrefetched = false;
2518
2591
  processed = false;
2519
2592
  static create(params, response, originatingPage, router2) {
@@ -2571,14 +2644,14 @@ var Response = class _Response {
2571
2644
  const errors = page.get(frameId).props.errors || {};
2572
2645
  if (Object.keys(errors).length > 0) {
2573
2646
  const scopedErrors = this.getScopedErrors(errors);
2574
- fireErrorEvent(scopedErrors);
2647
+ fireErrorEvent(scopedErrors, { page: page.get(), visitId: this.requestParams.all().id });
2575
2648
  return this.requestParams.all().onError(scopedErrors);
2576
2649
  }
2577
2650
  this.router?.flushByCacheTags(this.requestParams.all().invalidateCacheTags || []);
2578
2651
  if (!this.wasPrefetched) {
2579
2652
  this.router?.flush(page.get(frameId).url);
2580
2653
  }
2581
- fireSuccessEvent(page.get(frameId));
2654
+ fireSuccessEvent(page.get(frameId), { visitId: this.requestParams.all().id });
2582
2655
  await this.requestParams.all().onSuccess(page.get(frameId));
2583
2656
  history.preserveUrl = false;
2584
2657
  }
@@ -2664,6 +2737,7 @@ var Response = class _Response {
2664
2737
  if (!this.shouldSetPage(pageResponse)) {
2665
2738
  return Promise.resolve();
2666
2739
  }
2740
+ this.response = await interceptors.processResponse(this.requestParams.all(), this.response);
2667
2741
  this.mergeProps(pageResponse);
2668
2742
  page.mergeOncePropsIntoResponse(pageResponse, {}, frameId);
2669
2743
  this.preserveOptimisticProps(pageResponse);
@@ -2678,7 +2752,9 @@ var Response = class _Response {
2678
2752
  updateBrowserUrl: this.requestParams.all().updateBrowserUrl,
2679
2753
  preserveScroll: this.requestParams.all().preserveScroll,
2680
2754
  preserveState: this.requestParams.all().preserveState,
2681
- viewTransition: this.requestParams.all().viewTransition
2755
+ viewTransition: this.requestParams.all().viewTransition,
2756
+ cached: this.requestParams.all().cached,
2757
+ visitId: this.requestParams.all().id
2682
2758
  }, frameId);
2683
2759
  }
2684
2760
  getDataFromResponse(response) {
@@ -2942,6 +3018,7 @@ var Request = class _Request {
2942
3018
  this.optimistic = optimistic;
2943
3019
  this.router = router2;
2944
3020
  }
3021
+ page;
2945
3022
  response;
2946
3023
  cancelToken;
2947
3024
  requestParams;
@@ -2969,14 +3046,16 @@ var Request = class _Request {
2969
3046
  firePrefetchingEvent(this.requestParams.all());
2970
3047
  }
2971
3048
  const originallyPrefetch = this.requestParams.all().prefetch;
2972
- return http.getClient().request({
3049
+ const config2 = {
2973
3050
  method: this.requestParams.all().method,
2974
3051
  url: urlWithoutHash(this.requestParams.all().url).href,
2975
3052
  data: this.requestParams.data(),
2976
3053
  signal: this.cancelToken.signal,
2977
3054
  headers: this.getHeaders(),
2978
3055
  onUploadProgress: this.onProgress.bind(this)
2979
- }).then((response) => {
3056
+ };
3057
+ const processedConfig = await interceptors.processRequest(this.requestParams.all(), config2);
3058
+ return http.getClient().request(processedConfig).then((response) => {
2980
3059
  this.response = Response.create(this.requestParams, response, this.page, this.router);
2981
3060
  return this.response.handle();
2982
3061
  }).catch((error) => {
@@ -3381,6 +3460,7 @@ var Router = class {
3381
3460
  if (visit.component) {
3382
3461
  history.processQueue().then(() => {
3383
3462
  this.performInstantSwap(visit).then(() => {
3463
+ requestParams.preserveScroll = true;
3384
3464
  requestParams.preserveState = true;
3385
3465
  requestParams.replace = true;
3386
3466
  requestParams.viewTransition = false;
@@ -3550,13 +3630,16 @@ var Router = class {
3550
3630
  };
3551
3631
  const preserveScroll = RequestParams.resolvePreserveOption(params.preserveScroll ?? false, page2);
3552
3632
  const preserveState = RequestParams.resolvePreserveOption(params.preserveState ?? false, page2);
3633
+ const visitId = this.createVisitId();
3553
3634
  return page.set(page2, {
3554
3635
  replace,
3555
3636
  updateBrowserUrl: params.updateBrowserUrl ?? this.frameId === DEFAULT_FRAME_ID4,
3556
3637
  preserveScroll,
3557
3638
  preserveState,
3558
- viewTransition
3639
+ viewTransition,
3640
+ visitId
3559
3641
  }, this.frameId).then(() => {
3642
+ fireClientVisitEvent(page.get(this.frameId), { replace, visitId });
3560
3643
  const currentFlash = page.get(this.frameId).flash;
3561
3644
  if (Object.keys(currentFlash).length > 0) {
3562
3645
  fireFlashEvent(currentFlash);
@@ -3598,7 +3681,8 @@ var Router = class {
3598
3681
  updateBrowserUrl: visit.updateBrowserUrl,
3599
3682
  preserveScroll: RequestParams.resolvePreserveOption(visit.preserveScroll, intermediatePage),
3600
3683
  preserveState: false,
3601
- viewTransition: visit.viewTransition
3684
+ viewTransition: visit.viewTransition,
3685
+ visitId: visit.id
3602
3686
  }, this.frameId);
3603
3687
  }
3604
3688
  getPrefetchParams(href, options) {
@@ -3613,6 +3697,9 @@ var Router = class {
3613
3697
  ...this.getVisitEvents(options)
3614
3698
  };
3615
3699
  }
3700
+ createVisitId() {
3701
+ return uid();
3702
+ }
3616
3703
  getPendingVisit(href, options) {
3617
3704
  if (isUrlMethodPair(href)) {
3618
3705
  const urlMethodPair = href;
@@ -3646,6 +3733,7 @@ var Router = class {
3646
3733
  viewTransition: false,
3647
3734
  component: null,
3648
3735
  pageProps: null,
3736
+ cached: false,
3649
3737
  ...stripTopLevelUndefined(options),
3650
3738
  ...stripTopLevelUndefined(configuredOptions)
3651
3739
  };
@@ -3657,6 +3745,7 @@ var Router = class {
3657
3745
  mergedOptions.queryStringArrayFormat
3658
3746
  );
3659
3747
  const visit = {
3748
+ id: this.createVisitId(),
3660
3749
  cancelled: false,
3661
3750
  completed: false,
3662
3751
  interrupted: false,
@@ -5373,12 +5462,14 @@ export {
5373
5462
  createHeadManager,
5374
5463
  createLayoutPropsStore,
5375
5464
  createRouter,
5465
+ exposeInterceptors,
5376
5466
  formDataToObject,
5377
5467
  getInitialPageFromDOM,
5378
5468
  getScrollableParent,
5379
5469
  hasFiles,
5380
5470
  hrefToUrl,
5381
5471
  http,
5472
+ interceptors,
5382
5473
  isPathOrSubPath,
5383
5474
  isPropsObject,
5384
5475
  isPropsObjectOrCallback,