@learnpack/learnpack 2.1.25 → 2.1.27

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 (187) hide show
  1. package/README.md +16 -16
  2. package/bin/run +17 -17
  3. package/bin/run.cmd +3 -3
  4. package/oclif.manifest.json +1 -1
  5. package/package.json +139 -138
  6. package/src/commands/audit.ts +134 -109
  7. package/src/commands/clean.ts +29 -29
  8. package/src/commands/download.ts +62 -62
  9. package/src/commands/init.ts +39 -39
  10. package/src/commands/login.ts +42 -42
  11. package/src/commands/logout.ts +43 -43
  12. package/src/commands/publish.ts +107 -107
  13. package/src/commands/start.ts +264 -234
  14. package/src/commands/test.ts +85 -85
  15. package/src/index.ts +1 -1
  16. package/src/managers/config/allowed_files.ts +29 -29
  17. package/src/managers/config/defaults.ts +4 -2
  18. package/src/managers/config/exercise.ts +309 -302
  19. package/src/managers/config/index.ts +159 -138
  20. package/src/managers/file.ts +178 -169
  21. package/src/managers/gitpod.ts +84 -84
  22. package/src/managers/server/index.ts +78 -69
  23. package/src/managers/server/routes.ts +139 -90
  24. package/src/managers/session.ts +147 -118
  25. package/src/managers/socket.ts +252 -239
  26. package/src/managers/test.ts +83 -83
  27. package/src/models/action.ts +10 -3
  28. package/src/models/config-manager.ts +23 -23
  29. package/src/models/config.ts +9 -2
  30. package/src/models/counter.ts +11 -11
  31. package/src/models/errors.ts +22 -22
  32. package/src/models/exercise-obj.ts +6 -3
  33. package/src/models/file.ts +5 -5
  34. package/src/models/findings.ts +18 -18
  35. package/src/models/flags.ts +10 -10
  36. package/src/models/front-matter.ts +11 -11
  37. package/src/models/gitpod-data.ts +19 -19
  38. package/src/models/language.ts +4 -4
  39. package/src/models/package.ts +7 -7
  40. package/src/models/plugin-config.ts +17 -17
  41. package/src/models/session.ts +29 -26
  42. package/src/models/socket.ts +54 -48
  43. package/src/models/status.ts +16 -15
  44. package/src/models/success-types.ts +1 -1
  45. package/src/plugin/command/compile.ts +17 -17
  46. package/src/plugin/command/test.ts +30 -30
  47. package/src/plugin/index.ts +6 -6
  48. package/src/plugin/plugin.ts +94 -94
  49. package/src/plugin/utils.ts +87 -87
  50. package/src/types/node-fetch.d.ts +1 -1
  51. package/src/ui/download.ts +71 -71
  52. package/src/utils/BaseCommand.ts +48 -48
  53. package/src/utils/SessionCommand.ts +48 -48
  54. package/src/utils/api.ts +246 -194
  55. package/src/utils/audit.ts +392 -395
  56. package/src/utils/console.ts +24 -24
  57. package/src/utils/errors.ts +117 -117
  58. package/src/utils/exercisesQueue.ts +51 -51
  59. package/src/utils/fileQueue.ts +198 -198
  60. package/src/utils/misc.ts +23 -23
  61. package/src/utils/templates/gitignore.txt +19 -19
  62. package/src/utils/templates/incremental/.learn/exercises/01-hello-world/README.es.md +24 -24
  63. package/src/utils/templates/incremental/.learn/exercises/01-hello-world/README.md +24 -24
  64. package/src/utils/templates/incremental/README.ejs +4 -4
  65. package/src/utils/templates/incremental/README.es.ejs +4 -4
  66. package/src/utils/templates/isolated/01-hello-world/README.es.md +26 -26
  67. package/src/utils/templates/isolated/01-hello-world/README.md +26 -26
  68. package/src/utils/templates/isolated/README.ejs +4 -4
  69. package/src/utils/templates/isolated/README.es.ejs +4 -4
  70. package/src/utils/templates/no-grading/README.ejs +4 -4
  71. package/src/utils/templates/no-grading/README.es.ejs +4 -4
  72. package/src/utils/validators.ts +18 -18
  73. package/src/utils/watcher.ts +14 -14
  74. package/lib/commands/audit.d.ts +0 -6
  75. package/lib/commands/audit.js +0 -317
  76. package/lib/commands/clean.d.ts +0 -8
  77. package/lib/commands/clean.js +0 -25
  78. package/lib/commands/download.d.ts +0 -13
  79. package/lib/commands/download.js +0 -55
  80. package/lib/commands/init.d.ts +0 -9
  81. package/lib/commands/init.js +0 -123
  82. package/lib/commands/login.d.ts +0 -14
  83. package/lib/commands/login.js +0 -37
  84. package/lib/commands/logout.d.ts +0 -14
  85. package/lib/commands/logout.js +0 -37
  86. package/lib/commands/publish.d.ts +0 -14
  87. package/lib/commands/publish.js +0 -82
  88. package/lib/commands/start.d.ts +0 -7
  89. package/lib/commands/start.js +0 -165
  90. package/lib/commands/test.d.ts +0 -6
  91. package/lib/commands/test.js +0 -62
  92. package/lib/index.d.ts +0 -1
  93. package/lib/index.js +0 -4
  94. package/lib/managers/config/allowed_files.d.ts +0 -5
  95. package/lib/managers/config/allowed_files.js +0 -30
  96. package/lib/managers/config/defaults.d.ts +0 -37
  97. package/lib/managers/config/defaults.js +0 -38
  98. package/lib/managers/config/exercise.d.ts +0 -36
  99. package/lib/managers/config/exercise.js +0 -230
  100. package/lib/managers/config/index.d.ts +0 -3
  101. package/lib/managers/config/index.js +0 -302
  102. package/lib/managers/file.d.ts +0 -13
  103. package/lib/managers/file.js +0 -134
  104. package/lib/managers/gitpod.d.ts +0 -3
  105. package/lib/managers/gitpod.js +0 -67
  106. package/lib/managers/server/index.d.ts +0 -6
  107. package/lib/managers/server/index.js +0 -51
  108. package/lib/managers/server/routes.d.ts +0 -4
  109. package/lib/managers/server/routes.js +0 -167
  110. package/lib/managers/session.d.ts +0 -3
  111. package/lib/managers/session.js +0 -104
  112. package/lib/managers/socket.d.ts +0 -3
  113. package/lib/managers/socket.js +0 -164
  114. package/lib/managers/test.d.ts +0 -0
  115. package/lib/managers/test.js +0 -84
  116. package/lib/models/action.d.ts +0 -2
  117. package/lib/models/action.js +0 -2
  118. package/lib/models/audit.d.ts +0 -15
  119. package/lib/models/audit.js +0 -2
  120. package/lib/models/config-manager.d.ts +0 -21
  121. package/lib/models/config-manager.js +0 -2
  122. package/lib/models/config.d.ts +0 -60
  123. package/lib/models/config.js +0 -2
  124. package/lib/models/counter.d.ts +0 -11
  125. package/lib/models/counter.js +0 -2
  126. package/lib/models/errors.d.ts +0 -15
  127. package/lib/models/errors.js +0 -2
  128. package/lib/models/exercise-obj.d.ts +0 -27
  129. package/lib/models/exercise-obj.js +0 -2
  130. package/lib/models/file.d.ts +0 -5
  131. package/lib/models/file.js +0 -2
  132. package/lib/models/findings.d.ts +0 -17
  133. package/lib/models/findings.js +0 -2
  134. package/lib/models/flags.d.ts +0 -10
  135. package/lib/models/flags.js +0 -2
  136. package/lib/models/front-matter.d.ts +0 -11
  137. package/lib/models/front-matter.js +0 -2
  138. package/lib/models/gitpod-data.d.ts +0 -16
  139. package/lib/models/gitpod-data.js +0 -2
  140. package/lib/models/language.d.ts +0 -4
  141. package/lib/models/language.js +0 -2
  142. package/lib/models/package.d.ts +0 -7
  143. package/lib/models/package.js +0 -2
  144. package/lib/models/plugin-config.d.ts +0 -16
  145. package/lib/models/plugin-config.js +0 -2
  146. package/lib/models/session.d.ts +0 -23
  147. package/lib/models/session.js +0 -2
  148. package/lib/models/socket.d.ts +0 -31
  149. package/lib/models/socket.js +0 -2
  150. package/lib/models/status.d.ts +0 -1
  151. package/lib/models/status.js +0 -2
  152. package/lib/models/success-types.d.ts +0 -1
  153. package/lib/models/success-types.js +0 -2
  154. package/lib/plugin/command/compile.d.ts +0 -6
  155. package/lib/plugin/command/compile.js +0 -18
  156. package/lib/plugin/command/test.d.ts +0 -6
  157. package/lib/plugin/command/test.js +0 -25
  158. package/lib/plugin/index.d.ts +0 -27
  159. package/lib/plugin/index.js +0 -7
  160. package/lib/plugin/plugin.d.ts +0 -8
  161. package/lib/plugin/plugin.js +0 -68
  162. package/lib/plugin/utils.d.ts +0 -16
  163. package/lib/plugin/utils.js +0 -58
  164. package/lib/ui/download.d.ts +0 -5
  165. package/lib/ui/download.js +0 -61
  166. package/lib/utils/BaseCommand.d.ts +0 -8
  167. package/lib/utils/BaseCommand.js +0 -41
  168. package/lib/utils/SessionCommand.d.ts +0 -10
  169. package/lib/utils/SessionCommand.js +0 -47
  170. package/lib/utils/api.d.ts +0 -12
  171. package/lib/utils/api.js +0 -173
  172. package/lib/utils/audit.d.ts +0 -16
  173. package/lib/utils/audit.js +0 -302
  174. package/lib/utils/console.d.ts +0 -12
  175. package/lib/utils/console.js +0 -19
  176. package/lib/utils/errors.d.ts +0 -17
  177. package/lib/utils/errors.js +0 -100
  178. package/lib/utils/exercisesQueue.d.ts +0 -9
  179. package/lib/utils/exercisesQueue.js +0 -38
  180. package/lib/utils/fileQueue.d.ts +0 -40
  181. package/lib/utils/fileQueue.js +0 -168
  182. package/lib/utils/misc.d.ts +0 -1
  183. package/lib/utils/misc.js +0 -23
  184. package/lib/utils/validators.d.ts +0 -5
  185. package/lib/utils/validators.js +0 -17
  186. package/lib/utils/watcher.d.ts +0 -2
  187. package/lib/utils/watcher.js +0 -23
