@epic-web/workshop-app 4.2.6 → 4.2.8

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 (104) hide show
  1. package/build/client/assets/{_-ByTWgb53.js → _-CsdFvUbA.js} +2 -2
  2. package/build/client/assets/{_-ByTWgb53.js.map → _-CsdFvUbA.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber-s_qbmGEJ.js → _exerciseNumber-DWZNkWZM.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber-s_qbmGEJ.js.map → _exerciseNumber-DWZNkWZM.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-D1wwEMQx.js → _exerciseNumber_._stepNumber-P76hDsE6.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-D1wwEMQx.js.map → _exerciseNumber_._stepNumber-P76hDsE6.js.map} +1 -1
  7. package/build/client/assets/{_exerciseNumber_.finished-DJgT9oaU.js → _exerciseNumber_.finished-CpC-flTW.js} +2 -2
  8. package/build/client/assets/{_exerciseNumber_.finished-DJgT9oaU.js.map → _exerciseNumber_.finished-CpC-flTW.js.map} +1 -1
  9. package/build/client/assets/{_layout-49l6Rvwp.js → _layout-BSoUgboG.js} +2 -2
  10. package/build/client/assets/{_layout-49l6Rvwp.js.map → _layout-BSoUgboG.js.map} +1 -1
  11. package/build/client/assets/{_layout-D7Qo_r0X.js → _layout-C8fK4Z98.js} +2 -2
  12. package/build/client/assets/{_layout-D7Qo_r0X.js.map → _layout-C8fK4Z98.js.map} +1 -1
  13. package/build/client/assets/_layout-D1A2zp9y.js +2 -0
  14. package/build/client/assets/{_layout-Bj9PyQQD.js.map → _layout-D1A2zp9y.js.map} +1 -1
  15. package/build/client/assets/{_layout-BaPtC79F.js → _layout-DEZ-aTmx.js} +2 -2
  16. package/build/client/assets/{_layout-BaPtC79F.js.map → _layout-DEZ-aTmx.js.map} +1 -1
  17. package/build/client/assets/{account-Bk4o4AzZ.js → account-BeKnQB9r.js} +2 -2
  18. package/build/client/assets/{account-Bk4o4AzZ.js.map → account-BeKnQB9r.js.map} +1 -1
  19. package/build/client/assets/{button-DnQOyJAN.js → button-Da1iG51o.js} +2 -2
  20. package/build/client/assets/{button-DnQOyJAN.js.map → button-Da1iG51o.js.map} +1 -1
  21. package/build/client/assets/{client-hints-KnbHFIgn.js → client-hints-B2pbEa_9.js} +2 -2
  22. package/build/client/assets/{client-hints-KnbHFIgn.js.map → client-hints-B2pbEa_9.js.map} +1 -1
  23. package/build/client/assets/{components-Dj3sm47B.js → components-BM_XUa9h.js} +15 -15
  24. package/build/client/assets/{components-Dj3sm47B.js.map → components-BM_XUa9h.js.map} +1 -1
  25. package/build/client/assets/diff-BDeBUdSw.js +2 -0
  26. package/build/client/assets/{diff-CLRdJhCn.js.map → diff-BDeBUdSw.js.map} +1 -1
  27. package/build/client/assets/{diff-CT3-9rtW.js → diff-BQhWtDyS.js} +2 -2
  28. package/build/client/assets/{diff-CT3-9rtW.js.map → diff-BQhWtDyS.js.map} +1 -1
  29. package/build/client/assets/{discord-CsluX01E.js → discord-BMNnObT9.js} +2 -2
  30. package/build/client/assets/{discord-CsluX01E.js.map → discord-BMNnObT9.js.map} +1 -1
  31. package/build/client/assets/discord-DdAReDkL.js +2 -0
  32. package/build/client/assets/discord-DdAReDkL.js.map +1 -0
  33. package/build/client/assets/{entry.client-DBBrAxtJ.js → entry.client-XC5tKTFs.js} +2 -2
  34. package/build/client/assets/{entry.client-DBBrAxtJ.js.map → entry.client-XC5tKTFs.js.map} +1 -1
  35. package/build/client/assets/{epic-video-Df7qGSN7.js → epic-video-CxRPT-8l.js} +2 -2
  36. package/build/client/assets/{epic-video-Df7qGSN7.js.map → epic-video-CxRPT-8l.js.map} +1 -1
  37. package/build/client/assets/epic_ws_.js_-l0sNRNKZ.js +2 -0
  38. package/build/client/assets/epic_ws_.js_-l0sNRNKZ.js.map +1 -0
  39. package/build/client/assets/{error-boundary-Bg54_knF.js → error-boundary-tJSWbP6w.js} +2 -2
  40. package/build/client/assets/{error-boundary-Bg54_knF.js.map → error-boundary-tJSWbP6w.js.map} +1 -1
  41. package/build/client/assets/{finished-Dw3SJA8A.js → finished-CMGRmsnb.js} +2 -2
  42. package/build/client/assets/{finished-Dw3SJA8A.js.map → finished-CMGRmsnb.js.map} +1 -1
  43. package/build/client/assets/{index-BL4aE6WC.js → index-B8G3eD8F.js} +2 -2
  44. package/build/client/assets/{index-BL4aE6WC.js.map → index-B8G3eD8F.js.map} +1 -1
  45. package/build/client/assets/index-BDqSZ0-h.js +36 -0
  46. package/build/client/assets/{index-D1WEsmVZ.js.map → index-BDqSZ0-h.js.map} +1 -1
  47. package/build/client/assets/{index-BfoHqrT5.js → index-BymJEf3X.js} +2 -2
  48. package/build/client/assets/{index-BfoHqrT5.js.map → index-BymJEf3X.js.map} +1 -1
  49. package/build/client/assets/{index-YgRENgjt.js → index-CQZ5FyEE.js} +2 -2
  50. package/build/client/assets/{index-YgRENgjt.js.map → index-CQZ5FyEE.js.map} +1 -1
  51. package/build/client/assets/{index-CLnz0tXz.js → index-Dc59VwXx.js} +2 -2
  52. package/build/client/assets/{index-CLnz0tXz.js.map → index-Dc59VwXx.js.map} +1 -1
  53. package/build/client/assets/{loading-D-DClzm1.js → loading-DsjO-T0W.js} +2 -2
  54. package/build/client/assets/{loading-D-DClzm1.js.map → loading-DsjO-T0W.js.map} +1 -1
  55. package/build/client/assets/{login-CjvZj820.js → login-CcuvIoiW.js} +2 -2
  56. package/build/client/assets/{login-CjvZj820.js.map → login-CcuvIoiW.js.map} +1 -1
  57. package/build/client/assets/manifest-1656ae4d.js +1 -0
  58. package/build/client/assets/mdx-CZ_BPVoS.js +2 -0
  59. package/build/client/assets/{mdx-ytg-y2nh.js.map → mdx-CZ_BPVoS.js.map} +1 -1
  60. package/build/client/assets/misc-C1rq7sPa.js +2 -0
  61. package/build/client/assets/{misc-CXGQ7VS9.js.map → misc-C1rq7sPa.js.map} +1 -1
  62. package/build/client/assets/{nav-chevrons-D8c9lJW6.js → nav-chevrons-C-dN3WfT.js} +2 -2
  63. package/build/client/assets/{nav-chevrons-D8c9lJW6.js.map → nav-chevrons-C-dN3WfT.js.map} +1 -1
  64. package/build/client/assets/{onboarding-BxcIdiGj.js → onboarding-CfXLKsN3.js} +2 -2
  65. package/build/client/assets/{onboarding-BxcIdiGj.js.map → onboarding-CfXLKsN3.js.map} +1 -1
  66. package/build/client/assets/{presence-u-05JV3Z.js → presence-BF7lWuVd.js} +2 -2
  67. package/build/client/assets/{presence-u-05JV3Z.js.map → presence-BF7lWuVd.js.map} +1 -1
  68. package/build/client/assets/{progress-bar-DX6yYES2.js → progress-bar-BmszwN_j.js} +2 -2
  69. package/build/client/assets/{progress-bar-DX6yYES2.js.map → progress-bar-BmszwN_j.js.map} +1 -1
  70. package/build/client/assets/{progress-CBZt2pmu.js → progress-mfa_5CZx.js} +2 -2
  71. package/build/client/assets/{progress-CBZt2pmu.js.map → progress-mfa_5CZx.js.map} +1 -1
  72. package/build/client/assets/{root-B02acrJe.js → root-1Cc21xa6.js} +2 -2
  73. package/build/client/assets/{root-B02acrJe.js.map → root-1Cc21xa6.js.map} +1 -1
  74. package/build/client/assets/{support-QTdmLyE7.js → support--jou3sWH.js} +2 -2
  75. package/build/client/assets/{support-QTdmLyE7.js.map → support--jou3sWH.js.map} +1 -1
  76. package/build/client/assets/{tooltip-CVFWPOu0.js → tooltip-BlVFw-is.js} +2 -2
  77. package/build/client/assets/{tooltip-CVFWPOu0.js.map → tooltip-BlVFw-is.js.map} +1 -1
  78. package/build/client/assets/{use-event-source-DXlRuRq2.js → use-event-source-DPLyo0Bh.js} +2 -2
  79. package/build/client/assets/{use-event-source-DXlRuRq2.js.map → use-event-source-DPLyo0Bh.js.map} +1 -1
  80. package/build/client/assets/{user-DiGtbaa7.js → user-p2QVtDZI.js} +2 -2
  81. package/build/client/assets/{user-DiGtbaa7.js.map → user-p2QVtDZI.js.map} +1 -1
  82. package/build/server/index.js +189 -706
  83. package/build/server/index.js.map +1 -1
  84. package/package.json +3 -3
  85. package/build/client/assets/_layout-Bj9PyQQD.js +0 -2
  86. package/build/client/assets/app._id-l0sNRNKZ.js +0 -2
  87. package/build/client/assets/app._id-l0sNRNKZ.js.map +0 -1
  88. package/build/client/assets/app._id._-l0sNRNKZ.js +0 -2
  89. package/build/client/assets/app._id._-l0sNRNKZ.js.map +0 -1
  90. package/build/client/assets/app._id.api._-l0sNRNKZ.js +0 -2
  91. package/build/client/assets/app._id.api._-l0sNRNKZ.js.map +0 -1
  92. package/build/client/assets/app._id.epic_ws_.js_-l0sNRNKZ.js +0 -2
  93. package/build/client/assets/app._id.epic_ws_.js_-l0sNRNKZ.js.map +0 -1
  94. package/build/client/assets/app._id.test._testName-l0sNRNKZ.js +0 -2
  95. package/build/client/assets/app._id.test._testName-l0sNRNKZ.js.map +0 -1
  96. package/build/client/assets/diff-CLRdJhCn.js +0 -2
  97. package/build/client/assets/discord-CK7yz4w6.js +0 -2
  98. package/build/client/assets/discord-CK7yz4w6.js.map +0 -1
  99. package/build/client/assets/index-D1WEsmVZ.js +0 -36
  100. package/build/client/assets/kcd_ws_.js_-l0sNRNKZ.js +0 -2
  101. package/build/client/assets/kcd_ws_.js_-l0sNRNKZ.js.map +0 -1
  102. package/build/client/assets/manifest-9027f7b6.js +0 -1
  103. package/build/client/assets/mdx-ytg-y2nh.js +0 -2
  104. package/build/client/assets/misc-CXGQ7VS9.js +0 -2
