@epic-web/workshop-utils 4.5.1 → 4.6.1

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.
@@ -4045,6 +4045,12 @@ export declare function setPlayground(srcDir: string, { reset }?: {
4045
4045
  export declare function getPlaygroundAppName(): Promise<string | null>;
4046
4046
  export declare function getAppDisplayName(a: App, allApps: Array<App>): string;
4047
4047
  export declare function getWorkshopTitle(): Promise<string>;
4048
+ export declare function getWorkshopSubtitle(): Promise<string>;
4049
+ export declare function getWorkshopInstructor(): Promise<{
4050
+ name?: string | undefined;
4051
+ avatar?: string | undefined;
4052
+ 𝕏?: string | undefined;
4053
+ } | undefined>;
4048
4054
  export declare function getEpicWorkshopSlug(): Promise<string | null>;
4049
4055
  export declare function getWorkshopRoot(): string;
4050
4056
  export declare function getWorkshopInstructions({ request, }?: {
@@ -1 +1 @@
1
- {"version":3,"file":"apps.server.d.ts","sourceRoot":"","sources":["../../src/apps.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apps.server.d.ts","sourceRoot":"","sources":["../../src/apps.server.ts"],"names":[],"mappings":"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"}
@@ -133,7 +133,7 @@ function exists(file) {
133
133
  return fs.promises.access(file, fs.constants.F_OK).then(() => true, () => false);
134
134
  }
135
135
  function firstToExist(...files) {
136
- return Promise.all(files.map(exists)).then(results => {
136
+ return Promise.all(files.map(exists)).then((results) => {
137
137
  const index = results.findIndex(Boolean);
138
138
  return index === -1 ? null : files[index];
139
139
  });
@@ -182,7 +182,7 @@ async function readDir(dir) {
182
182
  async function compileMdxIfExists(filepath, { request } = {}) {
183
183
  filepath = filepath.replace(/\\/g, '/');
184
184
  if (await exists(filepath)) {
185
- const compiled = await compileMdx(filepath, { request }).catch(error => {
185
+ const compiled = await compileMdx(filepath, { request }).catch((error) => {
186
186
  console.error(`Error compiling ${filepath}:`, error);
187
187
  return null;
188
188
  });
@@ -226,7 +226,7 @@ export async function getExercises({ timings, request, } = {}) {
226
226
  const steps = [];
227
227
  const exerciseApps = apps
228
228
  .filter(isExerciseStepApp)
229
- .filter(app => app.exerciseNumber === exerciseNumber);
229
+ .filter((app) => app.exerciseNumber === exerciseNumber);
230
230
  for (const app of exerciseApps) {
231
231
  // @ts-ignore meh 🤷‍♂️
232
232
  steps[app.stepNumber - 1] = {
@@ -246,10 +246,10 @@ export async function getExercises({ timings, request, } = {}) {
246
246
  steps,
247
247
  problems: apps
248
248
  .filter(isProblemApp)
249
- .filter(app => app.exerciseNumber === exerciseNumber),
249
+ .filter((app) => app.exerciseNumber === exerciseNumber),
250
250
  solutions: apps
251
251
  .filter(isSolutionApp)
252
- .filter(app => app.exerciseNumber === exerciseNumber),
252
+ .filter((app) => app.exerciseNumber === exerciseNumber),
253
253
  });
254
254
  }
255
255
  return exercises;
@@ -371,7 +371,7 @@ async function getProblemDirs() {
371
371
  const problemDirs = (await glob('**/*.problem*', {
372
372
  cwd: exercisesDir,
373
373
  ignore: 'node_modules/**',
374
- })).map(p => path.join(exercisesDir, p));
374
+ })).map((p) => path.join(exercisesDir, p));
375
375
  return problemDirs;
376
376
  }
377
377
  async function getSolutionDirs() {
@@ -379,7 +379,7 @@ async function getSolutionDirs() {
379
379
  const solutionDirs = (await glob('**/*.solution*', {
380
380
  cwd: exercisesDir,
381
381
  ignore: 'node_modules/**',
382
- })).map(p => path.join(exercisesDir, p));
382
+ })).map((p) => path.join(exercisesDir, p));
383
383
  return solutionDirs;
384
384
  }
385
385
  /**
@@ -426,7 +426,7 @@ async function getFullPathFromAppName(appName) {
426
426
  : type === 'solution'
427
427
  ? await getSolutionDirs()
428
428
  : [];
429
- const dir = appDirs.find(dir => {
429
+ const dir = appDirs.find((dir) => {
430
430
  const info = extractNumbersAndTypeFromAppNameOrPath(dir);
431
431
  if (!info)
432
432
  return false;
@@ -444,7 +444,7 @@ async function findSolutionDir({ fullPath, }) {
444
444
  const paddedStepNumber = stepNumber.toString().padStart(2, '0');
445
445
  const parentDir = path.dirname(fullPath);
446
446
  const siblingDirs = await fs.promises.readdir(parentDir);
447
- const solutionDir = siblingDirs.find(dir => dir.startsWith(`${paddedStepNumber}.solution`));
447
+ const solutionDir = siblingDirs.find((dir) => dir.startsWith(`${paddedStepNumber}.solution`));
448
448
  if (solutionDir) {
449
449
  return path.join(parentDir, solutionDir);
450
450
  }
@@ -469,7 +469,7 @@ async function findProblemDir({ fullPath, }) {
469
469
  const paddedStepNumber = stepNumber.toString().padStart(2, '0');
470
470
  const parentDir = path.dirname(fullPath);
471
471
  const siblingDirs = await fs.promises.readdir(parentDir);
472
- const problemDir = siblingDirs.find(dir => dir.endsWith('problem') && dir.includes(paddedStepNumber));
472
+ const problemDir = siblingDirs.find((dir) => dir.endsWith('problem') && dir.includes(paddedStepNumber));
473
473
  if (problemDir) {
474
474
  return path.join(parentDir, problemDir);
475
475
  }
@@ -493,7 +493,7 @@ async function getTestInfo({ fullPath, }) {
493
493
  // tests are found in the corresponding solution directory
494
494
  const testAppFullPath = (await findSolutionDir({ fullPath })) ?? fullPath;
495
495
  const dirList = await fs.promises.readdir(testAppFullPath);
496
- const testFiles = dirList.filter(item => item.includes('.test.'));
496
+ const testFiles = dirList.filter((item) => item.includes('.test.'));
497
497
  if (testFiles.length) {
498
498
  return {
499
499
  type: 'browser',
@@ -572,7 +572,7 @@ export async function getPlaygroundApp({ timings, request, } = {}) {
572
572
  dev,
573
573
  };
574
574
  },
575
- }).catch(error => {
575
+ }).catch((error) => {
576
576
  console.error(error);
577
577
  return null;
578
578
  });
@@ -597,7 +597,7 @@ async function getExampleAppFromPath(fullPath, index, request) {
597
597
  }
598
598
  async function getExampleApps({ timings, request, } = {}) {
599
599
  const examplesDir = path.join(workshopRoot, 'examples');
600
- const exampleDirs = (await glob('*', { cwd: examplesDir, ignore: 'node_modules/**' })).map(p => path.join(examplesDir, p));
600
+ const exampleDirs = (await glob('*', { cwd: examplesDir, ignore: 'node_modules/**' })).map((p) => path.join(examplesDir, p));
601
601
  const exampleApps = [];
602
602
  for (const exampleDir of exampleDirs) {
603
603
  const index = exampleDirs.indexOf(exampleDir);
@@ -610,7 +610,7 @@ async function getExampleApps({ timings, request, } = {}) {
610
610
  timingKey: exampleDir.replace(`${examplesDir}${path.sep}`, ''),
611
611
  request,
612
612
  forceFresh: getForceFreshForDir(exampleDir, exampleAppCache.get(key)),
613
- getFreshValue: () => getExampleAppFromPath(exampleDir, index, request).catch(error => {
613
+ getFreshValue: () => getExampleAppFromPath(exampleDir, index, request).catch((error) => {
614
614
  console.error(error);
615
615
  return null;
616
616
  }),
@@ -670,7 +670,7 @@ async function getSolutionApps({ timings, request, } = {}) {
670
670
  request,
671
671
  ttl: 1000 * 60 * 60 * 24,
672
672
  forceFresh: getForceFreshForDir(solutionDir, solutionAppCache.get(solutionDir)),
673
- getFreshValue: () => getSolutionAppFromPath(solutionDir, request).catch(error => {
673
+ getFreshValue: () => getSolutionAppFromPath(solutionDir, request).catch((error) => {
674
674
  console.error(error);
675
675
  return null;
676
676
  }),
@@ -730,7 +730,7 @@ async function getProblemApps({ timings, request, } = {}) {
730
730
  request,
731
731
  ttl: 1000 * 60 * 60 * 24,
732
732
  forceFresh: getForceFreshForDir(problemDir, problemAppCache.get(problemDir)),
733
- getFreshValue: () => getProblemAppFromPath(problemDir).catch(error => {
733
+ getFreshValue: () => getProblemAppFromPath(problemDir).catch((error) => {
734
734
  console.error(error);
735
735
  return null;
736
736
  }),
@@ -742,7 +742,7 @@ async function getProblemApps({ timings, request, } = {}) {
742
742
  }
743
743
  export async function getExercise(exerciseNumber, { request, timings } = {}) {
744
744
  const exercises = await getExercises({ request, timings });
745
- return exercises.find(s => s.exerciseNumber === Number(exerciseNumber));
745
+ return exercises.find((s) => s.exerciseNumber === Number(exerciseNumber));
746
746
  }
747
747
  export async function requireExercise(exerciseNumber, { request, timings } = {}) {
748
748
  const exercise = await getExercise(exerciseNumber, { request, timings });
@@ -773,7 +773,7 @@ export async function getExerciseApp(params, { request, timings } = {}) {
773
773
  }
774
774
  const { type, exerciseNumber, stepNumber } = result.data;
775
775
  const apps = (await getApps({ request, timings })).filter(isExerciseStepApp);
776
- const exerciseApp = apps.find(app => {
776
+ const exerciseApp = apps.find((app) => {
777
777
  if (isExampleApp(app))
778
778
  return false;
779
779
  return (app.exerciseNumber === exerciseNumber &&
@@ -787,11 +787,11 @@ export async function getExerciseApp(params, { request, timings } = {}) {
787
787
  }
788
788
  export async function getAppByName(name, { request, timings } = {}) {
789
789
  const apps = await getApps({ request, timings });
790
- return apps.find(a => a.name === name);
790
+ return apps.find((a) => a.name === name);
791
791
  }
792
792
  export async function getNextExerciseApp(app, { request, timings } = {}) {
793
793
  const apps = (await getApps({ request, timings })).filter(isExerciseStepApp);
794
- const index = apps.findIndex(a => a.name === app.name);
794
+ const index = apps.findIndex((a) => a.name === app.name);
795
795
  if (index === -1) {
796
796
  throw new Error(`Could not find app ${app.name}`);
797
797
  }
@@ -800,7 +800,7 @@ export async function getNextExerciseApp(app, { request, timings } = {}) {
800
800
  }
801
801
  export async function getPrevExerciseApp(app, { request, timings } = {}) {
802
802
  const apps = (await getApps({ request, timings })).filter(isExerciseStepApp);
803
- const index = apps.findIndex(a => a.name === app.name);
803
+ const index = apps.findIndex((a) => a.name === app.name);
804
804
  if (index === -1) {
805
805
  throw new Error(`Could not find app ${app.name}`);
806
806
  }
@@ -817,7 +817,7 @@ export function getAppPageRoute(app) {
817
817
  */
818
818
  export async function getAppFromFile(filePath) {
819
819
  const apps = await getApps();
820
- return apps.find(app => filePath.startsWith(app.fullPath));
820
+ return apps.find((app) => filePath.startsWith(app.fullPath));
821
821
  }
822
822
  export async function setPlayground(srcDir, { reset } = {}) {
823
823
  const isIgnored = await isGitIgnored({ cwd: srcDir });
@@ -901,12 +901,12 @@ export async function setPlayground(srcDir, { reset } = {}) {
901
901
  onlyFiles: false,
902
902
  dot: true,
903
903
  });
904
- return files.map(f => f.replace(dirPath, ''));
904
+ return files.map((f) => f.replace(dirPath, ''));
905
905
  }
906
906
  // Remove files from destDir that were in destDir before but are not in srcDir
907
907
  const srcFiles = await getFiles(srcDir);
908
908
  const destFiles = await getFiles(destDir);
909
- const filesToDelete = destFiles.filter(fileName => !srcFiles.includes(fileName));
909
+ const filesToDelete = destFiles.filter((fileName) => !srcFiles.includes(fileName));
910
910
  for (const fileToDelete of filesToDelete) {
911
911
  await fsExtra.remove(path.join(destDir, fileToDelete));
912
912
  }
@@ -991,7 +991,7 @@ export function getAppDisplayName(a, allApps) {
991
991
  displayName = `${a.exerciseNumber}.${a.stepNumber} ${a.title} (${typeLabel} ${a.type})`;
992
992
  }
993
993
  else if (isPlaygroundApp(a)) {
994
- const playgroundAppBasis = allApps.find(otherApp => a.appName === otherApp.name);
994
+ const playgroundAppBasis = allApps.find((otherApp) => a.appName === otherApp.name);
995
995
  if (playgroundAppBasis) {
996
996
  const basisDisplayName = getAppDisplayName(playgroundAppBasis, allApps);
997
997
  displayName = `🛝 ${basisDisplayName}`;
@@ -1012,6 +1012,20 @@ export async function getWorkshopTitle() {
1012
1012
  }
1013
1013
  return title;
1014
1014
  }
1015
+ export async function getWorkshopSubtitle() {
1016
+ return await getPkgProp(workshopRoot, 'epicshop.subtitle', '');
1017
+ }
1018
+ export async function getWorkshopInstructor() {
1019
+ const InstructorSchema = z
1020
+ .object({
1021
+ name: z.string().optional(),
1022
+ avatar: z.string().optional(),
1023
+ 𝕏: z.string().optional(),
1024
+ })
1025
+ .optional();
1026
+ const instructor = InstructorSchema.parse(await getPkgProp(getWorkshopRoot(), 'epicshop.instructor'));
1027
+ return instructor;
1028
+ }
1015
1029
  export async function getEpicWorkshopSlug() {
1016
1030
  const epicWorkshopSlug = await getPkgProp(workshopRoot, 'epicshop.epicWorkshopSlug', '');
1017
1031
  return epicWorkshopSlug || null;
@@ -1021,7 +1035,7 @@ export function getWorkshopRoot() {
1021
1035
  }
1022
1036
  export async function getWorkshopInstructions({ request, } = {}) {
1023
1037
  const readmeFilepath = path.join(workshopRoot, 'exercises', 'README.mdx');
1024
- const compiled = await compileMdx(readmeFilepath, { request }).then(r => ({ ...r, status: 'success' }), e => {
1038
+ const compiled = await compileMdx(readmeFilepath, { request }).then((r) => ({ ...r, status: 'success' }), (e) => {
1025
1039
  console.error(`There was an error compiling the workshop readme`, readmeFilepath, e);
1026
1040
  return { status: 'error', error: getErrorMessage(e) };
1027
1041
  });
@@ -1029,7 +1043,7 @@ export async function getWorkshopInstructions({ request, } = {}) {
1029
1043
  }
1030
1044
  export async function getWorkshopFinished({ request, } = {}) {
1031
1045
  const finishedFilepath = path.join(workshopRoot, 'exercises', 'FINISHED.mdx');
1032
- const compiled = await compileMdx(finishedFilepath, { request }).then(r => ({ ...r, status: 'success' }), e => {
1046
+ const compiled = await compileMdx(finishedFilepath, { request }).then((r) => ({ ...r, status: 'success' }), (e) => {
1033
1047
  console.error(`There was an error compiling the workshop finished.mdx`, finishedFilepath, e);
1034
1048
  return { status: 'error', error: getErrorMessage(e) };
1035
1049
  });