@epic-web/workshop-app 4.10.1 → 4.12.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 (91) hide show
  1. package/build/client/assets/{_-Bd2gNcck.js → _-DYArYM0Z.js} +2 -2
  2. package/build/client/assets/{_-Bd2gNcck.js.map → _-DYArYM0Z.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber-DN5AsSNn.js +2 -0
  4. package/build/client/assets/{_exerciseNumber-CfF6tJcN.js.map → _exerciseNumber-DN5AsSNn.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-DCbWNWpZ.js → _exerciseNumber_._stepNumber-Ct5BCuA1.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-DCbWNWpZ.js.map → _exerciseNumber_._stepNumber-Ct5BCuA1.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-W3hcmvgu.js +2 -0
  8. package/build/client/assets/{_exerciseNumber_.finished-CykPBfYE.js.map → _exerciseNumber_.finished-W3hcmvgu.js.map} +1 -1
  9. package/build/client/assets/{_layout-rEQoj43V.js → _layout-B9Y-8OU6.js} +2 -2
  10. package/build/client/assets/{_layout-rEQoj43V.js.map → _layout-B9Y-8OU6.js.map} +1 -1
  11. package/build/client/assets/{_layout-DHBLG7Ti.js → _layout-CLLcE4oc.js} +2 -2
  12. package/build/client/assets/{_layout-DHBLG7Ti.js.map → _layout-CLLcE4oc.js.map} +1 -1
  13. package/build/client/assets/_layout-qyqfsEt3.js +2 -0
  14. package/build/client/assets/_layout-qyqfsEt3.js.map +1 -0
  15. package/build/client/assets/{account-CnLkZd_O.js → account-DHsaqKNy.js} +2 -2
  16. package/build/client/assets/{account-CnLkZd_O.js.map → account-DHsaqKNy.js.map} +1 -1
  17. package/build/client/assets/{button-CyZl24U2.js → button-BA3iiLRs.js} +2 -2
  18. package/build/client/assets/{button-CyZl24U2.js.map → button-BA3iiLRs.js.map} +1 -1
  19. package/build/client/assets/cache-l0sNRNKZ.js +2 -0
  20. package/build/client/assets/cache-l0sNRNKZ.js.map +1 -0
  21. package/build/client/assets/{client-hints-BE5mB4r0.js → client-hints-DLYDs4RF.js} +2 -2
  22. package/build/client/assets/{client-hints-BE5mB4r0.js.map → client-hints-DLYDs4RF.js.map} +1 -1
  23. package/build/client/assets/{components-BMzmvxYw.js → components-wgHiPsTg.js} +2 -2
  24. package/build/client/assets/{components-BMzmvxYw.js.map → components-wgHiPsTg.js.map} +1 -1
  25. package/build/client/assets/diff-DczVYWk4.js +2 -0
  26. package/build/client/assets/{diff-PfwTHr6-.js.map → diff-DczVYWk4.js.map} +1 -1
  27. package/build/client/assets/{diff-P5f7-8E4.js → diff-hpVBklM0.js} +2 -2
  28. package/build/client/assets/{diff-P5f7-8E4.js.map → diff-hpVBklM0.js.map} +1 -1
  29. package/build/client/assets/discord-CgwNGD2p.js +2 -0
  30. package/build/client/assets/discord-CgwNGD2p.js.map +1 -0
  31. package/build/client/assets/{discord-COPE8EOZ.js → discord-yZor-3t1.js} +2 -2
  32. package/build/client/assets/{discord-COPE8EOZ.js.map → discord-yZor-3t1.js.map} +1 -1
  33. package/build/client/assets/{entry.client-B0vV2fsa.js → entry.client-Cs8lBz8l.js} +2 -2
  34. package/build/client/assets/{entry.client-B0vV2fsa.js.map → entry.client-Cs8lBz8l.js.map} +1 -1
  35. package/build/client/assets/{epic-video-CYnG2ziQ.js → epic-video--ydmGfR4.js} +96 -96
  36. package/build/client/assets/{epic-video-CYnG2ziQ.js.map → epic-video--ydmGfR4.js.map} +1 -1
  37. package/build/client/assets/{error-boundary-DxfVshQ5.js → error-boundary-BVTbN8PZ.js} +2 -2
  38. package/build/client/assets/{error-boundary-DxfVshQ5.js.map → error-boundary-BVTbN8PZ.js.map} +1 -1
  39. package/build/client/assets/finished-3FuL-PiH.js +2 -0
  40. package/build/client/assets/{finished-zLjWvstg.js.map → finished-3FuL-PiH.js.map} +1 -1
  41. package/build/client/assets/{index-4E9_Sx3m.js → index-C6ToujzV.js} +2 -2
  42. package/build/client/assets/{index-4E9_Sx3m.js.map → index-C6ToujzV.js.map} +1 -1
  43. package/build/client/assets/index-DCO6tIXL.js +2 -0
  44. package/build/client/assets/{index-BXefr1BB.js.map → index-DCO6tIXL.js.map} +1 -1
  45. package/build/client/assets/{index-90bzTYUX.js → index-DMhFsRrG.js} +2 -2
  46. package/build/client/assets/{index-90bzTYUX.js.map → index-DMhFsRrG.js.map} +1 -1
  47. package/build/client/assets/{index-Doi37489.js → index-DjzedX4O.js} +2 -2
  48. package/build/client/assets/{index-Doi37489.js.map → index-DjzedX4O.js.map} +1 -1
  49. package/build/client/assets/{loading-CNWJVymJ.js → loading-B0uKxERz.js} +2 -2
  50. package/build/client/assets/{loading-CNWJVymJ.js.map → loading-B0uKxERz.js.map} +1 -1
  51. package/build/client/assets/{login-DxG854vQ.js → login-CHE9W6po.js} +2 -2
  52. package/build/client/assets/{login-DxG854vQ.js.map → login-CHE9W6po.js.map} +1 -1
  53. package/build/client/assets/manifest-b955f6ee.js +1 -0
  54. package/build/client/assets/{mdx-CR7Me1v_.js → mdx-DF11h1m-.js} +2 -2
  55. package/build/client/assets/{mdx-CR7Me1v_.js.map → mdx-DF11h1m-.js.map} +1 -1
  56. package/build/client/assets/{misc-CypjEQkt.js → misc-S5ZD98sI.js} +2 -2
  57. package/build/client/assets/{misc-CypjEQkt.js.map → misc-S5ZD98sI.js.map} +1 -1
  58. package/build/client/assets/{nav-chevrons-BYKwyIgG.js → nav-chevrons-DaXg0NPS.js} +2 -2
  59. package/build/client/assets/{nav-chevrons-BYKwyIgG.js.map → nav-chevrons-DaXg0NPS.js.map} +1 -1
  60. package/build/client/assets/onboarding-CBm-xBhv.js +2 -0
  61. package/build/client/assets/{onboarding-b9lcdh4n.js.map → onboarding-CBm-xBhv.js.map} +1 -1
  62. package/build/client/assets/{presence-DXXVJbaH.js → presence-CW1_eiIo.js} +2 -2
  63. package/build/client/assets/{presence-DXXVJbaH.js.map → presence-CW1_eiIo.js.map} +1 -1
  64. package/build/client/assets/{progress-B_mReZVE.js → progress-BwanvUpB.js} +2 -2
  65. package/build/client/assets/{progress-B_mReZVE.js.map → progress-BwanvUpB.js.map} +1 -1
  66. package/build/client/assets/{progress-bar-DCrt7X4t.js → progress-bar-wMXWRGq0.js} +2 -2
  67. package/build/client/assets/{progress-bar-DCrt7X4t.js.map → progress-bar-wMXWRGq0.js.map} +1 -1
  68. package/build/client/assets/{request-info-CUT0ULYN.js → request-info-DHtGM4FI.js} +2 -2
  69. package/build/client/assets/{request-info-CUT0ULYN.js.map → request-info-DHtGM4FI.js.map} +1 -1
  70. package/build/client/assets/{root-DWqeqKvM.js → root-CW5sLiRQ.js} +2 -2
  71. package/build/client/assets/{root-DWqeqKvM.js.map → root-CW5sLiRQ.js.map} +1 -1
  72. package/build/client/assets/{support-DrY-qRGh.js → support-D1ydJNdm.js} +2 -2
  73. package/build/client/assets/{support-DrY-qRGh.js.map → support-D1ydJNdm.js.map} +1 -1
  74. package/build/client/assets/{tooltip-CfmIzAYi.js → tooltip-BtzSIxlB.js} +2 -2
  75. package/build/client/assets/{tooltip-CfmIzAYi.js.map → tooltip-BtzSIxlB.js.map} +1 -1
  76. package/build/client/assets/{user-C4QTtQw5.js → user-CdUDQ7a8.js} +2 -2
  77. package/build/client/assets/{user-C4QTtQw5.js.map → user-CdUDQ7a8.js.map} +1 -1
  78. package/build/server/index.js +150 -84
  79. package/build/server/index.js.map +1 -1
  80. package/package.json +3 -3
  81. package/build/client/assets/_exerciseNumber-CfF6tJcN.js +0 -2
  82. package/build/client/assets/_exerciseNumber_.finished-CykPBfYE.js +0 -2
  83. package/build/client/assets/_layout-CKMWSKRh.js +0 -2
  84. package/build/client/assets/_layout-CKMWSKRh.js.map +0 -1
  85. package/build/client/assets/diff-PfwTHr6-.js +0 -2
  86. package/build/client/assets/discord-DIog7bBO.js +0 -2
  87. package/build/client/assets/discord-DIog7bBO.js.map +0 -1
  88. package/build/client/assets/finished-zLjWvstg.js +0 -2
  89. package/build/client/assets/index-BXefr1BB.js +0 -2
  90. package/build/client/assets/manifest-60765f76.js +0 -1
  91. package/build/client/assets/onboarding-b9lcdh4n.js +0 -2
@@ -191,7 +191,8 @@ const fsCache = {
191
191
  try {
192
192
  const filePath = path.join(cacheDir$1, md5(key));
193
193
  const data = await fsExtra.readJSON(filePath);
194
- return data;
194
+ if (data.entry) return data.entry;
195
+ return null;
195
196
  } catch (error) {
196
197
  if (error instanceof Error && "code" in error && error.code === "ENOENT") {
197
198
  return null;
@@ -202,13 +203,24 @@ const fsCache = {
202
203
  async set(key, entry2) {
203
204
  const filePath = path.join(cacheDir$1, md5(key));
204
205
  await fsExtra.ensureDir(path.dirname(filePath));
205
- await fsExtra.writeJSON(filePath, entry2);
206
+ await fsExtra.writeJSON(filePath, { key, entry: entry2 });
206
207
  },
207
208
  async delete(key) {
208
209
  const filePath = path.join(cacheDir$1, md5(key));
209
210
  await fsExtra.remove(filePath);
210
211
  }
211
212
  };
213
+ async function getAllFileCacheEntries() {
214
+ const files = await fsExtra.readdir(cacheDir$1);
215
+ const entries = await Promise.all(
216
+ files.map(async (file) => {
217
+ const filePath = path.join(cacheDir$1, file);
218
+ const data = await fsExtra.readJSON(filePath);
219
+ return data;
220
+ }).filter(Boolean)
221
+ );
222
+ return entries;
223
+ }
212
224
  async function deleteCache() {
213
225
  if (process.env.EPICSHOP_DEPLOYED) return null;
214
226
  try {
@@ -3242,7 +3254,7 @@ function useTheme() {
3242
3254
  }
3243
3255
  return requestInfo.session.theme ?? hints.theme;
3244
3256
  }
3245
- const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3257
+ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3246
3258
  __proto__: null,
3247
3259
  ThemeSwitch,
3248
3260
  action: action$c,
@@ -3830,7 +3842,7 @@ const meta$5 = ({ data }) => {
3830
3842
  requestInfo: data.requestInfo
3831
3843
  });
3832
3844
  };
3833
- async function loader$s({ request }) {
3845
+ async function loader$t({ request }) {
3834
3846
  const timings = makeTimings("rootLoader");
3835
3847
  const onboarding = await readOnboardingData();
3836
3848
  if (!ENV.EPICSHOP_DEPLOYED && !(onboarding == null ? void 0 : onboarding.finishedTourVideo)) {
@@ -4048,10 +4060,10 @@ const route0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
4048
4060
  default: AppWithProviders,
4049
4061
  headers: headers$8,
4050
4062
  links,
4051
- loader: loader$s,
4063
+ loader: loader$t,
4052
4064
  meta: meta$5
4053
4065
  }, Symbol.toStringTag, { value: "Module" }));
4054
- async function loader$r() {
4066
+ async function loader$s() {
4055
4067
  throw new Response("Not found", { status: 404 });
4056
4068
  }
4057
4069
  function NotFound() {
@@ -4078,7 +4090,7 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
4078
4090
  __proto__: null,
4079
4091
  ErrorBoundary: ErrorBoundary$4,
4080
4092
  default: NotFound,
4081
- loader: loader$r
4093
+ loader: loader$s
4082
4094
  }, Symbol.toStringTag, { value: "Module" }));
4083
4095
  function makeMediaQueryStore(mediaQuery, serverSnapshot) {
4084
4096
  function getSnapshot() {
@@ -4461,7 +4473,7 @@ function ProgressToggle({
4461
4473
  )
4462
4474
  ] });
4463
4475
  }
4464
- const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4476
+ const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4465
4477
  __proto__: null,
4466
4478
  ProgressToggle,
4467
4479
  action: action$b,
@@ -4472,7 +4484,7 @@ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
4472
4484
  useProgressItemClassName,
4473
4485
  useRequireEpicProgress
4474
4486
  }, Symbol.toStringTag, { value: "Module" }));
