@epic-web/workshop-app 5.5.0 → 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/build/client/assets/{_-BrkpfnBb.js → _-hAKYb2AG.js} +2 -2
  2. package/build/client/assets/{_-BrkpfnBb.js.map → _-hAKYb2AG.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber-PTdG9GGB.js +2 -0
  4. package/build/client/assets/{_exerciseNumber-DCSM0NCG.js.map → _exerciseNumber-PTdG9GGB.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-BIMJh_sg.js → _exerciseNumber_._stepNumber-03erOIGo.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-BIMJh_sg.js.map → _exerciseNumber_._stepNumber-03erOIGo.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-DQg4F1NL.js +2 -0
  8. package/build/client/assets/{_exerciseNumber_.finished-nbpk1ToO.js.map → _exerciseNumber_.finished-DQg4F1NL.js.map} +1 -1
  9. package/build/client/assets/{_layout-88n0To1b.js → _layout-B4JGpA3A.js} +2 -2
  10. package/build/client/assets/{_layout-88n0To1b.js.map → _layout-B4JGpA3A.js.map} +1 -1
  11. package/build/client/assets/{_layout-Dfmv2zcn.js → _layout-BJbMl6SJ.js} +2 -2
  12. package/build/client/assets/{_layout-Dfmv2zcn.js.map → _layout-BJbMl6SJ.js.map} +1 -1
  13. package/build/client/assets/{_layout-B8j0pWoF.js → _layout-Bu0lel3p.js} +2 -2
  14. package/build/client/assets/{_layout-B8j0pWoF.js.map → _layout-Bu0lel3p.js.map} +1 -1
  15. package/build/client/assets/_layout-DHoH74NH.js +2 -0
  16. package/build/client/assets/{_layout-DTAM9xh5.js.map → _layout-DHoH74NH.js.map} +1 -1
  17. package/build/client/assets/{accordion-D9-D-n9p.js → accordion-DLg7gJkp.js} +2 -2
  18. package/build/client/assets/{accordion-D9-D-n9p.js.map → accordion-DLg7gJkp.js.map} +1 -1
  19. package/build/client/assets/account-DLDPrc9J.js +2 -0
  20. package/build/client/assets/account-DLDPrc9J.js.map +1 -0
  21. package/build/client/assets/app-DJDjmdlu.js +2 -0
  22. package/build/client/assets/{app-DgTXXO8s.js.map → app-DJDjmdlu.js.map} +1 -1
  23. package/build/client/assets/{button-_qPvcoqR.js → button-39zQyNX6.js} +2 -2
  24. package/build/client/assets/{button-_qPvcoqR.js.map → button-39zQyNX6.js.map} +1 -1
  25. package/build/client/assets/{components-Be92gVxW.js → components-DUNtf72c.js} +2 -2
  26. package/build/client/assets/{components-Be92gVxW.js.map → components-DUNtf72c.js.map} +1 -1
  27. package/build/client/assets/diff-B3oaU_KB.js +2 -0
  28. package/build/client/assets/{diff-BhRAIPKc.js.map → diff-B3oaU_KB.js.map} +1 -1
  29. package/build/client/assets/{diff-8nlDkmpc.js → diff-BNCREJvf.js} +2 -2
  30. package/build/client/assets/{diff-8nlDkmpc.js.map → diff-BNCREJvf.js.map} +1 -1
  31. package/build/client/assets/{discord-BUWZUTEC.js → discord-CEOqKs_c.js} +2 -2
  32. package/build/client/assets/{discord-BUWZUTEC.js.map → discord-CEOqKs_c.js.map} +1 -1
  33. package/build/client/assets/discord-CpIgvYus.js +2 -0
  34. package/build/client/assets/discord-CpIgvYus.js.map +1 -0
  35. package/build/client/assets/{entry.client-DqIWuxf8.js → entry.client-CrlHhRMR.js} +2 -2
  36. package/build/client/assets/{entry.client-DqIWuxf8.js.map → entry.client-CrlHhRMR.js.map} +1 -1
  37. package/build/client/assets/epic-video-D8ex9vao.js +2 -0
  38. package/build/client/assets/epic-video-D8ex9vao.js.map +1 -0
  39. package/build/client/assets/error-boundary-3zItlMUO.js +2 -0
  40. package/build/client/assets/{error-boundary-BZA-ffa8.js.map → error-boundary-3zItlMUO.js.map} +1 -1
  41. package/build/client/assets/finished-rUzUjnEm.js +2 -0
  42. package/build/client/assets/{finished-C0cpfAFL.js.map → finished-rUzUjnEm.js.map} +1 -1
  43. package/build/client/assets/index-BajUQsFT.js +3053 -0
  44. package/build/client/assets/index-BajUQsFT.js.map +1 -0
  45. package/build/client/assets/{index-BCxBKsqT.js → index-CLNXC84j.js} +2 -2
  46. package/build/client/assets/{index-BCxBKsqT.js.map → index-CLNXC84j.js.map} +1 -1
  47. package/build/client/assets/{index-BCTr8uu6.js → index-CV3nxGFp.js} +2 -2
  48. package/build/client/assets/{index-BCTr8uu6.js.map → index-CV3nxGFp.js.map} +1 -1
  49. package/build/client/assets/{index-BFGhCX_U.js → index-C_B1-9rF.js} +2 -2
  50. package/build/client/assets/{index-BFGhCX_U.js.map → index-C_B1-9rF.js.map} +1 -1
  51. package/build/client/assets/{index-pkiQppkK.js → index-DDqzbGM2.js} +2 -2
  52. package/build/client/assets/{index-pkiQppkK.js.map → index-DDqzbGM2.js.map} +1 -1
  53. package/build/client/assets/index-DE-jwnOP.js +2 -0
  54. package/build/client/assets/{index-Bi1TbRTj.js.map → index-DE-jwnOP.js.map} +1 -1
  55. package/build/client/assets/{index-DZDhtMuq.js → index-DFqQCjCw.js} +2 -2
  56. package/build/client/assets/{index-DZDhtMuq.js.map → index-DFqQCjCw.js.map} +1 -1
  57. package/build/client/assets/{index-Bdg3v8tC.js → index-DH1w3QmP.js} +2 -2
  58. package/build/client/assets/{index-Bdg3v8tC.js.map → index-DH1w3QmP.js.map} +1 -1
  59. package/build/client/assets/{index-C9Hx0Dey.js → index-LjRZeU7x.js} +2 -2
  60. package/build/client/assets/{index-C9Hx0Dey.js.map → index-LjRZeU7x.js.map} +1 -1
  61. package/build/client/assets/index-mivnjq36.js +2 -0
  62. package/build/client/assets/{index-Ca4vBON4.js.map → index-mivnjq36.js.map} +1 -1
  63. package/build/client/assets/{loading-XhMtj4mp.js → loading-DW_I206H.js} +2 -2
  64. package/build/client/assets/{loading-XhMtj4mp.js.map → loading-DW_I206H.js.map} +1 -1
  65. package/build/client/assets/{login-C1oOgi98.js → login-CdNej0Z7.js} +2 -2
  66. package/build/client/assets/{login-C1oOgi98.js.map → login-CdNej0Z7.js.map} +1 -1
  67. package/build/client/assets/manifest-62ea49c4.js +1 -0
  68. package/build/client/assets/{mdx-CEjzXoEx.js → mdx-C9dqA6IZ.js} +2 -2
  69. package/build/client/assets/{mdx-CEjzXoEx.js.map → mdx-C9dqA6IZ.js.map} +1 -1
  70. package/build/client/assets/{misc-DUy_whwE.js → misc-DIdEn_jt.js} +2 -2
  71. package/build/client/assets/{misc-DUy_whwE.js.map → misc-DIdEn_jt.js.map} +1 -1
  72. package/build/client/assets/{nav-chevrons-DnR25VLp.js → nav-chevrons-B3SvZV8B.js} +2 -2
  73. package/build/client/assets/{nav-chevrons-DnR25VLp.js.map → nav-chevrons-B3SvZV8B.js.map} +1 -1
  74. package/build/client/assets/onboarding-CC9zz4rl.js +2 -0
  75. package/build/client/assets/{onboarding-C2YNq60k.js.map → onboarding-CC9zz4rl.js.map} +1 -1
  76. package/build/client/assets/{pe-ChIwTk8v.js → pe-D5h19vSo.js} +2 -2
  77. package/build/client/assets/{pe-ChIwTk8v.js.map → pe-D5h19vSo.js.map} +1 -1
  78. package/build/client/assets/{presence-8FPJKg_8.js → presence-D1DPz__2.js} +2 -2
  79. package/build/client/assets/{presence-8FPJKg_8.js.map → presence-D1DPz__2.js.map} +1 -1
  80. package/build/client/assets/{preview-DaZd0wMb.js → preview-BEtmdi0E.js} +2 -2
  81. package/build/client/assets/{preview-DaZd0wMb.js.map → preview-BEtmdi0E.js.map} +1 -1
  82. package/build/client/assets/{product-DIAmCwmZ.js → product-CYOFfeJM.js} +2 -2
  83. package/build/client/assets/{product-DIAmCwmZ.js.map → product-CYOFfeJM.js.map} +1 -1
  84. package/build/client/assets/{progress-DQt_Bn9o.js → progress-D6SP0Gec.js} +2 -2
  85. package/build/client/assets/{progress-DQt_Bn9o.js.map → progress-D6SP0Gec.js.map} +1 -1
  86. package/build/client/assets/{progress-bar-BaTU3Yx_.js → progress-bar-CBDBzRQ2.js} +2 -2
  87. package/build/client/assets/{progress-bar-BaTU3Yx_.js.map → progress-bar-CBDBzRQ2.js.map} +1 -1
  88. package/build/client/assets/{request-info-ByUEfOil.js → request-info-vBkaf3Rk.js} +2 -2
  89. package/build/client/assets/{request-info-ByUEfOil.js.map → request-info-vBkaf3Rk.js.map} +1 -1
  90. package/build/client/assets/{revalidation-ws-dUa9CAqr.js → revalidation-ws-DK5QOPlL.js} +2 -2
  91. package/build/client/assets/{revalidation-ws-dUa9CAqr.js.map → revalidation-ws-DK5QOPlL.js.map} +1 -1
  92. package/build/client/assets/{root-D12XnE1S.js → root-Bg-hxaOK.js} +2 -2
  93. package/build/client/assets/{root-D12XnE1S.js.map → root-Bg-hxaOK.js.map} +1 -1
  94. package/build/client/assets/{set-playground-CBHBA46B.js → set-playground-CMoUFgkO.js} +2 -2
  95. package/build/client/assets/{set-playground-CBHBA46B.js.map → set-playground-CMoUFgkO.js.map} +1 -1
  96. package/build/client/assets/{support-CIz02V_r.js → support-CPzYlWkd.js} +2 -2
  97. package/build/client/assets/{support-CIz02V_r.js.map → support-CPzYlWkd.js.map} +1 -1
  98. package/build/client/assets/test-C8wkLh9a.js +2 -0
  99. package/build/client/assets/{test-DoKJvNug.js.map → test-C8wkLh9a.js.map} +1 -1
  100. package/build/client/assets/{tests-DbuyD2cI.js → tests-CiM4RPOf.js} +2 -2
  101. package/build/client/assets/{tests-DbuyD2cI.js.map → tests-CiM4RPOf.js.map} +1 -1
  102. package/build/client/assets/{tooltip-DO9uwurQ.js → tooltip-BoVikCa-.js} +2 -2
  103. package/build/client/assets/{tooltip-DO9uwurQ.js.map → tooltip-BoVikCa-.js.map} +1 -1
  104. package/build/client/assets/{use-event-source-x59d4R2Z.js → use-event-source-M87p8Tme.js} +2 -2
  105. package/build/client/assets/{use-event-source-x59d4R2Z.js.map → use-event-source-M87p8Tme.js.map} +1 -1
  106. package/build/client/assets/{user-Bv6wYhQP.js → user-CbbIYEs8.js} +2 -2
  107. package/build/client/assets/{user-Bv6wYhQP.js.map → user-CbbIYEs8.js.map} +1 -1
  108. package/build/client/assets/{version-lxUUxt3s.js → version-CIF3cX3N.js} +2 -2
  109. package/build/client/assets/{version-lxUUxt3s.js.map → version-CIF3cX3N.js.map} +1 -1
  110. package/build/client/assets/{workshop-config-WVltG_BV.js → workshop-config-C5sYl312.js} +2 -2
  111. package/build/client/assets/{workshop-config-WVltG_BV.js.map → workshop-config-C5sYl312.js.map} +1 -1
  112. package/build/server/index.js +299 -211
  113. package/build/server/index.js.map +1 -1
  114. package/package.json +8 -8
  115. package/build/client/assets/_exerciseNumber-DCSM0NCG.js +0 -2
  116. package/build/client/assets/_exerciseNumber_.finished-nbpk1ToO.js +0 -2
  117. package/build/client/assets/_layout-DTAM9xh5.js +0 -2
  118. package/build/client/assets/account-DPP4rKOb.js +0 -2
  119. package/build/client/assets/account-DPP4rKOb.js.map +0 -1
  120. package/build/client/assets/app-DgTXXO8s.js +0 -2
  121. package/build/client/assets/diff-BhRAIPKc.js +0 -2
  122. package/build/client/assets/discord-Bdnx7fu-.js +0 -2
  123. package/build/client/assets/discord-Bdnx7fu-.js.map +0 -1
  124. package/build/client/assets/epic-video-Bp4BOD2R.js +0 -3053
  125. package/build/client/assets/epic-video-Bp4BOD2R.js.map +0 -1
  126. package/build/client/assets/error-boundary-BZA-ffa8.js +0 -2
  127. package/build/client/assets/finished-C0cpfAFL.js +0 -2
  128. package/build/client/assets/index-Bi1TbRTj.js +0 -2
  129. package/build/client/assets/index-Ca4vBON4.js +0 -2
  130. package/build/client/assets/manifest-a8336fab.js +0 -1
  131. package/build/client/assets/onboarding-C2YNq60k.js +0 -2
  132. package/build/client/assets/test-DoKJvNug.js +0 -2
  133. /package/build/client/assets/{epic-video-DUnRvy1A.css → index-DUnRvy1A.css} +0 -0
@@ -7,7 +7,7 @@ import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
7
7
  import path from "node:path";
8
8
  import { makeSingletonCache, cachified, deleteCache, compiledCodeCache, diffFilesCache, diffCodeCache, shouldForceFresh, fsCache, getAllFileCacheEntries, ogCache } from "@epic-web/workshop-utils/cache.server";
9
9
  import { getWorkshopConfig } from "@epic-web/workshop-utils/config.server";
10
- import { getAuthInfo, getPreferences, readOnboardingData, requireAuthInfo, deleteDb, setPresencePreferences, PlayerPreferencesSchema, setPlayerPreferences, setAuthInfo, markOnboardingVideoWatched } from "@epic-web/workshop-utils/db.server";
10
+ import { getAuthInfo, getPreferences, readOnboardingData, requireAuthInfo, PlayerPreferencesSchema, setPlayerPreferences, deleteDb, setPresencePreferences, setAuthInfo, markOnboardingVideoWatched } from "@epic-web/workshop-utils/db.server";
11
11
  import { getUserInfo, userHasAccessToWorkshop, getProgress, updateProgress, getEpicVideoInfos } from "@epic-web/workshop-utils/epic-api.server";
12
12
  import { getUserId, getSetClientIdCookieHeader } from "@epic-web/workshop-utils/user.server";
13
13
  import { z } from "zod";
@@ -41,6 +41,7 @@ import { motion, useAnimationControls } from "framer-motion";
41
41
  import { useHydrated } from "remix-utils/use-hydrated";
42
42
  import * as DialogPrimitive from "@radix-ui/react-dialog";
43
43
  import { invariantResponse, invariant } from "@epic-web/invariant";
44
+ import RealMuxPlayer, { MinResolution, MaxResolution } from "@mux/mux-player-react";
44
45
  import path$1 from "path";
45
46
  import etag from "etag";
46
47
  import fsExtra from "fs-extra";
@@ -49,7 +50,6 @@ import fs from "fs";
49
50
  import { getDirModifiedTime, modifiedMoreRecentlyThan } from "@epic-web/workshop-utils/modified-time.server";
50
51
  import * as esbuild from "esbuild";
51
52
  import { ElementScrollRestoration } from "@epic-web/restore-scroll";
52
- import RealMuxPlayer from "@mux/mux-player-react";
53
53
  import child_process from "child_process";
54
54
  import os from "os";
55
55
  import shellQuote from "shell-quote";
@@ -3087,6 +3087,228 @@ function ButtonLink({
3087
3087
  }
3088
3088
  ) });
