@epic-web/workshop-app 4.7.1 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -86,7 +86,8 @@ import * as esbuild from "esbuild";
86
86
  import { EventEmitter } from "events";
87
87
  import { Issuer } from "openid-client";
88
88
  import inspector from "node:inspector";
89
- import { ImageResponse } from "@vercel/og";
89
+ import { Resvg } from "@resvg/resvg-js";
90
+ import satori from "satori";
90
91
  function makeTimings(type, desc) {
91
92
  const timings = {
92
93
  [type]: [{ desc, start: performance.now() }]
@@ -132,7 +133,7 @@ function getServerTimeHeader(timings) {
132
133
  }, 0).toFixed(1);
133
134
  const desc = timingInfos.map((t) => t.desc).filter(Boolean).join(" & ");
134
135
  return [
135
- key.replaceAll(/(:| |@|=|;|,|\/|\\)/g, "_"),
136
+ key.replaceAll(/(:| |@|=|;|,|\/|\\|\{|\})/g, "_"),
136
137
  desc ? `desc=${JSON.stringify(desc)}` : null,
137
138
  `dur=${dur}`
138
139
  ].filter(Boolean).join(";");
@@ -143,20 +144,21 @@ function combineServerTimings(headers1, headers2) {
143
144
  newHeaders.append("Server-Timing", headers2.get("Server-Timing") ?? "");
144
145
  return newHeaders.get("Server-Timing") ?? "";
145
146
  }
146
- function cachifiedTimingReporter(timings) {
147
+ function cachifiedTimingReporter(timings, timingKey) {
147
148
  if (!timings) return;
148
149
  return ({ key }) => {
150
+ timingKey = timingKey ?? key;
149
151
  const cacheRetrievalTimer = createTimer(
150
- `cache:${key}`,
151
- `${key} cache retrieval`
152
+ `cache:${timingKey}`,
153
+ `${timingKey} cache retrieval`
152
154
  );
153
155
  let getFreshValueTimer;
154
156
  return (event) => {
155
157
  switch (event.name) {
156
158
  case "getFreshValueStart":
157
159
  getFreshValueTimer = createTimer(
158
- `getFreshValue:${key}`,
159
- `request forced to wait for a fresh ${key} value`
160
+ `getFreshValue:${timingKey}`,
161
+ `request forced to wait for a fresh ${timingKey} value`
160
162
  );
161
163
  break;
162
164
  case "getFreshValueSuccess":
@@ -181,6 +183,7 @@ const compiledMarkdownCache = makeSingletonCache(
181
183
  );
182
184
  const embeddedFilesCache = makeSingletonCache("EmbeddedFilesCache");
183
185
  const compiledCodeCache = makeSingletonCache("CompiledCodeCache");
186
+ const ogCache = makeSingletonCache("OgCache");
184
187
  const cacheDir$1 = path.join(os.homedir(), ".epicshop", "cache");
185
188
  const fsCache = {
186
189
  name: "Filesystem cache",
@@ -241,8 +244,6 @@ async function cachified({
241
244
  request,
242
245
  timings,
243
246
  key,
244
- // TODO: figure out what this was for before...
245
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
246
247
  timingKey = key.length > 18 ? `${key.slice(0, 7)}...${key.slice(-8)}` : key,
247
248
  ...options
248
249
  }) {
@@ -257,7 +258,7 @@ async function cachified({
257
258
  })
258
259
  },
259
260
  C.mergeReporters(
260
- cachifiedTimingReporter(timings),
261
+ cachifiedTimingReporter(timings, timingKey),
261
262
  process.env.EPICSHOP_DEBUG_CACHE ? verboseReporter() : void 0
262
263
  )
263
264
  );
@@ -3652,7 +3653,7 @@ function getSeoMetaTags({
3652
3653
  // to make cache busting possible, whenever the og image changes, we can change the version
3653
3654
  // note if the inputs change, then the cache will be busted automatically
3654
3655
  // it's only if the image changes that we need to change the version
3655
- version: "v2"
3656
+ version: "v3"
3656
3657
  }).toString(),
3657
3658
  ogImageAlt = title
3658
3659
  }) {
@@ -12371,6 +12372,199 @@ const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12371
12372
  __proto__: null,
12372
12373
  loader: loader$3
12373
12374
  }, Symbol.toStringTag, { value: "Module" }));
12375
+ const WIDTH = 1200;
12376
+ const HEIGHT = 630;
12377
+ async function loader$2({ request }) {
12378
+ const timings = makeTimings("og", "og image loader");
12379
+ const url = new URL(request.url);
12380
+ const workshopTitle = await getWorkshopTitle();
12381
+ const title = url.searchParams.get("title") || workshopTitle;
12382
+ const subtitle = url.searchParams.get("subtitle") || await getWorkshopSubtitle();
12383
+ const urlPathname = url.searchParams.get("urlPathname") || "";
12384
+ const element = /* @__PURE__ */ jsx(
12385
+ OgLayout,
12386
+ {
12387
+ request,
12388
+ instructor: await getWorkshopInstructor(),
12389
+ urlPathname,
12390
+ workshopTitle: workshopTitle === title ? null : workshopTitle,
12391
+ children: /* @__PURE__ */ jsxs(
12392
+ "div",
12393
+ {
12394
+ style: {
12395
+ display: "flex",
12396
+ flexDirection: "column",
12397
+ justifyContent: "center",
12398
+ alignItems: "center",
12399
+ height: "100%",
12400
+ width: "100%",
12401
+ color: "white"
12402
+ },
12403
+ children: [
12404
+ /* @__PURE__ */ jsx(
12405
+ "h1",
12406
+ {
12407
+ style: {
12408
+ display: "flex",
12409
+ justifyContent: "center",
12410
+ fontSize: "80px",
12411
+ // https://github.com/vercel/satori/issues/498
12412
+ textWrap: title.includes(" ") ? "balance" : "initial",
12413
+ textAlign: "center",
12414
+ width: "100%"
12415
+ },
12416
+ children: title
12417
+ }
12418
+ ),
12419
+ subtitle ? /* @__PURE__ */ jsx(
12420
+ "p",
12421
+ {
12422
+ style: {
12423
+ display: "flex",
12424
+ justifyContent: "center",
12425
+ fontSize: "40px",
12426
+ // https://github.com/vercel/satori/issues/498
12427
+ textWrap: subtitle.includes(" ") ? "balance" : "initial",
12428
+ textAlign: "center",
12429
+ width: "100%"
12430
+ },
12431
+ children: subtitle
12432
+ }
12433
+ ) : null
12434
+ ]
12435
+ }
12436
+ )
12437
+ }
12438
+ );
12439
+ const renderHtml = url.searchParams.get("html");
12440
+ if (renderHtml === "true") {
12441
+ return new Response(renderToStaticMarkup(element), {
12442
+ headers: { "Content-Type": "text/html" }
12443
+ });
12444
+ }
12445
+ const debug = url.searchParams.get("debug") === "true";
12446
+ try {
12447
+ const ogImg = await cachified({
12448
+ request,
12449
+ timings,
12450
+ timingKey: "og-image",
12451
+ forceFresh: debug || url.searchParams.get("fresh") === "true",
12452
+ key: request.url,
12453
+ cache: ogCache,
12454
+ ttl: 1e3 * 60 * 60 * 24 * 7,
12455
+ staleWhileRevalidate: 1e3 * 60 * 60 * 24 * 365,
12456
+ getFreshValue: async () => {
12457
+ return await getOgImg(element, { request, timings });
12458
+ }
12459
+ });
12460
+ return new Response(ogImg, {
12461
+ headers: {
12462
+ "Content-Type": "image/png",
12463
+ "Server-Timing": timings.toString()
12464
+ }
12465
+ });
12466
+ } catch (error) {
12467
+ return new Response(getErrorMessage(error), {
12468
+ status: 500,
12469
+ headers: { "Server-Timing": timings.toString() }
12470
+ });
12471
+ }
12472
+ }
12473
+ async function getOgImg(jsx2, { request, timings }) {
12474
+ const url = new URL(request.url);
12475
+ const svg = await satori(jsx2, {
12476
+ width: WIDTH,
12477
+ height: HEIGHT,
12478
+ debug: url.searchParams.get("debug") === "true",
12479
+ fonts: await Promise.all([
12480
+ getFont({ font: "Josefin Sans", request, timings })
12481
+ ]).then((fonts) => fonts.flat()),
12482
+ loadAdditionalAsset: async (code, segment) => {
12483
+ if (code === "emoji") {
12484
+ const svg2 = await getEmoji(segment, { request, timings });
12485
+ if (!svg2) return "";
12486
+ const base64 = Buffer.from(svg2).toString("base64");
12487
+ return `data:image/svg+xml;base64,${base64}`;
12488
+ }
12489
+ console.error(`Unhandled asset code: "${code}" for segment "${segment}"`);
12490
+ return "";
12491
+ }
12492
+ });
12493
+ const resvg = new Resvg(svg);
12494
+ const pngData = resvg.render();
12495
+ const data = pngData.asPng();
12496
+ return data;
12497
+ }
12498
+ async function getEmoji(emoji2, { request, timings }) {
12499
+ const emojiCode = emojiToCodePoints(emoji2);
12500
+ if (!emojiCode) return null;
12501
+ const emojiUrl = `https://cdn.jsdelivr.net/gh/jdecked/twemoji@15/assets/svg/${emojiCode}.svg`;
12502
+ return cachified({
12503
+ cache: ogCache,
12504
+ key: emojiUrl,
12505
+ request,
12506
+ timings,
12507
+ timingKey: `loading ${emojiCode}`,
12508
+ getFreshValue: async () => {
12509
+ const response = await fetch(emojiUrl);
12510
+ return response.text();
12511
+ }
12512
+ });
12513
+ }
12514
+ function emojiToCodePoints(emoji2) {
12515
+ const codePoints = [];
12516
+ for (let i = 0; i < emoji2.length; i++) {
12517
+ const codePoint = emoji2.codePointAt(i);
12518
+ if (!codePoint) continue;
12519
+ codePoints.push(codePoint.toString(16));
12520
+ if (codePoint > 65535) {
12521
+ i++;
12522
+ }
12523
+ }
12524
+ return codePoints.join("-");
12525
+ }
12526
+ async function getFont({
12527
+ font,
12528
+ weights = [200, 300, 400, 500, 600, 700],
12529
+ timings,
12530
+ request
12531
+ }) {
12532
+ const weightsString = weights.join(";");
12533
+ const fetchUrl = `https://fonts.googleapis.com/css2?family=${font}:wght@${weightsString}`;
12534
+ const css = await cachified({
12535
+ key: fetchUrl,
12536
+ cache: ogCache,
12537
+ timings,
12538
+ timingKey: `font-${font}`,
12539
+ request,
12540
+ getFreshValue: async () => {
12541
+ return fetch(fetchUrl, {
12542
+ headers: {
12543
+ // Make sure it returns TTF.
12544
+ "User-Agent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
12545
+ }
12546
+ }).then((response) => response.text());
12547
+ }
12548
+ });
12549
+ const resource = css.matchAll(
12550
+ /src: url\((.+)\) format\('(opentype|truetype)'\)/g
12551
+ );
12552
+ return Promise.all(
12553
+ [...resource].map((match) => match[1]).map((url) => {
12554
+ invariant(
12555
+ url,
12556
+ () => `Expected a URL to be parsed from the google font:
12557
+ ${css}`
12558
+ );
12559
+ return fetch(url).then((response) => response.arrayBuffer());
12560
+ }).map(async (buffer, i) => ({
12561
+ name: font,
12562
+ style: "normal",
12563
+ weight: weights[i],
12564
+ data: await buffer
12565
+ }))
12566
+ );
12567
+ }
12374
12568
  const epicWebLogo = /* @__PURE__ */ jsxs(
12375
12569
  "svg",
12376
12570
  {
@@ -12442,8 +12636,6 @@ const epicWebLogo = /* @__PURE__ */ jsxs(
12442
12636
  ]
12443
12637
  }
12444
12638
  );
12445
- const WIDTH = 1200;
12446
- const HEIGHT = 630;
12447
12639
  function OgLayout({
12448
12640
  instructor,
12449
12641
  children,
@@ -12457,11 +12649,11 @@ function OgLayout({
12457
12649
  "div",
12458
12650
  {
12459
12651
  style: {
12460
- // fontFamily: ,
12652
+ fontFamily: "Josefin Sans",
12461
12653
  display: "flex",
12462
12654
  flexDirection: "column",
12463
- width: WIDTH,
12464
- height: HEIGHT,
12655
+ width: "100%",
12656
+ height: "100%",
12465
12657
  position: "relative"
12466
12658
  },
12467
12659
  children: [
@@ -12567,82 +12759,6 @@ function OgLayout({
12567
12759
  }
12568
12760
  );
12569
12761
  }
12570
- async function loader$2({ request }) {
12571
- const url = new URL(request.url);
12572
- const workshopTitle = await getWorkshopTitle();
12573
- const title = url.searchParams.get("title") || workshopTitle;
12574
- const subtitle = url.searchParams.get("subtitle") || await getWorkshopSubtitle();
12575
- const urlPathname = url.searchParams.get("urlPathname") || "";
12576
- const element = /* @__PURE__ */ jsx(
12577
- OgLayout,
12578
- {
12579
- request,
12580
- instructor: await getWorkshopInstructor(),
12581
- urlPathname,
12582
- workshopTitle: workshopTitle === title ? null : workshopTitle,
12583
- children: /* @__PURE__ */ jsxs(
12584
- "div",
12585
- {
12586
- style: {
12587
- display: "flex",
12588
- flexDirection: "column",
12589
- justifyContent: "center",
12590
- alignItems: "center",
12591
- height: "100%",
12592
- width: "100%",
12593
- color: "white"
12594
- },
12595
- children: [
12596
- /* @__PURE__ */ jsx(
12597
- "h1",
12598
- {
12599
- style: {
12600
- display: "flex",
12601
- justifyContent: "center",
12602
- fontSize: "80px",
12603
- // https://github.com/vercel/satori/issues/498
12604
- textWrap: title.includes(" ") ? "balance" : "initial",
12605
- textAlign: "center",
12606
- width: "100%"
12607
- },
12608
- children: title
12609
- }
12610
- ),
12611
- subtitle ? /* @__PURE__ */ jsx(
12612
- "p",
12613
- {
12614
- style: {
12615
- display: "flex",
12616
- justifyContent: "center",
12617
- fontSize: "40px",
12618
- // https://github.com/vercel/satori/issues/498
12619
- textWrap: subtitle.includes(" ") ? "balance" : "initial",
12620
- textAlign: "center",
12621
- width: "100%"
12622
- },
12623
- children: subtitle
12624
- }
12625
- ) : null
12626
- ]
12627
- }
12628
- )
12629
- }
12630
- );
12631
- if (url.searchParams.get("html") === "true") {
12632
- return new Response(renderToStaticMarkup(element), {
12633
- headers: { "Content-Type": "text/html" }
12634
- });
12635
- }
12636
- try {
12637
- return new ImageResponse(element, {
12638
- width: 1200,
12639
- height: 630,
12640
- debug: url.searchParams.get("debug") === "true"
12641
- });
12642
- } catch (error) {
12643
- return new Response(getErrorMessage(error), { status: 500 });
12644
- }
12645
- }
12646
12762
  const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
12647
12763
  __proto__: null,
12648
12764
  loader: loader$2
@@ -12714,7 +12830,7 @@ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
12714
12830
  __proto__: null,
12715
12831
  loader
12716
12832
  }, Symbol.toStringTag, { value: "Module" }));
12717
- const serverManifest = { "entry": { "module": "/assets/entry.client-B0vV2fsa.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-bgHbi7rA.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-Doi37489.js", "/assets/index-90bzTYUX.js", "/assets/presence-DXXVJbaH.js", "/assets/seo-Bu3_n5my.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-Bd2gNcck.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/error-boundary-DxfVshQ5.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DHBLG7Ti.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-4E9_Sx3m.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.js", "/assets/progress-B_mReZVE.js", "/assets/index-90bzTYUX.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DaZNLfOL.js", "imports": ["/assets/index-Czg1ruVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-CFOo2dQj.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-Bu3_n5my.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-DCbWNWpZ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-Bdd3mpVx.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/user-C4QTtQw5.js", "/assets/index-D6ukHE4T.js", "/assets/diff-P5f7-8E4.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/progress-B_mReZVE.js", "/assets/seo-Bu3_n5my.js", "/assets/discord-COPE8EOZ.js", "/assets/index-Doi37489.js", "/assets/button-CyZl24U2.js", "/assets/use-event-source-ySol3hbz.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-P7xMAtl1.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-Bu3_n5my.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-CnLkZd_O.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/button-CyZl24U2.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-DIog7bBO.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/discord-COPE8EOZ.js"], "css": [] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-DP5ynR5u.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/seo-Bu3_n5my.js", "/assets/progress-B_mReZVE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-BXefr1BB.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-DxG854vQ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/use-event-source-ySol3hbz.js", "/assets/button-CyZl24U2.js", "/assets/loading-CNWJVymJ.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-DrY-qRGh.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-rEQoj43V.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/progress-B_mReZVE.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-PfwTHr6-.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/diff-P5f7-8E4.js", "/assets/nav-chevrons-BYKwyIgG.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-b9lcdh4n.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/button-CyZl24U2.js", "/assets/epic-video-CYnG2ziQ.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] } }, "url": "/assets/manifest-805aa13a.js", "version": "805aa13a" };
12833
+ const serverManifest = { "entry": { "module": "/assets/entry.client-B0vV2fsa.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-BtQ2oAS3.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-Doi37489.js", "/assets/index-90bzTYUX.js", "/assets/presence-DXXVJbaH.js", "/assets/seo-D1KDDD4X.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-Bd2gNcck.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/error-boundary-DxfVshQ5.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DHBLG7Ti.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-4E9_Sx3m.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.js", "/assets/progress-B_mReZVE.js", "/assets/index-90bzTYUX.js"], "css": [] }, "routes/_app+/_exercises+/_layout": { "id": "routes/_app+/_exercises+/_layout", "parentId": "routes/_app+/_layout", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DaZNLfOL.js", "imports": ["/assets/index-Czg1ruVn.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-C9e6qKP_.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-D1KDDD4X.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-DCbWNWpZ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js"], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-C0aWyWxQ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/user-C4QTtQw5.js", "/assets/index-D6ukHE4T.js", "/assets/diff-P5f7-8E4.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/progress-B_mReZVE.js", "/assets/seo-D1KDDD4X.js", "/assets/discord-COPE8EOZ.js", "/assets/index-Doi37489.js", "/assets/button-CyZl24U2.js", "/assets/use-event-source-ySol3hbz.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/_exercises+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/_exercises+/$exerciseNumber_.finished": { "id": "routes/_app+/_exercises+/$exerciseNumber_.finished", "parentId": "routes/_app+/_exercises+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-CBTYQuDI.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js", "/assets/seo-D1KDDD4X.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-CnLkZd_O.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/button-CyZl24U2.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/presence-DXXVJbaH.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-DIog7bBO.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/user-C4QTtQw5.js", "/assets/discord-COPE8EOZ.js"], "css": [] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-Dc-Db-Wh.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/nav-chevrons-BYKwyIgG.js", "/assets/mdx-CR7Me1v_.js", "/assets/seo-D1KDDD4X.js", "/assets/progress-B_mReZVE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-BXefr1BB.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-D6ukHE4T.js", "/assets/error-boundary-DxfVshQ5.js", "/assets/mdx-CR7Me1v_.js", "/assets/progress-B_mReZVE.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-DxG854vQ.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/use-event-source-ySol3hbz.js", "/assets/button-CyZl24U2.js", "/assets/loading-CNWJVymJ.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-DrY-qRGh.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/components-BMzmvxYw.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-rEQoj43V.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/progress-B_mReZVE.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-PfwTHr6-.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/tooltip-CfmIzAYi.js", "/assets/request-info-CUT0ULYN.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/epic-video-CYnG2ziQ.js", "/assets/progress-bar-DCrt7X4t.js", "/assets/index-4E9_Sx3m.js", "/assets/mdx-CR7Me1v_.js", "/assets/diff-P5f7-8E4.js", "/assets/nav-chevrons-BYKwyIgG.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/discord.callback": { "id": "routes/discord.callback", "parentId": "root", "path": "discord/callback", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord.callback-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/launch-editor": { "id": "routes/launch-editor", "parentId": "root", "path": "launch-editor", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/login-sse": { "id": "routes/login-sse", "parentId": "root", "path": "login-sse", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/onboarding": { "id": "routes/onboarding", "parentId": "root", "path": "onboarding", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-b9lcdh4n.js", "imports": ["/assets/index-Czg1ruVn.js", "/assets/clsx-B-dksMZM.js", "/assets/components-BMzmvxYw.js", "/assets/misc-CypjEQkt.js", "/assets/request-info-CUT0ULYN.js", "/assets/tooltip-CfmIzAYi.js", "/assets/client-hints-BE5mB4r0.js", "/assets/index-90bzTYUX.js", "/assets/loading-CNWJVymJ.js", "/assets/button-CyZl24U2.js", "/assets/epic-video-CYnG2ziQ.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-3e16f3ae.js", "version": "3e16f3ae" };
12718
12834
  const mode = "production";
12719
12835
  const assetsBuildDirectory = "build/client";
12720
12836
  const basename = "/";