4475
- async function loader$q({ request }) {
4487
+ async function loader$r({ request }) {
4476
4488
  var _a2;
4477
4489
  const timings = makeTimings("stepLoader");
4478
4490
  const [exercises, workshopTitle, playgroundAppName] = await Promise.all([
@@ -5507,7 +5519,7 @@ const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
5507
5519
  __proto__: null,
5508
5520
  default: App,
5509
5521
  headers: headers$7,
5510
- loader: loader$q
5522
+ loader: loader$r
5511
5523
  }, Symbol.toStringTag, { value: "Module" }));
5512
5524
  function ExercisesLayout() {
5513
5525
  return /* @__PURE__ */ jsx("div", { className: "flex h-full flex-grow", children: /* @__PURE__ */ jsx(Outlet, {}) });
@@ -5704,7 +5716,7 @@ function isDeepEqual(obj1, obj2) {
5704
5716
  }
5705
5717
  return true;
5706
5718
  }
5707
- const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5719
+ const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5708
5720
  __proto__: null,
5709
5721
  MuxPlayer,
5710
5722
  action: action$a,
@@ -5912,6 +5924,7 @@ function VideoEmbed({
5912
5924
  "iframe",
5913
5925
  {
5914
5926
  onLoad: () => setIframeLoaded(true),
5927
+ onError: () => setIframeLoaded(true),
5915
5928
  src: url,
5916
5929
  className: cn(
5917
5930
  "absolute inset-0 flex h-full w-full transition-opacity duration-300",
@@ -5945,6 +5958,7 @@ function DeferredEpicVideo({
5945
5958
  url,
5946
5959
  title = extractEpicTitle(url)
5947
5960
  }) {
5961
+ const user = useOptionalUser();
5948
5962
  const epicVideoInfosPromise = React.useContext(EpicVideoInfoContext);
5949
5963
  const linkUI = /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(VideoLink, { url, title }) });
5950
5964
  return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
@@ -5968,7 +5982,7 @@ function DeferredEpicVideo({
5968
5982
  ENV.EPICSHOP_GITHUB_ROOT ? /* @__PURE__ */ jsx(Link, { to: ENV.EPICSHOP_GITHUB_ROOT, className: "underline", children: "Run locally" }) : "Run locally",
5969
5983
  " for transcripts"
5970
5984
  ] }) : /* @__PURE__ */ jsxs("div", { children: [
5971
- /* @__PURE__ */ jsx(Link, { to: "/login", className: "underline", children: "Login" }),
5985
+ /* @__PURE__ */ jsx(Link, { to: "/login", className: "underline", children: user ? "Upgrade" : "Login" }),
5972
5986
  " for transcripts"
5973
5987
  ] });
5974
5988
  if (!epicVideoInfo) {
@@ -6774,7 +6788,7 @@ function EditFileOnGitHub({
6774
6788
  );
6775
6789
  }
6776
6790
  const LaunchEditor = ENV.EPICSHOP_DEPLOYED ? ENV.EPICSHOP_GITHUB_ROOT ? LaunchGitHub : ({ children }) => /* @__PURE__ */ jsx(SimpleTooltip, { content: "Cannot open files in deployed app", children: /* @__PURE__ */ jsx("button", { className: "launch_button cursor-not-allowed", children }) }) : LaunchEditorImpl;
6777
- const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6791
+ const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6778
6792
  __proto__: null,
6779
6793
  EditFileOnGitHub,
6780
6794
  LaunchEditor,
@@ -6975,7 +6989,7 @@ const meta$4 = ({
6975
6989
  requestInfo: rootData.requestInfo
6976
6990
  });
6977
6991
  };
6978
- async function loader$p({ request, params }) {
6992
+ async function loader$q({ request, params }) {
6979
6993
  const timings = makeTimings("exerciseNumberLoader");
6980
6994
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
6981
6995
  const [exercises, workshopTitle] = await Promise.all([
@@ -7119,10 +7133,10 @@ const route4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
7119
7133
  ErrorBoundary: ErrorBoundary$3,
7120
7134
  default: ExerciseNumberRoute,
7121
7135
  headers: headers$6,
7122
- loader: loader$p,
7136
+ loader: loader$q,
7123
7137
  meta: meta$4
7124
7138
  }, Symbol.toStringTag, { value: "Module" }));
7125
- async function loader$o({ request, params }) {
7139
+ async function loader$p({ request, params }) {
7126
7140
  const timings = makeTimings("stepLoader");
7127
7141
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
7128
7142
  const [exercises, workshopTitle] = await Promise.all([
@@ -7179,7 +7193,7 @@ const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
7179
7193
  ErrorBoundary: ErrorBoundary$2,
7180
7194
  default: StepRoute,
7181
7195
  headers: headers$5,
7182
- loader: loader$o
7196
+ loader: loader$p
7183
7197
  }, Symbol.toStringTag, { value: "Module" }));
7184
7198
  const AccordionComponent = ({
7185
7199
  title,
@@ -7541,7 +7555,7 @@ function getDiscordAuthURL() {
7541
7555
  discordAuthUrl.searchParams.append("scope", scope);
7542
7556
  return discordAuthUrl.toString();
7543
7557
  }
7544
- async function loader$n({ request }) {
7558
+ async function loader$o({ request }) {
7545
7559
  const authInfo = await requireAuthInfo({ request });
7546
7560
  const discordCode = new URL(request.url).searchParams.get("code");
7547
7561
  invariantResponse(discordCode, "Missing code");
@@ -7594,10 +7608,10 @@ async function loader$n({ request }) {
7594
7608
  description: `Your Discord account "${member.displayName}" has been connected!`
7595
7609
  });
7596
7610
  }
7597
- const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7611
+ const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7598
7612
  __proto__: null,
7599
7613
  getDiscordAuthURL,
7600
- loader: loader$n
7614
+ loader: loader$o
7601
7615
  }, Symbol.toStringTag, { value: "Module" }));
7602
7616
  const epicshopTempDir = path.join(os.tmpdir(), "epicshop");
7603
7617
  const isDeployed = ENV.EPICSHOP_DEPLOYED;
@@ -8153,7 +8167,7 @@ function SetAppToPlayground({ appName }) {
8153
8167
  }
8154
8168
  );
8155
8169
  }
8156
- const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8170
+ const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8157
8171
  __proto__: null,
8158
8172
  PlaygroundChooser,
8159
8173
  SetAppToPlayground,
@@ -8253,7 +8267,7 @@ async function fetchDiscordPosts({ request }) {
8253
8267
  }
8254
8268
  });
