@epic-web/workshop-app 5.3.7 → 5.3.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 (54) hide show
  1. package/build/client/assets/{_exerciseNumber-BnwWTYFw.js → _exerciseNumber-DvMYZgqk.js} +2 -2
  2. package/build/client/assets/{_exerciseNumber-BnwWTYFw.js.map → _exerciseNumber-DvMYZgqk.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber_.finished-BfeMSie-.js → _exerciseNumber_.finished-DYN2QHN6.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber_.finished-BfeMSie-.js.map → _exerciseNumber_.finished-DYN2QHN6.js.map} +1 -1
  5. package/build/client/assets/{_layout-Bpho30KN.js → _layout-BH5PQW0M.js} +2 -2
  6. package/build/client/assets/{_layout-Bpho30KN.js.map → _layout-BH5PQW0M.js.map} +1 -1
  7. package/build/client/assets/{_layout-pUNfVRe2.js → _layout-BK7mLImi.js} +2 -2
  8. package/build/client/assets/{_layout-pUNfVRe2.js.map → _layout-BK7mLImi.js.map} +1 -1
  9. package/build/client/assets/account-B5baO5pg.js +2 -0
  10. package/build/client/assets/account-B5baO5pg.js.map +1 -0
  11. package/build/client/assets/{diff-CyIaJAoJ.js → diff-C2Hm_DHX.js} +2 -2
  12. package/build/client/assets/{diff-CyIaJAoJ.js.map → diff-C2Hm_DHX.js.map} +1 -1
  13. package/build/client/assets/{diff-Cnw7IcG5.js → diff-CbIF8Oq1.js} +2 -2
  14. package/build/client/assets/{diff-Cnw7IcG5.js.map → diff-CbIF8Oq1.js.map} +1 -1
  15. package/build/client/assets/discord-BnQDHWJj.js +2 -0
  16. package/build/client/assets/discord-BnQDHWJj.js.map +1 -0
  17. package/build/client/assets/discord-DcHxc30v.js +2 -0
  18. package/build/client/assets/discord-DcHxc30v.js.map +1 -0
  19. package/build/client/assets/{epic-video-1XLXSFCL.js → epic-video-Bxtz3elt.js} +2 -2
  20. package/build/client/assets/{epic-video-1XLXSFCL.js.map → epic-video-Bxtz3elt.js.map} +1 -1
  21. package/build/client/assets/{finished-DjF_kSoF.js → finished--PGQDzya.js} +2 -2
  22. package/build/client/assets/{finished-DjF_kSoF.js.map → finished--PGQDzya.js.map} +1 -1
  23. package/build/client/assets/index-C2MH9l6b.js +2 -0
  24. package/build/client/assets/index-C2MH9l6b.js.map +1 -0
  25. package/build/client/assets/{index-f5Q6XZEy.js → index-oZkQrXic.js} +2 -2
  26. package/build/client/assets/{index-f5Q6XZEy.js.map → index-oZkQrXic.js.map} +1 -1
  27. package/build/client/assets/manifest-7f4f8707.js +1 -0
  28. package/build/client/assets/{mdx-DiFCTSLR.js → mdx-DIAWAXtT.js} +2 -2
  29. package/build/client/assets/{mdx-DiFCTSLR.js.map → mdx-DIAWAXtT.js.map} +1 -1
  30. package/build/client/assets/{onboarding-DXICEaMi.js → onboarding-BAVmCIKn.js} +2 -2
  31. package/build/client/assets/{onboarding-DXICEaMi.js.map → onboarding-BAVmCIKn.js.map} +1 -1
  32. package/build/client/assets/root-DCfiv1cO.js.map +1 -1
  33. package/build/client/assets/{test-CvzcNTDp.js → test-3x2HHA0t.js} +2 -2
  34. package/build/client/assets/{test-CvzcNTDp.js.map → test-3x2HHA0t.js.map} +1 -1
  35. package/build/client/assets/{tests-Bp85P9FF.js → tests-GmyhBOwD.js} +2 -2
  36. package/build/client/assets/{tests-Bp85P9FF.js.map → tests-GmyhBOwD.js.map} +1 -1
  37. package/build/client/assets/user-CFunCRfr.js +2 -0
  38. package/build/client/assets/user-CFunCRfr.js.map +1 -0
  39. package/build/server/index.js +117 -208
  40. package/build/server/index.js.map +1 -1
  41. package/package.json +3 -3
  42. package/build/client/assets/account-RJjysGnp.js +0 -2
  43. package/build/client/assets/account-RJjysGnp.js.map +0 -1
  44. package/build/client/assets/discord-DxisvcaU.js +0 -2
  45. package/build/client/assets/discord-DxisvcaU.js.map +0 -1
  46. package/build/client/assets/discord-lXkS53K3.js +0 -2
  47. package/build/client/assets/discord-lXkS53K3.js.map +0 -1
  48. package/build/client/assets/discord.callback-l0sNRNKZ.js +0 -2
  49. package/build/client/assets/discord.callback-l0sNRNKZ.js.map +0 -1
  50. package/build/client/assets/index-DZ0It6pH.js +0 -2
  51. package/build/client/assets/index-DZ0It6pH.js.map +0 -1
  52. package/build/client/assets/manifest-9328c766.js +0 -1
  53. package/build/client/assets/user-DJiL1Lk-.js +0 -2
  54. package/build/client/assets/user-DJiL1Lk-.js.map +0 -1
@@ -6,7 +6,7 @@ import { isbot } from "isbot";
6
6
  import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
7
7
  import path from "node:path";
8
8
  import { makeSingletonCache, cachified, fsCache, deleteCache, compiledCodeCache, diffFilesCache, diffCodeCache, shouldForceFresh, getAllFileCacheEntries, ogCache } from "@epic-web/workshop-utils/cache.server";
9
- import { getPreferences, getAuthInfo, readOnboardingData, getDiscordMember, requireAuthInfo, DiscordMemberSchema, setDiscordMember, deleteDiscordInfo, deleteDb, setPresencePreferences, PlayerPreferencesSchema, setPlayerPreferences, setAuthInfo, markOnboardingVideoWatched } from "@epic-web/workshop-utils/db.server";
9
+ import { getPreferences, getAuthInfo, readOnboardingData, requireAuthInfo, deleteDb, setPresencePreferences, PlayerPreferencesSchema, setPlayerPreferences, setAuthInfo, markOnboardingVideoWatched } from "@epic-web/workshop-utils/db.server";
10
10
  import { z } from "zod";
