@epic-web/workshop-app 5.3.8 → 5.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/build/client/assets/{_-CWSCXcBv.js → _-BrkpfnBb.js} +2 -2
  2. package/build/client/assets/{_-CWSCXcBv.js.map → _-BrkpfnBb.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber-DvMYZgqk.js → _exerciseNumber-DCSM0NCG.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber-DvMYZgqk.js.map → _exerciseNumber-DCSM0NCG.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-BA2Xhzqs.js → _exerciseNumber_._stepNumber-BIMJh_sg.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-BA2Xhzqs.js.map → _exerciseNumber_._stepNumber-BIMJh_sg.js.map} +1 -1
  7. package/build/client/assets/{_exerciseNumber_.finished-DYN2QHN6.js → _exerciseNumber_.finished-nbpk1ToO.js} +2 -2
  8. package/build/client/assets/{_exerciseNumber_.finished-DYN2QHN6.js.map → _exerciseNumber_.finished-nbpk1ToO.js.map} +1 -1
  9. package/build/client/assets/{_layout-BK7mLImi.js → _layout-Cbz7Qt-S.js} +2 -2
  10. package/build/client/assets/{_layout-BK7mLImi.js.map → _layout-Cbz7Qt-S.js.map} +1 -1
  11. package/build/client/assets/{_layout-BH5PQW0M.js → _layout-DTAM9xh5.js} +2 -2
  12. package/build/client/assets/{_layout-BH5PQW0M.js.map → _layout-DTAM9xh5.js.map} +1 -1
  13. package/build/client/assets/_layout-Dfmv2zcn.js +2 -0
  14. package/build/client/assets/_layout-Dfmv2zcn.js.map +1 -0
  15. package/build/client/assets/{accordion-DC885Li1.js → accordion-D9-D-n9p.js} +2 -2
  16. package/build/client/assets/{accordion-DC885Li1.js.map → accordion-D9-D-n9p.js.map} +1 -1
  17. package/build/client/assets/account-C4Piztoz.js +2 -0
  18. package/build/client/assets/account-C4Piztoz.js.map +1 -0
  19. package/build/client/assets/app-DgTXXO8s.js +2 -0
  20. package/build/client/assets/{app-CM8yuYni.js.map → app-DgTXXO8s.js.map} +1 -1
  21. package/build/client/assets/{button-DQ001ob0.js → button-_qPvcoqR.js} +2 -2
  22. package/build/client/assets/{button-DQ001ob0.js.map → button-_qPvcoqR.js.map} +1 -1
  23. package/build/client/assets/{components-9EGYHTc_.js → components-Be92gVxW.js} +2 -2
  24. package/build/client/assets/{components-9EGYHTc_.js.map → components-Be92gVxW.js.map} +1 -1
  25. package/build/client/assets/{diff-C2Hm_DHX.js → diff-8nlDkmpc.js} +2 -2
  26. package/build/client/assets/{diff-C2Hm_DHX.js.map → diff-8nlDkmpc.js.map} +1 -1
  27. package/build/client/assets/diff-BhRAIPKc.js +2 -0
  28. package/build/client/assets/{diff-CbIF8Oq1.js.map → diff-BhRAIPKc.js.map} +1 -1
  29. package/build/client/assets/discord-BUWZUTEC.js +2 -0
  30. package/build/client/assets/discord-BUWZUTEC.js.map +1 -0
  31. package/build/client/assets/discord-Bdnx7fu-.js +2 -0
  32. package/build/client/assets/discord-Bdnx7fu-.js.map +1 -0
  33. package/build/client/assets/{entry.client-BTYTUpFV.js → entry.client-DqIWuxf8.js} +2 -2
  34. package/build/client/assets/{entry.client-BTYTUpFV.js.map → entry.client-DqIWuxf8.js.map} +1 -1
  35. package/build/client/assets/{epic-video-Bxtz3elt.js → epic-video-Bp4BOD2R.js} +2 -2
  36. package/build/client/assets/{epic-video-Bxtz3elt.js.map → epic-video-Bp4BOD2R.js.map} +1 -1
  37. package/build/client/assets/{error-boundary-1-dmC941.js → error-boundary-BZA-ffa8.js} +2 -2
  38. package/build/client/assets/{error-boundary-1-dmC941.js.map → error-boundary-BZA-ffa8.js.map} +1 -1
  39. package/build/client/assets/{finished--PGQDzya.js → finished-C0cpfAFL.js} +2 -2
  40. package/build/client/assets/{finished--PGQDzya.js.map → finished-C0cpfAFL.js.map} +1 -1
  41. package/build/client/assets/{index-BuoaxPEj.js → index-BCTr8uu6.js} +2 -2
  42. package/build/client/assets/{index-BuoaxPEj.js.map → index-BCTr8uu6.js.map} +1 -1
  43. package/build/client/assets/{index-_J-F_Dnc.js → index-Bdg3v8tC.js} +2 -2
  44. package/build/client/assets/{index-_J-F_Dnc.js.map → index-Bdg3v8tC.js.map} +1 -1
  45. package/build/client/assets/{index-C2MH9l6b.js → index-Bi1TbRTj.js} +2 -2
  46. package/build/client/assets/{index-C2MH9l6b.js.map → index-Bi1TbRTj.js.map} +1 -1
  47. package/build/client/assets/{index-DRH72MzK.js → index-C9Hx0Dey.js} +2 -2
  48. package/build/client/assets/{index-DRH72MzK.js.map → index-C9Hx0Dey.js.map} +1 -1
  49. package/build/client/assets/{index-oZkQrXic.js → index-Ca4vBON4.js} +2 -2
  50. package/build/client/assets/{index-oZkQrXic.js.map → index-Ca4vBON4.js.map} +1 -1
  51. package/build/client/assets/{index-BuA_RWlU.js → index-DZDhtMuq.js} +2 -2
  52. package/build/client/assets/{index-BuA_RWlU.js.map → index-DZDhtMuq.js.map} +1 -1
  53. package/build/client/assets/index-pkiQppkK.js +2 -0
  54. package/build/client/assets/index-pkiQppkK.js.map +1 -0
  55. package/build/client/assets/{loading-Dk0n07O3.js → loading-XhMtj4mp.js} +2 -2
  56. package/build/client/assets/{loading-Dk0n07O3.js.map → loading-XhMtj4mp.js.map} +1 -1
  57. package/build/client/assets/{login-pZYDEC_l.js → login-C1oOgi98.js} +2 -2
  58. package/build/client/assets/{login-pZYDEC_l.js.map → login-C1oOgi98.js.map} +1 -1
  59. package/build/client/assets/manifest-e5b2a6e1.js +1 -0
  60. package/build/client/assets/{mdx-DIAWAXtT.js → mdx-CEjzXoEx.js} +2 -2
  61. package/build/client/assets/{mdx-DIAWAXtT.js.map → mdx-CEjzXoEx.js.map} +1 -1
  62. package/build/client/assets/{misc-BJtHv_Jh.js → misc-DUy_whwE.js} +2 -2
  63. package/build/client/assets/{misc-BJtHv_Jh.js.map → misc-DUy_whwE.js.map} +1 -1
  64. package/build/client/assets/{nav-chevrons-CgbSMLeb.js → nav-chevrons-DnR25VLp.js} +2 -2
  65. package/build/client/assets/{nav-chevrons-CgbSMLeb.js.map → nav-chevrons-DnR25VLp.js.map} +1 -1
  66. package/build/client/assets/{onboarding-BAVmCIKn.js → onboarding-C2YNq60k.js} +2 -2
  67. package/build/client/assets/{onboarding-BAVmCIKn.js.map → onboarding-C2YNq60k.js.map} +1 -1
  68. package/build/client/assets/{presence-DyppfK2V.js → presence-DJGFvdDh.js} +2 -2
  69. package/build/client/assets/{presence-DyppfK2V.js.map → presence-DJGFvdDh.js.map} +1 -1
  70. package/build/client/assets/{preview-CW_12I0i.js → preview-DaZd0wMb.js} +2 -2
  71. package/build/client/assets/{preview-CW_12I0i.js.map → preview-DaZd0wMb.js.map} +1 -1
  72. package/build/client/assets/{product-C1ynnrN_.js → product-DIAmCwmZ.js} +2 -2
  73. package/build/client/assets/{product-C1ynnrN_.js.map → product-DIAmCwmZ.js.map} +1 -1
  74. package/build/client/assets/{progress-DAB3nDa2.js → progress-DQt_Bn9o.js} +2 -2
  75. package/build/client/assets/{progress-DAB3nDa2.js.map → progress-DQt_Bn9o.js.map} +1 -1
  76. package/build/client/assets/{progress-bar-Cj5R4Zk7.js → progress-bar-BaTU3Yx_.js} +2 -2
  77. package/build/client/assets/{progress-bar-Cj5R4Zk7.js.map → progress-bar-BaTU3Yx_.js.map} +1 -1
  78. package/build/client/assets/{request-info-DCIQLE6H.js → request-info-ByUEfOil.js} +2 -2
  79. package/build/client/assets/{request-info-DCIQLE6H.js.map → request-info-ByUEfOil.js.map} +1 -1
  80. package/build/client/assets/{revalidation-ws-DU-PzW-_.js → revalidation-ws-dUa9CAqr.js} +2 -2
  81. package/build/client/assets/{revalidation-ws-DU-PzW-_.js.map → revalidation-ws-dUa9CAqr.js.map} +1 -1
  82. package/build/client/assets/{root-DCfiv1cO.js → root-a3d3Qwip.js} +2 -2
  83. package/build/client/assets/{root-DCfiv1cO.js.map → root-a3d3Qwip.js.map} +1 -1
  84. package/build/client/assets/{set-playground-S_rIwJAa.js → set-playground-CBHBA46B.js} +2 -2
  85. package/build/client/assets/{set-playground-S_rIwJAa.js.map → set-playground-CBHBA46B.js.map} +1 -1
  86. package/build/client/assets/{support-BNS-kEhc.js → support-CIz02V_r.js} +2 -2
  87. package/build/client/assets/{support-BNS-kEhc.js.map → support-CIz02V_r.js.map} +1 -1
  88. package/build/client/assets/test-DoKJvNug.js +2 -0
  89. package/build/client/assets/{test-3x2HHA0t.js.map → test-DoKJvNug.js.map} +1 -1
  90. package/build/client/assets/{tests-GmyhBOwD.js → tests-DbuyD2cI.js} +2 -2
  91. package/build/client/assets/{tests-GmyhBOwD.js.map → tests-DbuyD2cI.js.map} +1 -1
  92. package/build/client/assets/{tooltip-BgynKV2c.js → tooltip-DO9uwurQ.js} +2 -2
  93. package/build/client/assets/{tooltip-BgynKV2c.js.map → tooltip-DO9uwurQ.js.map} +1 -1
  94. package/build/client/assets/user-Bv6wYhQP.js +2 -0
  95. package/build/client/assets/{user-CFunCRfr.js.map → user-Bv6wYhQP.js.map} +1 -1
  96. package/build/client/assets/version-lxUUxt3s.js +2 -0
  97. package/build/client/assets/version-lxUUxt3s.js.map +1 -0
  98. package/build/client/assets/{workshop-config-DJY2cXU_.js → workshop-config-WVltG_BV.js} +2 -2
  99. package/build/client/assets/{workshop-config-DJY2cXU_.js.map → workshop-config-WVltG_BV.js.map} +1 -1
  100. package/build/server/index.js +368 -218
  101. package/build/server/index.js.map +1 -1
  102. package/package.json +3 -3
  103. package/start.js +6 -0
  104. package/build/client/assets/_layout-gyrNluke.js +0 -2
  105. package/build/client/assets/_layout-gyrNluke.js.map +0 -1
  106. package/build/client/assets/account-B5baO5pg.js +0 -2
  107. package/build/client/assets/account-B5baO5pg.js.map +0 -1
  108. package/build/client/assets/app-CM8yuYni.js +0 -2
  109. package/build/client/assets/diff-CbIF8Oq1.js +0 -2
  110. package/build/client/assets/discord-BnQDHWJj.js +0 -2
  111. package/build/client/assets/discord-BnQDHWJj.js.map +0 -1
  112. package/build/client/assets/discord-DcHxc30v.js +0 -2
  113. package/build/client/assets/discord-DcHxc30v.js.map +0 -1
  114. package/build/client/assets/manifest-7f4f8707.js +0 -1
  115. package/build/client/assets/test-3x2HHA0t.js +0 -2
  116. package/build/client/assets/user-CFunCRfr.js +0 -2