8255
8269
  }
8256
- async function loader$m() {
8270
+ async function loader$n() {
8257
8271
  return json({ discordAuthUrl: getDiscordAuthURL() });
8258
8272
  }
8259
8273
  function useDiscordCTALink({
@@ -8356,7 +8370,7 @@ const route15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
8356
8370
  __proto__: null,
8357
8371
  DiscordCTA,
8358
8372
  default: DiscordRoute,
8359
- loader: loader$m,
8373
+ loader: loader$n,
8360
8374
  useDiscordCTALink
8361
8375
  }, Symbol.toStringTag, { value: "Module" }));
8362
8376
  function DiscordChat() {
@@ -8746,7 +8760,7 @@ function AppStarter({ name }) {
8746
8760
  fetcher.state === "idle" ? /* @__PURE__ */ jsx(Button, { type: "submit", name: "intent", value: "start", varient: "mono", children: "Start App" }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Loading, { children: "Starting App" }) })
8747
8761
  ] });
8748
8762
  }
8749
- const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8763
+ const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8750
8764
  __proto__: null,
8751
8765
  AppStarter,
8752
8766
  AppStopper,
@@ -9108,11 +9122,19 @@ function Preview({
9108
9122
  url.searchParams.set("embed", "1");
9109
9123
  url.searchParams.set("theme", theme);
9110
9124
  return /* @__PURE__ */ jsx(
9111
- "iframe",
9125
+ StackBlitzEmbed,
9112
9126
  {
9113
9127
  title,
9114
- src: url.toString(),
9115
- className: "h-full w-full flex-grow bg-white"
9128
+ url: url.toString(),
9129
+ loadingContent: /* @__PURE__ */ jsx(Loading, { children: /* @__PURE__ */ jsxs("span", { children: [
9130
+ "Loading",
9131
+ " ",
9132
+ /* @__PURE__ */ jsxs("a", { className: "underline", href: appInfo.stackBlitzUrl, children: [
9133
+ '"',
9134
+ title,
9135
+ '"'
9136
+ ] })
9137
+ ] }) })
9116
9138
  }
9117
9139
  );
9118
9140
  }
@@ -9168,6 +9190,30 @@ function Preview({
9168
9190
  ] });