@@ -3163,7 +3163,7 @@ const ThemeFormSchema = z$1.object({
3163
3163
  redirectTo: z$1.string().optional(),
3164
3164
  theme: z$1.enum(["system", "light", "dark"])
3165
3165
  });
3166
- async function action$d({ request }) {
3166
+ async function action$c({ request }) {
3167
3167
  const formData = await request.formData();
3168
3168
  const submission = parseWithZod(formData, {
3169
3169
  schema: ThemeFormSchema
@@ -3242,10 +3242,10 @@ function useTheme() {
3242
3242
  }
3243
3243
  return requestInfo.session.theme ?? hints.theme;
3244
3244
  }
3245
- const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3245
+ const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3246
3246
  __proto__: null,
3247
3247
  ThemeSwitch,
3248
- action: action$d,
3248
+ action: action$c,
3249
3249
  useTheme
3250
3250
  }, Symbol.toStringTag, { value: "Module" }));
3251
3251
  const appStylesheetUrl = "/assets/app-B0HiIPBO.css";
@@ -3799,7 +3799,7 @@ const links = () => {
3799
3799
  const meta$5 = ({ data }) => {
3800
3800
  return [{ title: data == null ? void 0 : data.workshopTitle }];
3801
3801
  };
3802
- async function loader$w({ request }) {
3802
+ async function loader$r({ request }) {
3803
3803
  const timings = makeTimings("rootLoader");
3804
3804
  const onboarding = await readOnboardingData();
3805
3805
  if (!ENV.EPICSHOP_DEPLOYED && !(onboarding == null ? void 0 : onboarding.finishedTourVideo)) {
@@ -4004,10 +4004,10 @@ const route0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
4004
4004
  default: AppWithProviders,
4005
4005
  headers: headers$8,
4006
4006
  links,
4007
- loader: loader$w,
4007
+ loader: loader$r,
4008
4008
  meta: meta$5
4009
4009
  }, Symbol.toStringTag, { value: "Module" }));
4010
- async function loader$v() {
4010
+ async function loader$q() {
4011
4011
  throw new Response("Not found", { status: 404 });
4012
4012
  }
4013
4013
  function NotFound() {
@@ -4034,7 +4034,7 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
4034
4034
  __proto__: null,
4035
4035
  ErrorBoundary: ErrorBoundary$4,
4036
4036
  default: NotFound,
4037
- loader: loader$v
4037
+ loader: loader$q
4038
4038
  }, Symbol.toStringTag, { value: "Module" }));
4039
4039
  function useEpicProgress() {
4040
4040
  const data = useRouteLoaderData("root");
@@ -4165,7 +4165,7 @@ function useProgressItem({
4165
4165
  }
4166
4166
  return null;
4167
4167
  }
4168
- async function action$c({ request }) {
4168
+ async function action$b({ request }) {
4169
4169
  ensureUndeployed();
4170
4170
  await requireAuthInfo({ request });
4171
4171
  const formData = await request.formData();
@@ -4327,10 +4327,10 @@ function ProgressToggle({
4327
4327
  )
4328
4328
  ] });
4329
4329
  }
4330
- const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4330
+ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4331
4331
  __proto__: null,
4332
4332
  ProgressToggle,
4333
- action: action$c,
4333
+ action: action$b,
4334
4334
  useEpicProgress,
4335
4335
  useExerciseProgressClassName,
4336
4336
  useNextExerciseRoute,
@@ -4355,7 +4355,7 @@ function useOptionalDiscordMember() {
4355
4355
  const data = useRouteLoaderData("root");
4356
4356
  return data == null ? void 0 : data.discordMember;
4357
4357
  }
4358
- async function loader$u({ request }) {
4358
+ async function loader$p({ request }) {
4359
4359
  var _a2;
4360
4360
  const timings = makeTimings("stepLoader");
4361
4361
  const [exercises, workshopTitle, playgroundAppName] = await Promise.all([
@@ -5052,7 +5052,7 @@ const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
5052
5052
  __proto__: null,
5053
5053
  default: App,
5054
5054
  headers: headers$7,
5055
- loader: loader$u
5055
+ loader: loader$p
5056
5056
  }, Symbol.toStringTag, { value: "Module" }));
5057
5057
  function ExercisesLayout() {
5058
5058
  return /* @__PURE__ */ jsx("div", { className: "flex h-full flex-grow", children: /* @__PURE__ */ jsx(Outlet, {}) });
@@ -5130,7 +5130,7 @@ const ignoredInputs = [
5130
5130
  "mux-player",
5131
5131
  "summary"
5132
5132
  ];
5133
- async function action$b({ request }) {
5133
+ async function action$a({ request }) {
5134
5134
  const result = PlayerPreferencesSchema.safeParse(await request.json());
5135
5135
  if (!result.success) {
5136
5136
  return json({ status: "error", error: result.error.flatten() }, {
@@ -5316,10 +5316,10 @@ function isDeepEqual(obj1, obj2) {
5316
5316
  }
5317
5317
  return true;
5318
5318
  }
5319
- const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5319
+ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5320
5320
  __proto__: null,
5321
5321
  MuxPlayer,
5322
- action: action$b,
5322
+ action: action$a,
5323
5323
  usePlayerPreferences
5324
5324
  }, Symbol.toStringTag, { value: "Module" }));
5325
5325
  const EpicVideoInfoContext = React.createContext(null);
@@ -6106,7 +6106,7 @@ const LaunchSchema = z$1.intersection(
6106
6106
  }),
6107
6107
  getFileDescriptorSchema(z$1.array(z$1.string()))
6108
6108
  );
6109
- async function action$a({ request }) {
6109
+ async function action$9({ request }) {
6110
6110
  ensureUndeployed();
6111
6111
  const formData = await request.formData();
6112
6112
  const syncTo = {
@@ -6349,11 +6349,11 @@ function EditFileOnGitHub({
6349
6349
  );
6350
6350
  }
6351
6351
  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;
6352
- const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6352
+ const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6353
6353
  __proto__: null,
6354
6354
  EditFileOnGitHub,
6355
6355
  LaunchEditor,
6356
- action: action$a
6356
+ action: action$9
6357
6357
  }, Symbol.toStringTag, { value: "Module" }));
6358
6358
  const safePath = (s) => s.replace(/\\/g, "/");
6359
6359
  function getRelativePath(file, separator, type) {
@@ -6552,7 +6552,7 @@ const meta$4 = ({
6552
6552
  }
6553
6553
  ];
6554
6554
  };
6555
- async function loader$t({ request, params }) {
6555
+ async function loader$o({ request, params }) {
6556
6556
  const timings = makeTimings("exerciseNumberLoader");
6557
6557
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
6558
6558
  const [exercises, workshopTitle] = await Promise.all([
@@ -6696,10 +6696,10 @@ const route4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
6696
6696
  ErrorBoundary: ErrorBoundary$3,
6697
6697
  default: ExerciseNumberRoute,
6698
6698
  headers: headers$6,
6699
- loader: loader$t,
6699
+ loader: loader$o,
6700
6700
  meta: meta$4
6701
6701
  }, Symbol.toStringTag, { value: "Module" }));
6702
- async function loader$s({ request, params }) {
6702
+ async function loader$n({ request, params }) {
6703
6703
  const timings = makeTimings("stepLoader");
6704
6704
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
6705
6705
  const [exercises, workshopTitle] = await Promise.all([
@@ -6756,7 +6756,7 @@ const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
6756
6756
  ErrorBoundary: ErrorBoundary$2,
6757
6757
  default: StepRoute,
6758
6758
  headers: headers$5,
6759
- loader: loader$s
6759
+ loader: loader$n
6760
6760
  }, Symbol.toStringTag, { value: "Module" }));
6761
6761
  const EmojiDataSchema = z$1.union([
6762
6762
  z$1.object({
@@ -6873,7 +6873,7 @@ function getDiscordAuthURL() {
6873
6873
  discordAuthUrl.searchParams.append("scope", scope);
6874
6874
  return discordAuthUrl.toString();
6875
6875
  }
6876
- async function loader$r({ request }) {
6876
+ async function loader$m({ request }) {
6877
6877
  const authInfo = await requireAuthInfo({ request });
6878
6878
  const discordCode = new URL(request.url).searchParams.get("code");
6879
6879
  invariantResponse(discordCode, "Missing code");
@@ -6926,12 +6926,12 @@ async function loader$r({ request }) {
6926
6926
  description: `Your Discord account "${member.displayName}" has been connected!`
6927
6927
  });
6928
6928
  }
6929
- const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6929
+ const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6930
6930
  __proto__: null,
6931
6931
  getDiscordAuthURL,
6932
- loader: loader$r
6932
+ loader: loader$m
6933
6933
  }, Symbol.toStringTag, { value: "Module" }));
6934
- async function loader$q() {
6934
+ async function loader$l() {
6935
6935
  return json({ discordAuthUrl: getDiscordAuthURL() });
6936
6936
  }
6937
6937
  function useDiscordCTALink({
@@ -7030,11 +7030,11 @@ function DiscordRoute() {
7030
7030
  ] }) })
7031
7031
  ] });
7032
7032
  }
7033
- const route20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7033
+ const route15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7034
7034
  __proto__: null,
7035
7035
  DiscordCTA,
7036
7036
  default: DiscordRoute,
7037
- loader: loader$q,
7037
+ loader: loader$l,
7038
7038
  useDiscordCTALink
7039
7039
  }, Symbol.toStringTag, { value: "Module" }));
7040
7040
  function DiscordChat() {
@@ -7574,7 +7574,7 @@ const SetPlaygroundSchema = z$1.object({
7574
7574
  appName: z$1.string(),
7575
7575
  reset: z$1.string().nullable().optional().transform((v) => v === "true")
7576
7576
  });
7577
- async function action$9({ request }) {
7577
+ async function action$8({ request }) {
7578
7578
  ensureUndeployed();
7579
7579
  const formData = await request.formData();
7580
7580
  const rawData = {
@@ -7744,12 +7744,12 @@ function SetAppToPlayground({ appName }) {
7744
7744
  }
7745
7745
  );
7746
7746
  }
7747
- const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7747
+ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7748
7748
  __proto__: null,
7749
7749
  PlaygroundChooser,
7750
7750
  SetAppToPlayground,
7751
7751
  SetPlayground,
7752
- action: action$9
7752
+ action: action$8
7753
7753
  }, Symbol.toStringTag, { value: "Module" }));