3089
3089
  }
3090
+ const PlaybackTimeSchema = z.object({
3091
+ time: z.number(),
3092
+ expiresAt: z.string()
3093
+ }).transform((data2) => {
3094
+ return { time: Number(data2.time), expiresAt: new Date(data2.expiresAt) };
3095
+ });
3096
+ function usePlayerPreferences() {
3097
+ var _a;
3098
+ const data2 = useRouteLoaderData("root");
3099
+ return ((_a = data2 == null ? void 0 : data2.preferences) == null ? void 0 : _a.player) ?? null;
3100
+ }
3101
+ const ignoredInputs = [
3102
+ "INPUT",
3103
+ "SELECT",
3104
+ "BUTTON",
3105
+ "TEXTAREA",
3106
+ "MUX-PLAYER",
3107
+ "SUMMARY"
3108
+ ];
3109
+ const ignoredRoles = ["button", "option", "combobox", "tab", "tablist"];
3110
+ function shouldIgnoreHotkey(el) {
3111
+ let current = el;
3112
+ while (current) {
3113
+ if (!(current instanceof HTMLElement)) return false;
3114
+ const isIgnored = ignoredInputs.includes(current.tagName) || ignoredRoles.includes(current.getAttribute("role") || "") || current.isContentEditable;
3115
+ if (isIgnored) return true;
3116
+ current = current.parentElement;
3117
+ }
3118
+ return false;
3119
+ }
3120
+ async function action$9({ request }) {
3121
+ const result = PlayerPreferencesSchema.safeParse(await request.json());
3122
+ if (!result.success) {
3123
+ return unstable_data$1({ status: "error", error: result.error.flatten() }, {
3124
+ status: 400
3125
+ });
3126
+ }
3127
+ await setPlayerPreferences(result.data);
3128
+ return { status: "success" };
3129
+ }
3130
+ function useLatest(value) {
3131
+ const ref = React.useRef(value);
3132
+ React.useEffect(() => {
3133
+ ref.current = value;
3134
+ }, [value]);
3135
+ return ref;
3136
+ }
3137
+ function MuxPlayer({
3138
+ muxPlayerRef,
3139
+ ...props
3140
+ }) {
3141
+ const playerPreferences = usePlayerPreferences();
3142
+ const playerPreferencesFetcher = useFetcher();
3143
+ const [metadataLoaded, setMetadataLoaded] = React.useState(false);
3144
+ const currentTimeSessionKey = `${props.playbackId}:currentTime`;
3145
+ const [currentTime, setCurrentTime] = React.useState(0);
3146
+ const fetcherRef = useLatest(playerPreferencesFetcher);
3147
+ const playerPreferencesRef = useLatest(playerPreferences);
3148
+ React.useEffect(() => {
3149
+ if (typeof document === "undefined") return;
3150
+ const stored = sessionStorage.getItem(currentTimeSessionKey);
3151
+ if (!stored) return;
3152
+ try {
3153
+ const { time: time2, expiresAt } = PlaybackTimeSchema.parse(JSON.parse(stored));
3154
+ if (expiresAt.getTime() < Date.now()) throw new Error("Time expired");
3155
+ setCurrentTime(time2);
3156
+ } catch {
3157
+ sessionStorage.removeItem(currentTimeSessionKey);
3158
+ }
3159
+ }, [currentTimeSessionKey]);
3160
+ React.useEffect(() => {
3161
+ function handleUserKeyPress(e) {
3162
+ if (!muxPlayerRef.current) return;
3163
+ const activeElement = document.activeElement;
3164
+ if (shouldIgnoreHotkey(activeElement)) return;
3165
+ if (shouldIgnoreHotkey(e.target)) return;
3166
+ if (e.key === " ") {
3167
+ e.preventDefault();
3168
+ void (muxPlayerRef.current.paused ? muxPlayerRef.current.play() : muxPlayerRef.current.pause());
3169
+ }
3170
+ if (e.key === "ArrowRight") {
3171
+ e.preventDefault();
3172
+ muxPlayerRef.current.currentTime = muxPlayerRef.current.currentTime + (muxPlayerRef.current.forwardSeekOffset || 10);
3173
+ }
3174
+ if (e.key === "ArrowLeft") {
3175
+ e.preventDefault();
3176
+ muxPlayerRef.current.currentTime = muxPlayerRef.current.currentTime - (muxPlayerRef.current.forwardSeekOffset || 10);
3177
+ }
3178
+ if (e.key === "f" && !e.metaKey && !e.ctrlKey) {
3179
+ e.preventDefault();
3180
+ void (document.fullscreenElement ? document.exitFullscreen() : muxPlayerRef.current.requestFullscreen());
3181
+ }
3182
+ }
3183
+ window.document.addEventListener("keydown", handleUserKeyPress);
3184
+ return () => {
3185
+ window.document.removeEventListener("keydown", handleUserKeyPress);
3186
+ };
3187
+ }, [muxPlayerRef]);
3188
+ const updatePreferences = useDebounce(() => {
3189
+ const player = muxPlayerRef.current;
3190
+ if (!player) return;
3191
+ const subs = Array.from(player.textTracks ?? []).find(
3192
+ (t) => t.kind === "subtitles"
3193
+ );
3194
+ const newPrefs = {
3195
+ playbackRate: player.playbackRate,
3196
+ volumeRate: player.volume,
3197
+ subtitle: subs ? { id: subs.id, mode: subs.mode } : { id: null, mode: "disabled" }
3198
+ };
3199
+ if (isDeepEqual(newPrefs, playerPreferencesRef.current)) return;
3200
+ fetcherRef.current.submit(newPrefs, {
3201
+ method: "POST",
3202
+ action: "/video-player",
3203
+ encType: "application/json"
3204
+ });
3205
+ }, 300);
3206
+ React.useEffect(() => {
3207
+ var _a, _b;
3208
+ if (!metadataLoaded) return;
3209
+ const textTracks = (_a = muxPlayerRef.current) == null ? void 0 : _a.textTracks;
3210
+ if (!textTracks) return;
3211
+ const subtitlePref = (_b = playerPreferencesRef.current) == null ? void 0 : _b.subtitle;
3212
+ if (subtitlePref == null ? void 0 : subtitlePref.id) {
3213
+ const preferredTextTrack = textTracks.getTrackById(subtitlePref.id);
3214
+ if (preferredTextTrack) {
3215
+ preferredTextTrack.mode = subtitlePref.mode ?? "hidden";
3216
+ }
3217
+ }
3218
+ textTracks.addEventListener("change", updatePreferences);
3219
+ return () => {
3220
+ textTracks.removeEventListener("change", updatePreferences);
3221
+ };
3222
+ }, [metadataLoaded, muxPlayerRef, playerPreferencesRef, updatePreferences]);
3223
+ return /* @__PURE__ */ jsx("div", { className: "flex aspect-video flex-col", children: /* @__PURE__ */ jsx(
3224
+ RealMuxPlayer,
3225
+ {
3226
+ ref: muxPlayerRef,
3227
+ playbackRates: [
3228
+ 0.5,
3229
+ 0.75,
3230
+ 1,
3231
+ 1.25,
3232
+ 1.5,
3233
+ 1.75,
3234
+ 2,
3235
+ 2.5,
3236
+ 3,
3237
+ 3.5,
3238
+ // lol, someone really asked for this and I think it's funny so let's do it
3239
+ // https://twitter.com/zackerydev/status/1710840197879918840
3240
+ 4
3241
+ ],
3242
+ volume: (playerPreferences == null ? void 0 : playerPreferences.volumeRate) ?? 1,
3243
+ playbackRate: (playerPreferences == null ? void 0 : playerPreferences.playbackRate) ?? 1,
3244
+ thumbnailTime: currentTime,
3245
+ onRateChange: updatePreferences,
3246
+ onVolumeChange: updatePreferences,
3247
+ streamType: "on-demand",
3248
+ defaultHiddenCaptions: true,
3249
+ currentTime,
3250
+ onTimeUpdate: () => {
3251
+ var _a;
3252
+ return sessionStorage.setItem(
3253
+ currentTimeSessionKey,
3254
+ JSON.stringify({
3255
+ time: (_a = muxPlayerRef.current) == null ? void 0 : _a.currentTime,
3256
+ expiresAt: new Date(Date.now() + 1e3 * 60 * 30).toISOString()
3257
+ })
3258
+ );
3259
+ },
3260
+ accentColor: "#427cf0",
3261
+ targetLiveWindow: NaN,
3262
+ onLoadedMetadata: () => setMetadataLoaded(true),
3263
+ minResolution: getMinResolutionValue(playerPreferences == null ? void 0 : playerPreferences.minResolution),
3264
+ maxResolution: getMaxResolutionValue(playerPreferences == null ? void 0 : playerPreferences.maxResolution),
3265
+ ...props
3266
+ }
3267
+ ) });
3268
+ }
3269
+ function isDeepEqual(obj1, obj2) {
3270
+ if (obj1 === obj2) return true;
3271
+ if (typeof obj1 !== typeof obj2) return false;
3272
+ if (typeof obj1 !== "object" || typeof obj2 !== "object") return false;
3273
+ if (obj1 === null || obj2 === null) return false;
3274
+ if (Array.isArray(obj1) !== Array.isArray(obj2)) return false;
3275
+ if (Array.isArray(obj1) && Array.isArray(obj2)) {
3276
+ if (obj1.length !== obj2.length) return false;
3277
+ for (let i = 0; i < obj1.length; i++) {
3278
+ if (!isDeepEqual(obj1[i], obj2[i])) return false;
3279
+ }
3280
+ return true;
3281
+ }
3282
+ const keys1 = Object.keys(obj1);
3283
+ const keys2 = Object.keys(obj2);
3284
+ if (keys1.length !== keys2.length) return false;
3285
+ for (const key of keys1) {
3286
+ if (!isDeepEqual(obj1[key], obj2[key])) return false;
3287
+ }
3288
+ return true;
3289
+ }
3290
+ function getMinResolutionValue(resolution) {
3291
+ if (!resolution) return void 0;
3292
+ if (resolution <= 480) return MinResolution.noLessThan480p;
3293
+ if (resolution <= 540) return MinResolution.noLessThan540p;
3294
+ if (resolution <= 720) return MinResolution.noLessThan720p;
3295
+ if (resolution <= 1080) return MinResolution.noLessThan1080p;
3296
+ if (resolution <= 1440) return MinResolution.noLessThan1440p;
3297
+ return MinResolution.noLessThan2160p;
3298
+ }
3299
+ function getMaxResolutionValue(resolution) {
3300
+ if (!resolution) return void 0;
3301
+ if (resolution <= 720) return MaxResolution.upTo720p;
3302
+ if (resolution <= 1080) return MaxResolution.upTo1080p;
3303
+ if (resolution <= 1440) return MaxResolution.upTo1440p;
3304
+ return MaxResolution.upTo2160p;
3305
+ }
3306
+ const route45 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3307
+ __proto__: null,
3308
+ MuxPlayer,
3309
+ action: action$9,
3310
+ usePlayerPreferences
3311
+ }, Symbol.toStringTag, { value: "Module" }));
3090
3312
  const handle$9 = {
3091
3313
  getSitemapEntries: () => null
3092
3314
  };