9169
9191
  }
9170
9192
  }
9193
+ function StackBlitzEmbed({
9194
+ url,
9195
+ title,
9196
+ loadingContent
9197
+ }) {
9198
+ const [iframeLoaded, setIframeLoaded] = useState(false);
9199
+ return /* @__PURE__ */ jsxs("div", { className: "h-full w-full flex-grow", children: [
9200
+ iframeLoaded ? null : /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center", children: loadingContent }),
9201
+ /* @__PURE__ */ jsx(
9202
+ "iframe",
9203
+ {
9204
+ onLoad: () => setIframeLoaded(true),
9205
+ onError: () => setIframeLoaded(true),
9206
+ src: url,
9207
+ className: cn(
9208
+ "h-full w-full flex-grow transition-opacity duration-300",
9209
+ iframeLoaded ? "opacity-100" : "opacity-0"
9210
+ ),
9211
+ title,
9212
+ sandbox: "allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"
9213
+ }
9214
+ )
9215
+ ] });
9216
+ }
9171
9217
  function Playground({
9172
9218
  appInfo: playgroundAppInfo,
9173
9219
  inBrowserBrowserRef,
@@ -9290,7 +9336,7 @@ function UpdateMdxCache({
9290
9336
  )
9291
9337
  ] });
9292
9338
  }
9293
- const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9339
+ const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9294
9340
  __proto__: null,
9295
9341
  UpdateMdxCache,
9296
9342
  action: action$6
@@ -9756,7 +9802,7 @@ const testEventSchema = z$1.union([
9756
9802
  })
9757
9803
  ]);
9758
9804
  const testEventQueueSchema = z$1.array(testEventSchema);
9759
- async function loader$l({ request }) {
9805
+ async function loader$m({ request }) {
9760
9806
  ensureUndeployed();
9761
9807
  const url = new URL(request.url);
9762
9808
  const name = url.searchParams.get("name");
@@ -10075,14 +10121,14 @@ function StopTest({
10075
10121
  )
10076
10122
  ] });
10077
10123
  }
10078
- const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10124
+ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10079
10125
  __proto__: null,
10080
10126
  ClearTest,
10081
10127
  StopTest,
10082
10128
  TestOutput,
10083
10129
  TestRunner,
10084
10130
  action: action$5,
10085
- loader: loader$l
10131
+ loader: loader$m
10086
10132
  }, Symbol.toStringTag, { value: "Module" }));
10087
10133
  function Tests({
10088
10134
  appInfo: playgroundAppInfo,
@@ -10258,7 +10304,7 @@ const meta$3 = ({
10258
10304
  requestInfo: rootData.requestInfo
10259
10305
  });
10260
10306
  };
10261
- async function loader$k({ request, params }) {
10307
+ async function loader$l({ request, params }) {
10262
10308
  var _a2, _b2;
10263
10309
  const timings = makeTimings("exerciseStepTypeLoader");
10264
10310
  const workshopTitle = await getWorkshopTitle();
@@ -10690,10 +10736,10 @@ const route6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
10690
10736
  ErrorBoundary: ErrorBoundary$1,
10691
10737
  default: ExercisePartRoute,
10692
10738
  headers: headers$4,
10693
- loader: loader$k,
10739
+ loader: loader$l,
10694
10740
  meta: meta$3
10695
10741
  }, Symbol.toStringTag, { value: "Module" }));
