@learnpack/learnpack 5.0.275 → 5.0.277

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 (95) hide show
  1. package/README.md +409 -409
  2. package/lib/commands/audit.js +15 -15
  3. package/lib/commands/breakToken.js +19 -19
  4. package/lib/commands/clean.js +3 -3
  5. package/lib/commands/init.js +41 -41
  6. package/lib/commands/logout.js +3 -3
  7. package/lib/commands/publish.js +5 -10
  8. package/lib/commands/serve.js +55 -2
  9. package/lib/creatorDist/assets/index-BfLyIQVh.js +10343 -10224
  10. package/lib/managers/config/index.js +77 -77
  11. package/lib/utils/api.d.ts +1 -1
  12. package/lib/utils/api.js +12 -9
  13. package/lib/utils/creatorUtilities.js +14 -14
  14. package/lib/utils/export/epub.d.ts +2 -0
  15. package/lib/utils/export/epub.js +298 -0
  16. package/lib/utils/export/index.d.ts +3 -0
  17. package/lib/utils/export/index.js +7 -0
  18. package/lib/utils/export/scorm.d.ts +2 -0
  19. package/lib/utils/export/scorm.js +84 -0
  20. package/lib/utils/export/shared.d.ts +4 -0
  21. package/lib/utils/export/shared.js +61 -0
  22. package/lib/utils/export/types.d.ts +15 -0
  23. package/lib/utils/export/types.js +2 -0
  24. package/package.json +2 -1
  25. package/src/commands/audit.ts +487 -487
  26. package/src/commands/breakToken.ts +67 -67
  27. package/src/commands/clean.ts +30 -30
  28. package/src/commands/init.ts +650 -650
  29. package/src/commands/logout.ts +38 -38
  30. package/src/commands/publish.ts +20 -25
  31. package/src/commands/serve.ts +69 -4
  32. package/src/commands/start.ts +333 -333
  33. package/src/commands/translate.ts +123 -123
  34. package/src/creator/README.md +54 -54
  35. package/src/creator/eslint.config.js +7 -7
  36. package/src/creator/src/components/syllabus/ContentIndex.tsx +312 -312
  37. package/src/creator/src/i18n.ts +28 -28
  38. package/src/creator/src/index.css +217 -217
  39. package/src/creator/src/locales/en.json +126 -126
  40. package/src/creator/src/locales/es.json +126 -126
  41. package/src/creator/src/utils/configTypes.ts +122 -122
  42. package/src/creator/src/utils/constants.ts +13 -13
  43. package/src/creator/src/utils/creatorUtils.ts +46 -46
  44. package/src/creator/src/utils/eventBus.ts +2 -2
  45. package/src/creator/src/utils/lib.ts +468 -468
  46. package/src/creator/src/utils/socket.ts +61 -61
  47. package/src/creator/src/utils/store.ts +222 -222
  48. package/src/creator/src/vite-env.d.ts +1 -1
  49. package/src/creator/vite.config.ts +13 -13
  50. package/src/creatorDist/assets/index-BfLyIQVh.js +10343 -10224
  51. package/src/managers/config/defaults.ts +49 -49
  52. package/src/managers/config/exercise.ts +364 -364
  53. package/src/managers/config/index.ts +775 -775
  54. package/src/managers/file.ts +236 -236
  55. package/src/managers/server/routes.ts +554 -554
  56. package/src/managers/session.ts +182 -182
  57. package/src/managers/telemetry.ts +188 -188
  58. package/src/models/action.ts +13 -13
  59. package/src/models/config-manager.ts +28 -28
  60. package/src/models/config.ts +106 -106
  61. package/src/models/creator.ts +47 -47
  62. package/src/models/exercise-obj.ts +30 -30
  63. package/src/models/session.ts +39 -39
  64. package/src/models/socket.ts +61 -61
  65. package/src/models/status.ts +16 -16
  66. package/src/ui/_app/app.css +1 -1
  67. package/src/ui/_app/app.js +400 -397
  68. package/src/ui/app.tar.gz +0 -0
  69. package/src/utils/BaseCommand.ts +56 -56
  70. package/src/utils/api.ts +53 -39
  71. package/src/utils/audit.ts +392 -392
  72. package/src/utils/checkNotInstalled.ts +267 -267
  73. package/src/utils/configBuilder.ts +82 -82
  74. package/src/utils/convertCreds.js +34 -34
  75. package/src/utils/creatorUtilities.ts +504 -504
  76. package/src/utils/export/README.md +178 -0
  77. package/src/utils/export/epub.ts +400 -0
  78. package/src/utils/export/index.ts +3 -0
  79. package/src/utils/export/scorm.ts +121 -0
  80. package/src/utils/export/shared.ts +61 -0
  81. package/src/utils/export/types.ts +17 -0
  82. package/src/utils/incrementVersion.js +74 -74
  83. package/src/utils/misc.ts +58 -58
  84. package/src/utils/rigoActions.ts +500 -500
  85. package/src/utils/sidebarGenerator.ts +195 -195
  86. package/src/utils/templates/epub/epub.css +133 -0
  87. package/src/utils/templates/isolated/exercises/01-hello-world/README.es.md +26 -26
  88. package/src/utils/templates/isolated/exercises/01-hello-world/README.md +26 -26
  89. package/src/utils/templates/scorm/adlcp_rootv1p2.xsd +110 -0
  90. package/src/utils/templates/scorm/config/api.js +175 -0
  91. package/src/utils/templates/scorm/config/index.html +210 -0
  92. package/src/utils/templates/scorm/ims_xml.xsd +1 -0
  93. package/src/utils/templates/scorm/imscp_rootv1p1p2.xsd +345 -0
  94. package/src/utils/templates/scorm/imsmanifest.xml +38 -0
  95. package/src/utils/templates/scorm/imsmd_rootv1p2p1.xsd +573 -0
