@epic-web/workshop-app 6.89.0 → 6.89.2
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.
- package/build/client/assets/{_extra-Bd0-gThk.js → _extra-DI111cn8.js} +2 -2
- package/build/client/assets/{_extra-Bd0-gThk.js.map → _extra-DI111cn8.js.map} +1 -1
- package/build/client/assets/{diff-C4LoXlDb.js → diff-D18ACTzf.js} +2 -2
- package/build/client/assets/{diff-C4LoXlDb.js.map → diff-D18ACTzf.js.map} +1 -1
- package/build/client/assets/{diff-Fut2J8f5.js → diff-DJwQw62A.js} +2 -2
- package/build/client/assets/{diff-Fut2J8f5.js.map → diff-DJwQw62A.js.map} +1 -1
- package/build/client/assets/{index-BnHkUMN_.js → index-CwYatiE_.js} +2 -2
- package/build/client/assets/{index-BnHkUMN_.js.map → index-CwYatiE_.js.map} +1 -1
- package/build/client/assets/{manifest-72875289.js → manifest-afa7be5a.js} +1 -1
- package/build/server/index.js +3 -3
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{w as o,b as a,d as m,k as p}from"./chunk-JZWAC4HX-BuixXc9D.js";import{j as s}from"./jsx-runtime-C5WNSv3b.js";import{d as n,c}from"./misc-D9k_mI0z.js";import{U as f}from"./diff-
|
|
2
|
-
//# sourceMappingURL=diff-
|
|
1
|
+
import{w as o,b as a,d as m,k as p}from"./chunk-JZWAC4HX-BuixXc9D.js";import{j as s}from"./jsx-runtime-C5WNSv3b.js";import{d as n,c}from"./misc-D9k_mI0z.js";import{U as f}from"./diff-D18ACTzf.js";import{N as d}from"./nav-chevrons-DUMNZcNc.js";import"./index-Bi6L2ga8.js";import"./react-error-boundary-DFNLMQmr.js";import"./tooltip-H74tOFSr.js";import"./index-B2VNpNxJ.js";import"./index-BvE6USCZ.js";import"./index-DosQrH9F.js";import"./preload-helper-BXl3LOEh.js";import"./index-DSpM0ReJ.js";import"./root-loader-DAxaiFMN.js";import"./pe-D585gnmh.js";import"./schemas-siASSt6b.js";import"./launch-editor-C-8ah8qM.js";import"./progress-bar-BCbq1CuC.js";import"./epic-video-C9q0z-QM.js";import"./loading-BjV0PtX2.js";import"./index-E_6kulJP.js";import"./online-x7UFobEJ.js";import"./format-CZ5n8p10.js";import"./user-DhjrtSbZ.js";import"./workshop-config-v_LiyFvY.js";import"./revalidation-ws-JHvxsHsY.js";const G=o(function(){const r=a(),[i]=m();new URLSearchParams(i).set("forceFresh","diff");const t=p(),e=n.useSpinDelay(t.state!=="idle",{delay:200,minDuration:200});return s.jsxs("div",{className:c("h-screen-safe relative",{"cursor-wait opacity-30":e}),children:[s.jsx("div",{className:"h-full pb-16",children:s.jsx(f,{diff:r.diff,allApps:r.allApps,userHasAccessPromise:r.userHasAccessPromise})}),s.jsx("div",{className:"bg-background fixed inset-x-0 bottom-0 z-10 flex h-16 items-center justify-end border-t",children:s.jsx("div",{className:"flex h-full items-center justify-end",children:s.jsx(d,{prev:r.prevLink,next:r.nextLink})})})]})});export{G as default};
|
|
2
|
+
//# sourceMappingURL=diff-DJwQw62A.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-
|
|
1
|
+
{"version":3,"file":"diff-DJwQw62A.js","sources":["../../../app/routes/diff.tsx"],"sourcesContent":["import { type Route } from './+types/diff'\nimport {\n\tgetAppByName,\n\tgetAppDisplayName,\n\tgetApps,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getDiffPatch } from '@epic-web/workshop-utils/diff.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport { useLoaderData, useNavigation, useSearchParams } from 'react-router'\nimport { useSpinDelay } from 'spin-delay'\nimport { Diff } from '#app/components/diff.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { cn } from '#app/utils/misc.tsx'\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst reqUrl = new URL(request.url)\n\tconst searchParams = reqUrl.searchParams\n\tconst timings = makeTimings('diffLoader')\n\tconst cacheOptions = { request, timings }\n\tconst allAppsFull = await getApps()\n\tconst app1Name = reqUrl.searchParams.get('app1')\n\tconst app2Name = reqUrl.searchParams.get('app2')\n\n\tconst usingDefaultApp1 = !app1Name\n\n\t// defaults to first problem app\n\tconst app1 = app1Name\n\t\t? await getAppByName(app1Name)\n\t\t: allAppsFull.filter(isExerciseStepApp).at(0)\n\n\t// defaults to last exercise step app\n\tconst app2 = app2Name\n\t\t? await getAppByName(app2Name)\n\t\t: allAppsFull.filter(isExerciseStepApp).at(-1)\n\n\tasync function getDiffProp() {\n\t\tif (!app1 || !app2) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffPatch: null,\n\t\t\t}\n\t\t}\n\t\tconst diffPatch = await getDiffPatch(app1, app2, {\n\t\t\t...cacheOptions,\n\t\t\tforceFresh: searchParams.get('forceFresh') === 'diff',\n\t\t}).catch((e) => {\n\t\t\tconsole.error(e)\n\t\t\treturn null\n\t\t})\n\t\treturn {\n\t\t\tapp1: app1.name,\n\t\t\tapp2: app2.name,\n\t\t\tdiffPatch,\n\t\t}\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t}))\n\n\tconst diff = getDiffProp()\n\tconst app1Index = allApps.findIndex((a) => a.name === app1?.name)\n\tconst prevApp1Index = usingDefaultApp1\n\t\t? allApps.length - 2\n\t\t: app1Index === 0\n\t\t\t? -2\n\t\t\t: app1Index - 1\n\tconst prevApp2Index = prevApp1Index + 1\n\tconst nextApp1Index = usingDefaultApp1\n\t\t? 0\n\t\t: app1Index + 1 < allApps.length\n\t\t\t? app1Index + 1\n\t\t\t: -2\n\tconst nextApp2Index = nextApp1Index + 1\n\tconst prevApp1 = allAppsFull[prevApp1Index]?.name\n\tconst prevApp2 = allAppsFull[prevApp2Index]?.name\n\tconst nextApp1 = allAppsFull[nextApp1Index]?.name\n\tconst nextApp2 = allAppsFull[nextApp2Index]?.name\n\tconst prevSearchParams = new URLSearchParams(reqUrl.searchParams)\n\tprevSearchParams.set('app1', prevApp1 ?? '')\n\tprevSearchParams.set('app2', prevApp2 ?? '')\n\tconst nextSearchParams = new URLSearchParams(reqUrl.searchParams)\n\tnextSearchParams.set('app1', nextApp1 ?? '')\n\tnextSearchParams.set('app2', nextApp2 ?? '')\n\treturn {\n\t\tuserHasAccessPromise: userHasAccessToWorkshop({ request, timings }),\n\t\tallApps,\n\t\tdiff,\n\t\tprevLink:\n\t\t\tprevApp1 && prevApp2\n\t\t\t\t? { to: `/diff?${prevSearchParams}`, 'aria-label': 'Previous App' }\n\t\t\t\t: { to: '/diff' },\n\t\tnextLink:\n\t\t\tnextApp1 && nextApp2\n\t\t\t\t? { to: `/diff?${nextSearchParams}`, 'aria-label': 'Next App' }\n\t\t\t\t: { to: '/diff' },\n\t}\n}\n\nexport default function DiffViewer() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst [params] = useSearchParams()\n\tconst paramsWithForcedRefresh = new URLSearchParams(params)\n\tparamsWithForcedRefresh.set('forceFresh', 'diff')\n\tconst navigation = useNavigation()\n\tconst isNavigating = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 200,\n\t\tminDuration: 200,\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('h-screen-safe relative', {\n\t\t\t\t'cursor-wait opacity-30': isNavigating,\n\t\t\t})}\n\t\t>\n\t\t\t<div className=\"h-full pb-16\">\n\t\t\t\t<Diff\n\t\t\t\t\tdiff={data.diff}\n\t\t\t\t\tallApps={data.allApps}\n\t\t\t\t\tuserHasAccessPromise={data.userHasAccessPromise}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"bg-background fixed inset-x-0 bottom-0 z-10 flex h-16 items-center justify-end border-t\">\n\t\t\t\t<div className=\"flex h-full items-center justify-end\">\n\t\t\t\t\t<NavChevrons prev={data.prevLink} next={data.nextLink} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"names":["diff","_UNSAFE_withComponentProps","data","useLoaderData","params","useSearchParams","URLSearchParams","set","navigation","useNavigation","isNavigating","useSpinDelay","state","delay","minDuration","jsxs","className","cn","children","jsx","Diff","allApps","userHasAccessPromise","NavChevrons","prev","prevLink","next","nextLink"],"mappings":"y4BA2GA,MAAAA,EAAAC,EAAA,UAAqC,CACpC,MAAMC,EAAOC,EAAA,EACP,CAACC,CAAM,EAAIC,EAAA,EACe,IAAIC,gBAAgBF,CAAM,EAClCG,IAAI,aAAc,MAAM,EAChD,MAAMC,EAAaC,EAAA,EACbC,EAAeC,EAAAA,aAAaH,EAAWI,QAAU,OAAQ,CAC9DC,MAAO,IACPC,YAAa,GACd,CAAC,EAED,OACCC,EAAAA,KAAC,MAAA,CACAC,UAAWC,EAAG,yBAA0B,CACvC,yBAA0BP,CAC3B,CAAC,EAEDQ,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAIH,UAAU,eACdE,SAAAC,EAAAA,IAACC,EAAA,CACApB,KAAME,EAAKF,KACXqB,QAASnB,EAAKmB,QACdC,qBAAsBpB,EAAKoB,qBAC5B,CAAA,CACD,QACC,MAAA,CAAIN,UAAU,0FACdE,SAAAC,EAAAA,IAAC,OAAIH,UAAU,uCACdE,SAAAC,EAAAA,IAACI,EAAA,CAAYC,KAAMtB,EAAKuB,SAAUC,KAAMxB,EAAKyB,SAAU,EACxD,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{w as j,a as E,c as A,d as C,e as N}from"./chunk-JZWAC4HX-BuixXc9D.js";import{j as r}from"./jsx-runtime-C5WNSv3b.js";import{g as T,R as H,P as U,C as t,a as b,D as B}from"./playground-BV2y1ifv.js";import{U as I}from"./diff-
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{w as j,a as E,c as A,d as C,e as N}from"./chunk-JZWAC4HX-BuixXc9D.js";import{j as r}from"./jsx-runtime-C5WNSv3b.js";import{g as T,R as H,P as U,C as t,a as b,D as B}from"./playground-BV2y1ifv.js";import{U as I}from"./diff-D18ACTzf.js";import{G as R}from"./error-boundary-DCY9a5Cj.js";import{u as S}from"./workshop-config-v_LiyFvY.js";import{u as O}from"./misc-D9k_mI0z.js";import{P as a}from"./preview-Dav9KrHN.js";import{T as k}from"./tests-CVRqL4gt.js";import"./index-Bi6L2ga8.js";import"./loading-BjV0PtX2.js";import"./index-DSpM0ReJ.js";import"./tooltip-H74tOFSr.js";import"./index-B2VNpNxJ.js";import"./root-loader-DAxaiFMN.js";import"./pe-D585gnmh.js";import"./schemas-siASSt6b.js";import"./discord-CVgNwZp4.js";import"./user-DhjrtSbZ.js";import"./online-x7UFobEJ.js";import"./index-BvE6USCZ.js";import"./index-DosQrH9F.js";import"./status-indicator-C6DiLYL5.js";import"./index-E_6kulJP.js";import"./set-playground-CvYErpku.js";import"./button-B_EAwzD_.js";import"./onboarding-indicator-Csno1yMz.js";import"./progress-bar-BCbq1CuC.js";import"./dialog-DXBBGJQ6.js";import"./playground-window-BM8PCQz7.js";import"./react-error-boundary-DFNLMQmr.js";import"./preload-helper-BXl3LOEh.js";import"./launch-editor-C-8ah8qM.js";import"./epic-video-C9q0z-QM.js";import"./format-CZ5n8p10.js";import"./revalidation-ws-JHvxsHsY.js";import"./mdx-C3Jl4O5D.js";import"./popover-Dh41LPal.js";import"./index-ywSltzcE.js";const l=["playground","problem","solution","tests","diff","chat"],L=n=>!!(n&&l.includes(n)),Es=j(function({loaderData:e}){const{inBrowserBrowserRef:p}=A(),d=S(),[u]=C(),m=u.get("preview"),h=O(),x=N();function f(s){if(s==="tests")return ENV.EPICSHOP_DEPLOYED||!e.playground||e.playground.test.type==="none";if(s==="problem"||s==="solution"){if(e[s]?.dev.type==="none")return!0;if(ENV.EPICSHOP_DEPLOYED){const i=e[s]?.dev.type;return i!=="browser"&&i!=="export"&&!e[s]?.stackBlitzUrl}}return s==="playground"&&ENV.EPICSHOP_DEPLOYED?!0:s==="chat"?!d.product.discordChannelId:!1}function w(s){if(s==="tests"){if(!e.playground)return null;const{isTestRunning:i,testExitCode:o}=e.playground;return i?"running":o===0?"passed":o!==null&&o!==0?"failed":null}return(s==="problem"||s==="solution"||s==="playground")&&(s==="playground"?e.playground:e[s])?.isRunning?"running":null}const y=L(m)?m:l.find(s=>!f(s)),c=`/diff?${new URLSearchParams({app1:e.problem?.name??"",app2:e.solution?.name??""})}`;function g(s){s.altKey&&!s.ctrlKey&&!s.shiftKey&&!s.metaKey&&(s.preventDefault(),x(c))}const v=l.map(s=>{const i=f(s),o=w(s),P=s==="diff"&&h?c:`?${T(u,s,"playground")}`;return{id:s,label:s,hidden:i,status:o,to:P,onClick:s==="diff"?g:void 0}});return r.jsxs(H,{className:"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden sm:col-span-1 sm:row-span-1",value:y,children:[r.jsx(U,{tabs:v}),r.jsxs("div",{className:"relative z-10 flex min-h-0 flex-1 flex-col overflow-hidden",children:[r.jsx(t,{value:"playground",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:r.jsx(b,{appInfo:e.playground,problemAppName:e.problem?.name,inBrowserBrowserRef:p,allApps:e.allApps,isUpToDate:e.playground?.isUpToDate??!1})}),r.jsx(t,{value:"problem",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:r.jsx(a,{appInfo:e.problem,inBrowserBrowserRef:p})}),r.jsx(t,{value:"solution",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:r.jsx(a,{appInfo:e.solution,inBrowserBrowserRef:p})}),r.jsx(t,{value:"tests",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start overflow-hidden",children:r.jsx(k,{appInfo:e.playground,problemAppName:e.problem?.name,allApps:e.allApps,isUpToDate:e.playground?.isUpToDate??!1,userHasAccessPromise:e.userHasAccessPromise})}),r.jsx(t,{value:"diff",className:"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start",children:r.jsx(I,{diff:e.diff,allApps:e.allApps,userHasAccessPromise:e.userHasAccessPromise})}),r.jsx(t,{value:"chat",className:"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start",children:r.jsx(B,{discordPostsPromise:e.discordPostsPromise})})]})]})}),As=E(function(){return r.jsx(R,{statusHandlers:{404:()=>r.jsx("p",{children:"Sorry, we couldn't find an app here."})}})});export{As as ErrorBoundary,Es as default};
|
|
2
|
+
//# sourceMappingURL=index-CwYatiE_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-BnHkUMN_.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index.tsx"],"sourcesContent":["import { type Route } from './+types/index'\nimport {\n\tgetAppByName,\n\tgetAppDisplayName,\n\tgetApps,\n\tgetExerciseApp,\n\tisExerciseStepApp,\n\tisPlaygroundApp,\n\trequireExerciseApp,\n\ttype App,\n\ttype ExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getDiffPatch } from '@epic-web/workshop-utils/diff.server'\nimport { userHasAccessToExerciseStep } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport * as Tabs from '@radix-ui/react-tabs'\nimport * as React from 'react'\nimport {\n\tuseNavigate,\n\tuseSearchParams,\n\tdata,\n\tredirect,\n\ttype HeadersFunction,\n\tuseOutletContext,\n} from 'react-router'\nimport { Diff } from '#app/components/diff.tsx'\nimport { DiscordChat } from '#app/components/discord-chat.tsx'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.tsx'\nimport {\n\tgetPreviewSearchParams,\n\tPreviewTabsList,\n} from '#app/components/preview-tabs.tsx'\nimport { useWorkshopConfig } from '#app/components/workshop-config.tsx'\nimport { fetchDiscordPosts } from '#app/utils/discord.server.ts'\nimport { useAltDown } from '#app/utils/misc.tsx'\nimport { Playground } from './__shared/playground.tsx'\nimport { Preview } from './__shared/preview.tsx'\nimport { Tests } from './__shared/tests.tsx'\nimport { getAppRunningState, getTestState } from './__shared/utils.tsx'\n\nexport async function loader({ request, params }: Route.LoaderArgs) {\n\tconst timings = makeTimings('exerciseStepTypeIndexLoader')\n\tconst searchParams = new URL(request.url).searchParams\n\tconst cacheOptions = { request, timings }\n\n\tconst [exerciseStepApp, allAppsFull, problemApp, solutionApp] =\n\t\tawait Promise.all([\n\t\t\trequireExerciseApp(params, cacheOptions),\n\t\t\tgetApps(cacheOptions),\n\t\t\tgetExerciseApp({ ...params, type: 'problem' }, cacheOptions),\n\t\t\tgetExerciseApp({ ...params, type: 'solution' }, cacheOptions),\n\t\t])\n\n\tconst playgroundApp = allAppsFull.find(isPlaygroundApp)\n\tconst reqUrl = new URL(request.url)\n\n\tconst pathnameParam = reqUrl.searchParams.get('pathname')\n\tif (pathnameParam === '' || pathnameParam === '/') {\n\t\treqUrl.searchParams.delete('pathname')\n\t\tthrow redirect(reqUrl.toString())\n\t}\n\n\tconst app1Name = reqUrl.searchParams.get('app1')\n\tconst app2Name = reqUrl.searchParams.get('app2')\n\tconst app1 = app1Name\n\t\t? await getAppByName(app1Name)\n\t\t: playgroundApp || problemApp\n\tconst app2 = app2Name ? await getAppByName(app2Name) : solutionApp\n\n\tfunction getStepId(a: ExerciseStepApp) {\n\t\treturn (\n\t\t\ta.exerciseNumber * 1000 +\n\t\t\ta.stepNumber * 10 +\n\t\t\t(a.type === 'problem' ? 0 : 1)\n\t\t)\n\t}\n\n\tfunction getStepNameAndId(a: App) {\n\t\tif (isExerciseStepApp(a)) {\n\t\t\tconst exerciseNumberStr = String(a.exerciseNumber).padStart(2, '0')\n\t\t\tconst stepNumberStr = String(a.stepNumber).padStart(2, '0')\n\n\t\t\treturn {\n\t\t\t\tstepName: `${exerciseNumberStr}/${stepNumberStr}.${a.type}`,\n\t\t\t\tstepId: getStepId(a),\n\t\t\t}\n\t\t}\n\t\treturn { stepName: '', stepId: -1 }\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t\t...getStepNameAndId(a),\n\t\t}))\n\n\tallApps.sort((a, b) => {\n\t\t// order them by their stepId\n\t\tif (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId\n\n\t\t// non-step apps should come after step apps\n\t\tif (a.stepId > 0) return -1\n\t\tif (b.stepId > 0) return 1\n\n\t\treturn 0\n\t})\n\n\tasync function getDiffProp() {\n\t\tif (!app1 || !app2) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffPatch: null,\n\t\t\t}\n\t\t}\n\t\tconst diffPatch = await getDiffPatch(app1, app2, {\n\t\t\t...cacheOptions,\n\t\t\tforceFresh: searchParams.get('forceFresh') === 'diff',\n\t\t}).catch((e) => {\n\t\t\tconsole.error(e)\n\t\t\treturn null\n\t\t})\n\t\treturn {\n\t\t\tapp1: app1.name,\n\t\t\tapp2: app2.name,\n\t\t\tdiffPatch,\n\t\t}\n\t}\n\n\treturn data(\n\t\t{\n\t\t\ttype: params.type as 'problem' | 'solution',\n\t\t\texerciseStepApp,\n\t\t\tallApps,\n\t\t\t// defer this promise so that we don't block the response from being sent\n\t\t\tdiscordPostsPromise: fetchDiscordPosts({ request }),\n\t\t\tuserHasAccessPromise: userHasAccessToExerciseStep({\n\t\t\t\texerciseNumber: Number(params.exerciseNumber),\n\t\t\t\tstepNumber: Number(params.stepNumber),\n\t\t\t\trequest,\n\t\t\t\ttimings,\n\t\t\t}),\n\t\t\tplayground: playgroundApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'playground',\n\t\t\t\t\t\tfullPath: playgroundApp.fullPath,\n\t\t\t\t\t\tdev: playgroundApp.dev,\n\t\t\t\t\t\ttest: playgroundApp.test,\n\t\t\t\t\t\ttitle: playgroundApp.title,\n\t\t\t\t\t\tname: playgroundApp.name,\n\t\t\t\t\t\tappName: playgroundApp.appName,\n\t\t\t\t\t\tisUpToDate: playgroundApp.isUpToDate,\n\t\t\t\t\t\tstackBlitzUrl: playgroundApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(playgroundApp)),\n\t\t\t\t\t\t...getTestState(playgroundApp),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tproblem: problemApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'problem',\n\t\t\t\t\t\tfullPath: problemApp.fullPath,\n\t\t\t\t\t\tdev: problemApp.dev,\n\t\t\t\t\t\ttest: problemApp.test,\n\t\t\t\t\t\ttitle: problemApp.title,\n\t\t\t\t\t\tname: problemApp.name,\n\t\t\t\t\t\tstackBlitzUrl: problemApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(problemApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tsolution: solutionApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'solution',\n\t\t\t\t\t\tfullPath: solutionApp.fullPath,\n\t\t\t\t\t\tdev: solutionApp.dev,\n\t\t\t\t\t\ttest: solutionApp.test,\n\t\t\t\t\t\ttitle: solutionApp.title,\n\t\t\t\t\t\tname: solutionApp.name,\n\t\t\t\t\t\tstackBlitzUrl: solutionApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(solutionApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tdiff: getDiffProp(),\n\t\t} as const,\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst tabs = [\n\t'playground',\n\t'problem',\n\t'solution',\n\t'tests',\n\t'diff',\n\t'chat',\n] as const\nconst isValidPreview = (s: string | null): s is (typeof tabs)[number] =>\n\tBoolean(s && tabs.includes(s as (typeof tabs)[number]))\n\nexport default function ExercisePartRoute({\n\tloaderData,\n}: Route.ComponentProps) {\n\tconst { inBrowserBrowserRef } = useOutletContext<{\n\t\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n\t}>()\n\tconst workshopConfig = useWorkshopConfig()\n\tconst [searchParams] = useSearchParams()\n\n\tconst preview = searchParams.get('preview')\n\n\tconst altDown = useAltDown()\n\tconst navigate = useNavigate()\n\n\tfunction shouldHideTab(tab: (typeof tabs)[number]) {\n\t\tif (tab === 'tests') {\n\t\t\treturn (\n\t\t\t\tENV.EPICSHOP_DEPLOYED ||\n\t\t\t\t!loaderData.playground ||\n\t\t\t\tloaderData.playground.test.type === 'none'\n\t\t\t)\n\t\t}\n\t\tif (tab === 'problem' || tab === 'solution') {\n\t\t\tif (loaderData[tab]?.dev.type === 'none') return true\n\t\t\tif (ENV.EPICSHOP_DEPLOYED) {\n\t\t\t\tconst devType = loaderData[tab]?.dev.type\n\t\t\t\treturn (\n\t\t\t\t\tdevType !== 'browser' &&\n\t\t\t\t\tdevType !== 'export' &&\n\t\t\t\t\t!loaderData[tab]?.stackBlitzUrl\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (tab === 'playground' && ENV.EPICSHOP_DEPLOYED) return true\n\n\t\tif (tab === 'chat') {\n\t\t\treturn !workshopConfig.product.discordChannelId\n\t\t}\n\t\treturn false\n\t}\n\n\tfunction getTabStatus(\n\t\ttab: (typeof tabs)[number],\n\t): 'running' | 'passed' | 'failed' | null {\n\t\tif (tab === 'tests') {\n\t\t\tif (!loaderData.playground) return null\n\t\t\tconst { isTestRunning, testExitCode } = loaderData.playground\n\t\t\tif (isTestRunning) return 'running'\n\t\t\tif (testExitCode === 0) return 'passed'\n\t\t\tif (testExitCode !== null && testExitCode !== 0) return 'failed'\n\t\t\treturn null\n\t\t}\n\t\tif (tab === 'problem' || tab === 'solution' || tab === 'playground') {\n\t\t\tconst appData =\n\t\t\t\ttab === 'playground' ? loaderData.playground : loaderData[tab]\n\t\t\tif (appData?.isRunning) return 'running'\n\t\t}\n\t\treturn null\n\t}\n\n\tconst activeTab = isValidPreview(preview)\n\t\t? preview\n\t\t: tabs.find((t) => !shouldHideTab(t))\n\n\t// when alt is held down, the diff tab should open to the full-page diff view\n\t// between the problem and solution (this is more for the instructor than the student)\n\tconst altDiffUrl = `/diff?${new URLSearchParams({\n\t\tapp1: loaderData.problem?.name ?? '',\n\t\tapp2: loaderData.solution?.name ?? '',\n\t})}`\n\n\tfunction handleDiffTabClick(event: React.MouseEvent<HTMLAnchorElement>) {\n\t\tif (event.altKey && !event.ctrlKey && !event.shiftKey && !event.metaKey) {\n\t\t\tevent.preventDefault()\n\t\t\tvoid navigate(altDiffUrl)\n\t\t}\n\t}\n\n\tconst previewTabs = tabs.map((tab) => {\n\t\tconst hidden = shouldHideTab(tab)\n\t\tconst status = getTabStatus(tab)\n\t\tconst to =\n\t\t\ttab === 'diff' && altDown\n\t\t\t\t? altDiffUrl\n\t\t\t\t: `?${getPreviewSearchParams(searchParams, tab, 'playground')}`\n\t\treturn {\n\t\t\tid: tab,\n\t\t\tlabel: tab,\n\t\t\thidden,\n\t\t\tstatus,\n\t\t\tto,\n\t\t\tonClick: tab === 'diff' ? handleDiffTabClick : undefined,\n\t\t}\n\t})\n\n\treturn (\n\t\t<Tabs.Root\n\t\t\tclassName=\"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden sm:col-span-1 sm:row-span-1\"\n\t\t\tvalue={activeTab}\n\t\t\t// intentionally no onValueChange here because the Link will trigger the\n\t\t\t// change.\n\t\t>\n\t\t\t<PreviewTabsList tabs={previewTabs} />\n\t\t\t<div className=\"relative z-10 flex min-h-0 flex-1 flex-col overflow-hidden\">\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"playground\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Playground\n\t\t\t\t\t\tappInfo={loaderData.playground}\n\t\t\t\t\t\tproblemAppName={loaderData.problem?.name}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t\tallApps={loaderData.allApps}\n\t\t\t\t\t\tisUpToDate={loaderData.playground?.isUpToDate ?? false}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"problem\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={loaderData.problem}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"solution\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={loaderData.solution}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"tests\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t<Tests\n\t\t\t\t\t\tappInfo={loaderData.playground}\n\t\t\t\t\t\tproblemAppName={loaderData.problem?.name}\n\t\t\t\t\t\tallApps={loaderData.allApps}\n\t\t\t\t\t\tisUpToDate={loaderData.playground?.isUpToDate ?? false}\n\t\t\t\t\t\tuserHasAccessPromise={loaderData.userHasAccessPromise}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"diff\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t>\n\t\t\t\t\t<Diff\n\t\t\t\t\t\tdiff={loaderData.diff}\n\t\t\t\t\t\tallApps={loaderData.allApps}\n\t\t\t\t\t\tuserHasAccessPromise={loaderData.userHasAccessPromise}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"chat\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t>\n\t\t\t\t\t<DiscordChat discordPostsPromise={loaderData.discordPostsPromise} />\n\t\t\t\t</Tabs.Content>\n\t\t\t</div>\n\t\t</Tabs.Root>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => <p>Sorry, we couldn't find an app here.</p>,\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["tabs","isValidPreview","s","Boolean","includes","index","_UNSAFE_withComponentProps","loaderData","inBrowserBrowserRef","useOutletContext","workshopConfig","useWorkshopConfig","searchParams","useSearchParams","preview","get","altDown","useAltDown","navigate","useNavigate","shouldHideTab","tab","ENV","EPICSHOP_DEPLOYED","playground","test","type","dev","devType","stackBlitzUrl","product","discordChannelId","getTabStatus","isTestRunning","testExitCode","isRunning","activeTab","find","t","altDiffUrl","URLSearchParams","app1","problem","name","app2","solution","handleDiffTabClick","event","altKey","ctrlKey","shiftKey","metaKey","preventDefault","previewTabs","map","hidden","status","to","getPreviewSearchParams","id","label","onClick","jsxs","Tabs","className","value","children","jsx","PreviewTabsList","forceMount","Playground","appInfo","problemAppName","allApps","isUpToDate","Preview","Tests","userHasAccessPromise","Diff","diff","DiscordChat","discordPostsPromise","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary","statusHandlers"],"mappings":"y4CA+MA,MAAMA,EAAO,CACZ,aACA,UACA,WACA,QACA,OACA,MAAA,EAEKC,EAAkBC,GACvBC,GAAQD,GAAKF,EAAKI,SAASF,CAA0B,GAEtDG,GAAAC,EAAA,SAA0C,CACzCC,WAAAA,CACD,EAAyB,CACxB,KAAM,CAAEC,oBAAAA,GAAwBC,EAAA,EAG1BC,EAAiBC,EAAA,EACjB,CAACC,CAAY,EAAIC,EAAA,EAEjBC,EAAUF,EAAaG,IAAI,SAAS,EAEpCC,EAAUC,EAAA,EACVC,EAAWC,EAAA,EAEjB,SAASC,EAAcC,EAA4B,CAClD,GAAIA,IAAQ,QACX,OACCC,IAAIC,mBACJ,CAAChB,EAAWiB,YACZjB,EAAWiB,WAAWC,KAAKC,OAAS,OAGtC,GAAIL,IAAQ,WAAaA,IAAQ,WAAY,CAC5C,GAAId,EAAWc,CAAG,GAAGM,IAAID,OAAS,OAAQ,MAAO,GACjD,GAAIJ,IAAIC,kBAAmB,CAC1B,MAAMK,EAAUrB,EAAWc,CAAG,GAAGM,IAAID,KACrC,OACCE,IAAY,WACZA,IAAY,UACZ,CAACrB,EAAWc,CAAG,GAAGQ,aAEpB,CACD,CACA,OAAIR,IAAQ,cAAgBC,IAAIC,kBAA0B,GAEtDF,IAAQ,OACJ,CAACX,EAAeoB,QAAQC,iBAEzB,EACR,CAEA,SAASC,EACRX,EACyC,CACzC,GAAIA,IAAQ,QAAS,CACpB,GAAI,CAACd,EAAWiB,WAAY,OAAO,KACnC,KAAM,CAAES,cAAAA,EAAeC,aAAAA,GAAiB3B,EAAWiB,WACnD,OAAIS,EAAsB,UACtBC,IAAiB,EAAU,SAC3BA,IAAiB,MAAQA,IAAiB,EAAU,SACjD,IACR,CACA,OAAIb,IAAQ,WAAaA,IAAQ,YAAcA,IAAQ,gBAErDA,IAAQ,aAAed,EAAWiB,WAAajB,EAAWc,CAAG,IACjDc,UAAkB,UAEzB,IACR,CAEA,MAAMC,EAAYnC,EAAea,CAAO,EACrCA,EACAd,EAAKqC,KAAMC,GAAM,CAAClB,EAAckB,CAAC,CAAC,EAI/BC,EAAa,SAAS,IAAIC,gBAAgB,CAC/CC,KAAMlC,EAAWmC,SAASC,MAAQ,GAClCC,KAAMrC,EAAWsC,UAAUF,MAAQ,EACpC,CAAC,CAAC,GAEF,SAASG,EAAmBC,EAA4C,CACnEA,EAAMC,QAAU,CAACD,EAAME,SAAW,CAACF,EAAMG,UAAY,CAACH,EAAMI,UAC/DJ,EAAMK,eAAA,EACDlC,EAASqB,CAAU,EAE1B,CAEA,MAAMc,EAAcrD,EAAKsD,IAAKjC,GAAQ,CACrC,MAAMkC,EAASnC,EAAcC,CAAG,EAC1BmC,EAASxB,EAAaX,CAAG,EACzBoC,EACLpC,IAAQ,QAAUL,EACfuB,EACA,IAAImB,EAAuB9C,EAAcS,EAAK,YAAY,CAAC,GAC/D,MAAO,CACNsC,GAAItC,EACJuC,MAAOvC,EACPkC,OAAAA,EACAC,OAAAA,EACAC,GAAAA,EACAI,QAASxC,IAAQ,OAASyB,EAAqB,OAEjD,CAAC,EAED,OACCgB,EAAAA,KAACC,EAAA,CACAC,UAAU,4FACVC,MAAO7B,EAIP8B,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAgBpE,KAAMqD,CAAA,CAAa,EACpCS,EAAAA,KAAC,MAAA,CAAIE,UAAU,6DACdE,SAAA,CAAAC,EAAAA,IAACJ,EAAA,CACAE,MAAM,aACND,UAAU,uGACVK,WAAU,GAEVH,SAAAC,EAAAA,IAACG,EAAA,CACAC,QAAShE,EAAWiB,WACpBgD,eAAgBjE,EAAWmC,SAASC,KACpCnC,oBAAAA,EACAiE,QAASlE,EAAWkE,QACpBC,WAAYnE,EAAWiB,YAAYkD,YAAc,GAClD,EACD,EACAP,EAAAA,IAACJ,EAAA,CACAE,MAAM,UACND,UAAU,uGACVK,WAAU,GAEVH,SAAAC,EAAAA,IAACQ,EAAA,CACAJ,QAAShE,EAAWmC,QACpBlC,oBAAAA,EACD,EACD,EACA2D,EAAAA,IAACJ,EAAA,CACAE,MAAM,WACND,UAAU,uGACVK,WAAU,GAEVH,SAAAC,EAAAA,IAACQ,EAAA,CACAJ,QAAShE,EAAWsC,SACpBrC,oBAAAA,EACD,EACD,EACA2D,EAAAA,IAACJ,EAAA,CACAE,MAAM,QACND,UAAU,uHAEVE,SAAAC,EAAAA,IAACS,EAAA,CACAL,QAAShE,EAAWiB,WACpBgD,eAAgBjE,EAAWmC,SAASC,KACpC8B,QAASlE,EAAWkE,QACpBC,WAAYnE,EAAWiB,YAAYkD,YAAc,GACjDG,qBAAsBtE,EAAWsE,qBAClC,EACD,EACAV,EAAAA,IAACJ,EAAA,CACAE,MAAM,OACND,UAAU,8GAEVE,SAAAC,EAAAA,IAACW,EAAA,CACAC,KAAMxE,EAAWwE,KACjBN,QAASlE,EAAWkE,QACpBI,qBAAsBtE,EAAWsE,qBAClC,EACD,EACAV,EAAAA,IAACJ,EAAA,CACAE,MAAM,OACND,UAAU,8GAEVE,SAAAC,EAAAA,IAACa,EAAA,CAAYC,oBAAqB1E,EAAW0E,oBAAqB,CAAA,CACnE,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA,EAEOC,GAAAC,EAAA,UAAyB,CAC/B,OACChB,EAAAA,IAACiB,EAAA,CACAC,eAAgB,CACf,IAAK,IAAMlB,EAAAA,IAAC,IAAA,CAAED,SAAA,uCAAoC,CACnD,CAAA,CACD,CAEF,CAAA"}
|
|
1
|
+
{"version":3,"file":"index-CwYatiE_.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index.tsx"],"sourcesContent":["import { type Route } from './+types/index'\nimport {\n\tgetAppByName,\n\tgetAppDisplayName,\n\tgetApps,\n\tgetExerciseApp,\n\tisExerciseStepApp,\n\tisPlaygroundApp,\n\trequireExerciseApp,\n\ttype App,\n\ttype ExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getDiffPatch } from '@epic-web/workshop-utils/diff.server'\nimport { userHasAccessToExerciseStep } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport * as Tabs from '@radix-ui/react-tabs'\nimport * as React from 'react'\nimport {\n\tuseNavigate,\n\tuseSearchParams,\n\tdata,\n\tredirect,\n\ttype HeadersFunction,\n\tuseOutletContext,\n} from 'react-router'\nimport { Diff } from '#app/components/diff.tsx'\nimport { DiscordChat } from '#app/components/discord-chat.tsx'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.tsx'\nimport {\n\tgetPreviewSearchParams,\n\tPreviewTabsList,\n} from '#app/components/preview-tabs.tsx'\nimport { useWorkshopConfig } from '#app/components/workshop-config.tsx'\nimport { fetchDiscordPosts } from '#app/utils/discord.server.ts'\nimport { useAltDown } from '#app/utils/misc.tsx'\nimport { Playground } from './__shared/playground.tsx'\nimport { Preview } from './__shared/preview.tsx'\nimport { Tests } from './__shared/tests.tsx'\nimport { getAppRunningState, getTestState } from './__shared/utils.tsx'\n\nexport async function loader({ request, params }: Route.LoaderArgs) {\n\tconst timings = makeTimings('exerciseStepTypeIndexLoader')\n\tconst searchParams = new URL(request.url).searchParams\n\tconst cacheOptions = { request, timings }\n\n\tconst [exerciseStepApp, allAppsFull, problemApp, solutionApp] =\n\t\tawait Promise.all([\n\t\t\trequireExerciseApp(params, cacheOptions),\n\t\t\tgetApps(cacheOptions),\n\t\t\tgetExerciseApp({ ...params, type: 'problem' }, cacheOptions),\n\t\t\tgetExerciseApp({ ...params, type: 'solution' }, cacheOptions),\n\t\t])\n\n\tconst playgroundApp = allAppsFull.find(isPlaygroundApp)\n\tconst reqUrl = new URL(request.url)\n\n\tconst pathnameParam = reqUrl.searchParams.get('pathname')\n\tif (pathnameParam === '' || pathnameParam === '/') {\n\t\treqUrl.searchParams.delete('pathname')\n\t\tthrow redirect(reqUrl.toString())\n\t}\n\n\tconst app1Name = reqUrl.searchParams.get('app1')\n\tconst app2Name = reqUrl.searchParams.get('app2')\n\tconst app1 = app1Name\n\t\t? await getAppByName(app1Name)\n\t\t: playgroundApp || problemApp\n\tconst app2 = app2Name ? await getAppByName(app2Name) : solutionApp\n\n\tfunction getStepId(a: ExerciseStepApp) {\n\t\treturn (\n\t\t\ta.exerciseNumber * 1000 +\n\t\t\ta.stepNumber * 10 +\n\t\t\t(a.type === 'problem' ? 0 : 1)\n\t\t)\n\t}\n\n\tfunction getStepNameAndId(a: App) {\n\t\tif (isExerciseStepApp(a)) {\n\t\t\tconst exerciseNumberStr = String(a.exerciseNumber).padStart(2, '0')\n\t\t\tconst stepNumberStr = String(a.stepNumber).padStart(2, '0')\n\n\t\t\treturn {\n\t\t\t\tstepName: `${exerciseNumberStr}/${stepNumberStr}.${a.type}`,\n\t\t\t\tstepId: getStepId(a),\n\t\t\t}\n\t\t}\n\t\treturn { stepName: '', stepId: -1 }\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t\t...getStepNameAndId(a),\n\t\t}))\n\n\tallApps.sort((a, b) => {\n\t\t// order them by their stepId\n\t\tif (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId\n\n\t\t// non-step apps should come after step apps\n\t\tif (a.stepId > 0) return -1\n\t\tif (b.stepId > 0) return 1\n\n\t\treturn 0\n\t})\n\n\tasync function getDiffProp() {\n\t\tif (!app1 || !app2) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffPatch: null,\n\t\t\t}\n\t\t}\n\t\tconst diffPatch = await getDiffPatch(app1, app2, {\n\t\t\t...cacheOptions,\n\t\t\tforceFresh: searchParams.get('forceFresh') === 'diff',\n\t\t}).catch((e) => {\n\t\t\tconsole.error(e)\n\t\t\treturn null\n\t\t})\n\t\treturn {\n\t\t\tapp1: app1.name,\n\t\t\tapp2: app2.name,\n\t\t\tdiffPatch,\n\t\t}\n\t}\n\n\treturn data(\n\t\t{\n\t\t\ttype: params.type as 'problem' | 'solution',\n\t\t\texerciseStepApp,\n\t\t\tallApps,\n\t\t\t// defer this promise so that we don't block the response from being sent\n\t\t\tdiscordPostsPromise: fetchDiscordPosts({ request }),\n\t\t\tuserHasAccessPromise: userHasAccessToExerciseStep({\n\t\t\t\texerciseNumber: Number(params.exerciseNumber),\n\t\t\t\tstepNumber: Number(params.stepNumber),\n\t\t\t\trequest,\n\t\t\t\ttimings,\n\t\t\t}),\n\t\t\tplayground: playgroundApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'playground',\n\t\t\t\t\t\tfullPath: playgroundApp.fullPath,\n\t\t\t\t\t\tdev: playgroundApp.dev,\n\t\t\t\t\t\ttest: playgroundApp.test,\n\t\t\t\t\t\ttitle: playgroundApp.title,\n\t\t\t\t\t\tname: playgroundApp.name,\n\t\t\t\t\t\tappName: playgroundApp.appName,\n\t\t\t\t\t\tisUpToDate: playgroundApp.isUpToDate,\n\t\t\t\t\t\tstackBlitzUrl: playgroundApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(playgroundApp)),\n\t\t\t\t\t\t...getTestState(playgroundApp),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tproblem: problemApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'problem',\n\t\t\t\t\t\tfullPath: problemApp.fullPath,\n\t\t\t\t\t\tdev: problemApp.dev,\n\t\t\t\t\t\ttest: problemApp.test,\n\t\t\t\t\t\ttitle: problemApp.title,\n\t\t\t\t\t\tname: problemApp.name,\n\t\t\t\t\t\tstackBlitzUrl: problemApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(problemApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tsolution: solutionApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'solution',\n\t\t\t\t\t\tfullPath: solutionApp.fullPath,\n\t\t\t\t\t\tdev: solutionApp.dev,\n\t\t\t\t\t\ttest: solutionApp.test,\n\t\t\t\t\t\ttitle: solutionApp.title,\n\t\t\t\t\t\tname: solutionApp.name,\n\t\t\t\t\t\tstackBlitzUrl: solutionApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(solutionApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tdiff: getDiffProp(),\n\t\t} as const,\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst tabs = [\n\t'playground',\n\t'problem',\n\t'solution',\n\t'tests',\n\t'diff',\n\t'chat',\n] as const\nconst isValidPreview = (s: string | null): s is (typeof tabs)[number] =>\n\tBoolean(s && tabs.includes(s as (typeof tabs)[number]))\n\nexport default function ExercisePartRoute({\n\tloaderData,\n}: Route.ComponentProps) {\n\tconst { inBrowserBrowserRef } = useOutletContext<{\n\t\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n\t}>()\n\tconst workshopConfig = useWorkshopConfig()\n\tconst [searchParams] = useSearchParams()\n\n\tconst preview = searchParams.get('preview')\n\n\tconst altDown = useAltDown()\n\tconst navigate = useNavigate()\n\n\tfunction shouldHideTab(tab: (typeof tabs)[number]) {\n\t\tif (tab === 'tests') {\n\t\t\treturn (\n\t\t\t\tENV.EPICSHOP_DEPLOYED ||\n\t\t\t\t!loaderData.playground ||\n\t\t\t\tloaderData.playground.test.type === 'none'\n\t\t\t)\n\t\t}\n\t\tif (tab === 'problem' || tab === 'solution') {\n\t\t\tif (loaderData[tab]?.dev.type === 'none') return true\n\t\t\tif (ENV.EPICSHOP_DEPLOYED) {\n\t\t\t\tconst devType = loaderData[tab]?.dev.type\n\t\t\t\treturn (\n\t\t\t\t\tdevType !== 'browser' &&\n\t\t\t\t\tdevType !== 'export' &&\n\t\t\t\t\t!loaderData[tab]?.stackBlitzUrl\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (tab === 'playground' && ENV.EPICSHOP_DEPLOYED) return true\n\n\t\tif (tab === 'chat') {\n\t\t\treturn !workshopConfig.product.discordChannelId\n\t\t}\n\t\treturn false\n\t}\n\n\tfunction getTabStatus(\n\t\ttab: (typeof tabs)[number],\n\t): 'running' | 'passed' | 'failed' | null {\n\t\tif (tab === 'tests') {\n\t\t\tif (!loaderData.playground) return null\n\t\t\tconst { isTestRunning, testExitCode } = loaderData.playground\n\t\t\tif (isTestRunning) return 'running'\n\t\t\tif (testExitCode === 0) return 'passed'\n\t\t\tif (testExitCode !== null && testExitCode !== 0) return 'failed'\n\t\t\treturn null\n\t\t}\n\t\tif (tab === 'problem' || tab === 'solution' || tab === 'playground') {\n\t\t\tconst appData =\n\t\t\t\ttab === 'playground' ? loaderData.playground : loaderData[tab]\n\t\t\tif (appData?.isRunning) return 'running'\n\t\t}\n\t\treturn null\n\t}\n\n\tconst activeTab = isValidPreview(preview)\n\t\t? preview\n\t\t: tabs.find((t) => !shouldHideTab(t))\n\n\t// when alt is held down, the diff tab should open to the full-page diff view\n\t// between the problem and solution (this is more for the instructor than the student)\n\tconst altDiffUrl = `/diff?${new URLSearchParams({\n\t\tapp1: loaderData.problem?.name ?? '',\n\t\tapp2: loaderData.solution?.name ?? '',\n\t})}`\n\n\tfunction handleDiffTabClick(event: React.MouseEvent<HTMLAnchorElement>) {\n\t\tif (event.altKey && !event.ctrlKey && !event.shiftKey && !event.metaKey) {\n\t\t\tevent.preventDefault()\n\t\t\tvoid navigate(altDiffUrl)\n\t\t}\n\t}\n\n\tconst previewTabs = tabs.map((tab) => {\n\t\tconst hidden = shouldHideTab(tab)\n\t\tconst status = getTabStatus(tab)\n\t\tconst to =\n\t\t\ttab === 'diff' && altDown\n\t\t\t\t? altDiffUrl\n\t\t\t\t: `?${getPreviewSearchParams(searchParams, tab, 'playground')}`\n\t\treturn {\n\t\t\tid: tab,\n\t\t\tlabel: tab,\n\t\t\thidden,\n\t\t\tstatus,\n\t\t\tto,\n\t\t\tonClick: tab === 'diff' ? handleDiffTabClick : undefined,\n\t\t}\n\t})\n\n\treturn (\n\t\t<Tabs.Root\n\t\t\tclassName=\"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden sm:col-span-1 sm:row-span-1\"\n\t\t\tvalue={activeTab}\n\t\t\t// intentionally no onValueChange here because the Link will trigger the\n\t\t\t// change.\n\t\t>\n\t\t\t<PreviewTabsList tabs={previewTabs} />\n\t\t\t<div className=\"relative z-10 flex min-h-0 flex-1 flex-col overflow-hidden\">\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"playground\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Playground\n\t\t\t\t\t\tappInfo={loaderData.playground}\n\t\t\t\t\t\tproblemAppName={loaderData.problem?.name}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t\tallApps={loaderData.allApps}\n\t\t\t\t\t\tisUpToDate={loaderData.playground?.isUpToDate ?? false}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"problem\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={loaderData.problem}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"solution\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={loaderData.solution}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"tests\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start overflow-hidden\"\n\t\t\t\t>\n\t\t\t\t\t<Tests\n\t\t\t\t\t\tappInfo={loaderData.playground}\n\t\t\t\t\t\tproblemAppName={loaderData.problem?.name}\n\t\t\t\t\t\tallApps={loaderData.allApps}\n\t\t\t\t\t\tisUpToDate={loaderData.playground?.isUpToDate ?? false}\n\t\t\t\t\t\tuserHasAccessPromise={loaderData.userHasAccessPromise}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"diff\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t>\n\t\t\t\t\t<Diff\n\t\t\t\t\t\tdiff={loaderData.diff}\n\t\t\t\t\t\tallApps={loaderData.allApps}\n\t\t\t\t\t\tuserHasAccessPromise={loaderData.userHasAccessPromise}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"chat\"\n\t\t\t\t\tclassName=\"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start\"\n\t\t\t\t>\n\t\t\t\t\t<DiscordChat discordPostsPromise={loaderData.discordPostsPromise} />\n\t\t\t\t</Tabs.Content>\n\t\t\t</div>\n\t\t</Tabs.Root>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => <p>Sorry, we couldn't find an app here.</p>,\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["tabs","isValidPreview","s","Boolean","includes","index","_UNSAFE_withComponentProps","loaderData","inBrowserBrowserRef","useOutletContext","workshopConfig","useWorkshopConfig","searchParams","useSearchParams","preview","get","altDown","useAltDown","navigate","useNavigate","shouldHideTab","tab","ENV","EPICSHOP_DEPLOYED","playground","test","type","dev","devType","stackBlitzUrl","product","discordChannelId","getTabStatus","isTestRunning","testExitCode","isRunning","activeTab","find","t","altDiffUrl","URLSearchParams","app1","problem","name","app2","solution","handleDiffTabClick","event","altKey","ctrlKey","shiftKey","metaKey","preventDefault","previewTabs","map","hidden","status","to","getPreviewSearchParams","id","label","onClick","jsxs","Tabs","className","value","children","jsx","PreviewTabsList","forceMount","Playground","appInfo","problemAppName","allApps","isUpToDate","Preview","Tests","userHasAccessPromise","Diff","diff","DiscordChat","discordPostsPromise","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary","statusHandlers"],"mappings":"y4CA+MA,MAAMA,EAAO,CACZ,aACA,UACA,WACA,QACA,OACA,MAAA,EAEKC,EAAkBC,GACvBC,GAAQD,GAAKF,EAAKI,SAASF,CAA0B,GAEtDG,GAAAC,EAAA,SAA0C,CACzCC,WAAAA,CACD,EAAyB,CACxB,KAAM,CAAEC,oBAAAA,GAAwBC,EAAA,EAG1BC,EAAiBC,EAAA,EACjB,CAACC,CAAY,EAAIC,EAAA,EAEjBC,EAAUF,EAAaG,IAAI,SAAS,EAEpCC,EAAUC,EAAA,EACVC,EAAWC,EAAA,EAEjB,SAASC,EAAcC,EAA4B,CAClD,GAAIA,IAAQ,QACX,OACCC,IAAIC,mBACJ,CAAChB,EAAWiB,YACZjB,EAAWiB,WAAWC,KAAKC,OAAS,OAGtC,GAAIL,IAAQ,WAAaA,IAAQ,WAAY,CAC5C,GAAId,EAAWc,CAAG,GAAGM,IAAID,OAAS,OAAQ,MAAO,GACjD,GAAIJ,IAAIC,kBAAmB,CAC1B,MAAMK,EAAUrB,EAAWc,CAAG,GAAGM,IAAID,KACrC,OACCE,IAAY,WACZA,IAAY,UACZ,CAACrB,EAAWc,CAAG,GAAGQ,aAEpB,CACD,CACA,OAAIR,IAAQ,cAAgBC,IAAIC,kBAA0B,GAEtDF,IAAQ,OACJ,CAACX,EAAeoB,QAAQC,iBAEzB,EACR,CAEA,SAASC,EACRX,EACyC,CACzC,GAAIA,IAAQ,QAAS,CACpB,GAAI,CAACd,EAAWiB,WAAY,OAAO,KACnC,KAAM,CAAES,cAAAA,EAAeC,aAAAA,GAAiB3B,EAAWiB,WACnD,OAAIS,EAAsB,UACtBC,IAAiB,EAAU,SAC3BA,IAAiB,MAAQA,IAAiB,EAAU,SACjD,IACR,CACA,OAAIb,IAAQ,WAAaA,IAAQ,YAAcA,IAAQ,gBAErDA,IAAQ,aAAed,EAAWiB,WAAajB,EAAWc,CAAG,IACjDc,UAAkB,UAEzB,IACR,CAEA,MAAMC,EAAYnC,EAAea,CAAO,EACrCA,EACAd,EAAKqC,KAAMC,GAAM,CAAClB,EAAckB,CAAC,CAAC,EAI/BC,EAAa,SAAS,IAAIC,gBAAgB,CAC/CC,KAAMlC,EAAWmC,SAASC,MAAQ,GAClCC,KAAMrC,EAAWsC,UAAUF,MAAQ,EACpC,CAAC,CAAC,GAEF,SAASG,EAAmBC,EAA4C,CACnEA,EAAMC,QAAU,CAACD,EAAME,SAAW,CAACF,EAAMG,UAAY,CAACH,EAAMI,UAC/DJ,EAAMK,eAAA,EACDlC,EAASqB,CAAU,EAE1B,CAEA,MAAMc,EAAcrD,EAAKsD,IAAKjC,GAAQ,CACrC,MAAMkC,EAASnC,EAAcC,CAAG,EAC1BmC,EAASxB,EAAaX,CAAG,EACzBoC,EACLpC,IAAQ,QAAUL,EACfuB,EACA,IAAImB,EAAuB9C,EAAcS,EAAK,YAAY,CAAC,GAC/D,MAAO,CACNsC,GAAItC,EACJuC,MAAOvC,EACPkC,OAAAA,EACAC,OAAAA,EACAC,GAAAA,EACAI,QAASxC,IAAQ,OAASyB,EAAqB,OAEjD,CAAC,EAED,OACCgB,EAAAA,KAACC,EAAA,CACAC,UAAU,4FACVC,MAAO7B,EAIP8B,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAgBpE,KAAMqD,CAAA,CAAa,EACpCS,EAAAA,KAAC,MAAA,CAAIE,UAAU,6DACdE,SAAA,CAAAC,EAAAA,IAACJ,EAAA,CACAE,MAAM,aACND,UAAU,uGACVK,WAAU,GAEVH,SAAAC,EAAAA,IAACG,EAAA,CACAC,QAAShE,EAAWiB,WACpBgD,eAAgBjE,EAAWmC,SAASC,KACpCnC,oBAAAA,EACAiE,QAASlE,EAAWkE,QACpBC,WAAYnE,EAAWiB,YAAYkD,YAAc,GAClD,EACD,EACAP,EAAAA,IAACJ,EAAA,CACAE,MAAM,UACND,UAAU,uGACVK,WAAU,GAEVH,SAAAC,EAAAA,IAACQ,EAAA,CACAJ,QAAShE,EAAWmC,QACpBlC,oBAAAA,EACD,EACD,EACA2D,EAAAA,IAACJ,EAAA,CACAE,MAAM,WACND,UAAU,uGACVK,WAAU,GAEVH,SAAAC,EAAAA,IAACQ,EAAA,CACAJ,QAAShE,EAAWsC,SACpBrC,oBAAAA,EACD,EACD,EACA2D,EAAAA,IAACJ,EAAA,CACAE,MAAM,QACND,UAAU,uHAEVE,SAAAC,EAAAA,IAACS,EAAA,CACAL,QAAShE,EAAWiB,WACpBgD,eAAgBjE,EAAWmC,SAASC,KACpC8B,QAASlE,EAAWkE,QACpBC,WAAYnE,EAAWiB,YAAYkD,YAAc,GACjDG,qBAAsBtE,EAAWsE,qBAClC,EACD,EACAV,EAAAA,IAACJ,EAAA,CACAE,MAAM,OACND,UAAU,8GAEVE,SAAAC,EAAAA,IAACW,EAAA,CACAC,KAAMxE,EAAWwE,KACjBN,QAASlE,EAAWkE,QACpBI,qBAAsBtE,EAAWsE,qBAClC,EACD,EACAV,EAAAA,IAACJ,EAAA,CACAE,MAAM,OACND,UAAU,8GAEVE,SAAAC,EAAAA,IAACa,EAAA,CAAYC,oBAAqB1E,EAAW0E,oBAAqB,CAAA,CACnE,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA,EAEOC,GAAAC,EAAA,UAAyB,CAC/B,OACChB,EAAAA,IAACiB,EAAA,CACAC,eAAgB,CACf,IAAK,IAAMlB,EAAAA,IAAC,IAAA,CAAED,SAAA,uCAAoC,CACnD,CAAA,CACD,CAEF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-B-M-sDYZ.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/command-palette-6yIvDc2S.js","/assets/misc-D9k_mI0z.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-DlTJl5oQ.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/command-palette-6yIvDc2S.js","/assets/misc-D9k_mI0z.js","/assets/preload-helper-BXl3LOEh.js","/assets/dialog-DXBBGJQ6.js","/assets/client-only-C0tXiQt8.js","/assets/error-boundary-DCY9a5Cj.js","/assets/progress-bar-BCbq1CuC.js","/assets/index-E_6kulJP.js","/assets/tooltip-H74tOFSr.js","/assets/schemas-siASSt6b.js","/assets/index-DSpM0ReJ.js","/assets/presence-C9hiv1YH.js","/assets/seo-t5J-DRxw.js","/assets/online-x7UFobEJ.js","/assets/index-DosQrH9F.js","/assets/pe-D585gnmh.js","/assets/root-loader-DAxaiFMN.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_-CWojW_CZ.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-DCY9a5Cj.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DoopNtjE.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js","/assets/pe-D585gnmh.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/product-C-Gv7keY.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/status-indicator-C6DiLYL5.js","/assets/dialog-DXBBGJQ6.js","/assets/popover-Dh41LPal.js","/assets/tooltip-H74tOFSr.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/online-x7UFobEJ.js","/assets/presence-C9hiv1YH.js","/assets/root-loader-DAxaiFMN.js","/assets/progress-BvO_W5nB.js","/assets/index-DSpM0ReJ.js","/assets/schemas-siASSt6b.js","/assets/index-DosQrH9F.js","/assets/index-ywSltzcE.js","/assets/index-B2VNpNxJ.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-CLNljOSI.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-B_EAwzD_.js","/assets/misc-D9k_mI0z.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/tooltip-H74tOFSr.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DAxaiFMN.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/file-preview":{"id":"routes/_app+/app.$appName+/file-preview","parentId":"routes/_app+/_layout","path":"app/:appName/file-preview","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/file-preview-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/files":{"id":"routes/_app+/app.$appName+/files","parentId":"routes/_app+/_layout","path":"app/:appName/files","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/files-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-DdE02Ec9.js","imports":["/assets/discord-CVgNwZp4.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/index-Bi6L2ga8.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/user-DhjrtSbZ.js","/assets/root-loader-DAxaiFMN.js","/assets/workshop-config-v_LiyFvY.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-s7U67XNy.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-BZvzAp9f.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/mdx-C3Jl4O5D.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-BS_yDJtr.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/coerce-f7UHRcUL.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-CbP-ZGKA.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/index-Bi6L2ga8.js","/assets/error-boundary-DCY9a5Cj.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/set-playground-CvYErpku.js","/assets/misc-D9k_mI0z.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/error-boundary-BS_yDJtr.js","/assets/epic-video-C9q0z-QM.js","/assets/tooltip-H74tOFSr.js","/assets/mdx-C3Jl4O5D.js","/assets/index-ywSltzcE.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/preload-helper-BXl3LOEh.js","/assets/schemas-siASSt6b.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js","/assets/index-BvE6USCZ.js","/assets/index-B2VNpNxJ.js","/assets/index-DosQrH9F.js","/assets/button-B_EAwzD_.js","/assets/dialog-DXBBGJQ6.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/coerce-f7UHRcUL.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js"],"css":["/assets/epic-video-irT-uesJ.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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-BTlBQWy_.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/preview-Dav9KrHN.js","/assets/mdx-C3Jl4O5D.js","/assets/misc-D9k_mI0z.js","/assets/index-B2VNpNxJ.js","/assets/index-E_6kulJP.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-bar-BCbq1CuC.js","/assets/popover-Dh41LPal.js","/assets/index-ywSltzcE.js","/assets/index-DosQrH9F.js","/assets/button-B_EAwzD_.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-BnHkUMN_.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/playground-BV2y1ifv.js","/assets/diff-C4LoXlDb.js","/assets/error-boundary-DCY9a5Cj.js","/assets/workshop-config-v_LiyFvY.js","/assets/misc-D9k_mI0z.js","/assets/preview-Dav9KrHN.js","/assets/tests-CVRqL4gt.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/discord-CVgNwZp4.js","/assets/user-DhjrtSbZ.js","/assets/online-x7UFobEJ.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/set-playground-CvYErpku.js","/assets/button-B_EAwzD_.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/progress-bar-BCbq1CuC.js","/assets/dialog-DXBBGJQ6.js","/assets/playground-window-BM8PCQz7.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-C-8ah8qM.js","/assets/epic-video-C9q0z-QM.js","/assets/format-CZ5n8p10.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/mdx-C3Jl4O5D.js","/assets/popover-Dh41LPal.js","/assets/index-ywSltzcE.js"],"css":["/assets/epic-video-irT-uesJ.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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-BIQxWKXZ.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CVRqL4gt.js","/assets/index-Bi6L2ga8.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/misc-D9k_mI0z.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/playground-window-BM8PCQz7.js","/assets/set-playground-CvYErpku.js","/assets/button-B_EAwzD_.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/progress-bar-BCbq1CuC.js","/assets/dialog-DXBBGJQ6.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-oQfffeF0.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-DCY9a5Cj.js","/assets/error-boundary-BS_yDJtr.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-D9k_mI0z.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/schemas-siASSt6b.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-D5eMZ_ok.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-C9q0z-QM.js","/assets/misc-D9k_mI0z.js","/assets/loading-BjV0PtX2.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/retrieval-practice-ZEACmMc2.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/index-DSpM0ReJ.js","/assets/mdx-C3Jl4O5D.js","/assets/online-x7UFobEJ.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-H74tOFSr.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/_layout":{"id":"routes/_app+/extra+/_layout","parentId":"routes/_app+/_layout","path":"extra","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-YwRa8eK2.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/extra+/$extra":{"id":"routes/_app+/extra+/$extra","parentId":"routes/_app+/extra+/_layout","path":":extra","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_extra-Bd0-gThk.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/playground-BV2y1ifv.js","/assets/index-Bi6L2ga8.js","/assets/diff-C4LoXlDb.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/workshop-config-v_LiyFvY.js","/assets/preview-Dav9KrHN.js","/assets/launch-editor-C-8ah8qM.js","/assets/set-playground-CvYErpku.js","/assets/mdx-C3Jl4O5D.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/misc-D9k_mI0z.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/discord-CVgNwZp4.js","/assets/user-DhjrtSbZ.js","/assets/online-x7UFobEJ.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/playground-window-BM8PCQz7.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/preload-helper-BXl3LOEh.js","/assets/format-CZ5n8p10.js","/assets/popover-Dh41LPal.js","/assets/index-ywSltzcE.js","/assets/button-B_EAwzD_.js","/assets/progress-bar-BCbq1CuC.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/dialog-DXBBGJQ6.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/index":{"id":"routes/_app+/extra+/index","parentId":"routes/_app+/extra+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-Bo0DKzj5.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/mdx-C3Jl4O5D.js","/assets/misc-D9k_mI0z.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-CsRM8483.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-C9q0z-QM.js","/assets/misc-D9k_mI0z.js","/assets/loading-BjV0PtX2.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/retrieval-practice-ZEACmMc2.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/mdx-C3Jl4O5D.js","/assets/online-x7UFobEJ.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/index-DSpM0ReJ.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-H74tOFSr.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/guide":{"id":"routes/_app+/guide","parentId":"routes/_app+/_layout","path":"guide","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/guide-BXDwXd25.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-m9K7ACZe.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/launch-editor-C-8ah8qM.js","/assets/mdx-C3Jl4O5D.js","/assets/misc-D9k_mI0z.js","/assets/progress-BvO_W5nB.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-C-1RQc7w.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-6of7IFuz.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/button-B_EAwzD_.js","/assets/product-C-Gv7keY.js","/assets/workshop-config-v_LiyFvY.js","/assets/schemas-siASSt6b.js","/assets/index-DSpM0ReJ.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-Bnn5G3Yi.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-B_EAwzD_.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/format-CZ5n8p10.js","/assets/root-loader-DAxaiFMN.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support-nQYlb5ub.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-bzAwYDa9.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-B_EAwzD_.js","/assets/index-Bi6L2ga8.js","/assets/misc-D9k_mI0z.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-Dzb6wbga.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-DAxaiFMN.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-Cjjb4Th1.js","imports":["/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/client-only-C0tXiQt8.js","/assets/button-B_EAwzD_.js","/assets/misc-D9k_mI0z.js","/assets/launch-editor-C-8ah8qM.js","/assets/pe-D585gnmh.js","/assets/progress-bar-BCbq1CuC.js","/assets/root-loader-DAxaiFMN.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-n83JPsm9.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/launch-editor-C-8ah8qM.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js","/assets/root-loader-DAxaiFMN.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-D8Vd_e4L.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js","/assets/tooltip-H74tOFSr.js","/assets/progress-BvO_W5nB.js","/assets/root-loader-DAxaiFMN.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/offline-videos":{"id":"routes/admin+/offline-videos","parentId":"routes/admin+/_layout","path":"offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-BBWmtEuC.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/format-CZ5n8p10.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-CiPSQE6w.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-v_LiyFvY.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DAxaiFMN.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-Fut2J8f5.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/diff-C4LoXlDb.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/index-Bi6L2ga8.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/preload-helper-BXl3LOEh.js","/assets/index-DSpM0ReJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-bar-BCbq1CuC.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/revalidation-ws-JHvxsHsY.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mark-onboarding-complete":{"id":"routes/mark-onboarding-complete","parentId":"root","path":"mark-onboarding-complete","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/mark-onboarding-complete-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-FPLAlNGJ.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/persist-playground":{"id":"routes/persist-playground","parentId":"root","path":"persist-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/persist-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/connection-status":{"id":"routes/resources+/connection-status","parentId":"root","path":"resources/connection-status","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/connection-status-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-video-progress.$playbackId":{"id":"routes/resources+/offline-video-progress.$playbackId","parentId":"root","path":"resources/offline-video-progress/:playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-video-progress._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos":{"id":"routes/resources+/offline-videos","parentId":"root","path":"resources/offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos.$playbackId":{"id":"routes/resources+/offline-videos.$playbackId","parentId":"routes/resources+/offline-videos","path":":playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/saved-playgrounds":{"id":"routes/saved-playgrounds","parentId":"root","path":"saved-playgrounds","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/saved-playgrounds-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-72875289.js","version":"72875289"};
|
|
1
|
+
window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-B-M-sDYZ.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/command-palette-6yIvDc2S.js","/assets/misc-D9k_mI0z.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-DlTJl5oQ.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/command-palette-6yIvDc2S.js","/assets/misc-D9k_mI0z.js","/assets/preload-helper-BXl3LOEh.js","/assets/dialog-DXBBGJQ6.js","/assets/client-only-C0tXiQt8.js","/assets/error-boundary-DCY9a5Cj.js","/assets/progress-bar-BCbq1CuC.js","/assets/index-E_6kulJP.js","/assets/tooltip-H74tOFSr.js","/assets/schemas-siASSt6b.js","/assets/index-DSpM0ReJ.js","/assets/presence-C9hiv1YH.js","/assets/seo-t5J-DRxw.js","/assets/online-x7UFobEJ.js","/assets/index-DosQrH9F.js","/assets/pe-D585gnmh.js","/assets/root-loader-DAxaiFMN.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_-CWojW_CZ.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-DCY9a5Cj.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DoopNtjE.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js","/assets/pe-D585gnmh.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/product-C-Gv7keY.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/status-indicator-C6DiLYL5.js","/assets/dialog-DXBBGJQ6.js","/assets/popover-Dh41LPal.js","/assets/tooltip-H74tOFSr.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/online-x7UFobEJ.js","/assets/presence-C9hiv1YH.js","/assets/root-loader-DAxaiFMN.js","/assets/progress-BvO_W5nB.js","/assets/index-DSpM0ReJ.js","/assets/schemas-siASSt6b.js","/assets/index-DosQrH9F.js","/assets/index-ywSltzcE.js","/assets/index-B2VNpNxJ.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-CLNljOSI.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-B_EAwzD_.js","/assets/misc-D9k_mI0z.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/tooltip-H74tOFSr.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DAxaiFMN.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/file-preview":{"id":"routes/_app+/app.$appName+/file-preview","parentId":"routes/_app+/_layout","path":"app/:appName/file-preview","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/file-preview-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/files":{"id":"routes/_app+/app.$appName+/files","parentId":"routes/_app+/_layout","path":"app/:appName/files","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/files-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-DdE02Ec9.js","imports":["/assets/discord-CVgNwZp4.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/index-Bi6L2ga8.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/user-DhjrtSbZ.js","/assets/root-loader-DAxaiFMN.js","/assets/workshop-config-v_LiyFvY.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-s7U67XNy.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-BZvzAp9f.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/mdx-C3Jl4O5D.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-BS_yDJtr.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/coerce-f7UHRcUL.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-CbP-ZGKA.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/index-Bi6L2ga8.js","/assets/error-boundary-DCY9a5Cj.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/set-playground-CvYErpku.js","/assets/misc-D9k_mI0z.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/error-boundary-BS_yDJtr.js","/assets/epic-video-C9q0z-QM.js","/assets/tooltip-H74tOFSr.js","/assets/mdx-C3Jl4O5D.js","/assets/index-ywSltzcE.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/preload-helper-BXl3LOEh.js","/assets/schemas-siASSt6b.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js","/assets/index-BvE6USCZ.js","/assets/index-B2VNpNxJ.js","/assets/index-DosQrH9F.js","/assets/button-B_EAwzD_.js","/assets/dialog-DXBBGJQ6.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/coerce-f7UHRcUL.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js"],"css":["/assets/epic-video-irT-uesJ.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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-BTlBQWy_.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/preview-Dav9KrHN.js","/assets/mdx-C3Jl4O5D.js","/assets/misc-D9k_mI0z.js","/assets/index-B2VNpNxJ.js","/assets/index-E_6kulJP.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-bar-BCbq1CuC.js","/assets/popover-Dh41LPal.js","/assets/index-ywSltzcE.js","/assets/index-DosQrH9F.js","/assets/button-B_EAwzD_.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-CwYatiE_.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/playground-BV2y1ifv.js","/assets/diff-D18ACTzf.js","/assets/error-boundary-DCY9a5Cj.js","/assets/workshop-config-v_LiyFvY.js","/assets/misc-D9k_mI0z.js","/assets/preview-Dav9KrHN.js","/assets/tests-CVRqL4gt.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/discord-CVgNwZp4.js","/assets/user-DhjrtSbZ.js","/assets/online-x7UFobEJ.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/set-playground-CvYErpku.js","/assets/button-B_EAwzD_.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/progress-bar-BCbq1CuC.js","/assets/dialog-DXBBGJQ6.js","/assets/playground-window-BM8PCQz7.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-C-8ah8qM.js","/assets/epic-video-C9q0z-QM.js","/assets/format-CZ5n8p10.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/mdx-C3Jl4O5D.js","/assets/popover-Dh41LPal.js","/assets/index-ywSltzcE.js"],"css":["/assets/epic-video-irT-uesJ.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","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-BIQxWKXZ.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CVRqL4gt.js","/assets/index-Bi6L2ga8.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/misc-D9k_mI0z.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/playground-window-BM8PCQz7.js","/assets/set-playground-CvYErpku.js","/assets/button-B_EAwzD_.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/progress-bar-BCbq1CuC.js","/assets/dialog-DXBBGJQ6.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-oQfffeF0.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-DCY9a5Cj.js","/assets/error-boundary-BS_yDJtr.js","/assets/index-Bi6L2ga8.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-D9k_mI0z.js","/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/schemas-siASSt6b.js","/assets/coerce-f7UHRcUL.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-D5eMZ_ok.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-C9q0z-QM.js","/assets/misc-D9k_mI0z.js","/assets/loading-BjV0PtX2.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/retrieval-practice-ZEACmMc2.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/index-DSpM0ReJ.js","/assets/mdx-C3Jl4O5D.js","/assets/online-x7UFobEJ.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-H74tOFSr.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/_layout":{"id":"routes/_app+/extra+/_layout","parentId":"routes/_app+/_layout","path":"extra","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-YwRa8eK2.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/extra+/$extra":{"id":"routes/_app+/extra+/$extra","parentId":"routes/_app+/extra+/_layout","path":":extra","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_extra-DI111cn8.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/playground-BV2y1ifv.js","/assets/index-Bi6L2ga8.js","/assets/diff-D18ACTzf.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/workshop-config-v_LiyFvY.js","/assets/preview-Dav9KrHN.js","/assets/launch-editor-C-8ah8qM.js","/assets/set-playground-CvYErpku.js","/assets/mdx-C3Jl4O5D.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/misc-D9k_mI0z.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/discord-CVgNwZp4.js","/assets/user-DhjrtSbZ.js","/assets/online-x7UFobEJ.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-E_6kulJP.js","/assets/playground-window-BM8PCQz7.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/preload-helper-BXl3LOEh.js","/assets/format-CZ5n8p10.js","/assets/popover-Dh41LPal.js","/assets/index-ywSltzcE.js","/assets/button-B_EAwzD_.js","/assets/progress-bar-BCbq1CuC.js","/assets/onboarding-indicator-Csno1yMz.js","/assets/dialog-DXBBGJQ6.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/index":{"id":"routes/_app+/extra+/index","parentId":"routes/_app+/extra+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-Bo0DKzj5.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/launch-editor-C-8ah8qM.js","/assets/mdx-C3Jl4O5D.js","/assets/misc-D9k_mI0z.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-CsRM8483.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-C9q0z-QM.js","/assets/misc-D9k_mI0z.js","/assets/loading-BjV0PtX2.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/retrieval-practice-ZEACmMc2.js","/assets/revalidation-ws-JHvxsHsY.js","/assets/mdx-C3Jl4O5D.js","/assets/online-x7UFobEJ.js","/assets/root-loader-DAxaiFMN.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-BvO_W5nB.js","/assets/index-DSpM0ReJ.js","/assets/index-E_6kulJP.js","/assets/index-B2VNpNxJ.js","/assets/schemas-siASSt6b.js","/assets/tooltip-H74tOFSr.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/guide":{"id":"routes/_app+/guide","parentId":"routes/_app+/_layout","path":"guide","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/guide-BXDwXd25.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-m9K7ACZe.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-3PqfcnMA.js","/assets/epic-video-C9q0z-QM.js","/assets/error-boundary-DCY9a5Cj.js","/assets/launch-editor-C-8ah8qM.js","/assets/mdx-C3Jl4O5D.js","/assets/misc-D9k_mI0z.js","/assets/progress-BvO_W5nB.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-BCbq1CuC.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-C-1RQc7w.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-6of7IFuz.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/loading-BjV0PtX2.js","/assets/button-B_EAwzD_.js","/assets/product-C-Gv7keY.js","/assets/workshop-config-v_LiyFvY.js","/assets/schemas-siASSt6b.js","/assets/index-DSpM0ReJ.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-Bnn5G3Yi.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-B_EAwzD_.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/format-CZ5n8p10.js","/assets/root-loader-DAxaiFMN.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support-nQYlb5ub.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-bzAwYDa9.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-B_EAwzD_.js","/assets/index-Bi6L2ga8.js","/assets/misc-D9k_mI0z.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-Dzb6wbga.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-DAxaiFMN.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-Cjjb4Th1.js","imports":["/assets/chunk-4LKRSAEJ-TFLSCavK.js","/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/client-only-C0tXiQt8.js","/assets/button-B_EAwzD_.js","/assets/misc-D9k_mI0z.js","/assets/launch-editor-C-8ah8qM.js","/assets/pe-D585gnmh.js","/assets/progress-bar-BCbq1CuC.js","/assets/root-loader-DAxaiFMN.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-n83JPsm9.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/launch-editor-C-8ah8qM.js","/assets/index-Bi6L2ga8.js","/assets/index-B2VNpNxJ.js","/assets/progress-bar-BCbq1CuC.js","/assets/pe-D585gnmh.js","/assets/root-loader-DAxaiFMN.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-D8Vd_e4L.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js","/assets/tooltip-H74tOFSr.js","/assets/progress-BvO_W5nB.js","/assets/root-loader-DAxaiFMN.js","/assets/index-B2VNpNxJ.js","/assets/pe-D585gnmh.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/offline-videos":{"id":"routes/admin+/offline-videos","parentId":"routes/admin+/_layout","path":"offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-BBWmtEuC.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/format-CZ5n8p10.js","/assets/misc-D9k_mI0z.js","/assets/index-Bi6L2ga8.js"],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-CiPSQE6w.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-v_LiyFvY.js","/assets/index-Bi6L2ga8.js","/assets/root-loader-DAxaiFMN.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-DJwQw62A.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-D9k_mI0z.js","/assets/diff-D18ACTzf.js","/assets/nav-chevrons-DUMNZcNc.js","/assets/index-Bi6L2ga8.js","/assets/react-error-boundary-DFNLMQmr.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/index-BvE6USCZ.js","/assets/index-DosQrH9F.js","/assets/preload-helper-BXl3LOEh.js","/assets/index-DSpM0ReJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/launch-editor-C-8ah8qM.js","/assets/progress-bar-BCbq1CuC.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js","/assets/revalidation-ws-JHvxsHsY.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mark-onboarding-complete":{"id":"routes/mark-onboarding-complete","parentId":"root","path":"mark-onboarding-complete","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/mark-onboarding-complete-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-FPLAlNGJ.js","imports":["/assets/chunk-JZWAC4HX-BuixXc9D.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Bi6L2ga8.js","/assets/epic-video-C9q0z-QM.js","/assets/loading-BjV0PtX2.js","/assets/index-DSpM0ReJ.js","/assets/misc-D9k_mI0z.js","/assets/tooltip-H74tOFSr.js","/assets/index-B2VNpNxJ.js","/assets/root-loader-DAxaiFMN.js","/assets/pe-D585gnmh.js","/assets/schemas-siASSt6b.js","/assets/index-E_6kulJP.js","/assets/online-x7UFobEJ.js","/assets/format-CZ5n8p10.js","/assets/user-DhjrtSbZ.js","/assets/workshop-config-v_LiyFvY.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/persist-playground":{"id":"routes/persist-playground","parentId":"root","path":"persist-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/persist-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/connection-status":{"id":"routes/resources+/connection-status","parentId":"root","path":"resources/connection-status","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/connection-status-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-video-progress.$playbackId":{"id":"routes/resources+/offline-video-progress.$playbackId","parentId":"root","path":"resources/offline-video-progress/:playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-video-progress._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos":{"id":"routes/resources+/offline-videos","parentId":"root","path":"resources/offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos.$playbackId":{"id":"routes/resources+/offline-videos.$playbackId","parentId":"routes/resources+/offline-videos","path":":playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/saved-playgrounds":{"id":"routes/saved-playgrounds","parentId":"root","path":"saved-playgrounds","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/saved-playgrounds-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-afa7be5a.js","version":"afa7be5a"};
|