@shopify/create-hydrogen 4.3.13 → 5.0.0

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 (127) hide show
  1. package/dist/assets/hydrogen/bundle/analyzer.html +2045 -0
  2. package/dist/assets/hydrogen/i18n/domains.ts +28 -0
  3. package/dist/assets/hydrogen/i18n/mock-i18n-types.ts +3 -0
  4. package/dist/assets/hydrogen/i18n/subdomains.ts +27 -0
  5. package/dist/assets/hydrogen/i18n/subfolders.ts +29 -0
  6. package/dist/assets/hydrogen/routes/locale-check.ts +16 -0
  7. package/dist/assets/hydrogen/starter/.eslintignore +5 -0
  8. package/dist/assets/hydrogen/starter/.eslintrc.cjs +19 -0
  9. package/dist/assets/hydrogen/starter/.graphqlrc.yml +12 -0
  10. package/dist/assets/hydrogen/starter/CHANGELOG.md +709 -0
  11. package/dist/assets/hydrogen/starter/README.md +45 -0
  12. package/dist/assets/hydrogen/starter/app/assets/favicon.svg +28 -0
  13. package/dist/assets/hydrogen/starter/app/components/AddToCartButton.tsx +37 -0
  14. package/dist/assets/hydrogen/starter/app/components/Aside.tsx +76 -0
  15. package/dist/assets/hydrogen/starter/app/components/CartLineItem.tsx +150 -0
  16. package/dist/assets/hydrogen/starter/app/components/CartMain.tsx +68 -0
  17. package/dist/assets/hydrogen/starter/app/components/CartSummary.tsx +101 -0
  18. package/dist/assets/hydrogen/starter/app/components/Footer.tsx +129 -0
  19. package/dist/assets/hydrogen/starter/app/components/Header.tsx +230 -0
  20. package/dist/assets/hydrogen/starter/app/components/PageLayout.tsx +126 -0
  21. package/dist/assets/hydrogen/starter/app/components/ProductForm.tsx +80 -0
  22. package/dist/assets/hydrogen/starter/app/components/ProductImage.tsx +23 -0
  23. package/dist/assets/hydrogen/starter/app/components/ProductPrice.tsx +27 -0
  24. package/dist/assets/hydrogen/starter/app/components/Search.tsx +514 -0
  25. package/dist/assets/hydrogen/starter/app/entry.client.tsx +12 -0
  26. package/dist/assets/hydrogen/starter/app/entry.server.tsx +47 -0
  27. package/dist/assets/hydrogen/starter/app/graphql/customer-account/CustomerAddressMutations.ts +61 -0
  28. package/dist/assets/hydrogen/starter/app/graphql/customer-account/CustomerDetailsQuery.ts +40 -0
  29. package/dist/assets/hydrogen/starter/app/graphql/customer-account/CustomerOrderQuery.ts +87 -0
  30. package/dist/assets/hydrogen/starter/app/graphql/customer-account/CustomerOrdersQuery.ts +58 -0
  31. package/dist/assets/hydrogen/starter/app/graphql/customer-account/CustomerUpdateMutation.ts +24 -0
  32. package/dist/assets/hydrogen/starter/app/lib/fragments.ts +174 -0
  33. package/dist/assets/hydrogen/starter/app/lib/search.ts +29 -0
  34. package/dist/assets/hydrogen/starter/app/lib/session.ts +72 -0
  35. package/dist/assets/hydrogen/starter/app/lib/variants.ts +46 -0
  36. package/dist/assets/hydrogen/starter/app/root.tsx +191 -0
  37. package/dist/assets/hydrogen/starter/app/routes/$.tsx +11 -0
  38. package/dist/assets/hydrogen/starter/app/routes/[robots.txt].tsx +118 -0
  39. package/dist/assets/hydrogen/starter/app/routes/[sitemap.xml].tsx +177 -0
  40. package/dist/assets/hydrogen/starter/app/routes/_index.tsx +182 -0
  41. package/dist/assets/hydrogen/starter/app/routes/account.$.tsx +8 -0
  42. package/dist/assets/hydrogen/starter/app/routes/account._index.tsx +5 -0
  43. package/dist/assets/hydrogen/starter/app/routes/account.addresses.tsx +513 -0
  44. package/dist/assets/hydrogen/starter/app/routes/account.orders.$id.tsx +195 -0
  45. package/dist/assets/hydrogen/starter/app/routes/account.orders._index.tsx +107 -0
  46. package/dist/assets/hydrogen/starter/app/routes/account.profile.tsx +136 -0
  47. package/dist/assets/hydrogen/starter/app/routes/account.tsx +88 -0
  48. package/dist/assets/hydrogen/starter/app/routes/account_.authorize.tsx +5 -0
  49. package/dist/assets/hydrogen/starter/app/routes/account_.login.tsx +5 -0
  50. package/dist/assets/hydrogen/starter/app/routes/account_.logout.tsx +10 -0
  51. package/dist/assets/hydrogen/starter/app/routes/api.predictive-search.tsx +318 -0
  52. package/dist/assets/hydrogen/starter/app/routes/blogs.$blogHandle.$articleHandle.tsx +113 -0
  53. package/dist/assets/hydrogen/starter/app/routes/blogs.$blogHandle._index.tsx +188 -0
  54. package/dist/assets/hydrogen/starter/app/routes/blogs._index.tsx +119 -0
  55. package/dist/assets/hydrogen/starter/app/routes/cart.$lines.tsx +69 -0
  56. package/dist/assets/hydrogen/starter/app/routes/cart.tsx +102 -0
  57. package/dist/assets/hydrogen/starter/app/routes/collections.$handle.tsx +225 -0
  58. package/dist/assets/hydrogen/starter/app/routes/collections._index.tsx +146 -0
  59. package/dist/assets/hydrogen/starter/app/routes/collections.all.tsx +185 -0
  60. package/dist/assets/hydrogen/starter/app/routes/discount.$code.tsx +47 -0
  61. package/dist/assets/hydrogen/starter/app/routes/pages.$handle.tsx +84 -0
  62. package/dist/assets/hydrogen/starter/app/routes/policies.$handle.tsx +93 -0
  63. package/dist/assets/hydrogen/starter/app/routes/policies._index.tsx +63 -0
  64. package/dist/assets/hydrogen/starter/app/routes/products.$handle.tsx +299 -0
  65. package/dist/assets/hydrogen/starter/app/routes/search.tsx +177 -0
  66. package/dist/assets/hydrogen/starter/app/styles/app.css +486 -0
  67. package/dist/assets/hydrogen/starter/app/styles/reset.css +129 -0
  68. package/dist/assets/hydrogen/starter/customer-accountapi.generated.d.ts +509 -0
  69. package/dist/assets/hydrogen/starter/env.d.ts +54 -0
  70. package/dist/assets/hydrogen/starter/package.json +50 -0
  71. package/dist/assets/hydrogen/starter/public/.gitkeep +0 -0
  72. package/dist/assets/hydrogen/starter/server.ts +119 -0
  73. package/dist/assets/hydrogen/starter/storefrontapi.generated.d.ts +1211 -0
  74. package/dist/assets/hydrogen/starter/tsconfig.json +23 -0
  75. package/dist/assets/hydrogen/starter/vite.config.ts +41 -0
  76. package/dist/assets/hydrogen/tailwind/package.json +8 -0
  77. package/dist/assets/hydrogen/tailwind/tailwind.css +6 -0
  78. package/dist/assets/hydrogen/vanilla-extract/package.json +8 -0
  79. package/dist/assets/hydrogen/virtual-routes/assets/debug-network.css +592 -0
  80. package/dist/assets/hydrogen/virtual-routes/assets/favicon-dark.svg +20 -0
  81. package/dist/assets/hydrogen/virtual-routes/assets/favicon.svg +28 -0
  82. package/dist/assets/hydrogen/virtual-routes/assets/inter-variable-font.woff2 +0 -0
  83. package/dist/assets/hydrogen/virtual-routes/assets/jetbrainsmono-variable-font.woff2 +0 -0
  84. package/dist/assets/hydrogen/virtual-routes/assets/styles.css +238 -0
  85. package/dist/assets/hydrogen/virtual-routes/components/FlameChartWrapper.jsx +123 -0
  86. package/dist/assets/hydrogen/virtual-routes/components/HydrogenLogoBaseBW.jsx +32 -0
  87. package/dist/assets/hydrogen/virtual-routes/components/HydrogenLogoBaseColor.jsx +47 -0
  88. package/dist/assets/hydrogen/virtual-routes/components/IconBanner.jsx +292 -0
  89. package/dist/assets/hydrogen/virtual-routes/components/IconClose.jsx +38 -0
  90. package/dist/assets/hydrogen/virtual-routes/components/IconDiscard.jsx +44 -0
  91. package/dist/assets/hydrogen/virtual-routes/components/IconError.jsx +61 -0
  92. package/dist/assets/hydrogen/virtual-routes/components/IconGithub.jsx +23 -0
  93. package/dist/assets/hydrogen/virtual-routes/components/IconTwitter.jsx +21 -0
  94. package/dist/assets/hydrogen/virtual-routes/components/PageLayout.jsx +7 -0
  95. package/dist/assets/hydrogen/virtual-routes/components/RequestDetails.jsx +178 -0
  96. package/dist/assets/hydrogen/virtual-routes/components/RequestTable.jsx +91 -0
  97. package/dist/assets/hydrogen/virtual-routes/components/RequestWaterfall.jsx +151 -0
  98. package/dist/assets/hydrogen/virtual-routes/lib/useDebugNetworkServer.jsx +178 -0
  99. package/dist/assets/hydrogen/virtual-routes/routes/graphiql.jsx +5 -0
  100. package/dist/assets/hydrogen/virtual-routes/routes/index.jsx +265 -0
  101. package/dist/assets/hydrogen/virtual-routes/routes/subrequest-profiler.jsx +243 -0
  102. package/dist/assets/hydrogen/virtual-routes/virtual-root.jsx +64 -0
  103. package/dist/assets/hydrogen/vite/package.json +14 -0
  104. package/dist/assets/hydrogen/vite/vite.config.js +41 -0
  105. package/dist/chokidar-2CKIHN27.js +12 -0
  106. package/dist/chunk-EO6F7WJJ.js +2 -0
  107. package/dist/chunk-FB327AH7.js +5 -0
  108. package/dist/chunk-FJPX4XUR.js +2 -0
  109. package/dist/chunk-JKOXGRAA.js +10 -0
  110. package/dist/chunk-LNQWGFTB.js +45 -0
  111. package/dist/chunk-M6JXYI3V.js +23 -0
  112. package/dist/chunk-MNT4XW23.js +2 -0
  113. package/dist/chunk-N7HFZHSO.js +1145 -0
  114. package/dist/chunk-PMDMUCNY.js +2 -0
  115. package/dist/chunk-QGLB6FFL.js +3 -0
  116. package/dist/chunk-VMIOG46Y.js +2 -0
  117. package/dist/create-app.js +1867 -34
  118. package/dist/del-CZGKV5SQ.js +11 -0
  119. package/dist/devtools-ZCRGQE64.js +8 -0
  120. package/dist/error-handler-GEQXZJ25.js +2 -0
  121. package/dist/lib-NJYCLW6W.js +22 -0
  122. package/dist/morph-ZJCCGFNC.js +30499 -0
  123. package/dist/multipart-parser-6HGDQWV7.js +3 -0
  124. package/dist/open-OD6DRFEG.js +2 -0
  125. package/dist/out-7KAQXZLP.js +2 -0
  126. package/dist/yoga.wasm +0 -0
  127. package/package.json +7 -3
