@learnpack/learnpack 2.1.26 → 2.1.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. package/README.md +10 -10
  2. package/oclif.manifest.json +1 -1
  3. package/package.json +2 -1
  4. package/src/commands/audit.ts +113 -113
  5. package/src/commands/clean.ts +10 -10
  6. package/src/commands/download.ts +18 -18
  7. package/src/commands/init.ts +39 -39
  8. package/src/commands/login.ts +13 -13
  9. package/src/commands/logout.ts +9 -9
  10. package/src/commands/publish.ts +25 -25
  11. package/src/commands/start.ts +101 -75
  12. package/src/commands/test.ts +34 -34
  13. package/src/managers/config/allowed_files.ts +2 -2
  14. package/src/managers/config/defaults.ts +2 -2
  15. package/src/managers/config/exercise.ts +79 -79
  16. package/src/managers/config/index.ts +145 -145
  17. package/src/managers/file.ts +74 -65
  18. package/src/managers/server/index.ts +32 -31
  19. package/src/managers/server/routes.ts +139 -90
  20. package/src/managers/session.ts +53 -24
  21. package/src/managers/socket.ts +92 -79
  22. package/src/models/action.ts +8 -1
  23. package/src/models/config-manager.ts +2 -2
  24. package/src/models/config.ts +7 -2
  25. package/src/models/exercise-obj.ts +6 -3
  26. package/src/models/plugin-config.ts +2 -2
  27. package/src/models/session.ts +5 -2
  28. package/src/models/socket.ts +12 -6
  29. package/src/models/status.ts +15 -14
  30. package/src/plugin/command/compile.ts +10 -10
  31. package/src/plugin/command/test.ts +14 -14
  32. package/src/plugin/index.ts +5 -5
  33. package/src/plugin/plugin.ts +26 -26
  34. package/src/plugin/utils.ts +23 -23
  35. package/src/utils/BaseCommand.ts +16 -16
  36. package/src/utils/api.ts +143 -91
  37. package/src/utils/audit.ts +93 -96
  38. package/src/utils/exercisesQueue.ts +15 -15
  39. package/src/utils/fileQueue.ts +85 -85
  40. package/src/utils/watcher.ts +14 -14
  41. package/lib/commands/audit.d.ts +0 -6
  42. package/lib/commands/audit.js +0 -342
  43. package/lib/commands/clean.d.ts +0 -8
  44. package/lib/commands/clean.js +0 -25
  45. package/lib/commands/download.d.ts +0 -13
  46. package/lib/commands/download.js +0 -55
  47. package/lib/commands/init.d.ts +0 -9
  48. package/lib/commands/init.js +0 -123
  49. package/lib/commands/login.d.ts +0 -14
  50. package/lib/commands/login.js +0 -37
  51. package/lib/commands/logout.d.ts +0 -14
  52. package/lib/commands/logout.js +0 -37
  53. package/lib/commands/publish.d.ts +0 -14
  54. package/lib/commands/publish.js +0 -82
  55. package/lib/commands/start.d.ts +0 -7
  56. package/lib/commands/start.js +0 -165
  57. package/lib/commands/test.d.ts +0 -6
  58. package/lib/commands/test.js +0 -62
  59. package/lib/index.d.ts +0 -1
  60. package/lib/index.js +0 -4
  61. package/lib/managers/config/allowed_files.d.ts +0 -5
  62. package/lib/managers/config/allowed_files.js +0 -30
  63. package/lib/managers/config/defaults.d.ts +0 -39
  64. package/lib/managers/config/defaults.js +0 -40
  65. package/lib/managers/config/exercise.d.ts +0 -36
  66. package/lib/managers/config/exercise.js +0 -233
  67. package/lib/managers/config/index.d.ts +0 -3
  68. package/lib/managers/config/index.js +0 -320
  69. package/lib/managers/file.d.ts +0 -13
  70. package/lib/managers/file.js +0 -134
  71. package/lib/managers/gitpod.d.ts +0 -3
  72. package/lib/managers/gitpod.js +0 -67
  73. package/lib/managers/server/index.d.ts +0 -6
  74. package/lib/managers/server/index.js +0 -58
  75. package/lib/managers/server/routes.d.ts +0 -4
  76. package/lib/managers/server/routes.js +0 -167
  77. package/lib/managers/session.d.ts +0 -3
  78. package/lib/managers/session.js +0 -104
  79. package/lib/managers/socket.d.ts +0 -3
  80. package/lib/managers/socket.js +0 -164
  81. package/lib/managers/test.d.ts +0 -0
  82. package/lib/managers/test.js +0 -84
  83. package/lib/models/action.d.ts +0 -2
  84. package/lib/models/action.js +0 -2
  85. package/lib/models/audit.d.ts +0 -15
  86. package/lib/models/audit.js +0 -2
  87. package/lib/models/config-manager.d.ts +0 -21
  88. package/lib/models/config-manager.js +0 -2
  89. package/lib/models/config.d.ts +0 -62
  90. package/lib/models/config.js +0 -2
  91. package/lib/models/counter.d.ts +0 -11
  92. package/lib/models/counter.js +0 -2
  93. package/lib/models/errors.d.ts +0 -15
  94. package/lib/models/errors.js +0 -2
  95. package/lib/models/exercise-obj.d.ts +0 -27
  96. package/lib/models/exercise-obj.js +0 -2
  97. package/lib/models/file.d.ts +0 -5
  98. package/lib/models/file.js +0 -2
  99. package/lib/models/findings.d.ts +0 -17
  100. package/lib/models/findings.js +0 -2
  101. package/lib/models/flags.d.ts +0 -10
  102. package/lib/models/flags.js +0 -2
  103. package/lib/models/front-matter.d.ts +0 -11
  104. package/lib/models/front-matter.js +0 -2
  105. package/lib/models/gitpod-data.d.ts +0 -16
  106. package/lib/models/gitpod-data.js +0 -2
  107. package/lib/models/language.d.ts +0 -4
  108. package/lib/models/language.js +0 -2
  109. package/lib/models/package.d.ts +0 -7
  110. package/lib/models/package.js +0 -2
  111. package/lib/models/plugin-config.d.ts +0 -16
  112. package/lib/models/plugin-config.js +0 -2
  113. package/lib/models/session.d.ts +0 -23
  114. package/lib/models/session.js +0 -2
  115. package/lib/models/socket.d.ts +0 -31
  116. package/lib/models/socket.js +0 -2
  117. package/lib/models/status.d.ts +0 -1
  118. package/lib/models/status.js +0 -2
  119. package/lib/models/success-types.d.ts +0 -1
  120. package/lib/models/success-types.js +0 -2
  121. package/lib/plugin/command/compile.d.ts +0 -6
  122. package/lib/plugin/command/compile.js +0 -18
  123. package/lib/plugin/command/test.d.ts +0 -6
  124. package/lib/plugin/command/test.js +0 -25
  125. package/lib/plugin/index.d.ts +0 -27
  126. package/lib/plugin/index.js +0 -7
  127. package/lib/plugin/plugin.d.ts +0 -8
  128. package/lib/plugin/plugin.js +0 -68
  129. package/lib/plugin/utils.d.ts +0 -16
  130. package/lib/plugin/utils.js +0 -58
  131. package/lib/ui/download.d.ts +0 -5
  132. package/lib/ui/download.js +0 -61
  133. package/lib/utils/BaseCommand.d.ts +0 -8
  134. package/lib/utils/BaseCommand.js +0 -41
  135. package/lib/utils/SessionCommand.d.ts +0 -10
  136. package/lib/utils/SessionCommand.js +0 -47
  137. package/lib/utils/api.d.ts +0 -12
  138. package/lib/utils/api.js +0 -173
  139. package/lib/utils/audit.d.ts +0 -16
  140. package/lib/utils/audit.js +0 -302
  141. package/lib/utils/console.d.ts +0 -12
  142. package/lib/utils/console.js +0 -19
  143. package/lib/utils/errors.d.ts +0 -17
  144. package/lib/utils/errors.js +0 -100
  145. package/lib/utils/exercisesQueue.d.ts +0 -9
  146. package/lib/utils/exercisesQueue.js +0 -38
  147. package/lib/utils/fileQueue.d.ts +0 -40
  148. package/lib/utils/fileQueue.js +0 -168
  149. package/lib/utils/misc.d.ts +0 -1
  150. package/lib/utils/misc.js +0 -23
  151. package/lib/utils/validators.d.ts +0 -5
  152. package/lib/utils/validators.js +0 -17
  153. package/lib/utils/watcher.d.ts +0 -2
  154. package/lib/utils/watcher.js +0 -23
