@alignable/bifrost 0.0.10 → 0.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.
Files changed (112) hide show
  1. package/dist/index.d.ts +1 -22
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/lib/PageShell.d.ts.map +1 -1
  4. package/dist/lib/getElementAttributes.d.ts +2 -0
  5. package/dist/lib/getElementAttributes.d.ts.map +1 -0
  6. package/dist/lib/getElementAttributes.js +7 -0
  7. package/dist/lib/turbolinks/browser_adapter.d.ts.map +1 -1
  8. package/dist/lib/turbolinks/browser_adapter.js +1 -4
  9. package/dist/lib/turbolinks/controller.d.ts +18 -44
  10. package/dist/lib/turbolinks/controller.d.ts.map +1 -1
  11. package/dist/lib/turbolinks/controller.js +42 -113
  12. package/dist/lib/turbolinks/head_details.d.ts +1 -0
  13. package/dist/lib/turbolinks/head_details.d.ts.map +1 -1
  14. package/dist/lib/turbolinks/head_details.js +5 -0
  15. package/dist/lib/turbolinks/index.d.ts +3 -3
  16. package/dist/lib/turbolinks/index.d.ts.map +1 -1
  17. package/dist/lib/turbolinks/index.js +18 -18
  18. package/dist/lib/turbolinks/lruCache.d.ts.map +1 -0
  19. package/dist/lib/turbolinks/mergeHead.d.ts +2 -0
  20. package/dist/lib/turbolinks/mergeHead.d.ts.map +1 -0
  21. package/dist/lib/{mergeHead.js → turbolinks/mergeHead.js} +27 -33
  22. package/dist/lib/turbolinks/util.d.ts +4 -0
  23. package/dist/lib/turbolinks/util.d.ts.map +1 -1
  24. package/dist/lib/turbolinks/util.js +40 -0
  25. package/dist/lib/turbolinks/visit.d.ts +5 -23
  26. package/dist/lib/turbolinks/visit.d.ts.map +1 -1
  27. package/dist/lib/turbolinks/visit.js +54 -118
  28. package/dist/proxy/pages/onRenderClient.d.ts.map +1 -1
  29. package/dist/proxy/pages/onRenderClient.js +40 -29
  30. package/dist/proxy/pages/onRenderHtml.d.ts.map +1 -1
  31. package/dist/proxy/pages/onRenderHtml.js +19 -5
  32. package/dist/proxy/pages/restorationVisit/+config.d.ts +2 -0
  33. package/dist/proxy/pages/restorationVisit/+config.d.ts.map +1 -1
  34. package/dist/proxy/pages/restorationVisit/+config.js +3 -0
  35. package/dist/proxy/pages/restorationVisit/onRenderClient.d.ts +3 -0
  36. package/dist/proxy/pages/restorationVisit/onRenderClient.d.ts.map +1 -0
  37. package/dist/proxy/pages/restorationVisit/onRenderClient.js +41 -0
  38. package/dist/renderer/onBeforeRoute.d.ts +1 -6
  39. package/dist/renderer/onBeforeRoute.d.ts.map +1 -1
  40. package/dist/renderer/onBeforeRoute.js +19 -11
  41. package/dist/renderer/onRenderClient.d.ts.map +1 -1
  42. package/dist/renderer/onRenderClient.js +29 -23
  43. package/dist/renderer/onRenderHtml.d.ts.map +1 -1
  44. package/dist/renderer/onRenderHtml.js +12 -16
  45. package/dist/renderer/utils/buildHead.d.ts +4 -0
  46. package/dist/renderer/utils/buildHead.d.ts.map +1 -0
  47. package/dist/renderer/utils/buildHead.js +10 -0
  48. package/dist/types/internal.d.ts +28 -17
  49. package/dist/types/internal.d.ts.map +1 -1
  50. package/package.json +13 -5
  51. package/dist/lib/dispatchTurbolinks.d.ts +0 -28
  52. package/dist/lib/dispatchTurbolinks.d.ts.map +0 -1
  53. package/dist/lib/dispatchTurbolinks.js +0 -5
  54. package/dist/lib/domUtils.d.ts +0 -3
  55. package/dist/lib/domUtils.d.ts.map +0 -1
  56. package/dist/lib/domUtils.js +0 -34
  57. package/dist/lib/getGlobalObject.d.ts +0 -5
  58. package/dist/lib/getGlobalObject.d.ts.map +0 -1
  59. package/dist/lib/getGlobalObject.js +0 -7
  60. package/dist/lib/linkInterceptor.d.ts +0 -2
  61. package/dist/lib/linkInterceptor.d.ts.map +0 -1
  62. package/dist/lib/linkInterceptor.js +0 -74
  63. package/dist/lib/lruCache.d.ts.map +0 -1
  64. package/dist/lib/mergeHead.d.ts +0 -2
  65. package/dist/lib/mergeHead.d.ts.map +0 -1
  66. package/dist/lib/navigateAnywhere.d.ts +0 -3
  67. package/dist/lib/navigateAnywhere.d.ts.map +0 -1
  68. package/dist/lib/navigateAnywhere.js +0 -15
  69. package/dist/lib/snapshots.d.ts +0 -9
  70. package/dist/lib/snapshots.d.ts.map +0 -1
  71. package/dist/lib/snapshots.js +0 -50
  72. package/dist/lib/turbolinks/history.d.ts +0 -22
  73. package/dist/lib/turbolinks/history.d.ts.map +0 -1
  74. package/dist/lib/turbolinks/history.js +0 -60
  75. package/dist/lib/turbolinks/namespace.d.ts +0 -12
  76. package/dist/lib/turbolinks/namespace.d.ts.map +0 -1
  77. package/dist/lib/turbolinks/namespace.js +0 -20
  78. package/dist/lib/turbolinks/passthrough_renderer.d.ts +0 -32
  79. package/dist/lib/turbolinks/passthrough_renderer.d.ts.map +0 -1
  80. package/dist/lib/turbolinks/passthrough_renderer.js +0 -128
  81. package/dist/lib/turbolinks/renderer.d.ts +0 -14
  82. package/dist/lib/turbolinks/renderer.d.ts.map +0 -1
  83. package/dist/lib/turbolinks/renderer.js +0 -28
  84. package/dist/lib/turbolinks/scroll_manager.d.ts +0 -16
  85. package/dist/lib/turbolinks/scroll_manager.d.ts.map +0 -1
  86. package/dist/lib/turbolinks/scroll_manager.js +0 -32
  87. package/dist/lib/turbolinks/snapshot.d.ts +0 -25
  88. package/dist/lib/turbolinks/snapshot.d.ts.map +0 -1
  89. package/dist/lib/turbolinks/snapshot.js +0 -77
  90. package/dist/lib/turbolinks/snapshot_cache.d.ts +0 -18
  91. package/dist/lib/turbolinks/snapshot_cache.d.ts.map +0 -1
  92. package/dist/lib/turbolinks/snapshot_cache.js +0 -42
  93. package/dist/lib/turbolinks/snapshot_renderer copy.d.ts +0 -45
  94. package/dist/lib/turbolinks/snapshot_renderer copy.d.ts.map +0 -1
  95. package/dist/lib/turbolinks/snapshot_renderer copy.js +0 -179
  96. package/dist/lib/turbolinks/snapshot_renderer.d.ts +0 -43
  97. package/dist/lib/turbolinks/snapshot_renderer.d.ts.map +0 -1
  98. package/dist/lib/turbolinks/snapshot_renderer.js +0 -139
  99. package/dist/lib/turbolinks/view.d.ts +0 -21
  100. package/dist/lib/turbolinks/view.d.ts.map +0 -1
  101. package/dist/lib/turbolinks/view.js +0 -42
  102. package/dist/lib/turbolinks.d.ts +0 -5
  103. package/dist/lib/turbolinks.d.ts.map +0 -1
  104. package/dist/lib/turbolinks.js +0 -14
  105. package/dist/proxy/pages/onPageTransitionStart.d.ts +0 -3
  106. package/dist/proxy/pages/onPageTransitionStart.d.ts.map +0 -1
  107. package/dist/proxy/pages/onPageTransitionStart.js +0 -9
  108. package/dist/renderer/utils/formatMetaObject.d.ts +0 -4
  109. package/dist/renderer/utils/formatMetaObject.d.ts.map +0 -1
  110. package/dist/renderer/utils/formatMetaObject.js +0 -3
  111. /package/dist/lib/{lruCache.d.ts → turbolinks/lruCache.d.ts} +0 -0
  112. /package/dist/lib/{lruCache.js → turbolinks/lruCache.js} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,24 +1,3 @@
