@learnpack/learnpack 5.0.297 → 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.
- package/README.md +409 -409
- package/lib/commands/audit.js +15 -15
- package/lib/commands/breakToken.js +19 -19
- package/lib/commands/clean.js +3 -3
- package/lib/commands/logout.js +3 -3
- package/lib/commands/serve.js +32 -11
- package/lib/creatorDist/assets/{index-D25zkBaN.js → index-DoYRptnk.js} +11875 -11992
- package/lib/creatorDist/index.html +1 -1
- package/lib/managers/config/index.js +77 -77
- package/lib/utils/creatorUtilities.js +14 -14
- package/lib/utils/templates/isolated/exercises/01-hello-world/README.es.md +26 -26
- package/lib/utils/templates/isolated/exercises/01-hello-world/README.md +26 -26
- package/lib/utils/templates/scorm/adlcp_rootv1p2.xsd +110 -110
- package/lib/utils/templates/scorm/config/index.html +209 -209
- package/lib/utils/templates/scorm/ims_xml.xsd +1 -1
- package/lib/utils/templates/scorm/imscp_rootv1p1p2.xsd +345 -345
- package/lib/utils/templates/scorm/imsmanifest.xml +38 -38
- package/lib/utils/templates/scorm/imsmd_rootv1p2p1.xsd +573 -573
- package/package.json +1 -1
- package/src/commands/audit.ts +487 -487
- package/src/commands/breakToken.ts +67 -67
- package/src/commands/clean.ts +30 -30
- package/src/commands/logout.ts +38 -38
- package/src/commands/serve.ts +49 -26
- package/src/commands/start.ts +333 -333
- package/src/commands/translate.ts +123 -123
- package/src/creator/README.md +54 -54
- package/src/creator/package-lock.json +6621 -6621
- package/src/creator/package.json +55 -55
- package/src/creator/src/App.tsx +569 -569
- package/src/creator/src/components/FileUploader.tsx +302 -302
- package/src/creator/src/components/Icon.tsx +18 -18
- package/src/creator/src/components/LessonItem.tsx +152 -152
- package/src/creator/src/components/Login.tsx +259 -259
- package/src/creator/src/components/syllabus/ContentIndex.tsx +323 -323
- package/src/creator/src/components/syllabus/SyllabusEditor.tsx +337 -337
- package/src/creator/src/i18n.ts +28 -28
- package/src/creator/src/locales/en.json +127 -127
- package/src/creator/src/locales/es.json +127 -127
- package/src/creator/src/utils/configTypes.ts +122 -122
- package/src/creator/src/utils/constants.ts +13 -13
- package/src/creator/src/utils/creatorUtils.ts +46 -46
- package/src/creator/src/utils/eventBus.ts +2 -2
- package/src/creator/src/utils/socket.ts +61 -61
- package/src/creator/src/utils/store.ts +222 -222
- package/src/creator/src/vite-env.d.ts +1 -1
- package/src/creator/vite.config.ts +13 -13
- package/src/creatorDist/assets/{index-D25zkBaN.js → index-DoYRptnk.js} +11875 -11992
- package/src/creatorDist/index.html +1 -1
- package/src/managers/config/defaults.ts +49 -49
- package/src/managers/config/exercise.ts +364 -364
- package/src/managers/config/index.ts +775 -775
- package/src/managers/file.ts +236 -236
- package/src/managers/server/routes.ts +554 -554
- package/src/managers/telemetry.ts +188 -188
- package/src/models/action.ts +13 -13
- package/src/models/config-manager.ts +28 -28
- package/src/models/config.ts +106 -106
- package/src/models/exercise-obj.ts +30 -30
- package/src/models/session.ts +39 -39
- package/src/models/socket.ts +61 -61
- package/src/models/status.ts +16 -16
- package/src/utils/BaseCommand.ts +56 -56
- package/src/utils/audit.ts +392 -392
- package/src/utils/checkNotInstalled.ts +267 -267
- package/src/utils/convertCreds.js +34 -34
- package/src/utils/creatorUtilities.ts +504 -504
- package/src/utils/export/README.md +178 -178
- package/src/utils/incrementVersion.js +74 -74
- package/src/utils/misc.ts +58 -58
- package/src/utils/sidebarGenerator.ts +195 -195
- package/src/utils/templates/isolated/exercises/01-hello-world/README.es.md +26 -26
- package/src/utils/templates/isolated/exercises/01-hello-world/README.md +26 -26
- package/src/utils/templates/scorm/adlcp_rootv1p2.xsd +110 -110
- package/src/utils/templates/scorm/config/index.html +209 -209
- package/src/utils/templates/scorm/ims_xml.xsd +1 -1
- package/src/utils/templates/scorm/imscp_rootv1p1p2.xsd +345 -345
- package/src/utils/templates/scorm/imsmanifest.xml +38 -38
- package/src/utils/templates/scorm/imsmd_rootv1p2p1.xsd +573 -573
@@ -1,30 +1,30 @@
|
|
1
|
-
import { IFile } from "./file"
|
2
|
-
import { IConfig } from "./config"
|
3
|
-
import { ISocket } from "./socket"
|
4
|
-
|
5
|
-
export interface IExercise {
|
6
|
-
position?: number
|
7
|
-
files: Array<IFile>
|
8
|
-
slug: string
|
9
|
-
path: string
|
10
|
-
done: boolean
|
11
|
-
language?: string | null
|
12
|
-
entry?: string | null
|
13
|
-
graded?: boolean
|
14
|
-
translations?: { [key: string]: string }
|
15
|
-
title: string
|
16
|
-
getReadme?: (lang: string | null) => any
|
17
|
-
getFile?: (name: string) => string | Buffer
|
18
|
-
saveFile?: (name: string, content: string) => void
|
19
|
-
renameFolder?: (newName: string) => void
|
20
|
-
getTestReport?: () => any
|
21
|
-
test?: (sessionConfig: any, config: IConfig, socket: ISocket) => void
|
22
|
-
}
|
23
|
-
|
24
|
-
export interface IExerciseData {
|
25
|
-
lastMessages?: any
|
26
|
-
userMessage?: string
|
27
|
-
exerciseSlug: string
|
28
|
-
entryPoint?: string
|
29
|
-
files: string[]
|
30
|
-
}
|
1
|
+
import { IFile } from "./file"
|
2
|
+
import { IConfig } from "./config"
|
3
|
+
import { ISocket } from "./socket"
|
4
|
+
|
5
|
+
export interface IExercise {
|
6
|
+
position?: number
|
7
|
+
files: Array<IFile>
|
8
|
+
slug: string
|
9
|
+
path: string
|
10
|
+
done: boolean
|
11
|
+
language?: string | null
|
12
|
+
entry?: string | null
|
13
|
+
graded?: boolean
|
14
|
+
translations?: { [key: string]: string }
|
15
|
+
title: string
|
16
|
+
getReadme?: (lang: string | null) => any
|
17
|
+
getFile?: (name: string) => string | Buffer
|
18
|
+
saveFile?: (name: string, content: string) => void
|
19
|
+
renameFolder?: (newName: string) => void
|
20
|
+
getTestReport?: () => any
|
21
|
+
test?: (sessionConfig: any, config: IConfig, socket: ISocket) => void
|
22
|
+
}
|
23
|
+
|
24
|
+
export interface IExerciseData {
|
25
|
+
lastMessages?: any
|
26
|
+
userMessage?: string
|
27
|
+
exerciseSlug: string
|
28
|
+
entryPoint?: string
|
29
|
+
files: string[]
|
30
|
+
}
|
package/src/models/session.ts
CHANGED
@@ -1,39 +1,39 @@
|
|
1
|
-
import { IConfig, IConfigObj } from "./config"
|
2
|
-
|
3
|
-
export interface IPayload {
|
4
|
-
email: string
|
5
|
-
user_id: number
|
6
|
-
token: string
|
7
|
-
}
|
8
|
-
|
9
|
-
export interface IStartProps {
|
10
|
-
token: string
|
11
|
-
payload: IPayload | null
|
12
|
-
}
|
13
|
-
|
14
|
-
type TLoginResponse = {
|
15
|
-
token: string
|
16
|
-
user_id: string
|
17
|
-
email: string
|
18
|
-
}
|
19
|
-
|
20
|
-
export interface ISession {
|
21
|
-
sessionStarted: boolean
|
22
|
-
token: string | null
|
23
|
-
config: IConfig | null
|
24
|
-
currentCohort: null
|
25
|
-
initialize: () => Promise<boolean>
|
26
|
-
setRigoToken: (token: string) => Promise<boolean>
|
27
|
-
setTabHash: (hash: string) => Promise<boolean>
|
28
|
-
setSessionKey: (value: string) => Promise<boolean>
|
29
|
-
setPayload: (value: IPayload) => Promise<boolean>
|
30
|
-
getPayload: () => Promise<any>
|
31
|
-
isActive: () => boolean
|
32
|
-
get: (config?: IConfigObj) => Promise<any>
|
33
|
-
login: () => Promise<void>
|
34
|
-
loginWeb: (email: string, password: string) => Promise<TLoginResponse>
|
35
|
-
sync: () => Promise<void>
|
36
|
-
start: ({ token, payload }: IStartProps) => Promise<void>
|
37
|
-
destroy: () => Promise<void>
|
38
|
-
breakToken: () => Promise<void>
|
39
|
-
}
|
1
|
+
import { IConfig, IConfigObj } from "./config"
|
2
|
+
|
3
|
+
export interface IPayload {
|
4
|
+
email: string
|
5
|
+
user_id: number
|
6
|
+
token: string
|
7
|
+
}
|
8
|
+
|
9
|
+
export interface IStartProps {
|
10
|
+
token: string
|
11
|
+
payload: IPayload | null
|
12
|
+
}
|
13
|
+
|
14
|
+
type TLoginResponse = {
|
15
|
+
token: string
|
16
|
+
user_id: string
|
17
|
+
email: string
|
18
|
+
}
|
19
|
+
|
20
|
+
export interface ISession {
|
21
|
+
sessionStarted: boolean
|
22
|
+
token: string | null
|
23
|
+
config: IConfig | null
|
24
|
+
currentCohort: null
|
25
|
+
initialize: () => Promise<boolean>
|
26
|
+
setRigoToken: (token: string) => Promise<boolean>
|
27
|
+
setTabHash: (hash: string) => Promise<boolean>
|
28
|
+
setSessionKey: (value: string) => Promise<boolean>
|
29
|
+
setPayload: (value: IPayload) => Promise<boolean>
|
30
|
+
getPayload: () => Promise<any>
|
31
|
+
isActive: () => boolean
|
32
|
+
get: (config?: IConfigObj) => Promise<any>
|
33
|
+
login: () => Promise<void>
|
34
|
+
loginWeb: (email: string, password: string) => Promise<TLoginResponse>
|
35
|
+
sync: () => Promise<void>
|
36
|
+
start: ({ token, payload }: IStartProps) => Promise<void>
|
37
|
+
destroy: () => Promise<void>
|
38
|
+
breakToken: () => Promise<void>
|
39
|
+
}
|
package/src/models/socket.ts
CHANGED
@@ -1,61 +1,61 @@
|
|
1
|
-
import { IConfig } from "./config"
|
2
|
-
import { Server } from "socket.io"
|
3
|
-
import { DefaultEventsMap } from "socket.io/dist/typed-events"
|
4
|
-
import { TAction, ICallback } from "./action"
|
5
|
-
import { TStatus } from "./status"
|
6
|
-
|
7
|
-
export type TPossibleActions =
|
8
|
-
| "build"
|
9
|
-
| "test"
|
10
|
-
| "reset"
|
11
|
-
| "tutorial"
|
12
|
-
| "generate"
|
13
|
-
|
14
|
-
export interface ISocket {
|
15
|
-
socket: Server<
|
16
|
-
DefaultEventsMap,
|
17
|
-
DefaultEventsMap,
|
18
|
-
DefaultEventsMap,
|
19
|
-
any
|
20
|
-
> | null
|
21
|
-
config: IConfig | null
|
22
|
-
allowedActions: Array<TPossibleActions>
|
23
|
-
actionCallBacks: { [key: string]: ICallback }
|
24
|
-
possibleActions: Array<TPossibleActions>
|
25
|
-
isTestingEnvironment: boolean
|
26
|
-
addAllowed: (actions: any) => void
|
27
|
-
removeAllowed: (actions: any) => void
|
28
|
-
start: (config: IConfig, server: any, isTestingEnvironment: boolean) => void
|
29
|
-
on: (action: any, callBack: any) => void
|
30
|
-
clean: (_: string, logs: Array<any>) => void
|
31
|
-
complete: () => void
|
32
|
-
ask: (questions: Array<string>) => void
|
33
|
-
sessionRefreshed: (data: any) => void
|
34
|
-
reload: (files: Array<string> | null, exercises: Array<string>) => void
|
35
|
-
openWindow: (id: string) => void
|
36
|
-
log: (
|
37
|
-
status: TStatus,
|
38
|
-
messages?: string | Array<string>,
|
39
|
-
report?: Array<string>,
|
40
|
-
data?: any
|
41
|
-
) => void
|
42
|
-
emit: (
|
43
|
-
action: TAction,
|
44
|
-
status: TStatus | string,
|
45
|
-
logs: string | Array<string>,
|
46
|
-
inputs?: Array<string>,
|
47
|
-
report?: Array<string>,
|
48
|
-
data?: any
|
49
|
-
) => void
|
50
|
-
ready: (message: string) => void
|
51
|
-
error: (type: any, stdout: string) => void
|
52
|
-
fatal: (msg: string) => void
|
53
|
-
dialog: (message: string) => void
|
54
|
-
success: (type: any, stdout: string, lang?: string) => void
|
55
|
-
onTestingFinished: (obj: any) => void
|
56
|
-
}
|
57
|
-
|
58
|
-
export type TOpenWindowData = {
|
59
|
-
url: string
|
60
|
-
exerciseSlug: string
|
61
|
-
}
|
1
|
+
import { IConfig } from "./config"
|
2
|
+
import { Server } from "socket.io"
|
3
|
+
import { DefaultEventsMap } from "socket.io/dist/typed-events"
|
4
|
+
import { TAction, ICallback } from "./action"
|
5
|
+
import { TStatus } from "./status"
|
6
|
+
|
7
|
+
export type TPossibleActions =
|
8
|
+
| "build"
|
9
|
+
| "test"
|
10
|
+
| "reset"
|
11
|
+
| "tutorial"
|
12
|
+
| "generate"
|
13
|
+
|
14
|
+
export interface ISocket {
|
15
|
+
socket: Server<
|
16
|
+
DefaultEventsMap,
|
17
|
+
DefaultEventsMap,
|
18
|
+
DefaultEventsMap,
|
19
|
+
any
|
20
|
+
> | null
|
21
|
+
config: IConfig | null
|
22
|
+
allowedActions: Array<TPossibleActions>
|
23
|
+
actionCallBacks: { [key: string]: ICallback }
|
24
|
+
possibleActions: Array<TPossibleActions>
|
25
|
+
isTestingEnvironment: boolean
|
26
|
+
addAllowed: (actions: any) => void
|
27
|
+
removeAllowed: (actions: any) => void
|
28
|
+
start: (config: IConfig, server: any, isTestingEnvironment: boolean) => void
|
29
|
+
on: (action: any, callBack: any) => void
|
30
|
+
clean: (_: string, logs: Array<any>) => void
|
31
|
+
complete: () => void
|
32
|
+
ask: (questions: Array<string>) => void
|
33
|
+
sessionRefreshed: (data: any) => void
|
34
|
+
reload: (files: Array<string> | null, exercises: Array<string>) => void
|
35
|
+
openWindow: (id: string) => void
|
36
|
+
log: (
|
37
|
+
status: TStatus,
|
38
|
+
messages?: string | Array<string>,
|
39
|
+
report?: Array<string>,
|
40
|
+
data?: any
|
41
|
+
) => void
|
42
|
+
emit: (
|
43
|
+
action: TAction,
|
44
|
+
status: TStatus | string,
|
45
|
+
logs: string | Array<string>,
|
46
|
+
inputs?: Array<string>,
|
47
|
+
report?: Array<string>,
|
48
|
+
data?: any
|
49
|
+
) => void
|
50
|
+
ready: (message: string) => void
|
51
|
+
error: (type: any, stdout: string) => void
|
52
|
+
fatal: (msg: string) => void
|
53
|
+
dialog: (message: string) => void
|
54
|
+
success: (type: any, stdout: string, lang?: string) => void
|
55
|
+
onTestingFinished: (obj: any) => void
|
56
|
+
}
|
57
|
+
|
58
|
+
export type TOpenWindowData = {
|
59
|
+
url: string
|
60
|
+
exerciseSlug: string
|
61
|
+
}
|
package/src/models/status.ts
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
export type TStatus =
|
2
|
-
| "ready"
|
3
|
-
| "internal-error"
|
4
|
-
| "compiler-success"
|
5
|
-
| "testing-success"
|
6
|
-
| "compiling"
|
7
|
-
| "testing"
|
8
|
-
| "start_exercise"
|
9
|
-
| "initializing"
|
10
|
-
| "configuration_loaded"
|
11
|
-
| "connection_ended"
|
12
|
-
| "reset_exercise"
|
13
|
-
| "open_files"
|
14
|
-
| "open_window"
|
15
|
-
| "instructions_closed"
|
16
|
-
| "completed"
|
1
|
+
export type TStatus =
|
2
|
+
| "ready"
|
3
|
+
| "internal-error"
|
4
|
+
| "compiler-success"
|
5
|
+
| "testing-success"
|
6
|
+
| "compiling"
|
7
|
+
| "testing"
|
8
|
+
| "start_exercise"
|
9
|
+
| "initializing"
|
10
|
+
| "configuration_loaded"
|
11
|
+
| "connection_ended"
|
12
|
+
| "reset_exercise"
|
13
|
+
| "open_files"
|
14
|
+
| "open_window"
|
15
|
+
| "instructions_closed"
|
16
|
+
| "completed"
|
package/src/utils/BaseCommand.ts
CHANGED
@@ -1,56 +1,56 @@
|
|
1
|
-
import { Command, flags } from "@oclif/command"
|
2
|
-
import Console from "./console"
|
3
|
-
import { createInterface } from "readline"
|
4
|
-
// import SessionManager from '../managers/session'
|
5
|
-
|
6
|
-
class BaseCommand extends Command {
|
7
|
-
async catch(err: any) {
|
8
|
-
Console.debug("COMMAND CATCH", err)
|
9
|
-
|
10
|
-
throw err
|
11
|
-
}
|
12
|
-
|
13
|
-
async init() {
|
14
|
-
const { flags, args } = this.parse(BaseCommand)
|
15
|
-
Console.debug("COMMAND INIT")
|
16
|
-
Console.debug("These are your flags: ", flags)
|
17
|
-
Console.debug("These are your args: ", args)
|
18
|
-
|
19
|
-
// quick fix for listening to the process termination on windows
|
20
|
-
if (process.platform === "win32") {
|
21
|
-
const rl = createInterface({
|
22
|
-
input: process.stdin,
|
23
|
-
output: process.stdout,
|
24
|
-
})
|
25
|
-
|
26
|
-
rl.on("SIGINT", function () {
|
27
|
-
// process.emit('SIGINT')
|
28
|
-
// process.emit('SIGINT')
|
29
|
-
})
|
30
|
-
}
|
31
|
-
|
32
|
-
process.on("SIGINT", function () {
|
33
|
-
Console.debug("Terminated (SIGINT)")
|
34
|
-
process.exit()
|
35
|
-
})
|
36
|
-
}
|
37
|
-
|
38
|
-
async finally() {
|
39
|
-
Console.debug("COMMAND FINALLY")
|
40
|
-
// called after run and catch regardless of whether or not the command errored
|
41
|
-
}
|
42
|
-
|
43
|
-
static flags = {
|
44
|
-
yes: flags.boolean({
|
45
|
-
char: "y",
|
46
|
-
description: "Skip all prompts and initialize an empty project",
|
47
|
-
default: false,
|
48
|
-
}),
|
49
|
-
}
|
50
|
-
|
51
|
-
async run() {
|
52
|
-
// console.log('running my command')
|
53
|
-
}
|
54
|
-
}
|
55
|
-
|
56
|
-
export default BaseCommand
|
1
|
+
import { Command, flags } from "@oclif/command"
|
2
|
+
import Console from "./console"
|
3
|
+
import { createInterface } from "readline"
|
4
|
+
// import SessionManager from '../managers/session'
|
5
|
+
|
6
|
+
class BaseCommand extends Command {
|
7
|
+
async catch(err: any) {
|
8
|
+
Console.debug("COMMAND CATCH", err)
|
9
|
+
|
10
|
+
throw err
|
11
|
+
}
|
12
|
+
|
13
|
+
async init() {
|
14
|
+
const { flags, args } = this.parse(BaseCommand)
|
15
|
+
Console.debug("COMMAND INIT")
|
16
|
+
Console.debug("These are your flags: ", flags)
|
17
|
+
Console.debug("These are your args: ", args)
|
18
|
+
|
19
|
+
// quick fix for listening to the process termination on windows
|
20
|
+
if (process.platform === "win32") {
|
21
|
+
const rl = createInterface({
|
22
|
+
input: process.stdin,
|
23
|
+
output: process.stdout,
|
24
|
+
})
|
25
|
+
|
26
|
+
rl.on("SIGINT", function () {
|
27
|
+
// process.emit('SIGINT')
|
28
|
+
// process.emit('SIGINT')
|
29
|
+
})
|
30
|
+
}
|
31
|
+
|
32
|
+
process.on("SIGINT", function () {
|
33
|
+
Console.debug("Terminated (SIGINT)")
|
34
|
+
process.exit()
|
35
|
+
})
|
36
|
+
}
|
37
|
+
|
38
|
+
async finally() {
|
39
|
+
Console.debug("COMMAND FINALLY")
|
40
|
+
// called after run and catch regardless of whether or not the command errored
|
41
|
+
}
|
42
|
+
|
43
|
+
static flags = {
|
44
|
+
yes: flags.boolean({
|
45
|
+
char: "y",
|
46
|
+
description: "Skip all prompts and initialize an empty project",
|
47
|
+
default: false,
|
48
|
+
}),
|
49
|
+
}
|
50
|
+
|
51
|
+
async run() {
|
52
|
+
// console.log('running my command')
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
export default BaseCommand
|