@@ -1,62 +1,62 @@
1
- import { Command /* , flags */ } from "@oclif/command";
2
- // import fetch from 'node-fetch'
3
- import { clone } from "../managers/file";
4
- import Console from "../utils/console";
5
- import api from "../utils/api";
6
- import { askPackage } from "../ui/download";
7
- // const BaseCommand = require('../utils/BaseCommand');
8
-
9
- class DownloadCommand extends Command {
10
- static description = `Describe the command here
11
- ...
12
- Extra documentation goes here
13
- `;
14
-
15
- static flags: any = {
16
- // name: flags.string({char: 'n', description: 'name to print'}),
17
- };
18
-
19
- static args = [
20
- {
21
- name: "package", // name of arg to show in help and reference with args[name]
22
- required: false, // make the arg required with `required: true`
23
- description:
24
- "The unique string that identifies this package on learnpack", // help description
25
- hidden: false, // hide this arg from help
26
- },
27
- ];
28
- // async init() {
29
- // const {flags} = this.parse(DownloadCommand)
30
- // await this.initSession(flags)
31
- // }
32
-
33
- async run() {
34
- const { /* flags, */ args } = this.parse(DownloadCommand);
35
- // start watching for file changes
36
- let _package: string = args.package;
37
- if (!_package) {
38
- _package = (await askPackage()) as string;
39
- }
40
-
41
- if (!_package) {
42
- return null;
43
- }
44
-
45
- try {
46
- const packageInfo = await api.getAllPackages({ slug: _package });
47
- if (packageInfo.results.length === 0)
48
- Console.error(`Package ${_package} not found`);
49
- else
50
- clone(packageInfo.results[0].repository)
51
- .then(_result => {
52
- Console.success("Successfully downloaded");
53
- Console.info(
54
- `You can now CD into the folder like this: $ cd ${_package}`
55
- );
56
- })
57
- .catch(error => Console.error(error.message || error));
58
- } catch {}
59
- }
60
- }
61
-
62
- export default DownloadCommand;
1
+ import { Command /* , flags */ } from "@oclif/command"
2
+ // import fetch from 'node-fetch'
3
+ import { clone } from "../managers/file"
4
+ import Console from "../utils/console"
5
+ import api from "../utils/api"
6
+ import { askPackage } from "../ui/download"
7
+ // const BaseCommand = require('../utils/BaseCommand');
8
+
9
+ class DownloadCommand extends Command {
10
+ static description = `Describe the command here
11
+ ...
12
+ Extra documentation goes here
13
+ `
14
+
15
+ static flags: any = {
16
+ // name: flags.string({char: 'n', description: 'name to print'}),
17
+ }
18
+
19
+ static args = [
20
+ {
21
+ name: "package", // name of arg to show in help and reference with args[name]
22
+ required: false, // make the arg required with `required: true`
23
+ description:
24
+ "The unique string that identifies this package on learnpack", // help description
25
+ hidden: false, // hide this arg from help
26
+ },
27
+ ]
28
+ // async init() {
29
+ // const {flags} = this.parse(DownloadCommand)
30
+ // await this.initSession(flags)
31
+ // }
32
+
33
+ async run() {
34
+ const { /* flags, */ args } = this.parse(DownloadCommand)
35
+ // start watching for file changes
36
+ let _package: string = args.package
37
+ if (!_package) {
38
+ _package = (await askPackage()) as string
39
+ }
40
+
41
+ if (!_package) {
42
+ return null
43
+ }
44
+
45
+ try {
46
+ const packageInfo = await api.getAllPackages({ slug: _package })
47
+ if (packageInfo.results.length === 0)
48
+ Console.error(`Package ${_package} not found`)
49
+ else
50
+ clone(packageInfo.results[0].repository)
51
+ .then(_result => {
52
+ Console.success("Successfully downloaded")
53
+ Console.info(
54
+ `You can now CD into the folder like this: $ cd ${_package}`
55
+ )
56
+ })
57
+ .catch(error => Console.error(error.message || error))
58
+ } catch {}
59
+ }
60
+ }
61
+
62
+ export default DownloadCommand
@@ -1,31 +1,31 @@
1
- import { flags } from "@oclif/command";
2
- import BaseCommand from "../utils/BaseCommand";
1
+ import { flags } from "@oclif/command"
2
+ import BaseCommand from "../utils/BaseCommand"
3
3
 