1
- import { Config, ConfigNonHeaderFile } from "vite-plugin-ssr/types";
2
- import { DocumentProps, Layout, LayoutMap } from "./types/internal";
3
- import ProxyLibConfig from "./proxy/pages/+config.js";
4
- import bifrostLibConfig from "./renderer/+config.js";
5
- import { Turbolinks } from "./lib/turbolinks.js";
1
+ export type { DocumentProps, LayoutMap, NoProxyConfig as BifrostConfig } from "./types/internal";
6
2
  export { usePageContext } from "./renderer/usePageContext.js";
7
- export { LayoutMap, DocumentProps };
8
- type ConfigConstructor<LibConfig extends ConfigNonHeaderFile, T extends {
9
- [K in keyof LibConfig["meta"]]?: any;
10
- }> = Config & Partial<T>;
11
- export type ProxyConfig<LayoutProps> = ConfigConstructor<typeof ProxyLibConfig, {
12
- layoutMap: LayoutMap<LayoutProps>;
13
- }>;
14
- export type BifrostConfig<LayoutProps> = ConfigConstructor<typeof bifrostLibConfig, {
15
- Layout: Layout<LayoutProps>;
16
- layoutProps: LayoutProps;
17
- documentProps: DocumentProps;
18
- }>;
19
- declare global {
20
- interface Window {
21
- Turbolinks: typeof Turbolinks;
22
- }
23
- }
24
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,cAAc,MAAM,0BAA0B,CAAC;AACtD,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAGpC,KAAK,iBAAiB,CACpB,SAAS,SAAS,mBAAmB,EACrC,CAAC,SAAS;KAAG,CAAC,IAAI,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG;CAAE,IAChD,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAExB,MAAM,MAAM,WAAW,CAAC,WAAW,IAAI,iBAAiB,CACtD,OAAO,cAAc,EACrB;IACE,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;CACnC,CACF,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,WAAW,IAAI,iBAAiB,CACxD,OAAO,gBAAgB,EACvB;IACE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;CAC9B,CACF,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,EAAE,OAAO,UAAU,CAAC;KAC/B;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageShell.d.ts","sourceRoot":"","sources":["../../lib/PageShell.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAsB,MAAM,sBAAsB,CAAC;AAEvE,wBAAgB,SAAS,CAAC,EACxB,WAAW,EACX,QAAQ,GACT,EAAE;IACD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB,eAQA"}
1
+ {"version":3,"file":"PageShell.d.ts","sourceRoot":"","sources":["../../lib/PageShell.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,wBAAgB,SAAS,CAAC,EACxB,WAAW,EACX,QAAQ,GACT,EAAE;IACD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB,eAQA"}
@@ -0,0 +1,2 @@
1
+ export declare function getElementAttributes(element: Element): Record<string, string>;
2
+ //# sourceMappingURL=getElementAttributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getElementAttributes.d.ts","sourceRoot":"","sources":["../../lib/getElementAttributes.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,0BAMpD"}
@@ -0,0 +1,7 @@
1
+ export function getElementAttributes(element) {
2
+ const bodyAttrs = {};
3
+ element.getAttributeNames().forEach((name) => {
4
+ bodyAttrs[name] = element.getAttribute(name);
5
+ });
6
+ return bodyAttrs;
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"browser_adapter.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/browser_adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,cAAqB;IAEzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,UAAU;IAIlC,iCAAiC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;IASrE,YAAY,CAAC,KAAK,EAAE,KAAK;IAMzB,mBAAmB,CAAC,KAAK,EAAE,KAAK;IAShC,sBAAsB,CAAC,KAAK,EAAE,KAAK;IAInC,qBAAqB,CAAC,KAAK,EAAE,KAAK;IAIlC,gCAAgC,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM;IAYjE,oBAAoB,CAAC,KAAK,EAAE,KAAK;IAIjC,cAAc,CAAC,KAAK,EAAE,KAAK;IAI3B,eAAe;IAIf,WAAW,CAAC,KAAK,EAAE,KAAK;IAExB,aAAa,CAAC,KAAK,EAAE,KAAK;IAI1B,yBAAyB;IAOzB,eAAe,aAEb;IAEF,eAAe;IAQf,MAAM;CAGP"}
1
+ {"version":3,"file":"browser_adapter.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/browser_adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,cAAqB;IAEzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,UAAU;IAIlC,iCAAiC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;IAOrE,YAAY,CAAC,KAAK,EAAE,KAAK;IAMzB,mBAAmB,CAAC,KAAK,EAAE,KAAK;IAShC,sBAAsB,CAAC,KAAK,EAAE,KAAK;IAInC,qBAAqB,CAAC,KAAK,EAAE,KAAK;IAIlC,gCAAgC,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM;IAYjE,oBAAoB,CAAC,KAAK,EAAE,KAAK;IAIjC,cAAc,CAAC,KAAK,EAAE,KAAK;IAG3B,eAAe;IAIf,WAAW,CAAC,KAAK,EAAE,KAAK;IAExB,aAAa,CAAC,KAAK,EAAE,KAAK;IAI1B,yBAAyB;IAOzB,eAAe,aAEb;IAEF,eAAe;IAQf,MAAM;CAGP"}
@@ -1,5 +1,4 @@
1
1
  import { ProgressBar } from "./progress_bar";
2
- import { uuid } from "./util";
3
2
  export class BrowserAdapter {
4
3
  constructor(controller) {
5
4
  this.progressBar = new ProgressBar();
@@ -9,8 +8,7 @@ export class BrowserAdapter {
9
8
  this.controller = controller;
10
9
  }
11
10
  visitProposedToLocationWithAction(location, action) {
12
- const restorationIdentifier = uuid();
13
- this.controller.startVisitToLocationWithAction(location, action, restorationIdentifier);
11
+ this.controller.startVisitToLocationWithAction(location, action);
14
12
  }
15
13
  visitStarted(visit) {
16
14
  visit.issueRequest();
@@ -47,7 +45,6 @@ export class BrowserAdapter {
47
45
  this.hideProgressBar();
48
46
  }
49
47
  visitCompleted(visit) {
50
- visit.followRedirect();
51
48
  }
52
49
  pageInvalidated() {
53
50
  this.reload();
@@ -1,35 +1,20 @@
1
+ import { LruCache } from "./lruCache";
1
2
  import { Adapter } from "./adapter";
2
- import { History } from "./history";
3
3
  import { Location, Locatable } from "./location";
4
- import { RenderCallback } from "./renderer";
5
- import { ScrollManager } from "./scroll_manager";
6
- import { SnapshotCache } from "./snapshot_cache";
7
- import { Action, Position } from "./types";
8
- import { RenderOptions, View } from "./view";
4
+ import { Action } from "./types";
9
5
  import { Visit } from "./visit";
10
- export type RestorationData = {
11
- scrollPosition?: Position;
12
- };
13
- export type RestorationDataMap = {
14
- [uuid: string]: RestorationData;
15
- };
16
6
  export type TimingData = {};
17
7
  export type VisitOptions = {
18
8
  action: Action;
19
9
  };
20
- export type VisitProperties = {
21
- restorationIdentifier: string;
22
- restorationData: RestorationData;
23
- historyChanged: boolean;
24
- };
10
+ export interface Snapshot {
11
+ bodyEl: Element;
12
+ headEl: Element;
13
+ pageContext: any;
14
+ }
25
15
  export declare class Controller {
26
- static supported: boolean;
27
- readonly adapter: Adapter;
28
- readonly history: History;
29
- readonly restorationData: RestorationDataMap;
30
- readonly scrollManager: ScrollManager;
31
- readonly view: View;
32
- cache: SnapshotCache;
16
+ adapter: Adapter;
17
+ cache: LruCache<Snapshot>;
33
18
  currentVisit?: Visit;
34
19
  enabled: boolean;
35
20
  lastRenderedLocation?: Location;
@@ -37,30 +22,21 @@ export declare class Controller {
37
22
  progressBarDelay: number;
38
23
  restorationIdentifier: string;
39
24
  started: boolean;
25
+ pageContext: any;
40
26
  start(): void;
41
27
  disable(): void;
42
28
  stop(): void;
43
29
  clearCache(): void;
44
30
  visit(location: Locatable, options?: Partial<VisitOptions>): void;
45
- startVisitToLocationWithAction(location: Locatable, action: Action, restorationIdentifier: string): void;
31
+ startVisitToLocationWithAction(location: Locatable, action: Action, restorationIdentifier?: string): void;
46
32
  setProgressBarDelay(delay: number): void;
47
- startHistory(): void;
48
- stopHistory(): void;
49
- pushHistoryWithLocationAndRestorationIdentifier(locatable: Locatable, restorationIdentifier: string): void;
50
- replaceHistoryWithLocationAndRestorationIdentifier(locatable: Locatable, restorationIdentifier: string): void;
51
- historyPoppedToLocationWithRestorationIdentifier(location: Location, restorationIdentifier: string): void;
52
- getCachedSnapshotForLocation(location: Location): import("./snapshot").Snapshot | undefined;
53
- shouldCacheSnapshot(): boolean;
33
+ historyPoppedToLocationWithRestorationIdentifier(location: Locatable, restorationIdentifier: string): void;
34
+ getCachedSnapshotForLocation(location: Locatable): Snapshot | undefined;
35
+ shouldCacheSnapshot(): boolean | null;
54
36
  cacheSnapshot(): void;
55
- scrollToAnchor(anchor: string): void;
56
- scrollToElement(element: Element): void;
57
- scrollToPosition(position: Position): void;
58
- scrollPositionChanged(position: Position): void;
59
- render(options: Partial<RenderOptions>, callback: RenderCallback): void;
60
37
  viewInvalidated(): void;
61
- viewWillRender(newBody: HTMLBodyElement): void;
38
+ viewWillRender(): void;
62
39
  viewRendered(): void;
63
- pageLoaded: () => void;
64
40
  clickCaptured: () => void;
65
41
  clickBubbled: (event: MouseEvent) => void;
66
42
  applicationAllowsFollowingLinkToLocation(link: Element, location: Location): boolean;
@@ -77,7 +53,7 @@ export declare class Controller {
77
53
  notifyApplicationBeforeCachingSnapshot(): Event & {
78
54
  data: any;
79
55
  };
80
- notifyApplicationBeforeRender(newBody: HTMLBodyElement): Event & {
56
+ notifyApplicationBeforeRender(): Event & {
81
57
  data: any;
82
58
  };
83
59
  notifyApplicationAfterRender(): Event & {
@@ -86,8 +62,8 @@ export declare class Controller {
86
62
  notifyApplicationAfterPageLoad(timing?: TimingData): Event & {
87
63
  data: any;
88
64
  };
89
- startVisit(location: Location, action: Action, properties: Partial<VisitProperties>): void;
90
- createVisit(location: Location, action: Action, properties: Partial<VisitProperties>): Visit;
65
+ startVisit(location: Location, action: Action): void;
66
+ createVisit(location: Location, action: Action): Visit;
91
67
  visitCompleted(visit: Visit): void;
92
68
  clickEventIsSignificant(event: MouseEvent): boolean;
93
69
  getVisitableLinkForTarget(target: EventTarget | null): Element | null | undefined;
@@ -95,7 +71,5 @@ export declare class Controller {
95
71
  getActionForLink(link: Element): Action;
96
72
  elementIsVisitable(element: Element): boolean;
97
73
  locationIsVisitable(location: Location): false | RegExpMatchArray | null;
98
- getCurrentRestorationData(): RestorationData;
99
- getRestorationDataForIdentifier(identifier: string): RestorationData;
100
74
  }
101
75
  //# sourceMappingURL=controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAY,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,MAAM,eAAe,GAAG;IAAE,cAAc,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;AACrE,MAAM,MAAM,UAAU,GAAG,EAAE,CAAC;AAC5B,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,qBAAa,UAAU;IACrB,MAAM,CAAC,SAAS,UAId;IAEF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAA4B;IACrD,QAAQ,CAAC,OAAO,UAAqB;IACrC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAM;IAClD,QAAQ,CAAC,aAAa,gBAA2B;IACjD,QAAQ,CAAC,IAAI,OAAkB;IAE/B,KAAK,gBAAyB;IAC9B,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,OAAO,UAAQ;IACf,oBAAoB,CAAC,EAAE,QAAQ,CAAC;IAChC,QAAQ,EAAG,QAAQ,CAAC;IACpB,gBAAgB,SAAO;IACvB,qBAAqB,EAAG,MAAM,CAAC;IAC/B,OAAO,UAAS;IAEhB,KAAK;IAWL,OAAO;IAIP,IAAI;IAUJ,UAAU;IAIV,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM;IAY9D,8BAA8B,CAC5B,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,EACd,qBAAqB,EAAE,MAAM;IAY/B,mBAAmB,CAAC,KAAK,EAAE,MAAM;IAMjC,YAAY;IAOZ,WAAW;IAIX,+CAA+C,CAC7C,SAAS,EAAE,SAAS,EACpB,qBAAqB,EAAE,MAAM;IAO/B,kDAAkD,CAChD,SAAS,EAAE,SAAS,EACpB,qBAAqB,EAAE,MAAM;IAS/B,gDAAgD,CAC9C,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,MAAM;IAoB/B,4BAA4B,CAAC,QAAQ,EAAE,QAAQ;IAK/C,mBAAmB;IAInB,aAAa;IAWb,cAAc,CAAC,MAAM,EAAE,MAAM;IAS7B,eAAe,CAAC,OAAO,EAAE,OAAO;IAIhC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ;IAMnC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ;IAOxC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,cAAc;IAIhE,eAAe;IAIf,cAAc,CAAC,OAAO,EAAE,eAAe;IAIvC,YAAY;IAOZ,UAAU,aAGR;IAEF,aAAa,aAGX;IAEF,YAAY,UAAW,UAAU,UAe/B;IAIF,wCAAwC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAQ1E,iCAAiC,CAAC,QAAQ,EAAE,QAAQ;IAKpD,4CAA4C,CAC1C,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ;;;IASpB,uCAAuC,CAAC,QAAQ,EAAE,QAAQ;;;IAO1D,sCAAsC,CAAC,QAAQ,EAAE,QAAQ;;;IAMzD,sCAAsC;;;IAItC,6BAA6B,CAAC,OAAO,EAAE,eAAe;;;IAItD,4BAA4B;;;IAI5B,8BAA8B,CAAC,MAAM,GAAE,UAAe;;;IAQtD,UAAU,CACR,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC;IAUtC,WAAW,CACT,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC,GACnC,KAAK;IAaR,cAAc,CAAC,KAAK,EAAE,KAAK;IAI3B,uBAAuB,CAAC,KAAK,EAAE,UAAU;IAYzC,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAMpD,2BAA2B,CAAC,IAAI,EAAE,OAAO;IAOzC,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAKvC,kBAAkB,CAAC,OAAO,EAAE,OAAO;IASnC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;IAMtC,yBAAyB,IAAI,eAAe;IAI5C,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe;CAMrE"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,MAAM,EAAY,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,MAAM,UAAU,GAAG,EAAE,CAAC;AAC5B,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,qBAAa,UAAU;IACrB,OAAO,EAAE,OAAO,CAA4B;IAE5C,KAAK,qBAA8B;IACnC,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,OAAO,UAAQ;IACf,oBAAoB,CAAC,EAAE,QAAQ,CAAC;IAChC,QAAQ,EAAG,QAAQ,CAAC;IACpB,gBAAgB,SAAO;IACvB,qBAAqB,EAAG,MAAM,CAAC;IAC/B,OAAO,UAAS;IAChB,WAAW,EAAE,GAAG,CAAC;IAEjB,KAAK;IAaL,OAAO;IAIP,IAAI;IAOJ,UAAU;IAIV,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM;IAY9D,8BAA8B,CAC5B,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,EACd,qBAAqB,CAAC,EAAE,MAAM;IAKhC,mBAAmB,CAAC,KAAK,EAAE,MAAM;IAMjC,gDAAgD,CAC9C,QAAQ,EAAE,SAAS,EACnB,qBAAqB,EAAE,MAAM;IAa/B,4BAA4B,CAAC,QAAQ,EAAE,SAAS;IAIhD,mBAAmB;IASnB,aAAa;IAcb,eAAe;IAIf,cAAc;IAId,YAAY;IAOZ,aAAa,aAGX;IAEF,YAAY,UAAW,UAAU,UAgB/B;IAIF,wCAAwC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAQ1E,iCAAiC,CAAC,QAAQ,EAAE,QAAQ;IAKpD,4CAA4C,CAC1C,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ;;;IASpB,uCAAuC,CAAC,QAAQ,EAAE,QAAQ;;;IAO1D,sCAAsC,CAAC,QAAQ,EAAE,QAAQ;;;IAMzD,sCAAsC;;;IAItC,6BAA6B;;;IAI7B,4BAA4B;;;IAI5B,8BAA8B,CAAC,MAAM,GAAE,UAAe;;;IAQtD,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;IAS7C,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK;IAUtD,cAAc,CAAC,KAAK,EAAE,KAAK;IAI3B,uBAAuB,CAAC,KAAK,EAAE,UAAU;IAYzC,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAMpD,2BAA2B,CAAC,IAAI,EAAE,OAAO;IAOzC,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAKvC,kBAAkB,CAAC,OAAO,EAAE,OAAO;IASnC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;CAGvC"}
@@ -1,31 +1,20 @@
1
+ import { LruCache } from "./lruCache";
1
2
  import { BrowserAdapter } from "./browser_adapter";
2
- import { History } from "./history";
3
3
  import { Location } from "./location";
4
- import { ScrollManager } from "./scroll_manager";
5
- import { SnapshotCache } from "./snapshot_cache";
6
4
  import { isAction } from "./types";
7
5
  import { closest, defer, dispatch, uuid } from "./util";
8
- import { View } from "./view";
9
6
  import { Visit } from "./visit";
10
- class Controller {
7
+ export class Controller {
11
8
  constructor() {
12
9
  this.adapter = new BrowserAdapter(this);
13
- this.history = new History(this);
14
- this.restorationData = {};
15
- this.scrollManager = new ScrollManager(this);
16
- this.view = new View(this);
17
- this.cache = new SnapshotCache(10);
10
+ this.cache = new LruCache(10);
18
11
  this.enabled = true;
19
12
  this.progressBarDelay = 500;
20
13
  this.started = false;
21
14
  // Event handlers
22
- this.pageLoaded = () => {
23
- this.lastRenderedLocation = this.location;
24
- this.notifyApplicationAfterPageLoad();
25
- };
26
15
  this.clickCaptured = () => {
27
- removeEventListener("click", this.clickBubbled, false);
28
- addEventListener("click", this.clickBubbled, false);
16
+ document.body.removeEventListener("click", this.clickBubbled, false);
17
+ document.body.addEventListener("click", this.clickBubbled, false);
29
18
  };
30
19
  this.clickBubbled = (event) => {
31
20
  if (this.enabled && this.clickEventIsSignificant(event)) {
@@ -35,6 +24,7 @@ class Controller {
35
24
  if (location &&
36
25
  this.applicationAllowsFollowingLinkToLocation(link, location)) {
37
26
  event.preventDefault();
27
+ event.stopPropagation();
38
28
  const action = this.getActionForLink(link);
39
29
  this.visit(location, { action });
40
30
  }
@@ -43,11 +33,13 @@ class Controller {
43
33
  };
44
34
  }
45
35
  start() {
46
- if (Controller.supported && !this.started) {
47
- addEventListener("click", this.clickCaptured, true);
48
- addEventListener("DOMContentLoaded", this.pageLoaded, false);
49
- this.scrollManager.start();
50
- this.startHistory();
36
+ if (!this.started) {
37
+ // TODO: delete document.body in this file. We are doing this to pre-empt VPS interceptor.
38
+ // https://github.com/brillout/vite-plugin-ssr/issues/918 fixes this.
39
+ document.body.addEventListener("click", this.clickCaptured, true);
40
+ this.location = Location.currentLocation;
41
+ this.restorationIdentifier = uuid();
42
+ this.lastRenderedLocation = this.location;
51
43
  this.started = true;
52
44
  this.enabled = true;
53
45
  }
@@ -57,15 +49,12 @@ class Controller {
57
49
  }
58
50
  stop() {
59
51
  if (this.started) {
60
- removeEventListener("click", this.clickCaptured, true);
61
- removeEventListener("DOMContentLoaded", this.pageLoaded, false);
62
- this.scrollManager.stop();
63
- this.stopHistory();
52
+ document.body.removeEventListener("click", this.clickCaptured, true);
64
53
  this.started = false;
65
54
  }
66
55
  }
67
56
  clearCache() {
68
- this.cache = new SnapshotCache(10);
57
+ this.cache = new LruCache(10);
69
58
  }
70
59
  visit(location, options = {}) {
71
60
  location = Location.wrap(location);
@@ -80,48 +69,17 @@ class Controller {
80
69
  }
81
70
  }
82
71
  startVisitToLocationWithAction(location, action, restorationIdentifier) {
83
- if (Controller.supported) {
84
- const restorationData = this.getRestorationDataForIdentifier(restorationIdentifier);
85
- this.startVisit(Location.wrap(location), action, { restorationData });
86
- }
87
- else {
88
- window.location.href = location.toString();
89
- }
72
+ this.startVisit(Location.wrap(location), action);
90
73
  }
91
74
  setProgressBarDelay(delay) {
92
75
  this.progressBarDelay = delay;
93
76
  }
94
- // History
95
- startHistory() {
96
- this.location = Location.currentLocation;
97
- this.restorationIdentifier = uuid();
98
- this.history.start();
99
- this.history.replace(this.location, this.restorationIdentifier);
100
- }
101
- stopHistory() {
102
- this.history.stop();
103
- }
104
- pushHistoryWithLocationAndRestorationIdentifier(locatable, restorationIdentifier) {
105
- this.location = Location.wrap(locatable);
106
- this.restorationIdentifier = restorationIdentifier;
107
- this.history.push(this.location, this.restorationIdentifier);
108
- }
109
- replaceHistoryWithLocationAndRestorationIdentifier(locatable, restorationIdentifier) {
110
- this.location = Location.wrap(locatable);
111
- this.restorationIdentifier = restorationIdentifier;
112
- this.history.replace(this.location, this.restorationIdentifier);
113
- }
114
77
  // History delegate
115
78
  historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {
116
79
  if (this.enabled) {
117
- this.location = location;
80
+ this.location = Location.wrap(location);
118
81
  this.restorationIdentifier = restorationIdentifier;
119
- const restorationData = this.getRestorationDataForIdentifier(restorationIdentifier);
120
- this.startVisit(location, "restore", {
121
- restorationIdentifier,
122
- restorationData,
123
- historyChanged: true,
124
- });
82
+ this.startVisit(this.location, "restore");
125
83
  }
126
84
  else {
127
85
  this.adapter.pageInvalidated();
@@ -129,50 +87,32 @@ class Controller {
129
87
  }
130
88
  // Snapshot cache
131
89
  getCachedSnapshotForLocation(location) {
132
- const snapshot = this.cache.get(location);
133
- return snapshot ? snapshot.clone() : snapshot;
90
+ return this.cache.get(Location.wrap(location).toCacheKey());
134
91
  }
135
92
  shouldCacheSnapshot() {
136
- return this.view.getSnapshot().isCacheable();
93
+ return (document.body.querySelector("#proxied-body") &&
94
+ document.head
95
+ .querySelector("meta[name='turbolinks-no-cache']")
96
+ ?.getAttribute("content") != "no-cache");
137
97
  }
138
98
  cacheSnapshot() {
139
99
  if (this.shouldCacheSnapshot()) {
140
100
  this.notifyApplicationBeforeCachingSnapshot();
141
- const snapshot = this.view.getSnapshot();
101
+ const snapshot = {
102
+ bodyEl: document.body.cloneNode(true),
103
+ headEl: document.head.cloneNode(true),
104
+ pageContext: this.pageContext,
105
+ };
142
106
  const location = this.lastRenderedLocation || Location.currentLocation;
143
- defer(() => this.cache.put(location, snapshot.clone()));
144
- }
145
- }
146
- // Scrolling
147
- scrollToAnchor(anchor) {
148
- const element = this.view.getElementForAnchor(anchor);
149
- if (element) {
150
- this.scrollToElement(element);
151
- }
152
- else {
153
- this.scrollToPosition({ x: 0, y: 0 });
107
+ defer(() => this.cache.put(location.toCacheKey(), snapshot));
154
108
  }
155
109
  }
156
- scrollToElement(element) {
157
- this.scrollManager.scrollToElement(element);
158
- }
159
- scrollToPosition(position) {
160
- this.scrollManager.scrollToPosition(position);
161
- }
162
- // Scroll manager delegate
163
- scrollPositionChanged(position) {
164
- const restorationData = this.getCurrentRestorationData();
165
- restorationData.scrollPosition = position;
166
- }
167
110
  // View
168
- render(options, callback) {
169
- this.view.render(options, callback);
170
- }
171
111
  viewInvalidated() {
172
112
  this.adapter.pageInvalidated();
173
113
  }
174
- viewWillRender(newBody) {
175
- this.notifyApplicationBeforeRender(newBody);
114
+ viewWillRender() {
115
+ this.notifyApplicationBeforeRender();
176
116
  }
177
117
  viewRendered() {
178
118
  this.lastRenderedLocation = this.currentVisit.location;
@@ -208,8 +148,8 @@ class Controller {
208
148
  notifyApplicationBeforeCachingSnapshot() {
209
149
  return dispatch("turbolinks:before-cache");
210
150
  }
211
- notifyApplicationBeforeRender(newBody) {
212
- return dispatch("turbolinks:before-render", { data: { newBody } });
151
+ notifyApplicationBeforeRender() {
152
+ return dispatch("turbolinks:before-render");
213
153
  }
214
154
  notifyApplicationAfterRender() {
215
155
  return dispatch("turbolinks:render");
@@ -220,19 +160,21 @@ class Controller {
220
160
  });
221
161
  }
222
162
  // Private
223
- startVisit(location, action, properties) {
163
+ startVisit(location, action) {
224
164
  if (this.currentVisit) {
225
165
  this.currentVisit.cancel();
226
166
  }
227
- this.currentVisit = this.createVisit(location, action, properties);
167
+ this.currentVisit = this.createVisit(location, action);
228
168
  this.currentVisit.start();
229
169
  this.notifyApplicationAfterVisitingLocation(location);
230
170
  }
231
- createVisit(location, action, properties) {
232
- const visit = new Visit(this, location, action, properties.restorationIdentifier);
233
- visit.restorationData = { ...(properties.restorationData || {}) };
234
- visit.historyChanged = !!properties.historyChanged;
171
+ createVisit(location, action) {
172
+ const visit = new Visit(this, location, action);
235
173
  visit.referrer = this.location;
174
+ if (action === "restore") {
175
+ // dont issue navigate() because VPS already did.
176
+ visit.requestInFlight = true;
177
+ }
236
178
  return visit;
237
179
  }
238
180
  visitCompleted(visit) {
@@ -272,19 +214,6 @@ class Controller {
272
214
  }
273
215
  }
274
216
  locationIsVisitable(location) {
275
- return (location.isPrefixedBy(this.view.getRootLocation()) && location.isHTML());
276
- }
277
- getCurrentRestorationData() {
278
- return this.getRestorationDataForIdentifier(this.restorationIdentifier);
279
- }
280
- getRestorationDataForIdentifier(identifier) {
281
- if (!(identifier in this.restorationData)) {
282
- this.restorationData[identifier] = {};
283
- }
284
- return this.restorationData[identifier];
217
+ return location.isPrefixedBy(new Location("/")) && location.isHTML();
285
218
  }
286
219
  }
287
- Controller.supported = !!(window.history.pushState &&
288
- window.requestAnimationFrame &&
289
- window.addEventListener);
290
- export { Controller };
@@ -10,6 +10,7 @@ type ElementType = "script" | "stylesheet";
10
10
  export declare class HeadDetails {
11
11
  readonly detailsByOuterHTML: ElementDetailMap;
12
12
  static fromHeadElement(headElement: HTMLHeadElement | null): HeadDetails;
13
+ static fromHeadString(head: string): HeadDetails;
13
14
  constructor(children: Element[]);
14
15
  getTrackedElementSignature(): string;
15
16
  getScriptElementsNotInDetails(headDetails: HeadDetails): Element[];
@@ -1 +1 @@
1
- {"version":3,"file":"head_details.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/head_details.ts"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,CAAC;AAEhE,KAAK,cAAc,GAAG;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE3C,qBAAa,WAAW;IACtB,QAAQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAE9C,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI,GAAG,WAAW;gBAK5D,QAAQ,EAAE,OAAO,EAAE;IAqB/B,0BAA0B,IAAI,MAAM;IAMpC,6BAA6B,CAAC,WAAW,EAAE,WAAW;IAItD,iCAAiC,CAAC,WAAW,EAAE,WAAW;IAI1D,mCAAmC,CACjC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW;IAS1B,sBAAsB,IAAI,OAAO,EAAE;IAanC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKzC,qBAAqB,CAAC,IAAI,EAAE,MAAM;CAQnC"}
1
+ {"version":3,"file":"head_details.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/head_details.ts"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,CAAC;AAEhE,KAAK,cAAc,GAAG;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE3C,qBAAa,WAAW;IACtB,QAAQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAE9C,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI,GAAG,WAAW;IAKxE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;gBAMpC,QAAQ,EAAE,OAAO,EAAE;IAqB/B,0BAA0B,IAAI,MAAM;IAMpC,6BAA6B,CAAC,WAAW,EAAE,WAAW;IAItD,iCAAiC,CAAC,WAAW,EAAE,WAAW;IAI1D,mCAAmC,CACjC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW;IAS1B,sBAAsB,IAAI,OAAO,EAAE;IAanC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKzC,qBAAqB,CAAC,IAAI,EAAE,MAAM;CAQnC"}
@@ -4,6 +4,11 @@ export class HeadDetails {
4
4
  const children = headElement ? array(headElement.children) : [];
5
5
  return new this(children);
6
6
  }
7
+ static fromHeadString(head) {
8
+ const element = document.createElement("head");
9
+ element.innerHTML = head;
10
+ return this.fromHeadElement(element);
11
+ }
7
12
  constructor(children) {
8
13
  this.detailsByOuterHTML = children.reduce((result, element) => {
9
14
  const { outerHTML } = element;
@@ -1,6 +1,5 @@
1
1
  import { Controller, VisitOptions } from "./controller";
2
2
  import { Locatable } from "./location";
3
- import { Renderer } from "./renderer";
4
3
  export declare const Turbolinks: {
5
4
  readonly supported: boolean;
6
5
  controller: Controller;
@@ -8,7 +7,8 @@ export declare const Turbolinks: {
8
7
  clearCache(): void;
9
8
  setProgressBarDelay(delay: number): void;
10
9
  start(): void;
11
- _vpsRenderClientWith(renderer: Renderer): void;
12
- _vpsOnRenderClient(renderFn: () => Promise<void>): void;
10
+ _vpsCachePageContext(pageContext: any): void;
11
+ _vpsOnRenderClient(newHead: HTMLHeadElement, trackScripts: boolean, renderBody: () => void): void;
13
12
  };
13
+ export type Turbolinks = typeof Turbolinks;
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,eAAO,MAAM,UAAU;;;oBAOL,SAAS,YAAY,QAAQ,YAAY,CAAC;;+BAQ/B,MAAM;;mCAmBF,QAAQ;iCAaV,MAAM,QAAQ,IAAI,CAAC;CAgBjD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAKvC,eAAO,MAAM,UAAU;;;oBAOL,SAAS,YAAY,QAAQ,YAAY,CAAC;;+BAQ/B,MAAM;;sCAmBC,GAAG;gCAK1B,eAAe,gBACV,OAAO,cACT,MAAM,IAAI;CA+BzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC"}
@@ -1,8 +1,10 @@
1
+ import { mergeHead } from "./mergeHead";
1
2
  import { Controller } from "./controller";
3
+ import { activateNewBodyScriptElements, focusFirstAutofocusableElement } from "./util";
2
4
  const controller = new Controller();
3
5
  export const Turbolinks = {
4
6
  get supported() {
5
- return Controller.supported;
7
+ return true;
6
8
  },
7
9
  controller,
8
10
  visit(location, options) {
@@ -18,32 +20,30 @@ export const Turbolinks = {
18
20
  // because this runs after ios hooks, we have to recover. See onRenderHtml
19
21
  if (window.Turbolinks !== Turbolinks &&
20
22
  window.Turbolinks.controller.adapter) {
21
- console.log(window.Turbolinks, Turbolinks);
22
23
  window.Turbolinks.controller.adapter.controller = controller;
23
24
  controller.adapter = window.Turbolinks.controller.adapter;
24
- console.log(window.Turbolinks, Turbolinks);
25
- window.Turbolinks = Turbolinks;
26
25
  }
26
+ // Tells vite-plugin-ssr not to do link interception
27
+ window._disableAutomaticLinkInterception = true;
28
+ window.Turbolinks = Turbolinks;
27
29
  controller.start();
28
30
  },
29
- _vpsRenderClientWith(renderer) {
30
- if (controller.currentVisit) {
31
- // TODO: move to controller
32
- controller.currentVisit.renderer = renderer;
33
- controller.adapter.visitRequestCompleted(controller.currentVisit);
34
- controller.adapter.visitRequestFinished(controller.currentVisit);
35
- }
36
- else {
37
- console.error("controller.currentVisit should exist when onRenderClient fires");
38
- }
31
+ _vpsCachePageContext(pageContext) {
32
+ controller.pageContext = pageContext;
39
33
  },
40
- _vpsOnRenderClient(renderFn) {
34
+ _vpsOnRenderClient(newHead, trackScripts, renderBody) {
41
35
  if (controller.currentVisit) {
42
- // TODO: move to controller
43
- controller.currentVisit.renderFn = async () => {
36
+ const { currentVisit } = controller;
37
+ // TODO: move to controller?
38
+ currentVisit.renderFn = async () => {
39
+ const scriptsLoaded = mergeHead(newHead, trackScripts, () => controller.viewInvalidated());
44
40
  controller.viewWillRender();
45
- await renderFn();
41
+ renderBody();
42
+ await scriptsLoaded;
43
+ activateNewBodyScriptElements(Array.from(document.body.querySelectorAll("script")));
44
+ focusFirstAutofocusableElement();
46
45
  controller.viewRendered();
46
+ controller.adapter.visitRendered(currentVisit);
47
47
  };
48
48
  controller.adapter.visitRequestCompleted(controller.currentVisit);
49
49
  controller.adapter.visitRequestFinished(controller.currentVisit);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lruCache.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/lruCache.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,UAAU,CAAC;gBAEP,UAAU,EAAE,MAAM;IAIvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAa/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;CAUjC"}
@@ -0,0 +1,2 @@
1
+ export declare function mergeHead(head: HTMLHeadElement, trackScripts: boolean, reload: () => void): Promise<void>;
2
+ //# sourceMappingURL=mergeHead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeHead.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/mergeHead.ts"],"names":[],"mappings":"AASA,wBAAsB,SAAS,CAC7B,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,IAAI,iBAyCnB"}