@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,48 +1,48 @@
1
- // import { flags } from "@oclif/command";
2
- import BaseCommand from './BaseCommand'
3
- import Console from './console'
4
- import SessionManager from '../managers/session'
5
- import configManager from '../managers/config/index'
6
- import {AuthError} from './errors'
7
- import {IConfigManager} from '../models/config-manager'
8
-
9
- export default class SessionCommand extends BaseCommand {
10
- session: any = null
11
- configManager: IConfigManager | null = null
12
- static flags: any
13
-
14
- async initSession(flags: any, _private = false) {
15
- try {
16
- if (!this.configManager) {
17
- await this.buildConfig(flags)
18
- }
19
-
20
- this.session = await SessionManager.get(this.configManager?.get())
21
- if (this.session) {
22
- Console.debug(`Session open for ${this.session.payload.email}.`)
23
- } else {
24
- if (_private)
25
- throw AuthError(
26
- 'You need to log in, run the following command to continue: $ learnpack login',
27
- )
28
- Console.debug('No active session available', _private)
29
- }
30
- } catch (error) {
31
- Console.error((error as TypeError).message)
32
- }
33
- }
34
-
35
- async buildConfig(flags: any) {
36
- this.configManager = await configManager(flags)
37
- }
38
-
39
- async catch(err: any) {
40
- Console.debug('COMMAND CATCH', err)
41
- throw err
42
- }
43
- }
44
-
45
- // SessionCommand.description = `Describe the command here
46
- // ...
47
- // Extra documentation goes here
48
- // `
1
+ // import { flags } from "@oclif/command";
2
+ import BaseCommand from './BaseCommand'
3
+ import Console from './console'
4
+ import SessionManager from '../managers/session'
5
+ import configManager from '../managers/config/index'
6
+ import {AuthError} from './errors'
7
+ import {IConfigManager} from '../models/config-manager'
8
+
9
+ export default class SessionCommand extends BaseCommand {
10
+ session: any = null
11
+ configManager: IConfigManager | null = null
12
+ static flags: any
13
+
14
+ async initSession(flags: any, _private = false) {
15
+ try {
16
+ if (!this.configManager) {
17
+ await this.buildConfig(flags)
18
+ }
19
+
20
+ this.session = await SessionManager.get(this.configManager?.get())
21
+ if (this.session) {
22
+ Console.debug(`Session open for ${this.session.payload.email}.`)
23
+ } else {
24
+ if (_private)
25
+ throw AuthError(
26
+ 'You need to log in, run the following command to continue: $ learnpack login',
27
+ )
28
+ Console.debug('No active session available', _private)
29
+ }
30
+ } catch (error) {
31
+ Console.error((error as TypeError).message)
32
+ }
33
+ }
34
+
35
+ async buildConfig(flags: any) {
36
+ this.configManager = await configManager(flags)
37
+ }
38
+
39
+ async catch(err: any) {
40
+ Console.debug('COMMAND CATCH', err)
41
+ throw err
42
+ }
43
+ }
44
+
45
+ // SessionCommand.description = `Describe the command here
46
+ // ...
47
+ // Extra documentation goes here
48
+ // `
package/src/utils/api.ts CHANGED
@@ -1,194 +1,194 @@
1
- import Console from "../utils/console";
2
- import * as storage from "node-persist";
3
- import cli from "cli-ux";
4
- const HOST = "https://learnpack.herokuapp.com";
5
-
6
- // eslint-disable-next-line
7
- const _fetch = require("node-fetch");
8
-
9
- interface IHeaders {
10
- "Content-Type"?: string;
11
- Authorization?: string;
12
- }
13
-
14
- interface IOptions {
15
- headers?: IHeaders;
16
- method?: string;
17
- body?: string;
18
- }
19
-
20
- const fetch = async (url: string, options: IOptions = {}) => {
21
- const headers: IHeaders = { "Content-Type": "application/json" };
22
- let session = null;
23
- try {
24
- session = await storage.getItem("bc-payload");
25
- if (session.token && session.token !== "" && !url.includes("/token"))
26
- headers.Authorization = "Token " + session.token;
27
- } catch {}
28
-
29
- try {
30
- const resp = await _fetch(url, {
31
- ...options,
32
- headers: { ...headers, ...options.headers },
33
- } as any);
34
-
35
- if (resp.status >= 200 && resp.status < 300)
36
- return await resp.json();
37
- if (resp.status === 401)
38
- throw APIError("Invalid authentication credentials", 401);
39
- else if (resp.status === 404)
40
- throw APIError("Package not found", 404);
41
- else if (resp.status >= 500)
42
- throw APIError("Impossible to connect with the server", 500);
43
- else if (resp.status >= 400) {
44
- const error = await resp.json();
45
- if (error.detail || error.error) {
46
- throw APIError(error.detail || error.error);
47
- } else if (error.nonFieldErrors) {
48
- throw APIError(error.nonFieldErrors[0], error);
49
- } else if (typeof error === "object") {
50
- if (Object.keys(error).length > 0) {
51
- const key = error[Object.keys(error)[0]];
52
- throw APIError(`${key}: ${error[key][0]}`, error);
53
- }
54
- } else {
55
- throw APIError("Uknown error");
56
- }
57
- } else
58
- throw APIError("Uknown error");
59
- } catch (error) {
60
- Console.error((error as TypeError).message);
61
- throw error;
62
- }
63
- };
64
-
65
- const login = async (identification: string, password: string) => {
66
- try {
67
- cli.action.start("Looking for credentials...");
68
- await cli.wait(1000);
69
- const data = await fetch(`${HOST}/v1/auth/token/`, {
70
- body: JSON.stringify({ identification, password }),
71
- method: "post",
72
- });
73
- cli.action.stop("ready");
74
- return data;
75
- } catch (error) {
76
- Console.error((error as TypeError).message);
77
- Console.debug(error);
78
- }
79
- };
80
-
81
- const publish = async (config: any) => {
82
- const keys = [
83
- "difficulty",
84
- "language",
85
- "skills",
86
- "technologies",
87
- "slug",
88
- "repository",
89
- "author",
90
- "title",
91
- ];
92
-
93
- const payload: { [key: string]: string } = {};
94
- for (const k of keys)
95
- config[k] ? (payload[k] = config[k]) : null;
96
- try {
97
- console.log("Package to publish:", payload);
98
- cli.action.start("Updating package information...");
99
- await cli.wait(1000);
100
- const data = await fetch(`${HOST}/v1/package/${config.slug}`, {
101
- method: "PUT",
102
- body: JSON.stringify(payload),
103
- });
104
- cli.action.stop("ready");
105
- return data;
106
- } catch (error) {
107
- console.log("payload", payload);
108
- Console.error((error as TypeError).message);
109
- Console.debug(error);
110
- throw error;
111
- }
112
- };
113
-
114
- const update = async (config: any) => {
115
- try {
116
- cli.action.start("Updating package information...");
117
- await cli.wait(1000);
118
- const data = await fetch(`${HOST}/v1/package/`, {
119
- method: "POST",
120
- body: JSON.stringify(config),
121
- });
122
- cli.action.stop("ready");
123
- return data;
124
- } catch (error) {
125
- Console.error((error as any).message);
126
- Console.debug(error);
127
- throw error;
128
- }
129
- };
130
-
131
- const getPackage = async (slug: string) => {
132
- try {
133
- cli.action.start("Downloading package information...");
134
- await cli.wait(1000);
135
- const data = await fetch(`${HOST}/v1/package/${slug}`);
136
- cli.action.stop("ready");
137
- return data;
138
- } catch (error) {
139
- if ((error as any).status === 404)
140
- Console.error(`Package ${slug} does not exist`);
141
- else
142
- Console.error(`Package ${slug} does not exist`);
143
- Console.debug(error);
144
- throw error;
145
- }
146
- };
147
-
148
- const getLangs = async () => {
149
- try {
150
- cli.action.start("Downloading language options...");
151
- await cli.wait(1000);
152
- const data = await fetch(`${HOST}/v1/package/language`);
153
- cli.action.stop("ready");
154
- return data;
155
- } catch (error) {
156
- if ((error as any).status === 404)
157
- Console.error("Package slug does not exist");
158
- else
159
- Console.error("Package slug does not exist");
160
- Console.debug(error);
161
- throw error;
162
- }
163
- };
164
-
165
- const getAllPackages = async ({
166
- lang = "",
167
- slug = "",
168
- }: {
169
- lang?: string;
170
- slug?: string;
171
- }) => {
172
- try {
173
- cli.action.start("Downloading packages...");
174
- await cli.wait(1000);
175
- const data = await fetch(
176
- `${HOST}/v1/package/all?limit=100&language=${lang}&slug=${slug}`
177
- );
178
- cli.action.stop("ready");
179
- return data;
180
- } catch (error) {
181
- Console.error(`Package ${slug} does not exist`);
182
- Console.debug(error);
183
- throw error;
184
- }
185
- };
186
-
187
- const APIError = (error: TypeError | string, code?: number) => {
188
- const message: string = (error as TypeError).message || (error as string);
189
- const _err = new Error(message) as any;
190
- _err.status = code || 400;
191
- return _err;
192
- };
193
-
194
- export default { login, publish, update, getPackage, getLangs, getAllPackages };
1
+ import Console from "../utils/console";
2
+ import * as storage from "node-persist";
3
+ import cli from "cli-ux";
4
+ const HOST = "https://learnpack.herokuapp.com";
5
+
6
+ // eslint-disable-next-line
7
+ const _fetch = require("node-fetch");
8
+
9
+ interface IHeaders {
10
+ "Content-Type"?: string;
11
+ Authorization?: string;
12
+ }
13
+
14
+ interface IOptions {
15
+ headers?: IHeaders;
16
+ method?: string;
17
+ body?: string;
18
+ }
19
+
20
+ const fetch = async (url: string, options: IOptions = {}) => {
21
+ const headers: IHeaders = { "Content-Type": "application/json" };
22
+ let session = null;
23
+ try {
24
+ session = await storage.getItem("bc-payload");
25
+ if (session.token && session.token !== "" && !url.includes("/token"))
26
+ headers.Authorization = "Token " + session.token;
27
+ } catch {}
28
+
29
+ try {
30
+ const resp = await _fetch(url, {
31
+ ...options,
32
+ headers: { ...headers, ...options.headers },
33
+ } as any);
34
+
35
+ if (resp.status >= 200 && resp.status < 300)
36
+ return await resp.json();
37
+ if (resp.status === 401)
38
+ throw APIError("Invalid authentication credentials", 401);
39
+ else if (resp.status === 404)
40
+ throw APIError("Package not found", 404);
41
+ else if (resp.status >= 500)
42
+ throw APIError("Impossible to connect with the server", 500);
43
+ else if (resp.status >= 400) {
44
+ const error = await resp.json();
45
+ if (error.detail || error.error) {
46
+ throw APIError(error.detail || error.error);
47
+ } else if (error.nonFieldErrors) {
48
+ throw APIError(error.nonFieldErrors[0], error);
49
+ } else if (typeof error === "object") {
50
+ if (Object.keys(error).length > 0) {
51
+ const key = error[Object.keys(error)[0]];
52
+ throw APIError(`${key}: ${error[key][0]}`, error);
53
+ }
54
+ } else {
55
+ throw APIError("Uknown error");
56
+ }
57
+ } else
58
+ throw APIError("Uknown error");
59
+ } catch (error) {
60
+ Console.error((error as TypeError).message);
61
+ throw error;
62
+ }
63
+ };
64
+
65
+ const login = async (identification: string, password: string) => {
66
+ try {
67
+ cli.action.start("Looking for credentials...");
68
+ await cli.wait(1000);
69
+ const data = await fetch(`${HOST}/v1/auth/token/`, {
70
+ body: JSON.stringify({ identification, password }),
71
+ method: "post",
72
+ });
73
+ cli.action.stop("ready");
74
+ return data;
75
+ } catch (error) {
76
+ Console.error((error as TypeError).message);
77
+ Console.debug(error);
78
+ }
79
+ };
80
+
81
+ const publish = async (config: any) => {
82
+ const keys = [
83
+ "difficulty",
84
+ "language",
85
+ "skills",
86
+ "technologies",
87
+ "slug",
88
+ "repository",
89
+ "author",
90
+ "title",
91
+ ];
92
+
93
+ const payload: { [key: string]: string } = {};
94
+ for (const k of keys)
95
+ config[k] ? (payload[k] = config[k]) : null;
96
+ try {
97
+ console.log("Package to publish:", payload);
98
+ cli.action.start("Updating package information...");
99
+ await cli.wait(1000);
100
+ const data = await fetch(`${HOST}/v1/package/${config.slug}`, {
101
+ method: "PUT",
102
+ body: JSON.stringify(payload),
103
+ });
104
+ cli.action.stop("ready");
105
+ return data;
106
+ } catch (error) {
107
+ console.log("payload", payload);
108
+ Console.error((error as TypeError).message);
109
+ Console.debug(error);
110
+ throw error;
111
+ }
112
+ };
113
+
114
+ const update = async (config: any) => {
115
+ try {
116
+ cli.action.start("Updating package information...");
117
+ await cli.wait(1000);
118
+ const data = await fetch(`${HOST}/v1/package/`, {
119
+ method: "POST",
120
+ body: JSON.stringify(config),
121
+ });
122
+ cli.action.stop("ready");
123
+ return data;
124
+ } catch (error) {
125
+ Console.error((error as any).message);
126
+ Console.debug(error);
127
+ throw error;
128
+ }
129
+ };
130
+
131
+ const getPackage = async (slug: string) => {
132
+ try {
133
+ cli.action.start("Downloading package information...");
134
+ await cli.wait(1000);
135
+ const data = await fetch(`${HOST}/v1/package/${slug}`);
136
+ cli.action.stop("ready");
137
+ return data;
138
+ } catch (error) {
139
+ if ((error as any).status === 404)
140
+ Console.error(`Package ${slug} does not exist`);
141
+ else
142
+ Console.error(`Package ${slug} does not exist`);
143
+ Console.debug(error);
144
+ throw error;
145
+ }
146
+ };
147
+
148
+ const getLangs = async () => {
149
+ try {
150
+ cli.action.start("Downloading language options...");
151
+ await cli.wait(1000);
152
+ const data = await fetch(`${HOST}/v1/package/language`);
153
+ cli.action.stop("ready");
154
+ return data;
155
+ } catch (error) {
156
+ if ((error as any).status === 404)
157
+ Console.error("Package slug does not exist");
158
+ else
159
+ Console.error("Package slug does not exist");
160
+ Console.debug(error);
161
+ throw error;
162
+ }
163
+ };
164
+
165
+ const getAllPackages = async ({
166
+ lang = "",
167
+ slug = "",
168
+ }: {
169
+ lang?: string;
170
+ slug?: string;
171
+ }) => {
172
+ try {
173
+ cli.action.start("Downloading packages...");
174
+ await cli.wait(1000);
175
+ const data = await fetch(
176
+ `${HOST}/v1/package/all?limit=100&language=${lang}&slug=${slug}`
177
+ );
178
+ cli.action.stop("ready");
179
+ return data;
180
+ } catch (error) {
181
+ Console.error(`Package ${slug} does not exist`);
182
+ Console.debug(error);
183
+ throw error;
184
+ }
185
+ };
186
+
187
+ const APIError = (error: TypeError | string, code?: number) => {
188
+ const message: string = (error as TypeError).message || (error as string);
189
+ const _err = new Error(message) as any;
190
+ _err.status = code || 400;
191
+ return _err;
192
+ };
193
+
194
+ export default { login, publish, update, getPackage, getLangs, getAllPackages };