@learnpack/learnpack 2.1.26 → 2.1.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. package/README.md +10 -10
  2. package/oclif.manifest.json +1 -1
  3. package/package.json +2 -1
  4. package/src/commands/audit.ts +113 -113
  5. package/src/commands/clean.ts +10 -10
  6. package/src/commands/download.ts +18 -18
  7. package/src/commands/init.ts +39 -39
  8. package/src/commands/login.ts +13 -13
  9. package/src/commands/logout.ts +9 -9
  10. package/src/commands/publish.ts +25 -25
  11. package/src/commands/start.ts +101 -75
  12. package/src/commands/test.ts +34 -34
  13. package/src/managers/config/allowed_files.ts +2 -2
  14. package/src/managers/config/defaults.ts +2 -2
  15. package/src/managers/config/exercise.ts +79 -79
  16. package/src/managers/config/index.ts +145 -145
  17. package/src/managers/file.ts +74 -65
  18. package/src/managers/server/index.ts +32 -31
  19. package/src/managers/server/routes.ts +139 -90
  20. package/src/managers/session.ts +53 -24
  21. package/src/managers/socket.ts +92 -79
  22. package/src/models/action.ts +8 -1
  23. package/src/models/config-manager.ts +2 -2
  24. package/src/models/config.ts +7 -2
  25. package/src/models/exercise-obj.ts +6 -3
  26. package/src/models/plugin-config.ts +2 -2
  27. package/src/models/session.ts +5 -2
  28. package/src/models/socket.ts +12 -6
  29. package/src/models/status.ts +15 -14
  30. package/src/plugin/command/compile.ts +10 -10
  31. package/src/plugin/command/test.ts +14 -14
  32. package/src/plugin/index.ts +5 -5
  33. package/src/plugin/plugin.ts +26 -26
  34. package/src/plugin/utils.ts +23 -23
  35. package/src/utils/BaseCommand.ts +16 -16
  36. package/src/utils/api.ts +143 -91
  37. package/src/utils/audit.ts +93 -96
  38. package/src/utils/exercisesQueue.ts +15 -15
  39. package/src/utils/fileQueue.ts +85 -85
  40. package/src/utils/watcher.ts +14 -14
  41. package/lib/commands/audit.d.ts +0 -6
  42. package/lib/commands/audit.js +0 -342
  43. package/lib/commands/clean.d.ts +0 -8
  44. package/lib/commands/clean.js +0 -25
  45. package/lib/commands/download.d.ts +0 -13
  46. package/lib/commands/download.js +0 -55
  47. package/lib/commands/init.d.ts +0 -9
  48. package/lib/commands/init.js +0 -123
  49. package/lib/commands/login.d.ts +0 -14
  50. package/lib/commands/login.js +0 -37
  51. package/lib/commands/logout.d.ts +0 -14
  52. package/lib/commands/logout.js +0 -37
  53. package/lib/commands/publish.d.ts +0 -14
  54. package/lib/commands/publish.js +0 -82
  55. package/lib/commands/start.d.ts +0 -7
  56. package/lib/commands/start.js +0 -165
  57. package/lib/commands/test.d.ts +0 -6
  58. package/lib/commands/test.js +0 -62
  59. package/lib/index.d.ts +0 -1
  60. package/lib/index.js +0 -4
  61. package/lib/managers/config/allowed_files.d.ts +0 -5
  62. package/lib/managers/config/allowed_files.js +0 -30
  63. package/lib/managers/config/defaults.d.ts +0 -39
  64. package/lib/managers/config/defaults.js +0 -40
  65. package/lib/managers/config/exercise.d.ts +0 -36
  66. package/lib/managers/config/exercise.js +0 -233
  67. package/lib/managers/config/index.d.ts +0 -3
  68. package/lib/managers/config/index.js +0 -320
  69. package/lib/managers/file.d.ts +0 -13
  70. package/lib/managers/file.js +0 -134
  71. package/lib/managers/gitpod.d.ts +0 -3
  72. package/lib/managers/gitpod.js +0 -67
  73. package/lib/managers/server/index.d.ts +0 -6
  74. package/lib/managers/server/index.js +0 -58
  75. package/lib/managers/server/routes.d.ts +0 -4
  76. package/lib/managers/server/routes.js +0 -167
  77. package/lib/managers/session.d.ts +0 -3
  78. package/lib/managers/session.js +0 -104
  79. package/lib/managers/socket.d.ts +0 -3
  80. package/lib/managers/socket.js +0 -164
  81. package/lib/managers/test.d.ts +0 -0
  82. package/lib/managers/test.js +0 -84
  83. package/lib/models/action.d.ts +0 -2
  84. package/lib/models/action.js +0 -2
  85. package/lib/models/audit.d.ts +0 -15
  86. package/lib/models/audit.js +0 -2
  87. package/lib/models/config-manager.d.ts +0 -21
  88. package/lib/models/config-manager.js +0 -2
  89. package/lib/models/config.d.ts +0 -62
  90. package/lib/models/config.js +0 -2
  91. package/lib/models/counter.d.ts +0 -11
  92. package/lib/models/counter.js +0 -2
  93. package/lib/models/errors.d.ts +0 -15
  94. package/lib/models/errors.js +0 -2
  95. package/lib/models/exercise-obj.d.ts +0 -27
  96. package/lib/models/exercise-obj.js +0 -2
  97. package/lib/models/file.d.ts +0 -5
  98. package/lib/models/file.js +0 -2
  99. package/lib/models/findings.d.ts +0 -17
  100. package/lib/models/findings.js +0 -2
  101. package/lib/models/flags.d.ts +0 -10
  102. package/lib/models/flags.js +0 -2
  103. package/lib/models/front-matter.d.ts +0 -11
  104. package/lib/models/front-matter.js +0 -2
  105. package/lib/models/gitpod-data.d.ts +0 -16
  106. package/lib/models/gitpod-data.js +0 -2
  107. package/lib/models/language.d.ts +0 -4
  108. package/lib/models/language.js +0 -2
  109. package/lib/models/package.d.ts +0 -7
  110. package/lib/models/package.js +0 -2
  111. package/lib/models/plugin-config.d.ts +0 -16
  112. package/lib/models/plugin-config.js +0 -2
  113. package/lib/models/session.d.ts +0 -23
  114. package/lib/models/session.js +0 -2
  115. package/lib/models/socket.d.ts +0 -31
  116. package/lib/models/socket.js +0 -2
  117. package/lib/models/status.d.ts +0 -1
  118. package/lib/models/status.js +0 -2
  119. package/lib/models/success-types.d.ts +0 -1
  120. package/lib/models/success-types.js +0 -2
  121. package/lib/plugin/command/compile.d.ts +0 -6
  122. package/lib/plugin/command/compile.js +0 -18
  123. package/lib/plugin/command/test.d.ts +0 -6
  124. package/lib/plugin/command/test.js +0 -25
  125. package/lib/plugin/index.d.ts +0 -27
  126. package/lib/plugin/index.js +0 -7
  127. package/lib/plugin/plugin.d.ts +0 -8
  128. package/lib/plugin/plugin.js +0 -68
  129. package/lib/plugin/utils.d.ts +0 -16
  130. package/lib/plugin/utils.js +0 -58
  131. package/lib/ui/download.d.ts +0 -5
  132. package/lib/ui/download.js +0 -61
  133. package/lib/utils/BaseCommand.d.ts +0 -8
  134. package/lib/utils/BaseCommand.js +0 -41
  135. package/lib/utils/SessionCommand.d.ts +0 -10
  136. package/lib/utils/SessionCommand.js +0 -47
  137. package/lib/utils/api.d.ts +0 -12
  138. package/lib/utils/api.js +0 -173
  139. package/lib/utils/audit.d.ts +0 -16
  140. package/lib/utils/audit.js +0 -302
  141. package/lib/utils/console.d.ts +0 -12
  142. package/lib/utils/console.js +0 -19
  143. package/lib/utils/errors.d.ts +0 -17
  144. package/lib/utils/errors.js +0 -100
  145. package/lib/utils/exercisesQueue.d.ts +0 -9
  146. package/lib/utils/exercisesQueue.js +0 -38
  147. package/lib/utils/fileQueue.d.ts +0 -40
  148. package/lib/utils/fileQueue.js +0 -168
  149. package/lib/utils/misc.d.ts +0 -1
  150. package/lib/utils/misc.js +0 -23
  151. package/lib/utils/validators.d.ts +0 -5
  152. package/lib/utils/validators.js +0 -17
  153. package/lib/utils/watcher.d.ts +0 -2
  154. package/lib/utils/watcher.js +0 -23
