@epic-web/workshop-utils 0.0.0-semantically-released

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.
Files changed (79) hide show
  1. package/README.md +3 -0
  2. package/dist/esm/apps.server.d.ts +4205 -0
  3. package/dist/esm/apps.server.d.ts.map +1 -0
  4. package/dist/esm/apps.server.js +1198 -0
  5. package/dist/esm/apps.server.js.map +1 -0
  6. package/dist/esm/cache.server.d.ts +940 -0
  7. package/dist/esm/cache.server.d.ts.map +1 -0
  8. package/dist/esm/cache.server.js +161 -0
  9. package/dist/esm/cache.server.js.map +1 -0
  10. package/dist/esm/compile-mdx.server.d.ts +12 -0
  11. package/dist/esm/compile-mdx.server.d.ts.map +1 -0
  12. package/dist/esm/compile-mdx.server.js +285 -0
  13. package/dist/esm/compile-mdx.server.js.map +1 -0
  14. package/dist/esm/config.server.d.ts +348 -0
  15. package/dist/esm/config.server.d.ts.map +1 -0
  16. package/dist/esm/config.server.js +231 -0
  17. package/dist/esm/config.server.js.map +1 -0
  18. package/dist/esm/db.server.d.ts +463 -0
  19. package/dist/esm/db.server.d.ts.map +1 -0
  20. package/dist/esm/db.server.js +260 -0
  21. package/dist/esm/db.server.js.map +1 -0
  22. package/dist/esm/diff.server.d.ts +18 -0
  23. package/dist/esm/diff.server.d.ts.map +1 -0
  24. package/dist/esm/diff.server.js +437 -0
  25. package/dist/esm/diff.server.js.map +1 -0
  26. package/dist/esm/env.server.d.ts +61 -0
  27. package/dist/esm/env.server.d.ts.map +1 -0
  28. package/dist/esm/env.server.js +42 -0
  29. package/dist/esm/env.server.js.map +1 -0
  30. package/dist/esm/epic-api.server.d.ts +227 -0
  31. package/dist/esm/epic-api.server.d.ts.map +1 -0
  32. package/dist/esm/epic-api.server.js +529 -0
  33. package/dist/esm/epic-api.server.js.map +1 -0
  34. package/dist/esm/git.server.d.ts +49 -0
  35. package/dist/esm/git.server.d.ts.map +1 -0
  36. package/dist/esm/git.server.js +135 -0
  37. package/dist/esm/git.server.js.map +1 -0
  38. package/dist/esm/iframe-sync.d.ts +10 -0
  39. package/dist/esm/iframe-sync.d.ts.map +1 -0
  40. package/dist/esm/iframe-sync.js +97 -0
  41. package/dist/esm/iframe-sync.js.map +1 -0
  42. package/dist/esm/modified-time.server.d.ts +7 -0
  43. package/dist/esm/modified-time.server.d.ts.map +1 -0
  44. package/dist/esm/modified-time.server.js +80 -0
  45. package/dist/esm/modified-time.server.js.map +1 -0
  46. package/dist/esm/notifications.server.d.ts +56 -0
  47. package/dist/esm/notifications.server.d.ts.map +1 -0
  48. package/dist/esm/notifications.server.js +65 -0
  49. package/dist/esm/notifications.server.js.map +1 -0
  50. package/dist/esm/package.json +3 -0
  51. package/dist/esm/playwright.server.d.ts +6 -0
  52. package/dist/esm/playwright.server.d.ts.map +1 -0
  53. package/dist/esm/playwright.server.js +95 -0
  54. package/dist/esm/playwright.server.js.map +1 -0
  55. package/dist/esm/process-manager.server.d.ts +77 -0
  56. package/dist/esm/process-manager.server.d.ts.map +1 -0
  57. package/dist/esm/process-manager.server.js +266 -0
  58. package/dist/esm/process-manager.server.js.map +1 -0
  59. package/dist/esm/test.d.ts +16 -0
  60. package/dist/esm/test.d.ts.map +1 -0
  61. package/dist/esm/test.js +56 -0
  62. package/dist/esm/test.js.map +1 -0
  63. package/dist/esm/timing.server.d.ts +20 -0
  64. package/dist/esm/timing.server.d.ts.map +1 -0
  65. package/dist/esm/timing.server.js +88 -0
  66. package/dist/esm/timing.server.js.map +1 -0
  67. package/dist/esm/user.server.d.ts +17 -0
  68. package/dist/esm/user.server.d.ts.map +1 -0
  69. package/dist/esm/user.server.js +38 -0
  70. package/dist/esm/user.server.js.map +1 -0
  71. package/dist/esm/utils.d.ts +2 -0
  72. package/dist/esm/utils.d.ts.map +1 -0
  73. package/dist/esm/utils.js +13 -0
  74. package/dist/esm/utils.js.map +1 -0
  75. package/dist/esm/utils.server.d.ts +9 -0
  76. package/dist/esm/utils.server.d.ts.map +1 -0
  77. package/dist/esm/utils.server.js +45 -0
  78. package/dist/esm/utils.server.js.map +1 -0
  79. package/package.json +221 -0
