@epic-web/workshop-app 4.5.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/bin/epicshop.js +3 -3
  2. package/build/client/assets/_exerciseNumber-rfzZiDNa.js +2 -0
  3. package/build/client/assets/_exerciseNumber-rfzZiDNa.js.map +1 -0
  4. package/build/client/assets/_exerciseNumber_._stepNumber-C37pli7_.js.map +1 -1
  5. package/build/client/assets/_exerciseNumber_.finished-B7SgnqdS.js +2 -0
  6. package/build/client/assets/_exerciseNumber_.finished-B7SgnqdS.js.map +1 -0
  7. package/build/client/assets/_layout-BG1Jwh7V.js +2 -0
  8. package/build/client/assets/_layout-BG1Jwh7V.js.map +1 -0
  9. package/build/client/assets/_layout-CNgYirUN.js.map +1 -1
  10. package/build/client/assets/_layout-D0zbQZjf.js.map +1 -1
  11. package/build/client/assets/{diff-tDYfSlOc.js → diff-BKsbFB6w.js} +2 -2
  12. package/build/client/assets/diff-BKsbFB6w.js.map +1 -0
  13. package/build/client/assets/{diff-DZFtsH-a.js → diff-KDzcgGYL.js} +2 -2
  14. package/build/client/assets/diff-KDzcgGYL.js.map +1 -0
  15. package/build/client/assets/epic-video-BwtXsHGU.js.map +1 -1
  16. package/build/client/assets/error-boundary-Bcric_4t.js.map +1 -1
  17. package/build/client/assets/finished-BI2-0Ykt.js +2 -0
  18. package/build/client/assets/finished-BI2-0Ykt.js.map +1 -0
  19. package/build/client/assets/index-BQRtqn3g.js.map +1 -1
  20. package/build/client/assets/index-Bg9MMnnf.js.map +1 -1
  21. package/build/client/assets/manifest-c65c0481.js +1 -0
  22. package/build/client/assets/mdx-BYvGbvEr.js.map +1 -1
  23. package/build/client/assets/misc-DNgC2Frq.js.map +1 -1
  24. package/build/client/assets/og-l0sNRNKZ.js +2 -0
  25. package/build/client/assets/og-l0sNRNKZ.js.map +1 -0
  26. package/build/client/assets/presence-BJPzwbUy.js.map +1 -1
  27. package/build/client/assets/progress-CF9Xwfxf.js.map +1 -1
  28. package/build/client/assets/progress-bar-7LK87ZMh.js.map +1 -1
  29. package/build/client/assets/{root-BJrmef-V.js → root-BXq0yevS.js} +4 -4
  30. package/build/client/assets/root-BXq0yevS.js.map +1 -0
  31. package/build/client/assets/seo-CHrqghsC.js +2 -0
  32. package/build/client/assets/seo-CHrqghsC.js.map +1 -0
  33. package/build/client/img/epicweb-og-background.png +0 -0
  34. package/build/server/index.js +465 -100
  35. package/build/server/index.js.map +1 -1
  36. package/node_modules/tslib/package.json +1 -1
  37. package/node_modules/tslib/tslib.d.ts +1 -1
  38. package/node_modules/tslib/tslib.es6.js +7 -3
  39. package/node_modules/tslib/tslib.es6.mjs +10 -7
  40. package/node_modules/tslib/tslib.js +7 -4
  41. package/package.json +4 -3
  42. package/start.js +2 -2
  43. package/build/client/assets/_exerciseNumber-jTT5JRgC.js +0 -2
  44. package/build/client/assets/_exerciseNumber-jTT5JRgC.js.map +0 -1
  45. package/build/client/assets/_exerciseNumber_.finished-zgJKkJ7I.js +0 -2
  46. package/build/client/assets/_exerciseNumber_.finished-zgJKkJ7I.js.map +0 -1
  47. package/build/client/assets/_layout-CGUp6BkS.js +0 -2
  48. package/build/client/assets/_layout-CGUp6BkS.js.map +0 -1
  49. package/build/client/assets/diff-DZFtsH-a.js.map +0 -1
  50. package/build/client/assets/diff-tDYfSlOc.js.map +0 -1
  51. package/build/client/assets/finished-BSWdtBA4.js +0 -2
  52. package/build/client/assets/finished-BSWdtBA4.js.map +0 -1
  53. package/build/client/assets/manifest-03cfc48d.js +0 -1
  54. package/build/client/assets/root-BJrmef-V.js.map +0 -1
@@ -86,6 +86,7 @@ import * as esbuild from "esbuild";
86
86
  import { EventEmitter } from "events";
87
87
  import { Issuer } from "openid-client";
88
88
  import inspector from "node:inspector";
89
+ import { ImageResponse } from "@vercel/og";
89
90
  function makeTimings(type, desc) {
90
91
  const timings = {
91
92
  [type]: [{ desc, start: performance.now() }]
@@ -405,7 +406,9 @@ async function validateProps(props, appDir2) {
405
406
  }, "Highlight range must be within defined range").transform(() => props.highlight).optional(),
406
407
  nonumber: BooleanSchema,
407
408
  nocopy: BooleanSchema,
408
- buttons: z.string().optional().transform((str) => str ? str.split(",") : []).refine((arr) => arr.every((item) => APP_TYPES.includes(item)), {
409
+ buttons: z.string().optional().transform(
410
+ (str) => str ? str.split(",") : []
411
+ ).refine((arr) => arr.every((item) => APP_TYPES.includes(item)), {
409
412
  message: `Buttons can only be any of ${APP_TYPES.join(",")}`
410
413
  })
411
414
  }).strict();
@@ -2202,6 +2205,20 @@ async function getWorkshopTitle() {
2202
2205
  }
2203
2206
  return title;
2204
2207
  }
2208
+ async function getWorkshopSubtitle() {
2209
+ return await getPkgProp(workshopRoot, "epicshop.subtitle");
2210
+ }
2211
+ async function getWorkshopInstructor() {
2212
+ const InstructorSchema = z$1.object({
2213
+ name: z$1.string().optional(),
2214
+ avatar: z$1.string().optional(),
2215
+ "𝕏": z$1.string().optional()
2216
+ }).optional();
2217
+ const instructor = InstructorSchema.parse(
2218
+ await getPkgProp(getWorkshopRoot(), "epicshop.instructor")
2219
+ );
2220
+ return instructor;
2221
+ }
2205
2222
  async function getEpicWorkshopSlug() {
2206
2223
  const epicWorkshopSlug = await getPkgProp(
2207
2224
  workshopRoot,
@@ -3237,7 +3254,7 @@ function useTheme() {
3237
3254
  }
3238
3255
  return requestInfo.session.theme ?? hints.theme;
3239
3256
  }
3240
- const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3257
+ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3241
3258
  __proto__: null,
3242
3259
  ThemeSwitch,
3243
3260
  action: action$c,
@@ -3730,6 +3747,40 @@ function usePresence() {
3730
3747
  }
3731
3748
  return presence;
3732
3749
  }
3750
+ function getSeoMetaTags({
3751
+ title,
3752
+ description,
3753
+ instructor,
3754
+ requestInfo,
3755
+ ogTitle = title,
3756
+ ogDescription = description,
3757
+ ogImageUrl = requestInfo.domain + "/og?" + new URLSearchParams({
3758
+ title: ogTitle,
3759
+ subtitle: ogDescription ?? "",
3760
+ urlPathname: requestInfo.path,
3761
+ // to make cache busting possible, whenever the og image changes, we can change the version
3762
+ // note if the inputs change, then the cache will be busted automatically
3763
+ // it's only if the image changes that we need to change the version
3764
+ version: "v1"
3765
+ }).toString(),
3766
+ ogImageAlt = title
3767
+ }) {
3768
+ return [
3769
+ { title },
3770
+ description ? { description } : null,
3771
+ (instructor == null ? void 0 : instructor.name) ? { name: "author", content: instructor.name } : null,
3772
+ { name: "og:site_name", content: title },
3773
+ { name: "twitter:card", content: "summary_large_image" },
3774
+ { name: "twitter:creator", content: instructor == null ? void 0 : instructor["𝕏"] },
3775
+ { name: "og:title", content: ogTitle },
3776
+ description ? { name: "og:description", content: ogDescription } : null,
3777
+ { name: "og:type", content: "website" },
3778
+ { name: "og:image:width", content: "1200" },
3779
+ { name: "og:image:height", content: "630" },
3780
+ { name: "og:image:alt", content: ogImageAlt },
3781
+ { name: "og:image", content: ogImageUrl }
3782
+ ].filter(Boolean);
3783
+ }
3733
3784
  const toastKey = "toast";
