@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,41 +1,41 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const command_1 = require("@oclif/command");
4
- const console_1 = require("./console");
5
- const readline_1 = require("readline");
6
- // import SessionManager from '../managers/session'
7
- class BaseCommand extends command_1.Command {
8
- async catch(err) {
9
- console_1.default.debug("COMMAND CATCH", err);
10
- throw err;
11
- }
12
- async init() {
13
- const { flags, args } = this.parse(BaseCommand);
14
- console_1.default.debug("COMMAND INIT");
15
- console_1.default.debug("These are your flags: ", flags);
16
- console_1.default.debug("These are your args: ", args);
17
- // quick fix for listening to the process termination on windows
18
- if (process.platform === "win32") {
19
- const rl = readline_1.createInterface({
20
- input: process.stdin,
21
- output: process.stdout,
22
- });
23
- rl.on("SIGINT", function () {
24
- // process.emit('SIGINT')
25
- // process.emit('SIGINT')
26
- });
27
- }
28
- process.on("SIGINT", function () {
29
- console_1.default.debug("Terminated (SIGINT)");
30
- process.exit();
31
- });
32
- }
33
- async finally() {
34
- console_1.default.debug("COMMAND FINALLY");
35
- // called after run and catch regardless of whether or not the command errored
36
- }
37
- async run() {
38
- // console.log('running my command')
39
- }
40
- }
41
- exports.default = BaseCommand;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const command_1 = require("@oclif/command");
4
+ const console_1 = require("./console");
5
+ const readline_1 = require("readline");
6
+ // import SessionManager from '../managers/session'
7
+ class BaseCommand extends command_1.Command {
8
+ async catch(err) {
9
+ console_1.default.debug("COMMAND CATCH", err);
10
+ throw err;
11
+ }
12
+ async init() {
13
+ const { flags, args } = this.parse(BaseCommand);
14
+ console_1.default.debug("COMMAND INIT");
15
+ console_1.default.debug("These are your flags: ", flags);
16
+ console_1.default.debug("These are your args: ", args);
17
+ // quick fix for listening to the process termination on windows
18
+ if (process.platform === "win32") {
19
+ const rl = readline_1.createInterface({
20
+ input: process.stdin,
21
+ output: process.stdout,
22
+ });
23
+ rl.on("SIGINT", function () {
24
+ // process.emit('SIGINT')
25
+ // process.emit('SIGINT')
26
+ });
27
+ }
28
+ process.on("SIGINT", function () {
29
+ console_1.default.debug("Terminated (SIGINT)");
30
+ process.exit();
31
+ });
32
+ }
33
+ async finally() {
34
+ console_1.default.debug("COMMAND FINALLY");
35
+ // called after run and catch regardless of whether or not the command errored
36
+ }
37
+ async run() {
38
+ // console.log('running my command')
39
+ }
40
+ }
41
+ exports.default = BaseCommand;
@@ -1,10 +1,10 @@
1
- import BaseCommand from './BaseCommand';
2
- import { IConfigManager } from '../models/config-manager';
3
- export default class SessionCommand extends BaseCommand {
4
- session: any;
5
- configManager: IConfigManager | null;
6
- static flags: any;
7
- initSession(flags: any, _private?: boolean): Promise<void>;
8
- buildConfig(flags: any): Promise<void>;
9
- catch(err: any): Promise<void>;
10
- }
1
+ import BaseCommand from './BaseCommand';
2
+ import { IConfigManager } from '../models/config-manager';
3
+ export default class SessionCommand extends BaseCommand {
4
+ session: any;
5
+ configManager: IConfigManager | null;
6
+ static flags: any;
7
+ initSession(flags: any, _private?: boolean): Promise<void>;
8
+ buildConfig(flags: any): Promise<void>;
9
+ catch(err: any): Promise<void>;
10
+ }
@@ -1,47 +1,47 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // import { flags } from "@oclif/command";
4
- const BaseCommand_1 = require("./BaseCommand");
5
- const console_1 = require("./console");
6
- const session_1 = require("../managers/session");
7
- const index_1 = require("../managers/config/index");
8
- const errors_1 = require("./errors");
9
- class SessionCommand extends BaseCommand_1.default {
10
- constructor() {
11
- super(...arguments);
12
- this.session = null;
13
- this.configManager = null;
14
- }
15
- async initSession(flags, _private = false) {
16
- var _a;
17
- try {
18
- if (!this.configManager) {
19
- await this.buildConfig(flags);
20
- }
21
- this.session = await session_1.default.get((_a = this.configManager) === null || _a === void 0 ? void 0 : _a.get());
22
- if (this.session) {
23
- console_1.default.debug(`Session open for ${this.session.payload.email}.`);
24
- }
25
- else {
26
- if (_private)
27
- throw errors_1.AuthError('You need to log in, run the following command to continue: $ learnpack login');
28
- console_1.default.debug('No active session available', _private);
29
- }
30
- }
31
- catch (error) {
32
- console_1.default.error(error.message);
33
- }
34
- }
35
- async buildConfig(flags) {
36
- this.configManager = await index_1.default(flags);
37
- }
38
- async catch(err) {
39
- console_1.default.debug('COMMAND CATCH', err);
40
- throw err;
41
- }
42
- }
43
- exports.default = SessionCommand;
44
- // SessionCommand.description = `Describe the command here
45
- // ...
46
- // Extra documentation goes here
47
- // `
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // import { flags } from "@oclif/command";
4
+ const BaseCommand_1 = require("./BaseCommand");
5
+ const console_1 = require("./console");
6
+ const session_1 = require("../managers/session");
7
+ const index_1 = require("../managers/config/index");
8
+ const errors_1 = require("./errors");
9
+ class SessionCommand extends BaseCommand_1.default {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.session = null;
13
+ this.configManager = null;
14
+ }
15
+ async initSession(flags, _private = false) {
16
+ var _a;
17
+ try {
18
+ if (!this.configManager) {
19
+ await this.buildConfig(flags);
20
+ }
21
+ this.session = await session_1.default.get((_a = this.configManager) === null || _a === void 0 ? void 0 : _a.get());
22
+ if (this.session) {
23
+ console_1.default.debug(`Session open for ${this.session.payload.email}.`);
24
+ }
25
+ else {
26
+ if (_private)
27
+ throw errors_1.AuthError('You need to log in, run the following command to continue: $ learnpack login');
28
+ console_1.default.debug('No active session available', _private);
29
+ }
30
+ }
31
+ catch (error) {
32
+ console_1.default.error(error.message);
33
+ }
34
+ }
35
+ async buildConfig(flags) {
36
+ this.configManager = await index_1.default(flags);
37
+ }
38
+ async catch(err) {
39
+ console_1.default.debug('COMMAND CATCH', err);
40
+ throw err;
41
+ }
42
+ }
43
+ exports.default = SessionCommand;
44
+ // SessionCommand.description = `Describe the command here
45
+ // ...
46
+ // Extra documentation goes here
47
+ // `
@@ -1,12 +1,12 @@
1
- declare const _default: {
2
- login: (identification: string, password: string) => Promise<any>;
3
- publish: (config: any) => Promise<any>;
4
- update: (config: any) => Promise<any>;
5
- getPackage: (slug: string) => Promise<any>;
6
- getLangs: () => Promise<any>;
7
- getAllPackages: ({ lang, slug, }: {
8
- lang?: string | undefined;
9
- slug?: string | undefined;
10
- }) => Promise<any>;
11
- };
12
- export default _default;
1
+ declare const _default: {
2
+ login: (identification: string, password: string) => Promise<any>;
3
+ publish: (config: any) => Promise<any>;
4
+ update: (config: any) => Promise<any>;
5
+ getPackage: (slug: string) => Promise<any>;
6
+ getLangs: () => Promise<any>;
7
+ getAllPackages: ({ lang, slug, }: {
8
+ lang?: string | undefined;
9
+ slug?: string | undefined;
10
+ }) => Promise<any>;
11
+ };
12
+ export default _default;
package/lib/utils/api.js CHANGED
@@ -1,173 +1,173 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const console_1 = require("../utils/console");
4
- const storage = require("node-persist");
5
- const cli_ux_1 = require("cli-ux");
6
- const HOST = "https://learnpack.herokuapp.com";
7
- // eslint-disable-next-line
8
- const _fetch = require("node-fetch");
9
- const fetch = async (url, options = {}) => {
10
- const headers = { "Content-Type": "application/json" };
11
- let session = null;
12
- try {
13
- session = await storage.getItem("bc-payload");
14
- if (session.token && session.token !== "" && !url.includes("/token"))
15
- headers.Authorization = "Token " + session.token;
16
- }
17
- catch (_a) { }
18
- try {
19
- const resp = await _fetch(url, Object.assign(Object.assign({}, options), { headers: Object.assign(Object.assign({}, headers), options.headers) }));
20
- if (resp.status >= 200 && resp.status < 300)
21
- return await resp.json();
22
- if (resp.status === 401)
23
- throw APIError("Invalid authentication credentials", 401);
24
- else if (resp.status === 404)
25
- throw APIError("Package not found", 404);
26
- else if (resp.status >= 500)
27
- throw APIError("Impossible to connect with the server", 500);
28
- else if (resp.status >= 400) {
29
- const error = await resp.json();
30
- if (error.detail || error.error) {
31
- throw APIError(error.detail || error.error);
32
- }
33
- else if (error.nonFieldErrors) {
34
- throw APIError(error.nonFieldErrors[0], error);
35
- }
36
- else if (typeof error === "object") {
37
- if (Object.keys(error).length > 0) {
38
- const key = error[Object.keys(error)[0]];
39
- throw APIError(`${key}: ${error[key][0]}`, error);
40
- }
41
- }
42
- else {
43
- throw APIError("Uknown error");
44
- }
45
- }
46
- else
47
- throw APIError("Uknown error");
48
- }
49
- catch (error) {
50
- console_1.default.error(error.message);
51
- throw error;
52
- }
53
- };
54
- const login = async (identification, password) => {
55
- try {
56
- cli_ux_1.default.action.start("Looking for credentials...");
57
- await cli_ux_1.default.wait(1000);
58
- const data = await fetch(`${HOST}/v1/auth/token/`, {
59
- body: JSON.stringify({ identification, password }),
60
- method: "post",
61
- });
62
- cli_ux_1.default.action.stop("ready");
63
- return data;
64
- }
65
- catch (error) {
66
- console_1.default.error(error.message);
67
- console_1.default.debug(error);
68
- }
69
- };
70
- const publish = async (config) => {
71
- const keys = [
72
- "difficulty",
73
- "language",
74
- "skills",
75
- "technologies",
76
- "slug",
77
- "repository",
78
- "author",
79
- "title",
80
- ];
81
- const payload = {};
82
- for (const k of keys)
83
- config[k] ? (payload[k] = config[k]) : null;
84
- try {
85
- console.log("Package to publish:", payload);
86
- cli_ux_1.default.action.start("Updating package information...");
87
- await cli_ux_1.default.wait(1000);
88
- const data = await fetch(`${HOST}/v1/package/${config.slug}`, {
89
- method: "PUT",
90
- body: JSON.stringify(payload),
91
- });
92
- cli_ux_1.default.action.stop("ready");
93
- return data;
94
- }
95
- catch (error) {
96
- console.log("payload", payload);
97
- console_1.default.error(error.message);
98
- console_1.default.debug(error);
99
- throw error;
100
- }
101
- };
102
- const update = async (config) => {
103
- try {
104
- cli_ux_1.default.action.start("Updating package information...");
105
- await cli_ux_1.default.wait(1000);
106
- const data = await fetch(`${HOST}/v1/package/`, {
107
- method: "POST",
108
- body: JSON.stringify(config),
109
- });
110
- cli_ux_1.default.action.stop("ready");
111
- return data;
112
- }
113
- catch (error) {
114
- console_1.default.error(error.message);
115
- console_1.default.debug(error);
116
- throw error;
117
- }
118
- };
119
- const getPackage = async (slug) => {
120
- try {
121
- cli_ux_1.default.action.start("Downloading package information...");
122
- await cli_ux_1.default.wait(1000);
123
- const data = await fetch(`${HOST}/v1/package/${slug}`);
124
- cli_ux_1.default.action.stop("ready");
125
- return data;
126
- }
127
- catch (error) {
128
- if (error.status === 404)
129
- console_1.default.error(`Package ${slug} does not exist`);
130
- else
131
- console_1.default.error(`Package ${slug} does not exist`);
132
- console_1.default.debug(error);
133
- throw error;
134
- }
135
- };
136
- const getLangs = async () => {
137
- try {
138
- cli_ux_1.default.action.start("Downloading language options...");
139
- await cli_ux_1.default.wait(1000);
140
- const data = await fetch(`${HOST}/v1/package/language`);
141
- cli_ux_1.default.action.stop("ready");
142
- return data;
143
- }
144
- catch (error) {
145
- if (error.status === 404)
146
- console_1.default.error("Package slug does not exist");
147
- else
148
- console_1.default.error("Package slug does not exist");
149
- console_1.default.debug(error);
150
- throw error;
151
- }
152
- };
153
- const getAllPackages = async ({ lang = "", slug = "", }) => {
154
- try {
155
- cli_ux_1.default.action.start("Downloading packages...");
156
- await cli_ux_1.default.wait(1000);
157
- const data = await fetch(`${HOST}/v1/package/all?limit=100&language=${lang}&slug=${slug}`);
158
- cli_ux_1.default.action.stop("ready");
159
- return data;
160
- }
161
- catch (error) {
162
- console_1.default.error(`Package ${slug} does not exist`);
163
- console_1.default.debug(error);
164
- throw error;
165
- }
166
- };
167
- const APIError = (error, code) => {
168
- const message = error.message || error;
169
- const _err = new Error(message);
170
- _err.status = code || 400;
171
- return _err;
172
- };
173
- exports.default = { login, publish, update, getPackage, getLangs, getAllPackages };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const console_1 = require("../utils/console");
4
+ const storage = require("node-persist");
5
+ const cli_ux_1 = require("cli-ux");
6
+ const HOST = "https://learnpack.herokuapp.com";
7
+ // eslint-disable-next-line
8
+ const _fetch = require("node-fetch");
9
+ const fetch = async (url, options = {}) => {
10
+ const headers = { "Content-Type": "application/json" };
11
+ let session = null;
12
+ try {
13
+ session = await storage.getItem("bc-payload");
14
+ if (session.token && session.token !== "" && !url.includes("/token"))
15
+ headers.Authorization = "Token " + session.token;
16
+ }
17
+ catch (_a) { }
18
+ try {
19
+ const resp = await _fetch(url, Object.assign(Object.assign({}, options), { headers: Object.assign(Object.assign({}, headers), options.headers) }));
20
+ if (resp.status >= 200 && resp.status < 300)
21
+ return await resp.json();
22
+ if (resp.status === 401)
23
+ throw APIError("Invalid authentication credentials", 401);
24
+ else if (resp.status === 404)
25
+ throw APIError("Package not found", 404);
26
+ else if (resp.status >= 500)
27
+ throw APIError("Impossible to connect with the server", 500);
28
+ else if (resp.status >= 400) {
29
+ const error = await resp.json();
30
+ if (error.detail || error.error) {
31
+ throw APIError(error.detail || error.error);
32
+ }
33
+ else if (error.nonFieldErrors) {
34
+ throw APIError(error.nonFieldErrors[0], error);
35
+ }
36
+ else if (typeof error === "object") {
37
+ if (Object.keys(error).length > 0) {
38
+ const key = error[Object.keys(error)[0]];
39
+ throw APIError(`${key}: ${error[key][0]}`, error);
40
+ }
41
+ }
42
+ else {
43
+ throw APIError("Uknown error");
44
+ }
45
+ }
46
+ else
47
+ throw APIError("Uknown error");
48
+ }
49
+ catch (error) {
50
+ console_1.default.error(error.message);
51
+ throw error;
52
+ }
53
+ };
54
+ const login = async (identification, password) => {
55
+ try {
56
+ cli_ux_1.default.action.start("Looking for credentials...");
57
+ await cli_ux_1.default.wait(1000);
58
+ const data = await fetch(`${HOST}/v1/auth/token/`, {
59
+ body: JSON.stringify({ identification, password }),
60
+ method: "post",
61
+ });
62
+ cli_ux_1.default.action.stop("ready");
63
+ return data;
64
+ }
65
+ catch (error) {
66
+ console_1.default.error(error.message);
67
+ console_1.default.debug(error);
68
+ }
69
+ };
70
+ const publish = async (config) => {
71
+ const keys = [
72
+ "difficulty",
73
+ "language",
74
+ "skills",
75
+ "technologies",
76
+ "slug",
77
+ "repository",
78
+ "author",
79
+ "title",
80
+ ];
81
+ const payload = {};
82
+ for (const k of keys)
83
+ config[k] ? (payload[k] = config[k]) : null;
84
+ try {
85
+ console.log("Package to publish:", payload);
86
+ cli_ux_1.default.action.start("Updating package information...");
87
+ await cli_ux_1.default.wait(1000);
88
+ const data = await fetch(`${HOST}/v1/package/${config.slug}`, {
89
+ method: "PUT",
90
+ body: JSON.stringify(payload),
91
+ });
92
+ cli_ux_1.default.action.stop("ready");
93
+ return data;
94
+ }
95
+ catch (error) {
96
+ console.log("payload", payload);
97
+ console_1.default.error(error.message);
98
+ console_1.default.debug(error);
99
+ throw error;
100
+ }
101
+ };
102
+ const update = async (config) => {
103
+ try {
104
+ cli_ux_1.default.action.start("Updating package information...");
105
+ await cli_ux_1.default.wait(1000);
106
+ const data = await fetch(`${HOST}/v1/package/`, {
107
+ method: "POST",
108
+ body: JSON.stringify(config),
109
+ });
110
+ cli_ux_1.default.action.stop("ready");
111
+ return data;
112
+ }
113
+ catch (error) {
114
+ console_1.default.error(error.message);
115
+ console_1.default.debug(error);
116
+ throw error;
117
+ }
118
+ };
119
+ const getPackage = async (slug) => {
120
+ try {
121
+ cli_ux_1.default.action.start("Downloading package information...");
122
+ await cli_ux_1.default.wait(1000);
123
+ const data = await fetch(`${HOST}/v1/package/${slug}`);
124
+ cli_ux_1.default.action.stop("ready");
125
+ return data;
126
+ }
127
+ catch (error) {
128
+ if (error.status === 404)
129
+ console_1.default.error(`Package ${slug} does not exist`);
130
+ else
131
+ console_1.default.error(`Package ${slug} does not exist`);
132
+ console_1.default.debug(error);
133
+ throw error;
134
+ }
135
+ };
136
+ const getLangs = async () => {
137
+ try {
138
+ cli_ux_1.default.action.start("Downloading language options...");
139
+ await cli_ux_1.default.wait(1000);
140
+ const data = await fetch(`${HOST}/v1/package/language`);
141
+ cli_ux_1.default.action.stop("ready");
142
+ return data;
143
+ }
144
+ catch (error) {
145
+ if (error.status === 404)
146
+ console_1.default.error("Package slug does not exist");
147
+ else
148
+ console_1.default.error("Package slug does not exist");
149
+ console_1.default.debug(error);
150
+ throw error;
151
+ }
152
+ };
153
+ const getAllPackages = async ({ lang = "", slug = "", }) => {
154
+ try {
155
+ cli_ux_1.default.action.start("Downloading packages...");
156
+ await cli_ux_1.default.wait(1000);
157
+ const data = await fetch(`${HOST}/v1/package/all?limit=100&language=${lang}&slug=${slug}`);
158
+ cli_ux_1.default.action.stop("ready");
159
+ return data;
160
+ }
161
+ catch (error) {
162
+ console_1.default.error(`Package ${slug} does not exist`);
163
+ console_1.default.debug(error);
164
+ throw error;
165
+ }
166
+ };
167
+ const APIError = (error, code) => {
168
+ const message = error.message || error;
169
+ const _err = new Error(message);
170
+ _err.status = code || 400;
171
+ return _err;
172
+ };
173
+ exports.default = { login, publish, update, getPackage, getLangs, getAllPackages };
@@ -1,16 +1,16 @@
1
- import { IAuditErrors } from "../models/audit";
2
- import { IConfigObj } from "../models/config";
3
- import { ICounter } from "../models/counter";
4
- import { IFindings } from "../models/findings";
5
- import { IExercise } from "../models/exercise-obj";
6
- declare const _default: {
7
- isUrl: (url: string, errors: IAuditErrors[], counter: ICounter) => Promise<boolean>;
8
- checkForEmptySpaces: (str: string) => boolean;
9
- checkLearnpackClean: (configObj: IConfigObj, errors: IAuditErrors[]) => void;
10
- findInFile: (types: string[], content: string) => IFindings;
11
- checkUrl: (config: IConfigObj, filePath: string, fileName: string, exercise: IExercise | undefined, errors: IAuditErrors[], warnings: IAuditErrors[], counter: ICounter | undefined) => Promise<boolean>;
12
- writeFile: (content: string, filePath: string) => Promise<void>;
13
- showErrors: (errors: IAuditErrors[], counter: ICounter | undefined) => Promise<unknown>;
14
- showWarnings: (warnings: IAuditErrors[]) => Promise<unknown>;
15
- };
16
- export default _default;
1
+ import { IAuditErrors } from "../models/audit";
2
+ import { IConfigObj } from "../models/config";
3
+ import { ICounter } from "../models/counter";
4
+ import { IFindings } from "../models/findings";
5
+ import { IExercise } from "../models/exercise-obj";
6
+ declare const _default: {
7
+ isUrl: (url: string, errors: IAuditErrors[], counter: ICounter) => Promise<boolean>;
8
+ checkForEmptySpaces: (str: string) => boolean;
9
+ checkLearnpackClean: (configObj: IConfigObj, errors: IAuditErrors[]) => void;
10
+ findInFile: (types: string[], content: string) => IFindings;
11
+ checkUrl: (config: IConfigObj, filePath: string, fileName: string, exercise: IExercise | undefined, errors: IAuditErrors[], warnings: IAuditErrors[], counter: ICounter | undefined) => Promise<boolean>;
12
+ writeFile: (content: string, filePath: string) => Promise<void>;
13
+ showErrors: (errors: IAuditErrors[], counter: ICounter | undefined) => Promise<unknown>;
14
+ showWarnings: (warnings: IAuditErrors[]) => Promise<unknown>;
15
+ };
16
+ export default _default;