@@ -1,18 +1,18 @@
1
- import * as fs from "fs";
2
- import * as p from "path";
3
- import * as shell from "shelljs";
4
- import { cli } from "cli-ux";
5
- import * as targz from "targz";
6
- import Console from "../utils/console";
7
- import * as https from "https";
8
- import { InternalError } from "../utils/errors";
1
+ import * as fs from "fs"
2
+ import * as p from "path"
3
+ import * as shell from "shelljs"
4
+ import { cli } from "cli-ux"
5
+ import * as targz from "targz"
6
+ import Console from "../utils/console"
7
+ import * as https from "https"
8
+ import { InternalError } from "../utils/errors"
9
9
 
10
10
  // eslint-disable-next-line
11
11
  const fetch = require("node-fetch");
12
12
 
13
13
  export const decompress = (sourcePath: string, destinationPath: string) =>
14
14
  new Promise((resolve, reject) => {
15
- Console.debug("Decompressing " + sourcePath);
15
+ Console.debug("Decompressing " + sourcePath)
16
16
  targz.decompress(
17
17
  {
18
18
  src: sourcePath,
@@ -20,15 +20,15 @@ export const decompress = (sourcePath: string, destinationPath: string) =>
20
20
  },
21
21
  function (err: string | Error | null) {
22
22
  if (err) {
23
- Console.error("Error when trying to decompress");
24
- reject(err);
23
+ Console.error("Error when trying to decompress")
24
+ reject(err)
25
25
  } else {
26
- Console.info("Decompression finished successfully");
27
- resolve(/* */ "");
26
+ Console.info("Decompression finished successfully")
27
+ resolve(/* */ "")
28
28
  }
29
29
  }
30
- );
31
- });
30
+ )
31
+ })
32
32
 