7754
7754
  function PlaygroundWindow({
7755
7755
  playgroundAppName,
@@ -7868,7 +7868,7 @@ function ButtonLink({
7868
7868
  }
7869
7869
  ) });
7870
7870
  }
7871
- async function action$8({ request }) {
7871
+ async function action$7({ request }) {
7872
7872
  ensureUndeployed();
7873
7873
  const formData = await request.formData();
7874
7874
  const intent = formData.get("intent");
@@ -7997,12 +7997,12 @@ function AppStarter({ name }) {
7997
7997
  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" }) })
7998
7998
  ] });
7999
7999
  }
8000
- const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8000
+ const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8001
8001
  __proto__: null,
8002
8002
  AppStarter,
8003
8003
  AppStopper,
8004
8004
  PortStopper,
8005
- action: action$8
8005
+ action: action$7
8006
8006
  }, Symbol.toStringTag, { value: "Module" }));
8007
8007
  const historyCallDataSchema = z$1.intersection(
8008
8008
  z$1.object({
@@ -8474,7 +8474,7 @@ function checkFileExists(file) {
8474
8474
  () => false
8475
8475
  );
8476
8476
  }
8477
- async function action$7({ request }) {
8477
+ async function action$6({ request }) {
8478
8478
  var _a2, _b2;
8479
8479
  ensureUndeployed();
8480
8480
  const formData = await request.formData();
@@ -8537,10 +8537,10 @@ function UpdateMdxCache({
8537
8537
  )
8538
8538
  ] });
8539
8539
  }
8540
- const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8540
+ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8541
8541
  __proto__: null,
8542
8542
  UpdateMdxCache,
8543
- action: action$7
8543
+ action: action$6
8544
8544
  }, Symbol.toStringTag, { value: "Module" }));
8545
8545
  const StepContext = React.createContext(null);
8546
8546
  function useStepContext() {
@@ -9125,7 +9125,7 @@ const testEventSchema = z$1.union([
9125
9125
  })
9126
9126
  ]);
9127
9127
  const testEventQueueSchema = z$1.array(testEventSchema);
9128
- async function loader$p({ request }) {
9128
+ async function loader$k({ request }) {
9129
9129
  ensureUndeployed();
9130
9130
  const url = new URL(request.url);
9131
9131
  const name = url.searchParams.get("name");
@@ -9202,7 +9202,7 @@ async function loader$p({ request }) {
9202
9202
  };
9203
9203
  });
9204
9204
  }
9205
- async function action$6({ request }) {
9205
+ async function action$5({ request }) {
9206
9206
  var _a2;
9207
9207
  ensureUndeployed();
9208
9208
  const formData = await request.formData();
@@ -9445,14 +9445,14 @@ function StopTest({
9445
9445
  )
9446
9446
  ] });
9447
9447
  }
9448
- const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9448
+ const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9449
9449
  __proto__: null,
9450
9450
  ClearTest,
9451
9451
  StopTest,
9452
9452
  TestOutput,
9453
9453
  TestRunner,
9454
- action: action$6,
9455
- loader: loader$p
9454
+ action: action$5,
9455
+ loader: loader$k
9456
9456
  }, Symbol.toStringTag, { value: "Module" }));
9457
9457
  function Tests({
9458
9458
  appInfo: playgroundAppInfo,
@@ -9849,7 +9849,7 @@ const meta$3 = ({
9849
9849
  }
9850
9850
  ];
9851
9851
  };
9852
- async function loader$o({ request, params }) {
9852
+ async function loader$j({ request, params }) {
9853
9853
  var _a2, _b2;
9854
9854
  const timings = makeTimings("exerciseStepTypeLoader");
9855
9855
  const workshopTitle = await getWorkshopTitle();
@@ -10283,10 +10283,10 @@ const route6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
10283
10283
  ErrorBoundary: ErrorBoundary$1,
10284
10284
  default: ExercisePartRoute,
10285
10285
  headers: headers$4,
10286
- loader: loader$o,
10286
+ loader: loader$j,
10287
10287
  meta: meta$3
10288
10288
  }, Symbol.toStringTag, { value: "Module" }));
10289
- async function loader$n({ params }) {
10289
+ async function loader$i({ params }) {
10290
10290
  const problemApp = await getExerciseApp({ ...params, type: "problem" }).then(
10291
10291
  (a) => isProblemApp(a) ? a : null
10292
10292
  );
@@ -10304,7 +10304,7 @@ async function loader$n({ params }) {
10304
10304
  }
10305
10305
  const route7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10306
10306
  __proto__: null,
10307
- loader: loader$n
10307
+ loader: loader$i
10308
10308
  }, Symbol.toStringTag, { value: "Module" }));
10309
10309
  const meta$2 = ({
10310
10310
  data,
@@ -10322,7 +10322,7 @@ const meta$2 = ({
10322
10322
  }
10323
10323
  ];
10324
10324
  };
10325
- async function loader$m({ request, params }) {
10325
+ async function loader$h({ request, params }) {
10326
10326
  const timings = makeTimings("exerciseFinishedLoader");
10327
10327
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
10328
10328
  const exercise = await getExercise(params.exerciseNumber, {
@@ -10487,15 +10487,15 @@ const route8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
10487
10487
  __proto__: null,
10488
10488
  default: ExerciseFinished$1,
10489
10489
  headers: headers$3,
10490
- loader: loader$m,
10490
+ loader: loader$h,
10491
10491
  meta: meta$2
10492
10492
  }, Symbol.toStringTag, { value: "Module" }));
10493
- async function loader$l({ request }) {
10493
+ async function loader$g({ request }) {
10494
10494
  ensureUndeployed();
10495
10495
  await requireAuthInfo({ request });
10496
10496
  return json({ discordAuthUrl: getDiscordAuthURL() });
10497
10497
  }
10498
- async function action$5({ request }) {
10498
+ async function action$4({ request }) {
10499
10499
  ensureUndeployed();
10500
10500
  const formData = await request.formData();
10501
10501
  const intent = formData.get("intent");
@@ -10600,9 +10600,9 @@ function Account() {
10600
10600
  }
10601
10601
  const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10602
10602
  __proto__: null,
10603
- action: action$5,
10603
+ action: action$4,
10604
10604
  default: Account,
10605
- loader: loader$l
10605
+ loader: loader$g
10606
10606
  }, Symbol.toStringTag, { value: "Module" }));
10607
10607
  async function resolveApps({
10608
10608
  request,
@@ -10672,7 +10672,7 @@ async function compileTs(filePath, fullPath, {
10672
10672
  }
10673
10673
  });
10674
10674
  }
10675
- async function loader$k({ request, params }) {
10675
+ async function loader$f({ request, params }) {
10676
10676
  const timings = makeTimings("app-file");
10677
10677
  const { fileApp, app } = await resolveApps({ request, params, timings });
10678
10678
  if (!fileApp || !app) {
@@ -10728,10 +10728,10 @@ async function loader$k({ request, params }) {
10728
10728
  }
10729
10729
  const route10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10730
10730
  __proto__: null,
10731
- loader: loader$k
10731
+ loader: loader$f
10732
10732
  }, Symbol.toStringTag, { value: "Module" }));
10733
- async function loader$j(args) {
10734
- const api = await getApiModule$1(args);
10733
+ async function loader$e(args) {
10734
+ const api = await getApiModule(args);
10735
10735
  invariantResponse(
10736
10736
  api.mod.loader,
10737
10737
  "Attempted to make a GET request to the api endpoint but the api module does not export a loader function",
@@ -10744,8 +10744,8 @@ async function loader$j(args) {
10744
10744
  api.cleanupError(error);
10745
10745
  }
10746
10746
  }
10747
- async function action$4(args) {
10748
- const api = await getApiModule$1(args);
10747
+ async function action$3(args) {
10748
+ const api = await getApiModule(args);
10749
10749
  invariantResponse(
10750
10750
  api.mod.action,
10751
10751
  "Attempted to make a non-GET request to the api endpoint but the api module does not export an action function",
@@ -10758,11 +10758,11 @@ async function action$4(args) {
10758
10758
  api.cleanupError(error);
10759
10759
  }
10760
10760
  }
10761
- const ApiModuleSchema$1 = z$1.object({
10761
+ const ApiModuleSchema = z$1.object({
10762
10762
  loader: z$1.function().optional(),
10763
10763
  action: z$1.function().optional()
10764
10764
  });
10765
- async function getApiModule$1({ request, params }) {
10765
+ async function getApiModule({ request, params }) {
10766
10766
  const timings = makeTimings("app-api");
10767
10767
  const { fileApp, app } = await resolveApps({ request, params, timings });
10768
10768
  if (!fileApp || !app) {
@@ -10786,7 +10786,14 @@ async function getApiModule$1({ request, params }) {
10786
10786
  );
10787
10787
  }
10788
10788
  const { outputFiles, errors } = await compileTs(apiFile, app.fullPath, {
10789
- esbuildOptions: { platform: "node" },
10789
+ esbuildOptions: {
10790
+ platform: "node",
10791
+ packages: "external",
10792
+ // just adds noise to errors and doesn't appear to help with debugging
10793
+ sourcemap: false,
10794
+ // remove the process.env define
10795
+ define: {}
10796
+ },
10790
10797
  request,
10791
10798
  timings
10792
10799
  });
@@ -10804,7 +10811,7 @@ async function getApiModule$1({ request, params }) {
10804
10811
  /* @vite-ignore */
10805
10812
  dataUrl
10806
10813
  ).catch(cleanupError);
10807
- const apiModule = ApiModuleSchema$1.safeParse(mod);
10814
+ const apiModule = ApiModuleSchema.safeParse(mod);
10808
10815
  if (!apiModule.success) {
10809
10816
  throw new Response(
10810
10817
  `Invalid api module. It should export a loader and/or action: ${apiModule.error.message}`,
@@ -10824,10 +10831,78 @@ async function getApiModule$1({ request, params }) {
10824
10831
  }
10825
10832
  const route11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10826
10833
  __proto__: null,
10827
- action: action$4,
10828
- loader: loader$j
10834
+ action: action$3,
10835
+ loader: loader$e
10836
+ }, Symbol.toStringTag, { value: "Module" }));
10837
+ async function loader$d({ request, params }) {
10838
+ const timings = makeTimings("epic_ws script");
10839
+ const { fileApp, app } = await resolveApps({ request, params, timings });
10840
+ if (!fileApp || !app) {
10841
+ throw new Response(`Apps not found`, { status: 404 });
10842
+ }
10843
+ if (app.dev.type === "script") {
10844
+ return redirect(getBaseUrl({ request, port: app.dev.portNumber }));
10845
+ }
10846
+ const relevantPaths = Array.from(/* @__PURE__ */ new Set([app.fullPath, fileApp.fullPath]));
10847
+ const js = (
10848
+ /* javascript */
10849
+ `
10850
+ function epicLiveReloadConnect(config) {
10851
+ const protocol = location.protocol === "https:" ? "wss:" : "ws:";
10852
+ const host = location.hostname;
10853
+ const port = location.port;
10854
+ const socketPath = protocol + "//" + host + ":" + port + "/__ws";
10855
+ const ws = new WebSocket(socketPath);
10856
+ ws.onmessage = (message) => {
10857
+ const event = JSON.parse(message.data);
10858
+ if (event.type !== 'epicshop:file-change') return;
10859
+ const { filePaths } = event.data;
10860
+ if (${JSON.stringify(relevantPaths)}.some(p => filePaths.some(filePath => filePath.startsWith(p)))) {
10861
+ console.log(
10862
+ ['🐨 Reloading', window.frameElement?.getAttribute('title')]
10863
+ .filter(Boolean)
10864
+ .join(' '),
10865
+ );
10866
+ window.location.reload();
10867
+ }
10868
+ };
10869
+ ws.onopen = () => {
10870
+ if (config && typeof config.onOpen === "function") {
10871
+ config.onOpen();
10872
+ }
10873
+ };
10874
+ ws.onclose = (event) => {
10875
+ if (event.code === 1006) {
10876
+ console.log("Epic Web dev server web socket closed. Reconnecting...");
10877
+ setTimeout(
10878
+ () =>
10879
+ epicLiveReloadConnect({
10880
+ onOpen: () => window.location.reload(),
10881
+ }),
10882
+ 1000
10883
+ );
10884
+ }
10885
+ };
10886
+ ws.onerror = (error) => {
10887
+ console.log("Epic Web dev server web socket error:");
10888
+ console.error(error);
10889
+ };
10890
+ }
10891
+ epicLiveReloadConnect();
10892
+ `
10893
+ );
10894
+ return new Response(js, {
10895
+ headers: {
10896
+ "Content-Length": Buffer.byteLength(js).toString(),
10897
+ "Content-Type": "text/javascript"
10898
+ }
10899
+ });
10900
+ }
10901
+ const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10902
+ __proto__: null,
10903
+ loader: loader$d
10829
10904
  }, Symbol.toStringTag, { value: "Module" }));
10830
- async function loader$i({ request, params }) {
10905
+ async function loader$c({ request, params }) {
10831
10906
  var _a2;
10832
10907
  const timings = makeTimings("app");
10833
10908
  const { fileApp, app } = await resolveApps({ request, params, timings });
@@ -10911,79 +10986,11 @@ async function loader$i({ request, params }) {
10911
10986
  }
10912
10987
  });
10913
10988
  }
10914
- const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10915
- __proto__: null,
10916
- loader: loader$i
10917
- }, Symbol.toStringTag, { value: "Module" }));
10918
- async function loader$h({ request, params }) {
10919
- const timings = makeTimings("epic_ws script");
10920
- const { fileApp, app } = await resolveApps({ request, params, timings });
10921
- if (!fileApp || !app) {
10922
- throw new Response(`Apps not found`, { status: 404 });
10923
- }
10924
- if (app.dev.type === "script") {
10925
- return redirect(getBaseUrl({ request, port: app.dev.portNumber }));
10926
- }
10927
- const relevantPaths = Array.from(/* @__PURE__ */ new Set([app.fullPath, fileApp.fullPath]));
10928
- const js = (
10929
- /* javascript */
10930
- `
10931
- function epicLiveReloadConnect(config) {
10932
- const protocol = location.protocol === "https:" ? "wss:" : "ws:";
10933
- const host = location.hostname;
10934
- const port = location.port;
10935
- const socketPath = protocol + "//" + host + ":" + port + "/__ws";
10936
- const ws = new WebSocket(socketPath);
10937
- ws.onmessage = (message) => {
10938
- const event = JSON.parse(message.data);
10939
- if (event.type !== 'epicshop:file-change') return;
10940
- const { filePaths } = event.data;
10941
- if (${JSON.stringify(relevantPaths)}.some(p => filePaths.some(filePath => filePath.startsWith(p)))) {
10942
- console.log(
10943
- ['🐨 Reloading', window.frameElement?.getAttribute('title')]
10944
- .filter(Boolean)
10945
- .join(' '),
10946
- );
10947
- window.location.reload();
10948
- }
10949
- };
10950
- ws.onopen = () => {
10951
- if (config && typeof config.onOpen === "function") {
10952
- config.onOpen();
10953
- }
10954
- };
10955
- ws.onclose = (event) => {
10956
- if (event.code === 1006) {
10957
- console.log("Epic Web dev server web socket closed. Reconnecting...");
10958
- setTimeout(
10959
- () =>
10960
- epicLiveReloadConnect({
10961
- onOpen: () => window.location.reload(),
10962
- }),
10963
- 1000
10964
- );
10965
- }
10966
- };
10967
- ws.onerror = (error) => {
10968
- console.log("Epic Web dev server web socket error:");
10969
- console.error(error);
10970
- };
10971
- }
10972
- epicLiveReloadConnect();
10973
- `
10974
- );
10975
- return new Response(js, {
10976
- headers: {
10977
- "Content-Length": Buffer.byteLength(js).toString(),
10978
- "Content-Type": "text/javascript"
10979
- }
10980
- });
10981
- }
10982
10989
  const route13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10983
10990
  __proto__: null,
10984
- loader: loader$h
10991
+ loader: loader$c
10985
10992
  }, Symbol.toStringTag, { value: "Module" }));