4
4
  // eslint-disable-next-line
5
5
  import * as fs from "fs-extra";
6
- import * as prompts from "prompts";
7
- import cli from "cli-ux";
8
- import * as eta from "eta";
6
+ import * as prompts from "prompts"
7
+ import cli from "cli-ux"
8
+ import * as eta from "eta"
9
9
 
10
- import Console from "../utils/console";
11
- import { ValidationError } from "../utils/errors";
10
+ import Console from "../utils/console"
11
+ import { ValidationError } from "../utils/errors"
12
12
 
13
- import * as path from "path";
13
+ import * as path from "path"
14
14
 
15
15
  class InitComand extends BaseCommand {
16
16
  static description =
17
- "Create a new learning package: Book, Tutorial or Exercise";
17
+ "Create a new learning package: Book, Tutorial or Exercise"
18
18
 
19
19
  static flags = {
20
20
  ...BaseCommand.flags,
21
21
  grading: flags.help({ char: "h" }),
22
- };
22
+ }
23
23
 
24
24
  async run() {
25
- const { flags } = this.parse(InitComand);
25
+ const { flags } = this.parse(InitComand)
26
26
 
27
27
  // if the folder/file .learn or .breathecode aleady exists
28
- await alreadyInitialized();
28
+ await alreadyInitialized()
29
29
 
30
30
  const choices = await prompts([
31
31
  {
@@ -76,13 +76,13 @@ class InitComand extends BaseCommand {
76
76
  initial: "1",
77
77
  message: "How many hours avg it takes to complete (number)?",
78
78
  validate: (value: string) => {
79
- const n = Math.floor(Number(value));
79
+ const n = Math.floor(Number(value))
80
80
  return (
81
81
  n !== Number.POSITIVE_INFINITY && String(n) === value && n >= 0
82
- );
82
+ )
83
83
  },
84
84
  },
85
- ]);
85
+ ])
86
86
 