@@ -76,6 +76,7 @@ import { EventEmitter } from "events";
76
76
  import { remember } from "@epic-web/remember";
77
77
  import { Issuer } from "openid-client";
78
78
  import inspector from "node:inspector";
79
+ import { getCommitInfo, getLatestWorkshopAppVersion } from "@epic-web/workshop-utils/git.server";
79
80
  import { Resvg } from "@resvg/resvg-js";
80
81
  import satori from "satori";
81
82
  import { generateRobotsTxt, generateSitemap } from "@nasa-gcn/remix-seo";
@@ -877,7 +878,7 @@ function useTheme() {
877
878
  }
878
879
  return requestInfo.session.theme ?? hints.theme;
879
880
  }
880
- const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
881
+ const route44 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
881
882
  __proto__: null,
882
883
  ThemeSwitch,
883
884
  action: action$b,
@@ -1611,7 +1612,7 @@ const links = () => {
1611
1612
  { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" }
1612
1613
  ];
1613
1614
  };
1614
- const meta$5 = ({ data: data2 }) => {
1615
+ const meta$6 = ({ data: data2 }) => {
1615
1616
  if (!data2) return [];
1616
1617
  return getSeoMetaTags({
1617
1618
  instructor: data2.instructor,
@@ -1620,7 +1621,7 @@ const meta$5 = ({ data: data2 }) => {
1620
1621
  requestInfo: data2.requestInfo
1621
1622
  });
1622
1623
  };
1623
- async function loader$w({ request }) {
1624
+ async function loader$x({ request }) {
1624
1625
  const timings = makeTimings("rootLoader");
1625
1626
  const workshopConfig = getWorkshopConfig();
1626
1627
  const {
@@ -1690,7 +1691,7 @@ async function loader$w({ request }) {
1690
1691
  }
1691
1692
  );
1692
1693
  }
1693
- const headers$b = ({ loaderHeaders }) => {
1694
+ const headers$c = ({ loaderHeaders }) => {
1694
1695
  const headers2 = {
1695
1696
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
1696
1697
  "Server-Timing": loaderHeaders.get("Server-Timing") ?? ""
@@ -1764,12 +1765,12 @@ const route0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1764
1765
  __proto__: null,
1765
1766
  ErrorBoundary: ErrorBoundary$6,
1766
1767
  default: AppWithProviders,
1767
- headers: headers$b,
1768
+ headers: headers$c,
1768
1769
  links,
1769
- loader: loader$w,
1770
- meta: meta$5
1770
+ loader: loader$x,
1771
+ meta: meta$6
1771
1772
  }, Symbol.toStringTag, { value: "Module" }));
1772
- async function loader$v({ params }) {
1773
+ async function loader$w({ params }) {
1773
1774
  const splat = params["*"];
1774
1775
  const segments = (splat == null ? void 0 : splat.split("/")) ?? [];
1775
1776
  if (segments.length > 0 && !isNaN(Number(segments[0]))) {
@@ -1807,7 +1808,7 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1807
1808
  __proto__: null,
1808
1809
  ErrorBoundary: ErrorBoundary$5,
1809
1810
  default: NotFound,
1810
- loader: loader$v
1811
+ loader: loader$w
1811
1812
  }, Symbol.toStringTag, { value: "Module" }));
1812
1813
  function makeMediaQueryStore(mediaQuery, serverSnapshot) {
1813
1814
  function getSnapshot() {
@@ -2346,7 +2347,7 @@ function ProgressToggle({
2346
2347
  )
2347
2348
  ] });
2348
2349
  }
2349
- const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2350
+ const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2350
2351
  __proto__: null,
2351
2352
  ProgressToggle,
2352
2353
  action: action$a,
@@ -2357,7 +2358,7 @@ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
2357
2358
  useProgressItemClassName,
2358
2359
  useRequireEpicProgress
2359
2360
  }, Symbol.toStringTag, { value: "Module" }));