10986
- async function loader$g({ request, params }) {
10993
+ async function loader$b({ request, params }) {
10987
10994
  var _a2;
10988
10995
  const timings = makeTimings("app_test_loader");
10989
10996
  const { testName } = params;
@@ -11123,495 +11130,11 @@ import(${JSON.stringify(testScriptPath)}).then(
11123
11130
  }
11124
11131
  const route14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11125
11132
  __proto__: null,
11126
- loader: loader$g
11133
+ loader: loader$b
11127
11134
  }, Symbol.toStringTag, { value: "Module" }));
11128
- async function loader$f({ request, params }) {
11129
- var _a2;
11130
- const timings = makeTimings("app");
11131
- const { id: appId } = params;
11132
- invariantResponse(appId, "App id is required");
11133
- const app = await getAppByName(appId, { request, timings });
11134
- const baseApp = isPlaygroundApp(app) ? await getAppByName(app.appName) : app;
11135
- if (!app) {
11136
- throw new Response(`App "${appId}" not found`, {
11137
- status: 404,
11138
- headers: { "Server-Timing": getServerTimeHeader(timings) }
11139
- });
11140
- }
11141
- if (app.dev.type === "script") {
11142
- return redirect(getBaseUrl({ request, port: app.dev.portNumber }), {
11143
- headers: { "Server-Timing": getServerTimeHeader(timings) }
11144
- });
11145
- }
11146
- if (app.dev.type !== "browser") {
11147
- throw new Response(
11148
- `App "${appId}" is not a browser app, its dev type is: "${app.dev.type}"`,
11149
- { status: 400 }
11150
- );
11151
- }
11152
- const htmlFile = path.join(app.fullPath, "index.html");
11153
- const hasHtml = await fsExtra.pathExists(htmlFile);
11154
- if (hasHtml) {
11155
- const html2 = await fsExtra.readFile(htmlFile);
11156
- return new Response(html2, {
11157
- headers: {
11158
- "Content-Length": Buffer.byteLength(html2).toString(),
11159
- "Content-Type": "text/html",
11160
- "Server-Timing": getServerTimeHeader(timings)
11161
- }
11162
- });
11163
- }
11164
- const indexFiles = (await fsExtra.readdir(app.fullPath)).filter(
11165
- (file) => file.startsWith("index.")
11166
- );
11167
- const indexCss = indexFiles.find((file) => file.endsWith("index.css"));
11168
- const indexJs = indexFiles.find((file) => file.endsWith("index.js"));
11169
- const indexTs = indexFiles.find((file) => file.endsWith("index.ts"));
11170
- const indexTsx = indexFiles.find((file) => file.endsWith("index.tsx"));
11171
- const scripts = [indexJs, indexTs, indexTsx].filter(Boolean);
11172
- if (scripts.length > 1) {
11173
- throw new Response(
11174
- `Only one index.(js|ts|tsx) file is allowed, found ${scripts.join(", ")}`,
11175
- { status: 400 }
11176
- );
11177
- }
11178
- const appTitle = app.title;
11179
- const workshopTitle = await getWorkshopTitle();
11180
- const baseAppTitle = isExerciseStepApp(baseApp) ? [
11181
- `${baseApp.stepNumber.toString().padStart(2, "0")}. ${baseApp.title}`,
11182
- `${baseApp.exerciseNumber.toString().padStart(2, "0")}. ${((_a2 = await getExercise(baseApp.exerciseNumber, { request, timings })) == null ? void 0 : _a2.title) ?? "Unknown"}`,
11183
- workshopTitle
11184
- ] : [(baseApp == null ? void 0 : baseApp.title) ?? "N/A"];
11185
- const title = (isExerciseStepApp(app) ? [
11186
- isProblemApp(app) ? "💪" : isSolutionApp(app) ? "🏁" : null,
11187
- ...baseAppTitle
11188
- ] : isPlaygroundApp(app) ? ["🛝", ...baseAppTitle] : [appTitle]).filter(Boolean).join(" | ");
11189
- const html = (
11190
- /* html */
11191
- `
11192
- <!DOCTYPE html>
11193
- <html>
11194
- <head>
11195
- <base href="${app.dev.pathname}" />
11196
- <meta charset="utf-8">
11197
- <meta name="viewport" content="width=device-width, initial-scale=1">
11198
- <title>${title}</title>
11199
- <link rel="stylesheet" href="/app-default.css">
11200
- ${indexCss ? `<link rel="stylesheet" href="${indexCss}">` : ""}
11201
- </head>
11202
- <body>
11203
- ${scripts.map((script) => `<script type="module" src="${script}"><\/script>`).join("\n")}
11204
- <script type="module" src="epic_ws.js"><\/script>
11205
- </body>
11206
- </html>
11207
- `
11208
- );
11209
- return new Response(html, {
11210
- headers: {
11211
- "Content-Length": Buffer.byteLength(html).toString(),
11212
- "Content-Type": "text/html",
11213
- "Server-Timing": getServerTimeHeader(timings)
11214
- }
11215
- });
11216
- }
11217
- const route15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11218
- __proto__: null,
11219
- loader: loader$f
11220
- }, Symbol.toStringTag, { value: "Module" }));
11221
- async function loader$e({ request, params }) {
11222
- const timings = makeTimings("app-file");
11223
- const { id: appId, "*": splat } = params;
11224
- const url = new URL(request.url);
11225
- const fileAppName = url.searchParams.get("fileAppName");
11226
- invariantResponse(appId, "App id is required");
11227
- invariantResponse(splat, "Splat is required");
11228
- const app = await getAppByName(appId);
11229
- const fileApp = fileAppName ? await getAppByName(fileAppName) : app;
11230
- if (!fileApp || !app) {
11231
- throw new Response(
11232
- `Apps with ids "${fileAppName}" (resolveDir) and "${appId}" (app) for resource "${splat}" not found`,
11233
- { status: 404 }
11234
- );
11235
- }
11236
- if (app.dev.type === "script") {
11237
- return redirect(getBaseUrl({ request, port: app.dev.portNumber }));
11238
- }
11239
- const filePath = path.join(fileApp.fullPath, splat);
11240
- const fileExists = await fsExtra.pathExists(filePath);
11241
- if (!fileExists) {
11242
- throw new Response("File not found", { status: 404 });
11243
- }
11244
- if (filePath.endsWith(".ts") || filePath.endsWith(".tsx")) {
11245
- const { outputFiles, errors } = await compileTs(filePath, app.fullPath, {
11246
- request,
11247
- timings
11248
- });
11249
- if (errors.length) {
11250
- console.error(`Failed to compile file "${filePath}"`);
11251
- console.error(errors);
11252
- throw new Response(errors.join("\n"), { status: 500 });
11253
- }
11254
- if (!(outputFiles == null ? void 0 : outputFiles[0])) {
11255
- throw new Response("Failed to compile file", { status: 500 });
11256
- }
11257
- const file = outputFiles[0].text;
11258
- return getFileResponse(file, { "Content-Type": "text/javascript" });
11259
- } else {
11260
- const file = await fsExtra.readFile(filePath);
11261
- const mimeType = mimeTypes.lookup(filePath) || "text/plain";
11262
- return getFileResponse(file, { "Content-Type": mimeType });
11263
- }
11264
- function getFileResponse(file, headers2 = {}) {
11265
- const etagValue = etag(file);
11266
- const ifNoneMatch = request.headers.get("if-none-match");
11267
- if (ifNoneMatch === etagValue) {
11268
- return new Response(null, { status: 304 });
11269
- }
11270
- return new Response(file, {
11271
- headers: combineHeaders(
11272
- {
11273
- "Content-Length": Buffer.byteLength(file).toString(),
11274
- "Server-Timing": timings.toString(),
11275
- ETag: etagValue
11276
- },
11277
- headers2
11278
- )
11279
- });
11280
- }
11281
- }
11282
- const route16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11283
- __proto__: null,
11284
- loader: loader$e
11285
- }, Symbol.toStringTag, { value: "Module" }));
11286
- async function loader$d(args) {
11287
- const api = await getApiModule(args);
11288
- invariantResponse(
11289
- api.mod.loader,
11290
- "Attempted to make a GET request to the api endpoint but the api module does not export a loader function",
11291
- { status: 405 }
11292
- );
11293
- try {
11294
- const result = await api.mod.loader(args);
11295
- return result;
11296
- } catch (error) {
11297
- api.cleanupError(error);
11298
- }
11299
- }
11300
- async function action$3(args) {
11301
- const api = await getApiModule(args);
11302
- invariantResponse(
11303
- api.mod.action,
11304
- "Attempted to make a non-GET request to the api endpoint but the api module does not export an action function",
11305
- { status: 405 }
11306
- );
11307
- try {
11308
- const result = await api.mod.action(args);
11309
- return result;
11310
- } catch (error) {
11311
- api.cleanupError(error);
11312
- }
11313
- }
11314
- const ApiModuleSchema = z$1.object({
11315
- loader: z$1.function().optional(),
11316
- action: z$1.function().optional()
11317
- });
11318
- async function getApiModule({ request, params }) {
11319
- const timings = makeTimings("app-api");
11320
- const { id: appId } = params;
11321
- const url = new URL(request.url);
11322
- const fileAppName = url.searchParams.get("fileAppName");
11323
- invariantResponse(appId, "App id is required");
11324
- const app = await getAppByName(appId);
11325
- const fileApp = fileAppName ? await getAppByName(fileAppName) : app;
11326
- if (!fileApp || !app) {
11327
- throw new Response(
11328
- `Apps with ids "${fileAppName}" (resolveDir) and "${appId}" (app) for api not found`,
11329
- { status: 404 }
11330
- );
11331
- }
11332
- if (app.dev.type === "script") {
11333
- throw redirect(getBaseUrl({ request, port: app.dev.portNumber }));
11334
- }
11335
- const apiFiles = (await fsExtra.readdir(app.fullPath)).filter((file) => /^api\.server\.(ts|tsx|js|jsx)$/.test(file)).map((f) => path$1.join(app.fullPath, f));
11336
- const apiFile = apiFiles[0];
11337
- if (!apiFile) {
11338
- throw new Response(
11339
- `No api.server.(ts|tsx|js|jsx) file found in "${app.fullPath}"`,
11340
- { status: 404 }
11341
- );
11342
- }
11343
- if (apiFiles.length > 1) {
11344
- throw new Response(
11345
- `Only one api.server.(ts|tsx|js|jsx) file is allowed, found ${apiFiles.join(", ")}`,
11346
- { status: 400 }
11347
- );
11348
- }
11349
- const { outputFiles, errors } = await compileTs(apiFile, app.fullPath, {
11350
- esbuildOptions: { platform: "node" },
11351
- request,
11352
- timings
11353
- });
11354
- if (errors.length) {
11355
- console.error(`Failed to compile file "${apiFile}"`);
11356
- console.error(errors);
11357
- throw new Response(errors.join("\n"), { status: 500 });
11358
- }
11359
- if (!(outputFiles == null ? void 0 : outputFiles[0])) {
11360
- throw new Response(`Failed to compile file "${apiFile}"`, { status: 500 });
11361
- }
11362
- const apiCode = outputFiles[0].text;
11363
- const dataUrl = `data:text/javascript;base64,${Buffer.from(apiCode).toString("base64")}`;
11364
- const mod = await import(
11365
- /* @vite-ignore */
11366
- dataUrl
11367
- ).catch(cleanupError);
11368
- const apiModule = ApiModuleSchema.safeParse(mod);
11369
- if (!apiModule.success) {
11370
- throw new Response(
11371
- `Invalid api module. It should export a loader and/or action: ${apiModule.error.message}`,
11372
- { status: 500 }
11373
- );
11374
- }
11375
- return {
11376
- mod: apiModule.data,
11377
- cleanupError
11378
- };
11379
- function cleanupError(error) {
11380
- if (apiFile && error instanceof Error && error.stack) {
11381
- error.stack = error.stack.replace(dataUrl, apiFile);
11382
- }
11383
- throw error;
11384
- }
11385
- }
11386
- const route17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11387
- __proto__: null,
11388
- action: action$3,
11389
- loader: loader$d
11390
- }, Symbol.toStringTag, { value: "Module" }));
11391
- async function loader$c({ request, params }) {
11392
- const { id: appId } = params;
11393
- const url = new URL(request.url);
11394
- const fileAppName = url.searchParams.get("fileAppName");
11395
- invariantResponse(appId, "App id is required");
11396
- const app = await getAppByName(appId);
11397
- const fileApp = fileAppName ? await getAppByName(fileAppName) : app;
11398
- if (!app || !fileApp) {
11399
- throw new Response(
11400
- `Apps with ids "${fileAppName}" (resolveDir) or "${appId}" (app) not found`,
11401
- { status: 404 }
11402
- );
11403
- }
11404
- if (app.dev.type === "script") {
11405
- return redirect(getBaseUrl({ request, port: app.dev.portNumber }));
11406
- }
11407
- const relevantPaths = Array.from(/* @__PURE__ */ new Set([app.fullPath, fileApp.fullPath]));
11408
- const js = (
11409
- /* javascript */
11410
- `
11411
- function epicLiveReloadConnect(config) {
11412
- const protocol = location.protocol === "https:" ? "wss:" : "ws:";
11413
- const host = location.hostname;
11414
- const port = location.port;
11415
- const socketPath = protocol + "//" + host + ":" + port + "/__ws";
11416
- const ws = new WebSocket(socketPath);
11417
- ws.onmessage = (message) => {
11418
- const event = JSON.parse(message.data);
11419
- if (event.type !== 'epicshop:file-change') return;
11420
- const { filePaths } = event.data;
11421
- if (${JSON.stringify(relevantPaths)}.some(p => filePaths.some(filePath => filePath.startsWith(p)))) {
11422
- console.log(
11423
- ['🐨 Reloading', window.frameElement?.getAttribute('title')]
11424
- .filter(Boolean)
11425
- .join(' '),
11426
- );
11427
- window.location.reload();
11428
- }
11429
- };
11430
- ws.onopen = () => {
11431
- if (config && typeof config.onOpen === "function") {
11432
- config.onOpen();
11433
- }
11434
- };
11435
- ws.onclose = (event) => {
11436
- if (event.code === 1006) {
11437
- console.log("Epic Web dev server web socket closed. Reconnecting...");
11438
- setTimeout(
11439
- () =>
11440
- epicLiveReloadConnect({
11441
- onOpen: () => window.location.reload(),
11442
- }),
11443
- 1000
11444
- );
11445
- }
11446
- };
11447
- ws.onerror = (error) => {
11448
- console.log("Epic Web dev server web socket error:");
11449
- console.error(error);
11450
- };
11451
- }
11452
- epicLiveReloadConnect();
11453
- `
11454
- );
11455
- return new Response(js, {
11456
- headers: {
11457
- "Content-Length": Buffer.byteLength(js).toString(),
11458
- "Content-Type": "text/javascript"
11459
- }
11460
- });
11461
- }
11462
- const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11463
- __proto__: null,
11464
- loader: loader$c
11465
- }, Symbol.toStringTag, { value: "Module" }));
11466
- async function loader$b({ request, params }) {
11467
- var _a2;
11468
- const timings = makeTimings("app_test_loader");
11469
- const { id: appId, testName } = params;
11470
- invariantResponse(appId, "App id is required");
11471
- invariantResponse(testName, "Test name is required");
11472
- const app = await getAppByName(appId, { request, timings });
11473
- if (!app) {
11474
- throw new Response(`App "${appId}" not found`, {
11475
- status: 404,
11476
- headers: { "Server-Timing": getServerTimeHeader(timings) }
11477
- });
11478
- }
11479
- if (app.test.type !== "browser" || app.dev.type !== "browser") {
11480
- return redirectWithToast(
11481
- "/",
11482
- {
11483
- type: "error",
11484
- title: "Unsupported",
11485
- description: `Cannot load this app's tests in the browser`
11486
- },
11487
- { headers: { "Server-Timing": getServerTimeHeader(timings) } }
11488
- );
11489
- }
11490
- const testFile = app.test.testFiles.find((file) => file === testName);
11491
- if (!testFile) {
11492
- throw new Response(`Test "${testName}" not found`, {
11493
- status: 404,
11494
- headers: { "Server-Timing": getServerTimeHeader(timings) }
11495
- });
11496
- }
11497
- if (!/(js|ts|tsx)$/.test(testFile)) {
11498
- throw new Response(`Test "${testName}" is not a script`, {
11499
- status: 400,
11500
- headers: { "Server-Timing": getServerTimeHeader(timings) }
11501
- });
11502
- }
11503
- let testFileAppName = app.name;
11504
- if (isProblemApp(app)) {
11505
- testFileAppName = isProblemApp(app) ? app.solutionName : null;
11506
- }
11507
- if (isPlaygroundApp(app)) {
11508
- const appBasis = await getAppByName(app.appName);
11509
- testFileAppName = isProblemApp(appBasis) ? appBasis.solutionName : null;
11510
- }
11511
- const testFileQueryString = testFileAppName ? `?fileAppName=${encodeURIComponent(testFileAppName)}` : "";
11512
- const testScriptPath = `${app.dev.pathname}${testFile}${testFileQueryString}`;
11513
- const testScriptSrc = (
11514
- /* javascript */
11515
- `
11516
- function logStatus(message) {
11517
- if (window.parent !== window) {
11518
- window.parent.postMessage(
11519
- { type: 'epicshop:test-status-update', ...message },
11520
- '*',
11521
- )
11522
- } else {
11523
- if (message.status === 'fail') {
11524
- console.error(message)
11525
- } else if (message.status === 'pending') {
11526
- console.info(message)
11527
- } else if (message.status === 'pass') {
11528
- console.log(message)
11529
- }
11530
- }
11531
- }
11532
- const testFile = ${JSON.stringify(testFile)}
11533
- logStatus({status: 'pending', timestamp: Date.now()})
11534
- import(${JSON.stringify(testScriptPath)}).then(
11535
- () => {
11536
- logStatus({ status: 'pass', timestamp: Date.now() })
11537
- },
11538
- error => {
11539
- logStatus({
11540
- status: 'fail',
11541
- error:
11542
- typeof error === 'string'
11543
- ? error
11544
- : typeof error === 'object' && error && 'message' in error
11545
- ? error.message
11546
- : 'unknown error',
11547
- timestamp: Date.now(),
11548
- })
11549
- throw error
11550
- },
11551
- )
11552
- `
11553
- );
11554
- const testScriptTag = `<script type="module">${testScriptSrc}<\/script>`;
11555
- const htmlFile = path.join(app.fullPath, "index.html");
11556
- const hasHtml = await fsExtra.pathExists(htmlFile);
11557
- if (hasHtml) {
11558
- const html2 = await fsExtra.readFile(htmlFile);
11559
- const testableHtml = html2.toString().replace(`</body>`, `${testScriptTag}</body>`);
11560
- return new Response(testableHtml, {
11561
- headers: {
11562
- "Content-Length": Buffer.byteLength(testableHtml).toString(),
11563
- "Content-Type": "text/html",
11564
- "Server-Timing": getServerTimeHeader(timings)
11565
- }
11566
- });
11567
- }
11568
- const indexFiles = (await fsExtra.readdir(app.fullPath)).filter(
11569
- (file) => file.startsWith("index.")
11570
- );
11571
- const indexCss = indexFiles.find((file) => file.endsWith("index.css"));
11572
- const appTitle = app.title;
11573
- const workshopTitle = await getWorkshopTitle();
11574
- const title = (isExerciseStepApp(app) ? [
11575
- isProblemApp(app) ? "🧪💪" : isSolutionApp(app) ? "🧪🏁" : null,
11576
- `${app.stepNumber.toString().padStart(2, "0")}. ${app.title}`,
11577
- `${app.exerciseNumber.toString().padStart(2, "0")}. ${((_a2 = await getExercise(app.exerciseNumber, { request, timings })) == null ? void 0 : _a2.title) ?? "Unknown"}`,
11578
- workshopTitle
11579
- ] : ["🧪", appTitle]).filter(Boolean).join(" | ");
11580
- const html = (
11581
- /* html */
11582
- `
11583
- <!DOCTYPE html>
11584
- <html>
11585
- <head>
11586
- <base href="${app.dev.pathname}" />
11587
- <meta charset="utf-8">
11588
- <meta name="viewport" content="width=device-width, initial-scale=1">
11589
- <title>${title}</title>
11590
- <link rel="stylesheet" href="/app-default.css">
11591
- ${indexCss ? `<link rel="stylesheet" href="${indexCss}">` : ""}
11592
- </head>
11593
- <body>
11594
- ${testScriptTag}
11595
- <script type="module" src="epic_ws.js${testFileQueryString}"><\/script>
11596
- </body>
11597
- </html>
11598
- `
11599
- );
11600
- return new Response(html, {
11601
- headers: {
11602
- "Content-Length": Buffer.byteLength(html).toString(),
11603
- "Content-Type": "text/html",
11604
- "Server-Timing": getServerTimeHeader(timings)
11605
- }
11606
- });
11607
- }
11608
- const route19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11609
- __proto__: null,
11610
- loader: loader$b
11611
- }, Symbol.toStringTag, { value: "Module" }));
11612
- const meta$1 = ({
11613
- matches
11614
- }) => {
11135
+ const meta$1 = ({
11136
+ matches
11137
+ }) => {
11615
11138
  var _a2;
11616
11139
  const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
11617
11140
  return [{ title: `🎉 ${rootData == null ? void 0 : rootData.workshopTitle}` }];
@@ -11749,7 +11272,7 @@ function Survey({
11749
11272
  )
11750
11273
  ] });