@@ -0,0 +1,91 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import {
4
+ buildRequestData
5
+ } from "../lib/useDebugNetworkServer.jsx";
6
+ function RequestTable({
7
+ serverEvents,
8
+ activeEventId,
9
+ setActiveEventId
10
+ }) {
11
+ let totalMainRequests = 0;
12
+ let totalSubRequest = 0;
13
+ const items = buildRequestData({
14
+ serverEvents,
15
+ buildMainRequest: (mainRequest, timing) => {
16
+ totalMainRequests++;
17
+ return {
18
+ id: mainRequest.id,
19
+ requestId: mainRequest.requestId,
20
+ url: mainRequest.url,
21
+ status: mainRequest.responseInit?.status ?? 0,
22
+ cacheStatus: mainRequest.cacheStatus,
23
+ duration: timing.responseEnd - timing.requestStart
24
+ };
25
+ },
26
+ buildSubRequest: (subRequest, timing) => {
27
+ if (serverEvents.hidePutRequests) {
28
+ subRequest.cacheStatus !== "PUT" && totalSubRequest++;
29
+ } else {
30
+ totalSubRequest++;
31
+ }
32
+ return {
33
+ id: subRequest.id,
34
+ requestId: subRequest.requestId,
35
+ url: subRequest.displayName ?? subRequest.url,
36
+ status: subRequest.responseInit?.status ?? 0,
37
+ cacheStatus: subRequest.cacheStatus,
38
+ duration: timing.requestEnd - timing.requestStart
39
+ };
40
+ }
41
+ });
42
+ useEffect(() => {
43
+ if (!serverEvents.preserveLog && activeEventId) {
44
+ const selectedItem = items.find((item) => item.id === activeEventId);
45
+ if (!selectedItem) {
46
+ setActiveEventId(void 0);
47
+ }
48
+ }
49
+ }, [serverEvents.preserveLog]);
50
+ return /* @__PURE__ */ jsx("div", { id: "request-table", children: /* @__PURE__ */ jsxs("div", { children: [
51
+ /* @__PURE__ */ jsxs("div", { id: "request-table__header", className: "grid-row", children: [
52
+ /* @__PURE__ */ jsx("div", { className: "grid-cell", children: "Name" }),
53
+ /* @__PURE__ */ jsx("div", { className: "grid-cell", children: "Cache" }),
54
+ /* @__PURE__ */ jsx("div", { className: "grid-cell", children: "Time" })
55
+ ] }),
56
+ /* @__PURE__ */ jsx("div", { id: "request-table__content", children: items.map((row) => /* @__PURE__ */ jsxs(
57
+ "div",
58
+ {
59
+ id: `request-table__row-${row.id}`,
60
+ tabIndex: 0,
61
+ className: `grid-row${activeEventId === row.id ? " active" : ""}${row.status >= 400 ? " error" : ""}`,
62
+ onClick: () => setActiveEventId(row.id),
63
+ onKeyUp: (event) => {
64
+ if (event.code === "Space") setActiveEventId(row.id);
65
+ },
66
+ children: [
67
+ /* @__PURE__ */ jsx("div", { className: "grid-cell", children: row.url }),
68
+ /* @__PURE__ */ jsx("div", { className: "grid-cell", children: row.cacheStatus }),
69
+ /* @__PURE__ */ jsxs("div", { className: "grid-cell", children: [
70
+ row.duration,
71
+ "ms"
72
+ ] })
73
+ ]
74
+ },
75
+ row.id
76
+ )) }),
77
+ /* @__PURE__ */ jsxs("div", { id: "request-table__footer", children: [
78
+ totalMainRequests,
79
+ " request",
80
+ totalMainRequests > 1 ? "s" : "",
81
+ " |",
82
+ " ",
83
+ totalSubRequest,
84
+ " sub request",
85
+ totalSubRequest > 1 ? "s" : ""
86
+ ] })
87
+ ] }) });
88
+ }
89
+ export {
90
+ RequestTable
91
+ };
@@ -0,0 +1,151 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { FlameChartWrapper } from "./FlameChartWrapper.jsx";
4
+ import {
5
+ buildRequestData
6
+ } from "../lib/useDebugNetworkServer.jsx";
7
+ const STYLE_FONT = "10px Inter, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif";
8
+ let resizeTimeout;
9
+ function RequestWaterfall({
10
+ serverEvents,
11
+ config
12
+ }) {
13
+ const items = buildRequestData({
14
+ serverEvents,
15
+ buildMainRequest: (mainRequest, timing) => {
16
+ return {
17
+ name: mainRequest.url,
18
+ intervals: "mainRequest",
19
+ timing,
20
+ meta: [
21
+ {
22
+ name: "id",
23
+ value: mainRequest.id,
24
+ color: "black"
25
+ }
26
+ ]
27
+ };
28
+ },
29
+ buildSubRequest: (subRequest, timing) => {
30
+ return {
31
+ name: `${subRequest.cacheStatus} ${subRequest.displayName ?? subRequest.url}`.trim(),
32
+ intervals: "request",
33
+ timing,
34
+ meta: [
35
+ {
36
+ name: "id",
37
+ value: subRequest.id,
38
+ color: "black"
39
+ }
40
+ ]
41
+ };
42
+ }
43
+ });
44
+ const data = {
45
+ items: [
46
+ {
47
+ // Workaround a bug in flame-chart-js where the first item onSelect is not triggered
48
+ name: "padding-request",
49
+ intervals: "request",
50
+ timing: {
51
+ requestStart: 0,
52
+ responseStart: 0,
53
+ responseEnd: 0,
54
+ requestEnd: -1
55
+ }
56
+ },
57
+ ...items
58
+ ],
59
+ intervals: {
60
+ mainRequest: [
61
+ {
62
+ name: "server",
63
+ color: config.colors.server,
64
+ type: "block",
65
+ start: "requestStart",
66
+ end: "responseStart"
67
+ },
68
+ {
69
+ name: "streaming",
70
+ color: config.colors.streaming,
71
+ type: "block",
72
+ start: "responseStart",
73
+ end: "responseEnd"
74
+ }
75
+ ],
76
+ request: [
77
+ {
78
+ name: "request",
79
+ color: config.colors.subRequest,
80
+ type: "block",
81
+ start: "requestStart",
82
+ end: "requestEnd"
83
+ }
84
+ ]
85
+ }
86
+ };
87
+ const onSelect = (data2) => {
88
+ const eventIdMeta = data2?.node?.meta?.filter(
89
+ (meta) => meta.name === "id"
90
+ )?.[0];
91
+ if (eventIdMeta) {
92
+ setTimeout(() => {
93
+ window.setActiveEventId && window.setActiveEventId(eventIdMeta.value);
94
+ document.querySelector(`#request-table__row-${eventIdMeta.value}`)?.scrollIntoView();
95
+ }, 0);
96
+ }
97
+ };
98
+ const settings = useMemo(
99
+ () => ({
100
+ options: {
101
+ tooltip: () => {
102
+ }
103
+ },
104
+ styles: {
105
+ main: {
106
+ blockHeight: 22,
107
+ font: STYLE_FONT,
108
+ tooltipShadowBlur: 1
109
+ },
110
+ timeframeSelectorPlugin: {
111
+ font: STYLE_FONT,
112
+ waterfallStrokeOpacity: 1,
113
+ waterfallFillOpacity: 0.1
114
+ },
115
+ timeGridPlugin: {
116
+ font: STYLE_FONT
117
+ },
118
+ waterfallPlugin: {
119
+ defaultHeight: 500
120
+ }
121
+ }
122
+ }),
123
+ []
124
+ );
125
+ return /* @__PURE__ */ jsx(
126
+ FlameChartWrapper,
127
+ {
128
+ waterfall: data,
129
+ onSelect,
130
+ settings,
131
+ onResize: (flameChart, width, height) => {
132
+ flameChart?.setSettings({
133
+ ...settings,
134
+ styles: {
135
+ ...settings.styles,
136
+ waterfallPlugin: {
137
+ defaultHeight: height
138
+ }
139
+ }
140
+ });
141
+ clearTimeout(resizeTimeout);
142
+ resizeTimeout = setTimeout(() => {
143
+ flameChart?.resize(width, height);
144
+ }, 50);
145
+ }
146
+ }
147
+ );
148
+ }
149
+ export {
150
+ RequestWaterfall
151
+ };
@@ -0,0 +1,178 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+ let nextEventId = 0;
3
+ const SUBREQUEST_PROFILER_ENDPOINT = "/debug-network-server";
4
+ const LOCAL_STORAGE_SETTINGS_KEY = "h2-debug-network-settings";
5
+ function getSettings() {
6
+ try {
7
+ return JSON.parse(localStorage.getItem(LOCAL_STORAGE_SETTINGS_KEY) ?? "{}");
8
+ } catch {
9
+ return {};
10
+ }
11
+ }
12
+ function setSettings(settings) {
13
+ localStorage.setItem(
14
+ LOCAL_STORAGE_SETTINGS_KEY,
15
+ JSON.stringify({ ...getSettings(), ...settings })
16
+ );
17
+ }
18
+ function useDebugNetworkServer() {
19
+ const serverEvents = useRef({
20
+ mainRequests: [],
21
+ subRequests: {},
22
+ allRequests: {},
23
+ hidePutRequests: true,
24
+ preserveLog: false,
25
+ activeEventId: void 0,
26
+ hideNotification: void 0
27
+ });
28
+ const [timestamp, setTimestamp] = useState();
29
+ function triggerRender() {
30
+ setTimestamp((/* @__PURE__ */ new Date()).getTime());
31
+ }
32
+ useEffect(() => {
33
+ try {
34
+ const debugNetworkSettings = getSettings();
35
+ serverEvents.current.hidePutRequests = debugNetworkSettings.hidePutRequests ?? true;
36
+ serverEvents.current.preserveLog = debugNetworkSettings.preserveLog ?? false;
37
+ serverEvents.current.hideNotification = debugNetworkSettings.hideNotification ?? void 0;
38
+ triggerRender();
39
+ } catch {
40
+ }
41
+ }, []);
42
+ function clearServerEvents() {
43
+ fetch(SUBREQUEST_PROFILER_ENDPOINT, { method: "DELETE" }).catch(
44
+ (error) => console.error("Could not clear history:", error)
45
+ );
46
+ serverEvents.current = {
47
+ ...serverEvents.current,
48
+ mainRequests: [],
49
+ subRequests: {},
50
+ allRequests: {},
51
+ activeEventId: void 0
52
+ };
53
+ }
54
+ function serverEventHandler(onEvent) {
55
+ return (event) => {
56
+ const data = JSON.parse(event.data);
57
+ const id = `event-${nextEventId++}`;
58
+ onEvent({
59
+ ...data,
60
+ id
61
+ });
62
+ setTimeout(triggerRender, 0);
63
+ };
64
+ }
65
+ useEffect(() => {
66
+ const evtSource = new EventSource(SUBREQUEST_PROFILER_ENDPOINT, {
67
+ withCredentials: true
68
+ });
69
+ const mainRequestHandler = serverEventHandler((data) => {
70
+ const cleanData = {
71
+ ...data,
72
+ url: data.url.replace(location.origin, "")
73
+ };
74
+ if (serverEvents.current.preserveLog) {
75
+ serverEvents.current.mainRequests = [
76
+ ...serverEvents.current.mainRequests,
77
+ cleanData
78
+ ];
79
+ } else {
80
+ serverEvents.current.mainRequests = [cleanData];
81
+ }
82
+ serverEvents.current.allRequests[cleanData.id] = cleanData;
83
+ });
84
+ evtSource.addEventListener("Request", mainRequestHandler);
85
+ const subRequestHandler = serverEventHandler((data) => {
86
+ let groupEvents = serverEvents.current.subRequests[data.requestId] || [];
87
+ groupEvents = [...groupEvents, data];
88
+ serverEvents.current.subRequests = {
89
+ ...serverEvents.current.subRequests,
90
+ [data.requestId]: groupEvents
91
+ };
92
+ serverEvents.current.allRequests[data.id] = data;
93
+ });
94
+ evtSource.addEventListener("Sub request", subRequestHandler);
95
+ return () => {
96
+ evtSource.removeEventListener("Request", mainRequestHandler);
97
+ evtSource.removeEventListener("Sub request", subRequestHandler);
98
+ evtSource.close();
99
+ };
100
+ }, []);
101
+ function clear() {
102
+ clearServerEvents();
103
+ triggerRender();
104
+ }
105
+ function setHidePutRequests(hidePutRequests) {
106
+ serverEvents.current.hidePutRequests = hidePutRequests;
107
+ setSettings({ hidePutRequests });
108
+ triggerRender();
109
+ }
110
+ function setPreserveLog(preserveLog) {
111
+ serverEvents.current.preserveLog = preserveLog;
112
+ setSettings({ preserveLog });
113
+ triggerRender();
114
+ }
115
+ function setActiveEventId(eventId) {
116
+ serverEvents.current.activeEventId = eventId;
117
+ }
118
+ function setHideNotification(hideNotification) {
119
+ serverEvents.current.hideNotification = hideNotification;
120
+ setSettings({ hideNotification });
121
+ triggerRender();
122
+ }
123
+ return {
124
+ serverEvents: serverEvents.current,
125
+ clear,
126
+ setHidePutRequests,
127
+ setPreserveLog,
128
+ setActiveEventId,
129
+ setHideNotification,
130
+ timestamp
131
+ };
132
+ }
133
+ function buildRequestData({
134
+ serverEvents,
135
+ buildMainRequest,
136
+ buildSubRequest
137
+ }) {
138
+ const calcDuration = (time) => time - (serverEvents.mainRequests[0]?.startTime ?? 0);
139
+ let items = [];
140
+ serverEvents.mainRequests.forEach((mainRequest) => {
141
+ const mainResponseStart = calcDuration(mainRequest.endTime);
142
+ let mainResponseEnd = mainResponseStart;
143
+ const subRequestItems = [];
144
+ const subRequests = serverEvents.subRequests[mainRequest.requestId] || [];
145
+ subRequests.forEach((subRequest) => {
146
+ const subRequestEnd = calcDuration(subRequest.endTime);
147
+ if (subRequest.cacheStatus !== "PUT") {
148
+ mainResponseEnd = Math.max(mainResponseEnd, subRequestEnd);
149
+ }
150
+ const subRequestItem = buildSubRequest(subRequest, {
151
+ requestStart: calcDuration(subRequest.startTime),
152
+ requestEnd: subRequestEnd,
153
+ responseStart: -1,
154
+ responseEnd: -1
155
+ });
156
+ if (serverEvents.hidePutRequests) {
157
+ subRequest.cacheStatus !== "PUT" && subRequestItems.push(subRequestItem);
158
+ } else {
159
+ subRequestItems.push(subRequestItem);
160
+ }
161
+ });
162
+ items.push(
163
+ buildMainRequest(mainRequest, {
164
+ requestStart: calcDuration(mainRequest.startTime),
165
+ responseStart: mainResponseStart,
166
+ responseEnd: mainResponseEnd,
167
+ requestEnd: -1
168
+ })
169
+ );
170
+ items = items.concat(subRequestItems);
171
+ });
172
+ return items;
173
+ }
174
+ export {
175
+ SUBREQUEST_PROFILER_ENDPOINT,
176
+ buildRequestData,
177
+ useDebugNetworkServer
178
+ };
@@ -0,0 +1,5 @@
1
+ import { graphiqlLoader } from "@shopify/hydrogen";
2
+ const loader = graphiqlLoader;
3
+ export {
4
+ loader
5
+ };
@@ -0,0 +1,265 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { useLoaderData } from "@remix-run/react";
3
+ import { HydrogenLogoBaseBW } from "../components/HydrogenLogoBaseBW.jsx";
4
+ import { HydrogenLogoBaseColor } from "../components/HydrogenLogoBaseColor.jsx";
5
+ import { IconGithub } from "../components/IconGithub.jsx";
6
+ import { IconTwitter } from "../components/IconTwitter.jsx";
7
+ import { IconBanner } from "../components/IconBanner.jsx";
8
+ import { IconError } from "../components/IconError.jsx";
9
+ import favicon from "../assets/favicon.svg";
10
+ import interVariableFontWoff2 from "../assets/inter-variable-font.woff2";
11
+ import jetbrainsmonoVariableFontWoff2 from "../assets/jetbrainsmono-variable-font.woff2";
12
+ const links = () => [
13
+ {
14
+ rel: "icon",
15
+ type: "image/svg+xml",
16
+ href: favicon
17
+ },
18
+ {
19
+ rel: "preload",
20
+ href: interVariableFontWoff2,
21
+ as: "font",
22
+ type: "font/ttf",
23
+ crossOrigin: "anonymous"
24
+ },
25
+ {
26
+ rel: "preload",
27
+ href: jetbrainsmonoVariableFontWoff2,
28
+ as: "font",
29
+ type: "font/ttf",
30
+ crossOrigin: "anonymous"
31
+ }
32
+ ];
33
+ async function loader({
34
+ context: { storefront }
35
+ }) {
36
+ const layout = await storefront.query(LAYOUT_QUERY);
37
+ return { layout, isMockShop: storefront.getApiUrl().includes("mock.shop") };
38
+ }
39
+ const HYDROGEN_SHOP_ID = "gid://shopify/Shop/55145660472";
40
+ function ErrorBoundary() {
41
+ return /* @__PURE__ */ jsx(ErrorPage, {});
42
+ }
43
+ function Index() {
44
+ const {
45
+ isMockShop,
46
+ layout: { shop }
47
+ } = useLoaderData();
48
+ let { name: shopName, id: shopId } = shop;
49
+ const configDone = shopId !== HYDROGEN_SHOP_ID && !isMockShop;
50
+ if (isMockShop || !shopName) shopName = "Hydrogen";
51
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Layout, { shopName, children: [
52
+ configDone ? /* @__PURE__ */ jsx(HydrogenLogoBaseColor, {}) : /* @__PURE__ */ jsx(HydrogenLogoBaseBW, {}),
53
+ /* @__PURE__ */ jsxs("h1", { children: [
54
+ "Hello, ",
55
+ shopName
56
+ ] }),
57
+ /* @__PURE__ */ jsx("p", { children: "Welcome to your new custom storefront" }),
58
+ /* @__PURE__ */ jsxs("section", { className: "Banner", children: [
59
+ /* @__PURE__ */ jsxs("div", { children: [
60
+ /* @__PURE__ */ jsx(IconBanner, {}),
61
+ /* @__PURE__ */ jsx("h2", { children: configDone ? "Create your first route" : "Configure storefront token" })
62
+ ] }),
63
+ configDone ? /* @__PURE__ */ jsxs("p", { children: [
64
+ "You\u2019re seeing this because you don\u2019t have a home route in your project yet. ",
65
+ /* @__PURE__ */ jsx("br", {}),
66
+ "Run ",
67
+ /* @__PURE__ */ jsx("code", { children: "npx shopify hydrogen setup" }),
68
+ " to scaffold standard Shopify routes. Learn more about",
69
+ ` `,
70
+ /* @__PURE__ */ jsx(CreateRoutesLink, {})
71
+ ] }) : /* @__PURE__ */ jsxs("p", { children: [
72
+ "You\u2019re seeing this because you have not yet configured your storefront token. ",
73
+ /* @__PURE__ */ jsx("br", {}),
74
+ /* @__PURE__ */ jsx("br", {}),
75
+ " To link your store,",
76
+ ` `,
77
+ "run",
78
+ " ",
79
+ /* @__PURE__ */ jsx("code", { children: "npx shopify hydrogen link && npx shopify hydrogen env pull" }),
80
+ ". Then, run ",
81
+ /* @__PURE__ */ jsx("code", { children: "npx shopify hydrogen setup" }),
82
+ " to scaffold standard Shopify routes.",
83
+ /* @__PURE__ */ jsx("br", {}),
84
+ "Learn more about",
85
+ ` `,
86
+ /* @__PURE__ */ jsx(
87
+ "a",
88
+ {
89
+ target: "_blank",
90
+ rel: "norefferer noopener",
91
+ href: "https://shopify.dev/docs/custom-storefronts/hydrogen/environment-variables",
92
+ children: "editing environment variables"
93
+ }
94
+ ),
95
+ ` `,
96
+ "and",
97
+ ` `,
98
+ /* @__PURE__ */ jsx(CreateRoutesLink, {}),
99
+ "."
100
+ ] })
101
+ ] }),
102
+ /* @__PURE__ */ jsx(ResourcesLinks, {})
103
+ ] }) });
104
+ }
105
+ function CreateRoutesLink() {
106
+ return /* @__PURE__ */ jsx(
107
+ "a",
108
+ {
109
+ target: "_blank",
110
+ rel: "norefferer noopener",
111
+ href: "https://shopify.dev/docs/custom-storefronts/hydrogen/building/begin-development#step-4-create-a-route",
112
+ children: "creating routes"
113
+ }
114
+ );
115
+ }
116
+ function ErrorPage() {
117
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Layout, { shopName: "Hydrogen", children: [
118
+ /* @__PURE__ */ jsx(HydrogenLogoBaseBW, {}),
119
+ /* @__PURE__ */ jsx("h1", { children: "Hello, Hydrogen" }),
120
+ /* @__PURE__ */ jsx("p", { children: "Welcome to your new custom storefront" }),
121
+ /* @__PURE__ */ jsxs("section", { className: "Banner ErrorBanner", children: [
122
+ /* @__PURE__ */ jsxs("div", { children: [
123
+ /* @__PURE__ */ jsx(IconError, {}),
124
+ /* @__PURE__ */ jsx("h2", { children: "There\u2019s a problem with your storefront" })
125
+ ] }),
126
+ /* @__PURE__ */ jsxs("p", { children: [
127
+ "Check your domain and API token in your ",
128
+ /* @__PURE__ */ jsx("code", { children: ".env" }),
129
+ " file. Learn more about",
130
+ ` `,
131
+ /* @__PURE__ */ jsx(
132
+ "a",
133
+ {
134
+ target: "_blank",
135
+ rel: "norefferer noopener",
136
+ href: "https://shopify.dev/docs/custom-storefronts/hydrogen/environment-variables",
137
+ children: "editing environment variables"
138
+ }
139
+ ),
140
+ "."
141
+ ] })
142
+ ] }),
143
+ /* @__PURE__ */ jsx(ResourcesLinks, {})
144
+ ] }) });
145
+ }
146
+ function ResourcesLinks() {
147
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("section", { className: "Links", children: [
148
+ /* @__PURE__ */ jsx("h2", { children: "Start building" }),
149
+ /* @__PURE__ */ jsxs("ul", { children: [
150
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
151
+ "a",
152
+ {
153
+ target: "_blank",
154
+ rel: "norefferer noopener",
155
+ href: "https://shopify.dev/custom-storefronts/hydrogen/building/collection-page",
156
+ children: "Collection template"
157
+ }
158
+ ) }),
159
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
160
+ "a",
161
+ {
162
+ target: "_blank",
163
+ rel: "norefferer noopener",
164
+ href: "https://shopify.dev/custom-storefronts/hydrogen/building/product-details-page",
165
+ children: "Product template"
166
+ }
167
+ ) }),
168
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
169
+ "a",
170
+ {
171
+ target: "_blank",
172
+ rel: "norefferer noopener",
173
+ href: "https://shopify.dev/custom-storefronts/hydrogen/building/cart",
174
+ children: "Cart"
175
+ }
176
+ ) })
177
+ ] }),
178
+ /* @__PURE__ */ jsx("h2", { children: "Resources" }),
179
+ /* @__PURE__ */ jsxs("ul", { children: [
180
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
181
+ "a",
182
+ {
183
+ target: "_blank",
184
+ rel: "norefferer noopener",
185
+ href: "https://shopify.dev/custom-storefronts/hydrogen",
186
+ children: "Hydrogen docs"
187
+ }
188
+ ) }),
189
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
190
+ "a",
191
+ {
192
+ target: "_blank",
193
+ rel: "norefferer noopener",
194
+ href: "https://shopify.dev/custom-storefronts/hydrogen/project-structure",
195
+ children: "Remix and project structure"
196
+ }
197
+ ) }),
198
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
199
+ "a",
200
+ {
201
+ target: "_blank",
202
+ rel: "norefferer noopener",
203
+ href: "https://shopify.dev/custom-storefronts/hydrogen/data-fetching/fetch-data",
204
+ children: "Data queries and fetching"
205
+ }
206
+ ) })
207
+ ] })
208
+ ] }) });
209
+ }
210
+ function Layout({
211
+ shopName,
212
+ children
213
+ }) {
214
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
215
+ /* @__PURE__ */ jsxs("header", { children: [
216
+ /* @__PURE__ */ jsx("h1", { children: shopName?.toUpperCase() }),
217
+ /* @__PURE__ */ jsx("p", { children: "\xA0Dev Mode\xA0" }),
218
+ /* @__PURE__ */ jsxs("nav", { children: [
219
+ /* @__PURE__ */ jsx(
220
+ "a",
221
+ {
222
+ target: "_blank",
223
+ rel: "norefferer noopener",
224
+ href: "https://github.com/Shopify/hydrogen",
225
+ children: /* @__PURE__ */ jsx(IconGithub, {})
226
+ }
227
+ ),
228
+ /* @__PURE__ */ jsx(
229
+ "a",
230
+ {
231
+ target: "_blank",
232
+ rel: "norefferer noopener",
233
+ href: "https://twitter.com/shopifydevs?lang=en",
234
+ children: /* @__PURE__ */ jsx(IconTwitter, {})
235
+ }
236
+ )
237
+ ] })
238
+ ] }),
239
+ /* @__PURE__ */ jsx("main", { children }),
240
+ /* @__PURE__ */ jsx("footer", { children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
241
+ "a",
242
+ {
243
+ href: "https://shopify.com",
244
+ target: "_blank",
245
+ rel: "noreferrer noopener",
246
+ children: "Powered by Shopify"
247
+ }
248
+ ) }) })
249
+ ] });
250
+ }
251
+ const LAYOUT_QUERY = `#graphql
252
+ query layout {
253
+ shop {
254
+ name
255
+ id
256
+ }
257
+ }
258
+ `;
259
+ export {
260
+ ErrorBoundary,
261
+ HYDROGEN_SHOP_ID,
262
+ Index as default,
263
+ links,
264
+ loader
265
+ };