2360
- async function loader$u({ request }) {
2361
+ async function loader$v({ request }) {
2361
2362
  var _a;
2362
2363
  const timings = makeTimings("appLayoutLoader");
2363
2364
  const { title: workshopTitle } = getWorkshopConfig();
@@ -2404,7 +2405,7 @@ async function loader$u({ request }) {
2404
2405
  );
2405
2406
  return result;
2406
2407
  }
2407
- const headers$a = ({ loaderHeaders, parentHeaders }) => {
2408
+ const headers$b = ({ loaderHeaders, parentHeaders }) => {
2408
2409
  const headers2 = {
2409
2410
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
2410
2411
  Vary: "Cookie",
@@ -3446,8 +3447,8 @@ function NavToggle({
3446
3447
  const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3447
3448
  __proto__: null,
3448
3449
  default: App,
3449
- headers: headers$a,
3450
- loader: loader$u
3450
+ headers: headers$b,
3451
+ loader: loader$v
3451
3452
  }, Symbol.toStringTag, { value: "Module" }));
3452
3453
  function PendingState() {
3453
3454
  return /* @__PURE__ */ jsx("span", { className: "inline-block animate-spin", children: "🌀" });
@@ -3513,10 +3514,10 @@ function ButtonLink({
3513
3514
  }
3514
3515
  ) });
3515
3516
  }
3516
- const handle$7 = {
3517
+ const handle$9 = {
3517
3518
  getSitemapEntries: () => null
3518
3519
  };
3519
- async function loader$t({ request }) {
3520
+ async function loader$u({ request }) {
3520
3521
  ensureUndeployed();
3521
3522
  await requireAuthInfo({ request });
3522
3523
  return {};
@@ -3548,7 +3549,7 @@ function useConnectDiscordURL$1() {
3548
3549
  const {
3549
3550
  product: { host }
3550
3551
  } = useWorkshopConfig();
3551
- return `${host}/discord`;
3552
+ return `https://${host}/discord`;
3552
3553
  }
3553
3554
  function Account() {
3554
3555
  const user = useUser();
@@ -3647,8 +3648,8 @@ const route3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3647
3648
  __proto__: null,
3648
3649
  action: action$9,
3649
3650
  default: Account,
3650
- handle: handle$7,
3651
- loader: loader$t
3651
+ handle: handle$9,
3652
+ loader: loader$u
3652
3653
  }, Symbol.toStringTag, { value: "Module" }));
3653
3654
  async function getForceFresh(filePath, cacheEntry) {
3654
3655
  if (!cacheEntry) return true;
@@ -3738,7 +3739,7 @@ async function firstExisting(...files) {
3738
3739
  }
3739
3740
  return null;
3740
3741
  }
3741
- async function loader$s({ request, params }) {
3742
+ async function loader$t({ request, params }) {
3742
3743
  const timings = makeTimings("app-file");
3743
3744
  const { fileApp, app } = await resolveApps({ request, params, timings });
3744
3745
  if (!fileApp || !app) {
@@ -3796,9 +3797,9 @@ async function loader$s({ request, params }) {
3796
3797
  }
3797
3798
  const route4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3798
3799
  __proto__: null,
3799
- loader: loader$s
3800
+ loader: loader$t
3800
3801
  }, Symbol.toStringTag, { value: "Module" }));
3801
- async function loader$r(args) {
3802
+ async function loader$s(args) {
3802
3803
  const api = await getApiModule(args);
3803
3804
  invariantResponse(
3804
3805
  api.mod.loader,
@@ -3901,9 +3902,9 @@ async function getApiModule({ request, params }) {
3901
3902
  const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3902
3903
  __proto__: null,
3903
3904
  action: action$8,
3904
- loader: loader$r
3905
+ loader: loader$s
3905
3906
  }, Symbol.toStringTag, { value: "Module" }));
3906
- async function loader$q({ request, params }) {
3907
+ async function loader$r({ request, params }) {
3907
3908
  const timings = makeTimings("epic_ws script");
3908
3909
  const { fileApp, app } = await resolveApps({ request, params, timings });
3909
3910
  if (!fileApp || !app) {
@@ -3972,9 +3973,9 @@ async function loader$q({ request, params }) {
3972
3973
  }
3973
3974
  const route6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3974
3975
  __proto__: null,
3975
- loader: loader$q
3976
+ loader: loader$r
3976
3977
  }, Symbol.toStringTag, { value: "Module" }));
3977
- async function loader$p({ request, params }) {
3978
+ async function loader$q({ request, params }) {
3978
3979
  var _a;
3979
3980
  const timings = makeTimings("app");
3980
3981
  const { fileApp, app } = await resolveApps({ request, params, timings });
@@ -4060,9 +4061,9 @@ async function loader$p({ request, params }) {
4060
4061
  }
4061
4062
  const route7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4062
4063
  __proto__: null,
4063
- loader: loader$p
4064
+ loader: loader$q
4064
4065
  }, Symbol.toStringTag, { value: "Module" }));
4065
- async function loader$o({ request, params }) {
4066
+ async function loader$p({ request, params }) {
4066
4067
  var _a;
4067
4068
  const timings = makeTimings("app_test_loader");
4068
4069
  const userHasAccess = await userHasAccessToWorkshop({
@@ -4199,24 +4200,24 @@ ${testScriptTag}`;
4199
4200
  }
4200
4201
  const route8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4201
4202
  __proto__: null,
4202
- loader: loader$o
4203
+ loader: loader$p
4203
4204
  }, Symbol.toStringTag, { value: "Module" }));
4204
4205
  const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4205
4206
  __proto__: null,
4206
- loader: loader$q
4207
+ loader: loader$r
4207
4208
  }, Symbol.toStringTag, { value: "Module" }));
4208
4209
  const route10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4209
4210
  __proto__: null,
4210
- loader: loader$q
4211
+ loader: loader$r
4211
4212
  }, Symbol.toStringTag, { value: "Module" }));
4212
- const handle$6 = {
4213
+ const handle$8 = {
4213
4214
  getSitemapEntries: () => null
4214
4215
  };
4215
4216
  function useConnectDiscordURL() {
4216
4217
  const {
4217
4218
  product: { host }
4218
4219
  } = useWorkshopConfig();
4219
- return `${host}/discord`;
4220
+ return `https://${host}/discord`;
4220
4221
  }
4221
4222
  function useDiscordCTALink() {
4222
4223
  const user = useOptionalUser();
@@ -4324,10 +4325,10 @@ const route11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
4324
4325
  __proto__: null,
4325
4326
  DiscordCTA,
4326
4327
  default: DiscordRoute,
4327
- handle: handle$6,
4328
+ handle: handle$8,
4328
4329
  useDiscordCTALink
4329
4330
  }, Symbol.toStringTag, { value: "Module" }));
4330
- const handle$5 = {
4331
+ const handle$7 = {
4331
4332
  getSitemapEntries: async (request) => {
4332
4333
  const exercises = await getExercises({
4333
4334
  request
@@ -4350,7 +4351,7 @@ function ExercisesLayout() {
4350
4351
  const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4351
4352
  __proto__: null,
4352
4353
  default: ExercisesLayout,
4353
- handle: handle$5
4354
+ handle: handle$7
4354
4355
  }, Symbol.toStringTag, { value: "Module" }));
4355
4356
  const PlaybackTimeSchema = z.object({
4356
4357
  time: z.number(),
@@ -4550,7 +4551,7 @@ function isDeepEqual(obj1, obj2) {
4550
4551
  }
4551
4552
  return true;
4552
4553
  }
4553
- const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4554
+ const route45 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4554
4555
  __proto__: null,
4555
4556
  MuxPlayer,
4556
4557
  action: action$7,
@@ -5644,7 +5645,7 @@ function EditFileOnGitHub({
5644
5645
  );
5645
5646
  }
5646
5647
  const LaunchEditor = ENV.EPICSHOP_DEPLOYED ? LaunchGitHub : LaunchEditorImpl;
5647
- const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5648
+ const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5648
5649
  __proto__: null,
5649
5650
  EditFileOnGitHub,
5650
5651
  LaunchEditor,
@@ -5828,7 +5829,7 @@ function Mdx({
5828
5829
  );
5829
5830
  return /* @__PURE__ */ jsx(Component, { components });
5830
5831
  }
5831
- const meta$4 = ({
5832
+ const meta$5 = ({
5832
5833
  data: data2,
5833
5834
  matches
5834
5835
  }) => {
@@ -5845,7 +5846,7 @@ const meta$4 = ({
5845
5846
  requestInfo: rootData.requestInfo
5846
5847
  });
5847
5848
  };
5848
- async function loader$n({ request, params }) {
5849
+ async function loader$o({ request, params }) {
5849
5850
  const timings = makeTimings("exerciseNumberLoader");
5850
5851
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
5851
5852
  const { title: workshopTitle } = getWorkshopConfig();
@@ -5893,7 +5894,7 @@ async function loader$n({ request, params }) {
5893
5894
  }
5894
5895
  );
5895
5896
  }
5896
- const headers$9 = ({ loaderHeaders, parentHeaders }) => {
5897
+ const headers$a = ({ loaderHeaders, parentHeaders }) => {
5897
5898
  const headers2 = {
5898
5899
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
5899
5900
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
@@ -5987,11 +5988,11 @@ const route13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
5987
5988
  __proto__: null,
5988
5989
  ErrorBoundary: ErrorBoundary$4,
5989
5990
  default: ExerciseNumberRoute,
5990
- headers: headers$9,
5991
- loader: loader$n,
5992
- meta: meta$4
5991
+ headers: headers$a,
5992
+ loader: loader$o,
5993
+ meta: meta$5
5993
5994
  }, Symbol.toStringTag, { value: "Module" }));
5994
- async function loader$m({ request, params }) {
5995
+ async function loader$n({ request, params }) {
5995
5996
  const timings = makeTimings("stepLoader");
5996
5997
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
5997
5998
  const exercises = await getExercises({ request, timings });
@@ -6020,7 +6021,7 @@ async function loader$m({ request, params }) {
6020
6021
  );
6021
6022
  return result;
6022
6023
  }
6023
- const headers$8 = ({ loaderHeaders, parentHeaders }) => {
6024
+ const headers$9 = ({ loaderHeaders, parentHeaders }) => {
6024
6025
  const headers2 = {
6025
6026
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
6026
6027
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
@@ -6045,8 +6046,8 @@ const route14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
6045
6046
  __proto__: null,
6046
6047
  ErrorBoundary: ErrorBoundary$3,
6047
6048
  default: StepRoute,
6048
- headers: headers$8,
6049
- loader: loader$m
6049
+ headers: headers$9,
6050
+ loader: loader$n
6050
6051
  }, Symbol.toStringTag, { value: "Module" }));
6051
6052
  function NavChevrons({
6052
6053
  prev,
@@ -6672,7 +6673,7 @@ function SetAppToPlayground({ appName }) {
6672
6673
  }
6673
6674
  );
6674
6675
  }
6675
- const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6676
+ const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6676
6677
  __proto__: null,
6677
6678
  PlaygroundChooser,
6678
6679
  SetAppToPlayground,
@@ -7000,7 +7001,7 @@ function pageTitle(data2, workshopTitle) {
7000
7001
  type: (data2 == null ? void 0 : data2.type) ?? "problem"
7001
7002
  };
7002
7003
  }
7003
- const meta$3 = ({
7004
+ const meta$4 = ({
7004
7005
  data: data2,
7005
7006
  matches,
7006
7007
  params
@@ -7018,7 +7019,7 @@ const meta$3 = ({
7018
7019
  requestInfo: rootData.requestInfo
7019
7020
  });
7020
7021
  };
7021
- async function loader$l({ request, params }) {
7022
+ async function loader$m({ request, params }) {
7022
7023
  var _a, _b;
7023
7024
  const timings = makeTimings("exerciseStepTypeLayoutLoader");
7024
7025
  const url = new URL(request.url);
@@ -7147,7 +7148,7 @@ async function loader$l({ request, params }) {
7147
7148
  }
7148
7149
  );
7149
7150
  }
7150
- const headers$7 = ({ loaderHeaders, parentHeaders }) => {
7151
+ const headers$8 = ({ loaderHeaders, parentHeaders }) => {
7151
7152
  const headers2 = {
7152
7153
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
7153
7154
  };
@@ -7279,9 +7280,9 @@ const route15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
7279
7280
  __proto__: null,
7280
7281
  ErrorBoundary: ErrorBoundary$2,
7281
7282
  default: ExercisePartRoute$1,
7282
- headers: headers$7,
7283
- loader: loader$l,
7284
- meta: meta$3
7283
+ headers: headers$8,
7284
+ loader: loader$m,
7285
+ meta: meta$4
7285
7286
  }, Symbol.toStringTag, { value: "Module" }));
7286
7287
  async function action$4({ request }) {
7287
7288
  ensureUndeployed();
@@ -7420,7 +7421,7 @@ function AppStarter({ name }) {
7420
7421
  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" }) })
7421
7422
  ] });
7422
7423
  }
7423
- const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7424
+ const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7424
7425
  __proto__: null,
7425
7426
  AppStarter,
7426
7427
  AppStopper,
@@ -7883,7 +7884,7 @@ async function getAppRunningState(a) {
7883
7884
  const portIsAvailable = isRunning ? null : await isPortAvailable(a.dev.portNumber);
7884
7885
  return { isRunning, portIsAvailable };
7885
7886
  }
7886
- async function loader$k({ request, params }) {
7887
+ async function loader$l({ request, params }) {
7887
7888
  const timings = makeTimings("exercise-step-test");
7888
7889
  const exerciseStepApp = await requireExerciseApp(params, { request, timings });
7889
7890
  const { isRunning, portIsAvailable } = await getAppRunningState(exerciseStepApp);
@@ -7908,7 +7909,7 @@ async function loader$k({ request, params }) {
7908
7909
  }
7909
7910
  );
7910
7911
  }
7911
- const headers$6 = ({ loaderHeaders, parentHeaders }) => {
7912
+ const headers$7 = ({ loaderHeaders, parentHeaders }) => {
7912
7913
  const headers2 = {
7913
7914
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
7914
7915
  };
@@ -7922,8 +7923,8 @@ function TestsList$1() {
7922
7923
  const route16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7923
7924
  __proto__: null,
7924
7925
  default: TestsList$1,
7925
- headers: headers$6,
7926
- loader: loader$k
7926
+ headers: headers$7,
7927
+ loader: loader$l
7927
7928
  }, Symbol.toStringTag, { value: "Module" }));
7928
7929
  const AccordionComponent = ({
7929
7930
  title,
@@ -8799,7 +8800,7 @@ const testEventSchema = z.union([
8799
8800
  })
8800
8801
  ]);
8801
8802
  const testEventQueueSchema = z.array(testEventSchema);
8802
- async function loader$j({ request }) {
8803
+ async function loader$k({ request }) {
8803
8804
  ensureUndeployed();
8804
8805
  const url = new URL(request.url);
8805
8806
  const name = url.searchParams.get("name");
@@ -9148,14 +9149,14 @@ function StopTest({
9148
9149
  )
9149
9150
  ] });
9150
9151
  }
9151
- const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9152
+ const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9152
9153
  __proto__: null,
9153
9154
  ClearTest,
9154
9155
  StopTest,
9155
9156
  TestOutput,
9156
9157
  TestRunner,
9157
9158
  action: action$3,
9158
- loader: loader$j
9159
+ loader: loader$k
9159
9160
  }, Symbol.toStringTag, { value: "Module" }));
9160
9161
  function Tests({
9161
9162
  appInfo: playgroundAppInfo,
@@ -9222,7 +9223,7 @@ function TestUI({
9222
9223
  }
9223
9224
  return /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center text-lg", children: /* @__PURE__ */ jsx("p", { children: "No tests here 😢 Sorry." }) });
9224
9225
  }
9225
- async function loader$i({ request, params }) {
9226
+ async function loader$j({ request, params }) {
9226
9227
  const timings = makeTimings("exerciseStepTypeIndexLoader");
9227
9228
  const userHasAccess = await userHasAccessToWorkshop({
9228
9229
  request,
@@ -9359,7 +9360,7 @@ async function loader$i({ request, params }) {
9359
9360
  }
9360
9361
  );
9361
9362
  }
9362
- const headers$5 = ({ loaderHeaders, parentHeaders }) => {
9363
+ const headers$6 = ({ loaderHeaders, parentHeaders }) => {
9363
9364
  const headers2 = {
9364
9365
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
9365
9366
  };
@@ -9541,10 +9542,10 @@ const route17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
9541
9542
  __proto__: null,
9542
9543
  ErrorBoundary: ErrorBoundary$1,
9543
9544
  default: ExercisePartRoute,
9544
- headers: headers$5,
9545
- loader: loader$i
9545
+ headers: headers$6,
9546
+ loader: loader$j
9546
9547
  }, Symbol.toStringTag, { value: "Module" }));
9547
- async function loader$h({ request, params }) {
9548
+ async function loader$i({ request, params }) {
9548
9549
  const timings = makeTimings("exercise-step-test");
9549
9550
  const exerciseStepApp = await requireExerciseApp(params, { request, timings });
9550
9551
  return unstable_data$1(
@@ -9561,7 +9562,7 @@ async function loader$h({ request, params }) {
9561
9562
  }
9562
9563
  );
9563
9564
  }
9564
- const headers$4 = ({ loaderHeaders, parentHeaders }) => {
9565
+ const headers$5 = ({ loaderHeaders, parentHeaders }) => {
9565
9566
  const headers2 = {
9566
9567
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
9567
9568
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
@@ -9575,10 +9576,10 @@ function TestsList() {
9575
9576
  const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9576
9577
  __proto__: null,
9577
9578
  default: TestsList,
9578
- headers: headers$4,
9579
- loader: loader$h
9579
+ headers: headers$5,
9580
+ loader: loader$i
9580
9581
  }, Symbol.toStringTag, { value: "Module" }));
9581
- async function loader$g({ params }) {
9582
+ async function loader$h({ params }) {
9582
9583
  const problemApp = await getExerciseApp({ ...params, type: "problem" }).then(
9583
9584
  (a) => isProblemApp(a) ? a : null
9584
9585
  );
@@ -9600,9 +9601,9 @@ async function loader$g({ params }) {
9600
9601
  }
9601
9602
  const route19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9602
9603
  __proto__: null,
9603
- loader: loader$g
9604
+ loader: loader$h
9604
9605
  }, Symbol.toStringTag, { value: "Module" }));
9605
- const meta$2 = ({
9606
+ const meta$3 = ({
9606
9607
  data: data2,
9607
9608
  matches
9608
9609
  }) => {
@@ -9619,7 +9620,7 @@ const meta$2 = ({
9619
9620
  requestInfo: rootData.requestInfo
9620
9621
  });
9621
9622
  };
9622
- async function loader$f({ request, params }) {
9623
+ async function loader$g({ request, params }) {
9623
9624
  const timings = makeTimings("exerciseFinishedLoader");
9624
9625
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
9625
9626
  const exercise = await getExercise(params.exerciseNumber, {
@@ -9679,7 +9680,7 @@ async function loader$f({ request, params }) {
9679
9680
  }
9680
9681
  );
9681
9682
  }
9682
- const headers$3 = ({ loaderHeaders, parentHeaders }) => {
9683
+ const headers$4 = ({ loaderHeaders, parentHeaders }) => {
9683
9684
  const headers2 = {
9684
9685
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
9685
9686
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
@@ -9782,14 +9783,14 @@ function Survey$1({
9782
9783
  const route20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9783
9784
  __proto__: null,
9784
9785
  default: ExerciseFinished$1,
9785
- headers: headers$3,
9786
- loader: loader$f,
9787
- meta: meta$2
9786
+ headers: headers$4,
9787
+ loader: loader$g,
9788
+ meta: meta$3
9788
9789
  }, Symbol.toStringTag, { value: "Module" }));
9789
- const handle$4 = {
9790
+ const handle$6 = {
9790
9791
  getSitemapEntries: () => [{ route: "/finished" }]
9791
9792
  };
9792
- const meta$1 = ({
9793
+ const meta$2 = ({
9793
9794
  matches
9794
9795
  }) => {
9795
9796
  var _a;
@@ -9804,7 +9805,7 @@ const meta$1 = ({
9804
9805
  requestInfo: rootData.requestInfo
9805
9806
  });
9806
9807
  };
9807
- async function loader$e({ request }) {
9808
+ async function loader$f({ request }) {
9808
9809
  const timings = makeTimings("finishedLoader");
9809
9810
  const exercises = await getExercises({ request, timings });
9810
9811
  const compiledFinished = await time(() => getWorkshopFinished({ request }), {
@@ -9845,7 +9846,7 @@ async function loader$e({ request }) {
9845
9846
  }
9846
9847
  );
9847
9848
  }
9848
- const headers$2 = ({ loaderHeaders, parentHeaders }) => {
9849
+ const headers$3 = ({ loaderHeaders, parentHeaders }) => {
9849
9850
  const headers2 = {
9850
9851
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
9851
9852
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
@@ -9938,12 +9939,12 @@ function Survey({
9938
9939
  const route21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9939
9940
  __proto__: null,
9940
9941
  default: ExerciseFinished,
9941
- handle: handle$4,
9942
- headers: headers$2,
9943
- loader: loader$e,
9944
- meta: meta$1
9942
+ handle: handle$6,
9943
+ headers: headers$3,
9944
+ loader: loader$f,
9945
+ meta: meta$2
9945
9946
  }, Symbol.toStringTag, { value: "Module" }));
9946
- async function loader$d({ request }) {
9947
+ async function loader$e({ request }) {
9947
9948
  const timings = makeTimings("indexLoader");
9948
9949
  const { title } = getWorkshopConfig();
9949
9950
  const [exercises, workshopReadme] = await Promise.all([
@@ -9978,7 +9979,7 @@ async function loader$d({ request }) {
9978
9979
  }
9979
9980
  );
9980
9981
  }
9981
- const headers$1 = ({ loaderHeaders, parentHeaders }) => {
9982
+ const headers$2 = ({ loaderHeaders, parentHeaders }) => {
9982
9983
  const headers2 = {
9983
9984
  "Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
9984
9985
  "Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
@@ -10068,8 +10069,8 @@ const route22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
10068
10069
  __proto__: null,
10069
10070
  ErrorBoundary,
10070
10071
  default: Index,
10071
- headers: headers$1,
10072
- loader: loader$d
10072
+ headers: headers$2,
10073
+ loader: loader$e
10073
10074
  }, Symbol.toStringTag, { value: "Module" }));
10074
10075
  const EVENTS = {
10075
10076
  USER_CODE_RECEIVED: "USER_CODE_RECEIVED",
@@ -10134,7 +10135,7 @@ const EventSchema = z.union([
10134
10135
  AuthResolvedEventSchema,
10135
10136
  AuthRejectedEventSchema
10136
10137
  ]);
10137
- async function loader$c({ request }) {
10138
+ async function loader$d({ request }) {
10138
10139
  ensureUndeployed();
10139
10140
  return eventStream(request.signal, function setup(send) {
10140
10141
  function handleCodeReceived(data) {
@@ -10168,15 +10169,15 @@ async function loader$c({ request }) {
10168
10169
  };
10169
10170
  });
10170
10171
  }
10171
- const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10172
+ const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10172
10173
  __proto__: null,
10173
10174
  EventSchema,
10174
- loader: loader$c
10175
+ loader: loader$d
10175
10176
  }, Symbol.toStringTag, { value: "Module" }));
10176
- const handle$3 = {
10177
+ const handle$5 = {
10177
10178
  getSitemapEntries: () => null
10178
10179
  };
10179
- async function loader$b() {
10180
+ async function loader$c() {
10180
10181
  ensureUndeployed();
10181
10182
  const isAuthenticated = Boolean(await getAuthInfo());
10182
10183
  if (isAuthenticated) throw redirect$1("/account");
@@ -10295,10 +10296,10 @@ const route23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
10295
10296
  __proto__: null,
10296
10297
  action: action$2,
10297
10298
  default: Login,
10298
- handle: handle$3,
10299
- loader: loader$b
10299
+ handle: handle$5,
10300
+ loader: loader$c
10300
10301
  }, Symbol.toStringTag, { value: "Module" }));
10301
- const handle$2 = {
10302
+ const handle$4 = {
10302
10303
  getSitemapEntries: () => null
10303
10304
  };
10304
10305
  function Support() {
@@ -10357,9 +10358,56 @@ function Support() {
10357
10358
  const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10358
10359
  __proto__: null,
10359
10360
  default: Support,
10360
- handle: handle$2
10361
+ handle: handle$4
10362
+ }, Symbol.toStringTag, { value: "Module" }));
10363
+ const handle$3 = {
10364
+ getSitemapEntries: () => null
10365
+ };
10366
+ const meta$1 = ({ matches }) => {
10367
+ var _a;
10368
+ const rootData = (_a = matches.find((m) => m.id === "root")) == null ? void 0 : _a.data;
10369
+ return [{ title: `👷 | ${rootData == null ? void 0 : rootData.workshopTitle}` }];
10370
+ };
10371
+ function AdminLayout$1() {
10372
+ return /* @__PURE__ */ jsxs("main", { className: "container mx-auto mt-8", children: [
10373
+ /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold", children: "Admin" }),
10374
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
10375
+ /* @__PURE__ */ jsx("nav", { children: /* @__PURE__ */ jsxs("ul", { className: "flex gap-3", children: [
10376
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { className: "underline", to: "/", children: "Home" }) }),
10377
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { className: "underline", to: "/admin", children: "Admin" }) }),
10378
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { className: "underline", to: "/diff", children: "Diff Viewer" }) }),
10379
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { className: "underline", to: "version", children: "Version" }) })
10380
+ ] }) }),
10381
+ /* @__PURE__ */ jsx(Outlet, {})
10382
+ ] })
10383
+ ] });
10384
+ }
10385
+ const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10386
+ __proto__: null,
10387
+ default: AdminLayout$1,
10388
+ handle: handle$3,
10389
+ meta: meta$1
10390
+ }, Symbol.toStringTag, { value: "Module" }));
10391
+ async function loader$b() {
10392
+ ensureUndeployed();
10393
+ const apps = await getApps();
10394
+ return Response.json({ apps });
10395
+ }
10396
+ const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10397
+ __proto__: null,
10398
+ loader: loader$b
10399
+ }, Symbol.toStringTag, { value: "Module" }));
10400
+ async function loader$a() {
10401
+ ensureUndeployed();
10402
+ const entries = await getAllFileCacheEntries();
10403
+ return Response.json({ entries });
10404
+ }
10405
+ const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10406
+ __proto__: null,
10407
+ loader: loader$a
10361
10408
  }, Symbol.toStringTag, { value: "Module" }));
