@learnpack/learnpack 5.0.298 → 5.0.300

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +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/logout.js +3 -3
  6. package/lib/commands/serve.js +31 -11
  7. package/lib/creatorDist/assets/{index-D25zkBaN.js → index-DoYRptnk.js} +11875 -11992
  8. package/lib/creatorDist/index.html +1 -1
  9. package/lib/managers/config/index.js +77 -77
  10. package/lib/utils/creatorUtilities.js +14 -14
  11. package/lib/utils/templates/isolated/exercises/01-hello-world/README.es.md +26 -26
  12. package/lib/utils/templates/isolated/exercises/01-hello-world/README.md +26 -26
  13. package/lib/utils/templates/scorm/adlcp_rootv1p2.xsd +110 -110
  14. package/lib/utils/templates/scorm/config/index.html +209 -209
  15. package/lib/utils/templates/scorm/ims_xml.xsd +1 -1
  16. package/lib/utils/templates/scorm/imscp_rootv1p1p2.xsd +345 -345
  17. package/lib/utils/templates/scorm/imsmanifest.xml +38 -38
  18. package/lib/utils/templates/scorm/imsmd_rootv1p2p1.xsd +573 -573
  19. package/package.json +1 -1
  20. package/src/commands/audit.ts +487 -487
  21. package/src/commands/breakToken.ts +67 -67
  22. package/src/commands/clean.ts +30 -30
  23. package/src/commands/logout.ts +38 -38
  24. package/src/commands/serve.ts +47 -25
  25. package/src/commands/start.ts +333 -333
  26. package/src/commands/translate.ts +123 -123
  27. package/src/creator/README.md +54 -54
  28. package/src/creator/package-lock.json +6621 -6621
  29. package/src/creator/package.json +55 -55
  30. package/src/creator/src/App.tsx +569 -569
  31. package/src/creator/src/components/FileUploader.tsx +302 -302
  32. package/src/creator/src/components/Icon.tsx +18 -18
  33. package/src/creator/src/components/LessonItem.tsx +152 -152
  34. package/src/creator/src/components/Login.tsx +259 -259
  35. package/src/creator/src/components/syllabus/ContentIndex.tsx +323 -323
  36. package/src/creator/src/components/syllabus/SyllabusEditor.tsx +337 -337
  37. package/src/creator/src/i18n.ts +28 -28
  38. package/src/creator/src/locales/en.json +127 -127
  39. package/src/creator/src/locales/es.json +127 -127
  40. package/src/creator/src/utils/configTypes.ts +122 -122
  41. package/src/creator/src/utils/constants.ts +13 -13
  42. package/src/creator/src/utils/creatorUtils.ts +46 -46
  43. package/src/creator/src/utils/eventBus.ts +2 -2
  44. package/src/creator/src/utils/socket.ts +61 -61
  45. package/src/creator/src/utils/store.ts +222 -222
  46. package/src/creator/src/vite-env.d.ts +1 -1
  47. package/src/creator/vite.config.ts +13 -13
  48. package/src/creatorDist/assets/{index-D25zkBaN.js → index-DoYRptnk.js} +11875 -11992
  49. package/src/creatorDist/index.html +1 -1
  50. package/src/managers/config/defaults.ts +49 -49
  51. package/src/managers/config/exercise.ts +364 -364
  52. package/src/managers/config/index.ts +775 -775
  53. package/src/managers/file.ts +236 -236
  54. package/src/managers/server/routes.ts +554 -554
  55. package/src/managers/telemetry.ts +188 -188
  56. package/src/models/action.ts +13 -13
  57. package/src/models/config-manager.ts +28 -28
  58. package/src/models/config.ts +106 -106
  59. package/src/models/exercise-obj.ts +30 -30
  60. package/src/models/session.ts +39 -39
  61. package/src/models/socket.ts +61 -61
  62. package/src/models/status.ts +16 -16
  63. package/src/utils/BaseCommand.ts +56 -56
  64. package/src/utils/audit.ts +392 -392
  65. package/src/utils/checkNotInstalled.ts +267 -267
  66. package/src/utils/convertCreds.js +34 -34
  67. package/src/utils/creatorUtilities.ts +504 -504
  68. package/src/utils/export/README.md +178 -178
  69. package/src/utils/incrementVersion.js +74 -74
  70. package/src/utils/misc.ts +58 -58
  71. package/src/utils/sidebarGenerator.ts +195 -195
  72. package/src/utils/templates/isolated/exercises/01-hello-world/README.es.md +26 -26
  73. package/src/utils/templates/isolated/exercises/01-hello-world/README.md +26 -26
  74. package/src/utils/templates/scorm/adlcp_rootv1p2.xsd +110 -110
  75. package/src/utils/templates/scorm/config/index.html +209 -209
  76. package/src/utils/templates/scorm/ims_xml.xsd +1 -1
  77. package/src/utils/templates/scorm/imscp_rootv1p1p2.xsd +345 -345
  78. package/src/utils/templates/scorm/imsmanifest.xml +38 -38
  79. package/src/utils/templates/scorm/imsmd_rootv1p2p1.xsd +573 -573