33
33
  export const downloadEditor = async (
34
34
  version: string | undefined,
@@ -39,41 +39,41 @@ export const downloadEditor = async (
39
39
  const resp2 = await fetch(
40
40
  `https://github.com/learnpack/coding-ide/blob/${version}/dist`,
41
41
  { method: "HEAD" }
42
- );
42
+ )
43
43
  if (!resp2.ok)
44
44
  throw InternalError(
45
45
  `Coding Editor ${version} was not found on learnpack repository, check the config.editor.version property on learn.json`
46
- );
46
+ )
47
47
 
48
48
  Console.info(
49
49
  "Downloading the LearnPack coding UI, this may take a minute..."
50
- );
50
+ )
51
51
  return download(
52
52
  `https://github.com/learnpack/coding-ide/blob/${version}/dist/app.tar.gz?raw=true`,
53
53
  destination
54
- );
55
- };
54
+ )
55
+ }
56
56
 
57
57
  export const download = (url: string, dest: string) => {
58
- Console.debug("Downloading " + url);
58
+ Console.debug("Downloading " + url)
59
59
  return new Promise((resolve, reject) => {
60
60
  const request = https.get(url, response => {
61
61
  if (response.statusCode === 200) {
62
- const file = fs.createWriteStream(dest, { flags: "wx" });
62
+ const file = fs.createWriteStream(dest, { flags: "wx" })
63
63
  file.on("finish", () => {
64
- resolve(true);
65
- });
64
+ resolve(true)
65
+ })
66
66
  file.on("error", err => {
67
- file.close();
67
+ file.close()
68
68
  if (err.code === "EEXIST") {
69
- Console.debug("File already exists");
70
- resolve("File already exists");
69
+ Console.debug("File already exists")
70
+ resolve("File already exists")
71
71
  } else {
72
- Console.debug("Error ", err.message);
73
- fs.unlink(dest, () => reject(err.message)); // Delete temp file
72
+ Console.debug("Error ", err.message)
73
+ fs.unlink(dest, () => reject(err.message)) // Delete temp file
74
74
  }
75
- });
76
- response.pipe(file);
75
+ })
76
+ response.pipe(file)
77
77
  } else if (response.statusCode === 302 || response.statusCode === 301) {
78
78
  // Console.debug("Servers redirected to "+response.headers.location)
79
79
  // Recursively follow redirects, only a 200 will resolve.
@@ -81,89 +81,98 @@ export const download = (url: string, dest: string) => {
81
81
  download(response.headers.location, dest)
82
82
  .then(() => resolve(/* */ ""))
83
83
  .catch(error => {
84
- Console.error(error);
85
- reject(error);
86
- });
84
+ Console.error(error)
85
+ reject(error)
86
+ })
87
87
  }