10362
10409
  async function clearData() {
10410
+ if (ENV.EPICSHOP_DEPLOYED) return;
10363
10411
  await clearCaches();
10364
10412
  await deleteDb();
10365
10413
  }
@@ -10369,6 +10417,7 @@ async function clearCaches() {
10369
10417
  await deleteCache();
10370
10418
  }
10371
10419
  async function startInspector() {
10420
+ if (ENV.EPICSHOP_DEPLOYED) return;
10372
10421
  if (!global.__inspector_open__) {
10373
10422
  global.__inspector_open__ = true;
10374
10423
  inspector.open();
@@ -10377,6 +10426,7 @@ async function startInspector() {
10377
10426
  }
10378
10427
  }
10379
10428
  async function stopInspector() {
10429
+ if (ENV.EPICSHOP_DEPLOYED) return;
10380
10430
  if (global.__inspector_open__) {
10381
10431
  global.__inspector_open__ = false;
10382
10432
  inspector.close();
@@ -10384,7 +10434,7 @@ async function stopInspector() {
10384
10434
  console.info(`Inspector already stopped.`);
10385
10435
  }
10386
10436
  }
10387
- const handle$1 = {
10437
+ const handle$2 = {
10388
10438
  getSitemapEntries: () => null
10389
10439
  };
10390
10440
  const meta = ({
@@ -10394,7 +10444,7 @@ const meta = ({
10394
10444
  const rootData = (_a = matches.find((m) => m.id === "root")) == null ? void 0 : _a.data;
10395
10445
  return [{ title: `👷 | ${rootData == null ? void 0 : rootData.workshopTitle}` }];
10396
10446
  };
10397
- async function loader$a({ request }) {
10447
+ async function loader$9({ request }) {
10398
10448
  ensureUndeployed();
10399
10449
  const timings = makeTimings("adminLoader");
10400
10450
  const apps = (await getApps({ request, timings })).filter(
@@ -10484,82 +10534,75 @@ function AdminLayout() {
10484
10534
  completed: "bg-blue-500",
10485
10535
  incomplete: "bg-yellow-500"
10486
10536
  };
10487
- return /* @__PURE__ */ jsxs("main", { className: "container mx-auto mt-8", children: [
10488
- /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold", children: "Admin" }),
10489
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
10490
- /* @__PURE__ */ jsx("nav", { children: /* @__PURE__ */ jsxs("ul", { className: "flex gap-3", children: [
10491
- /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { className: "underline", to: "/", children: "Home" }) }),
10492
- /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { className: "underline", to: "/diff", children: "Diff Viewer" }) })
10493
- ] }) }),
10494
- /* @__PURE__ */ jsxs("div", { children: [
10495
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Progress" }),
10496
- epicProgress ? /* @__PURE__ */ jsx("ul", { className: "flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: epicProgress.sort(sortProgress).map((progress) => {
10497
- const status = progress.epicCompletedAt ? "completed" : "incomplete";
10498
- const label = [
10499
- progress.epicLessonSlug,
10500
- progress.epicCompletedAt ? `(${progress.epicCompletedAt})` : null
10501
- ].filter(Boolean).join(" ");
10502
- return /* @__PURE__ */ jsxs(
10503
- "li",
10504
- {
10505
- className: "flex items-center gap-2",
10506
- children: [
10507
- /* @__PURE__ */ jsx(
10508
- "span",
10509
- {
10510
- className: `h-3 w-3 rounded-full ${progressStatus[status]}`,
10511
- title: status
10512
- }
10513
- ),
10514
- progress.type === "unknown" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
10515
- label,
10516
- /* @__PURE__ */ jsx("span", { className: "text-red-500", children: /* @__PURE__ */ jsx(SimpleTooltip, { content: "This video is in the workshop on EpicWeb.dev, but not in the local workshop.", children: /* @__PURE__ */ jsx(Icon, { name: "Close" }) }) })
10517
- ] }) : /* @__PURE__ */ jsx(Link, { to: linkProgress(progress), children: label }),
10518
- /* @__PURE__ */ jsx(Link, { to: progress.epicLessonUrl, children: /* @__PURE__ */ jsx(Icon, { name: "ExternalLink" }) })
10519
- ]
10520
- },
10521
- progress.epicLessonSlug
10522
- );
10523
- }) }) : /* @__PURE__ */ jsx("p", { children: "No progress data" })
10524
- ] }),
10525
- /* @__PURE__ */ jsxs("div", { children: [
10526
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Commands" }),
10527
- /* @__PURE__ */ jsxs("ul", { className: "max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: [
10528
- /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "clear-caches", children: "Clear local caches" }) }) }),
10529
- /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "clear-data", children: "Clear all local data (including auth data)" }) }) }),
10530
- /* @__PURE__ */ jsx("li", { children: data2.inspectorRunning ? /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "stop-inspect", children: isStartingInspector ? "Stopping inspector..." : "Stop inspector" }) }) : /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "inspect", children: isStoppingInspector ? "Starting inspector..." : "Start inspector" }) }) })
10531
- ] })
10532
- ] }),
10533
- /* @__PURE__ */ jsxs("div", { children: [
10534
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Apps" }),
10535
- /* @__PURE__ */ jsx("ul", { className: "max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: data2.apps.map((app) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 py-1", children: [
10536
- data2.processes[app.name] ? /* @__PURE__ */ jsx(Pinger, { status: "running" }) : /* @__PURE__ */ jsx(Pinger, { status: "stopped" }),
10537
- app.name
10538
- ] }, app.name)) })
10539
- ] }),
10540
- /* @__PURE__ */ jsxs("div", { children: [
10541
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Processes" }),
10542
- /* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(data2.processes).map(([key, process2]) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", { children: [
10543
- key,
10544
- " - Port: ",
10545
- process2.port,
10546
- " - PID ",
10547
- process2.pid,
10548
- " -",
10549
- " ",
10550
- process2.color
10551
- ] }) }, key)) })
10552
- ] }),
10553
- /* @__PURE__ */ jsxs("div", { children: [
10554
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Test Processes" }),
10555
- /* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(data2.testProcesses).map(([key, process2]) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", { children: [
10556
- key,
10557
- " - PID ",
10558
- process2.pid,
10559
- " - Exit code: ",
10560
- process2.exitCode
10561
- ] }) }, key)) })
10537
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
10538
+ /* @__PURE__ */ jsxs("div", { children: [
10539
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Progress" }),
10540
+ epicProgress ? /* @__PURE__ */ jsx("ul", { className: "flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: epicProgress.sort(sortProgress).map((progress) => {
10541
+ const status = progress.epicCompletedAt ? "completed" : "incomplete";
10542
+ const label = [
10543
+ progress.epicLessonSlug,
10544
+ progress.epicCompletedAt ? `(${progress.epicCompletedAt})` : null
10545
+ ].filter(Boolean).join(" ");
10546
+ return /* @__PURE__ */ jsxs(
10547
+ "li",
10548
+ {
10549
+ className: "flex items-center gap-2",
10550
+ children: [
10551
+ /* @__PURE__ */ jsx(
10552
+ "span",
10553
+ {
10554
+ className: `h-3 w-3 rounded-full ${progressStatus[status]}`,
10555
+ title: status
10556
+ }
10557
+ ),
10558
+ progress.type === "unknown" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
10559
+ label,
10560
+ /* @__PURE__ */ jsx("span", { className: "text-red-500", children: /* @__PURE__ */ jsx(SimpleTooltip, { content: "This video is in the workshop on EpicWeb.dev, but not in the local workshop.", children: /* @__PURE__ */ jsx(Icon, { name: "Close" }) }) })
10561
+ ] }) : /* @__PURE__ */ jsx(Link, { to: linkProgress(progress), children: label }),
10562
+ /* @__PURE__ */ jsx(Link, { to: progress.epicLessonUrl, children: /* @__PURE__ */ jsx(Icon, { name: "ExternalLink" }) })
10563
+ ]
10564
+ },
10565
+ progress.epicLessonSlug
10566
+ );
10567
+ }) }) : /* @__PURE__ */ jsx("p", { children: "No progress data" })
10568
+ ] }),
10569
+ /* @__PURE__ */ jsxs("div", { children: [
10570
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Commands" }),
10571
+ /* @__PURE__ */ jsxs("ul", { className: "max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: [
10572
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "clear-caches", children: "Clear local caches" }) }) }),
10573
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "clear-data", children: "Clear all local data (including auth data)" }) }) }),
10574
+ /* @__PURE__ */ jsx("li", { children: data2.inspectorRunning ? /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "stop-inspect", children: isStartingInspector ? "Stopping inspector..." : "Stop inspector" }) }) : /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "inspect", children: isStoppingInspector ? "Starting inspector..." : "Start inspector" }) }) })
10562
10575
  ] })
