eddev 2.0.0-beta.84 → 2.0.0-beta.86

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.
@@ -44,7 +44,7 @@ export declare const editorConfigStore: {
44
44
  currentBlocksConfig: EditorConfigItem;
45
45
  };
46
46
  export declare function configureEditorBlocks(config: EditorConfigItem): void;
47
- export declare function transformTemplateToBlocks(template: BlockTemplate, locked?: boolean): any;
47
+ export declare function transformTemplateToBlocks(template: BlockTemplate, locked?: boolean, isFromTemplate?: boolean): any;
48
48
  type PostInfo = {
49
49
  template: TemplateName | "default";
50
50
  type: PostTypeName;
@@ -31,7 +31,7 @@ export function configureEditorBlocks(config) {
31
31
  let header = config.headerTemplate ? syncBlocks(transformTemplateToBlocks(config.headerTemplate)) : [];
32
32
  let footer = config.footerTemplate ? syncBlocks(transformTemplateToBlocks(config.footerTemplate)) : [];
33
33
  if (!blocks.length && config.defaultBlocks) {
34
- blocks = transformTemplateToBlocks(config.defaultBlocks, false);
34
+ blocks = transformTemplateToBlocks(config.defaultBlocks, false, false);
35
35
  }
36
36
  let newBlocks = [...header, ...blocks, ...footer];
37
37
  wp.data.dispatch("core/block-editor").resetBlocks(newBlocks);
@@ -47,12 +47,12 @@ export function configureEditorBlocks(config) {
47
47
  });
48
48
  }
49
49
  }
