@epic-web/workshop-app 5.3.6 → 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 +121 -214
  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,
@@ -5364,13 +5283,11 @@ async function launchEditor(pathList, lineNumber = 1, colNumber = 1) {
5364
5283
  if (process.platform === "linux" && fileName.startsWith("/mnt/") && /Microsoft/i.test(os.release())) {
5365
5284
  fileName = path$1.relative("", fileName);
5366
5285
  }
5367
- if (process.platform === "win32" && !WINDOWS_FILE_NAME_WHITELIST.test(
5368
- // replacing characters we know are fine (because heck if I'm going to edit that regex above 🙃)
5369
- fileName.replace(/\+|\$|\[|\]/g, "").trim()
5370
- )) {
5286
+ const fileExists = fs.existsSync(fileName);
5287
+ if (!fileExists && process.platform === "win32" && !WINDOWS_FILE_NAME_WHITELIST.test(fileName)) {
5371
5288
  acc.errorsList.push(fileName);
5372
5289
  } else {
5373
- if (!fs.existsSync(fileName)) {
5290
+ if (!fileExists) {
5374
5291
  fsExtra.ensureDirSync(path$1.dirname(fileName));
5375
5292
  fsExtra.writeFileSync(fileName, "", "utf8");
5376
5293
  }
@@ -5387,7 +5304,7 @@ async function launchEditor(pathList, lineNumber = 1, colNumber = 1) {
5387
5304
  message = `Could not open ${readableName} in the editor.
5388
5305
 
5389
5306
  When running on Windows, file names are checked against a whitelist to protect against remote code execution attacks.
5390
- File names may consist only of alphanumeric characters (all languages), periods, dashes, slashes, and underscores.`;
5307
+ File names may consist only of alphanumeric characters (all languages), periods, dashes, slashes, and underscores. Maybe you have your files in a folder that includes a space in the pathname? Rename the folder to remove the space and try again.`;
5391
5308
  } else {
5392
5309
  message = "pathList must contain at least one valid file path";
5393
5310
  }
@@ -5727,7 +5644,7 @@ function EditFileOnGitHub({
5727
5644
  );
5728
5645
  }
5729
5646
  const LaunchEditor = ENV.EPICSHOP_DEPLOYED ? LaunchGitHub : LaunchEditorImpl;
5730
- const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5647
+ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5731
5648
  __proto__: null,
5732
5649
  EditFileOnGitHub,
5733
5650
  LaunchEditor,
@@ -6755,7 +6672,7 @@ function SetAppToPlayground({ appName }) {
6755
6672
  }
6756
6673
  );
6757
6674
  }
6758
- const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6675
+ const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6759
6676
  __proto__: null,
6760
6677
  PlaygroundChooser,
6761
6678
  SetAppToPlayground,
@@ -7442,9 +7359,9 @@ async function action$4({ request }) {
7442
7359
  }
7443
7360
  }
7444
7361
  if (intent === "stop-port") {
7445
- const port2 = formData.get("port");
7446
- invariantResponse(typeof port2 === "string", "port is required");
7447
- await stopPort(port2);
7362
+ const port = formData.get("port");
7363
+ invariantResponse(typeof port === "string", "port is required");
7364
+ await stopPort(port);
7448
7365
  return dataWithPE(formData, { status: "port-stopped" });
7449
7366
  }
7450
7367
  throw new Error(`Unknown intent: ${intent}`);
@@ -7472,13 +7389,13 @@ function AppStopper({ name }) {
7472
7389
  )
7473
7390
  ] });
7474
7391
  }
7475
- function PortStopper({ port: port2 }) {
7392
+ function PortStopper({ port }) {
7476
7393
  const fetcher = useFetcher();
7477
7394
  const peRedirectInput = usePERedirectInput();
7478
7395
  return /* @__PURE__ */ jsxs(fetcher.Form, { method: "POST", action: "/start", children: [
7479
7396
  peRedirectInput,
7480
7397
  showProgressBarField,
7481
- /* @__PURE__ */ jsx("input", { type: "hidden", name: "port", value: port2 }),
7398
+ /* @__PURE__ */ jsx("input", { type: "hidden", name: "port", value: port }),
7482
7399
  /* @__PURE__ */ jsx(Button, { varient: "mono", type: "submit", name: "intent", value: "stop-port", children: fetcher.state === "idle" ? "Stop Port" : "Stopping Port" })
7483
7400
  ] });
7484
7401
  }
@@ -7503,7 +7420,7 @@ function AppStarter({ name }) {
7503
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" }) })
7504
7421
  ] });
7505
7422
  }
7506
- const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7423
+ const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7507
7424
  __proto__: null,
7508
7425
  AppStarter,
7509
7426
  AppStopper,
@@ -7553,7 +7470,7 @@ function getNewIndex(prevIndex, delta, max) {
7553
7470
  const InBrowserBrowser = forwardRef(
7554
7471
  InBrowserBrowserImpl
7555
7472
  );
7556
- function InBrowserBrowserImpl({ name, port: port2, portIsAvailable, isRunning, baseUrl, id, initialRoute }, ref) {
7473
+ function InBrowserBrowserImpl({ name, port, portIsAvailable, isRunning, baseUrl, id, initialRoute }, ref) {
7557
7474
  const requestInfo = useRequestInfo();
7558
7475
  return isRunning ? /* @__PURE__ */ jsx(
7559
7476
  InBrowserBrowserForRealz,
@@ -7570,14 +7487,14 @@ function InBrowserBrowserImpl({ name, port: port2, portIsAvailable, isRunning, b
7570
7487
  /* @__PURE__ */ jsx(
7571
7488
  "a",
7572
7489
  {
7573
- href: getBaseUrl({ domain: requestInfo.domain, port: port2 }),
7490
+ href: getBaseUrl({ domain: requestInfo.domain, port }),
7574
7491
  className: "underline",
7575
7492
  children: "elsewhere"
7576
7493
  }
7577
7494
  ),
7578
7495
  "?"
7579
7496
  ] }),
7580
- /* @__PURE__ */ jsx(PortStopper, { port: port2 })
7497
+ /* @__PURE__ */ jsx(PortStopper, { port })
7581
7498
  ] }) : /* @__PURE__ */ jsx(AppStarter, { name });
7582
7499
  }
7583
7500
  const InBrowserBrowserForRealz = forwardRef(InBrowserBrowserForRealzImpl);
@@ -8429,15 +8346,14 @@ async function fetchDiscordPosts({ request }) {
8429
8346
  }));
8430
8347
  }
8431
8348
  function DiscordChat() {
8432
- const data = useLoaderData();
8433
8349
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full flex-col gap-4 pt-4", children: [
8434
- /* @__PURE__ */ jsx("div", { className: "text-center", children: /* @__PURE__ */ jsx(DiscordCTA, { discordAuthUrl: data.discordAuthUrl }) }),
8350
+ /* @__PURE__ */ jsx("div", { className: "text-center", children: /* @__PURE__ */ jsx(DiscordCTA, {}) }),
8435
8351
  /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar", children: /* @__PURE__ */ jsx(DiscordPosts, {}) })
8436
8352
  ] });
8437
8353
  }
8438
8354
  function DiscordPosts() {
8439
8355
  const data = useLoaderData();
8440
- const ctaLink = useDiscordCTALink({ discordAuthUrl: data.discordAuthUrl });
8356
+ const ctaLink = useDiscordCTALink();
8441
8357
  const altDown = useAltDown();
8442
8358
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col items-center justify-between", children: [
8443
8359
  /* @__PURE__ */ jsx(
@@ -9232,7 +9148,7 @@ function StopTest({
9232
9148
  )
9233
9149
  ] });
9234
9150
  }
9235
- const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9151
+ const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9236
9152
  __proto__: null,
9237
9153
  ClearTest,
9238
9154
  StopTest,
@@ -9400,7 +9316,6 @@ async function loader$i({ request, params }) {
9400
9316
  type: params.type,
9401
9317
  exerciseStepApp,
9402
9318
  allApps,
9403
- discordAuthUrl: getDiscordAuthURL(),
9404
9319
  // defer this promise so that we don't block the response from being sent
9405
9320
  discordPostsPromise: fetchDiscordPosts({ request }),
9406
9321
  playground: playgroundApp ? {
@@ -10253,7 +10168,7 @@ async function loader$c({ request }) {
10253
10168
  };
10254
10169
  });
10255
10170
  }
10256
- const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10171
+ const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10257
10172
  __proto__: null,
10258
10173
  EventSchema,
10259
10174
  loader: loader$c
@@ -10489,9 +10404,9 @@ async function loader$a({ request }) {
10489
10404
  const testProcesses = {};
10490
10405
  for (const [
10491
10406
  name,
10492
- { port: port2, process: process2, color }
10407
+ { port, process: process2, color }
10493
10408
  ] of getProcesses().devProcesses.entries()) {
10494
- processes[name] = { port: port2, pid: process2.pid, color };
10409
+ processes[name] = { port, pid: process2.pid, color };
10495
10410
  }
10496
10411
  for (const [
10497
10412
  name,
@@ -10819,7 +10734,7 @@ async function loader$5({ request }) {
10819
10734
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
10820
10735
  );
10821
10736
  }
10822
- const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10737
+ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10823
10738
  __proto__: null,
10824
10739
  loader: loader$5
10825
10740
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11150,7 +11065,7 @@ function OgLayout({
11150
11065
  }
11151
11066
  );
11152
11067
  }
11153
- const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11068
+ const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11154
11069
  __proto__: null,
11155
11070
  loader: loader$4
11156
11071
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11198,7 +11113,7 @@ function Onboarding() {
11198
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!" }) })
11199
11114
  ] });
11200
11115
  }
11201
- const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11116
+ const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11202
11117
  __proto__: null,
11203
11118
  action,
11204
11119
  default: Onboarding,
@@ -11211,9 +11126,9 @@ async function loader$2() {
11211
11126
  const processes = {};
11212
11127
  for (const [
11213
11128
  name,
11214
- { port: port2, process: process2, color }
11129
+ { port, process: process2, color }
11215
11130
  ] of getProcesses().devProcesses.entries()) {
11216
- processes[name] = { port: port2, pid: process2.pid, color };
11131
+ processes[name] = { port, pid: process2.pid, color };
11217
11132
  }
11218
11133
  const testProcesses = {};
11219
11134
  for (const [
@@ -11224,7 +11139,7 @@ async function loader$2() {
11224
11139
  }
11225
11140
  return Response.json({ processes, testProcesses });
11226
11141
  }
11227
- const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11142
+ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11228
11143
  __proto__: null,
11229
11144
  loader: loader$2
11230
11145
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11233,7 +11148,7 @@ function loader$1({ request }) {
11233
11148
  { type: "sitemap", value: `${getDomainUrl(request)}/sitemap.xml` }
11234
11149
  ]);
11235
11150
  }
11236
- const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11151
+ const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11237
11152
  __proto__: null,
11238
11153
  loader: loader$1
11239
11154
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11246,11 +11161,11 @@ async function loader({ request, context }) {
11246
11161
  }
11247
11162
  });
11248
11163
  }
11249
- const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11164
+ const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11250
11165
  __proto__: null,
11251
11166
  loader
11252
11167
  }, Symbol.toStringTag, { value: "Module" }));
11253
- 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" };
11254
11169
  const mode = "production";
11255
11170
  const assetsBuildDirectory = "build/client";
11256
11171
  const basename = "/";
@@ -11499,21 +11414,13 @@ const routes = {
11499
11414
  caseSensitive: void 0,
11500
11415
  module: route29
11501
11416
  },
11502
- "routes/discord.callback": {
11503
- id: "routes/discord.callback",
11504
- parentId: "root",
11505
- path: "discord/callback",
11506
- index: void 0,
11507
- caseSensitive: void 0,
11508
- module: route30
11509
- },
11510
11417
  "routes/exercises": {
11511
11418
  id: "routes/exercises",
11512
11419
  parentId: "root",
11513
11420
  path: "exercises",
11514
11421
  index: void 0,
11515
11422
  caseSensitive: void 0,
11516
- module: route31
11423
+ module: route30
11517
11424
  },
11518
11425
  "routes/launch-editor": {
11519
11426
  id: "routes/launch-editor",
@@ -11521,7 +11428,7 @@ const routes = {
11521
11428
  path: "launch-editor",
11522
11429
  index: void 0,
11523
11430
  caseSensitive: void 0,
11524
- module: route32
11431
+ module: route31
11525
11432
  },
11526
11433
  "routes/login-sse": {
11527
11434
  id: "routes/login-sse",
@@ -11529,7 +11436,7 @@ const routes = {
11529
11436
  path: "login-sse",
11530
11437
  index: void 0,
11531
11438
  caseSensitive: void 0,
11532
- module: route33
11439
+ module: route32
11533
11440
  },
11534
11441
  "routes/og": {
11535
11442
  id: "routes/og",
@@ -11537,7 +11444,7 @@ const routes = {
11537
11444
  path: "og",
11538
11445
  index: void 0,
11539
11446
  caseSensitive: void 0,
11540
- module: route34
11447
+ module: route33
11541
11448
  },
11542
11449
  "routes/onboarding": {
11543
11450
  id: "routes/onboarding",
@@ -11545,7 +11452,7 @@ const routes = {
11545
11452
  path: "onboarding",
11546
11453
  index: void 0,
11547
11454
  caseSensitive: void 0,
11548
- module: route35
11455
+ module: route34
11549
11456
  },
11550
11457
  "routes/processes": {
11551
11458
  id: "routes/processes",
@@ -11553,7 +11460,7 @@ const routes = {
11553
11460
  path: "processes",
11554
11461
  index: void 0,
11555
11462
  caseSensitive: void 0,
11556
- module: route36
11463
+ module: route35
11557
11464
  },
11558
11465
  "routes/progress": {
11559
11466
  id: "routes/progress",
@@ -11561,7 +11468,7 @@ const routes = {
11561
11468
  path: "progress",
11562
11469
  index: void 0,
11563
11470
  caseSensitive: void 0,
11564
- module: route37
11471
+ module: route36
11565
11472
  },
11566
11473
  "routes/robots[.]txt": {
11567
11474
  id: "routes/robots[.]txt",
@@ -11569,7 +11476,7 @@ const routes = {
11569
11476
  path: "robots.txt",
11570
11477
  index: void 0,
11571
11478
  caseSensitive: void 0,
11572
- module: route38
11479
+ module: route37
11573
11480
  },
11574
11481
  "routes/set-playground": {
11575
11482
  id: "routes/set-playground",
@@ -11577,7 +11484,7 @@ const routes = {
11577
11484
  path: "set-playground",
11578
11485
  index: void 0,
11579
11486
  caseSensitive: void 0,
11580
- module: route39
11487
+ module: route38
11581
11488
  },
11582
11489
  "routes/sitemap[.]xml": {
11583
11490
  id: "routes/sitemap[.]xml",
@@ -11585,7 +11492,7 @@ const routes = {
11585
11492
  path: "sitemap.xml",
11586
11493
  index: void 0,
11587
11494
  caseSensitive: void 0,
11588
- module: route40
11495
+ module: route39
11589
11496
  },
11590
11497
  "routes/start": {
11591
11498
  id: "routes/start",
@@ -11593,7 +11500,7 @@ const routes = {
11593
11500
  path: "start",
11594
11501
  index: void 0,
11595
11502
  caseSensitive: void 0,
11596
- module: route41
11503
+ module: route40
11597
11504
  },
11598
11505
  "routes/test": {
11599
11506
  id: "routes/test",
@@ -11601,7 +11508,7 @@ const routes = {
11601
11508
  path: "test",
11602
11509
  index: void 0,
11603
11510
  caseSensitive: void 0,
11604
- module: route42
11511
+ module: route41
11605
11512
  },
11606
11513
  "routes/theme/index": {
11607
11514
  id: "routes/theme/index",
@@ -11609,7 +11516,7 @@ const routes = {
11609
11516
  path: "theme",
11610
11517
  index: void 0,
11611
11518
  caseSensitive: void 0,
11612
- module: route43
11519
+ module: route42
11613
11520
  },
11614
11521
  "routes/video-player/index": {
11615
11522
  id: "routes/video-player/index",
@@ -11617,7 +11524,7 @@ const routes = {
11617
11524
  path: "video-player",
11618
11525
  index: void 0,
11619
11526
  caseSensitive: void 0,
11620
- module: route44
11527
+ module: route43
11621
11528
  }
11622
11529
  };
11623
11530
  export {