10576
+ ] }),
10577
+ /* @__PURE__ */ jsxs("div", { children: [
10578
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Apps" }),
10579
+ /* @__PURE__ */ jsx("ul", { className: "max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: data2.apps.map((app) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 py-1", children: [
10580
+ data2.processes[app.name] ? /* @__PURE__ */ jsx(Pinger, { status: "running" }) : /* @__PURE__ */ jsx(Pinger, { status: "stopped" }),
10581
+ app.name
10582
+ ] }, app.name)) })
10583
+ ] }),
10584
+ /* @__PURE__ */ jsxs("div", { children: [
10585
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Processes" }),
10586
+ /* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(data2.processes).map(([key, process2]) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", { children: [
10587
+ key,
10588
+ " - Port: ",
10589
+ process2.port,
10590
+ " - PID ",
10591
+ process2.pid,
10592
+ " -",
10593
+ " ",
10594
+ process2.color
10595
+ ] }) }, key)) })
10596
+ ] }),
10597
+ /* @__PURE__ */ jsxs("div", { children: [
10598
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Test Processes" }),
10599
+ /* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(data2.testProcesses).map(([key, process2]) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", { children: [
10600
+ key,
10601
+ " - PID ",
10602
+ process2.pid,
10603
+ " - Exit code: ",
10604
+ process2.exitCode
10605
+ ] }) }, key)) })
10563
10606
  ] })
10564
10607
  ] });
10565
10608
  }
@@ -10598,30 +10641,121 @@ function Pinger({
10598
10641
  )
10599
10642
  ] });
10600
10643
  }
10601
- const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10644
+ const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10602
10645
  __proto__: null,
10603
10646
  action: action$1,
10604
10647
  default: AdminLayout,
10605
- handle: handle$1,
10606
- loader: loader$a,
10648
+ handle: handle$2,
10649
+ loader: loader$9,
10607
10650
  meta
10608
10651
  }, Symbol.toStringTag, { value: "Module" }));
10609
- async function loader$9() {
10610
- ensureUndeployed();
10611
- const apps = await getApps();
10612
- return Response.json({ apps });
10613
- }
10614
- const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10615
- __proto__: null,
10616
- loader: loader$9
10617
- }, Symbol.toStringTag, { value: "Module" }));
10652
+ const handle$1 = {
10653
+ getSitemapEntries: () => null
10654
+ };
10618
10655
  async function loader$8() {
10619
- ensureUndeployed();
10620
- const entries = await getAllFileCacheEntries();
10621
- return Response.json({ entries });
10656
+ const timings = makeTimings("versionLoader");
10657
+ const [commitInfo, latestVersion] = await Promise.all([
10658
+ time(() => getCommitInfo(), { timings, type: "getCommitInfo" }),
10659
+ time(() => getLatestWorkshopAppVersion(), {
10660
+ timings,
10661
+ type: "getLatestWorkshopAppVersion"
10662
+ })
10663
+ ]);
10664
+ const dayjs2 = getDayjs();
10665
+ const uptime = process.uptime() * 1e3;
10666
+ const startDate = new Date(Date.now() - uptime);
10667
+ return unstable_data(
10668
+ {
10669
+ workshopCommit: commitInfo ? {
10670
+ ...commitInfo,
10671
+ dateFormatted: dayjs2(commitInfo.date).format("YYYY-MM-DD HH:mm:ss"),
10672
+ dateFromNow: dayjs2(commitInfo.date).fromNow()
10673
+ } : null,
10674
+ latestWorkshopAppVersion: latestVersion,
10675
+ startTime: startDate.toISOString(),
10676
+ startTimeFormatted: dayjs2(startDate).format("YYYY-MM-DD HH:mm:ss"),
10677
+ startTimeFromNow: dayjs2(startDate).fromNow()
10678
+ },
10679
+ {
10680
+ headers: {
10681
+ "Server-Timing": timings.toString()
10682
+ }
10683
+ }
10684
+ );
10622
10685
  }
10623
- const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10686
+ const headers$1 = ({ parentHeaders, loaderHeaders }) => {
10687
+ return {
10688
+ "Server-Timing": combineServerTimings(parentHeaders, loaderHeaders)
10689
+ };
10690
+ };
10691
+ function Version() {
10692
+ const data2 = useLoaderData();
10693
+ const workshopConfig = useWorkshopConfig();
10694
+ return /* @__PURE__ */ jsxs("div", { children: [
10695
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Workshop Version Information" }),
10696
+ /* @__PURE__ */ jsx("h3", { className: "text-md font-bold", children: "Workshop Commit" }),
10697
+ data2.workshopCommit ? /* @__PURE__ */ jsxs(Fragment, { children: [
10698
+ /* @__PURE__ */ jsxs("p", { children: [
10699
+ "Hash:",
10700
+ " ",
10701
+ /* @__PURE__ */ jsx(
10702
+ "a",
10703
+ {
10704
+ href: `${workshopConfig.githubRepo}/commit/${data2.workshopCommit.hash}`,
10705
+ className: "underline",
10706
+ children: data2.workshopCommit.hash
10707
+ }
10708
+ )
10709
+ ] }),
10710
+ /* @__PURE__ */ jsxs("p", { children: [
10711
+ "Message: ",
10712
+ data2.workshopCommit.message
10713
+ ] }),
10714
+ /* @__PURE__ */ jsxs("p", { children: [
10715
+ "Date: ",
10716
+ data2.workshopCommit.dateFormatted,
10717
+ " (",
10718
+ data2.workshopCommit.dateFromNow,
10719
+ ")"
10720
+ ] })
10721
+ ] }) : /* @__PURE__ */ jsx("p", { children: "No commit information available" }),
10722
+ /* @__PURE__ */ jsx("h3", { className: "text-md font-bold", children: "Workshop App" }),
10723
+ /* @__PURE__ */ jsxs("p", { children: [
10724
+ "Current Version: ",
10725
+ ENV.EPICSHOP_APP_VERSION ? /* @__PURE__ */ jsx(
10726
+ "a",
10727
+ {
10728
+ href: `https://github.com/epicweb-dev/epicshop/releases/tag/v${ENV.EPICSHOP_APP_VERSION}`,
10729
+ className: "underline",
10730
+ children: ENV.EPICSHOP_APP_VERSION
10731
+ }
10732
+ ) : "Unknown"
10733
+ ] }),
10734
+ /* @__PURE__ */ jsxs("p", { children: [
10735
+ "Latest Version: ",
10736
+ /* @__PURE__ */ jsx(
10737
+ "a",
10738
+ {
10739
+ href: `https://github.com/epicweb-dev/epicshop/releases/tag/v${data2.latestWorkshopAppVersion}`,
10740
+ className: "underline",
10741
+ children: data2.latestWorkshopAppVersion
10742
+ }
10743
+ )
10744
+ ] }),
10745
+ /* @__PURE__ */ jsx("h3", { className: "text-md font-bold", children: "App Start Time" }),
10746
+ /* @__PURE__ */ jsxs("p", { children: [
10747
+ data2.startTimeFormatted,
10748
+ " (",
10749
+ data2.startTimeFromNow,
10750
+ ")"
10751
+ ] })
10752
+ ] });
10753
+ }
10754
+ const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10624
10755
  __proto__: null,
10756
+ default: Version,
10757
+ handle: handle$1,
10758
+ headers: headers$1,
10625
10759
  loader: loader$8
10626
10760
  }, Symbol.toStringTag, { value: "Module" }));
10627
10761
  async function loader$7({ request }) {
@@ -10632,7 +10766,7 @@ async function loader$7({ request }) {
10632
10766
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
10633
10767
  );
10634
10768
  }
10635
- const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10769
+ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10636
10770
  __proto__: null,
10637
10771
  loader: loader$7
10638
10772
  }, Symbol.toStringTag, { value: "Module" }));