10696
- async function loader$j({ params }) {
10742
+ async function loader$k({ params }) {
10697
10743
  const problemApp = await getExerciseApp({ ...params, type: "problem" }).then(
10698
10744
  (a) => isProblemApp(a) ? a : null
10699
10745
  );
@@ -10711,7 +10757,7 @@ async function loader$j({ params }) {
10711
10757
  }
10712
10758
  const route7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10713
10759
  __proto__: null,
10714
- loader: loader$j
10760
+ loader: loader$k
10715
10761
  }, Symbol.toStringTag, { value: "Module" }));
10716
10762
  const meta$2 = ({
10717
10763
  data,
@@ -10730,7 +10776,7 @@ const meta$2 = ({
10730
10776
  requestInfo: rootData.requestInfo
10731
10777
  });
10732
10778
  };
10733
- async function loader$i({ request, params }) {
10779
+ async function loader$j({ request, params }) {
10734
10780
  const timings = makeTimings("exerciseFinishedLoader");
10735
10781
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
10736
10782
  const exercise = await getExercise(params.exerciseNumber, {
@@ -10881,6 +10927,7 @@ function Survey$1({
10881
10927
  "iframe",
10882
10928
  {
10883
10929
  onLoad: () => setIframeLoaded(true),
10930
+ onError: () => setIframeLoaded(true),
10884
10931
  title: "Elaboration",
10885
10932
  src: exerciseFormEmbedUrl,
10886
10933
  className: cn(
@@ -10895,10 +10942,10 @@ const route8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
10895
10942
  __proto__: null,
10896
10943
  default: ExerciseFinished$1,
10897
10944
  headers: headers$3,
10898
- loader: loader$i,
10945
+ loader: loader$j,
10899
10946
  meta: meta$2
10900
10947
  }, Symbol.toStringTag, { value: "Module" }));
10901
- async function loader$h({ request }) {
10948
+ async function loader$i({ request }) {
10902
10949
  ensureUndeployed();
10903
10950
  await requireAuthInfo({ request });
10904
10951
  return json({ discordAuthUrl: getDiscordAuthURL() });
@@ -11010,7 +11057,7 @@ const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
11010
11057
  __proto__: null,
11011
11058
  action: action$4,
11012
11059
  default: Account,
11013
- loader: loader$h
11060
+ loader: loader$i
11014
11061
  }, Symbol.toStringTag, { value: "Module" }));
11015
11062
  async function getForceFresh(filePath, cacheEntry) {
11016
11063
  if (!cacheEntry) return true;
@@ -11078,7 +11125,7 @@ async function resolveApps({
11078
11125
  return { app, fileApp: app };
11079
11126
  }
11080
11127
  }
11081
- async function loader$g({ request, params }) {
11128
+ async function loader$h({ request, params }) {
11082
11129
  const timings = makeTimings("app-file");
11083
11130
  const { fileApp, app } = await resolveApps({ request, params, timings });
11084
11131
  if (!fileApp || !app) {
@@ -11134,9 +11181,9 @@ async function loader$g({ request, params }) {
11134
11181
  }
11135
11182
  const route10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11136
11183
  __proto__: null,
11137
- loader: loader$g
11184
+ loader: loader$h
11138
11185
  }, Symbol.toStringTag, { value: "Module" }));
11139
- async function loader$f(args) {
11186
+ async function loader$g(args) {
11140
11187
  const api = await getApiModule(args);
11141
11188
  invariantResponse(
11142
11189
  api.mod.loader,
@@ -11239,9 +11286,9 @@ async function getApiModule({ request, params }) {
11239
11286
  const route11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11240
11287
  __proto__: null,
11241
11288
  action: action$3,
11242
- loader: loader$f
11289
+ loader: loader$g
11243
11290
  }, Symbol.toStringTag, { value: "Module" }));
11244
- async function loader$e({ request, params }) {
11291
+ async function loader$f({ request, params }) {
11245
11292
  const timings = makeTimings("epic_ws script");
11246
11293
  const { fileApp, app } = await resolveApps({ request, params, timings });
11247
11294
  if (!fileApp || !app) {
@@ -11307,9 +11354,9 @@ async function loader$e({ request, params }) {
11307
11354
  }
11308
11355
  const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11309
11356
  __proto__: null,
11310
- loader: loader$e
11357
+ loader: loader$f
11311
11358
  }, Symbol.toStringTag, { value: "Module" }));
11312
- async function loader$d({ request, params }) {
11359
+ async function loader$e({ request, params }) {
11313
11360
  var _a2;
11314
11361
  const timings = makeTimings("app");
11315
11362
  const { fileApp, app } = await resolveApps({ request, params, timings });
@@ -11395,9 +11442,9 @@ async function loader$d({ request, params }) {
11395
11442
  }
11396
11443
  const route13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11397
11444
  __proto__: null,
11398
- loader: loader$d
11445
+ loader: loader$e
11399
11446
  }, Symbol.toStringTag, { value: "Module" }));
11400
- async function loader$c({ request, params }) {
11447
+ async function loader$d({ request, params }) {
11401
11448
  var _a2;
11402
11449
  const timings = makeTimings("app_test_loader");
11403
11450
  const { testName } = params;
@@ -11537,7 +11584,7 @@ import(${JSON.stringify(testScriptPath)}).then(
11537
11584
  }
11538
11585
  const route14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11539
11586
  __proto__: null,
11540
- loader: loader$c
11587
+ loader: loader$d
11541
11588
  }, Symbol.toStringTag, { value: "Module" }));
11542
11589
  const meta$1 = ({
11543
11590
  matches
@@ -11554,7 +11601,7 @@ const meta$1 = ({
11554
11601
  requestInfo: rootData.requestInfo
11555
11602
  });
11556
11603
  };
11557
- async function loader$b({ request }) {
11604
+ async function loader$c({ request }) {
11558
11605
  const timings = makeTimings("finishedLoader");
11559
11606
  const exercises = await getExercises({ request, timings });
11560
11607
  const compiledFinished = await time(() => getWorkshopFinished({ request }), {
@@ -11677,6 +11724,7 @@ function Survey({
11677
11724
  "iframe",
11678
11725
  {
11679
11726
  onLoad: () => setIframeLoaded(true),
11727
+ onError: () => setIframeLoaded(true),
11680
11728
  title: "Elaboration",
11681
11729
  src: workshopFormEmbedUrl,
11682
11730
  className: cn(
@@ -11691,10 +11739,10 @@ const route16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11691
11739
  __proto__: null,
11692
11740
  default: ExerciseFinished,
11693
11741
  headers: headers$2,
11694
- loader: loader$b,
11742
+ loader: loader$c,
11695
11743
  meta: meta$1
11696
11744
  }, Symbol.toStringTag, { value: "Module" }));
11697
- async function loader$a({ request }) {
11745
+ async function loader$b({ request }) {
11698
11746
  const timings = makeTimings("indexLoader");
11699
11747
  const [title, exercises, workshopReadme] = await Promise.all([
11700
11748
  time(() => getWorkshopTitle(), {
@@ -11824,7 +11872,7 @@ const route17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11824
11872
  ErrorBoundary,
11825
11873
  default: Index,
11826
11874
  headers: headers$1,
11827
- loader: loader$a
11875
+ loader: loader$b
11828
11876
  }, Symbol.toStringTag, { value: "Module" }));
11829
11877
  const EVENTS = {
11830
11878
  USER_CODE_RECEIVED: "USER_CODE_RECEIVED",
@@ -11887,7 +11935,7 @@ const EventSchema = z$1.union([
11887
11935
  AuthResolvedEventSchema,
11888
11936
  AuthRejectedEventSchema
11889
11937
  ]);
11890
- async function loader$9({ request }) {
11938
+ async function loader$a({ request }) {
11891
11939
  ensureUndeployed();
11892
11940
  return eventStream(request.signal, function setup(send) {
11893
11941
  function handleCodeReceived(data) {
@@ -11921,12 +11969,12 @@ async function loader$9({ request }) {
11921
11969
  };
11922
11970
  });
11923
11971
  }
11924
- const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11972
+ const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11925
11973
  __proto__: null,
11926
11974
  EventSchema,
11927
- loader: loader$9
11975
+ loader: loader$a
11928
11976
  }, Symbol.toStringTag, { value: "Module" }));
11929
- async function loader$8() {
11977
+ async function loader$9() {
11930
11978
  ensureUndeployed();
11931
11979
  const isAuthenticated = Boolean(await getAuthInfo());
11932
11980
  if (isAuthenticated) throw redirect("/account");
@@ -12047,7 +12095,7 @@ const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12047
12095
  __proto__: null,
12048
12096
  action: action$2,
12049
12097
  default: Login,
12050
- loader: loader$8
12098
+ loader: loader$9
12051
12099
  }, Symbol.toStringTag, { value: "Module" }));
12052
12100
  function Support() {
12053
12101
  var _a2;
@@ -12139,7 +12187,7 @@ const meta = ({
12139
12187
  const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
12140
12188
  return [{ title: `👷 | ${rootData == null ? void 0 : rootData.workshopTitle}` }];
12141
12189
  };
12142
- async function loader$7({ request }) {
12190
+ async function loader$8({ request }) {
12143
12191
  ensureUndeployed();
12144
12192
  const timings = makeTimings("adminLoader");
12145
12193
  const workshopSlug = await getEpicWorkshopSlug() ?? "Unkown";
@@ -12350,14 +12398,24 @@ const route20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12350
12398
  __proto__: null,
12351
12399
  action: action$1,
12352
12400
  default: AdminLayout,
12353
- loader: loader$7,
12401
+ loader: loader$8,
12354
12402
  meta
12355
12403
  }, Symbol.toStringTag, { value: "Module" }));
12356
- async function loader$6() {
12404
+ async function loader$7() {
12405
+ ensureUndeployed();
12357
12406
  const apps = await getApps();
12358
12407
  return json({ apps });
12359
12408
  }
12360
12409
  const route21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12410
+ __proto__: null,
12411
+ loader: loader$7
12412
+ }, Symbol.toStringTag, { value: "Module" }));
12413
+ async function loader$6() {
12414
+ ensureUndeployed();
12415
+ const entries = await getAllFileCacheEntries();
12416
+ return json({ entries });
12417
+ }
12418
+ const route22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12361
12419
  __proto__: null,
12362
12420
  loader: loader$6
12363
12421
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12369,7 +12427,7 @@ async function loader$5({ request }) {
12369
12427
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
12370
12428
  );
12371
12429
  }
12372
- const route22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12430
+ const route23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12373
12431
  __proto__: null,
12374
12432
  loader: loader$5
12375
12433
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12458,7 +12516,7 @@ function DiffViewer() {
12458
12516
  }
12459
12517
  );
12460
12518
  }
12461
- const route23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12519
+ const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12462
12520
  __proto__: null,
12463
12521
  default: DiffViewer,
12464
12522
  loader: loader$4
@@ -12471,7 +12529,7 @@ async function loader$3({ request }) {
12471
12529
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
12472
12530
  );
12473
12531
  }
12474
- const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12532
+ const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12475
12533
  __proto__: null,
12476
12534
  loader: loader$3
12477
12535
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12865,7 +12923,7 @@ function OgLayout({
12865
12923
  }
12866
12924
  );
12867
12925
  }
12868
- const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12926
+ const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12869
12927
  __proto__: null,
12870
12928
  loader: loader$2
12871
12929
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12907,7 +12965,7 @@ function Onboarding() {
12907
12965
  /* @__PURE__ */ jsx(Form, { method: "post", className: "pb-4", children: /* @__PURE__ */ jsx(Button, { name: "intent", value: "complete", varient: "primary", children: "I've watched it. Let's go!" }) })
12908
12966
  ] });
12909
12967
  }
12910
- const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12968
+ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12911
12969
  __proto__: null,
12912
12970
  action,
12913
12971
  default: Onboarding,
@@ -12932,11 +12990,11 @@ async function loader() {
12932
12990
  }
12933
12991
  return json({ processes, testProcesses: testProcesses2 });
12934
12992
  }
12935
- const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12993
+ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12936
12994
  __proto__: null,
12937
12995
  loader
12938
12996
  }, Symbol.toStringTag, { value: "Module" }));
