@learnpack/learnpack 2.1.25 → 2.1.26

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.
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 +327 -302
  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 +25 -0
  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,6 +1,6 @@
1
- import { IError } from "../../models/errors";
2
- declare const _default: {
3
- CompilationError: (messages: string) => IError;
4
- default: ({ action, ...rest }: any) => Promise<any>;
5
- };
6
- export default _default;
1
+ import { IError } from "../../models/errors";
2
+ declare const _default: {
3
+ CompilationError: (messages: string) => IError;
4
+ default: ({ action, ...rest }: any) => Promise<any>;
5
+ };
6
+ export default _default;
@@ -1,18 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const CompilationError = (messages) => {
5
- const _err = new Error(messages);
6
- _err.status = 400;
7
- _err.stdout = messages;
8
- _err.type = "compiler-error";
9
- return _err;
10
- };
11
- exports.default = {
12
- CompilationError,
13
- default: async (_a) => {
14
- var { action } = _a, rest = tslib_1.__rest(_a, ["action"]);
15
- const stdout = await action.run(rest);
16
- return stdout;
17
- },
18
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const CompilationError = (messages) => {
5
+ const _err = new Error(messages);
6
+ _err.status = 400;
7
+ _err.stdout = messages;
8
+ _err.type = "compiler-error";
9
+ return _err;
10
+ };
11
+ exports.default = {
12
+ CompilationError,
13
+ default: async (_a) => {
14
+ var { action } = _a, rest = tslib_1.__rest(_a, ["action"]);
15
+ const stdout = await action.run(rest);
16
+ return stdout;
17
+ },
18
+ };
@@ -1,6 +1,6 @@
1
- import { IError } from "../../models/errors";
2
- declare const _default: {
3
- TestingError: (messages: string) => IError;
4
- default: (args: any) => Promise<any>;
5
- };
6
- export default _default;
1
+ import { IError } from "../../models/errors";
2
+ declare const _default: {
3
+ TestingError: (messages: string) => IError;
4
+ default: (args: any) => Promise<any>;
5
+ };
6
+ export default _default;
@@ -1,25 +1,25 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs = require("fs");
4
- const TestingError = (messages) => {
5
- const _err = new Error(messages);
6
- _err.status = 400;
7
- _err.stdout = messages;
8
- _err.type = "testing-error";
9
- return _err;
10
- };
11
- exports.default = {
12
- TestingError,
13
- default: async function (args) {
14
- const { action, configuration, socket, exercise } = args;
15
- if (!fs.existsSync(`${configuration.dirPath}/reports`)) {
16
- // reports directory
17
- fs.mkdirSync(`${configuration.dirPath}/reports`);
18
- }
19
- // compile
20
- const stdout = await action.run(args);
21
- // mark exercise as done
22
- exercise.done = true;
23
- return stdout;
24
- },
25
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fs = require("fs");
4
+ const TestingError = (messages) => {
5
+ const _err = new Error(messages);
6
+ _err.status = 400;
7
+ _err.stdout = messages;
8
+ _err.type = "testing-error";
9
+ return _err;
10
+ };
11
+ exports.default = {
12
+ TestingError,
13
+ default: async function (args) {
14
+ const { action, configuration, socket, exercise } = args;
15
+ if (!fs.existsSync(`${configuration.dirPath}/reports`)) {
16
+ // reports directory
17
+ fs.mkdirSync(`${configuration.dirPath}/reports`);
18
+ }
19
+ // compile
20
+ const stdout = await action.run(args);
21
+ // mark exercise as done
22
+ exercise.done = true;
23
+ return stdout;
24
+ },
25
+ };
@@ -1,27 +1,27 @@
1
- declare const _default: {
2
- CompilationError: {
3
- CompilationError: (messages: string) => import("../models/errors").IError;
4
- default: ({ action, ...rest }: any) => Promise<any>;
5
- };
6
- TestingError: {
7
- TestingError: (messages: string) => import("../models/errors").IError;
8
- default: (args: any) => Promise<any>;
9
- };
10
- Utils: {
11
- getMatches: (reg: RegExp, content: string) => (string | null)[];
12
- cleanStdout: (buffer: string, inputs: string[]) => string;
13
- indent: (string: string, options: any, count?: number) => string;
14
- Console: {
15
- _debug: boolean;
16
- startDebug: () => void;
17
- log: (msg: string, ...args: any[]) => void;
18
- error: (msg: string, ...args: any[]) => void;
19
- success: (msg: string, ...args: any[]) => void;
20
- info: (msg: string, ...args: any[]) => void;
21
- help: (msg: string) => void;
22
- debug(...args: any[]): void;
23
- };
24
- };
25
- plugin: (pluginConfig: import("../models/plugin-config").IPluginConfig) => (args: any) => Promise<any>;
26
- };
27
- export default _default;
1
+ declare const _default: {
2
+ CompilationError: {
3
+ CompilationError: (messages: string) => import("../models/errors").IError;
4
+ default: ({ action, ...rest }: any) => Promise<any>;
5
+ };
6
+ TestingError: {
7
+ TestingError: (messages: string) => import("../models/errors").IError;
8
+ default: (args: any) => Promise<any>;
9
+ };
10
+ Utils: {
11
+ getMatches: (reg: RegExp, content: string) => (string | null)[];
12
+ cleanStdout: (buffer: string, inputs: string[]) => string;
13
+ indent: (string: string, options: any, count?: number) => string;
14
+ Console: {
15
+ _debug: boolean;
16
+ startDebug: () => void;
17
+ log: (msg: string, ...args: any[]) => void;
18
+ error: (msg: string, ...args: any[]) => void;
19
+ success: (msg: string, ...args: any[]) => void;
20
+ info: (msg: string, ...args: any[]) => void;
21
+ help: (msg: string) => void;
22
+ debug(...args: any[]): void;
23
+ };
24
+ };
25
+ plugin: (pluginConfig: import("../models/plugin-config").IPluginConfig) => (args: any) => Promise<any>;
26
+ };
27
+ export default _default;
@@ -1,7 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const compile_1 = require("./command/compile");
4
- const test_1 = require("./command/test");
5
- const utils_1 = require("./utils");
6
- const plugin_1 = require("./plugin");
7
- exports.default = { CompilationError: compile_1.default, TestingError: test_1.default, Utils: utils_1.default, plugin: plugin_1.default };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const compile_1 = require("./command/compile");
4
+ const test_1 = require("./command/test");
5
+ const utils_1 = require("./utils");
6
+ const plugin_1 = require("./plugin");
7
+ exports.default = { CompilationError: compile_1.default, TestingError: test_1.default, Utils: utils_1.default, plugin: plugin_1.default };
@@ -1,8 +1,8 @@
1
- import { IPluginConfig } from "../models/plugin-config";
2
- declare const _default: (pluginConfig: IPluginConfig) => (args: any) => Promise<any>;
3
- /**
4
- * Main Plugin Runner, it defines the behavior of a learnpack plugin
5
- * dividing it in "actions" like: Compile, test, etc.
6
- * @param {object} pluginConfig Configuration object that must defined language and each possible action.
7
- */
8
- export default _default;
1
+ import { IPluginConfig } from "../models/plugin-config";
2
+ declare const _default: (pluginConfig: IPluginConfig) => (args: any) => Promise<any>;
3
+ /**
4
+ * Main Plugin Runner, it defines the behavior of a learnpack plugin
5
+ * dividing it in "actions" like: Compile, test, etc.
6
+ * @param {object} pluginConfig Configuration object that must defined language and each possible action.
7
+ */
8
+ export default _default;
@@ -1,68 +1,68 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const shell = require("shelljs");
4
- /**
5
- * Main Plugin Runner, it defines the behavior of a learnpack plugin
6
- * dividing it in "actions" like: Compile, test, etc.
7
- * @param {object} pluginConfig Configuration object that must defined language and each possible action.
8
- */
9
- exports.default = (pluginConfig) => {
10
- return async (args) => {
11
- const { action, exercise, socket, configuration } = args;
12
- if (pluginConfig.language === undefined)
13
- throw new Error(`Missing language on the plugin configuration object`);
14
- if (typeof action !== "string") {
15
- throw new TypeError("Missing action property on hook details");
16
- }
17
- if (!exercise || exercise === undefined) {
18
- throw new Error("Missing exercise information");
19
- }
20
- // if the action does not exist I don't do anything
21
- if (pluginConfig[action] === undefined) {
22
- console.log(`Ignoring ${action}`);
23
- return () => null;
24
- }
25
- // ignore if the plugin language its not the same as the exercise language
26
- if (exercise.language !== pluginConfig.language) {
27
- return () => null;
28
- }
29
- if (!exercise.files || exercise.files.length === 0) {
30
- throw new Error(`No files to process`);
31
- }
32
- try {
33
- const _action = pluginConfig[action];
34
- if (_action === null || typeof _action !== "object")
35
- throw new Error(`The ${pluginConfig.language} ${action} module must export an object configuration`);
36
- if (_action.validate === undefined)
37
- throw new Error(`Missing validate method for ${pluginConfig.language} ${action}`);
38
- if (_action.run === undefined)
39
- throw new Error(`Missing run method for ${pluginConfig.language} ${action}`);
40
- if (_action.dependencies !== undefined) {
41
- if (!Array.isArray(_action.dependencies))
42
- throw new Error(`${action}.dependencies must be an array of package names`);
43
- for (const packageName of _action.dependencies) {
44
- if (!shell.which(packageName)) {
45
- throw new Error(`🚫 You need to have ${packageName} installed to run test the exercises`);
46
- }
47
- }
48
- }
49
- const valid = await _action.validate({ exercise, configuration });
50
- if (valid) {
51
- // look for the command standard implementation and execute it
52
- const execute = require("./command/" + action + ".js").default;
53
- // no matter the command, the response must always be a stdout
54
- const stdout = await execute(Object.assign(Object.assign({}, args), { action: _action, configuration }));
55
- // Map the action names to socket messaging standards
56
- const actionToSuccessMapper = { compile: "compiler", test: "testing" };
57
- socket.success(actionToSuccessMapper[action], stdout);
58
- return stdout;
59
- }
60
- }
61
- catch (error) {
62
- if (error.type === undefined)
63
- socket.fatal(error);
64
- else
65
- socket.error(error.type, error.stdout);
66
- }
67
- };
68
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const shell = require("shelljs");
4
+ /**
5
+ * Main Plugin Runner, it defines the behavior of a learnpack plugin
6
+ * dividing it in "actions" like: Compile, test, etc.
7
+ * @param {object} pluginConfig Configuration object that must defined language and each possible action.
8
+ */
9
+ exports.default = (pluginConfig) => {
10
+ return async (args) => {
11
+ const { action, exercise, socket, configuration } = args;
12
+ if (pluginConfig.language === undefined)
13
+ throw new Error(`Missing language on the plugin configuration object`);
14
+ if (typeof action !== "string") {
15
+ throw new TypeError("Missing action property on hook details");
16
+ }
17
+ if (!exercise || exercise === undefined) {
18
+ throw new Error("Missing exercise information");
19
+ }
20
+ // if the action does not exist I don't do anything
21
+ if (pluginConfig[action] === undefined) {
22
+ console.log(`Ignoring ${action}`);
23
+ return () => null;
24
+ }
25
+ // ignore if the plugin language its not the same as the exercise language
26
+ if (exercise.language !== pluginConfig.language) {
27
+ return () => null;
28
+ }
29
+ if (!exercise.files || exercise.files.length === 0) {
30
+ throw new Error(`No files to process`);
31
+ }
32
+ try {
33
+ const _action = pluginConfig[action];
34
+ if (_action === null || typeof _action !== "object")
35
+ throw new Error(`The ${pluginConfig.language} ${action} module must export an object configuration`);
36
+ if (_action.validate === undefined)
37
+ throw new Error(`Missing validate method for ${pluginConfig.language} ${action}`);
38
+ if (_action.run === undefined)
39
+ throw new Error(`Missing run method for ${pluginConfig.language} ${action}`);
40
+ if (_action.dependencies !== undefined) {
41
+ if (!Array.isArray(_action.dependencies))
42
+ throw new Error(`${action}.dependencies must be an array of package names`);
43
+ for (const packageName of _action.dependencies) {
44
+ if (!shell.which(packageName)) {
45
+ throw new Error(`🚫 You need to have ${packageName} installed to run test the exercises`);
46
+ }
47
+ }
48
+ }
49
+ const valid = await _action.validate({ exercise, configuration });
50
+ if (valid) {
51
+ // look for the command standard implementation and execute it
52
+ const execute = require("./command/" + action + ".js").default;
53
+ // no matter the command, the response must always be a stdout
54
+ const stdout = await execute(Object.assign(Object.assign({}, args), { action: _action, configuration }));
55
+ // Map the action names to socket messaging standards
56
+ const actionToSuccessMapper = { compile: "compiler", test: "testing" };
57
+ socket.success(actionToSuccessMapper[action], stdout);
58
+ return stdout;
59
+ }
60
+ }
61
+ catch (error) {
62
+ if (error.type === undefined)
63
+ socket.fatal(error);
64
+ else
65
+ socket.error(error.type, error.stdout);
66
+ }
67
+ };
68
+ };
@@ -1,16 +1,16 @@
1
- declare const _default: {
2
- getMatches: (reg: RegExp, content: string) => (string | null)[];
3
- cleanStdout: (buffer: string, inputs: string[]) => string;
4
- indent: (string: string, options: any, count?: number) => string;
5
- Console: {
6
- _debug: boolean;
7
- startDebug: () => void;
8
- log: (msg: string, ...args: any[]) => void;
9
- error: (msg: string, ...args: any[]) => void;
10
- success: (msg: string, ...args: any[]) => void;
11
- info: (msg: string, ...args: any[]) => void;
12
- help: (msg: string) => void;
13
- debug(...args: any[]): void;
14
- };
15
- };
16
- export default _default;
1
+ declare const _default: {
2
+ getMatches: (reg: RegExp, content: string) => (string | null)[];
3
+ cleanStdout: (buffer: string, inputs: string[]) => string;
4
+ indent: (string: string, options: any, count?: number) => string;
5
+ Console: {
6
+ _debug: boolean;
7
+ startDebug: () => void;
8
+ log: (msg: string, ...args: any[]) => void;
9
+ error: (msg: string, ...args: any[]) => void;
10
+ success: (msg: string, ...args: any[]) => void;
11
+ info: (msg: string, ...args: any[]) => void;
12
+ help: (msg: string) => void;
13
+ debug(...args: any[]): void;
14
+ };
15
+ };
16
+ export default _default;
@@ -1,58 +1,58 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const chalk = require("chalk");
4
- const getMatches = (reg, content) => {
5
- const inputs = [];
6
- let m;
7
- while ((m = reg.exec(content)) !== null) {
8
- // This is necessary to avoid infinite loops with zero-width matches
9
- if (m.index === reg.lastIndex)
10
- reg.lastIndex++;
11
- // The result can be accessed through the `m`-variable.
12
- inputs.push(m[1] || null);
13
- }
14
- return inputs;
15
- };
16
- const cleanStdout = (buffer, inputs) => {
17
- if (Array.isArray(inputs))
18
- for (let i = 0; i < inputs.length; i++)
19
- if (inputs[i])
20
- buffer = buffer.replace(inputs[i], "");
21
- return buffer;
22
- };
23
- const indent = (string, options, count = 1) => {
24
- options = Object.assign({ indent: " ", includeEmptyLines: false }, options);
25
- if (typeof string !== "string") {
26
- throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof string}\``);
27
- }
28
- if (typeof count !== "number") {
29
- throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof count}\``);
30
- }
31
- if (count < 0) {
32
- throw new RangeError(`Expected \`count\` to be at least 0, got \`${count}\``);
33
- }
34
- if (typeof options.indent !== "string") {
35
- throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\``);
36
- }
37
- if (count === 0) {
38
- return string;
39
- }
40
- const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm;
41
- return string.replace(regex, options.indent.repeat(count));
42
- };
43
- const Console = {
44
- // _debug: true,
45
- _debug: process.env.DEBUG === "true",
46
- startDebug: function () {
47
- this._debug = true;
48
- },
49
- log: (msg, ...args) => console.log(chalk.gray(msg), ...args),
50
- error: (msg, ...args) => console.log(chalk.red("⨉ " + msg), ...args),
51
- success: (msg, ...args) => console.log(chalk.green("✓ " + msg), ...args),
52
- info: (msg, ...args) => console.log(chalk.blue("ⓘ " + msg), ...args),
53
- help: (msg) => console.log(`${chalk.white.bold("⚠ help:")} ${chalk.white(msg)}`),
54
- debug(...args) {
55
- this._debug && console.log(chalk.magentaBright(`⚠ debug: `), args);
56
- },
57
- };
58
- exports.default = { getMatches, cleanStdout, indent, Console };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chalk = require("chalk");
4
+ const getMatches = (reg, content) => {
5
+ const inputs = [];
6
+ let m;
7
+ while ((m = reg.exec(content)) !== null) {
8
+ // This is necessary to avoid infinite loops with zero-width matches
9
+ if (m.index === reg.lastIndex)
10
+ reg.lastIndex++;
11
+ // The result can be accessed through the `m`-variable.
12
+ inputs.push(m[1] || null);
13
+ }
14
+ return inputs;
15
+ };
16
+ const cleanStdout = (buffer, inputs) => {
17
+ if (Array.isArray(inputs))
18
+ for (let i = 0; i < inputs.length; i++)
19
+ if (inputs[i])
20
+ buffer = buffer.replace(inputs[i], "");
21
+ return buffer;
22
+ };
23
+ const indent = (string, options, count = 1) => {
24
+ options = Object.assign({ indent: " ", includeEmptyLines: false }, options);
25
+ if (typeof string !== "string") {
26
+ throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof string}\``);
27
+ }
28
+ if (typeof count !== "number") {
29
+ throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof count}\``);
30
+ }
31
+ if (count < 0) {
32
+ throw new RangeError(`Expected \`count\` to be at least 0, got \`${count}\``);
33
+ }
34
+ if (typeof options.indent !== "string") {
35
+ throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\``);
36
+ }
37
+ if (count === 0) {
38
+ return string;
39
+ }
40
+ const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm;
41
+ return string.replace(regex, options.indent.repeat(count));
42
+ };
43
+ const Console = {
44
+ // _debug: true,
45
+ _debug: process.env.DEBUG === "true",
46
+ startDebug: function () {
47
+ this._debug = true;
48
+ },
49
+ log: (msg, ...args) => console.log(chalk.gray(msg), ...args),
50
+ error: (msg, ...args) => console.log(chalk.red("⨉ " + msg), ...args),
51
+ success: (msg, ...args) => console.log(chalk.green("✓ " + msg), ...args),
52
+ info: (msg, ...args) => console.log(chalk.blue("ⓘ " + msg), ...args),
53
+ help: (msg) => console.log(`${chalk.white.bold("⚠ help:")} ${chalk.white(msg)}`),
54
+ debug(...args) {
55
+ this._debug && console.log(chalk.magentaBright(`⚠ debug: `), args);
56
+ },
57
+ };
58
+ exports.default = { getMatches, cleanStdout, indent, Console };
@@ -1,5 +1,5 @@
1
- export declare const askPackage: () => Promise<unknown>;
2
- declare const _default: {
3
- askPackage: () => Promise<unknown>;
4
- };
5
- export default _default;
1
+ export declare const askPackage: () => Promise<unknown>;
2
+ declare const _default: {
3
+ askPackage: () => Promise<unknown>;
4
+ };
5
+ export default _default;
@@ -1,61 +1,61 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.askPackage = void 0;
4
- const enquirer_1 = require("enquirer");
5
- const console_1 = require("../utils/console");
6
- const api_1 = require("../utils/api");
7
- exports.askPackage = async () => {
8
- console_1.default.info('No package was specified');
9
- const languages = await api_1.default.getLangs();
10
- return new Promise((resolve, reject) => {
11
- if (languages.length === 0) {
12
- // reject(new Error('No categories available'))
13
- reject('No categories available');
14
- // return null;
15
- }
16
- // let packages = []
17
- enquirer_1.prompt([
18
- {
19
- type: 'select',
20
- name: 'lang',
21
- message: 'What language do you want to practice?',
22
- choices: languages.map((l) => ({
23
- message: l.title,
24
- name: l.slug,
25
- })),
26
- },
27
- ])
28
- .then(({ lang }) => {
29
- return (async () => {
30
- const response = await api_1.default.getAllPackages({ lang });
31
- const packages = response.results;
32
- if (packages.length === 0) {
33
- const error = new Error(`No packages found for language ${lang}`);
34
- console_1.default.error(error.message); // TODO: Look this
35
- return error;
36
- }
37
- return enquirer_1.prompt([
38
- {
39
- type: 'select',
40
- name: 'pack',
41
- message: 'Choose one of the packages available',
42
- choices: packages.map((l) => ({
43
- message: `${l.title}, difficulty: ${l.difficulty}, downloads: ${l.downloads} ${l.skills.length > 0 ? `(Skills: ${l.skills.join(',')})` : ''}`,
44
- name: l.slug,
45
- })),
46
- },
47
- ]);
48
- })();
49
- })
50
- .then((resp) => {
51
- if (!resp)
52
- reject(resp.message || resp);
53
- else
54
- resolve(resp.pack);
55
- })
56
- .catch(error => {
57
- console_1.default.error(error.message || error);
58
- });
59
- });
60
- };
61
- exports.default = { askPackage: exports.askPackage };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.askPackage = void 0;
4
+ const enquirer_1 = require("enquirer");
5
+ const console_1 = require("../utils/console");
6
+ const api_1 = require("../utils/api");
7
+ exports.askPackage = async () => {
8
+ console_1.default.info('No package was specified');
9
+ const languages = await api_1.default.getLangs();
10
+ return new Promise((resolve, reject) => {
11
+ if (languages.length === 0) {
12
+ // reject(new Error('No categories available'))
13
+ reject('No categories available');
14
+ // return null;
15
+ }
16
+ // let packages = []
17
+ enquirer_1.prompt([
18
+ {
19
+ type: 'select',
20
+ name: 'lang',
21
+ message: 'What language do you want to practice?',
22
+ choices: languages.map((l) => ({
23
+ message: l.title,
24
+ name: l.slug,
25
+ })),
26
+ },
27
+ ])
28
+ .then(({ lang }) => {
29
+ return (async () => {
30
+ const response = await api_1.default.getAllPackages({ lang });
31
+ const packages = response.results;
32
+ if (packages.length === 0) {
33
+ const error = new Error(`No packages found for language ${lang}`);
34
+ console_1.default.error(error.message); // TODO: Look this
35
+ return error;
36
+ }
37
+ return enquirer_1.prompt([
38
+ {
39
+ type: 'select',
40
+ name: 'pack',
41
+ message: 'Choose one of the packages available',
42
+ choices: packages.map((l) => ({
43
+ message: `${l.title}, difficulty: ${l.difficulty}, downloads: ${l.downloads} ${l.skills.length > 0 ? `(Skills: ${l.skills.join(',')})` : ''}`,
44
+ name: l.slug,
45
+ })),
46
+ },
47
+ ]);
48
+ })();
49
+ })
50
+ .then((resp) => {
51
+ if (!resp)
52
+ reject(resp.message || resp);
53
+ else
54
+ resolve(resp.pack);
55
+ })
56
+ .catch(error => {
57
+ console_1.default.error(error.message || error);
58
+ });
59
+ });
60
+ };
61
+ exports.default = { askPackage: exports.askPackage };
@@ -1,8 +1,8 @@
1
- import { Command } from "@oclif/command";
2
- declare class BaseCommand extends Command {
3
- catch(err: any): Promise<void>;
4
- init(): Promise<void>;
5
- finally(): Promise<void>;
6
- run(): Promise<void>;
7
- }
8
- export default BaseCommand;
1
+ import { Command } from "@oclif/command";
2
+ declare class BaseCommand extends Command {
3
+ catch(err: any): Promise<void>;
4
+ init(): Promise<void>;
5
+ finally(): Promise<void>;
6
+ run(): Promise<void>;
7
+ }
8
+ export default BaseCommand;