87
87
  const packageInfo = {
88
88
  grading: choices.grading,
@@ -94,24 +94,24 @@ class InitComand extends BaseCommand {
94
94
  .toLowerCase()
95
95
  .replace(/ /g, "-")
96
96
  .replace(/[^\w-]+/g, ""),
97
- };
97
+ }
98
98
 
99
- cli.action.start("Initializing package");
99
+ cli.action.start("Initializing package")
100
100
 
101
- const languages = ["en", "es"];
101
+ const languages = ["en", "es"]
102
102
 
103
103
  const templatesDir = path.resolve(
104
104
  __dirname,
105
105
  "../../src/utils/templates/" + choices.grading || "no-grading"
106
- );
106
+ )
107
107
  if (!fs.existsSync(templatesDir))
108
- throw ValidationError(`Template ${templatesDir} does not exists`);
109
- await fs.copySync(templatesDir, "./");
108
+ throw ValidationError(`Template ${templatesDir} does not exists`)
109
+ await fs.copySync(templatesDir, "./")
110
110
 
111
111
  // Creating README files
112
112
  // eslint-disable-next-line
113
113
  languages.forEach((language) => {
114
- const readmeFilename = `README${language !== "en" ? `.${language}` : ""}`;
114
+ const readmeFilename = `README${language !== "en" ? `.${language}` : ""}`
115
115
  fs.writeFileSync(
116
116
  `./${readmeFilename}.md`,
117
117
  eta.render(
@@ -121,23 +121,23 @@ class InitComand extends BaseCommand {
121
121
  ),
122
122
  packageInfo
123
123
  )
124
- );
124
+ )
125
125
  if (fs.existsSync(`./${readmeFilename}.ejs`))
126
- fs.removeSync(`./${readmeFilename}.ejs`);
127
- });
126
+ fs.removeSync(`./${readmeFilename}.ejs`)
127
+ })
128
128
 
