@learnpack/learnpack 5.0.272 → 5.0.274

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 (75) hide show
  1. package/README.md +409 -409
  2. package/lib/commands/audit.js +15 -15
  3. package/lib/commands/breakToken.js +19 -19
  4. package/lib/commands/clean.js +3 -3
  5. package/lib/commands/init.js +41 -41
  6. package/lib/commands/logout.js +3 -3
  7. package/lib/commands/serve.js +32 -17
  8. package/lib/creatorDist/assets/{index-C1pv1wUb.js → index-BfLyIQVh.js} +10351 -10227
  9. package/lib/creatorDist/assets/{index-B4khtb0r.css → index-C39zeF3W.css} +3 -3
  10. package/lib/creatorDist/index.html +2 -2
  11. package/lib/managers/config/index.js +77 -77
  12. package/lib/utils/api.js +1 -0
  13. package/lib/utils/creatorUtilities.js +14 -14
  14. package/package.json +1 -1
  15. package/src/commands/audit.ts +487 -487
  16. package/src/commands/breakToken.ts +67 -67
  17. package/src/commands/clean.ts +30 -30
  18. package/src/commands/init.ts +650 -650
  19. package/src/commands/logout.ts +38 -38
  20. package/src/commands/publish.ts +522 -522
  21. package/src/commands/serve.ts +38 -28
  22. package/src/commands/start.ts +333 -333
  23. package/src/commands/translate.ts +123 -123
  24. package/src/creator/README.md +54 -54
  25. package/src/creator/eslint.config.js +28 -28
  26. package/src/creator/src/components/syllabus/ContentIndex.tsx +1 -1
  27. package/src/creator/src/i18n.ts +28 -28
  28. package/src/creator/src/index.css +217 -217
  29. package/src/creator/src/locales/en.json +1 -0
  30. package/src/creator/src/locales/es.json +1 -0
  31. package/src/creator/src/utils/configTypes.ts +122 -122
  32. package/src/creator/src/utils/constants.ts +13 -13
  33. package/src/creator/src/utils/creatorUtils.ts +46 -46
  34. package/src/creator/src/utils/eventBus.ts +2 -2
  35. package/src/creator/src/utils/lib.ts +468 -468
  36. package/src/creator/src/utils/rigo.ts +26 -26
  37. package/src/creator/src/utils/socket.ts +61 -61
  38. package/src/creator/src/utils/store.ts +222 -222
  39. package/src/creator/src/vite-env.d.ts +1 -1
  40. package/src/creator/vite.config.ts +13 -13
  41. package/src/creatorDist/assets/{index-C1pv1wUb.js → index-BfLyIQVh.js} +10351 -10227
  42. package/src/creatorDist/assets/{index-B4khtb0r.css → index-C39zeF3W.css} +3 -3
  43. package/src/creatorDist/index.html +2 -2
  44. package/src/managers/config/defaults.ts +49 -49
  45. package/src/managers/config/exercise.ts +364 -364
  46. package/src/managers/config/index.ts +775 -775
  47. package/src/managers/file.ts +236 -236
  48. package/src/managers/server/routes.ts +554 -554
  49. package/src/managers/session.ts +182 -182
  50. package/src/managers/telemetry.ts +188 -188
  51. package/src/models/action.ts +13 -13
  52. package/src/models/config-manager.ts +28 -28
  53. package/src/models/config.ts +106 -106
  54. package/src/models/creator.ts +40 -40
  55. package/src/models/exercise-obj.ts +30 -30
  56. package/src/models/session.ts +39 -39
  57. package/src/models/socket.ts +61 -61
  58. package/src/models/status.ts +16 -16
  59. package/src/ui/_app/app.css +1 -1
  60. package/src/ui/_app/app.js +435 -414
  61. package/src/ui/_app/learnpack.svg +7 -7
  62. package/src/ui/app.tar.gz +0 -0
  63. package/src/utils/BaseCommand.ts +56 -56
  64. package/src/utils/api.ts +31 -30
  65. package/src/utils/audit.ts +392 -392
  66. package/src/utils/checkNotInstalled.ts +267 -267
  67. package/src/utils/configBuilder.ts +82 -82
  68. package/src/utils/convertCreds.js +34 -34
  69. package/src/utils/creatorUtilities.ts +504 -504
  70. package/src/utils/incrementVersion.js +74 -74
  71. package/src/utils/misc.ts +58 -58
  72. package/src/utils/rigoActions.ts +500 -500
  73. package/src/utils/sidebarGenerator.ts +195 -195
  74. package/src/utils/templates/isolated/exercises/01-hello-world/README.es.md +26 -26
  75. package/src/utils/templates/isolated/exercises/01-hello-world/README.md +26 -26
