@epic-web/workshop-app 4.22.0 → 4.22.1

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 (71) hide show
  1. package/build/client/assets/_exerciseNumber-CpcJsfoV.js +2 -0
  2. package/build/client/assets/{_exerciseNumber-Cq0nozYz.js.map → _exerciseNumber-CpcJsfoV.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber_.finished-Ddb3J5ls.js +2 -0
  4. package/build/client/assets/{_exerciseNumber_.finished-Q9qnPuZX.js.map → _exerciseNumber_.finished-Ddb3J5ls.js.map} +1 -1
  5. package/build/client/assets/{_layout-AgYGL72C.js → _layout-BLsKV5zF.js} +2 -2
  6. package/build/client/assets/{_layout-AgYGL72C.js.map → _layout-BLsKV5zF.js.map} +1 -1
  7. package/build/client/assets/_layout-CGLKLU3y.js +2 -0
  8. package/build/client/assets/{_layout-C8uU4Hwj.js.map → _layout-CGLKLU3y.js.map} +1 -1
  9. package/build/client/assets/_layout-DVR5FOsb.js +2 -0
  10. package/build/client/assets/_layout-DVR5FOsb.js.map +1 -0
  11. package/build/client/assets/app-BhrXo-z3.js +2 -0
  12. package/build/client/assets/{app-BiWJY58g.js.map → app-BhrXo-z3.js.map} +1 -1
  13. package/build/client/assets/diff-BNr0PhFR.js +2 -0
  14. package/build/client/assets/{diff-Cw8ktQ1-.js.map → diff-BNr0PhFR.js.map} +1 -1
  15. package/build/client/assets/{diff-CpFxuKA2.js → diff-Cr4LLBag.js} +2 -2
  16. package/build/client/assets/{diff-CpFxuKA2.js.map → diff-Cr4LLBag.js.map} +1 -1
  17. package/build/client/assets/{epic-video-iluUs1-s.js → epic-video-CxZy3iqK.js} +2 -2
  18. package/build/client/assets/{epic-video-iluUs1-s.js.map → epic-video-CxZy3iqK.js.map} +1 -1
  19. package/build/client/assets/finished-CU8QBU41.js +2 -0
  20. package/build/client/assets/{finished-Bm-bCUU2.js.map → finished-CU8QBU41.js.map} +1 -1
  21. package/build/client/assets/index-6GyYWV9G.js +2 -0
  22. package/build/client/assets/{index-BATSX33w.js.map → index-6GyYWV9G.js.map} +1 -1
  23. package/build/client/assets/index-BotyhhDm.js +2 -0
  24. package/build/client/assets/{index-Tfdnz1AB.js.map → index-BotyhhDm.js.map} +1 -1
  25. package/build/client/assets/index-CWVcudJR.js +2 -0
  26. package/build/client/assets/{index-Dm1ll1kT.js.map → index-CWVcudJR.js.map} +1 -1
  27. package/build/client/assets/manifest-42dc4b5a.js +1 -0
  28. package/build/client/assets/mdx-D7ttfz2V.js +2 -0
  29. package/build/client/assets/mdx-D7ttfz2V.js.map +1 -0
  30. package/build/client/assets/onboarding-Co4cldZ0.js +2 -0
  31. package/build/client/assets/{onboarding-CnmE4HLR.js.map → onboarding-Co4cldZ0.js.map} +1 -1
  32. package/build/client/assets/pe-CUZaIcdt.js +2 -0
  33. package/build/client/assets/pe-CUZaIcdt.js.map +1 -0
  34. package/build/client/assets/preview-CdiZ0d0L.js +2 -0
  35. package/build/client/assets/preview-CdiZ0d0L.js.map +1 -0
  36. package/build/client/assets/progress-Biq-ngNF.js +2 -0
  37. package/build/client/assets/{progress-BsY6hGPp.js.map → progress-Biq-ngNF.js.map} +1 -1
  38. package/build/client/assets/{root-Tcnfz99O.js → root-D_FY953d.js} +2 -2
  39. package/build/client/assets/{root-Tcnfz99O.js.map → root-D_FY953d.js.map} +1 -1
  40. package/build/client/assets/set-playground-BXHckvUG.js +2 -0
  41. package/build/client/assets/set-playground-BXHckvUG.js.map +1 -0
  42. package/build/client/assets/test-_8PxC8xF.js +2 -0
  43. package/build/client/assets/{test-D9HsTvpe.js.map → test-_8PxC8xF.js.map} +1 -1
  44. package/build/client/assets/{tests-CmNNBElK.js → tests-t3Udab79.js} +2 -2
  45. package/build/client/assets/{tests-CmNNBElK.js.map → tests-t3Udab79.js.map} +1 -1
  46. package/build/server/index.js +111 -69
  47. package/build/server/index.js.map +1 -1
  48. package/package.json +3 -3
  49. package/build/client/assets/_exerciseNumber-Cq0nozYz.js +0 -2
  50. package/build/client/assets/_exerciseNumber_.finished-Q9qnPuZX.js +0 -2
  51. package/build/client/assets/_layout-BocZ2xWF.js +0 -2
  52. package/build/client/assets/_layout-BocZ2xWF.js.map +0 -1
  53. package/build/client/assets/_layout-C8uU4Hwj.js +0 -2
  54. package/build/client/assets/app-BiWJY58g.js +0 -2
  55. package/build/client/assets/diff-Cw8ktQ1-.js +0 -2
  56. package/build/client/assets/finished-Bm-bCUU2.js +0 -2
  57. package/build/client/assets/index-BATSX33w.js +0 -2
  58. package/build/client/assets/index-Dm1ll1kT.js +0 -2
  59. package/build/client/assets/index-Tfdnz1AB.js +0 -2
  60. package/build/client/assets/manifest-4a3cf2ec.js +0 -1
  61. package/build/client/assets/mdx-M0kcP-mP.js +0 -2
  62. package/build/client/assets/mdx-M0kcP-mP.js.map +0 -1
  63. package/build/client/assets/onboarding-CnmE4HLR.js +0 -2
  64. package/build/client/assets/preview-CqrRe2BV.js +0 -2
  65. package/build/client/assets/preview-CqrRe2BV.js.map +0 -1
  66. package/build/client/assets/progress-BsY6hGPp.js +0 -2
  67. package/build/client/assets/set-playground-Cdy8VlVD.js +0 -2
  68. package/build/client/assets/set-playground-Cdy8VlVD.js.map +0 -1
  69. package/build/client/assets/test-D9HsTvpe.js +0 -2
  70. package/build/client/assets/use-hydrated-Citou692.js +0 -2
  71. package/build/client/assets/use-hydrated-Citou692.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  var _a;
2
2
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
3
  import { PassThrough } from "stream";
4
- import { createReadableStreamFromReadable, redirect, json, createCookieSessionStorage, defer } from "@remix-run/node";
5
- import { RemixServer, Link, useRouteError, useParams, isRouteErrorResponse, useNavigation, useFetchers, useRouteLoaderData, useRevalidator, useFetcher, useLoaderData, Outlet, Meta, Links, ScrollRestoration, Scripts, useLocation, NavLink, Form, Await, useSearchParams, useSubmit, useNavigate } from "@remix-run/react";
4
+ import { createReadableStreamFromReadable, redirect, json as json$1, createCookieSessionStorage, defer } from "@remix-run/node";
5
+ import { RemixServer, Link, useRouteError, useParams, isRouteErrorResponse, useNavigation, useFetchers, useRouteLoaderData, useRevalidator, useLocation, json, redirect as redirect$1, useFetcher, useLoaderData, Outlet, Meta, Links, ScrollRestoration, Scripts, NavLink, Form, Await, useSearchParams, useSubmit, useNavigate } from "@remix-run/react";
6
6
  import { isbot } from "isbot";
7
7
  import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
8
8
  import path$1 from "node:path";
@@ -50,11 +50,12 @@ import { Toaster, toast } from "sonner";
50
50
  import * as TooltipPrimitive from "@radix-ui/react-tooltip";
51
51
  import { useForm, getFormProps } from "@conform-to/react";
52
52
  import { parseWithZod } from "@conform-to/zod";
53
- import { safeRedirect } from "remix-utils/safe-redirect";
54
53
  import { getHintUtils } from "@epic-web/client-hints";
55
54
  import { clientHint, subscribeToSchemeChange } from "@epic-web/client-hints/color-scheme";
56
55
  import { clientHint as clientHint$2, subscribeToMotionChange } from "@epic-web/client-hints/reduced-motion";
57
56
  import { clientHint as clientHint$1 } from "@epic-web/client-hints/time-zone";
57
+ import { safeRedirect } from "remix-utils/safe-redirect";
58
+ import { ServerOnly } from "remix-utils/server-only";
58
59
  import * as cookie from "cookie";
59
60
  import { createId } from "@paralleldrive/cuid2";
60
61
  import { usePartySocket } from "partysocket/react";
@@ -3255,6 +3256,31 @@ function ErrorList({
3255
3256
  if (!(errorsToRender == null ? void 0 : errorsToRender.length)) return null;
3256
3257
  return /* @__PURE__ */ jsx("ul", { id, className: "space-y-1", children: errorsToRender.map((e) => /* @__PURE__ */ jsx("li", { className: "text-danger text-[10px]", children: e }, e)) });
3257
3258
  }
3259
+ const PE_REDIRECT_INPUT_NAME = "__PE_redirectTo";
3260
+ function usePERedirectInput() {
3261
+ const location = useLocation();
3262
+ return /* @__PURE__ */ jsx(ServerOnly, { children: () => /* @__PURE__ */ jsx(
3263
+ "input",
3264
+ {
3265
+ type: "hidden",
3266
+ name: PE_REDIRECT_INPUT_NAME,
3267
+ value: location.pathname
3268
+ }
3269
+ ) });
3270
+ }
3271
+ function ensureProgressiveEnhancement(formData, responseInit) {
3272
+ const redirectTo = formData.get(PE_REDIRECT_INPUT_NAME);
3273
+ if (typeof redirectTo === "string") {
3274
+ throw redirect$1(safeRedirect(redirectTo), responseInit == null ? void 0 : responseInit());
3275
+ }
3276
+ }
3277
+ function jsonWithPE(formData, ...args) {
3278
+ ensureProgressiveEnhancement(formData, () => ({
3279
+ statusText: JSON.stringify(args[0]),
3280
+ ...typeof args[1] === "number" ? { status: args[1] } : args[1]
3281
+ }));
3282
+ return json(...args);
3283
+ }
3258
3284
  const cookieName$1 = "EpicShop_theme";
3259
3285
  function getTheme(request) {
3260
3286
  const cookieHeader = request.headers.get("cookie");
@@ -3270,7 +3296,6 @@ function setTheme(theme) {
3270
3296
  }
3271
3297
  const ROUTE_PATH = "/theme";
3272
3298
  const ThemeFormSchema = z$1.object({
3273
- redirectTo: z$1.string().optional(),
3274
3299
  theme: z$1.enum(["system", "light", "dark"])
3275
3300
  });
3276
3301
  async function action$c({ request }) {
@@ -3279,28 +3304,21 @@ async function action$c({ request }) {
3279
3304
  schema: ThemeFormSchema
3280
3305
  });
3281
3306
  if (submission.status !== "success") {
3282
- return json(submission.reply(), {
3307
+ return json$1(submission.reply(), {
3283
3308
  // You can also use the status to determine the HTTP status code
3284
3309
  status: submission.status === "error" ? 400 : 200
3285
3310
  });
3286
3311
  }
3287
- const { redirectTo, theme } = submission.value;
3312
+ const { theme } = submission.value;
3288
3313
  const responseInit = {
3289
3314
  headers: { "set-cookie": setTheme(theme) }
3290
3315
  };
3291
- if (redirectTo) {
3292
- return redirect(safeRedirect(redirectTo), responseInit);
3293
- } else {
3294
- return json(submission.reply(), responseInit);
3295
- }
3316
+ return jsonWithPE(formData, submission.reply(), responseInit);
3296
3317
  }
3297
3318
  function ThemeSwitch() {
3298
3319
  const requestInfo = useRequestInfo();
3320
+ const peRedirectInput = usePERedirectInput();
3299
3321
  const fetcher = useFetcher();
3300
- const [isHydrated, setIsHydrated] = React.useState(false);
3301
- React.useEffect(() => {
3302
- setIsHydrated(true);
3303
- }, []);
3304
3322
  const [form] = useForm({
3305
3323
  lastResult: fetcher.data,
3306
3324
  onValidate({ formData }) {
@@ -3316,7 +3334,7 @@ function ThemeSwitch() {
3316
3334
  };
3317
3335
  return /* @__PURE__ */ jsxs(fetcher.Form, { method: "POST", action: ROUTE_PATH, ...getFormProps(form), children: [
3318
3336
  /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
3319
- isHydrated ? null : /* @__PURE__ */ jsx("input", { type: "hidden", name: "redirectTo", value: requestInfo.path }),
3337
+ peRedirectInput,
3320
3338
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "theme", value: nextMode }),
3321
3339
  /* @__PURE__ */ jsx(SimpleTooltip, { content: `Change theme from ${mode2} mode`, children: /* @__PURE__ */ jsx(
3322
3340
  "button",
@@ -3971,7 +3989,7 @@ async function loader$y({ request }) {
3971
3989
  const user = await getUserInfo();
3972
3990
  const apps = await getApps({ request, timings });
3973
3991
  const presentUsers = await getPresentUsers(user, { request, timings });
3974
- return json(
3992
+ return json$1(
3975
3993
  {
3976
3994
  workshopTitle,
3977
3995
  workshopSubtitle,
@@ -4458,7 +4476,7 @@ async function action$b({ request }) {
4458
4476
  return otherAreFinished ? `You completed exercise ${exerciseNumber}!` : null;
4459
4477
  }
4460
4478
  const announcement = getCompletionAnnouncement();
4461
- return json(result, {
4479
+ return jsonWithPE(formData, result, {
4462
4480
  headers: combineHeaders(
4463
4481
  announcement ? createConfettiHeaders() : null,
4464
4482
  announcement ? await createToastHeaders({
@@ -4475,6 +4493,7 @@ function ProgressToggle({
4475
4493
  }) {
4476
4494
  var _a2, _b, _c, _d;
4477
4495
  const progressFetcher = useFetcher();
4496
+ const peRedirectInput = usePERedirectInput();
4478
4497
  const progressItem = useProgressItem(progressItemSearch);
4479
4498
  const animationRef = React.useRef(null);
4480
4499
  const buttonRef = React.useRef(null);
@@ -4509,6 +4528,7 @@ function ProgressToggle({
4509
4528
  }, [startAnimation]);
4510
4529
  if (ENV.EPICSHOP_DEPLOYED || !progressItem) return null;
4511
4530
  return /* @__PURE__ */ jsxs(progressFetcher.Form, { method: "POST", action: "/progress", children: [
4531
+ peRedirectInput,
4512
4532
  /* @__PURE__ */ jsx(
4513
4533
  "input",
4514
4534
  {
@@ -4602,7 +4622,7 @@ async function loader$w({ request }) {
4602
4622
  (_a2 = extractNumbersAndTypeFromAppNameOrPath(playgroundAppName ?? "")) == null ? void 0 : _a2.exerciseNumber
4603
4623
  )
4604
4624
  };
4605
- const result = json(
4625
+ const result = json$1(
4606
4626
  {
4607
4627
  workshopTitle,
4608
4628
  exercises: exercises.map((e) => ({
@@ -5778,7 +5798,7 @@ const handle$7 = {
5778
5798
  async function loader$u({ request }) {
5779
5799
  ensureUndeployed();
5780
5800
  await requireAuthInfo({ request });
5781
- return json({ discordAuthUrl: getDiscordAuthURL() });
5801
+ return json$1({ discordAuthUrl: getDiscordAuthURL() });
5782
5802
  }
5783
5803
  async function action$a({ request }) {
5784
5804
  ensureUndeployed();
@@ -6457,7 +6477,7 @@ const handle$6 = {
6457
6477
  getSitemapEntries: () => null
6458
6478
  };
6459
6479
  async function loader$o() {
6460
- return json({ discordAuthUrl: getDiscordAuthURL() });
6480
+ return json$1({ discordAuthUrl: getDiscordAuthURL() });
6461
6481
  }
6462
6482
  function useDiscordCTALink({
6463
6483
  discordAuthUrl
@@ -6610,12 +6630,12 @@ const ignoredInputs = [
6610
6630
  async function action$8({ request }) {
6611
6631
  const result = PlayerPreferencesSchema.safeParse(await request.json());
6612
6632
  if (!result.success) {
6613
- return json({ status: "error", error: result.error.flatten() }, {
6633
+ return json$1({ status: "error", error: result.error.flatten() }, {
6614
6634
  status: 400
6615
6635
  });
6616
6636
  }
6617
6637
  await setPlayerPreferences(result.data);
6618
- return json({ status: "success" });
6638
+ return json$1({ status: "success" });
6619
6639
  }
6620
6640
  function useLatest(value) {
6621
6641
  const ref = React.useRef(value);
@@ -7698,19 +7718,23 @@ async function action$7({ request }) {
7698
7718
  results.push(await launchEditor(file.filepath, file.line, file.column));
7699
7719
  }
7700
7720
  if (results.every((r) => r.status === "success")) {
7701
- return json({ status: "success" });
7721
+ return jsonWithPE(formData, { status: "success" });
7702
7722
  } else {
7703
7723
  const messages = results.map(
7704
7724
  (r, index, array) => r.status === "error" ? array.length > 1 ? `${index}. ${r.message}` : r.message : null
7705
7725
  ).filter(Boolean).join("\n");
7706
7726
  console.error("Launch editor error:", messages);
7707
- return json({ status: "error", message: messages }, {
7708
- headers: await createToastHeaders({
7709
- type: "error",
7710
- title: "Launch Editor Error",
7711
- description: messages
7712
- })
7713
- });
7727
+ return jsonWithPE(
7728
+ formData,
7729
+ { status: "error", message: messages },
7730
+ {
7731
+ headers: await createToastHeaders({
7732
+ type: "error",
7733
+ title: "Launch Editor Error",
7734
+ description: messages
7735
+ })
7736
+ }
7737
+ );
7714
7738
  }
7715
7739
  }
7716
7740
  function useLaunchFetcher(onUpdate) {
@@ -7734,6 +7758,7 @@ function LaunchEditorImpl({
7734
7758
  }) {
7735
7759
  var _a2;
7736
7760
  const fetcher = useLaunchFetcher(onUpdate);
7761
+ const peRedirectInput = usePERedirectInput();
7737
7762
  const fileList = typeof appFile === "string" ? [appFile] : appFile;
7738
7763
  const type = file ? "file" : appFile ? "appFile" : "";
7739
7764
  const syncToType = (syncTo == null ? void 0 : syncTo.file) ? "file" : (syncTo == null ? void 0 : syncTo.appFile) ? "appFile" : "";
@@ -7744,6 +7769,7 @@ function LaunchEditorImpl({
7744
7769
  method: "POST",
7745
7770
  className: "flex items-center",
7746
7771
  children: [
7772
+ peRedirectInput,
7747
7773
  showProgressBarField,
7748
7774
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "line", value: line }),
7749
7775
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "column", value: column }),
@@ -8210,7 +8236,7 @@ async function loader$m({ request, params }) {
8210
8236
  if (!exercise) {
8211
8237
  throw new Response("Not found", { status: 404 });
8212
8238
  }
8213
- const result = json(
8239
+ const result = json$1(
8214
8240
  {
8215
8241
  exerciseNumber: exercise.exerciseNumber,
8216
8242
  exerciseTitle: exercise.title,
@@ -8701,18 +8727,22 @@ async function action$6({ request }) {
8701
8727
  ensureUndeployed();
8702
8728
  const formData = await request.formData();
8703
8729
  const rawData = {
8704
- appName: formData.get("appName")
8730
+ appName: formData.get("appName"),
8731
+ redirectTo: formData.get("redirectTo")
8705
8732
  };
8706
8733
  const result = SetPlaygroundSchema.safeParse(rawData);
8707
8734
  if (!result.success) {
8708
- return json({ status: "error", error: result.error.message }, {
8709
- status: 400
8710
- });
8735
+ return jsonWithPE(
8736
+ formData,
8737
+ { status: "error", error: result.error.message },
8738
+ { status: 400 }
8739
+ );
8711
8740
  }
8712
8741
  const form = result.data;
8713
8742
  const app = await getAppByName(form.appName);
8714
8743
  if (!app) {
8715
- return json(
8744
+ return jsonWithPE(
8745
+ formData,
8716
8746
  { status: "error", error: `App ${form.appName} not found` },
8717
8747
  { status: 404 }
8718
8748
  );
@@ -8723,7 +8753,7 @@ async function action$6({ request }) {
8723
8753
  } catch (error) {
8724
8754
  const message = getErrorMessage(error);
8725
8755
  console.error("Error setting playground", message);
8726
- return json({ status: "error", error: message }, {
8756
+ return json$1({ status: "error", error: message }, {
8727
8757
  status: 500,
8728
8758
  headers: await createToastHeaders({
8729
8759
  type: "error",
@@ -8737,7 +8767,7 @@ async function action$6({ request }) {
8737
8767
  if (playground && converseApp) {
8738
8768
  await getDiffCode(playground, converseApp, { forceFresh: true });
8739
8769
  }
8740
- return json({ status: "success" });
8770
+ return jsonWithPE(formData, { status: "success" });
8741
8771
  }
8742
8772
  function SetPlayground({
8743
8773
  appName,
@@ -8747,6 +8777,7 @@ function SetPlayground({
8747
8777
  }) {
8748
8778
  var _a2;
8749
8779
  const fetcher = useFetcher();
8780
+ const peRedirectInput = usePERedirectInput();
8750
8781
  const submitButton = /* @__PURE__ */ jsx(
8751
8782
  "button",
8752
8783
  {
@@ -8766,6 +8797,7 @@ function SetPlayground({
8766
8797
  method: "POST",
8767
8798
  className: "inline-flex items-center justify-center",
8768
8799
  children: [
8800
+ peRedirectInput,
8769
8801
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "appName", value: appName }),
8770
8802
  reset ? /* @__PURE__ */ jsx("input", { type: "hidden", name: "reset", value: "true" }) : null,
8771
8803
  showProgressBarField,
@@ -8896,7 +8928,7 @@ async function action$5({ request }) {
8896
8928
  const { cacheLocation, embeddedKey, appFullPath } = cacheSchema.parse(rawData);
8897
8929
  if (!await checkFileExists(cacheLocation)) {
8898
8930
  console.log(`file ${cacheLocation} not found`);
8899
- return json({ success: true });
8931
+ return json$1({ success: true });
8900
8932
  }
8901
8933
  const cached = JSON.parse(
8902
8934
  await fs.promises.readFile(cacheLocation, "utf-8")
@@ -8918,7 +8950,7 @@ async function action$5({ request }) {
8918
8950
  );
8919
8951
  }
8920
8952
  setModifiedTimesForDir(appFullPath);
8921
- return json({ success: true });
8953
+ return jsonWithPE(formData, { success: true });
8922
8954
  }
8923
8955
  function UpdateMdxCache({
8924
8956
  handleClick,
@@ -8927,7 +8959,9 @@ function UpdateMdxCache({
8927
8959
  appFullPath
8928
8960
  }) {
8929
8961
  const fetcher = useFetcher();
8962
+ const peRedirectInput = usePERedirectInput();
8930
8963
  return /* @__PURE__ */ jsxs(fetcher.Form, { action: "/update-mdx-cache", method: "POST", children: [
8964
+ peRedirectInput,
8931
8965
  showProgressBarField,
8932
8966
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "cacheLocation", value: cacheLocation }),
8933
8967
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "embeddedKey", value: embeddedKey }),
@@ -9645,10 +9679,10 @@ async function action$4({ request }) {
9645
9679
  const appRunningResult = await waitOnApp(app);
9646
9680
  if ((appRunningResult == null ? void 0 : appRunningResult.status) === "success") {
9647
9681
  await new Promise((resolve) => setTimeout(resolve, 200));
9648
- return json({ status: "app-started" });
9682
+ return jsonWithPE(formData, { status: "app-started" });
9649
9683
  } else if (app.dev.type === "script") {
9650
9684
  const errorMessage = appRunningResult ? appRunningResult.error : "Unknown error";
9651
- return json(
9685
+ return json$1(
9652
9686
  {
9653
9687
  status: "app-not-started",
9654
9688
  error: errorMessage,
@@ -9666,7 +9700,7 @@ async function action$4({ request }) {
9666
9700
  );
9667
9701
  }
9668
9702
  } else if (result.portNumber) {
9669
- return json({
9703
+ return jsonWithPE(formData, {
9670
9704
  status: "app-not-started",
9671
9705
  error: result.status,
9672
9706
  port: result.portNumber
@@ -9681,7 +9715,7 @@ async function action$4({ request }) {
9681
9715
  async function stopApp() {
9682
9716
  invariant(app, "app must be defined");
9683
9717
  await closeProcess(app.name);
9684
- return json({ status: "app-stopped" });
9718
+ return jsonWithPE(formData, { status: "app-stopped" });
9685
9719
  }
9686
9720
  switch (intent) {
9687
9721
  case "start": {
@@ -9700,17 +9734,19 @@ async function action$4({ request }) {
9700
9734
  const port2 = formData.get("port");
9701
9735
  invariantResponse(typeof port2 === "string", "port is required");
9702
9736
  await stopPort(port2);
9703
- return json({ status: "port-stopped" });
9737
+ return jsonWithPE(formData, { status: "port-stopped" });
9704
9738
  }
9705
9739
  throw new Error(`Unknown intent: ${intent}`);
9706
9740
  }
9707
9741
  function AppStopper({ name }) {
9708
9742
  var _a2;
9709
9743
  const fetcher = useFetcher();
9744
+ const peRedirectInput = usePERedirectInput();
9710
9745
  const inFlightIntent = (_a2 = fetcher.formData) == null ? void 0 : _a2.get("intent");
9711
9746
  const inFlightState = inFlightIntent === "stop" ? "Stopping App" : inFlightIntent === "restart" ? "Restarting App" : null;
9712
9747
  const altDown = useAltDown();
9713
9748
  return /* @__PURE__ */ jsxs(fetcher.Form, { method: "POST", action: "/start", children: [
9749
+ peRedirectInput,
9714
9750
  showProgressBarField,
9715
9751
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "name", value: name }),
9716
9752
  /* @__PURE__ */ jsx(
@@ -9727,7 +9763,10 @@ function AppStopper({ name }) {
9727
9763
  }
9728
9764
  function PortStopper({ port: port2 }) {
9729
9765
  const fetcher = useFetcher();
9766
+ const peRedirectInput = usePERedirectInput();
9730
9767
  return /* @__PURE__ */ jsxs(fetcher.Form, { method: "POST", action: "/start", children: [
9768
+ peRedirectInput,
9769
+ showProgressBarField,
9731
9770
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "port", value: port2 }),
9732
9771
  /* @__PURE__ */ jsx(Button, { varient: "mono", type: "submit", name: "intent", value: "stop-port", children: fetcher.state === "idle" ? "Stop Port" : "Stopping Port" })
9733
9772
  ] });
@@ -9735,6 +9774,7 @@ function PortStopper({ port: port2 }) {
9735
9774
  function AppStarter({ name }) {
9736
9775
  var _a2;
9737
9776
  const fetcher = useFetcher();
9777
+ const peRedirectInput = usePERedirectInput();
9738
9778
  if (((_a2 = fetcher.data) == null ? void 0 : _a2.status) === "app-not-started") {
9739
9779
  if (fetcher.data.error === "port-unavailable") {
9740
9780
  return /* @__PURE__ */ jsxs("div", { children: [
@@ -9746,6 +9786,8 @@ function AppStarter({ name }) {
9746
9786
  }
9747
9787
  }
9748
9788
  return /* @__PURE__ */ jsxs(fetcher.Form, { method: "POST", action: "/start", children: [
9789
+ peRedirectInput,
9790
+ showProgressBarField,
9749
9791
  /* @__PURE__ */ jsx("input", { type: "hidden", name: "name", value: name }),
9750
9792
  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" }) })
9751
9793
  ] });
@@ -10216,7 +10258,7 @@ async function loader$k({ request, params }) {
10216
10258
  const timings = makeTimings("exercise-step-test");
10217
10259
  const exerciseStepApp = await requireExerciseApp(params, { request, timings });
10218
10260
  const { isRunning, portIsAvailable } = await getAppRunningState(exerciseStepApp);
10219
- return json({
10261
+ return json$1({
10220
10262
  appInfo: {
10221
10263
  isRunning,
10222
10264
  name: exerciseStepApp.name,
@@ -11080,15 +11122,15 @@ async function loader$j({ request }) {
11080
11122
  const url = new URL(request.url);
11081
11123
  const name = url.searchParams.get("name");
11082
11124
  if (!name) {
11083
- return json({ error: "Missing name" }, { status: 400 });
11125
+ return json$1({ error: "Missing name" }, { status: 400 });
11084
11126
  }
11085
11127
  const app = await getAppByName(name);
11086
11128
  if (!app) {
11087
- return json({ error: "App not found" }, { status: 404 });
11129
+ return json$1({ error: "App not found" }, { status: 404 });
11088
11130
  }
11089
11131
  const processEntry = getTestProcessEntry(app);
11090
11132
  if (!processEntry) {
11091
- return json({ error: "App is not running tests" }, { status: 404 });
11133
+ return json$1({ error: "App is not running tests" }, { status: 404 });
11092
11134
  }
11093
11135
  return eventStream(request.signal, function setup(send) {
11094
11136
  var _a2, _b;
@@ -11160,30 +11202,30 @@ async function action$3({ request }) {
11160
11202
  name: formData.get("name")
11161
11203
  });
11162
11204
  if (!result.success) {
11163
- return json(
11205
+ return json$1(
11164
11206
  { success: false, error: result.error.flatten() },
11165
11207
  { status: 400 }
11166
11208
  );
11167
11209
  }
11168
11210
  const app = await getAppByName(result.data.name);
11169
11211
  if (!app) {
11170
- return json({ success: false, error: "App not found" }, { status: 404 });
11212
+ return json$1({ success: false, error: "App not found" }, { status: 404 });
11171
11213
  }
11172
11214
  switch (result.data.intent) {
11173
11215
  case "run": {
11174
11216
  void runAppTests(app);
11175
- return json({ success: true });
11217
+ return json$1({ success: true });
11176
11218
  }
11177
11219
  case "stop": {
11178
11220
  const processEntry = getTestProcessEntry(app);
11179
11221
  if (processEntry) {
11180
11222
  (_a2 = processEntry.process) == null ? void 0 : _a2.kill();
11181
11223
  }
11182
- return json({ success: true });
11224
+ return json$1({ success: true });
11183
11225
  }
11184
11226
  case "clear": {
11185
11227
  clearTestProcessEntry(app);
11186
- return json({ success: true });
11228
+ return json$1({ success: true });
11187
11229
  }
11188
11230
  }
11189
11231
  }
@@ -11769,7 +11811,7 @@ const route16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11769
11811
  async function loader$h({ request, params }) {
11770
11812
  const timings = makeTimings("exercise-step-test");
11771
11813
  const exerciseStepApp = await requireExerciseApp(params, { request, timings });
11772
- return json({
11814
+ return json$1({
11773
11815
  appInfo: {
11774
11816
  name: exerciseStepApp == null ? void 0 : exerciseStepApp.name,
11775
11817
  test: exerciseStepApp == null ? void 0 : exerciseStepApp.test
@@ -12389,12 +12431,12 @@ async function loader$b() {
12389
12431
  ensureUndeployed();
12390
12432
  const isAuthenticated = Boolean(await getAuthInfo());
12391
12433
  if (isAuthenticated) throw redirect("/account");
12392
- return json({});
12434
+ return json$1({});
12393
12435
  }
12394
12436
  async function action$2() {
12395
12437
  ensureUndeployed();
12396
12438
  void registerDevice();
12397
- return json({ status: "pending" });
12439
+ return json$1({ status: "pending" });
12398
12440
  }
12399
12441
  function Login() {
12400
12442
  var _a2;
@@ -12626,7 +12668,7 @@ async function loader$a({ request }) {
12626
12668
  ] of getProcesses().testProcesses.entries()) {
12627
12669
  testProcesses2[name] = { pid: process2 == null ? void 0 : process2.pid, exitCode };
12628
12670
  }
12629
- return json(
12671
+ return json$1(
12630
12672
  {
12631
12673
  apps,
12632
12674
  processes,
@@ -12648,19 +12690,19 @@ async function action$1({ request }) {
12648
12690
  switch (intent) {
12649
12691
  case "clear-data": {
12650
12692
  await clearData();
12651
- return json({ success: true });
12693
+ return json$1({ success: true });
12652
12694
  }
12653
12695
  case "clear-caches": {
12654
12696
  await clearCaches();
12655
- return json({ success: true });
12697
+ return json$1({ success: true });
12656
12698
  }
12657
12699
  case "inspect": {
12658
12700
  await startInspector();
12659
- return json({ success: true });
12701
+ return json$1({ success: true });
12660
12702
  }
12661
12703
  case "stop-inspect": {
12662
12704
  await stopInspector();
12663
- return json({ success: true });
12705
+ return json$1({ success: true });
12664
12706
  }
12665
12707
  default: {
12666
12708
  throw new Error(`Unknown intent: ${intent}`);
@@ -12823,7 +12865,7 @@ const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12823
12865
  async function loader$9() {
12824
12866
  ensureUndeployed();
12825
12867
  const apps = await getApps();
12826
- return json({ apps });
12868
+ return json$1({ apps });
12827
12869
  }
12828
12870
  const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12829
12871
  __proto__: null,
@@ -12832,7 +12874,7 @@ const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12832
12874
  async function loader$8() {
12833
12875
  ensureUndeployed();
12834
12876
  const entries = await getAllFileCacheEntries();
12835
- return json({ entries });
12877
+ return json$1({ entries });
12836
12878
  }
12837
12879
  const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12838
12880
  __proto__: null,
@@ -12841,7 +12883,7 @@ const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12841
12883
  async function loader$7({ request }) {
12842
12884
  const timings = makeTimings("appsLoader");
12843
12885
  const apps = await getApps({ request, timings });
12844
- return json(
12886
+ return json$1(
12845
12887
  { apps },
12846
12888
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
12847
12889
  );
@@ -12943,7 +12985,7 @@ const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12943
12985
  async function loader$5({ request }) {
12944
12986
  const timings = makeTimings("appsLoader");
12945
12987
  const exercises = await getExercises({ request, timings });
12946
- return json(
12988
+ return json$1(
12947
12989
  { exercises },
12948
12990
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
12949
12991
  );
@@ -13417,7 +13459,7 @@ async function loader$2() {
13417
13459
  ] of getProcesses().testProcesses.entries()) {
13418
13460
  testProcesses2[name] = { pid: process2 == null ? void 0 : process2.pid, exitCode, output };
13419
13461
  }
13420
- return json({ processes, testProcesses: testProcesses2 });
13462
+ return json$1({ processes, testProcesses: testProcesses2 });
13421
13463
  }
13422
13464
  const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
13423
13465
  __proto__: null,
@@ -13445,7 +13487,7 @@ const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
13445
13487
  __proto__: null,
13446
13488
  loader
13447
13489
  }, Symbol.toStringTag, { value: "Module" }));
13448
- const serverManifest = { "entry": { "module": "/assets/entry.client-3M2p-8I3.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-Tcnfz99O.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-hydrated-Citou692.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-B-hHvmeV.js", "/assets/index-BATSX33w.js", "/assets/presence-Cr--lRCr.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/_-DbrWZazo.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/error-boundary-DDTvdkB4.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-AgYGL72C.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-hydrated-Citou692.js", "/assets/index-BXWoOGxB.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.js", "/assets/progress-BsY6hGPp.js", "/assets/index-BATSX33w.js"], "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-7o6O4ruO.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/button-BklqyTPS.js", "/assets/tooltip-BiHTe_7F.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.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-l0sNRNKZ.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+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-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-CHP4_JLJ.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/user-D6tTg1yS.js", "/assets/discord-Dq4e30wV.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-BUs3av-e.js", "imports": ["/assets/index-1cKOJFpX.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-Cq0nozYz.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-B5pmJ29o.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-BocZ2xWF.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-BiWJY58g.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-BATSX33w.js", "/assets/preview-CqrRe2BV.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-Dm1ll1kT.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-M0kcP-mP.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/button-BklqyTPS.js", "/assets/diff-CpFxuKA2.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/discord-Dq4e30wV.js", "/assets/index-B-hHvmeV.js", "/assets/tests-CmNNBElK.js", "/assets/preview-CqrRe2BV.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-D9HsTvpe.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/index-BATSX33w.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/tests-CmNNBElK.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$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+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-Q9qnPuZX.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.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-Bm-bCUU2.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-BsY6hGPp.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-Tfdnz1AB.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.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-4cvVFzF8.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.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-hcqGIpir.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-C8uU4Hwj.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/progress-BsY6hGPp.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-DP2rzg_V.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-l0sNRNKZ.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-Cw8ktQ1-.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-M0kcP-mP.js", "/assets/diff-CpFxuKA2.js", "/assets/nav-chevrons-B82nbdyj.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-CnmE4HLR.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/button-BklqyTPS.js", "/assets/epic-video-iluUs1-s.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/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-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/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-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-DP2rzg_V.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-4a3cf2ec.js", "version": "4a3cf2ec" };
13490
+ const serverManifest = { "entry": { "module": "/assets/entry.client-3M2p-8I3.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-D_FY953d.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-B-hHvmeV.js", "/assets/index-6GyYWV9G.js", "/assets/presence-Cr--lRCr.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/_-DbrWZazo.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/error-boundary-DDTvdkB4.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-BLsKV5zF.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/request-info-CEhUGODY.js", "/assets/pe-CUZaIcdt.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BXWoOGxB.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.js", "/assets/progress-Biq-ngNF.js", "/assets/index-6GyYWV9G.js"], "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-7o6O4ruO.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/button-BklqyTPS.js", "/assets/tooltip-BiHTe_7F.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.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-K6Dvbx-E.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+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-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-CHP4_JLJ.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/user-D6tTg1yS.js", "/assets/discord-Dq4e30wV.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-BUs3av-e.js", "imports": ["/assets/index-1cKOJFpX.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-CpcJsfoV.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-CxZy3iqK.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/mdx-D7ttfz2V.js", "/assets/progress-Biq-ngNF.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-B5pmJ29o.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-DVR5FOsb.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-CxZy3iqK.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-D7ttfz2V.js", "/assets/progress-Biq-ngNF.js", "/assets/set-playground-BXHckvUG.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-BhrXo-z3.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/pe-CUZaIcdt.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-6GyYWV9G.js", "/assets/preview-CdiZ0d0L.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-CWVcudJR.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-CxZy3iqK.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-D7ttfz2V.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-BXHckvUG.js", "/assets/button-BklqyTPS.js", "/assets/diff-Cr4LLBag.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/discord-Dq4e30wV.js", "/assets/index-B-hHvmeV.js", "/assets/tests-t3Udab79.js", "/assets/preview-CdiZ0d0L.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-_8PxC8xF.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/index-6GyYWV9G.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-BXHckvUG.js", "/assets/tests-t3Udab79.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$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+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-Ddb3J5ls.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-CxZy3iqK.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-D7ttfz2V.js", "/assets/progress-Biq-ngNF.js", "/assets/seo-pBpFCWsy.js"], "css": ["/assets/epic-video-DUnRvy1A.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-CU8QBU41.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-CxZy3iqK.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-D7ttfz2V.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-Biq-ngNF.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-BotyhhDm.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-CxZy3iqK.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/mdx-D7ttfz2V.js", "/assets/progress-Biq-ngNF.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-4cvVFzF8.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.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-hcqGIpir.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-CGLKLU3y.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/pe-CUZaIcdt.js", "/assets/tooltip-BiHTe_7F.js", "/assets/progress-Biq-ngNF.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-DP2rzg_V.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-l0sNRNKZ.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-BNr0PhFR.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-CxZy3iqK.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-D7ttfz2V.js", "/assets/diff-Cr4LLBag.js", "/assets/nav-chevrons-B82nbdyj.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-Co4cldZ0.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/pe-CUZaIcdt.js", "/assets/index-6GyYWV9G.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/button-BklqyTPS.js", "/assets/epic-video-CxZy3iqK.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/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-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/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-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-DP2rzg_V.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-42dc4b5a.js", "version": "42dc4b5a" };
13449
13491
  const mode = "production";
13450
13492
  const assetsBuildDirectory = "build/client";
13451
13493
  const basename = "/";