@@ -3095,7 +3317,7 @@ async function loader$u({ request }) {
3095
3317
  await requireAuthInfo({ request });
3096
3318
  return {};
3097
3319
  }
3098
- async function action$9({ request }) {
3320
+ async function action$8({ request }) {
3099
3321
  ensureUndeployed();
3100
3322
  const formData = await request.formData();
3101
3323
  const intent = formData.get("intent");
@@ -3115,6 +3337,18 @@ async function action$9({ request }) {
3115
3337
  description: `You are now ${optOut ? "invisible" : "visible"}.`,
3116
3338
  type: "success"
3117
3339
  });
3340
+ } else if (intent === "update-player-preferences") {
3341
+ const minResolution = formData.get("minResolution");
3342
+ const maxResolution = formData.get("maxResolution");
3343
+ await setPlayerPreferences({
3344
+ minResolution: minResolution ? Number(minResolution) : void 0,
3345
+ maxResolution: maxResolution ? Number(maxResolution) : void 0
3346
+ });
3347
+ return redirectWithToast("/account", {
3348
+ title: "Preferences updated",
3349
+ description: "Your video player preferences have been updated.",
3350
+ type: "success"
3351
+ });
3118
3352
  }
3119
3353
  return redirect$1("/account");
3120
3354
  }