@@ -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()
@@ -1,61 +1,61 @@
1
- import { io, Socket } from "socket.io-client"
2
-
3
- type EventCallback = (...args: any[]) => void
4
-
5
- class CreatorSocket {
6
- private socket: Socket | null = null
7
- private readonly url: string
8
-
9
- constructor(url: string) {
10
- this.url = url
11
- }
12
-
13
- /**
14
- * Conecta manualmente al servidor de websockets
15
- */
16
- connect() {
17
- if (this.socket) return
18
- this.socket = io(this.url, { autoConnect: false, path: "/sockete" })
19
- this.socket.connect()
20
- }
21
-
22
- /**
23
- * Desconecta del servidor
24
- */
25
- disconnect() {
26
- if (this.socket) {
27
- this.socket.disconnect()
28
- this.socket = null
29
- }
30
- }
31
-
32
- /**
33
- * Verifica si está conectado
34
- */
35
- isConnected(): boolean {
36
- return !!this.socket?.connected
37
- }
38
-
39
- /**
40
- * Registra un evento personalizado
41
- */
42
- on(event: string, callback: EventCallback) {
43
- this.socket?.on(event, callback)
44
- }
45
-
46
- /**
47
- * Emite un evento al servidor
48
- */
49
- emit(event: string, ...args: any[]) {
50
- this.socket?.emit(event, ...args)
51
- }
52
-
53
- /**
54
- * Elimina un evento registrado
55
- */
56
- off(event: string, callback?: EventCallback) {
57
- this.socket?.off(event, callback)
58
- }
59
- }
60
-
61
- export default CreatorSocket
1
+ import { io, Socket } from "socket.io-client"
2
+
3
+ type EventCallback = (...args: any[]) => void
4
+
5
+ class CreatorSocket {
6
+ private socket: Socket | null = null
7
+ private readonly url: string
8
+
9
+ constructor(url: string) {
10
+ this.url = url
11
+ }
12
+
13
+ /**
14
+ * Conecta manualmente al servidor de websockets
15
+ */
16
+ connect() {
17
+ if (this.socket) return
18
+ this.socket = io(this.url, { autoConnect: false, path: "/sockete" })
19
+ this.socket.connect()
20
+ }
21
+
22
+ /**
23
+ * Desconecta del servidor
24
+ */
25
+ disconnect() {
26
+ if (this.socket) {
27
+ this.socket.disconnect()
28
+ this.socket = null
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Verifica si está conectado
34
+ */
35
+ isConnected(): boolean {
36
+ return !!this.socket?.connected
37
+ }
38
+
39
+ /**
40
+ * Registra un evento personalizado
41
+ */
42
+ on(event: string, callback: EventCallback) {
43
+ this.socket?.on(event, callback)
44
+ }
45
+
46
+ /**
47
+ * Emite un evento al servidor
48
+ */
49
+ emit(event: string, ...args: any[]) {
50
+ this.socket?.emit(event, ...args)
51
+ }
52
+
53
+ /**
54
+ * Elimina un evento registrado
55
+ */
56
+ off(event: string, callback?: EventCallback) {
57
+ this.socket?.off(event, callback)
58
+ }
59
+ }
60
+
61
+ export default CreatorSocket