@@ -0,0 +1,4205 @@
1
+ import { type CacheEntry } from '@epic-web/cachified';
2
+ import '@total-typescript/ts-reset';
3
+ import { z } from 'zod';
4
+ import { type Timings } from './timing.server.js';
5
+ declare global {
6
+ var __epicshop_apps_initialized__: boolean | undefined;
7
+ }
8
+ export declare function setWorkshopRoot(root?: string): void;
9
+ export declare function getWorkshopRoot(): string;
10
+ type CachifiedOptions = {
11
+ timings?: Timings;
12
+ request?: Request;
13
+ };
14
+ declare const BaseExerciseStepAppSchema: z.ZodObject<{
15
+ /** a unique identifier for the app */
16
+ name: z.ZodString;
17
+ /** the title of the app used for display (comes from the package.json title prop) */
18
+ title: z.ZodString;
19
+ /** 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) */
20
+ dirName: z.ZodString;
21
+ fullPath: z.ZodString;
22
+ relativePath: z.ZodString;
23
+ instructionsCode: z.ZodOptional<z.ZodString>;
24
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
25
+ test: z.ZodUnion<[z.ZodObject<{
26
+ type: z.ZodLiteral<"browser">;
27
+ pathname: z.ZodString;
28
+ testFiles: z.ZodArray<z.ZodString, "many">;
29
+ }, "strip", z.ZodTypeAny, {
30
+ type: "browser";
31
+ pathname: string;
32
+ testFiles: string[];
33
+ }, {
34
+ type: "browser";
35
+ pathname: string;
36
+ testFiles: string[];
37
+ }>, z.ZodObject<{
38
+ type: z.ZodLiteral<"script">;
39
+ script: z.ZodString;
40
+ }, "strip", z.ZodTypeAny, {
41
+ type: "script";
42
+ script: string;
43
+ }, {
44
+ type: "script";
45
+ script: string;
46
+ }>, z.ZodObject<{
47
+ type: z.ZodLiteral<"none">;
48
+ }, "strip", z.ZodTypeAny, {
49
+ type: "none";
50
+ }, {
51
+ type: "none";
52
+ }>]>;
53
+ dev: z.ZodUnion<[z.ZodObject<{
54
+ type: z.ZodLiteral<"browser">;
55
+ pathname: z.ZodString;
56
+ }, "strip", z.ZodTypeAny, {
57
+ type: "browser";
58
+ pathname: string;
59
+ }, {
60
+ type: "browser";
61
+ pathname: string;
62
+ }>, z.ZodObject<{
63
+ type: z.ZodLiteral<"script">;
64
+ portNumber: z.ZodNumber;
65
+ initialRoute: z.ZodString;
66
+ }, "strip", z.ZodTypeAny, {
67
+ type: "script";
68
+ initialRoute: string;
69
+ portNumber: number;
70
+ }, {
71
+ type: "script";
72
+ initialRoute: string;
73
+ portNumber: number;
74
+ }>, z.ZodObject<{
75
+ type: z.ZodLiteral<"none">;
76
+ }, "strip", z.ZodTypeAny, {
77
+ type: "none";
78
+ }, {
79
+ type: "none";
80
+ }>]>;
81
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
82
+ } & {
83
+ exerciseNumber: z.ZodNumber;
84
+ stepNumber: z.ZodNumber;
85
+ }, "strip", z.ZodTypeAny, {
86
+ title: string;
87
+ name: string;
88
+ test: {
89
+ type: "browser";
90
+ pathname: string;
91
+ testFiles: string[];
92
+ } | {
93
+ type: "script";
94
+ script: string;
95
+ } | {
96
+ type: "none";
97
+ };
98
+ fullPath: string;
99
+ dev: {
100
+ type: "browser";
101
+ pathname: string;
102
+ } | {
103
+ type: "script";
104
+ initialRoute: string;
105
+ portNumber: number;
106
+ } | {
107
+ type: "none";
108
+ };
109
+ dirName: string;
110
+ relativePath: string;
111
+ stackBlitzUrl: string | null;
112
+ exerciseNumber: number;
113
+ stepNumber: number;
114
+ instructionsCode?: string | undefined;
115
+ epicVideoEmbeds?: string[] | undefined;
116
+ }, {
117
+ title: string;
118
+ name: string;
119
+ test: {
120
+ type: "browser";
121
+ pathname: string;
122
+ testFiles: string[];
123
+ } | {
124
+ type: "script";
125
+ script: string;
126
+ } | {
127
+ type: "none";
128
+ };
129
+ fullPath: string;
130
+ dev: {
131
+ type: "browser";
132
+ pathname: string;
133
+ } | {
134
+ type: "script";
135
+ initialRoute: string;
136
+ portNumber: number;
137
+ } | {
138
+ type: "none";
139
+ };
140
+ dirName: string;
141
+ relativePath: string;
142
+ stackBlitzUrl: string | null;
143
+ exerciseNumber: number;
144
+ stepNumber: number;
145
+ instructionsCode?: string | undefined;
146
+ epicVideoEmbeds?: string[] | undefined;
147
+ }>;
148
+ declare const ProblemAppSchema: z.ZodObject<{
149
+ /** a unique identifier for the app */
150
+ name: z.ZodString;
151
+ /** the title of the app used for display (comes from the package.json title prop) */
152
+ title: z.ZodString;
153
+ /** 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) */
154
+ dirName: z.ZodString;
155
+ fullPath: z.ZodString;
156
+ relativePath: z.ZodString;
157
+ instructionsCode: z.ZodOptional<z.ZodString>;
158
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
159
+ test: z.ZodUnion<[z.ZodObject<{
160
+ type: z.ZodLiteral<"browser">;
161
+ pathname: z.ZodString;
162
+ testFiles: z.ZodArray<z.ZodString, "many">;
163
+ }, "strip", z.ZodTypeAny, {
164
+ type: "browser";
165
+ pathname: string;
166
+ testFiles: string[];
167
+ }, {
168
+ type: "browser";
169
+ pathname: string;
170
+ testFiles: string[];
171
+ }>, z.ZodObject<{
172
+ type: z.ZodLiteral<"script">;
173
+ script: z.ZodString;
174
+ }, "strip", z.ZodTypeAny, {
175
+ type: "script";
176
+ script: string;
177
+ }, {
178
+ type: "script";
179
+ script: string;
180
+ }>, z.ZodObject<{
181
+ type: z.ZodLiteral<"none">;
182
+ }, "strip", z.ZodTypeAny, {
183
+ type: "none";
184
+ }, {
185
+ type: "none";
186
+ }>]>;
187
+ dev: z.ZodUnion<[z.ZodObject<{
188
+ type: z.ZodLiteral<"browser">;
189
+ pathname: z.ZodString;
190
+ }, "strip", z.ZodTypeAny, {
191
+ type: "browser";
192
+ pathname: string;
193
+ }, {
194
+ type: "browser";
195
+ pathname: string;
196
+ }>, z.ZodObject<{
197
+ type: z.ZodLiteral<"script">;
198
+ portNumber: z.ZodNumber;
199
+ initialRoute: z.ZodString;
200
+ }, "strip", z.ZodTypeAny, {
201
+ type: "script";
202
+ initialRoute: string;
203
+ portNumber: number;
204
+ }, {
205
+ type: "script";
206
+ initialRoute: string;
207
+ portNumber: number;
208
+ }>, z.ZodObject<{
209
+ type: z.ZodLiteral<"none">;
210
+ }, "strip", z.ZodTypeAny, {
211
+ type: "none";
212
+ }, {
213
+ type: "none";
214
+ }>]>;
215
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
216
+ } & {
217
+ exerciseNumber: z.ZodNumber;
218
+ stepNumber: z.ZodNumber;
219
+ } & {
220
+ type: z.ZodLiteral<"problem">;
221
+ solutionName: z.ZodNullable<z.ZodString>;
222
+ }, "strip", z.ZodTypeAny, {
223
+ title: string;
224
+ type: "problem";
225
+ name: string;
226
+ test: {
227
+ type: "browser";
228
+ pathname: string;
229
+ testFiles: string[];
230
+ } | {
231
+ type: "script";
232
+ script: string;
233
+ } | {
234
+ type: "none";
235
+ };
236
+ fullPath: string;
237
+ dev: {
238
+ type: "browser";
239
+ pathname: string;
240
+ } | {
241
+ type: "script";
242
+ initialRoute: string;
243
+ portNumber: number;
244
+ } | {
245
+ type: "none";
246
+ };
247
+ dirName: string;
248
+ relativePath: string;
249
+ stackBlitzUrl: string | null;
250
+ exerciseNumber: number;
251
+ stepNumber: number;
252
+ solutionName: string | null;
253
+ instructionsCode?: string | undefined;
254
+ epicVideoEmbeds?: string[] | undefined;
255
+ }, {
256
+ title: string;
257
+ type: "problem";
258
+ name: string;
259
+ test: {
260
+ type: "browser";
261
+ pathname: string;
262
+ testFiles: string[];
263
+ } | {
264
+ type: "script";
265
+ script: string;
266
+ } | {
267
+ type: "none";
268
+ };
269
+ fullPath: string;
270
+ dev: {
271
+ type: "browser";
272
+ pathname: string;
273
+ } | {
274
+ type: "script";
275
+ initialRoute: string;
276
+ portNumber: number;
277
+ } | {
278
+ type: "none";
279
+ };
280
+ dirName: string;
281
+ relativePath: string;
282
+ stackBlitzUrl: string | null;
283
+ exerciseNumber: number;
284
+ stepNumber: number;
285
+ solutionName: string | null;
286
+ instructionsCode?: string | undefined;
287
+ epicVideoEmbeds?: string[] | undefined;
288
+ }>;
289
+ declare const SolutionAppSchema: z.ZodObject<{
290
+ /** a unique identifier for the app */
291
+ name: z.ZodString;
292
+ /** the title of the app used for display (comes from the package.json title prop) */
293
+ title: z.ZodString;
294
+ /** 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) */
295
+ dirName: z.ZodString;
296
+ fullPath: z.ZodString;
297
+ relativePath: z.ZodString;
298
+ instructionsCode: z.ZodOptional<z.ZodString>;
299
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
300
+ test: z.ZodUnion<[z.ZodObject<{
301
+ type: z.ZodLiteral<"browser">;
302
+ pathname: z.ZodString;
303
+ testFiles: z.ZodArray<z.ZodString, "many">;
304
+ }, "strip", z.ZodTypeAny, {
305
+ type: "browser";
306
+ pathname: string;
307
+ testFiles: string[];
308
+ }, {
309
+ type: "browser";
310
+ pathname: string;
311
+ testFiles: string[];
312
+ }>, z.ZodObject<{
313
+ type: z.ZodLiteral<"script">;
314
+ script: z.ZodString;
315
+ }, "strip", z.ZodTypeAny, {
316
+ type: "script";
317
+ script: string;
318
+ }, {
319
+ type: "script";
320
+ script: string;
321
+ }>, z.ZodObject<{
322
+ type: z.ZodLiteral<"none">;
323
+ }, "strip", z.ZodTypeAny, {
324
+ type: "none";
325
+ }, {
326
+ type: "none";
327
+ }>]>;
328
+ dev: z.ZodUnion<[z.ZodObject<{
329
+ type: z.ZodLiteral<"browser">;
330
+ pathname: z.ZodString;
331
+ }, "strip", z.ZodTypeAny, {
332
+ type: "browser";
333
+ pathname: string;
334
+ }, {
335
+ type: "browser";
336
+ pathname: string;
337
+ }>, z.ZodObject<{
338
+ type: z.ZodLiteral<"script">;
339
+ portNumber: z.ZodNumber;
340
+ initialRoute: z.ZodString;
341
+ }, "strip", z.ZodTypeAny, {
342
+ type: "script";
343
+ initialRoute: string;
344
+ portNumber: number;
345
+ }, {
346
+ type: "script";
347
+ initialRoute: string;
348
+ portNumber: number;
349
+ }>, z.ZodObject<{
350
+ type: z.ZodLiteral<"none">;
351
+ }, "strip", z.ZodTypeAny, {
352
+ type: "none";
353
+ }, {
354
+ type: "none";
355
+ }>]>;
356
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
357
+ } & {
358
+ exerciseNumber: z.ZodNumber;
359
+ stepNumber: z.ZodNumber;
360
+ } & {
361
+ type: z.ZodLiteral<"solution">;
362
+ problemName: z.ZodNullable<z.ZodString>;
363
+ }, "strip", z.ZodTypeAny, {
364
+ title: string;
365
+ type: "solution";
366
+ name: string;
367
+ test: {
368
+ type: "browser";
369
+ pathname: string;
370
+ testFiles: string[];
371
+ } | {
372
+ type: "script";
373
+ script: string;
374
+ } | {
375
+ type: "none";
376
+ };
377
+ fullPath: string;
378
+ dev: {
379
+ type: "browser";
380
+ pathname: string;
381
+ } | {
382
+ type: "script";
383
+ initialRoute: string;
384
+ portNumber: number;
385
+ } | {
386
+ type: "none";
387
+ };
388
+ dirName: string;
389
+ relativePath: string;
390
+ stackBlitzUrl: string | null;
391
+ exerciseNumber: number;
392
+ stepNumber: number;
393
+ problemName: string | null;
394
+ instructionsCode?: string | undefined;
395
+ epicVideoEmbeds?: string[] | undefined;
396
+ }, {
397
+ title: string;
398
+ type: "solution";
399
+ name: string;
400
+ test: {
401
+ type: "browser";
402
+ pathname: string;
403
+ testFiles: string[];
404
+ } | {
405
+ type: "script";
406
+ script: string;
407
+ } | {
408
+ type: "none";
409
+ };
410
+ fullPath: string;
411
+ dev: {
412
+ type: "browser";
413
+ pathname: string;
414
+ } | {
415
+ type: "script";
416
+ initialRoute: string;
417
+ portNumber: number;
418
+ } | {
419
+ type: "none";
420
+ };
421
+ dirName: string;
422
+ relativePath: string;
423
+ stackBlitzUrl: string | null;
424
+ exerciseNumber: number;
425
+ stepNumber: number;
426
+ problemName: string | null;
427
+ instructionsCode?: string | undefined;
428
+ epicVideoEmbeds?: string[] | undefined;
429
+ }>;
430
+ declare const ExampleAppSchema: z.ZodObject<{
431
+ /** a unique identifier for the app */
432
+ name: z.ZodString;
433
+ /** the title of the app used for display (comes from the package.json title prop) */
434
+ title: z.ZodString;
435
+ /** 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) */
436
+ dirName: z.ZodString;
437
+ fullPath: z.ZodString;
438
+ relativePath: z.ZodString;
439
+ instructionsCode: z.ZodOptional<z.ZodString>;
440
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
441
+ test: z.ZodUnion<[z.ZodObject<{
442
+ type: z.ZodLiteral<"browser">;
443
+ pathname: z.ZodString;
444
+ testFiles: z.ZodArray<z.ZodString, "many">;
445
+ }, "strip", z.ZodTypeAny, {
446
+ type: "browser";
447
+ pathname: string;
448
+ testFiles: string[];
449
+ }, {
450
+ type: "browser";
451
+ pathname: string;
452
+ testFiles: string[];
453
+ }>, z.ZodObject<{
454
+ type: z.ZodLiteral<"script">;
455
+ script: z.ZodString;
456
+ }, "strip", z.ZodTypeAny, {
457
+ type: "script";
458
+ script: string;
459
+ }, {
460
+ type: "script";
461
+ script: string;
462
+ }>, z.ZodObject<{
463
+ type: z.ZodLiteral<"none">;
464
+ }, "strip", z.ZodTypeAny, {
465
+ type: "none";
466
+ }, {
467
+ type: "none";
468
+ }>]>;
469
+ dev: z.ZodUnion<[z.ZodObject<{
470
+ type: z.ZodLiteral<"browser">;
471
+ pathname: z.ZodString;
472
+ }, "strip", z.ZodTypeAny, {
473
+ type: "browser";
474
+ pathname: string;
475
+ }, {
476
+ type: "browser";
477
+ pathname: string;
478
+ }>, z.ZodObject<{
479
+ type: z.ZodLiteral<"script">;
480
+ portNumber: z.ZodNumber;
481
+ initialRoute: z.ZodString;
482
+ }, "strip", z.ZodTypeAny, {
483
+ type: "script";
484
+ initialRoute: string;
485
+ portNumber: number;
486
+ }, {
487
+ type: "script";
488
+ initialRoute: string;
489
+ portNumber: number;
490
+ }>, z.ZodObject<{
491
+ type: z.ZodLiteral<"none">;
492
+ }, "strip", z.ZodTypeAny, {
493
+ type: "none";
494
+ }, {
495
+ type: "none";
496
+ }>]>;
497
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
498
+ } & {
499
+ type: z.ZodLiteral<"example">;
500
+ }, "strip", z.ZodTypeAny, {
501
+ title: string;
502
+ type: "example";
503
+ name: string;
504
+ test: {
505
+ type: "browser";
506
+ pathname: string;
507
+ testFiles: string[];
508
+ } | {
509
+ type: "script";
510
+ script: string;
511
+ } | {
512
+ type: "none";
513
+ };
514
+ fullPath: string;
515
+ dev: {
516
+ type: "browser";
517
+ pathname: string;
518
+ } | {
519
+ type: "script";
520
+ initialRoute: string;
521
+ portNumber: number;
522
+ } | {
523
+ type: "none";
524
+ };
525
+ dirName: string;
526
+ relativePath: string;
527
+ stackBlitzUrl: string | null;
528
+ instructionsCode?: string | undefined;
529
+ epicVideoEmbeds?: string[] | undefined;
530
+ }, {
531
+ title: string;
532
+ type: "example";
533
+ name: string;
534
+ test: {
535
+ type: "browser";
536
+ pathname: string;
537
+ testFiles: string[];
538
+ } | {
539
+ type: "script";
540
+ script: string;
541
+ } | {
542
+ type: "none";
543
+ };
544
+ fullPath: string;
545
+ dev: {
546
+ type: "browser";
547
+ pathname: string;
548
+ } | {
549
+ type: "script";
550
+ initialRoute: string;
551
+ portNumber: number;
552
+ } | {
553
+ type: "none";
554
+ };
555
+ dirName: string;
556
+ relativePath: string;
557
+ stackBlitzUrl: string | null;
558
+ instructionsCode?: string | undefined;
559
+ epicVideoEmbeds?: string[] | undefined;
560
+ }>;
561
+ declare const PlaygroundAppSchema: z.ZodObject<{
562
+ /** a unique identifier for the app */
563
+ name: z.ZodString;
564
+ /** the title of the app used for display (comes from the package.json title prop) */
565
+ title: z.ZodString;
566
+ /** 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) */
567
+ dirName: z.ZodString;
568
+ fullPath: z.ZodString;
569
+ relativePath: z.ZodString;
570
+ instructionsCode: z.ZodOptional<z.ZodString>;
571
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
572
+ test: z.ZodUnion<[z.ZodObject<{
573
+ type: z.ZodLiteral<"browser">;
574
+ pathname: z.ZodString;
575
+ testFiles: z.ZodArray<z.ZodString, "many">;
576
+ }, "strip", z.ZodTypeAny, {
577
+ type: "browser";
578
+ pathname: string;
579
+ testFiles: string[];
580
+ }, {
581
+ type: "browser";
582
+ pathname: string;
583
+ testFiles: string[];
584
+ }>, z.ZodObject<{
585
+ type: z.ZodLiteral<"script">;
586
+ script: z.ZodString;
587
+ }, "strip", z.ZodTypeAny, {
588
+ type: "script";
589
+ script: string;
590
+ }, {
591
+ type: "script";
592
+ script: string;
593
+ }>, z.ZodObject<{
594
+ type: z.ZodLiteral<"none">;
595
+ }, "strip", z.ZodTypeAny, {
596
+ type: "none";
597
+ }, {
598
+ type: "none";
599
+ }>]>;
600
+ dev: z.ZodUnion<[z.ZodObject<{
601
+ type: z.ZodLiteral<"browser">;
602
+ pathname: z.ZodString;
603
+ }, "strip", z.ZodTypeAny, {
604
+ type: "browser";
605
+ pathname: string;
606
+ }, {
607
+ type: "browser";
608
+ pathname: string;
609
+ }>, z.ZodObject<{
610
+ type: z.ZodLiteral<"script">;
611
+ portNumber: z.ZodNumber;
612
+ initialRoute: z.ZodString;
613
+ }, "strip", z.ZodTypeAny, {
614
+ type: "script";
615
+ initialRoute: string;
616
+ portNumber: number;
617
+ }, {
618
+ type: "script";
619
+ initialRoute: string;
620
+ portNumber: number;
621
+ }>, z.ZodObject<{
622
+ type: z.ZodLiteral<"none">;
623
+ }, "strip", z.ZodTypeAny, {
624
+ type: "none";
625
+ }, {
626
+ type: "none";
627
+ }>]>;
628
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
629
+ } & {
630
+ type: z.ZodLiteral<"playground">;
631
+ appName: z.ZodString;
632
+ isUpToDate: z.ZodBoolean;
633
+ }, "strip", z.ZodTypeAny, {
634
+ title: string;
635
+ type: "playground";
636
+ name: string;
637
+ test: {
638
+ type: "browser";
639
+ pathname: string;
640
+ testFiles: string[];
641
+ } | {
642
+ type: "script";
643
+ script: string;
644
+ } | {
645
+ type: "none";
646
+ };
647
+ fullPath: string;
648
+ dev: {
649
+ type: "browser";
650
+ pathname: string;
651
+ } | {
652
+ type: "script";
653
+ initialRoute: string;
654
+ portNumber: number;
655
+ } | {
656
+ type: "none";
657
+ };
658
+ dirName: string;
659
+ relativePath: string;
660
+ stackBlitzUrl: string | null;
661
+ appName: string;
662
+ isUpToDate: boolean;
663
+ instructionsCode?: string | undefined;
664
+ epicVideoEmbeds?: string[] | undefined;
665
+ }, {
666
+ title: string;
667
+ type: "playground";
668
+ name: string;
669
+ test: {
670
+ type: "browser";
671
+ pathname: string;
672
+ testFiles: string[];
673
+ } | {
674
+ type: "script";
675
+ script: string;
676
+ } | {
677
+ type: "none";
678
+ };
679
+ fullPath: string;
680
+ dev: {
681
+ type: "browser";
682
+ pathname: string;
683
+ } | {
684
+ type: "script";
685
+ initialRoute: string;
686
+ portNumber: number;
687
+ } | {
688
+ type: "none";
689
+ };
690
+ dirName: string;
691
+ relativePath: string;
692
+ stackBlitzUrl: string | null;
693
+ appName: string;
694
+ isUpToDate: boolean;
695
+ instructionsCode?: string | undefined;
696
+ epicVideoEmbeds?: string[] | undefined;
697
+ }>;
698
+ declare const ExerciseSchema: z.ZodObject<{
699
+ /** the full path to the exercise directory */
700
+ fullPath: z.ZodString;
701
+ /** a unique identifier for the exercise */
702
+ exerciseNumber: z.ZodNumber;
703
+ /** 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) */
704
+ dirName: z.ZodString;
705
+ /** the title of the app used for display (comes from the first h1 in the README) */
706
+ title: z.ZodString;
707
+ instructionsCode: z.ZodOptional<z.ZodString>;
708
+ finishedCode: z.ZodOptional<z.ZodString>;
709
+ instructionsEpicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
710
+ finishedEpicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
711
+ steps: z.ZodArray<z.ZodUnion<[z.ZodObject<{
712
+ stepNumber: z.ZodNumber;
713
+ problem: z.ZodObject<{
714
+ /** a unique identifier for the app */
715
+ name: z.ZodString;
716
+ /** the title of the app used for display (comes from the package.json title prop) */
717
+ title: z.ZodString;
718
+ /** 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) */
719
+ dirName: z.ZodString;
720
+ fullPath: z.ZodString;
721
+ relativePath: z.ZodString;
722
+ instructionsCode: z.ZodOptional<z.ZodString>;
723
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
724
+ test: z.ZodUnion<[z.ZodObject<{
725
+ type: z.ZodLiteral<"browser">;
726
+ pathname: z.ZodString;
727
+ testFiles: z.ZodArray<z.ZodString, "many">;
728
+ }, "strip", z.ZodTypeAny, {
729
+ type: "browser";
730
+ pathname: string;
731
+ testFiles: string[];
732
+ }, {
733
+ type: "browser";
734
+ pathname: string;
735
+ testFiles: string[];
736
+ }>, z.ZodObject<{
737
+ type: z.ZodLiteral<"script">;
738
+ script: z.ZodString;
739
+ }, "strip", z.ZodTypeAny, {
740
+ type: "script";
741
+ script: string;
742
+ }, {
743
+ type: "script";
744
+ script: string;
745
+ }>, z.ZodObject<{
746
+ type: z.ZodLiteral<"none">;
747
+ }, "strip", z.ZodTypeAny, {
748
+ type: "none";
749
+ }, {
750
+ type: "none";
751
+ }>]>;
752
+ dev: z.ZodUnion<[z.ZodObject<{
753
+ type: z.ZodLiteral<"browser">;
754
+ pathname: z.ZodString;
755
+ }, "strip", z.ZodTypeAny, {
756
+ type: "browser";
757
+ pathname: string;
758
+ }, {
759
+ type: "browser";
760
+ pathname: string;
761
+ }>, z.ZodObject<{
762
+ type: z.ZodLiteral<"script">;
763
+ portNumber: z.ZodNumber;
764
+ initialRoute: z.ZodString;
765
+ }, "strip", z.ZodTypeAny, {
766
+ type: "script";
767
+ initialRoute: string;
768
+ portNumber: number;
769
+ }, {
770
+ type: "script";
771
+ initialRoute: string;
772
+ portNumber: number;
773
+ }>, z.ZodObject<{
774
+ type: z.ZodLiteral<"none">;
775
+ }, "strip", z.ZodTypeAny, {
776
+ type: "none";
777
+ }, {
778
+ type: "none";
779
+ }>]>;
780
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
781
+ } & {
782
+ exerciseNumber: z.ZodNumber;
783
+ stepNumber: z.ZodNumber;
784
+ } & {
785
+ type: z.ZodLiteral<"problem">;
786
+ solutionName: z.ZodNullable<z.ZodString>;
787
+ }, "strip", z.ZodTypeAny, {
788
+ title: string;
789
+ type: "problem";
790
+ name: string;
791
+ test: {
792
+ type: "browser";
793
+ pathname: string;
794
+ testFiles: string[];
795
+ } | {
796
+ type: "script";
797
+ script: string;
798
+ } | {
799
+ type: "none";
800
+ };
801
+ fullPath: string;
802
+ dev: {
803
+ type: "browser";
804
+ pathname: string;
805
+ } | {
806
+ type: "script";
807
+ initialRoute: string;
808
+ portNumber: number;
809
+ } | {
810
+ type: "none";
811
+ };
812
+ dirName: string;
813
+ relativePath: string;
814
+ stackBlitzUrl: string | null;
815
+ exerciseNumber: number;
816
+ stepNumber: number;
817
+ solutionName: string | null;
818
+ instructionsCode?: string | undefined;
819
+ epicVideoEmbeds?: string[] | undefined;
820
+ }, {
821
+ title: string;
822
+ type: "problem";
823
+ name: string;
824
+ test: {
825
+ type: "browser";
826
+ pathname: string;
827
+ testFiles: string[];
828
+ } | {
829
+ type: "script";
830
+ script: string;
831
+ } | {
832
+ type: "none";
833
+ };
834
+ fullPath: string;
835
+ dev: {
836
+ type: "browser";
837
+ pathname: string;
838
+ } | {
839
+ type: "script";
840
+ initialRoute: string;
841
+ portNumber: number;
842
+ } | {
843
+ type: "none";
844
+ };
845
+ dirName: string;
846
+ relativePath: string;
847
+ stackBlitzUrl: string | null;
848
+ exerciseNumber: number;
849
+ stepNumber: number;
850
+ solutionName: string | null;
851
+ instructionsCode?: string | undefined;
852
+ epicVideoEmbeds?: string[] | undefined;
853
+ }>;
854
+ solution: z.ZodObject<{
855
+ /** a unique identifier for the app */
856
+ name: z.ZodString;
857
+ /** the title of the app used for display (comes from the package.json title prop) */
858
+ title: z.ZodString;
859
+ /** 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) */
860
+ dirName: z.ZodString;
861
+ fullPath: z.ZodString;
862
+ relativePath: z.ZodString;
863
+ instructionsCode: z.ZodOptional<z.ZodString>;
864
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
865
+ test: z.ZodUnion<[z.ZodObject<{
866
+ type: z.ZodLiteral<"browser">;
867
+ pathname: z.ZodString;
868
+ testFiles: z.ZodArray<z.ZodString, "many">;
869
+ }, "strip", z.ZodTypeAny, {
870
+ type: "browser";
871
+ pathname: string;
872
+ testFiles: string[];
873
+ }, {
874
+ type: "browser";
875
+ pathname: string;
876
+ testFiles: string[];
877
+ }>, z.ZodObject<{
878
+ type: z.ZodLiteral<"script">;
879
+ script: z.ZodString;
880
+ }, "strip", z.ZodTypeAny, {
881
+ type: "script";
882
+ script: string;
883
+ }, {
884
+ type: "script";
885
+ script: string;
886
+ }>, z.ZodObject<{
887
+ type: z.ZodLiteral<"none">;
888
+ }, "strip", z.ZodTypeAny, {
889
+ type: "none";
890
+ }, {
891
+ type: "none";
892
+ }>]>;
893
+ dev: z.ZodUnion<[z.ZodObject<{
894
+ type: z.ZodLiteral<"browser">;
895
+ pathname: z.ZodString;
896
+ }, "strip", z.ZodTypeAny, {
897
+ type: "browser";
898
+ pathname: string;
899
+ }, {
900
+ type: "browser";
901
+ pathname: string;
902
+ }>, z.ZodObject<{
903
+ type: z.ZodLiteral<"script">;
904
+ portNumber: z.ZodNumber;
905
+ initialRoute: z.ZodString;
906
+ }, "strip", z.ZodTypeAny, {
907
+ type: "script";
908
+ initialRoute: string;
909
+ portNumber: number;
910
+ }, {
911
+ type: "script";
912
+ initialRoute: string;
913
+ portNumber: number;
914
+ }>, z.ZodObject<{
915
+ type: z.ZodLiteral<"none">;
916
+ }, "strip", z.ZodTypeAny, {
917
+ type: "none";
918
+ }, {
919
+ type: "none";
920
+ }>]>;
921
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
922
+ } & {
923
+ exerciseNumber: z.ZodNumber;
924
+ stepNumber: z.ZodNumber;
925
+ } & {
926
+ type: z.ZodLiteral<"solution">;
927
+ problemName: z.ZodNullable<z.ZodString>;
928
+ }, "strip", z.ZodTypeAny, {
929
+ title: string;
930
+ type: "solution";
931
+ name: string;
932
+ test: {
933
+ type: "browser";
934
+ pathname: string;
935
+ testFiles: string[];
936
+ } | {
937
+ type: "script";
938
+ script: string;
939
+ } | {
940
+ type: "none";
941
+ };
942
+ fullPath: string;
943
+ dev: {
944
+ type: "browser";
945
+ pathname: string;
946
+ } | {
947
+ type: "script";
948
+ initialRoute: string;
949
+ portNumber: number;
950
+ } | {
951
+ type: "none";
952
+ };
953
+ dirName: string;
954
+ relativePath: string;
955
+ stackBlitzUrl: string | null;
956
+ exerciseNumber: number;
957
+ stepNumber: number;
958
+ problemName: string | null;
959
+ instructionsCode?: string | undefined;
960
+ epicVideoEmbeds?: string[] | undefined;
961
+ }, {
962
+ title: string;
963
+ type: "solution";
964
+ name: string;
965
+ test: {
966
+ type: "browser";
967
+ pathname: string;
968
+ testFiles: string[];
969
+ } | {
970
+ type: "script";
971
+ script: string;
972
+ } | {
973
+ type: "none";
974
+ };
975
+ fullPath: string;
976
+ dev: {
977
+ type: "browser";
978
+ pathname: string;
979
+ } | {
980
+ type: "script";
981
+ initialRoute: string;
982
+ portNumber: number;
983
+ } | {
984
+ type: "none";
985
+ };
986
+ dirName: string;
987
+ relativePath: string;
988
+ stackBlitzUrl: string | null;
989
+ exerciseNumber: number;
990
+ stepNumber: number;
991
+ problemName: string | null;
992
+ instructionsCode?: string | undefined;
993
+ epicVideoEmbeds?: string[] | undefined;
994
+ }>;
995
+ }, "strip", z.ZodTypeAny, {
996
+ stepNumber: number;
997
+ solution: {
998
+ title: string;
999
+ type: "solution";
1000
+ name: string;
1001
+ test: {
1002
+ type: "browser";
1003
+ pathname: string;
1004
+ testFiles: string[];
1005
+ } | {
1006
+ type: "script";
1007
+ script: string;
1008
+ } | {
1009
+ type: "none";
1010
+ };
1011
+ fullPath: string;
1012
+ dev: {
1013
+ type: "browser";
1014
+ pathname: string;
1015
+ } | {
1016
+ type: "script";
1017
+ initialRoute: string;
1018
+ portNumber: number;
1019
+ } | {
1020
+ type: "none";
1021
+ };
1022
+ dirName: string;
1023
+ relativePath: string;
1024
+ stackBlitzUrl: string | null;
1025
+ exerciseNumber: number;
1026
+ stepNumber: number;
1027
+ problemName: string | null;
1028
+ instructionsCode?: string | undefined;
1029
+ epicVideoEmbeds?: string[] | undefined;
1030
+ };
1031
+ problem: {
1032
+ title: string;
1033
+ type: "problem";
1034
+ name: string;
1035
+ test: {
1036
+ type: "browser";
1037
+ pathname: string;
1038
+ testFiles: string[];
1039
+ } | {
1040
+ type: "script";
1041
+ script: string;
1042
+ } | {
1043
+ type: "none";
1044
+ };
1045
+ fullPath: string;
1046
+ dev: {
1047
+ type: "browser";
1048
+ pathname: string;
1049
+ } | {
1050
+ type: "script";
1051
+ initialRoute: string;
1052
+ portNumber: number;
1053
+ } | {
1054
+ type: "none";
1055
+ };
1056
+ dirName: string;
1057
+ relativePath: string;
1058
+ stackBlitzUrl: string | null;
1059
+ exerciseNumber: number;
1060
+ stepNumber: number;
1061
+ solutionName: string | null;
1062
+ instructionsCode?: string | undefined;
1063
+ epicVideoEmbeds?: string[] | undefined;
1064
+ };
1065
+ }, {
1066
+ stepNumber: number;
1067
+ solution: {
1068
+ title: string;
1069
+ type: "solution";
1070
+ name: string;
1071
+ test: {
1072
+ type: "browser";
1073
+ pathname: string;
1074
+ testFiles: string[];
1075
+ } | {
1076
+ type: "script";
1077
+ script: string;
1078
+ } | {
1079
+ type: "none";
1080
+ };
1081
+ fullPath: string;
1082
+ dev: {
1083
+ type: "browser";
1084
+ pathname: string;
1085
+ } | {
1086
+ type: "script";
1087
+ initialRoute: string;
1088
+ portNumber: number;
1089
+ } | {
1090
+ type: "none";
1091
+ };
1092
+ dirName: string;
1093
+ relativePath: string;
1094
+ stackBlitzUrl: string | null;
1095
+ exerciseNumber: number;
1096
+ stepNumber: number;
1097
+ problemName: string | null;
1098
+ instructionsCode?: string | undefined;
1099
+ epicVideoEmbeds?: string[] | undefined;
1100
+ };
1101
+ problem: {
1102
+ title: string;
1103
+ type: "problem";
1104
+ name: string;
1105
+ test: {
1106
+ type: "browser";
1107
+ pathname: string;
1108
+ testFiles: string[];
1109
+ } | {
1110
+ type: "script";
1111
+ script: string;
1112
+ } | {
1113
+ type: "none";
1114
+ };
1115
+ fullPath: string;
1116
+ dev: {
1117
+ type: "browser";
1118
+ pathname: string;
1119
+ } | {
1120
+ type: "script";
1121
+ initialRoute: string;
1122
+ portNumber: number;
1123
+ } | {
1124
+ type: "none";
1125
+ };
1126
+ dirName: string;
1127
+ relativePath: string;
1128
+ stackBlitzUrl: string | null;
1129
+ exerciseNumber: number;
1130
+ stepNumber: number;
1131
+ solutionName: string | null;
1132
+ instructionsCode?: string | undefined;
1133
+ epicVideoEmbeds?: string[] | undefined;
1134
+ };
1135
+ }>, z.ZodObject<{
1136
+ stepNumber: z.ZodNumber;
1137
+ problem: z.ZodObject<{
1138
+ /** a unique identifier for the app */
1139
+ name: z.ZodString;
1140
+ /** the title of the app used for display (comes from the package.json title prop) */
1141
+ title: z.ZodString;
1142
+ /** 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) */
1143
+ dirName: z.ZodString;
1144
+ fullPath: z.ZodString;
1145
+ relativePath: z.ZodString;
1146
+ instructionsCode: z.ZodOptional<z.ZodString>;
1147
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1148
+ test: z.ZodUnion<[z.ZodObject<{
1149
+ type: z.ZodLiteral<"browser">;
1150
+ pathname: z.ZodString;
1151
+ testFiles: z.ZodArray<z.ZodString, "many">;
1152
+ }, "strip", z.ZodTypeAny, {
1153
+ type: "browser";
1154
+ pathname: string;
1155
+ testFiles: string[];
1156
+ }, {
1157
+ type: "browser";
1158
+ pathname: string;
1159
+ testFiles: string[];
1160
+ }>, z.ZodObject<{
1161
+ type: z.ZodLiteral<"script">;
1162
+ script: z.ZodString;
1163
+ }, "strip", z.ZodTypeAny, {
1164
+ type: "script";
1165
+ script: string;
1166
+ }, {
1167
+ type: "script";
1168
+ script: string;
1169
+ }>, z.ZodObject<{
1170
+ type: z.ZodLiteral<"none">;
1171
+ }, "strip", z.ZodTypeAny, {
1172
+ type: "none";
1173
+ }, {
1174
+ type: "none";
1175
+ }>]>;
1176
+ dev: z.ZodUnion<[z.ZodObject<{
1177
+ type: z.ZodLiteral<"browser">;
1178
+ pathname: z.ZodString;
1179
+ }, "strip", z.ZodTypeAny, {
1180
+ type: "browser";
1181
+ pathname: string;
1182
+ }, {
1183
+ type: "browser";
1184
+ pathname: string;
1185
+ }>, z.ZodObject<{
1186
+ type: z.ZodLiteral<"script">;
1187
+ portNumber: z.ZodNumber;
1188
+ initialRoute: z.ZodString;
1189
+ }, "strip", z.ZodTypeAny, {
1190
+ type: "script";
1191
+ initialRoute: string;
1192
+ portNumber: number;
1193
+ }, {
1194
+ type: "script";
1195
+ initialRoute: string;
1196
+ portNumber: number;
1197
+ }>, z.ZodObject<{
1198
+ type: z.ZodLiteral<"none">;
1199
+ }, "strip", z.ZodTypeAny, {
1200
+ type: "none";
1201
+ }, {
1202
+ type: "none";
1203
+ }>]>;
1204
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
1205
+ } & {
1206
+ exerciseNumber: z.ZodNumber;
1207
+ stepNumber: z.ZodNumber;
1208
+ } & {
1209
+ type: z.ZodLiteral<"problem">;
1210
+ solutionName: z.ZodNullable<z.ZodString>;
1211
+ }, "strip", z.ZodTypeAny, {
1212
+ title: string;
1213
+ type: "problem";
1214
+ name: string;
1215
+ test: {
1216
+ type: "browser";
1217
+ pathname: string;
1218
+ testFiles: string[];
1219
+ } | {
1220
+ type: "script";
1221
+ script: string;
1222
+ } | {
1223
+ type: "none";
1224
+ };
1225
+ fullPath: string;
1226
+ dev: {
1227
+ type: "browser";
1228
+ pathname: string;
1229
+ } | {
1230
+ type: "script";
1231
+ initialRoute: string;
1232
+ portNumber: number;
1233
+ } | {
1234
+ type: "none";
1235
+ };
1236
+ dirName: string;
1237
+ relativePath: string;
1238
+ stackBlitzUrl: string | null;
1239
+ exerciseNumber: number;
1240
+ stepNumber: number;
1241
+ solutionName: string | null;
1242
+ instructionsCode?: string | undefined;
1243
+ epicVideoEmbeds?: string[] | undefined;
1244
+ }, {
1245
+ title: string;
1246
+ type: "problem";
1247
+ name: string;
1248
+ test: {
1249
+ type: "browser";
1250
+ pathname: string;
1251
+ testFiles: string[];
1252
+ } | {
1253
+ type: "script";
1254
+ script: string;
1255
+ } | {
1256
+ type: "none";
1257
+ };
1258
+ fullPath: string;
1259
+ dev: {
1260
+ type: "browser";
1261
+ pathname: string;
1262
+ } | {
1263
+ type: "script";
1264
+ initialRoute: string;
1265
+ portNumber: number;
1266
+ } | {
1267
+ type: "none";
1268
+ };
1269
+ dirName: string;
1270
+ relativePath: string;
1271
+ stackBlitzUrl: string | null;
1272
+ exerciseNumber: number;
1273
+ stepNumber: number;
1274
+ solutionName: string | null;
1275
+ instructionsCode?: string | undefined;
1276
+ epicVideoEmbeds?: string[] | undefined;
1277
+ }>;
1278
+ solution: z.ZodOptional<z.ZodNever>;
1279
+ }, "strip", z.ZodTypeAny, {
1280
+ stepNumber: number;
1281
+ problem: {
1282
+ title: string;
1283
+ type: "problem";
1284
+ name: string;
1285
+ test: {
1286
+ type: "browser";
1287
+ pathname: string;
1288
+ testFiles: string[];
1289
+ } | {
1290
+ type: "script";
1291
+ script: string;
1292
+ } | {
1293
+ type: "none";
1294
+ };
1295
+ fullPath: string;
1296
+ dev: {
1297
+ type: "browser";
1298
+ pathname: string;
1299
+ } | {
1300
+ type: "script";
1301
+ initialRoute: string;
1302
+ portNumber: number;
1303
+ } | {
1304
+ type: "none";
1305
+ };
1306
+ dirName: string;
1307
+ relativePath: string;
1308
+ stackBlitzUrl: string | null;
1309
+ exerciseNumber: number;
1310
+ stepNumber: number;
1311
+ solutionName: string | null;
1312
+ instructionsCode?: string | undefined;
1313
+ epicVideoEmbeds?: string[] | undefined;
1314
+ };
1315
+ solution?: undefined;
1316
+ }, {
1317
+ stepNumber: number;
1318
+ problem: {
1319
+ title: string;
1320
+ type: "problem";
1321
+ name: string;
1322
+ test: {
1323
+ type: "browser";
1324
+ pathname: string;
1325
+ testFiles: string[];
1326
+ } | {
1327
+ type: "script";
1328
+ script: string;
1329
+ } | {
1330
+ type: "none";
1331
+ };
1332
+ fullPath: string;
1333
+ dev: {
1334
+ type: "browser";
1335
+ pathname: string;
1336
+ } | {
1337
+ type: "script";
1338
+ initialRoute: string;
1339
+ portNumber: number;
1340
+ } | {
1341
+ type: "none";
1342
+ };
1343
+ dirName: string;
1344
+ relativePath: string;
1345
+ stackBlitzUrl: string | null;
1346
+ exerciseNumber: number;
1347
+ stepNumber: number;
1348
+ solutionName: string | null;
1349
+ instructionsCode?: string | undefined;
1350
+ epicVideoEmbeds?: string[] | undefined;
1351
+ };
1352
+ solution?: undefined;
1353
+ }>, z.ZodObject<{
1354
+ stepNumber: z.ZodNumber;
1355
+ problem: z.ZodOptional<z.ZodNever>;
1356
+ solution: z.ZodObject<{
1357
+ /** a unique identifier for the app */
1358
+ name: z.ZodString;
1359
+ /** the title of the app used for display (comes from the package.json title prop) */
1360
+ title: z.ZodString;
1361
+ /** 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) */
1362
+ dirName: z.ZodString;
1363
+ fullPath: z.ZodString;
1364
+ relativePath: z.ZodString;
1365
+ instructionsCode: z.ZodOptional<z.ZodString>;
1366
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1367
+ test: z.ZodUnion<[z.ZodObject<{
1368
+ type: z.ZodLiteral<"browser">;
1369
+ pathname: z.ZodString;
1370
+ testFiles: z.ZodArray<z.ZodString, "many">;
1371
+ }, "strip", z.ZodTypeAny, {
1372
+ type: "browser";
1373
+ pathname: string;
1374
+ testFiles: string[];
1375
+ }, {
1376
+ type: "browser";
1377
+ pathname: string;
1378
+ testFiles: string[];
1379
+ }>, z.ZodObject<{
1380
+ type: z.ZodLiteral<"script">;
1381
+ script: z.ZodString;
1382
+ }, "strip", z.ZodTypeAny, {
1383
+ type: "script";
1384
+ script: string;
1385
+ }, {
1386
+ type: "script";
1387
+ script: string;
1388
+ }>, z.ZodObject<{
1389
+ type: z.ZodLiteral<"none">;
1390
+ }, "strip", z.ZodTypeAny, {
1391
+ type: "none";
1392
+ }, {
1393
+ type: "none";
1394
+ }>]>;
1395
+ dev: z.ZodUnion<[z.ZodObject<{
1396
+ type: z.ZodLiteral<"browser">;
1397
+ pathname: z.ZodString;
1398
+ }, "strip", z.ZodTypeAny, {
1399
+ type: "browser";
1400
+ pathname: string;
1401
+ }, {
1402
+ type: "browser";
1403
+ pathname: string;
1404
+ }>, z.ZodObject<{
1405
+ type: z.ZodLiteral<"script">;
1406
+ portNumber: z.ZodNumber;
1407
+ initialRoute: z.ZodString;
1408
+ }, "strip", z.ZodTypeAny, {
1409
+ type: "script";
1410
+ initialRoute: string;
1411
+ portNumber: number;
1412
+ }, {
1413
+ type: "script";
1414
+ initialRoute: string;
1415
+ portNumber: number;
1416
+ }>, z.ZodObject<{
1417
+ type: z.ZodLiteral<"none">;
1418
+ }, "strip", z.ZodTypeAny, {
1419
+ type: "none";
1420
+ }, {
1421
+ type: "none";
1422
+ }>]>;
1423
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
1424
+ } & {
1425
+ exerciseNumber: z.ZodNumber;
1426
+ stepNumber: z.ZodNumber;
1427
+ } & {
1428
+ type: z.ZodLiteral<"solution">;
1429
+ problemName: z.ZodNullable<z.ZodString>;
1430
+ }, "strip", z.ZodTypeAny, {
1431
+ title: string;
1432
+ type: "solution";
1433
+ name: string;
1434
+ test: {
1435
+ type: "browser";
1436
+ pathname: string;
1437
+ testFiles: string[];
1438
+ } | {
1439
+ type: "script";
1440
+ script: string;
1441
+ } | {
1442
+ type: "none";
1443
+ };
1444
+ fullPath: string;
1445
+ dev: {
1446
+ type: "browser";
1447
+ pathname: string;
1448
+ } | {
1449
+ type: "script";
1450
+ initialRoute: string;
1451
+ portNumber: number;
1452
+ } | {
1453
+ type: "none";
1454
+ };
1455
+ dirName: string;
1456
+ relativePath: string;
1457
+ stackBlitzUrl: string | null;
1458
+ exerciseNumber: number;
1459
+ stepNumber: number;
1460
+ problemName: string | null;
1461
+ instructionsCode?: string | undefined;
1462
+ epicVideoEmbeds?: string[] | undefined;
1463
+ }, {
1464
+ title: string;
1465
+ type: "solution";
1466
+ name: string;
1467
+ test: {
1468
+ type: "browser";
1469
+ pathname: string;
1470
+ testFiles: string[];
1471
+ } | {
1472
+ type: "script";
1473
+ script: string;
1474
+ } | {
1475
+ type: "none";
1476
+ };
1477
+ fullPath: string;
1478
+ dev: {
1479
+ type: "browser";
1480
+ pathname: string;
1481
+ } | {
1482
+ type: "script";
1483
+ initialRoute: string;
1484
+ portNumber: number;
1485
+ } | {
1486
+ type: "none";
1487
+ };
1488
+ dirName: string;
1489
+ relativePath: string;
1490
+ stackBlitzUrl: string | null;
1491
+ exerciseNumber: number;
1492
+ stepNumber: number;
1493
+ problemName: string | null;
1494
+ instructionsCode?: string | undefined;
1495
+ epicVideoEmbeds?: string[] | undefined;
1496
+ }>;
1497
+ }, "strip", z.ZodTypeAny, {
1498
+ stepNumber: number;
1499
+ solution: {
1500
+ title: string;
1501
+ type: "solution";
1502
+ name: string;
1503
+ test: {
1504
+ type: "browser";
1505
+ pathname: string;
1506
+ testFiles: string[];
1507
+ } | {
1508
+ type: "script";
1509
+ script: string;
1510
+ } | {
1511
+ type: "none";
1512
+ };
1513
+ fullPath: string;
1514
+ dev: {
1515
+ type: "browser";
1516
+ pathname: string;
1517
+ } | {
1518
+ type: "script";
1519
+ initialRoute: string;
1520
+ portNumber: number;
1521
+ } | {
1522
+ type: "none";
1523
+ };
1524
+ dirName: string;
1525
+ relativePath: string;
1526
+ stackBlitzUrl: string | null;
1527
+ exerciseNumber: number;
1528
+ stepNumber: number;
1529
+ problemName: string | null;
1530
+ instructionsCode?: string | undefined;
1531
+ epicVideoEmbeds?: string[] | undefined;
1532
+ };
1533
+ problem?: undefined;
1534
+ }, {
1535
+ stepNumber: number;
1536
+ solution: {
1537
+ title: string;
1538
+ type: "solution";
1539
+ name: string;
1540
+ test: {
1541
+ type: "browser";
1542
+ pathname: string;
1543
+ testFiles: string[];
1544
+ } | {
1545
+ type: "script";
1546
+ script: string;
1547
+ } | {
1548
+ type: "none";
1549
+ };
1550
+ fullPath: string;
1551
+ dev: {
1552
+ type: "browser";
1553
+ pathname: string;
1554
+ } | {
1555
+ type: "script";
1556
+ initialRoute: string;
1557
+ portNumber: number;
1558
+ } | {
1559
+ type: "none";
1560
+ };
1561
+ dirName: string;
1562
+ relativePath: string;
1563
+ stackBlitzUrl: string | null;
1564
+ exerciseNumber: number;
1565
+ stepNumber: number;
1566
+ problemName: string | null;
1567
+ instructionsCode?: string | undefined;
1568
+ epicVideoEmbeds?: string[] | undefined;
1569
+ };
1570
+ problem?: undefined;
1571
+ }>]>, "many">;
1572
+ problems: z.ZodArray<z.ZodObject<{
1573
+ /** a unique identifier for the app */
1574
+ name: z.ZodString;
1575
+ /** the title of the app used for display (comes from the package.json title prop) */
1576
+ title: z.ZodString;
1577
+ /** 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) */
1578
+ dirName: z.ZodString;
1579
+ fullPath: z.ZodString;
1580
+ relativePath: z.ZodString;
1581
+ instructionsCode: z.ZodOptional<z.ZodString>;
1582
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1583
+ test: z.ZodUnion<[z.ZodObject<{
1584
+ type: z.ZodLiteral<"browser">;
1585
+ pathname: z.ZodString;
1586
+ testFiles: z.ZodArray<z.ZodString, "many">;
1587
+ }, "strip", z.ZodTypeAny, {
1588
+ type: "browser";
1589
+ pathname: string;
1590
+ testFiles: string[];
1591
+ }, {
1592
+ type: "browser";
1593
+ pathname: string;
1594
+ testFiles: string[];
1595
+ }>, z.ZodObject<{
1596
+ type: z.ZodLiteral<"script">;
1597
+ script: z.ZodString;
1598
+ }, "strip", z.ZodTypeAny, {
1599
+ type: "script";
1600
+ script: string;
1601
+ }, {
1602
+ type: "script";
1603
+ script: string;
1604
+ }>, z.ZodObject<{
1605
+ type: z.ZodLiteral<"none">;
1606
+ }, "strip", z.ZodTypeAny, {
1607
+ type: "none";
1608
+ }, {
1609
+ type: "none";
1610
+ }>]>;
1611
+ dev: z.ZodUnion<[z.ZodObject<{
1612
+ type: z.ZodLiteral<"browser">;
1613
+ pathname: z.ZodString;
1614
+ }, "strip", z.ZodTypeAny, {
1615
+ type: "browser";
1616
+ pathname: string;
1617
+ }, {
1618
+ type: "browser";
1619
+ pathname: string;
1620
+ }>, z.ZodObject<{
1621
+ type: z.ZodLiteral<"script">;
1622
+ portNumber: z.ZodNumber;
1623
+ initialRoute: z.ZodString;
1624
+ }, "strip", z.ZodTypeAny, {
1625
+ type: "script";
1626
+ initialRoute: string;
1627
+ portNumber: number;
1628
+ }, {
1629
+ type: "script";
1630
+ initialRoute: string;
1631
+ portNumber: number;
1632
+ }>, z.ZodObject<{
1633
+ type: z.ZodLiteral<"none">;
1634
+ }, "strip", z.ZodTypeAny, {
1635
+ type: "none";
1636
+ }, {
1637
+ type: "none";
1638
+ }>]>;
1639
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
1640
+ } & {
1641
+ exerciseNumber: z.ZodNumber;
1642
+ stepNumber: z.ZodNumber;
1643
+ } & {
1644
+ type: z.ZodLiteral<"problem">;
1645
+ solutionName: z.ZodNullable<z.ZodString>;
1646
+ }, "strip", z.ZodTypeAny, {
1647
+ title: string;
1648
+ type: "problem";
1649
+ name: string;
1650
+ test: {
1651
+ type: "browser";
1652
+ pathname: string;
1653
+ testFiles: string[];
1654
+ } | {
1655
+ type: "script";
1656
+ script: string;
1657
+ } | {
1658
+ type: "none";
1659
+ };
1660
+ fullPath: string;
1661
+ dev: {
1662
+ type: "browser";
1663
+ pathname: string;
1664
+ } | {
1665
+ type: "script";
1666
+ initialRoute: string;
1667
+ portNumber: number;
1668
+ } | {
1669
+ type: "none";
1670
+ };
1671
+ dirName: string;
1672
+ relativePath: string;
1673
+ stackBlitzUrl: string | null;
1674
+ exerciseNumber: number;
1675
+ stepNumber: number;
1676
+ solutionName: string | null;
1677
+ instructionsCode?: string | undefined;
1678
+ epicVideoEmbeds?: string[] | undefined;
1679
+ }, {
1680
+ title: string;
1681
+ type: "problem";
1682
+ name: string;
1683
+ test: {
1684
+ type: "browser";
1685
+ pathname: string;
1686
+ testFiles: string[];
1687
+ } | {
1688
+ type: "script";
1689
+ script: string;
1690
+ } | {
1691
+ type: "none";
1692
+ };
1693
+ fullPath: string;
1694
+ dev: {
1695
+ type: "browser";
1696
+ pathname: string;
1697
+ } | {
1698
+ type: "script";
1699
+ initialRoute: string;
1700
+ portNumber: number;
1701
+ } | {
1702
+ type: "none";
1703
+ };
1704
+ dirName: string;
1705
+ relativePath: string;
1706
+ stackBlitzUrl: string | null;
1707
+ exerciseNumber: number;
1708
+ stepNumber: number;
1709
+ solutionName: string | null;
1710
+ instructionsCode?: string | undefined;
1711
+ epicVideoEmbeds?: string[] | undefined;
1712
+ }>, "many">;
1713
+ solutions: z.ZodArray<z.ZodObject<{
1714
+ /** a unique identifier for the app */
1715
+ name: z.ZodString;
1716
+ /** the title of the app used for display (comes from the package.json title prop) */
1717
+ title: z.ZodString;
1718
+ /** 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) */
1719
+ dirName: z.ZodString;
1720
+ fullPath: z.ZodString;
1721
+ relativePath: z.ZodString;
1722
+ instructionsCode: z.ZodOptional<z.ZodString>;
1723
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1724
+ test: z.ZodUnion<[z.ZodObject<{
1725
+ type: z.ZodLiteral<"browser">;
1726
+ pathname: z.ZodString;
1727
+ testFiles: z.ZodArray<z.ZodString, "many">;
1728
+ }, "strip", z.ZodTypeAny, {
1729
+ type: "browser";
1730
+ pathname: string;
1731
+ testFiles: string[];
1732
+ }, {
1733
+ type: "browser";
1734
+ pathname: string;
1735
+ testFiles: string[];
1736
+ }>, z.ZodObject<{
1737
+ type: z.ZodLiteral<"script">;
1738
+ script: z.ZodString;
1739
+ }, "strip", z.ZodTypeAny, {
1740
+ type: "script";
1741
+ script: string;
1742
+ }, {
1743
+ type: "script";
1744
+ script: string;
1745
+ }>, z.ZodObject<{
1746
+ type: z.ZodLiteral<"none">;
1747
+ }, "strip", z.ZodTypeAny, {
1748
+ type: "none";
1749
+ }, {
1750
+ type: "none";
1751
+ }>]>;
1752
+ dev: z.ZodUnion<[z.ZodObject<{
1753
+ type: z.ZodLiteral<"browser">;
1754
+ pathname: z.ZodString;
1755
+ }, "strip", z.ZodTypeAny, {
1756
+ type: "browser";
1757
+ pathname: string;
1758
+ }, {
1759
+ type: "browser";
1760
+ pathname: string;
1761
+ }>, z.ZodObject<{
1762
+ type: z.ZodLiteral<"script">;
1763
+ portNumber: z.ZodNumber;
1764
+ initialRoute: z.ZodString;
1765
+ }, "strip", z.ZodTypeAny, {
1766
+ type: "script";
1767
+ initialRoute: string;
1768
+ portNumber: number;
1769
+ }, {
1770
+ type: "script";
1771
+ initialRoute: string;
1772
+ portNumber: number;
1773
+ }>, z.ZodObject<{
1774
+ type: z.ZodLiteral<"none">;
1775
+ }, "strip", z.ZodTypeAny, {
1776
+ type: "none";
1777
+ }, {
1778
+ type: "none";
1779
+ }>]>;
1780
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
1781
+ } & {
1782
+ exerciseNumber: z.ZodNumber;
1783
+ stepNumber: z.ZodNumber;
1784
+ } & {
1785
+ type: z.ZodLiteral<"solution">;
1786
+ problemName: z.ZodNullable<z.ZodString>;
1787
+ }, "strip", z.ZodTypeAny, {
1788
+ title: string;
1789
+ type: "solution";
1790
+ name: string;
1791
+ test: {
1792
+ type: "browser";
1793
+ pathname: string;
1794
+ testFiles: string[];
1795
+ } | {
1796
+ type: "script";
1797
+ script: string;
1798
+ } | {
1799
+ type: "none";
1800
+ };
1801
+ fullPath: string;
1802
+ dev: {
1803
+ type: "browser";
1804
+ pathname: string;
1805
+ } | {
1806
+ type: "script";
1807
+ initialRoute: string;
1808
+ portNumber: number;
1809
+ } | {
1810
+ type: "none";
1811
+ };
1812
+ dirName: string;
1813
+ relativePath: string;
1814
+ stackBlitzUrl: string | null;
1815
+ exerciseNumber: number;
1816
+ stepNumber: number;
1817
+ problemName: string | null;
1818
+ instructionsCode?: string | undefined;
1819
+ epicVideoEmbeds?: string[] | undefined;
1820
+ }, {
1821
+ title: string;
1822
+ type: "solution";
1823
+ name: string;
1824
+ test: {
1825
+ type: "browser";
1826
+ pathname: string;
1827
+ testFiles: string[];
1828
+ } | {
1829
+ type: "script";
1830
+ script: string;
1831
+ } | {
1832
+ type: "none";
1833
+ };
1834
+ fullPath: string;
1835
+ dev: {
1836
+ type: "browser";
1837
+ pathname: string;
1838
+ } | {
1839
+ type: "script";
1840
+ initialRoute: string;
1841
+ portNumber: number;
1842
+ } | {
1843
+ type: "none";
1844
+ };
1845
+ dirName: string;
1846
+ relativePath: string;
1847
+ stackBlitzUrl: string | null;
1848
+ exerciseNumber: number;
1849
+ stepNumber: number;
1850
+ problemName: string | null;
1851
+ instructionsCode?: string | undefined;
1852
+ epicVideoEmbeds?: string[] | undefined;
1853
+ }>, "many">;
1854
+ }, "strip", z.ZodTypeAny, {
1855
+ title: string;
1856
+ fullPath: string;
1857
+ dirName: string;
1858
+ exerciseNumber: number;
1859
+ steps: ({
1860
+ stepNumber: number;
1861
+ solution: {
1862
+ title: string;
1863
+ type: "solution";
1864
+ name: string;
1865
+ test: {
1866
+ type: "browser";
1867
+ pathname: string;
1868
+ testFiles: string[];
1869
+ } | {
1870
+ type: "script";
1871
+ script: string;
1872
+ } | {
1873
+ type: "none";
1874
+ };
1875
+ fullPath: string;
1876
+ dev: {
1877
+ type: "browser";
1878
+ pathname: string;
1879
+ } | {
1880
+ type: "script";
1881
+ initialRoute: string;
1882
+ portNumber: number;
1883
+ } | {
1884
+ type: "none";
1885
+ };
1886
+ dirName: string;
1887
+ relativePath: string;
1888
+ stackBlitzUrl: string | null;
1889
+ exerciseNumber: number;
1890
+ stepNumber: number;
1891
+ problemName: string | null;
1892
+ instructionsCode?: string | undefined;
1893
+ epicVideoEmbeds?: string[] | undefined;
1894
+ };
1895
+ problem: {
1896
+ title: string;
1897
+ type: "problem";
1898
+ name: string;
1899
+ test: {
1900
+ type: "browser";
1901
+ pathname: string;
1902
+ testFiles: string[];
1903
+ } | {
1904
+ type: "script";
1905
+ script: string;
1906
+ } | {
1907
+ type: "none";
1908
+ };
1909
+ fullPath: string;
1910
+ dev: {
1911
+ type: "browser";
1912
+ pathname: string;
1913
+ } | {
1914
+ type: "script";
1915
+ initialRoute: string;
1916
+ portNumber: number;
1917
+ } | {
1918
+ type: "none";
1919
+ };
1920
+ dirName: string;
1921
+ relativePath: string;
1922
+ stackBlitzUrl: string | null;
1923
+ exerciseNumber: number;
1924
+ stepNumber: number;
1925
+ solutionName: string | null;
1926
+ instructionsCode?: string | undefined;
1927
+ epicVideoEmbeds?: string[] | undefined;
1928
+ };
1929
+ } | {
1930
+ stepNumber: number;
1931
+ problem: {
1932
+ title: string;
1933
+ type: "problem";
1934
+ name: string;
1935
+ test: {
1936
+ type: "browser";
1937
+ pathname: string;
1938
+ testFiles: string[];
1939
+ } | {
1940
+ type: "script";
1941
+ script: string;
1942
+ } | {
1943
+ type: "none";
1944
+ };
1945
+ fullPath: string;
1946
+ dev: {
1947
+ type: "browser";
1948
+ pathname: string;
1949
+ } | {
1950
+ type: "script";
1951
+ initialRoute: string;
1952
+ portNumber: number;
1953
+ } | {
1954
+ type: "none";
1955
+ };
1956
+ dirName: string;
1957
+ relativePath: string;
1958
+ stackBlitzUrl: string | null;
1959
+ exerciseNumber: number;
1960
+ stepNumber: number;
1961
+ solutionName: string | null;
1962
+ instructionsCode?: string | undefined;
1963
+ epicVideoEmbeds?: string[] | undefined;
1964
+ };
1965
+ solution?: undefined;
1966
+ } | {
1967
+ stepNumber: number;
1968
+ solution: {
1969
+ title: string;
1970
+ type: "solution";
1971
+ name: string;
1972
+ test: {
1973
+ type: "browser";
1974
+ pathname: string;
1975
+ testFiles: string[];
1976
+ } | {
1977
+ type: "script";
1978
+ script: string;
1979
+ } | {
1980
+ type: "none";
1981
+ };
1982
+ fullPath: string;
1983
+ dev: {
1984
+ type: "browser";
1985
+ pathname: string;
1986
+ } | {
1987
+ type: "script";
1988
+ initialRoute: string;
1989
+ portNumber: number;
1990
+ } | {
1991
+ type: "none";
1992
+ };
1993
+ dirName: string;
1994
+ relativePath: string;
1995
+ stackBlitzUrl: string | null;
1996
+ exerciseNumber: number;
1997
+ stepNumber: number;
1998
+ problemName: string | null;
1999
+ instructionsCode?: string | undefined;
2000
+ epicVideoEmbeds?: string[] | undefined;
2001
+ };
2002
+ problem?: undefined;
2003
+ })[];
2004
+ problems: {
2005
+ title: string;
2006
+ type: "problem";
2007
+ name: string;
2008
+ test: {
2009
+ type: "browser";
2010
+ pathname: string;
2011
+ testFiles: string[];
2012
+ } | {
2013
+ type: "script";
2014
+ script: string;
2015
+ } | {
2016
+ type: "none";
2017
+ };
2018
+ fullPath: string;
2019
+ dev: {
2020
+ type: "browser";
2021
+ pathname: string;
2022
+ } | {
2023
+ type: "script";
2024
+ initialRoute: string;
2025
+ portNumber: number;
2026
+ } | {
2027
+ type: "none";
2028
+ };
2029
+ dirName: string;
2030
+ relativePath: string;
2031
+ stackBlitzUrl: string | null;
2032
+ exerciseNumber: number;
2033
+ stepNumber: number;
2034
+ solutionName: string | null;
2035
+ instructionsCode?: string | undefined;
2036
+ epicVideoEmbeds?: string[] | undefined;
2037
+ }[];
2038
+ solutions: {
2039
+ title: string;
2040
+ type: "solution";
2041
+ name: string;
2042
+ test: {
2043
+ type: "browser";
2044
+ pathname: string;
2045
+ testFiles: string[];
2046
+ } | {
2047
+ type: "script";
2048
+ script: string;
2049
+ } | {
2050
+ type: "none";
2051
+ };
2052
+ fullPath: string;
2053
+ dev: {
2054
+ type: "browser";
2055
+ pathname: string;
2056
+ } | {
2057
+ type: "script";
2058
+ initialRoute: string;
2059
+ portNumber: number;
2060
+ } | {
2061
+ type: "none";
2062
+ };
2063
+ dirName: string;
2064
+ relativePath: string;
2065
+ stackBlitzUrl: string | null;
2066
+ exerciseNumber: number;
2067
+ stepNumber: number;
2068
+ problemName: string | null;
2069
+ instructionsCode?: string | undefined;
2070
+ epicVideoEmbeds?: string[] | undefined;
2071
+ }[];
2072
+ instructionsCode?: string | undefined;
2073
+ finishedCode?: string | undefined;
2074
+ instructionsEpicVideoEmbeds?: string[] | undefined;
2075
+ finishedEpicVideoEmbeds?: string[] | undefined;
2076
+ }, {
2077
+ title: string;
2078
+ fullPath: string;
2079
+ dirName: string;
2080
+ exerciseNumber: number;
2081
+ steps: ({
2082
+ stepNumber: number;
2083
+ solution: {
2084
+ title: string;
2085
+ type: "solution";
2086
+ name: string;
2087
+ test: {
2088
+ type: "browser";
2089
+ pathname: string;
2090
+ testFiles: string[];
2091
+ } | {
2092
+ type: "script";
2093
+ script: string;
2094
+ } | {
2095
+ type: "none";
2096
+ };
2097
+ fullPath: string;
2098
+ dev: {
2099
+ type: "browser";
2100
+ pathname: string;
2101
+ } | {
2102
+ type: "script";
2103
+ initialRoute: string;
2104
+ portNumber: number;
2105
+ } | {
2106
+ type: "none";
2107
+ };
2108
+ dirName: string;
2109
+ relativePath: string;
2110
+ stackBlitzUrl: string | null;
2111
+ exerciseNumber: number;
2112
+ stepNumber: number;
2113
+ problemName: string | null;
2114
+ instructionsCode?: string | undefined;
2115
+ epicVideoEmbeds?: string[] | undefined;
2116
+ };
2117
+ problem: {
2118
+ title: string;
2119
+ type: "problem";
2120
+ name: string;
2121
+ test: {
2122
+ type: "browser";
2123
+ pathname: string;
2124
+ testFiles: string[];
2125
+ } | {
2126
+ type: "script";
2127
+ script: string;
2128
+ } | {
2129
+ type: "none";
2130
+ };
2131
+ fullPath: string;
2132
+ dev: {
2133
+ type: "browser";
2134
+ pathname: string;
2135
+ } | {
2136
+ type: "script";
2137
+ initialRoute: string;
2138
+ portNumber: number;
2139
+ } | {
2140
+ type: "none";
2141
+ };
2142
+ dirName: string;
2143
+ relativePath: string;
2144
+ stackBlitzUrl: string | null;
2145
+ exerciseNumber: number;
2146
+ stepNumber: number;
2147
+ solutionName: string | null;
2148
+ instructionsCode?: string | undefined;
2149
+ epicVideoEmbeds?: string[] | undefined;
2150
+ };
2151
+ } | {
2152
+ stepNumber: number;
2153
+ problem: {
2154
+ title: string;
2155
+ type: "problem";
2156
+ name: string;
2157
+ test: {
2158
+ type: "browser";
2159
+ pathname: string;
2160
+ testFiles: string[];
2161
+ } | {
2162
+ type: "script";
2163
+ script: string;
2164
+ } | {
2165
+ type: "none";
2166
+ };
2167
+ fullPath: string;
2168
+ dev: {
2169
+ type: "browser";
2170
+ pathname: string;
2171
+ } | {
2172
+ type: "script";
2173
+ initialRoute: string;
2174
+ portNumber: number;
2175
+ } | {
2176
+ type: "none";
2177
+ };
2178
+ dirName: string;
2179
+ relativePath: string;
2180
+ stackBlitzUrl: string | null;
2181
+ exerciseNumber: number;
2182
+ stepNumber: number;
2183
+ solutionName: string | null;
2184
+ instructionsCode?: string | undefined;
2185
+ epicVideoEmbeds?: string[] | undefined;
2186
+ };
2187
+ solution?: undefined;
2188
+ } | {
2189
+ stepNumber: number;
2190
+ solution: {
2191
+ title: string;
2192
+ type: "solution";
2193
+ name: string;
2194
+ test: {
2195
+ type: "browser";
2196
+ pathname: string;
2197
+ testFiles: string[];
2198
+ } | {
2199
+ type: "script";
2200
+ script: string;
2201
+ } | {
2202
+ type: "none";
2203
+ };
2204
+ fullPath: string;
2205
+ dev: {
2206
+ type: "browser";
2207
+ pathname: string;
2208
+ } | {
2209
+ type: "script";
2210
+ initialRoute: string;
2211
+ portNumber: number;
2212
+ } | {
2213
+ type: "none";
2214
+ };
2215
+ dirName: string;
2216
+ relativePath: string;
2217
+ stackBlitzUrl: string | null;
2218
+ exerciseNumber: number;
2219
+ stepNumber: number;
2220
+ problemName: string | null;
2221
+ instructionsCode?: string | undefined;
2222
+ epicVideoEmbeds?: string[] | undefined;
2223
+ };
2224
+ problem?: undefined;
2225
+ })[];
2226
+ problems: {
2227
+ title: string;
2228
+ type: "problem";
2229
+ name: string;
2230
+ test: {
2231
+ type: "browser";
2232
+ pathname: string;
2233
+ testFiles: string[];
2234
+ } | {
2235
+ type: "script";
2236
+ script: string;
2237
+ } | {
2238
+ type: "none";
2239
+ };
2240
+ fullPath: string;
2241
+ dev: {
2242
+ type: "browser";
2243
+ pathname: string;
2244
+ } | {
2245
+ type: "script";
2246
+ initialRoute: string;
2247
+ portNumber: number;
2248
+ } | {
2249
+ type: "none";
2250
+ };
2251
+ dirName: string;
2252
+ relativePath: string;
2253
+ stackBlitzUrl: string | null;
2254
+ exerciseNumber: number;
2255
+ stepNumber: number;
2256
+ solutionName: string | null;
2257
+ instructionsCode?: string | undefined;
2258
+ epicVideoEmbeds?: string[] | undefined;
2259
+ }[];
2260
+ solutions: {
2261
+ title: string;
2262
+ type: "solution";
2263
+ name: string;
2264
+ test: {
2265
+ type: "browser";
2266
+ pathname: string;
2267
+ testFiles: string[];
2268
+ } | {
2269
+ type: "script";
2270
+ script: string;
2271
+ } | {
2272
+ type: "none";
2273
+ };
2274
+ fullPath: string;
2275
+ dev: {
2276
+ type: "browser";
2277
+ pathname: string;
2278
+ } | {
2279
+ type: "script";
2280
+ initialRoute: string;
2281
+ portNumber: number;
2282
+ } | {
2283
+ type: "none";
2284
+ };
2285
+ dirName: string;
2286
+ relativePath: string;
2287
+ stackBlitzUrl: string | null;
2288
+ exerciseNumber: number;
2289
+ stepNumber: number;
2290
+ problemName: string | null;
2291
+ instructionsCode?: string | undefined;
2292
+ epicVideoEmbeds?: string[] | undefined;
2293
+ }[];
2294
+ instructionsCode?: string | undefined;
2295
+ finishedCode?: string | undefined;
2296
+ instructionsEpicVideoEmbeds?: string[] | undefined;
2297
+ finishedEpicVideoEmbeds?: string[] | undefined;
2298
+ }>;
2299
+ declare const ExerciseStepAppSchema: z.ZodUnion<[z.ZodObject<{
2300
+ /** a unique identifier for the app */
2301
+ name: z.ZodString;
2302
+ /** the title of the app used for display (comes from the package.json title prop) */
2303
+ title: z.ZodString;
2304
+ /** 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) */
2305
+ dirName: z.ZodString;
2306
+ fullPath: z.ZodString;
2307
+ relativePath: z.ZodString;
2308
+ instructionsCode: z.ZodOptional<z.ZodString>;
2309
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2310
+ test: z.ZodUnion<[z.ZodObject<{
2311
+ type: z.ZodLiteral<"browser">;
2312
+ pathname: z.ZodString;
2313
+ testFiles: z.ZodArray<z.ZodString, "many">;
2314
+ }, "strip", z.ZodTypeAny, {
2315
+ type: "browser";
2316
+ pathname: string;
2317
+ testFiles: string[];
2318
+ }, {
2319
+ type: "browser";
2320
+ pathname: string;
2321
+ testFiles: string[];
2322
+ }>, z.ZodObject<{
2323
+ type: z.ZodLiteral<"script">;
2324
+ script: z.ZodString;
2325
+ }, "strip", z.ZodTypeAny, {
2326
+ type: "script";
2327
+ script: string;
2328
+ }, {
2329
+ type: "script";
2330
+ script: string;
2331
+ }>, z.ZodObject<{
2332
+ type: z.ZodLiteral<"none">;
2333
+ }, "strip", z.ZodTypeAny, {
2334
+ type: "none";
2335
+ }, {
2336
+ type: "none";
2337
+ }>]>;
2338
+ dev: z.ZodUnion<[z.ZodObject<{
2339
+ type: z.ZodLiteral<"browser">;
2340
+ pathname: z.ZodString;
2341
+ }, "strip", z.ZodTypeAny, {
2342
+ type: "browser";
2343
+ pathname: string;
2344
+ }, {
2345
+ type: "browser";
2346
+ pathname: string;
2347
+ }>, z.ZodObject<{
2348
+ type: z.ZodLiteral<"script">;
2349
+ portNumber: z.ZodNumber;
2350
+ initialRoute: z.ZodString;
2351
+ }, "strip", z.ZodTypeAny, {
2352
+ type: "script";
2353
+ initialRoute: string;
2354
+ portNumber: number;
2355
+ }, {
2356
+ type: "script";
2357
+ initialRoute: string;
2358
+ portNumber: number;
2359
+ }>, z.ZodObject<{
2360
+ type: z.ZodLiteral<"none">;
2361
+ }, "strip", z.ZodTypeAny, {
2362
+ type: "none";
2363
+ }, {
2364
+ type: "none";
2365
+ }>]>;
2366
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
2367
+ } & {
2368
+ exerciseNumber: z.ZodNumber;
2369
+ stepNumber: z.ZodNumber;
2370
+ } & {
2371
+ type: z.ZodLiteral<"problem">;
2372
+ solutionName: z.ZodNullable<z.ZodString>;
2373
+ }, "strip", z.ZodTypeAny, {
2374
+ title: string;
2375
+ type: "problem";
2376
+ name: string;
2377
+ test: {
2378
+ type: "browser";
2379
+ pathname: string;
2380
+ testFiles: string[];
2381
+ } | {
2382
+ type: "script";
2383
+ script: string;
2384
+ } | {
2385
+ type: "none";
2386
+ };
2387
+ fullPath: string;
2388
+ dev: {
2389
+ type: "browser";
2390
+ pathname: string;
2391
+ } | {
2392
+ type: "script";
2393
+ initialRoute: string;
2394
+ portNumber: number;
2395
+ } | {
2396
+ type: "none";
2397
+ };
2398
+ dirName: string;
2399
+ relativePath: string;
2400
+ stackBlitzUrl: string | null;
2401
+ exerciseNumber: number;
2402
+ stepNumber: number;
2403
+ solutionName: string | null;
2404
+ instructionsCode?: string | undefined;
2405
+ epicVideoEmbeds?: string[] | undefined;
2406
+ }, {
2407
+ title: string;
2408
+ type: "problem";
2409
+ name: string;
2410
+ test: {
2411
+ type: "browser";
2412
+ pathname: string;
2413
+ testFiles: string[];
2414
+ } | {
2415
+ type: "script";
2416
+ script: string;
2417
+ } | {
2418
+ type: "none";
2419
+ };
2420
+ fullPath: string;
2421
+ dev: {
2422
+ type: "browser";
2423
+ pathname: string;
2424
+ } | {
2425
+ type: "script";
2426
+ initialRoute: string;
2427
+ portNumber: number;
2428
+ } | {
2429
+ type: "none";
2430
+ };
2431
+ dirName: string;
2432
+ relativePath: string;
2433
+ stackBlitzUrl: string | null;
2434
+ exerciseNumber: number;
2435
+ stepNumber: number;
2436
+ solutionName: string | null;
2437
+ instructionsCode?: string | undefined;
2438
+ epicVideoEmbeds?: string[] | undefined;
2439
+ }>, z.ZodObject<{
2440
+ /** a unique identifier for the app */
2441
+ name: z.ZodString;
2442
+ /** the title of the app used for display (comes from the package.json title prop) */
2443
+ title: z.ZodString;
2444
+ /** 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) */
2445
+ dirName: z.ZodString;
2446
+ fullPath: z.ZodString;
2447
+ relativePath: z.ZodString;
2448
+ instructionsCode: z.ZodOptional<z.ZodString>;
2449
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2450
+ test: z.ZodUnion<[z.ZodObject<{
2451
+ type: z.ZodLiteral<"browser">;
2452
+ pathname: z.ZodString;
2453
+ testFiles: z.ZodArray<z.ZodString, "many">;
2454
+ }, "strip", z.ZodTypeAny, {
2455
+ type: "browser";
2456
+ pathname: string;
2457
+ testFiles: string[];
2458
+ }, {
2459
+ type: "browser";
2460
+ pathname: string;
2461
+ testFiles: string[];
2462
+ }>, z.ZodObject<{
2463
+ type: z.ZodLiteral<"script">;
2464
+ script: z.ZodString;
2465
+ }, "strip", z.ZodTypeAny, {
2466
+ type: "script";
2467
+ script: string;
2468
+ }, {
2469
+ type: "script";
2470
+ script: string;
2471
+ }>, z.ZodObject<{
2472
+ type: z.ZodLiteral<"none">;
2473
+ }, "strip", z.ZodTypeAny, {
2474
+ type: "none";
2475
+ }, {
2476
+ type: "none";
2477
+ }>]>;
2478
+ dev: z.ZodUnion<[z.ZodObject<{
2479
+ type: z.ZodLiteral<"browser">;
2480
+ pathname: z.ZodString;
2481
+ }, "strip", z.ZodTypeAny, {
2482
+ type: "browser";
2483
+ pathname: string;
2484
+ }, {
2485
+ type: "browser";
2486
+ pathname: string;
2487
+ }>, z.ZodObject<{
2488
+ type: z.ZodLiteral<"script">;
2489
+ portNumber: z.ZodNumber;
2490
+ initialRoute: z.ZodString;
2491
+ }, "strip", z.ZodTypeAny, {
2492
+ type: "script";
2493
+ initialRoute: string;
2494
+ portNumber: number;
2495
+ }, {
2496
+ type: "script";
2497
+ initialRoute: string;
2498
+ portNumber: number;
2499
+ }>, z.ZodObject<{
2500
+ type: z.ZodLiteral<"none">;
2501
+ }, "strip", z.ZodTypeAny, {
2502
+ type: "none";
2503
+ }, {
2504
+ type: "none";
2505
+ }>]>;
2506
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
2507
+ } & {
2508
+ exerciseNumber: z.ZodNumber;
2509
+ stepNumber: z.ZodNumber;
2510
+ } & {
2511
+ type: z.ZodLiteral<"solution">;
2512
+ problemName: z.ZodNullable<z.ZodString>;
2513
+ }, "strip", z.ZodTypeAny, {
2514
+ title: string;
2515
+ type: "solution";
2516
+ name: string;
2517
+ test: {
2518
+ type: "browser";
2519
+ pathname: string;
2520
+ testFiles: string[];
2521
+ } | {
2522
+ type: "script";
2523
+ script: string;
2524
+ } | {
2525
+ type: "none";
2526
+ };
2527
+ fullPath: string;
2528
+ dev: {
2529
+ type: "browser";
2530
+ pathname: string;
2531
+ } | {
2532
+ type: "script";
2533
+ initialRoute: string;
2534
+ portNumber: number;
2535
+ } | {
2536
+ type: "none";
2537
+ };
2538
+ dirName: string;
2539
+ relativePath: string;
2540
+ stackBlitzUrl: string | null;
2541
+ exerciseNumber: number;
2542
+ stepNumber: number;
2543
+ problemName: string | null;
2544
+ instructionsCode?: string | undefined;
2545
+ epicVideoEmbeds?: string[] | undefined;
2546
+ }, {
2547
+ title: string;
2548
+ type: "solution";
2549
+ name: string;
2550
+ test: {
2551
+ type: "browser";
2552
+ pathname: string;
2553
+ testFiles: string[];
2554
+ } | {
2555
+ type: "script";
2556
+ script: string;
2557
+ } | {
2558
+ type: "none";
2559
+ };
2560
+ fullPath: string;
2561
+ dev: {
2562
+ type: "browser";
2563
+ pathname: string;
2564
+ } | {
2565
+ type: "script";
2566
+ initialRoute: string;
2567
+ portNumber: number;
2568
+ } | {
2569
+ type: "none";
2570
+ };
2571
+ dirName: string;
2572
+ relativePath: string;
2573
+ stackBlitzUrl: string | null;
2574
+ exerciseNumber: number;
2575
+ stepNumber: number;
2576
+ problemName: string | null;
2577
+ instructionsCode?: string | undefined;
2578
+ epicVideoEmbeds?: string[] | undefined;
2579
+ }>]>;
2580
+ declare const AppSchema: z.ZodUnion<[z.ZodUnion<[z.ZodObject<{
2581
+ /** a unique identifier for the app */
2582
+ name: z.ZodString;
2583
+ /** the title of the app used for display (comes from the package.json title prop) */
2584
+ title: z.ZodString;
2585
+ /** 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) */
2586
+ dirName: z.ZodString;
2587
+ fullPath: z.ZodString;
2588
+ relativePath: z.ZodString;
2589
+ instructionsCode: z.ZodOptional<z.ZodString>;
2590
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2591
+ test: z.ZodUnion<[z.ZodObject<{
2592
+ type: z.ZodLiteral<"browser">;
2593
+ pathname: z.ZodString;
2594
+ testFiles: z.ZodArray<z.ZodString, "many">;
2595
+ }, "strip", z.ZodTypeAny, {
2596
+ type: "browser";
2597
+ pathname: string;
2598
+ testFiles: string[];
2599
+ }, {
2600
+ type: "browser";
2601
+ pathname: string;
2602
+ testFiles: string[];
2603
+ }>, z.ZodObject<{
2604
+ type: z.ZodLiteral<"script">;
2605
+ script: z.ZodString;
2606
+ }, "strip", z.ZodTypeAny, {
2607
+ type: "script";
2608
+ script: string;
2609
+ }, {
2610
+ type: "script";
2611
+ script: string;
2612
+ }>, z.ZodObject<{
2613
+ type: z.ZodLiteral<"none">;
2614
+ }, "strip", z.ZodTypeAny, {
2615
+ type: "none";
2616
+ }, {
2617
+ type: "none";
2618
+ }>]>;
2619
+ dev: z.ZodUnion<[z.ZodObject<{
2620
+ type: z.ZodLiteral<"browser">;
2621
+ pathname: z.ZodString;
2622
+ }, "strip", z.ZodTypeAny, {
2623
+ type: "browser";
2624
+ pathname: string;
2625
+ }, {
2626
+ type: "browser";
2627
+ pathname: string;
2628
+ }>, z.ZodObject<{
2629
+ type: z.ZodLiteral<"script">;
2630
+ portNumber: z.ZodNumber;
2631
+ initialRoute: z.ZodString;
2632
+ }, "strip", z.ZodTypeAny, {
2633
+ type: "script";
2634
+ initialRoute: string;
2635
+ portNumber: number;
2636
+ }, {
2637
+ type: "script";
2638
+ initialRoute: string;
2639
+ portNumber: number;
2640
+ }>, z.ZodObject<{
2641
+ type: z.ZodLiteral<"none">;
2642
+ }, "strip", z.ZodTypeAny, {
2643
+ type: "none";
2644
+ }, {
2645
+ type: "none";
2646
+ }>]>;
2647
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
2648
+ } & {
2649
+ exerciseNumber: z.ZodNumber;
2650
+ stepNumber: z.ZodNumber;
2651
+ } & {
2652
+ type: z.ZodLiteral<"problem">;
2653
+ solutionName: z.ZodNullable<z.ZodString>;
2654
+ }, "strip", z.ZodTypeAny, {
2655
+ title: string;
2656
+ type: "problem";
2657
+ name: string;
2658
+ test: {
2659
+ type: "browser";
2660
+ pathname: string;
2661
+ testFiles: string[];
2662
+ } | {
2663
+ type: "script";
2664
+ script: string;
2665
+ } | {
2666
+ type: "none";
2667
+ };
2668
+ fullPath: string;
2669
+ dev: {
2670
+ type: "browser";
2671
+ pathname: string;
2672
+ } | {
2673
+ type: "script";
2674
+ initialRoute: string;
2675
+ portNumber: number;
2676
+ } | {
2677
+ type: "none";
2678
+ };
2679
+ dirName: string;
2680
+ relativePath: string;
2681
+ stackBlitzUrl: string | null;
2682
+ exerciseNumber: number;
2683
+ stepNumber: number;
2684
+ solutionName: string | null;
2685
+ instructionsCode?: string | undefined;
2686
+ epicVideoEmbeds?: string[] | undefined;
2687
+ }, {
2688
+ title: string;
2689
+ type: "problem";
2690
+ name: string;
2691
+ test: {
2692
+ type: "browser";
2693
+ pathname: string;
2694
+ testFiles: string[];
2695
+ } | {
2696
+ type: "script";
2697
+ script: string;
2698
+ } | {
2699
+ type: "none";
2700
+ };
2701
+ fullPath: string;
2702
+ dev: {
2703
+ type: "browser";
2704
+ pathname: string;
2705
+ } | {
2706
+ type: "script";
2707
+ initialRoute: string;
2708
+ portNumber: number;
2709
+ } | {
2710
+ type: "none";
2711
+ };
2712
+ dirName: string;
2713
+ relativePath: string;
2714
+ stackBlitzUrl: string | null;
2715
+ exerciseNumber: number;
2716
+ stepNumber: number;
2717
+ solutionName: string | null;
2718
+ instructionsCode?: string | undefined;
2719
+ epicVideoEmbeds?: string[] | undefined;
2720
+ }>, z.ZodObject<{
2721
+ /** a unique identifier for the app */
2722
+ name: z.ZodString;
2723
+ /** the title of the app used for display (comes from the package.json title prop) */
2724
+ title: z.ZodString;
2725
+ /** 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) */
2726
+ dirName: z.ZodString;
2727
+ fullPath: z.ZodString;
2728
+ relativePath: z.ZodString;
2729
+ instructionsCode: z.ZodOptional<z.ZodString>;
2730
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2731
+ test: z.ZodUnion<[z.ZodObject<{
2732
+ type: z.ZodLiteral<"browser">;
2733
+ pathname: z.ZodString;
2734
+ testFiles: z.ZodArray<z.ZodString, "many">;
2735
+ }, "strip", z.ZodTypeAny, {
2736
+ type: "browser";
2737
+ pathname: string;
2738
+ testFiles: string[];
2739
+ }, {
2740
+ type: "browser";
2741
+ pathname: string;
2742
+ testFiles: string[];
2743
+ }>, z.ZodObject<{
2744
+ type: z.ZodLiteral<"script">;
2745
+ script: z.ZodString;
2746
+ }, "strip", z.ZodTypeAny, {
2747
+ type: "script";
2748
+ script: string;
2749
+ }, {
2750
+ type: "script";
2751
+ script: string;
2752
+ }>, z.ZodObject<{
2753
+ type: z.ZodLiteral<"none">;
2754
+ }, "strip", z.ZodTypeAny, {
2755
+ type: "none";
2756
+ }, {
2757
+ type: "none";
2758
+ }>]>;
2759
+ dev: z.ZodUnion<[z.ZodObject<{
2760
+ type: z.ZodLiteral<"browser">;
2761
+ pathname: z.ZodString;
2762
+ }, "strip", z.ZodTypeAny, {
2763
+ type: "browser";
2764
+ pathname: string;
2765
+ }, {
2766
+ type: "browser";
2767
+ pathname: string;
2768
+ }>, z.ZodObject<{
2769
+ type: z.ZodLiteral<"script">;
2770
+ portNumber: z.ZodNumber;
2771
+ initialRoute: z.ZodString;
2772
+ }, "strip", z.ZodTypeAny, {
2773
+ type: "script";
2774
+ initialRoute: string;
2775
+ portNumber: number;
2776
+ }, {
2777
+ type: "script";
2778
+ initialRoute: string;
2779
+ portNumber: number;
2780
+ }>, z.ZodObject<{
2781
+ type: z.ZodLiteral<"none">;
2782
+ }, "strip", z.ZodTypeAny, {
2783
+ type: "none";
2784
+ }, {
2785
+ type: "none";
2786
+ }>]>;
2787
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
2788
+ } & {
2789
+ exerciseNumber: z.ZodNumber;
2790
+ stepNumber: z.ZodNumber;
2791
+ } & {
2792
+ type: z.ZodLiteral<"solution">;
2793
+ problemName: z.ZodNullable<z.ZodString>;
2794
+ }, "strip", z.ZodTypeAny, {
2795
+ title: string;
2796
+ type: "solution";
2797
+ name: string;
2798
+ test: {
2799
+ type: "browser";
2800
+ pathname: string;
2801
+ testFiles: string[];
2802
+ } | {
2803
+ type: "script";
2804
+ script: string;
2805
+ } | {
2806
+ type: "none";
2807
+ };
2808
+ fullPath: string;
2809
+ dev: {
2810
+ type: "browser";
2811
+ pathname: string;
2812
+ } | {
2813
+ type: "script";
2814
+ initialRoute: string;
2815
+ portNumber: number;
2816
+ } | {
2817
+ type: "none";
2818
+ };
2819
+ dirName: string;
2820
+ relativePath: string;
2821
+ stackBlitzUrl: string | null;
2822
+ exerciseNumber: number;
2823
+ stepNumber: number;
2824
+ problemName: string | null;
2825
+ instructionsCode?: string | undefined;
2826
+ epicVideoEmbeds?: string[] | undefined;
2827
+ }, {
2828
+ title: string;
2829
+ type: "solution";
2830
+ name: string;
2831
+ test: {
2832
+ type: "browser";
2833
+ pathname: string;
2834
+ testFiles: string[];
2835
+ } | {
2836
+ type: "script";
2837
+ script: string;
2838
+ } | {
2839
+ type: "none";
2840
+ };
2841
+ fullPath: string;
2842
+ dev: {
2843
+ type: "browser";
2844
+ pathname: string;
2845
+ } | {
2846
+ type: "script";
2847
+ initialRoute: string;
2848
+ portNumber: number;
2849
+ } | {
2850
+ type: "none";
2851
+ };
2852
+ dirName: string;
2853
+ relativePath: string;
2854
+ stackBlitzUrl: string | null;
2855
+ exerciseNumber: number;
2856
+ stepNumber: number;
2857
+ problemName: string | null;
2858
+ instructionsCode?: string | undefined;
2859
+ epicVideoEmbeds?: string[] | undefined;
2860
+ }>]>, z.ZodObject<{
2861
+ /** a unique identifier for the app */
2862
+ name: z.ZodString;
2863
+ /** the title of the app used for display (comes from the package.json title prop) */
2864
+ title: z.ZodString;
2865
+ /** 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) */
2866
+ dirName: z.ZodString;
2867
+ fullPath: z.ZodString;
2868
+ relativePath: z.ZodString;
2869
+ instructionsCode: z.ZodOptional<z.ZodString>;
2870
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2871
+ test: z.ZodUnion<[z.ZodObject<{
2872
+ type: z.ZodLiteral<"browser">;
2873
+ pathname: z.ZodString;
2874
+ testFiles: z.ZodArray<z.ZodString, "many">;
2875
+ }, "strip", z.ZodTypeAny, {
2876
+ type: "browser";
2877
+ pathname: string;
2878
+ testFiles: string[];
2879
+ }, {
2880
+ type: "browser";
2881
+ pathname: string;
2882
+ testFiles: string[];
2883
+ }>, z.ZodObject<{
2884
+ type: z.ZodLiteral<"script">;
2885
+ script: z.ZodString;
2886
+ }, "strip", z.ZodTypeAny, {
2887
+ type: "script";
2888
+ script: string;
2889
+ }, {
2890
+ type: "script";
2891
+ script: string;
2892
+ }>, z.ZodObject<{
2893
+ type: z.ZodLiteral<"none">;
2894
+ }, "strip", z.ZodTypeAny, {
2895
+ type: "none";
2896
+ }, {
2897
+ type: "none";
2898
+ }>]>;
2899
+ dev: z.ZodUnion<[z.ZodObject<{
2900
+ type: z.ZodLiteral<"browser">;
2901
+ pathname: z.ZodString;
2902
+ }, "strip", z.ZodTypeAny, {
2903
+ type: "browser";
2904
+ pathname: string;
2905
+ }, {
2906
+ type: "browser";
2907
+ pathname: string;
2908
+ }>, z.ZodObject<{
2909
+ type: z.ZodLiteral<"script">;
2910
+ portNumber: z.ZodNumber;
2911
+ initialRoute: z.ZodString;
2912
+ }, "strip", z.ZodTypeAny, {
2913
+ type: "script";
2914
+ initialRoute: string;
2915
+ portNumber: number;
2916
+ }, {
2917
+ type: "script";
2918
+ initialRoute: string;
2919
+ portNumber: number;
2920
+ }>, z.ZodObject<{
2921
+ type: z.ZodLiteral<"none">;
2922
+ }, "strip", z.ZodTypeAny, {
2923
+ type: "none";
2924
+ }, {
2925
+ type: "none";
2926
+ }>]>;
2927
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
2928
+ } & {
2929
+ type: z.ZodLiteral<"playground">;
2930
+ appName: z.ZodString;
2931
+ isUpToDate: z.ZodBoolean;
2932
+ }, "strip", z.ZodTypeAny, {
2933
+ title: string;
2934
+ type: "playground";
2935
+ name: string;
2936
+ test: {
2937
+ type: "browser";
2938
+ pathname: string;
2939
+ testFiles: string[];
2940
+ } | {
2941
+ type: "script";
2942
+ script: string;
2943
+ } | {
2944
+ type: "none";
2945
+ };
2946
+ fullPath: string;
2947
+ dev: {
2948
+ type: "browser";
2949
+ pathname: string;
2950
+ } | {
2951
+ type: "script";
2952
+ initialRoute: string;
2953
+ portNumber: number;
2954
+ } | {
2955
+ type: "none";
2956
+ };
2957
+ dirName: string;
2958
+ relativePath: string;
2959
+ stackBlitzUrl: string | null;
2960
+ appName: string;
2961
+ isUpToDate: boolean;
2962
+ instructionsCode?: string | undefined;
2963
+ epicVideoEmbeds?: string[] | undefined;
2964
+ }, {
2965
+ title: string;
2966
+ type: "playground";
2967
+ name: string;
2968
+ test: {
2969
+ type: "browser";
2970
+ pathname: string;
2971
+ testFiles: string[];
2972
+ } | {
2973
+ type: "script";
2974
+ script: string;
2975
+ } | {
2976
+ type: "none";
2977
+ };
2978
+ fullPath: string;
2979
+ dev: {
2980
+ type: "browser";
2981
+ pathname: string;
2982
+ } | {
2983
+ type: "script";
2984
+ initialRoute: string;
2985
+ portNumber: number;
2986
+ } | {
2987
+ type: "none";
2988
+ };
2989
+ dirName: string;
2990
+ relativePath: string;
2991
+ stackBlitzUrl: string | null;
2992
+ appName: string;
2993
+ isUpToDate: boolean;
2994
+ instructionsCode?: string | undefined;
2995
+ epicVideoEmbeds?: string[] | undefined;
2996
+ }>, z.ZodObject<{
2997
+ /** a unique identifier for the app */
2998
+ name: z.ZodString;
2999
+ /** the title of the app used for display (comes from the package.json title prop) */
3000
+ title: z.ZodString;
3001
+ /** 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) */
3002
+ dirName: z.ZodString;
3003
+ fullPath: z.ZodString;
3004
+ relativePath: z.ZodString;
3005
+ instructionsCode: z.ZodOptional<z.ZodString>;
3006
+ epicVideoEmbeds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3007
+ test: z.ZodUnion<[z.ZodObject<{
3008
+ type: z.ZodLiteral<"browser">;
3009
+ pathname: z.ZodString;
3010
+ testFiles: z.ZodArray<z.ZodString, "many">;
3011
+ }, "strip", z.ZodTypeAny, {
3012
+ type: "browser";
3013
+ pathname: string;
3014
+ testFiles: string[];
3015
+ }, {
3016
+ type: "browser";
3017
+ pathname: string;
3018
+ testFiles: string[];
3019
+ }>, z.ZodObject<{
3020
+ type: z.ZodLiteral<"script">;
3021
+ script: z.ZodString;
3022
+ }, "strip", z.ZodTypeAny, {
3023
+ type: "script";
3024
+ script: string;
3025
+ }, {
3026
+ type: "script";
3027
+ script: string;
3028
+ }>, z.ZodObject<{
3029
+ type: z.ZodLiteral<"none">;
3030
+ }, "strip", z.ZodTypeAny, {
3031
+ type: "none";
3032
+ }, {
3033
+ type: "none";
3034
+ }>]>;
3035
+ dev: z.ZodUnion<[z.ZodObject<{
3036
+ type: z.ZodLiteral<"browser">;
3037
+ pathname: z.ZodString;
3038
+ }, "strip", z.ZodTypeAny, {
3039
+ type: "browser";
3040
+ pathname: string;
3041
+ }, {
3042
+ type: "browser";
3043
+ pathname: string;
3044
+ }>, z.ZodObject<{
3045
+ type: z.ZodLiteral<"script">;
3046
+ portNumber: z.ZodNumber;
3047
+ initialRoute: z.ZodString;
3048
+ }, "strip", z.ZodTypeAny, {
3049
+ type: "script";
3050
+ initialRoute: string;
3051
+ portNumber: number;
3052
+ }, {
3053
+ type: "script";
3054
+ initialRoute: string;
3055
+ portNumber: number;
3056
+ }>, z.ZodObject<{
3057
+ type: z.ZodLiteral<"none">;
3058
+ }, "strip", z.ZodTypeAny, {
3059
+ type: "none";
3060
+ }, {
3061
+ type: "none";
3062
+ }>]>;
3063
+ stackBlitzUrl: z.ZodNullable<z.ZodString>;
3064
+ } & {
3065
+ type: z.ZodLiteral<"example">;
3066
+ }, "strip", z.ZodTypeAny, {
3067
+ title: string;
3068
+ type: "example";
3069
+ name: string;
3070
+ test: {
3071
+ type: "browser";
3072
+ pathname: string;
3073
+ testFiles: string[];
3074
+ } | {
3075
+ type: "script";
3076
+ script: string;
3077
+ } | {
3078
+ type: "none";
3079
+ };
3080
+ fullPath: string;
3081
+ dev: {
3082
+ type: "browser";
3083
+ pathname: string;
3084
+ } | {
3085
+ type: "script";
3086
+ initialRoute: string;
3087
+ portNumber: number;
3088
+ } | {
3089
+ type: "none";
3090
+ };
3091
+ dirName: string;
3092
+ relativePath: string;
3093
+ stackBlitzUrl: string | null;
3094
+ instructionsCode?: string | undefined;
3095
+ epicVideoEmbeds?: string[] | undefined;
3096
+ }, {
3097
+ title: string;
3098
+ type: "example";
3099
+ name: string;
3100
+ test: {
3101
+ type: "browser";
3102
+ pathname: string;
3103
+ testFiles: string[];
3104
+ } | {
3105
+ type: "script";
3106
+ script: string;
3107
+ } | {
3108
+ type: "none";
3109
+ };
3110
+ fullPath: string;
3111
+ dev: {
3112
+ type: "browser";
3113
+ pathname: string;
3114
+ } | {
3115
+ type: "script";
3116
+ initialRoute: string;
3117
+ portNumber: number;
3118
+ } | {
3119
+ type: "none";
3120
+ };
3121
+ dirName: string;
3122
+ relativePath: string;
3123
+ stackBlitzUrl: string | null;
3124
+ instructionsCode?: string | undefined;
3125
+ epicVideoEmbeds?: string[] | undefined;
3126
+ }>]>;
3127
+ export type BaseExerciseStepApp = z.infer<typeof BaseExerciseStepAppSchema>;
3128
+ export type ProblemApp = z.infer<typeof ProblemAppSchema>;
3129
+ export type SolutionApp = z.infer<typeof SolutionAppSchema>;
3130
+ export type ExampleApp = z.infer<typeof ExampleAppSchema>;
3131
+ export type PlaygroundApp = z.infer<typeof PlaygroundAppSchema>;
3132
+ export type ExerciseStepApp = z.infer<typeof ExerciseStepAppSchema>;
3133
+ export type App = z.infer<typeof AppSchema>;
3134
+ export type AppType = App['type'];
3135
+ type Exercise = z.infer<typeof ExerciseSchema>;
3136
+ export declare function isApp(app: any): app is App;
3137
+ export declare function isProblemApp(app: any): app is ProblemApp;
3138
+ export declare function isSolutionApp(app: any): app is SolutionApp;
3139
+ export declare function isFirstStepProblemApp(app: App): app is ProblemApp & {
3140
+ stepNumber: 1;
3141
+ };
3142
+ export declare function isFirstStepSolutionApp(app: App): app is SolutionApp & {
3143
+ stepNumber: 1;
3144
+ };
3145
+ export declare function isPlaygroundApp(app: any): app is PlaygroundApp;
3146
+ export declare function isExampleApp(app: any): app is ExampleApp;
3147
+ export declare function isExerciseStepApp(app: any): app is ExerciseStepApp;
3148
+ export declare const modifiedTimes: Map<string, number>;
3149
+ export declare function init(workshopRoot?: string): Promise<void>;
3150
+ export declare function setModifiedTimesForAppDirs(...filePaths: Array<string>): void;
3151
+ export declare function getForceFreshForDir(cacheEntry: CacheEntry | null | undefined, ...dirs: Array<string | undefined | null>): true | undefined;
3152
+ export declare function getExercises({ timings, request, }?: CachifiedOptions): Promise<Array<Exercise>>;
3153
+ export declare function getApps({ timings, request, forceFresh, }?: CachifiedOptions & {
3154
+ forceFresh?: boolean;
3155
+ }): Promise<Array<App>>;
3156
+ /**
3157
+ * Handles both full paths and app names
3158
+ *
3159
+ * @example
3160
+ * extractNumbersAndTypeFromAppNameOrPath('02.01.problem') // { exerciseNumber: '02', stepNumber: '01', type: 'problem' }
3161
+ * extractNumbersAndTypeFromAppNameOrPath('/path/to/exercises/02.desc/01.problem.desc') // { exerciseNumber: '02', stepNumber: '01', type: 'problem' }
3162
+ */
3163
+ export declare function extractNumbersAndTypeFromAppNameOrPath(fullPathOrAppName: string): {
3164
+ type: "solution" | "problem";
3165
+ exerciseNumber: string;
3166
+ stepNumber: string;
3167
+ } | null;
3168
+ export declare function getFullPathFromAppName(appName: string): Promise<string>;
3169
+ export declare function findSolutionDir({ fullPath, }: {
3170
+ fullPath: string;
3171
+ }): Promise<string | null>;
3172
+ export declare function findProblemDir({ fullPath, }: {
3173
+ fullPath: string;
3174
+ }): Promise<string | null>;
3175
+ export declare function getPlaygroundApp({ timings, request, }?: CachifiedOptions): Promise<PlaygroundApp | null>;
3176
+ export declare function getExercise(exerciseNumber: number | string, { request, timings }?: CachifiedOptions): Promise<{
3177
+ title: string;
3178
+ fullPath: string;
3179
+ dirName: string;
3180
+ exerciseNumber: number;
3181
+ steps: ({
3182
+ stepNumber: number;
3183
+ solution: {
3184
+ title: string;
3185
+ type: "solution";
3186
+ name: string;
3187
+ test: {
3188
+ type: "browser";
3189
+ pathname: string;
3190
+ testFiles: string[];
3191
+ } | {
3192
+ type: "script";
3193
+ script: string;
3194
+ } | {
3195
+ type: "none";
3196
+ };
3197
+ fullPath: string;
3198
+ dev: {
3199
+ type: "browser";
3200
+ pathname: string;
3201
+ } | {
3202
+ type: "script";
3203
+ initialRoute: string;
3204
+ portNumber: number;
3205
+ } | {
3206
+ type: "none";
3207
+ };
3208
+ dirName: string;
3209
+ relativePath: string;
3210
+ stackBlitzUrl: string | null;
3211
+ exerciseNumber: number;
3212
+ stepNumber: number;
3213
+ problemName: string | null;
3214
+ instructionsCode?: string | undefined;
3215
+ epicVideoEmbeds?: string[] | undefined;
3216
+ };
3217
+ problem: {
3218
+ title: string;
3219
+ type: "problem";
3220
+ name: string;
3221
+ test: {
3222
+ type: "browser";
3223
+ pathname: string;
3224
+ testFiles: string[];
3225
+ } | {
3226
+ type: "script";
3227
+ script: string;
3228
+ } | {
3229
+ type: "none";
3230
+ };
3231
+ fullPath: string;
3232
+ dev: {
3233
+ type: "browser";
3234
+ pathname: string;
3235
+ } | {
3236
+ type: "script";
3237
+ initialRoute: string;
3238
+ portNumber: number;
3239
+ } | {
3240
+ type: "none";
3241
+ };
3242
+ dirName: string;
3243
+ relativePath: string;
3244
+ stackBlitzUrl: string | null;
3245
+ exerciseNumber: number;
3246
+ stepNumber: number;
3247
+ solutionName: string | null;
3248
+ instructionsCode?: string | undefined;
3249
+ epicVideoEmbeds?: string[] | undefined;
3250
+ };
3251
+ } | {
3252
+ stepNumber: number;
3253
+ problem: {
3254
+ title: string;
3255
+ type: "problem";
3256
+ name: string;
3257
+ test: {
3258
+ type: "browser";
3259
+ pathname: string;
3260
+ testFiles: string[];
3261
+ } | {
3262
+ type: "script";
3263
+ script: string;
3264
+ } | {
3265
+ type: "none";
3266
+ };
3267
+ fullPath: string;
3268
+ dev: {
3269
+ type: "browser";
3270
+ pathname: string;
3271
+ } | {
3272
+ type: "script";
3273
+ initialRoute: string;
3274
+ portNumber: number;
3275
+ } | {
3276
+ type: "none";
3277
+ };
3278
+ dirName: string;
3279
+ relativePath: string;
3280
+ stackBlitzUrl: string | null;
3281
+ exerciseNumber: number;
3282
+ stepNumber: number;
3283
+ solutionName: string | null;
3284
+ instructionsCode?: string | undefined;
3285
+ epicVideoEmbeds?: string[] | undefined;
3286
+ };
3287
+ solution?: undefined;
3288
+ } | {
3289
+ stepNumber: number;
3290
+ solution: {
3291
+ title: string;
3292
+ type: "solution";
3293
+ name: string;
3294
+ test: {
3295
+ type: "browser";
3296
+ pathname: string;
3297
+ testFiles: string[];
3298
+ } | {
3299
+ type: "script";
3300
+ script: string;
3301
+ } | {
3302
+ type: "none";
3303
+ };
3304
+ fullPath: string;
3305
+ dev: {
3306
+ type: "browser";
3307
+ pathname: string;
3308
+ } | {
3309
+ type: "script";
3310
+ initialRoute: string;
3311
+ portNumber: number;
3312
+ } | {
3313
+ type: "none";
3314
+ };
3315
+ dirName: string;
3316
+ relativePath: string;
3317
+ stackBlitzUrl: string | null;
3318
+ exerciseNumber: number;
3319
+ stepNumber: number;
3320
+ problemName: string | null;
3321
+ instructionsCode?: string | undefined;
3322
+ epicVideoEmbeds?: string[] | undefined;
3323
+ };
3324
+ problem?: undefined;
3325
+ })[];
3326
+ problems: {
3327
+ title: string;
3328
+ type: "problem";
3329
+ name: string;
3330
+ test: {
3331
+ type: "browser";
3332
+ pathname: string;
3333
+ testFiles: string[];
3334
+ } | {
3335
+ type: "script";
3336
+ script: string;
3337
+ } | {
3338
+ type: "none";
3339
+ };
3340
+ fullPath: string;
3341
+ dev: {
3342
+ type: "browser";
3343
+ pathname: string;
3344
+ } | {
3345
+ type: "script";
3346
+ initialRoute: string;
3347
+ portNumber: number;
3348
+ } | {
3349
+ type: "none";
3350
+ };
3351
+ dirName: string;
3352
+ relativePath: string;
3353
+ stackBlitzUrl: string | null;
3354
+ exerciseNumber: number;
3355
+ stepNumber: number;
3356
+ solutionName: string | null;
3357
+ instructionsCode?: string | undefined;
3358
+ epicVideoEmbeds?: string[] | undefined;
3359
+ }[];
3360
+ solutions: {
3361
+ title: string;
3362
+ type: "solution";
3363
+ name: string;
3364
+ test: {
3365
+ type: "browser";
3366
+ pathname: string;
3367
+ testFiles: string[];
3368
+ } | {
3369
+ type: "script";
3370
+ script: string;
3371
+ } | {
3372
+ type: "none";
3373
+ };
3374
+ fullPath: string;
3375
+ dev: {
3376
+ type: "browser";
3377
+ pathname: string;
3378
+ } | {
3379
+ type: "script";
3380
+ initialRoute: string;
3381
+ portNumber: number;
3382
+ } | {
3383
+ type: "none";
3384
+ };
3385
+ dirName: string;
3386
+ relativePath: string;
3387
+ stackBlitzUrl: string | null;
3388
+ exerciseNumber: number;
3389
+ stepNumber: number;
3390
+ problemName: string | null;
3391
+ instructionsCode?: string | undefined;
3392
+ epicVideoEmbeds?: string[] | undefined;
3393
+ }[];
3394
+ instructionsCode?: string | undefined;
3395
+ finishedCode?: string | undefined;
3396
+ instructionsEpicVideoEmbeds?: string[] | undefined;
3397
+ finishedEpicVideoEmbeds?: string[] | undefined;
3398
+ } | undefined>;
3399
+ export declare function requireExercise(exerciseNumber: number | string, { request, timings }?: CachifiedOptions): Promise<{
3400
+ title: string;
3401
+ fullPath: string;
3402
+ dirName: string;
3403
+ exerciseNumber: number;
3404
+ steps: ({
3405
+ stepNumber: number;
3406
+ solution: {
3407
+ title: string;
3408
+ type: "solution";
3409
+ name: string;
3410
+ test: {
3411
+ type: "browser";
3412
+ pathname: string;
3413
+ testFiles: string[];
3414
+ } | {
3415
+ type: "script";
3416
+ script: string;
3417
+ } | {
3418
+ type: "none";
3419
+ };
3420
+ fullPath: string;
3421
+ dev: {
3422
+ type: "browser";
3423
+ pathname: string;
3424
+ } | {
3425
+ type: "script";
3426
+ initialRoute: string;
3427
+ portNumber: number;
3428
+ } | {
3429
+ type: "none";
3430
+ };
3431
+ dirName: string;
3432
+ relativePath: string;
3433
+ stackBlitzUrl: string | null;
3434
+ exerciseNumber: number;
3435
+ stepNumber: number;
3436
+ problemName: string | null;
3437
+ instructionsCode?: string | undefined;
3438
+ epicVideoEmbeds?: string[] | undefined;
3439
+ };
3440
+ problem: {
3441
+ title: string;
3442
+ type: "problem";
3443
+ name: string;
3444
+ test: {
3445
+ type: "browser";
3446
+ pathname: string;
3447
+ testFiles: string[];
3448
+ } | {
3449
+ type: "script";
3450
+ script: string;
3451
+ } | {
3452
+ type: "none";
3453
+ };
3454
+ fullPath: string;
3455
+ dev: {
3456
+ type: "browser";
3457
+ pathname: string;
3458
+ } | {
3459
+ type: "script";
3460
+ initialRoute: string;
3461
+ portNumber: number;
3462
+ } | {
3463
+ type: "none";
3464
+ };
3465
+ dirName: string;
3466
+ relativePath: string;
3467
+ stackBlitzUrl: string | null;
3468
+ exerciseNumber: number;
3469
+ stepNumber: number;
3470
+ solutionName: string | null;
3471
+ instructionsCode?: string | undefined;
3472
+ epicVideoEmbeds?: string[] | undefined;
3473
+ };
3474
+ } | {
3475
+ stepNumber: number;
3476
+ problem: {
3477
+ title: string;
3478
+ type: "problem";
3479
+ name: string;
3480
+ test: {
3481
+ type: "browser";
3482
+ pathname: string;
3483
+ testFiles: string[];
3484
+ } | {
3485
+ type: "script";
3486
+ script: string;
3487
+ } | {
3488
+ type: "none";
3489
+ };
3490
+ fullPath: string;
3491
+ dev: {
3492
+ type: "browser";
3493
+ pathname: string;
3494
+ } | {
3495
+ type: "script";
3496
+ initialRoute: string;
3497
+ portNumber: number;
3498
+ } | {
3499
+ type: "none";
3500
+ };
3501
+ dirName: string;
3502
+ relativePath: string;
3503
+ stackBlitzUrl: string | null;
3504
+ exerciseNumber: number;
3505
+ stepNumber: number;
3506
+ solutionName: string | null;
3507
+ instructionsCode?: string | undefined;
3508
+ epicVideoEmbeds?: string[] | undefined;
3509
+ };
3510
+ solution?: undefined;
3511
+ } | {
3512
+ stepNumber: number;
3513
+ solution: {
3514
+ title: string;
3515
+ type: "solution";
3516
+ name: string;
3517
+ test: {
3518
+ type: "browser";
3519
+ pathname: string;
3520
+ testFiles: string[];
3521
+ } | {
3522
+ type: "script";
3523
+ script: string;
3524
+ } | {
3525
+ type: "none";
3526
+ };
3527
+ fullPath: string;
3528
+ dev: {
3529
+ type: "browser";
3530
+ pathname: string;
3531
+ } | {
3532
+ type: "script";
3533
+ initialRoute: string;
3534
+ portNumber: number;
3535
+ } | {
3536
+ type: "none";
3537
+ };
3538
+ dirName: string;
3539
+ relativePath: string;
3540
+ stackBlitzUrl: string | null;
3541
+ exerciseNumber: number;
3542
+ stepNumber: number;
3543
+ problemName: string | null;
3544
+ instructionsCode?: string | undefined;
3545
+ epicVideoEmbeds?: string[] | undefined;
3546
+ };
3547
+ problem?: undefined;
3548
+ })[];
3549
+ problems: {
3550
+ title: string;
3551
+ type: "problem";
3552
+ name: string;
3553
+ test: {
3554
+ type: "browser";
3555
+ pathname: string;
3556
+ testFiles: string[];
3557
+ } | {
3558
+ type: "script";
3559
+ script: string;
3560
+ } | {
3561
+ type: "none";
3562
+ };
3563
+ fullPath: string;
3564
+ dev: {
3565
+ type: "browser";
3566
+ pathname: string;
3567
+ } | {
3568
+ type: "script";
3569
+ initialRoute: string;
3570
+ portNumber: number;
3571
+ } | {
3572
+ type: "none";
3573
+ };
3574
+ dirName: string;
3575
+ relativePath: string;
3576
+ stackBlitzUrl: string | null;
3577
+ exerciseNumber: number;
3578
+ stepNumber: number;
3579
+ solutionName: string | null;
3580
+ instructionsCode?: string | undefined;
3581
+ epicVideoEmbeds?: string[] | undefined;
3582
+ }[];
3583
+ solutions: {
3584
+ title: string;
3585
+ type: "solution";
3586
+ name: string;
3587
+ test: {
3588
+ type: "browser";
3589
+ pathname: string;
3590
+ testFiles: string[];
3591
+ } | {
3592
+ type: "script";
3593
+ script: string;
3594
+ } | {
3595
+ type: "none";
3596
+ };
3597
+ fullPath: string;
3598
+ dev: {
3599
+ type: "browser";
3600
+ pathname: string;
3601
+ } | {
3602
+ type: "script";
3603
+ initialRoute: string;
3604
+ portNumber: number;
3605
+ } | {
3606
+ type: "none";
3607
+ };
3608
+ dirName: string;
3609
+ relativePath: string;
3610
+ stackBlitzUrl: string | null;
3611
+ exerciseNumber: number;
3612
+ stepNumber: number;
3613
+ problemName: string | null;
3614
+ instructionsCode?: string | undefined;
3615
+ epicVideoEmbeds?: string[] | undefined;
3616
+ }[];
3617
+ instructionsCode?: string | undefined;
3618
+ finishedCode?: string | undefined;
3619
+ instructionsEpicVideoEmbeds?: string[] | undefined;
3620
+ finishedEpicVideoEmbeds?: string[] | undefined;
3621
+ }>;
3622
+ export declare function requireExerciseApp(params: Parameters<typeof getExerciseApp>[0], { request, timings }?: CachifiedOptions): Promise<{
3623
+ title: string;
3624
+ type: "solution";
3625
+ name: string;
3626
+ test: {
3627
+ type: "browser";
3628
+ pathname: string;
3629
+ testFiles: string[];
3630
+ } | {
3631
+ type: "script";
3632
+ script: string;
3633
+ } | {
3634
+ type: "none";
3635
+ };
3636
+ fullPath: string;
3637
+ dev: {
3638
+ type: "browser";
3639
+ pathname: string;
3640
+ } | {
3641
+ type: "script";
3642
+ initialRoute: string;
3643
+ portNumber: number;
3644
+ } | {
3645
+ type: "none";
3646
+ };
3647
+ dirName: string;
3648
+ relativePath: string;
3649
+ stackBlitzUrl: string | null;
3650
+ exerciseNumber: number;
3651
+ stepNumber: number;
3652
+ problemName: string | null;
3653
+ instructionsCode?: string | undefined;
3654
+ epicVideoEmbeds?: string[] | undefined;
3655
+ } | {
3656
+ title: string;
3657
+ type: "problem";
3658
+ name: string;
3659
+ test: {
3660
+ type: "browser";
3661
+ pathname: string;
3662
+ testFiles: string[];
3663
+ } | {
3664
+ type: "script";
3665
+ script: string;
3666
+ } | {
3667
+ type: "none";
3668
+ };
3669
+ fullPath: string;
3670
+ dev: {
3671
+ type: "browser";
3672
+ pathname: string;
3673
+ } | {
3674
+ type: "script";
3675
+ initialRoute: string;
3676
+ portNumber: number;
3677
+ } | {
3678
+ type: "none";
3679
+ };
3680
+ dirName: string;
3681
+ relativePath: string;
3682
+ stackBlitzUrl: string | null;
3683
+ exerciseNumber: number;
3684
+ stepNumber: number;
3685
+ solutionName: string | null;
3686
+ instructionsCode?: string | undefined;
3687
+ epicVideoEmbeds?: string[] | undefined;
3688
+ }>;
3689
+ export declare function getExerciseApp(params: {
3690
+ type?: string;
3691
+ exerciseNumber?: string;
3692
+ stepNumber?: string;
3693
+ }, { request, timings }?: CachifiedOptions): Promise<{
3694
+ title: string;
3695
+ type: "solution";
3696
+ name: string;
3697
+ test: {
3698
+ type: "browser";
3699
+ pathname: string;
3700
+ testFiles: string[];
3701
+ } | {
3702
+ type: "script";
3703
+ script: string;
3704
+ } | {
3705
+ type: "none";
3706
+ };
3707
+ fullPath: string;
3708
+ dev: {
3709
+ type: "browser";
3710
+ pathname: string;
3711
+ } | {
3712
+ type: "script";
3713
+ initialRoute: string;
3714
+ portNumber: number;
3715
+ } | {
3716
+ type: "none";
3717
+ };
3718
+ dirName: string;
3719
+ relativePath: string;
3720
+ stackBlitzUrl: string | null;
3721
+ exerciseNumber: number;
3722
+ stepNumber: number;
3723
+ problemName: string | null;
3724
+ instructionsCode?: string | undefined;
3725
+ epicVideoEmbeds?: string[] | undefined;
3726
+ } | {
3727
+ title: string;
3728
+ type: "problem";
3729
+ name: string;
3730
+ test: {
3731
+ type: "browser";
3732
+ pathname: string;
3733
+ testFiles: string[];
3734
+ } | {
3735
+ type: "script";
3736
+ script: string;
3737
+ } | {
3738
+ type: "none";
3739
+ };
3740
+ fullPath: string;
3741
+ dev: {
3742
+ type: "browser";
3743
+ pathname: string;
3744
+ } | {
3745
+ type: "script";
3746
+ initialRoute: string;
3747
+ portNumber: number;
3748
+ } | {
3749
+ type: "none";
3750
+ };
3751
+ dirName: string;
3752
+ relativePath: string;
3753
+ stackBlitzUrl: string | null;
3754
+ exerciseNumber: number;
3755
+ stepNumber: number;
3756
+ solutionName: string | null;
3757
+ instructionsCode?: string | undefined;
3758
+ epicVideoEmbeds?: string[] | undefined;
3759
+ } | null>;
3760
+ export declare function getAppByName(name: string, { request, timings }?: CachifiedOptions): Promise<{
3761
+ title: string;
3762
+ type: "solution";
3763
+ name: string;
3764
+ test: {
3765
+ type: "browser";
3766
+ pathname: string;
3767
+ testFiles: string[];
3768
+ } | {
3769
+ type: "script";
3770
+ script: string;
3771
+ } | {
3772
+ type: "none";
3773
+ };
3774
+ fullPath: string;
3775
+ dev: {
3776
+ type: "browser";
3777
+ pathname: string;
3778
+ } | {
3779
+ type: "script";
3780
+ initialRoute: string;
3781
+ portNumber: number;
3782
+ } | {
3783
+ type: "none";
3784
+ };
3785
+ dirName: string;
3786
+ relativePath: string;
3787
+ stackBlitzUrl: string | null;
3788
+ exerciseNumber: number;
3789
+ stepNumber: number;
3790
+ problemName: string | null;
3791
+ instructionsCode?: string | undefined;
3792
+ epicVideoEmbeds?: string[] | undefined;
3793
+ } | {
3794
+ title: string;
3795
+ type: "problem";
3796
+ name: string;
3797
+ test: {
3798
+ type: "browser";
3799
+ pathname: string;
3800
+ testFiles: string[];
3801
+ } | {
3802
+ type: "script";
3803
+ script: string;
3804
+ } | {
3805
+ type: "none";
3806
+ };
3807
+ fullPath: string;
3808
+ dev: {
3809
+ type: "browser";
3810
+ pathname: string;
3811
+ } | {
3812
+ type: "script";
3813
+ initialRoute: string;
3814
+ portNumber: number;
3815
+ } | {
3816
+ type: "none";
3817
+ };
3818
+ dirName: string;
3819
+ relativePath: string;
3820
+ stackBlitzUrl: string | null;
3821
+ exerciseNumber: number;
3822
+ stepNumber: number;
3823
+ solutionName: string | null;
3824
+ instructionsCode?: string | undefined;
3825
+ epicVideoEmbeds?: string[] | undefined;
3826
+ } | {
3827
+ title: string;
3828
+ type: "example";
3829
+ name: string;
3830
+ test: {
3831
+ type: "browser";
3832
+ pathname: string;
3833
+ testFiles: string[];
3834
+ } | {
3835
+ type: "script";
3836
+ script: string;
3837
+ } | {
3838
+ type: "none";
3839
+ };
3840
+ fullPath: string;
3841
+ dev: {
3842
+ type: "browser";
3843
+ pathname: string;
3844
+ } | {
3845
+ type: "script";
3846
+ initialRoute: string;
3847
+ portNumber: number;
3848
+ } | {
3849
+ type: "none";
3850
+ };
3851
+ dirName: string;
3852
+ relativePath: string;
3853
+ stackBlitzUrl: string | null;
3854
+ instructionsCode?: string | undefined;
3855
+ epicVideoEmbeds?: string[] | undefined;
3856
+ } | {
3857
+ title: string;
3858
+ type: "playground";
3859
+ name: string;
3860
+ test: {
3861
+ type: "browser";
3862
+ pathname: string;
3863
+ testFiles: string[];
3864
+ } | {
3865
+ type: "script";
3866
+ script: string;
3867
+ } | {
3868
+ type: "none";
3869
+ };
3870
+ fullPath: string;
3871
+ dev: {
3872
+ type: "browser";
3873
+ pathname: string;
3874
+ } | {
3875
+ type: "script";
3876
+ initialRoute: string;
3877
+ portNumber: number;
3878
+ } | {
3879
+ type: "none";
3880
+ };
3881
+ dirName: string;
3882
+ relativePath: string;
3883
+ stackBlitzUrl: string | null;
3884
+ appName: string;
3885
+ isUpToDate: boolean;
3886
+ instructionsCode?: string | undefined;
3887
+ epicVideoEmbeds?: string[] | undefined;
3888
+ } | undefined>;
3889
+ export declare function getNextExerciseApp(app: ExerciseStepApp, { request, timings }?: CachifiedOptions): Promise<{
3890
+ title: string;
3891
+ type: "solution";
3892
+ name: string;
3893
+ test: {
3894
+ type: "browser";
3895
+ pathname: string;
3896
+ testFiles: string[];
3897
+ } | {
3898
+ type: "script";
3899
+ script: string;
3900
+ } | {
3901
+ type: "none";
3902
+ };
3903
+ fullPath: string;
3904
+ dev: {
3905
+ type: "browser";
3906
+ pathname: string;
3907
+ } | {
3908
+ type: "script";
3909
+ initialRoute: string;
3910
+ portNumber: number;
3911
+ } | {
3912
+ type: "none";
3913
+ };
3914
+ dirName: string;
3915
+ relativePath: string;
3916
+ stackBlitzUrl: string | null;
3917
+ exerciseNumber: number;
3918
+ stepNumber: number;
3919
+ problemName: string | null;
3920
+ instructionsCode?: string | undefined;
3921
+ epicVideoEmbeds?: string[] | undefined;
3922
+ } | {
3923
+ title: string;
3924
+ type: "problem";
3925
+ name: string;
3926
+ test: {
3927
+ type: "browser";
3928
+ pathname: string;
3929
+ testFiles: string[];
3930
+ } | {
3931
+ type: "script";
3932
+ script: string;
3933
+ } | {
3934
+ type: "none";
3935
+ };
3936
+ fullPath: string;
3937
+ dev: {
3938
+ type: "browser";
3939
+ pathname: string;
3940
+ } | {
3941
+ type: "script";
3942
+ initialRoute: string;
3943
+ portNumber: number;
3944
+ } | {
3945
+ type: "none";
3946
+ };
3947
+ dirName: string;
3948
+ relativePath: string;
3949
+ stackBlitzUrl: string | null;
3950
+ exerciseNumber: number;
3951
+ stepNumber: number;
3952
+ solutionName: string | null;
3953
+ instructionsCode?: string | undefined;
3954
+ epicVideoEmbeds?: string[] | undefined;
3955
+ } | null>;
3956
+ export declare function getPrevExerciseApp(app: ExerciseStepApp, { request, timings }?: CachifiedOptions): Promise<{
3957
+ title: string;
3958
+ type: "solution";
3959
+ name: string;
3960
+ test: {
3961
+ type: "browser";
3962
+ pathname: string;
3963
+ testFiles: string[];
3964
+ } | {
3965
+ type: "script";
3966
+ script: string;
3967
+ } | {
3968
+ type: "none";
3969
+ };
3970
+ fullPath: string;
3971
+ dev: {
3972
+ type: "browser";
3973
+ pathname: string;
3974
+ } | {
3975
+ type: "script";
3976
+ initialRoute: string;
3977
+ portNumber: number;
3978
+ } | {
3979
+ type: "none";
3980
+ };
3981
+ dirName: string;
3982
+ relativePath: string;
3983
+ stackBlitzUrl: string | null;
3984
+ exerciseNumber: number;
3985
+ stepNumber: number;
3986
+ problemName: string | null;
3987
+ instructionsCode?: string | undefined;
3988
+ epicVideoEmbeds?: string[] | undefined;
3989
+ } | {
3990
+ title: string;
3991
+ type: "problem";
3992
+ name: string;
3993
+ test: {
3994
+ type: "browser";
3995
+ pathname: string;
3996
+ testFiles: string[];
3997
+ } | {
3998
+ type: "script";
3999
+ script: string;
4000
+ } | {
4001
+ type: "none";
4002
+ };
4003
+ fullPath: string;
4004
+ dev: {
4005
+ type: "browser";
4006
+ pathname: string;
4007
+ } | {
4008
+ type: "script";
4009
+ initialRoute: string;
4010
+ portNumber: number;
4011
+ } | {
4012
+ type: "none";
4013
+ };
4014
+ dirName: string;
4015
+ relativePath: string;
4016
+ stackBlitzUrl: string | null;
4017
+ exerciseNumber: number;
4018
+ stepNumber: number;
4019
+ solutionName: string | null;
4020
+ instructionsCode?: string | undefined;
4021
+ epicVideoEmbeds?: string[] | undefined;
4022
+ } | null>;
4023
+ export declare function getAppPageRoute(app: ExerciseStepApp, { subroute, searchParams, }?: {
4024
+ subroute?: string;
4025
+ searchParams?: URLSearchParams;
4026
+ }): string;
4027
+ /**
4028
+ * Given a file path, this will find the app that file path belongs to.
4029
+ */
4030
+ export declare function getAppFromFile(filePath: string): Promise<{
4031
+ title: string;
4032
+ type: "solution";
4033
+ name: string;
4034
+ test: {
4035
+ type: "browser";
4036
+ pathname: string;
4037
+ testFiles: string[];
4038
+ } | {
4039
+ type: "script";
4040
+ script: string;
4041
+ } | {
4042
+ type: "none";
4043
+ };
4044
+ fullPath: string;
4045
+ dev: {
4046
+ type: "browser";
4047
+ pathname: string;
4048
+ } | {
4049
+ type: "script";
4050
+ initialRoute: string;
4051
+ portNumber: number;
4052
+ } | {
4053
+ type: "none";
4054
+ };
4055
+ dirName: string;
4056
+ relativePath: string;
4057
+ stackBlitzUrl: string | null;
4058
+ exerciseNumber: number;
4059
+ stepNumber: number;
4060
+ problemName: string | null;
4061
+ instructionsCode?: string | undefined;
4062
+ epicVideoEmbeds?: string[] | undefined;
4063
+ } | {
4064
+ title: string;
4065
+ type: "problem";
4066
+ name: string;
4067
+ test: {
4068
+ type: "browser";
4069
+ pathname: string;
4070
+ testFiles: string[];
4071
+ } | {
4072
+ type: "script";
4073
+ script: string;
4074
+ } | {
4075
+ type: "none";
4076
+ };
4077
+ fullPath: string;
4078
+ dev: {
4079
+ type: "browser";
4080
+ pathname: string;
4081
+ } | {
4082
+ type: "script";
4083
+ initialRoute: string;
4084
+ portNumber: number;
4085
+ } | {
4086
+ type: "none";
4087
+ };
4088
+ dirName: string;
4089
+ relativePath: string;
4090
+ stackBlitzUrl: string | null;
4091
+ exerciseNumber: number;
4092
+ stepNumber: number;
4093
+ solutionName: string | null;
4094
+ instructionsCode?: string | undefined;
4095
+ epicVideoEmbeds?: string[] | undefined;
4096
+ } | {
4097
+ title: string;
4098
+ type: "example";
4099
+ name: string;
4100
+ test: {
4101
+ type: "browser";
4102
+ pathname: string;
4103
+ testFiles: string[];
4104
+ } | {
4105
+ type: "script";
4106
+ script: string;
4107
+ } | {
4108
+ type: "none";
4109
+ };
4110
+ fullPath: string;
4111
+ dev: {
4112
+ type: "browser";
4113
+ pathname: string;
4114
+ } | {
4115
+ type: "script";
4116
+ initialRoute: string;
4117
+ portNumber: number;
4118
+ } | {
4119
+ type: "none";
4120
+ };
4121
+ dirName: string;
4122
+ relativePath: string;
4123
+ stackBlitzUrl: string | null;
4124
+ instructionsCode?: string | undefined;
4125
+ epicVideoEmbeds?: string[] | undefined;
4126
+ } | {
4127
+ title: string;
4128
+ type: "playground";
4129
+ name: string;
4130
+ test: {
4131
+ type: "browser";
4132
+ pathname: string;
4133
+ testFiles: string[];
4134
+ } | {
4135
+ type: "script";
4136
+ script: string;
4137
+ } | {
4138
+ type: "none";
4139
+ };
4140
+ fullPath: string;
4141
+ dev: {
4142
+ type: "browser";
4143
+ pathname: string;
4144
+ } | {
4145
+ type: "script";
4146
+ initialRoute: string;
4147
+ portNumber: number;
4148
+ } | {
4149
+ type: "none";
4150
+ };
4151
+ dirName: string;
4152
+ relativePath: string;
4153
+ stackBlitzUrl: string | null;
4154
+ appName: string;
4155
+ isUpToDate: boolean;
4156
+ instructionsCode?: string | undefined;
4157
+ epicVideoEmbeds?: string[] | undefined;
4158
+ } | undefined>;
4159
+ export declare function savePlayground(): Promise<void>;
4160
+ export declare function setPlayground(srcDir: string, { reset }?: {
4161
+ reset?: boolean;
4162
+ }): Promise<void>;
4163
+ /**
4164
+ * The playground is based on another app. This returns the app the playground
4165
+ * is based on.
4166
+ */
4167
+ export declare function getPlaygroundAppName(): Promise<string | null>;
4168
+ export declare function getAppDisplayName(a: App, allApps: Array<App>): string;
4169
+ export declare function getWorkshopInstructions({ request, }?: {
4170
+ request?: Request;
4171
+ }): Promise<{
4172
+ readonly compiled: {
4173
+ readonly status: "success";
4174
+ readonly code: string;
4175
+ readonly title: string | null;
4176
+ readonly epicVideoEmbeds: Array<string>;
4177
+ } | {
4178
+ readonly status: "error";
4179
+ readonly error: string;
4180
+ };
4181
+ readonly file: string;
4182
+ readonly relativePath: "exercises";
4183
+ }>;
4184
+ export declare function getWorkshopFinished({ request, }?: {
4185
+ request?: Request;
4186
+ }): Promise<{
4187
+ readonly compiled: {
4188
+ readonly status: "success";
4189
+ readonly code: string;
4190
+ readonly title: string | null;
4191
+ readonly epicVideoEmbeds: Array<string>;
4192
+ } | {
4193
+ readonly status: "error";
4194
+ readonly error: string;
4195
+ };
4196
+ readonly file: string;
4197
+ readonly relativePath: "exercises/finished.mdx";
4198
+ }>;
4199
+ export declare function getRelativePath(filePath: string): string;
4200
+ /**
4201
+ * Given a file path, this will determine the path to the app that file belongs to.
4202
+ */
4203
+ export declare function getAppPathFromFilePath(filePath: string): string | null;
4204
+ export {};
4205
+ //# sourceMappingURL=apps.server.d.ts.map