@@ -3128,7 +3362,10 @@ function Account() {
3128
3362
  const user = useUser();
3129
3363
  const discordMember = useOptionalDiscordMember();
3130
3364
  const presencePreferences = usePresencePreferences();
3365
+ const playerPreferences = usePlayerPreferences();
3131
3366
  const connectDiscordURL = useConnectDiscordURL$1();
3367
+ const navigation = useNavigation();
3368
+ const isSubmitting = navigation.state === "submitting";
3132
3369
  return /* @__PURE__ */ jsxs("main", { className: "container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4", children: [
3133
3370
  user.imageUrlLarge ? /* @__PURE__ */ jsx(
3134
3371
  "img",
@@ -3201,6 +3438,61 @@ function Account() {
3201
3438
  }
3202
3439
  )
3203
3440
  ] }),
3441
+ /* @__PURE__ */ jsx("hr", { className: "w-full" }),
3442
+ /* @__PURE__ */ jsxs("div", { children: [
3443
+ /* @__PURE__ */ jsx("h2", { className: "mb-2 text-xl", children: "Video Player Preferences" }),
3444
+ /* @__PURE__ */ jsxs(Form, { method: "post", className: "flex flex-col gap-4", children: [
3445
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3446
+ /* @__PURE__ */ jsx("label", { htmlFor: "minResolution", children: "Minimum Resolution:" }),
3447
+ /* @__PURE__ */ jsxs(
3448
+ "select",
3449
+ {
3450
+ id: "minResolution",
3451
+ name: "minResolution",
3452
+ defaultValue: playerPreferences == null ? void 0 : playerPreferences.minResolution,
3453
+ children: [
3454
+ /* @__PURE__ */ jsx("option", { value: "", children: "Auto" }),
3455
+ /* @__PURE__ */ jsx("option", { value: "480", children: "480p" }),
3456
+ /* @__PURE__ */ jsx("option", { value: "720", children: "720p" }),
3457
+ /* @__PURE__ */ jsx("option", { value: "1080", children: "1080p" }),
3458
+ /* @__PURE__ */ jsx("option", { value: "1440", children: "1440p" }),
3459
+ /* @__PURE__ */ jsx("option", { value: "2160", children: "2160p (4K)" })
3460
+ ]
3461
+ }
3462
+ )
3463
+ ] }),
3464
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3465
+ /* @__PURE__ */ jsx("label", { htmlFor: "maxResolution", children: "Maximum Resolution:" }),
3466
+ /* @__PURE__ */ jsxs(
3467
+ "select",
3468
+ {
3469
+ id: "maxResolution",
3470
+ name: "maxResolution",
3471
+ defaultValue: playerPreferences == null ? void 0 : playerPreferences.maxResolution,
3472
+ children: [
3473
+ /* @__PURE__ */ jsx("option", { value: "", children: "Auto" }),
3474
+ /* @__PURE__ */ jsx("option", { value: "720", children: "720p" }),
3475
+ /* @__PURE__ */ jsx("option", { value: "1080", children: "1080p" }),
3476
+ /* @__PURE__ */ jsx("option", { value: "1440", children: "1440p" }),
3477
+ /* @__PURE__ */ jsx("option", { value: "2160", children: "2160p (4K)" })
3478
+ ]
3479
+ }
3480
+ )
3481
+ ] }),
3482
+ /* @__PURE__ */ jsx(
3483
+ Button,
3484
+ {
3485
+ varient: "mono",
3486
+ type: "submit",
3487
+ name: "intent",
3488
+ value: "update-player-preferences",
3489
+ disabled: isSubmitting,
3490
+ children: isSubmitting ? "Updating..." : "Update Player Preferences"
3491
+ }
3492
+ )
3493
+ ] })
3494
+ ] }),
3495
+ /* @__PURE__ */ jsx("hr", { className: "w-full" }),
3204
3496
  /* @__PURE__ */ jsxs("p", { children: [
3205
3497
  "Check",
3206
3498
  " ",
@@ -3219,7 +3511,7 @@ function Account() {
3219
3511
  }
3220
3512
  const route3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3221
3513
  __proto__: null,
3222
- action: action$9,
3514
+ action: action$8,
3223
3515
  default: Account,
3224
3516
  handle: handle$9,
3225
3517
  loader: loader$u
@@ -3386,7 +3678,7 @@ async function loader$s(args) {
3386
3678
  api.cleanupError(error);
3387
3679
  }
3388
3680
  }
3389
- async function action$8(args) {
3681
+ async function action$7(args) {
3390
3682
  const api = await getApiModule(args);
3391
3683
  invariantResponse(
3392
3684
  api.mod.action,
@@ -3474,7 +3766,7 @@ async function getApiModule({ request, params }) {
3474
3766
  }
3475
3767
  const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3476
3768
  __proto__: null,
3477
- action: action$8,
3769
+ action: action$7,
3478
3770
  loader: loader$s
3479
3771
  }, Symbol.toStringTag, { value: "Module" }));
3480
3772
  async function loader$r({ request, params }) {
@@ -3926,210 +4218,6 @@ const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
3926
4218
  default: ExercisesLayout,
3927
4219
  handle: handle$7
3928
4220
  }, Symbol.toStringTag, { value: "Module" }));