11
11
  import { getWorkshopInstructions, getWorkshopFinished, getExercises, getApps, getPlaygroundAppName, extractNumbersAndTypeFromAppNameOrPath, getAppFromFile, getAppByName, isProblemApp, isPlaygroundApp, isExerciseStepApp, getExercise, isSolutionApp, isExampleApp, getRelativePath as getRelativePath$1, workshopRoot, modifiedTimes, getForceFreshForDir, setPlayground, requireExerciseApp, requireExercise, getExerciseApp, getAppDisplayName, getNextExerciseApp, getPrevExerciseApp, getAppPageRoute } from "@epic-web/workshop-utils/apps.server";
12
12
  import { getWorkshopConfig } from "@epic-web/workshop-utils/config.server";
@@ -557,10 +557,10 @@ function getDomainUrl(request) {
557
557
  function getBaseUrl({
558
558
  request,
559
559
  domain = request ? getDomainUrl(request) : window.location.origin,
560
- port: port2
560
+ port
561
561
  }) {
562
562
  const url = new URL(domain);
563
- url.port = String(port2);
563
+ url.port = String(port);
564
564
  return url.toString();
565
565
  }
566
566
  function combineHeaders(...headers2) {
@@ -877,7 +877,7 @@ function useTheme() {
877
877
  }
878
878
  return requestInfo.session.theme ?? hints.theme;
879
879
  }
880
- const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
880
+ const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
881
881
  __proto__: null,
882
882
  ThemeSwitch,
883
883
  action: action$b,
@@ -1620,7 +1620,7 @@ const meta$5 = ({ data: data2 }) => {
1620
1620
  requestInfo: data2.requestInfo
1621
1621
  });
1622
1622
  };
1623
- async function loader$y({ request }) {
1623
+ async function loader$w({ request }) {
1624
1624
  const timings = makeTimings("rootLoader");
1625
1625
  const workshopConfig = getWorkshopConfig();
1626
1626
  const {
@@ -1645,7 +1645,6 @@ async function loader$y({ request }) {
1645
1645
  const emptyProgress = [];
1646
1646
  return emptyProgress;
1647
1647
  }),
1648
- discordMember: getDiscordMember(),
1649
1648
  user: getUserInfo(),
1650
1649
  userHasAccess: userHasAccessToWorkshop({ request, timings }),
1651
1650
  apps: getApps({ request, timings })
@@ -1767,10 +1766,10 @@ const route0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1767
1766
  default: AppWithProviders,
1768
1767
  headers: headers$b,
1769
1768
  links,
1770
- loader: loader$y,
1769
+ loader: loader$w,
1771
1770
  meta: meta$5
1772
1771
  }, Symbol.toStringTag, { value: "Module" }));
1773
- async function loader$x({ params }) {
1772
+ async function loader$v({ params }) {
1774
1773
  const splat = params["*"];
1775
1774
  const segments = (splat == null ? void 0 : splat.split("/")) ?? [];
1776
1775
  if (segments.length > 0 && !isNaN(Number(segments[0]))) {
@@ -1808,7 +1807,7 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1808
1807
  __proto__: null,
1809
1808
  ErrorBoundary: ErrorBoundary$5,
1810
1809
  default: NotFound,
1811
- loader: loader$x
1810
+ loader: loader$v
1812
1811
  }, Symbol.toStringTag, { value: "Module" }));
1813
1812
  function makeMediaQueryStore(mediaQuery, serverSnapshot) {
1814
1813
  function getSnapshot() {
@@ -1917,8 +1916,8 @@ function useRevalidationWSImpl({ watchPaths }) {
1917
1916
  const socketQuery = socketParams.toString();
1918
1917
  const protocol = requestInfo.protocol === "https:" ? "wss:" : "ws:";
1919
1918
  const host = requestInfo.hostname;
1920
- const port2 = requestInfo.port;
1921
- const socketPath = `${protocol}//${host}:${port2}/__ws?${socketQuery}`;
1919
+ const port = requestInfo.port;
1920
+ const socketPath = `${protocol}//${host}:${port}/__ws?${socketQuery}`;
1922
1921
  useEffect(() => {
1923
1922
  if (!socketQuery) return;
1924
1923
  let ws = null;
@@ -2052,11 +2051,11 @@ function useUser() {
2052
2051
  function useOptionalDiscordMember() {
2053
2052
  var _a;
2054
2053
  const data = useRouteLoaderData("root");
2055
- return (data == null ? void 0 : data.discordMember) ?? (((_a = data == null ? void 0 : data.user) == null ? void 0 : _a.discordProfile) ? {
2054
+ return ((_a = data == null ? void 0 : data.user) == null ? void 0 : _a.discordProfile) ? {
2056
2055
  id: data.user.discordProfile.user.id,
2057
2056
  displayName: data.user.discordProfile.nick ?? data.user.discordProfile.user.global_name,
2058
2057
  avatarUrl: data.user.imageUrlLarge
2059
- } : null);
2058
+ } : null;
2060
2059
  }
2061
2060
  function useUserHasAccess() {
2062
2061
  const data = useRouteLoaderData("root");
@@ -2347,7 +2346,7 @@ function ProgressToggle({
2347
2346
  )
2348
2347
  ] });
2349
2348
  }
2350
- const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2349
+ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2351
2350
  __proto__: null,
2352
2351
  ProgressToggle,
2353
2352
  action: action$a,
@@ -2358,7 +2357,7 @@ const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
2358
2357
  useProgressItemClassName,
2359
2358
  useRequireEpicProgress
2360
2359
  }, Symbol.toStringTag, { value: "Module" }));
2361
- async function loader$w({ request }) {
2360
+ async function loader$u({ request }) {
2362
2361
  var _a;
2363
2362
  const timings = makeTimings("appLayoutLoader");
2364
2363
  const { title: workshopTitle } = getWorkshopConfig();
@@ -3448,7 +3447,7 @@ const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3448
3447
  __proto__: null,
3449
3448
  default: App,
3450
3449
  headers: headers$a,
3451
- loader: loader$w
3450
+ loader: loader$u
3452
3451
  }, Symbol.toStringTag, { value: "Module" }));
