@epic-web/workshop-app 4.28.6 → 5.0.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/_layout-DnttUdzs.js +2 -0
- package/build/client/assets/_layout-DnttUdzs.js.map +1 -0
- package/build/client/assets/{manifest-1d60a768.js → manifest-e53d022a.js} +1 -1
- package/build/client/assets/{root-BOrI36ez.js → root-9wVBEzOq.js} +2 -2
- package/build/client/assets/{root-BOrI36ez.js.map → root-9wVBEzOq.js.map} +1 -1
- package/build/client/assets/tailwind-B9pSujyx.css +1 -0
- package/build/server/index.js +450 -981
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/build/client/assets/_layout-DZWGV4Uf.js +0 -2
- package/build/client/assets/_layout-DZWGV4Uf.js.map +0 -1
- package/build/client/assets/tailwind-CFrdHbaR.css +0 -1
- package/build/client/assets/update-mdx-cache-l0sNRNKZ.js +0 -2
- package/build/client/assets/update-mdx-cache-l0sNRNKZ.js.map +0 -1
package/build/server/index.js
CHANGED
|
@@ -9,21 +9,20 @@ import path$1 from "node:path";
|
|
|
9
9
|
import os from "os";
|
|
10
10
|
import path from "path";
|
|
11
11
|
import * as C from "@epic-web/cachified";
|
|
12
|
-
import { verboseReporter
|
|
12
|
+
import { verboseReporter } from "@epic-web/cachified";
|
|
13
13
|
import { remember } from "@epic-web/remember";
|
|
14
14
|
import fsExtra from "fs-extra";
|
|
15
15
|
import { LRUCache } from "lru-cache";
|
|
16
16
|
import md5 from "md5-hex";
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import fs from "node:fs";
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import fs$1 from "node:fs";
|
|
20
19
|
import "@total-typescript/ts-reset";
|
|
21
20
|
import { execa } from "execa";
|
|
22
21
|
import { glob } from "glob";
|
|
23
22
|
import { isGitIgnored, globby } from "globby";
|
|
24
23
|
import chokidar from "chokidar";
|
|
25
24
|
import closeWithGrace from "close-with-grace";
|
|
26
|
-
import fs
|
|
25
|
+
import fs from "fs";
|
|
27
26
|
import { remarkCodeBlocksShiki } from "@kentcdodds/md-temp";
|
|
28
27
|
import { bundleMDX } from "mdx-bundler";
|
|
29
28
|
import PQueue from "p-queue";
|
|
@@ -31,8 +30,6 @@ import remarkAutolinkHeadings from "remark-autolink-headings";
|
|
|
31
30
|
import emoji from "remark-emoji";
|
|
32
31
|
import gfm from "remark-gfm";
|
|
33
32
|
import { visit } from "unist-util-visit";
|
|
34
|
-
import { createProcessor } from "@mdx-js/mdx";
|
|
35
|
-
import { removePosition } from "unist-util-remove-position";
|
|
36
33
|
import child_process, { spawn } from "child_process";
|
|
37
34
|
import net from "node:net";
|
|
38
35
|
import chalk from "chalk";
|
|
@@ -219,40 +216,16 @@ const diffFilesCache = makeSingletonCache("DiffFilesCache");
|
|
|
219
216
|
const compiledMarkdownCache = makeSingletonCache(
|
|
220
217
|
"CompiledMarkdownCache"
|
|
221
218
|
);
|
|
222
|
-
const embeddedFilesCache = makeSingletonCache("EmbeddedFilesCache");
|
|
223
219
|
const compiledCodeCache = makeSingletonCache("CompiledCodeCache");
|
|
224
220
|
const ogCache = makeSingletonCache("OgCache");
|
|
225
|
-
const
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
async get(key) {
|
|
229
|
-
try {
|
|
230
|
-
const filePath = path.join(cacheDir$1, md5(key));
|
|
231
|
-
const data = await fsExtra.readJSON(filePath);
|
|
232
|
-
if (data.entry) return data.entry;
|
|
233
|
-
return null;
|
|
234
|
-
} catch (error) {
|
|
235
|
-
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
236
|
-
return null;
|
|
237
|
-
}
|
|
238
|
-
throw error;
|
|
239
|
-
}
|
|
240
|
-
},
|
|
241
|
-
async set(key, entry2) {
|
|
242
|
-
const filePath = path.join(cacheDir$1, md5(key));
|
|
243
|
-
await fsExtra.ensureDir(path.dirname(filePath));
|
|
244
|
-
await fsExtra.writeJSON(filePath, { key, entry: entry2 });
|
|
245
|
-
},
|
|
246
|
-
async delete(key) {
|
|
247
|
-
const filePath = path.join(cacheDir$1, md5(key));
|
|
248
|
-
await fsExtra.remove(filePath);
|
|
249
|
-
}
|
|
250
|
-
};
|
|
221
|
+
const compiledInstructionMarkdownCache = makeSingletonFsCache("CompiledInstructionMarkdownCache");
|
|
222
|
+
const cacheDir = path.join(os.homedir(), ".epicshop", "cache");
|
|
223
|
+
const fsCache = makeSingletonFsCache("FsCache");
|
|
251
224
|
async function getAllFileCacheEntries() {
|
|
252
|
-
const files = await fsExtra.readdir(cacheDir
|
|
225
|
+
const files = await fsExtra.readdir(cacheDir);
|
|
253
226
|
const entries = await Promise.all(
|
|
254
227
|
files.map(async (file) => {
|
|
255
|
-
const filePath = path.join(cacheDir
|
|
228
|
+
const filePath = path.join(cacheDir, file);
|
|
256
229
|
const data = await fsExtra.readJSON(filePath);
|
|
257
230
|
return data;
|
|
258
231
|
}).filter(Boolean)
|
|
@@ -262,11 +235,11 @@ async function getAllFileCacheEntries() {
|
|
|
262
235
|
async function deleteCache() {
|
|
263
236
|
if (process.env.EPICSHOP_DEPLOYED) return null;
|
|
264
237
|
try {
|
|
265
|
-
if (await fsExtra.exists(cacheDir
|
|
266
|
-
await fsExtra.remove(cacheDir
|
|
238
|
+
if (await fsExtra.exists(cacheDir)) {
|
|
239
|
+
await fsExtra.remove(cacheDir);
|
|
267
240
|
}
|
|
268
241
|
} catch (error) {
|
|
269
|
-
console.error(`Error deleting the cache in ${cacheDir
|
|
242
|
+
console.error(`Error deleting the cache in ${cacheDir}`, error);
|
|
270
243
|
}
|
|
271
244
|
}
|
|
272
245
|
function makeSingletonCache(name) {
|
|
@@ -290,6 +263,37 @@ function makeSingletonCache(name) {
|
|
|
290
263
|
return lru;
|
|
291
264
|
});
|
|
292
265
|
}
|
|
266
|
+
function makeSingletonFsCache(name) {
|
|
267
|
+
return remember(name, () => {
|
|
268
|
+
const cacheDir2 = path.join(os.homedir(), ".epicshop", "cache", name);
|
|
269
|
+
const fsCache2 = {
|
|
270
|
+
name: `Filesystem cache (${name})`,
|
|
271
|
+
async get(key) {
|
|
272
|
+
try {
|
|
273
|
+
const filePath = path.join(cacheDir2, md5(key));
|
|
274
|
+
const data = await fsExtra.readJSON(filePath);
|
|
275
|
+
if (data.entry) return data.entry;
|
|
276
|
+
return null;
|
|
277
|
+
} catch (error) {
|
|
278
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
throw error;
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
async set(key, entry2) {
|
|
285
|
+
const filePath = path.join(cacheDir2, md5(key));
|
|
286
|
+
await fsExtra.ensureDir(path.dirname(filePath));
|
|
287
|
+
await fsExtra.writeJSON(filePath, { key, entry: entry2 });
|
|
288
|
+
},
|
|
289
|
+
async delete(key) {
|
|
290
|
+
const filePath = path.join(cacheDir2, md5(key));
|
|
291
|
+
await fsExtra.remove(filePath);
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
return fsCache2;
|
|
295
|
+
});
|
|
296
|
+
}
|
|
293
297
|
async function cachified({
|
|
294
298
|
request,
|
|
295
299
|
timings,
|
|
@@ -330,42 +334,42 @@ async function shouldForceFresh({
|
|
|
330
334
|
if (!key) return false;
|
|
331
335
|
return fresh.split(",").includes(key);
|
|
332
336
|
}
|
|
333
|
-
const DiscordMemberSchema = z
|
|
334
|
-
avatarURL: z
|
|
335
|
-
displayName: z
|
|
336
|
-
id: z
|
|
337
|
+
const DiscordMemberSchema = z.object({
|
|
338
|
+
avatarURL: z.string().nullable().optional(),
|
|
339
|
+
displayName: z.string(),
|
|
340
|
+
id: z.string()
|
|
337
341
|
});
|
|
338
|
-
const TokenSetSchema = z
|
|
339
|
-
access_token: z
|
|
340
|
-
token_type: z
|
|
341
|
-
scope: z
|
|
342
|
+
const TokenSetSchema = z.object({
|
|
343
|
+
access_token: z.string(),
|
|
344
|
+
token_type: z.string(),
|
|
345
|
+
scope: z.string()
|
|
342
346
|
});
|
|
343
|
-
const PlayerPreferencesSchema = z
|
|
344
|
-
volumeRate: z
|
|
345
|
-
playbackRate: z
|
|
346
|
-
autoplay: z
|
|
347
|
-
subtitle: z
|
|
348
|
-
id: z
|
|
349
|
-
mode: z
|
|
347
|
+
const PlayerPreferencesSchema = z.object({
|
|
348
|
+
volumeRate: z.number().optional(),
|
|
349
|
+
playbackRate: z.number().optional(),
|
|
350
|
+
autoplay: z.boolean().optional(),
|
|
351
|
+
subtitle: z.object({
|
|
352
|
+
id: z.string().nullable().default(null),
|
|
353
|
+
mode: z.literal("disabled").or(z.literal("hidden")).or(z.literal("showing")).nullable().default("disabled")
|
|
350
354
|
}).optional().default({}),
|
|
351
|
-
muted: z
|
|
352
|
-
theater: z
|
|
353
|
-
defaultView: z
|
|
354
|
-
activeSidebarTab: z
|
|
355
|
+
muted: z.boolean().optional(),
|
|
356
|
+
theater: z.boolean().optional(),
|
|
357
|
+
defaultView: z.string().optional(),
|
|
358
|
+
activeSidebarTab: z.number().optional()
|
|
355
359
|
}).optional().default({});
|
|
356
|
-
const PresencePreferencesSchema = z
|
|
357
|
-
optOut: z
|
|
360
|
+
const PresencePreferencesSchema = z.object({
|
|
361
|
+
optOut: z.boolean()
|
|
358
362
|
}).optional().default({ optOut: false });
|
|
359
|
-
const AuthInfoSchema = z
|
|
363
|
+
const AuthInfoSchema = z.object({
|
|
360
364
|
tokenSet: TokenSetSchema,
|
|
361
|
-
email: z
|
|
362
|
-
name: z
|
|
365
|
+
email: z.string(),
|
|
366
|
+
name: z.string().nullable().optional()
|
|
363
367
|
}).transform((d) => ({ ...d, id: md5(d.email) }));
|
|
364
|
-
const DataSchema = z
|
|
365
|
-
onboarding: z
|
|
366
|
-
tourVideosWatched: z
|
|
368
|
+
const DataSchema = z.object({
|
|
369
|
+
onboarding: z.object({
|
|
370
|
+
tourVideosWatched: z.array(z.string()).default([])
|
|
367
371
|
}).passthrough().optional().default({ tourVideosWatched: [] }),
|
|
368
|
-
preferences: z
|
|
372
|
+
preferences: z.object({
|
|
369
373
|
player: PlayerPreferencesSchema,
|
|
370
374
|
presence: PresencePreferencesSchema
|
|
371
375
|
}).optional().default({}),
|
|
@@ -517,30 +521,30 @@ async function markOnboardingVideoWatched(videoUrl) {
|
|
|
517
521
|
}
|
|
518
522
|
const partykitRoom = "epic-web-presence";
|
|
519
523
|
const partykitBaseUrl = `https://epic-web-presence.kentcdodds.partykit.dev/parties/main/${partykitRoom}`;
|
|
520
|
-
const UserSchema = z
|
|
521
|
-
id: z
|
|
522
|
-
avatarUrl: z
|
|
523
|
-
name: z
|
|
524
|
-
location: z
|
|
525
|
-
workshopTitle: z
|
|
526
|
-
origin: z
|
|
527
|
-
exercise: z
|
|
528
|
-
type: z
|
|
529
|
-
exerciseNumber: z
|
|
530
|
-
stepNumber: z
|
|
524
|
+
const UserSchema = z.object({
|
|
525
|
+
id: z.string(),
|
|
526
|
+
avatarUrl: z.string().nullable().optional(),
|
|
527
|
+
name: z.string().nullable().optional(),
|
|
528
|
+
location: z.object({
|
|
529
|
+
workshopTitle: z.string().nullable().optional(),
|
|
530
|
+
origin: z.string().nullable().optional(),
|
|
531
|
+
exercise: z.object({
|
|
532
|
+
type: z.union([z.literal("problem"), z.literal("solution")]).nullable().optional(),
|
|
533
|
+
exerciseNumber: z.number().nullable().optional(),
|
|
534
|
+
stepNumber: z.number().nullable().optional()
|
|
531
535
|
}).nullable().optional()
|
|
532
536
|
}).nullable().optional()
|
|
533
537
|
});
|
|
534
|
-
const MessageSchema = z
|
|
535
|
-
type: z
|
|
536
|
-
payload: z
|
|
537
|
-
}).or(z
|
|
538
|
-
z
|
|
539
|
-
type: z
|
|
540
|
-
payload: z
|
|
538
|
+
const MessageSchema = z.object({
|
|
539
|
+
type: z.literal("remove-user"),
|
|
540
|
+
payload: z.object({ id: z.string() })
|
|
541
|
+
}).or(z.object({ type: z.literal("add-user"), payload: UserSchema })).or(
|
|
542
|
+
z.object({
|
|
543
|
+
type: z.literal("presence"),
|
|
544
|
+
payload: z.object({ users: z.array(UserSchema) })
|
|
541
545
|
})
|
|
542
546
|
);
|
|
543
|
-
const PresenceSchema = z
|
|
547
|
+
const PresenceSchema = z.object({ users: z.array(UserSchema) });
|
|
544
548
|
const presenceCache = makeSingletonCache("PresenceCache");
|
|
545
549
|
async function getPresentUsers(user, { timings, request } = {}) {
|
|
546
550
|
return cachified({
|
|
@@ -550,7 +554,7 @@ async function getPresentUsers(user, { timings, request } = {}) {
|
|
|
550
554
|
request,
|
|
551
555
|
ttl: 1e3 * 60 * 5,
|
|
552
556
|
swr: 1e3 * 60 * 60 * 24,
|
|
553
|
-
checkValue: z
|
|
557
|
+
checkValue: z.array(UserSchema),
|
|
554
558
|
async getFreshValue(context) {
|
|
555
559
|
try {
|
|
556
560
|
const response = await Promise.race([
|
|
@@ -623,269 +627,6 @@ function getOptionalWatcher() {
|
|
|
623
627
|
global.__change_tracker_close_with_grace_return__ = closeWithGrace(
|
|
624
628
|
() => watcher == null ? void 0 : watcher.close()
|
|
625
629
|
);
|
|
626
|
-
const APP_TYPES = ["problem", "solution", "playground"];
|
|
627
|
-
const safePath$1 = (s) => s.replace(/\\/g, "/");
|
|
628
|
-
const REG_EXP = /^(?:\d+(?:-\d+)?,)*\d+(?:-\d+)?$/;
|
|
629
|
-
const isValidRangeFormat = (value) => value ? REG_EXP.test(value) : true;
|
|
630
|
-
const transformRange = (value) => value == null ? void 0 : value.split(",").map((range) => {
|
|
631
|
-
const [start, end] = range.split("-").map(Number);
|
|
632
|
-
return [start, end ?? start];
|
|
633
|
-
});
|
|
634
|
-
const isRangeBounded = (range, ctx, lines) => {
|
|
635
|
-
if (!lines || !Array.isArray(range)) return;
|
|
636
|
-
if (range.flat().some((r) => r < 1 || r > lines)) {
|
|
637
|
-
ctx.addIssue({
|
|
638
|
-
code: z.ZodIssueCode.custom,
|
|
639
|
-
message: `Range must be between 1 and ${lines}`
|
|
640
|
-
});
|
|
641
|
-
}
|
|
642
|
-
};
|
|
643
|
-
const isRangeInOrder = (range) => Array.isArray(range) ? range.every(([a, b]) => !isNaN(Number(a)) && !isNaN(Number(b)) && b >= a) : true;
|
|
644
|
-
const isRangesNonOverlapping = (range) => {
|
|
645
|
-
if (!Array.isArray(range)) return true;
|
|
646
|
-
return range.every(([a], i) => {
|
|
647
|
-
var _a2;
|
|
648
|
-
return i === 0 || (((_a2 = range[i - 1]) == null ? void 0 : _a2[1]) ?? 0) < a;
|
|
649
|
-
});
|
|
650
|
-
};
|
|
651
|
-
let fileContentCache = /* @__PURE__ */ new Map();
|
|
652
|
-
async function getFileContent(filePath) {
|
|
653
|
-
if (fileContentCache.has(filePath)) {
|
|
654
|
-
return fileContentCache.get(filePath);
|
|
655
|
-
}
|
|
656
|
-
try {
|
|
657
|
-
const content = await fs.promises.readFile(filePath, "utf-8");
|
|
658
|
-
const fileContent = content.split("\n");
|
|
659
|
-
fileContentCache.set(filePath, fileContent);
|
|
660
|
-
return fileContent;
|
|
661
|
-
} catch {
|
|
662
|
-
console.warn(
|
|
663
|
-
`@epic-web/workshop-app - invalid CodeFile.
|
|
664
|
-
Could not read file: ${filePath}
|
|
665
|
-
`
|
|
666
|
-
);
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
async function validateProps(props, appDir2) {
|
|
670
|
-
let validRange;
|
|
671
|
-
let linesCount = 0;
|
|
672
|
-
const BooleanSchema = z.nullable(z.string()).optional().refine(
|
|
673
|
-
(v) => ["true", "false", null, void 0].includes(v),
|
|
674
|
-
'optional boolean key can be "true", "false", null or undefined'
|
|
675
|
-
).transform((v) => v === null || Boolean(v));
|
|
676
|
-
const RangeSchema = z.string().optional().refine(isValidRangeFormat, "Invalid range format").transform(transformRange).superRefine((val, ctx) => isRangeBounded(val, ctx, linesCount)).refine(isRangeInOrder, "Range must be in order low-high");
|
|
677
|
-
const inputSchema = z.object({
|
|
678
|
-
file: z.string().nonempty().transform(async (file, ctx) => {
|
|
679
|
-
const fullPath = path$1.join(appDir2, file);
|
|
680
|
-
const content = await getFileContent(fullPath);
|
|
681
|
-
if (!content) {
|
|
682
|
-
ctx.addIssue({
|
|
683
|
-
code: z.ZodIssueCode.custom,
|
|
684
|
-
message: `Could not read file`,
|
|
685
|
-
fatal: true
|
|
686
|
-
});
|
|
687
|
-
return z.NEVER;
|
|
688
|
-
}
|
|
689
|
-
linesCount = content.length;
|
|
690
|
-
return {
|
|
691
|
-
fullPath: safePath$1(fullPath),
|
|
692
|
-
filePath: safePath$1(file),
|
|
693
|
-
content
|
|
694
|
-
};
|
|
695
|
-
}),
|
|
696
|
-
range: RangeSchema.refine((range) => {
|
|
697
|
-
const isValid = isRangesNonOverlapping(range);
|
|
698
|
-
validRange = isValid ? range : void 0;
|
|
699
|
-
return isValid;
|
|
700
|
-
}, "Ranges must not overlap"),
|
|
701
|
-
highlight: RangeSchema.refine((highlight) => {
|
|
702
|
-
if (!Array.isArray(highlight) || !Array.isArray(validRange)) {
|
|
703
|
-
return z.NEVER;
|
|
704
|
-
}
|
|
705
|
-
return highlight.every(
|
|
706
|
-
([hStart, hEnd]) => validRange == null ? void 0 : validRange.some(
|
|
707
|
-
([rStart, rEnd]) => hStart >= rStart && hEnd <= rEnd
|
|
708
|
-
)
|
|
709
|
-
);
|
|
710
|
-
}, "Highlight range must be within defined range").transform(() => props.highlight).optional(),
|
|
711
|
-
nonumber: BooleanSchema,
|
|
712
|
-
nocopy: BooleanSchema,
|
|
713
|
-
buttons: z.string().optional().transform(
|
|
714
|
-
(str) => str ? str.split(",") : []
|
|
715
|
-
).refine((arr) => arr.every((item) => APP_TYPES.includes(item)), {
|
|
716
|
-
message: `Buttons can only be any of ${APP_TYPES.join(",")}`
|
|
717
|
-
})
|
|
718
|
-
}).strict();
|
|
719
|
-
return inputSchema.safeParseAsync(props);
|
|
720
|
-
}
|
|
721
|
-
async function createErrorNotification(node, errors, mdxFile, appType) {
|
|
722
|
-
var _a2, _b;
|
|
723
|
-
const filename = path$1.basename(mdxFile);
|
|
724
|
-
const startLine = (_a2 = node.position) == null ? void 0 : _a2.start.line;
|
|
725
|
-
const endLine = (_b = node.position) == null ? void 0 : _b.end.line;
|
|
726
|
-
const codeFence = async () => {
|
|
727
|
-
if (startLine && endLine) {
|
|
728
|
-
const contentStr = await getFileContent(mdxFile);
|
|
729
|
-
const content = contentStr == null ? void 0 : contentStr.slice(startLine - 1, endLine).join("\n");
|
|
730
|
-
if (content) {
|
|
731
|
-
return `
|
|
732
|
-
\`\`\`tsx filename=${filename} start=${startLine} nocopy
|
|
733
|
-
${content}
|
|
734
|
-
\`\`\``.trim();
|
|
735
|
-
}
|
|
736
|
-
}
|
|
737
|
-
return "";
|
|
738
|
-
};
|
|
739
|
-
const mdxSource = `
|
|
740
|
-
<CodeFileNotification variant="error" file="${filename}" line="${startLine}" type="${appType}">
|
|
741
|
-
<callout-danger class="notification">
|
|
742
|
-
<div className="title">CodeFile Error: invalid input</div>
|
|
743
|
-
${errors.map((error) => `<div>${error}</div>`).join("")}
|
|
744
|
-
${await codeFence()}
|
|
745
|
-
</callout-danger>
|
|
746
|
-
</CodeFileNotification>`;
|
|
747
|
-
return mdxToMdast(mdxSource);
|
|
748
|
-
}
|
|
749
|
-
function stripIndent(string) {
|
|
750
|
-
const match = string.match(/^[ \t]*(?=\S)/gm);
|
|
751
|
-
const indent = (match == null ? void 0 : match.reduce((r, a) => Math.min(r, a.length), Infinity)) ?? 0;
|
|
752
|
-
if (indent === 0) {
|
|
753
|
-
return string;
|
|
754
|
-
}
|
|
755
|
-
const regex = new RegExp(`^[ \\t]{${indent}}`, "gm");
|
|
756
|
-
return string.replace(regex, "");
|
|
757
|
-
}
|
|
758
|
-
function mdxToMdast(mdx) {
|
|
759
|
-
const processor = createProcessor();
|
|
760
|
-
const mdast = processor.parse(mdx.trim());
|
|
761
|
-
removePosition(mdast, { force: true });
|
|
762
|
-
return mdast.type === "root" ? mdast.children : [mdast];
|
|
763
|
-
}
|
|
764
|
-
function remarkCodeFile(data) {
|
|
765
|
-
fileContentCache = /* @__PURE__ */ new Map();
|
|
766
|
-
const mdxFile = data.mdxFile;
|
|
767
|
-
const appDir2 = path$1.dirname(mdxFile);
|
|
768
|
-
const appType = mdxFile.includes("problem") ? "problem" : mdxFile.includes("solution") ? "solution" : "other";
|
|
769
|
-
async function replaceCodeFileNode({
|
|
770
|
-
node,
|
|
771
|
-
parent
|
|
772
|
-
}) {
|
|
773
|
-
var _a2, _b;
|
|
774
|
-
if (!parent) {
|
|
775
|
-
console.warn(
|
|
776
|
-
"Unexpected error: replaceCodeFileNode called without a Parent"
|
|
777
|
-
);
|
|
778
|
-
return;
|
|
779
|
-
}
|
|
780
|
-
const index = parent.children.indexOf(node);
|
|
781
|
-
if (index === -1) {
|
|
782
|
-
console.warn(
|
|
783
|
-
"Unexpected error: replaceCodeFileNode could not find node index in Parent"
|
|
784
|
-
);
|
|
785
|
-
return;
|
|
786
|
-
}
|
|
787
|
-
const attributes = node.attributes;
|
|
788
|
-
const props = {};
|
|
789
|
-
for (const { name, value } of attributes) {
|
|
790
|
-
props[name] = value;
|
|
791
|
-
}
|
|
792
|
-
const result = await validateProps(props, appDir2);
|
|
793
|
-
if (!result.success) {
|
|
794
|
-
const errors = result.error.issues.map(
|
|
795
|
-
({ message, path: path2 }) => path2[0] ? `${message}: ${path2[0]}="${props[path2[0]]}"` : message
|
|
796
|
-
);
|
|
797
|
-
const notification = await createErrorNotification(
|
|
798
|
-
node,
|
|
799
|
-
errors,
|
|
800
|
-
mdxFile,
|
|
801
|
-
appType
|
|
802
|
-
);
|
|
803
|
-
parent.children.splice(index, 1, ...notification);
|
|
804
|
-
data.embeddedFiles.set("invalid input", {
|
|
805
|
-
error: true,
|
|
806
|
-
file: props.file,
|
|
807
|
-
hash: "",
|
|
808
|
-
line: ((_a2 = node.position) == null ? void 0 : _a2.start.line) ?? 1
|
|
809
|
-
});
|
|
810
|
-
return;
|
|
811
|
-
}
|
|
812
|
-
const {
|
|
813
|
-
file: { content, filePath, fullPath },
|
|
814
|
-
highlight,
|
|
815
|
-
range
|
|
816
|
-
} = result.data;
|
|
817
|
-
const language = path$1.extname(filePath).substring(1);
|
|
818
|
-
const meta2 = [`filename=${filePath}`];
|
|
819
|
-
Object.entries(result.data).forEach(
|
|
820
|
-
([key, val]) => typeof val === "boolean" && val && meta2.push(`${key}=true`)
|
|
821
|
-
);
|
|
822
|
-
if (result.data.buttons) {
|
|
823
|
-
meta2.push(`buttons=${result.data.buttons.join(",")}`);
|
|
824
|
-
meta2.push(`type=${appType}`);
|
|
825
|
-
meta2.push(`fullpath=${fullPath}`);
|
|
826
|
-
meta2.push(`sep=${path$1.sep}`);
|
|
827
|
-
}
|
|
828
|
-
if (highlight == null ? void 0 : highlight.length) {
|
|
829
|
-
meta2.push(`lines=${highlight}`);
|
|
830
|
-
}
|
|
831
|
-
const fileSections = (range == null ? void 0 : range.length) ? range : [[1, content.length]];
|
|
832
|
-
const rangesContent = [];
|
|
833
|
-
const preNodes = [];
|
|
834
|
-
for (const [start, end] of fileSections) {
|
|
835
|
-
const rangeContent = stripIndent(
|
|
836
|
-
content.slice(start ? start - 1 : 0, end).join("\n")
|
|
837
|
-
);
|
|
838
|
-
rangesContent.push(rangeContent);
|
|
839
|
-
const mdxSource = `
|
|
840
|
-
\`\`\`${language} ${meta2.concat(`start=${start}`).join(" ")}
|
|
841
|
-
${rangeContent}
|
|
842
|
-
\`\`\``;
|
|
843
|
-
preNodes.push(...mdxToMdast(mdxSource));
|
|
844
|
-
}
|
|
845
|
-
const embeddedKey = md5(fullPath + JSON.stringify(range));
|
|
846
|
-
const contentHash = md5(rangesContent.join(","));
|
|
847
|
-
const newData = {
|
|
848
|
-
file: fullPath,
|
|
849
|
-
hash: contentHash
|
|
850
|
-
};
|
|
851
|
-
const cachedData = data.cachedEmbeddedFiles.get(embeddedKey);
|
|
852
|
-
if (cachedData && // If a warning existed previously and its hash matched the current hash,
|
|
853
|
-
// then the changes were reverted and the warning will be remove
|
|
854
|
-
((cachedData.warning && cachedData.warning !== contentHash) ?? (!cachedData.warning && cachedData.hash !== contentHash))) {
|
|
855
|
-
newData.warning = cachedData.warning ?? cachedData.hash;
|
|
856
|
-
const startLine = ((_b = node.position) == null ? void 0 : _b.start.line) ?? 1;
|
|
857
|
-
newData.line = startLine;
|
|
858
|
-
const mdxFilename = path$1.basename(mdxFile);
|
|
859
|
-
const filename = path$1.basename(filePath);
|
|
860
|
-
const warning = `
|
|
861
|
-
<CodeFileNotification variant="warning" file="${mdxFilename}" line="${startLine}" type="${appType}"
|
|
862
|
-
cacheLocation="${data.cacheLocation}" embeddedKey="${embeddedKey}">
|
|
863
|
-
<callout-warning class="notification">
|
|
864
|
-
<div className="title">CodeFile Warning:</div>
|
|
865
|
-
<div>file ${filename} content was changed, review 'range' and 'highlight' inputs</div>
|
|
866
|
-
</callout-warning>
|
|
867
|
-
</CodeFileNotification>`;
|
|
868
|
-
preNodes.unshift(...mdxToMdast(warning));
|
|
869
|
-
}
|
|
870
|
-
data.embeddedFiles.set(embeddedKey, newData);
|
|
871
|
-
parent.children.splice(index, 1, ...preNodes);
|
|
872
|
-
}
|
|
873
|
-
return async function codeFileTransformer(tree) {
|
|
874
|
-
const codeFiles = [];
|
|
875
|
-
const filter = { type: "mdxJsxFlowElement", name: "CodeFile" };
|
|
876
|
-
visit(tree, filter, (node, _index, parent) => {
|
|
877
|
-
codeFiles.push({ node, parent });
|
|
878
|
-
});
|
|
879
|
-
for (const props of codeFiles) {
|
|
880
|
-
await replaceCodeFileNode(props);
|
|
881
|
-
}
|
|
882
|
-
fileContentCache = /* @__PURE__ */ new Map();
|
|
883
|
-
};
|
|
884
|
-
}
|
|
885
|
-
const cacheDir = path.join(
|
|
886
|
-
process.env.EPICSHOP_CONTEXT_CWD ?? process.cwd(),
|
|
887
|
-
"./node_modules/.cache/compile-mdx"
|
|
888
|
-
);
|
|
889
630
|
function trimCodeBlocks() {
|
|
890
631
|
return async function transformer(tree) {
|
|
891
632
|
visit(tree, "element", (preNode) => {
|
|
@@ -927,68 +668,38 @@ const rehypePlugins = [
|
|
|
927
668
|
remarkCodeBlocksShiki,
|
|
928
669
|
removePreContainerDivs
|
|
929
670
|
];
|
|
930
|
-
function checkFileExists$1(file) {
|
|
931
|
-
return fs$1.promises.access(file, fs$1.constants.F_OK).then(
|
|
932
|
-
() => true,
|
|
933
|
-
() => false
|
|
934
|
-
);
|
|
935
|
-
}
|
|
936
671
|
const verboseLog = process.env.EPICSHOP_VERBOSE_LOG === "true" ? console.log : () => {
|
|
937
672
|
};
|
|
938
|
-
function
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
() => true,
|
|
947
|
-
() => false
|
|
948
|
-
);
|
|
949
|
-
}
|
|
950
|
-
async function compileMdx(file, { request, forceFresh } = {}) {
|
|
951
|
-
var _a2;
|
|
952
|
-
if (!await checkFileExists$1(file)) {
|
|
953
|
-
throw new Error(`File does not exist: ${file}`);
|
|
673
|
+
async function compileMdx(file, {
|
|
674
|
+
request,
|
|
675
|
+
timings,
|
|
676
|
+
forceFresh
|
|
677
|
+
} = {}) {
|
|
678
|
+
const stat = await fs.promises.stat(file).catch((error) => ({ error }));
|
|
679
|
+
if ("error" in stat) {
|
|
680
|
+
throw new Error(`File stat cannot be read: ${stat.error}`);
|
|
954
681
|
}
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
const
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
});
|
|
963
|
-
if (!requireFresh && await checkFileExists$1(cacheLocation)) {
|
|
964
|
-
try {
|
|
965
|
-
const cached = JSON.parse(
|
|
966
|
-
await fs$1.promises.readFile(cacheLocation, "utf-8")
|
|
967
|
-
);
|
|
968
|
-
cachedEmbeddedFiles = new Map(
|
|
969
|
-
Object.entries(cached.value.embeddedFiles ?? {})
|
|
970
|
-
);
|
|
971
|
-
const compiledTime = cached.value.compiledTime ?? 0;
|
|
972
|
-
const warningCancled = process.env.NODE_ENV === "development" ? ((_a2 = cached == null ? void 0 : cached.value) == null ? void 0 : _a2.warningCancled) ?? false : false;
|
|
973
|
-
if (compiledTime > stat.mtimeMs && !warningCancled && await validateEmbeddedFiles(
|
|
974
|
-
cachedEmbeddedFiles.values(),
|
|
975
|
-
compiledTime
|
|
976
|
-
)) {
|
|
977
|
-
return cached.value;
|
|
978
|
-
}
|
|
979
|
-
} catch (error) {
|
|
980
|
-
console.error(`Error reading cached file: ${cacheLocation}`, error);
|
|
981
|
-
void fs$1.promises.unlink(cacheLocation);
|
|
682
|
+
const key = `file:${file}`;
|
|
683
|
+
forceFresh = await shouldForceFresh({ forceFresh, request, key });
|
|
684
|
+
const existingCacheEntry = await compiledInstructionMarkdownCache.get(key);
|
|
685
|
+
if (!forceFresh && existingCacheEntry) {
|
|
686
|
+
const compiledTime = existingCacheEntry.metadata.createdTime;
|
|
687
|
+
if (stat.mtimeMs <= compiledTime) {
|
|
688
|
+
return existingCacheEntry.value;
|
|
982
689
|
}
|
|
983
690
|
}
|
|
691
|
+
return cachified({
|
|
692
|
+
key,
|
|
693
|
+
cache: compiledInstructionMarkdownCache,
|
|
694
|
+
request,
|
|
695
|
+
timings,
|
|
696
|
+
forceFresh,
|
|
697
|
+
getFreshValue: () => compileMdxImpl(file)
|
|
698
|
+
});
|
|
699
|
+
}
|
|
700
|
+
async function compileMdxImpl(file) {
|
|
984
701
|
let title = null;
|
|
985
702
|
const epicVideoEmbeds = [];
|
|
986
|
-
const codeFileData = {
|
|
987
|
-
mdxFile: file,
|
|
988
|
-
cacheLocation,
|
|
989
|
-
cachedEmbeddedFiles,
|
|
990
|
-
embeddedFiles: /* @__PURE__ */ new Map()
|
|
991
|
-
};
|
|
992
703
|
try {
|
|
993
704
|
verboseLog(`Compiling ${file}`);
|
|
994
705
|
const bundleResult = await queuedBundleMDX({
|
|
@@ -1014,6 +725,7 @@ async function compileMdx(file, { request, forceFresh } = {}) {
|
|
|
1014
725
|
visit(tree, "mdxJsxFlowElement", (jsxEl) => {
|
|
1015
726
|
if (jsxEl.name !== "EpicVideo") return;
|
|
1016
727
|
const urlAttr = jsxEl.attributes.find(
|
|
728
|
+
// @ts-expect-error no idea why this started being an issue suddenly 🤷♂️
|
|
1017
729
|
(a) => a.type === "mdxJsxAttribute" && a.name === "url"
|
|
1018
730
|
);
|
|
1019
731
|
if (!urlAttr) return;
|
|
@@ -1023,7 +735,6 @@ async function compileMdx(file, { request, forceFresh } = {}) {
|
|
|
1023
735
|
epicVideoEmbeds.push(url);
|
|
1024
736
|
});
|
|
1025
737
|
},
|
|
1026
|
-
() => remarkCodeFile(codeFileData),
|
|
1027
738
|
emoji
|
|
1028
739
|
];
|
|
1029
740
|
options.rehypePlugins = [
|
|
@@ -1038,18 +749,6 @@ async function compileMdx(file, { request, forceFresh } = {}) {
|
|
|
1038
749
|
});
|
|
1039
750
|
if (!bundleResult) throw new Error(`Timeout for file: ${file}`);
|
|
1040
751
|
const result = { code: bundleResult.code, title, epicVideoEmbeds };
|
|
1041
|
-
await fsExtra.ensureDir(cacheDir);
|
|
1042
|
-
await fs$1.promises.writeFile(
|
|
1043
|
-
cacheLocation,
|
|
1044
|
-
JSON.stringify({
|
|
1045
|
-
value: {
|
|
1046
|
-
...result,
|
|
1047
|
-
compiledTime: Date.now(),
|
|
1048
|
-
embeddedFiles: codeFileData.embeddedFiles.size ? Object.fromEntries(codeFileData.embeddedFiles) : void 0
|
|
1049
|
-
}
|
|
1050
|
-
})
|
|
1051
|
-
);
|
|
1052
|
-
await updateEmbeddedFilesCache(codeFileData);
|
|
1053
752
|
return result;
|
|
1054
753
|
} catch (error) {
|
|
1055
754
|
console.error(`Compilation error for file: `, file, error);
|
|
@@ -1059,7 +758,7 @@ async function compileMdx(file, { request, forceFresh } = {}) {
|
|
|
1059
758
|
}
|
|
1060
759
|
}
|
|
1061
760
|
async function compileMarkdownString(markdownString) {
|
|
1062
|
-
return cachified
|
|
761
|
+
return cachified({
|
|
1063
762
|
key: markdownString,
|
|
1064
763
|
cache: compiledMarkdownCache,
|
|
1065
764
|
ttl: 1e3 * 60 * 60 * 24,
|
|
@@ -1088,76 +787,6 @@ async function compileMarkdownString(markdownString) {
|
|
|
1088
787
|
}
|
|
1089
788
|
});
|
|
1090
789
|
}
|
|
1091
|
-
const modifiedEmbeddedFilesTime = remember(
|
|
1092
|
-
"modified_embedded_files_time",
|
|
1093
|
-
() => /* @__PURE__ */ new Map()
|
|
1094
|
-
);
|
|
1095
|
-
const EMBEDDED_FILES_CACHE_KEY = "embeddedFilesCache";
|
|
1096
|
-
async function updateEmbeddedFilesCache({
|
|
1097
|
-
mdxFile,
|
|
1098
|
-
embeddedFiles
|
|
1099
|
-
}) {
|
|
1100
|
-
var _a2;
|
|
1101
|
-
if (mdxFile.includes("playground")) return;
|
|
1102
|
-
let cachedList = await getEmbeddedFilesCache();
|
|
1103
|
-
const hash = cachedList ? md5(JSON.stringify(cachedList)) : null;
|
|
1104
|
-
if (cachedList) {
|
|
1105
|
-
for (const [key, value] of Object.entries(cachedList)) {
|
|
1106
|
-
cachedList[key] = value.filter((item) => item !== mdxFile);
|
|
1107
|
-
if (((_a2 = cachedList[key]) == null ? void 0 : _a2.length) === 0) {
|
|
1108
|
-
delete cachedList[key];
|
|
1109
|
-
}
|
|
1110
|
-
}
|
|
1111
|
-
}
|
|
1112
|
-
if (embeddedFiles.size) {
|
|
1113
|
-
if (!cachedList) {
|
|
1114
|
-
cachedList = {};
|
|
1115
|
-
}
|
|
1116
|
-
const files = Array.from(
|
|
1117
|
-
new Set(Array.from(embeddedFiles.values()).map(({ file }) => file))
|
|
1118
|
-
).sort();
|
|
1119
|
-
for (const file of files) {
|
|
1120
|
-
cachedList[file] = [...cachedList[file] ?? [], mdxFile];
|
|
1121
|
-
}
|
|
1122
|
-
}
|
|
1123
|
-
if (cachedList && hash !== md5(JSON.stringify(cachedList))) {
|
|
1124
|
-
await fsExtra.ensureDir(cacheDir);
|
|
1125
|
-
const embeddedFilesLocation = path.join(cacheDir, "embeddedFiles.json");
|
|
1126
|
-
modifiedEmbeddedFilesTime.set(EMBEDDED_FILES_CACHE_KEY, Date.now());
|
|
1127
|
-
await fs$1.promises.writeFile(
|
|
1128
|
-
embeddedFilesLocation,
|
|
1129
|
-
JSON.stringify({ ...cachedList })
|
|
1130
|
-
);
|
|
1131
|
-
}
|
|
1132
|
-
}
|
|
1133
|
-
async function getEmbeddedFilesCache() {
|
|
1134
|
-
const key = EMBEDDED_FILES_CACHE_KEY;
|
|
1135
|
-
function getForceFresh2(cacheEntry) {
|
|
1136
|
-
if (!cacheEntry) return true;
|
|
1137
|
-
const latestModifiedTime = modifiedEmbeddedFilesTime.get(key);
|
|
1138
|
-
if (!latestModifiedTime) return void 0;
|
|
1139
|
-
return latestModifiedTime > cacheEntry.metadata.createdTime ? true : void 0;
|
|
1140
|
-
}
|
|
1141
|
-
return cachified$1({
|
|
1142
|
-
key,
|
|
1143
|
-
cache: embeddedFilesCache,
|
|
1144
|
-
ttl: 1e3 * 60 * 60 * 24,
|
|
1145
|
-
forceFresh: getForceFresh2(embeddedFilesCache.get(key)),
|
|
1146
|
-
getFreshValue: async () => {
|
|
1147
|
-
try {
|
|
1148
|
-
const embeddedFilesLocation = path.join(cacheDir, "embeddedFiles.json");
|
|
1149
|
-
if (await checkFileExists$1(embeddedFilesLocation)) {
|
|
1150
|
-
return JSON.parse(
|
|
1151
|
-
await fs$1.promises.readFile(embeddedFilesLocation, "utf-8")
|
|
1152
|
-
);
|
|
1153
|
-
}
|
|
1154
|
-
} catch {
|
|
1155
|
-
console.error(`Unable to read 'embeddedFiles.json' from: `, cacheDir);
|
|
1156
|
-
}
|
|
1157
|
-
return void 0;
|
|
1158
|
-
}
|
|
1159
|
-
});
|
|
1160
|
-
}
|
|
1161
790
|
let _queue = null;
|
|
1162
791
|
async function getQueue() {
|
|
1163
792
|
if (_queue) return _queue;
|
|
@@ -1174,58 +803,58 @@ async function queuedBundleMDX(...args) {
|
|
|
1174
803
|
return result;
|
|
1175
804
|
}
|
|
1176
805
|
const workshopRoot$1 = process.env.EPICSHOP_CONTEXT_CWD ?? process.cwd();
|
|
1177
|
-
const StackBlitzConfigSchema = z
|
|
806
|
+
const StackBlitzConfigSchema = z.object({
|
|
1178
807
|
// we default this to `${exerciseTitle} (${type})`
|
|
1179
|
-
title: z
|
|
808
|
+
title: z.string().optional(),
|
|
1180
809
|
// stackblitz defaults this to dev automatically
|
|
1181
|
-
startScript: z
|
|
810
|
+
startScript: z.string().optional(),
|
|
1182
811
|
// if no value is provided, then stackblitz defaults this to whatever
|
|
1183
812
|
// looks best based on the width of the screen
|
|
1184
|
-
view: z
|
|
1185
|
-
file: z
|
|
813
|
+
view: z.union([z.literal("editor"), z.literal("preview"), z.literal("both")]).optional(),
|
|
814
|
+
file: z.string().optional()
|
|
1186
815
|
});
|
|
1187
|
-
const InstructorSchema = z
|
|
1188
|
-
name: z
|
|
1189
|
-
avatar: z
|
|
1190
|
-
"𝕏": z
|
|
1191
|
-
xHandle: z
|
|
816
|
+
const InstructorSchema = z.object({
|
|
817
|
+
name: z.string().optional(),
|
|
818
|
+
avatar: z.string().optional(),
|
|
819
|
+
"𝕏": z.string().optional(),
|
|
820
|
+
xHandle: z.string().optional()
|
|
1192
821
|
});
|
|
1193
|
-
const WorkshopConfigSchema = z
|
|
1194
|
-
title: z
|
|
1195
|
-
subtitle: z
|
|
822
|
+
const WorkshopConfigSchema = z.object({
|
|
823
|
+
title: z.string(),
|
|
824
|
+
subtitle: z.string().optional(),
|
|
1196
825
|
instructor: InstructorSchema.optional(),
|
|
1197
|
-
epicWorkshopHost: z
|
|
1198
|
-
epicWorkshopSlug: z
|
|
1199
|
-
product: z
|
|
1200
|
-
host: z
|
|
1201
|
-
displayName: z
|
|
1202
|
-
displayNameShort: z
|
|
1203
|
-
logo: z
|
|
1204
|
-
slug: z
|
|
1205
|
-
discordChannelId: z
|
|
1206
|
-
discordTags: z
|
|
826
|
+
epicWorkshopHost: z.string().optional(),
|
|
827
|
+
epicWorkshopSlug: z.string().optional(),
|
|
828
|
+
product: z.object({
|
|
829
|
+
host: z.string().default("www.epicweb.dev"),
|
|
830
|
+
displayName: z.string().default("EpicWeb.dev"),
|
|
831
|
+
displayNameShort: z.string().default("Epic Web"),
|
|
832
|
+
logo: z.string().default("/logo.svg"),
|
|
833
|
+
slug: z.string().optional(),
|
|
834
|
+
discordChannelId: z.string().default("1161045224907341972"),
|
|
835
|
+
discordTags: z.array(z.string()).optional()
|
|
1207
836
|
}).default({}),
|
|
1208
|
-
onboardingVideo: z
|
|
837
|
+
onboardingVideo: z.string().default(
|
|
1209
838
|
"https://www.epicweb.dev/tips/get-started-with-the-epic-workshop-app"
|
|
1210
839
|
),
|
|
1211
|
-
githubRepo: z
|
|
1212
|
-
githubRoot: z
|
|
840
|
+
githubRepo: z.string(),
|
|
841
|
+
githubRoot: z.string(),
|
|
1213
842
|
stackBlitzConfig: StackBlitzConfigSchema.optional(),
|
|
1214
|
-
forms: z
|
|
1215
|
-
workshop: z
|
|
843
|
+
forms: z.object({
|
|
844
|
+
workshop: z.string().default(
|
|
1216
845
|
"https://docs.google.com/forms/d/e/1FAIpQLSdRmj9p8-5zyoqRzxp3UpqSbC3aFkweXvvJIKes0a5s894gzg/viewform?hl=en&embedded=true&entry.2123647600={workshopTitle}"
|
|
1217
846
|
),
|
|
1218
|
-
exercise: z
|
|
847
|
+
exercise: z.string().default(
|
|
1219
848
|
"https://docs.google.com/forms/d/e/1FAIpQLSf3o9xyjQepTlOTH5Z7ZwkeSTdXh6YWI_RGc9KiyD3oUN0p6w/viewform?hl=en&embedded=true&entry.1836176234={workshopTitle}&entry.428900931={exerciseTitle}"
|
|
1220
849
|
)
|
|
1221
850
|
}).default({}),
|
|
1222
|
-
testTab: z
|
|
1223
|
-
enabled: z
|
|
851
|
+
testTab: z.object({
|
|
852
|
+
enabled: z.boolean().default(true)
|
|
1224
853
|
}).default({}),
|
|
1225
|
-
scripts: z
|
|
1226
|
-
postupdate: z
|
|
854
|
+
scripts: z.object({
|
|
855
|
+
postupdate: z.string().optional()
|
|
1227
856
|
}).optional(),
|
|
1228
|
-
initialRoute: z
|
|
857
|
+
initialRoute: z.string().optional().default("/")
|
|
1229
858
|
}).transform((data) => {
|
|
1230
859
|
return {
|
|
1231
860
|
...data,
|
|
@@ -1247,7 +876,7 @@ function getWorkshopConfig() {
|
|
|
1247
876
|
const packageJsonPath = path$1.join(workshopRoot$1, "package.json");
|
|
1248
877
|
let packageJson;
|
|
1249
878
|
try {
|
|
1250
|
-
const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
|
|
879
|
+
const packageJsonContent = fs$1.readFileSync(packageJsonPath, "utf8");
|
|
1251
880
|
packageJson = JSON.parse(packageJsonContent);
|
|
1252
881
|
} catch (error) {
|
|
1253
882
|
console.error(`Error reading or parsing package.json:`, error);
|
|
@@ -1283,7 +912,7 @@ function getWorkshopConfig() {
|
|
|
1283
912
|
cachedConfig = parsedConfig;
|
|
1284
913
|
return parsedConfig;
|
|
1285
914
|
} catch (error) {
|
|
1286
|
-
if (error instanceof z
|
|
915
|
+
if (error instanceof z.ZodError) {
|
|
1287
916
|
const flattenedErrors = error.flatten();
|
|
1288
917
|
const errorMessages = Object.entries(flattenedErrors.fieldErrors).map(([field, errors]) => `${field}: ${errors == null ? void 0 : errors.join(", ")}`).concat(flattenedErrors.formErrors);
|
|
1289
918
|
throw new Error(
|
|
@@ -1326,15 +955,15 @@ async function getAppConfig(fullPath) {
|
|
|
1326
955
|
let epicshopConfig = {};
|
|
1327
956
|
let scripts = {};
|
|
1328
957
|
const packageJsonPath = path$1.join(fullPath, "package.json");
|
|
1329
|
-
const packageJsonExists = await fs.promises.access(packageJsonPath, fs.constants.F_OK).then(() => true).catch(() => false);
|
|
958
|
+
const packageJsonExists = await fs$1.promises.access(packageJsonPath, fs$1.constants.F_OK).then(() => true).catch(() => false);
|
|
1330
959
|
if (packageJsonExists) {
|
|
1331
960
|
const pkg = JSON.parse(
|
|
1332
|
-
await fs.promises.readFile(path$1.join(fullPath, "package.json"), "utf8")
|
|
961
|
+
await fs$1.promises.readFile(path$1.join(fullPath, "package.json"), "utf8")
|
|
1333
962
|
);
|
|
1334
963
|
epicshopConfig = pkg.epicshop ?? {};
|
|
1335
964
|
scripts = pkg.scripts ?? {};
|
|
1336
965
|
}
|
|
1337
|
-
const AppConfigSchema = z
|
|
966
|
+
const AppConfigSchema = z.object({
|
|
1338
967
|
stackBlitzConfig: StackBlitzConfigSchema.nullable().optional().transform((appStackBlitzConfig) => {
|
|
1339
968
|
if (appStackBlitzConfig === null) return null;
|
|
1340
969
|
return {
|
|
@@ -1342,14 +971,14 @@ async function getAppConfig(fullPath) {
|
|
|
1342
971
|
...appStackBlitzConfig
|
|
1343
972
|
};
|
|
1344
973
|
}),
|
|
1345
|
-
testTab: z
|
|
1346
|
-
enabled: z
|
|
974
|
+
testTab: z.object({
|
|
975
|
+
enabled: z.boolean().optional().default(((_a2 = workshopConfig.testTab) == null ? void 0 : _a2.enabled) ?? true)
|
|
1347
976
|
}).default({}),
|
|
1348
|
-
scripts: z
|
|
1349
|
-
test: z
|
|
1350
|
-
dev: z
|
|
977
|
+
scripts: z.object({
|
|
978
|
+
test: z.string().optional(),
|
|
979
|
+
dev: z.string().optional()
|
|
1351
980
|
}).default({}),
|
|
1352
|
-
initialRoute: z
|
|
981
|
+
initialRoute: z.string().optional().default(workshopConfig.initialRoute)
|
|
1353
982
|
});
|
|
1354
983
|
const appConfig = {
|
|
1355
984
|
stackBlitzConfig: epicshopConfig.stackBlitzConfig,
|
|
@@ -1365,7 +994,7 @@ async function getAppConfig(fullPath) {
|
|
|
1365
994
|
try {
|
|
1366
995
|
return AppConfigSchema.parse(appConfig);
|
|
1367
996
|
} catch (error) {
|
|
1368
|
-
if (error instanceof z
|
|
997
|
+
if (error instanceof z.ZodError) {
|
|
1369
998
|
const flattenedErrors = error.flatten();
|
|
1370
999
|
const errorMessages = Object.entries(flattenedErrors.fieldErrors).map(([field, errors]) => `${field}: ${errors == null ? void 0 : errors.join(", ")}`).concat(flattenedErrors.formErrors);
|
|
1371
1000
|
throw new Error(
|
|
@@ -1376,11 +1005,11 @@ ${errorMessages.join("\n")}`
|
|
|
1376
1005
|
throw error;
|
|
1377
1006
|
}
|
|
1378
1007
|
}
|
|
1379
|
-
const schema = z
|
|
1380
|
-
NODE_ENV: z
|
|
1381
|
-
EPICSHOP_GITHUB_REPO: z
|
|
1382
|
-
EPICSHOP_GITHUB_ROOT: z
|
|
1383
|
-
EPICSHOP_CONTEXT_CWD: z
|
|
1008
|
+
const schema = z.object({
|
|
1009
|
+
NODE_ENV: z.enum(["production", "development", "test"]).default("development"),
|
|
1010
|
+
EPICSHOP_GITHUB_REPO: z.string(),
|
|
1011
|
+
EPICSHOP_GITHUB_ROOT: z.string(),
|
|
1012
|
+
EPICSHOP_CONTEXT_CWD: z.string()
|
|
1384
1013
|
});
|
|
1385
1014
|
function init$1() {
|
|
1386
1015
|
const parsed = schema.safeParse(process.env);
|
|
@@ -1665,92 +1294,92 @@ const playgroundAppNameInfoPath = path$1.join(
|
|
|
1665
1294
|
"epicshop",
|
|
1666
1295
|
"playground.json"
|
|
1667
1296
|
);
|
|
1668
|
-
const BaseAppSchema = z
|
|
1297
|
+
const BaseAppSchema = z.object({
|
|
1669
1298
|
/** a unique identifier for the app */
|
|
1670
|
-
name: z
|
|
1299
|
+
name: z.string(),
|
|
1671
1300
|
/** the title of the app used for display (comes from the package.json title prop) */
|
|
1672
|
-
title: z
|
|
1301
|
+
title: z.string(),
|
|
1673
1302
|
/** used when displaying the list of files to match the list of apps in the file system (comes the name of the directory of the app) */
|
|
1674
|
-
dirName: z
|
|
1675
|
-
fullPath: z
|
|
1676
|
-
relativePath: z
|
|
1677
|
-
instructionsCode: z
|
|
1678
|
-
epicVideoEmbeds: z
|
|
1679
|
-
test: z
|
|
1680
|
-
z
|
|
1681
|
-
type: z
|
|
1682
|
-
pathname: z
|
|
1683
|
-
testFiles: z
|
|
1303
|
+
dirName: z.string(),
|
|
1304
|
+
fullPath: z.string(),
|
|
1305
|
+
relativePath: z.string(),
|
|
1306
|
+
instructionsCode: z.string().optional(),
|
|
1307
|
+
epicVideoEmbeds: z.array(z.string()).optional(),
|
|
1308
|
+
test: z.union([
|
|
1309
|
+
z.object({
|
|
1310
|
+
type: z.literal("browser"),
|
|
1311
|
+
pathname: z.string(),
|
|
1312
|
+
testFiles: z.array(z.string())
|
|
1684
1313
|
}),
|
|
1685
|
-
z
|
|
1686
|
-
z
|
|
1314
|
+
z.object({ type: z.literal("script"), script: z.string() }),
|
|
1315
|
+
z.object({ type: z.literal("none") })
|
|
1687
1316
|
]),
|
|
1688
|
-
dev: z
|
|
1689
|
-
z
|
|
1690
|
-
z
|
|
1691
|
-
type: z
|
|
1692
|
-
portNumber: z
|
|
1693
|
-
initialRoute: z
|
|
1317
|
+
dev: z.union([
|
|
1318
|
+
z.object({ type: z.literal("browser"), pathname: z.string() }),
|
|
1319
|
+
z.object({
|
|
1320
|
+
type: z.literal("script"),
|
|
1321
|
+
portNumber: z.number(),
|
|
1322
|
+
initialRoute: z.string()
|
|
1694
1323
|
}),
|
|
1695
|
-
z
|
|
1324
|
+
z.object({ type: z.literal("none") })
|
|
1696
1325
|
]),
|
|
1697
|
-
stackBlitzUrl: z
|
|
1326
|
+
stackBlitzUrl: z.string().nullable()
|
|
1698
1327
|
});
|
|
1699
1328
|
const BaseExerciseStepAppSchema = BaseAppSchema.extend({
|
|
1700
|
-
exerciseNumber: z
|
|
1701
|
-
stepNumber: z
|
|
1329
|
+
exerciseNumber: z.number(),
|
|
1330
|
+
stepNumber: z.number()
|
|
1702
1331
|
});
|
|
1703
1332
|
const ProblemAppSchema = BaseExerciseStepAppSchema.extend({
|
|
1704
|
-
type: z
|
|
1705
|
-
solutionName: z
|
|
1333
|
+
type: z.literal("problem"),
|
|
1334
|
+
solutionName: z.string().nullable()
|
|
1706
1335
|
});
|
|
1707
1336
|
const SolutionAppSchema = BaseExerciseStepAppSchema.extend({
|
|
1708
|
-
type: z
|
|
1709
|
-
problemName: z
|
|
1337
|
+
type: z.literal("solution"),
|
|
1338
|
+
problemName: z.string().nullable()
|
|
1710
1339
|
});
|
|
1711
1340
|
const ExampleAppSchema = BaseAppSchema.extend({
|
|
1712
|
-
type: z
|
|
1341
|
+
type: z.literal("example")
|
|
1713
1342
|
});
|
|
1714
1343
|
const PlaygroundAppSchema = BaseAppSchema.extend({
|
|
1715
|
-
type: z
|
|
1716
|
-
appName: z
|
|
1717
|
-
isUpToDate: z
|
|
1344
|
+
type: z.literal("playground"),
|
|
1345
|
+
appName: z.string(),
|
|
1346
|
+
isUpToDate: z.boolean()
|
|
1718
1347
|
});
|
|
1719
|
-
z
|
|
1348
|
+
z.object({
|
|
1720
1349
|
/** a unique identifier for the exercise */
|
|
1721
|
-
exerciseNumber: z
|
|
1350
|
+
exerciseNumber: z.number(),
|
|
1722
1351
|
/** used when displaying the list of files to match the list of apps in the file system (comes the name of the directory of the app) */
|
|
1723
|
-
dirName: z
|
|
1352
|
+
dirName: z.string(),
|
|
1724
1353
|
/** the title of the app used for display (comes from the first h1 in the README) */
|
|
1725
|
-
title: z
|
|
1726
|
-
instructionsCode: z
|
|
1727
|
-
finishedCode: z
|
|
1728
|
-
instructionsEpicVideoEmbeds: z
|
|
1729
|
-
finishedEpicVideoEmbeds: z
|
|
1730
|
-
steps: z
|
|
1731
|
-
z
|
|
1732
|
-
z
|
|
1733
|
-
stepNumber: z
|
|
1354
|
+
title: z.string(),
|
|
1355
|
+
instructionsCode: z.string().optional(),
|
|
1356
|
+
finishedCode: z.string().optional(),
|
|
1357
|
+
instructionsEpicVideoEmbeds: z.array(z.string()).optional(),
|
|
1358
|
+
finishedEpicVideoEmbeds: z.array(z.string()).optional(),
|
|
1359
|
+
steps: z.array(
|
|
1360
|
+
z.union([
|
|
1361
|
+
z.object({
|
|
1362
|
+
stepNumber: z.number(),
|
|
1734
1363
|
problem: ProblemAppSchema,
|
|
1735
1364
|
solution: SolutionAppSchema
|
|
1736
1365
|
}),
|
|
1737
|
-
z
|
|
1738
|
-
stepNumber: z
|
|
1366
|
+
z.object({
|
|
1367
|
+
stepNumber: z.number(),
|
|
1739
1368
|
problem: ProblemAppSchema,
|
|
1740
|
-
solution: z
|
|
1369
|
+
solution: z.never().optional()
|
|
1741
1370
|
}),
|
|
1742
|
-
z
|
|
1743
|
-
stepNumber: z
|
|
1744
|
-
problem: z
|
|
1371
|
+
z.object({
|
|
1372
|
+
stepNumber: z.number(),
|
|
1373
|
+
problem: z.never().optional(),
|
|
1745
1374
|
solution: SolutionAppSchema
|
|
1746
1375
|
})
|
|
1747
1376
|
])
|
|
1748
1377
|
),
|
|
1749
|
-
problems: z
|
|
1750
|
-
solutions: z
|
|
1378
|
+
problems: z.array(ProblemAppSchema),
|
|
1379
|
+
solutions: z.array(SolutionAppSchema)
|
|
1751
1380
|
});
|
|
1752
|
-
const ExerciseStepAppSchema = z
|
|
1753
|
-
const AppSchema = z
|
|
1381
|
+
const ExerciseStepAppSchema = z.union([ProblemAppSchema, SolutionAppSchema]);
|
|
1382
|
+
const AppSchema = z.union([
|
|
1754
1383
|
ExerciseStepAppSchema,
|
|
1755
1384
|
PlaygroundAppSchema,
|
|
1756
1385
|
ExampleAppSchema
|
|
@@ -1774,7 +1403,7 @@ function isExerciseStepApp(app) {
|
|
|
1774
1403
|
return isProblemApp(app) || isSolutionApp(app);
|
|
1775
1404
|
}
|
|
1776
1405
|
function exists(file) {
|
|
1777
|
-
return fs.promises.access(file, fs.constants.F_OK).then(
|
|
1406
|
+
return fs$1.promises.access(file, fs$1.constants.F_OK).then(
|
|
1778
1407
|
() => true,
|
|
1779
1408
|
() => false
|
|
1780
1409
|
);
|
|
@@ -1817,9 +1446,6 @@ function getForceFresh$1(cacheEntry) {
|
|
|
1817
1446
|
if (!latestModifiedTime) return void 0;
|
|
1818
1447
|
return latestModifiedTime > cacheEntry.metadata.createdTime ? true : void 0;
|
|
1819
1448
|
}
|
|
1820
|
-
function setModifiedTimesForDir(dir) {
|
|
1821
|
-
modifiedTimes.set(dir, Date.now());
|
|
1822
|
-
}
|
|
1823
1449
|
function getForceFreshForDir(cacheEntry, ...dirs) {
|
|
1824
1450
|
const truthyDirs = dirs.filter(Boolean);
|
|
1825
1451
|
for (const d of truthyDirs) {
|
|
@@ -1837,7 +1463,7 @@ function getForceFreshForDir(cacheEntry, ...dirs) {
|
|
|
1837
1463
|
}
|
|
1838
1464
|
async function readDir(dir) {
|
|
1839
1465
|
if (await exists(dir)) {
|
|
1840
|
-
return fs.promises.readdir(dir);
|
|
1466
|
+
return fs$1.promises.readdir(dir);
|
|
1841
1467
|
}
|
|
1842
1468
|
return [];
|
|
1843
1469
|
}
|
|
@@ -1991,10 +1617,10 @@ async function getApps({
|
|
|
1991
1617
|
});
|
|
1992
1618
|
return apps;
|
|
1993
1619
|
}
|
|
1994
|
-
const AppIdInfoSchema = z
|
|
1995
|
-
exerciseNumber: z
|
|
1996
|
-
stepNumber: z
|
|
1997
|
-
type: z
|
|
1620
|
+
const AppIdInfoSchema = z.object({
|
|
1621
|
+
exerciseNumber: z.string(),
|
|
1622
|
+
stepNumber: z.string(),
|
|
1623
|
+
type: z.union([z.literal("problem"), z.literal("solution")])
|
|
1998
1624
|
});
|
|
1999
1625
|
function extractNumbersAndTypeFromAppNameOrPath(fullPathOrAppName) {
|
|
2000
1626
|
var _a2;
|
|
@@ -2089,7 +1715,7 @@ async function findSolutionDir({
|
|
|
2089
1715
|
const { stepNumber } = info;
|
|
2090
1716
|
const paddedStepNumber = stepNumber.toString().padStart(2, "0");
|
|
2091
1717
|
const parentDir = path$1.dirname(fullPath);
|
|
2092
|
-
const siblingDirs = await fs.promises.readdir(parentDir);
|
|
1718
|
+
const siblingDirs = await fs$1.promises.readdir(parentDir);
|
|
2093
1719
|
const solutionDir = siblingDirs.find(
|
|
2094
1720
|
(dir) => dir.startsWith(`${paddedStepNumber}.solution`)
|
|
2095
1721
|
);
|
|
@@ -2116,7 +1742,7 @@ async function findProblemDir({
|
|
|
2116
1742
|
const { stepNumber } = info;
|
|
2117
1743
|
const paddedStepNumber = stepNumber.toString().padStart(2, "0");
|
|
2118
1744
|
const parentDir = path$1.dirname(fullPath);
|
|
2119
|
-
const siblingDirs = await fs.promises.readdir(parentDir);
|
|
1745
|
+
const siblingDirs = await fs$1.promises.readdir(parentDir);
|
|
2120
1746
|
const problemDir = siblingDirs.find(
|
|
2121
1747
|
(dir) => dir.endsWith("problem") && dir.includes(paddedStepNumber)
|
|
2122
1748
|
);
|
|
@@ -2143,7 +1769,7 @@ async function getTestInfo({
|
|
|
2143
1769
|
return { type: "script", script: testScript };
|
|
2144
1770
|
}
|
|
2145
1771
|
const testAppFullPath = await findSolutionDir({ fullPath }) ?? fullPath;
|
|
2146
|
-
const dirList = await fs.promises.readdir(testAppFullPath);
|
|
1772
|
+
const dirList = await fs$1.promises.readdir(testAppFullPath);
|
|
2147
1773
|
const testFiles = dirList.filter((item) => item.includes(".test."));
|
|
2148
1774
|
if (testFiles.length) {
|
|
2149
1775
|
return {
|
|
@@ -2460,10 +2086,10 @@ async function requireExerciseApp(params, { request, timings } = {}) {
|
|
|
2460
2086
|
}
|
|
2461
2087
|
return app;
|
|
2462
2088
|
}
|
|
2463
|
-
const ExerciseAppParamsSchema$1 = z
|
|
2464
|
-
type: z
|
|
2465
|
-
exerciseNumber: z
|
|
2466
|
-
stepNumber: z
|
|
2089
|
+
const ExerciseAppParamsSchema$1 = z.object({
|
|
2090
|
+
type: z.union([z.literal("problem"), z.literal("solution")]),
|
|
2091
|
+
exerciseNumber: z.coerce.number().finite(),
|
|
2092
|
+
stepNumber: z.coerce.number().finite()
|
|
2467
2093
|
});
|
|
2468
2094
|
async function getExerciseApp(params, { request, timings } = {}) {
|
|
2469
2095
|
const result = ExerciseAppParamsSchema$1.safeParse(params);
|
|
@@ -2627,7 +2253,7 @@ async function getPlaygroundAppName() {
|
|
|
2627
2253
|
return null;
|
|
2628
2254
|
}
|
|
2629
2255
|
try {
|
|
2630
|
-
const jsonString = await fs.promises.readFile(
|
|
2256
|
+
const jsonString = await fs$1.promises.readFile(
|
|
2631
2257
|
playgroundAppNameInfoPath,
|
|
2632
2258
|
"utf8"
|
|
2633
2259
|
);
|
|
@@ -2640,7 +2266,7 @@ async function getPlaygroundAppName() {
|
|
|
2640
2266
|
}
|
|
2641
2267
|
async function getDirModifiedTime(dir) {
|
|
2642
2268
|
const isIgnored = await isGitIgnored({ cwd: dir });
|
|
2643
|
-
const files = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
2269
|
+
const files = await fs$1.promises.readdir(dir, { withFileTypes: true });
|
|
2644
2270
|
const modifiedTimes2 = await Promise.all(
|
|
2645
2271
|
files.map(async (file) => {
|
|
2646
2272
|
if (isIgnored(file.name)) return 0;
|
|
@@ -2649,7 +2275,7 @@ async function getDirModifiedTime(dir) {
|
|
|
2649
2275
|
return getDirModifiedTime(filePath);
|
|
2650
2276
|
} else {
|
|
2651
2277
|
try {
|
|
2652
|
-
const { mtimeMs } = await fs.promises.stat(filePath);
|
|
2278
|
+
const { mtimeMs } = await fs$1.promises.stat(filePath);
|
|
2653
2279
|
return mtimeMs;
|
|
2654
2280
|
} catch {
|
|
2655
2281
|
return 0;
|
|
@@ -3327,10 +2953,10 @@ function setTheme(theme) {
|
|
|
3327
2953
|
});
|
|
3328
2954
|
}
|
|
3329
2955
|
const ROUTE_PATH = "/theme";
|
|
3330
|
-
const ThemeFormSchema = z
|
|
3331
|
-
theme: z
|
|
2956
|
+
const ThemeFormSchema = z.object({
|
|
2957
|
+
theme: z.enum(["system", "light", "dark"])
|
|
3332
2958
|
});
|
|
3333
|
-
async function action$
|
|
2959
|
+
async function action$b({ request }) {
|
|
3334
2960
|
const formData = await request.formData();
|
|
3335
2961
|
const submission = parseWithZod(formData, {
|
|
3336
2962
|
schema: ThemeFormSchema
|
|
@@ -3403,11 +3029,11 @@ function useTheme() {
|
|
|
3403
3029
|
const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3404
3030
|
__proto__: null,
|
|
3405
3031
|
ThemeSwitch,
|
|
3406
|
-
action: action$
|
|
3032
|
+
action: action$b,
|
|
3407
3033
|
useTheme
|
|
3408
3034
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
3409
3035
|
const appStylesheetUrl = "/assets/app-b7uXHF5m.css";
|
|
3410
|
-
const tailwindStylesheetUrl = "/assets/tailwind-
|
|
3036
|
+
const tailwindStylesheetUrl = "/assets/tailwind-B9pSujyx.css";
|
|
3411
3037
|
const cookieName = "EpicShop_confetti";
|
|
3412
3038
|
function getConfetti(request) {
|
|
3413
3039
|
const cookieHeader = request.headers.get("cookie");
|
|
@@ -3425,39 +3051,39 @@ function createConfettiHeaders(value = String(Date.now())) {
|
|
|
3425
3051
|
})
|
|
3426
3052
|
});
|
|
3427
3053
|
}
|
|
3428
|
-
const Transcript = z
|
|
3429
|
-
const EpicVideoInfoSchema = z
|
|
3054
|
+
const Transcript = z.string().nullable().optional().transform((s) => s ?? "Transcripts not available");
|
|
3055
|
+
const EpicVideoInfoSchema = z.object({
|
|
3430
3056
|
transcript: Transcript,
|
|
3431
|
-
muxPlaybackId: z
|
|
3057
|
+
muxPlaybackId: z.string()
|
|
3432
3058
|
});
|
|
3433
|
-
const EpicVideoRegionRestrictedErrorSchema = z
|
|
3434
|
-
requestCountry: z
|
|
3435
|
-
restrictedCountry: z
|
|
3436
|
-
isRegionRestricted: z
|
|
3059
|
+
const EpicVideoRegionRestrictedErrorSchema = z.object({
|
|
3060
|
+
requestCountry: z.string(),
|
|
3061
|
+
restrictedCountry: z.string(),
|
|
3062
|
+
isRegionRestricted: z.literal(true)
|
|
3437
3063
|
});
|
|
3438
|
-
const CachedEpicVideoInfoSchema = z
|
|
3064
|
+
const CachedEpicVideoInfoSchema = z.object({
|
|
3439
3065
|
transcript: Transcript,
|
|
3440
|
-
muxPlaybackId: z
|
|
3441
|
-
status: z
|
|
3442
|
-
statusCode: z
|
|
3443
|
-
statusText: z
|
|
3066
|
+
muxPlaybackId: z.string(),
|
|
3067
|
+
status: z.literal("success"),
|
|
3068
|
+
statusCode: z.number(),
|
|
3069
|
+
statusText: z.string()
|
|
3444
3070
|
}).or(
|
|
3445
|
-
z
|
|
3446
|
-
status: z
|
|
3447
|
-
statusCode: z
|
|
3448
|
-
statusText: z
|
|
3449
|
-
type: z
|
|
3071
|
+
z.object({
|
|
3072
|
+
status: z.literal("error"),
|
|
3073
|
+
statusCode: z.number(),
|
|
3074
|
+
statusText: z.string(),
|
|
3075
|
+
type: z.literal("unknown")
|
|
3450
3076
|
})
|
|
3451
3077
|
).or(
|
|
3452
|
-
z
|
|
3453
|
-
status: z
|
|
3454
|
-
statusCode: z
|
|
3455
|
-
statusText: z
|
|
3456
|
-
type: z
|
|
3457
|
-
requestCountry: z
|
|
3458
|
-
restrictedCountry: z
|
|
3078
|
+
z.object({
|
|
3079
|
+
status: z.literal("error"),
|
|
3080
|
+
statusCode: z.number(),
|
|
3081
|
+
statusText: z.string(),
|
|
3082
|
+
type: z.literal("region-restricted"),
|
|
3083
|
+
requestCountry: z.string(),
|
|
3084
|
+
restrictedCountry: z.string()
|
|
3459
3085
|
})
|
|
3460
|
-
).or(z
|
|
3086
|
+
).or(z.null());
|
|
3461
3087
|
async function getEpicVideoInfos(epicWebUrls, { request, timings } = {}) {
|
|
3462
3088
|
if (!epicWebUrls) return {};
|
|
3463
3089
|
const authInfo = await getAuthInfo();
|
|
@@ -3571,10 +3197,10 @@ async function getEpicProgress({
|
|
|
3571
3197
|
} = getWorkshopConfig();
|
|
3572
3198
|
if (!authInfo) return [];
|
|
3573
3199
|
const tokenPart = md5(authInfo.tokenSet.access_token);
|
|
3574
|
-
const EpicProgressSchema = z
|
|
3575
|
-
z
|
|
3576
|
-
lessonId: z
|
|
3577
|
-
completedAt: z
|
|
3200
|
+
const EpicProgressSchema = z.array(
|
|
3201
|
+
z.object({
|
|
3202
|
+
lessonId: z.string(),
|
|
3203
|
+
completedAt: z.string().nullable()
|
|
3578
3204
|
})
|
|
3579
3205
|
);
|
|
3580
3206
|
return cachified({
|
|
@@ -3735,17 +3361,17 @@ async function updateProgress({ lessonSlug, complete }, {
|
|
|
3735
3361
|
}
|
|
3736
3362
|
return { status: "success" };
|
|
3737
3363
|
}
|
|
3738
|
-
const ModuleSchema = z
|
|
3739
|
-
resources: z
|
|
3740
|
-
z
|
|
3741
|
-
z
|
|
3742
|
-
_type: z
|
|
3743
|
-
_id: z
|
|
3744
|
-
slug: z
|
|
3364
|
+
const ModuleSchema = z.object({
|
|
3365
|
+
resources: z.array(
|
|
3366
|
+
z.union([
|
|
3367
|
+
z.object({
|
|
3368
|
+
_type: z.literal("lesson"),
|
|
3369
|
+
_id: z.string(),
|
|
3370
|
+
slug: z.string()
|
|
3745
3371
|
}),
|
|
3746
|
-
z
|
|
3747
|
-
_type: z
|
|
3748
|
-
lessons: z
|
|
3372
|
+
z.object({
|
|
3373
|
+
_type: z.literal("section"),
|
|
3374
|
+
lessons: z.array(z.object({ _id: z.string(), slug: z.string() }))
|
|
3749
3375
|
})
|
|
3750
3376
|
])
|
|
3751
3377
|
)
|
|
@@ -3808,7 +3434,7 @@ async function userHasAccessToWorkshop({
|
|
|
3808
3434
|
forceFresh,
|
|
3809
3435
|
timings,
|
|
3810
3436
|
ttl: 1e3 * 5,
|
|
3811
|
-
checkValue: z
|
|
3437
|
+
checkValue: z.boolean(),
|
|
3812
3438
|
async getFreshValue(context) {
|
|
3813
3439
|
const response = await fetch(
|
|
3814
3440
|
`https://${host}/api/workshops/${encodeURIComponent(slug)}/access`,
|
|
@@ -3837,10 +3463,10 @@ function useOptionalWorkshopTitle() {
|
|
|
3837
3463
|
const data = useRouteLoaderData("root");
|
|
3838
3464
|
return (data == null ? void 0 : data.workshopTitle) ?? null;
|
|
3839
3465
|
}
|
|
3840
|
-
const ExerciseAppParamsSchema = z
|
|
3841
|
-
type: z
|
|
3842
|
-
exerciseNumber: z
|
|
3843
|
-
stepNumber: z
|
|
3466
|
+
const ExerciseAppParamsSchema = z.object({
|
|
3467
|
+
type: z.union([z.literal("problem"), z.literal("solution")]).optional(),
|
|
3468
|
+
exerciseNumber: z.coerce.number().finite(),
|
|
3469
|
+
stepNumber: z.coerce.number().finite().optional()
|
|
3844
3470
|
});
|
|
3845
3471
|
function usePresenceSocket(user) {
|
|
3846
3472
|
const workshopTitle = useOptionalWorkshopTitle();
|
|
@@ -3980,11 +3606,11 @@ function getSeoMetaTags({
|
|
|
3980
3606
|
].filter(Boolean);
|
|
3981
3607
|
}
|
|
3982
3608
|
const toastKey = "toast";
|
|
3983
|
-
const TypeSchema = z
|
|
3984
|
-
const ToastSchema = z
|
|
3985
|
-
description: z
|
|
3986
|
-
id: z
|
|
3987
|
-
title: z
|
|
3609
|
+
const TypeSchema = z.enum(["message", "success", "error"]);
|
|
3610
|
+
const ToastSchema = z.object({
|
|
3611
|
+
description: z.string(),
|
|
3612
|
+
id: z.string().default(() => createId()),
|
|
3613
|
+
title: z.string().optional(),
|
|
3988
3614
|
type: TypeSchema.default("message")
|
|
3989
3615
|
});
|
|
3990
3616
|
const toastSessionStorage = createCookieSessionStorage({
|
|
@@ -4613,7 +4239,7 @@ function useProgressItem({
|
|
|
4613
4239
|
}
|
|
4614
4240
|
return null;
|
|
4615
4241
|
}
|
|
4616
|
-
async function action$
|
|
4242
|
+
async function action$a({ request }) {
|
|
4617
4243
|
ensureUndeployed();
|
|
4618
4244
|
await requireAuthInfo({ request });
|
|
4619
4245
|
const formData = await request.formData();
|
|
@@ -4784,7 +4410,7 @@ function ProgressToggle({
|
|
|
4784
4410
|
const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
4785
4411
|
__proto__: null,
|
|
4786
4412
|
ProgressToggle,
|
|
4787
|
-
action: action$
|
|
4413
|
+
action: action$a,
|
|
4788
4414
|
useEpicProgress,
|
|
4789
4415
|
useExerciseProgressClassName,
|
|
4790
4416
|
useNextExerciseRoute,
|
|
@@ -5940,12 +5566,12 @@ function ButtonLink({
|
|
|
5940
5566
|
}
|
|
5941
5567
|
const port = process.env.PORT || "5639";
|
|
5942
5568
|
const scope = "guilds.join identify messages.read";
|
|
5943
|
-
const DiscordApiResponseSchema = z
|
|
5944
|
-
status: z
|
|
5945
|
-
error: z
|
|
5569
|
+
const DiscordApiResponseSchema = z.object({
|
|
5570
|
+
status: z.literal("error"),
|
|
5571
|
+
error: z.string()
|
|
5946
5572
|
}).or(
|
|
5947
|
-
z
|
|
5948
|
-
status: z
|
|
5573
|
+
z.object({
|
|
5574
|
+
status: z.literal("success"),
|
|
5949
5575
|
member: DiscordMemberSchema
|
|
5950
5576
|
})
|
|
5951
5577
|
);
|
|
@@ -6026,7 +5652,7 @@ async function loader$u({ request }) {
|
|
|
6026
5652
|
await requireAuthInfo({ request });
|
|
6027
5653
|
return json$1({ discordAuthUrl: getDiscordAuthURL() });
|
|
6028
5654
|
}
|
|
6029
|
-
async function action$
|
|
5655
|
+
async function action$9({ request }) {
|
|
6030
5656
|
ensureUndeployed();
|
|
6031
5657
|
const formData = await request.formData();
|
|
6032
5658
|
const intent = formData.get("intent");
|
|
@@ -6150,7 +5776,7 @@ function Account() {
|
|
|
6150
5776
|
}
|
|
6151
5777
|
const route3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
6152
5778
|
__proto__: null,
|
|
6153
|
-
action: action$
|
|
5779
|
+
action: action$9,
|
|
6154
5780
|
default: Account,
|
|
6155
5781
|
handle: handle$7,
|
|
6156
5782
|
loader: loader$u
|
|
@@ -6179,7 +5805,7 @@ async function compileTs(filePath, fullPath, {
|
|
|
6179
5805
|
getFreshValue: async () => {
|
|
6180
5806
|
const result = await esbuild.build({
|
|
6181
5807
|
stdin: {
|
|
6182
|
-
contents: await fs
|
|
5808
|
+
contents: await fs.promises.readFile(filePath, "utf-8"),
|
|
6183
5809
|
// NOTE: if the fileAppName is specified, then we're resolving to a different
|
|
6184
5810
|
// app than the one we're serving the file from. We do this so the tests
|
|
6185
5811
|
// can live in the solution directory, but be run against the problem
|
|
@@ -6312,7 +5938,7 @@ async function loader$s(args) {
|
|
|
6312
5938
|
api.cleanupError(error);
|
|
6313
5939
|
}
|
|
6314
5940
|
}
|
|
6315
|
-
async function action$
|
|
5941
|
+
async function action$8(args) {
|
|
6316
5942
|
const api = await getApiModule(args);
|
|
6317
5943
|
invariantResponse(
|
|
6318
5944
|
api.mod.action,
|
|
@@ -6326,9 +5952,9 @@ async function action$9(args) {
|
|
|
6326
5952
|
api.cleanupError(error);
|
|
6327
5953
|
}
|
|
6328
5954
|
}
|
|
6329
|
-
const ApiModuleSchema = z
|
|
6330
|
-
loader: z
|
|
6331
|
-
action: z
|
|
5955
|
+
const ApiModuleSchema = z.object({
|
|
5956
|
+
loader: z.function().optional(),
|
|
5957
|
+
action: z.function().optional()
|
|
6332
5958
|
});
|
|
6333
5959
|
async function getApiModule({ request, params }) {
|
|
6334
5960
|
const timings = makeTimings("app-api");
|
|
@@ -6400,7 +6026,7 @@ async function getApiModule({ request, params }) {
|
|
|
6400
6026
|
}
|
|
6401
6027
|
const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
6402
6028
|
__proto__: null,
|
|
6403
|
-
action: action$
|
|
6029
|
+
action: action$8,
|
|
6404
6030
|
loader: loader$s
|
|
6405
6031
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
6406
6032
|
async function loader$r({ request, params }) {
|
|
@@ -6837,9 +6463,9 @@ const route11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
6837
6463
|
default: ExercisesLayout,
|
|
6838
6464
|
handle: handle$5
|
|
6839
6465
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
6840
|
-
const PlaybackTimeSchema = z
|
|
6841
|
-
time: z
|
|
6842
|
-
expiresAt: z
|
|
6466
|
+
const PlaybackTimeSchema = z.object({
|
|
6467
|
+
time: z.number(),
|
|
6468
|
+
expiresAt: z.string()
|
|
6843
6469
|
}).transform((data) => {
|
|
6844
6470
|
return { time: Number(data.time), expiresAt: new Date(data.expiresAt) };
|
|
6845
6471
|
});
|
|
@@ -6856,7 +6482,7 @@ const ignoredInputs = [
|
|
|
6856
6482
|
"mux-player",
|
|
6857
6483
|
"summary"
|
|
6858
6484
|
];
|
|
6859
|
-
async function action$
|
|
6485
|
+
async function action$7({ request }) {
|
|
6860
6486
|
const result = PlayerPreferencesSchema.safeParse(await request.json());
|
|
6861
6487
|
if (!result.success) {
|
|
6862
6488
|
return json$1({ status: "error", error: result.error.flatten() }, {
|
|
@@ -7025,10 +6651,10 @@ function isDeepEqual(obj1, obj2) {
|
|
|
7025
6651
|
}
|
|
7026
6652
|
return true;
|
|
7027
6653
|
}
|
|
7028
|
-
const
|
|
6654
|
+
const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
7029
6655
|
__proto__: null,
|
|
7030
6656
|
MuxPlayer,
|
|
7031
|
-
action: action$
|
|
6657
|
+
action: action$7,
|
|
7032
6658
|
usePlayerPreferences
|
|
7033
6659
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
7034
6660
|
function Loading({
|
|
@@ -7764,7 +7390,7 @@ async function launchEditor(pathList, lineNumber = 1, colNumber = 1) {
|
|
|
7764
7390
|
)) {
|
|
7765
7391
|
acc.errorsList.push(fileName);
|
|
7766
7392
|
} else {
|
|
7767
|
-
if (!fs
|
|
7393
|
+
if (!fs.existsSync(fileName)) {
|
|
7768
7394
|
fsExtra.ensureDirSync(path.dirname(fileName));
|
|
7769
7395
|
fsExtra.writeFileSync(fileName, "", "utf8");
|
|
7770
7396
|
}
|
|
@@ -7854,27 +7480,27 @@ The editor process exited with an error code (${errorCode}).`
|
|
|
7854
7480
|
});
|
|
7855
7481
|
}
|
|
7856
7482
|
function getFileDescriptorSchema(appFile) {
|
|
7857
|
-
return z
|
|
7858
|
-
z
|
|
7859
|
-
type: z
|
|
7860
|
-
file: z
|
|
7483
|
+
return z.union([
|
|
7484
|
+
z.object({
|
|
7485
|
+
type: z.literal("file"),
|
|
7486
|
+
file: z.string()
|
|
7861
7487
|
}),
|
|
7862
|
-
z
|
|
7863
|
-
type: z
|
|
7488
|
+
z.object({
|
|
7489
|
+
type: z.literal("appFile"),
|
|
7864
7490
|
appFile,
|
|
7865
|
-
appName: z
|
|
7491
|
+
appName: z.string()
|
|
7866
7492
|
})
|
|
7867
7493
|
]);
|
|
7868
7494
|
}
|
|
7869
|
-
const LaunchSchema = z
|
|
7870
|
-
z
|
|
7871
|
-
line: z
|
|
7872
|
-
column: z
|
|
7873
|
-
syncTo: getFileDescriptorSchema(z
|
|
7495
|
+
const LaunchSchema = z.intersection(
|
|
7496
|
+
z.object({
|
|
7497
|
+
line: z.coerce.number().optional(),
|
|
7498
|
+
column: z.coerce.number().optional(),
|
|
7499
|
+
syncTo: getFileDescriptorSchema(z.string()).optional()
|
|
7874
7500
|
}),
|
|
7875
|
-
getFileDescriptorSchema(z
|
|
7501
|
+
getFileDescriptorSchema(z.array(z.string()))
|
|
7876
7502
|
);
|
|
7877
|
-
async function action$
|
|
7503
|
+
async function action$6({ request }) {
|
|
7878
7504
|
ensureUndeployed();
|
|
7879
7505
|
const formData = await request.formData();
|
|
7880
7506
|
const syncTo = {
|
|
@@ -8125,7 +7751,7 @@ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
8125
7751
|
__proto__: null,
|
|
8126
7752
|
EditFileOnGitHub,
|
|
8127
7753
|
LaunchEditor,
|
|
8128
|
-
action: action$
|
|
7754
|
+
action: action$6
|
|
8129
7755
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
8130
7756
|
const safePath = (s) => s.replace(/\\/g, "/");
|
|
8131
7757
|
function getRelativePath(file, separator, type) {
|
|
@@ -8959,11 +8585,11 @@ ${getFileCodeblocks(file, filePathApp1, filePathApp2, file.type).join("\n")}
|
|
|
8959
8585
|
const code = await compileMarkdownString(markdownLines.join("\n"));
|
|
8960
8586
|
return code;
|
|
8961
8587
|
}
|
|
8962
|
-
const SetPlaygroundSchema = z
|
|
8963
|
-
appName: z
|
|
8964
|
-
reset: z
|
|
8588
|
+
const SetPlaygroundSchema = z.object({
|
|
8589
|
+
appName: z.string(),
|
|
8590
|
+
reset: z.string().nullable().optional().transform((v) => v === "true")
|
|
8965
8591
|
});
|
|
8966
|
-
async function action$
|
|
8592
|
+
async function action$5({ request }) {
|
|
8967
8593
|
ensureUndeployed();
|
|
8968
8594
|
const formData = await request.formData();
|
|
8969
8595
|
const rawData = {
|
|
@@ -9143,86 +8769,6 @@ const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
9143
8769
|
PlaygroundChooser,
|
|
9144
8770
|
SetAppToPlayground,
|
|
9145
8771
|
SetPlayground,
|
|
9146
|
-
action: action$6
|
|
9147
|
-
}, Symbol.toStringTag, { value: "Module" }));
|
|
9148
|
-
const cacheSchema = z$1.object({
|
|
9149
|
-
cacheLocation: z$1.string(),
|
|
9150
|
-
embeddedKey: z$1.string(),
|
|
9151
|
-
appFullPath: z$1.string()
|
|
9152
|
-
});
|
|
9153
|
-
function checkFileExists(file) {
|
|
9154
|
-
return fs.promises.access(file, fs.constants.F_OK).then(
|
|
9155
|
-
() => true,
|
|
9156
|
-
() => false
|
|
9157
|
-
);
|
|
9158
|
-
}
|
|
9159
|
-
async function action$5({ request }) {
|
|
9160
|
-
var _a2, _b;
|
|
9161
|
-
ensureUndeployed();
|
|
9162
|
-
const formData = await request.formData();
|
|
9163
|
-
const rawData = {
|
|
9164
|
-
cacheLocation: formData.get("cacheLocation"),
|
|
9165
|
-
embeddedKey: formData.get("embeddedKey"),
|
|
9166
|
-
appFullPath: formData.get("appFullPath")
|
|
9167
|
-
};
|
|
9168
|
-
const { cacheLocation, embeddedKey, appFullPath } = cacheSchema.parse(rawData);
|
|
9169
|
-
if (!await checkFileExists(cacheLocation)) {
|
|
9170
|
-
console.log(`file ${cacheLocation} not found`);
|
|
9171
|
-
return json$1({ success: true });
|
|
9172
|
-
}
|
|
9173
|
-
const cached = JSON.parse(
|
|
9174
|
-
await fs.promises.readFile(cacheLocation, "utf-8")
|
|
9175
|
-
);
|
|
9176
|
-
const cachedEmbeddedFiles = new Map(
|
|
9177
|
-
Object.entries(((_a2 = cached == null ? void 0 : cached.value) == null ? void 0 : _a2.embeddedFiles) ?? {})
|
|
9178
|
-
);
|
|
9179
|
-
if (cachedEmbeddedFiles.has(embeddedKey)) {
|
|
9180
|
-
(_b = cachedEmbeddedFiles.get(embeddedKey)) == null ? true : delete _b.warning;
|
|
9181
|
-
cached.value.embeddedFiles = Object.fromEntries(cachedEmbeddedFiles);
|
|
9182
|
-
}
|
|
9183
|
-
try {
|
|
9184
|
-
cached.value.warningCancled = true;
|
|
9185
|
-
await fs.promises.writeFile(cacheLocation, JSON.stringify(cached));
|
|
9186
|
-
} catch (error) {
|
|
9187
|
-
console.log(
|
|
9188
|
-
`Error when trying to write cache file at ${cacheLocation}`,
|
|
9189
|
-
error
|
|
9190
|
-
);
|
|
9191
|
-
}
|
|
9192
|
-
setModifiedTimesForDir(appFullPath);
|
|
9193
|
-
return jsonWithPE(formData, { success: true });
|
|
9194
|
-
}
|
|
9195
|
-
function UpdateMdxCache({
|
|
9196
|
-
handleClick,
|
|
9197
|
-
cacheLocation,
|
|
9198
|
-
embeddedKey,
|
|
9199
|
-
appFullPath
|
|
9200
|
-
}) {
|
|
9201
|
-
const fetcher = useFetcher();
|
|
9202
|
-
const peRedirectInput = usePERedirectInput();
|
|
9203
|
-
return /* @__PURE__ */ jsxs(fetcher.Form, { action: "/update-mdx-cache", method: "POST", children: [
|
|
9204
|
-
peRedirectInput,
|
|
9205
|
-
showProgressBarField,
|
|
9206
|
-
/* @__PURE__ */ jsx("input", { type: "hidden", name: "cacheLocation", value: cacheLocation }),
|
|
9207
|
-
/* @__PURE__ */ jsx("input", { type: "hidden", name: "embeddedKey", value: embeddedKey }),
|
|
9208
|
-
/* @__PURE__ */ jsx("input", { type: "hidden", name: "appFullPath", value: appFullPath }),
|
|
9209
|
-
/* @__PURE__ */ jsx(
|
|
9210
|
-
"button",
|
|
9211
|
-
{
|
|
9212
|
-
type: "submit",
|
|
9213
|
-
onClick: handleClick,
|
|
9214
|
-
className: clsx(
|
|
9215
|
-
"launch_button",
|
|
9216
|
-
fetcher.state === "idle" ? null : "cursor-progress"
|
|
9217
|
-
),
|
|
9218
|
-
children: "Cancel Warning"
|
|
9219
|
-
}
|
|
9220
|
-
)
|
|
9221
|
-
] });
|
|
9222
|
-
}
|
|
9223
|
-
const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
9224
|
-
__proto__: null,
|
|
9225
|
-
UpdateMdxCache,
|
|
9226
8772
|
action: action$5
|
|
9227
8773
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
9228
8774
|
const StepContext = React.createContext(null);
|
|
@@ -9240,8 +8786,6 @@ function StepContextProvider({
|
|
|
9240
8786
|
return /* @__PURE__ */ jsx(StepContext.Provider, { value: { inBrowserBrowserRef }, children });
|
|
9241
8787
|
}
|
|
9242
8788
|
const stepMdxComponents = {
|
|
9243
|
-
CodeFile,
|
|
9244
|
-
CodeFileNotification,
|
|
9245
8789
|
DiffLink,
|
|
9246
8790
|
PrevDiffLink,
|
|
9247
8791
|
NextDiffLink,
|
|
@@ -9356,73 +8900,6 @@ function DiffLink({
|
|
|
9356
8900
|
}
|
|
9357
8901
|
return /* @__PURE__ */ jsx(Link, { to: pathToDiff, children });
|
|
9358
8902
|
}
|
|
9359
|
-
function CodeFile({ file }) {
|
|
9360
|
-
return /* @__PURE__ */ jsxs("div", { className: "border-4 border-[#ff4545] bg-[#ff454519] p-4 text-lg", children: [
|
|
9361
|
-
"Something went wrong compiling ",
|
|
9362
|
-
/* @__PURE__ */ jsx("b", { children: "CodeFile" }),
|
|
9363
|
-
" for file: ",
|
|
9364
|
-
/* @__PURE__ */ jsx("u", { children: file }),
|
|
9365
|
-
" to markdown"
|
|
9366
|
-
] });
|
|
9367
|
-
}
|
|
9368
|
-
function CodeFileNotification({
|
|
9369
|
-
file,
|
|
9370
|
-
type = "problem",
|
|
9371
|
-
children,
|
|
9372
|
-
variant,
|
|
9373
|
-
cacheLocation,
|
|
9374
|
-
embeddedKey,
|
|
9375
|
-
...props
|
|
9376
|
-
}) {
|
|
9377
|
-
const [visibility, setVisibility] = useState("visible");
|
|
9378
|
-
const data = useLoaderData();
|
|
9379
|
-
const app = data[type];
|
|
9380
|
-
const handleClick = () => {
|
|
9381
|
-
if (visibility !== "visible") return;
|
|
9382
|
-
setVisibility("collapse");
|
|
9383
|
-
setTimeout(() => {
|
|
9384
|
-
setVisibility("none");
|
|
9385
|
-
}, 400);
|
|
9386
|
-
};
|
|
9387
|
-
const className = clsx(
|
|
9388
|
-
"rounded px-4 py-1 font-mono text-sm font-semibold outline-none transition duration-300 ease-in-out",
|
|
9389
|
-
{
|
|
9390
|
-
"bg-amber-300/70 hover:bg-amber-300/40 active:bg-amber-300/50": variant === "warning",
|
|
9391
|
-
"bg-red-300/70 hover:bg-red-300/40 active:bg-red-300/50": variant === "error"
|
|
9392
|
-
}
|
|
9393
|
-
);
|
|
9394
|
-
return /* @__PURE__ */ jsxs(
|
|
9395
|
-
"div",
|
|
9396
|
-
{
|
|
9397
|
-
className: clsx("notification important h-15 relative", {
|
|
9398
|
-
"duration-400 !my-0 !h-0 !py-0 !opacity-0 transition-all ease-out": visibility !== "visible",
|
|
9399
|
-
hidden: visibility === "none"
|
|
9400
|
-
}),
|
|
9401
|
-
children: [
|
|
9402
|
-
/* @__PURE__ */ jsxs("div", { className: "absolute right-3 top-3 z-50 flex gap-4", children: [
|
|
9403
|
-
app ? /* @__PURE__ */ jsx("div", { className, title: `Edit ${file}`, children: /* @__PURE__ */ jsx(LaunchEditor, { appFile: file, appName: app.name, ...props, children: "Edit this File" }) }) : null,
|
|
9404
|
-
app && variant === "warning" ? /* @__PURE__ */ jsx(
|
|
9405
|
-
"div",
|
|
9406
|
-
{
|
|
9407
|
-
className,
|
|
9408
|
-
title: `Remove the warning from here and from ${file} cache file`,
|
|
9409
|
-
children: /* @__PURE__ */ jsx(
|
|
9410
|
-
UpdateMdxCache,
|
|
9411
|
-
{
|
|
9412
|
-
handleClick,
|
|
9413
|
-
cacheLocation,
|
|
9414
|
-
embeddedKey,
|
|
9415
|
-
appFullPath: app.fullPath
|
|
9416
|
-
}
|
|
9417
|
-
)
|
|
9418
|
-
}
|
|
9419
|
-
) : null
|
|
9420
|
-
] }),
|
|
9421
|
-
children
|
|
9422
|
-
]
|
|
9423
|
-
}
|
|
9424
|
-
);
|
|
9425
|
-
}
|
|
9426
8903
|
function InlineFile({
|
|
9427
8904
|
file,
|
|
9428
8905
|
type = "playground",
|
|
@@ -10039,43 +9516,43 @@ const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
10039
9516
|
PortStopper,
|
|
10040
9517
|
action: action$4
|
|
10041
9518
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
10042
|
-
const historyCallDataSchema = z
|
|
10043
|
-
z
|
|
10044
|
-
type: z
|
|
9519
|
+
const historyCallDataSchema = z.intersection(
|
|
9520
|
+
z.object({
|
|
9521
|
+
type: z.literal("epicshop:history-call")
|
|
10045
9522
|
}),
|
|
10046
|
-
z
|
|
10047
|
-
z
|
|
10048
|
-
method: z
|
|
10049
|
-
args: z
|
|
10050
|
-
z
|
|
10051
|
-
z
|
|
9523
|
+
z.union([
|
|
9524
|
+
z.object({
|
|
9525
|
+
method: z.literal("pushState"),
|
|
9526
|
+
args: z.union([
|
|
9527
|
+
z.tuple([z.object({}).passthrough(), z.unknown()]),
|
|
9528
|
+
z.tuple([z.object({}).passthrough(), z.unknown(), z.string()])
|
|
10052
9529
|
])
|
|
10053
9530
|
}),
|
|
10054
|
-
z
|
|
10055
|
-
method: z
|
|
10056
|
-
args: z
|
|
10057
|
-
z
|
|
10058
|
-
z
|
|
9531
|
+
z.object({
|
|
9532
|
+
method: z.literal("replaceState"),
|
|
9533
|
+
args: z.union([
|
|
9534
|
+
z.tuple([z.object({}).passthrough(), z.unknown()]),
|
|
9535
|
+
z.tuple([z.object({}).passthrough(), z.unknown(), z.string()])
|
|
10059
9536
|
])
|
|
10060
9537
|
}),
|
|
10061
|
-
z
|
|
10062
|
-
method: z
|
|
10063
|
-
args: z
|
|
9538
|
+
z.object({
|
|
9539
|
+
method: z.literal("go"),
|
|
9540
|
+
args: z.tuple([z.number().optional()])
|
|
10064
9541
|
}),
|
|
10065
|
-
z
|
|
10066
|
-
z
|
|
10067
|
-
z
|
|
10068
|
-
method: z
|
|
10069
|
-
pathname: z
|
|
10070
|
-
delta: z
|
|
9542
|
+
z.object({ method: z.literal("forward"), args: z.tuple([]) }),
|
|
9543
|
+
z.object({ method: z.literal("back"), args: z.tuple([]) }),
|
|
9544
|
+
z.object({
|
|
9545
|
+
method: z.literal("popstate"),
|
|
9546
|
+
pathname: z.string(),
|
|
9547
|
+
delta: z.number()
|
|
10071
9548
|
})
|
|
10072
9549
|
])
|
|
10073
9550
|
);
|
|
10074
|
-
const loadedSchema = z
|
|
10075
|
-
type: z
|
|
10076
|
-
url: z
|
|
9551
|
+
const loadedSchema = z.object({
|
|
9552
|
+
type: z.literal("epicshop:loaded"),
|
|
9553
|
+
url: z.string()
|
|
10077
9554
|
});
|
|
10078
|
-
const messageSchema = z
|
|
9555
|
+
const messageSchema = z.union([historyCallDataSchema, loadedSchema]);
|
|
10079
9556
|
function getNewIndex(prevIndex, delta, max) {
|
|
10080
9557
|
return Math.min(Math.max(prevIndex + delta, 0), max);
|
|
10081
9558
|
}
|
|
@@ -10835,49 +10312,49 @@ function getDayjs() {
|
|
|
10835
10312
|
initialized = true;
|
|
10836
10313
|
return dayjs;
|
|
10837
10314
|
}
|
|
10838
|
-
const EmojiDataSchema = z
|
|
10839
|
-
z
|
|
10840
|
-
emojiName: z
|
|
10841
|
-
emojiUrl: z
|
|
10315
|
+
const EmojiDataSchema = z.union([
|
|
10316
|
+
z.object({
|
|
10317
|
+
emojiName: z.never().optional(),
|
|
10318
|
+
emojiUrl: z.string()
|
|
10842
10319
|
}),
|
|
10843
|
-
z
|
|
10844
|
-
emojiName: z
|
|
10845
|
-
emojiUrl: z
|
|
10320
|
+
z.object({
|
|
10321
|
+
emojiName: z.string(),
|
|
10322
|
+
emojiUrl: z.never().optional()
|
|
10846
10323
|
}),
|
|
10847
|
-
z
|
|
10848
|
-
emojiName: z
|
|
10849
|
-
emojiUrl: z
|
|
10324
|
+
z.object({
|
|
10325
|
+
emojiName: z.never().optional(),
|
|
10326
|
+
emojiUrl: z.never().optional()
|
|
10850
10327
|
})
|
|
10851
10328
|
]);
|
|
10852
|
-
const ThreadItemSchema = z
|
|
10853
|
-
id: z
|
|
10854
|
-
tags: z
|
|
10855
|
-
z
|
|
10856
|
-
name: z
|
|
10329
|
+
const ThreadItemSchema = z.object({
|
|
10330
|
+
id: z.string(),
|
|
10331
|
+
tags: z.array(
|
|
10332
|
+
z.object({
|
|
10333
|
+
name: z.string()
|
|
10857
10334
|
}).and(EmojiDataSchema)
|
|
10858
10335
|
),
|
|
10859
|
-
name: z
|
|
10860
|
-
link: z
|
|
10861
|
-
authorDisplayName: z
|
|
10862
|
-
authorHexAccentColor: z
|
|
10863
|
-
authorAvatarUrl: z
|
|
10864
|
-
messagePreview: z
|
|
10865
|
-
messageCount: z
|
|
10866
|
-
lastUpdated: z
|
|
10867
|
-
previewImageUrl: z
|
|
10868
|
-
reactions: z
|
|
10869
|
-
z
|
|
10870
|
-
count: z
|
|
10336
|
+
name: z.string(),
|
|
10337
|
+
link: z.string(),
|
|
10338
|
+
authorDisplayName: z.string(),
|
|
10339
|
+
authorHexAccentColor: z.string().nullable().optional(),
|
|
10340
|
+
authorAvatarUrl: z.string().nullable(),
|
|
10341
|
+
messagePreview: z.string(),
|
|
10342
|
+
messageCount: z.number(),
|
|
10343
|
+
lastUpdated: z.string(),
|
|
10344
|
+
previewImageUrl: z.string().nullable(),
|
|
10345
|
+
reactions: z.array(
|
|
10346
|
+
z.object({
|
|
10347
|
+
count: z.number()
|
|
10871
10348
|
}).and(EmojiDataSchema)
|
|
10872
10349
|
)
|
|
10873
10350
|
});
|
|
10874
|
-
const ThreadDataSchema = z
|
|
10875
|
-
const EpicForumResponseSchema = z
|
|
10876
|
-
status: z
|
|
10877
|
-
error: z
|
|
10351
|
+
const ThreadDataSchema = z.array(ThreadItemSchema);
|
|
10352
|
+
const EpicForumResponseSchema = z.object({
|
|
10353
|
+
status: z.literal("error"),
|
|
10354
|
+
error: z.string()
|
|
10878
10355
|
}).or(
|
|
10879
|
-
z
|
|
10880
|
-
status: z
|
|
10356
|
+
z.object({
|
|
10357
|
+
status: z.literal("success"),
|
|
10881
10358
|
threadData: ThreadDataSchema
|
|
10882
10359
|
})
|
|
10883
10360
|
);
|
|
@@ -11195,24 +10672,24 @@ function useAnsiToHtml() {
|
|
|
11195
10672
|
function stripCursorMovements(data) {
|
|
11196
10673
|
return data.replace(/\u001b\[\d+A/g, "").replace(/\u001b\[\d+K/g, "");
|
|
11197
10674
|
}
|
|
11198
|
-
const testRunnerStatusDataSchema = z
|
|
11199
|
-
z
|
|
11200
|
-
type: z
|
|
11201
|
-
timestamp: z
|
|
10675
|
+
const testRunnerStatusDataSchema = z.intersection(
|
|
10676
|
+
z.object({
|
|
10677
|
+
type: z.literal("epicshop:test-status-update"),
|
|
10678
|
+
timestamp: z.number()
|
|
11202
10679
|
}),
|
|
11203
|
-
z
|
|
11204
|
-
z
|
|
11205
|
-
z
|
|
11206
|
-
z
|
|
10680
|
+
z.union([
|
|
10681
|
+
z.object({ status: z.literal("pending") }),
|
|
10682
|
+
z.object({ status: z.literal("pass") }),
|
|
10683
|
+
z.object({ status: z.literal("fail"), error: z.string() })
|
|
11207
10684
|
])
|
|
11208
10685
|
);
|
|
11209
|
-
const testRunnerTestStepDataSchema = z
|
|
11210
|
-
type: z
|
|
11211
|
-
status: z
|
|
11212
|
-
title: z
|
|
11213
|
-
timestamp: z
|
|
10686
|
+
const testRunnerTestStepDataSchema = z.object({
|
|
10687
|
+
type: z.literal("epicshop:test-step-update"),
|
|
10688
|
+
status: z.literal("pass"),
|
|
10689
|
+
title: z.string(),
|
|
10690
|
+
timestamp: z.number()
|
|
11214
10691
|
});
|
|
11215
|
-
const testRunnerDataSchema = z
|
|
10692
|
+
const testRunnerDataSchema = z.union([
|
|
11216
10693
|
testRunnerTestStepDataSchema,
|
|
11217
10694
|
testRunnerStatusDataSchema
|
|
11218
10695
|
]);
|
|
@@ -11354,45 +10831,45 @@ function InBrowserTestRunner({
|
|
|
11354
10831
|
}
|
|
11355
10832
|
) }) });
|
|
11356
10833
|
}
|
|
11357
|
-
const testActionSchema = z
|
|
11358
|
-
z
|
|
11359
|
-
intent: z
|
|
11360
|
-
name: z
|
|
10834
|
+
const testActionSchema = z.union([
|
|
10835
|
+
z.object({
|
|
10836
|
+
intent: z.literal("run"),
|
|
10837
|
+
name: z.string()
|
|
11361
10838
|
}),
|
|
11362
|
-
z
|
|
11363
|
-
intent: z
|
|
11364
|
-
name: z
|
|
10839
|
+
z.object({
|
|
10840
|
+
intent: z.literal("stop"),
|
|
10841
|
+
name: z.string()
|
|
11365
10842
|
}),
|
|
11366
|
-
z
|
|
11367
|
-
intent: z
|
|
11368
|
-
name: z
|
|
10843
|
+
z.object({
|
|
10844
|
+
intent: z.literal("clear"),
|
|
10845
|
+
name: z.string()
|
|
11369
10846
|
})
|
|
11370
10847
|
]);
|
|
11371
|
-
const testEventSchema = z
|
|
11372
|
-
z
|
|
11373
|
-
type: z
|
|
11374
|
-
exitCode: z
|
|
11375
|
-
isRunning: z
|
|
11376
|
-
output: z
|
|
11377
|
-
z
|
|
11378
|
-
type: z
|
|
11379
|
-
content: z
|
|
11380
|
-
timestamp: z
|
|
10848
|
+
const testEventSchema = z.union([
|
|
10849
|
+
z.object({
|
|
10850
|
+
type: z.literal("init"),
|
|
10851
|
+
exitCode: z.number().nullable().optional(),
|
|
10852
|
+
isRunning: z.boolean(),
|
|
10853
|
+
output: z.array(
|
|
10854
|
+
z.object({
|
|
10855
|
+
type: z.union([z.literal("stdout"), z.literal("stderr")]),
|
|
10856
|
+
content: z.string(),
|
|
10857
|
+
timestamp: z.number()
|
|
11381
10858
|
})
|
|
11382
10859
|
)
|
|
11383
10860
|
}),
|
|
11384
|
-
z
|
|
11385
|
-
type: z
|
|
11386
|
-
data: z
|
|
11387
|
-
timestamp: z
|
|
10861
|
+
z.object({
|
|
10862
|
+
type: z.union([z.literal("stdout"), z.literal("stderr")]),
|
|
10863
|
+
data: z.string(),
|
|
10864
|
+
timestamp: z.number()
|
|
11388
10865
|
}),
|
|
11389
|
-
z
|
|
11390
|
-
type: z
|
|
11391
|
-
isRunning: z
|
|
11392
|
-
code: z
|
|
10866
|
+
z.object({
|
|
10867
|
+
type: z.literal("exit"),
|
|
10868
|
+
isRunning: z.literal(false),
|
|
10869
|
+
code: z.number().nullable()
|
|
11393
10870
|
})
|
|
11394
10871
|
]);
|
|
11395
|
-
const testEventQueueSchema = z
|
|
10872
|
+
const testEventQueueSchema = z.array(testEventSchema);
|
|
11396
10873
|
async function loader$j({ request }) {
|
|
11397
10874
|
ensureUndeployed();
|
|
11398
10875
|
const url = new URL(request.url);
|
|
@@ -12701,19 +12178,19 @@ async function registerDevice() {
|
|
|
12701
12178
|
});
|
|
12702
12179
|
}
|
|
12703
12180
|
}
|
|
12704
|
-
const CodeReceivedEventSchema = z
|
|
12705
|
-
type: z
|
|
12706
|
-
code: z
|
|
12707
|
-
url: z
|
|
12181
|
+
const CodeReceivedEventSchema = z.object({
|
|
12182
|
+
type: z.literal(EVENTS.USER_CODE_RECEIVED),
|
|
12183
|
+
code: z.string(),
|
|
12184
|
+
url: z.string()
|
|
12708
12185
|
});
|
|
12709
|
-
const AuthResolvedEventSchema = z
|
|
12710
|
-
type: z
|
|
12186
|
+
const AuthResolvedEventSchema = z.object({
|
|
12187
|
+
type: z.literal(EVENTS.AUTH_RESOLVED)
|
|
12711
12188
|
});
|
|
12712
|
-
const AuthRejectedEventSchema = z
|
|
12713
|
-
type: z
|
|
12714
|
-
error: z
|
|
12189
|
+
const AuthRejectedEventSchema = z.object({
|
|
12190
|
+
type: z.literal(EVENTS.AUTH_REJECTED),
|
|
12191
|
+
error: z.string().optional().default("Unknown error")
|
|
12715
12192
|
});
|
|
12716
|
-
const EventSchema = z
|
|
12193
|
+
const EventSchema = z.union([
|
|
12717
12194
|
CodeReceivedEventSchema,
|
|
12718
12195
|
AuthResolvedEventSchema,
|
|
12719
12196
|
AuthRejectedEventSchema
|
|
@@ -13749,7 +13226,7 @@ const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
13749
13226
|
__proto__: null,
|
|
13750
13227
|
loader
|
|
13751
13228
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
13752
|
-
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-BOrI36ez.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-B-hHvmeV.js", "/assets/index-YNIH4TH8.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/_-D0Tgngwe.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/error-boundary-COkPRBOZ.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-BPwIOXxN.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/workshop-config-CL4F08kr.js", "/assets/product-BAWG1Vut.js", "/assets/index-CXyf3Reb.js", "/assets/user-DvujSs-t.js", "/assets/presence-Cr--lRCr.js", "/assets/progress-BFm2U-l5.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-BatJhmSV.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/button-EE0aPg10.js", "/assets/tooltip-kD4kSf1i.js", "/assets/user-DvujSs-t.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-BhzUjmbI.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/user-DvujSs-t.js", "/assets/discord-BRTW4Rnh.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-j9COGU-R.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.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-7kSd_6hH.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.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-DZWGV4Uf.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/nav-chevrons-g-C0ilNz.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.js", "/assets/set-playground-DW0yVaNn.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-CJ9ElQg6.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/button-EE0aPg10.js", "/assets/loading-sXkYDMsx.js", "/assets/progress-bar-D3kudPcr.js", "/assets/preview-C7dtR2VR.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-ZZCxObNp.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/tooltip-kD4kSf1i.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/request-info-CEhUGODY.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/accordion-OfO-5m5D.js", "/assets/mdx-DwC5Oacq.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-DW0yVaNn.js", "/assets/button-EE0aPg10.js", "/assets/diff-BXHLJqTK.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/discord-BRTW4Rnh.js", "/assets/index-B-hHvmeV.js", "/assets/tests-DUg6VXec.js", "/assets/preview-C7dtR2VR.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-N2HloCnX.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/progress-bar-D3kudPcr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/accordion-OfO-5m5D.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-DW0yVaNn.js", "/assets/tests-DUg6VXec.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-DDNPeo8x.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-g-C0ilNz.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.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-Dop_5v80.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-g-C0ilNz.js", "/assets/mdx-DwC5Oacq.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-BFm2U-l5.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-D-l_qaLC.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.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-Cc73KLYm.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/workshop-config-CL4F08kr.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/button-EE0aPg10.js", "/assets/loading-sXkYDMsx.js", "/assets/product-BAWG1Vut.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-BwzhY4NI.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/pe-CUZaIcdt.js", "/assets/tooltip-kD4kSf1i.js", "/assets/progress-BFm2U-l5.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-BEEJhGiC.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/tooltip-kD4kSf1i.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/request-info-CEhUGODY.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/accordion-OfO-5m5D.js", "/assets/mdx-DwC5Oacq.js", "/assets/diff-BXHLJqTK.js", "/assets/nav-chevrons-g-C0ilNz.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-DE9gclYS.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/button-EE0aPg10.js", "/assets/epic-video-DZzPuXR8.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-1d60a768.js", "version": "1d60a768" };
|
|
13229
|
+
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-9wVBEzOq.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-B-hHvmeV.js", "/assets/index-YNIH4TH8.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/_-D0Tgngwe.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/error-boundary-COkPRBOZ.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-BPwIOXxN.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/workshop-config-CL4F08kr.js", "/assets/product-BAWG1Vut.js", "/assets/index-CXyf3Reb.js", "/assets/user-DvujSs-t.js", "/assets/presence-Cr--lRCr.js", "/assets/progress-BFm2U-l5.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-BatJhmSV.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/button-EE0aPg10.js", "/assets/tooltip-kD4kSf1i.js", "/assets/user-DvujSs-t.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-BhzUjmbI.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/user-DvujSs-t.js", "/assets/discord-BRTW4Rnh.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-j9COGU-R.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.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-7kSd_6hH.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.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-DnttUdzs.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/nav-chevrons-g-C0ilNz.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.js", "/assets/set-playground-DW0yVaNn.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-CJ9ElQg6.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/button-EE0aPg10.js", "/assets/loading-sXkYDMsx.js", "/assets/progress-bar-D3kudPcr.js", "/assets/preview-C7dtR2VR.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-ZZCxObNp.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/tooltip-kD4kSf1i.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/request-info-CEhUGODY.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/accordion-OfO-5m5D.js", "/assets/mdx-DwC5Oacq.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-DW0yVaNn.js", "/assets/button-EE0aPg10.js", "/assets/diff-BXHLJqTK.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/discord-BRTW4Rnh.js", "/assets/index-B-hHvmeV.js", "/assets/tests-DUg6VXec.js", "/assets/preview-C7dtR2VR.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-N2HloCnX.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/progress-bar-D3kudPcr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/accordion-OfO-5m5D.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/set-playground-DW0yVaNn.js", "/assets/tests-DUg6VXec.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-DDNPeo8x.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-g-C0ilNz.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.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-Dop_5v80.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/nav-chevrons-g-C0ilNz.js", "/assets/mdx-DwC5Oacq.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-BFm2U-l5.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-D-l_qaLC.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/index-Dx5GmdYq.js", "/assets/error-boundary-COkPRBOZ.js", "/assets/mdx-DwC5Oacq.js", "/assets/progress-BFm2U-l5.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-Cc73KLYm.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/workshop-config-CL4F08kr.js", "/assets/use-event-source-A_0lEOPX.js", "/assets/button-EE0aPg10.js", "/assets/loading-sXkYDMsx.js", "/assets/product-BAWG1Vut.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-BwzhY4NI.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/pe-CUZaIcdt.js", "/assets/tooltip-kD4kSf1i.js", "/assets/progress-BFm2U-l5.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-BEEJhGiC.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/tooltip-kD4kSf1i.js", "/assets/index-CXyf3Reb.js", "/assets/index-BwhlO_gF.js", "/assets/request-info-CEhUGODY.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/epic-video-DZzPuXR8.js", "/assets/progress-bar-D3kudPcr.js", "/assets/accordion-OfO-5m5D.js", "/assets/mdx-DwC5Oacq.js", "/assets/diff-BXHLJqTK.js", "/assets/nav-chevrons-g-C0ilNz.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-DE9gclYS.js", "imports": ["/assets/index-1cKOJFpX.js", "/assets/components-CME-nGId.js", "/assets/misc-CxCgA-_O.js", "/assets/request-info-CEhUGODY.js", "/assets/tooltip-kD4kSf1i.js", "/assets/pe-CUZaIcdt.js", "/assets/index-YNIH4TH8.js", "/assets/loading-sXkYDMsx.js", "/assets/user-DvujSs-t.js", "/assets/workshop-config-CL4F08kr.js", "/assets/button-EE0aPg10.js", "/assets/epic-video-DZzPuXR8.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-K6Dvbx-E.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-e53d022a.js", "version": "e53d022a" };
|
|
13753
13230
|
const mode = "production";
|
|
13754
13231
|
const assetsBuildDirectory = "build/client";
|
|
13755
13232
|
const basename = "/";
|
|
@@ -14102,21 +13579,13 @@ const routes = {
|
|
|
14102
13579
|
caseSensitive: void 0,
|
|
14103
13580
|
module: route42
|
|
14104
13581
|
},
|
|
14105
|
-
"routes/update-mdx-cache": {
|
|
14106
|
-
id: "routes/update-mdx-cache",
|
|
14107
|
-
parentId: "root",
|
|
14108
|
-
path: "update-mdx-cache",
|
|
14109
|
-
index: void 0,
|
|
14110
|
-
caseSensitive: void 0,
|
|
14111
|
-
module: route43
|
|
14112
|
-
},
|
|
14113
13582
|
"routes/video-player/index": {
|
|
14114
13583
|
id: "routes/video-player/index",
|
|
14115
13584
|
parentId: "root",
|
|
14116
13585
|
path: "video-player",
|
|
14117
13586
|
index: void 0,
|
|
14118
13587
|
caseSensitive: void 0,
|
|
14119
|
-
module:
|
|
13588
|
+
module: route43
|
|
14120
13589
|
}
|
|
14121
13590
|
};
|
|
14122
13591
|
export {
|