@@ -10721,7 +10855,7 @@ function DiffViewer() {
10721
10855
  }
10722
10856
  );
10723
10857
  }
10724
- const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10858
+ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10725
10859
  __proto__: null,
10726
10860
  default: DiffViewer,
10727
10861
  loader: loader$6
@@ -10734,7 +10868,7 @@ async function loader$5({ request }) {
10734
10868
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
10735
10869
  );
10736
10870
  }
10737
- const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10871
+ const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10738
10872
  __proto__: null,
10739
10873
  loader: loader$5
10740
10874
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11065,7 +11199,7 @@ function OgLayout({
11065
11199
  }
11066
11200
  );
11067
11201
  }
11068
- const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11202
+ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11069
11203
  __proto__: null,
11070
11204
  loader: loader$4
11071
11205
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11113,7 +11247,7 @@ function Onboarding() {
11113
11247
  /* @__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!" }) })
11114
11248
  ] });
11115
11249
  }
11116
- const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11250
+ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11117
11251
  __proto__: null,
11118
11252
  action,
11119
11253
  default: Onboarding,
@@ -11139,7 +11273,7 @@ async function loader$2() {
11139
11273
  }
11140
11274
  return Response.json({ processes, testProcesses });
11141
11275
  }
11142
- const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11276
+ const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11143
11277
  __proto__: null,
11144
11278
  loader: loader$2
11145
11279
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11148,7 +11282,7 @@ function loader$1({ request }) {
11148
11282
  { type: "sitemap", value: `${getDomainUrl(request)}/sitemap.xml` }
11149
11283
  ]);
11150
11284
  }
11151
- const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11285
+ const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11152
11286
  __proto__: null,
11153
11287
  loader: loader$1
11154
11288
  }, Symbol.toStringTag, { value: "Module" }));
@@ -11161,11 +11295,11 @@ async function loader({ request, context }) {
11161
11295
  }
11162
11296
  });
11163
11297
  }
11164
- const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11298
+ const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11165
11299
  __proto__: null,
11166
11300
  loader
11167
11301
  }, Symbol.toStringTag, { value: "Module" }));
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" };
11302
+ const serverManifest = { "entry": { "module": "/assets/entry.client-DqIWuxf8.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.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-a3d3Qwip.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/pe-ChIwTk8v.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/index-C9Hx0Dey.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-Bdg3v8tC.js", "/assets/presence-DJGFvdDh.js", "/assets/seo-pBpFCWsy.js", "/assets/request-info-ByUEfOil.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/_-BrkpfnBb.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/misc-DUy_whwE.js", "/assets/components-Be92gVxW.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-Cbz7Qt-S.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/pe-ChIwTk8v.js", "/assets/product-DIAmCwmZ.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-BCTr8uu6.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/presence-DJGFvdDh.js", "/assets/progress-DQt_Bn9o.js", "/assets/index-Bdg3v8tC.js", "/assets/components-Be92gVxW.js", "/assets/request-info-ByUEfOil.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-C4Piztoz.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-_qPvcoqR.js", "/assets/misc-DUy_whwE.js", "/assets/tooltip-DO9uwurQ.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/presence-DJGFvdDh.js", "/assets/components-Be92gVxW.js", "/assets/request-info-ByUEfOil.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-Bdnx7fu-.js", "imports": ["/assets/discord-BUWZUTEC.js", "/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/components-Be92gVxW.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.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-DCSM0NCG.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/progress-DQt_Bn9o.js", "/assets/misc-DUy_whwE.js", "/assets/seo-pBpFCWsy.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.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-BIMJh_sg.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/components-Be92gVxW.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-DTAM9xh5.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/progress-DQt_Bn9o.js", "/assets/set-playground-CBHBA46B.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-DUy_whwE.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/tooltip-DO9uwurQ.js", "/assets/request-info-ByUEfOil.js", "/assets/components-Be92gVxW.js", "/assets/index-BCTr8uu6.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/pe-ChIwTk8v.js", "/assets/index-DZDhtMuq.js", "/assets/index-Bdg3v8tC.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.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-DgTXXO8s.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/preview-DaZd0wMb.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/request-info-ByUEfOil.js", "/assets/button-_qPvcoqR.js", "/assets/loading-XhMtj4mp.js", "/assets/index-Bdg3v8tC.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/progress-bar-BaTU3Yx_.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-Bi1TbRTj.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-DZDhtMuq.js", "/assets/misc-DUy_whwE.js", "/assets/diff-8nlDkmpc.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/loading-XhMtj4mp.js", "/assets/discord-BUWZUTEC.js", "/assets/components-Be92gVxW.js", "/assets/index-C9Hx0Dey.js", "/assets/set-playground-CBHBA46B.js", "/assets/tests-DbuyD2cI.js", "/assets/preview-DaZd0wMb.js", "/assets/index-BCTr8uu6.js", "/assets/accordion-D9-D-n9p.js", "/assets/mdx-CEjzXoEx.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/pe-ChIwTk8v.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-_qPvcoqR.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-DoKJvNug.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tests-DbuyD2cI.js", "/assets/components-Be92gVxW.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/misc-DUy_whwE.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/accordion-D9-D-n9p.js", "/assets/index-DZDhtMuq.js", "/assets/index-BCTr8uu6.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/set-playground-CBHBA46B.js", "/assets/progress-bar-BaTU3Yx_.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-nbpk1ToO.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/loading-XhMtj4mp.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/progress-DQt_Bn9o.js", "/assets/misc-DUy_whwE.js", "/assets/seo-pBpFCWsy.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.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-C0cpfAFL.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/loading-XhMtj4mp.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/misc-DUy_whwE.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-DQt_Bn9o.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.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-Ca4vBON4.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/mdx-CEjzXoEx.js", "/assets/misc-DUy_whwE.js", "/assets/progress-DQt_Bn9o.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.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-C1oOgi98.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-_qPvcoqR.js", "/assets/loading-XhMtj4mp.js", "/assets/product-DIAmCwmZ.js", "/assets/workshop-config-WVltG_BV.js", "/assets/request-info-ByUEfOil.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/index-Bdg3v8tC.js", "/assets/tooltip-DO9uwurQ.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-CIz02V_r.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-Dfmv2zcn.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.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/admin+/index": { "id": "routes/admin+/index", "parentId": "routes/admin+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-pkiQppkK.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/tooltip-DO9uwurQ.js", "/assets/progress-DQt_Bn9o.js", "/assets/components-Be92gVxW.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/admin+/version": { "id": "routes/admin+/version", "parentId": "routes/admin+/_layout", "path": "version", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/version-lxUUxt3s.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/workshop-config-WVltG_BV.js", "/assets/components-Be92gVxW.js"], "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-BhRAIPKc.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/diff-8nlDkmpc.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/components-Be92gVxW.js", "/assets/accordion-D9-D-n9p.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-DZDhtMuq.js", "/assets/index-BCTr8uu6.js", "/assets/mdx-CEjzXoEx.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/revalidation-ws-dUa9CAqr.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-C2YNq60k.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-_qPvcoqR.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.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-e5b2a6e1.js", "version": "e5b2a6e1" };
11169
11303
  const mode = "production";
11170
11304
  const assetsBuildDirectory = "build/client";
11171
11305
  const basename = "/";
@@ -11398,13 +11532,29 @@ const routes = {
11398
11532
  caseSensitive: void 0,
11399
11533
  module: route27
11400
11534
  },
11535
+ "routes/admin+/index": {
11536
+ id: "routes/admin+/index",
11537
+ parentId: "routes/admin+/_layout",
11538
+ path: void 0,
11539
+ index: true,
11540
+ caseSensitive: void 0,
11541
+ module: route28
11542
+ },
11543
+ "routes/admin+/version": {
11544
+ id: "routes/admin+/version",
11545
+ parentId: "routes/admin+/_layout",
11546
+ path: "version",
11547
+ index: void 0,
11548
+ caseSensitive: void 0,
11549
+ module: route29
11550
+ },
11401
11551
  "routes/apps": {
11402
11552
  id: "routes/apps",
11403
11553
  parentId: "root",
11404
11554
  path: "apps",
11405
11555
  index: void 0,
11406
11556
  caseSensitive: void 0,
11407
- module: route28
11557
+ module: route30
11408
11558
  },
11409
11559
  "routes/diff": {
11410
11560
  id: "routes/diff",
@@ -11412,7 +11562,7 @@ const routes = {
11412
11562
  path: "diff",
11413
11563
  index: void 0,
11414
11564
  caseSensitive: void 0,
11415
- module: route29
11565
+ module: route31
11416
11566
  },
11417
11567
  "routes/exercises": {
11418
11568
  id: "routes/exercises",
@@ -11420,7 +11570,7 @@ const routes = {
11420
11570
  path: "exercises",
11421
11571
  index: void 0,
11422
11572
  caseSensitive: void 0,
11423
- module: route30
11573
+ module: route32
11424
11574
  },
11425
11575
  "routes/launch-editor": {
11426
11576
  id: "routes/launch-editor",
@@ -11428,7 +11578,7 @@ const routes = {
11428
11578
  path: "launch-editor",
11429
11579
  index: void 0,
11430
11580
  caseSensitive: void 0,
11431
- module: route31
11581
+ module: route33
11432
11582
  },
11433
11583
  "routes/login-sse": {
11434
11584
  id: "routes/login-sse",
@@ -11436,7 +11586,7 @@ const routes = {
11436
11586
  path: "login-sse",
11437
11587
  index: void 0,
11438
11588
  caseSensitive: void 0,
11439
- module: route32
11589
+ module: route34
11440
11590
  },
11441
11591
  "routes/og": {
11442
11592
  id: "routes/og",
@@ -11444,7 +11594,7 @@ const routes = {
11444
11594
  path: "og",
11445
11595
  index: void 0,
11446
11596
  caseSensitive: void 0,
11447
- module: route33
11597
+ module: route35
11448
11598
  },
11449
11599
  "routes/onboarding": {
11450
11600
  id: "routes/onboarding",
@@ -11452,7 +11602,7 @@ const routes = {
11452
11602
  path: "onboarding",
11453
11603
  index: void 0,
11454
11604
  caseSensitive: void 0,
11455
- module: route34
11605
+ module: route36
11456
11606
  },
11457
11607
  "routes/processes": {
11458
11608
  id: "routes/processes",
@@ -11460,7 +11610,7 @@ const routes = {
11460
11610
  path: "processes",
11461
11611
  index: void 0,
11462
11612
  caseSensitive: void 0,
11463
- module: route35
11613
+ module: route37
11464
11614
  },
11465
11615
  "routes/progress": {
11466
11616
  id: "routes/progress",
@@ -11468,7 +11618,7 @@ const routes = {
11468
11618
  path: "progress",
11469
11619
  index: void 0,
11470
11620
  caseSensitive: void 0,
11471
- module: route36
11621
+ module: route38
11472
11622
  },
11473
11623
  "routes/robots[.]txt": {
11474
11624
  id: "routes/robots[.]txt",
@@ -11476,7 +11626,7 @@ const routes = {
11476
11626
  path: "robots.txt",
11477
11627
  index: void 0,
11478
11628
  caseSensitive: void 0,
11479
- module: route37
11629
+ module: route39
11480
11630
  },
11481
11631
  "routes/set-playground": {
11482
11632
  id: "routes/set-playground",
@@ -11484,7 +11634,7 @@ const routes = {
11484
11634
  path: "set-playground",
11485
11635
  index: void 0,
11486
11636
  caseSensitive: void 0,
11487
- module: route38
11637
+ module: route40
11488
11638
  },
11489
11639
  "routes/sitemap[.]xml": {
11490
11640
  id: "routes/sitemap[.]xml",
@@ -11492,7 +11642,7 @@ const routes = {
11492
11642
  path: "sitemap.xml",
11493
11643
  index: void 0,
11494
11644
  caseSensitive: void 0,
11495
- module: route39
11645
+ module: route41
11496
11646
  },
11497
11647
  "routes/start": {
11498
11648
  id: "routes/start",
@@ -11500,7 +11650,7 @@ const routes = {
11500
11650
  path: "start",
11501
11651
  index: void 0,
11502
11652
  caseSensitive: void 0,
11503
- module: route40
11653
+ module: route42
11504
11654
  },
11505
11655
  "routes/test": {
11506
11656
  id: "routes/test",
@@ -11508,7 +11658,7 @@ const routes = {
11508
11658
  path: "test",
11509
11659
  index: void 0,
11510
11660
  caseSensitive: void 0,
11511
- module: route41
11661
+ module: route43
11512
11662
  },
11513
11663
  "routes/theme/index": {
11514
11664
  id: "routes/theme/index",
@@ -11516,7 +11666,7 @@ const routes = {
11516
11666
  path: "theme",
11517
11667
  index: void 0,
11518
11668
  caseSensitive: void 0,
11519
- module: route42
11669
+ module: route44
11520
11670
  },
11521
11671
  "routes/video-player/index": {
11522
11672
  id: "routes/video-player/index",
@@ -11524,7 +11674,7 @@ const routes = {
11524
11674
  path: "video-player",
11525
11675
  index: void 0,
11526
11676
  caseSensitive: void 0,
11527
- module: route43
11677
+ module: route45
11528
11678
  }
11529
11679
  };
11530
11680
  export {