@learnpack/learnpack 2.1.39 → 2.1.40
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 +370 -35
- package/bin/run +17 -17
- package/bin/run.cmd +3 -3
- package/lib/commands/audit.d.ts +6 -6
- package/lib/commands/audit.js +342 -342
- package/lib/commands/clean.d.ts +8 -8
- package/lib/commands/clean.js +25 -25
- package/lib/commands/download.d.ts +13 -13
- package/lib/commands/download.js +55 -55
- package/lib/commands/init.d.ts +9 -9
- package/lib/commands/init.js +123 -123
- package/lib/commands/login.d.ts +14 -14
- package/lib/commands/login.js +37 -37
- package/lib/commands/logout.d.ts +14 -14
- package/lib/commands/logout.js +37 -37
- package/lib/commands/publish.d.ts +14 -14
- package/lib/commands/publish.js +82 -82
- package/lib/commands/start.d.ts +7 -7
- package/lib/commands/start.js +239 -208
- 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 +41 -41
- package/lib/managers/config/defaults.js +44 -44
- package/lib/managers/config/exercise.d.ts +36 -36
- package/lib/managers/config/exercise.js +236 -236
- package/lib/managers/config/index.d.ts +3 -3
- package/lib/managers/config/index.js +337 -337
- package/lib/managers/file.d.ts +14 -14
- package/lib/managers/file.js +153 -153
- package/lib/managers/gitpod.d.ts +3 -3
- package/lib/managers/gitpod.js +67 -67
- package/lib/managers/server/index.d.ts +6 -6
- package/lib/managers/server/index.js +58 -58
- package/lib/managers/server/routes.d.ts +4 -4
- package/lib/managers/server/routes.js +219 -219
- 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 +176 -176
- package/lib/managers/telemetry.d.ts +74 -74
- package/lib/managers/telemetry.js +206 -206
- 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 +68 -67
- 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 +30 -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 +36 -32
- 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 +61 -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 +2 -0
- package/lib/utils/checkNotInstalled.js +36 -0
- 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 +100 -100
- package/lib/utils/exercisesQueue.d.ts +9 -9
- package/lib/utils/exercisesQueue.js +38 -38
- package/lib/utils/fileQueue.d.ts +40 -40
- package/lib/utils/fileQueue.js +168 -168
- package/lib/utils/misc.d.ts +1 -1
- package/lib/utils/misc.js +23 -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 +17 -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 +139 -139
- package/src/commands/audit.ts +443 -443
- package/src/commands/clean.ts +29 -29
- package/src/commands/download.ts +61 -61
- package/src/commands/init.ts +170 -170
- package/src/commands/login.ts +42 -42
- package/src/commands/logout.ts +43 -43
- package/src/commands/publish.ts +107 -107
- package/src/commands/start.ts +53 -23
- package/src/commands/test.ts +85 -85
- package/src/index.ts +1 -1
- package/src/managers/config/allowed_files.ts +29 -29
- package/src/managers/config/defaults.ts +42 -42
- package/src/managers/config/exercise.ts +311 -311
- package/src/managers/config/index.ts +455 -455
- package/src/managers/file.ts +196 -196
- package/src/managers/gitpod.ts +84 -84
- package/src/managers/server/index.ts +78 -78
- package/src/managers/server/routes.ts +330 -330
- package/src/managers/session.ts +145 -145
- package/src/managers/socket.ts +250 -250
- package/src/managers/telemetry.ts +346 -346
- package/src/managers/test.ts +83 -83
- package/src/models/action.ts +10 -10
- package/src/models/audit.ts +16 -16
- package/src/models/config-manager.ts +23 -23
- package/src/models/config.ts +5 -3
- package/src/models/counter.ts +11 -11
- package/src/models/errors.ts +22 -22
- package/src/models/exercise-obj.ts +29 -29
- package/src/models/file.ts +5 -5
- package/src/models/findings.ts +18 -18
- package/src/models/flags.ts +10 -10
- package/src/models/front-matter.ts +11 -11
- package/src/models/gitpod-data.ts +19 -19
- package/src/models/language.ts +4 -4
- package/src/models/package.ts +7 -7
- package/src/models/plugin-config.ts +17 -17
- package/src/models/session.ts +34 -34
- package/src/models/socket.ts +5 -0
- package/src/models/status.ts +16 -16
- package/src/models/success-types.ts +1 -1
- package/src/plugin/command/compile.ts +17 -17
- package/src/plugin/command/test.ts +30 -30
- package/src/plugin/index.ts +6 -6
- package/src/plugin/plugin.ts +94 -94
- package/src/plugin/utils.ts +87 -87
- package/src/types/node-fetch.d.ts +1 -1
- package/src/ui/download.ts +71 -71
- package/src/utils/BaseCommand.ts +48 -48
- package/src/utils/SessionCommand.ts +43 -43
- package/src/utils/api.ts +303 -303
- package/src/utils/audit.ts +393 -393
- package/src/utils/checkNotInstalled.ts +46 -0
- package/src/utils/console.ts +24 -24
- package/src/utils/errors.ts +117 -117
- package/src/utils/exercisesQueue.ts +51 -51
- package/src/utils/fileQueue.ts +198 -198
- package/src/utils/misc.ts +23 -23
- package/src/utils/osOperations.ts +79 -79
- package/src/utils/templates/gitignore.txt +19 -19
- package/src/utils/templates/incremental/.learn/exercises/01-hello-world/README.es.md +24 -24
- package/src/utils/templates/incremental/.learn/exercises/01-hello-world/README.md +24 -24
- package/src/utils/templates/incremental/README.ejs +4 -4
- package/src/utils/templates/incremental/README.es.ejs +4 -4
- package/src/utils/templates/isolated/01-hello-world/README.es.md +26 -26
- package/src/utils/templates/isolated/01-hello-world/README.md +26 -26
- package/src/utils/templates/isolated/README.ejs +4 -4
- package/src/utils/templates/isolated/README.es.ejs +4 -4
- package/src/utils/templates/no-grading/README.ejs +4 -4
- package/src/utils/templates/no-grading/README.es.ejs +4 -4
- package/src/utils/validators.ts +18 -18
- package/src/utils/watcher.ts +27 -27
package/lib/commands/clean.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
-
declare class CleanCommand extends SessionCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: any;
|
|
5
|
-
init(): Promise<void>;
|
|
6
|
-
run(): Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
export default CleanCommand;
|
|
1
|
+
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
+
declare class CleanCommand extends SessionCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: any;
|
|
5
|
+
init(): Promise<void>;
|
|
6
|
+
run(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export default CleanCommand;
|
package/lib/commands/clean.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// import {flags} from '@oclif/command'
|
|
4
|
-
const console_1 = require("../utils/console");
|
|
5
|
-
const SessionCommand_1 = require("../utils/SessionCommand");
|
|
6
|
-
class CleanCommand extends SessionCommand_1.default {
|
|
7
|
-
async init() {
|
|
8
|
-
const { flags } = this.parse(CleanCommand);
|
|
9
|
-
await this.initSession(flags);
|
|
10
|
-
}
|
|
11
|
-
async run() {
|
|
12
|
-
var _a;
|
|
13
|
-
const { flags } = this.parse(CleanCommand);
|
|
14
|
-
(_a = this.configManager) === null || _a === void 0 ? void 0 : _a.clean();
|
|
15
|
-
console_1.default.success("Package cleaned successfully, ready to publish");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
CleanCommand.description = `Clean the configuration object
|
|
19
|
-
...
|
|
20
|
-
Extra documentation goes here
|
|
21
|
-
`;
|
|
22
|
-
CleanCommand.flags = {
|
|
23
|
-
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
24
|
-
};
|
|
25
|
-
exports.default = CleanCommand;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// import {flags} from '@oclif/command'
|
|
4
|
+
const console_1 = require("../utils/console");
|
|
5
|
+
const SessionCommand_1 = require("../utils/SessionCommand");
|
|
6
|
+
class CleanCommand extends SessionCommand_1.default {
|
|
7
|
+
async init() {
|
|
8
|
+
const { flags } = this.parse(CleanCommand);
|
|
9
|
+
await this.initSession(flags);
|
|
10
|
+
}
|
|
11
|
+
async run() {
|
|
12
|
+
var _a;
|
|
13
|
+
const { flags } = this.parse(CleanCommand);
|
|
14
|
+
(_a = this.configManager) === null || _a === void 0 ? void 0 : _a.clean();
|
|
15
|
+
console_1.default.success("Package cleaned successfully, ready to publish");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
CleanCommand.description = `Clean the configuration object
|
|
19
|
+
...
|
|
20
|
+
Extra documentation goes here
|
|
21
|
+
`;
|
|
22
|
+
CleanCommand.flags = {
|
|
23
|
+
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
24
|
+
};
|
|
25
|
+
exports.default = CleanCommand;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Command } from "@oclif/command";
|
|
2
|
-
declare class DownloadCommand extends Command {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: any;
|
|
5
|
-
static args: {
|
|
6
|
-
name: string;
|
|
7
|
-
required: boolean;
|
|
8
|
-
description: string;
|
|
9
|
-
hidden: boolean;
|
|
10
|
-
}[];
|
|
11
|
-
run(): Promise<null | undefined>;
|
|
12
|
-
}
|
|
13
|
-
export default DownloadCommand;
|
|
1
|
+
import { Command } from "@oclif/command";
|
|
2
|
+
declare class DownloadCommand extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: any;
|
|
5
|
+
static args: {
|
|
6
|
+
name: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
description: string;
|
|
9
|
+
hidden: boolean;
|
|
10
|
+
}[];
|
|
11
|
+
run(): Promise<null | undefined>;
|
|
12
|
+
}
|
|
13
|
+
export default DownloadCommand;
|
package/lib/commands/download.js
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const command_1 = require("@oclif/command");
|
|
4
|
-
// import fetch from 'node-fetch'
|
|
5
|
-
const file_1 = require("../managers/file");
|
|
6
|
-
const console_1 = require("../utils/console");
|
|
7
|
-
const api_1 = require("../utils/api");
|
|
8
|
-
const download_1 = require("../ui/download");
|
|
9
|
-
// const BaseCommand = require('../utils/BaseCommand');
|
|
10
|
-
class DownloadCommand extends command_1.Command {
|
|
11
|
-
// async init() {
|
|
12
|
-
// const {flags} = this.parse(DownloadCommand)
|
|
13
|
-
// await this.initSession(flags)
|
|
14
|
-
// }
|
|
15
|
-
async run() {
|
|
16
|
-
const { /* flags, */ args } = this.parse(DownloadCommand);
|
|
17
|
-
// start watching for file changes
|
|
18
|
-
let _package = args.package;
|
|
19
|
-
if (!_package) {
|
|
20
|
-
_package = (await download_1.askPackage());
|
|
21
|
-
}
|
|
22
|
-
if (!_package) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
const packageInfo = await api_1.default.getAllPackages({ slug: _package });
|
|
27
|
-
if (packageInfo.results.length === 0)
|
|
28
|
-
console_1.default.error(`Package ${_package} not found`);
|
|
29
|
-
else
|
|
30
|
-
file_1.clone(packageInfo.results[0].repository)
|
|
31
|
-
.then(_result => {
|
|
32
|
-
console_1.default.success("Successfully downloaded");
|
|
33
|
-
console_1.default.info(`You can now CD into the folder like this: $ cd ${_package}`);
|
|
34
|
-
})
|
|
35
|
-
.catch(error => console_1.default.error(error.message || error));
|
|
36
|
-
}
|
|
37
|
-
catch (_a) { }
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
DownloadCommand.description = `Describe the command here
|
|
41
|
-
...
|
|
42
|
-
Extra documentation goes here
|
|
43
|
-
`;
|
|
44
|
-
DownloadCommand.flags = {
|
|
45
|
-
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
46
|
-
};
|
|
47
|
-
DownloadCommand.args = [
|
|
48
|
-
{
|
|
49
|
-
name: "package",
|
|
50
|
-
required: false,
|
|
51
|
-
description: "The unique string that identifies this package on learnpack",
|
|
52
|
-
hidden: false,
|
|
53
|
-
},
|
|
54
|
-
];
|
|
55
|
-
exports.default = DownloadCommand;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@oclif/command");
|
|
4
|
+
// import fetch from 'node-fetch'
|
|
5
|
+
const file_1 = require("../managers/file");
|
|
6
|
+
const console_1 = require("../utils/console");
|
|
7
|
+
const api_1 = require("../utils/api");
|
|
8
|
+
const download_1 = require("../ui/download");
|
|
9
|
+
// const BaseCommand = require('../utils/BaseCommand');
|
|
10
|
+
class DownloadCommand extends command_1.Command {
|
|
11
|
+
// async init() {
|
|
12
|
+
// const {flags} = this.parse(DownloadCommand)
|
|
13
|
+
// await this.initSession(flags)
|
|
14
|
+
// }
|
|
15
|
+
async run() {
|
|
16
|
+
const { /* flags, */ args } = this.parse(DownloadCommand);
|
|
17
|
+
// start watching for file changes
|
|
18
|
+
let _package = args.package;
|
|
19
|
+
if (!_package) {
|
|
20
|
+
_package = (await download_1.askPackage());
|
|
21
|
+
}
|
|
22
|
+
if (!_package) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const packageInfo = await api_1.default.getAllPackages({ slug: _package });
|
|
27
|
+
if (packageInfo.results.length === 0)
|
|
28
|
+
console_1.default.error(`Package ${_package} not found`);
|
|
29
|
+
else
|
|
30
|
+
file_1.clone(packageInfo.results[0].repository)
|
|
31
|
+
.then(_result => {
|
|
32
|
+
console_1.default.success("Successfully downloaded");
|
|
33
|
+
console_1.default.info(`You can now CD into the folder like this: $ cd ${_package}`);
|
|
34
|
+
})
|
|
35
|
+
.catch(error => console_1.default.error(error.message || error));
|
|
36
|
+
}
|
|
37
|
+
catch (_a) { }
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
DownloadCommand.description = `Describe the command here
|
|
41
|
+
...
|
|
42
|
+
Extra documentation goes here
|
|
43
|
+
`;
|
|
44
|
+
DownloadCommand.flags = {
|
|
45
|
+
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
46
|
+
};
|
|
47
|
+
DownloadCommand.args = [
|
|
48
|
+
{
|
|
49
|
+
name: "package",
|
|
50
|
+
required: false,
|
|
51
|
+
description: "The unique string that identifies this package on learnpack",
|
|
52
|
+
hidden: false,
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
exports.default = DownloadCommand;
|
package/lib/commands/init.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import BaseCommand from "../utils/BaseCommand";
|
|
2
|
-
declare class InitComand extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: {
|
|
5
|
-
grading: import("@oclif/parser/lib/flags").IBooleanFlag<void>;
|
|
6
|
-
};
|
|
7
|
-
run(): Promise<void>;
|
|
8
|
-
}
|
|
9
|
-
export default InitComand;
|
|
1
|
+
import BaseCommand from "../utils/BaseCommand";
|
|
2
|
+
declare class InitComand extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
grading: import("@oclif/parser/lib/flags").IBooleanFlag<void>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export default InitComand;
|
package/lib/commands/init.js
CHANGED
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const command_1 = require("@oclif/command");
|
|
4
|
-
const BaseCommand_1 = require("../utils/BaseCommand");
|
|
5
|
-
// eslint-disable-next-line
|
|
6
|
-
const fs = require("fs-extra");
|
|
7
|
-
const prompts = require("prompts");
|
|
8
|
-
const cli_ux_1 = require("cli-ux");
|
|
9
|
-
const eta = require("eta");
|
|
10
|
-
const console_1 = require("../utils/console");
|
|
11
|
-
const errors_1 = require("../utils/errors");
|
|
12
|
-
const path = require("path");
|
|
13
|
-
class InitComand extends BaseCommand_1.default {
|
|
14
|
-
async run() {
|
|
15
|
-
const { flags } = this.parse(InitComand);
|
|
16
|
-
// if the folder/file .learn or .breathecode aleady exists
|
|
17
|
-
await alreadyInitialized();
|
|
18
|
-
const choices = await prompts([
|
|
19
|
-
{
|
|
20
|
-
type: "select",
|
|
21
|
-
name: "grading",
|
|
22
|
-
message: "Is the auto-grading going to be isolated or incremental?",
|
|
23
|
-
choices: [
|
|
24
|
-
{
|
|
25
|
-
title: "Incremental: Build on top of each other like a tutorial",
|
|
26
|
-
value: "incremental",
|
|
27
|
-
},
|
|
28
|
-
{ title: "Isolated: Small separated exercises", value: "isolated" },
|
|
29
|
-
{
|
|
30
|
-
title: "No grading: No feedback or testing whatsoever",
|
|
31
|
-
value: null,
|
|
32
|
-
},
|
|
33
|
-
],
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
type: "text",
|
|
37
|
-
name: "title",
|
|
38
|
-
initial: "My Interactive Tutorial",
|
|
39
|
-
message: "Title for your tutorial? Press enter to leave as it is",
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
type: "text",
|
|
43
|
-
name: "description",
|
|
44
|
-
initial: "",
|
|
45
|
-
message: "Description for your tutorial? Press enter to leave blank",
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
type: "select",
|
|
49
|
-
name: "difficulty",
|
|
50
|
-
message: "How difficulty will be to complete the tutorial?",
|
|
51
|
-
choices: [
|
|
52
|
-
{ title: "Begginer (no previous experience)", value: "beginner" },
|
|
53
|
-
{ title: "Easy (just a bit of experience required)", value: "easy" },
|
|
54
|
-
{
|
|
55
|
-
title: "Intermediate (you need experience)",
|
|
56
|
-
value: "intermediate",
|
|
57
|
-
},
|
|
58
|
-
{ title: "Hard (master the topic)", value: "hard" },
|
|
59
|
-
],
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
type: "text",
|
|
63
|
-
name: "duration",
|
|
64
|
-
initial: "1",
|
|
65
|
-
message: "How many hours avg it takes to complete (number)?",
|
|
66
|
-
validate: (value) => {
|
|
67
|
-
const n = Math.floor(Number(value));
|
|
68
|
-
return (n !== Number.POSITIVE_INFINITY && String(n) === value && n >= 0);
|
|
69
|
-
},
|
|
70
|
-
},
|
|
71
|
-
]);
|
|
72
|
-
const packageInfo = {
|
|
73
|
-
grading: choices.grading,
|
|
74
|
-
difficulty: choices.difficulty,
|
|
75
|
-
duration: parseInt(choices.duration),
|
|
76
|
-
description: choices.description,
|
|
77
|
-
title: choices.title,
|
|
78
|
-
slug: choices.title
|
|
79
|
-
.toLowerCase()
|
|
80
|
-
.replace(/ /g, "-")
|
|
81
|
-
.replace(/[^\w-]+/g, ""),
|
|
82
|
-
};
|
|
83
|
-
cli_ux_1.default.action.start("Initializing package");
|
|
84
|
-
const languages = ["en", "es"];
|
|
85
|
-
const templatesDir = path.resolve(__dirname, "../../src/utils/templates/" + choices.grading || "no-grading");
|
|
86
|
-
if (!fs.existsSync(templatesDir))
|
|
87
|
-
throw errors_1.ValidationError(`Template ${templatesDir} does not exists`);
|
|
88
|
-
await fs.copySync(templatesDir, "./");
|
|
89
|
-
// Creating README files
|
|
90
|
-
// eslint-disable-next-line
|
|
91
|
-
languages.forEach((language) => {
|
|
92
|
-
const readmeFilename = `README${language !== "en" ? `.${language}` : ""}`;
|
|
93
|
-
fs.writeFileSync(`./${readmeFilename}.md`, eta.render(fs.readFileSync(path.resolve(__dirname, `${templatesDir}/${readmeFilename}.ejs`), "utf-8"), packageInfo));
|
|
94
|
-
if (fs.existsSync(`./${readmeFilename}.ejs`))
|
|
95
|
-
fs.removeSync(`./${readmeFilename}.ejs`);
|
|
96
|
-
});
|
|
97
|
-
if (!fs.existsSync("./.gitignore"))
|
|
98
|
-
fs.copyFile(path.resolve(__dirname, "../../src/utils/templates/gitignore.txt"), "./.gitignore");
|
|
99
|
-
fs.writeFileSync("./learn.json", JSON.stringify(packageInfo, null, 2));
|
|
100
|
-
cli_ux_1.default.action.stop();
|
|
101
|
-
console_1.default.success(`😋 Package initialized successfully`);
|
|
102
|
-
console_1.default.help(`Start the exercises by running the following command on your terminal: $ learnpack start`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
InitComand.description = "Create a new learning package: Book, Tutorial or Exercise";
|
|
106
|
-
InitComand.flags = Object.assign(Object.assign({}, BaseCommand_1.default.flags), { grading: command_1.flags.help({ char: "h" }) });
|
|
107
|
-
const alreadyInitialized = () => new Promise((resolve, reject) => {
|
|
108
|
-
fs.readdir("./", function (err, files) {
|
|
109
|
-
files = files.filter((f) => [".learn", "learn.json", "bc.json", ".breathecode"].includes(f));
|
|
110
|
-
if (err) {
|
|
111
|
-
reject(errors_1.ValidationError(err.message));
|
|
112
|
-
throw errors_1.ValidationError(err.message);
|
|
113
|
-
}
|
|
114
|
-
else if (files.length > 0) {
|
|
115
|
-
reject(errors_1.ValidationError("It seems the package is already initialized because we've found the following files: " +
|
|
116
|
-
files.join(",")));
|
|
117
|
-
throw errors_1.ValidationError("It seems the package is already initialized because we've found the following files: " +
|
|
118
|
-
files.join(","));
|
|
119
|
-
}
|
|
120
|
-
resolve(false);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
exports.default = InitComand;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@oclif/command");
|
|
4
|
+
const BaseCommand_1 = require("../utils/BaseCommand");
|
|
5
|
+
// eslint-disable-next-line
|
|
6
|
+
const fs = require("fs-extra");
|
|
7
|
+
const prompts = require("prompts");
|
|
8
|
+
const cli_ux_1 = require("cli-ux");
|
|
9
|
+
const eta = require("eta");
|
|
10
|
+
const console_1 = require("../utils/console");
|
|
11
|
+
const errors_1 = require("../utils/errors");
|
|
12
|
+
const path = require("path");
|
|
13
|
+
class InitComand extends BaseCommand_1.default {
|
|
14
|
+
async run() {
|
|
15
|
+
const { flags } = this.parse(InitComand);
|
|
16
|
+
// if the folder/file .learn or .breathecode aleady exists
|
|
17
|
+
await alreadyInitialized();
|
|
18
|
+
const choices = await prompts([
|
|
19
|
+
{
|
|
20
|
+
type: "select",
|
|
21
|
+
name: "grading",
|
|
22
|
+
message: "Is the auto-grading going to be isolated or incremental?",
|
|
23
|
+
choices: [
|
|
24
|
+
{
|
|
25
|
+
title: "Incremental: Build on top of each other like a tutorial",
|
|
26
|
+
value: "incremental",
|
|
27
|
+
},
|
|
28
|
+
{ title: "Isolated: Small separated exercises", value: "isolated" },
|
|
29
|
+
{
|
|
30
|
+
title: "No grading: No feedback or testing whatsoever",
|
|
31
|
+
value: null,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: "text",
|
|
37
|
+
name: "title",
|
|
38
|
+
initial: "My Interactive Tutorial",
|
|
39
|
+
message: "Title for your tutorial? Press enter to leave as it is",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
type: "text",
|
|
43
|
+
name: "description",
|
|
44
|
+
initial: "",
|
|
45
|
+
message: "Description for your tutorial? Press enter to leave blank",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: "select",
|
|
49
|
+
name: "difficulty",
|
|
50
|
+
message: "How difficulty will be to complete the tutorial?",
|
|
51
|
+
choices: [
|
|
52
|
+
{ title: "Begginer (no previous experience)", value: "beginner" },
|
|
53
|
+
{ title: "Easy (just a bit of experience required)", value: "easy" },
|
|
54
|
+
{
|
|
55
|
+
title: "Intermediate (you need experience)",
|
|
56
|
+
value: "intermediate",
|
|
57
|
+
},
|
|
58
|
+
{ title: "Hard (master the topic)", value: "hard" },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: "text",
|
|
63
|
+
name: "duration",
|
|
64
|
+
initial: "1",
|
|
65
|
+
message: "How many hours avg it takes to complete (number)?",
|
|
66
|
+
validate: (value) => {
|
|
67
|
+
const n = Math.floor(Number(value));
|
|
68
|
+
return (n !== Number.POSITIVE_INFINITY && String(n) === value && n >= 0);
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
]);
|
|
72
|
+
const packageInfo = {
|
|
73
|
+
grading: choices.grading,
|
|
74
|
+
difficulty: choices.difficulty,
|
|
75
|
+
duration: parseInt(choices.duration),
|
|
76
|
+
description: choices.description,
|
|
77
|
+
title: choices.title,
|
|
78
|
+
slug: choices.title
|
|
79
|
+
.toLowerCase()
|
|
80
|
+
.replace(/ /g, "-")
|
|
81
|
+
.replace(/[^\w-]+/g, ""),
|
|
82
|
+
};
|
|
83
|
+
cli_ux_1.default.action.start("Initializing package");
|
|
84
|
+
const languages = ["en", "es"];
|
|
85
|
+
const templatesDir = path.resolve(__dirname, "../../src/utils/templates/" + choices.grading || "no-grading");
|
|
86
|
+
if (!fs.existsSync(templatesDir))
|
|
87
|
+
throw errors_1.ValidationError(`Template ${templatesDir} does not exists`);
|
|
88
|
+
await fs.copySync(templatesDir, "./");
|
|
89
|
+
// Creating README files
|
|
90
|
+
// eslint-disable-next-line
|
|
91
|
+
languages.forEach((language) => {
|
|
92
|
+
const readmeFilename = `README${language !== "en" ? `.${language}` : ""}`;
|
|
93
|
+
fs.writeFileSync(`./${readmeFilename}.md`, eta.render(fs.readFileSync(path.resolve(__dirname, `${templatesDir}/${readmeFilename}.ejs`), "utf-8"), packageInfo));
|
|
94
|
+
if (fs.existsSync(`./${readmeFilename}.ejs`))
|
|
95
|
+
fs.removeSync(`./${readmeFilename}.ejs`);
|
|
96
|
+
});
|
|
97
|
+
if (!fs.existsSync("./.gitignore"))
|
|
98
|
+
fs.copyFile(path.resolve(__dirname, "../../src/utils/templates/gitignore.txt"), "./.gitignore");
|
|
99
|
+
fs.writeFileSync("./learn.json", JSON.stringify(packageInfo, null, 2));
|
|
100
|
+
cli_ux_1.default.action.stop();
|
|
101
|
+
console_1.default.success(`😋 Package initialized successfully`);
|
|
102
|
+
console_1.default.help(`Start the exercises by running the following command on your terminal: $ learnpack start`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
InitComand.description = "Create a new learning package: Book, Tutorial or Exercise";
|
|
106
|
+
InitComand.flags = Object.assign(Object.assign({}, BaseCommand_1.default.flags), { grading: command_1.flags.help({ char: "h" }) });
|
|
107
|
+
const alreadyInitialized = () => new Promise((resolve, reject) => {
|
|
108
|
+
fs.readdir("./", function (err, files) {
|
|
109
|
+
files = files.filter((f) => [".learn", "learn.json", "bc.json", ".breathecode"].includes(f));
|
|
110
|
+
if (err) {
|
|
111
|
+
reject(errors_1.ValidationError(err.message));
|
|
112
|
+
throw errors_1.ValidationError(err.message);
|
|
113
|
+
}
|
|
114
|
+
else if (files.length > 0) {
|
|
115
|
+
reject(errors_1.ValidationError("It seems the package is already initialized because we've found the following files: " +
|
|
116
|
+
files.join(",")));
|
|
117
|
+
throw errors_1.ValidationError("It seems the package is already initialized because we've found the following files: " +
|
|
118
|
+
files.join(","));
|
|
119
|
+
}
|
|
120
|
+
resolve(false);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
exports.default = InitComand;
|
package/lib/commands/login.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
-
declare class LoginCommand extends SessionCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: any;
|
|
5
|
-
static args: {
|
|
6
|
-
name: string;
|
|
7
|
-
required: boolean;
|
|
8
|
-
description: string;
|
|
9
|
-
hidden: boolean;
|
|
10
|
-
}[];
|
|
11
|
-
init(): Promise<void>;
|
|
12
|
-
run(): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
export default LoginCommand;
|
|
1
|
+
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
+
declare class LoginCommand extends SessionCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: any;
|
|
5
|
+
static args: {
|
|
6
|
+
name: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
description: string;
|
|
9
|
+
hidden: boolean;
|
|
10
|
+
}[];
|
|
11
|
+
init(): Promise<void>;
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default LoginCommand;
|
package/lib/commands/login.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const SessionCommand_1 = require("../utils/SessionCommand");
|
|
4
|
-
const session_1 = require("../managers/session");
|
|
5
|
-
const console_1 = require("../utils/console");
|
|
6
|
-
class LoginCommand extends SessionCommand_1.default {
|
|
7
|
-
async init() {
|
|
8
|
-
const { flags } = this.parse(LoginCommand);
|
|
9
|
-
await this.initSession(flags);
|
|
10
|
-
}
|
|
11
|
-
async run() {
|
|
12
|
-
/* const {flags, args} = */ this.parse(LoginCommand);
|
|
13
|
-
try {
|
|
14
|
-
await session_1.default.login();
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
console_1.default.error("Error trying to authenticate");
|
|
18
|
-
console_1.default.error(error.message || error);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
LoginCommand.description = `Describe the command here
|
|
23
|
-
...
|
|
24
|
-
Extra documentation goes here
|
|
25
|
-
`;
|
|
26
|
-
LoginCommand.flags = {
|
|
27
|
-
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
28
|
-
};
|
|
29
|
-
LoginCommand.args = [
|
|
30
|
-
{
|
|
31
|
-
name: "package",
|
|
32
|
-
required: false,
|
|
33
|
-
description: "The unique string that identifies this package on learnpack",
|
|
34
|
-
hidden: false,
|
|
35
|
-
},
|
|
36
|
-
];
|
|
37
|
-
exports.default = LoginCommand;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const SessionCommand_1 = require("../utils/SessionCommand");
|
|
4
|
+
const session_1 = require("../managers/session");
|
|
5
|
+
const console_1 = require("../utils/console");
|
|
6
|
+
class LoginCommand extends SessionCommand_1.default {
|
|
7
|
+
async init() {
|
|
8
|
+
const { flags } = this.parse(LoginCommand);
|
|
9
|
+
await this.initSession(flags);
|
|
10
|
+
}
|
|
11
|
+
async run() {
|
|
12
|
+
/* const {flags, args} = */ this.parse(LoginCommand);
|
|
13
|
+
try {
|
|
14
|
+
await session_1.default.login();
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console_1.default.error("Error trying to authenticate");
|
|
18
|
+
console_1.default.error(error.message || error);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
LoginCommand.description = `Describe the command here
|
|
23
|
+
...
|
|
24
|
+
Extra documentation goes here
|
|
25
|
+
`;
|
|
26
|
+
LoginCommand.flags = {
|
|
27
|
+
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
28
|
+
};
|
|
29
|
+
LoginCommand.args = [
|
|
30
|
+
{
|
|
31
|
+
name: "package",
|
|
32
|
+
required: false,
|
|
33
|
+
description: "The unique string that identifies this package on learnpack",
|
|
34
|
+
hidden: false,
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
exports.default = LoginCommand;
|
package/lib/commands/logout.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
-
declare class LogoutCommand extends SessionCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: any;
|
|
5
|
-
static args: {
|
|
6
|
-
name: string;
|
|
7
|
-
required: boolean;
|
|
8
|
-
description: string;
|
|
9
|
-
hidden: boolean;
|
|
10
|
-
}[];
|
|
11
|
-
init(): Promise<void>;
|
|
12
|
-
run(): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
export default LogoutCommand;
|
|
1
|
+
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
+
declare class LogoutCommand extends SessionCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: any;
|
|
5
|
+
static args: {
|
|
6
|
+
name: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
description: string;
|
|
9
|
+
hidden: boolean;
|
|
10
|
+
}[];
|
|
11
|
+
init(): Promise<void>;
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default LogoutCommand;
|