88
88
  } else {
89
89
  Console.debug(
90
90
  `Server responded with ${response.statusCode}: ${response.statusMessage}`
91
- );
91
+ )
92
92
  reject(
93
93
  `Server responded with ${response.statusCode}: ${response.statusMessage}`
94
- );
94
+ )
95
95
  }
96
- });
96
+ })
97
97
 
98
98
  request.on("error", err => {
99
- reject(err.message);
100
- });
101
- });
102
- };
99
+ reject(err.message)
100
+ })
101
+ })
102
+ }
103
103
 
104
104
  export const clone = (repository = "", folder = "./") =>
105
105
  new Promise((resolve, reject) => {
106
106
  if (!repository) {
107
- reject("Missing repository url for this package");
107
+ reject("Missing repository url for this package")
108
108
  // return false
109
109
  }
110
110
 
111
- cli.action.start("Verifying GIT...");
111
+ cli.action.start("Verifying GIT...")
112
112
  if (!shell.which("git")) {
113
- reject("Sorry, this script requires git");
113
+ reject("Sorry, this script requires git")
114
114
  // return false
115
115
  }
116
116
 
117
- cli.action.stop();
117
+ cli.action.stop()
118
118
 
119
- let fileName = p.basename(repository);
119
+ let fileName = p.basename(repository)
120
120
  if (!fileName) {
121
- reject("Invalid repository information on package: " + repository);
121
+ reject("Invalid repository information on package: " + repository)
122
122
  // return false
123
123
  }
124
124
 
125
- fileName = fileName.split(".")[0];
125
+ fileName = fileName.split(".")[0]
126
126
  if (fs.existsSync("./" + fileName)) {
127
127
  reject(
128
128
  `Directory ${fileName} already exists; Did you download this package already?`
129
- );
129
+ )
130
130
  // return false
131
131
  }
132
132
 
133
- cli.action.start(`Cloning repository ${repository}...`);
133
+ cli.action.start(`Cloning repository ${repository}...`)
134
134
  if (shell.exec(`git clone ${repository}`).code !== 0) {
135
- reject("Error: Installation failed");
135
+ reject("Error: Installation failed")
136
136
  }
137
137
 
138
- cli.action.stop();
138
+ cli.action.stop()
139
139
 
140
- cli.action.start("Cleaning installation...");
140
+ cli.action.start("Cleaning installation...")
141
141
  if (shell.exec(`rm -R -f ${folder}${fileName}/.git`).code !== 0) {
142
- reject("Error: removing .git directory");
142
+ reject("Error: removing .git directory")
143
143
  }
144
144
 
145
- cli.action.stop();
145
+ cli.action.stop()
146
146
 
147
- resolve("Done");
148
- });
147
+ resolve("Done")
148
+ })
149
149
 
150
150
  export const rmSync = function (path: string) {
151
- let files = [];
151
+ let files = []
152
152
  if (fs.existsSync(path)) {
153
- files = fs.readdirSync(path);
153
+ files = fs.readdirSync(path)
154
154
  for (const [, file] of files.entries()) {
155
- const curPath = path + "/" + file;
155
+ const curPath = path + "/" + file
156
156
  if (fs.lstatSync(curPath).isDirectory()) {
157
157
  // recurse
158
- rmSync(curPath);
158
+ rmSync(curPath)
159
159
  } else {
160
160
  // delete file
161
- fs.unlinkSync(curPath);
161
+ fs.unlinkSync(curPath)
162
162
  }
163
163
  }
164
164
 
165
- fs.rmdirSync(path);
165
+ fs.rmdirSync(path)
166
166
  }
167
- };
167
+ }
168
168
 
