@epic-web/workshop-app 5.1.2 → 5.3.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.
- package/build/client/assets/{_exerciseNumber-DarnXgbX.js → _exerciseNumber-Byb05FGg.js} +2 -2
- package/build/client/assets/_exerciseNumber-Byb05FGg.js.map +1 -0
- package/build/client/assets/_exerciseNumber_._stepNumber-BA2Xhzqs.js.map +1 -1
- package/build/client/assets/{_exerciseNumber_.finished-DEzaS_Ji.js → _exerciseNumber_.finished-DUqyxjV2.js} +2 -2
- package/build/client/assets/_exerciseNumber_.finished-DUqyxjV2.js.map +1 -0
- package/build/client/assets/{_layout-BTrPWpBz.js → _layout-BwDoP7Kv.js} +2 -2
- package/build/client/assets/_layout-BwDoP7Kv.js.map +1 -0
- package/build/client/assets/_layout-DvQmiuTm.js +6 -0
- package/build/client/assets/_layout-DvQmiuTm.js.map +1 -0
- package/build/client/assets/_layout-gyrNluke.js.map +1 -1
- package/build/client/assets/account-DbdZ0Vhg.js +2 -0
- package/build/client/assets/account-DbdZ0Vhg.js.map +1 -0
- package/build/client/assets/app-CM8yuYni.js.map +1 -1
- package/build/client/assets/{diff-jlCv3hv0.js → diff-Cmd66hnY.js} +2 -2
- package/build/client/assets/diff-Cmd66hnY.js.map +1 -0
- package/build/client/assets/{diff-assn_bSK.js → diff-CzHloS9Q.js} +2 -2
- package/build/client/assets/{diff-assn_bSK.js.map → diff-CzHloS9Q.js.map} +1 -1
- package/build/client/assets/{discord-CHsbqaqM.js → discord-DGeGrHNb.js} +2 -2
- package/build/client/assets/discord-DGeGrHNb.js.map +1 -0
- package/build/client/assets/discord-arMqZKbH.js +2 -0
- package/build/client/assets/discord-arMqZKbH.js.map +1 -0
- package/build/client/assets/{epic-video-GDpD7_Qt.js → epic-video-Dw5Vkxid.js} +2 -2
- package/build/client/assets/{epic-video-GDpD7_Qt.js.map → epic-video-Dw5Vkxid.js.map} +1 -1
- package/build/client/assets/{finished-DVV0zwmP.js → finished-DbOxW5dc.js} +2 -2
- package/build/client/assets/finished-DbOxW5dc.js.map +1 -0
- package/build/client/assets/{index-KgMLc41c.js → index-Bfqa72Xl.js} +2 -2
- package/build/client/assets/index-Bfqa72Xl.js.map +1 -0
- package/build/client/assets/{index-DJF1fiZI.js → index-D-V8b9oA.js} +2 -2
- package/build/client/assets/index-D-V8b9oA.js.map +1 -0
- package/build/client/assets/index-_J-F_Dnc.js.map +1 -1
- package/build/client/assets/login-pZYDEC_l.js.map +1 -1
- package/build/client/assets/{manifest-3338a6ab.js → manifest-0d355395.js} +1 -1
- package/build/client/assets/{mdx-hW1uYjc1.js → mdx-C01HZJEv.js} +2 -2
- package/build/client/assets/{mdx-hW1uYjc1.js.map → mdx-C01HZJEv.js.map} +1 -1
- package/build/client/assets/{onboarding-DCuSqnkZ.js → onboarding-Dk74xvlh.js} +2 -2
- package/build/client/assets/onboarding-Dk74xvlh.js.map +1 -0
- package/build/client/assets/pe-ChIwTk8v.js.map +1 -1
- package/build/client/assets/presence-DyppfK2V.js +28 -0
- package/build/client/assets/presence-DyppfK2V.js.map +1 -0
- package/build/client/assets/preview-CW_12I0i.js.map +1 -1
- package/build/client/assets/progress-DAB3nDa2.js.map +1 -1
- package/build/client/assets/{root-DojjHZlY.js → root-DCfiv1cO.js} +2 -2
- package/build/client/assets/{root-DojjHZlY.js.map → root-DCfiv1cO.js.map} +1 -1
- package/build/client/assets/{set-playground-DgnOJqFN.js → set-playground-S_rIwJAa.js} +2 -2
- package/build/client/assets/set-playground-S_rIwJAa.js.map +1 -0
- package/build/client/assets/{test-DJ7oeeeg.js → test-D_qZ9Wu9.js} +2 -2
- package/build/client/assets/test-D_qZ9Wu9.js.map +1 -0
- package/build/client/assets/{tests-Bw1rCopV.js → tests-Cmesc4Yz.js} +2 -2
- package/build/client/assets/tests-Cmesc4Yz.js.map +1 -0
- package/build/client/assets/user-AF5-S38o.js +2 -0
- package/build/client/assets/user-AF5-S38o.js.map +1 -0
- package/build/server/index.js +392 -256
- package/build/server/index.js.map +1 -1
- package/dist/server/index.js +0 -2
- package/package.json +4 -4
- package/build/client/assets/_exerciseNumber-DarnXgbX.js.map +0 -1
- package/build/client/assets/_exerciseNumber_.finished-DEzaS_Ji.js.map +0 -1
- package/build/client/assets/_layout-BTrPWpBz.js.map +0 -1
- package/build/client/assets/_layout-T2hZtl0D.js +0 -6
- package/build/client/assets/_layout-T2hZtl0D.js.map +0 -1
- package/build/client/assets/account-CPFwPYf1.js +0 -2
- package/build/client/assets/account-CPFwPYf1.js.map +0 -1
- package/build/client/assets/diff-jlCv3hv0.js.map +0 -1
- package/build/client/assets/discord-CHsbqaqM.js.map +0 -1
- package/build/client/assets/discord-DoeazikD.js +0 -2
- package/build/client/assets/discord-DoeazikD.js.map +0 -1
- package/build/client/assets/finished-DVV0zwmP.js.map +0 -1
- package/build/client/assets/index-DJF1fiZI.js.map +0 -1
- package/build/client/assets/index-KgMLc41c.js.map +0 -1
- package/build/client/assets/onboarding-DCuSqnkZ.js.map +0 -1
- package/build/client/assets/presence-CdyMdOKk.js +0 -28
- package/build/client/assets/presence-CdyMdOKk.js.map +0 -1
- package/build/client/assets/set-playground-DgnOJqFN.js.map +0 -1
- package/build/client/assets/test-DJ7oeeeg.js.map +0 -1
- package/build/client/assets/tests-Bw1rCopV.js.map +0 -1
- package/build/client/assets/user-BBryXlM_.js +0 -2
- package/build/client/assets/user-BBryXlM_.js.map +0 -1
package/build/server/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { PassThrough } from "stream";
|
|
3
|
-
import { createReadableStreamFromReadable,
|
|
4
|
-
import { RemixServer, Link, useRouteError, useParams, isRouteErrorResponse, useNavigation, useFetchers, useRouteLoaderData, useRevalidator, useLocation,
|
|
3
|
+
import { createReadableStreamFromReadable, unstable_data as unstable_data$1, createCookieSessionStorage, redirect as redirect$1 } from "@remix-run/node";
|
|
4
|
+
import { RemixServer, Link, useRouteError, useParams, isRouteErrorResponse, useNavigation, useFetchers, useRouteLoaderData, useRevalidator, useLocation, unstable_data, redirect, useFetcher, useLoaderData, Outlet, Meta, Links, ScrollRestoration, Scripts, NavLink, Form, Await, useSearchParams, useSubmit, useNavigate } from "@remix-run/react";
|
|
5
5
|
import { isbot } from "isbot";
|
|
6
6
|
import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { makeSingletonCache, cachified, fsCache, deleteCache, compiledCodeCache, diffFilesCache, diffCodeCache, shouldForceFresh, getAllFileCacheEntries, ogCache } from "@epic-web/workshop-utils/cache.server";
|
|
9
|
-
import { getPreferences, getAuthInfo, readOnboardingData, getDiscordMember,
|
|
9
|
+
import { getPreferences, getAuthInfo, readOnboardingData, getDiscordMember, requireAuthInfo, DiscordMemberSchema, setDiscordMember, deleteDiscordInfo, deleteDb, setPresencePreferences, PlayerPreferencesSchema, setPlayerPreferences, setAuthInfo, markOnboardingVideoWatched } from "@epic-web/workshop-utils/db.server";
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { getWorkshopInstructions, getWorkshopFinished, getExercises, getApps, getPlaygroundAppName, extractNumbersAndTypeFromAppNameOrPath, getAppFromFile, getAppByName, isProblemApp, isPlaygroundApp, isExerciseStepApp, getExercise, isSolutionApp, isExampleApp, getRelativePath as getRelativePath$1, workshopRoot, modifiedTimes, getForceFreshForDir, setPlayground, requireExerciseApp, requireExercise, getExerciseApp, getAppDisplayName, getNextExerciseApp, getPrevExerciseApp, getAppPageRoute } from "@epic-web/workshop-utils/apps.server";
|
|
12
12
|
import { getWorkshopConfig } from "@epic-web/workshop-utils/config.server";
|
|
@@ -79,7 +79,8 @@ import inspector from "node:inspector";
|
|
|
79
79
|
import { Resvg } from "@resvg/resvg-js";
|
|
80
80
|
import satori from "satori";
|
|
81
81
|
import { generateRobotsTxt, generateSitemap } from "@nasa-gcn/remix-seo";
|
|
82
|
-
const
|
|
82
|
+
const streamTimeout = 15e3;
|
|
83
|
+
const ABORT_DELAY = streamTimeout + 1e3;
|
|
83
84
|
function handleRequest(request, responseStatusCode, responseHeaders, remixContext) {
|
|
84
85
|
const callbackName = isbot(request.headers.get("user-agent")) ? "onAllReady" : "onShellReady";
|
|
85
86
|
return new Promise((resolve, reject) => {
|
|
@@ -112,13 +113,18 @@ function handleRequest(request, responseStatusCode, responseHeaders, remixContex
|
|
|
112
113
|
}
|
|
113
114
|
const entryServer = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
114
115
|
__proto__: null,
|
|
115
|
-
default: handleRequest
|
|
116
|
+
default: handleRequest,
|
|
117
|
+
streamTimeout
|
|
116
118
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
117
119
|
const partykitRoom = "epic-web-presence";
|
|
118
120
|
const partykitBaseUrl = `https://epic-web-presence.kentcdodds.partykit.dev/parties/main/${partykitRoom}`;
|
|
119
121
|
const UserSchema = z.object({
|
|
120
122
|
id: z.string(),
|
|
123
|
+
hasAccess: z.boolean().nullable().optional(),
|
|
124
|
+
// TODO: remove the avatarUrl field once people have updated their workshops
|
|
121
125
|
avatarUrl: z.string().nullable().optional(),
|
|
126
|
+
imageUrlSmall: z.string().nullable().optional(),
|
|
127
|
+
imageUrlLarge: z.string().nullable().optional(),
|
|
122
128
|
name: z.string().nullable().optional(),
|
|
123
129
|
location: z.object({
|
|
124
130
|
workshopTitle: z.string().nullable().optional(),
|
|
@@ -777,12 +783,12 @@ function ensureProgressiveEnhancement(formData, responseInit) {
|
|
|
777
783
|
throw redirect(safeRedirect(redirectTo), responseInit == null ? void 0 : responseInit());
|
|
778
784
|
}
|
|
779
785
|
}
|
|
780
|
-
function
|
|
786
|
+
function dataWithPE(formData, ...args) {
|
|
781
787
|
ensureProgressiveEnhancement(formData, () => ({
|
|
782
788
|
statusText: JSON.stringify(args[0]),
|
|
783
789
|
...typeof args[1] === "number" ? { status: args[1] } : args[1]
|
|
784
790
|
}));
|
|
785
|
-
return
|
|
791
|
+
return unstable_data(...args);
|
|
786
792
|
}
|
|
787
793
|
const cookieName$1 = "EpicShop_theme";
|
|
788
794
|
function getTheme(request) {
|
|
@@ -807,7 +813,7 @@ async function action$b({ request }) {
|
|
|
807
813
|
schema: ThemeFormSchema
|
|
808
814
|
});
|
|
809
815
|
if (submission.status !== "success") {
|
|
810
|
-
return
|
|
816
|
+
return unstable_data$1(submission.reply(), {
|
|
811
817
|
// You can also use the status to determine the HTTP status code
|
|
812
818
|
status: submission.status === "error" ? 400 : 200
|
|
813
819
|
});
|
|
@@ -816,7 +822,7 @@ async function action$b({ request }) {
|
|
|
816
822
|
const responseInit = {
|
|
817
823
|
headers: { "set-cookie": setTheme(theme) }
|
|
818
824
|
};
|
|
819
|
-
return
|
|
825
|
+
return dataWithPE(formData, submission.reply(), responseInit);
|
|
820
826
|
}
|
|
821
827
|
function ThemeSwitch() {
|
|
822
828
|
const requestInfo = useRequestInfo();
|
|
@@ -1298,6 +1304,95 @@ async function userHasAccessToWorkshop({
|
|
|
1298
1304
|
}
|
|
1299
1305
|
});
|
|
1300
1306
|
}
|
|
1307
|
+
const UserInfoSchema = z.object({
|
|
1308
|
+
id: z.string(),
|
|
1309
|
+
name: z.string(),
|
|
1310
|
+
email: z.string().email(),
|
|
1311
|
+
image: z.string().nullable(),
|
|
1312
|
+
discordProfile: z.object({
|
|
1313
|
+
avatar: z.string().nullable(),
|
|
1314
|
+
nick: z.string(),
|
|
1315
|
+
user: z.object({
|
|
1316
|
+
id: z.string(),
|
|
1317
|
+
username: z.string(),
|
|
1318
|
+
avatar: z.string(),
|
|
1319
|
+
discriminator: z.string(),
|
|
1320
|
+
global_name: z.string()
|
|
1321
|
+
})
|
|
1322
|
+
})
|
|
1323
|
+
}).transform((data) => {
|
|
1324
|
+
var _a, _b;
|
|
1325
|
+
return {
|
|
1326
|
+
...data,
|
|
1327
|
+
imageUrlSmall: resizeImageUrl(data.image, { size: 64 }) ?? resolveDiscordAvatar((_a = data.discordProfile) == null ? void 0 : _a.user, {
|
|
1328
|
+
size: 64
|
|
1329
|
+
}) ?? resolveGravatarUrl(data.email, { size: 64 }),
|
|
1330
|
+
imageUrlLarge: resizeImageUrl(data.image, { size: 512 }) ?? resolveDiscordAvatar((_b = data.discordProfile) == null ? void 0 : _b.user, {
|
|
1331
|
+
size: 512
|
|
1332
|
+
}) ?? resolveGravatarUrl(data.email, { size: 512 })
|
|
1333
|
+
};
|
|
1334
|
+
});
|
|
1335
|
+
function resizeImageUrl(url, { size }) {
|
|
1336
|
+
if (!url) return null;
|
|
1337
|
+
const urlObj = new URL(url);
|
|
1338
|
+
urlObj.searchParams.set("size", size.toString());
|
|
1339
|
+
return urlObj.toString();
|
|
1340
|
+
}
|
|
1341
|
+
function resolveGravatarUrl(email, { size }) {
|
|
1342
|
+
if (!email) return null;
|
|
1343
|
+
const hash = md5(email.toLowerCase());
|
|
1344
|
+
const gravatarOptions = new URLSearchParams({
|
|
1345
|
+
size: size.toString(),
|
|
1346
|
+
default: "identicon"
|
|
1347
|
+
});
|
|
1348
|
+
return `https://www.gravatar.com/avatar/${hash}?${gravatarOptions.toString()}`;
|
|
1349
|
+
}
|
|
1350
|
+
function resolveDiscordAvatar(user, { size }) {
|
|
1351
|
+
if (!user) return null;
|
|
1352
|
+
const { avatar, id: userId } = user;
|
|
1353
|
+
if (!avatar) return null;
|
|
1354
|
+
const isGif = avatar.startsWith("a_");
|
|
1355
|
+
const url = new URL(
|
|
1356
|
+
`/avatars/${userId}/${avatar}.${isGif ? "gif" : "png"}`,
|
|
1357
|
+
"https://cdn.discordapp.com"
|
|
1358
|
+
);
|
|
1359
|
+
url.searchParams.set("size", size.toString());
|
|
1360
|
+
return url.toString();
|
|
1361
|
+
}
|
|
1362
|
+
async function getUserInfo({
|
|
1363
|
+
timings,
|
|
1364
|
+
request,
|
|
1365
|
+
forceFresh
|
|
1366
|
+
} = {}) {
|
|
1367
|
+
const authInfo = await getAuthInfo();
|
|
1368
|
+
if (!authInfo) return null;
|
|
1369
|
+
const { tokenSet } = authInfo;
|
|
1370
|
+
const {
|
|
1371
|
+
product: { host }
|
|
1372
|
+
} = getWorkshopConfig();
|
|
1373
|
+
const accessToken = tokenSet.access_token;
|
|
1374
|
+
const url = `https://${host}/oauth/userinfo`;
|
|
1375
|
+
return cachified({
|
|
1376
|
+
key: `${url}:${md5(accessToken)}`,
|
|
1377
|
+
cache: fsCache,
|
|
1378
|
+
request,
|
|
1379
|
+
forceFresh,
|
|
1380
|
+
timings,
|
|
1381
|
+
ttl: 1e3 * 60 * 1,
|
|
1382
|
+
swr: 1e3 * 60 * 60 * 24 * 365,
|
|
1383
|
+
checkValue: UserInfoSchema,
|
|
1384
|
+
async getFreshValue() {
|
|
1385
|
+
const response = await fetch(url, {
|
|
1386
|
+
headers: { authorization: `Bearer ${accessToken}` }
|
|
1387
|
+
});
|
|
1388
|
+
if (!response.ok) {
|
|
1389
|
+
throw new Error(`Failed to fetch user info: ${response.statusText}`);
|
|
1390
|
+
}
|
|
1391
|
+
const data = await response.json();
|
|
1392
|
+
return UserInfoSchema.parse(data);
|
|
1393
|
+
}
|
|
1394
|
+
});
|
|
1395
|
+
}
|
|
1301
1396
|
const PresenceContext = createContext(null);
|
|
1302
1397
|
function usePresencePreferences() {
|
|
1303
1398
|
var _a;
|
|
@@ -1315,6 +1410,7 @@ const ExerciseAppParamsSchema = z.object({
|
|
|
1315
1410
|
});
|
|
1316
1411
|
function usePresenceSocket(user) {
|
|
1317
1412
|
const workshopTitle = useOptionalWorkshopTitle();
|
|
1413
|
+
const { userHasAccess = false } = useRouteLoaderData("root") ?? {};
|
|
1318
1414
|
const requestInfo = useRequestInfo();
|
|
1319
1415
|
const rawParams = useParams();
|
|
1320
1416
|
const prefs = usePresencePreferences();
|
|
@@ -1367,7 +1463,9 @@ function usePresenceSocket(user) {
|
|
|
1367
1463
|
payload: {
|
|
1368
1464
|
id: user.id,
|
|
1369
1465
|
name: user.name,
|
|
1370
|
-
|
|
1466
|
+
hasAccess: userHasAccess,
|
|
1467
|
+
imageUrlSmall: user.imageUrlSmall,
|
|
1468
|
+
imageUrlLarge: user.imageUrlLarge,
|
|
1371
1469
|
location
|
|
1372
1470
|
}
|
|
1373
1471
|
};
|
|
@@ -1383,7 +1481,10 @@ function scoreUsers(location, users) {
|
|
|
1383
1481
|
const scoredUsers = users.map((user) => {
|
|
1384
1482
|
var _a, _b, _c, _d;
|
|
1385
1483
|
let score = 0;
|
|
1386
|
-
const available =
|
|
1484
|
+
const available = 5;
|
|
1485
|
+
if (user.hasAccess) {
|
|
1486
|
+
score += 1;
|
|
1487
|
+
}
|
|
1387
1488
|
if ((location == null ? void 0 : location.workshopTitle) === ((_a = user.location) == null ? void 0 : _a.workshopTitle)) {
|
|
1388
1489
|
score += 1;
|
|
1389
1490
|
if (((_b = location == null ? void 0 : location.exercise) == null ? void 0 : _b.exerciseNumber) && location.exercise.exerciseNumber === ((_d = (_c = user.location) == null ? void 0 : _c.exercise) == null ? void 0 : _d.exerciseNumber)) {
|
|
@@ -1512,13 +1613,13 @@ const links = () => {
|
|
|
1512
1613
|
{ rel: "icon", type: "image/svg+xml", href: "/favicon.svg" }
|
|
1513
1614
|
];
|
|
1514
1615
|
};
|
|
1515
|
-
const meta$5 = ({ data }) => {
|
|
1516
|
-
if (!
|
|
1616
|
+
const meta$5 = ({ data: data2 }) => {
|
|
1617
|
+
if (!data2) return [];
|
|
1517
1618
|
return getSeoMetaTags({
|
|
1518
|
-
instructor:
|
|
1519
|
-
title:
|
|
1520
|
-
description:
|
|
1521
|
-
requestInfo:
|
|
1619
|
+
instructor: data2.instructor,
|
|
1620
|
+
title: data2.workshopTitle,
|
|
1621
|
+
description: data2.workshopSubtitle,
|
|
1622
|
+
requestInfo: data2.requestInfo
|
|
1522
1623
|
});
|
|
1523
1624
|
};
|
|
1524
1625
|
async function loader$y({ request }) {
|
|
@@ -1555,7 +1656,7 @@ async function loader$y({ request }) {
|
|
|
1555
1656
|
request,
|
|
1556
1657
|
timings
|
|
1557
1658
|
});
|
|
1558
|
-
return
|
|
1659
|
+
return unstable_data$1(
|
|
1559
1660
|
{
|
|
1560
1661
|
...asyncStuff,
|
|
1561
1662
|
workshopConfig,
|
|
@@ -1628,7 +1729,7 @@ function Document({
|
|
|
1628
1729
|
] });
|
|
1629
1730
|
}
|
|
1630
1731
|
function App$1() {
|
|
1631
|
-
const
|
|
1732
|
+
const data2 = useLoaderData();
|
|
1632
1733
|
const navigation = useNavigation();
|
|
1633
1734
|
const showSpinner = useSpinDelay(navigation.state !== "idle", {
|
|
1634
1735
|
delay: 400,
|
|
@@ -1645,11 +1746,11 @@ function App$1() {
|
|
|
1645
1746
|
{ "cursor-progress": showSpinner },
|
|
1646
1747
|
altDown ? "alt-down" : null
|
|
1647
1748
|
),
|
|
1648
|
-
env:
|
|
1749
|
+
env: data2.ENV,
|
|
1649
1750
|
children: [
|
|
1650
1751
|
/* @__PURE__ */ jsx(Outlet, {}),
|
|
1651
|
-
/* @__PURE__ */ jsx(Confetti, { id:
|
|
1652
|
-
/* @__PURE__ */ jsx(EpicToaster, { toast:
|
|
1752
|
+
/* @__PURE__ */ jsx(Confetti, { id: data2.confettiId }),
|
|
1753
|
+
/* @__PURE__ */ jsx(EpicToaster, { toast: data2.toast }),
|
|
1653
1754
|
/* @__PURE__ */ jsx(EpicProgress, {})
|
|
1654
1755
|
]
|
|
1655
1756
|
}
|
|
@@ -1951,8 +2052,13 @@ function useUser() {
|
|
|
1951
2052
|
return user;
|
|
1952
2053
|
}
|
|
1953
2054
|
function useOptionalDiscordMember() {
|
|
2055
|
+
var _a;
|
|
1954
2056
|
const data = useRouteLoaderData("root");
|
|
1955
|
-
return data == null ? void 0 : data.discordMember
|
|
2057
|
+
return (data == null ? void 0 : data.discordMember) ?? (((_a = data == null ? void 0 : data.user) == null ? void 0 : _a.discordProfile) ? {
|
|
2058
|
+
id: data.user.discordProfile.user.id,
|
|
2059
|
+
displayName: data.user.discordProfile.user.global_name,
|
|
2060
|
+
avatarUrl: data.user.imageUrlLarge
|
|
2061
|
+
} : null);
|
|
1956
2062
|
}
|
|
1957
2063
|
function useUserHasAccess() {
|
|
1958
2064
|
const data = useRouteLoaderData("root");
|
|
@@ -2114,7 +2220,7 @@ async function action$a({ request }) {
|
|
|
2114
2220
|
return otherAreFinished ? `You completed exercise ${exerciseNumber}!` : null;
|
|
2115
2221
|
}
|
|
2116
2222
|
const announcement = getCompletionAnnouncement();
|
|
2117
|
-
return
|
|
2223
|
+
return dataWithPE(formData, result, {
|
|
2118
2224
|
headers: combineHeaders(
|
|
2119
2225
|
announcement ? createConfettiHeaders() : null,
|
|
2120
2226
|
announcement ? await createToastHeaders({
|
|
@@ -2268,7 +2374,7 @@ async function loader$w({ request }) {
|
|
|
2268
2374
|
(_a = extractNumbersAndTypeFromAppNameOrPath(playgroundAppName ?? "")) == null ? void 0 : _a.exerciseNumber
|
|
2269
2375
|
)
|
|
2270
2376
|
};
|
|
2271
|
-
const result =
|
|
2377
|
+
const result = unstable_data$1(
|
|
2272
2378
|
{
|
|
2273
2379
|
workshopTitle,
|
|
2274
2380
|
exercises: exercises.map((e) => ({
|
|
@@ -2362,8 +2468,17 @@ function FacePile({ isMenuOpened }) {
|
|
|
2362
2468
|
var _a, _b;
|
|
2363
2469
|
const scoreClassNames = getScoreClassNames(score);
|
|
2364
2470
|
const locationLabel = getLocationLabel(user.location);
|
|
2471
|
+
const imageUrl = user.imageUrlSmall || user.avatarUrl;
|
|
2472
|
+
const hasAccess = user.hasAccess;
|
|
2473
|
+
const local = (_b = (_a = user.location) == null ? void 0 : _a.origin) == null ? void 0 : _b.includes("localhost");
|
|
2474
|
+
let doingLabel;
|
|
2475
|
+
if (hasAccess) {
|
|
2476
|
+
doingLabel = local ? "working" : "referencing";
|
|
2477
|
+
} else {
|
|
2478
|
+
doingLabel = local ? "previewing" : "reviewing";
|
|
2479
|
+
}
|
|
2365
2480
|
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
2366
|
-
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children:
|
|
2481
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: imageUrl ? /* @__PURE__ */ jsx(
|
|
2367
2482
|
"img",
|
|
2368
2483
|
{
|
|
2369
2484
|
tabIndex: 0,
|
|
@@ -2372,7 +2487,7 @@ function FacePile({ isMenuOpened }) {
|
|
|
2372
2487
|
"h-8 w-8 rounded-full border object-cover",
|
|
2373
2488
|
scoreClassNames
|
|
2374
2489
|
),
|
|
2375
|
-
src:
|
|
2490
|
+
src: imageUrl
|
|
2376
2491
|
}
|
|
2377
2492
|
) : /* @__PURE__ */ jsx(
|
|
2378
2493
|
"div",
|
|
@@ -2390,7 +2505,7 @@ function FacePile({ isMenuOpened }) {
|
|
|
2390
2505
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
2391
2506
|
user.name || `${displayNameShort} Dev`,
|
|
2392
2507
|
" ",
|
|
2393
|
-
locationLabel ? ` is ${
|
|
2508
|
+
locationLabel ? ` is ${doingLabel} ${score === 1 && (loggedInUser == null ? void 0 : loggedInUser.id) !== user.id ? "with you" : ""} on` : null
|
|
2394
2509
|
] }),
|
|
2395
2510
|
(locationLabel == null ? void 0 : locationLabel.line1) ? /* @__PURE__ */ jsx("span", { children: locationLabel.line1 }) : null,
|
|
2396
2511
|
(locationLabel == null ? void 0 : locationLabel.line2) ? /* @__PURE__ */ jsx("span", { children: locationLabel.line2 }) : null
|
|
@@ -2653,7 +2768,7 @@ function MobileNavigation({
|
|
|
2653
2768
|
isMenuOpened,
|
|
2654
2769
|
onMenuOpenChange: setMenuOpened
|
|
2655
2770
|
}) {
|
|
2656
|
-
const
|
|
2771
|
+
const data2 = useLoaderData();
|
|
2657
2772
|
const user = useOptionalUser();
|
|
2658
2773
|
const nextExerciseRoute = useNextExerciseRoute();
|
|
2659
2774
|
const params = useParams();
|
|
@@ -2682,7 +2797,7 @@ function MobileNavigation({
|
|
|
2682
2797
|
/* @__PURE__ */ jsx(
|
|
2683
2798
|
NavToggle,
|
|
2684
2799
|
{
|
|
2685
|
-
title:
|
|
2800
|
+
title: data2.workshopTitle,
|
|
2686
2801
|
isMenuOpened,
|
|
2687
2802
|
setMenuOpened
|
|
2688
2803
|
}
|
|
@@ -2715,9 +2830,9 @@ function MobileNavigation({
|
|
|
2715
2830
|
children: "Home"
|
|
2716
2831
|
}
|
|
2717
2832
|
) }),
|
|
2718
|
-
|
|
2833
|
+
data2.exercises.map(({ exerciseNumber, title, steps }) => {
|
|
2719
2834
|
const isActive = Number(params.exerciseNumber) === exerciseNumber;
|
|
2720
|
-
const showPlayground = !isActive &&
|
|
2835
|
+
const showPlayground = !isActive && data2.playground.exerciseNumber === exerciseNumber;
|
|
2721
2836
|
const exerciseNum = exerciseNumber.toString().padStart(2, "0");
|
|
2722
2837
|
return /* @__PURE__ */ jsxs(
|
|
2723
2838
|
NavigationExerciseListItem,
|
|
@@ -2773,7 +2888,7 @@ function MobileNavigation({
|
|
|
2773
2888
|
steps.filter(Boolean).map(({ name, stepNumber, title: title2 }) => {
|
|
2774
2889
|
const isActive2 = Number(params.stepNumber) === stepNumber;
|
|
2775
2890
|
const step = stepNumber.toString().padStart(2, "0");
|
|
2776
|
-
const isPlayground = name ===
|
|
2891
|
+
const isPlayground = name === data2.playground.appName;
|
|
2777
2892
|
return /* @__PURE__ */ jsx(
|
|
2778
2893
|
NavigationExerciseStepListItem,
|
|
2779
2894
|
{
|
|
@@ -2873,11 +2988,11 @@ function MobileNavigation({
|
|
|
2873
2988
|
),
|
|
2874
2989
|
to: "/account",
|
|
2875
2990
|
children: [
|
|
2876
|
-
user.
|
|
2991
|
+
user.imageUrlSmall ? /* @__PURE__ */ jsx(
|
|
2877
2992
|
"img",
|
|
2878
2993
|
{
|
|
2879
2994
|
alt: user.name ?? user.email,
|
|
2880
|
-
src: user.
|
|
2995
|
+
src: user.imageUrlSmall,
|
|
2881
2996
|
className: "h-full rounded-full"
|
|
2882
2997
|
}
|
|
2883
2998
|
) : /* @__PURE__ */ jsx(Icon, { name: "User", className: "flex-shrink-0", size: "lg" }),
|
|
@@ -2944,12 +3059,12 @@ function Navigation({
|
|
|
2944
3059
|
isMenuOpened,
|
|
2945
3060
|
onMenuOpenChange: setMenuOpened
|
|
2946
3061
|
}) {
|
|
2947
|
-
const
|
|
3062
|
+
const data2 = useLoaderData();
|
|
2948
3063
|
const user = useOptionalUser();
|
|
2949
3064
|
const nextExerciseRoute = useNextExerciseRoute();
|
|
2950
3065
|
const params = useParams();
|
|
2951
3066
|
const { users } = usePresence();
|
|
2952
|
-
const exercise =
|
|
3067
|
+
const exercise = data2.exercises.find(
|
|
2953
3068
|
(e) => e.exerciseNumber === Number(params.exerciseNumber)
|
|
2954
3069
|
);
|
|
2955
3070
|
const app = params.type === "solution" ? exercise == null ? void 0 : exercise.solutions.find(
|
|
@@ -2986,7 +3101,7 @@ function Navigation({
|
|
|
2986
3101
|
/* @__PURE__ */ jsx(
|
|
2987
3102
|
NavToggle,
|
|
2988
3103
|
{
|
|
2989
|
-
title:
|
|
3104
|
+
title: data2.workshopTitle,
|
|
2990
3105
|
menuControls,
|
|
2991
3106
|
isMenuOpened,
|
|
2992
3107
|
setMenuOpened
|
|
@@ -3021,9 +3136,9 @@ function Navigation({
|
|
|
3021
3136
|
children: "Home"
|
|
3022
3137
|
}
|
|
3023
3138
|
) }),
|
|
3024
|
-
|
|
3139
|
+
data2.exercises.map(({ exerciseNumber, title, steps }) => {
|
|
3025
3140
|
const isActive = Number(params.exerciseNumber) === exerciseNumber;
|
|
3026
|
-
const showPlayground = !isActive &&
|
|
3141
|
+
const showPlayground = !isActive && data2.playground.exerciseNumber === exerciseNumber;
|
|
3027
3142
|
const exerciseNum = exerciseNumber.toString().padStart(2, "0");
|
|
3028
3143
|
return /* @__PURE__ */ jsxs(
|
|
3029
3144
|
NavigationExerciseListItem,
|
|
@@ -3079,7 +3194,7 @@ function Navigation({
|
|
|
3079
3194
|
steps.filter(Boolean).map(({ name, stepNumber, title: title2 }) => {
|
|
3080
3195
|
const isActive2 = Number(params.stepNumber) === stepNumber;
|
|
3081
3196
|
const step = stepNumber.toString().padStart(2, "0");
|
|
3082
|
-
const isPlayground = name ===
|
|
3197
|
+
const isPlayground = name === data2.playground.appName;
|
|
3083
3198
|
return /* @__PURE__ */ jsx(
|
|
3084
3199
|
NavigationExerciseStepListItem,
|
|
3085
3200
|
{
|
|
@@ -3180,11 +3295,11 @@ function Navigation({
|
|
|
3180
3295
|
className: "flex h-14 w-full flex-shrink-0 items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline",
|
|
3181
3296
|
to: "/account",
|
|
3182
3297
|
children: [
|
|
3183
|
-
user.
|
|
3298
|
+
user.imageUrlSmall ? /* @__PURE__ */ jsx(
|
|
3184
3299
|
"img",
|
|
3185
3300
|
{
|
|
3186
3301
|
alt: user.name ?? user.email,
|
|
3187
|
-
src: user.
|
|
3302
|
+
src: user.imageUrlSmall,
|
|
3188
3303
|
className: "h-full rounded-full"
|
|
3189
3304
|
}
|
|
3190
3305
|
) : /* @__PURE__ */ jsx(Icon, { name: "User", className: "flex-shrink-0", size: "lg" }),
|
|
@@ -3487,7 +3602,7 @@ const handle$7 = {
|
|
|
3487
3602
|
async function loader$u({ request }) {
|
|
3488
3603
|
ensureUndeployed();
|
|
3489
3604
|
await requireAuthInfo({ request });
|
|
3490
|
-
return
|
|
3605
|
+
return { discordAuthUrl: getDiscordAuthURL() };
|
|
3491
3606
|
}
|
|
3492
3607
|
async function action$9({ request }) {
|
|
3493
3608
|
ensureUndeployed();
|
|
@@ -3526,23 +3641,31 @@ function Account() {
|
|
|
3526
3641
|
const discordMember = useOptionalDiscordMember();
|
|
3527
3642
|
const presencePreferences = usePresencePreferences();
|
|
3528
3643
|
return /* @__PURE__ */ jsxs("main", { className: "container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4", children: [
|
|
3529
|
-
/* @__PURE__ */ jsx(
|
|
3644
|
+
user.imageUrlLarge ? /* @__PURE__ */ jsx(
|
|
3530
3645
|
"img",
|
|
3531
3646
|
{
|
|
3532
3647
|
className: "h-36 w-36 rounded-full",
|
|
3533
3648
|
alt: (discordMember == null ? void 0 : discordMember.displayName) ?? user.name ?? user.email,
|
|
3534
|
-
src: user.
|
|
3649
|
+
src: user.imageUrlLarge
|
|
3535
3650
|
}
|
|
3536
|
-
),
|
|
3651
|
+
) : /* @__PURE__ */ jsx(Icon, { name: "User", className: "flex-shrink-0", size: "lg" }),
|
|
3537
3652
|
/* @__PURE__ */ jsx("h1", { className: "mb-1 text-2xl", children: "Your Account" }),
|
|
3538
3653
|
/* @__PURE__ */ jsx("p", { className: "text-center text-gray-700 dark:text-gray-300", children: user.name ? `Hi ${(discordMember == null ? void 0 : discordMember.displayName) ?? user.name}, your device is logged in with ${user.email}.` : `Your device is logged in with ${user.email}.` }),
|
|
3539
3654
|
discordMember ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3540
3655
|
/* @__PURE__ */ jsxs("p", { className: "text-center text-gray-700 dark:text-gray-300", children: [
|
|
3541
|
-
"And you are connected to discord as
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3656
|
+
"And you are connected to discord as",
|
|
3657
|
+
" ",
|
|
3658
|
+
/* @__PURE__ */ jsx(
|
|
3659
|
+
"a",
|
|
3660
|
+
{
|
|
3661
|
+
href: `https://discord.com/users/${discordMember.id}`,
|
|
3662
|
+
target: "_blank",
|
|
3663
|
+
rel: "noopener noreferrer",
|
|
3664
|
+
className: "underline",
|
|
3665
|
+
children: discordMember.displayName
|
|
3666
|
+
}
|
|
3667
|
+
),
|
|
3668
|
+
"."
|
|
3546
3669
|
] }),
|
|
3547
3670
|
/* @__PURE__ */ jsxs("div", { className: "flex justify-center gap-2", children: [
|
|
3548
3671
|
/* @__PURE__ */ jsx(disconnectFetcher.Form, { method: "post", children: /* @__PURE__ */ jsx(Button, { varient: "mono", name: "intent", value: "disconnect-discord", children: "Disconnect Discord" }) }),
|
|
@@ -4181,7 +4304,7 @@ const handle$6 = {
|
|
|
4181
4304
|
getSitemapEntries: () => null
|
|
4182
4305
|
};
|
|
4183
4306
|
async function loader$o() {
|
|
4184
|
-
return
|
|
4307
|
+
return { discordAuthUrl: getDiscordAuthURL() };
|
|
4185
4308
|
}
|
|
4186
4309
|
function useDiscordCTALink({
|
|
4187
4310
|
discordAuthUrl
|
|
@@ -4315,13 +4438,13 @@ const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
4315
4438
|
const PlaybackTimeSchema = z.object({
|
|
4316
4439
|
time: z.number(),
|
|
4317
4440
|
expiresAt: z.string()
|
|
4318
|
-
}).transform((
|
|
4319
|
-
return { time: Number(
|
|
4441
|
+
}).transform((data2) => {
|
|
4442
|
+
return { time: Number(data2.time), expiresAt: new Date(data2.expiresAt) };
|
|
4320
4443
|
});
|
|
4321
4444
|
function usePlayerPreferences() {
|
|
4322
4445
|
var _a;
|
|
4323
|
-
const
|
|
4324
|
-
return ((_a =
|
|
4446
|
+
const data2 = useRouteLoaderData("root");
|
|
4447
|
+
return ((_a = data2 == null ? void 0 : data2.preferences) == null ? void 0 : _a.player) ?? null;
|
|
4325
4448
|
}
|
|
4326
4449
|
const ignoredInputs = [
|
|
4327
4450
|
"INPUT",
|
|
@@ -4345,12 +4468,12 @@ function shouldIgnoreHotkey(el) {
|
|
|
4345
4468
|
async function action$7({ request }) {
|
|
4346
4469
|
const result = PlayerPreferencesSchema.safeParse(await request.json());
|
|
4347
4470
|
if (!result.success) {
|
|
4348
|
-
return
|
|
4471
|
+
return unstable_data$1({ status: "error", error: result.error.flatten() }, {
|
|
4349
4472
|
status: 400
|
|
4350
4473
|
});
|
|
4351
4474
|
}
|
|
4352
4475
|
await setPlayerPreferences(result.data);
|
|
4353
|
-
return
|
|
4476
|
+
return { status: "success" };
|
|
4354
4477
|
}
|
|
4355
4478
|
function useLatest(value) {
|
|
4356
4479
|
const ref = React.useRef(value);
|
|
@@ -5443,13 +5566,13 @@ async function action$6({ request }) {
|
|
|
5443
5566
|
results.push(await launchEditor(file.filepath, file.line, file.column));
|
|
5444
5567
|
}
|
|
5445
5568
|
if (results.every((r) => r.status === "success")) {
|
|
5446
|
-
return
|
|
5569
|
+
return dataWithPE(formData, { status: "success" });
|
|
5447
5570
|
} else {
|
|
5448
5571
|
const messages = results.map(
|
|
5449
5572
|
(r, index, array) => r.status === "error" ? array.length > 1 ? `${index}. ${r.message}` : r.message : null
|
|
5450
5573
|
).filter(Boolean).join("\n");
|
|
5451
5574
|
console.error("Launch editor error:", messages);
|
|
5452
|
-
return
|
|
5575
|
+
return dataWithPE(
|
|
5453
5576
|
formData,
|
|
5454
5577
|
{ status: "error", message: messages },
|
|
5455
5578
|
{
|
|
@@ -5791,17 +5914,17 @@ function Mdx({
|
|
|
5791
5914
|
return /* @__PURE__ */ jsx(Component, { components });
|
|
5792
5915
|
}
|
|
5793
5916
|
const meta$4 = ({
|
|
5794
|
-
data,
|
|
5917
|
+
data: data2,
|
|
5795
5918
|
matches
|
|
5796
5919
|
}) => {
|
|
5797
5920
|
var _a;
|
|
5798
|
-
const number =
|
|
5921
|
+
const number = data2 == null ? void 0 : data2.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
5799
5922
|
const rootData = (_a = matches.find((m) => m.id === "root")) == null ? void 0 : _a.data;
|
|
5800
|
-
if (!
|
|
5923
|
+
if (!data2 || !rootData) return [{ title: "🦉 | Error" }];
|
|
5801
5924
|
return getSeoMetaTags({
|
|
5802
|
-
title: `📝 | ${number}. ${
|
|
5803
|
-
description: `Introduction for ${number}. ${
|
|
5804
|
-
ogTitle:
|
|
5925
|
+
title: `📝 | ${number}. ${data2.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
5926
|
+
description: `Introduction for ${number}. ${data2.exercise.title}`,
|
|
5927
|
+
ogTitle: data2.exercise.title,
|
|
5805
5928
|
ogDescription: `Introduction for exercise ${Number(number)}`,
|
|
5806
5929
|
instructor: rootData.instructor,
|
|
5807
5930
|
requestInfo: rootData.requestInfo
|
|
@@ -5830,7 +5953,7 @@ async function loader$n({ request, params }) {
|
|
|
5830
5953
|
);
|
|
5831
5954
|
const firstStep = exercise.steps.find(Boolean);
|
|
5832
5955
|
const articleId = `workshop-${slugify(workshopTitle)}-${exercise.exerciseNumber}-instructions`;
|
|
5833
|
-
return
|
|
5956
|
+
return unstable_data$1(
|
|
5834
5957
|
{
|
|
5835
5958
|
articleId,
|
|
5836
5959
|
exercise,
|
|
@@ -5865,11 +5988,11 @@ const headers$9 = ({ loaderHeaders, parentHeaders }) => {
|
|
|
5865
5988
|
const mdxComponents$4 = { h1: () => null };
|
|
5866
5989
|
function ExerciseNumberRoute() {
|
|
5867
5990
|
var _a;
|
|
5868
|
-
const
|
|
5991
|
+
const data2 = useLoaderData();
|
|
5869
5992
|
useRevalidationWS({
|
|
5870
|
-
watchPaths: [
|
|
5993
|
+
watchPaths: [data2.exerciseReadme.file]
|
|
5871
5994
|
});
|
|
5872
|
-
const firstStepNumber = String(((_a =
|
|
5995
|
+
const firstStepNumber = String(((_a = data2.firstStep) == null ? void 0 : _a.stepNumber) ?? "01").padStart(
|
|
5873
5996
|
2,
|
|
5874
5997
|
"0"
|
|
5875
5998
|
);
|
|
@@ -5877,18 +6000,18 @@ function ExerciseNumberRoute() {
|
|
|
5877
6000
|
/* @__PURE__ */ jsxs(
|
|
5878
6001
|
"article",
|
|
5879
6002
|
{
|
|
5880
|
-
id:
|
|
6003
|
+
id: data2.articleId,
|
|
5881
6004
|
className: "shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16",
|
|
5882
6005
|
children: [
|
|
5883
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none", children:
|
|
5884
|
-
/* @__PURE__ */ jsx("div", { children:
|
|
6006
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none", children: data2.exercise.title }) }),
|
|
6007
|
+
/* @__PURE__ */ jsx("div", { children: data2.exercise.instructionsCode ? /* @__PURE__ */ jsx(
|
|
5885
6008
|
EpicVideoInfoProvider,
|
|
5886
6009
|
{
|
|
5887
|
-
epicVideoInfosPromise:
|
|
6010
|
+
epicVideoInfosPromise: data2.epicVideoInfosPromise,
|
|
5888
6011
|
children: /* @__PURE__ */ jsx("div", { className: "prose dark:prose-invert sm:prose-lg", children: /* @__PURE__ */ jsx(
|
|
5889
6012
|
Mdx,
|
|
5890
6013
|
{
|
|
5891
|
-
code:
|
|
6014
|
+
code: data2.exercise.instructionsCode,
|
|
5892
6015
|
components: mdxComponents$4
|
|
5893
6016
|
}
|
|
5894
6017
|
) })
|
|
@@ -5896,20 +6019,20 @@ function ExerciseNumberRoute() {
|
|
|
5896
6019
|
) : "No instructions yet..." })
|
|
5897
6020
|
]
|
|
5898
6021
|
},
|
|
5899
|
-
|
|
6022
|
+
data2.articleId
|
|
5900
6023
|
),
|
|
5901
6024
|
/* @__PURE__ */ jsx(
|
|
5902
6025
|
ElementScrollRestoration,
|
|
5903
6026
|
{
|
|
5904
|
-
elementQuery: `#${
|
|
6027
|
+
elementQuery: `#${data2.articleId}`
|
|
5905
6028
|
},
|
|
5906
|
-
`scroll-${
|
|
6029
|
+
`scroll-${data2.articleId}`
|
|
5907
6030
|
),
|
|
5908
6031
|
/* @__PURE__ */ jsx(
|
|
5909
6032
|
ProgressToggle,
|
|
5910
6033
|
{
|
|
5911
6034
|
type: "instructions",
|
|
5912
|
-
exerciseNumber:
|
|
6035
|
+
exerciseNumber: data2.exerciseNumber,
|
|
5913
6036
|
className: "h-14 border-t px-6"
|
|
5914
6037
|
}
|
|
5915
6038
|
),
|
|
@@ -5918,14 +6041,14 @@ function ExerciseNumberRoute() {
|
|
|
5918
6041
|
/* @__PURE__ */ jsx(
|
|
5919
6042
|
EditFileOnGitHub,
|
|
5920
6043
|
{
|
|
5921
|
-
file:
|
|
5922
|
-
relativePath:
|
|
6044
|
+
file: data2.exerciseReadme.file,
|
|
6045
|
+
relativePath: data2.exerciseReadme.relativePath
|
|
5923
6046
|
}
|
|
5924
6047
|
),
|
|
5925
6048
|
/* @__PURE__ */ jsx(
|
|
5926
6049
|
Link,
|
|
5927
6050
|
{
|
|
5928
|
-
to: `${firstStepNumber}/${
|
|
6051
|
+
to: `${firstStepNumber}/${data2.firstType}`,
|
|
5929
6052
|
prefetch: "intent",
|
|
5930
6053
|
className: "flex h-full items-center justify-center bg-foreground px-7 text-background",
|
|
5931
6054
|
children: "Start Learning"
|
|
@@ -5964,7 +6087,7 @@ async function loader$m({ request, params }) {
|
|
|
5964
6087
|
if (!exercise) {
|
|
5965
6088
|
throw new Response("Not found", { status: 404 });
|
|
5966
6089
|
}
|
|
5967
|
-
const result =
|
|
6090
|
+
const result = unstable_data$1(
|
|
5968
6091
|
{
|
|
5969
6092
|
exerciseNumber: exercise.exerciseNumber,
|
|
5970
6093
|
exerciseTitle: exercise.title,
|
|
@@ -6229,8 +6352,8 @@ async function prepareForDiff(app1, app2) {
|
|
|
6229
6352
|
const { name: name2, ...rest2 } = pkg2;
|
|
6230
6353
|
return JSON.stringify(rest1) === JSON.stringify(rest2);
|
|
6231
6354
|
};
|
|
6232
|
-
const app1PkgJson = app1.dev.type === "script" ? await fsExtra.readJSON(path$1.join(app1.fullPath, "package.json")) : {};
|
|
6233
|
-
const app2PkgJson = app1.dev.type === "script" ? await fsExtra.readJSON(path$1.join(app2.fullPath, "package.json")) : {};
|
|
6355
|
+
const app1PkgJson = app1.dev.type === "script" ? await fsExtra.readJSON(path$1.join(app1.fullPath, "package.json")).catch(() => ({})) : {};
|
|
6356
|
+
const app2PkgJson = app1.dev.type === "script" ? await fsExtra.readJSON(path$1.join(app2.fullPath, "package.json")).catch(() => ({})) : {};
|
|
6234
6357
|
const pkgJsonIgnore = comparePkgJson(app1PkgJson, app2PkgJson) ? ["package.json"] : [];
|
|
6235
6358
|
const workshopIgnore = [
|
|
6236
6359
|
...await getDiffIgnore(path$1.join(workshopRoot, ".gitignore")),
|
|
@@ -6468,7 +6591,7 @@ async function action$5({ request }) {
|
|
|
6468
6591
|
};
|
|
6469
6592
|
const result = SetPlaygroundSchema.safeParse(rawData);
|
|
6470
6593
|
if (!result.success) {
|
|
6471
|
-
return
|
|
6594
|
+
return dataWithPE(
|
|
6472
6595
|
formData,
|
|
6473
6596
|
{ status: "error", error: result.error.message },
|
|
6474
6597
|
{ status: 400 }
|
|
@@ -6477,7 +6600,7 @@ async function action$5({ request }) {
|
|
|
6477
6600
|
const form = result.data;
|
|
6478
6601
|
const app = await getAppByName(form.appName);
|
|
6479
6602
|
if (!app) {
|
|
6480
|
-
return
|
|
6603
|
+
return dataWithPE(
|
|
6481
6604
|
formData,
|
|
6482
6605
|
{ status: "error", error: `App ${form.appName} not found` },
|
|
6483
6606
|
{ status: 404 }
|
|
@@ -6489,7 +6612,7 @@ async function action$5({ request }) {
|
|
|
6489
6612
|
} catch (error) {
|
|
6490
6613
|
const message = getErrorMessage(error);
|
|
6491
6614
|
console.error("Error setting playground", message);
|
|
6492
|
-
return
|
|
6615
|
+
return unstable_data$1({ status: "error", error: message }, {
|
|
6493
6616
|
status: 500,
|
|
6494
6617
|
headers: await createToastHeaders({
|
|
6495
6618
|
type: "error",
|
|
@@ -6503,7 +6626,7 @@ async function action$5({ request }) {
|
|
|
6503
6626
|
if (playground && converseApp) {
|
|
6504
6627
|
void getDiffCode(playground, converseApp, { forceFresh: true });
|
|
6505
6628
|
}
|
|
6506
|
-
return
|
|
6629
|
+
return dataWithPE(formData, { status: "success" });
|
|
6507
6630
|
}
|
|
6508
6631
|
function SetPlayground({
|
|
6509
6632
|
appName,
|
|
@@ -6588,14 +6711,14 @@ function PlaygroundChooser({
|
|
|
6588
6711
|
align: "start",
|
|
6589
6712
|
className: "z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",
|
|
6590
6713
|
children: [
|
|
6591
|
-
/* @__PURE__ */ jsx(Select.ScrollUpButton, { className: "flex h-5 cursor-default items-center justify-center
|
|
6714
|
+
/* @__PURE__ */ jsx(Select.ScrollUpButton, { className: "flex h-5 cursor-default items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUp" }) }),
|
|
6592
6715
|
/* @__PURE__ */ jsx(Select.Viewport, { className: "p-3", children: /* @__PURE__ */ jsxs(Select.Group, { children: [
|
|
6593
6716
|
/* @__PURE__ */ jsx(Select.Label, { className: "px-5 pb-3 font-mono uppercase", children: "App" }),
|
|
6594
6717
|
allApps.filter((app) => app.name !== "playground").map((app) => {
|
|
6595
6718
|
return /* @__PURE__ */ jsx(SelectItem$1, { value: app.name, children: app.displayName }, app.name);
|
|
6596
6719
|
})
|
|
6597
6720
|
] }) }),
|
|
6598
|
-
/* @__PURE__ */ jsx(Select.ScrollDownButton, { className: "flex h-5 cursor-default items-center justify-center
|
|
6721
|
+
/* @__PURE__ */ jsx(Select.ScrollDownButton, { className: "flex h-5 cursor-default items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronDown" }) })
|
|
6599
6722
|
]
|
|
6600
6723
|
}
|
|
6601
6724
|
) })
|
|
@@ -6943,34 +7066,34 @@ function TouchedFiles({
|
|
|
6943
7066
|
) })
|
|
6944
7067
|
] }) });
|
|
6945
7068
|
}
|
|
6946
|
-
function pageTitle(
|
|
7069
|
+
function pageTitle(data2, workshopTitle) {
|
|
6947
7070
|
var _a;
|
|
6948
|
-
const exerciseNumber = (
|
|
6949
|
-
const stepNumber = (
|
|
7071
|
+
const exerciseNumber = (data2 == null ? void 0 : data2.exerciseStepApp.exerciseNumber.toString().padStart(2, "0")) ?? "00";
|
|
7072
|
+
const stepNumber = (data2 == null ? void 0 : data2.exerciseStepApp.stepNumber.toString().padStart(2, "0")) ?? "00";
|
|
6950
7073
|
const emoji = {
|
|
6951
7074
|
problem: "💪",
|
|
6952
7075
|
solution: "🏁"
|
|
6953
|
-
}[(
|
|
6954
|
-
const title = ((_a =
|
|
7076
|
+
}[(data2 == null ? void 0 : data2.type) ?? "problem"];
|
|
7077
|
+
const title = ((_a = data2 == null ? void 0 : data2[data2.type]) == null ? void 0 : _a.title) ?? "N/A";
|
|
6955
7078
|
return {
|
|
6956
7079
|
emoji,
|
|
6957
7080
|
stepNumber,
|
|
6958
7081
|
title,
|
|
6959
7082
|
exerciseNumber,
|
|
6960
|
-
exerciseTitle: (
|
|
7083
|
+
exerciseTitle: (data2 == null ? void 0 : data2.exerciseTitle) ?? "Unknown exercise",
|
|
6961
7084
|
workshopTitle,
|
|
6962
|
-
type: (
|
|
7085
|
+
type: (data2 == null ? void 0 : data2.type) ?? "problem"
|
|
6963
7086
|
};
|
|
6964
7087
|
}
|
|
6965
7088
|
const meta$3 = ({
|
|
6966
|
-
data,
|
|
7089
|
+
data: data2,
|
|
6967
7090
|
matches,
|
|
6968
7091
|
params
|
|
6969
7092
|
}) => {
|
|
6970
7093
|
var _a;
|
|
6971
7094
|
const rootData = (_a = matches.find((m) => m.id === "root")) == null ? void 0 : _a.data;
|
|
6972
|
-
if (!
|
|
6973
|
-
const { emoji, stepNumber, title, exerciseNumber, exerciseTitle } = pageTitle(
|
|
7095
|
+
if (!data2 || !rootData) return [{ title: "🦉 | Error" }];
|
|
7096
|
+
const { emoji, stepNumber, title, exerciseNumber, exerciseTitle } = pageTitle(data2);
|
|
6974
7097
|
return getSeoMetaTags({
|
|
6975
7098
|
title: `${emoji} | ${stepNumber}. ${title} | ${exerciseNumber}. ${exerciseTitle} | ${rootData.workshopTitle}`,
|
|
6976
7099
|
description: `${params.type} step for exercise ${exerciseNumber}. ${exerciseTitle}`,
|
|
@@ -7048,7 +7171,7 @@ async function loader$l({ request, params }) {
|
|
|
7048
7171
|
const subroute = url.pathname.split(
|
|
7049
7172
|
`/exercise/${params.exerciseNumber}/${params.stepNumber}/${params.type}/`
|
|
7050
7173
|
)[1];
|
|
7051
|
-
return
|
|
7174
|
+
return unstable_data$1(
|
|
7052
7175
|
{
|
|
7053
7176
|
articleId,
|
|
7054
7177
|
type: params.type,
|
|
@@ -7117,11 +7240,11 @@ const headers$7 = ({ loaderHeaders, parentHeaders }) => {
|
|
|
7117
7240
|
};
|
|
7118
7241
|
function ExercisePartRoute$1() {
|
|
7119
7242
|
var _a;
|
|
7120
|
-
const
|
|
7243
|
+
const data2 = useLoaderData();
|
|
7121
7244
|
const inBrowserBrowserRef = useRef(null);
|
|
7122
|
-
const titleBits = pageTitle(
|
|
7245
|
+
const titleBits = pageTitle(data2);
|
|
7123
7246
|
useRevalidationWS({
|
|
7124
|
-
watchPaths: [`${
|
|
7247
|
+
watchPaths: [`${data2.exerciseStepApp.relativePath}/README.mdx`]
|
|
7125
7248
|
});
|
|
7126
7249
|
return /* @__PURE__ */ jsx("div", { className: "flex max-w-full flex-grow flex-col", children: /* @__PURE__ */ jsxs("main", { className: "flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1", children: [
|
|
7127
7250
|
/* @__PURE__ */ jsxs("div", { className: "relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r", children: [
|
|
@@ -7151,29 +7274,29 @@ function ExercisePartRoute$1() {
|
|
|
7151
7274
|
")"
|
|
7152
7275
|
] })
|
|
7153
7276
|
] }),
|
|
7154
|
-
|
|
7277
|
+
data2.problem && ((_a = data2.playground) == null ? void 0 : _a.appName) !== data2.problem.name ? /* @__PURE__ */ jsx("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx(SetAppToPlayground, { appName: data2.problem.name }) }) : null
|
|
7155
7278
|
] }) }),
|
|
7156
7279
|
/* @__PURE__ */ jsxs(
|
|
7157
7280
|
"article",
|
|
7158
7281
|
{
|
|
7159
|
-
id:
|
|
7282
|
+
id: data2.articleId,
|
|
7160
7283
|
className: "shadow-on-scrollbox flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",
|
|
7161
7284
|
children: [
|
|
7162
|
-
|
|
7285
|
+
data2.exerciseStepApp.instructionsCode ? /* @__PURE__ */ jsx(StepMdx, { inBrowserBrowserRef }) : /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center text-lg", children: /* @__PURE__ */ jsx("p", { children: "No instructions yet..." }) }),
|
|
7163
7286
|
/* @__PURE__ */ jsxs("div", { className: "mt-auto flex justify-between", children: [
|
|
7164
|
-
|
|
7287
|
+
data2.prevStepLink ? /* @__PURE__ */ jsx(
|
|
7165
7288
|
Link,
|
|
7166
7289
|
{
|
|
7167
|
-
to:
|
|
7290
|
+
to: data2.prevStepLink.to,
|
|
7168
7291
|
"aria-label": "Previous Step",
|
|
7169
7292
|
prefetch: "intent",
|
|
7170
7293
|
children: "← Previous"
|
|
7171
7294
|
}
|
|
7172
7295
|
) : /* @__PURE__ */ jsx("span", {}),
|
|
7173
|
-
|
|
7296
|
+
data2.nextStepLink ? /* @__PURE__ */ jsx(
|
|
7174
7297
|
Link,
|
|
7175
7298
|
{
|
|
7176
|
-
to:
|
|
7299
|
+
to: data2.nextStepLink.to,
|
|
7177
7300
|
"aria-label": "Next Step",
|
|
7178
7301
|
prefetch: "intent",
|
|
7179
7302
|
children: "Next →"
|
|
@@ -7182,42 +7305,42 @@ function ExercisePartRoute$1() {
|
|
|
7182
7305
|
] })
|
|
7183
7306
|
]
|
|
7184
7307
|
},
|
|
7185
|
-
|
|
7308
|
+
data2.articleId
|
|
7186
7309
|
),
|
|
7187
7310
|
/* @__PURE__ */ jsx(
|
|
7188
7311
|
ElementScrollRestoration,
|
|
7189
7312
|
{
|
|
7190
|
-
elementQuery: `#${
|
|
7313
|
+
elementQuery: `#${data2.articleId}`
|
|
7191
7314
|
},
|
|
7192
|
-
`scroll-${
|
|
7315
|
+
`scroll-${data2.articleId}`
|
|
7193
7316
|
),
|
|
7194
|
-
|
|
7317
|
+
data2.type === "solution" ? /* @__PURE__ */ jsx(
|
|
7195
7318
|
ProgressToggle,
|
|
7196
7319
|
{
|
|
7197
7320
|
type: "step",
|
|
7198
|
-
exerciseNumber:
|
|
7199
|
-
stepNumber:
|
|
7321
|
+
exerciseNumber: data2.exerciseStepApp.exerciseNumber,
|
|
7322
|
+
stepNumber: data2.exerciseStepApp.stepNumber,
|
|
7200
7323
|
className: "h-14 border-t px-6"
|
|
7201
7324
|
}
|
|
7202
7325
|
) : null,
|
|
7203
7326
|
/* @__PURE__ */ jsxs("div", { className: "flex h-16 justify-between border-b-4 border-t lg:border-b-0", children: [
|
|
7204
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { className: "h-full", children: /* @__PURE__ */ jsx(TouchedFiles, { diffFilesPromise:
|
|
7327
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { className: "h-full", children: /* @__PURE__ */ jsx(TouchedFiles, { diffFilesPromise: data2.diffFiles }) }) }),
|
|
7205
7328
|
/* @__PURE__ */ jsx(
|
|
7206
7329
|
EditFileOnGitHub,
|
|
7207
7330
|
{
|
|
7208
|
-
appName:
|
|
7209
|
-
relativePath:
|
|
7331
|
+
appName: data2.exerciseStepApp.name,
|
|
7332
|
+
relativePath: data2.exerciseStepApp.relativePath
|
|
7210
7333
|
}
|
|
7211
7334
|
),
|
|
7212
7335
|
/* @__PURE__ */ jsx(
|
|
7213
7336
|
NavChevrons,
|
|
7214
7337
|
{
|
|
7215
|
-
prev:
|
|
7216
|
-
to:
|
|
7338
|
+
prev: data2.prevStepLink ? {
|
|
7339
|
+
to: data2.prevStepLink.to,
|
|
7217
7340
|
"aria-label": "Previous Step"
|
|
7218
7341
|
} : null,
|
|
7219
|
-
next:
|
|
7220
|
-
to:
|
|
7342
|
+
next: data2.nextStepLink ? {
|
|
7343
|
+
to: data2.nextStepLink.to,
|
|
7221
7344
|
"aria-label": "Next Step"
|
|
7222
7345
|
} : null
|
|
7223
7346
|
}
|
|
@@ -7269,10 +7392,10 @@ async function action$4({ request }) {
|
|
|
7269
7392
|
const appRunningResult = await waitOnApp(app);
|
|
7270
7393
|
if ((appRunningResult == null ? void 0 : appRunningResult.status) === "success") {
|
|
7271
7394
|
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
7272
|
-
return
|
|
7395
|
+
return dataWithPE(formData, { status: "app-started" });
|
|
7273
7396
|
} else if (app.dev.type === "script") {
|
|
7274
7397
|
const errorMessage = appRunningResult ? appRunningResult.error : "Unknown error";
|
|
7275
|
-
return
|
|
7398
|
+
return unstable_data$1(
|
|
7276
7399
|
{
|
|
7277
7400
|
status: "app-not-started",
|
|
7278
7401
|
error: errorMessage,
|
|
@@ -7290,7 +7413,7 @@ async function action$4({ request }) {
|
|
|
7290
7413
|
);
|
|
7291
7414
|
}
|
|
7292
7415
|
} else if (result.portNumber) {
|
|
7293
|
-
return
|
|
7416
|
+
return dataWithPE(formData, {
|
|
7294
7417
|
status: "app-not-started",
|
|
7295
7418
|
error: result.status,
|
|
7296
7419
|
port: result.portNumber
|
|
@@ -7305,7 +7428,7 @@ async function action$4({ request }) {
|
|
|
7305
7428
|
async function stopApp() {
|
|
7306
7429
|
invariant(app, "app must be defined");
|
|
7307
7430
|
await closeProcess(app.name);
|
|
7308
|
-
return
|
|
7431
|
+
return dataWithPE(formData, { status: "app-stopped" });
|
|
7309
7432
|
}
|
|
7310
7433
|
switch (intent) {
|
|
7311
7434
|
case "start": {
|
|
@@ -7324,7 +7447,7 @@ async function action$4({ request }) {
|
|
|
7324
7447
|
const port2 = formData.get("port");
|
|
7325
7448
|
invariantResponse(typeof port2 === "string", "port is required");
|
|
7326
7449
|
await stopPort(port2);
|
|
7327
|
-
return
|
|
7450
|
+
return dataWithPE(formData, { status: "port-stopped" });
|
|
7328
7451
|
}
|
|
7329
7452
|
throw new Error(`Unknown intent: ${intent}`);
|
|
7330
7453
|
}
|
|
@@ -7849,23 +7972,29 @@ async function loader$k({ request, params }) {
|
|
|
7849
7972
|
const timings = makeTimings("exercise-step-test");
|
|
7850
7973
|
const exerciseStepApp = await requireExerciseApp(params, { request, timings });
|
|
7851
7974
|
const { isRunning, portIsAvailable } = await getAppRunningState(exerciseStepApp);
|
|
7852
|
-
return
|
|
7853
|
-
|
|
7854
|
-
|
|
7855
|
-
|
|
7856
|
-
|
|
7857
|
-
|
|
7858
|
-
|
|
7859
|
-
|
|
7860
|
-
|
|
7861
|
-
|
|
7862
|
-
|
|
7975
|
+
return unstable_data$1(
|
|
7976
|
+
{
|
|
7977
|
+
appInfo: {
|
|
7978
|
+
isRunning,
|
|
7979
|
+
name: exerciseStepApp.name,
|
|
7980
|
+
title: exerciseStepApp.title,
|
|
7981
|
+
portIsAvailable,
|
|
7982
|
+
type: exerciseStepApp.type,
|
|
7983
|
+
fullPath: exerciseStepApp.fullPath,
|
|
7984
|
+
dev: exerciseStepApp.dev,
|
|
7985
|
+
test: exerciseStepApp.test,
|
|
7986
|
+
stackBlitzUrl: exerciseStepApp.stackBlitzUrl
|
|
7987
|
+
}
|
|
7988
|
+
},
|
|
7989
|
+
{
|
|
7990
|
+
headers: {
|
|
7991
|
+
"Server-Timing": timings.toString()
|
|
7992
|
+
}
|
|
7863
7993
|
}
|
|
7864
|
-
|
|
7994
|
+
);
|
|
7865
7995
|
}
|
|
7866
7996
|
const headers$6 = ({ loaderHeaders, parentHeaders }) => {
|
|
7867
7997
|
const headers2 = {
|
|
7868
|
-
"Cache-Control": loaderHeaders.get("Cache-Control") ?? "",
|
|
7869
7998
|
"Server-Timing": combineServerTimings(loaderHeaders, parentHeaders)
|
|
7870
7999
|
};
|
|
7871
8000
|
return headers2;
|
|
@@ -8761,15 +8890,15 @@ async function loader$j({ request }) {
|
|
|
8761
8890
|
const url = new URL(request.url);
|
|
8762
8891
|
const name = url.searchParams.get("name");
|
|
8763
8892
|
if (!name) {
|
|
8764
|
-
return
|
|
8893
|
+
return unstable_data$1({ error: "Missing name" }, { status: 400 });
|
|
8765
8894
|
}
|
|
8766
8895
|
const app = await getAppByName(name);
|
|
8767
8896
|
if (!app) {
|
|
8768
|
-
return
|
|
8897
|
+
return unstable_data$1({ error: "App not found" }, { status: 404 });
|
|
8769
8898
|
}
|
|
8770
8899
|
const processEntry = getTestProcessEntry(app);
|
|
8771
8900
|
if (!processEntry) {
|
|
8772
|
-
return
|
|
8901
|
+
return unstable_data$1({ error: "App is not running tests" }, { status: 404 });
|
|
8773
8902
|
}
|
|
8774
8903
|
return eventStream(request.signal, function setup(send) {
|
|
8775
8904
|
var _a, _b;
|
|
@@ -8799,17 +8928,17 @@ async function loader$j({ request }) {
|
|
|
8799
8928
|
return () => {
|
|
8800
8929
|
};
|
|
8801
8930
|
}
|
|
8802
|
-
function handleStdOutData(
|
|
8931
|
+
function handleStdOutData(data2) {
|
|
8803
8932
|
sendEvent({
|
|
8804
8933
|
type: "stdout",
|
|
8805
|
-
data:
|
|
8934
|
+
data: data2.toString("utf-8"),
|
|
8806
8935
|
timestamp: Date.now()
|
|
8807
8936
|
});
|
|
8808
8937
|
}
|
|
8809
|
-
function handleStdErrData(
|
|
8938
|
+
function handleStdErrData(data2) {
|
|
8810
8939
|
sendEvent({
|
|
8811
8940
|
type: "stderr",
|
|
8812
|
-
data:
|
|
8941
|
+
data: data2.toString("utf-8"),
|
|
8813
8942
|
timestamp: Date.now()
|
|
8814
8943
|
});
|
|
8815
8944
|
}
|
|
@@ -8840,7 +8969,7 @@ async function action$3({ request }) {
|
|
|
8840
8969
|
request
|
|
8841
8970
|
});
|
|
8842
8971
|
if (!userHasAccess) {
|
|
8843
|
-
return
|
|
8972
|
+
return dataWithPE(
|
|
8844
8973
|
formData,
|
|
8845
8974
|
{
|
|
8846
8975
|
success: false,
|
|
@@ -8860,7 +8989,7 @@ async function action$3({ request }) {
|
|
|
8860
8989
|
name: formData.get("name")
|
|
8861
8990
|
});
|
|
8862
8991
|
if (!result.success) {
|
|
8863
|
-
return
|
|
8992
|
+
return dataWithPE(
|
|
8864
8993
|
formData,
|
|
8865
8994
|
{ success: false, error: result.error.flatten() },
|
|
8866
8995
|
{ status: 400 }
|
|
@@ -8868,7 +8997,7 @@ async function action$3({ request }) {
|
|
|
8868
8997
|
}
|
|
8869
8998
|
const app = await getAppByName(result.data.name);
|
|
8870
8999
|
if (!app) {
|
|
8871
|
-
return
|
|
9000
|
+
return dataWithPE(
|
|
8872
9001
|
formData,
|
|
8873
9002
|
{ success: false, error: "App not found" },
|
|
8874
9003
|
{ status: 404 }
|
|
@@ -8877,18 +9006,18 @@ async function action$3({ request }) {
|
|
|
8877
9006
|
switch (result.data.intent) {
|
|
8878
9007
|
case "run": {
|
|
8879
9008
|
void runAppTests(app);
|
|
8880
|
-
return
|
|
9009
|
+
return dataWithPE(formData, { success: true });
|
|
8881
9010
|
}
|
|
8882
9011
|
case "stop": {
|
|
8883
9012
|
const processEntry = getTestProcessEntry(app);
|
|
8884
9013
|
if (processEntry) {
|
|
8885
9014
|
(_a = processEntry.process) == null ? void 0 : _a.kill();
|
|
8886
9015
|
}
|
|
8887
|
-
return
|
|
9016
|
+
return dataWithPE(formData, { success: true });
|
|
8888
9017
|
}
|
|
8889
9018
|
case "clear": {
|
|
8890
9019
|
clearTestProcessEntry(app);
|
|
8891
|
-
return
|
|
9020
|
+
return dataWithPE(formData, { success: true });
|
|
8892
9021
|
}
|
|
8893
9022
|
}
|
|
8894
9023
|
}
|
|
@@ -9268,7 +9397,7 @@ async function loader$i({ request, params }) {
|
|
|
9268
9397
|
diffCode
|
|
9269
9398
|
};
|
|
9270
9399
|
}
|
|
9271
|
-
return
|
|
9400
|
+
return unstable_data$1(
|
|
9272
9401
|
{
|
|
9273
9402
|
type: params.type,
|
|
9274
9403
|
exerciseStepApp,
|
|
@@ -9343,7 +9472,7 @@ function withParam(searchParams, key, value) {
|
|
|
9343
9472
|
}
|
|
9344
9473
|
function ExercisePartRoute() {
|
|
9345
9474
|
var _a, _b, _c, _d, _e, _f;
|
|
9346
|
-
const
|
|
9475
|
+
const data2 = useLoaderData();
|
|
9347
9476
|
const [searchParams] = useSearchParams();
|
|
9348
9477
|
const preview = searchParams.get("preview");
|
|
9349
9478
|
const inBrowserBrowserRef = useRef(null);
|
|
@@ -9352,12 +9481,12 @@ function ExercisePartRoute() {
|
|
|
9352
9481
|
function shouldHideTab(tab) {
|
|
9353
9482
|
var _a2, _b2, _c2;
|
|
9354
9483
|
if (tab === "tests") {
|
|
9355
|
-
return ENV.EPICSHOP_DEPLOYED || !
|
|
9484
|
+
return ENV.EPICSHOP_DEPLOYED || !data2.playground || data2.playground.test.type === "none";
|
|
9356
9485
|
}
|
|
9357
9486
|
if (tab === "problem" || tab === "solution") {
|
|
9358
|
-
if (((_a2 =
|
|
9487
|
+
if (((_a2 = data2[tab]) == null ? void 0 : _a2.dev.type) === "none") return true;
|
|
9359
9488
|
if (ENV.EPICSHOP_DEPLOYED) {
|
|
9360
|
-
return ((_b2 =
|
|
9489
|
+
return ((_b2 = data2[tab]) == null ? void 0 : _b2.dev.type) !== "browser" && !((_c2 = data2[tab]) == null ? void 0 : _c2.stackBlitzUrl);
|
|
9361
9490
|
}
|
|
9362
9491
|
}
|
|
9363
9492
|
if (tab === "playground" && ENV.EPICSHOP_DEPLOYED) return true;
|
|
@@ -9365,8 +9494,8 @@ function ExercisePartRoute() {
|
|
|
9365
9494
|
}
|
|
9366
9495
|
const activeTab = isValidPreview(preview) ? preview : tabs.find((t) => !shouldHideTab(t));
|
|
9367
9496
|
const altDiffUrl = `/diff?${new URLSearchParams({
|
|
9368
|
-
app1: ((_a =
|
|
9369
|
-
app2: ((_b =
|
|
9497
|
+
app1: ((_a = data2.problem) == null ? void 0 : _a.name) ?? "",
|
|
9498
|
+
app2: ((_b = data2.solution) == null ? void 0 : _b.name) ?? ""
|
|
9370
9499
|
})}`;
|
|
9371
9500
|
function handleDiffTabClick(event) {
|
|
9372
9501
|
if (event.altKey && !event.ctrlKey && !event.shiftKey && !event.metaKey) {
|
|
@@ -9411,11 +9540,11 @@ function ExercisePartRoute() {
|
|
|
9411
9540
|
children: /* @__PURE__ */ jsx(
|
|
9412
9541
|
Playground,
|
|
9413
9542
|
{
|
|
9414
|
-
appInfo:
|
|
9415
|
-
problemAppName: (_c =
|
|
9543
|
+
appInfo: data2.playground,
|
|
9544
|
+
problemAppName: (_c = data2.problem) == null ? void 0 : _c.name,
|
|
9416
9545
|
inBrowserBrowserRef,
|
|
9417
|
-
allApps:
|
|
9418
|
-
isUpToDate: ((_d =
|
|
9546
|
+
allApps: data2.allApps,
|
|
9547
|
+
isUpToDate: ((_d = data2.playground) == null ? void 0 : _d.isUpToDate) ?? false
|
|
9419
9548
|
}
|
|
9420
9549
|
)
|
|
9421
9550
|
}
|
|
@@ -9428,7 +9557,7 @@ function ExercisePartRoute() {
|
|
|
9428
9557
|
children: /* @__PURE__ */ jsx(
|
|
9429
9558
|
Preview,
|
|
9430
9559
|
{
|
|
9431
|
-
appInfo:
|
|
9560
|
+
appInfo: data2.problem,
|
|
9432
9561
|
inBrowserBrowserRef
|
|
9433
9562
|
}
|
|
9434
9563
|
)
|
|
@@ -9442,7 +9571,7 @@ function ExercisePartRoute() {
|
|
|
9442
9571
|
children: /* @__PURE__ */ jsx(
|
|
9443
9572
|
Preview,
|
|
9444
9573
|
{
|
|
9445
|
-
appInfo:
|
|
9574
|
+
appInfo: data2.solution,
|
|
9446
9575
|
inBrowserBrowserRef
|
|
9447
9576
|
}
|
|
9448
9577
|
)
|
|
@@ -9456,10 +9585,10 @@ function ExercisePartRoute() {
|
|
|
9456
9585
|
children: /* @__PURE__ */ jsx(
|
|
9457
9586
|
Tests,
|
|
9458
9587
|
{
|
|
9459
|
-
appInfo:
|
|
9460
|
-
problemAppName: (_e =
|
|
9461
|
-
allApps:
|
|
9462
|
-
isUpToDate: ((_f =
|
|
9588
|
+
appInfo: data2.playground,
|
|
9589
|
+
problemAppName: (_e = data2.problem) == null ? void 0 : _e.name,
|
|
9590
|
+
allApps: data2.allApps,
|
|
9591
|
+
isUpToDate: ((_f = data2.playground) == null ? void 0 : _f.isUpToDate) ?? false
|
|
9463
9592
|
}
|
|
9464
9593
|
)
|
|
9465
9594
|
}
|
|
@@ -9469,7 +9598,7 @@ function ExercisePartRoute() {
|
|
|
9469
9598
|
{
|
|
9470
9599
|
value: "diff",
|
|
9471
9600
|
className: "flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",
|
|
9472
|
-
children: /* @__PURE__ */ jsx(Diff, { diff:
|
|
9601
|
+
children: /* @__PURE__ */ jsx(Diff, { diff: data2.diff, allApps: data2.allApps })
|
|
9473
9602
|
}
|
|
9474
9603
|
),
|
|
9475
9604
|
/* @__PURE__ */ jsx(
|
|
@@ -9505,12 +9634,19 @@ const route17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
9505
9634
|
async function loader$h({ request, params }) {
|
|
9506
9635
|
const timings = makeTimings("exercise-step-test");
|
|
9507
9636
|
const exerciseStepApp = await requireExerciseApp(params, { request, timings });
|
|
9508
|
-
return
|
|
9509
|
-
|
|
9510
|
-
|
|
9511
|
-
|
|
9637
|
+
return unstable_data$1(
|
|
9638
|
+
{
|
|
9639
|
+
appInfo: {
|
|
9640
|
+
name: exerciseStepApp == null ? void 0 : exerciseStepApp.name,
|
|
9641
|
+
test: exerciseStepApp == null ? void 0 : exerciseStepApp.test
|
|
9642
|
+
}
|
|
9643
|
+
},
|
|
9644
|
+
{
|
|
9645
|
+
headers: {
|
|
9646
|
+
"Server-Timing": timings.toString()
|
|
9647
|
+
}
|
|
9512
9648
|
}
|
|
9513
|
-
|
|
9649
|
+
);
|
|
9514
9650
|
}
|
|
9515
9651
|
const headers$4 = ({ loaderHeaders, parentHeaders }) => {
|
|
9516
9652
|
const headers2 = {
|
|
@@ -9554,17 +9690,17 @@ const route19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
9554
9690
|
loader: loader$g
|
|
9555
9691
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
9556
9692
|
const meta$2 = ({
|
|
9557
|
-
data,
|
|
9693
|
+
data: data2,
|
|
9558
9694
|
matches
|
|
9559
9695
|
}) => {
|
|
9560
9696
|
var _a;
|
|
9561
|
-
const number =
|
|
9697
|
+
const number = data2 == null ? void 0 : data2.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
9562
9698
|
const rootData = (_a = matches.find((m) => m.id === "root")) == null ? void 0 : _a.data;
|
|
9563
|
-
if (!
|
|
9699
|
+
if (!data2 || !rootData) return [{ title: "🦉 | Error" }];
|
|
9564
9700
|
return getSeoMetaTags({
|
|
9565
|
-
title: `🦉 | ${number}. ${
|
|
9566
|
-
description: `Elaboration for ${number}. ${
|
|
9567
|
-
ogTitle: `Finished: ${
|
|
9701
|
+
title: `🦉 | ${number}. ${data2.exercise.title} | ${rootData == null ? void 0 : rootData.workshopTitle}`,
|
|
9702
|
+
description: `Elaboration for ${number}. ${data2.exercise.title}`,
|
|
9703
|
+
ogTitle: `Finished: ${data2.exercise.title}`,
|
|
9568
9704
|
ogDescription: `Elaboration for exercise ${Number(number)}`,
|
|
9569
9705
|
instructor: rootData.instructor,
|
|
9570
9706
|
requestInfo: rootData.requestInfo
|
|
@@ -9597,7 +9733,7 @@ async function loader$f({ request, params }) {
|
|
|
9597
9733
|
const exerciseApps = apps.filter(isExerciseStepApp).filter((app) => app.exerciseNumber === exercise.exerciseNumber);
|
|
9598
9734
|
const prevApp = exerciseApps[exerciseApps.length - 1];
|
|
9599
9735
|
const articleId = `workshop-${slugify(workshopConfig.title)}-${exercise.exerciseNumber}-finished`;
|
|
9600
|
-
return
|
|
9736
|
+
return unstable_data$1(
|
|
9601
9737
|
{
|
|
9602
9738
|
articleId,
|
|
9603
9739
|
workshopTitle: workshopConfig.title,
|
|
@@ -9639,15 +9775,15 @@ const headers$3 = ({ loaderHeaders, parentHeaders }) => {
|
|
|
9639
9775
|
};
|
|
9640
9776
|
const mdxComponents$2 = { h1: () => null };
|
|
9641
9777
|
function ExerciseFinished$1() {
|
|
9642
|
-
const
|
|
9643
|
-
const exerciseNumber =
|
|
9778
|
+
const data2 = useLoaderData();
|
|
9779
|
+
const exerciseNumber = data2.exercise.exerciseNumber.toString().padStart(2, "0");
|
|
9644
9780
|
useRevalidationWS({
|
|
9645
9781
|
watchPaths: [`./exercises/${exerciseNumber}/FINISHED.mdx`]
|
|
9646
9782
|
});
|
|
9647
9783
|
return /* @__PURE__ */ jsx("div", { className: "flex max-w-full flex-grow flex-col", children: /* @__PURE__ */ jsxs("main", { className: "flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1", children: [
|
|
9648
9784
|
/* @__PURE__ */ jsxs("div", { className: "relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r", children: [
|
|
9649
9785
|
/* @__PURE__ */ jsx("h1", { className: "h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight", children: /* @__PURE__ */ jsx("div", { className: "flex h-14 flex-wrap items-center justify-between gap-x-2 py-2", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-2", children: [
|
|
9650
|
-
/* @__PURE__ */ jsx(Link, { to: `/${exerciseNumber}`, className: "hover:underline", children: `${exerciseNumber}. ${
|
|
9786
|
+
/* @__PURE__ */ jsx(Link, { to: `/${exerciseNumber}`, className: "hover:underline", children: `${exerciseNumber}. ${data2.exercise.title}` }),
|
|
9651
9787
|
/* @__PURE__ */ jsx("span", { children: "/" }),
|
|
9652
9788
|
/* @__PURE__ */ jsx("span", { children: "Elaboration" })
|
|
9653
9789
|
] }) }) }),
|
|
@@ -9655,15 +9791,15 @@ function ExerciseFinished$1() {
|
|
|
9655
9791
|
"article",
|
|
9656
9792
|
{
|
|
9657
9793
|
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",
|
|
9658
|
-
id:
|
|
9659
|
-
children:
|
|
9794
|
+
id: data2.articleId,
|
|
9795
|
+
children: data2.exercise.finishedCode ? /* @__PURE__ */ jsx(
|
|
9660
9796
|
EpicVideoInfoProvider,
|
|
9661
9797
|
{
|
|
9662
|
-
epicVideoInfosPromise:
|
|
9798
|
+
epicVideoInfosPromise: data2.epicVideoInfosPromise,
|
|
9663
9799
|
children: /* @__PURE__ */ jsx("div", { className: "prose dark:prose-invert sm:prose-lg", children: /* @__PURE__ */ jsx(
|
|
9664
9800
|
Mdx,
|
|
9665
9801
|
{
|
|
9666
|
-
code:
|
|
9802
|
+
code: data2.exercise.finishedCode,
|
|
9667
9803
|
components: mdxComponents$2
|
|
9668
9804
|
}
|
|
9669
9805
|
) })
|
|
@@ -9674,12 +9810,12 @@ function ExerciseFinished$1() {
|
|
|
9674
9810
|
)
|
|
9675
9811
|
}
|
|
9676
9812
|
),
|
|
9677
|
-
/* @__PURE__ */ jsx(ElementScrollRestoration, { elementQuery: `#${
|
|
9813
|
+
/* @__PURE__ */ jsx(ElementScrollRestoration, { elementQuery: `#${data2.articleId}` }),
|
|
9678
9814
|
/* @__PURE__ */ jsx(
|
|
9679
9815
|
ProgressToggle,
|
|
9680
9816
|
{
|
|
9681
9817
|
type: "finished",
|
|
9682
|
-
exerciseNumber:
|
|
9818
|
+
exerciseNumber: data2.exercise.exerciseNumber,
|
|
9683
9819
|
className: "h-14 border-t px-6"
|
|
9684
9820
|
}
|
|
9685
9821
|
),
|
|
@@ -9688,18 +9824,18 @@ function ExerciseFinished$1() {
|
|
|
9688
9824
|
/* @__PURE__ */ jsx(
|
|
9689
9825
|
EditFileOnGitHub,
|
|
9690
9826
|
{
|
|
9691
|
-
file:
|
|
9692
|
-
relativePath:
|
|
9827
|
+
file: data2.exerciseFinished.file,
|
|
9828
|
+
relativePath: data2.exerciseFinished.relativePath
|
|
9693
9829
|
}
|
|
9694
9830
|
),
|
|
9695
|
-
/* @__PURE__ */ jsx(NavChevrons, { prev:
|
|
9831
|
+
/* @__PURE__ */ jsx(NavChevrons, { prev: data2.prevStepLink, next: data2.nextStepLink })
|
|
9696
9832
|
] })
|
|
9697
9833
|
] }),
|
|
9698
9834
|
/* @__PURE__ */ jsx(
|
|
9699
9835
|
Survey$1,
|
|
9700
9836
|
{
|
|
9701
|
-
exerciseFormEmbedUrl:
|
|
9702
|
-
exerciseTitle:
|
|
9837
|
+
exerciseFormEmbedUrl: data2.exerciseFormEmbedUrl,
|
|
9838
|
+
exerciseTitle: data2.exercise.title
|
|
9703
9839
|
}
|
|
9704
9840
|
)
|
|
9705
9841
|
] }) });
|
|
@@ -9771,7 +9907,7 @@ async function loader$e({ request }) {
|
|
|
9771
9907
|
"{workshopTitle}",
|
|
9772
9908
|
encodeURIComponent(workshopTitle)
|
|
9773
9909
|
);
|
|
9774
|
-
return
|
|
9910
|
+
return unstable_data$1(
|
|
9775
9911
|
{
|
|
9776
9912
|
articleId: `workshop-${slugify(workshopTitle)}-finished`,
|
|
9777
9913
|
workshopTitle,
|
|
@@ -9805,12 +9941,12 @@ const headers$2 = ({ loaderHeaders, parentHeaders }) => {
|
|
|
9805
9941
|
};
|
|
9806
9942
|
const mdxComponents$1 = { h1: () => null };
|
|
9807
9943
|
function ExerciseFinished() {
|
|
9808
|
-
const
|
|
9944
|
+
const data2 = useLoaderData();
|
|
9809
9945
|
useRevalidationWS({ watchPaths: ["./exercises/FINISHED.mdx"] });
|
|
9810
9946
|
return /* @__PURE__ */ jsx("div", { className: "flex h-full flex-grow flex-col", children: /* @__PURE__ */ jsxs("main", { className: "grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1", children: [
|
|
9811
9947
|
/* @__PURE__ */ jsxs("div", { className: "relative col-span-1 row-span-1 flex h-full flex-col lg:border-r", children: [
|
|
9812
9948
|
/* @__PURE__ */ jsx("h1", { className: "h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-none", children: /* @__PURE__ */ jsx("div", { className: "flex h-14 flex-wrap items-center justify-between gap-x-2 py-2", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-2", children: [
|
|
9813
|
-
/* @__PURE__ */ jsx(Link, { to: "/", className: "hover:underline", children:
|
|
9949
|
+
/* @__PURE__ */ jsx(Link, { to: "/", className: "hover:underline", children: data2.workshopTitle }),
|
|
9814
9950
|
/* @__PURE__ */ jsx("span", { children: "/" }),
|
|
9815
9951
|
/* @__PURE__ */ jsx("span", { children: "Elaboration" })
|
|
9816
9952
|
] }) }) }),
|
|
@@ -9818,12 +9954,12 @@ function ExerciseFinished() {
|
|
|
9818
9954
|
"article",
|
|
9819
9955
|
{
|
|
9820
9956
|
className: "shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",
|
|
9821
|
-
id:
|
|
9822
|
-
children:
|
|
9957
|
+
id: data2.articleId,
|
|
9958
|
+
children: data2.finishedCode ? /* @__PURE__ */ jsx(
|
|
9823
9959
|
EpicVideoInfoProvider,
|
|
9824
9960
|
{
|
|
9825
|
-
epicVideoInfosPromise:
|
|
9826
|
-
children: /* @__PURE__ */ jsx("div", { className: "prose dark:prose-invert sm:prose-lg", children: /* @__PURE__ */ jsx(Mdx, { code:
|
|
9961
|
+
epicVideoInfosPromise: data2.epicVideoInfosPromise,
|
|
9962
|
+
children: /* @__PURE__ */ jsx("div", { className: "prose dark:prose-invert sm:prose-lg", children: /* @__PURE__ */ jsx(Mdx, { code: data2.finishedCode, components: mdxComponents$1 }) })
|
|
9827
9963
|
}
|
|
9828
9964
|
) : (
|
|
9829
9965
|
// TODO: render a random dad joke...
|
|
@@ -9831,7 +9967,7 @@ function ExerciseFinished() {
|
|
|
9831
9967
|
)
|
|
9832
9968
|
}
|
|
9833
9969
|
),
|
|
9834
|
-
/* @__PURE__ */ jsx(ElementScrollRestoration, { elementQuery: `#${
|
|
9970
|
+
/* @__PURE__ */ jsx(ElementScrollRestoration, { elementQuery: `#${data2.articleId}` }),
|
|
9835
9971
|
/* @__PURE__ */ jsx(
|
|
9836
9972
|
ProgressToggle,
|
|
9837
9973
|
{
|
|
@@ -9841,21 +9977,21 @@ function ExerciseFinished() {
|
|
|
9841
9977
|
),
|
|
9842
9978
|
/* @__PURE__ */ jsxs("div", { className: "flex h-16 justify-between border-b-4 border-t lg:border-b-0", children: [
|
|
9843
9979
|
/* @__PURE__ */ jsx("div", {}),
|
|
9844
|
-
|
|
9980
|
+
data2.workshopFinished.status === "success" ? /* @__PURE__ */ jsx(
|
|
9845
9981
|
EditFileOnGitHub,
|
|
9846
9982
|
{
|
|
9847
|
-
file:
|
|
9848
|
-
relativePath:
|
|
9983
|
+
file: data2.workshopFinished.file,
|
|
9984
|
+
relativePath: data2.workshopFinished.relativePath
|
|
9849
9985
|
}
|
|
9850
9986
|
) : null,
|
|
9851
|
-
/* @__PURE__ */ jsx(NavChevrons, { prev:
|
|
9987
|
+
/* @__PURE__ */ jsx(NavChevrons, { prev: data2.prevStepLink, next: { to: "/" } })
|
|
9852
9988
|
] })
|
|
9853
9989
|
] }),
|
|
9854
9990
|
/* @__PURE__ */ jsx(
|
|
9855
9991
|
Survey,
|
|
9856
9992
|
{
|
|
9857
|
-
workshopTitle:
|
|
9858
|
-
workshopFormEmbedUrl:
|
|
9993
|
+
workshopTitle: data2.workshopTitle,
|
|
9994
|
+
workshopFormEmbedUrl: data2.workshopFormEmbedUrl
|
|
9859
9995
|
}
|
|
9860
9996
|
)
|
|
9861
9997
|
] }) });
|
|
@@ -9909,7 +10045,7 @@ async function loader$d({ request }) {
|
|
|
9909
10045
|
desc: "compileMdx in index"
|
|
9910
10046
|
})
|
|
9911
10047
|
]);
|
|
9912
|
-
return
|
|
10048
|
+
return unstable_data$1(
|
|
9913
10049
|
{
|
|
9914
10050
|
articleId: `workshop-${slugify(title)}-instructions`,
|
|
9915
10051
|
title: workshopReadme.compiled.status === "success" ? workshopReadme.compiled.title : title,
|
|
@@ -9959,43 +10095,43 @@ function ExerciseListItem({
|
|
|
9959
10095
|
}
|
|
9960
10096
|
const mdxComponents = { h1: () => null };
|
|
9961
10097
|
function Index() {
|
|
9962
|
-
const
|
|
10098
|
+
const data2 = useLoaderData();
|
|
9963
10099
|
const exerciseLinks = /* @__PURE__ */ jsxs("ul", { className: "flex flex-col divide-y divide-border dark:divide-border/50", children: [
|
|
9964
10100
|
/* @__PURE__ */ jsx("strong", { className: "px-10 pb-3 font-mono text-xs uppercase", children: "Exercises" }),
|
|
9965
|
-
|
|
10101
|
+
data2.exercises.map((exercise) => /* @__PURE__ */ jsx(ExerciseListItem, { exercise }, exercise.exerciseNumber))
|
|
9966
10102
|
] });
|
|
9967
10103
|
return /* @__PURE__ */ jsxs("main", { className: "relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3", children: [
|
|
9968
10104
|
/* @__PURE__ */ jsxs(
|
|
9969
10105
|
"article",
|
|
9970
10106
|
{
|
|
9971
|
-
id:
|
|
10107
|
+
id: data2.articleId,
|
|
9972
10108
|
className: "shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16",
|
|
9973
10109
|
children: [
|
|
9974
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "px-10 text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none", children:
|
|
10110
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h1", { className: "px-10 text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none", children: data2.title }) }),
|
|
9975
10111
|
/* @__PURE__ */ jsxs("div", { className: "w-full max-w-none scroll-pt-6 border-t px-3 pt-3 md:px-10 md:pt-8", children: [
|
|
9976
10112
|
/* @__PURE__ */ jsx("h2", { className: "pb-5 font-mono text-xs font-semibold uppercase", children: "Intro" }),
|
|
9977
|
-
|
|
10113
|
+
data2.workshopReadme.compiled.status === "success" && data2.workshopReadme.compiled.code ? /* @__PURE__ */ jsx(
|
|
9978
10114
|
EpicVideoInfoProvider,
|
|
9979
10115
|
{
|
|
9980
|
-
epicVideoInfosPromise:
|
|
10116
|
+
epicVideoInfosPromise: data2.epicVideoInfosPromise,
|
|
9981
10117
|
children: /* @__PURE__ */ jsx("div", { className: "prose dark:prose-invert sm:prose-lg", children: /* @__PURE__ */ jsx(
|
|
9982
10118
|
Mdx,
|
|
9983
10119
|
{
|
|
9984
|
-
code:
|
|
10120
|
+
code: data2.workshopReadme.compiled.code,
|
|
9985
10121
|
components: mdxComponents
|
|
9986
10122
|
}
|
|
9987
10123
|
) })
|
|
9988
10124
|
}
|
|
9989
|
-
) :
|
|
10125
|
+
) : data2.workshopReadme.compiled.status === "error" ? /* @__PURE__ */ jsxs("div", { className: "text-red-500", children: [
|
|
9990
10126
|
"There was an error:",
|
|
9991
|
-
/* @__PURE__ */ jsx("pre", { children:
|
|
10127
|
+
/* @__PURE__ */ jsx("pre", { children: data2.workshopReadme.compiled.error })
|
|
9992
10128
|
] }) : "No instructions yet..."
|
|
9993
10129
|
] }),
|
|
9994
|
-
/* @__PURE__ */ jsx("div", { className: "pb-5 pt-10", children:
|
|
10130
|
+
/* @__PURE__ */ jsx("div", { className: "pb-5 pt-10", children: data2.workshopReadme.compiled.status === "success" && data2.workshopReadme.compiled.code && data2.workshopReadme.compiled.code.length > 500 ? exerciseLinks : null })
|
|
9995
10131
|
]
|
|
9996
10132
|
}
|
|
9997
10133
|
),
|
|
9998
|
-
/* @__PURE__ */ jsx(ElementScrollRestoration, { elementQuery: `#${
|
|
10134
|
+
/* @__PURE__ */ jsx(ElementScrollRestoration, { elementQuery: `#${data2.articleId}` }),
|
|
9999
10135
|
/* @__PURE__ */ jsx(
|
|
10000
10136
|
ProgressToggle,
|
|
10001
10137
|
{
|
|
@@ -10006,8 +10142,8 @@ function Index() {
|
|
|
10006
10142
|
/* @__PURE__ */ jsx("div", { className: "flex h-16 justify-center border-t", children: /* @__PURE__ */ jsx(
|
|
10007
10143
|
EditFileOnGitHub,
|
|
10008
10144
|
{
|
|
10009
|
-
file:
|
|
10010
|
-
relativePath:
|
|
10145
|
+
file: data2.workshopReadme.file,
|
|
10146
|
+
relativePath: data2.workshopReadme.relativePath
|
|
10011
10147
|
}
|
|
10012
10148
|
) })
|
|
10013
10149
|
] });
|
|
@@ -10131,12 +10267,12 @@ async function loader$b() {
|
|
|
10131
10267
|
ensureUndeployed();
|
|
10132
10268
|
const isAuthenticated = Boolean(await getAuthInfo());
|
|
10133
10269
|
if (isAuthenticated) throw redirect$1("/account");
|
|
10134
|
-
return
|
|
10270
|
+
return {};
|
|
10135
10271
|
}
|
|
10136
10272
|
async function action$2() {
|
|
10137
10273
|
ensureUndeployed();
|
|
10138
10274
|
void registerDevice();
|
|
10139
|
-
return
|
|
10275
|
+
return { status: "pending" };
|
|
10140
10276
|
}
|
|
10141
10277
|
function Login() {
|
|
10142
10278
|
var _a;
|
|
@@ -10365,7 +10501,7 @@ async function loader$a({ request }) {
|
|
|
10365
10501
|
] of getProcesses().testProcesses.entries()) {
|
|
10366
10502
|
testProcesses[name] = { pid: process2 == null ? void 0 : process2.pid, exitCode };
|
|
10367
10503
|
}
|
|
10368
|
-
return
|
|
10504
|
+
return unstable_data$1(
|
|
10369
10505
|
{
|
|
10370
10506
|
apps,
|
|
10371
10507
|
processes,
|
|
@@ -10386,19 +10522,19 @@ async function action$1({ request }) {
|
|
|
10386
10522
|
switch (intent) {
|
|
10387
10523
|
case "clear-data": {
|
|
10388
10524
|
await clearData();
|
|
10389
|
-
return
|
|
10525
|
+
return { success: true };
|
|
10390
10526
|
}
|
|
10391
10527
|
case "clear-caches": {
|
|
10392
10528
|
await clearCaches();
|
|
10393
|
-
return
|
|
10529
|
+
return { success: true };
|
|
10394
10530
|
}
|
|
10395
10531
|
case "inspect": {
|
|
10396
10532
|
await startInspector();
|
|
10397
|
-
return
|
|
10533
|
+
return { success: true };
|
|
10398
10534
|
}
|
|
10399
10535
|
case "stop-inspect": {
|
|
10400
10536
|
await stopInspector();
|
|
10401
|
-
return
|
|
10537
|
+
return { success: true };
|
|
10402
10538
|
}
|
|
10403
10539
|
default: {
|
|
10404
10540
|
throw new Error(`Unknown intent: ${intent}`);
|
|
@@ -10426,7 +10562,7 @@ function linkProgress(progress) {
|
|
|
10426
10562
|
}
|
|
10427
10563
|
function AdminLayout() {
|
|
10428
10564
|
var _a, _b;
|
|
10429
|
-
const
|
|
10565
|
+
const data2 = useLoaderData();
|
|
10430
10566
|
const navigation = useNavigation();
|
|
10431
10567
|
const epicProgress = useEpicProgress();
|
|
10432
10568
|
const isStartingInspector = ((_a = navigation.formData) == null ? void 0 : _a.get("intent")) === "inspect";
|
|
@@ -10478,19 +10614,19 @@ function AdminLayout() {
|
|
|
10478
10614
|
/* @__PURE__ */ jsxs("ul", { className: "max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: [
|
|
10479
10615
|
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "clear-caches", children: "Clear local caches" }) }) }),
|
|
10480
10616
|
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "clear-data", children: "Clear all local data (including auth data)" }) }) }),
|
|
10481
|
-
/* @__PURE__ */ jsx("li", { children:
|
|
10617
|
+
/* @__PURE__ */ jsx("li", { children: data2.inspectorRunning ? /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "stop-inspect", children: isStartingInspector ? "Stopping inspector..." : "Stop inspector" }) }) : /* @__PURE__ */ jsx(Form, { method: "POST", children: /* @__PURE__ */ jsx("button", { name: "intent", value: "inspect", children: isStoppingInspector ? "Starting inspector..." : "Start inspector" }) }) })
|
|
10482
10618
|
] })
|
|
10483
10619
|
] }),
|
|
10484
10620
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
10485
10621
|
/* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Apps" }),
|
|
10486
|
-
/* @__PURE__ */ jsx("ul", { className: "max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children:
|
|
10487
|
-
|
|
10622
|
+
/* @__PURE__ */ jsx("ul", { className: "max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: data2.apps.map((app) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2 py-1", children: [
|
|
10623
|
+
data2.processes[app.name] ? /* @__PURE__ */ jsx(Pinger, { status: "running" }) : /* @__PURE__ */ jsx(Pinger, { status: "stopped" }),
|
|
10488
10624
|
app.name
|
|
10489
10625
|
] }, app.name)) })
|
|
10490
10626
|
] }),
|
|
10491
10627
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
10492
10628
|
/* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Processes" }),
|
|
10493
|
-
/* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(
|
|
10629
|
+
/* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(data2.processes).map(([key, process2]) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", { children: [
|
|
10494
10630
|
key,
|
|
10495
10631
|
" - Port: ",
|
|
10496
10632
|
process2.port,
|
|
@@ -10503,7 +10639,7 @@ function AdminLayout() {
|
|
|
10503
10639
|
] }),
|
|
10504
10640
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
10505
10641
|
/* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: "Test Processes" }),
|
|
10506
|
-
/* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(
|
|
10642
|
+
/* @__PURE__ */ jsx("ul", { className: "overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar", children: Object.entries(data2.testProcesses).map(([key, process2]) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("span", { children: [
|
|
10507
10643
|
key,
|
|
10508
10644
|
" - PID ",
|
|
10509
10645
|
process2.pid,
|
|
@@ -10560,7 +10696,7 @@ const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
10560
10696
|
async function loader$9() {
|
|
10561
10697
|
ensureUndeployed();
|
|
10562
10698
|
const apps = await getApps();
|
|
10563
|
-
return json
|
|
10699
|
+
return Response.json({ apps });
|
|
10564
10700
|
}
|
|
10565
10701
|
const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
10566
10702
|
__proto__: null,
|
|
@@ -10569,7 +10705,7 @@ const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
10569
10705
|
async function loader$8() {
|
|
10570
10706
|
ensureUndeployed();
|
|
10571
10707
|
const entries = await getAllFileCacheEntries();
|
|
10572
|
-
return json
|
|
10708
|
+
return Response.json({ entries });
|
|
10573
10709
|
}
|
|
10574
10710
|
const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
10575
10711
|
__proto__: null,
|
|
@@ -10578,7 +10714,7 @@ const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
10578
10714
|
async function loader$7({ request }) {
|
|
10579
10715
|
const timings = makeTimings("appsLoader");
|
|
10580
10716
|
const apps = await getApps({ request, timings });
|
|
10581
|
-
return
|
|
10717
|
+
return unstable_data$1(
|
|
10582
10718
|
{ apps },
|
|
10583
10719
|
{ headers: { "Server-Timing": getServerTimeHeader(timings) } }
|
|
10584
10720
|
);
|
|
@@ -10642,12 +10778,12 @@ async function loader$6({ request }) {
|
|
|
10642
10778
|
const nextSearchParams = new URLSearchParams(reqUrl.searchParams);
|
|
10643
10779
|
nextSearchParams.set("app1", nextApp1 ?? "");
|
|
10644
10780
|
nextSearchParams.set("app2", nextApp2 ?? "");
|
|
10645
|
-
return
|
|
10781
|
+
return {
|
|
10646
10782
|
allApps,
|
|
10647
10783
|
diff,
|
|
10648
10784
|
prevLink: prevApp1 && prevApp2 ? { to: `/diff?${prevSearchParams}`, "aria-label": "Previous App" } : { to: "/diff" },
|
|
10649
10785
|
nextLink: nextApp1 && nextApp2 ? { to: `/diff?${nextSearchParams}`, "aria-label": "Next App" } : { to: "/diff" }
|
|
10650
|
-
}
|
|
10786
|
+
};
|
|
10651
10787
|
}
|
|
10652
10788
|
function DiffViewer() {
|
|
10653
10789
|
const data = useLoaderData();
|
|
@@ -10680,7 +10816,7 @@ const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
10680
10816
|
async function loader$5({ request }) {
|
|
10681
10817
|
const timings = makeTimings("appsLoader");
|
|
10682
10818
|
const exercises = await getExercises({ request, timings });
|
|
10683
|
-
return
|
|
10819
|
+
return unstable_data$1(
|
|
10684
10820
|
{ exercises },
|
|
10685
10821
|
{ headers: { "Server-Timing": getServerTimeHeader(timings) } }
|
|
10686
10822
|
);
|
|
@@ -11027,7 +11163,7 @@ async function loader$3({ request }) {
|
|
|
11027
11163
|
const timings = makeTimings("onboarding");
|
|
11028
11164
|
const { onboardingVideo } = getWorkshopConfig();
|
|
11029
11165
|
const videoInfos = getEpicVideoInfos([onboardingVideo], { request, timings });
|
|
11030
|
-
return
|
|
11166
|
+
return unstable_data$1(
|
|
11031
11167
|
{ onboardingVideo, videoInfos },
|
|
11032
11168
|
{ headers: { "Server-Timing": timings.toString() } }
|
|
11033
11169
|
);
|
|
@@ -11039,9 +11175,9 @@ const headers = ({ loaderHeaders }) => {
|
|
|
11039
11175
|
return headers2;
|
|
11040
11176
|
};
|
|
11041
11177
|
async function action({ request }) {
|
|
11042
|
-
const
|
|
11178
|
+
const data2 = await request.formData();
|
|
11043
11179
|
const authInfo = await getAuthInfo();
|
|
11044
|
-
const intent =
|
|
11180
|
+
const intent = data2.get("intent");
|
|
11045
11181
|
invariantResponse(intent === "complete", "Invalid intent");
|
|
11046
11182
|
const { onboardingVideo } = getWorkshopConfig();
|
|
11047
11183
|
await markOnboardingVideoWatched(onboardingVideo);
|
|
@@ -11049,7 +11185,7 @@ async function action({ request }) {
|
|
|
11049
11185
|
else throw redirect$1("/login");
|
|
11050
11186
|
}
|
|
11051
11187
|
function Onboarding() {
|
|
11052
|
-
const
|
|
11188
|
+
const data2 = useLoaderData();
|
|
11053
11189
|
return /* @__PURE__ */ jsxs("main", { className: "flex h-full w-full flex-col items-center justify-between gap-4", children: [
|
|
11054
11190
|
/* @__PURE__ */ jsxs("div", { className: "container flex h-full w-full max-w-5xl flex-1 flex-col items-center gap-4 overflow-y-scroll py-12 scrollbar-thin scrollbar-thumb-scrollbar", children: [
|
|
11055
11191
|
/* @__PURE__ */ jsx("h1", { className: "text-5xl", children: "Onboarding" }),
|
|
@@ -11059,7 +11195,7 @@ function Onboarding() {
|
|
|
11059
11195
|
/* @__PURE__ */ jsx("strong", { children: "you must watch the tour video" }),
|
|
11060
11196
|
"! You're going to be spending a lot of time in here, so it's important you understand how to work effectively in this workshop"
|
|
11061
11197
|
] }),
|
|
11062
|
-
/* @__PURE__ */ jsx("div", { className: "w-[780px] max-w-full", children: /* @__PURE__ */ jsx(EpicVideoInfoProvider, { epicVideoInfosPromise:
|
|
11198
|
+
/* @__PURE__ */ jsx("div", { className: "w-[780px] max-w-full", children: /* @__PURE__ */ jsx(EpicVideoInfoProvider, { epicVideoInfosPromise: data2.videoInfos, children: /* @__PURE__ */ jsx(DeferredEpicVideo, { url: data2.onboardingVideo }) }) })
|
|
11063
11199
|
] }),
|
|
11064
11200
|
/* @__PURE__ */ jsx(Form, { method: "post", className: "pb-4", children: /* @__PURE__ */ jsx(Button, { name: "intent", value: "complete", varient: "primary", children: "I've watched it. Let's go!" }) })
|
|
11065
11201
|
] });
|
|
@@ -11088,7 +11224,7 @@ async function loader$2() {
|
|
|
11088
11224
|
] of getProcesses().testProcesses.entries()) {
|
|
11089
11225
|
testProcesses[name] = { pid: process2 == null ? void 0 : process2.pid, exitCode, output };
|
|
11090
11226
|
}
|
|
11091
|
-
return json
|
|
11227
|
+
return Response.json({ processes, testProcesses });
|
|
11092
11228
|
}
|
|
11093
11229
|
const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
11094
11230
|
__proto__: null,
|
|
@@ -11116,11 +11252,11 @@ const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
11116
11252
|
__proto__: null,
|
|
11117
11253
|
loader
|
|
11118
11254
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
11119
|
-
const serverManifest = { "entry": { "module": "/assets/entry.client-BTYTUpFV.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-DojjHZlY.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/error-boundary-1-dmC941.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/index-DRH72MzK.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-_J-F_Dnc.js", "/assets/presence-CdyMdOKk.js", "/assets/seo-pBpFCWsy.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-CWSCXcBv.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/error-boundary-1-dmC941.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-T2hZtl0D.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/product-C1ynnrN_.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuoaxPEj.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/presence-CdyMdOKk.js", "/assets/progress-DAB3nDa2.js", "/assets/index-_J-F_Dnc.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-CPFwPYf1.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/user-BBryXlM_.js", "/assets/presence-CdyMdOKk.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.epic_ws[.js]": { "id": "routes/_app+/app.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-DoeazikD.js", "imports": ["/assets/discord-CHsbqaqM.js", "/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js", "/assets/user-BBryXlM_.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-88n0To1b.js", "imports": ["/assets/index-BFGhCX_U.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-DarnXgbX.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-hW1uYjc1.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-BA2Xhzqs.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-BTrPWpBz.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/error-boundary-1-dmC941.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-hW1uYjc1.js", "/assets/progress-DAB3nDa2.js", "/assets/set-playground-DgnOJqFN.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-BJtHv_Jh.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/tooltip-BgynKV2c.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/index-BuoaxPEj.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/pe-ChIwTk8v.js", "/assets/index-BuA_RWlU.js", "/assets/index-_J-F_Dnc.js", "/assets/loading-Dk0n07O3.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-CM8yuYni.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/preview-CW_12I0i.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/request-info-DCIQLE6H.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-DJF1fiZI.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-assn_bSK.js", "/assets/error-boundary-1-dmC941.js", "/assets/loading-Dk0n07O3.js", "/assets/discord-CHsbqaqM.js", "/assets/components-9EGYHTc_.js", "/assets/index-DRH72MzK.js", "/assets/set-playground-DgnOJqFN.js", "/assets/tests-Bw1rCopV.js", "/assets/preview-CW_12I0i.js", "/assets/index-BuoaxPEj.js", "/assets/accordion-DC885Li1.js", "/assets/mdx-hW1uYjc1.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-DJ7oeeeg.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tests-Bw1rCopV.js", "/assets/components-9EGYHTc_.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/accordion-DC885Li1.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/set-playground-DgnOJqFN.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-DEzaS_Ji.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-hW1uYjc1.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-DVV0zwmP.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-hW1uYjc1.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-KgMLc41c.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/error-boundary-1-dmC941.js", "/assets/mdx-hW1uYjc1.js", "/assets/misc-BJtHv_Jh.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-pZYDEC_l.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/product-C1ynnrN_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-BNS-kEhc.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-gyrNluke.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-jlCv3hv0.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-assn_bSK.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/components-9EGYHTc_.js", "/assets/accordion-DC885Li1.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/mdx-hW1uYjc1.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.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-DCuSqnkZ.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/epic-video-GDpD7_Qt.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-BBryXlM_.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-3338a6ab.js", "version": "3338a6ab" };
|
|
11255
|
+
const serverManifest = { "entry": { "module": "/assets/entry.client-BTYTUpFV.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-DCfiv1cO.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/error-boundary-1-dmC941.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/index-DRH72MzK.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-_J-F_Dnc.js", "/assets/presence-DyppfK2V.js", "/assets/seo-pBpFCWsy.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-CWSCXcBv.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/error-boundary-1-dmC941.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DvQmiuTm.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/pe-ChIwTk8v.js", "/assets/product-C1ynnrN_.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuoaxPEj.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/presence-DyppfK2V.js", "/assets/progress-DAB3nDa2.js", "/assets/index-_J-F_Dnc.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-DbdZ0Vhg.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/user-AF5-S38o.js", "/assets/presence-DyppfK2V.js", "/assets/components-9EGYHTc_.js", "/assets/request-info-DCIQLE6H.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/api.$": { "id": "routes/_app+/app.$appName+/api.$", "parentId": "routes/_app+/_layout", "path": "app/:appName/api/*", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/epic_ws[.js]": { "id": "routes/_app+/app.$appName+/epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/index": { "id": "routes/_app+/app.$appName+/index", "parentId": "routes/_app+/_layout", "path": "app/:appName/", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.$testName": { "id": "routes/_app+/app.$appName+/test.$testName", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/:testName", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.$appName+/test.epic_ws[.js]": { "id": "routes/_app+/app.$appName+/test.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/:appName/test/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/app.epic_ws[.js]": { "id": "routes/_app+/app.epic_ws[.js]", "parentId": "routes/_app+/_layout", "path": "app/epic_ws.js", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/discord": { "id": "routes/_app+/discord", "parentId": "routes/_app+/_layout", "path": "discord", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-arMqZKbH.js", "imports": ["/assets/discord-DGeGrHNb.js", "/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js", "/assets/user-AF5-S38o.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-88n0To1b.js", "imports": ["/assets/index-BFGhCX_U.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-Byb05FGg.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-C01HZJEv.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-BA2Xhzqs.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": ":type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-BwDoP7Kv.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/error-boundary-1-dmC941.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-C01HZJEv.js", "/assets/progress-DAB3nDa2.js", "/assets/set-playground-S_rIwJAa.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-BJtHv_Jh.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/tooltip-BgynKV2c.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/index-BuoaxPEj.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/pe-ChIwTk8v.js", "/assets/index-BuA_RWlU.js", "/assets/index-_J-F_Dnc.js", "/assets/loading-Dk0n07O3.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "app", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-CM8yuYni.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/preview-CW_12I0i.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/request-info-DCIQLE6H.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-D-V8b9oA.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-CzHloS9Q.js", "/assets/error-boundary-1-dmC941.js", "/assets/loading-Dk0n07O3.js", "/assets/discord-DGeGrHNb.js", "/assets/components-9EGYHTc_.js", "/assets/index-DRH72MzK.js", "/assets/set-playground-S_rIwJAa.js", "/assets/tests-Cmesc4Yz.js", "/assets/preview-CW_12I0i.js", "/assets/index-BuoaxPEj.js", "/assets/accordion-DC885Li1.js", "/assets/mdx-C01HZJEv.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-D_qZ9Wu9.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tests-Cmesc4Yz.js", "/assets/components-9EGYHTc_.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/accordion-DC885Li1.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/set-playground-S_rIwJAa.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/_app+/exercise+/$exerciseNumber_.finished": { "id": "routes/_app+/exercise+/$exerciseNumber_.finished", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-DUqyxjV2.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-C01HZJEv.js", "/assets/progress-DAB3nDa2.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-DbOxW5dc.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/loading-Dk0n07O3.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/revalidation-ws-DU-PzW-_.js", "/assets/mdx-C01HZJEv.js", "/assets/misc-BJtHv_Jh.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-Bfqa72Xl.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/error-boundary-1-dmC941.js", "/assets/mdx-C01HZJEv.js", "/assets/misc-BJtHv_Jh.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-pZYDEC_l.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-DQ001ob0.js", "/assets/loading-Dk0n07O3.js", "/assets/product-C1ynnrN_.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/request-info-DCIQLE6H.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-BNS-kEhc.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-9EGYHTc_.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-gyrNluke.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/tooltip-BgynKV2c.js", "/assets/progress-DAB3nDa2.js", "/assets/components-9EGYHTc_.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [] }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-Cmd66hnY.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-BJtHv_Jh.js", "/assets/diff-CzHloS9Q.js", "/assets/nav-chevrons-CgbSMLeb.js", "/assets/components-9EGYHTc_.js", "/assets/accordion-DC885Li1.js", "/assets/tooltip-BgynKV2c.js", "/assets/index-BuA_RWlU.js", "/assets/index-BuoaxPEj.js", "/assets/mdx-C01HZJEv.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js", "/assets/progress-bar-Cj5R4Zk7.js", "/assets/revalidation-ws-DU-PzW-_.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-Dk74xvlh.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-DQ001ob0.js", "/assets/epic-video-Dw5Vkxid.js", "/assets/components-9EGYHTc_.js", "/assets/misc-BJtHv_Jh.js", "/assets/index-_J-F_Dnc.js", "/assets/request-info-DCIQLE6H.js", "/assets/tooltip-BgynKV2c.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-Dk0n07O3.js", "/assets/user-AF5-S38o.js", "/assets/workshop-config-DJY2cXU_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/robots[.]txt": { "id": "routes/robots[.]txt", "parentId": "root", "path": "robots.txt", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/set-playground": { "id": "routes/set-playground", "parentId": "root", "path": "set-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/sitemap[.]xml": { "id": "routes/sitemap[.]xml", "parentId": "root", "path": "sitemap.xml", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-0d355395.js", "version": "0d355395" };
|
|
11120
11256
|
const mode = "production";
|
|
11121
11257
|
const assetsBuildDirectory = "build/client";
|
|
11122
11258
|
const basename = "/";
|
|
11123
|
-
const future = { "v3_fetcherPersist": true, "v3_relativeSplatPath": true, "v3_throwAbortReason": true, "unstable_singleFetch":
|
|
11259
|
+
const future = { "v3_fetcherPersist": true, "v3_relativeSplatPath": true, "v3_throwAbortReason": true, "unstable_singleFetch": true, "unstable_lazyRouteDiscovery": true, "unstable_optimizeDeps": true };
|
|
11124
11260
|
const isSpaMode = false;
|
|
11125
11261
|
const publicPath = "/";
|
|
11126
11262
|
const entry = { module: entryServer };
|