@@ -45,7 +45,10 @@ import {
45
45
  import axios from "axios"
46
46
  import * as FormData from "form-data"
47
47
  import api, { RIGOBOT_HOST } from "../utils/api"
48
- import { createUploadMiddleware, minutesToISO8601Duration } from "../utils/misc"
48
+ import {
49
+ createUploadMiddleware,
50
+ minutesToISO8601Duration,
51
+ } from "../utils/misc"
49
52
  import { buildConfig, ConfigResponse } from "../utils/configBuilder"
50
53
  import { checkReadability, slugify } from "../utils/creatorUtilities"
51
54
  import { checkAndFixSidebarPure } from "../utils/sidebarGenerator"
@@ -157,11 +160,9 @@ const uploadInitialReadme = async (
157
160
  :rigo
158
161
  \`\`\`
159
162
  `
160
- const readmeFilename = `README.${
161
- packageContext.language && packageContext.language !== "en" ?
162
- `${packageContext.language}.` :
163
- ""
164
- }md`
163
+ const readmeFilename = `README${getReadmeExtension(
164
+ packageContext.language || "en"
165
+ )}`
165
166
 
166
167
  await uploadFileToBucket(
167
168
  bucket,
@@ -229,12 +230,10 @@ const createMultiLangAsset = async (
229
230
  }
230
231
 
231
232
  async function startExerciseGeneration(
232
- bucket: Bucket,
233
233
  rigoToken: string,
234
234
  steps: Lesson[],
235
235
  packageContext: FormState,
236
236
  exercise: Lesson,
237
- tutorialDir: string,
238
237
  courseSlug: string,
239
238
  purposeSlug: string,
240
239
  lastLesson = ""
@@ -246,7 +245,7 @@ async function startExerciseGeneration(
246
245
 
247
246
  console.log("WEBHOOK URL", webhookUrl)
248
247
 
249
- await readmeCreator(
248
+ const res = await readmeCreator(
250
249
  rigoToken,
251
250
  {
252
251
  title: `${exercise.id} - ${exercise.title}`,
@@ -262,6 +261,8 @@ async function startExerciseGeneration(
262
261
  purposeSlug,
263
262
  webhookUrl
264
263
  )
264
+
265
+ console.log("README CREATOR RES", res)
265
266
  }
266
267
 
267
268
  async function createInitialReadme(
@@ -649,12 +650,10 @@ export default class ServeCommand extends SessionCommand {
649
650
  }
650
651
 
651
652
  await startExerciseGeneration(
652
- bucket,
653
653
  rigoToken,
654
654
  syllabusJson.lessons,
655
655
  syllabusJson.courseInfo,
656
656
  exercise,
657
- `courses/${courseSlug}`,
658
657
  courseSlug,
659
658
  syllabusJson.courseInfo.purpose,
660
659
  previousReadme +
@@ -784,12 +783,10 @@ export default class ServeCommand extends SessionCommand {
784
783
  }
785
784
 
786
785
  startExerciseGeneration(
787
- bucket,
788
786
  rigoToken,
789
787
  syllabusJson.lessons,
790
788
  syllabusJson.courseInfo,
791
789
  nextExercise,
792
- `courses/${courseSlug}`,
793
790
  courseSlug,
794
791
  syllabusJson.courseInfo.purpose,
795
792
  readme.parsed.content + "\n\n" + feedback
@@ -1445,12 +1442,10 @@ export default class ServeCommand extends SessionCommand {
1445
1442
  const lastResult = "---"
1446
1443
 
1447
1444
  await startExerciseGeneration(
1448
- bucket,
1449
1445
  rigoToken,
1450
1446
  syllabus.lessons,
1451
1447
  syllabus.courseInfo,
1452
1448
  firstLesson,
1453
- tutorialDir,
1454
1449
  courseSlug,
1455
1450
  syllabus.courseInfo.purpose,
1456
1451
  lastResult
@@ -1515,12 +1510,10 @@ export default class ServeCommand extends SessionCommand {
1515
1510
  const firstLessonToGenerate = notGeneratedLessons[0]
1516
1511
 
1517
1512
  await startExerciseGeneration(
1518
- bucket,
1519
1513
  rigoToken,
1520
1514
  syllabusJson.lessons,
1521
1515
  syllabusJson.courseInfo,
1522
1516
  firstLessonToGenerate,
1523
- `courses/${courseSlug}`,
1524
1517
  courseSlug,
1525
1518
  syllabusJson.courseInfo.purpose,
1526
1519
  JSON.stringify(lastGeneratedLesson) +
@@ -1755,7 +1748,9 @@ export default class ServeCommand extends SessionCommand {
1755
1748
  console.error("❌ Error fetching file:", error)
1756
1749
  return res
1757
1750
  .status(500)
1758
- .json({ error: (error as Error).message || "Unable to fetch file" })
1751
+ .json({
1752
+ error: (error as Error).message || "Unable to fetch file",
1753
+ })
1759
1754
  }
1760
1755
  }
1761
1756
  )
@@ -1771,25 +1766,38 @@ export default class ServeCommand extends SessionCommand {
1771
1766
 
1772
1767
  if (ytMatch) {
1773
1768
  const videoId = ytMatch[1]
1769
+ console.log("VIDEO ID", videoId)
1774
1770
  // fetch metadata
1775
1771
  const items = await YoutubeTranscript.fetchTranscript(videoId)
1772
+ console.log("ITEMS FROM YOUTUBE TRANSCRIPT", items)
1776
1773
  const transcript = items.map(i => i.text).join(" ")
1777
1774
 
1778
- const { data: meta } = await axios.get(
1779
- "https://www.youtube.com/oembed",
1780
- {
1781
- params: { url: decoded, format: "json" },
1782
- }
1783
- )
1775
+ let meta: any = null
1776
+ try {
1777
+ const { data: meta } = await axios.get(
1778
+ "https://www.youtube.com/oembed",
1779
+ {
1780
+ params: { url: decoded, format: "json" },
1781
+ }
1782
+ )
1783
+ console.log("META", meta)
1784
+ } catch (error) {
1785
+ console.error("ERROR FETCHING META", error)
1786
+ meta = null
1787
+ }
1788
+
1789
+ throw new Error("test")
1784
1790
 
1785
1791
  return res.json({
1786
1792
  url: decoded,
1787
- title: meta.title,
1788
- author: meta.author_name,
1789
- thumbnail: meta.thumbnail_url,
1793
+ title: meta?.title || null,
1794
+ author: meta?.author_name || null,
1795
+ thumbnail: meta?.thumbnail_url || null,
1790
1796
  transcript,
1791
1797
  })
1792
1798
  }
1799
+
1800
+ console.log("NOT A YOUTUBE LINK", decoded)
1793
1801
 
1794
1802
  const response = await axios.get(decoded, { responseType: "text" })
1795
1803
  const html = response.data as string
@@ -1804,7 +1812,9 @@ export default class ServeCommand extends SessionCommand {
1804
1812
  })
1805
1813
  } catch (error: any) {
1806
1814
  console.error("❌ /actions/fetch error:", error.message || error)
1807
- res.status(500).json({ error: error.message || "Failed to fetch link" })
1815
+ res
1816
+ .status(500)
1817
+ .json({ error: error.message || "Failed to fetch link" })
1808
1818
  }
1809
1819
  })
1810
1820
  app.delete("/packages/:slug", async (req, res) => {