169
- export default { download, decompress, downloadEditor, clone, rmSync };
169
+ export const checkIfDirectoryExists = (path: string) => {
170
+ const fs = require("fs")
171
+ if (fs.existsSync(path)) {
172
+ return true
173
+ }
174
+
175
+ return false
176
+ }
177
+
178
+ export default { download, decompress, downloadEditor, clone, rmSync }
@@ -1,32 +1,32 @@
1
- import * as express from "express";
1
+ import * as express from "express"
2
2
  // eslint-disable-next-line
3
3
  import * as cors from "cors";
4
- import * as http from "http";
5
- import Console from "../../utils/console";
6
- import addRoutes from "./routes";
7
- import cli from "cli-ux";
8
- import { IConfigObj } from "../../models/config";
9
- import { IConfigManager } from "../../models/config-manager";
4
+ import * as http from "http"
5
+ import Console from "../../utils/console"
6
+ import addRoutes from "./routes"
7
+ import cli from "cli-ux"
8
+ import { IConfigObj } from "../../models/config"
9
+ import { IConfigManager } from "../../models/config-manager"
10
10
 
11
- export let TEST_SERVER: http.Server;
11
+ export let TEST_SERVER: http.Server
12
12
 
13
13
  export default async function (
14
14
  configObj: IConfigObj,
15
15
  configManager: IConfigManager,
16
16
  isTestingEnvironment = false
17
17
  ) {
18
- const { config } = configObj;
19
- const app = express();
20
- let server: any;
18
+ const { config } = configObj
19
+ const app = express()
20
+ let server: any
21
21
 
22
22
  if (isTestingEnvironment) {
23
23
  if (TEST_SERVER === undefined)
24
- TEST_SERVER = require("http").Server(app);
25
- server = TEST_SERVER;
24
+ TEST_SERVER = require("http").Server(app)
25
+ server = TEST_SERVER
26
26
  } else
27
- server = require("http").Server(app);
27
+ server = require("http").Server(app)
28
28
 
29
- app.use(cors());
29
+ app.use(cors())
30
30
 
31
31
  // app.use(function(req, res, next) {
32
32
  // res.header("Access-Control-Allow-Origin", "*")
@@ -36,42 +36,43 @@ server = require("http").Server(app);
36
36
  // })
37
37
 
38
38
  // add all needed endpoints
39
- await addRoutes(app, configObj, configManager);
39
+
40
+ await addRoutes(app, configObj, configManager)
40
41
 
41
42
  server.listen(isTestingEnvironment ? 5000 : config?.port, function () {
42
43
  if (!isTestingEnvironment) {
43
44
  Console.success(
44
45
  `Exercises are running 😃 Open your browser to start practicing!`
45
- );
46
- Console.success(`\n Open the exercise on this link:`);
47
- Console.log(` ${config?.publicUrl}`);
46
+ )
47
+ Console.success(`\n Open the exercise on this link:`)
48
+ Console.log(` ${config?.publicUrl}`)
48
49
  if (config?.editor.mode === "standalone")
49
- cli.open(`${config.publicUrl}`);
50
+ cli.open(`${config.publicUrl}`)
50
51
  }
51
- });
52
+ })
52
53
 
53
- const sockets: any = new Set();
54
+ const sockets: any = new Set()
54
55
 
55
56
  server.on("connection", (socket: any) => {
56
- sockets.add(socket);
57
+ sockets.add(socket)
57
58
 
58
59
  server.once("close", () => {
59
- sockets.delete(socket);
60
- });
61
- });
60
+ sockets.delete(socket)
61
+ })
62
+ })
62
63
 
63
64
  /**
64
65
  * Forcefully terminates HTTP server.
65
66
  */
66
67
  server.terminate = (callback: void) => {
67
68
  for (const socket of sockets) {
68
- socket.destroy();
69
+ socket.destroy()
69
70
 
70
- sockets.delete(socket);
71
+ sockets.delete(socket)
71
72
  }
72
73
 
73
- server.close(callback);
74
- };
74
+ server.close(callback)
75
+ }
75
76
 
76
- return server;
77
+ return server
77
78
  }