129
129
  if (!fs.existsSync("./.gitignore"))
130
130
  fs.copyFile(
131
131
  path.resolve(__dirname, "../../src/utils/templates/gitignore.txt"),
132
132
  "./.gitignore"
133
- );
134
- fs.writeFileSync("./learn.json", JSON.stringify(packageInfo, null, 2));
133
+ )
134
+ fs.writeFileSync("./learn.json", JSON.stringify(packageInfo, null, 2))
135
135
 
136
- cli.action.stop();
137
- Console.success(`😋 Package initialized successfully`);
136
+ cli.action.stop()
137
+ Console.success(`😋 Package initialized successfully`)
138
138
  Console.help(
139
139
  `Start the exercises by running the following command on your terminal: $ learnpack start`
140
- );
140
+ )
141
141
  }
142
142
  }
143
143
 
@@ -146,25 +146,25 @@ const alreadyInitialized = () =>
146
146
  fs.readdir("./", function (err: any, files: any) {
147
147
  files = files.filter((f: any) =>
148
148
  [".learn", "learn.json", "bc.json", ".breathecode"].includes(f)
149
- );
149
+ )
150
150
  if (err) {
151
- reject(ValidationError(err.message));
152
- throw ValidationError(err.message);
151
+ reject(ValidationError(err.message))
152
+ throw ValidationError(err.message)
153
153
  } else if (files.length > 0) {
154
154
  reject(
155
155
  ValidationError(
156
156
  "It seems the package is already initialized because we've found the following files: " +
157
157
  files.join(",")
158
158
  )
159
- );
159
+ )
160
160
  throw ValidationError(
161
161
  "It seems the package is already initialized because we've found the following files: " +
162
162
  files.join(",")
163
- );
163
+ )
164
164
  }
165
165
 
