inertiax-core 11.0.11 → 11.0.12

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
  }
@@ -1383,7 +1392,9 @@ var CurrentFramePage = class {
1383
1392
  updateBrowserUrl = this.frameId === DEFAULT_FRAME_ID3,
1384
1393
  preserveScroll = false,
1385
1394
  preserveState = false,
1386
- viewTransition = false
1395
+ viewTransition = false,
1396
+ cached = false,
1397
+ visitId
1387
1398
  } = {}) {
1388
1399
  if (Object.keys(page2.deferredProps || {}).length) {
1389
1400
  this.pendingDeferredProps = {
@@ -1452,7 +1463,7 @@ var CurrentFramePage = class {
1452
1463
  }
1453
1464
  this.pendingDeferredProps = null;
1454
1465
  if (!replace) {
1455
- fireNavigateEvent(page2);
1466
+ fireNavigateEvent(page2, { cached, visitId });
1456
1467
  }
1457
1468
  });
1458
1469
  });
@@ -1793,6 +1804,19 @@ var NavigationType = class {
1793
1804
  };
1794
1805
  var navigationType = new NavigationType();
1795
1806
 
1807
+ // src/uid.ts
1808
+ function uid() {
1809
+ const cryptoObj = typeof window !== "undefined" ? window.crypto : void 0;
1810
+ if (cryptoObj?.randomUUID) {
1811
+ return cryptoObj.randomUUID();
1812
+ }
1813
+ const randomByte = () => cryptoObj?.getRandomValues ? cryptoObj.getRandomValues(new Uint8Array(1))[0] : Math.floor(Math.random() * 256);
1814
+ return "10000000-1000-4000-8000-100000000000".replace(
1815
+ /[018]/g,
1816
+ (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16)
1817
+ );
1818
+ }
1819
+
1796
1820
  // src/initialVisit.ts
