@learnpack/learnpack 2.1.24 → 2.1.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. package/README.md +16 -16
  2. package/bin/run +17 -17
  3. package/bin/run.cmd +3 -3
  4. package/lib/commands/audit.d.ts +6 -6
  5. package/lib/commands/audit.js +342 -317
  6. package/lib/commands/clean.d.ts +8 -8
  7. package/lib/commands/clean.js +25 -25
  8. package/lib/commands/download.d.ts +13 -13
  9. package/lib/commands/download.js +55 -55
  10. package/lib/commands/init.d.ts +9 -9
  11. package/lib/commands/init.js +123 -123
  12. package/lib/commands/login.d.ts +14 -14
  13. package/lib/commands/login.js +37 -37
  14. package/lib/commands/logout.d.ts +14 -14
  15. package/lib/commands/logout.js +37 -37
  16. package/lib/commands/publish.d.ts +14 -14
  17. package/lib/commands/publish.js +82 -82
  18. package/lib/commands/start.d.ts +7 -7
  19. package/lib/commands/start.js +165 -165
  20. package/lib/commands/test.d.ts +6 -6
  21. package/lib/commands/test.js +62 -62
  22. package/lib/index.d.ts +1 -1
  23. package/lib/index.js +4 -4
  24. package/lib/managers/config/allowed_files.d.ts +5 -5
  25. package/lib/managers/config/allowed_files.js +30 -30
  26. package/lib/managers/config/defaults.d.ts +39 -37
  27. package/lib/managers/config/defaults.js +40 -38
  28. package/lib/managers/config/exercise.d.ts +36 -36
  29. package/lib/managers/config/exercise.js +233 -230
  30. package/lib/managers/config/index.d.ts +3 -3
  31. package/lib/managers/config/index.js +320 -302
  32. package/lib/managers/file.d.ts +13 -13
  33. package/lib/managers/file.js +134 -134
  34. package/lib/managers/gitpod.d.ts +3 -3
  35. package/lib/managers/gitpod.js +67 -67
  36. package/lib/managers/server/index.d.ts +6 -6
  37. package/lib/managers/server/index.js +58 -51
  38. package/lib/managers/server/routes.d.ts +4 -4
  39. package/lib/managers/server/routes.js +167 -167
  40. package/lib/managers/session.d.ts +3 -3
  41. package/lib/managers/session.js +104 -104
  42. package/lib/managers/socket.d.ts +3 -3
  43. package/lib/managers/socket.js +164 -164
  44. package/lib/managers/test.js +84 -84
  45. package/lib/models/action.d.ts +2 -2
  46. package/lib/models/action.js +2 -2
  47. package/lib/models/audit.d.ts +15 -15
  48. package/lib/models/audit.js +2 -2
  49. package/lib/models/config-manager.d.ts +21 -21
  50. package/lib/models/config-manager.js +2 -2
  51. package/lib/models/config.d.ts +62 -60
  52. package/lib/models/config.js +2 -2
  53. package/lib/models/counter.d.ts +11 -11
  54. package/lib/models/counter.js +2 -2
  55. package/lib/models/errors.d.ts +15 -15
  56. package/lib/models/errors.js +2 -2
  57. package/lib/models/exercise-obj.d.ts +27 -27
  58. package/lib/models/exercise-obj.js +2 -2
  59. package/lib/models/file.d.ts +5 -5
  60. package/lib/models/file.js +2 -2
  61. package/lib/models/findings.d.ts +17 -17
  62. package/lib/models/findings.js +2 -2
  63. package/lib/models/flags.d.ts +10 -10
  64. package/lib/models/flags.js +2 -2
  65. package/lib/models/front-matter.d.ts +11 -11
  66. package/lib/models/front-matter.js +2 -2
  67. package/lib/models/gitpod-data.d.ts +16 -16
  68. package/lib/models/gitpod-data.js +2 -2
  69. package/lib/models/language.d.ts +4 -4
  70. package/lib/models/language.js +2 -2
  71. package/lib/models/package.d.ts +7 -7
  72. package/lib/models/package.js +2 -2
  73. package/lib/models/plugin-config.d.ts +16 -16
  74. package/lib/models/plugin-config.js +2 -2
  75. package/lib/models/session.d.ts +23 -23
  76. package/lib/models/session.js +2 -2
  77. package/lib/models/socket.d.ts +31 -31
  78. package/lib/models/socket.js +2 -2
  79. package/lib/models/status.d.ts +1 -1
  80. package/lib/models/status.js +2 -2
  81. package/lib/models/success-types.d.ts +1 -1
  82. package/lib/models/success-types.js +2 -2
  83. package/lib/plugin/command/compile.d.ts +6 -6
  84. package/lib/plugin/command/compile.js +18 -18
  85. package/lib/plugin/command/test.d.ts +6 -6
  86. package/lib/plugin/command/test.js +25 -25
  87. package/lib/plugin/index.d.ts +27 -27
  88. package/lib/plugin/index.js +7 -7
  89. package/lib/plugin/plugin.d.ts +8 -8
  90. package/lib/plugin/plugin.js +68 -68
  91. package/lib/plugin/utils.d.ts +16 -16
  92. package/lib/plugin/utils.js +58 -58
  93. package/lib/ui/download.d.ts +5 -5
  94. package/lib/ui/download.js +61 -61
  95. package/lib/utils/BaseCommand.d.ts +8 -8
  96. package/lib/utils/BaseCommand.js +41 -41
  97. package/lib/utils/SessionCommand.d.ts +10 -10
  98. package/lib/utils/SessionCommand.js +47 -47
  99. package/lib/utils/api.d.ts +12 -12
  100. package/lib/utils/api.js +173 -173
  101. package/lib/utils/audit.d.ts +16 -16
  102. package/lib/utils/audit.js +302 -302
  103. package/lib/utils/console.d.ts +12 -12
  104. package/lib/utils/console.js +19 -19
  105. package/lib/utils/errors.d.ts +17 -17
  106. package/lib/utils/errors.js +100 -100
  107. package/lib/utils/exercisesQueue.d.ts +9 -9
  108. package/lib/utils/exercisesQueue.js +38 -38
  109. package/lib/utils/fileQueue.d.ts +40 -40
  110. package/lib/utils/fileQueue.js +168 -168
  111. package/lib/utils/misc.d.ts +1 -1
  112. package/lib/utils/misc.js +23 -23
  113. package/lib/utils/validators.d.ts +5 -5
  114. package/lib/utils/validators.js +17 -17
  115. package/lib/utils/watcher.d.ts +2 -2
  116. package/lib/utils/watcher.js +23 -23
  117. package/oclif.manifest.json +1 -1
  118. package/package.json +138 -138
  119. package/src/commands/audit.ts +443 -418
  120. package/src/commands/clean.ts +29 -29
  121. package/src/commands/download.ts +62 -62
  122. package/src/commands/login.ts +42 -42
  123. package/src/commands/logout.ts +43 -43
  124. package/src/commands/publish.ts +107 -107
  125. package/src/commands/start.ts +238 -234
  126. package/src/commands/test.ts +85 -85
  127. package/src/index.ts +1 -1
  128. package/src/managers/config/allowed_files.ts +29 -29
  129. package/src/managers/config/defaults.ts +2 -0
  130. package/src/managers/config/exercise.ts +309 -302
  131. package/src/managers/config/index.ts +22 -1
  132. package/src/managers/file.ts +169 -169
  133. package/src/managers/gitpod.ts +84 -84
  134. package/src/managers/server/index.ts +77 -69
  135. package/src/managers/session.ts +118 -118
  136. package/src/managers/socket.ts +239 -239
  137. package/src/managers/test.ts +83 -83
  138. package/src/models/action.ts +3 -3
  139. package/src/models/config-manager.ts +23 -23
  140. package/src/models/config.ts +2 -0
  141. package/src/models/counter.ts +11 -11
  142. package/src/models/errors.ts +22 -22
  143. package/src/models/file.ts +5 -5
  144. package/src/models/findings.ts +18 -18
  145. package/src/models/flags.ts +10 -10
  146. package/src/models/front-matter.ts +11 -11
  147. package/src/models/gitpod-data.ts +19 -19
  148. package/src/models/language.ts +4 -4
  149. package/src/models/package.ts +7 -7
  150. package/src/models/plugin-config.ts +17 -17
  151. package/src/models/session.ts +26 -26
  152. package/src/models/socket.ts +48 -48
  153. package/src/models/status.ts +15 -15
  154. package/src/models/success-types.ts +1 -1
  155. package/src/plugin/command/compile.ts +17 -17
  156. package/src/plugin/command/test.ts +30 -30
  157. package/src/plugin/index.ts +6 -6
  158. package/src/plugin/plugin.ts +94 -94
  159. package/src/plugin/utils.ts +87 -87
  160. package/src/types/node-fetch.d.ts +1 -1
  161. package/src/ui/download.ts +71 -71
  162. package/src/utils/BaseCommand.ts +48 -48
  163. package/src/utils/SessionCommand.ts +48 -48
  164. package/src/utils/api.ts +194 -194
  165. package/src/utils/audit.ts +395 -395
  166. package/src/utils/console.ts +24 -24
  167. package/src/utils/errors.ts +117 -117
  168. package/src/utils/exercisesQueue.ts +51 -51
  169. package/src/utils/fileQueue.ts +198 -198
  170. package/src/utils/misc.ts +23 -23
  171. package/src/utils/templates/gitignore.txt +19 -19
  172. package/src/utils/templates/incremental/.learn/exercises/01-hello-world/README.es.md +24 -24
  173. package/src/utils/templates/incremental/.learn/exercises/01-hello-world/README.md +24 -24
  174. package/src/utils/templates/incremental/README.ejs +4 -4
  175. package/src/utils/templates/incremental/README.es.ejs +4 -4
  176. package/src/utils/templates/isolated/01-hello-world/README.es.md +26 -26
  177. package/src/utils/templates/isolated/01-hello-world/README.md +26 -26
  178. package/src/utils/templates/isolated/README.ejs +4 -4
  179. package/src/utils/templates/isolated/README.es.ejs +4 -4
  180. package/src/utils/templates/no-grading/README.ejs +4 -4
  181. package/src/utils/templates/no-grading/README.es.ejs +4 -4
  182. package/src/utils/validators.ts +18 -18
@@ -1,37 +1,37 @@
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
+ "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 +1,14 @@
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
+ 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 +1,82 @@
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
+ "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 +1,7 @@
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
+ 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 +1,165 @@
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);
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
+ "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 +1,6 @@
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;
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;