@learnpack/learnpack 5.0.276 → 5.0.278

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 (602) hide show
  1. package/lib/commands/serve.js +73 -0
  2. package/lib/utils/export/epub.d.ts +2 -0
  3. package/lib/utils/export/epub.js +458 -0
  4. package/lib/utils/export/index.d.ts +3 -0
  5. package/lib/utils/export/index.js +7 -0
  6. package/lib/utils/export/scorm.d.ts +2 -0
  7. package/lib/utils/export/scorm.js +84 -0
  8. package/lib/utils/export/shared.d.ts +4 -0
  9. package/lib/utils/export/shared.js +61 -0
  10. package/lib/utils/export/types.d.ts +22 -0
  11. package/lib/utils/export/types.js +2 -0
  12. package/package.json +2 -1
  13. package/src/commands/serve.ts +88 -1
  14. package/src/creator/eslint.config.js +28 -28
  15. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  16. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/cover.png +0 -0
  17. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  18. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  19. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  20. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  21. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.0-introduction-to-heygen/README.md +56 -0
  22. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  23. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  24. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  25. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  26. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  27. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.2-understanding-heygen-interface/README.md +68 -0
  28. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/01.2-understanding-heygen-interface/README.md.processed +68 -0
  29. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  30. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  31. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  32. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  33. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  34. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  35. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  36. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  37. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  38. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  39. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  40. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  41. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  42. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  43. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/exercises/05.0-test-your-avatar-knowledge/README.md.processed +66 -0
  44. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  45. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/01.0-introduction-to-heygen/README.html +124 -0
  46. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/01.1-setting-up-a-heygen-account/README.html +121 -0
  47. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/01.2-understanding-heygen-interface/README.html +125 -0
  48. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +122 -0
  49. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +62 -0
  50. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/03.0-creating-a-video-with-your-avatar/README.html +145 -0
  51. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/04.0-other-tools-you-can-explore/README.html +164 -0
  52. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/05.0-test-your-avatar-knowledge/README.html +116 -0
  53. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/main.html +17 -0
  54. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/html/toc.html +28 -0
  55. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/navigate-avatar-creation.png +0 -0
  56. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-091438png +0 -0
  57. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-100052png +0 -0
  58. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-113550png +0 -0
  59. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-113745png +0 -0
  60. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-114048png +0 -0
  61. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-114534png +0 -0
  62. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-114808png +0 -0
  63. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-115203png +0 -0
  64. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-115521png +0 -0
  65. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-120026png +0 -0
  66. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-120229png +0 -0
  67. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/assets/screenshot-2025-08-20-120628png +0 -0
  68. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/config.json +1 -0
  69. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/initialSyllabus.json +1 -0
  70. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/learn/sidebar.json +1 -0
  71. package/src/output/directory/04bedc40-a091-4bda-96e5-c71677655944/metadata.yaml +9 -0
  72. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  73. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/cover.png +0 -0
  74. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  75. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  76. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  77. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  78. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.0-introduction-to-heygen/README.md +56 -0
  79. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  80. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  81. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  82. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  83. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  84. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.2-understanding-heygen-interface/README.md +87 -0
  85. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/01.2-understanding-heygen-interface/README.md.processed +74 -0
  86. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  87. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  88. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  89. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  90. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  91. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  92. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  93. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  94. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  95. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  96. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  97. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  98. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  99. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  100. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/exercises/05.0-test-your-avatar-knowledge/README.md.processed +62 -0
  101. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  102. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/01.0-introduction-to-heygen/README.html +124 -0
  103. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/01.1-setting-up-a-heygen-account/README.html +122 -0
  104. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/01.2-understanding-heygen-interface/README.html +126 -0
  105. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +127 -0
  106. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +63 -0
  107. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/03.0-creating-a-video-with-your-avatar/README.html +149 -0
  108. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/04.0-other-tools-you-can-explore/README.html +164 -0
  109. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/05.0-test-your-avatar-knowledge/README.html +115 -0
  110. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/main.html +17 -0
  111. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/html/toc.html +28 -0
  112. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/navigate-avatar-creation.png +0 -0
  113. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-091438png +0 -0
  114. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-100052png +0 -0
  115. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-113550png +0 -0
  116. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-113745png +0 -0
  117. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-114048png +0 -0
  118. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-114534png +0 -0
  119. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-114808png +0 -0
  120. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-115203png +0 -0
  121. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-115521png +0 -0
  122. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-120026png +0 -0
  123. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-120229png +0 -0
  124. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/assets/screenshot-2025-08-20-120628png +0 -0
  125. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/config.json +1 -0
  126. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/initialSyllabus.json +1 -0
  127. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/learn/sidebar.json +42 -0
  128. package/src/output/directory/1b7c72c0-b651-4c86-84c7-dddb401d4cc9/metadata.yaml +9 -0
  129. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  130. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/cover.png +0 -0
  131. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  132. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  133. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  134. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  135. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.0-introduction-to-heygen/README.md +56 -0
  136. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  137. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  138. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  139. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  140. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  141. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.2-understanding-heygen-interface/README.md +68 -0
  142. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/01.2-understanding-heygen-interface/README.md.processed +68 -0
  143. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  144. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  145. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  146. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  147. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  148. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  149. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  150. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  151. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  152. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  153. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  154. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  155. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  156. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  157. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/exercises/05.0-test-your-avatar-knowledge/README.md.processed +66 -0
  158. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  159. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/01.0-introduction-to-heygen/README.html +124 -0
  160. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/01.1-setting-up-a-heygen-account/README.html +122 -0
  161. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/01.2-understanding-heygen-interface/README.html +126 -0
  162. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +127 -0
  163. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +63 -0
  164. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/03.0-creating-a-video-with-your-avatar/README.html +149 -0
  165. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/04.0-other-tools-you-can-explore/README.html +164 -0
  166. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/05.0-test-your-avatar-knowledge/README.html +116 -0
  167. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/main.html +17 -0
  168. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/html/toc.html +28 -0
  169. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/navigate-avatar-creation.png +0 -0
  170. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-091438png +0 -0
  171. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-100052png +0 -0
  172. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-113550png +0 -0
  173. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-113745png +0 -0
  174. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-114048png +0 -0
  175. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-114534png +0 -0
  176. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-114808png +0 -0
  177. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-115203png +0 -0
  178. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-115521png +0 -0
  179. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-120026png +0 -0
  180. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-120229png +0 -0
  181. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/assets/screenshot-2025-08-20-120628png +0 -0
  182. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/config.json +1 -0
  183. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/initialSyllabus.json +1 -0
  184. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/learn/sidebar.json +1 -0
  185. package/src/output/directory/27669a16-4599-4c4a-966c-4b3ef894a955/metadata.yaml +9 -0
  186. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  187. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/cover.png +0 -0
  188. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  189. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  190. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  191. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  192. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.0-introduction-to-heygen/README.md +56 -0
  193. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  194. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  195. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  196. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  197. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  198. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.2-understanding-heygen-interface/README.md +87 -0
  199. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/01.2-understanding-heygen-interface/README.md.processed +74 -0
  200. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  201. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  202. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  203. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  204. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  205. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  206. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  207. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  208. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  209. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  210. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  211. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  212. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  213. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  214. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/exercises/05.0-test-your-avatar-knowledge/README.md.processed +62 -0
  215. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  216. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/01.0-introduction-to-heygen/README.html +124 -0
  217. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/01.1-setting-up-a-heygen-account/README.html +122 -0
  218. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/01.2-understanding-heygen-interface/README.html +126 -0
  219. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +127 -0
  220. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +63 -0
  221. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/03.0-creating-a-video-with-your-avatar/README.html +149 -0
  222. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/04.0-other-tools-you-can-explore/README.html +164 -0
  223. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/05.0-test-your-avatar-knowledge/README.html +115 -0
  224. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/main.html +17 -0
  225. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/html/toc.html +28 -0
  226. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/navigate-avatar-creation.png +0 -0
  227. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-091438png +0 -0
  228. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-100052png +0 -0
  229. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-113550png +0 -0
  230. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-113745png +0 -0
  231. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-114048png +0 -0
  232. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-114534png +0 -0
  233. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-114808png +0 -0
  234. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-115203png +0 -0
  235. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-115521png +0 -0
  236. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-120026png +0 -0
  237. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-120229png +0 -0
  238. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/assets/screenshot-2025-08-20-120628png +0 -0
  239. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/config.json +1 -0
  240. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/initialSyllabus.json +1 -0
  241. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/learn/sidebar.json +1 -0
  242. package/src/output/directory/36c705fc-2075-4bb0-88a5-2dc23237e48e/metadata.yaml +9 -0
  243. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/navigate-avatar-creation.png +0 -0
  244. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-091438png +0 -0
  245. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-100052png +0 -0
  246. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-113550png +0 -0
  247. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-113745png +0 -0
  248. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-114048png +0 -0
  249. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-114534png +0 -0
  250. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-114808png +0 -0
  251. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-115203png +0 -0
  252. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-115521png +0 -0
  253. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-120026png +0 -0
  254. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-120229png +0 -0
  255. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/assets/screenshot-2025-08-20-120628png +0 -0
  256. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/config.json +1 -0
  257. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/initialSyllabus.json +1 -0
  258. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/.learn/sidebar.json +1 -0
  259. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  260. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/cover.png +0 -0
  261. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  262. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  263. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  264. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  265. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.0-introduction-to-heygen/README.md +56 -0
  266. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  267. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  268. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  269. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  270. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  271. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.2-understanding-heygen-interface/README.md +68 -0
  272. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/01.2-understanding-heygen-interface/README.md.processed +68 -0
  273. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  274. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  275. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  276. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  277. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  278. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  279. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  280. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  281. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  282. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  283. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  284. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  285. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  286. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  287. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/exercises/05.0-test-your-avatar-knowledge/README.md.processed +66 -0
  288. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  289. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/01.0-introduction-to-heygen/README.html +124 -0
  290. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/01.1-setting-up-a-heygen-account/README.html +122 -0
  291. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/01.2-understanding-heygen-interface/README.html +126 -0
  292. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +127 -0
  293. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +63 -0
  294. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/03.0-creating-a-video-with-your-avatar/README.html +149 -0
  295. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/04.0-other-tools-you-can-explore/README.html +164 -0
  296. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/05.0-test-your-avatar-knowledge/README.html +116 -0
  297. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/main.html +17 -0
  298. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/html/toc.html +28 -0
  299. package/src/output/directory/628226b7-7026-458a-a836-8acac5f01ad0/metadata.yaml +9 -0
  300. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  301. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/cover.png +0 -0
  302. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  303. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  304. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  305. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  306. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.0-introduction-to-heygen/README.md +56 -0
  307. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  308. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  309. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  310. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  311. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  312. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.2-understanding-heygen-interface/README.md +87 -0
  313. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/01.2-understanding-heygen-interface/README.md.processed +74 -0
  314. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  315. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  316. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  317. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  318. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  319. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  320. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  321. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  322. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  323. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  324. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  325. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  326. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  327. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  328. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/exercises/05.0-test-your-avatar-knowledge/README.md.processed +62 -0
  329. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  330. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/01.0-introduction-to-heygen/README.html +124 -0
  331. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/01.1-setting-up-a-heygen-account/README.html +122 -0
  332. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/01.2-understanding-heygen-interface/README.html +126 -0
  333. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +127 -0
  334. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +63 -0
  335. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/03.0-creating-a-video-with-your-avatar/README.html +149 -0
  336. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/04.0-other-tools-you-can-explore/README.html +164 -0
  337. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/05.0-test-your-avatar-knowledge/README.html +115 -0
  338. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/main.html +17 -0
  339. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/html/toc.html +28 -0
  340. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/navigate-avatar-creation.png +0 -0
  341. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-091438png +0 -0
  342. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-100052png +0 -0
  343. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-113550png +0 -0
  344. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-113745png +0 -0
  345. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-114048png +0 -0
  346. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-114534png +0 -0
  347. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-114808png +0 -0
  348. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-115203png +0 -0
  349. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-115521png +0 -0
  350. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-120026png +0 -0
  351. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-120229png +0 -0
  352. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/assets/screenshot-2025-08-20-120628png +0 -0
  353. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/config.json +1 -0
  354. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/initialSyllabus.json +1 -0
  355. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/learn/sidebar.json +1 -0
  356. package/src/output/directory/9cfc3831-206c-44e9-aaec-76d90dc007ad/metadata.yaml +9 -0
  357. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  358. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/cover.png +0 -0
  359. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  360. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  361. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  362. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  363. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.0-introduction-to-heygen/README.md +56 -0
  364. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  365. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  366. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  367. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  368. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  369. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.2-understanding-heygen-interface/README.md +87 -0
  370. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/01.2-understanding-heygen-interface/README.md.processed +74 -0
  371. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  372. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  373. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  374. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  375. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  376. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  377. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  378. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  379. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  380. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  381. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  382. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  383. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  384. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  385. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/exercises/05.0-test-your-avatar-knowledge/README.md.processed +62 -0
  386. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  387. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/01.0-introduction-to-heygen/README.html +124 -0
  388. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/01.1-setting-up-a-heygen-account/README.html +122 -0
  389. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/01.2-understanding-heygen-interface/README.html +126 -0
  390. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +127 -0
  391. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +63 -0
  392. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/03.0-creating-a-video-with-your-avatar/README.html +149 -0
  393. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/04.0-other-tools-you-can-explore/README.html +164 -0
  394. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/05.0-test-your-avatar-knowledge/README.html +115 -0
  395. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/main.html +17 -0
  396. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/html/toc.html +28 -0
  397. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/navigate-avatar-creation.png +0 -0
  398. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-091438png +0 -0
  399. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-100052png +0 -0
  400. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-113550png +0 -0
  401. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-113745png +0 -0
  402. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-114048png +0 -0
  403. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-114534png +0 -0
  404. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-114808png +0 -0
  405. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-115203png +0 -0
  406. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-115521png +0 -0
  407. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-120026png +0 -0
  408. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-120229png +0 -0
  409. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/assets/screenshot-2025-08-20-120628png +0 -0
  410. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/config.json +1 -0
  411. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/initialSyllabus.json +1 -0
  412. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/learn/sidebar.json +1 -0
  413. package/src/output/directory/bcf520d5-1472-4846-8afd-2ff49339c41a/metadata.yaml +9 -0
  414. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  415. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/cover.png +0 -0
  416. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  417. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  418. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  419. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  420. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.0-introduction-to-heygen/README.md +56 -0
  421. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  422. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  423. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  424. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  425. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  426. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.2-understanding-heygen-interface/README.md +87 -0
  427. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/01.2-understanding-heygen-interface/README.md.processed +74 -0
  428. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  429. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  430. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  431. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  432. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  433. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  434. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  435. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  436. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  437. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  438. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  439. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  440. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  441. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  442. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/exercises/05.0-test-your-avatar-knowledge/README.md.processed +62 -0
  443. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  444. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/01.0-introduction-to-heygen/README.html +124 -0
  445. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/01.1-setting-up-a-heygen-account/README.html +122 -0
  446. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/01.2-understanding-heygen-interface/README.html +126 -0
  447. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +127 -0
  448. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +63 -0
  449. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/03.0-creating-a-video-with-your-avatar/README.html +149 -0
  450. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/04.0-other-tools-you-can-explore/README.html +164 -0
  451. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/05.0-test-your-avatar-knowledge/README.html +115 -0
  452. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/main.html +17 -0
  453. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/html/toc.html +28 -0
  454. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/navigate-avatar-creation.png +0 -0
  455. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-091438png +0 -0
  456. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-100052png +0 -0
  457. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-113550png +0 -0
  458. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-113745png +0 -0
  459. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-114048png +0 -0
  460. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-114534png +0 -0
  461. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-114808png +0 -0
  462. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-115203png +0 -0
  463. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-115521png +0 -0
  464. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-120026png +0 -0
  465. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-120229png +0 -0
  466. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/assets/screenshot-2025-08-20-120628png +0 -0
  467. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/config.json +1 -0
  468. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/initialSyllabus.json +1 -0
  469. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/learn/sidebar.json +1 -0
  470. package/src/output/directory/cdf069e9-cb18-414f-81cb-8c8f4339a38f/metadata.yaml +9 -0
  471. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  472. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/cover.png +0 -0
  473. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  474. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  475. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  476. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  477. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.0-introduction-to-heygen/README.md +56 -0
  478. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  479. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  480. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  481. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  482. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  483. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.2-understanding-heygen-interface/README.md +68 -0
  484. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/01.2-understanding-heygen-interface/README.md.processed +68 -0
  485. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  486. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  487. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  488. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  489. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  490. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  491. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  492. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  493. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  494. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  495. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  496. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  497. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  498. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  499. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/exercises/05.0-test-your-avatar-knowledge/README.md.processed +66 -0
  500. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  501. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/01.0-introduction-to-heygen/README.html +124 -0
  502. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/01.1-setting-up-a-heygen-account/README.html +121 -0
  503. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/01.2-understanding-heygen-interface/README.html +125 -0
  504. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +122 -0
  505. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +62 -0
  506. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/03.0-creating-a-video-with-your-avatar/README.html +145 -0
  507. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/04.0-other-tools-you-can-explore/README.html +164 -0
  508. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/05.0-test-your-avatar-knowledge/README.html +116 -0
  509. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/main.html +17 -0
  510. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/html/toc.html +28 -0
  511. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/navigate-avatar-creation.png +0 -0
  512. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-091438png +0 -0
  513. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-100052png +0 -0
  514. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-113550png +0 -0
  515. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-113745png +0 -0
  516. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-114048png +0 -0
  517. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-114534png +0 -0
  518. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-114808png +0 -0
  519. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-115203png +0 -0
  520. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-115521png +0 -0
  521. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-120026png +0 -0
  522. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-120229png +0 -0
  523. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/assets/screenshot-2025-08-20-120628png +0 -0
  524. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/config.json +1 -0
  525. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/initialSyllabus.json +1 -0
  526. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/learn/sidebar.json +1 -0
  527. package/src/output/directory/d131474e-536f-46e5-a144-616560fe3b0f/metadata.yaml +9 -0
  528. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/navigate-avatar-creation.png +0 -0
  529. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-091438png +0 -0
  530. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-100052png +0 -0
  531. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-113550png +0 -0
  532. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-113745png +0 -0
  533. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-114048png +0 -0
  534. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-114534png +0 -0
  535. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-114808png +0 -0
  536. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-115203png +0 -0
  537. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-115521png +0 -0
  538. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-120026png +0 -0
  539. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-120229png +0 -0
  540. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/assets/screenshot-2025-08-20-120628png +0 -0
  541. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/config.json +1 -0
  542. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/initialSyllabus.json +1 -0
  543. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/.learn/sidebar.json +1 -0
  544. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/avatar-creation-with-heygen-a-practical-guide.epub +0 -0
  545. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/cover.png +0 -0
  546. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.es.md +23 -0
  547. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md +23 -0
  548. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/00.0-welcome-to-avatar-creation-with-heygen/README.md.processed +23 -0
  549. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.0-introduction-to-heygen/README.es.md +56 -0
  550. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.0-introduction-to-heygen/README.md +56 -0
  551. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.0-introduction-to-heygen/README.md.processed +56 -0
  552. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.1-setting-up-a-heygen-account/README.es.md +76 -0
  553. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.1-setting-up-a-heygen-account/README.md +70 -0
  554. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.1-setting-up-a-heygen-account/README.md.processed +70 -0
  555. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.2-understanding-heygen-interface/README.es.md +70 -0
  556. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.2-understanding-heygen-interface/README.md +68 -0
  557. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/01.2-understanding-heygen-interface/README.md.processed +68 -0
  558. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.es.md +79 -0
  559. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md +83 -0
  560. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/02.0-creating-your-avatar-navigate-in-the-interface/README.md.processed +83 -0
  561. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.es.md +22 -0
  562. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md +46 -0
  563. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/02.2-your-avatar-is-ready-what-to-do-now/README.md.processed +46 -0
  564. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/03.0-creating-a-video-with-your-avatar/README.es.md +73 -0
  565. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/03.0-creating-a-video-with-your-avatar/README.md +95 -0
  566. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/03.0-creating-a-video-with-your-avatar/README.md.processed +95 -0
  567. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/04.0-other-tools-you-can-explore/README.es.md +63 -0
  568. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/04.0-other-tools-you-can-explore/README.md +63 -0
  569. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/04.0-other-tools-you-can-explore/README.md.processed +63 -0
  570. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/05.0-test-your-avatar-knowledge/README.es.md +65 -0
  571. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/05.0-test-your-avatar-knowledge/README.md +66 -0
  572. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/exercises/05.0-test-your-avatar-knowledge/README.md.processed +66 -0
  573. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/00.0-welcome-to-avatar-creation-with-heygen/README.html +62 -0
  574. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/01.0-introduction-to-heygen/README.html +124 -0
  575. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/01.1-setting-up-a-heygen-account/README.html +121 -0
  576. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/01.2-understanding-heygen-interface/README.html +125 -0
  577. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/02.0-creating-your-avatar-navigate-in-the-interface/README.html +122 -0
  578. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/02.2-your-avatar-is-ready-what-to-do-now/README.html +62 -0
  579. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/03.0-creating-a-video-with-your-avatar/README.html +145 -0
  580. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/04.0-other-tools-you-can-explore/README.html +164 -0
  581. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/05.0-test-your-avatar-knowledge/README.html +116 -0
  582. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/main.html +17 -0
  583. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/html/toc.html +28 -0
  584. package/src/output/directory/de8e3599-60a4-4f1d-9826-a0762d0b9402/metadata.yaml +9 -0
  585. package/src/output/directory/f33b274b-6a3f-40f8-85c2-a96aa8bfdbe6.zip +0 -0
  586. package/src/ui/_app/app.css +1 -1
  587. package/src/ui/_app/app.js +404 -404
  588. package/src/ui/app.tar.gz +0 -0
  589. package/src/utils/export/README.md +178 -0
  590. package/src/utils/export/epub.ts +612 -0
  591. package/src/utils/export/index.ts +3 -0
  592. package/src/utils/export/scorm.ts +121 -0
  593. package/src/utils/export/shared.ts +61 -0
  594. package/src/utils/export/types.ts +25 -0
  595. package/src/utils/templates/epub/epub.css +133 -0
  596. package/src/utils/templates/scorm/adlcp_rootv1p2.xsd +110 -0
  597. package/src/utils/templates/scorm/config/api.js +175 -0
  598. package/src/utils/templates/scorm/config/index.html +210 -0
  599. package/src/utils/templates/scorm/ims_xml.xsd +1 -0
  600. package/src/utils/templates/scorm/imscp_rootv1p1p2.xsd +345 -0
  601. package/src/utils/templates/scorm/imsmanifest.xml +38 -0
  602. package/src/utils/templates/scorm/imsmd_rootv1p2p1.xsd +573 -0