1797
1821
  var InitialVisit = class {
1798
1822
  static handle(frameId = "_top") {
@@ -1812,9 +1836,10 @@ var InitialVisit = class {
1812
1836
  }
1813
1837
  const scrollRegions = history.getScrollRegions(frameId);
1814
1838
  history.decrypt(null, frameId).then((data) => {
1815
- page.set(data, { preserveScroll: true, preserveState: true }, frameId).then(() => {
1839
+ const visitId = uid();
1840
+ page.set(data, { preserveScroll: true, preserveState: true, visitId }, frameId).then(() => {
1816
1841
  Scroll.restore(scrollRegions, frameId);
1817
- fireNavigateEvent(page.get(frameId));
1842
+ fireNavigateEvent(page.get(frameId), { visitId });
1818
1843
  });
1819
1844
  }).catch(() => {
1820
1845
  eventHandler.onMissingHistoryItem(frameId);
@@ -1834,17 +1859,19 @@ var InitialVisit = class {
1834
1859
  page.setUrlHash(window.location.hash, frameId);
1835
1860
  }
1836
1861
  history.decrypt(page.get(frameId), frameId).then(() => {
1862
+ const visitId = uid();
1837
1863
  const rememberedState = history.getState(history.rememberedState, {}, frameId);
1838
1864
  const scrollRegions = history.getScrollRegions(frameId);
1839
1865
  page.remember(rememberedState, frameId);
1840
1866
  page.set(page.get(frameId), {
1841
1867
  preserveScroll: locationVisit.preserveScroll,
1842
- preserveState: true
1868
+ preserveState: true,
1869
+ visitId
1843
1870
  }, frameId).then(() => {
1844
1871
  if (locationVisit.preserveScroll) {
1845
1872
  Scroll.restore(scrollRegions, frameId);
1846
1873
  }
1847
- this.fireInitialEvents(frameId);
1874
+ this.fireInitialEvents(frameId, visitId);
1848
1875
  });
1849
1876
  }).catch(() => {
1850
1877
  eventHandler.onMissingHistoryItem(frameId);
@@ -1855,18 +1882,19 @@ var InitialVisit = class {
1855
1882
  if (typeof window !== "undefined") {
1856
1883
  page.setUrlHash(window.location.hash, frameId);
1857
1884
  }
1858
- page.set(page.get(frameId), { preserveScroll: true, preserveState: true }, frameId).then(() => {
1885
+ const visitId = uid();
1886
+ page.set(page.get(frameId), { preserveScroll: true, preserveState: true, visitId }, frameId).then(() => {
1859
1887
  if (navigationType.isReload()) {
1860
1888
  Scroll.restore(history.getScrollRegions(frameId), frameId);
1861
1889
  } else {
1862
1890
  Scroll.scrollToAnchor(frameId);
1863
1891
  }
1864
- this.fireInitialEvents(frameId);
1892
+ this.fireInitialEvents(frameId, visitId);
1865
1893
  });
1866
1894
  }
1867
- static fireInitialEvents(frameId = "_top") {
1895
+ static fireInitialEvents(frameId, visitId) {
1868
1896
  const page2 = page.get(frameId);
1869
- fireNavigateEvent(page2);
1897
+ fireNavigateEvent(page2, { visitId });
1870
1898
  if (Object.keys(page2.flash).length > 0) {
1871
1899
  queueMicrotask(() => fireFlashEvent(page2.flash));
1872
1900
  }
@@ -2265,6 +2293,46 @@ var http = {
2265
2293
  processError: httpHandlers.processError.bind(httpHandlers)
2266
2294
  };
2267
2295
 
2296
+ // src/interceptors.ts
2297
+ var VisitInterceptors = class {
2298
+ requestHandlers = [];
2299
+ responseHandlers = [];
2300
+ onVisitRequest(handler) {
2301
+ this.requestHandlers.push(handler);
2302
+ return () => {
2303
+ this.requestHandlers = this.requestHandlers.filter((h) => h !== handler);
2304
+ };
2305
+ }
2306
+ onVisitResponse(handler) {
2307
+ this.responseHandlers.push(handler);
2308
+ return () => {
2309
+ this.responseHandlers = this.responseHandlers.filter((h) => h !== handler);
2310
+ };
2311
+ }
2312
+ async processRequest(visit, config2) {
2313
+ let result = config2;
2314
+ for (const handler of this.requestHandlers) {
2315
+ result = await handler(visit, result);
2316
+ }
2317
+ return result;
2318
+ }
2319
+ async processResponse(visit, response) {
2320
+ let result = response;
2321
+ for (const handler of this.responseHandlers) {
2322
+ result = await handler(visit, result);
2323
+ }
2324
+ return result;
2325
+ }
2326
+ };
2327
+ var interceptors = new VisitInterceptors();
2328
+ function exposeInterceptors() {
2329
+ if (typeof window === "undefined") {
2330
+ return;
2331
+ }
2332
+ ;
2333
+ window.__inertia_interceptors__ = interceptors;
2334
+ }
2335
+
2268
2336
  // src/requestParams.ts
2269
2337
  var RequestParams = class _RequestParams {
2270
2338
  callbacks = [];
@@ -2571,14 +2639,14 @@ var Response = class _Response {
2571
2639
  const errors = page.get(frameId).props.errors || {};
2572
2640
  if (Object.keys(errors).length > 0) {
2573
2641
  const scopedErrors = this.getScopedErrors(errors);
2574
- fireErrorEvent(scopedErrors);
2642
+ fireErrorEvent(scopedErrors, { page: page.get(), visitId: this.requestParams.all().id });
2575
2643
  return this.requestParams.all().onError(scopedErrors);
2576
2644
  }
2577
2645
  this.router?.flushByCacheTags(this.requestParams.all().invalidateCacheTags || []);
2578
2646
  if (!this.wasPrefetched) {
2579
2647
  this.router?.flush(page.get(frameId).url);
2580
2648
  }
2581
- fireSuccessEvent(page.get(frameId));
2649
+ fireSuccessEvent(page.get(frameId), { visitId: this.requestParams.all().id });
2582
2650
  await this.requestParams.all().onSuccess(page.get(frameId));
2583
2651
  history.preserveUrl = false;
2584
2652
  }
@@ -2664,6 +2732,7 @@ var Response = class _Response {
2664
2732
  if (!this.shouldSetPage(pageResponse)) {
2665
2733
  return Promise.resolve();
2666
2734
  }
2735
+ this.response = await interceptors.processResponse(this.requestParams.all(), this.response);
2667
2736
  this.mergeProps(pageResponse);
2668
2737
  page.mergeOncePropsIntoResponse(pageResponse, {}, frameId);
2669
2738
  this.preserveOptimisticProps(pageResponse);
@@ -2678,7 +2747,9 @@ var Response = class _Response {
2678
2747
  updateBrowserUrl: this.requestParams.all().updateBrowserUrl,
2679
2748
  preserveScroll: this.requestParams.all().preserveScroll,
2680
2749
  preserveState: this.requestParams.all().preserveState,
2681
- viewTransition: this.requestParams.all().viewTransition
2750
+ viewTransition: this.requestParams.all().viewTransition,
2751
+ cached: this.requestParams.all().cached,
2752
+ visitId: this.requestParams.all().id
2682
2753
  }, frameId);
2683
2754
  }
2684
2755
  getDataFromResponse(response) {
@@ -2969,14 +3040,16 @@ var Request = class _Request {
2969
3040
  firePrefetchingEvent(this.requestParams.all());
2970
3041
  }
2971
3042
  const originallyPrefetch = this.requestParams.all().prefetch;
2972
- return http.getClient().request({
3043
+ const config2 = {
2973
3044
  method: this.requestParams.all().method,
2974
3045
  url: urlWithoutHash(this.requestParams.all().url).href,
2975
3046
  data: this.requestParams.data(),
2976
3047
  signal: this.cancelToken.signal,
2977
3048
  headers: this.getHeaders(),
2978
3049
  onUploadProgress: this.onProgress.bind(this)
2979
- }).then((response) => {
3050
+ };
3051
+ const processedConfig = await interceptors.processRequest(this.requestParams.all(), config2);
3052
+ return http.getClient().request(processedConfig).then((response) => {
2980
3053
  this.response = Response.create(this.requestParams, response, this.page, this.router);
2981
3054
  return this.response.handle();
2982
3055
  }).catch((error) => {
@@ -3381,6 +3454,7 @@ var Router = class {
3381
3454
  if (visit.component) {
3382
3455
  history.processQueue().then(() => {
3383
3456
  this.performInstantSwap(visit).then(() => {
3457
+ requestParams.preserveScroll = true;
3384
3458
  requestParams.preserveState = true;
3385
3459
  requestParams.replace = true;
3386
3460
  requestParams.viewTransition = false;
@@ -3550,13 +3624,16 @@ var Router = class {
3550
3624
  };
3551
3625
  const preserveScroll = RequestParams.resolvePreserveOption(params.preserveScroll ?? false, page2);
3552
3626
  const preserveState = RequestParams.resolvePreserveOption(params.preserveState ?? false, page2);
3627
+ const visitId = this.createVisitId();
3553
3628
  return page.set(page2, {
3554
3629
  replace,
3555
3630
  updateBrowserUrl: params.updateBrowserUrl ?? this.frameId === DEFAULT_FRAME_ID4,
3556
3631
  preserveScroll,
3557
3632
  preserveState,
3558
- viewTransition
3633
+ viewTransition,
3634
+ visitId
3559
3635
  }, this.frameId).then(() => {
3636
+ fireClientVisitEvent(page.get(this.frameId), { replace, visitId });
3560
3637
  const currentFlash = page.get(this.frameId).flash;
3561
3638
  if (Object.keys(currentFlash).length > 0) {
3562
3639
  fireFlashEvent(currentFlash);
@@ -3598,7 +3675,8 @@ var Router = class {
3598
3675
  updateBrowserUrl: visit.updateBrowserUrl,
3599
3676
  preserveScroll: RequestParams.resolvePreserveOption(visit.preserveScroll, intermediatePage),
3600
3677
  preserveState: false,
3601
- viewTransition: visit.viewTransition
3678
+ viewTransition: visit.viewTransition,
3679
+ visitId: visit.id
3602
3680
  }, this.frameId);
3603
3681
  }
3604
3682
  getPrefetchParams(href, options) {
@@ -3613,6 +3691,9 @@ var Router = class {
3613
3691
  ...this.getVisitEvents(options)
3614
3692
  };
3615
3693
  }
3694
+ createVisitId() {
3695
+ return uid();
3696
+ }
3616
3697
  getPendingVisit(href, options) {
3617
3698
  if (isUrlMethodPair(href)) {
3618
3699
  const urlMethodPair = href;
@@ -3646,6 +3727,7 @@ var Router = class {
3646
3727
  viewTransition: false,
3647
3728
  component: null,
3648
3729
  pageProps: null,
3730
+ cached: false,
3649
3731
  ...stripTopLevelUndefined(options),
3650
3732
  ...stripTopLevelUndefined(configuredOptions)
3651
3733
  };
@@ -3657,6 +3739,7 @@ var Router = class {
3657
3739
  mergedOptions.queryStringArrayFormat
3658
3740
  );
3659
3741
  const visit = {
3742
+ id: this.createVisitId(),
3660
3743
  cancelled: false,
3661
3744
  completed: false,
3662
3745
  interrupted: false,
@@ -5373,12 +5456,14 @@ export {
5373
5456
  createHeadManager,
5374
5457
  createLayoutPropsStore,
5375
5458
  createRouter,
5459
+ exposeInterceptors,
5376
5460
  formDataToObject,
5377
5461
  getInitialPageFromDOM,
5378
5462
  getScrollableParent,
5379
5463
  hasFiles,
5380
5464
  hrefToUrl,
5381
5465
  http,
5466
+ interceptors,
5382
5467
  isPathOrSubPath,
5383
5468
  isPropsObject,
5384
5469
  isPropsObjectOrCallback,