3929
- const PlaybackTimeSchema = z.object({
3930
- time: z.number(),
3931
- expiresAt: z.string()
3932
- }).transform((data2) => {
3933
- return { time: Number(data2.time), expiresAt: new Date(data2.expiresAt) };
3934
- });
3935
- function usePlayerPreferences() {
3936
- var _a;
3937
- const data2 = useRouteLoaderData("root");
3938
- return ((_a = data2 == null ? void 0 : data2.preferences) == null ? void 0 : _a.player) ?? null;
3939
- }
3940
- const ignoredInputs = [
3941
- "INPUT",
3942
- "SELECT",
3943
- "BUTTON",
3944
- "TEXTAREA",
3945
- "MUX-PLAYER",
3946
- "SUMMARY"
3947
- ];
3948
- const ignoredRoles = ["button", "option", "combobox", "tab", "tablist"];
3949
- function shouldIgnoreHotkey(el) {
3950
- let current = el;
3951
- while (current) {
3952
- if (!(current instanceof HTMLElement)) return false;
3953
- const isIgnored = ignoredInputs.includes(current.tagName) || ignoredRoles.includes(current.getAttribute("role") || "") || current.isContentEditable;
3954
- if (isIgnored) return true;
3955
- current = current.parentElement;
3956
- }
3957
- return false;
3958
- }
3959
- async function action$7({ request }) {
3960
- const result = PlayerPreferencesSchema.safeParse(await request.json());
3961
- if (!result.success) {
3962
- return unstable_data$1({ status: "error", error: result.error.flatten() }, {
3963
- status: 400
3964
- });
3965
- }
3966
- await setPlayerPreferences(result.data);
3967
- return { status: "success" };
3968
- }
3969
- function useLatest(value) {
3970
- const ref = React.useRef(value);
3971
- React.useEffect(() => {
3972
- ref.current = value;
3973
- }, [value]);
3974
- return ref;
3975
- }
3976
- function MuxPlayer({
3977
- muxPlayerRef,
3978
- ...props
3979
- }) {
3980
- const playerPreferences = usePlayerPreferences();
3981
- const playerPreferencesFetcher = useFetcher();
3982
- const [metadataLoaded, setMetadataLoaded] = React.useState(false);
3983
- const currentTimeSessionKey = `${props.playbackId}:currentTime`;
3984
- const [currentTime, setCurrentTime] = React.useState(0);
3985
- const fetcherRef = useLatest(playerPreferencesFetcher);
3986
- const playerPreferencesRef = useLatest(playerPreferences);
3987
- React.useEffect(() => {
3988
- if (typeof document === "undefined") return;
3989
- const stored = sessionStorage.getItem(currentTimeSessionKey);
3990
- if (!stored) return;
3991
- try {
3992
- const { time: time2, expiresAt } = PlaybackTimeSchema.parse(JSON.parse(stored));
3993
- if (expiresAt.getTime() < Date.now()) throw new Error("Time expired");
3994
- setCurrentTime(time2);
3995
- } catch {
3996
- sessionStorage.removeItem(currentTimeSessionKey);
3997
- }
3998
- }, [currentTimeSessionKey]);
3999
- React.useEffect(() => {
4000
- function handleUserKeyPress(e) {
4001
- if (!muxPlayerRef.current) return;
4002
- const activeElement = document.activeElement;
4003
- if (shouldIgnoreHotkey(activeElement)) return;
4004
- if (shouldIgnoreHotkey(e.target)) return;
4005
- if (e.key === " ") {
4006
- e.preventDefault();
4007
- void (muxPlayerRef.current.paused ? muxPlayerRef.current.play() : muxPlayerRef.current.pause());
4008
- }
4009
- if (e.key === "ArrowRight") {
4010
- e.preventDefault();
4011
- muxPlayerRef.current.currentTime = muxPlayerRef.current.currentTime + (muxPlayerRef.current.forwardSeekOffset || 10);
4012
- }
4013
- if (e.key === "ArrowLeft") {
4014
- e.preventDefault();
4015
- muxPlayerRef.current.currentTime = muxPlayerRef.current.currentTime - (muxPlayerRef.current.forwardSeekOffset || 10);
4016
- }
4017
- if (e.key === "f" && !e.metaKey && !e.ctrlKey) {
4018
- e.preventDefault();
4019
- void (document.fullscreenElement ? document.exitFullscreen() : muxPlayerRef.current.requestFullscreen());
4020
- }
4021
- }
4022
- window.document.addEventListener("keydown", handleUserKeyPress);
4023
- return () => {
4024
- window.document.removeEventListener("keydown", handleUserKeyPress);
4025
- };
4026
- }, [muxPlayerRef]);
4027
- const updatePreferences = useDebounce(() => {
4028
- const player = muxPlayerRef.current;
4029
- if (!player) return;
4030
- const subs = Array.from(player.textTracks ?? []).find(
4031
- (t) => t.kind === "subtitles"
4032
- );
4033
- const newPrefs = {
4034
- playbackRate: player.playbackRate,
4035
- volumeRate: player.volume,
4036
- subtitle: subs ? { id: subs.id, mode: subs.mode } : { id: null, mode: "disabled" }
4037
- };
4038
- if (isDeepEqual(newPrefs, playerPreferencesRef.current)) return;
4039
- fetcherRef.current.submit(newPrefs, {
4040
- method: "POST",
4041
- action: "/video-player",
4042
- encType: "application/json"
4043
- });
4044
- }, 300);
4045
- React.useEffect(() => {
4046
- var _a, _b;
4047
- if (!metadataLoaded) return;
4048
- const textTracks = (_a = muxPlayerRef.current) == null ? void 0 : _a.textTracks;
4049
- if (!textTracks) return;
4050
- const subtitlePref = (_b = playerPreferencesRef.current) == null ? void 0 : _b.subtitle;
4051
- if (subtitlePref == null ? void 0 : subtitlePref.id) {
4052
- const preferredTextTrack = textTracks.getTrackById(subtitlePref.id);
4053
- if (preferredTextTrack) {
4054
- preferredTextTrack.mode = subtitlePref.mode ?? "hidden";
4055
- }
4056
- }
4057
- textTracks.addEventListener("change", updatePreferences);
4058
- return () => {
4059
- textTracks.removeEventListener("change", updatePreferences);
4060
- };
4061
- }, [metadataLoaded, muxPlayerRef, playerPreferencesRef, updatePreferences]);
4062
- return /* @__PURE__ */ jsx("div", { className: "flex aspect-video flex-col", children: /* @__PURE__ */ jsx(
4063
- RealMuxPlayer,
4064
- {
4065
- ref: muxPlayerRef,
4066
- playbackRates: [
4067
- 0.5,
4068
- 0.75,
4069
- 1,
4070
- 1.25,
4071
- 1.5,
4072
- 1.75,
4073
- 2,
4074
- 2.5,
4075
- 3,
4076
- 3.5,
4077
- // lol, someone really asked for this and I think it's funny so let's do it
4078
- // https://twitter.com/zackerydev/status/1710840197879918840
4079
- 4
4080
- ],
4081
- volume: (playerPreferences == null ? void 0 : playerPreferences.volumeRate) ?? 1,
4082
- playbackRate: (playerPreferences == null ? void 0 : playerPreferences.playbackRate) ?? 1,
4083
- thumbnailTime: currentTime,
4084
- onRateChange: updatePreferences,
4085
- onVolumeChange: updatePreferences,
4086
- streamType: "on-demand",
4087
- defaultHiddenCaptions: true,
4088
- currentTime,
4089
- onTimeUpdate: () => {
4090
- var _a;
4091
- return sessionStorage.setItem(
4092
- currentTimeSessionKey,
4093
- JSON.stringify({
4094
- time: (_a = muxPlayerRef.current) == null ? void 0 : _a.currentTime,
4095
- expiresAt: new Date(Date.now() + 1e3 * 60 * 30).toISOString()
4096
- })
4097
- );
4098
- },
4099
- accentColor: "#427cf0",
4100
- targetLiveWindow: NaN,
4101
- onLoadedMetadata: () => setMetadataLoaded(true),
4102
- ...props
4103
- }
4104
- ) });
4105
- }
4106
- function isDeepEqual(obj1, obj2) {
4107
- if (obj1 === obj2) return true;
4108
- if (typeof obj1 !== typeof obj2) return false;
4109
- if (typeof obj1 !== "object" || typeof obj2 !== "object") return false;
4110
- if (obj1 === null || obj2 === null) return false;
4111
- if (Array.isArray(obj1) !== Array.isArray(obj2)) return false;
4112
- if (Array.isArray(obj1) && Array.isArray(obj2)) {
4113
- if (obj1.length !== obj2.length) return false;
4114
- for (let i = 0; i < obj1.length; i++) {
4115
- if (!isDeepEqual(obj1[i], obj2[i])) return false;
4116
- }
4117
- return true;
4118
- }
4119
- const keys1 = Object.keys(obj1);
4120
- const keys2 = Object.keys(obj2);
4121
- if (keys1.length !== keys2.length) return false;
4122
- for (const key of keys1) {
4123
- if (!isDeepEqual(obj1[key], obj2[key])) return false;
4124
- }
4125
- return true;
4126
- }
4127
- const route45 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4128
- __proto__: null,
4129
- MuxPlayer,
4130
- action: action$7,
4131
- usePlayerPreferences
4132
- }, Symbol.toStringTag, { value: "Module" }));
4133
4221
  function Loading({
4134
4222
  className,
4135
4223
  children = "Loading"
@@ -10885,7 +10973,7 @@ const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
10885
10973
  __proto__: null,
10886
10974
  loader
10887
10975
  }, Symbol.toStringTag, { value: "Module" }));