11751
11274
  }
11752
- const route21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11275
+ const route16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11753
11276
  __proto__: null,
11754
11277
  default: ExerciseFinished,
11755
11278
  headers: headers$2,
@@ -11881,7 +11404,7 @@ function Index() {
11881
11404
  function ErrorBoundary() {
11882
11405
  return /* @__PURE__ */ jsx(GeneralErrorBoundary, {});
11883
11406
  }
11884
- const route22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11407
+ const route17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11885
11408
  __proto__: null,
11886
11409
  ErrorBoundary,
11887
11410
  default: Index,
@@ -11982,7 +11505,7 @@ async function loader$8({ request }) {
11982
11505
  };
11983
11506
  });
11984
11507
  }
11985
- const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11508
+ const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11986
11509
  __proto__: null,
11987
11510
  EventSchema,
11988
11511
  loader: loader$8
@@ -12106,7 +11629,7 @@ function Logo({ className = "" }) {
12106
11629
  }
12107
11630
  );
12108
11631
  }
12109
- const route23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11632
+ const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12110
11633
  __proto__: null,
12111
11634
  action: action$2,
12112
11635
  default: Login,
@@ -12165,7 +11688,7 @@ function Support() {
12165
11688
  ] })
12166
11689
  ] });
12167
11690
  }