3453
3452
  function PendingState() {
3454
3453
  return /* @__PURE__ */ jsx("span", { className: "inline-block animate-spin", children: "🌀" });
@@ -3514,106 +3513,19 @@ function ButtonLink({
3514
3513
  }
3515
3514
  ) });
3516
3515
  }
3517
- const port = process.env.PORT || "5639";
3518
- const scope = "guilds.join identify messages.read";
3519
- const DiscordApiResponseSchema = z.object({
3520
- status: z.literal("error"),
3521
- error: z.string()
3522
- }).or(
3523
- z.object({
3524
- status: z.literal("success"),
3525
- member: DiscordMemberSchema
3526
- })
3527
- );
3528
- function getDiscordAuthURL() {
3529
- const discordAuthUrl = new URL("https://discord.com/oauth2/authorize");
3530
- discordAuthUrl.searchParams.append("client_id", "738096608440483870");
3531
- discordAuthUrl.searchParams.append(
3532
- "redirect_uri",
3533
- `http://localhost:${port}/discord/callback`
3534
- );
3535
- discordAuthUrl.searchParams.append("response_type", "code");
3536
- discordAuthUrl.searchParams.append("scope", scope);
3537
- return discordAuthUrl.toString();
3538
- }
3539
- async function loader$v({ request }) {
3540
- const authInfo = await requireAuthInfo({ request });
3541
- const discordCode = new URL(request.url).searchParams.get("code");
3542
- invariantResponse(discordCode, "Missing code");
3543
- const result = await fetch(
3544
- // 'http://localhost:3000/resources/connect-epic-web',
3545
- "https://kcd-discord-bot-v2.fly.dev/resources/connect-epic-web",
3546
- {
3547
- method: "POST",
3548
- headers: { "content-type": "application/json" },
3549
- body: JSON.stringify({
3550
- deviceToken: authInfo.tokenSet.access_token,
3551
- discordCode,
3552
- port,
3553
- scope
3554
- })
3555
- }
3556
- );
3557
- if (!result.ok) {
3558
- console.error(`There was an error connecting Discord`);
3559
- try {
3560
- console.error(await result.text());
3561
- } catch {
3562
- }
3563
- return redirectWithToast("/account", {
3564
- type: "error",
3565
- title: "Error",
3566
- description: `There was an error connecting your Discord account (details in terminal output). Please try again.`
3567
- });
3568
- }
3569
- const parseResult = DiscordApiResponseSchema.safeParse(await result.json());
3570
- if (!parseResult.success) {
3571
- console.error(`There was an error connecting Discord`);
3572
- console.error(parseResult.error);
3573
- return redirectWithToast("/account", {
3574
- type: "error",
3575
- title: "Error",
3576
- description: `There was an error connecting your Discord account (details in terminal output). Please try again.`
3577
- });
3578
- }
3579
- if (parseResult.data.status === "error") {
3580
- console.error(`There was an error connecting Discord`);
3581
- console.error(parseResult.data.error);
3582
- return redirect$1("/account?error");
3583
- }
3584
- const member = parseResult.data.member;
3585
- await setDiscordMember(member);
3586
- return redirectWithToast("/account", {
3587
- type: "success",
3588
- title: "Success",
3589
- description: `Your Discord account "${member.displayName}" has been connected!`
3590
- });
3591
- }
3592
- const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3593
- __proto__: null,
3594
- getDiscordAuthURL,
3595
- loader: loader$v
3596
- }, Symbol.toStringTag, { value: "Module" }));
3597
3516
  const handle$7 = {
3598
3517
  getSitemapEntries: () => null
3599
3518
  };