10888
- 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-D12XnE1S.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-8FPJKg_8.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-B8j0pWoF.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-8FPJKg_8.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-DPP4rKOb.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-8FPJKg_8.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-a8336fab.js", "version": "a8336fab" };
10976
+ const serverManifest = { "entry": { "module": "/assets/entry.client-CrlHhRMR.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/components-DUNtf72c.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-Bg-hxaOK.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/components-DUNtf72c.js", "/assets/misc-DIdEn_jt.js", "/assets/pe-D5h19vSo.js", "/assets/error-boundary-3zItlMUO.js", "/assets/progress-bar-CBDBzRQ2.js", "/assets/index-LjRZeU7x.js", "/assets/tooltip-BoVikCa-.js", "/assets/index-DH1w3QmP.js", "/assets/presence-D1DPz__2.js", "/assets/seo-pBpFCWsy.js", "/assets/request-info-vBkaf3Rk.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/_-hAKYb2AG.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/error-boundary-3zItlMUO.js", "/assets/misc-DIdEn_jt.js", "/assets/components-DUNtf72c.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-Bu0lel3p.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/misc-DIdEn_jt.js", "/assets/pe-D5h19vSo.js", "/assets/product-CYOFfeJM.js", "/assets/revalidation-ws-DK5QOPlL.js", "/assets/tooltip-BoVikCa-.js", "/assets/index-CV3nxGFp.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/presence-D1DPz__2.js", "/assets/progress-D6SP0Gec.js", "/assets/index-DH1w3QmP.js", "/assets/components-DUNtf72c.js", "/assets/request-info-vBkaf3Rk.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-DLDPrc9J.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/button-39zQyNX6.js", "/assets/misc-DIdEn_jt.js", "/assets/tooltip-BoVikCa-.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/presence-D1DPz__2.js", "/assets/index-BajUQsFT.js", "/assets/components-DUNtf72c.js", "/assets/request-info-vBkaf3Rk.js"], "css": ["/assets/index-DUnRvy1A.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-CpIgvYus.js", "imports": ["/assets/discord-CEOqKs_c.js", "/assets/index-C_B1-9rF.js", "/assets/misc-DIdEn_jt.js", "/assets/components-DUNtf72c.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.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-B4JGpA3A.js", "imports": ["/assets/index-C_B1-9rF.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-PTdG9GGB.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/index-CLNXC84j.js", "/assets/epic-video-D8ex9vao.js", "/assets/revalidation-ws-DK5QOPlL.js", "/assets/mdx-C9dqA6IZ.js", "/assets/progress-D6SP0Gec.js", "/assets/misc-DIdEn_jt.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DUNtf72c.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/loading-DW_I206H.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/progress-bar-CBDBzRQ2.js"], "css": ["/assets/index-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-03erOIGo.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/misc-DIdEn_jt.js", "/assets/components-DUNtf72c.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-DHoH74NH.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/index-CLNXC84j.js", "/assets/error-boundary-3zItlMUO.js", "/assets/nav-chevrons-B3SvZV8B.js", "/assets/revalidation-ws-DK5QOPlL.js", "/assets/mdx-C9dqA6IZ.js", "/assets/progress-D6SP0Gec.js", "/assets/set-playground-CMoUFgkO.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-DIdEn_jt.js", "/assets/epic-video-D8ex9vao.js", "/assets/tooltip-BoVikCa-.js", "/assets/request-info-vBkaf3Rk.js", "/assets/components-DUNtf72c.js", "/assets/index-CV3nxGFp.js", "/assets/progress-bar-CBDBzRQ2.js", "/assets/pe-D5h19vSo.js", "/assets/index-DFqQCjCw.js", "/assets/index-DH1w3QmP.js", "/assets/index-BajUQsFT.js", "/assets/loading-DW_I206H.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js"], "css": ["/assets/index-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-DJDjmdlu.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/preview-BEtmdi0E.js", "/assets/components-DUNtf72c.js", "/assets/misc-DIdEn_jt.js", "/assets/request-info-vBkaf3Rk.js", "/assets/button-39zQyNX6.js", "/assets/loading-DW_I206H.js", "/assets/index-DH1w3QmP.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.js", "/assets/progress-bar-CBDBzRQ2.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-DE-jwnOP.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/tooltip-BoVikCa-.js", "/assets/index-DFqQCjCw.js", "/assets/misc-DIdEn_jt.js", "/assets/diff-BNCREJvf.js", "/assets/error-boundary-3zItlMUO.js", "/assets/loading-DW_I206H.js", "/assets/discord-CEOqKs_c.js", "/assets/components-DUNtf72c.js", "/assets/index-LjRZeU7x.js", "/assets/set-playground-CMoUFgkO.js", "/assets/tests-CiM4RPOf.js", "/assets/preview-BEtmdi0E.js", "/assets/index-CV3nxGFp.js", "/assets/accordion-DLg7gJkp.js", "/assets/mdx-C9dqA6IZ.js", "/assets/epic-video-D8ex9vao.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/progress-bar-CBDBzRQ2.js", "/assets/revalidation-ws-DK5QOPlL.js", "/assets/use-event-source-M87p8Tme.js", "/assets/button-39zQyNX6.js"], "css": ["/assets/index-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-C8wkLh9a.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/tests-CiM4RPOf.js", "/assets/components-DUNtf72c.js", "/assets/epic-video-D8ex9vao.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/misc-DIdEn_jt.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/loading-DW_I206H.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/accordion-DLg7gJkp.js", "/assets/index-DFqQCjCw.js", "/assets/index-CV3nxGFp.js", "/assets/use-event-source-M87p8Tme.js", "/assets/set-playground-CMoUFgkO.js", "/assets/progress-bar-CBDBzRQ2.js"], "css": ["/assets/index-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-DQg4F1NL.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/index-CLNXC84j.js", "/assets/epic-video-D8ex9vao.js", "/assets/loading-DW_I206H.js", "/assets/nav-chevrons-B3SvZV8B.js", "/assets/revalidation-ws-DK5QOPlL.js", "/assets/mdx-C9dqA6IZ.js", "/assets/progress-D6SP0Gec.js", "/assets/misc-DIdEn_jt.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DUNtf72c.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/progress-bar-CBDBzRQ2.js"], "css": ["/assets/index-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-rUzUjnEm.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/index-CLNXC84j.js", "/assets/epic-video-D8ex9vao.js", "/assets/loading-DW_I206H.js", "/assets/nav-chevrons-B3SvZV8B.js", "/assets/revalidation-ws-DK5QOPlL.js", "/assets/mdx-C9dqA6IZ.js", "/assets/misc-DIdEn_jt.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-D6SP0Gec.js", "/assets/components-DUNtf72c.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/progress-bar-CBDBzRQ2.js"], "css": ["/assets/index-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-mivnjq36.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/index-CLNXC84j.js", "/assets/epic-video-D8ex9vao.js", "/assets/error-boundary-3zItlMUO.js", "/assets/mdx-C9dqA6IZ.js", "/assets/misc-DIdEn_jt.js", "/assets/progress-D6SP0Gec.js", "/assets/components-DUNtf72c.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/loading-DW_I206H.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/progress-bar-CBDBzRQ2.js"], "css": ["/assets/index-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-CdNej0Z7.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/use-event-source-M87p8Tme.js", "/assets/button-39zQyNX6.js", "/assets/loading-DW_I206H.js", "/assets/product-CYOFfeJM.js", "/assets/workshop-config-C5sYl312.js", "/assets/request-info-vBkaf3Rk.js", "/assets/components-DUNtf72c.js", "/assets/misc-DIdEn_jt.js", "/assets/index-DH1w3QmP.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.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-CPzYlWkd.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/components-DUNtf72c.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-BJbMl6SJ.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/components-DUNtf72c.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-DDqzbGM2.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/misc-DIdEn_jt.js", "/assets/tooltip-BoVikCa-.js", "/assets/progress-D6SP0Gec.js", "/assets/components-DUNtf72c.js", "/assets/pe-D5h19vSo.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-CIF3cX3N.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/workshop-config-C5sYl312.js", "/assets/components-DUNtf72c.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-B3oaU_KB.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/misc-DIdEn_jt.js", "/assets/diff-BNCREJvf.js", "/assets/nav-chevrons-B3SvZV8B.js", "/assets/components-DUNtf72c.js", "/assets/accordion-DLg7gJkp.js", "/assets/tooltip-BoVikCa-.js", "/assets/index-DFqQCjCw.js", "/assets/index-CV3nxGFp.js", "/assets/mdx-C9dqA6IZ.js", "/assets/epic-video-D8ex9vao.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/loading-DW_I206H.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js", "/assets/progress-bar-CBDBzRQ2.js", "/assets/revalidation-ws-DK5QOPlL.js"], "css": ["/assets/index-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-CC9zz4rl.js", "imports": ["/assets/index-C_B1-9rF.js", "/assets/button-39zQyNX6.js", "/assets/epic-video-D8ex9vao.js", "/assets/components-DUNtf72c.js", "/assets/misc-DIdEn_jt.js", "/assets/index-DH1w3QmP.js", "/assets/request-info-vBkaf3Rk.js", "/assets/tooltip-BoVikCa-.js", "/assets/pe-D5h19vSo.js", "/assets/index-BajUQsFT.js", "/assets/loading-DW_I206H.js", "/assets/user-CbbIYEs8.js", "/assets/workshop-config-C5sYl312.js"], "css": ["/assets/index-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-62ea49c4.js", "version": "62ea49c4" };
10889
10977
  const mode = "production";
10890
10978
  const assetsBuildDirectory = "build/client";
10891
10979
  const basename = "/";