3734
3785
  const TypeSchema = z$1.enum(["message", "success", "error"]);
3735
3786
  const ToastSchema = z$1.object({
@@ -3794,9 +3845,16 @@ const links = () => {
3794
3845
  ];
3795
3846
  };
3796
3847
  const meta$5 = ({ data }) => {
3797
- return [{ title: data == null ? void 0 : data.workshopTitle }];
3848
+ if (!data)
3849
+ return [];
3850
+ return getSeoMetaTags({
3851
+ instructor: data.instructor,
3852
+ title: data.workshopTitle,
3853
+ description: data.workshopSubtitle,
3854
+ requestInfo: data.requestInfo
3855
+ });
3798
3856
  };
3799
- async function loader$r({ request }) {
3857
+ async function loader$s({ request }) {
3800
3858
  const timings = makeTimings("rootLoader");
3801
3859
  const onboarding = await readOnboardingData();
3802
3860
  if (!ENV.EPICSHOP_DEPLOYED && !(onboarding == null ? void 0 : onboarding.finishedTourVideo)) {
@@ -3809,6 +3867,16 @@ async function loader$r({ request }) {
3809
3867
  desc: "getWorkshopTitle in root",
3810
3868
  timings
3811
3869
  });
3870
+ const workshopSubtitle = await time(() => getWorkshopSubtitle(), {
3871
+ type: "getWorkshopSubtitle",
3872
+ desc: "getWorkshopSubtitle in root",
3873
+ timings
3874
+ });
3875
+ const instructor = await time(() => getWorkshopInstructor(), {
3876
+ type: "getInstructor",
3877
+ desc: "getInstructor in root",
3878
+ timings
3879
+ });
3812
3880
  const preferences = await getPreferences();
3813
3881
  const progress = await getProgress({ timings }).catch((e) => {
3814
3882
  console.error("Failed to get progress", e);
@@ -3825,6 +3893,8 @@ async function loader$r({ request }) {
3825
3893
  return json(
3826
3894
  {
3827
3895
  workshopTitle,
3896
+ workshopSubtitle,
3897
+ instructor,
3828
3898
  apps: apps.map(({ name, fullPath, relativePath }) => ({
3829
3899
  name,
3830
3900
  fullPath,
@@ -4002,10 +4072,10 @@ const route0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
4002
4072
  default: AppWithProviders,
4003
4073
  headers: headers$8,
4004
4074
  links,
4005
- loader: loader$r,
4075
+ loader: loader$s,
4006
4076
  meta: meta$5
4007
4077
  }, Symbol.toStringTag, { value: "Module" }));
4008
- async function loader$q() {
4078
+ async function loader$r() {
4009
4079
  throw new Response("Not found", { status: 404 });
4010
4080
  }
4011
4081
  function NotFound() {
@@ -4032,7 +4102,7 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
4032
4102
  __proto__: null,
4033
4103
  ErrorBoundary: ErrorBoundary$4,
4034
4104
  default: NotFound,
4035
- loader: loader$q
4105
+ loader: loader$r
4036
4106
  }, Symbol.toStringTag, { value: "Module" }));
4037
4107
  function useOptionalUser() {
4038
4108
  const data = useRouteLoaderData("root");
@@ -4216,7 +4286,9 @@ async function action$b({ request }) {
4216
4286
  const otherExerciseLessons = beforeProgress.filter(
4217
4287
  (p) => (p.type === "step" || p.type === "instructions" || p.type === "finished") && p.exerciseNumber === exerciseNumber && p.epicLessonSlug !== lessonSlug
4218
4288
  );
4219
- const otherAreFinished = otherExerciseLessons.every((p) => p.epicCompletedAt);
4289
+ const otherAreFinished = otherExerciseLessons.every(
4290
+ (p) => p.epicCompletedAt
4291
+ );
4220
4292
  return otherAreFinished ? `You completed exercise ${exerciseNumber}!` : null;
4221
4293
  }
4222
4294
  const announcement = getCompletionAnnouncement();
@@ -4342,7 +4414,7 @@ function ProgressToggle({
4342
4414
  )
4343
4415
  ] });
4344
4416
  }
4345
- const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4417
+ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4346
4418
  __proto__: null,
4347
4419
  ProgressToggle,
4348
4420
  action: action$b,
@@ -4353,7 +4425,7 @@ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
4353
4425
  useProgressItemClassName,
4354
4426
  useRequireEpicProgress
4355
4427
  }, Symbol.toStringTag, { value: "Module" }));
4356
- async function loader$p({ request }) {
4428
+ async function loader$q({ request }) {
4357
4429
  var _a2;
4358
4430
  const timings = makeTimings("stepLoader");
4359
4431
  const [exercises, workshopTitle, playgroundAppName] = await Promise.all([
@@ -5051,7 +5123,7 @@ const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
5051
5123
  __proto__: null,
5052
5124
  default: App,
5053
5125
  headers: headers$7,
5054
- loader: loader$p
5126
+ loader: loader$q
5055
5127
  }, Symbol.toStringTag, { value: "Module" }));
5056
5128
  function ExercisesLayout() {
5057
5129
  return /* @__PURE__ */ jsx("div", { className: "flex h-full flex-grow", children: /* @__PURE__ */ jsx(Outlet, {}) });
@@ -5265,7 +5337,7 @@ function isDeepEqual(obj1, obj2) {
5265
5337
  }
5266
5338
  return true;
5267
5339
  }
5268
- const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5340
+ const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5269
5341
  __proto__: null,
5270
5342
  MuxPlayer,
5271
5343
  action: action$a,
@@ -5445,7 +5517,9 @@ function extractEpicTitle(urlString) {
5445
5517
  const title = titleWords.filter(Boolean).map((word, index) => {
5446
5518
  var _a2;
5447
5519
  const lowerWord = word.toLowerCase();
5448
- const literalWord = literalWords.find((w) => w.toLowerCase() === lowerWord);
5520
+ const literalWord = literalWords.find(
5521
+ (w) => w.toLowerCase() === lowerWord
5522
+ );
5449
5523
  if (literalWord)
5450
5524
  return literalWord;
5451
5525
  if (lowerCaseWords.includes(lowerWord) && index > 0) {
@@ -6531,18 +6605,20 @@ const meta$4 = ({
6531
6605
  matches
6532
6606
  }) => {
6533
6607
  var _a2;
6534
- if (!data) {
6535
- return [{ title: "📝 | Error" }];
6536
- }
6537
- const number = data.exercise.exerciseNumber.toString().padStart(2, "0");
6608
+ const number = data == null ? void 0 : data.exercise.exerciseNumber.toString().padStart(2, "0");
6538
6609
  const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
6539
- return [
6540
- {
6541
- title: `📝 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`
6542
- }
6543
- ];
6610
+ if (!data || !rootData)
6611
+ return [{ title: "🦉 | Error" }];
6612
+ return getSeoMetaTags({
6613
+ title: `📝 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
6614
+ description: `Elaboration for ${number}. ${data.exercise.title}`,
6615
+ ogTitle: data.exercise.title,
6616
+ ogDescription: `Elaboration for exercise ${Number(number)}`,
6617
+ instructor: rootData.instructor,
6618
+ requestInfo: rootData.requestInfo
6619
+ });
6544
6620
  };
6545
- async function loader$o({ request, params }) {
6621
+ async function loader$p({ request, params }) {
6546
6622
  const timings = makeTimings("exerciseNumberLoader");
6547
6623
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
6548
6624
  const [exercises, workshopTitle] = await Promise.all([
@@ -6686,10 +6762,10 @@ const route4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
6686
6762
  ErrorBoundary: ErrorBoundary$3,
6687
6763
  default: ExerciseNumberRoute,
6688
6764
  headers: headers$6,
6689
- loader: loader$o,
6765
+ loader: loader$p,
6690
6766
  meta: meta$4
6691
6767
  }, Symbol.toStringTag, { value: "Module" }));
6692
- async function loader$n({ request, params }) {
6768
+ async function loader$o({ request, params }) {
6693
6769
  const timings = makeTimings("stepLoader");
6694
6770
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
6695
6771
  const [exercises, workshopTitle] = await Promise.all([
@@ -6746,7 +6822,7 @@ const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
6746
6822
  ErrorBoundary: ErrorBoundary$2,
6747
6823
  default: StepRoute,
6748
6824
  headers: headers$5,
6749
- loader: loader$n
6825
+ loader: loader$o
6750
6826
  }, Symbol.toStringTag, { value: "Module" }));
6751
6827
  const AccordionComponent = ({
6752
6828
  title,
@@ -6974,7 +7050,7 @@ function SelectFileToDiff({
6974
7050
  children: [
6975
7051
  /* @__PURE__ */ jsxs("span", { className: "overflow-hidden text-ellipsis whitespace-nowrap", children: [
6976
7052
  label,
6977
- ": ",
7053
+ ":",
6978
7054
  " ",
6979
7055
  /* @__PURE__ */ jsx(
6980
7056
  SelectValue,
@@ -7109,7 +7185,7 @@ function getDiscordAuthURL() {
7109
7185
  discordAuthUrl.searchParams.append("scope", scope);
7110
7186
  return discordAuthUrl.toString();
7111
7187
  }
7112
- async function loader$m({ request }) {
7188
+ async function loader$n({ request }) {
7113
7189
  const authInfo = await requireAuthInfo({ request });
7114
7190
  const discordCode = new URL(request.url).searchParams.get("code");
7115
7191
  invariantResponse(discordCode, "Missing code");
@@ -7165,7 +7241,7 @@ async function loader$m({ request }) {
7165
7241
  const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7166
7242
  __proto__: null,
7167
7243
  getDiscordAuthURL,
7168
- loader: loader$m
7244
+ loader: loader$n
7169
7245
  }, Symbol.toStringTag, { value: "Module" }));
7170
7246
  const epicshopTempDir = path.join(os.tmpdir(), "epicshop");
7171
7247
  const isDeployed = ENV.EPICSHOP_DEPLOYED;
@@ -7729,7 +7805,7 @@ function SetAppToPlayground({ appName }) {
7729
7805
  }
7730
7806
  );
7731
7807
  }
7732
- const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7808
+ const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7733
7809
  __proto__: null,
7734
7810
  PlaygroundChooser,
7735
7811
  SetAppToPlayground,
@@ -7829,7 +7905,7 @@ async function fetchDiscordPosts({ request }) {
7829
7905
  }
7830
7906
  });
7831
7907
  }
7832
- async function loader$l() {
7908
+ async function loader$m() {
7833
7909
  return json({ discordAuthUrl: getDiscordAuthURL() });
7834
7910
  }
7835
7911
  function useDiscordCTALink({
@@ -7932,7 +8008,7 @@ const route15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
7932
8008
  __proto__: null,
7933
8009
  DiscordCTA,
7934
8010
  default: DiscordRoute,
7935
- loader: loader$l,
8011
+ loader: loader$m,
7936
8012
  useDiscordCTALink
7937
8013
  }, Symbol.toStringTag, { value: "Module" }));
7938
8014
  function DiscordChat() {
@@ -8322,7 +8398,7 @@ function AppStarter({ name }) {
8322
8398
  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" }) })
8323
8399
  ] });
8324
8400
  }
8325
- const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8401
+ const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8326
8402
  __proto__: null,
8327
8403
  AppStarter,
8328
8404
  AppStopper,
@@ -8858,7 +8934,7 @@ function UpdateMdxCache({
8858
8934
  )
8859
8935
  ] });
8860
8936
  }
8861
- const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8937
+ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8862
8938
  __proto__: null,
8863
8939
  UpdateMdxCache,
8864
8940
  action: action$6
@@ -9333,7 +9409,7 @@ const testEventSchema = z$1.union([
9333
9409
  })
9334
9410
  ]);
9335
9411
  const testEventQueueSchema = z$1.array(testEventSchema);
9336
- async function loader$k({ request }) {
9412
+ async function loader$l({ request }) {
9337
9413
  ensureUndeployed();
9338
9414
  const url = new URL(request.url);
9339
9415
  const name = url.searchParams.get("name");
@@ -9653,14 +9729,14 @@ function StopTest({
9653
9729
  )
9654
9730
  ] });
9655
9731
  }
9656
- const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9732
+ const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9657
9733
  __proto__: null,
9658
9734
  ClearTest,
9659
9735
  StopTest,
9660
9736
  TestOutput,
9661
9737
  TestRunner,
9662
9738
  action: action$5,
9663
- loader: loader$k
9739
+ loader: loader$l
9664
9740
  }, Symbol.toStringTag, { value: "Module" }));
9665
9741
  function Tests({
9666
9742
  appInfo: playgroundAppInfo,
@@ -9820,18 +9896,24 @@ function pageTitle(data, workshopTitle) {
9820
9896
  }
9821
9897
  const meta$3 = ({
9822
9898
  data,
9823
- matches
9899
+ matches,
9900
+ params
9824
9901
  }) => {
9825
9902
  var _a2;
9826
9903
  const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
9904
+ if (!data || !rootData)
9905
+ return [{ title: "🦉 | Error" }];
9827
9906
  const { emoji: emoji2, stepNumber, title, exerciseNumber, exerciseTitle } = pageTitle(data);
9828
- return [
9829
- {
9830
- title: `${emoji2} | ${stepNumber}. ${title} | ${exerciseNumber}. ${exerciseTitle} | ${(rootData == null ? void 0 : rootData.workshopTitle) ?? "Epic Workshop"}`
9831
- }
9832
- ];
9907
+ return getSeoMetaTags({
9908
+ title: `${emoji2} | ${stepNumber}. ${title} | ${exerciseNumber}. ${exerciseTitle} | ${rootData.workshopTitle}`,
9909
+ description: `${params.type} step for exercise ${exerciseNumber}. ${exerciseTitle}`,
9910
+ ogTitle: title,
9911
+ ogDescription: `${exerciseTitle} step ${Number(stepNumber)} ${params.type}`,
9912
+ instructor: rootData.instructor,
9913
+ requestInfo: rootData.requestInfo
9914
+ });
9833
9915
  };
9834
- async function loader$j({ request, params }) {
9916
+ async function loader$k({ request, params }) {
9835
9917
  var _a2, _b2;
9836
9918
  const timings = makeTimings("exerciseStepTypeLoader");
9837
9919
  const workshopTitle = await getWorkshopTitle();
@@ -10265,10 +10347,10 @@ const route6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
10265
10347
  ErrorBoundary: ErrorBoundary$1,
10266
10348
  default: ExercisePartRoute,
10267
10349
  headers: headers$4,
10268
- loader: loader$j,
10350
+ loader: loader$k,
10269
10351
  meta: meta$3
10270
10352
  }, Symbol.toStringTag, { value: "Module" }));
10271
- async function loader$i({ params }) {
10353
+ async function loader$j({ params }) {
10272
10354
  const problemApp = await getExerciseApp({ ...params, type: "problem" }).then(
10273
10355
  (a) => isProblemApp(a) ? a : null
10274
10356
  );
@@ -10286,25 +10368,27 @@ async function loader$i({ params }) {
10286
10368
  }
10287
10369
  const route7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10288
10370
  __proto__: null,
10289
- loader: loader$i
10371
+ loader: loader$j
10290
10372
  }, Symbol.toStringTag, { value: "Module" }));
10291
10373
  const meta$2 = ({
10292
10374
  data,
10293
10375
  matches
10294
10376
  }) => {
10295
10377
  var _a2;
10296
- if (!data) {
10297
- return [{ title: "🦉 | Error" }];
10298
- }
10299
- const number = data.exercise.exerciseNumber.toString().padStart(2, "0");
10378
+ const number = data == null ? void 0 : data.exercise.exerciseNumber.toString().padStart(2, "0");
10300
10379
  const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
10301
- return [
10302
- {
10303
- title: `🦉 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`
10304
- }
10305
- ];
10380
+ if (!data || !rootData)
10381
+ return [{ title: "🦉 | Error" }];
10382
+ return getSeoMetaTags({
10383
+ title: `🦉 | ${number}. ${data.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
10384
+ description: `Elaboration for ${number}. ${data.exercise.title}`,
10385
+ ogTitle: `Finished: ${data.exercise.title}`,
10386
+ ogDescription: `Elaboration for exercise ${Number(number)}`,
10387
+ instructor: rootData.instructor,
10388
+ requestInfo: rootData.requestInfo
10389
+ });
10306
10390
  };
10307
- async function loader$h({ request, params }) {
10391
+ async function loader$i({ request, params }) {
10308
10392
  const timings = makeTimings("exerciseFinishedLoader");
10309
10393
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
10310
10394
  const exercise = await getExercise(params.exerciseNumber, {
@@ -10469,10 +10553,10 @@ const route8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
10469
10553
  __proto__: null,
10470
10554
  default: ExerciseFinished$1,
10471
10555
  headers: headers$3,
10472
- loader: loader$h,
10556
+ loader: loader$i,
10473
10557
  meta: meta$2
10474
10558
  }, Symbol.toStringTag, { value: "Module" }));
10475
- async function loader$g({ request }) {
10559
+ async function loader$h({ request }) {
10476
10560
  ensureUndeployed();
10477
10561
  await requireAuthInfo({ request });
10478
10562
  return json({ discordAuthUrl: getDiscordAuthURL() });
@@ -10584,7 +10668,7 @@ const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
10584
10668
  __proto__: null,
10585
10669
  action: action$4,
10586
10670
  default: Account,
10587
- loader: loader$g
10671
+ loader: loader$h
10588
10672
  }, Symbol.toStringTag, { value: "Module" }));
10589
10673
  async function getForceFresh(filePath, cacheEntry) {
10590
10674
  if (!cacheEntry)
@@ -10654,7 +10738,7 @@ async function resolveApps({
10654
10738
  return { app, fileApp: app };
10655
10739
  }
10656
10740
  }
10657
- async function loader$f({ request, params }) {
10741
+ async function loader$g({ request, params }) {
10658
10742
  const timings = makeTimings("app-file");
10659
10743
  const { fileApp, app } = await resolveApps({ request, params, timings });
10660
10744
  if (!fileApp || !app) {
@@ -10710,9 +10794,9 @@ async function loader$f({ request, params }) {
10710
10794
  }
10711
10795
  const route10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10712
10796
  __proto__: null,
10713
- loader: loader$f
10797
+ loader: loader$g
10714
10798
  }, Symbol.toStringTag, { value: "Module" }));
10715
- async function loader$e(args) {
10799
+ async function loader$f(args) {
10716
10800
  const api = await getApiModule(args);
10717
10801
  invariantResponse(
10718
10802
  api.mod.loader,
@@ -10815,9 +10899,9 @@ async function getApiModule({ request, params }) {
10815
10899
  const route11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10816
10900
  __proto__: null,
10817
10901
  action: action$3,
10818
- loader: loader$e
10902
+ loader: loader$f
10819
10903
  }, Symbol.toStringTag, { value: "Module" }));
10820
- async function loader$d({ request, params }) {
10904
+ async function loader$e({ request, params }) {
10821
10905
  const timings = makeTimings("epic_ws script");
10822
10906
  const { fileApp, app } = await resolveApps({ request, params, timings });
10823
10907
  if (!fileApp || !app) {
@@ -10883,9 +10967,9 @@ async function loader$d({ request, params }) {
10883
10967
  }
10884
10968
  const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10885
10969
  __proto__: null,
10886
- loader: loader$d
10970
+ loader: loader$e
10887
10971
  }, Symbol.toStringTag, { value: "Module" }));
10888
- async function loader$c({ request, params }) {
10972
+ async function loader$d({ request, params }) {
10889
10973
  var _a2;
10890
10974
  const timings = makeTimings("app");
10891
10975
  const { fileApp, app } = await resolveApps({ request, params, timings });
@@ -10971,9 +11055,9 @@ async function loader$c({ request, params }) {
10971
11055
  }
10972
11056
  const route13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10973
11057
  __proto__: null,
10974
- loader: loader$c
11058
+ loader: loader$d
10975
11059
  }, Symbol.toStringTag, { value: "Module" }));
10976
- async function loader$b({ request, params }) {
11060
+ async function loader$c({ request, params }) {
10977
11061
  var _a2;
10978
11062
  const timings = makeTimings("app_test_loader");
10979
11063
  const { testName } = params;
@@ -11113,16 +11197,25 @@ import(${JSON.stringify(testScriptPath)}).then(
11113
11197
  }
11114
11198
  const route14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11115
11199
  __proto__: null,
11116
- loader: loader$b
11200
+ loader: loader$c
11117
11201
  }, Symbol.toStringTag, { value: "Module" }));
11118
11202
  const meta$1 = ({
11119
11203
  matches
11120
11204
  }) => {
11121
11205
  var _a2;
11122
11206
  const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
11123
- return [{ title: `🎉 ${rootData == null ? void 0 : rootData.workshopTitle}` }];
11207
+ if (!rootData)
11208
+ return [];
11209
+ return getSeoMetaTags({
11210
+ title: `🎉 ${rootData == null ? void 0 : rootData.workshopTitle}`,
11211
+ description: `Elaboration for ${rootData == null ? void 0 : rootData.workshopTitle}`,
11212
+ ogTitle: `Finished ${rootData == null ? void 0 : rootData.workshopTitle}`,
11213
+ ogDescription: `You finished! Time to submit feedback.`,
11214
+ instructor: rootData.instructor,
11215
+ requestInfo: rootData.requestInfo
11216
+ });
11124
11217
  };
11125
- async function loader$a({ request }) {
11218
+ async function loader$b({ request }) {
11126
11219
  const timings = makeTimings("finishedLoader");
11127
11220
  const exercises = await getExercises({ request, timings });
11128
11221
  const compiledFinished = await time(() => getWorkshopFinished({ request }), {
@@ -11259,10 +11352,10 @@ const route16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11259
11352
  __proto__: null,
11260
11353
  default: ExerciseFinished,
11261
11354
  headers: headers$2,
11262
- loader: loader$a,
11355
+ loader: loader$b,
11263
11356
  meta: meta$1
11264
11357
  }, Symbol.toStringTag, { value: "Module" }));
11265
- async function loader$9({ request }) {
11358
+ async function loader$a({ request }) {
11266
11359
  const timings = makeTimings("indexLoader");
11267
11360
  const [title, exercises, workshopReadme] = await Promise.all([
11268
11361
  time(() => getWorkshopTitle(), {
@@ -11392,7 +11485,7 @@ const route17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11392
11485
  ErrorBoundary,
11393
11486
  default: Index,
11394
11487
  headers: headers$1,
11395
- loader: loader$9
11488
+ loader: loader$a
11396
11489
  }, Symbol.toStringTag, { value: "Module" }));
11397
11490
  const EVENTS = {
11398
11491
  USER_CODE_RECEIVED: "USER_CODE_RECEIVED",
@@ -11454,7 +11547,7 @@ const EventSchema = z$1.union([
11454
11547
  AuthResolvedEventSchema,
11455
11548
  AuthRejectedEventSchema
11456
11549
  ]);
11457
- async function loader$8({ request }) {
11550
+ async function loader$9({ request }) {
11458
11551
  ensureUndeployed();
11459
11552
  return eventStream(request.signal, function setup(send) {
11460
11553
  function handleCodeReceived(data) {
@@ -11491,9 +11584,9 @@ async function loader$8({ request }) {
11491
11584
  const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11492
11585
  __proto__: null,
11493
11586
  EventSchema,
11494
- loader: loader$8
11587
+ loader: loader$9
11495
11588
  }, Symbol.toStringTag, { value: "Module" }));
11496
- async function loader$7() {
11589
+ async function loader$8() {
11497
11590
  ensureUndeployed();
11498
11591
  const isAuthenticated = Boolean(await getAuthInfo());
11499
11592
  if (isAuthenticated)
@@ -11616,7 +11709,7 @@ const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11616
11709
  __proto__: null,
11617
11710
  action: action$2,
11618
11711
  default: Login,
11619
- loader: loader$7
11712
+ loader: loader$8
11620
11713
  }, Symbol.toStringTag, { value: "Module" }));
11621
11714
  function Support() {
11622
11715
  var _a2;
@@ -11709,7 +11802,7 @@ const meta = ({
11709
11802
  const rootData = (_a2 = matches.find((m) => m.id === "root")) == null ? void 0 : _a2.data;
11710
11803
  return [{ title: `👷 | ${rootData == null ? void 0 : rootData.workshopTitle}` }];
11711
11804
  };
11712
- async function loader$6({ request }) {
11805
+ async function loader$7({ request }) {
11713
11806
  ensureUndeployed();
11714
11807
  const timings = makeTimings("adminLoader");
11715
11808
  const workshopSlug = await getEpicWorkshopSlug() ?? "Unkown";
@@ -11920,18 +12013,18 @@ const route20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11920
12013
  __proto__: null,
11921
12014
  action: action$1,
11922
12015
  default: AdminLayout,
11923
- loader: loader$6,
12016
+ loader: loader$7,
11924
12017
  meta
11925
12018
  }, Symbol.toStringTag, { value: "Module" }));
11926
- async function loader$5() {
12019
+ async function loader$6() {
11927
12020
  const apps = await getApps();
11928
12021
  return json({ apps });
11929
12022
  }
11930
12023
  const route21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11931
12024
  __proto__: null,
11932
- loader: loader$5
12025
+ loader: loader$6
11933
12026
  }, Symbol.toStringTag, { value: "Module" }));
11934
- async function loader$4({ request }) {
12027
+ async function loader$5({ request }) {
11935
12028
  const timings = makeTimings("appsLoader");
11936
12029
  const apps = await getApps({ request, timings });
11937
12030
  return json(
@@ -11941,9 +12034,9 @@ async function loader$4({ request }) {
11941
12034
  }
11942
12035
  const route22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11943
12036
  __proto__: null,
11944
- loader: loader$4
12037
+ loader: loader$5
11945
12038
  }, Symbol.toStringTag, { value: "Module" }));
11946
- async function loader$3({ request }) {
12039
+ async function loader$4({ request }) {
11947
12040
  var _a2, _b2, _c, _d;
11948
12041
  const reqUrl = new URL(request.url);
11949
12042
  const searchParams = reqUrl.searchParams;
@@ -12031,9 +12124,9 @@ function DiffViewer() {
12031
12124
  const route23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12032
12125
  __proto__: null,
12033
12126
  default: DiffViewer,
12034
- loader: loader$3
12127
+ loader: loader$4
12035
12128
  }, Symbol.toStringTag, { value: "Module" }));
12036
- async function loader$2({ request }) {
12129
+ async function loader$3({ request }) {
12037
12130
  const timings = makeTimings("appsLoader");
12038
12131
  const exercises = await getExercises({ request, timings });
12039
12132
  return json(
@@ -12042,6 +12135,270 @@ async function loader$2({ request }) {
12042
12135
  );
12043
12136
  }
12044
12137
  const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12138
+ __proto__: null,
12139
+ loader: loader$3
12140
+ }, Symbol.toStringTag, { value: "Module" }));
12141
+ const epicWebLogo = /* @__PURE__ */ jsxs(
12142
+ "svg",
12143
+ {
12144
+ xmlns: "http://www.w3.org/2000/svg",
12145
+ width: "212",
12146
+ height: "56",
12147
+ fill: "none",
12148
+ viewBox: "0 0 264 70",
12149
+ children: [
12150
+ /* @__PURE__ */ jsxs("g", { fill: "#FFF", children: [
12151
+ /* @__PURE__ */ jsx("path", { d: "M92.593 36.536v6.189h9.061v2.453H90V25.662h11.515v2.454h-8.922v5.994h8.225v2.426h-8.225Z" }),
12152
+ /* @__PURE__ */ jsx(
12153
+ "path",
12154
+ {
12155
+ "fill-rule": "evenodd",
12156
+ d: "M109.942 25.662h7.081c1.813 0 3.29.614 4.489 1.813 1.199 1.198 1.812 2.676 1.812 4.46 0 1.757-.613 3.262-1.812 4.461-1.199 1.199-2.676 1.812-4.489 1.812h-4.488v6.97h-2.593V25.662Zm2.593 10.12h4.488c1.088 0 1.98-.362 2.677-1.086.697-.753 1.059-1.673 1.059-2.76 0-2.231-1.589-3.848-3.736-3.848h-4.488v7.695Z",
12157
+ "clip-rule": "evenodd"
12158
+ }
12159
+ ),
12160
+ /* @__PURE__ */ jsx("path", { d: "M131.126 43.379V27.342h-3.089v-1.828h8.809v1.828h-3.127V43.38h3.127v1.828h-8.809V43.38h3.089Zm21.11 2.161c-2.955 0-5.409-.975-7.332-2.927-1.924-1.951-2.872-4.349-2.872-7.193 0-2.843.948-5.241 2.872-7.193 1.923-1.951 4.377-2.927 7.332-2.927 3.569 0 6.747 1.84 8.42 4.74l-2.259 1.31c-1.115-2.147-3.485-3.54-6.161-3.54-2.258 0-4.098.724-5.52 2.174-1.422 1.45-2.119 3.262-2.119 5.436 0 2.147.697 3.96 2.119 5.41 1.422 1.449 3.262 2.174 5.52 2.174 2.676 0 5.046-1.394 6.161-3.513l2.259 1.282c-.809 1.45-1.98 2.621-3.485 3.485-1.506.865-3.151 1.283-4.935 1.283Z" }),
12161
+ /* @__PURE__ */ jsx(
12162
+ "path",
12163
+ {
12164
+ "fill-rule": "evenodd",
12165
+ d: "M101.654 42.725v2.453H90V25.662h11.515v2.454h-8.922v5.994h8.225v2.426h-8.225v6.189h9.061Zm-8.761-.3h9.061v3.053H89.7V25.362h12.115v3.054h-8.922v5.394h8.225v3.026h-8.225v5.589Zm16.749-17.063h7.381c1.889 0 3.444.643 4.701 1.9 1.257 1.257 1.9 2.812 1.9 4.673 0 1.834-.643 3.416-1.9 4.673-1.257 1.257-2.812 1.9-4.701 1.9h-4.188v6.97h-3.193V25.362Zm2.893 19.816h-2.593V25.662h7.081c1.813 0 3.29.614 4.489 1.813 1.199 1.198 1.812 2.676 1.812 4.46 0 1.757-.613 3.262-1.812 4.461-1.199 1.199-2.676 1.812-4.489 1.812h-4.488v6.97Zm15.502-17.836v-1.828h8.809v1.828h-3.127V43.38h3.127v1.828h-8.809V43.38h3.089V27.342h-3.089Zm2.789.3h-3.089v-2.428h9.409v2.428h-3.127V43.08h3.127v2.428h-9.409V43.08h3.089V27.642Zm30.239 2.507-2.789 1.618-.145-.279c-1.059-2.038-3.32-3.379-5.895-3.379-2.188 0-3.947.7-5.306 2.085-1.362 1.388-2.033 3.123-2.033 5.226 0 2.076.671 3.81 2.033 5.199 1.359 1.386 3.118 2.085 5.306 2.085 2.575 0 4.837-1.341 5.896-3.353l.144-.274 2.787 1.583-.145.26c-.837 1.499-2.047 2.708-3.598 3.599-1.554.891-3.25 1.322-5.084 1.322-3.028 0-5.561-1.003-7.546-3.017-1.982-2.01-2.958-4.485-2.958-7.404 0-2.918.976-5.392 2.958-7.403 1.985-2.014 4.518-3.017 7.546-3.017 3.672 0 6.951 1.894 8.68 4.89l.149.259Zm-48.23 5.334h4.188c1.012 0 1.823-.334 2.459-.993.643-.696.977-1.542.977-2.555 0-2.072-1.462-3.547-3.436-3.547h-4.188v7.095Zm6.865-.787c-.697.724-1.589 1.087-2.677 1.087h-4.488v-7.695h4.488c2.147 0 3.736 1.617 3.736 3.847 0 1.088-.362 2.008-1.059 2.76Zm40.805 6.337c-.8 1.33-1.92 2.413-3.334 3.225-1.506.865-3.151 1.283-4.935 1.283-2.955 0-5.409-.976-7.332-2.928-1.924-1.951-2.872-4.349-2.872-7.193 0-2.843.948-5.241 2.872-7.193 1.923-1.951 4.377-2.927 7.332-2.927 3.462 0 6.556 1.732 8.266 4.482l.131.218.023.04-2.259 1.31a6.226 6.226 0 0 0-.144-.263c-1.168-1.997-3.451-3.278-6.017-3.278-2.258 0-4.098.725-5.52 2.175-1.422 1.45-2.119 3.262-2.119 5.436 0 2.147.697 3.96 2.119 5.41 1.422 1.449 3.262 2.174 5.52 2.174 2.565 0 4.848-1.28 6.015-3.251.051-.086.1-.173.146-.262l2.259 1.282-.07.123c-.027.046-.053.092-.081.137Z",
12166
+ "clip-rule": "evenodd"
12167
+ }
12168
+ ),
12169
+ /* @__PURE__ */ jsx("path", { d: "M174.058 45.178h-3.011l-5.604-19.516h2.732l4.461 16.06 4.739-16.06h2.621l4.74 16.06 4.46-16.06h2.733l-5.604 19.516h-3.011l-4.628-15.585-4.628 15.585Zm27.294-8.643v6.19h9.061v2.453h-11.654V25.662h11.515v2.454h-8.922v5.994h8.225v2.425h-8.225Zm28.222-1.477c1.784.864 2.928 2.509 2.928 4.6 0 1.561-.558 2.872-1.645 3.931-1.088 1.06-2.426 1.59-4.015 1.59h-8.42V25.661h7.807c1.533 0 2.815.502 3.875 1.534 1.059 1.031 1.589 2.286 1.589 3.791 0 1.729-.697 3.095-2.119 4.07Zm-3.345-6.97h-5.214v5.966h5.214c1.644 0 2.899-1.31 2.899-2.983 0-.809-.279-1.506-.864-2.091-.558-.585-1.227-.892-2.035-.892Zm-5.214 14.665h5.827c1.756 0 3.095-1.394 3.095-3.179 0-.864-.307-1.617-.92-2.23-.586-.613-1.311-.92-2.175-.92h-5.827v6.329Z" }),
12170
+ /* @__PURE__ */ jsx(
12171
+ "path",
12172
+ {
12173
+ "fill-rule": "evenodd",
12174
+ d: "M174.281 45.478h-3.46l-5.777-20.116h3.359l4.241 15.27 4.507-15.27h3.069l4.507 15.27 4.241-15.27h3.359l-5.776 20.116h-3.461l-4.404-14.83-4.405 14.83Zm-.223-.3h-3.011l-5.604-19.516h2.732l4.461 16.06 4.739-16.06h2.621l4.74 16.06 4.46-16.06h2.733l-5.604 19.516h-3.011l-4.628-15.585-4.628 15.585Zm36.655-2.753v3.053h-12.254V25.362h12.115v3.054h-8.922v5.394h8.225v3.026h-8.225v5.589h9.061Zm-9.361.3v-6.19h8.225V34.11h-8.225v-5.994h8.922v-2.454h-11.515v19.516h11.654v-2.453h-9.061Zm16.77 2.753V25.362h8.107c1.607 0 2.966.53 4.084 1.619 1.118 1.088 1.68 2.42 1.68 4.006 0 1.66-.615 3.019-1.861 4.029 1.635.957 2.67 2.6 2.67 4.642 0 1.642-.59 3.03-1.736 4.146-1.146 1.117-2.561 1.674-4.224 1.674h-8.72Zm11.752-10.264a6.066 6.066 0 0 0-.3-.156c.094-.065.185-.131.273-.2 1.238-.958 1.846-2.256 1.846-3.87 0-1.506-.53-2.76-1.589-3.792-1.06-1.032-2.342-1.534-3.875-1.534h-7.807v19.516h8.42c1.589 0 2.927-.53 4.015-1.589 1.087-1.06 1.645-2.37 1.645-3.931 0-1.971-1.017-3.546-2.628-4.444Zm-1.827-6.027c-.505-.53-1.097-.8-1.818-.8h-4.914v5.367h4.914c1.469 0 2.599-1.166 2.599-2.683 0-.73-.248-1.35-.776-1.879l-.005-.005Zm-1.818 4.867c1.644 0 2.899-1.31 2.899-2.983 0-.809-.279-1.506-.864-2.091-.558-.585-1.227-.892-2.035-.892h-5.214v5.966h5.214Zm2.575 3.502-.005-.005c-.527-.553-1.173-.827-1.957-.827h-5.527v5.729h5.527c1.582 0 2.795-1.251 2.795-2.879a2.75 2.75 0 0 0-.833-2.018Zm-7.789 5.197v-6.329h5.827c.864 0 1.589.307 2.175.92.613.613.92 1.366.92 2.23 0 1.785-1.339 3.179-3.095 3.179h-5.827Z",
12175
+ "clip-rule": "evenodd"
12176
+ }
12177
+ ),
12178
+ /* @__PURE__ */ jsx("path", { d: "M239.041 32.853a.89.89 0 0 1-1.254 0 .89.89 0 0 1 0-1.254.89.89 0 0 1 1.254 0 .889.889 0 0 1 0 1.254Zm2.753-7.187h2.904c1.003 0 1.839.355 2.508 1.055.679.7 1.013 1.567 1.013 2.6 0 1.035-.334 1.902-1.013 2.602-.669.7-1.505 1.055-2.508 1.055h-2.904v-7.313Zm1.442 5.933h1.462c.638 0 1.15-.209 1.547-.627.397-.428.595-.971.595-1.65 0-.68-.198-1.223-.595-1.64-.397-.429-.909-.637-1.547-.637h-1.462v4.554Zm8.753-1.64v1.64h3.082v1.379h-4.524v-7.313h4.471v1.38h-3.029V28.6h2.768v1.358h-2.768Zm8.997 3.019H259.2l-2.455-7.313h1.567l1.786 5.62 1.776-5.62h1.578l-2.466 7.313Z" })
12179
+ ] }),
12180
+ /* @__PURE__ */ jsx(
12181
+ "path",
12182
+ {
12183
+ fill: "url(#markGradient)",
12184
+ d: "M36.277 33.738a64.504 64.504 0 0 1-4.257 2.15c-6.333 2.912-15.383 5.86-26.228 5.981l-1.249.014-.226-1.228a31.016 31.016 0 0 1-.531-5.638C3.786 17.804 17.787 3.802 35 3.802a31.05 31.05 0 0 1 13.295 2.975l4.146-2.113A34.774 34.774 0 0 0 35 0C15.712 0 0 15.712 0 35c0 7.7 2.504 14.83 6.74 20.617 7.252-1.235 11.802-4.14 11.802-4.14s-2.905 4.544-4.14 11.798A34.803 34.803 0 0 0 35 70c19.288 0 35-15.712 35-35a34.778 34.778 0 0 0-4.652-17.42l-2.11 4.138a31.037 31.037 0 0 1 2.976 13.299C66.214 52.23 52.213 66.23 35 66.23c-1.942 0-3.804-.196-5.635-.53l-1.231-.225.014-1.251c.12-10.854 3.069-19.903 5.98-26.234a64.386 64.386 0 0 1 2.149-4.253Z"
12185
+ }
12186
+ ),
12187
+ /* @__PURE__ */ jsx(
12188
+ "path",
12189
+ {
12190
+ fill: "#FFF",
12191
+ d: "m53.235 27.155-8.03-2.344-2.345-8.047L69.5.5 53.235 27.155Z"
12192
+ }
12193
+ ),
12194
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
12195
+ "linearGradient",
12196
+ {
12197
+ id: "markGradient",
12198
+ x1: "49.496",
12199
+ x2: "20.585",
12200
+ y1: "20.504",
12201
+ y2: "49.431",
12202
+ gradientUnits: "userSpaceOnUse",
12203
+ children: [
12204
+ /* @__PURE__ */ jsx("stop", { "stop-color": "#4F75FF" }),
12205
+ /* @__PURE__ */ jsx("stop", { offset: "1", "stop-color": "#30AFFF" })
12206
+ ]
12207
+ }
12208
+ ) })
12209
+ ]
12210
+ }
12211
+ );
12212
+ const WIDTH = 1200;
12213
+ const HEIGHT = 630;
12214
+ function OgLayout({
12215
+ instructor,
12216
+ children,
12217
+ request,
12218
+ urlPathname = new URL(request.url).pathname.replace(/\/og$/, ""),
12219
+ workshopTitle
12220
+ }) {
12221
+ const domain = getDomainUrl(request);
12222
+ const protocolFreeDomain = domain.replace(/^https?:\/\//, "");
12223
+ return /* @__PURE__ */ jsxs(
12224
+ "div",
12225
+ {
12226
+ style: {
12227
+ // fontFamily: ,
12228
+ display: "flex",
12229
+ flexDirection: "column",
12230
+ width: WIDTH,
12231
+ height: HEIGHT,
12232
+ position: "relative"
12233
+ },
12234
+ children: [
12235
+ /* @__PURE__ */ jsx(
12236
+ "div",
12237
+ {
12238
+ style: {
12239
+ display: "flex",
12240
+ position: "absolute",
12241
+ top: 0,
12242
+ right: 0,
12243
+ bottom: 0,
12244
+ left: 0,
12245
+ width: "100%",
12246
+ height: "100%",
12247
+ backgroundColor: "#080B16"
12248
+ },
12249
+ children: /* @__PURE__ */ jsx(
12250
+ "img",
12251
+ {
12252
+ style: {
12253
+ width: "100%",
12254
+ height: "100%",
12255
+ objectFit: "cover",
12256
+ opacity: 0.4
12257
+ },
12258
+ src: `${domain}/img/epicweb-og-background.png`
12259
+ }
12260
+ )
12261
+ }
12262
+ ),
12263
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", position: "absolute", top: 20, left: 30 }, children: epicWebLogo }),
12264
+ instructor ? /* @__PURE__ */ jsxs(
12265
+ "div",
12266
+ {
12267
+ style: {
12268
+ display: "flex",
12269
+ gap: 8,
12270
+ justifyContent: "center",
12271
+ alignItems: "center",
12272
+ position: "absolute",
12273
+ top: 20,
12274
+ right: 30
12275
+ },
12276
+ children: [
12277
+ instructor.avatar ? /* @__PURE__ */ jsx(
12278
+ "img",
12279
+ {
12280
+ src: instructor.avatar.startsWith("/") ? `${domain}${instructor.avatar}` : instructor.avatar,
12281
+ style: { width: 56, height: 56, borderRadius: "50%" }
12282
+ }
12283
+ ) : null,
12284
+ instructor.name ? /* @__PURE__ */ jsx(
12285
+ "h2",
12286
+ {
12287
+ style: {
12288
+ margin: 0,
12289
+ opacity: 0.8,
12290
+ color: "white",
12291
+ fontSize: 30,
12292
+ fontWeight: 700
12293
+ },
12294
+ children: instructor.name
12295
+ }
12296
+ ) : null
12297
+ ]
12298
+ }
12299
+ ) : null,
12300
+ children,
12301
+ workshopTitle ? /* @__PURE__ */ jsx(
12302
+ "div",
12303
+ {
12304
+ style: {
12305
+ display: "flex",
12306
+ position: "absolute",
12307
+ bottom: 20,
12308
+ left: 30,
12309
+ color: "white",
12310
+ opacity: 0.8,
12311
+ fontSize: 20,
12312
+ fontWeight: 700
12313
+ },
12314
+ children: workshopTitle
12315
+ }
12316
+ ) : null,
12317
+ urlPathname ? /* @__PURE__ */ jsx(
12318
+ "div",
12319
+ {
12320
+ style: {
12321
+ display: "flex",
12322
+ position: "absolute",
12323
+ bottom: 20,
12324
+ right: 30,
12325
+ color: "white",
12326
+ opacity: 0.8,
12327
+ fontSize: 20,
12328
+ fontWeight: 700
12329
+ },
12330
+ children: protocolFreeDomain + urlPathname
12331
+ }
12332
+ ) : null
12333
+ ]
12334
+ }
12335
+ );
12336
+ }
12337
+ async function loader$2({ request }) {
12338
+ const url = new URL(request.url);
12339
+ const workshopTitle = await getWorkshopTitle();
12340
+ const title = url.searchParams.get("title") || workshopTitle;
12341
+ const subtitle = url.searchParams.get("subtitle") || await getWorkshopSubtitle();
12342
+ const urlPathname = url.searchParams.get("urlPathname") || url.pathname;
12343
+ const element = /* @__PURE__ */ jsx(
12344
+ OgLayout,
12345
+ {
12346
+ request,
12347
+ instructor: await getWorkshopInstructor(),
12348
+ urlPathname,
12349
+ workshopTitle: workshopTitle === title ? null : workshopTitle,
12350
+ children: /* @__PURE__ */ jsxs(
12351
+ "div",
12352
+ {
12353
+ style: {
12354
+ display: "flex",
12355
+ flexDirection: "column",
12356
+ justifyContent: "center",
12357
+ alignItems: "center",
12358
+ height: "100%",
12359
+ width: "100%",
12360
+ color: "white"
12361
+ },
12362
+ children: [
12363
+ /* @__PURE__ */ jsx(
12364
+ "h1",
12365
+ {
12366
+ style: {
12367
+ fontSize: "80px",
12368
+ fontWeight: 700,
12369
+ textWrap: "balance",
12370
+ textAlign: "center"
12371
+ },
12372
+ children: title
12373
+ }
12374
+ ),
12375
+ subtitle ? /* @__PURE__ */ jsx(
12376
+ "p",
12377
+ {
12378
+ style: {
12379
+ fontSize: "40px",
12380
+ fontWeight: 200,
12381
+ textWrap: "balance",
12382
+ textAlign: "center"
12383
+ },
12384
+ children: subtitle
12385
+ }
12386
+ ) : null
12387
+ ]
12388
+ }
12389
+ )
12390
+ }
12391
+ );
12392
+ try {
12393
+ return new ImageResponse(element, {
12394
+ width: 1200,
12395
+ height: 630
12396
+ });
12397
+ } catch (error) {
12398
+ return new Response(getErrorMessage(error), { status: 500 });
12399
+ }
12400
+ }
12401
+ const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12045
12402
  __proto__: null,
12046
12403
  loader: loader$2
12047
12404
  }, Symbol.toStringTag, { value: "Module" }));
@@ -12083,7 +12440,7 @@ function Onboarding() {
12083
12440
  /* @__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!" }) })
12084
12441
  ] });
12085
12442
  }
12086
- const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12443
+ const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12087
12444
  __proto__: null,
12088
12445
  action,
12089
12446
  default: Onboarding,
@@ -12108,11 +12465,11 @@ async function loader() {
12108
12465
  }
12109
12466
  return json({ processes, testProcesses: testProcesses2 });
12110
12467
  }
12111
- const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12468
+ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12112
12469
  __proto__: null,
12113
12470
  loader
12114
12471
  }, Symbol.toStringTag, { value: "Module" }));
12115
- const serverManifest = { "entry": { "module": "/assets/entry.client-0j1eoieD.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.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-BJrmef-V.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/error-boundary-Bcric_4t.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-r90CY6Wk.js", "/assets/index-Bg9MMnnf.js", "/assets/presence-BJPzwbUy.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/_-COWH0sBh.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/error-boundary-Bcric_4t.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-CNgYirUN.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/user-73ocDYRe.js", "/assets/presence-BJPzwbUy.js", "/assets/progress-CF9Xwfxf.js", "/assets/index-Bg9MMnnf.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-BR-Qyofe.js", "imports": ["/assets/index-D6ygCrVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-jTT5JRgC.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-C37pli7_.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-CGUp6BkS.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/mdx-BYvGbvEr.js", "/assets/user-73ocDYRe.js", "/assets/index-9nNr0Zqr.js", "/assets/diff-tDYfSlOc.js", "/assets/error-boundary-Bcric_4t.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/progress-CF9Xwfxf.js", "/assets/discord-0kv66Q6F.js", "/assets/index-r90CY6Wk.js", "/assets/button-BfWwrI9B.js", "/assets/use-event-source-aW6X9lN1.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-zgJKkJ7I.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-DesvwOeg.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/request-info-Dyls4H67.js", "/assets/button-BfWwrI9B.js", "/assets/misc-DNgC2Frq.js", "/assets/user-73ocDYRe.js", "/assets/presence-BJPzwbUy.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-Xp0X4-Fl.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/user-73ocDYRe.js", "/assets/discord-0kv66Q6F.js"], "css": [] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-BSWdtBA4.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.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-BQRtqn3g.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/error-boundary-Bcric_4t.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.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-D8zyjBAb.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/request-info-Dyls4H67.js", "/assets/client-hints-BKxdo5Js.js", "/assets/use-event-source-aW6X9lN1.js", "/assets/button-BfWwrI9B.js", "/assets/loading-C9f_vBoM.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-DUAHYT3r.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.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-D0zbQZjf.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/progress-CF9Xwfxf.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-DZFtsH-a.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/mdx-BYvGbvEr.js", "/assets/diff-tDYfSlOc.js", "/assets/nav-chevrons-DOYtx9XE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-euWyXpCL.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/button-BfWwrI9B.js", "/assets/epic-video-BwtXsHGU.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-03cfc48d.js", "version": "03cfc48d" };
12472
+ const serverManifest = { "entry": { "module": "/assets/entry.client-0j1eoieD.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.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-BXq0yevS.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/error-boundary-Bcric_4t.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-r90CY6Wk.js", "/assets/index-Bg9MMnnf.js", "/assets/presence-BJPzwbUy.js", "/assets/seo-CHrqghsC.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/_-COWH0sBh.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/error-boundary-Bcric_4t.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-CNgYirUN.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/user-73ocDYRe.js", "/assets/presence-BJPzwbUy.js", "/assets/progress-CF9Xwfxf.js", "/assets/index-Bg9MMnnf.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-BR-Qyofe.js", "imports": ["/assets/index-D6ygCrVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-rfzZiDNa.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.js", "/assets/seo-CHrqghsC.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-C37pli7_.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-BG1Jwh7V.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/mdx-BYvGbvEr.js", "/assets/user-73ocDYRe.js", "/assets/index-9nNr0Zqr.js", "/assets/diff-BKsbFB6w.js", "/assets/error-boundary-Bcric_4t.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/progress-CF9Xwfxf.js", "/assets/seo-CHrqghsC.js", "/assets/discord-0kv66Q6F.js", "/assets/index-r90CY6Wk.js", "/assets/button-BfWwrI9B.js", "/assets/use-event-source-aW6X9lN1.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-B7SgnqdS.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.js", "/assets/seo-CHrqghsC.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-DesvwOeg.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/request-info-Dyls4H67.js", "/assets/button-BfWwrI9B.js", "/assets/misc-DNgC2Frq.js", "/assets/user-73ocDYRe.js", "/assets/presence-BJPzwbUy.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/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-Xp0X4-Fl.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/user-73ocDYRe.js", "/assets/discord-0kv66Q6F.js"], "css": [] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-BI2-0Ykt.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/nav-chevrons-DOYtx9XE.js", "/assets/mdx-BYvGbvEr.js", "/assets/seo-CHrqghsC.js", "/assets/progress-CF9Xwfxf.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-BQRtqn3g.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/index-9nNr0Zqr.js", "/assets/error-boundary-Bcric_4t.js", "/assets/mdx-BYvGbvEr.js", "/assets/progress-CF9Xwfxf.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-D8zyjBAb.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/request-info-Dyls4H67.js", "/assets/client-hints-BKxdo5Js.js", "/assets/use-event-source-aW6X9lN1.js", "/assets/button-BfWwrI9B.js", "/assets/loading-C9f_vBoM.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-DUAHYT3r.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/components-C5xBZAiL.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-D0zbQZjf.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/progress-CF9Xwfxf.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-KDzcgGYL.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/epic-video-BwtXsHGU.js", "/assets/progress-bar-7LK87ZMh.js", "/assets/mdx-BYvGbvEr.js", "/assets/diff-BKsbFB6w.js", "/assets/nav-chevrons-DOYtx9XE.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-euWyXpCL.js", "imports": ["/assets/index-D6ygCrVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-C5xBZAiL.js", "/assets/misc-DNgC2Frq.js", "/assets/request-info-Dyls4H67.js", "/assets/tooltip-Kw0lYWBI.js", "/assets/client-hints-BKxdo5Js.js", "/assets/index-Bg9MMnnf.js", "/assets/loading-C9f_vBoM.js", "/assets/button-BfWwrI9B.js", "/assets/epic-video-BwtXsHGU.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] } }, "url": "/assets/manifest-c65c0481.js", "version": "c65c0481" };
12116
12473
  const mode = "production";
12117
12474
  const assetsBuildDirectory = "build/client";
12118
12475
  const basename = "/";
@@ -12345,13 +12702,21 @@ const routes = {
12345
12702
  caseSensitive: void 0,
12346
12703
  module: route27
12347
12704
  },
12705
+ "routes/og": {
12706
+ id: "routes/og",
12707
+ parentId: "root",
12708
+ path: "og",
12709
+ index: void 0,
12710
+ caseSensitive: void 0,
12711
+ module: route28
12712
+ },
12348
12713
  "routes/onboarding": {
12349
12714
  id: "routes/onboarding",
12350
12715
  parentId: "root",
12351
12716
  path: "onboarding",
12352
12717
  index: void 0,
12353
12718
  caseSensitive: void 0,
12354
- module: route28
12719
+ module: route29
12355
12720
  },
12356
12721
  "routes/processes": {
12357
12722
  id: "routes/processes",
@@ -12359,7 +12724,7 @@ const routes = {
12359
12724
  path: "processes",
12360
12725
  index: void 0,
12361
12726
  caseSensitive: void 0,
12362
- module: route29
12727
+ module: route30
12363
12728
  },
12364
12729
  "routes/progress": {
12365
12730
  id: "routes/progress",
@@ -12367,7 +12732,7 @@ const routes = {
12367
12732
  path: "progress",
12368
12733
  index: void 0,
12369
12734
  caseSensitive: void 0,
12370
- module: route30
12735
+ module: route31
12371
12736
  },
12372
12737
  "routes/set-playground": {
12373
12738
  id: "routes/set-playground",
@@ -12375,7 +12740,7 @@ const routes = {
12375
12740
  path: "set-playground",
12376
12741
  index: void 0,
12377
12742
  caseSensitive: void 0,
12378
- module: route31
12743
+ module: route32
12379
12744
  },
12380
12745
  "routes/start": {
12381
12746
  id: "routes/start",
@@ -12383,7 +12748,7 @@ const routes = {
12383
12748
  path: "start",
12384
12749
  index: void 0,
12385
12750
  caseSensitive: void 0,
12386
- module: route32
12751
+ module: route33
12387
12752
  },
12388
12753
  "routes/test": {
12389
12754
  id: "routes/test",
@@ -12391,7 +12756,7 @@ const routes = {
12391
12756
  path: "test",
12392
12757
  index: void 0,
12393
12758
  caseSensitive: void 0,
12394
- module: route33
12759
+ module: route34
12395
12760
  },
12396
12761
  "routes/theme/index": {
12397
12762
  id: "routes/theme/index",
@@ -12399,7 +12764,7 @@ const routes = {
12399
12764
  path: "theme",
12400
12765
  index: void 0,
12401
12766
  caseSensitive: void 0,
12402
- module: route34
12767
+ module: route35
12403
12768
  },
12404
12769
  "routes/update-mdx-cache": {
12405
12770
  id: "routes/update-mdx-cache",
@@ -12407,7 +12772,7 @@ const routes = {
12407
12772
  path: "update-mdx-cache",
12408
12773
  index: void 0,
12409
12774
  caseSensitive: void 0,
12410
- module: route35
12775
+ module: route36
12411
12776
  },
12412
12777
  "routes/video-player/index": {
12413
12778
  id: "routes/video-player/index",
@@ -12415,7 +12780,7 @@ const routes = {
12415
12780
  path: "video-player",
12416
12781
  index: void 0,
12417
12782
  caseSensitive: void 0,
12418
- module: route36
12783
+ module: route37
12419
12784
  }
12420
12785
  };
12421
12786
  export {