@@ -1,8 +0,0 @@
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,25 +0,0 @@
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 +0,0 @@
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,55 +0,0 @@
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,9 +0,0 @@
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,123 +0,0 @@
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,14 +0,0 @@
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,37 +0,0 @@
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,14 +0,0 @@
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,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // import {Command, flags} from '@oclif/command'
4
- // import { prompt } from "enquirer"
5
- // import fetch from 'node-fetch'
6
- const SessionCommand_1 = require("../utils/SessionCommand");
7
- const session_1 = require("../managers/session");
8
- // import Console from '../utils/console'
9
- // import { replace } from 'node-emoji'
10
- // import { validURL } from "../utils/validators"
11
- // const BaseCommand from '../utils/BaseCommand');
12
- class LogoutCommand extends SessionCommand_1.default {
13
- async init() {
14
- const { flags } = this.parse(LogoutCommand);
15
- await this.initSession(flags);
16
- }
17
- async run() {
18
- // const {flags, args} = this.parse(LogoutCommand)
19
- session_1.default.destroy();
20
- }
21
- }
22
- LogoutCommand.description = `Describe the command here
23
- ...
24
- Extra documentation goes here
25
- `;
26
- LogoutCommand.flags = {
27
- // name: flags.string({char: 'n', description: 'name to print'}),
28
- };
29
- LogoutCommand.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 = LogoutCommand;
@@ -1,14 +0,0 @@
1
- import SessionCommand from "../utils/SessionCommand";
2
- declare class PublishCommand 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 PublishCommand;
@@ -1,82 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const enquirer_1 = require("enquirer");
4
- const SessionCommand_1 = require("../utils/SessionCommand");
5
- const console_1 = require("../utils/console");
6
- const api_1 = require("../utils/api");
7
- const validators_1 = require("../utils/validators");
8
- // eslint-disable-next-line
9
- const fetch = require("node-fetch");
10
- class PublishCommand extends SessionCommand_1.default {
11
- async init() {
12
- const { flags } = this.parse(PublishCommand);
13
- await this.initSession(flags, true);
14
- }
15
- async run() {
16
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
17
- const { flags, args } = this.parse(PublishCommand);
18
- // avoid annonymus sessions
19
- // eslint-disable-next-line
20
- if (!this.session)
21
- return;
22
- console_1.default.info(`Session found for ${this.session.payload.email}, publishing the package...`);
23
- const configObject = (_a = this.configManager) === null || _a === void 0 ? void 0 : _a.get();
24
- if (((_b = configObject === null || configObject === void 0 ? void 0 : configObject.config) === null || _b === void 0 ? void 0 : _b.slug) === undefined ||
25
- !((_c = configObject.config) === null || _c === void 0 ? void 0 : _c.slug)) {
26
- throw new Error("The package is missing a slug (unique name identifier), please check your learn.json file and make sure it has a 'slug'");
27
- }
28
- if (!validators_1.validURL((_e = (_d = configObject === null || configObject === void 0 ? void 0 : configObject.config) === null || _d === void 0 ? void 0 : _d.repository) !== null && _e !== void 0 ? _e : "")) {
29
- throw new Error("The package has a missing or invalid 'repository' on the configuration file, it needs to be a Github URL");
30
- }
31
- else {
32
- const validateResp = await fetch((_f = configObject.config) === null || _f === void 0 ? void 0 : _f.repository, {
33
- method: "HEAD",
34
- });
35
- if (!validateResp.ok || validateResp.status !== 200) {
36
- throw new Error(`The specified repository URL on the configuration file does not exist or its private, only public repositories are allowed at the moment: ${(_g = configObject.config) === null || _g === void 0 ? void 0 : _g.repository}`);
37
- }
38
- }
39
- // start watching for file changes
40
- try {
41
- await api_1.default.publish(Object.assign(Object.assign({}, configObject), { author: this.session.payload.user_id }));
42
- console_1.default.success(`Package updated and published successfully: ${(_h = configObject.config) === null || _h === void 0 ? void 0 : _h.slug}`);
43
- }
44
- catch (error) {
45
- if (error.status === 404) {
46
- const answer = await enquirer_1.prompt([
47
- {
48
- type: "confirm",
49
- name: "create",
50
- message: `Package with slug ${(_j = configObject.config) === null || _j === void 0 ? void 0 : _j.slug} does not exist, do you want to create it?`,
51
- },
52
- ]);
53
- if (answer) {
54
- await api_1.default.update(Object.assign(Object.assign({}, configObject), { author: this.session.payload.user_id }));
55
- console_1.default.success(`Package created and published successfully: ${(_k = configObject.config) === null || _k === void 0 ? void 0 : _k.slug}`);
56
- }
57
- else {
58
- console_1.default.error("No answer from server");
59
- }
60
- }
61
- else {
62
- console_1.default.error(error.message);
63
- }
64
- }
65
- }
66
- }
67
- PublishCommand.description = `Describe the command here
68
- ...
69
- Extra documentation goes here
70
- `;
71
- PublishCommand.flags = {
72
- // name: flags.string({char: 'n', description: 'name to print'}),
73
- };
74
- PublishCommand.args = [
75
- {
76
- name: "package",
77
- required: false,
78
- description: "The unique string that identifies this package on learnpack",
79
- hidden: false,
80
- },
81
- ];
82
- exports.default = PublishCommand;
@@ -1,7 +0,0 @@
1
- import SessionCommand from "../utils/SessionCommand";
2
- export default class StartCommand extends SessionCommand {
3
- static description: string;
4
- static flags: any;
5
- init(): Promise<void>;
6
- run(): Promise<void>;
7
- }
@@ -1,165 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // import path from "path";
4
- const command_1 = require("@oclif/command");
5
- const SessionCommand_1 = require("../utils/SessionCommand");
6
- const console_1 = require("../utils/console");
7
- const socket_1 = require("../managers/socket");
8
- const fileQueue_1 = require("../utils/fileQueue");
9
- const file_1 = require("../managers/file");
10
- const misc_1 = require("../utils/misc");
11
- const server_1 = require("../managers/server");
12
- class StartCommand extends SessionCommand_1.default {
13
- // 🛑 IMPORTANT
14
- // Every command that will use the configManager needs this init method
15
- async init() {
16
- const { flags } = this.parse(StartCommand);
17
- await this.initSession(flags);
18
- }
19
- async run() {
20
- var _a, _b, _c;
21
- // get configuration object
22
- const configObject = (_a = this.configManager) === null || _a === void 0 ? void 0 : _a.get();
23
- const config = configObject === null || configObject === void 0 ? void 0 : configObject.config;
24
- if (configObject) {
25
- const { config } = configObject;
26
- // build exerises
27
- (_b = this.configManager) === null || _b === void 0 ? void 0 : _b.buildIndex();
28
- console_1.default.debug(`Grading: ${config === null || config === void 0 ? void 0 : config.grading} ${((_c = config === null || config === void 0 ? void 0 : config.disabledActions) === null || _c === void 0 ? void 0 : _c.includes("test")) ? "(disabled)" : ""}, editor: ${config === null || config === void 0 ? void 0 : config.editor.mode} ${config === null || config === void 0 ? void 0 : config.editor.version}, for ${Array.isArray(configObject === null || configObject === void 0 ? void 0 : configObject.exercises) ? configObject === null || configObject === void 0 ? void 0 : configObject.exercises.length :
29
- 0} exercises found`);
30
- // download app and decompress
31
- await file_1.downloadEditor(config === null || config === void 0 ? void 0 : config.editor.version, `${config === null || config === void 0 ? void 0 : config.dirPath}/app.tar.gz`);
32
- console_1.default.info("Decompressing LearnPack UI, this may take a minute...");
33
- await file_1.decompress(`${config === null || config === void 0 ? void 0 : config.dirPath}/app.tar.gz`, `${config === null || config === void 0 ? void 0 : config.dirPath}/_app/`);
34
- // listen to socket commands
35
- if (config && this.configManager) {
36
- const server = await server_1.default(configObject, this.configManager, process.env.NODE_ENV === "test");
37
- const dispatcher = fileQueue_1.default.dispatcher({
38
- create: true,
39
- path: `${config.dirPath}/vscode_queue.json`,
40
- });
41
- socket_1.default.start(config, server, false);
42
- socket_1.default.on("open", (data) => {
43
- console_1.default.debug("Opening these files: ", data);
44
- const files = misc_1.prioritizeHTMLFile(data.files);
45
- dispatcher.enqueue(dispatcher.events.OPEN_FILES, files);
46
- socket_1.default.ready("Ready to compile...");
47
- });
48
- socket_1.default.on("open_window", (data) => {
49
- console_1.default.debug("Opening window: ", data);
50
- dispatcher.enqueue(dispatcher.events.OPEN_WINDOW, data);
51
- socket_1.default.ready("Ready to compile...");
52
- });
53
- socket_1.default.on("reset", (exercise) => {
54
- var _a;
55
- try {
56
- (_a = this.configManager) === null || _a === void 0 ? void 0 : _a.reset(exercise.exerciseSlug);
57
- dispatcher.enqueue(dispatcher.events.RESET_EXERCISE, exercise.exerciseSlug);
58
- socket_1.default.ready("Ready to compile...");
59
- }
60
- catch (error) {
61
- socket_1.default.error("compiler-error", error.message ||
62
- "There was an error reseting the exercise");
63
- setTimeout(() => socket_1.default.ready("Ready to compile..."), 2000);
64
- }
65
- });
66
- // socket.on("preview", (data) => {
67
- // Console.debug("Preview triggered, removing the 'preview' action ")
68
- // socket.removeAllowed("preview")
69
- // socket.log('ready',['Ready to compile...'])
70
- // })
71
- socket_1.default.on("build", async (data) => {
72
- var _a;
73
- const exercise = (_a = this.configManager) === null || _a === void 0 ? void 0 : _a.getExercise(data.exerciseSlug);
74
- if (!(exercise === null || exercise === void 0 ? void 0 : exercise.language)) {
75
- socket_1.default.error("compiler-error", "Impossible to detect language to build for " +
76
- data.exerciseSlug +
77
- "...");
78
- return;
79
- }
80
- socket_1.default.log("compiling", "Building exercise " +
81
- data.exerciseSlug +
82
- " with " +
83
- exercise.language +
84
- "...");
85
- await this.config.runHook("action", {
86
- action: "compile",
87
- socket: socket_1.default,
88
- configuration: config,
89
- exercise,
90
- });
91
- });
92
- socket_1.default.on("test", async (data) => {
93
- var _a, _b;
94
- const exercise = (_a = this.configManager) === null || _a === void 0 ? void 0 : _a.getExercise(data.exerciseSlug);
95
- if (!(exercise === null || exercise === void 0 ? void 0 : exercise.language)) {
96
- socket_1.default.error("compiler-error", "Impossible to detect engine language for testing for " +
97
- data.exerciseSlug +
98
- "...");
99
- return;
100
- }
101
- if ((config === null || config === void 0 ? void 0 : config.disabledActions.includes("test")) || (config === null || config === void 0 ? void 0 : config.disableGrading)) {
102
- socket_1.default.ready("Grading is disabled on configuration");
103
- return true;
104
- }
105
- socket_1.default.log("testing", "Testing your exercise using the " + exercise.language + " engine.");
106
- await this.config.runHook("action", {
107
- action: "test",
108
- socket: socket_1.default,
109
- configuration: config,
110
- exercise,
111
- });
112
- (_b = this.configManager) === null || _b === void 0 ? void 0 : _b.save();
113
- return true;
114
- });
115
- const terminate = () => {
116
- console_1.default.debug("Terminating Learnpack...");
117
- server.terminate(() => {
118
- var _a;
119
- (_a = this.configManager) === null || _a === void 0 ? void 0 : _a.noCurrentExercise();
120
- dispatcher.enqueue(dispatcher.events.END);
121
- process.exit();
122
- });
123
- };
124
- server.on("close", terminate);
125
- process.on("SIGINT", terminate);
126
- process.on("SIGTERM", terminate);
127
- process.on("SIGHUP", terminate);
128
- // finish the server startup
129
- setTimeout(() => dispatcher.enqueue(dispatcher.events.RUNNING), 1000);
130
- // start watching for file changes
131
- if (StartCommand.flags.watch)
132
- this.configManager.watchIndex(_exercises => socket_1.default.reload(null, _exercises));
133
- }
134
- }
135
- }
136
- }
137
- exports.default = StartCommand;
138
- StartCommand.description = "Runs a small server with all the exercise instructions";
139
- StartCommand.flags = Object.assign(Object.assign({}, SessionCommand_1.default.flags), { port: command_1.flags.string({ char: "p", description: "server port" }), host: command_1.flags.string({ char: "h", description: "server host" }), disableGrading: command_1.flags.boolean({
140
- char: "D",
141
- description: "disble grading functionality",
142
- default: false,
143
- }),
144
- // disableGrading: flags.boolean({char: 'dg', description: 'disble grading functionality', default: false }),
145
- watch: command_1.flags.boolean({
146
- char: "w",
147
- description: "Watch for file changes",
148
- default: false,
149
- }), editor: command_1.flags.string({
150
- char: "e",
151
- description: "[standalone, gitpod]",
152
- options: ["standalone", "gitpod"],
153
- }), version: command_1.flags.string({
154
- char: "v",
155
- description: "E.g: 1.0.1",
156
- default: undefined,
157
- }), grading: command_1.flags.string({
158
- char: "g",
159
- description: "[isolated, incremental]",
160
- options: ["isolated", "incremental"],
161
- }), debug: command_1.flags.boolean({
162
- char: "d",
163
- description: "debugger mode for more verbage",
164
- default: false,
165
- }) });
@@ -1,6 +0,0 @@
1
- import SessionCommand from "../utils/SessionCommand";
2
- declare class TestCommand extends SessionCommand {
3
- init(): Promise<void>;
4
- run(): Promise<void>;
5
- }
6
- export default TestCommand;