@learnpack/learnpack 4.0.9 → 4.0.12
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 +25 -10
- package/lib/commands/audit.d.ts +6 -6
- package/lib/commands/audit.js +327 -327
- package/lib/commands/build.d.ts +11 -0
- package/lib/commands/build.js +160 -0
- package/lib/commands/clean.d.ts +8 -8
- package/lib/commands/clean.js +22 -22
- package/lib/commands/download.d.ts +13 -13
- package/lib/commands/download.js +52 -52
- package/lib/commands/init.d.ts +9 -9
- package/lib/commands/init.js +127 -127
- package/lib/commands/login.d.ts +14 -14
- package/lib/commands/login.js +34 -34
- package/lib/commands/logout.d.ts +14 -14
- package/lib/commands/logout.js +34 -34
- package/lib/commands/publish.d.ts +14 -14
- package/lib/commands/publish.js +79 -79
- package/lib/commands/start.d.ts +7 -7
- package/lib/commands/start.js +252 -250
- package/lib/commands/test.d.ts +6 -6
- package/lib/commands/test.js +62 -62
- package/lib/index.d.ts +1 -1
- package/lib/index.js +4 -4
- package/lib/managers/config/allowed_files.d.ts +5 -5
- package/lib/managers/config/allowed_files.js +30 -30
- package/lib/managers/config/defaults.d.ts +47 -48
- package/lib/managers/config/defaults.js +51 -51
- package/lib/managers/config/exercise.d.ts +36 -36
- package/lib/managers/config/exercise.js +243 -236
- package/lib/managers/config/index.d.ts +3 -3
- package/lib/managers/config/index.js +464 -459
- package/lib/managers/file.d.ts +14 -14
- package/lib/managers/file.js +190 -184
- package/lib/managers/gitpod.d.ts +3 -3
- package/lib/managers/gitpod.js +67 -67
- package/lib/managers/server/index.d.ts +5 -6
- package/lib/managers/server/index.js +58 -58
- package/lib/managers/server/routes.d.ts +4 -4
- package/lib/managers/server/routes.js +228 -220
- package/lib/managers/session.d.ts +3 -3
- package/lib/managers/session.js +125 -125
- package/lib/managers/socket.d.ts +3 -3
- package/lib/managers/socket.js +188 -186
- package/lib/managers/telemetry.d.ts +74 -74
- package/lib/managers/telemetry.js +215 -214
- package/lib/managers/test.js +84 -84
- package/lib/models/action.d.ts +2 -2
- package/lib/models/action.js +2 -2
- package/lib/models/audit.d.ts +15 -15
- package/lib/models/audit.js +2 -2
- package/lib/models/config-manager.d.ts +21 -21
- package/lib/models/config-manager.js +2 -2
- package/lib/models/config.d.ts +86 -86
- package/lib/models/config.js +2 -2
- package/lib/models/counter.d.ts +11 -11
- package/lib/models/counter.js +2 -2
- package/lib/models/errors.d.ts +15 -15
- package/lib/models/errors.js +2 -2
- package/lib/models/exercise-obj.d.ts +29 -30
- package/lib/models/exercise-obj.js +2 -2
- package/lib/models/file.d.ts +5 -5
- package/lib/models/file.js +2 -2
- package/lib/models/findings.d.ts +17 -17
- package/lib/models/findings.js +2 -2
- package/lib/models/flags.d.ts +10 -10
- package/lib/models/flags.js +2 -2
- package/lib/models/front-matter.d.ts +11 -11
- package/lib/models/front-matter.js +2 -2
- package/lib/models/gitpod-data.d.ts +16 -16
- package/lib/models/gitpod-data.js +2 -2
- package/lib/models/language.d.ts +4 -4
- package/lib/models/language.js +2 -2
- package/lib/models/package.d.ts +7 -7
- package/lib/models/package.js +2 -2
- package/lib/models/plugin-config.d.ts +16 -16
- package/lib/models/plugin-config.js +2 -2
- package/lib/models/session.d.ts +31 -31
- package/lib/models/session.js +2 -2
- package/lib/models/socket.d.ts +37 -37
- package/lib/models/socket.js +2 -2
- package/lib/models/status.d.ts +1 -1
- package/lib/models/status.js +2 -2
- package/lib/models/success-types.d.ts +1 -1
- package/lib/models/success-types.js +2 -2
- package/lib/plugin/command/compile.d.ts +6 -6
- package/lib/plugin/command/compile.js +18 -18
- package/lib/plugin/command/test.d.ts +6 -6
- package/lib/plugin/command/test.js +25 -25
- package/lib/plugin/index.d.ts +27 -27
- package/lib/plugin/index.js +7 -7
- package/lib/plugin/plugin.d.ts +8 -8
- package/lib/plugin/plugin.js +68 -68
- package/lib/plugin/utils.d.ts +16 -16
- package/lib/plugin/utils.js +58 -58
- package/lib/ui/download.d.ts +5 -5
- package/lib/ui/download.js +62 -61
- package/lib/utils/BaseCommand.d.ts +8 -8
- package/lib/utils/BaseCommand.js +41 -41
- package/lib/utils/SessionCommand.d.ts +10 -10
- package/lib/utils/SessionCommand.js +43 -43
- package/lib/utils/api.d.ts +14 -14
- package/lib/utils/api.js +255 -255
- package/lib/utils/audit.d.ts +16 -16
- package/lib/utils/audit.js +303 -303
- package/lib/utils/checkNotInstalled.d.ts +8 -8
- package/lib/utils/checkNotInstalled.js +185 -181
- package/lib/utils/console.d.ts +12 -12
- package/lib/utils/console.js +19 -19
- package/lib/utils/errors.d.ts +17 -17
- package/lib/utils/errors.js +107 -100
- package/lib/utils/exercisesQueue.d.ts +9 -9
- package/lib/utils/exercisesQueue.js +38 -38
- package/lib/utils/fileQueue.d.ts +43 -43
- package/lib/utils/fileQueue.js +169 -169
- package/lib/utils/misc.d.ts +1 -1
- package/lib/utils/misc.js +24 -23
- package/lib/utils/osOperations.d.ts +5 -5
- package/lib/utils/osOperations.js +72 -72
- package/lib/utils/validators.d.ts +5 -5
- package/lib/utils/validators.js +16 -17
- package/lib/utils/watcher.d.ts +2 -2
- package/lib/utils/watcher.js +25 -25
- package/oclif.manifest.json +1 -1
- package/package.json +6 -4
- package/src/commands/build.ts +181 -0
- package/src/managers/config/index.ts +5 -0
- package/src/managers/server/routes.ts +11 -1
- package/src/managers/session.ts +1 -1
package/lib/managers/test.js
CHANGED
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
|
|
4
|
-
import * as path from 'path'
|
|
5
|
-
import * as shell from 'shelljs'
|
|
6
|
-
import * as fs from 'fs'
|
|
7
|
-
import { TestingError } from './errors'
|
|
8
|
-
import Console from '../utils/console'
|
|
9
|
-
import * as color from 'colors'
|
|
10
|
-
import bcActivity from './bcActivity.js'
|
|
11
|
-
import { CompilerError } from '../utils/errors'
|
|
12
|
-
import { ISocket } from '../models/socket'
|
|
13
|
-
import { IFile } from '../models/file'
|
|
14
|
-
import { IConfig } from '@oclif/config'
|
|
15
|
-
|
|
16
|
-
module.exports = async function ({ socket, files, config, slug }: {socket: ISocket, files: IFile[], config: IConfig, slug: string}) {
|
|
17
|
-
|
|
18
|
-
const configPath = path.resolve(__dirname, `./config/tester/${config.tester}/${config.language}.config.js`);
|
|
19
|
-
if (!fs.existsSync(configPath)) throw CompilerError(`Uknown testing engine for compiler: '${config.language}'`);
|
|
20
|
-
|
|
21
|
-
const testingConfig = require(configPath)(files, config, slug);
|
|
22
|
-
testingConfig.validate();
|
|
23
|
-
|
|
24
|
-
if (config.ignoreTests) throw TestingError('Grading is disabled on learn.json file.');
|
|
25
|
-
|
|
26
|
-
if (!fs.existsSync(`${config.dirPath}/reports`)) {
|
|
27
|
-
fs.mkdirSync(`${config.dirPath}/reports`);
|
|
28
|
-
Console.debug(`Creating the ${config.dirPath}/reports directory`);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
Console.info('Running tests...');
|
|
32
|
-
|
|
33
|
-
const command = await testingConfig.getCommand(socket)
|
|
34
|
-
const { stdout, stderr, code } = shell.exec(command);
|
|
35
|
-
|
|
36
|
-
if (code != 0) {
|
|
37
|
-
const errors = typeof (testingConfig.getErrors === 'function') ? testingConfig.getErrors(stdout || stderr) : [];
|
|
38
|
-
socket.log('testing-error', errors);
|
|
39
|
-
console.log(errors.join('\n'))
|
|
40
|
-
|
|
41
|
-
Console.error("There was an error while testing");
|
|
42
|
-
bcActivity.error('exercise_error', {
|
|
43
|
-
message: errors,
|
|
44
|
-
name: `${config.tester}-error`,
|
|
45
|
-
framework: config.tester,
|
|
46
|
-
language: config.language,
|
|
47
|
-
data: slug,
|
|
48
|
-
compiler: config.compiler
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
socket.log('testing-success', [stdout || stderr].concat(["😁Everything is amazing!"]));
|
|
53
|
-
Console.success("Everything is amazing!");
|
|
54
|
-
|
|
55
|
-
bcActivity.activity('exercise_success', {
|
|
56
|
-
language: config.language,
|
|
57
|
-
slug: slug,
|
|
58
|
-
editor: config.editor,
|
|
59
|
-
compiler: config.compiler
|
|
60
|
-
});
|
|
61
|
-
config.exercises = config.exercises.map(e => {
|
|
62
|
-
if (e.slug === slug) e.done = true;
|
|
63
|
-
return e;
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (typeof testingConfig.cleanup !== "undefined") {
|
|
68
|
-
if (typeof testingConfig.cleanup === 'function' || typeof testingConfig.cleanup === 'object') {
|
|
69
|
-
const clean = await testingConfig.cleanup(socket);
|
|
70
|
-
if (clean) {
|
|
71
|
-
const { stdout, stderr, code } = shell.exec(clean);
|
|
72
|
-
if (code == 0) {
|
|
73
|
-
Console.debug("The cleanup command runned successfully");
|
|
74
|
-
}
|
|
75
|
-
else Console.warning("There is an error on the cleanup command for the test");
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return true;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
|
|
4
|
+
import * as path from 'path'
|
|
5
|
+
import * as shell from 'shelljs'
|
|
6
|
+
import * as fs from 'fs'
|
|
7
|
+
import { TestingError } from './errors'
|
|
8
|
+
import Console from '../utils/console'
|
|
9
|
+
import * as color from 'colors'
|
|
10
|
+
import bcActivity from './bcActivity.js'
|
|
11
|
+
import { CompilerError } from '../utils/errors'
|
|
12
|
+
import { ISocket } from '../models/socket'
|
|
13
|
+
import { IFile } from '../models/file'
|
|
14
|
+
import { IConfig } from '@oclif/config'
|
|
15
|
+
|
|
16
|
+
module.exports = async function ({ socket, files, config, slug }: {socket: ISocket, files: IFile[], config: IConfig, slug: string}) {
|
|
17
|
+
|
|
18
|
+
const configPath = path.resolve(__dirname, `./config/tester/${config.tester}/${config.language}.config.js`);
|
|
19
|
+
if (!fs.existsSync(configPath)) throw CompilerError(`Uknown testing engine for compiler: '${config.language}'`);
|
|
20
|
+
|
|
21
|
+
const testingConfig = require(configPath)(files, config, slug);
|
|
22
|
+
testingConfig.validate();
|
|
23
|
+
|
|
24
|
+
if (config.ignoreTests) throw TestingError('Grading is disabled on learn.json file.');
|
|
25
|
+
|
|
26
|
+
if (!fs.existsSync(`${config.dirPath}/reports`)) {
|
|
27
|
+
fs.mkdirSync(`${config.dirPath}/reports`);
|
|
28
|
+
Console.debug(`Creating the ${config.dirPath}/reports directory`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Console.info('Running tests...');
|
|
32
|
+
|
|
33
|
+
const command = await testingConfig.getCommand(socket)
|
|
34
|
+
const { stdout, stderr, code } = shell.exec(command);
|
|
35
|
+
|
|
36
|
+
if (code != 0) {
|
|
37
|
+
const errors = typeof (testingConfig.getErrors === 'function') ? testingConfig.getErrors(stdout || stderr) : [];
|
|
38
|
+
socket.log('testing-error', errors);
|
|
39
|
+
console.log(errors.join('\n'))
|
|
40
|
+
|
|
41
|
+
Console.error("There was an error while testing");
|
|
42
|
+
bcActivity.error('exercise_error', {
|
|
43
|
+
message: errors,
|
|
44
|
+
name: `${config.tester}-error`,
|
|
45
|
+
framework: config.tester,
|
|
46
|
+
language: config.language,
|
|
47
|
+
data: slug,
|
|
48
|
+
compiler: config.compiler
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
socket.log('testing-success', [stdout || stderr].concat(["😁Everything is amazing!"]));
|
|
53
|
+
Console.success("Everything is amazing!");
|
|
54
|
+
|
|
55
|
+
bcActivity.activity('exercise_success', {
|
|
56
|
+
language: config.language,
|
|
57
|
+
slug: slug,
|
|
58
|
+
editor: config.editor,
|
|
59
|
+
compiler: config.compiler
|
|
60
|
+
});
|
|
61
|
+
config.exercises = config.exercises.map(e => {
|
|
62
|
+
if (e.slug === slug) e.done = true;
|
|
63
|
+
return e;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (typeof testingConfig.cleanup !== "undefined") {
|
|
68
|
+
if (typeof testingConfig.cleanup === 'function' || typeof testingConfig.cleanup === 'object') {
|
|
69
|
+
const clean = await testingConfig.cleanup(socket);
|
|
70
|
+
if (clean) {
|
|
71
|
+
const { stdout, stderr, code } = shell.exec(clean);
|
|
72
|
+
if (code == 0) {
|
|
73
|
+
Console.debug("The cleanup command runned successfully");
|
|
74
|
+
}
|
|
75
|
+
else Console.warning("There is an error on the cleanup command for the test");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return true;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
*/
|
package/lib/models/action.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export type TAction = "test" | "log" | "reload" | "ready" | "clean" | "ask" | "file_change" | "dialog";
|
|
2
|
+
export type ICallback = (...agrs: any[]) => any;
|
package/lib/models/action.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/lib/models/audit.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export interface IAuditErrors {
|
|
2
|
-
exercise?: string;
|
|
3
|
-
msg: string;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface ISchemaItem {
|
|
7
|
-
key: string;
|
|
8
|
-
mandatory: boolean;
|
|
9
|
-
type: TType;
|
|
10
|
-
max_size?: number;
|
|
11
|
-
allowed_extensions?: string[];
|
|
12
|
-
enum?: string[];
|
|
13
|
-
max_item_size?: number;
|
|
14
|
-
}
|
|
15
|
-
export {};
|
|
1
|
+
export interface IAuditErrors {
|
|
2
|
+
exercise?: string;
|
|
3
|
+
msg: string;
|
|
4
|
+
}
|
|
5
|
+
type TType = "string" | "array" | "number" | "url" | "boolean";
|
|
6
|
+
export interface ISchemaItem {
|
|
7
|
+
key: string;
|
|
8
|
+
mandatory: boolean;
|
|
9
|
+
type: TType;
|
|
10
|
+
max_size?: number;
|
|
11
|
+
allowed_extensions?: string[];
|
|
12
|
+
enum?: string[];
|
|
13
|
+
max_item_size?: number;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
package/lib/models/audit.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { IConfigObj, TGrading } from "./config";
|
|
2
|
-
import { IExercise } from "./exercise-obj";
|
|
3
|
-
export interface IConfigManagerAttributes {
|
|
4
|
-
grading: TGrading;
|
|
5
|
-
disableGrading: boolean;
|
|
6
|
-
version: string;
|
|
7
|
-
mode?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface IConfigManager {
|
|
10
|
-
validLanguages?: any;
|
|
11
|
-
get: () => IConfigObj;
|
|
12
|
-
clean: () => void;
|
|
13
|
-
getExercise: (slug: string | undefined) => IExercise;
|
|
14
|
-
startExercise: (slug: string) => IExercise;
|
|
15
|
-
reset: (slug: string) => void;
|
|
16
|
-
buildIndex: () => boolean | void;
|
|
17
|
-
watchIndex: (onChange: (...args: Array<any>) => void) => void;
|
|
18
|
-
save: () => void;
|
|
19
|
-
noCurrentExercise: () => void;
|
|
20
|
-
getAllExercises: () => IExercise[];
|
|
21
|
-
}
|
|
1
|
+
import { IConfigObj, TGrading } from "./config";
|
|
2
|
+
import { IExercise } from "./exercise-obj";
|
|
3
|
+
export interface IConfigManagerAttributes {
|
|
4
|
+
grading: TGrading;
|
|
5
|
+
disableGrading: boolean;
|
|
6
|
+
version: string;
|
|
7
|
+
mode?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface IConfigManager {
|
|
10
|
+
validLanguages?: any;
|
|
11
|
+
get: () => IConfigObj;
|
|
12
|
+
clean: () => void;
|
|
13
|
+
getExercise: (slug: string | undefined) => IExercise;
|
|
14
|
+
startExercise: (slug: string) => IExercise;
|
|
15
|
+
reset: (slug: string) => void;
|
|
16
|
+
buildIndex: () => boolean | void;
|
|
17
|
+
watchIndex: (onChange: (...args: Array<any>) => void) => void;
|
|
18
|
+
save: () => void;
|
|
19
|
+
noCurrentExercise: () => void;
|
|
20
|
+
getAllExercises: () => IExercise[];
|
|
21
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/lib/models/config.d.ts
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
import { IExercise } from "./exercise-obj";
|
|
2
|
-
import { TTelemetryUrls } from "../managers/telemetry";
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export interface IConfigPath {
|
|
9
|
-
base: string;
|
|
10
|
-
}
|
|
11
|
-
export interface IEditor {
|
|
12
|
-
mode?: TMode;
|
|
13
|
-
version?: string;
|
|
14
|
-
agent?: TAgent;
|
|
15
|
-
hideTerminal?: boolean;
|
|
16
|
-
}
|
|
17
|
-
export interface TEntries {
|
|
18
|
-
python3?: string;
|
|
19
|
-
html?: string;
|
|
20
|
-
node?: string;
|
|
21
|
-
react?: string;
|
|
22
|
-
java?: string;
|
|
23
|
-
}
|
|
24
|
-
export interface IConfig {
|
|
25
|
-
os: string;
|
|
26
|
-
port?: string;
|
|
27
|
-
repository?: string;
|
|
28
|
-
description?: string;
|
|
29
|
-
slug?: string;
|
|
30
|
-
dirPath: string;
|
|
31
|
-
preview?: string;
|
|
32
|
-
entries: TEntries;
|
|
33
|
-
grading: TGrading;
|
|
34
|
-
configPath: string;
|
|
35
|
-
translations: Array<string>;
|
|
36
|
-
outputPath?: string;
|
|
37
|
-
editor: IEditor;
|
|
38
|
-
language: string;
|
|
39
|
-
title: string;
|
|
40
|
-
duration: number;
|
|
41
|
-
difficulty?: string;
|
|
42
|
-
exercisesPath: string;
|
|
43
|
-
disableGrading: boolean;
|
|
44
|
-
actions: Array<string>;
|
|
45
|
-
autoPlay: boolean;
|
|
46
|
-
projectType?: string;
|
|
47
|
-
contact?: string;
|
|
48
|
-
disabledActions?: Array<TConfigAction>;
|
|
49
|
-
compiler: TCompiler;
|
|
50
|
-
compilers: Array<TCompiler>;
|
|
51
|
-
publicPath: string;
|
|
52
|
-
publicUrl?: string;
|
|
53
|
-
bugsLink?: string;
|
|
54
|
-
videoSolutions?: boolean;
|
|
55
|
-
skills: Array<string>;
|
|
56
|
-
telemetry?: TTelemetryUrls;
|
|
57
|
-
variables?: TVariables;
|
|
58
|
-
suggestions: TSuggestions;
|
|
59
|
-
warnings: TWarnings;
|
|
60
|
-
runHook: (...agrs: Array<any>) => void;
|
|
61
|
-
testingFinishedCallback: (arg: any | undefined) => void;
|
|
62
|
-
}
|
|
63
|
-
export
|
|
64
|
-
|
|
65
|
-
agent: TAgent;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
agent?: string;
|
|
69
|
-
extension?: string;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
type: "command" | "string";
|
|
73
|
-
source: string;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
[key: string]: TVariable | string;
|
|
77
|
-
};
|
|
78
|
-
export interface IConfigObj {
|
|
79
|
-
session?: number;
|
|
80
|
-
currentExercise?: any;
|
|
81
|
-
config?: IConfig;
|
|
82
|
-
exercises?: Array<IExercise>;
|
|
83
|
-
confPath?: IConfigPath;
|
|
84
|
-
address?: string;
|
|
85
|
-
}
|
|
86
|
-
export {};
|
|
1
|
+
import { IExercise } from "./exercise-obj";
|
|
2
|
+
import { TTelemetryUrls } from "../managers/telemetry";
|
|
3
|
+
export type TGrading = "isolated" | "incremental" | "no-grading";
|
|
4
|
+
export type TMode = "preview" | "extension";
|
|
5
|
+
export type TConfigAction = "test" | "build" | "tutorial" | "reset" | "generate";
|
|
6
|
+
export type TConfigObjAttributes = "config" | "exercises" | "grading";
|
|
7
|
+
export type TCompiler = "webpack" | "vanillajs" | "react" | "html" | "node" | "python" | "css";
|
|
8
|
+
export interface IConfigPath {
|
|
9
|
+
base: string;
|
|
10
|
+
}
|
|
11
|
+
export interface IEditor {
|
|
12
|
+
mode?: TMode;
|
|
13
|
+
version?: string;
|
|
14
|
+
agent?: TAgent;
|
|
15
|
+
hideTerminal?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface TEntries {
|
|
18
|
+
python3?: string;
|
|
19
|
+
html?: string;
|
|
20
|
+
node?: string;
|
|
21
|
+
react?: string;
|
|
22
|
+
java?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface IConfig {
|
|
25
|
+
os: string;
|
|
26
|
+
port?: string;
|
|
27
|
+
repository?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
slug?: string;
|
|
30
|
+
dirPath: string;
|
|
31
|
+
preview?: string;
|
|
32
|
+
entries: TEntries;
|
|
33
|
+
grading: TGrading;
|
|
34
|
+
configPath: string;
|
|
35
|
+
translations: Array<string>;
|
|
36
|
+
outputPath?: string;
|
|
37
|
+
editor: IEditor;
|
|
38
|
+
language: string;
|
|
39
|
+
title: string;
|
|
40
|
+
duration: number;
|
|
41
|
+
difficulty?: string;
|
|
42
|
+
exercisesPath: string;
|
|
43
|
+
disableGrading: boolean;
|
|
44
|
+
actions: Array<string>;
|
|
45
|
+
autoPlay: boolean;
|
|
46
|
+
projectType?: string;
|
|
47
|
+
contact?: string;
|
|
48
|
+
disabledActions?: Array<TConfigAction>;
|
|
49
|
+
compiler: TCompiler;
|
|
50
|
+
compilers: Array<TCompiler>;
|
|
51
|
+
publicPath: string;
|
|
52
|
+
publicUrl?: string;
|
|
53
|
+
bugsLink?: string;
|
|
54
|
+
videoSolutions?: boolean;
|
|
55
|
+
skills: Array<string>;
|
|
56
|
+
telemetry?: TTelemetryUrls;
|
|
57
|
+
variables?: TVariables;
|
|
58
|
+
suggestions: TSuggestions;
|
|
59
|
+
warnings: TWarnings;
|
|
60
|
+
runHook: (...agrs: Array<any>) => void;
|
|
61
|
+
testingFinishedCallback: (arg: any | undefined) => void;
|
|
62
|
+
}
|
|
63
|
+
export type TAgent = "os" | "vscode" | null;
|
|
64
|
+
type TSuggestions = {
|
|
65
|
+
agent: TAgent;
|
|
66
|
+
};
|
|
67
|
+
type TWarnings = {
|
|
68
|
+
agent?: string;
|
|
69
|
+
extension?: string;
|
|
70
|
+
};
|
|
71
|
+
type TVariable = {
|
|
72
|
+
type: "command" | "string";
|
|
73
|
+
source: string;
|
|
74
|
+
};
|
|
75
|
+
type TVariables = {
|
|
76
|
+
[key: string]: TVariable | string;
|
|
77
|
+
};
|
|
78
|
+
export interface IConfigObj {
|
|
79
|
+
session?: number;
|
|
80
|
+
currentExercise?: any;
|
|
81
|
+
config?: IConfig;
|
|
82
|
+
exercises?: Array<IExercise>;
|
|
83
|
+
confPath?: IConfigPath;
|
|
84
|
+
address?: string;
|
|
85
|
+
}
|
|
86
|
+
export {};
|
package/lib/models/config.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/lib/models/counter.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
interface ILinks {
|
|
2
|
-
error: number;
|
|
3
|
-
total: number;
|
|
4
|
-
}
|
|
5
|
-
export interface ICounter {
|
|
6
|
-
images: ILinks;
|
|
7
|
-
links: ILinks;
|
|
8
|
-
exercises: number;
|
|
9
|
-
readmeFiles: number;
|
|
10
|
-
}
|
|
11
|
-
export {};
|
|
1
|
+
interface ILinks {
|
|
2
|
+
error: number;
|
|
3
|
+
total: number;
|
|
4
|
+
}
|
|
5
|
+
export interface ICounter {
|
|
6
|
+
images: ILinks;
|
|
7
|
+
links: ILinks;
|
|
8
|
+
exercises: number;
|
|
9
|
+
readmeFiles: number;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
package/lib/models/counter.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/lib/models/errors.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export interface ISolution {
|
|
2
|
-
video?: string;
|
|
3
|
-
message: string;
|
|
4
|
-
slug?: string;
|
|
5
|
-
gif: string;
|
|
6
|
-
}
|
|
7
|
-
export interface IError extends TypeError {
|
|
8
|
-
status?: number;
|
|
9
|
-
type?: "validation-error" | "not-found-error" | "compiler-error" | "testing-error" | "auth-error" | "internal-error";
|
|
10
|
-
slug?: string;
|
|
11
|
-
video?: string;
|
|
12
|
-
message: string;
|
|
13
|
-
gif?: string;
|
|
14
|
-
stdout?: string;
|
|
15
|
-
}
|
|
1
|
+
export interface ISolution {
|
|
2
|
+
video?: string;
|
|
3
|
+
message: string;
|
|
4
|
+
slug?: string;
|
|
5
|
+
gif: string;
|
|
6
|
+
}
|
|
7
|
+
export interface IError extends TypeError {
|
|
8
|
+
status?: number;
|
|
9
|
+
type?: "validation-error" | "not-found-error" | "compiler-error" | "testing-error" | "auth-error" | "internal-error";
|
|
10
|
+
slug?: string;
|
|
11
|
+
video?: string;
|
|
12
|
+
message: string;
|
|
13
|
+
gif?: string;
|
|
14
|
+
stdout?: string;
|
|
15
|
+
}
|
package/lib/models/errors.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,30 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
1
|
+
import { IFile } from "./file";
|
|
2
|
+
import { IConfig } from "./config";
|
|
3
|
+
import { ISocket } from "./socket";
|
|
4
|
+
export interface IExercise {
|
|
5
|
+
position?: number;
|
|
6
|
+
files: Array<IFile>;
|
|
7
|
+
slug: string;
|
|
8
|
+
path: string;
|
|
9
|
+
done: boolean;
|
|
10
|
+
language?: string | null;
|
|
11
|
+
entry?: string | null;
|
|
12
|
+
graded?: boolean;
|
|
13
|
+
translations?: {
|
|
14
|
+
[key: string]: string;
|
|
15
|
+
};
|
|
16
|
+
title: string;
|
|
17
|
+
getReadme?: (lang: string | null) => any;
|
|
18
|
+
getFile?: (name: string) => string | Buffer;
|
|
19
|
+
saveFile?: (name: string, content: string) => void;
|
|
20
|
+
getTestReport?: () => any;
|
|
21
|
+
test?: (sessionConfig: any, config: IConfig, socket: ISocket) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface IExerciseData {
|
|
24
|
+
lastMessages?: any;
|
|
25
|
+
userMessage?: string;
|
|
26
|
+
exerciseSlug: string;
|
|
27
|
+
entryPoint?: string;
|
|
28
|
+
files: string[];
|
|
29
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/lib/models/file.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export interface IFile {
|
|
2
|
-
path: string;
|
|
3
|
-
name: string;
|
|
4
|
-
hidden: boolean;
|
|
5
|
-
}
|
|
1
|
+
export interface IFile {
|
|
2
|
+
path: string;
|
|
3
|
+
name: string;
|
|
4
|
+
hidden: boolean;
|
|
5
|
+
}
|
package/lib/models/file.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/lib/models/findings.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
interface IFindingOption {
|
|
2
|
-
content: string;
|
|
3
|
-
absUrl: string;
|
|
4
|
-
mdUrl: string;
|
|
5
|
-
relUrl: string;
|
|
6
|
-
}
|
|
7
|
-
interface ILinks {
|
|
8
|
-
[key: string]: IFindingOption;
|
|
9
|
-
}
|
|
10
|
-
export interface IFindings {
|
|
11
|
-
relativeImages?: ILinks;
|
|
12
|
-
externalImages?: ILinks;
|
|
13
|
-
markdownLinks?: ILinks;
|
|
14
|
-
url?: ILinks;
|
|
15
|
-
uploadcare?: ILinks;
|
|
16
|
-
}
|
|
17
|
-
export {};
|
|
1
|
+
interface IFindingOption {
|
|
2
|
+
content: string;
|
|
3
|
+
absUrl: string;
|
|
4
|
+
mdUrl: string;
|
|
5
|
+
relUrl: string;
|
|
6
|
+
}
|
|
7
|
+
interface ILinks {
|
|
8
|
+
[key: string]: IFindingOption;
|
|
9
|
+
}
|
|
10
|
+
export interface IFindings {
|
|
11
|
+
relativeImages?: ILinks;
|
|
12
|
+
externalImages?: ILinks;
|
|
13
|
+
markdownLinks?: ILinks;
|
|
14
|
+
url?: ILinks;
|
|
15
|
+
uploadcare?: ILinks;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
package/lib/models/findings.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|