12168
- const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11691
+ const route19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12169
11692
  __proto__: null,
12170
11693
  default: Support
12171
11694
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12410,7 +11933,7 @@ function Pinger({
12410
11933
  )
12411
11934
  ] });
12412
11935
  }
12413
- const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11936
+ const route20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12414
11937
  __proto__: null,
12415
11938
  action: action$1,
12416
11939
  default: AdminLayout,
@@ -12421,7 +11944,7 @@ async function loader$5() {
12421
11944
  const apps = await getApps();
12422
11945
  return json({ apps });
12423
11946
  }
12424
- const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11947
+ const route21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12425
11948
  __proto__: null,
12426
11949
  loader: loader$5
12427
11950
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12433,7 +11956,7 @@ async function loader$4({ request }) {
12433
11956
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
12434
11957
  );
12435
11958
  }
12436
- const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11959
+ const route22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12437
11960
  __proto__: null,
12438
11961
  loader: loader$4
12439
11962
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12522,7 +12045,7 @@ function DiffViewer() {
12522
12045
  }
12523
12046
  );
12524
12047
  }
12525
- const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12048
+ const route23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12526
12049
  __proto__: null,
12527
12050
  default: DiffViewer,
12528
12051
  loader: loader$3
@@ -12535,7 +12058,7 @@ async function loader$2({ request }) {
12535
12058
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
12536
12059
  );
12537
12060
  }
12538
- const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12061
+ const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12539
12062
  __proto__: null,
12540
12063
  loader: loader$2