@@ -1,122 +1,122 @@
1
- export interface IFile {
2
- path: string
3
- name: string
4
- hidden: boolean
5
- }
6
-
7
- export interface IExercise {
8
- position?: number
9
- files: Array<IFile>
10
- slug: string
11
- path: string
12
- done: boolean
13
- language?: string | null
14
- entry?: string | null
15
- graded?: boolean
16
- translations?: { [key: string]: string }
17
- title: string
18
- }
19
-
20
- export type TGrading = "isolated" | "incremental" | "no-grading"
21
-
22
- export type TMode = "preview" | "extension"
23
-
24
- export type TConfigAction = "test" | "build" | "tutorial" | "reset" | "generate"
25
-
26
- export type TConfigObjAttributes = "config" | "exercises" | "grading"
27
-
28
- export type TCompiler =
29
- | "webpack"
30
- | "vanillajs"
31
- | "react"
32
- | "html"
33
- | "node"
34
- | "python"
35
- | "css"
36
-
37
- export interface IConfigPath {
38
- base: string
39
- }
40
-
41
- export interface IEditor {
42
- mode?: TMode
43
- version?: string
44
- agent?: TAgent
45
- hideTerminal?: boolean
46
- }
47
-
48
- export interface TEntries {
49
- python3?: string
50
- html?: string
51
- node?: string
52
- react?: string
53
- java?: string
54
- }
55
-
56
- export interface IConfig {
57
- // os: string
58
- // port?: string
59
- // repository?: string
60
- description?: string
61
- slug?: string
62
- // dirPath: string
63
- // preview?: string // Picture thumbnail
64
- // entries: TEntries
65
- grading: TGrading
66
- // configPath: string
67
- translations: Array<string>
68
- // outputPath?: string
69
- // editor: IEditor
70
- language: string
71
- title: string
72
- duration: number
73
- difficulty?: string
74
- exercisesPath: string
75
- disableGrading: boolean // TODO: Deprecate
76
- actions: Array<string> // TODO: Deprecate
77
- autoPlay: boolean
78
- projectType?: string
79
- // TODO: nameExerciseValidation
80
- contact?: string
81
- disabledActions?: Array<TConfigAction>
82
- compiler: TCompiler
83
- compilers: Array<TCompiler>
84
- publicPath: string
85
- publicUrl?: string
86
- bugsLink?: string
87
- videoSolutions?: boolean
88
- skills: Array<string>
89
- // telemetry?: TTelemetryUrls
90
- variables?: TVariables
91
- suggestions: TSuggestions
92
- warnings: TWarnings
93
- runHook: (...agrs: Array<any>) => void
94
- testingFinishedCallback: (arg: any | undefined) => void
95
- }
96
- export type TAgent = "os" | "vscode" | null
97
-
98
- export type TSuggestions = {
99
- agent: TAgent
100
- }
101
-
102
- type TWarnings = {
103
- agent?: string
104
- extension?: string
105
- }
106
-
107
- type TVariable = {
108
- type: "command" | "string"
109
- source: string
110
- }
111
- type TVariables = {
112
- [key: string]: TVariable | string
113
- }
114
-
115
- export interface IConfigObj {
116
- session?: number
117
- currentExercise?: any
118
- config?: IConfig
119
- exercises?: Array<IExercise>
120
- confPath?: IConfigPath
121
- address?: string // Maybe
122
- }
1
+ export interface IFile {
2
+ path: string
3
+ name: string
4
+ hidden: boolean
5
+ }
6
+
7
+ export interface IExercise {
8
+ position?: number
9
+ files: Array<IFile>
10
+ slug: string
11
+ path: string
12
+ done: boolean
13
+ language?: string | null
14
+ entry?: string | null
15
+ graded?: boolean
16
+ translations?: { [key: string]: string }
17
+ title: string
18
+ }
19
+
20
+ export type TGrading = "isolated" | "incremental" | "no-grading"
21
+
22
+ export type TMode = "preview" | "extension"
23
+
24
+ export type TConfigAction = "test" | "build" | "tutorial" | "reset" | "generate"
25
+
26
+ export type TConfigObjAttributes = "config" | "exercises" | "grading"
27
+
28
+ export type TCompiler =
29
+ | "webpack"
30
+ | "vanillajs"
31
+ | "react"
32
+ | "html"
33
+ | "node"
34
+ | "python"
35
+ | "css"
36
+
37
+ export interface IConfigPath {
38
+ base: string
39
+ }
40
+
41
+ export interface IEditor {
42
+ mode?: TMode
43
+ version?: string
44
+ agent?: TAgent
45
+ hideTerminal?: boolean
46
+ }
47
+
48
+ export interface TEntries {
49
+ python3?: string
50
+ html?: string
51
+ node?: string
52
+ react?: string
53
+ java?: string
54
+ }
55
+
56
+ export interface IConfig {
57
+ // os: string
58
+ // port?: string
59
+ // repository?: string
60
+ description?: string
61
+ slug?: string
62
+ // dirPath: string
63
+ // preview?: string // Picture thumbnail
64
+ // entries: TEntries
65
+ grading: TGrading
66
+ // configPath: string
67
+ translations: Array<string>
68
+ // outputPath?: string
69
+ // editor: IEditor
70
+ language: string
71
+ title: string
72
+ duration: number
73
+ difficulty?: string
74
+ exercisesPath: string
75
+ disableGrading: boolean // TODO: Deprecate
76
+ actions: Array<string> // TODO: Deprecate
77
+ autoPlay: boolean
78
+ projectType?: string
79
+ // TODO: nameExerciseValidation
80
+ contact?: string
81
+ disabledActions?: Array<TConfigAction>
82
+ compiler: TCompiler
83
+ compilers: Array<TCompiler>
84
+ publicPath: string
85
+ publicUrl?: string
86
+ bugsLink?: string
87
+ videoSolutions?: boolean
88
+ skills: Array<string>
89
+ // telemetry?: TTelemetryUrls
90
+ variables?: TVariables
91
+ suggestions: TSuggestions
92
+ warnings: TWarnings
93
+ runHook: (...agrs: Array<any>) => void
94
+ testingFinishedCallback: (arg: any | undefined) => void
95
+ }
96
+ export type TAgent = "os" | "vscode" | null
97
+
98
+ export type TSuggestions = {
99
+ agent: TAgent
100
+ }
101
+
102
+ type TWarnings = {
103
+ agent?: string
104
+ extension?: string
105
+ }
106
+
107
+ type TVariable = {
108
+ type: "command" | "string"
109
+ source: string
110
+ }
111
+ type TVariables = {
112
+ [key: string]: TVariable | string
113
+ }
114
+
115
+ export interface IConfigObj {
116
+ session?: number
117
+ currentExercise?: any
118
+ config?: IConfig
119
+ exercises?: Array<IExercise>
120
+ confPath?: IConfigPath
121
+ address?: string // Maybe
122
+ }
@@ -1,13 +1,13 @@
1
- export const DEV_MODE = false
2
-
3
- export const RIGOBOT_HOST = DEV_MODE
4
- ? "https://rigobot-test-cca7d841c9d8.herokuapp.com"
5
- : // "https://8000-charlytoc-rigobot-bmwdeam7cev.ws-us120.gitpod.io"
6
- "https://rigobot.herokuapp.com"
7
-
8
- export const BREATHECODE_HOST = DEV_MODE
9
- ? "https://breathecode-test.herokuapp.com"
10
- : "https://breathecode.herokuapp.com"
11
-
12
- export const RIGO_FLOAT_GIF =
13
- "https://raw.githubusercontent.com/learnpack/ide/20ed3f4c3ead9b33d5d6acb20154dcd93a0ec4af/public/rigo-float.gif"
1
+ export const DEV_MODE = false
2
+
3
+ export const RIGOBOT_HOST = DEV_MODE
4
+ ? "https://rigobot-test-cca7d841c9d8.herokuapp.com"
5
+ : // "https://8000-charlytoc-rigobot-bmwdeam7cev.ws-us120.gitpod.io"
6
+ "https://rigobot.herokuapp.com"
7
+
8
+ export const BREATHECODE_HOST = DEV_MODE
9
+ ? "https://breathecode-test.herokuapp.com"
10
+ : "https://breathecode.herokuapp.com"
11
+
12
+ export const RIGO_FLOAT_GIF =
13
+ "https://raw.githubusercontent.com/learnpack/ide/20ed3f4c3ead9b33d5d6acb20154dcd93a0ec4af/public/rigo-float.gif"
@@ -1,46 +1,46 @@
1
- import { eventBus } from "./eventBus"
2
- import { generateImage, getFilenameFromUrl, uploadImageToBucket } from "./lib"
3
-
4
- export const slugify = (text: string) => {
5
- return text
6
- .toString()
7
- .normalize("NFD") // Remove accents
8
- .replace(/[\u0300-\u036F]/g, "") // Remove diacritics
9
- .toLowerCase()
10
- .trim()
11
- .replace(/[^a-z0-9\s._-]/g, "") // Hyphen at the end, no escape needed
12
- .replace(/\s+/g, "-") // Replace spaces with hyphens
13
- .replace(/-+/g, "-") // Remove duplicate hyphens
14
- .replace(/^-+|-+$/g, "") // Trim hyphens from start/end
15
- }
16
-
17
- export const randomUUID = (length = 15) => {
18
- return Math.random().toString(36).substring(2, length)
19
- }
20
-
21
- export const processImage = async (
22
- tutorialDir: string,
23
- url: string,
24
- description: string,
25
- rigoToken: string
26
- ) => {
27
- try {
28
- const filename = getFilenameFromUrl(url)
29
-
30
- const imagePath = tutorialDir + "/.learn" + "/assets/" + filename
31
-
32
- eventBus.emit("course-generation", {
33
- message: `🖼️ Generating image ${imagePath}`,
34
- })
35
-
36
- const res = await generateImage(rigoToken, { prompt: description })
37
- await uploadImageToBucket(res.image_url, imagePath)
38
-
39
- eventBus.emit("course-generation", {
40
- message: `✅ Image ${imagePath} generated successfully!`,
41
- })
42
- return true
43
- } catch {
44
- return false
45
- }
46
- }
1
+ import { eventBus } from "./eventBus"
2
+ import { generateImage, getFilenameFromUrl, uploadImageToBucket } from "./lib"
3
+
4
+ export const slugify = (text: string) => {
5
+ return text
6
+ .toString()
7
+ .normalize("NFD") // Remove accents
8
+ .replace(/[\u0300-\u036F]/g, "") // Remove diacritics
9
+ .toLowerCase()
10
+ .trim()
11
+ .replace(/[^a-z0-9\s._-]/g, "") // Hyphen at the end, no escape needed
12
+ .replace(/\s+/g, "-") // Replace spaces with hyphens
13
+ .replace(/-+/g, "-") // Remove duplicate hyphens
14
+ .replace(/^-+|-+$/g, "") // Trim hyphens from start/end
15
+ }
16
+
17
+ export const randomUUID = (length = 15) => {
18
+ return Math.random().toString(36).substring(2, length)
19
+ }
20
+
21
+ export const processImage = async (
22
+ tutorialDir: string,
23
+ url: string,
24
+ description: string,
25
+ rigoToken: string
26
+ ) => {
27
+ try {
28
+ const filename = getFilenameFromUrl(url)
29
+
30
+ const imagePath = tutorialDir + "/.learn" + "/assets/" + filename
31
+
32
+ eventBus.emit("course-generation", {
33
+ message: `🖼️ Generating image ${imagePath}`,
34
+ })
35
+
36
+ const res = await generateImage(rigoToken, { prompt: description })
37
+ await uploadImageToBucket(res.image_url, imagePath)
38
+
39
+ eventBus.emit("course-generation", {
40
+ message: `✅ Image ${imagePath} generated successfully!`,
41
+ })
42
+ return true
43
+ } catch {
44
+ return false
45
+ }
46
+ }
@@ -1,2 +1,2 @@
1
- import mitt from "mitt"
2
- export const eventBus = mitt()
1
+ import mitt from "mitt"
2
+ export const eventBus = mitt()