50
- export function transformTemplateToBlocks(template, locked = true) {
50
+ export function transformTemplateToBlocks(template, locked = true, isFromTemplate = true) {
51
51
  return template.map(([name, props, children]) => {
52
52
  const attributes = {
53
53
  data: {},
54
54
  inline: {},
55
- isFromTemplate: true,
55
+ isFromTemplate: isFromTemplate,
56
56
  lock: undefined,
57
57
  };
58
58
  if (props.locked === false) {
@@ -69,7 +69,7 @@ export function transformTemplateToBlocks(template, locked = true) {
69
69
  clientId: "block-" + Math.random().toString(36),
70
70
  name: resolveAcfBlockName(name),
71
71
  attributes: attributes,
72
- innerBlocks: children ? transformTemplateToBlocks(children, false) : [],
72
+ innerBlocks: children ? transformTemplateToBlocks(children, false, isFromTemplate) : [],
73
73
  isValid: true,
74
74
  validationIssues: [],
75
75
  };
@@ -133,7 +133,6 @@ export function BrowserRouter(props) {
133
133
  }
134
134
  internals.poppedState = (href, data) => {
135
135
  const stack = state.history;
136
- // console.log("Popped state", stack)
137
136
  // Is the route in our history stack? (going back)
138
137
  const index = stack.findIndex((item) => item.id === data.id);
139
138
  if (index >= 0) {
@@ -199,11 +198,20 @@ export function BrowserRouter(props) {
199
198
  });
200
199
  if (cancelled)
201
200
  return;
202
- const data = await loader.loadRouteData(parseHrefPath(args.url));
203
- if (!data.view) {
204
- console.error("No `view` property in route data");
205
- return;
206
- }
201
+ const data = await loader.loadRouteData(parseHrefPath(args.url)).catch((err) => {
202
+ emitEvent({ type: "error", error: err, critical: true });
203
+ return {
204
+ view: "_error",
205
+ viewType: "react",
206
+ appData: loader.appData,
207
+ viewData: {
208
+ data: {
209
+ code: 500,
210
+ error: err,
211
+ },
212
+ },
213
+ };
214
+ });
207
215
  const lazyComponent = loader.getRouteComponent(data.view);
208
216
  if (!lazyComponent) {
209
217
  console.error(`No component found for view: ${data.view}`);
@@ -289,7 +297,7 @@ export function BrowserRouter(props) {
289
297
  if (loader.hasRouteData(link.pathname))
290
298
  return;
291
299
  emitEvent({ type: "preload:start", currentRoute: getActiveRoute(), link });
292
- const data = await loader.loadRouteData(link.pathname).then((data) => {
300
+ await loader.loadRouteData(link.pathname).then((data) => {
293
301
  emitEvent({ type: "preload:data-ready", currentRoute: getActiveRoute(), link, data });
294
302
  });
295
303
  }
@@ -322,7 +330,7 @@ export function BrowserRouter(props) {
322
330
  };
323
331
  },
324
332
  handleClickEvent(e, originalHref, preferBack) {
325
- const { mode, href } = getLinkHandlerMode(e, originalHref);
333
+ const { mode, href } = getLinkHandlerMode(e, originalHref, state.activeRoute);
326
334
  if (mode === "ignore") {
327
335
  e.preventDefault();
328
336
  return;
@@ -17,7 +17,7 @@ export const Link = forwardRef(({ preferBack, as, ...props }, ref) => {
17
17
  else {
18
18
  const router = useRouter();
19
19
  const state = useLinkState(props.href ?? "");
20
- return (_jsx(Comp, { ref: ref, "data-active": state.active ?? undefined, "data-child-active": state.childActive ?? undefined, "data-pending": state.pending ?? undefined, ...props, href: withTrailingSlash(props.href ?? undefined), onMouseEnter: (e) => {
20
+ return (_jsx(Comp, { ref: ref, "data-active": state.active ?? undefined, "data-child-active": state.childActive ?? undefined, "data-pending": state.pending ?? undefined, ...props, href: withTrailingSlash(props.href ?? undefined, true), onMouseEnter: (e) => {
21
21
  if (props.onMouseEnter) {
22
22
  props.onMouseEnter(e);
23
23
  }
@@ -11,7 +11,10 @@ export function ScrollRestoration(props) {
11
11
  }));
12
12
  useRouterEvents((event) => {
13
13
  if (event.type === "navigate:changed") {
14
- // console.log("Changed! Restoring scroll", event.currentRoute)
14
+ // If the pathname and search term are the same, then we're on the same page
15
+ const isSameRoute = event.currentRoute.pathname === event.lastRoute.pathname && event.currentRoute.search === event.lastRoute.search;
16
+ if (isSameRoute)
17
+ return;
15
18
  if (event.currentRoute.returnState) {
16
19
  restore({
17
20
  top: event.currentRoute.returnState.scrollTop ?? 0,
@@ -76,7 +76,11 @@ export class RouteLoader {
76
76
  text = this.processProps(text);
77
77
  }
78
78
  try {
79
- return JSON.parse(text);
79
+ const payload = JSON.parse(text);
80
+ if (!payload.view) {
81
+ throw new RouteError(`Invalid route data for '${pathname}'`, 500);
82
+ }
83
+ return payload;
80
84
  }
81
85
  catch (err) {
82
86
  throw new RouteError(`JSON parse error for route '${pathname}':\n${err?.message}`, 500);
@@ -83,7 +83,7 @@ export type RouterEvent = {
83
83
  data: RouteData;
84
84
  } | {
85
85
  type: "error";
86
- critical: false;
86
+ critical: boolean;
87
87
  error: Error;
88
88
  };
89
89
  export type RouterSubscriber = (event: RouterEvent) => void;
@@ -7,7 +7,7 @@ export type LinkHandlerMode = {
7
7
  mode: "ignore" | "navigate" | "native";
8
8
  href?: string;
9
9
  };
10
- export declare function getLinkHandlerMode(e?: PointerOrMouseEvent, href?: string): LinkHandlerMode;
10
+ export declare function getLinkHandlerMode(e?: PointerOrMouseEvent, href?: string, currentRoute?: RouteState): LinkHandlerMode;
11
11
  type Partialize<T, TKeys extends keyof T> = Partial<Pick<T, TKeys>> & Omit<T, TKeys>;
12
12
  export declare function normalizeRoute(route: Partialize<RouteState, "uri" | "returnState" | "key">): RouteState;
13
13
  export declare function stringifyRouteLink(route: RouteLink): string;
@@ -15,7 +15,7 @@ export function isSamePathname(a, b) {
15
15
  const right = parseURL(b).pathname.replace(/\/$/, "").toLocaleLowerCase();
16
16
  return left === right;
17
17
  }
18
- export function getLinkHandlerMode(e, href) {
18
+ export function getLinkHandlerMode(e, href, currentRoute) {
19
19
  try {
20
20
  // Attempt to get the link element, if there is one
21
21
  let eventTarget = null;
@@ -36,7 +36,11 @@ export function getLinkHandlerMode(e, href) {
36
36
  if (!href)
37
37
  return { mode: "native", href };
38
38
  // Resolve the URL and check if it's the same origin
39
- const resolved = href.startsWith("http") ? href : resolveURL(document.location.href, href);
39
+ const resolved = href.startsWith("http")
40
+ ? href
41
+ : href.startsWith("/")
42
+ ? resolveURL(document.location.origin, href)
43
+ : resolveURL(document.location.href, href);
40
44
  const parsed = parseURL(resolved);
41
45
  const isSameOrigin = parsed.host?.replace(/:.+/, "") === document.location.host.replace(/:.+/, "");
42
46
  // External links should be handled natively
@@ -57,6 +61,17 @@ export function getLinkHandlerMode(e, href) {
57
61
  // Starts with /wp-, use native (wp-content, wp-admin etc)
58
62
  if (parsed.pathname.startsWith("/wp-"))
59
63
  return { mode: "native", href };
64
+ // If pathname+query are identical, but the hash is different, then allow the browser to handle it
65
+ if (currentRoute &&
66
+ isSamePathname(currentRoute.pathname, parsed.pathname) &&
67
+ currentRoute.search === parsed.search) {
68
+ if (currentRoute.hash !== parsed.hash) {
69
+ return { mode: "native", href };
70
+ }
71
+ else {
72
+ return { mode: "ignore", href };
73
+ }
74
+ }
60
75
  return { mode: "navigate", href };
61
76
  }
62
77
  catch (err) {
@@ -15,6 +15,7 @@ type RenderErrorPageArgs = {
15
15
  code: number;
16
16
  title: string;
17
17
  newOrigin?: string;
18
+ realError?: Error;
18
19
  };
19
20
  export declare function renderErrorPage(args: RenderErrorPageArgs): Promise<Response>;
20
21
  export {};
@@ -68,15 +68,14 @@ export async function renderPage(args) {
68
68
  responseInit.status = response.status;
69
69
  }
70
70
  catch (err) {
71
- data = {
72
- view: "_error",
73
- viewType: "react",
74
- viewData: {},
75
- appData: appData,
76
- trackers: trackers,
77
- };
78
71
  console.error(err);
79
- responseInit.status = 500;
72
+ return renderErrorPage({
73
+ pathname: args.pathname,
74
+ code: 500,
75
+ newOrigin: args.newOrigin,
76
+ realError: err,
77
+ title: "Internal Server Error",
78
+ });
80
79
  }
81
80
  headers.set("Content-Type", "text/html; charset=utf-8");
82
81
  const stream = await getSsrStream({
@@ -87,6 +86,15 @@ export async function renderPage(args) {
87
86
  }
88
87
  catch (err) {
89
88
  console.error(err);
89
+ if (args.statusCode !== 500) {
90
+ return renderErrorPage({
91
+ pathname: args.pathname,
92
+ code: 500,
93
+ newOrigin: args.newOrigin,
94
+ realError: err,
95
+ title: "Internal Server Error",
96
+ });
97
+ }
90
98
  return new Response('<!DOCTYPE html><html><head><title>500 Internal Server Error</title></head><body><h1>500 Internal Server Error</h1><p>"' +
91
99
  String(err) +
92
100
  '"</p></body></html>', {
@@ -1 +1 @@
1
- export declare const VERSION = "2.0.0-beta.84";
1
+ export declare const VERSION = "2.0.0-beta.86";
@@ -1 +1 @@
1
- export const VERSION = "2.0.0-beta.84";
1
+ export const VERSION = "2.0.0-beta.86";
@@ -35,8 +35,6 @@ export function createVinxiApp(args) {
35
35
  },
36
36
  },
37
37
  "/robots.txt": {
38
- proxy: joinURL(args.origin, "robots.txt"),
39
- static: true,
40
38
  cache: {
41
39
  maxAge: 3600,
42
40
  varies: [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eddev",
3
- "version": "2.0.0-beta.84",
3
+ "version": "2.0.0-beta.86",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "type": "module",