@epic-web/workshop-app 4.21.0 → 4.22.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-Cq0nozYz.js.map +1 -1
- package/build/client/assets/_exerciseNumber_._stepNumber-B5pmJ29o.js.map +1 -1
- package/build/client/assets/_exerciseNumber_.finished-Q9qnPuZX.js.map +1 -1
- package/build/client/assets/_layout-AgYGL72C.js.map +1 -1
- package/build/client/assets/_layout-BocZ2xWF.js +2 -0
- package/build/client/assets/_layout-BocZ2xWF.js.map +1 -0
- package/build/client/assets/_layout-C8uU4Hwj.js.map +1 -1
- package/build/client/assets/finished-Bm-bCUU2.js.map +1 -1
- package/build/client/assets/index-Dm1ll1kT.js.map +1 -1
- package/build/client/assets/index-Tfdnz1AB.js.map +1 -1
- package/build/client/assets/{manifest-746b2907.js → manifest-4a3cf2ec.js} +1 -1
- package/build/client/assets/mdx-M0kcP-mP.js.map +1 -1
- package/build/client/assets/{onboarding-Bib-wh6d.js → onboarding-CnmE4HLR.js} +2 -2
- package/build/client/assets/onboarding-CnmE4HLR.js.map +1 -0
- package/build/client/assets/root-Tcnfz99O.js.map +1 -1
- package/build/client/assets/seo-pBpFCWsy.js.map +1 -1
- package/build/server/index.js +285 -269
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/build/client/assets/_layout-DLVrpOki.js +0 -2
- package/build/client/assets/_layout-DLVrpOki.js.map +0 -1
- package/build/client/assets/onboarding-Bib-wh6d.js.map +0 -1
package/build/server/index.js
CHANGED
|
@@ -360,7 +360,9 @@ const AuthInfoSchema = z$1.object({
|
|
|
360
360
|
name: z$1.string().nullable().optional()
|
|
361
361
|
}).transform((d) => ({ ...d, id: md5(d.email) }));
|
|
362
362
|
const DataSchema = z$1.object({
|
|
363
|
-
onboarding: z$1.object({
|
|
363
|
+
onboarding: z$1.object({
|
|
364
|
+
tourVideosWatched: z$1.array(z$1.string()).default([])
|
|
365
|
+
}).passthrough().optional().default({ tourVideosWatched: [] }),
|
|
364
366
|
preferences: z$1.object({
|
|
365
367
|
player: PlayerPreferencesSchema,
|
|
366
368
|
presence: PresencePreferencesSchema
|
|
@@ -495,11 +497,17 @@ async function readOnboardingData() {
|
|
|
495
497
|
const data = await readDb();
|
|
496
498
|
return (data == null ? void 0 : data.onboarding) ?? null;
|
|
497
499
|
}
|
|
498
|
-
async function
|
|
500
|
+
async function markOnboardingVideoWatched(videoUrl) {
|
|
499
501
|
const data = await readDb();
|
|
500
502
|
const updatedData = {
|
|
501
503
|
...data,
|
|
502
|
-
onboarding: {
|
|
504
|
+
onboarding: {
|
|
505
|
+
...data == null ? void 0 : data.onboarding,
|
|
506
|
+
tourVideosWatched: [
|
|
507
|
+
...(data == null ? void 0 : data.onboarding.tourVideosWatched) ?? [],
|
|
508
|
+
videoUrl
|
|
509
|
+
].filter(Boolean)
|
|
510
|
+
}
|
|
503
511
|
};
|
|
504
512
|
await fsExtra.ensureDir(appDir);
|
|
505
513
|
await fsExtra.writeJSON(dbPath, updatedData);
|
|
@@ -1155,6 +1163,191 @@ async function queuedBundleMDX(...args) {
|
|
|
1155
1163
|
const result = await queue.add(() => bundleMDX(...args));
|
|
1156
1164
|
return result;
|
|
1157
1165
|
}
|
|
1166
|
+
const workshopRoot$1 = process.env.EPICSHOP_CONTEXT_CWD ?? process.cwd();
|
|
1167
|
+
const StackBlitzConfigSchema = z$1.object({
|
|
1168
|
+
// we default this to `${exerciseTitle} (${type})`
|
|
1169
|
+
title: z$1.string().optional(),
|
|
1170
|
+
// stackblitz defaults this to dev automatically
|
|
1171
|
+
startScript: z$1.string().optional(),
|
|
1172
|
+
// if no value is provided, then stackblitz defaults this to whatever
|
|
1173
|
+
// looks best based on the width of the screen
|
|
1174
|
+
view: z$1.union([z$1.literal("editor"), z$1.literal("preview"), z$1.literal("both")]).optional(),
|
|
1175
|
+
file: z$1.string().optional()
|
|
1176
|
+
});
|
|
1177
|
+
const InstructorSchema = z$1.object({
|
|
1178
|
+
name: z$1.string().optional(),
|
|
1179
|
+
avatar: z$1.string().optional(),
|
|
1180
|
+
"𝕏": z$1.string().optional(),
|
|
1181
|
+
xHandle: z$1.string().optional()
|
|
1182
|
+
});
|
|
1183
|
+
const WorkshopConfigSchema = z$1.object({
|
|
1184
|
+
title: z$1.string(),
|
|
1185
|
+
subtitle: z$1.string().optional(),
|
|
1186
|
+
instructor: InstructorSchema.optional(),
|
|
1187
|
+
epicWorkshopHost: z$1.string().default("www.epicweb.dev"),
|
|
1188
|
+
epicWorkshopSlug: z$1.string().optional(),
|
|
1189
|
+
onboardingVideo: z$1.string().default(
|
|
1190
|
+
"https://www.epicweb.dev/tips/get-started-with-the-epic-workshop-app"
|
|
1191
|
+
),
|
|
1192
|
+
githubRepo: z$1.string(),
|
|
1193
|
+
githubRoot: z$1.string(),
|
|
1194
|
+
stackBlitzConfig: StackBlitzConfigSchema.optional(),
|
|
1195
|
+
forms: z$1.object({
|
|
1196
|
+
workshop: z$1.string().default(
|
|
1197
|
+
"https://docs.google.com/forms/d/e/1FAIpQLSdRmj9p8-5zyoqRzxp3UpqSbC3aFkweXvvJIKes0a5s894gzg/viewform?hl=en&embedded=true&entry.2123647600={workshopTitle}"
|
|
1198
|
+
),
|
|
1199
|
+
exercise: z$1.string().default(
|
|
1200
|
+
"https://docs.google.com/forms/d/e/1FAIpQLSf3o9xyjQepTlOTH5Z7ZwkeSTdXh6YWI_RGc9KiyD3oUN0p6w/viewform?hl=en&embedded=true&entry.1836176234={workshopTitle}&entry.428900931={exerciseTitle}"
|
|
1201
|
+
)
|
|
1202
|
+
}).default({}),
|
|
1203
|
+
testTab: z$1.object({
|
|
1204
|
+
enabled: z$1.boolean().default(true)
|
|
1205
|
+
}).default({}),
|
|
1206
|
+
scripts: z$1.object({
|
|
1207
|
+
postupdate: z$1.string().optional()
|
|
1208
|
+
}).optional(),
|
|
1209
|
+
initialRoute: z$1.string().optional().default("/")
|
|
1210
|
+
// Add this line
|
|
1211
|
+
});
|
|
1212
|
+
let cachedConfig = null;
|
|
1213
|
+
function bustWorkshopConfigCache() {
|
|
1214
|
+
cachedConfig = null;
|
|
1215
|
+
}
|
|
1216
|
+
function getWorkshopConfig() {
|
|
1217
|
+
if (cachedConfig) return cachedConfig;
|
|
1218
|
+
const packageJsonPath = path$1.join(workshopRoot$1, "package.json");
|
|
1219
|
+
let packageJson;
|
|
1220
|
+
try {
|
|
1221
|
+
const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
|
|
1222
|
+
packageJson = JSON.parse(packageJsonContent);
|
|
1223
|
+
} catch (error) {
|
|
1224
|
+
console.error(`Error reading or parsing package.json:`, error);
|
|
1225
|
+
if (error instanceof Error && error.message.includes("ENOENT")) {
|
|
1226
|
+
throw new Error(
|
|
1227
|
+
`package.json not found at ${packageJsonPath}. Please ensure you're running the command from the correct directory.`
|
|
1228
|
+
);
|
|
1229
|
+
} else if (error instanceof SyntaxError) {
|
|
1230
|
+
throw new Error(
|
|
1231
|
+
`Invalid JSON in package.json at ${packageJsonPath}. Please check the file for syntax errors.`
|
|
1232
|
+
);
|
|
1233
|
+
}
|
|
1234
|
+
throw new Error(
|
|
1235
|
+
`Could not find and parse package.json at ${packageJsonPath}`
|
|
1236
|
+
);
|
|
1237
|
+
}
|
|
1238
|
+
const epicshopConfig = packageJson.epicshop || {};
|
|
1239
|
+
if (epicshopConfig.githubRepo) {
|
|
1240
|
+
epicshopConfig.githubRoot = `${epicshopConfig.githubRepo.replace(/\/$/, "")}/tree/main`;
|
|
1241
|
+
} else if (epicshopConfig.githubRoot) {
|
|
1242
|
+
epicshopConfig.githubRepo = epicshopConfig.githubRoot.replace(
|
|
1243
|
+
/\/(blob|tree)\/.*$/,
|
|
1244
|
+
""
|
|
1245
|
+
);
|
|
1246
|
+
epicshopConfig.githubRoot = `${epicshopConfig.githubRepo}/tree/main`;
|
|
1247
|
+
} else {
|
|
1248
|
+
throw new Error(
|
|
1249
|
+
"Either githubRepo or githubRoot is required in the epicshop configuration"
|
|
1250
|
+
);
|
|
1251
|
+
}
|
|
1252
|
+
try {
|
|
1253
|
+
const parsedConfig = WorkshopConfigSchema.parse(epicshopConfig);
|
|
1254
|
+
cachedConfig = parsedConfig;
|
|
1255
|
+
return parsedConfig;
|
|
1256
|
+
} catch (error) {
|
|
1257
|
+
if (error instanceof z$1.ZodError) {
|
|
1258
|
+
const flattenedErrors = error.flatten();
|
|
1259
|
+
const errorMessages = Object.entries(flattenedErrors.fieldErrors).map(([field, errors]) => `${field}: ${errors == null ? void 0 : errors.join(", ")}`).concat(flattenedErrors.formErrors);
|
|
1260
|
+
throw new Error(
|
|
1261
|
+
`Invalid epicshop configuration in ${packageJsonPath}:
|
|
1262
|
+
${errorMessages.join("\n")}`
|
|
1263
|
+
);
|
|
1264
|
+
}
|
|
1265
|
+
throw error;
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
async function getStackBlitzUrl({
|
|
1269
|
+
fullPath,
|
|
1270
|
+
title,
|
|
1271
|
+
type
|
|
1272
|
+
}) {
|
|
1273
|
+
var _a2;
|
|
1274
|
+
const workshopConfig = getWorkshopConfig();
|
|
1275
|
+
const appConfig = await getAppConfig(fullPath);
|
|
1276
|
+
if (appConfig.stackBlitzConfig === null) return null;
|
|
1277
|
+
let githubRootUrlString = workshopConfig.githubRepo;
|
|
1278
|
+
const githubRootUrl = new URL(
|
|
1279
|
+
githubRootUrlString.replace(/\/blob\//, "/tree/")
|
|
1280
|
+
);
|
|
1281
|
+
const githubPart = githubRootUrl.pathname;
|
|
1282
|
+
const stackBlitzConfig = {
|
|
1283
|
+
...appConfig.stackBlitzConfig,
|
|
1284
|
+
title: ((_a2 = appConfig.stackBlitzConfig) == null ? void 0 : _a2.title) ?? `${title} (${type})`
|
|
1285
|
+
};
|
|
1286
|
+
const params = new URLSearchParams(stackBlitzConfig);
|
|
1287
|
+
const relativePath = fullPath.replace(`${workshopRoot$1}${path$1.sep}`, "");
|
|
1288
|
+
const stackBlitzUrl = new URL(
|
|
1289
|
+
`/github${githubPart}/${relativePath}?${params}`,
|
|
1290
|
+
"https://stackblitz.com"
|
|
1291
|
+
);
|
|
1292
|
+
return stackBlitzUrl.toString();
|
|
1293
|
+
}
|
|
1294
|
+
async function getAppConfig(fullPath) {
|
|
1295
|
+
var _a2, _b;
|
|
1296
|
+
const workshopConfig = getWorkshopConfig();
|
|
1297
|
+
let epicshopConfig = {};
|
|
1298
|
+
let scripts = {};
|
|
1299
|
+
const packageJsonPath = path$1.join(fullPath, "package.json");
|
|
1300
|
+
const packageJsonExists = await fs.promises.access(packageJsonPath, fs.constants.F_OK).then(() => true).catch(() => false);
|
|
1301
|
+
if (packageJsonExists) {
|
|
1302
|
+
const pkg = JSON.parse(
|
|
1303
|
+
await fs.promises.readFile(path$1.join(fullPath, "package.json"), "utf8")
|
|
1304
|
+
);
|
|
1305
|
+
epicshopConfig = pkg.epicshop ?? {};
|
|
1306
|
+
scripts = pkg.scripts ?? {};
|
|
1307
|
+
}
|
|
1308
|
+
const AppConfigSchema = z$1.object({
|
|
1309
|
+
stackBlitzConfig: StackBlitzConfigSchema.nullable().optional().transform((appStackBlitzConfig) => {
|
|
1310
|
+
if (!appStackBlitzConfig) return workshopConfig.stackBlitzConfig ?? null;
|
|
1311
|
+
if (!workshopConfig.stackBlitzConfig) return appStackBlitzConfig;
|
|
1312
|
+
return {
|
|
1313
|
+
...workshopConfig.stackBlitzConfig,
|
|
1314
|
+
...appStackBlitzConfig
|
|
1315
|
+
};
|
|
1316
|
+
}),
|
|
1317
|
+
testTab: z$1.object({
|
|
1318
|
+
enabled: z$1.boolean().optional().default(((_a2 = workshopConfig.testTab) == null ? void 0 : _a2.enabled) ?? true)
|
|
1319
|
+
}).default({}),
|
|
1320
|
+
scripts: z$1.object({
|
|
1321
|
+
test: z$1.string().optional(),
|
|
1322
|
+
dev: z$1.string().optional()
|
|
1323
|
+
}).default({}),
|
|
1324
|
+
initialRoute: z$1.string().optional().default(workshopConfig.initialRoute)
|
|
1325
|
+
});
|
|
1326
|
+
const appConfig = {
|
|
1327
|
+
stackBlitzConfig: epicshopConfig.stackBlitzConfig,
|
|
1328
|
+
testTab: {
|
|
1329
|
+
enabled: (_b = epicshopConfig.testTab) == null ? void 0 : _b.enabled
|
|
1330
|
+
},
|
|
1331
|
+
scripts: {
|
|
1332
|
+
test: scripts.test,
|
|
1333
|
+
dev: scripts.dev
|
|
1334
|
+
},
|
|
1335
|
+
initialRoute: epicshopConfig.initialRoute
|
|
1336
|
+
};
|
|
1337
|
+
try {
|
|
1338
|
+
return AppConfigSchema.parse(appConfig);
|
|
1339
|
+
} catch (error) {
|
|
1340
|
+
if (error instanceof z$1.ZodError) {
|
|
1341
|
+
const flattenedErrors = error.flatten();
|
|
1342
|
+
const errorMessages = Object.entries(flattenedErrors.fieldErrors).map(([field, errors]) => `${field}: ${errors == null ? void 0 : errors.join(", ")}`).concat(flattenedErrors.formErrors);
|
|
1343
|
+
throw new Error(
|
|
1344
|
+
`Invalid app configuration for ${fullPath}:
|
|
1345
|
+
${errorMessages.join("\n")}`
|
|
1346
|
+
);
|
|
1347
|
+
}
|
|
1348
|
+
throw error;
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1158
1351
|
const schema = z$1.object({
|
|
1159
1352
|
NODE_ENV: z$1.enum(["production", "development", "test"]).default("development"),
|
|
1160
1353
|
EPICSHOP_GITHUB_REPO: z$1.string(),
|
|
@@ -1437,43 +1630,8 @@ async function waitForPortToBeAvailable(port2) {
|
|
|
1437
1630
|
console.error("Timed out waiting for the port to become available");
|
|
1438
1631
|
}
|
|
1439
1632
|
}
|
|
1440
|
-
const PkgSchema = z$1.object({}).passthrough();
|
|
1441
|
-
async function getPkgProp(fullPath, prop, defaultValue) {
|
|
1442
|
-
let pkg;
|
|
1443
|
-
try {
|
|
1444
|
-
pkg = PkgSchema.parse(
|
|
1445
|
-
JSON.parse(
|
|
1446
|
-
fs.readFileSync(path$1.join(fullPath, "package.json")).toString()
|
|
1447
|
-
)
|
|
1448
|
-
);
|
|
1449
|
-
} catch (error) {
|
|
1450
|
-
throw new Error(`Could not parse package.json of ${fullPath}`, {
|
|
1451
|
-
cause: error
|
|
1452
|
-
});
|
|
1453
|
-
}
|
|
1454
|
-
const propPath = prop.split(".");
|
|
1455
|
-
let value = pkg;
|
|
1456
|
-
for (const p of propPath) {
|
|
1457
|
-
value = value[p];
|
|
1458
|
-
if (value === void 0) break;
|
|
1459
|
-
}
|
|
1460
|
-
if (value === void 0 && defaultValue === void 0) {
|
|
1461
|
-
throw new Error(
|
|
1462
|
-
`Could not find required property ${prop} in package.json of ${fullPath}`
|
|
1463
|
-
);
|
|
1464
|
-
}
|
|
1465
|
-
return value ?? defaultValue;
|
|
1466
|
-
}
|
|
1467
1633
|
let initialized = false;
|
|
1468
1634
|
const workshopRoot = process.env.EPICSHOP_CONTEXT_CWD = process.env.EPICSHOP_CONTEXT_CWD ?? process.cwd();
|
|
1469
|
-
let packageJson;
|
|
1470
|
-
try {
|
|
1471
|
-
packageJson = JSON.parse(
|
|
1472
|
-
fs.readFileSync(path$1.join(workshopRoot, "package.json"), "utf8")
|
|
1473
|
-
);
|
|
1474
|
-
} catch {
|
|
1475
|
-
throw new Error(`Could not find and parse package.json at ${workshopRoot}`);
|
|
1476
|
-
}
|
|
1477
1635
|
const playgroundAppNameInfoPath = path$1.join(
|
|
1478
1636
|
workshopRoot,
|
|
1479
1637
|
"node_modules",
|
|
@@ -1481,16 +1639,6 @@ const playgroundAppNameInfoPath = path$1.join(
|
|
|
1481
1639
|
"epicshop",
|
|
1482
1640
|
"playground.json"
|
|
1483
1641
|
);
|
|
1484
|
-
const StackBlitzConfigSchema = z$1.object({
|
|
1485
|
-
// we default this to `${exerciseTitle} (${type})`
|
|
1486
|
-
title: z$1.string().optional(),
|
|
1487
|
-
// stackblitz defaults this to dev automatically
|
|
1488
|
-
startScript: z$1.string().optional(),
|
|
1489
|
-
// if no value is provided, then stackblitz defaults this to whatever
|
|
1490
|
-
// looks best based on the width of the screen
|
|
1491
|
-
view: z$1.union([z$1.literal("editor"), z$1.literal("preview"), z$1.literal("both")]).optional(),
|
|
1492
|
-
file: z$1.string().optional()
|
|
1493
|
-
});
|
|
1494
1642
|
const BaseAppSchema = z$1.object({
|
|
1495
1643
|
/** a unique identifier for the app */
|
|
1496
1644
|
name: z$1.string(),
|
|
@@ -1618,34 +1766,15 @@ function init() {
|
|
|
1618
1766
|
var _a2;
|
|
1619
1767
|
if (initialized) return;
|
|
1620
1768
|
initialized = true;
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
if (epicshop.githubRepo) {
|
|
1625
|
-
repo = epicshop.githubRepo;
|
|
1626
|
-
root = `${repo.replace(/\/$/, "")}/tree/main`;
|
|
1627
|
-
} else if (epicshop.githubRoot) {
|
|
1628
|
-
root = epicshop.githubRoot.replace(/\/$/, "");
|
|
1629
|
-
repo = root.replace(/\/(blob|tree)\/.*$/, "");
|
|
1630
|
-
} else {
|
|
1631
|
-
throw new Error(
|
|
1632
|
-
`Please set the URL of your GitHub repo in the "epicshop.githubRepo" property of the package.json.`
|
|
1633
|
-
);
|
|
1634
|
-
}
|
|
1635
|
-
if (!root.includes("/blob/") && !root.includes("/tree/")) {
|
|
1636
|
-
root = `${root.replace(/\/$/, "")}/tree/main`;
|
|
1637
|
-
}
|
|
1638
|
-
process.env.EPICSHOP_GITHUB_REPO = repo;
|
|
1639
|
-
process.env.EPICSHOP_GITHUB_ROOT = root;
|
|
1640
|
-
} catch (error) {
|
|
1641
|
-
throw new Error(
|
|
1642
|
-
`Could not set the EPICSHOP_GITHUB_ROOT environment variable. Please set it to the URL of your GitHub repo in the "epicshop.githubRoot" property of the package.json.`,
|
|
1643
|
-
{ cause: error }
|
|
1644
|
-
);
|
|
1645
|
-
}
|
|
1769
|
+
const config = getWorkshopConfig();
|
|
1770
|
+
process.env.EPICSHOP_GITHUB_REPO = config.githubRepo;
|
|
1771
|
+
process.env.EPICSHOP_GITHUB_ROOT = config.githubRoot;
|
|
1646
1772
|
init$1();
|
|
1647
1773
|
global.ENV = getEnv();
|
|
1648
1774
|
async function handleFileChanges(event, filePath) {
|
|
1775
|
+
if (filePath === path$1.join(workshopRoot, "package.json")) {
|
|
1776
|
+
bustWorkshopConfigCache();
|
|
1777
|
+
}
|
|
1649
1778
|
const apps = await getApps();
|
|
1650
1779
|
for (const app of apps) {
|
|
1651
1780
|
if (filePath.startsWith(app.fullPath)) {
|
|
@@ -1979,16 +2108,11 @@ async function findProblemDir({
|
|
|
1979
2108
|
async function getTestInfo({
|
|
1980
2109
|
fullPath
|
|
1981
2110
|
}) {
|
|
1982
|
-
const
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
"epicshop.testTab.enabled",
|
|
1988
|
-
true
|
|
1989
|
-
);
|
|
1990
|
-
if (testsEnabledGlobally === false) return { type: "none" };
|
|
1991
|
-
const testScript = hasPkgJson ? await getPkgProp(fullPath, "epicshop.scripts.test", "") : null;
|
|
2111
|
+
const {
|
|
2112
|
+
testTab: { enabled },
|
|
2113
|
+
scripts: { test: testScript }
|
|
2114
|
+
} = await getAppConfig(fullPath);
|
|
2115
|
+
if (enabled === false) return { type: "none" };
|
|
1992
2116
|
if (testScript) {
|
|
1993
2117
|
return { type: "script", script: testScript };
|
|
1994
2118
|
}
|
|
@@ -2008,10 +2132,12 @@ async function getDevInfo({
|
|
|
2008
2132
|
fullPath,
|
|
2009
2133
|
portNumber
|
|
2010
2134
|
}) {
|
|
2011
|
-
const
|
|
2012
|
-
|
|
2135
|
+
const {
|
|
2136
|
+
scripts: { dev: devScript },
|
|
2137
|
+
initialRoute
|
|
2138
|
+
} = await getAppConfig(fullPath);
|
|
2139
|
+
const hasDevScript = Boolean(devScript);
|
|
2013
2140
|
if (hasDevScript) {
|
|
2014
|
-
const initialRoute = (hasPkgJson ? await getPkgProp(fullPath, "epicshop.initialRoute", "") : "") || await getPkgProp(workshopRoot, "epicshop.initialRoute", "/");
|
|
2015
2141
|
return { type: "script", portNumber, initialRoute };
|
|
2016
2142
|
}
|
|
2017
2143
|
const indexFiles = (await fsExtra.readdir(fullPath)).filter(
|
|
@@ -2023,46 +2149,6 @@ async function getDevInfo({
|
|
|
2023
2149
|
return { type: "none" };
|
|
2024
2150
|
}
|
|
2025
2151
|
}
|
|
2026
|
-
async function getStackBlitzUrl({
|
|
2027
|
-
fullPath,
|
|
2028
|
-
title,
|
|
2029
|
-
type
|
|
2030
|
-
}) {
|
|
2031
|
-
const Schema = StackBlitzConfigSchema.nullable().optional();
|
|
2032
|
-
const appStackBlitzConfig = Schema.parse(
|
|
2033
|
-
// if there's no package.json this will throw. If that's the case, we can't use stackblitz
|
|
2034
|
-
// https://discord.com/channels/364486390102097930/1260979618240790578
|
|
2035
|
-
await getPkgProp(fullPath, "epicshop.stackBlitzConfig", {}).catch(
|
|
2036
|
-
() => null
|
|
2037
|
-
)
|
|
2038
|
-
);
|
|
2039
|
-
if (appStackBlitzConfig === null) return null;
|
|
2040
|
-
const workshopStackBlitzConfig = Schema.parse(
|
|
2041
|
-
await getPkgProp(workshopRoot, "epicshop.stackBlitzConfig", {})
|
|
2042
|
-
);
|
|
2043
|
-
if (workshopStackBlitzConfig === null) return null;
|
|
2044
|
-
let githubRootUrlString = ENV.EPICSHOP_GITHUB_REPO;
|
|
2045
|
-
if (!githubRootUrlString) return null;
|
|
2046
|
-
if (!githubRootUrlString.includes("/blob/") || !githubRootUrlString.includes("/tree/")) {
|
|
2047
|
-
githubRootUrlString = `${githubRootUrlString.replace(/\/$/, "")}/blob/main`;
|
|
2048
|
-
}
|
|
2049
|
-
const githubRootUrl = new URL(
|
|
2050
|
-
githubRootUrlString.replace(/\/blob\//, "/tree/")
|
|
2051
|
-
);
|
|
2052
|
-
const githubPart = githubRootUrl.pathname;
|
|
2053
|
-
const config = {
|
|
2054
|
-
...workshopStackBlitzConfig,
|
|
2055
|
-
...appStackBlitzConfig,
|
|
2056
|
-
title: (appStackBlitzConfig == null ? void 0 : appStackBlitzConfig.title) ?? `${title} (${type})`
|
|
2057
|
-
};
|
|
2058
|
-
const params = new URLSearchParams(config);
|
|
2059
|
-
const relativePath = fullPath.replace(`${workshopRoot}${path$1.sep}`, "");
|
|
2060
|
-
const stackBlitzUrl = new URL(
|
|
2061
|
-
`/github${githubPart}/${relativePath}?${params}`,
|
|
2062
|
-
"https://stackblitz.com"
|
|
2063
|
-
);
|
|
2064
|
-
return stackBlitzUrl.toString();
|
|
2065
|
-
}
|
|
2066
2152
|
async function getPlaygroundApp({
|
|
2067
2153
|
timings,
|
|
2068
2154
|
request
|
|
@@ -2560,47 +2646,6 @@ function getAppDisplayName(a, allApps) {
|
|
|
2560
2646
|
}
|
|
2561
2647
|
return displayName;
|
|
2562
2648
|
}
|
|
2563
|
-
async function getWorkshopTitle() {
|
|
2564
|
-
const title = await getPkgProp(workshopRoot, "epicshop.title");
|
|
2565
|
-
if (!title) {
|
|
2566
|
-
throw new Error(
|
|
2567
|
-
`Workshop title not found. Make sure the root of the workshop has "epicshop" with a "title" property in the package.json. ${workshopRoot}`
|
|
2568
|
-
);
|
|
2569
|
-
}
|
|
2570
|
-
return title;
|
|
2571
|
-
}
|
|
2572
|
-
async function getWorkshopSubtitle() {
|
|
2573
|
-
return await getPkgProp(workshopRoot, "epicshop.subtitle", "");
|
|
2574
|
-
}
|
|
2575
|
-
async function getWorkshopInstructor() {
|
|
2576
|
-
const InstructorSchema = z$1.object({
|
|
2577
|
-
name: z$1.string().optional(),
|
|
2578
|
-
avatar: z$1.string().optional(),
|
|
2579
|
-
"𝕏": z$1.string().optional(),
|
|
2580
|
-
// alias because 𝕏 is hard to type 😅
|
|
2581
|
-
xHandle: z$1.string().optional()
|
|
2582
|
-
}).optional();
|
|
2583
|
-
const instructor = InstructorSchema.parse(
|
|
2584
|
-
await getPkgProp(workshopRoot, "epicshop.instructor")
|
|
2585
|
-
);
|
|
2586
|
-
return instructor ? { ...instructor, "𝕏": instructor.xHandle } : void 0;
|
|
2587
|
-
}
|
|
2588
|
-
async function getEpicWorkshopHost() {
|
|
2589
|
-
const epicWorkshopHost = await getPkgProp(
|
|
2590
|
-
workshopRoot,
|
|
2591
|
-
"epicshop.epicWorkshopHost",
|
|
2592
|
-
"www.epicweb.dev"
|
|
2593
|
-
);
|
|
2594
|
-
return epicWorkshopHost;
|
|
2595
|
-
}
|
|
2596
|
-
async function getEpicWorkshopSlug() {
|
|
2597
|
-
const epicWorkshopSlug = await getPkgProp(
|
|
2598
|
-
workshopRoot,
|
|
2599
|
-
"epicshop.epicWorkshopSlug",
|
|
2600
|
-
""
|
|
2601
|
-
);
|
|
2602
|
-
return epicWorkshopSlug || null;
|
|
2603
|
-
}
|
|
2604
2649
|
async function getWorkshopInstructions({
|
|
2605
2650
|
request
|
|
2606
2651
|
} = {}) {
|
|
@@ -3471,7 +3516,7 @@ async function getEpicProgress({
|
|
|
3471
3516
|
} = {}) {
|
|
3472
3517
|
if (ENV.EPICSHOP_DEPLOYED) return [];
|
|
3473
3518
|
const authInfo = await getAuthInfo();
|
|
3474
|
-
const epicWorkshopHost =
|
|
3519
|
+
const { epicWorkshopHost } = getWorkshopConfig();
|
|
3475
3520
|
if (!authInfo) return [];
|
|
3476
3521
|
const tokenPart = md5(authInfo.tokenSet.access_token);
|
|
3477
3522
|
const EpicProgressSchema = z$1.array(
|
|
@@ -3514,7 +3559,7 @@ async function getProgress({
|
|
|
3514
3559
|
if (ENV.EPICSHOP_DEPLOYED) return [];
|
|
3515
3560
|
const authInfo = await getAuthInfo();
|
|
3516
3561
|
if (!authInfo) return [];
|
|
3517
|
-
const epicWorkshopSlug =
|
|
3562
|
+
const { epicWorkshopSlug } = getWorkshopConfig();
|
|
3518
3563
|
if (!epicWorkshopSlug) return [];
|
|
3519
3564
|
const [
|
|
3520
3565
|
workshopData,
|
|
@@ -3613,7 +3658,7 @@ async function updateProgress({ lessonSlug, complete }, {
|
|
|
3613
3658
|
if (!authInfo) {
|
|
3614
3659
|
return { status: "error", error: "not authenticated" };
|
|
3615
3660
|
}
|
|
3616
|
-
const epicWorkshopHost =
|
|
3661
|
+
const { epicWorkshopHost } = getWorkshopConfig();
|
|
3617
3662
|
const response = await fetch(`https://${epicWorkshopHost}/api/progress`, {
|
|
3618
3663
|
method: "POST",
|
|
3619
3664
|
headers: {
|
|
@@ -3651,7 +3696,7 @@ async function getWorkshopData(epicWorkshopSlug, {
|
|
|
3651
3696
|
if (ENV.EPICSHOP_DEPLOYED) return { sections: [] };
|
|
3652
3697
|
const authInfo = await getAuthInfo();
|
|
3653
3698
|
if (!authInfo) return { sections: [] };
|
|
3654
|
-
const epicWorkshopHost =
|
|
3699
|
+
const { epicWorkshopHost } = getWorkshopConfig();
|
|
3655
3700
|
return cachified({
|
|
3656
3701
|
key: `epic-workshop-data:${epicWorkshopHost}:${epicWorkshopSlug}`,
|
|
3657
3702
|
cache: fsCache,
|
|
@@ -3901,27 +3946,18 @@ const meta$5 = ({ data }) => {
|
|
|
3901
3946
|
};
|
|
3902
3947
|
async function loader$y({ request }) {
|
|
3903
3948
|
const timings = makeTimings("rootLoader");
|
|
3949
|
+
const {
|
|
3950
|
+
title: workshopTitle,
|
|
3951
|
+
subtitle: workshopSubtitle,
|
|
3952
|
+
instructor,
|
|
3953
|
+
onboardingVideo
|
|
3954
|
+
} = getWorkshopConfig();
|
|
3904
3955
|
const onboarding = await readOnboardingData();
|
|
3905
|
-
if (!ENV.EPICSHOP_DEPLOYED && !(onboarding == null ? void 0 : onboarding.
|
|
3956
|
+
if (!ENV.EPICSHOP_DEPLOYED && !(onboarding == null ? void 0 : onboarding.tourVideosWatched.includes(onboardingVideo))) {
|
|
3906
3957
|
if (new URL(request.url).pathname !== "/onboarding") {
|
|
3907
3958
|
throw redirect("/onboarding");
|
|
3908
3959
|
}
|
|
3909
3960
|
}
|
|
3910
|
-
const workshopTitle = await time(() => getWorkshopTitle(), {
|
|
3911
|
-
type: "getWorkshopTitle",
|
|
3912
|
-
desc: "getWorkshopTitle in root",
|
|
3913
|
-
timings
|
|
3914
|
-
});
|
|
3915
|
-
const workshopSubtitle = await time(() => getWorkshopSubtitle(), {
|
|
3916
|
-
type: "getWorkshopSubtitle",
|
|
3917
|
-
desc: "getWorkshopSubtitle in root",
|
|
3918
|
-
timings
|
|
3919
|
-
});
|
|
3920
|
-
const instructor = await time(() => getWorkshopInstructor(), {
|
|
3921
|
-
type: "getInstructor",
|
|
3922
|
-
desc: "getInstructor in root",
|
|
3923
|
-
timings
|
|
3924
|
-
});
|
|
3925
3961
|
const preferences = await getPreferences();
|
|
3926
3962
|
const progress = await getProgress({ timings }).catch((e) => {
|
|
3927
3963
|
console.error("Failed to get progress", e);
|
|
@@ -4555,9 +4591,9 @@ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
4555
4591
|
async function loader$w({ request }) {
|
|
4556
4592
|
var _a2;
|
|
4557
4593
|
const timings = makeTimings("appLayoutLoader");
|
|
4558
|
-
const
|
|
4594
|
+
const { title: workshopTitle } = getWorkshopConfig();
|
|
4595
|
+
const [exercises, playgroundAppName] = await Promise.all([
|
|
4559
4596
|
getExercises({ request, timings }),
|
|
4560
|
-
getWorkshopTitle(),
|
|
4561
4597
|
getPlaygroundAppName()
|
|
4562
4598
|
]);
|
|
4563
4599
|
const playground = {
|
|
@@ -6235,7 +6271,7 @@ async function loader$q({ request, params }) {
|
|
|
6235
6271
|
);
|
|
6236
6272
|
}
|
|
6237
6273
|
const appTitle = app.title;
|
|
6238
|
-
const workshopTitle =
|
|
6274
|
+
const { title: workshopTitle } = getWorkshopConfig();
|
|
6239
6275
|
const baseAppTitle = isExerciseStepApp(baseApp) ? [
|
|
6240
6276
|
`${baseApp.stepNumber.toString().padStart(2, "0")}. ${baseApp.title}`,
|
|
6241
6277
|
`${baseApp.exerciseNumber.toString().padStart(2, "0")}. ${((_a2 = await getExercise(baseApp.exerciseNumber, { request, timings })) == null ? void 0 : _a2.title) ?? "Unknown"}`,
|
|
@@ -6374,7 +6410,7 @@ ${testScriptTag}`;
|
|
|
6374
6410
|
);
|
|
6375
6411
|
const indexCss = indexFiles.find((file) => file.endsWith("index.css"));
|
|
6376
6412
|
const appTitle = app.title;
|
|
6377
|
-
const workshopTitle =
|
|
6413
|
+
const { title: workshopTitle } = getWorkshopConfig();
|
|
6378
6414
|
const title = (isExerciseStepApp(app) ? [
|
|
6379
6415
|
isProblemApp(app) ? "🧪💪" : isSolutionApp(app) ? "🧪🏁" : null,
|
|
6380
6416
|
`${app.stepNumber.toString().padStart(2, "0")}. ${app.title}`,
|
|
@@ -8023,18 +8059,12 @@ const meta$4 = ({
|
|
|
8023
8059
|
async function loader$n({ request, params }) {
|
|
8024
8060
|
const timings = makeTimings("exerciseNumberLoader");
|
|
8025
8061
|
invariantResponse(params.exerciseNumber, "exerciseNumber is required");
|
|
8026
|
-
const
|
|
8027
|
-
|
|
8028
|
-
|
|
8029
|
-
|
|
8030
|
-
|
|
8031
|
-
|
|
8032
|
-
time(() => getWorkshopTitle(), {
|
|
8033
|
-
timings,
|
|
8034
|
-
type: "getWorkshopTitle",
|
|
8035
|
-
desc: "getWorkshopTitle in $exerciseNumber.tsx"
|
|
8036
|
-
})
|
|
8037
|
-
]);
|
|
8062
|
+
const { title: workshopTitle } = getWorkshopConfig();
|
|
8063
|
+
const exercises = await time(() => getExercises({ request, timings }), {
|
|
8064
|
+
timings,
|
|
8065
|
+
type: "getExercises",
|
|
8066
|
+
desc: "getExercises in $exerciseNumber.tsx"
|
|
8067
|
+
});
|
|
8038
8068
|
const exercise = exercises.find(
|
|
8039
8069
|
(e) => e.exerciseNumber === Number(params.exerciseNumber)
|
|
8040
8070
|
);
|
|
@@ -8172,10 +8202,8 @@ const route12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
8172
8202
|
async function loader$m({ request, params }) {
|
|
8173
8203
|
const timings = makeTimings("stepLoader");
|
|
8174
8204
|
invariantResponse(params.exerciseNumber, "exerciseNumber is required");
|
|
8175
|
-
const
|
|
8176
|
-
|
|
8177
|
-
getWorkshopTitle()
|
|
8178
|
-
]);
|
|
8205
|
+
const exercises = await getExercises({ request, timings });
|
|
8206
|
+
const { title: workshopTitle } = getWorkshopConfig();
|
|
8179
8207
|
const exercise = exercises.find(
|
|
8180
8208
|
(e) => e.exerciseNumber === Number(params.exerciseNumber)
|
|
8181
8209
|
);
|
|
@@ -8415,7 +8443,7 @@ async function copyUnignoredFiles(srcDir, destDir, ignoreList) {
|
|
|
8415
8443
|
await cachified({
|
|
8416
8444
|
key,
|
|
8417
8445
|
cache: diffCodeCache,
|
|
8418
|
-
forceFresh: getForceFreshForDir(
|
|
8446
|
+
forceFresh: getForceFreshForDir(diffCodeCache.get(key), srcDir),
|
|
8419
8447
|
async getFreshValue() {
|
|
8420
8448
|
const ig = ignore().add(ignoreList);
|
|
8421
8449
|
await fsExtra.remove(destDir);
|
|
@@ -9203,7 +9231,9 @@ function LinkToApp({
|
|
|
9203
9231
|
) }) : null
|
|
9204
9232
|
] });
|
|
9205
9233
|
}
|
|
9206
|
-
function TouchedFiles(
|
|
9234
|
+
function TouchedFiles({
|
|
9235
|
+
diffFilesPromise
|
|
9236
|
+
}) {
|
|
9207
9237
|
var _a2, _b;
|
|
9208
9238
|
const data = useLoaderData();
|
|
9209
9239
|
const [open, setOpen] = React.useState(false);
|
|
@@ -9241,9 +9271,9 @@ function TouchedFiles() {
|
|
|
9241
9271
|
children: /* @__PURE__ */ jsx(
|
|
9242
9272
|
Await,
|
|
9243
9273
|
{
|
|
9244
|
-
resolve:
|
|
9274
|
+
resolve: diffFilesPromise,
|
|
9245
9275
|
errorElement: /* @__PURE__ */ jsx("div", { className: "text-foreground-danger", children: "Something went wrong." }),
|
|
9246
|
-
children: (
|
|
9276
|
+
children: (diffFiles) => {
|
|
9247
9277
|
if (!diffFiles) {
|
|
9248
9278
|
return /* @__PURE__ */ jsx("p", { className: "text-foreground-danger", children: "Unable to determine diff" });
|
|
9249
9279
|
}
|
|
@@ -9332,7 +9362,8 @@ const meta$3 = ({
|
|
|
9332
9362
|
async function loader$l({ request, params }) {
|
|
9333
9363
|
var _a2, _b;
|
|
9334
9364
|
const timings = makeTimings("exerciseStepTypeLoader");
|
|
9335
|
-
const
|
|
9365
|
+
const url = new URL(request.url);
|
|
9366
|
+
const { title: workshopTitle } = getWorkshopConfig();
|
|
9336
9367
|
const cacheOptions = { request, timings };
|
|
9337
9368
|
const exerciseStepApp = await requireExerciseApp(params, cacheOptions);
|
|
9338
9369
|
const exercise = await requireExercise(
|
|
@@ -9393,7 +9424,6 @@ async function loader$l({ request, params }) {
|
|
|
9393
9424
|
const nextApp = await getNextExerciseApp(exerciseStepApp, cacheOptions);
|
|
9394
9425
|
const prevApp = await getPrevExerciseApp(exerciseStepApp, cacheOptions);
|
|
9395
9426
|
const articleId = `workshop-${slugify(workshopTitle)}-${exercise.exerciseNumber}-${exerciseStepApp.stepNumber}-${exerciseStepApp.type}`;
|
|
9396
|
-
const url = new URL(request.url);
|
|
9397
9427
|
const subroute = url.pathname.split(
|
|
9398
9428
|
`/exercise/${params.exerciseNumber}/${params.stepNumber}/${params.type}/`
|
|
9399
9429
|
)[1];
|
|
@@ -9442,7 +9472,14 @@ async function loader$l({ request, params }) {
|
|
|
9442
9472
|
name: solutionApp.name,
|
|
9443
9473
|
fullPath: solutionApp.fullPath,
|
|
9444
9474
|
dev: solutionApp.dev
|
|
9445
|
-
} : null
|
|
9475
|
+
} : null,
|
|
9476
|
+
diffFiles: problemApp && solutionApp ? getDiffFiles(problemApp, solutionApp, {
|
|
9477
|
+
...cacheOptions,
|
|
9478
|
+
forceFresh: url.searchParams.get("forceFresh") === "diff"
|
|
9479
|
+
}).catch((e) => {
|
|
9480
|
+
console.error(e);
|
|
9481
|
+
return "There was a problem generating the diff (check the terminal output)";
|
|
9482
|
+
}) : "No diff available"
|
|
9446
9483
|
},
|
|
9447
9484
|
{
|
|
9448
9485
|
headers: {
|
|
@@ -9540,7 +9577,7 @@ function ExercisePartRoute$1() {
|
|
|
9540
9577
|
}
|
|
9541
9578
|
) : null,
|
|
9542
9579
|
/* @__PURE__ */ jsxs("div", { className: "flex h-16 justify-between border-b-4 border-t lg:border-b-0", children: [
|
|
9543
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { className: "h-full", children: /* @__PURE__ */ jsx(TouchedFiles, {}) }) }),
|
|
9580
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("div", { className: "h-full", children: /* @__PURE__ */ jsx(TouchedFiles, { diffFilesPromise: data.diffFiles }) }) }),
|
|
9544
9581
|
/* @__PURE__ */ jsx(
|
|
9545
9582
|
EditFileOnGitHub,
|
|
9546
9583
|
{
|
|
@@ -11479,31 +11516,20 @@ async function loader$i({ request, params }) {
|
|
|
11479
11516
|
return {
|
|
11480
11517
|
app1: app1 == null ? void 0 : app1.name,
|
|
11481
11518
|
app2: app2 == null ? void 0 : app2.name,
|
|
11482
|
-
diffCode: null
|
|
11483
|
-
diffFiles: null
|
|
11519
|
+
diffCode: null
|
|
11484
11520
|
};
|
|
11485
11521
|
}
|
|
11486
|
-
const
|
|
11487
|
-
|
|
11488
|
-
|
|
11489
|
-
|
|
11490
|
-
|
|
11491
|
-
|
|
11492
|
-
|
|
11493
|
-
}),
|
|
11494
|
-
problemApp && solutionApp ? getDiffFiles(problemApp, solutionApp, {
|
|
11495
|
-
...cacheOptions,
|
|
11496
|
-
forceFresh: searchParams.get("forceFresh") === "diff"
|
|
11497
|
-
}).catch((e) => {
|
|
11498
|
-
console.error(e);
|
|
11499
|
-
return "There was a problem generating the diff";
|
|
11500
|
-
}) : "No diff available"
|
|
11501
|
-
]);
|
|
11522
|
+
const diffCode = await getDiffCode(app1, app2, {
|
|
11523
|
+
...cacheOptions,
|
|
11524
|
+
forceFresh: searchParams.get("forceFresh") === "diff"
|
|
11525
|
+
}).catch((e) => {
|
|
11526
|
+
console.error(e);
|
|
11527
|
+
return null;
|
|
11528
|
+
});
|
|
11502
11529
|
return {
|
|
11503
11530
|
app1: app1.name,
|
|
11504
11531
|
app2: app2.name,
|
|
11505
|
-
diffCode
|
|
11506
|
-
diffFiles
|
|
11532
|
+
diffCode
|
|
11507
11533
|
};
|
|
11508
11534
|
}
|
|
11509
11535
|
return defer(
|
|
@@ -11818,13 +11844,9 @@ async function loader$f({ request, params }) {
|
|
|
11818
11844
|
if (!exercise) {
|
|
11819
11845
|
throw new Response("Not found", { status: 404 });
|
|
11820
11846
|
}
|
|
11821
|
-
const
|
|
11822
|
-
const exerciseFormTemplate =
|
|
11823
|
-
|
|
11824
|
-
"epicshop.forms.exercise",
|
|
11825
|
-
`https://docs.google.com/forms/d/e/1FAIpQLSf3o9xyjQepTlOTH5Z7ZwkeSTdXh6YWI_RGc9KiyD3oUN0p6w/viewform?hl=en&embedded=true&entry.1836176234={workshopTitle}&entry.428900931={exerciseTitle}`
|
|
11826
|
-
);
|
|
11827
|
-
const exerciseFormEmbedUrl = exerciseFormTemplate.replace("{workshopTitle}", encodeURIComponent(workshopTitle)).replace("{exerciseTitle}", encodeURIComponent(exercise.title));
|
|
11847
|
+
const workshopConfig = getWorkshopConfig();
|
|
11848
|
+
const exerciseFormTemplate = workshopConfig.forms.exercise;
|
|
11849
|
+
const exerciseFormEmbedUrl = exerciseFormTemplate.replace("{workshopTitle}", encodeURIComponent(workshopConfig.title)).replace("{exerciseTitle}", encodeURIComponent(exercise.title));
|
|
11828
11850
|
const nextExercise = await getExercise(exercise.exerciseNumber + 1, {
|
|
11829
11851
|
timings,
|
|
11830
11852
|
request
|
|
@@ -11838,11 +11860,11 @@ async function loader$f({ request, params }) {
|
|
|
11838
11860
|
const apps = await getApps({ request, timings });
|
|
11839
11861
|
const exerciseApps = apps.filter(isExerciseStepApp).filter((app) => app.exerciseNumber === exercise.exerciseNumber);
|
|
11840
11862
|
const prevApp = exerciseApps[exerciseApps.length - 1];
|
|
11841
|
-
const articleId = `workshop-${slugify(
|
|
11863
|
+
const articleId = `workshop-${slugify(workshopConfig.title)}-${exercise.exerciseNumber}-finished`;
|
|
11842
11864
|
return defer(
|
|
11843
11865
|
{
|
|
11844
11866
|
articleId,
|
|
11845
|
-
workshopTitle,
|
|
11867
|
+
workshopTitle: workshopConfig.title,
|
|
11846
11868
|
exercise,
|
|
11847
11869
|
exerciseFormEmbedUrl,
|
|
11848
11870
|
epicVideoInfosPromise: getEpicVideoInfos(
|
|
@@ -12003,12 +12025,9 @@ async function loader$e({ request }) {
|
|
|
12003
12025
|
desc: "compileMdx in finished"
|
|
12004
12026
|
});
|
|
12005
12027
|
const lastExercises = exercises[exercises.length - 1];
|
|
12006
|
-
const
|
|
12007
|
-
const
|
|
12008
|
-
|
|
12009
|
-
"epicshop.forms.workshop",
|
|
12010
|
-
"https://docs.google.com/forms/d/e/1FAIpQLSdRmj9p8-5zyoqRzxp3UpqSbC3aFkweXvvJIKes0a5s894gzg/viewform?hl=en&embedded=true&entry.2123647600={workshopTitle}"
|
|
12011
|
-
);
|
|
12028
|
+
const workshopConfig = getWorkshopConfig();
|
|
12029
|
+
const workshopTitle = workshopConfig.title;
|
|
12030
|
+
const workshopFormTemplate = workshopConfig.forms.workshop;
|
|
12012
12031
|
const workshopFormEmbedUrl = workshopFormTemplate.replace(
|
|
12013
12032
|
"{workshopTitle}",
|
|
12014
12033
|
encodeURIComponent(workshopTitle)
|
|
@@ -12137,12 +12156,8 @@ const route20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
12137
12156
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
12138
12157
|
async function loader$d({ request }) {
|
|
12139
12158
|
const timings = makeTimings("indexLoader");
|
|
12140
|
-
const
|
|
12141
|
-
|
|
12142
|
-
timings,
|
|
12143
|
-
type: "getWorkshopTitle",
|
|
12144
|
-
desc: "getWorkshopTitle in index"
|
|
12145
|
-
}),
|
|
12159
|
+
const { title } = getWorkshopConfig();
|
|
12160
|
+
const [exercises, workshopReadme] = await Promise.all([
|
|
12146
12161
|
time(() => getExercises({ request, timings }), {
|
|
12147
12162
|
timings,
|
|
12148
12163
|
type: "getExercises",
|
|
@@ -12275,7 +12290,7 @@ const EVENTS = {
|
|
|
12275
12290
|
const authEmitter = remember("authEmitter", () => new EventEmitter());
|
|
12276
12291
|
authEmitter.removeAllListeners();
|
|
12277
12292
|
async function registerDevice() {
|
|
12278
|
-
const epicWorkshopHost =
|
|
12293
|
+
const { epicWorkshopHost } = getWorkshopConfig();
|
|
12279
12294
|
const { ISSUER = `https://${epicWorkshopHost}/oauth` } = process.env;
|
|
12280
12295
|
const GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
|
|
12281
12296
|
try {
|
|
@@ -12593,7 +12608,7 @@ const meta = ({
|
|
|
12593
12608
|
async function loader$a({ request }) {
|
|
12594
12609
|
ensureUndeployed();
|
|
12595
12610
|
const timings = makeTimings("adminLoader");
|
|
12596
|
-
const workshopSlug =
|
|
12611
|
+
const workshopSlug = getWorkshopConfig().epicWorkshopSlug ?? "Unkown";
|
|
12597
12612
|
const apps = (await getApps({ request, timings })).filter(
|
|
12598
12613
|
(a, i, ar) => ar.findIndex((b) => a.name === b.name) === i
|
|
12599
12614
|
);
|
|
@@ -12942,17 +12957,17 @@ const HEIGHT = 630;
|
|
|
12942
12957
|
async function loader$4({ request }) {
|
|
12943
12958
|
const timings = makeTimings("og", "og image loader");
|
|
12944
12959
|
const url = new URL(request.url);
|
|
12945
|
-
const
|
|
12946
|
-
const title = url.searchParams.get("title") ||
|
|
12947
|
-
const subtitle = url.searchParams.get("subtitle") ||
|
|
12960
|
+
const workshopConfig = getWorkshopConfig();
|
|
12961
|
+
const title = url.searchParams.get("title") || workshopConfig.title;
|
|
12962
|
+
const subtitle = url.searchParams.get("subtitle") || workshopConfig.subtitle;
|
|
12948
12963
|
const urlPathname = url.searchParams.get("urlPathname") || "";
|
|
12949
12964
|
const element = /* @__PURE__ */ jsx(
|
|
12950
12965
|
OgLayout,
|
|
12951
12966
|
{
|
|
12952
12967
|
request,
|
|
12953
|
-
instructor:
|
|
12968
|
+
instructor: workshopConfig.instructor,
|
|
12954
12969
|
urlPathname,
|
|
12955
|
-
workshopTitle:
|
|
12970
|
+
workshopTitle: workshopConfig.title === title ? null : workshopConfig.title,
|
|
12956
12971
|
children: /* @__PURE__ */ jsxs(
|
|
12957
12972
|
"div",
|
|
12958
12973
|
{
|
|
@@ -13341,10 +13356,10 @@ const handle = {
|
|
|
13341
13356
|
};
|
|
13342
13357
|
async function loader$3({ request }) {
|
|
13343
13358
|
const timings = makeTimings("onboarding");
|
|
13344
|
-
const
|
|
13345
|
-
const videoInfos = getEpicVideoInfos([
|
|
13359
|
+
const { onboardingVideo } = getWorkshopConfig();
|
|
13360
|
+
const videoInfos = getEpicVideoInfos([onboardingVideo], { request, timings });
|
|
13346
13361
|
return defer(
|
|
13347
|
-
{
|
|
13362
|
+
{ onboardingVideo, videoInfos },
|
|
13348
13363
|
{ headers: { "Server-Timing": timings.toString() } }
|
|
13349
13364
|
);
|
|
13350
13365
|
}
|
|
@@ -13358,7 +13373,8 @@ async function action({ request }) {
|
|
|
13358
13373
|
const data = await request.formData();
|
|
13359
13374
|
const intent = data.get("intent");
|
|
13360
13375
|
invariantResponse(intent === "complete", "Invalid intent");
|
|
13361
|
-
|
|
13376
|
+
const { onboardingVideo } = getWorkshopConfig();
|
|
13377
|
+
await markOnboardingVideoWatched(onboardingVideo);
|
|
13362
13378
|
throw redirect("/account");
|
|
13363
13379
|
}
|
|
13364
13380
|
function Onboarding() {
|
|
@@ -13372,7 +13388,7 @@ function Onboarding() {
|
|
|
13372
13388
|
/* @__PURE__ */ jsx("strong", { children: "you must watch the tour video" }),
|
|
13373
13389
|
"! 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"
|
|
13374
13390
|
] }),
|
|
13375
|
-
/* @__PURE__ */ jsx("div", { className: "w-[780px] max-w-full", children: /* @__PURE__ */ jsx(EpicVideoInfoProvider, { epicVideoInfosPromise: data.videoInfos, children: /* @__PURE__ */ jsx(DeferredEpicVideo, { url: data.
|
|
13391
|
+
/* @__PURE__ */ jsx("div", { className: "w-[780px] max-w-full", children: /* @__PURE__ */ jsx(EpicVideoInfoProvider, { epicVideoInfosPromise: data.videoInfos, children: /* @__PURE__ */ jsx(DeferredEpicVideo, { url: data.onboardingVideo }) }) })
|
|
13376
13392
|
] }),
|
|
13377
13393
|
/* @__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!" }) })
|
|
13378
13394
|
] });
|
|
@@ -13429,7 +13445,7 @@ const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
13429
13445
|
__proto__: null,
|
|
13430
13446
|
loader
|
|
13431
13447
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
13432
|
-
const serverManifest = { "entry": { "module": "/assets/entry.client-3M2p-8I3.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-Tcnfz99O.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-hydrated-Citou692.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-B-hHvmeV.js", "/assets/index-BATSX33w.js", "/assets/presence-Cr--lRCr.js", "/assets/seo-pBpFCWsy.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/_-DbrWZazo.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/error-boundary-DDTvdkB4.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-AgYGL72C.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-hydrated-Citou692.js", "/assets/index-BXWoOGxB.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.js", "/assets/progress-BsY6hGPp.js", "/assets/index-BATSX33w.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-7o6O4ruO.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/button-BklqyTPS.js", "/assets/tooltip-BiHTe_7F.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.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-K6Dvbx-E.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+/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-CHP4_JLJ.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/user-D6tTg1yS.js", "/assets/discord-Dq4e30wV.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-BUs3av-e.js", "imports": ["/assets/index-1cKOJFpX.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-Cq0nozYz.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/seo-pBpFCWsy.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-B5pmJ29o.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.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-DLVrpOki.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/seo-pBpFCWsy.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-BiWJY58g.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-BATSX33w.js", "/assets/preview-CqrRe2BV.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-Dm1ll1kT.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-M0kcP-mP.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/button-BklqyTPS.js", "/assets/diff-CpFxuKA2.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/discord-Dq4e30wV.js", "/assets/index-B-hHvmeV.js", "/assets/tests-CmNNBElK.js", "/assets/preview-CqrRe2BV.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-D9HsTvpe.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/index-BATSX33w.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/tests-CmNNBElK.js"], "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-Q9qnPuZX.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/seo-pBpFCWsy.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-Bm-bCUU2.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-BsY6hGPp.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-Tfdnz1AB.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.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-4cvVFzF8.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.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-hcqGIpir.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-C8uU4Hwj.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/progress-BsY6hGPp.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-DP2rzg_V.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-l0sNRNKZ.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-Cw8ktQ1-.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-M0kcP-mP.js", "/assets/diff-CpFxuKA2.js", "/assets/nav-chevrons-B82nbdyj.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-Bib-wh6d.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/button-BklqyTPS.js", "/assets/epic-video-iluUs1-s.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-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [] } }, "url": "/assets/manifest-746b2907.js", "version": "746b2907" };
|
|
13448
|
+
const serverManifest = { "entry": { "module": "/assets/entry.client-3M2p-8I3.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-Tcnfz99O.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-hydrated-Citou692.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-B-hHvmeV.js", "/assets/index-BATSX33w.js", "/assets/presence-Cr--lRCr.js", "/assets/seo-pBpFCWsy.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/_-DbrWZazo.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/error-boundary-DDTvdkB4.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-AgYGL72C.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-hydrated-Citou692.js", "/assets/index-BXWoOGxB.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.js", "/assets/progress-BsY6hGPp.js", "/assets/index-BATSX33w.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-7o6O4ruO.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/button-BklqyTPS.js", "/assets/tooltip-BiHTe_7F.js", "/assets/user-D6tTg1yS.js", "/assets/presence-Cr--lRCr.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+/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-CHP4_JLJ.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/user-D6tTg1yS.js", "/assets/discord-Dq4e30wV.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-BUs3av-e.js", "imports": ["/assets/index-1cKOJFpX.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-Cq0nozYz.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/seo-pBpFCWsy.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-B5pmJ29o.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.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-BocZ2xWF.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/seo-pBpFCWsy.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-BiWJY58g.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-BATSX33w.js", "/assets/preview-CqrRe2BV.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-Dm1ll1kT.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-M0kcP-mP.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/button-BklqyTPS.js", "/assets/diff-CpFxuKA2.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/discord-Dq4e30wV.js", "/assets/index-B-hHvmeV.js", "/assets/tests-CmNNBElK.js", "/assets/preview-CqrRe2BV.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-D9HsTvpe.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/index-BATSX33w.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-Cdy8VlVD.js", "/assets/tests-CmNNBElK.js"], "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-Q9qnPuZX.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.js", "/assets/seo-pBpFCWsy.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-Bm-bCUU2.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-B82nbdyj.js", "/assets/mdx-M0kcP-mP.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-BsY6hGPp.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-Tfdnz1AB.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/clsx-B-dksMZM.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-DDTvdkB4.js", "/assets/mdx-M0kcP-mP.js", "/assets/progress-BsY6hGPp.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-4cvVFzF8.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/button-BklqyTPS.js", "/assets/loading-C5uX0jJw.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-hcqGIpir.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.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-C8uU4Hwj.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/progress-BsY6hGPp.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-DP2rzg_V.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-l0sNRNKZ.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-Cw8ktQ1-.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/tooltip-BiHTe_7F.js", "/assets/index-BXWoOGxB.js", "/assets/index-hogig2HK.js", "/assets/request-info-CEhUGODY.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/epic-video-iluUs1-s.js", "/assets/progress-bar-CSvo1ZXP.js", "/assets/accordion-BroSqIct.js", "/assets/mdx-M0kcP-mP.js", "/assets/diff-CpFxuKA2.js", "/assets/nav-chevrons-B82nbdyj.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-CnmE4HLR.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/clsx-B-dksMZM.js", "/assets/components-CME-nGId.js", "/assets/misc-ENVX3CWf.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-BiHTe_7F.js", "/assets/client-hints-DNUUFGmB.js", "/assets/index-BATSX33w.js", "/assets/loading-C5uX0jJw.js", "/assets/user-D6tTg1yS.js", "/assets/button-BklqyTPS.js", "/assets/epic-video-iluUs1-s.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/update-mdx-cache": { "id": "routes/update-mdx-cache", "parentId": "root", "path": "update-mdx-cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/update-mdx-cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/video-player/index": { "id": "routes/video-player/index", "parentId": "root", "path": "video-player", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-4a3cf2ec.js", "version": "4a3cf2ec" };
|
|
13433
13449
|
const mode = "production";
|
|
13434
13450
|
const assetsBuildDirectory = "build/client";
|
|
13435
13451
|
const basename = "/";
|