@@ -20,6 +20,7 @@ const file_1 = require("../managers/file");
20
20
  const fs = require("fs");
21
21
  const rigoActions_1 = require("../utils/rigoActions");
22
22
  const dotenv = require("dotenv");
23
+ // import { v4 as uuidv4 } from "uuid"
23
24
  const creatorUtilities_1 = require("../utils/creatorUtilities");
24
25
  // import { handleAssetCreation } from "./publish"
25
26
  const axios_1 = require("axios");
@@ -30,8 +31,11 @@ const configBuilder_1 = require("../utils/configBuilder");
30
31
  const creatorUtilities_2 = require("../utils/creatorUtilities");
31
32
  const sidebarGenerator_1 = require("../utils/sidebarGenerator");
32
33
  const publish_1 = require("./publish");
34
+ const export_1 = require("../utils/export");
33
35
  const frontMatter = require("front-matter");
34
36
  dotenv.config();
37
+ // Asegúrate de tener uuid instalado
38
+ // npm install uuid
35
39
  function findLast(array, predicate) {
36
40
  for (let i = array.length - 1; i >= 0; i--) {
37
41
  if (predicate(array[i]))
@@ -643,6 +647,7 @@ class ServeCommand extends SessionCommand_1.default {
643
647
  const { config, exercises } = await (0, configBuilder_1.buildConfig)(bucket, courseSlug);
644
648
  res.set("X-Creator-Web", "true");
645
649
  res.set("Access-Control-Expose-Headers", "X-Creator-Web");
650
+ await uploadFileToBucket(bucket, JSON.stringify({ config, exercises }), `courses/${courseSlug}/.learn/config.json`);
646
651
  res.json({ config, exercises });
647
652
  }
648
653
  catch (error) {
@@ -1298,6 +1303,74 @@ class ServeCommand extends SessionCommand_1.default {
1298
1303
  res.status(500).json({ error: "Failed to fetch the resource" });
1299
1304
  }
1300
1305
  });
1306
+ // Export endpoint (POST) - supports both SCORM and EPUB
1307
+ app.post("/export/:course_slug/:format", async (req, res) => {
1308
+ const { course_slug, format } = req.params;
1309
+ const { language = "en", metadata } = req.body;
1310
+ try {
1311
+ let outputPath;
1312
+ let filename;
1313
+ if (format === "scorm") {
1314
+ outputPath = await (0, export_1.exportToScorm)({
1315
+ courseSlug: course_slug,
1316
+ format: "scorm",
1317
+ bucket,
1318
+ outDir: path.join(__dirname, "../output/directory"),
1319
+ });
1320
+ filename = `${course_slug}-scorm.zip`;
1321
+ }
1322
+ else if (format === "epub") {
1323
+ console.log("EPUB export", metadata);
1324
+ // Validate required metadata for EPUB
1325
+ if (!metadata ||
1326
+ !metadata.creator ||
1327
+ !metadata.publisher ||
1328
+ !metadata.title ||
1329
+ !metadata.rights ||
1330
+ !metadata.lang) {
1331
+ console.log("Missing required metadata for EPUB export", metadata);
1332
+ return res.status(400).json({
1333
+ error: "Missing required metadata for EPUB export",
1334
+ required: ["creator", "publisher", "title", "rights", "lang"],
1335
+ });
1336
+ }
1337
+ outputPath = await (0, export_1.exportToEpub)({
1338
+ courseSlug: course_slug,
1339
+ format: "epub",
1340
+ bucket,
1341
+ outDir: path.join(__dirname, "../output/directory"),
1342
+ language: language,
1343
+ }, metadata);
1344
+ filename = `${course_slug}.epub`;
1345
+ }
1346
+ else {
1347
+ return res.status(400).json({
1348
+ error: "Invalid format. Supported formats: scorm, epub",
1349
+ });
1350
+ }
1351
+ // Send the file and clean up
1352
+ res.download(outputPath, filename, err => {
1353
+ if (err)
1354
+ console.error("Error sending file:", err);
1355
+ // Clean up the generated file
1356
+ if (fs.existsSync(outputPath)) {
1357
+ fs.unlinkSync(outputPath);
1358
+ if (format === "epub") {
1359
+ const tempDir = path.dirname(outputPath);
1360
+ if (fs.existsSync(tempDir)) {
1361
+ rimraf.sync(tempDir);
1362
+ }
1363
+ }
1364
+ }
1365
+ });
1366
+ }
1367
+ catch (error) {
1368
+ console.error("Export error:", error);
1369
+ res
1370
+ .status(500)
1371
+ .json({ error: "Export failed", details: error.message });
1372
+ }
1373
+ });
1301
1374
  server.listen(PORT, () => {
1302
1375
  console.log(`🚀 Creator UI server running at http://localhost:${PORT}/creator`);
1303
1376
  });
@@ -0,0 +1,2 @@
1
+ import { ExportOptions, EpubMetadata } from "./types";
2
+ export declare function exportToEpub(options: ExportOptions, epubMetadata: EpubMetadata): Promise<string>;
@@ -0,0 +1,458 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportToEpub = exportToEpub;
4
+ const path = require("path");
5
+ const fs = require("fs");
6
+ const mkdirp = require("mkdirp");
7
+ const rimraf = require("rimraf");
8
+ const uuid_1 = require("uuid");
9
+ const child_process_1 = require("child_process");
10
+ const shared_1 = require("./shared");
11
+ const replaceQuestionsFromMarkdown = (markdown) => {
12
+ // Search for all code blocks like this (No breaking lines sensitive)
13
+ // ```question some parameters
14
+ // some text
15
+ // ```
16
+ const questionRegex = /```question([\s\S]*?)```/g;
17
+ return markdown.replace(questionRegex, "");
18
+ };
19
+ const replaceMermaidFromMarkdown = (markdown) => {
20
+ // Search for all code blocks like this (No breaking lines sensitive)
21
+ // ```mermaid
22
+ // some graphs in mermaid syntax
23
+ // ```
24
+ const mermaidRegex = /```mermaid([\s\S]*?)```/g;
25
+ return markdown.replace(mermaidRegex, "");
26
+ };
27
+ // Download cover image from bucket
28
+ async function downloadCoverImage(bucket, courseSlug, outputDir) {
29
+ try {
30
+ const coverImagePath = path.join(outputDir, "cover.png");
31
+ const [coverBuf] = await bucket
32
+ .file(`courses/${courseSlug}/preview.png`)
33
+ .download();
34
+ fs.writeFileSync(coverImagePath, coverBuf);
35
+ console.log("Cover image downloaded:", coverImagePath);
36
+ return coverImagePath;
37
+ }
38
+ catch (error) {
39
+ console.log("No cover image found, skipping...");
40
+ return undefined;
41
+ }
42
+ }
43
+ // Convert markdown to HTML using pandoc
44
+ async function convertMarkdownToHtml(markdownPath, outputPath, learnAssetsDir) {
45
+ return new Promise((resolve, reject) => {
46
+ let stdout = "";
47
+ let stderr = "";
48
+ // Process markdown content to fix image paths
49
+ let markdownContent = fs.readFileSync(markdownPath, "utf-8");
50
+ if (learnAssetsDir && fs.existsSync(learnAssetsDir)) {
51
+ // Find all image references in markdown
52
+ const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g;
53
+ let match;
54
+ let imageCount = 0;
55
+ while ((match = imageRegex.exec(markdownContent)) !== null) {
56
+ const [fullMatch, altText, imagePath] = match;
57
+ // Check if it's a relative path starting with /learn/assets/
58
+ if (imagePath.startsWith("/.learn/assets/")) {
59
+ const imageName = path.basename(imagePath);
60
+ const absoluteImagePath = path.join(learnAssetsDir, imageName);
61
+ console.log(`📸 Looking for image: ${imageName}`);
62
+ console.log(`📁 Learn assets dir: ${learnAssetsDir}`);
63
+ console.log(`📁 Absolute path: ${absoluteImagePath}`);
64
+ console.log(`📁 Path exists: ${fs.existsSync(absoluteImagePath)}`);
65
+ if (fs.existsSync(absoluteImagePath)) {
66
+ // Use absolute path for the image
67
+ console.log(`✅ Found image, replacing path: ${imagePath} -> ${absoluteImagePath}`);
68
+ markdownContent = markdownContent.replace(fullMatch, `![${altText}](${absoluteImagePath})`);
69
+ imageCount++;
70
+ }
71
+ else {
72
+ console.log(`❌ Image not found: ${absoluteImagePath}`);
73
+ // List files in the assets directory for debugging
74
+ if (fs.existsSync(learnAssetsDir)) {
75
+ const files = fs.readdirSync(learnAssetsDir);
76
+ console.log(`📁 Files in assets directory: ${files.join(", ")}`);
77
+ }
78
+ else {
79
+ console.log(`❌ Assets directory does not exist: ${learnAssetsDir}`);
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ markdownContent = replaceQuestionsFromMarkdown(markdownContent);
86
+ markdownContent = replaceMermaidFromMarkdown(markdownContent);
87
+ // Write processed markdown to a temporary file
88
+ const tempMarkdownPath = markdownPath + ".processed";
89
+ fs.writeFileSync(tempMarkdownPath, markdownContent, "utf-8");
90
+ const pandocArgs = [
91
+ tempMarkdownPath,
92
+ "-o",
93
+ outputPath,
94
+ "--from",
95
+ "markdown",
96
+ "--to",
97
+ "html",
98
+ "--standalone",
99
+ "--css",
100
+ path.join(__dirname, "../templates/epub/epub.css"),
101
+ ];
102
+ const pandoc = (0, child_process_1.spawn)("pandoc", pandocArgs);
103
+ pandoc.stdout.on("data", (data) => {
104
+ stdout += data.toString();
105
+ });
106
+ pandoc.stderr.on("data", (data) => {
107
+ stderr += data.toString();
108
+ });
109
+ pandoc.on("close", (code) => {
110
+ // Clean up temporary file
111
+ // if (fs.existsSync(tempMarkdownPath)) {
112
+ // fs.unlinkSync(tempMarkdownPath);
113
+ // }
114
+ if (code === 0) {
115
+ console.log("Successfully converted:", markdownPath, "->", outputPath);
116
+ resolve();
117
+ }
118
+ else {
119
+ const errorMessage = `Pandoc process exited with code ${code}\n\nSTDOUT:\n${stdout}\n\nSTDERR:\n${stderr}`;
120
+ console.error("Pandoc Error Details:", errorMessage);
121
+ reject(new Error(errorMessage));
122
+ }
123
+ });
124
+ pandoc.on("error", (err) => {
125
+ console.error("Pandoc spawn error:", err);
126
+ reject(err);
127
+ });
128
+ });
129
+ }
130
+ // Generate EPUB using pandoc
131
+ async function generateEpub(htmlFiles, outputPath, metadata, epubMetadata, coverImagePath) {
132
+ return new Promise((resolve, reject) => {
133
+ var _a;
134
+ let stdout = "";
135
+ let stderr = "";
136
+ const yamlPath = path.join(path.dirname(outputPath), "metadata.yaml");
137
+ const escapeYaml = (str) => {
138
+ if (!str)
139
+ return "";
140
+ return str.replace(/"/g, '\\"').replace(/\n/g, "\\n");
141
+ };
142
+ const yamlContent = `---
143
+ title: "${epubMetadata.title}"
144
+ creator: "${epubMetadata.creator}"
145
+ publisher: "${epubMetadata.publisher}"
146
+ rights: "${epubMetadata.rights}"
147
+ lang: "${epubMetadata.lang}"
148
+ description: "${escapeYaml(metadata.description || "")}"
149
+ subject: "${((_a = metadata.technologies) === null || _a === void 0 ? void 0 : _a.join(", ")) || "Programming"}"
150
+ ---`;
151
+ fs.writeFileSync(yamlPath, yamlContent, "utf-8");
152
+ // Include all HTML files in the EPUB
153
+ const pandocArgs = [
154
+ ...htmlFiles, // All HTML files
155
+ "-o",
156
+ outputPath,
157
+ "--from",
158
+ "html",
159
+ "--to",
160
+ "epub",
161
+ "--metadata-file",
162
+ yamlPath,
163
+ "--css",
164
+ path.join(__dirname, "../templates/epub/epub.css"),
165
+ ];
166
+ // Add cover image if available - use absolute path
167
+ if (coverImagePath) {
168
+ pandocArgs.push("--epub-cover-image", coverImagePath);
169
+ }
170
+ console.log("🔧 Executing pandoc EPUB command:");
171
+ console.log("Command:", "pandoc", pandocArgs.join(" "));
172
+ const pandoc = (0, child_process_1.spawn)("pandoc", pandocArgs);
173
+ pandoc.stdout.on("data", (data) => {
174
+ const output = data.toString();
175
+ stdout += output;
176
+ console.log("📤 Pandoc STDOUT:", output);
177
+ });
178
+ pandoc.stderr.on("data", (data) => {
179
+ const output = data.toString();
180
+ stderr += output;
181
+ console.log("⚠️ Pandoc STDERR:", output);
182
+ });
183
+ pandoc.on("close", (code) => {
184
+ console.log(`🏁 Pandoc process finished with exit code: ${code}`);
185
+ if (code === 0) {
186
+ console.log("✅ EPUB generation successful!");
187
+ resolve();
188
+ }
189
+ else {
190
+ const errorMessage = `Pandoc process exited with code ${code}\n\nSTDOUT:\n${stdout}\n\nSTDERR:\n${stderr}`;
191
+ console.error("❌ Pandoc Error Details:", errorMessage);
192
+ reject(new Error(errorMessage));
193
+ }
194
+ });
195
+ pandoc.on("error", (err) => {
196
+ console.error("❌ Pandoc spawn error:", err);
197
+ reject(err);
198
+ });
199
+ });
200
+ }
201
+ // Process exercises and convert to HTML
202
+ async function processExercises(exercisesDir, outputDir, language = "en", learnAssetsDir) {
203
+ const htmlFiles = [];
204
+ console.log("Processing exercises directory:", exercisesDir);
205
+ console.log("Output directory:", outputDir);
206
+ console.log("Language:", language);
207
+ console.log("Learn assets directory:", learnAssetsDir);
208
+ if (!fs.existsSync(exercisesDir)) {
209
+ console.log("Exercises directory does not exist:", exercisesDir);
210
+ return htmlFiles;
211
+ }
212
+ console.log("Exercises directory exists, scanning for files...");
213
+ const processDirectory = async (dir, relativePath = "") => {
214
+ console.log(`🔍 Processing directory: ${dir} (relative: ${relativePath})`);
215
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
216
+ console.log(`📁 Found ${entries.length} entries in ${dir}:`, entries.map((e) => e.name));
217
+ // Sort entries to prioritize README files first
218
+ entries.sort((a, b) => {
219
+ const aName = a.name.toLowerCase();
220
+ const bName = b.name.toLowerCase();
221
+ // Prioritize README files
222
+ if (aName === "readme.md" && bName !== "readme.md")
223
+ return -1;
224
+ if (bName === "readme.md" && aName !== "readme.md")
225
+ return 1;
226
+ return aName.localeCompare(bName);
227
+ });
228
+ for (const entry of entries) {
229
+ const fullPath = path.join(dir, entry.name);
230
+ const relativeFilePath = path.join(relativePath, entry.name);
231
+ if (entry.isDirectory()) {
232
+ console.log("Processing subdirectory:", relativeFilePath);
233
+ // esling-disable-next-line
234
+ await processDirectory(fullPath, relativeFilePath);
235
+ }
236
+ else if (entry.name.endsWith(".md") ||
237
+ entry.name.endsWith(".markdown")) {
238
+ // Apply language filtering for all markdown files
239
+ const baseName = entry.name.replace(/\.(md|markdown)$/, "");
240
+ if (language === "en") {
241
+ // For English: only include README.md and files without language suffixes
242
+ if (entry.name.toLowerCase() === "readme.md") {
243
+ console.log(`✅ Including English README: ${relativeFilePath}`);
244
+ }
245
+ else if (baseName.includes(".") &&
246
+ /\.(es|fr|de|it|pt|ja|ko|zh|ar|ru)$/i.test(baseName)) {
247
+ console.log(`❌ Skipping language-specific file for English: ${relativeFilePath}`);
248
+ continue;
249
+ }
250
+ else {
251
+ console.log(`✅ Including English file: ${relativeFilePath}`);
252
+ }
253
+ }
254
+ else {
255
+ // For other languages: only include files with the correct language suffix
256
+ if (entry.name.toLowerCase() === "readme.md") {
257
+ console.log(`❌ Skipping English README for language ${language}: ${relativeFilePath}`);
258
+ continue;
259
+ }
260
+ else if (!baseName.endsWith(`.${language}`)) {
261
+ console.log(`❌ Skipping file with different language: ${relativeFilePath}`);
262
+ continue;
263
+ }
264
+ else {
265
+ console.log(`✅ Including ${language} file: ${relativeFilePath}`);
266
+ }
267
+ }
268
+ // Convert markdown to HTML
269
+ console.log("Converting markdown file:", relativeFilePath);
270
+ // const htmlFileName = entry.name.replace(/\.(md|markdown)$/, ".html");
271
+ const htmlPath = path.join(outputDir, relativeFilePath.replace(/\.(md|markdown)$/, ".html"));
272
+ console.log("HTML output path:", htmlPath);
273
+ mkdirp.sync(path.dirname(htmlPath));
274
+ // esling-disable-next-line
275
+ await convertMarkdownToHtml(fullPath, htmlPath, learnAssetsDir);
276
+ htmlFiles.push(htmlPath);
277
+ console.log("Successfully converted:", relativeFilePath, "->", htmlPath);
278
+ }
279
+ else if (entry.name.endsWith(".html")) {
280
+ // Copy HTML files as-is
281
+ console.log("Copying HTML file:", relativeFilePath);
282
+ const destPath = path.join(outputDir, relativeFilePath);
283
+ mkdirp.sync(path.dirname(destPath));
284
+ // esling-disable-next-line
285
+ fs.copyFileSync(fullPath, destPath);
286
+ htmlFiles.push(destPath);
287
+ console.log("Successfully copied:", relativeFilePath, "->", destPath);
288
+ }
289
+ else {
290
+ console.log("Skipping file:", relativeFilePath, "(not markdown or HTML)");
291
+ }
292
+ }
293
+ };
294
+ await processDirectory(exercisesDir);
295
+ return htmlFiles;
296
+ }
297
+ const titlelify = (title) => {
298
+ return title.replace(/[-_]/g, " ").replace(/\b\w/g, (l) => l.toUpperCase());
299
+ };
300
+ // Read sidebar.json to get exercise titles
301
+ function readSidebarData(learnDir) {
302
+ try {
303
+ const sidebarPath = path.join(learnDir, "sidebar.json");
304
+ if (fs.existsSync(sidebarPath)) {
305
+ const sidebarContent = fs.readFileSync(sidebarPath, "utf-8");
306
+ return JSON.parse(sidebarContent);
307
+ }
308
+ }
309
+ catch (error) {
310
+ console.log("⚠️ Could not read sidebar.json:", error);
311
+ }
312
+ return null;
313
+ }
314
+ // Create EPUB table of contents
315
+ function createTocHtml(htmlFiles, metadata, sidebarData, language) {
316
+ let tocContent = `
317
+ <!DOCTYPE html>
318
+ <html>
319
+ <head>
320
+ <meta charset="UTF-8">
321
+ <title>Table of Contents - ${metadata.title}</title>
322
+ <link rel="stylesheet" href="epub.css">
323
+ </head>
324
+ <body>
325
+ <h1>${metadata.title}</h1>
326
+ <nav id="toc">
327
+ <h2>Table of Contents</h2>
328
+ <ol>
329
+ <li><a href="main.html">Course Overview</a></li>
330
+ `;
331
+ htmlFiles.forEach((file) => {
332
+ const fileName = path.basename(file, ".html");
333
+ const relativePath = fileName + ".html";
334
+ // Get the parent directory name (exercise slug) to look up in sidebar
335
+ const parentDir = path.basename(path.dirname(file));
336
+ // Try to get the title from sidebar.json using the parent directory name
337
+ let displayName = fileName;
338
+ if (sidebarData && sidebarData[parentDir]) {
339
+ console.log("🔍 Found title in sidebar.json:", sidebarData[parentDir], "; language: ", language);
340
+ // Get the title for the current language, fallback to English, then to the key itself
341
+ displayName =
342
+ sidebarData[parentDir][language] ||
343
+ sidebarData[parentDir]["en"] ||
344
+ titlelify(parentDir);
345
+ }
346
+ else {
347
+ console.log("🔍 No title found in sidebar.json for parent directory:", parentDir);
348
+ // Fallback to titlelify if not found in sidebar
349
+ displayName = titlelify(parentDir);
350
+ }
351
+ tocContent += ` <li><a href="${relativePath}">${displayName}</a></li>\n`;
352
+ });
353
+ tocContent += `
354
+ </ol>
355
+ </nav>
356
+ </body>
357
+ </html>`;
358
+ return tocContent;
359
+ }
360
+ async function exportToEpub(options, epubMetadata) {
361
+ var _a, _b, _c;
362
+ const { courseSlug, bucket, outDir, language = "en" } = options;
363
+ console.log("🚀 Starting EPUB export for course:", courseSlug);
364
+ console.log("📁 Output directory:", outDir);
365
+ console.log("🌍 Language:", language);
366
+ console.log("📋 EPUB Metadata:", epubMetadata);
367
+ // 1. Create temporary folder
368
+ const tmpName = (0, uuid_1.v4)();
369
+ const epubOutDir = path.join(outDir, tmpName);
370
+ rimraf.sync(epubOutDir);
371
+ mkdirp.sync(epubOutDir);
372
+ console.log("Created temporary directory:", epubOutDir);
373
+ // 2. Create EPUB template directory
374
+ const epubTemplateDir = path.join(epubOutDir, "template");
375
+ mkdirp.sync(epubTemplateDir);
376
+ // 3. Download exercises, .learn, and cover image from bucket
377
+ console.log("📥 Downloading exercises...");
378
+ await (0, shared_1.downloadS3Folder)(bucket, `courses/${courseSlug}/exercises/`, path.join(epubOutDir, "exercises"));
379
+ console.log("✅ Exercises downloaded successfully");
380
+ console.log("📥 Downloading .learn files...");
381
+ await (0, shared_1.downloadS3Folder)(bucket, `courses/${courseSlug}/.learn/`, path.join(epubOutDir, "learn"));
382
+ console.log("✅ .learn files downloaded successfully");
383
+ console.log("📥 Downloading cover image...");
384
+ const coverImagePath = await downloadCoverImage(bucket, courseSlug, epubOutDir);
385
+ console.log("✅ Cover image download completed:", coverImagePath ? "Found" : "Not found");
386
+ // 4. Read learn.json for course info
387
+ console.log("Reading course metadata...");
388
+ const learnJson = await (0, shared_1.getCourseMetadata)(bucket, courseSlug);
389
+ const metadata = {
390
+ title: ((_a = learnJson.title) === null || _a === void 0 ? void 0 : _a[epubMetadata.lang]) || courseSlug,
391
+ description: ((_b = learnJson.description) === null || _b === void 0 ? void 0 : _b[epubMetadata.lang]) || learnJson.description,
392
+ language: epubMetadata.lang,
393
+ technologies: learnJson.technologies || [],
394
+ difficulty: learnJson.difficulty || "beginner",
395
+ };
396
+ console.log("Course metadata:", metadata);
397
+ // 5. Process exercises and convert to HTML
398
+ console.log("🔄 Processing exercises and converting to HTML...");
399
+ // First, let's see what files were downloaded
400
+ const exercisesPath = path.join(epubOutDir, "exercises");
401
+ console.log("📂 Exercises directory contents:");
402
+ if (fs.existsSync(exercisesPath)) {
403
+ const exerciseDirs = fs.readdirSync(exercisesPath, { withFileTypes: true });
404
+ console.log(`Found ${exerciseDirs.length} exercise directories:`);
405
+ exerciseDirs.forEach((dir) => {
406
+ if (dir.isDirectory()) {
407
+ const dirPath = path.join(exercisesPath, dir.name);
408
+ const files = fs.readdirSync(dirPath);
409
+ console.log(` 📁 ${dir.name}: ${files.length} files - ${files.join(", ")}`);
410
+ }
411
+ });
412
+ }
413
+ else {
414
+ console.log("❌ Exercises directory does not exist!");
415
+ }
416
+ const htmlFiles = await processExercises(path.join(epubOutDir, "exercises"), path.join(epubOutDir, "html"), language, path.join(epubOutDir, "learn", "assets"));
417
+ // 6. Read sidebar data and create table of contents
418
+ const sidebarData = readSidebarData(path.join(epubOutDir, "learn"));
419
+ console.log("📋 Sidebar data loaded:", sidebarData ? "Success" : "Not found");
420
+ const tocHtml = createTocHtml(htmlFiles, metadata, sidebarData, language);
421
+ const tocPath = path.join(epubOutDir, "html", "toc.html");
422
+ mkdirp.sync(path.dirname(tocPath));
423
+ fs.writeFileSync(tocPath, tocHtml, "utf-8");
424
+ // 7. Create main content file
425
+ const mainContent = `
426
+ <!DOCTYPE html>
427
+ <html>
428
+ <head>
429
+ <meta charset="UTF-8">
430
+ <title>${metadata.title}</title>
431
+ <link rel="stylesheet" href="epub.css">
432
+ </head>
433
+ <body>
434
+ <h1>${metadata.title}</h1>
435
+ <p>${metadata.description || ""}</p>
436
+ <p><strong>Technologies:</strong> ${((_c = metadata.technologies) === null || _c === void 0 ? void 0 : _c.join(", ")) || "Programming"}</p>
437
+ <p><strong>Difficulty:</strong> ${metadata.difficulty}</p>
438
+ <p><strong>Language:</strong> ${language}</p>
439
+ <p><a href="toc.html">Go to Table of Contents</a></p>
440
+ </body>
441
+ </html>`;
442
+ const mainContentPath = path.join(epubOutDir, "html", "main.html");
443
+ fs.writeFileSync(mainContentPath, mainContent, "utf-8");
444
+ // 8. Prepare all HTML files for EPUB generation
445
+ const allHtmlFiles = [mainContentPath, tocPath, ...htmlFiles];
446
+ // 9. Generate EPUB using pandoc
447
+ console.log("📖 Generating EPUB file...");
448
+ const epubPath = path.join(epubOutDir, `${courseSlug}.epub`);
449
+ await generateEpub(allHtmlFiles, epubPath, metadata, epubMetadata, coverImagePath);
450
+ console.log("EPUB generated successfully:", epubPath);
451
+ // Clean up temporary files
452
+ console.log("Cleaning up temporary files...");
453
+ rimraf.sync(path.join(epubOutDir, "html"));
454
+ rimraf.sync(path.join(epubOutDir, "exercises"));
455
+ rimraf.sync(path.join(epubOutDir, "learn"));
456
+ console.log("EPUB export completed successfully");
457
+ return epubPath;
458
+ }
@@ -0,0 +1,3 @@
1
+ export { exportToScorm } from "./scorm";
2
+ export { exportToEpub } from "./epub";
3
+ export { ExportFormat, ExportOptions, EpubMetadata } from "./types";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportToEpub = exports.exportToScorm = void 0;
4
+ var scorm_1 = require("./scorm");
5
+ Object.defineProperty(exports, "exportToScorm", { enumerable: true, get: function () { return scorm_1.exportToScorm; } });
6
+ var epub_1 = require("./epub");
7
+ Object.defineProperty(exports, "exportToEpub", { enumerable: true, get: function () { return epub_1.exportToEpub; } });
@@ -0,0 +1,2 @@
1
+ import { ExportOptions } from "./types";
2
+ export declare function exportToScorm(options: ExportOptions): Promise<string>;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exportToScorm = exportToScorm;
4
+ const path = require("path");
5
+ const fs = require("fs");
6
+ const archiver = require("archiver");
7
+ const mkdirp = require("mkdirp");
8
+ const rimraf = require("rimraf");
9
+ const uuid_1 = require("uuid");
10
+ const shared_1 = require("./shared");
11
+ async function exportToScorm(options) {
12
+ var _a, _b;
13
+ const { courseSlug, bucket, outDir } = options;
14
+ // 1. Create temporary folder
15
+ const tmpName = (0, uuid_1.v4)();
16
+ const scormOutDir = path.join(outDir, tmpName);
17
+ rimraf.sync(scormOutDir);
18
+ mkdirp.sync(scormOutDir);
19
+ // 2. Copy SCORM template
20
+ const scormTpl = path.join(__dirname, "../templates/scorm");
21
+ (0, shared_1.copyDir)(scormTpl, scormOutDir);
22
+ // Paths
23
+ const appDir = path.resolve(__dirname, "../../ui/_app");
24
+ const configDir = path.join(scormOutDir, "config");
25
+ // Check if _app exists and has content
26
+ if (fs.existsSync(appDir) && fs.readdirSync(appDir).length > 0) {
27
+ // Copy app.css and app.js to config/
28
+ for (const file of ["app.css", "app.js"]) {
29
+ const src = path.join(appDir, file);
30
+ const dest = path.join(configDir, file);
31
+ if (fs.existsSync(src)) {
32
+ fs.copyFileSync(src, dest);
33
+ }
34
+ }
35
+ // Copy logo-192.png and logo-512.png to SCORM build root
36
+ for (const file of ["logo-192.png", "logo-512.png"]) {
37
+ const src = path.join(appDir, file);
38
+ const dest = path.join(scormOutDir, file);
39
+ if (fs.existsSync(src)) {
40
+ fs.copyFileSync(src, dest);
41
+ }
42
+ }
43
+ }
44
+ // 3. Download exercises and .learn from bucket
45
+ await (0, shared_1.downloadS3Folder)(bucket, `courses/${courseSlug}/exercises/`, path.join(scormOutDir, "exercises"));
46
+ await (0, shared_1.downloadS3Folder)(bucket, `courses/${courseSlug}/.learn/`, path.join(scormOutDir, ".learn"));
47
+ // 4. Read learn.json for course info
48
+ const learnJson = await (0, shared_1.getCourseMetadata)(bucket, courseSlug);
49
+ // 5. Replace imsmanifest.xml
50
+ const manifestPath = path.join(scormOutDir, "imsmanifest.xml");
51
+ let manifest = fs.readFileSync(manifestPath, "utf-8");
52
+ manifest = manifest.replace(/{{organization_name}}/g, "FourGeeksAcademy");
53
+ manifest = manifest.replace(/{{course_title}}/g, ((_a = learnJson.title) === null || _a === void 0 ? void 0 : _a.en) || learnJson.title || courseSlug);
54
+ // Generate exercises list
55
+ const exercisesList = (0, shared_1.getFilesList)(path.join(scormOutDir, "exercises"), "exercises").join("\n ");
56
+ manifest = manifest.replace(/{{exercises_list}}/g, exercisesList);
57
+ // Generate images list (optional, if you have assets)
58
+ let imagesList = "";
59
+ const assetsDir = path.join(scormOutDir, ".learn", "assets");
60
+ if (fs.existsSync(assetsDir)) {
61
+ imagesList = (0, shared_1.getFilesList)(assetsDir, ".learn/assets").join("\n ");
62
+ }
63
+ manifest = manifest.replace(/{{images_list}}/g, imagesList);
64
+ fs.writeFileSync(manifestPath, manifest, "utf-8");
65
+ // 6. Replace title in config/index.html
66
+ const configIndexPath = path.join(scormOutDir, "config", "index.html");
67
+ let indexHtml = fs.readFileSync(configIndexPath, "utf-8");
68
+ indexHtml = indexHtml.replace(/{{title}}/g, ((_b = learnJson.title) === null || _b === void 0 ? void 0 : _b.en) || learnJson.title || courseSlug);
69
+ fs.writeFileSync(configIndexPath, indexHtml, "utf-8");
70
+ // 7. Compress as ZIP
71
+ const zipPath = `${scormOutDir}.zip`;
72
+ await new Promise((resolve, reject) => {
73
+ const output = fs.createWriteStream(zipPath);
74
+ const archive = archiver("zip", { zlib: { level: 9 } });
75
+ output.on("close", resolve);
76
+ archive.on("error", reject);
77
+ archive.pipe(output);
78
+ archive.directory(scormOutDir, false);
79
+ archive.finalize();
80
+ });
81
+ // Clean up temporary directory
82
+ rimraf.sync(scormOutDir);
83
+ return zipPath;
84
+ }
@@ -0,0 +1,4 @@
1
+ export declare function copyDir(src: string, dest: string): void;
2
+ export declare function downloadS3Folder(bucket: any, prefix: string, localPath: string): Promise<void>;
3
+ export declare function getFilesList(folder: string, base: string): string[];
4
+ export declare function getCourseMetadata(bucket: any, courseSlug: string): Promise<any>;