@learnpack/learnpack 4.0.10 → 4.0.13
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.
- package/README.md +16 -20
- package/lib/commands/audit.d.ts +6 -6
- package/lib/commands/audit.js +327 -327
- package/lib/commands/clean.d.ts +8 -8
- package/lib/commands/clean.js +22 -22
- package/lib/commands/download.d.ts +13 -13
- package/lib/commands/download.js +52 -52
- package/lib/commands/init.d.ts +9 -9
- package/lib/commands/init.js +127 -127
- package/lib/commands/login.d.ts +14 -14
- package/lib/commands/login.js +34 -34
- package/lib/commands/logout.d.ts +14 -14
- package/lib/commands/logout.js +34 -34
- package/lib/commands/publish.d.ts +11 -14
- package/lib/commands/publish.js +160 -82
- package/lib/commands/start.d.ts +7 -7
- package/lib/commands/start.js +252 -250
- package/lib/commands/test.d.ts +6 -6
- package/lib/commands/test.js +62 -62
- package/lib/index.d.ts +1 -1
- package/lib/index.js +4 -4
- package/lib/managers/config/allowed_files.d.ts +5 -5
- package/lib/managers/config/allowed_files.js +30 -30
- package/lib/managers/config/defaults.d.ts +47 -48
- package/lib/managers/config/defaults.js +51 -51
- package/lib/managers/config/exercise.d.ts +36 -36
- package/lib/managers/config/exercise.js +243 -236
- package/lib/managers/config/index.d.ts +3 -3
- package/lib/managers/config/index.js +464 -459
- package/lib/managers/file.d.ts +14 -14
- package/lib/managers/file.js +190 -184
- package/lib/managers/gitpod.d.ts +3 -3
- package/lib/managers/gitpod.js +67 -67
- package/lib/managers/server/index.d.ts +5 -6
- package/lib/managers/server/index.js +58 -58
- package/lib/managers/server/routes.d.ts +4 -4
- package/lib/managers/server/routes.js +228 -220
- package/lib/managers/session.d.ts +3 -3
- package/lib/managers/session.js +125 -125
- package/lib/managers/socket.d.ts +3 -3
- package/lib/managers/socket.js +188 -186
- package/lib/managers/telemetry.d.ts +74 -74
- package/lib/managers/telemetry.js +215 -214
- package/lib/managers/test.js +84 -84
- package/lib/models/action.d.ts +2 -2
- package/lib/models/action.js +2 -2
- package/lib/models/audit.d.ts +15 -15
- package/lib/models/audit.js +2 -2
- package/lib/models/config-manager.d.ts +21 -21
- package/lib/models/config-manager.js +2 -2
- package/lib/models/config.d.ts +86 -86
- package/lib/models/config.js +2 -2
- package/lib/models/counter.d.ts +11 -11
- package/lib/models/counter.js +2 -2
- package/lib/models/errors.d.ts +15 -15
- package/lib/models/errors.js +2 -2
- package/lib/models/exercise-obj.d.ts +29 -30
- package/lib/models/exercise-obj.js +2 -2
- package/lib/models/file.d.ts +5 -5
- package/lib/models/file.js +2 -2
- package/lib/models/findings.d.ts +17 -17
- package/lib/models/findings.js +2 -2
- package/lib/models/flags.d.ts +10 -10
- package/lib/models/flags.js +2 -2
- package/lib/models/front-matter.d.ts +11 -11
- package/lib/models/front-matter.js +2 -2
- package/lib/models/gitpod-data.d.ts +16 -16
- package/lib/models/gitpod-data.js +2 -2
- package/lib/models/language.d.ts +4 -4
- package/lib/models/language.js +2 -2
- package/lib/models/package.d.ts +7 -7
- package/lib/models/package.js +2 -2
- package/lib/models/plugin-config.d.ts +16 -16
- package/lib/models/plugin-config.js +2 -2
- package/lib/models/session.d.ts +31 -31
- package/lib/models/session.js +2 -2
- package/lib/models/socket.d.ts +37 -37
- package/lib/models/socket.js +2 -2
- package/lib/models/status.d.ts +1 -1
- package/lib/models/status.js +2 -2
- package/lib/models/success-types.d.ts +1 -1
- package/lib/models/success-types.js +2 -2
- package/lib/plugin/command/compile.d.ts +6 -6
- package/lib/plugin/command/compile.js +18 -18
- package/lib/plugin/command/test.d.ts +6 -6
- package/lib/plugin/command/test.js +25 -25
- package/lib/plugin/index.d.ts +27 -27
- package/lib/plugin/index.js +7 -7
- package/lib/plugin/plugin.d.ts +8 -8
- package/lib/plugin/plugin.js +68 -68
- package/lib/plugin/utils.d.ts +16 -16
- package/lib/plugin/utils.js +58 -58
- package/lib/ui/download.d.ts +5 -5
- package/lib/ui/download.js +62 -61
- package/lib/utils/BaseCommand.d.ts +8 -8
- package/lib/utils/BaseCommand.js +41 -41
- package/lib/utils/SessionCommand.d.ts +10 -10
- package/lib/utils/SessionCommand.js +43 -43
- package/lib/utils/api.d.ts +14 -14
- package/lib/utils/api.js +255 -255
- package/lib/utils/audit.d.ts +16 -16
- package/lib/utils/audit.js +303 -303
- package/lib/utils/checkNotInstalled.d.ts +8 -8
- package/lib/utils/checkNotInstalled.js +185 -181
- package/lib/utils/console.d.ts +12 -12
- package/lib/utils/console.js +19 -19
- package/lib/utils/errors.d.ts +17 -17
- package/lib/utils/errors.js +107 -100
- package/lib/utils/exercisesQueue.d.ts +9 -9
- package/lib/utils/exercisesQueue.js +38 -38
- package/lib/utils/fileQueue.d.ts +43 -43
- package/lib/utils/fileQueue.js +169 -169
- package/lib/utils/misc.d.ts +1 -1
- package/lib/utils/misc.js +24 -23
- package/lib/utils/osOperations.d.ts +5 -5
- package/lib/utils/osOperations.js +72 -72
- package/lib/utils/validators.d.ts +5 -5
- package/lib/utils/validators.js +16 -17
- package/lib/utils/watcher.d.ts +2 -2
- package/lib/utils/watcher.js +25 -25
- package/oclif.manifest.json +1 -1
- package/package.json +6 -4
- package/src/commands/publish.ts +181 -107
- package/src/managers/config/index.ts +5 -0
- package/src/managers/server/routes.ts +10 -0
- package/src/managers/session.ts +145 -145
package/lib/commands/logout.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// import {Command, flags} from '@oclif/command'
|
|
4
|
-
// import { prompt } from "enquirer"
|
|
5
|
-
// import fetch from 'node-fetch'
|
|
6
|
-
const SessionCommand_1 = require("../utils/SessionCommand");
|
|
7
|
-
const session_1 = require("../managers/session");
|
|
8
|
-
// import Console from '../utils/console'
|
|
9
|
-
// import { replace } from 'node-emoji'
|
|
10
|
-
// import { validURL } from "../utils/validators"
|
|
11
|
-
// const BaseCommand from '../utils/BaseCommand');
|
|
12
|
-
class LogoutCommand extends SessionCommand_1.default {
|
|
13
|
-
async init() {
|
|
14
|
-
const { flags } = this.parse(LogoutCommand);
|
|
15
|
-
await this.initSession(flags);
|
|
16
|
-
}
|
|
17
|
-
async run() {
|
|
18
|
-
// const {flags, args} = this.parse(LogoutCommand)
|
|
19
|
-
session_1.default.destroy();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// import {Command, flags} from '@oclif/command'
|
|
4
|
+
// import { prompt } from "enquirer"
|
|
5
|
+
// import fetch from 'node-fetch'
|
|
6
|
+
const SessionCommand_1 = require("../utils/SessionCommand");
|
|
7
|
+
const session_1 = require("../managers/session");
|
|
8
|
+
// import Console from '../utils/console'
|
|
9
|
+
// import { replace } from 'node-emoji'
|
|
10
|
+
// import { validURL } from "../utils/validators"
|
|
11
|
+
// const BaseCommand from '../utils/BaseCommand');
|
|
12
|
+
class LogoutCommand extends SessionCommand_1.default {
|
|
13
|
+
async init() {
|
|
14
|
+
const { flags } = this.parse(LogoutCommand);
|
|
15
|
+
await this.initSession(flags);
|
|
16
|
+
}
|
|
17
|
+
async run() {
|
|
18
|
+
// const {flags, args} = this.parse(LogoutCommand)
|
|
19
|
+
session_1.default.destroy();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
22
|
LogoutCommand.description = `Describe the command here
|
|
23
23
|
...
|
|
24
24
|
Extra documentation goes here
|
|
25
|
-
`;
|
|
26
|
-
LogoutCommand.flags = {
|
|
27
|
-
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
28
|
-
};
|
|
29
|
-
LogoutCommand.args = [
|
|
30
|
-
{
|
|
31
|
-
name: "package",
|
|
32
|
-
required: false,
|
|
33
|
-
description: "The unique string that identifies this package on learnpack",
|
|
34
|
-
hidden: false,
|
|
35
|
-
},
|
|
36
|
-
];
|
|
37
|
-
exports.default = LogoutCommand;
|
|
25
|
+
`;
|
|
26
|
+
LogoutCommand.flags = {
|
|
27
|
+
// name: flags.string({char: 'n', description: 'name to print'}),
|
|
28
|
+
};
|
|
29
|
+
LogoutCommand.args = [
|
|
30
|
+
{
|
|
31
|
+
name: "package", // name of arg to show in help and reference with args[name]
|
|
32
|
+
required: false, // make the arg required with `required: true`
|
|
33
|
+
description: "The unique string that identifies this package on learnpack", // help description
|
|
34
|
+
hidden: false, // hide this arg from help
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
exports.default = LogoutCommand;
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
-
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
run(): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
export default PublishCommand;
|
|
1
|
+
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
+
export default class BuildCommand extends SessionCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
help: import("@oclif/parser/lib/flags").IBooleanFlag<void>;
|
|
6
|
+
};
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
copyDirectory(src: string, dest: string): void;
|
|
10
|
+
removeDirectory(dir: string): void;
|
|
11
|
+
}
|
package/lib/commands/publish.js
CHANGED
|
@@ -1,82 +1,160 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable arrow-parens */
|
|
4
|
+
/* eslint-disable unicorn/no-array-for-each */
|
|
5
|
+
const command_1 = require("@oclif/command");
|
|
6
|
+
const SessionCommand_1 = require("../utils/SessionCommand");
|
|
7
|
+
const session_1 = require("../managers/session");
|
|
8
|
+
const fs = require("fs");
|
|
9
|
+
const path = require("path");
|
|
10
|
+
const archiver = require("archiver");
|
|
11
|
+
const axios_1 = require("axios");
|
|
12
|
+
const FormData = require("form-data");
|
|
13
|
+
const console_1 = require("../utils/console");
|
|
14
|
+
// const RIGOBOT_HOST = "https://rigobot-test-cca7d841c9d8.herokuapp.com"
|
|
15
|
+
const RIGOBOT_HOST =
|
|
16
|
+
// "https://8000-charlytoc-rigobot-bmwdeam7cev.ws-us116.gitpod.io"
|
|
17
|
+
"https://rigobot.herokuapp.com";
|
|
18
|
+
const uploadZipEndpont = RIGOBOT_HOST + "/v1/learnpack/upload";
|
|
19
|
+
class BuildCommand extends SessionCommand_1.default {
|
|
20
|
+
async init() {
|
|
21
|
+
const { flags } = this.parse(BuildCommand);
|
|
22
|
+
await this.initSession(flags);
|
|
23
|
+
}
|
|
24
|
+
async run() {
|
|
25
|
+
const buildDir = path.join(process.cwd(), "build");
|
|
26
|
+
const sessionPayload = await session_1.default.getPayload();
|
|
27
|
+
if (!sessionPayload || !sessionPayload.rigobot) {
|
|
28
|
+
console_1.default.error("You must be logged in to upload a LearnPack packge, please run: \n$ learnpack login");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const rigoToken = sessionPayload.rigobot.key;
|
|
32
|
+
// const rigoToken = "417d612d226a1606ad3a4e94b1881a9f0124b667"
|
|
33
|
+
// Read learn.json to get the slug
|
|
34
|
+
const learnJsonPath = path.join(process.cwd(), "learn.json");
|
|
35
|
+
if (!fs.existsSync(learnJsonPath)) {
|
|
36
|
+
this.error("learn.json not found");
|
|
37
|
+
}
|
|
38
|
+
const learnJson = JSON.parse(fs.readFileSync(learnJsonPath, "utf-8"));
|
|
39
|
+
const zipFilePath = path.join(process.cwd(), `${learnJson.slug}.zip`);
|
|
40
|
+
// Ensure build directory exists
|
|
41
|
+
if (!fs.existsSync(buildDir)) {
|
|
42
|
+
fs.mkdirSync(buildDir);
|
|
43
|
+
}
|
|
44
|
+
// Copy config.json
|
|
45
|
+
const configPath = path.join(process.cwd(), ".learn", "config.json");
|
|
46
|
+
if (fs.existsSync(configPath)) {
|
|
47
|
+
fs.copyFileSync(configPath, path.join(buildDir, "config.json"));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.error("config.json not found");
|
|
51
|
+
}
|
|
52
|
+
// Copy .learn/assets directory
|
|
53
|
+
const assetsDir = path.join(process.cwd(), ".learn", "assets");
|
|
54
|
+
if (fs.existsSync(assetsDir)) {
|
|
55
|
+
this.copyDirectory(assetsDir, path.join(buildDir, ".learn", "assets"));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.error(".learn/assets directory not found");
|
|
59
|
+
}
|
|
60
|
+
// Copy .learn/_app directory files to the same level as config.json
|
|
61
|
+
const appDir = path.join(process.cwd(), ".learn", "_app");
|
|
62
|
+
if (fs.existsSync(appDir)) {
|
|
63
|
+
this.copyDirectory(appDir, buildDir);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.error(".learn/_app directory not found");
|
|
67
|
+
}
|
|
68
|
+
// Copy exercises directory
|
|
69
|
+
const exercisesDir = path.join(process.cwd(), "exercises");
|
|
70
|
+
const learnExercisesDir = path.join(process.cwd(), ".learn", "exercises");
|
|
71
|
+
if (fs.existsSync(exercisesDir)) {
|
|
72
|
+
this.copyDirectory(exercisesDir, path.join(buildDir, "exercises"));
|
|
73
|
+
}
|
|
74
|
+
else if (fs.existsSync(learnExercisesDir)) {
|
|
75
|
+
this.copyDirectory(learnExercisesDir, path.join(buildDir, "exercises"));
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.error("exercises directory not found in either location");
|
|
79
|
+
}
|
|
80
|
+
// Copy learn.json
|
|
81
|
+
fs.copyFileSync(learnJsonPath, path.join(buildDir, "learn.json"));
|
|
82
|
+
// Create zip file
|
|
83
|
+
const output = fs.createWriteStream(zipFilePath);
|
|
84
|
+
const archive = archiver("zip", {
|
|
85
|
+
zlib: { level: 9 },
|
|
86
|
+
});
|
|
87
|
+
output.on("close", async () => {
|
|
88
|
+
this.log(`Build completed: ${zipFilePath} (${archive.pointer()} total bytes)`);
|
|
89
|
+
// Remove build directory after zip is created
|
|
90
|
+
this.removeDirectory(buildDir);
|
|
91
|
+
console.log("Zip file saved in project root");
|
|
92
|
+
const formData = new FormData();
|
|
93
|
+
formData.append("file", fs.createReadStream(zipFilePath));
|
|
94
|
+
formData.append("config", JSON.stringify(learnJson));
|
|
95
|
+
try {
|
|
96
|
+
const res = await axios_1.default.post(uploadZipEndpont, formData, {
|
|
97
|
+
headers: Object.assign(Object.assign({}, formData.getHeaders()), { Authorization: `Token ${rigoToken}` }),
|
|
98
|
+
});
|
|
99
|
+
console.log(res.data);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
103
|
+
if (error.response && error.response.status === 403) {
|
|
104
|
+
console.error("Error 403:", error.response.data.error);
|
|
105
|
+
}
|
|
106
|
+
else if (error.response && error.response.status === 400) {
|
|
107
|
+
console.error(error.response.data.error);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.error("Error uploading file:", error.message);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.error("Error uploading file:", error);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
archive.on("error", (err) => {
|
|
119
|
+
throw err;
|
|
120
|
+
});
|
|
121
|
+
archive.pipe(output);
|
|
122
|
+
archive.directory(buildDir, false);
|
|
123
|
+
await archive.finalize();
|
|
124
|
+
}
|
|
125
|
+
copyDirectory(src, dest) {
|
|
126
|
+
if (!fs.existsSync(dest)) {
|
|
127
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
128
|
+
}
|
|
129
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
130
|
+
for (const entry of entries) {
|
|
131
|
+
const srcPath = path.join(src, entry.name);
|
|
132
|
+
const destPath = path.join(dest, entry.name);
|
|
133
|
+
if (entry.isDirectory()) {
|
|
134
|
+
this.copyDirectory(srcPath, destPath);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
fs.copyFileSync(srcPath, destPath);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
removeDirectory(dir) {
|
|
142
|
+
if (fs.existsSync(dir)) {
|
|
143
|
+
fs.readdirSync(dir).forEach((file) => {
|
|
144
|
+
const currentPath = path.join(dir, file);
|
|
145
|
+
if (fs.lstatSync(currentPath).isDirectory()) {
|
|
146
|
+
this.removeDirectory(currentPath);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
fs.unlinkSync(currentPath);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
fs.rmdirSync(dir);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
BuildCommand.description = "Builds the project by copying necessary files and directories into a zip file";
|
|
157
|
+
BuildCommand.flags = {
|
|
158
|
+
help: command_1.flags.help({ char: "h" }),
|
|
159
|
+
};
|
|
160
|
+
exports.default = BuildCommand;
|
package/lib/commands/start.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
-
export default class StartCommand extends SessionCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static flags: any;
|
|
5
|
-
init(): Promise<void>;
|
|
6
|
-
run(): Promise<void>;
|
|
7
|
-
}
|
|
1
|
+
import SessionCommand from "../utils/SessionCommand";
|
|
2
|
+
export default class StartCommand extends SessionCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: any;
|
|
5
|
+
init(): Promise<void>;
|
|
6
|
+
run(): Promise<void>;
|
|
7
|
+
}
|