12541
12064
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12577,7 +12100,7 @@ function Onboarding() {
12577
12100
  /* @__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!" }) })
12578
12101
  ] });
12579
12102
  }
12580
- const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12103
+ const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12581
12104
  __proto__: null,
12582
12105
  action,
12583
12106
  default: Onboarding,
@@ -12602,11 +12125,11 @@ async function loader() {
12602
12125
  }
12603
12126
  return json({ processes, testProcesses: testProcesses2 });
12604
12127
  }
12605
- const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12128
+ const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12606
12129
  __proto__: null,
12607
12130
  loader
12608
12131
  }, Symbol.toStringTag, { value: "Module" }));
12609
- const serverManifest = { "entry": { "module": "/assets/entry.client-DBBrAxtJ.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.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-B02acrJe.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CXGQ7VS9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/client-hints-KnbHFIgn.js", "/assets/error-boundary-Bg54_knF.js", "/assets/progress-bar-DX6yYES2.js", "/assets/index-BL4aE6WC.js", "/assets/index-CLnz0tXz.js", "/assets/presence-u-05JV3Z.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/_-ByTWgb53.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/misc-CXGQ7VS9.js", "/assets/error-boundary-Bg54_knF.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-D7Qo_r0X.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/misc-CXGQ7VS9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/client-hints-KnbHFIgn.js", "/assets/progress-CBZt2pmu.js", "/assets/index-CLnz0tXz.js", "/assets/user-DiGtbaa7.js", "/assets/presence-u-05JV3Z.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-Bj9PyQQD.js", "imports": ["/assets/index-D1WEsmVZ.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-s_qbmGEJ.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-KnbHFIgn.js", "/assets/misc-CXGQ7VS9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/loading-D-DClzm1.js", "/assets/index-CLnz0tXz.js", "/assets/epic-video-Df7qGSN7.js", "/assets/progress-bar-DX6yYES2.js", "/assets/index-BfoHqrT5.js", "/assets/mdx-ytg-y2nh.js", "/assets/progress-CBZt2pmu.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-D1wwEMQx.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/misc-CXGQ7VS9.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-49l6Rvwp.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CXGQ7VS9.js", "/assets/client-hints-KnbHFIgn.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/loading-D-DClzm1.js", "/assets/index-CLnz0tXz.js", "/assets/epic-video-Df7qGSN7.js", "/assets/progress-bar-DX6yYES2.js", "/assets/mdx-ytg-y2nh.js", "/assets/user-DiGtbaa7.js", "/assets/index-BfoHqrT5.js", "/assets/diff-CT3-9rtW.js", "/assets/discord-CsluX01E.js", "/assets/index-BL4aE6WC.js", "/assets/button-DnQOyJAN.js", "/assets/use-event-source-DXlRuRq2.js", "/assets/error-boundary-Bg54_knF.js", "/assets/nav-chevrons-D8c9lJW6.js", "/assets/progress-CBZt2pmu.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-DJgT9oaU.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-KnbHFIgn.js", "/assets/misc-CXGQ7VS9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/loading-D-DClzm1.js", "/assets/index-CLnz0tXz.js", "/assets/epic-video-Df7qGSN7.js", "/assets/progress-bar-DX6yYES2.js", "/assets/index-BfoHqrT5.js", "/assets/nav-chevrons-D8c9lJW6.js", "/assets/mdx-ytg-y2nh.js", "/assets/progress-CBZt2pmu.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-Bk4o4AzZ.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/index-B8k-Gd1G.js", "/assets/button-DnQOyJAN.js", "/assets/misc-CXGQ7VS9.js", "/assets/user-DiGtbaa7.js", "/assets/presence-u-05JV3Z.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+/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+/kcd_ws[.js]": { "id": "routes/_app+/app.$appName+/kcd_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/kcd_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/kcd_ws_.js_-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.$id": { "id": "routes/_app+/app.$id", "parentId": "routes/_app+/_layout", "path": "app/:id", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app._id-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$id.$": { "id": "routes/_app+/app.$id.$", "parentId": "routes/_app+/app.$id", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app._id._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$id.api.$": { "id": "routes/_app+/app.$id.api.$", "parentId": "routes/_app+/app.$id", "path": "api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app._id.api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$id.epic_ws[.js]": { "id": "routes/_app+/app.$id.epic_ws[.js]", "parentId": "routes/_app+/app.$id", "path": "epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app._id.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$id.test.$testName": { "id": "routes/_app+/app.$id.test.$testName", "parentId": "routes/_app+/app.$id", "path": "test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app._id.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-CK7yz4w6.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/misc-CXGQ7VS9.js", "/assets/user-DiGtbaa7.js", "/assets/discord-CsluX01E.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-Dw3SJA8A.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-KnbHFIgn.js", "/assets/misc-CXGQ7VS9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/loading-D-DClzm1.js", "/assets/index-CLnz0tXz.js", "/assets/epic-video-Df7qGSN7.js", "/assets/progress-bar-DX6yYES2.js", "/assets/index-BfoHqrT5.js", "/assets/mdx-ytg-y2nh.js", "/assets/progress-CBZt2pmu.js", "/assets/nav-chevrons-D8c9lJW6.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-YgRENgjt.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-KnbHFIgn.js", "/assets/misc-CXGQ7VS9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/loading-D-DClzm1.js", "/assets/index-CLnz0tXz.js", "/assets/epic-video-Df7qGSN7.js", "/assets/progress-bar-DX6yYES2.js", "/assets/index-BfoHqrT5.js", "/assets/progress-CBZt2pmu.js", "/assets/error-boundary-Bg54_knF.js", "/assets/mdx-ytg-y2nh.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-CjvZj820.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/client-hints-KnbHFIgn.js", "/assets/use-event-source-DXlRuRq2.js", "/assets/index-B8k-Gd1G.js", "/assets/button-DnQOyJAN.js", "/assets/loading-D-DClzm1.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-QTdmLyE7.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/components-Dj3sm47B.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-BaPtC79F.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/misc-CXGQ7VS9.js", "/assets/tooltip-CVFWPOu0.js", "/assets/progress-CBZt2pmu.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/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-CLRdJhCn.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/misc-CXGQ7VS9.js", "/assets/client-hints-KnbHFIgn.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/loading-D-DClzm1.js", "/assets/index-CLnz0tXz.js", "/assets/epic-video-Df7qGSN7.js", "/assets/progress-bar-DX6yYES2.js", "/assets/mdx-ytg-y2nh.js", "/assets/diff-CT3-9rtW.js", "/assets/nav-chevrons-D8c9lJW6.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/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-BxcIdiGj.js", "imports": ["/assets/index-D1WEsmVZ.js", "/assets/clsx-B-dksMZM.js", "/assets/components-Dj3sm47B.js", "/assets/client-hints-KnbHFIgn.js", "/assets/misc-CXGQ7VS9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-CVFWPOu0.js", "/assets/loading-D-DClzm1.js", "/assets/index-CLnz0tXz.js", "/assets/button-DnQOyJAN.js", "/assets/epic-video-Df7qGSN7.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-DP2rzg_V.js", "imports": [], "css": [] } }, "url": "/assets/manifest-9027f7b6.js", "version": "9027f7b6" };
12132
+ const serverManifest = { "entry": { "module": "/assets/entry.client-XC5tKTFs.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.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-1Cc21xa6.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-C1rq7sPa.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/client-hints-B2pbEa_9.js", "/assets/error-boundary-tJSWbP6w.js", "/assets/progress-bar-BmszwN_j.js", "/assets/index-B8G3eD8F.js", "/assets/index-Dc59VwXx.js", "/assets/presence-BF7lWuVd.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/_-CsdFvUbA.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/misc-C1rq7sPa.js", "/assets/error-boundary-tJSWbP6w.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-C8fK4Z98.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/misc-C1rq7sPa.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/client-hints-B2pbEa_9.js", "/assets/progress-mfa_5CZx.js", "/assets/index-Dc59VwXx.js", "/assets/user-p2QVtDZI.js", "/assets/presence-BF7lWuVd.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-D1A2zp9y.js", "imports": ["/assets/index-BDqSZ0-h.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-DWZNkWZM.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-B2pbEa_9.js", "/assets/misc-C1rq7sPa.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/loading-DsjO-T0W.js", "/assets/index-Dc59VwXx.js", "/assets/epic-video-CxRPT-8l.js", "/assets/progress-bar-BmszwN_j.js", "/assets/index-BymJEf3X.js", "/assets/mdx-CZ_BPVoS.js", "/assets/progress-mfa_5CZx.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-P76hDsE6.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/misc-C1rq7sPa.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-BSoUgboG.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-C1rq7sPa.js", "/assets/client-hints-B2pbEa_9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/loading-DsjO-T0W.js", "/assets/index-Dc59VwXx.js", "/assets/epic-video-CxRPT-8l.js", "/assets/progress-bar-BmszwN_j.js", "/assets/mdx-CZ_BPVoS.js", "/assets/user-p2QVtDZI.js", "/assets/index-BymJEf3X.js", "/assets/diff-BQhWtDyS.js", "/assets/discord-BMNnObT9.js", "/assets/index-B8G3eD8F.js", "/assets/button-Da1iG51o.js", "/assets/use-event-source-DPLyo0Bh.js", "/assets/error-boundary-tJSWbP6w.js", "/assets/nav-chevrons-C-dN3WfT.js", "/assets/progress-mfa_5CZx.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-CpC-flTW.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-B2pbEa_9.js", "/assets/misc-C1rq7sPa.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/loading-DsjO-T0W.js", "/assets/index-Dc59VwXx.js", "/assets/epic-video-CxRPT-8l.js", "/assets/progress-bar-BmszwN_j.js", "/assets/index-BymJEf3X.js", "/assets/nav-chevrons-C-dN3WfT.js", "/assets/mdx-CZ_BPVoS.js", "/assets/progress-mfa_5CZx.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-BeKnQB9r.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/index-B8k-Gd1G.js", "/assets/button-Da1iG51o.js", "/assets/misc-C1rq7sPa.js", "/assets/user-p2QVtDZI.js", "/assets/presence-BF7lWuVd.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+/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-DdAReDkL.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/misc-C1rq7sPa.js", "/assets/user-p2QVtDZI.js", "/assets/discord-BMNnObT9.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-CMGRmsnb.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-B2pbEa_9.js", "/assets/misc-C1rq7sPa.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/loading-DsjO-T0W.js", "/assets/index-Dc59VwXx.js", "/assets/epic-video-CxRPT-8l.js", "/assets/progress-bar-BmszwN_j.js", "/assets/index-BymJEf3X.js", "/assets/mdx-CZ_BPVoS.js", "/assets/progress-mfa_5CZx.js", "/assets/nav-chevrons-C-dN3WfT.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-CQZ5FyEE.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.js", "/assets/clsx-B-dksMZM.js", "/assets/client-hints-B2pbEa_9.js", "/assets/misc-C1rq7sPa.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/loading-DsjO-T0W.js", "/assets/index-Dc59VwXx.js", "/assets/epic-video-CxRPT-8l.js", "/assets/progress-bar-BmszwN_j.js", "/assets/index-BymJEf3X.js", "/assets/progress-mfa_5CZx.js", "/assets/error-boundary-tJSWbP6w.js", "/assets/mdx-CZ_BPVoS.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-CcuvIoiW.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/client-hints-B2pbEa_9.js", "/assets/use-event-source-DPLyo0Bh.js", "/assets/index-B8k-Gd1G.js", "/assets/button-Da1iG51o.js", "/assets/loading-DsjO-T0W.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--jou3sWH.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/components-BM_XUa9h.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-DEZ-aTmx.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/misc-C1rq7sPa.js", "/assets/tooltip-BlVFw-is.js", "/assets/progress-mfa_5CZx.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/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-BDeBUdSw.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/misc-C1rq7sPa.js", "/assets/client-hints-B2pbEa_9.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/loading-DsjO-T0W.js", "/assets/index-Dc59VwXx.js", "/assets/epic-video-CxRPT-8l.js", "/assets/progress-bar-BmszwN_j.js", "/assets/mdx-CZ_BPVoS.js", "/assets/diff-BQhWtDyS.js", "/assets/nav-chevrons-C-dN3WfT.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/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-CfXLKsN3.js", "imports": ["/assets/index-BDqSZ0-h.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BM_XUa9h.js", "/assets/client-hints-B2pbEa_9.js", "/assets/misc-C1rq7sPa.js", "/assets/index-B8k-Gd1G.js", "/assets/tooltip-BlVFw-is.js", "/assets/loading-DsjO-T0W.js", "/assets/index-Dc59VwXx.js", "/assets/button-Da1iG51o.js", "/assets/epic-video-CxRPT-8l.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-DP2rzg_V.js", "imports": [], "css": [] } }, "url": "/assets/manifest-1656ae4d.js", "version": "1656ae4d" };
12610
12133
  const mode = "production";
12611
12134
  const assetsBuildDirectory = "build/client";
12612
12135
  const basename = "/";
@@ -12711,19 +12234,19 @@ const routes = {
12711
12234
  caseSensitive: void 0,
12712
12235
  module: route11
12713
12236
  },
12714
- "routes/_app+/app.$appName+/index": {
12715
- id: "routes/_app+/app.$appName+/index",
12237
+ "routes/_app+/app.$appName+/epic_ws[.js]": {
12238
+ id: "routes/_app+/app.$appName+/epic_ws[.js]",
12716
12239
  parentId: "routes/_app+/_layout",
12717
- path: "app/:appName/",
12718
- index: true,
12240
+ path: "app/:appName/epic_ws.js",
12241
+ index: void 0,
12719
12242
  caseSensitive: void 0,
12720
12243
  module: route12
12721
12244
  },
12722
- "routes/_app+/app.$appName+/kcd_ws[.js]": {
12723
- id: "routes/_app+/app.$appName+/kcd_ws[.js]",
12245
+ "routes/_app+/app.$appName+/index": {
12246
+ id: "routes/_app+/app.$appName+/index",
12724
12247
  parentId: "routes/_app+/_layout",
12725
- path: "app/:appName/kcd_ws.js",
12726
- index: void 0,
12248
+ path: "app/:appName/",
12249
+ index: true,
12727
12250
  caseSensitive: void 0,
12728
12251
  module: route13
12729
12252
  },
@@ -12735,53 +12258,13 @@ const routes = {
12735
12258
  caseSensitive: void 0,
12736
12259
  module: route14
12737
12260
  },
12738
- "routes/_app+/app.$id": {
12739
- id: "routes/_app+/app.$id",
12740
- parentId: "routes/_app+/_layout",
12741
- path: "app/:id",
12742
- index: void 0,
12743
- caseSensitive: void 0,
12744
- module: route15
12745
- },
12746
- "routes/_app+/app.$id.$": {
12747
- id: "routes/_app+/app.$id.$",
12748
- parentId: "routes/_app+/app.$id",
12749
- path: "*",
12750
- index: void 0,
12751
- caseSensitive: void 0,
12752
- module: route16
12753
- },
12754
- "routes/_app+/app.$id.api.$": {
12755
- id: "routes/_app+/app.$id.api.$",
12756
- parentId: "routes/_app+/app.$id",
12757
- path: "api/*",
12758
- index: void 0,
12759
- caseSensitive: void 0,
12760
- module: route17
12761
- },
12762
- "routes/_app+/app.$id.epic_ws[.js]": {
12763
- id: "routes/_app+/app.$id.epic_ws[.js]",
12764
- parentId: "routes/_app+/app.$id",
12765
- path: "epic_ws.js",
12766
- index: void 0,
12767
- caseSensitive: void 0,
12768
- module: route18
12769
- },
12770
- "routes/_app+/app.$id.test.$testName": {
12771
- id: "routes/_app+/app.$id.test.$testName",
12772
- parentId: "routes/_app+/app.$id",
12773
- path: "test/:testName",
12774
- index: void 0,
12775
- caseSensitive: void 0,
12776
- module: route19
12777
- },
12778
12261
  "routes/_app+/discord": {
12779
12262
  id: "routes/_app+/discord",
12780
12263
  parentId: "routes/_app+/_layout",
12781
12264
  path: "discord",
12782
12265
  index: void 0,
12783
12266
  caseSensitive: void 0,
12784
- module: route20
12267
+ module: route15
12785
12268
  },
12786
12269
  "routes/_app+/finished": {
12787
12270
  id: "routes/_app+/finished",
@@ -12789,7 +12272,7 @@ const routes = {
12789
12272
  path: "finished",
12790
12273
  index: void 0,
12791
12274
  caseSensitive: void 0,
12792
- module: route21
12275
+ module: route16
12793
12276
  },
12794
12277
  "routes/_app+/index": {
12795
12278
  id: "routes/_app+/index",
@@ -12797,7 +12280,7 @@ const routes = {
12797
12280
  path: void 0,
12798
12281
  index: true,
12799
12282
  caseSensitive: void 0,
12800
- module: route22
12283
+ module: route17
12801
12284
  },
12802
12285
  "routes/_app+/login": {
12803
12286
  id: "routes/_app+/login",
@@ -12805,7 +12288,7 @@ const routes = {
12805
12288
  path: "login",
12806
12289
  index: void 0,
12807
12290
  caseSensitive: void 0,
12808
- module: route23
12291
+ module: route18
12809
12292
  },
12810
12293
  "routes/_app+/support": {
12811
12294
  id: "routes/_app+/support",
@@ -12813,7 +12296,7 @@ const routes = {
12813
12296
  path: "support",
12814
12297
  index: void 0,
12815
12298
  caseSensitive: void 0,
12816
- module: route24
12299
+ module: route19
12817
12300
  },
12818
12301
  "routes/admin+/_layout": {
12819
12302
  id: "routes/admin+/_layout",
@@ -12821,7 +12304,7 @@ const routes = {
12821
12304
  path: "admin",
12822
12305
  index: void 0,
12823
12306
  caseSensitive: void 0,
12824
- module: route25
12307
+ module: route20
12825
12308
  },
12826
12309
  "routes/admin+/apps": {
12827
12310
  id: "routes/admin+/apps",
@@ -12829,7 +12312,7 @@ const routes = {
12829
12312
  path: "apps",
12830
12313
  index: void 0,
12831
12314
  caseSensitive: void 0,
12832
- module: route26
12315
+ module: route21
12833
12316
  },
12834
12317
  "routes/apps": {
12835
12318
  id: "routes/apps",
@@ -12837,7 +12320,7 @@ const routes = {
12837
12320
  path: "apps",
12838
12321
  index: void 0,
12839
12322
  caseSensitive: void 0,
12840
- module: route27
12323
+ module: route22
12841
12324
  },
12842
12325
  "routes/diff": {
12843
12326
  id: "routes/diff",
@@ -12845,7 +12328,7 @@ const routes = {
12845
12328
  path: "diff",
12846
12329
  index: void 0,
12847
12330
  caseSensitive: void 0,
12848
- module: route28
12331
+ module: route23
12849
12332
  },
12850
12333
  "routes/discord.callback": {
12851
12334
  id: "routes/discord.callback",
@@ -12853,7 +12336,7 @@ const routes = {
12853
12336
  path: "discord/callback",
12854
12337
  index: void 0,
12855
12338
  caseSensitive: void 0,
12856
- module: route29
12339
+ module: route24
12857
12340
  },
12858
12341
  "routes/exercises": {
12859
12342
  id: "routes/exercises",
@@ -12861,7 +12344,7 @@ const routes = {
12861
12344
  path: "exercises",
12862
12345
  index: void 0,
12863
12346
  caseSensitive: void 0,
12864
- module: route30
12347
+ module: route25
12865
12348
  },
12866
12349
  "routes/launch-editor": {
12867
12350
  id: "routes/launch-editor",
@@ -12869,7 +12352,7 @@ const routes = {
12869
12352
  path: "launch-editor",
12870
12353
  index: void 0,
12871
12354
  caseSensitive: void 0,
12872
- module: route31
12355
+ module: route26
12873
12356
  },
12874
12357
  "routes/login-sse": {
12875
12358
  id: "routes/login-sse",
@@ -12877,7 +12360,7 @@ const routes = {
12877
12360
  path: "login-sse",
12878
12361
  index: void 0,
12879
12362
  caseSensitive: void 0,
12880
- module: route32
12363
+ module: route27
12881
12364
  },
12882
12365
  "routes/onboarding": {
12883
12366
  id: "routes/onboarding",
@@ -12885,7 +12368,7 @@ const routes = {
12885
12368
  path: "onboarding",
12886
12369
  index: void 0,
12887
12370
  caseSensitive: void 0,
12888
- module: route33
12371
+ module: route28
12889
12372
  },
12890
12373
  "routes/processes": {
12891
12374
  id: "routes/processes",
@@ -12893,7 +12376,7 @@ const routes = {
12893
12376
  path: "processes",
12894
12377
  index: void 0,
12895
12378
  caseSensitive: void 0,
12896
- module: route34
12379
+ module: route29
12897
12380
  },
12898
12381
  "routes/progress": {
12899
12382
  id: "routes/progress",
@@ -12901,7 +12384,7 @@ const routes = {
12901
12384
  path: "progress",
12902
12385
  index: void 0,
12903
12386
  caseSensitive: void 0,
12904
- module: route35
12387
+ module: route30
12905
12388
  },
12906
12389
  "routes/set-playground": {
12907
12390
  id: "routes/set-playground",
@@ -12909,7 +12392,7 @@ const routes = {
12909
12392
  path: "set-playground",
12910
12393
  index: void 0,
12911
12394
  caseSensitive: void 0,
12912
- module: route36
12395
+ module: route31
12913
12396
  },
12914
12397
  "routes/start": {
12915
12398
  id: "routes/start",
@@ -12917,7 +12400,7 @@ const routes = {
12917
12400
  path: "start",
12918
12401
  index: void 0,
12919
12402
  caseSensitive: void 0,
12920
- module: route37
12403
+ module: route32
12921
12404
  },
12922
12405
  "routes/test": {
12923
12406
  id: "routes/test",
@@ -12925,7 +12408,7 @@ const routes = {
12925
12408
  path: "test",
12926
12409
  index: void 0,
12927
12410
  caseSensitive: void 0,
12928
- module: route38
12411
+ module: route33
12929
12412
  },
12930
12413
  "routes/theme/index": {
12931
12414
  id: "routes/theme/index",
@@ -12933,7 +12416,7 @@ const routes = {
12933
12416
  path: "theme",
12934
12417
  index: void 0,
12935
12418
  caseSensitive: void 0,
12936
- module: route39
12419
+ module: route34
12937
12420
  },
12938
12421
  "routes/update-mdx-cache": {
12939
12422
  id: "routes/update-mdx-cache",
@@ -12941,7 +12424,7 @@ const routes = {
12941
12424
  path: "update-mdx-cache",
12942
12425
  index: void 0,
12943
12426
  caseSensitive: void 0,
12944
- module: route40
12427
+ module: route35
12945
12428
  },
12946
12429
  "routes/video-player/index": {
12947
12430
  id: "routes/video-player/index",
@@ -12949,7 +12432,7 @@ const routes = {
12949
12432
  path: "video-player",
12950
12433
  index: void 0,
12951
12434
  caseSensitive: void 0,
12952
- module: route41
12435
+ module: route36
12953
12436
  }
12954
12437
  };
12955
12438
  export {