3600
- async function loader$u({ request }) {
3519
+ async function loader$t({ request }) {
3601
3520
  ensureUndeployed();
3602
3521
  await requireAuthInfo({ request });
3603
- return { discordAuthUrl: getDiscordAuthURL() };
3522
+ return {};
3604
3523
  }
3605
3524
  async function action$9({ request }) {
3606
3525
  ensureUndeployed();
3607
3526
  const formData = await request.formData();
3608
3527
  const intent = formData.get("intent");
3609
- if (intent === "disconnect-discord") {
3610
- await deleteDiscordInfo();
3611
- return redirectWithToast("/account", {
3612
- type: "success",
3613
- title: "Disconnected",
3614
- description: "Local discord data has been deleted."
3615
- });
3616
- } else if (intent === "logout") {
3528
+ if (intent === "logout") {
3617
3529
  await deleteDb();
3618
3530
  await deleteCache();
3619
3531
  return redirectWithToast("/login", {
@@ -3632,12 +3544,17 @@ async function action$9({ request }) {
3632
3544
  }
3633
3545
  return redirect$1("/account");
3634
3546
  }
3547
+ function useConnectDiscordURL$1() {
3548
+ const {
3549
+ product: { host }
3550
+ } = useWorkshopConfig();
3551
+ return `${host}/discord`;
3552
+ }
3635
3553
  function Account() {
3636
- const data = useLoaderData();
3637
- const disconnectFetcher = useFetcher();
3638
3554
  const user = useUser();
3639
3555
  const discordMember = useOptionalDiscordMember();
3640
3556
  const presencePreferences = usePresencePreferences();
3557
+ const connectDiscordURL = useConnectDiscordURL$1();
3641
3558
  return /* @__PURE__ */ jsxs("main", { className: "container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4", children: [
3642
3559
  user.imageUrlLarge ? /* @__PURE__ */ jsx(
3643
3560
  "img",
@@ -3649,31 +3566,25 @@ function Account() {
3649
3566
  ) : /* @__PURE__ */ jsx(Icon, { name: "User", className: "flex-shrink-0", size: "lg" }),
3650
3567
  /* @__PURE__ */ jsx("h1", { className: "mb-1 text-2xl", children: "Your Account" }),
3651
3568
  /* @__PURE__ */ jsx("p", { className: "text-center text-gray-700 dark:text-gray-300", children: user.name ? `Hi ${(discordMember == null ? void 0 : discordMember.displayName) ?? user.name}, your device is logged in with ${user.email}.` : `Your device is logged in with ${user.email}.` }),
3652
- discordMember ? /* @__PURE__ */ jsxs(Fragment, { children: [
3653
- /* @__PURE__ */ jsxs("p", { className: "text-center text-gray-700 dark:text-gray-300", children: [
3654
- "And you are connected to discord as",
3655
- " ",
3656
- /* @__PURE__ */ jsx(
3657
- "a",
3658
- {
3659
- href: `https://discord.com/users/${discordMember.id}`,
3660
- target: "_blank",
3661
- rel: "noopener noreferrer",
3662
- className: "underline",
3663
- children: discordMember.displayName
3664
- }
3665
- ),
3666
- "."
3667
- ] }),
3668
- /* @__PURE__ */ jsxs("div", { className: "flex justify-center gap-2", children: [
3669
- /* @__PURE__ */ jsx(disconnectFetcher.Form, { method: "post", children: /* @__PURE__ */ jsx(Button, { varient: "mono", name: "intent", value: "disconnect-discord", children: "Disconnect Discord" }) }),
3670
- /* @__PURE__ */ jsx(SimpleTooltip, { content: "Your discord connection gives you access to the exclusive Discord channels for Epic Web", children: /* @__PURE__ */ jsx(Icon, { name: "Question", tabIndex: 0 }) })
3671
- ] })
3672
- ] }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3569
+ discordMember ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("p", { className: "text-center text-gray-700 dark:text-gray-300", children: [
3570
+ "And you are connected to discord as",
3571
+ " ",
3572
+ /* @__PURE__ */ jsx(
3573
+ "a",
3574
+ {
3575
+ href: `https://discord.com/users/${discordMember.id}`,
3576
+ target: "_blank",
3577
+ rel: "noopener noreferrer",
3578
+ className: "underline",
3579
+ children: discordMember.displayName
3580
+ }
3581
+ ),
3582
+ "."
3583
+ ] }) }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3673
3584
  /* @__PURE__ */ jsxs(
3674
3585
  Link,
3675
3586
  {
3676
- to: data.discordAuthUrl,
3587
+ to: connectDiscordURL,
3677
3588
  className: "inline-flex items-center gap-2 underline",
3678
3589
  children: [
3679
3590
  /* @__PURE__ */ jsx(Icon, { name: "Discord", size: "lg" }),
@@ -3737,7 +3648,7 @@ const route3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3737
3648
  action: action$9,
3738
3649
  default: Account,
3739
3650
  handle: handle$7,
3740
- loader: loader$u
3651
+ loader: loader$t
3741
3652
  }, Symbol.toStringTag, { value: "Module" }));
3742
3653
  async function getForceFresh(filePath, cacheEntry) {
3743
3654
  if (!cacheEntry) return true;
@@ -3827,7 +3738,7 @@ async function firstExisting(...files) {
3827
3738
  }
3828
3739
  return null;
3829
3740
  }
3830
- async function loader$t({ request, params }) {
3741
+ async function loader$s({ request, params }) {
3831
3742
  const timings = makeTimings("app-file");
3832
3743
  const { fileApp, app } = await resolveApps({ request, params, timings });
3833
3744
  if (!fileApp || !app) {
@@ -3885,9 +3796,9 @@ async function loader$t({ request, params }) {
3885
3796
  }
3886
3797
  const route4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3887
3798
  __proto__: null,
3888
- loader: loader$t
3799
+ loader: loader$s
3889
3800
  }, Symbol.toStringTag, { value: "Module" }));
3890
- async function loader$s(args) {
3801
+ async function loader$r(args) {
3891
3802
  const api = await getApiModule(args);
3892
3803
  invariantResponse(
3893
3804
  api.mod.loader,
@@ -3990,9 +3901,9 @@ async function getApiModule({ request, params }) {
3990
3901
  const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3991
3902
  __proto__: null,
3992
3903
  action: action$8,
3993
- loader: loader$s
3904
+ loader: loader$r
3994
3905
  }, Symbol.toStringTag, { value: "Module" }));
3995
- async function loader$r({ request, params }) {
3906
+ async function loader$q({ request, params }) {
3996
3907
  const timings = makeTimings("epic_ws script");
3997
3908
  const { fileApp, app } = await resolveApps({ request, params, timings });
3998
3909
  if (!fileApp || !app) {
@@ -4061,9 +3972,9 @@ async function loader$r({ request, params }) {
4061
3972
  }
4062
3973
  const route6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4063
3974
  __proto__: null,
4064
- loader: loader$r
3975
+ loader: loader$q
4065
3976
  }, Symbol.toStringTag, { value: "Module" }));
4066
- async function loader$q({ request, params }) {
3977
+ async function loader$p({ request, params }) {
4067
3978
  var _a;
4068
3979
  const timings = makeTimings("app");
4069
3980
  const { fileApp, app } = await resolveApps({ request, params, timings });
@@ -4149,9 +4060,9 @@ async function loader$q({ request, params }) {
4149
4060
  }
4150
4061
  const route7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4151
4062
  __proto__: null,
4152
- loader: loader$q
4063
+ loader: loader$p
4153
4064
  }, Symbol.toStringTag, { value: "Module" }));
4154
- async function loader$p({ request, params }) {
4065
+ async function loader$o({ request, params }) {
4155
4066
  var _a;
4156
4067
  const timings = makeTimings("app_test_loader");
4157
4068
  const userHasAccess = await userHasAccessToWorkshop({
@@ -4288,38 +4199,41 @@ ${testScriptTag}`;
4288
4199
  }
4289
4200
  const route8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4290
4201
  __proto__: null,
4291
- loader: loader$p
4202
+ loader: loader$o
4292
4203
  }, Symbol.toStringTag, { value: "Module" }));
4293
4204
  const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4294
4205
  __proto__: null,
4295
- loader: loader$r
4206
+ loader: loader$q
4296
4207
  }, Symbol.toStringTag, { value: "Module" }));
4297
4208
  const route10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4298
4209
  __proto__: null,
4299
- loader: loader$r
4210
+ loader: loader$q
4300
4211
  }, Symbol.toStringTag, { value: "Module" }));
4301
4212
  const handle$6 = {
4302
4213
  getSitemapEntries: () => null
4303
4214
  };
4304
- async function loader$o() {
4305
- return { discordAuthUrl: getDiscordAuthURL() };
4215
+ function useConnectDiscordURL() {
4216
+ const {
4217
+ product: { host }
4218
+ } = useWorkshopConfig();
4219
+ return `${host}/discord`;
4306
4220
  }
4307
- function useDiscordCTALink({
4308
- discordAuthUrl
4309
- }) {
4221
+ function useDiscordCTALink() {
4310
4222
  const user = useOptionalUser();
4311
4223
  const discordMember = useOptionalDiscordMember();
4224
+ const connectDiscordURL = useConnectDiscordURL();
4312
4225
  if (!user) {
4313
4226
  return "/login";
4314
4227
  }
4315
4228
  if (!discordMember) {
4316
- return discordAuthUrl;
4229
+ return connectDiscordURL;
4317
4230
  }
4318
4231
  return "https://discord.com/channels/715220730605731931/1161045224907341972";
4319
4232
  }
4320
- function DiscordCTA({ discordAuthUrl }) {
4233
+ function DiscordCTA() {
4321
4234
  const user = useOptionalUser();
4322
4235
  const discordMember = useOptionalDiscordMember();
4236
+ const connectDiscordURL = useConnectDiscordURL();
4323
4237
  if (!user) {
4324
4238
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-center gap-2 text-xl", children: [
4325
4239
  /* @__PURE__ */ jsxs(Link, { to: "/login", className: "inline-flex items-center gap-2 underline", children: [
@@ -4337,10 +4251,17 @@ function DiscordCTA({ discordAuthUrl }) {
4337
4251
  }
4338
4252
  if (!discordMember) {
4339
4253
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-center gap-2 text-xl", children: [
4340
- /* @__PURE__ */ jsxs(Link, { to: discordAuthUrl, className: "flex items-center gap-2 underline", children: [
4341
- /* @__PURE__ */ jsx(Icon, { name: "Discord", size: "2xl" }),
4342
- "Connect Discord"
4343
- ] }),
4254
+ /* @__PURE__ */ jsxs(
4255
+ Link,
4256
+ {
4257
+ to: connectDiscordURL,
4258
+ className: "flex items-center gap-2 underline",
4259
+ children: [
4260
+ /* @__PURE__ */ jsx(Icon, { name: "Discord", size: "2xl" }),
4261
+ "Connect Discord"
4262
+ ]
4263
+ }
4264
+ ),
4344
4265
  " ",
4345
4266
  /* @__PURE__ */ jsxs("span", { children: [
4346
4267
  "to get access to the exclusive",
@@ -4364,9 +4285,8 @@ function DiscordCTA({ discordAuthUrl }) {
4364
4285
  ] });
4365
4286
  }
4366
4287
  function DiscordRoute() {
4367
- const data = useLoaderData();
4368
4288
  return /* @__PURE__ */ jsxs("div", { className: "container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12", children: [
4369
- /* @__PURE__ */ jsx(DiscordCTA, { discordAuthUrl: data.discordAuthUrl }),
4289
+ /* @__PURE__ */ jsx(DiscordCTA, {}),
4370
4290
  /* @__PURE__ */ jsxs("p", { children: [
4371
4291
  "The",
4372
4292
  " ",
@@ -4405,7 +4325,6 @@ const route11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
4405
4325
  DiscordCTA,
4406
4326
  default: DiscordRoute,
4407
4327
  handle: handle$6,
4408
- loader: loader$o,
4409
4328
  useDiscordCTALink
4410
4329
  }, Symbol.toStringTag, { value: "Module" }));
4411
4330
  const handle$5 = {
@@ -4631,7 +4550,7 @@ function isDeepEqual(obj1, obj2) {
4631
4550
  }
4632
4551
  return true;
4633
4552
  }
4634
- const route44 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4553
+ const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4635
4554
  __proto__: null,
4636
4555
  MuxPlayer,
4637
4556
  action: action$7,
@@ -5725,7 +5644,7 @@ function EditFileOnGitHub({
5725
5644
  );
5726
5645
  }
5727
5646
  const LaunchEditor = ENV.EPICSHOP_DEPLOYED ? LaunchGitHub : LaunchEditorImpl;
5728
- const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5647
+ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5729
5648
  __proto__: null,
5730
5649
  EditFileOnGitHub,
5731
5650
  LaunchEditor,
@@ -6753,7 +6672,7 @@ function SetAppToPlayground({ appName }) {
6753
6672
  }
6754
6673
  );
6755
6674
  }
6756
- const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6675
+ const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6757
6676
  __proto__: null,
6758
6677
  PlaygroundChooser,
6759
6678
  SetAppToPlayground,
@@ -7440,9 +7359,9 @@ async function action$4({ request }) {
7440
7359
  }
7441
7360
  }
7442
7361
  if (intent === "stop-port") {
7443
- const port2 = formData.get("port");
7444
- invariantResponse(typeof port2 === "string", "port is required");
7445
- await stopPort(port2);
7362
+ const port = formData.get("port");
7363
+ invariantResponse(typeof port === "string", "port is required");
7364
+ await stopPort(port);
7446
7365
  return dataWithPE(formData, { status: "port-stopped" });
7447
7366
  }
7448
7367
  throw new Error(`Unknown intent: ${intent}`);
@@ -7470,13 +7389,13 @@ function AppStopper({ name }) {
7470
7389
  )
7471
7390
  ] });
7472
7391
  }
7473
- function PortStopper({ port: port2 }) {
7392
+ function PortStopper({ port }) {
7474
7393
  const fetcher = useFetcher();
7475
7394
  const peRedirectInput = usePERedirectInput();
7476
7395
  return /* @__PURE__ */ jsxs(fetcher.Form, { method: "POST", action: "/start", children: [
7477
7396
  peRedirectInput,
7478
7397
  showProgressBarField,
7479
- /* @__PURE__ */ jsx("input", { type: "hidden", name: "port", value: port2 }),
7398
+ /* @__PURE__ */ jsx("input", { type: "hidden", name: "port", value: port }),
7480
7399
  /* @__PURE__ */ jsx(Button, { varient: "mono", type: "submit", name: "intent", value: "stop-port", children: fetcher.state === "idle" ? "Stop Port" : "Stopping Port" })
7481
7400
  ] });
7482
7401
  }
@@ -7501,7 +7420,7 @@ function AppStarter({ name }) {
7501
7420
  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" }) })
7502
7421
  ] });
7503
7422
  }
7504
- const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7423
+ const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7505
7424
  __proto__: null,
7506
7425
  AppStarter,
7507
7426
  AppStopper,
@@ -7551,7 +7470,7 @@ function getNewIndex(prevIndex, delta, max) {
7551
7470
  const InBrowserBrowser = forwardRef(
7552
7471
  InBrowserBrowserImpl
7553
7472
  );
7554
- function InBrowserBrowserImpl({ name, port: port2, portIsAvailable, isRunning, baseUrl, id, initialRoute }, ref) {
7473
+ function InBrowserBrowserImpl({ name, port, portIsAvailable, isRunning, baseUrl, id, initialRoute }, ref) {
7555
7474
  const requestInfo = useRequestInfo();
7556
7475
  return isRunning ? /* @__PURE__ */ jsx(
7557
7476
  InBrowserBrowserForRealz,
@@ -7568,14 +7487,14 @@ function InBrowserBrowserImpl({ name, port: port2, portIsAvailable, isRunning, b
7568
7487
  /* @__PURE__ */ jsx(
7569
7488
  "a",
7570
7489
  {
7571
- href: getBaseUrl({ domain: requestInfo.domain, port: port2 }),
7490
+ href: getBaseUrl({ domain: requestInfo.domain, port }),
7572
7491
  className: "underline",
7573
7492
  children: "elsewhere"
7574
7493
  }
7575
7494
  ),
7576
7495
  "?"
7577
7496
  ] }),
7578
- /* @__PURE__ */ jsx(PortStopper, { port: port2 })
7497
+ /* @__PURE__ */ jsx(PortStopper, { port })
7579
7498
  ] }) : /* @__PURE__ */ jsx(AppStarter, { name });
7580
7499
  }
7581
7500
  const InBrowserBrowserForRealz = forwardRef(InBrowserBrowserForRealzImpl);
@@ -8427,15 +8346,14 @@ async function fetchDiscordPosts({ request }) {
8427
8346
  }));
8428
8347
  }
8429
8348
  function DiscordChat() {
8430
- const data = useLoaderData();
8431
8349
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full flex-col gap-4 pt-4", children: [
8432
- /* @__PURE__ */ jsx("div", { className: "text-center", children: /* @__PURE__ */ jsx(DiscordCTA, { discordAuthUrl: data.discordAuthUrl }) }),
8350
+ /* @__PURE__ */ jsx("div", { className: "text-center", children: /* @__PURE__ */ jsx(DiscordCTA, {}) }),
8433
8351
  /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar", children: /* @__PURE__ */ jsx(DiscordPosts, {}) })
8434
8352
  ] });
8435
8353
  }
8436
8354
  function DiscordPosts() {
8437
8355
  const data = useLoaderData();
8438
- const ctaLink = useDiscordCTALink({ discordAuthUrl: data.discordAuthUrl });
8356
+ const ctaLink = useDiscordCTALink();
8439
8357
  const altDown = useAltDown();
8440
8358
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col items-center justify-between", children: [
8441
8359
  /* @__PURE__ */ jsx(
@@ -9230,7 +9148,7 @@ function StopTest({
9230
9148
  )
9231
9149
  ] });
9232
9150
  }
9233
- const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9151
+ const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9234
9152
  __proto__: null,
9235
9153
  ClearTest,
9236
9154
  StopTest,
@@ -9398,7 +9316,6 @@ async function loader$i({ request, params }) {
9398
9316
  type: params.type,
9399
9317
  exerciseStepApp,
9400
9318
  allApps,
9401
- discordAuthUrl: getDiscordAuthURL(),
9402
9319
  // defer this promise so that we don't block the response from being sent
9403
9320
  discordPostsPromise: fetchDiscordPosts({ request }),
9404
9321
  playground: playgroundApp ? {
@@ -10251,7 +10168,7 @@ async function loader$c({ request }) {
10251
10168
  };
10252
10169
  });
10253
10170
  }
10254
- const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10171
+ const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10255
10172
  __proto__: null,
10256
10173
  EventSchema,
10257
10174
  loader: loader$c
@@ -10487,9 +10404,9 @@ async function loader$a({ request }) {
10487
10404
  const testProcesses = {};
10488
10405
  for (const [
10489
10406
  name,
10490
- { port: port2, process: process2, color }
10407
+ { port, process: process2, color }
10491
10408
  ] of getProcesses().devProcesses.entries()) {
10492
- processes[name] = { port: port2, pid: process2.pid, color };
10409
+ processes[name] = { port, pid: process2.pid, color };
10493
10410
  }
10494
10411
  for (const [
10495
10412
  name,
@@ -10817,7 +10734,7 @@ async function loader$5({ request }) {
10817
10734
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
10818
10735
  );
10819
10736
  }
10820
- const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10737
+ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10821
10738
  __proto__: null,
10822
10739
  loader: loader$5
10823
10740
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11148,7 +11065,7 @@ function OgLayout({
11148
11065
  }
11149
11066
  );
11150
11067
  }
11151
- const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11068
+ const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11152
11069
  __proto__: null,
11153
11070
  loader: loader$4
11154
11071
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11196,7 +11113,7 @@ function Onboarding() {
11196
11113
  /* @__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!" }) })
11197
11114
  ] });
11198
11115
  }
11199
- const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11116
+ const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11200
11117
  __proto__: null,
11201
11118
  action,
11202
11119
  default: Onboarding,
@@ -11209,9 +11126,9 @@ async function loader$2() {
11209
11126
  const processes = {};
11210
11127
  for (const [
11211
11128
  name,
11212
- { port: port2, process: process2, color }
11129
+ { port, process: process2, color }
11213
11130
  ] of getProcesses().devProcesses.entries()) {
11214
- processes[name] = { port: port2, pid: process2.pid, color };
11131
+ processes[name] = { port, pid: process2.pid, color };
11215
11132
  }
11216
11133
  const testProcesses = {};
11217
11134
  for (const [
@@ -11222,7 +11139,7 @@ async function loader$2() {
11222
11139
  }
11223
11140
  return Response.json({ processes, testProcesses });
11224
11141
  }
11225
- const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11142
+ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11226
11143
  __proto__: null,
11227
11144
  loader: loader$2
11228
11145
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11231,7 +11148,7 @@ function loader$1({ request }) {
11231
11148
  { type: "sitemap", value: `${getDomainUrl(request)}/sitemap.xml` }
11232
11149
  ]);
11233
11150
  }
11234
- const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11151
+ const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11235
11152
  __proto__: null,
11236
11153
  loader: loader$1
11237
11154
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11244,11 +11161,11 @@ async function loader({ request, context }) {
11244
11161
  }
11245
11162
  });
11246
11163
  }
11247
- const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11164
+ const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11248
11165
  __proto__: null,
11249
11166
  loader
11250
11167
  }, Symbol.toStringTag, { value: "Module" }));
11251
- const serverManifest = { "entry": { "module": "/assets/entry.client-BTYTUpFV.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.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-DCfiv1cO.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/error-boundary-1-dmC941.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/index-DRH72MzK.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-_J-F_Dnc.js", "/assets/presence-DyppfK2V.js", "/assets/seo-pBpFCWsy.js", "/assets/request-info-DCIQLE6H.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/_-CWSCXcBv.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/error-boundary-1-dmC941.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.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-pUNfVRe2.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/product-C1ynnrN_.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuoaxPEj.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/presence-DyppfK2V.js", "/assets/progress-DAB3nDa2.js", "/assets/index-_J-F_Dnc.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-RJjysGnp.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/user-DJiL1Lk-.js", "/assets/presence-DyppfK2V.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.epic_ws[.js]": { "id": "routes/_app+/app.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-lXkS53K3.js", "imports": ["/assets/discord-DxisvcaU.js", "/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js", "/assets/user-DJiL1Lk-.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-88n0To1b.js", "imports": ["/assets/index-BFGhCX_U.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-BnwWTYFw.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-1XLXSFCL.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DiFCTSLR.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-BA2Xhzqs.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-Bpho30KN.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/error-boundary-1-dmC941.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DiFCTSLR.js", "/assets/progress-DAB3nDa2.js", "/assets/set-playground-S_rIwJAa.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-BJtHv_Jh.js", "/assets/epic-video-1XLXSFCL.js", "/assets/tooltip-BgynKV2c.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/index-BuoaxPEj.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/pe-ChIwTk8v.js", "/assets/index-BuA_RWlU.js", "/assets/index-_J-F_Dnc.js", "/assets/loading-Dk0n07O3.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-CM8yuYni.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/preview-CW_12I0i.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/request-info-DCIQLE6H.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-DZ0It6pH.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-CyIaJAoJ.js", "/assets/error-boundary-1-dmC941.js", "/assets/loading-Dk0n07O3.js", "/assets/discord-DxisvcaU.js", "/assets/components-9EGYHTc_.js", "/assets/index-DRH72MzK.js", "/assets/set-playground-S_rIwJAa.js", "/assets/tests-Bp85P9FF.js", "/assets/preview-CW_12I0i.js", "/assets/index-BuoaxPEj.js", "/assets/accordion-DC885Li1.js", "/assets/mdx-DiFCTSLR.js", "/assets/epic-video-1XLXSFCL.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-CvzcNTDp.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tests-Bp85P9FF.js", "/assets/components-9EGYHTc_.js", "/assets/epic-video-1XLXSFCL.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/accordion-DC885Li1.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/set-playground-S_rIwJAa.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-BfeMSie-.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-1XLXSFCL.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DiFCTSLR.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-DjF_kSoF.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-1XLXSFCL.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DiFCTSLR.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.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-f5Q6XZEy.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-1XLXSFCL.js", "/assets/error-boundary-1-dmC941.js", "/assets/mdx-DiFCTSLR.js", "/assets/misc-BJtHv_Jh.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.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-pZYDEC_l.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/product-C1ynnrN_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.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-BNS-kEhc.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.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-gyrNluke.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-Cnw7IcG5.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-CyIaJAoJ.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/components-9EGYHTc_.js", "/assets/accordion-DC885Li1.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/mdx-DiFCTSLR.js", "/assets/epic-video-1XLXSFCL.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-DXICEaMi.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/epic-video-1XLXSFCL.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-DJiL1Lk-.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-9328c766.js", "version": "9328c766" };
11168
+ const serverManifest = { "entry": { "module": "/assets/entry.client-BTYTUpFV.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.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-DCfiv1cO.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/error-boundary-1-dmC941.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/index-DRH72MzK.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-_J-F_Dnc.js", "/assets/presence-DyppfK2V.js", "/assets/seo-pBpFCWsy.js", "/assets/request-info-DCIQLE6H.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/_-CWSCXcBv.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/error-boundary-1-dmC941.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.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-BK7mLImi.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/product-C1ynnrN_.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuoaxPEj.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/presence-DyppfK2V.js", "/assets/progress-DAB3nDa2.js", "/assets/index-_J-F_Dnc.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-B5baO5pg.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/presence-DyppfK2V.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.epic_ws[.js]": { "id": "routes/_app+/app.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-BnQDHWJj.js", "imports": ["/assets/discord-DcHxc30v.js", "/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-88n0To1b.js", "imports": ["/assets/index-BFGhCX_U.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-DvMYZgqk.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bxtz3elt.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DIAWAXtT.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-BA2Xhzqs.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-BH5PQW0M.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/error-boundary-1-dmC941.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DIAWAXtT.js", "/assets/progress-DAB3nDa2.js", "/assets/set-playground-S_rIwJAa.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-BJtHv_Jh.js", "/assets/epic-video-Bxtz3elt.js", "/assets/tooltip-BgynKV2c.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/index-BuoaxPEj.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/pe-ChIwTk8v.js", "/assets/index-BuA_RWlU.js", "/assets/index-_J-F_Dnc.js", "/assets/loading-Dk0n07O3.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-CM8yuYni.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/preview-CW_12I0i.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/request-info-DCIQLE6H.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-C2MH9l6b.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-C2Hm_DHX.js", "/assets/error-boundary-1-dmC941.js", "/assets/loading-Dk0n07O3.js", "/assets/discord-DcHxc30v.js", "/assets/components-9EGYHTc_.js", "/assets/index-DRH72MzK.js", "/assets/set-playground-S_rIwJAa.js", "/assets/tests-GmyhBOwD.js", "/assets/preview-CW_12I0i.js", "/assets/index-BuoaxPEj.js", "/assets/accordion-DC885Li1.js", "/assets/mdx-DIAWAXtT.js", "/assets/epic-video-Bxtz3elt.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-3x2HHA0t.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tests-GmyhBOwD.js", "/assets/components-9EGYHTc_.js", "/assets/epic-video-Bxtz3elt.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/accordion-DC885Li1.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/set-playground-S_rIwJAa.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-DYN2QHN6.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bxtz3elt.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DIAWAXtT.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished--PGQDzya.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bxtz3elt.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-DIAWAXtT.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.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-oZkQrXic.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bxtz3elt.js", "/assets/error-boundary-1-dmC941.js", "/assets/mdx-DIAWAXtT.js", "/assets/misc-BJtHv_Jh.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.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-pZYDEC_l.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/product-C1ynnrN_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.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-BNS-kEhc.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.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-gyrNluke.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-CbIF8Oq1.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-C2Hm_DHX.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/components-9EGYHTc_.js", "/assets/accordion-DC885Li1.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/mdx-DIAWAXtT.js", "/assets/epic-video-Bxtz3elt.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-BAVmCIKn.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/epic-video-Bxtz3elt.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-CFunCRfr.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-7f4f8707.js", "version": "7f4f8707" };
11252
11169
  const mode = "production";
11253
11170
  const assetsBuildDirectory = "build/client";
11254
11171
  const basename = "/";
@@ -11497,21 +11414,13 @@ const routes = {
11497
11414
  caseSensitive: void 0,
11498
11415
  module: route29
11499
11416
  },
11500
- "routes/discord.callback": {
11501
- id: "routes/discord.callback",
11502
- parentId: "root",
11503
- path: "discord/callback",
11504
- index: void 0,
11505
- caseSensitive: void 0,
11506
- module: route30
11507
- },
11508
11417
  "routes/exercises": {
11509
11418
  id: "routes/exercises",
11510
11419
  parentId: "root",
11511
11420
  path: "exercises",
11512
11421
  index: void 0,
11513
11422
  caseSensitive: void 0,
11514
- module: route31
11423
+ module: route30
11515
11424
  },
11516
11425
  "routes/launch-editor": {
11517
11426
  id: "routes/launch-editor",
@@ -11519,7 +11428,7 @@ const routes = {
11519
11428
  path: "launch-editor",
11520
11429
  index: void 0,
11521
11430
  caseSensitive: void 0,
11522
- module: route32
11431
+ module: route31
11523
11432
  },
11524
11433
  "routes/login-sse": {
11525
11434
  id: "routes/login-sse",
@@ -11527,7 +11436,7 @@ const routes = {
11527
11436
  path: "login-sse",
11528
11437
  index: void 0,
11529
11438
  caseSensitive: void 0,
11530
- module: route33
11439
+ module: route32
11531
11440
  },
11532
11441
  "routes/og": {
11533
11442
  id: "routes/og",
@@ -11535,7 +11444,7 @@ const routes = {
11535
11444
  path: "og",
11536
11445
  index: void 0,
11537
11446
  caseSensitive: void 0,
11538
- module: route34
11447
+ module: route33
11539
11448
  },
11540
11449
  "routes/onboarding": {
11541
11450
  id: "routes/onboarding",
@@ -11543,7 +11452,7 @@ const routes = {
11543
11452
  path: "onboarding",
11544
11453
  index: void 0,
11545
11454
  caseSensitive: void 0,
11546
- module: route35
11455
+ module: route34
11547
11456
  },
11548
11457
  "routes/processes": {
11549
11458
  id: "routes/processes",
@@ -11551,7 +11460,7 @@ const routes = {
11551
11460
  path: "processes",
11552
11461
  index: void 0,
11553
11462
  caseSensitive: void 0,
11554
- module: route36
11463
+ module: route35
11555
11464
  },
11556
11465
  "routes/progress": {
11557
11466
  id: "routes/progress",
@@ -11559,7 +11468,7 @@ const routes = {
11559
11468
  path: "progress",
11560
11469
  index: void 0,
11561
11470
  caseSensitive: void 0,
11562
- module: route37
11471
+ module: route36
11563
11472
  },
11564
11473
  "routes/robots[.]txt": {
11565
11474
  id: "routes/robots[.]txt",
@@ -11567,7 +11476,7 @@ const routes = {
11567
11476
  path: "robots.txt",
11568
11477
  index: void 0,
11569
11478
  caseSensitive: void 0,
11570
- module: route38
11479
+ module: route37
11571
11480
  },
11572
11481
  "routes/set-playground": {
11573
11482
  id: "routes/set-playground",
@@ -11575,7 +11484,7 @@ const routes = {
11575
11484
  path: "set-playground",
11576
11485
  index: void 0,
11577
11486
  caseSensitive: void 0,
11578
- module: route39
11487
+ module: route38
11579
11488
  },
11580
11489
  "routes/sitemap[.]xml": {
11581
11490
  id: "routes/sitemap[.]xml",
@@ -11583,7 +11492,7 @@ const routes = {
11583
11492
  path: "sitemap.xml",
11584
11493
  index: void 0,
11585
11494
  caseSensitive: void 0,
11586
- module: route40
11495
+ module: route39
11587
11496
  },
11588
11497
  "routes/start": {
11589
11498
  id: "routes/start",
@@ -11591,7 +11500,7 @@ const routes = {
11591
11500
  path: "start",
11592
11501
  index: void 0,
11593
11502
  caseSensitive: void 0,
11594
- module: route41
11503
+ module: route40
11595
11504
  },
11596
11505
  "routes/test": {
11597
11506
  id: "routes/test",
@@ -11599,7 +11508,7 @@ const routes = {
11599
11508
  path: "test",
11600
11509
  index: void 0,
11601
11510
  caseSensitive: void 0,
11602
- module: route42
11511
+ module: route41
11603
11512
  },
11604
11513
  "routes/theme/index": {
11605
11514
  id: "routes/theme/index",
@@ -11607,7 +11516,7 @@ const routes = {
11607
11516
  path: "theme",
11608
11517
  index: void 0,
11609
11518
  caseSensitive: void 0,
11610
- module: route43
11519
+ module: route42
11611
11520
  },
11612
11521
  "routes/video-player/index": {
11613
11522
  id: "routes/video-player/index",
@@ -11615,7 +11524,7 @@ const routes = {
11615
11524
  path: "video-player",
11616
11525
  index: void 0,
11617
11526
  caseSensitive: void 0,
11618
- module: route44
11527
+ module: route43
11619
11528
  }
11620
11529
  };
11621
11530
  export {