12939
- const serverManifest = { "entry": { "module": "/assets/entry.client-B0vV2fsa.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-DWqeqKvM.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-Doi37489.js", "/assets/index-90bzTYUX.js", "/assets/presence-DXXVJbaH.js", "/assets/seo-pBpFCWsy.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-Bd2gNcck.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/error-boundary-DxfVshQ5.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DHBLG7Ti.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-4E9_Sx3m.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.js", "/assets/progress-B_mReZVE.js", "/assets/index-90bzTYUX.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DaZNLfOL.js", "imports": ["/assets/index-Czg1ruVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-CfF6tJcN.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-DCbWNWpZ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-CKMWSKRh.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/user-C4QTtQw5.js", "/assets/index-D6ukHE4T.js", "/assets/diff-P5f7-8E4.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/progress-B_mReZVE.js", "/assets/seo-pBpFCWsy.js", "/assets/discord-COPE8EOZ.js", "/assets/index-Doi37489.js", "/assets/button-CyZl24U2.js", "/assets/use-event-source-ySol3hbz.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-CykPBfYE.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-CnLkZd_O.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/button-CyZl24U2.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-DIog7bBO.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/discord-COPE8EOZ.js"], "css": [] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-zLjWvstg.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-B_mReZVE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-BXefr1BB.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-DxG854vQ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/use-event-source-ySol3hbz.js", "/assets/button-CyZl24U2.js", "/assets/loading-CNWJVymJ.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-DrY-qRGh.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-rEQoj43V.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/progress-B_mReZVE.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-PfwTHr6-.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/diff-P5f7-8E4.js", "/assets/nav-chevrons-BYKwyIgG.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-b9lcdh4n.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/button-CyZl24U2.js", "/assets/epic-video-CYnG2ziQ.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-60765f76.js", "version": "60765f76" };
12997
+ const serverManifest = { "entry": { "module": "/assets/entry.client-Cs8lBz8l.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-wgHiPsTg.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-CW5sLiRQ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-wgHiPsTg.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-S5ZD98sI.js", "/assets/request-info-DHtGM4FI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/client-hints-DLYDs4RF.js", "/assets/error-boundary-BVTbN8PZ.js", "/assets/progress-bar-wMXWRGq0.js", "/assets/index-DjzedX4O.js", "/assets/index-DMhFsRrG.js", "/assets/presence-CW1_eiIo.js", "/assets/seo-pBpFCWsy.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-DYArYM0Z.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js", "/assets/error-boundary-BVTbN8PZ.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-CLLcE4oc.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/request-info-DHtGM4FI.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-C6ToujzV.js", "/assets/user-CdUDQ7a8.js", "/assets/presence-CW1_eiIo.js", "/assets/progress-BwanvUpB.js", "/assets/index-DMhFsRrG.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DaZNLfOL.js", "imports": ["/assets/index-Czg1ruVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-DN5AsSNn.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-wgHiPsTg.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-S5ZD98sI.js", "/assets/request-info-DHtGM4FI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-DMhFsRrG.js", "/assets/loading-B0uKxERz.js", "/assets/user-CdUDQ7a8.js", "/assets/epic-video--ydmGfR4.js", "/assets/progress-bar-wMXWRGq0.js", "/assets/index-D6ukHE4T.js", "/assets/mdx-DF11h1m-.js", "/assets/progress-BwanvUpB.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-Ct5BCuA1.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-qyqfsEt3.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/request-info-DHtGM4FI.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-DMhFsRrG.js", "/assets/loading-B0uKxERz.js", "/assets/user-CdUDQ7a8.js", "/assets/epic-video--ydmGfR4.js", "/assets/progress-bar-wMXWRGq0.js", "/assets/index-C6ToujzV.js", "/assets/mdx-DF11h1m-.js", "/assets/index-D6ukHE4T.js", "/assets/diff-hpVBklM0.js", "/assets/error-boundary-BVTbN8PZ.js", "/assets/nav-chevrons-DaXg0NPS.js", "/assets/progress-BwanvUpB.js", "/assets/seo-pBpFCWsy.js", "/assets/discord-yZor-3t1.js", "/assets/index-DjzedX4O.js", "/assets/button-BA3iiLRs.js", "/assets/use-event-source-ySol3hbz.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-W3hcmvgu.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-wgHiPsTg.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-S5ZD98sI.js", "/assets/request-info-DHtGM4FI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-DMhFsRrG.js", "/assets/loading-B0uKxERz.js", "/assets/user-CdUDQ7a8.js", "/assets/epic-video--ydmGfR4.js", "/assets/progress-bar-wMXWRGq0.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-DaXg0NPS.js", "/assets/mdx-DF11h1m-.js", "/assets/progress-BwanvUpB.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-DHsaqKNy.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/request-info-DHtGM4FI.js", "/assets/button-BA3iiLRs.js", "/assets/misc-S5ZD98sI.js", "/assets/user-CdUDQ7a8.js", "/assets/presence-CW1_eiIo.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-CgwNGD2p.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js", "/assets/user-CdUDQ7a8.js", "/assets/discord-yZor-3t1.js"], "css": [] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-3FuL-PiH.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-wgHiPsTg.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-S5ZD98sI.js", "/assets/request-info-DHtGM4FI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-DMhFsRrG.js", "/assets/loading-B0uKxERz.js", "/assets/user-CdUDQ7a8.js", "/assets/epic-video--ydmGfR4.js", "/assets/progress-bar-wMXWRGq0.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-DaXg0NPS.js", "/assets/mdx-DF11h1m-.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-BwanvUpB.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-DCO6tIXL.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-wgHiPsTg.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-S5ZD98sI.js", "/assets/request-info-DHtGM4FI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-DMhFsRrG.js", "/assets/loading-B0uKxERz.js", "/assets/user-CdUDQ7a8.js", "/assets/epic-video--ydmGfR4.js", "/assets/progress-bar-wMXWRGq0.js", "/assets/index-D6ukHE4T.js", "/assets/error-boundary-BVTbN8PZ.js", "/assets/mdx-DF11h1m-.js", "/assets/progress-BwanvUpB.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-CHE9W6po.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/request-info-DHtGM4FI.js", "/assets/client-hints-DLYDs4RF.js", "/assets/use-event-source-ySol3hbz.js", "/assets/button-BA3iiLRs.js", "/assets/loading-B0uKxERz.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-D1ydJNdm.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-wgHiPsTg.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-B9Y-8OU6.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/progress-BwanvUpB.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-DczVYWk4.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/request-info-DHtGM4FI.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-DMhFsRrG.js", "/assets/loading-B0uKxERz.js", "/assets/user-CdUDQ7a8.js", "/assets/epic-video--ydmGfR4.js", "/assets/progress-bar-wMXWRGq0.js", "/assets/index-C6ToujzV.js", "/assets/mdx-DF11h1m-.js", "/assets/diff-hpVBklM0.js", "/assets/nav-chevrons-DaXg0NPS.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-CBm-xBhv.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-wgHiPsTg.js", "/assets/misc-S5ZD98sI.js", "/assets/request-info-DHtGM4FI.js", "/assets/tooltip-BtzSIxlB.js", "/assets/client-hints-DLYDs4RF.js", "/assets/index-DMhFsRrG.js", "/assets/loading-B0uKxERz.js", "/assets/user-CdUDQ7a8.js", "/assets/button-BA3iiLRs.js", "/assets/epic-video--ydmGfR4.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] } }, "url": "/assets/manifest-b955f6ee.js", "version": "b955f6ee" };
12940
12998
  const mode = "production";