166
- resolve(false);
167
- });
168
- });
166
+ resolve(false)
167
+ })
168
+ })
169
169
 
170
- export default InitComand;
170
+ export default InitComand
@@ -1,42 +1,42 @@
1
- import SessionCommand from "../utils/SessionCommand";
2
- import SessionManager from "../managers/session";
3
- import Console from "../utils/console";
4
-
5
- class LoginCommand extends SessionCommand {
6
- static description = `Describe the command here
7
- ...
8
- Extra documentation goes here
9
- `;
10
-
11
- static flags: any = {
12
- // name: flags.string({char: 'n', description: 'name to print'}),
13
- };
14
-
15
- static args = [
16
- {
17
- name: "package", // name of arg to show in help and reference with args[name]
18
- required: false, // make the arg required with `required: true`
19
- description:
20
- "The unique string that identifies this package on learnpack", // help description
21
- hidden: false, // hide this arg from help
22
- },
23
- ];
24
-
25
- async init() {
26
- const { flags } = this.parse(LoginCommand);
27
- await this.initSession(flags);
28
- }
29
-
30
- async run() {
31
- /* const {flags, args} = */ this.parse(LoginCommand);
32
-
33
- try {
34
- await SessionManager.login();
35
- } catch (error) {
36
- Console.error("Error trying to authenticate");
37
- Console.error((error as TypeError).message || (error as string));
38
- }
39
- }
40
- }
41
-
42
- export default LoginCommand;
1
+ import SessionCommand from "../utils/SessionCommand"
2
+ import SessionManager from "../managers/session"
3
+ import Console from "../utils/console"
4
+
5
+ class LoginCommand extends SessionCommand {
6
+ static description = `Describe the command here
7
+ ...
8
+ Extra documentation goes here
9
+ `
10
+
11
+ static flags: any = {
12
+ // name: flags.string({char: 'n', description: 'name to print'}),
13
+ }
14
+
15
+ static args = [
16
+ {
17
+ name: "package", // name of arg to show in help and reference with args[name]
18
+ required: false, // make the arg required with `required: true`
19
+ description:
20
+ "The unique string that identifies this package on learnpack", // help description
21
+ hidden: false, // hide this arg from help
22
+ },
23
+ ]
24
+
25
+ async init() {
26
+ const { flags } = this.parse(LoginCommand)
27
+ await this.initSession(flags)
28
+ }
29
+
30
+ async run() {
31
+ /* const {flags, args} = */ this.parse(LoginCommand)
32
+
33
+ try {
34
+ await SessionManager.login()
35
+ } catch (error) {
36
+ Console.error("Error trying to authenticate")
37
+ Console.error((error as TypeError).message || (error as string))
38
+ }
39
+ }
40
+ }
41
+
42
+ export default LoginCommand
@@ -1,43 +1,43 @@
1
- // import {Command, flags} from '@oclif/command'
2
- // import { prompt } from "enquirer"
3
- // import fetch from 'node-fetch'
4
- import SessionCommand from "../utils/SessionCommand";
5
- import SessionManager from "../managers/session";
6
- // import Console from '../utils/console'
7
- // import { replace } from 'node-emoji'
8
- // import { validURL } from "../utils/validators"
9
- // const BaseCommand from '../utils/BaseCommand');
10
-
11
- class LogoutCommand extends SessionCommand {
12
- static description = `Describe the command here
13
- ...
14
- Extra documentation goes here
15
- `;
16
-
17
- static flags: any = {
18
- // name: flags.string({char: 'n', description: 'name to print'}),
19
- };
20
-
21
- static args = [
22
- {
23
- name: "package", // name of arg to show in help and reference with args[name]
24
- required: false, // make the arg required with `required: true`
25
- description:
26
- "The unique string that identifies this package on learnpack", // help description
27
- hidden: false, // hide this arg from help
28
- },
29
- ];
30
-
31
- async init() {
32
- const { flags } = this.parse(LogoutCommand);
33
- await this.initSession(flags);
34
- }
35
-
36
- async run() {
37
- // const {flags, args} = this.parse(LogoutCommand)
38
-
39
- SessionManager.destroy();
40
- }
41
- }
42
-
43
- export default LogoutCommand;
1
+ // import {Command, flags} from '@oclif/command'
2
+ // import { prompt } from "enquirer"
3
+ // import fetch from 'node-fetch'
4
+ import SessionCommand from "../utils/SessionCommand"
5
+ import SessionManager from "../managers/session"
6
+ // import Console from '../utils/console'
7
+ // import { replace } from 'node-emoji'
8
+ // import { validURL } from "../utils/validators"
9
+ // const BaseCommand from '../utils/BaseCommand');
10
+
11
+ class LogoutCommand extends SessionCommand {
12
+ static description = `Describe the command here
13
+ ...
14
+ Extra documentation goes here
15
+ `
16
+
17
+ static flags: any = {
18
+ // name: flags.string({char: 'n', description: 'name to print'}),
19
+ }
20
+
21
+ static args = [
22
+ {
23
+ name: "package", // name of arg to show in help and reference with args[name]
24
+ required: false, // make the arg required with `required: true`
25
+ description:
26
+ "The unique string that identifies this package on learnpack", // help description
27
+ hidden: false, // hide this arg from help
28
+ },
29
+ ]
30
+
31
+ async init() {
32
+ const { flags } = this.parse(LogoutCommand)
33
+ await this.initSession(flags)
34
+ }
35
+
36
+ async run() {
37
+ // const {flags, args} = this.parse(LogoutCommand)
38
+
39
+ SessionManager.destroy()
40
+ }
41
+ }
42
+
43
+ export default LogoutCommand
@@ -1,107 +1,107 @@
1
- import { prompt } from "enquirer";
2
- import SessionCommand from "../utils/SessionCommand";
3
- import Console from "../utils/console";
4
- import api from "../utils/api";
5
- import { validURL } from "../utils/validators";
6
-
7
- // eslint-disable-next-line
8
- const fetch = require("node-fetch");
9
-
10
- class PublishCommand extends SessionCommand {
11
- static description = `Describe the command here
12
- ...
13
- Extra documentation goes here
14
- `;
15
-
16
- static flags: any = {
17
- // name: flags.string({char: 'n', description: 'name to print'}),
18
- };
19
-
20
- static args = [
21
- {
22
- name: "package", // name of arg to show in help and reference with args[name]
23
- required: false, // make the arg required with `required: true`
24
- description:
25
- "The unique string that identifies this package on learnpack", // help description
26
- hidden: false, // hide this arg from help
27
- },
28
- ];
29
-
30
- async init() {
31
- const { flags } = this.parse(PublishCommand);
32
- await this.initSession(flags, true);
33
- }
34
-
35
- async run() {
36
- const { flags, args } = this.parse(PublishCommand);
37
-
38
- // avoid annonymus sessions
39
- // eslint-disable-next-line
40
- if (!this.session) return;
41
-
42
- Console.info(
43
- `Session found for ${this.session.payload.email}, publishing the package...`
44
- );
45
-
46
- const configObject = this.configManager?.get();
47
- if (
48
- configObject?.config?.slug === undefined ||
49
- !configObject.config?.slug
50
- ) {
51
- throw new Error(
52
- "The package is missing a slug (unique name identifier), please check your learn.json file and make sure it has a 'slug'"
53
- );
54
- }
55
-
56
- if (!validURL(configObject?.config?.repository ?? "")) {
57
- throw new Error(
58
- "The package has a missing or invalid 'repository' on the configuration file, it needs to be a Github URL"
59
- );
60
- } else {
61
- const validateResp = await fetch(configObject.config?.repository, {
62
- method: "HEAD",
63
- });
64
- if (!validateResp.ok || validateResp.status !== 200) {
65
- throw new Error(
66
- `The specified repository URL on the configuration file does not exist or its private, only public repositories are allowed at the moment: ${configObject.config?.repository}`
67
- );
68
- }
69
- }
70
-
71
- // start watching for file changes
72
- try {
73
- await api.publish({
74
- ...configObject,
75
- author: this.session.payload.user_id,
76
- });
77
- Console.success(
78
- `Package updated and published successfully: ${configObject.config?.slug}`
79
- );
80
- } catch (error) {
81
- if ((error as any).status === 404) {
82
- const answer = await prompt([
83
- {
84
- type: "confirm",
85
- name: "create",
86
- message: `Package with slug ${configObject.config?.slug} does not exist, do you want to create it?`,
87
- },
88
- ]);
89
- if (answer) {
90
- await api.update({
91
- ...configObject,
92
- author: this.session.payload.user_id,
93
- });
94
- Console.success(
95
- `Package created and published successfully: ${configObject.config?.slug}`
96
- );
97
- } else {
98
- Console.error("No answer from server");
99
- }
100
- } else {
101
- Console.error((error as TypeError).message);
102
- }
103
- }
104
- }
105
- }
106
-
107
- export default PublishCommand;
1
+ import { prompt } from "enquirer"
2
+ import SessionCommand from "../utils/SessionCommand"
3
+ import Console from "../utils/console"
4
+ import api from "../utils/api"
5
+ import { validURL } from "../utils/validators"
6
+
7
+ // eslint-disable-next-line
8
+ const fetch = require("node-fetch");
9
+
10
+ class PublishCommand extends SessionCommand {
11
+ static description = `Describe the command here
12
+ ...
13
+ Extra documentation goes here
14
+ `
15
+
16
+ static flags: any = {
17
+ // name: flags.string({char: 'n', description: 'name to print'}),
18
+ }
19
+
20
+ static args = [
21
+ {
22
+ name: "package", // name of arg to show in help and reference with args[name]
23
+ required: false, // make the arg required with `required: true`
24
+ description:
25
+ "The unique string that identifies this package on learnpack", // help description
26
+ hidden: false, // hide this arg from help
27
+ },
28
+ ]
29
+
30
+ async init() {
31
+ const { flags } = this.parse(PublishCommand)
32
+ await this.initSession(flags, true)
33
+ }
34
+
35
+ async run() {
36
+ const { flags, args } = this.parse(PublishCommand)
37
+
38
+ // avoid annonymus sessions
39
+ // eslint-disable-next-line
40
+ if (!this.session) return;
41
+
42
+ Console.info(
43
+ `Session found for ${this.session.payload.email}, publishing the package...`
44
+ )
45
+
46
+ const configObject = this.configManager?.get()
47
+ if (
48
+ configObject?.config?.slug === undefined ||
49
+ !configObject.config?.slug
50
+ ) {
51
+ throw new Error(
52
+ "The package is missing a slug (unique name identifier), please check your learn.json file and make sure it has a 'slug'"
53
+ )
54
+ }
55
+
56
+ if (!validURL(configObject?.config?.repository ?? "")) {
57
+ throw new Error(
58
+ "The package has a missing or invalid 'repository' on the configuration file, it needs to be a Github URL"
59
+ )
60
+ } else {
61
+ const validateResp = await fetch(configObject.config?.repository, {
62
+ method: "HEAD",
63
+ })
64
+ if (!validateResp.ok || validateResp.status !== 200) {
65
+ throw new Error(
66
+ `The specified repository URL on the configuration file does not exist or its private, only public repositories are allowed at the moment: ${configObject.config?.repository}`
67
+ )
68
+ }
69
+ }
70
+
71
+ // start watching for file changes
72
+ try {
73
+ await api.publish({
74
+ ...configObject,
75
+ author: this.session.payload.user_id,
76
+ })
77
+ Console.success(
78
+ `Package updated and published successfully: ${configObject.config?.slug}`
79
+ )
80
+ } catch (error) {
81
+ if ((error as any).status === 404) {
82
+ const answer = await prompt([
83
+ {
84
+ type: "confirm",
85
+ name: "create",
86
+ message: `Package with slug ${configObject.config?.slug} does not exist, do you want to create it?`,
87
+ },
88
+ ])
89
+ if (answer) {
90
+ await api.update({
91
+ ...configObject,
92
+ author: this.session.payload.user_id,
93
+ })
94
+ Console.success(
95
+ `Package created and published successfully: ${configObject.config?.slug}`
96
+ )
97
+ } else {
98
+ Console.error("No answer from server")
99
+ }
100
+ } else {
101
+ Console.error((error as TypeError).message)
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ export default PublishCommand