12941
12999
  const assetsBuildDirectory = "build/client";
12942
13000
  const basename = "/";
@@ -13121,13 +13179,21 @@ const routes = {
13121
13179
  caseSensitive: void 0,
13122
13180
  module: route21
13123
13181
  },
13182
+ "routes/admin+/cache": {
13183
+ id: "routes/admin+/cache",
13184
+ parentId: "routes/admin+/_layout",
13185
+ path: "cache",
13186
+ index: void 0,
13187
+ caseSensitive: void 0,
13188
+ module: route22
13189
+ },
13124
13190
  "routes/apps": {
13125
13191
  id: "routes/apps",
13126
13192
  parentId: "root",
13127
13193
  path: "apps",
13128
13194
  index: void 0,
13129
13195
  caseSensitive: void 0,
13130
- module: route22
13196
+ module: route23
13131
13197
  },
13132
13198
  "routes/diff": {
13133
13199
  id: "routes/diff",
@@ -13135,7 +13201,7 @@ const routes = {
13135
13201
  path: "diff",
13136
13202
  index: void 0,
13137
13203
  caseSensitive: void 0,
13138
- module: route23
13204
+ module: route24
13139
13205
  },
13140
13206
  "routes/discord.callback": {
13141
13207
  id: "routes/discord.callback",
@@ -13143,7 +13209,7 @@ const routes = {
13143
13209
  path: "discord/callback",
13144
13210
  index: void 0,
13145
13211
  caseSensitive: void 0,
13146
- module: route24
13212
+ module: route25
13147
13213
  },
13148
13214
  "routes/exercises": {
13149
13215
  id: "routes/exercises",
@@ -13151,7 +13217,7 @@ const routes = {
13151
13217
  path: "exercises",
13152
13218
  index: void 0,
13153
13219
  caseSensitive: void 0,
13154
- module: route25
13220
+ module: route26
13155
13221
  },
13156
13222
  "routes/launch-editor": {
13157
13223
  id: "routes/launch-editor",
@@ -13159,7 +13225,7 @@ const routes = {
13159
13225
  path: "launch-editor",
13160
13226
  index: void 0,
13161
13227
  caseSensitive: void 0,
13162
- module: route26
13228
+ module: route27
13163
13229
  },
13164
13230
  "routes/login-sse": {
13165
13231
  id: "routes/login-sse",
@@ -13167,7 +13233,7 @@ const routes = {
13167
13233
  path: "login-sse",
13168
13234
  index: void 0,
13169
13235
  caseSensitive: void 0,
13170
- module: route27
13236
+ module: route28
13171
13237
  },
13172
13238
  "routes/og": {
13173
13239
  id: "routes/og",
@@ -13175,7 +13241,7 @@ const routes = {
13175
13241
  path: "og",
13176
13242
  index: void 0,
13177
13243
  caseSensitive: void 0,
13178
- module: route28
13244
+ module: route29
13179
13245
  },
13180
13246
  "routes/onboarding": {
13181
13247
  id: "routes/onboarding",
@@ -13183,7 +13249,7 @@ const routes = {
13183
13249
  path: "onboarding",
13184
13250
  index: void 0,
13185
13251
  caseSensitive: void 0,
13186
- module: route29
13252
+ module: route30
13187
13253
  },
13188
13254
  "routes/processes": {
13189
13255
  id: "routes/processes",
@@ -13191,7 +13257,7 @@ const routes = {
13191
13257
  path: "processes",
13192
13258
  index: void 0,
13193
13259
  caseSensitive: void 0,
13194
- module: route30
13260
+ module: route31
13195
13261
  },
13196
13262
  "routes/progress": {
13197
13263
  id: "routes/progress",
@@ -13199,7 +13265,7 @@ const routes = {
13199
13265
  path: "progress",
13200
13266
  index: void 0,
13201
13267
  caseSensitive: void 0,
13202
- module: route31
13268
+ module: route32
13203
13269
  },
13204
13270
  "routes/set-playground": {
13205
13271
  id: "routes/set-playground",
@@ -13207,7 +13273,7 @@ const routes = {
13207
13273
  path: "set-playground",
13208
13274
  index: void 0,
13209
13275
  caseSensitive: void 0,
13210
- module: route32
13276
+ module: route33
13211
13277
  },
13212
13278
  "routes/start": {
13213
13279
  id: "routes/start",
@@ -13215,7 +13281,7 @@ const routes = {
13215
13281
  path: "start",
13216
13282
  index: void 0,
13217
13283
  caseSensitive: void 0,
13218
- module: route33
13284
+ module: route34
13219
13285
  },
13220
13286
  "routes/test": {
13221
13287
  id: "routes/test",
@@ -13223,7 +13289,7 @@ const routes = {
13223
13289
  path: "test",
13224
13290
  index: void 0,
13225
13291
  caseSensitive: void 0,
13226
- module: route34
13292
+ module: route35
13227
13293
  },
13228
13294
  "routes/theme/index": {
13229
13295
  id: "routes/theme/index",
@@ -13231,7 +13297,7 @@ const routes = {
13231
13297
  path: "theme",
13232
13298
  index: void 0,
13233
13299
  caseSensitive: void 0,
13234
- module: route35
13300
+ module: route36
13235
13301
  },
13236
13302
  "routes/update-mdx-cache": {
13237
13303
  id: "routes/update-mdx-cache",
@@ -13239,7 +13305,7 @@ const routes = {
13239
13305
  path: "update-mdx-cache",
13240
13306
  index: void 0,
13241
13307
  caseSensitive: void 0,
13242
- module: route36
13308
+ module: route37
13243
13309
  },
13244
13310
  "routes/video-player/index": {
13245
13311
  id: "routes/video-player/index",
@@ -13247,7 +13313,7 @@ const routes = {
13247
13313
  path: "video-player",
13248
13314
  index: void 0,
13249
13315
  caseSensitive: void 0,
13250
- module: route37
13316
+ module: route38
13251
13317
  }
13252
13318
  };
13253
13319
  export {