canvaslms-cli 1.6.0 → 1.6.3
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/CHANGELOG.md +210 -186
- package/README.md +131 -129
- package/dist/commands/announcements.d.ts +2 -2
- package/dist/commands/announcements.d.ts.map +1 -1
- package/dist/commands/announcements.js +43 -124
- package/dist/commands/announcements.js.map +1 -1
- package/dist/commands/api.d.ts +1 -1
- package/dist/commands/api.d.ts.map +1 -1
- package/dist/commands/api.js +1 -1
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/assignments.d.ts +2 -2
- package/dist/commands/assignments.d.ts.map +1 -1
- package/dist/commands/assignments.js +40 -128
- package/dist/commands/assignments.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +102 -85
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/grades.d.ts +2 -2
- package/dist/commands/grades.d.ts.map +1 -1
- package/dist/commands/grades.js +296 -178
- package/dist/commands/grades.js.map +1 -1
- package/dist/commands/list.d.ts +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +26 -46
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +57 -32
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/submit.d.ts +2 -2
- package/dist/commands/submit.d.ts.map +1 -1
- package/dist/commands/submit.js +110 -165
- package/dist/commands/submit.js.map +1 -1
- package/dist/index.d.ts +14 -14
- package/dist/index.js +14 -14
- package/dist/lib/api-client.d.ts +3 -0
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +31 -16
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/config-validator.d.ts.map +1 -1
- package/dist/lib/config-validator.js +12 -12
- package/dist/lib/config-validator.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +16 -14
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/display.d.ts +84 -0
- package/dist/lib/display.d.ts.map +1 -0
- package/dist/lib/display.js +603 -0
- package/dist/lib/display.js.map +1 -0
- package/dist/lib/file-upload.d.ts.map +1 -1
- package/dist/lib/file-upload.js +17 -17
- package/dist/lib/file-upload.js.map +1 -1
- package/dist/lib/interactive.d.ts +1 -1
- package/dist/lib/interactive.d.ts.map +1 -1
- package/dist/lib/interactive.js +200 -143
- package/dist/lib/interactive.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +62 -62
- package/dist/src/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/package.json +9 -4
- package/dist/commands/coursenames.d.ts +0 -15
- package/dist/commands/coursenames.d.ts.map +0 -1
- package/dist/commands/coursenames.js +0 -150
- package/dist/commands/coursenames.js.map +0 -1
- package/dist/lib/course-utils.d.ts +0 -6
- package/dist/lib/course-utils.d.ts.map +0 -1
- package/dist/lib/course-utils.js +0 -17
- package/dist/lib/course-utils.js.map +0 -1
package/dist/lib/api-client.js
CHANGED
|
@@ -1,35 +1,50 @@
|
|
|
1
|
-
import axios from
|
|
2
|
-
import fs from
|
|
3
|
-
import { getInstanceConfig } from
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { getInstanceConfig } from "./config.js";
|
|
4
|
+
export async function getCanvasCourse(courseName) {
|
|
5
|
+
const courses = await getCanvasCourses(true);
|
|
6
|
+
return courses.find(c => c.name.toLowerCase().includes(courseName.toLowerCase()));
|
|
7
|
+
}
|
|
8
|
+
export async function getCanvasCourses(getAllCourse) {
|
|
9
|
+
const queryParams = [
|
|
10
|
+
"enrollment_state=active",
|
|
11
|
+
"per_page=100",
|
|
12
|
+
"include[]=term",
|
|
13
|
+
"include[]=favorites",
|
|
14
|
+
];
|
|
15
|
+
const courses = await makeCanvasRequest("get", "courses", queryParams);
|
|
16
|
+
return getAllCourse ? courses : courses.filter((c) => c.is_favorite);
|
|
17
|
+
}
|
|
4
18
|
export async function makeCanvasRequest(method, endpoint, queryParams = [], requestBody = null) {
|
|
5
19
|
const instanceConfig = getInstanceConfig();
|
|
6
20
|
const baseUrl = `https://${instanceConfig.domain}/api/v1`;
|
|
7
|
-
const url = `${baseUrl}/${endpoint.replace(/^\//,
|
|
21
|
+
const url = `${baseUrl}/${endpoint.replace(/^\//, "")}`;
|
|
8
22
|
const config = {
|
|
9
23
|
method: method.toLowerCase(),
|
|
10
24
|
url: url,
|
|
11
25
|
headers: {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
26
|
+
Authorization: `Bearer ${instanceConfig.token}`,
|
|
27
|
+
"Content-Type": "application/json",
|
|
28
|
+
},
|
|
15
29
|
};
|
|
16
30
|
if (queryParams.length > 0) {
|
|
17
31
|
const params = new URLSearchParams();
|
|
18
|
-
queryParams.forEach(param => {
|
|
19
|
-
const parts = param.split(
|
|
32
|
+
queryParams.forEach((param) => {
|
|
33
|
+
const parts = param.split("=", 2);
|
|
20
34
|
const key = parts[0];
|
|
21
|
-
const value = parts[1] ??
|
|
35
|
+
const value = parts[1] ?? "";
|
|
22
36
|
if (key) {
|
|
23
37
|
params.append(key, value);
|
|
24
38
|
}
|
|
25
39
|
});
|
|
26
40
|
config.params = params;
|
|
27
41
|
}
|
|
28
|
-
if (requestBody &&
|
|
29
|
-
|
|
42
|
+
if (requestBody &&
|
|
43
|
+
(method.toLowerCase() === "post" || method.toLowerCase() === "put")) {
|
|
44
|
+
if (requestBody.startsWith("@")) {
|
|
30
45
|
const filename = requestBody.substring(1);
|
|
31
46
|
try {
|
|
32
|
-
config.data = JSON.parse(fs.readFileSync(filename,
|
|
47
|
+
config.data = JSON.parse(fs.readFileSync(filename, "utf8"));
|
|
33
48
|
}
|
|
34
49
|
catch (error) {
|
|
35
50
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -50,11 +65,11 @@ export async function makeCanvasRequest(method, endpoint, queryParams = [], requ
|
|
|
50
65
|
}
|
|
51
66
|
try {
|
|
52
67
|
const response = await axios(config);
|
|
53
|
-
if (instanceConfig.domain ===
|
|
54
|
-
endpoint ===
|
|
68
|
+
if (instanceConfig.domain === "swinburne.instructure.com" &&
|
|
69
|
+
endpoint === "courses" &&
|
|
55
70
|
Array.isArray(response.data)) {
|
|
56
71
|
const data = response.data;
|
|
57
|
-
const filteredData = data.filter((item) => !item.name || !item.name.startsWith(
|
|
72
|
+
const filteredData = data.filter((item) => !item.name || !item.name.startsWith("ORG-"));
|
|
58
73
|
return filteredData;
|
|
59
74
|
}
|
|
60
75
|
return response.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../lib/config-validator.ts"],"names":[],"mappings":"AAWA,iBAAe,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../lib/config-validator.ts"],"names":[],"mappings":"AAWA,iBAAe,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CA8C9C;AAKD,wBAAgB,aAAa,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAKzE;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { configExists, readConfig } from
|
|
2
|
-
import { createReadlineInterface, askQuestion } from
|
|
1
|
+
import { configExists, readConfig } from "./config.js";
|
|
2
|
+
import { createReadlineInterface, askQuestion } from "./interactive.js";
|
|
3
3
|
async function ensureConfig() {
|
|
4
4
|
if (!configExists()) {
|
|
5
|
-
console.log(
|
|
6
|
-
console.log(
|
|
5
|
+
console.log("No Canvas configuration found!");
|
|
6
|
+
console.log("\nLet's set up your Canvas CLI configuration...\n");
|
|
7
7
|
const rl = createReadlineInterface();
|
|
8
|
-
const setup = await askQuestion(rl,
|
|
8
|
+
const setup = await askQuestion(rl, "Would you like to set up your configuration now? (Y/n): ");
|
|
9
9
|
rl.close();
|
|
10
|
-
if (setup.toLowerCase() ===
|
|
11
|
-
console.log(
|
|
12
|
-
console.log(
|
|
10
|
+
if (setup.toLowerCase() === "n" || setup.toLowerCase() === "no") {
|
|
11
|
+
console.log("\nTo set up later, run: canvas config setup");
|
|
12
|
+
console.log("Or set environment variables: CANVAS_DOMAIN and CANVAS_API_TOKEN");
|
|
13
13
|
process.exit(1);
|
|
14
14
|
}
|
|
15
|
-
const { setupConfig } = await import(
|
|
15
|
+
const { setupConfig } = await import("../commands/config.js");
|
|
16
16
|
await setupConfig();
|
|
17
17
|
if (!configExists()) {
|
|
18
18
|
console.log('\nConfiguration setup was not completed. Please run "canvas config setup" to try again.');
|
|
19
19
|
process.exit(1);
|
|
20
20
|
}
|
|
21
|
-
console.log(
|
|
21
|
+
console.log("\nConfiguration complete! You can now use Canvas CLI commands.");
|
|
22
22
|
return true;
|
|
23
23
|
}
|
|
24
24
|
const config = readConfig();
|
|
@@ -29,10 +29,10 @@ async function ensureConfig() {
|
|
|
29
29
|
return true;
|
|
30
30
|
}
|
|
31
31
|
export function requireConfig(fn) {
|
|
32
|
-
return
|
|
32
|
+
return async function (...args) {
|
|
33
33
|
await ensureConfig();
|
|
34
34
|
return fn(...args);
|
|
35
|
-
}
|
|
35
|
+
};
|
|
36
36
|
}
|
|
37
37
|
export { ensureConfig };
|
|
38
38
|
//# sourceMappingURL=config-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../lib/config-validator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMxE,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../lib/config-validator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMxE,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAEjE,MAAM,EAAE,GAAG,uBAAuB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,EAAE,EACF,0DAA0D,CAC3D,CAAC;QACF,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CACT,kEAAkE,CACnE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC9D,MAAM,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,yFAAyF,CAC1F,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,gEAAgE,CACjE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,MAAM,MAAM,GAAwB,UAAU,EAAE,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CACT,+EAA+E,CAChF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,MAAM,UAAU,aAAa,CAAoC,EAAK;IACpE,OAAO,KAAK,WAAW,GAAG,IAAmB;QAC3C,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrB,CAAM,CAAC;AACT,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CanvasConfig, InstanceConfig } from
|
|
1
|
+
import type { CanvasConfig, InstanceConfig } from "../types/index.js";
|
|
2
2
|
export declare function getDefaultConfig(): CanvasConfig;
|
|
3
3
|
export declare function loadConfig(): InstanceConfig;
|
|
4
4
|
export declare function saveConfig(domain: string, token: string): boolean;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMtE,wBAAgB,gBAAgB,IAAI,YAAY,CAO/C;AAGD,wBAAgB,UAAU,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMtE,wBAAgB,gBAAgB,IAAI,YAAY,CAO/C;AAGD,wBAAgB,UAAU,IAAI,cAAc,CA0B3C;AAGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAejE;AAGD,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAGD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAGD,wBAAgB,YAAY,IAAI,OAAO,CAYtC;AAGD,wBAAgB,UAAU,IAAI,YAAY,GAAG,IAAI,CAWhD;AAKD,wBAAgB,iBAAiB,IAAI,cAAc,CAElD"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import fs from
|
|
2
|
-
import path from
|
|
3
|
-
import os from
|
|
4
|
-
const CONFIG_FILE = path.join(os.homedir(),
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
const CONFIG_FILE = path.join(os.homedir(), ".canvaslms-cli-config.json");
|
|
5
5
|
export function getDefaultConfig() {
|
|
6
6
|
return {
|
|
7
|
-
domain:
|
|
8
|
-
token:
|
|
7
|
+
domain: "",
|
|
8
|
+
token: "",
|
|
9
9
|
createdAt: new Date().toISOString(),
|
|
10
|
-
lastUpdated: new Date().toISOString()
|
|
10
|
+
lastUpdated: new Date().toISOString(),
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
export function loadConfig() {
|
|
14
14
|
try {
|
|
15
15
|
if (fs.existsSync(CONFIG_FILE)) {
|
|
16
|
-
const configData = JSON.parse(fs.readFileSync(CONFIG_FILE,
|
|
16
|
+
const configData = JSON.parse(fs.readFileSync(CONFIG_FILE, "utf8"));
|
|
17
17
|
if (configData.domain && configData.token) {
|
|
18
|
-
const domain = configData.domain
|
|
18
|
+
const domain = configData.domain
|
|
19
|
+
.replace(/^https?:\/\//, "")
|
|
20
|
+
.replace(/\/$/, "");
|
|
19
21
|
return { domain, token: configData.token };
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
|
-
console.error(
|
|
24
|
+
console.error("No Canvas configuration found!");
|
|
23
25
|
console.error('\nPlease run "canvas config setup" to configure your Canvas credentials.');
|
|
24
26
|
process.exit(1);
|
|
25
27
|
}
|
|
@@ -32,12 +34,12 @@ export function loadConfig() {
|
|
|
32
34
|
export function saveConfig(domain, token) {
|
|
33
35
|
try {
|
|
34
36
|
const config = {
|
|
35
|
-
domain: domain.replace(/^https?:\/\//,
|
|
37
|
+
domain: domain.replace(/^https?:\/\//, "").replace(/\/$/, ""),
|
|
36
38
|
token,
|
|
37
39
|
createdAt: new Date().toISOString(),
|
|
38
|
-
lastUpdated: new Date().toISOString()
|
|
40
|
+
lastUpdated: new Date().toISOString(),
|
|
39
41
|
};
|
|
40
|
-
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2),
|
|
42
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf8");
|
|
41
43
|
return true;
|
|
42
44
|
}
|
|
43
45
|
catch (error) {
|
|
@@ -69,7 +71,7 @@ export function deleteConfig() {
|
|
|
69
71
|
export function readConfig() {
|
|
70
72
|
try {
|
|
71
73
|
if (fs.existsSync(CONFIG_FILE)) {
|
|
72
|
-
return JSON.parse(fs.readFileSync(CONFIG_FILE,
|
|
74
|
+
return JSON.parse(fs.readFileSync(CONFIG_FILE, "utf8"));
|
|
73
75
|
}
|
|
74
76
|
return null;
|
|
75
77
|
}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAG1E,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QAEH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAiB,IAAI,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { CanvasCourse, CanvasAssignment, CanvasAnnouncement } from "../types/index.js";
|
|
2
|
+
import { createReadlineInterface } from "./interactive.js";
|
|
3
|
+
export interface ColumnDefinition {
|
|
4
|
+
key: string;
|
|
5
|
+
header: string;
|
|
6
|
+
width?: number;
|
|
7
|
+
minWidth?: number;
|
|
8
|
+
maxWidth?: number;
|
|
9
|
+
flex?: number;
|
|
10
|
+
align?: "left" | "right" | "center";
|
|
11
|
+
color?: (value: string, row: Record<string, any>) => string;
|
|
12
|
+
}
|
|
13
|
+
export interface TableOptions {
|
|
14
|
+
title?: string;
|
|
15
|
+
showRowNumbers?: boolean;
|
|
16
|
+
rowNumberHeader?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function pad(str: string, len: number, align?: "left" | "right" | "center"): string;
|
|
19
|
+
export declare function truncate(str: string, maxLen: number): string;
|
|
20
|
+
export declare class Table {
|
|
21
|
+
private columns;
|
|
22
|
+
private data;
|
|
23
|
+
private options;
|
|
24
|
+
private rowNumWidth;
|
|
25
|
+
private lastLineCount;
|
|
26
|
+
private lastTableWidth;
|
|
27
|
+
private resizeHandler;
|
|
28
|
+
private isWatching;
|
|
29
|
+
constructor(columns: ColumnDefinition[], options?: TableOptions);
|
|
30
|
+
addRow(row: Record<string, any>): this;
|
|
31
|
+
addRows(rows: Record<string, any>[]): this;
|
|
32
|
+
render(): void;
|
|
33
|
+
renderWithResize(): void;
|
|
34
|
+
private startWatching;
|
|
35
|
+
stopWatching(): void;
|
|
36
|
+
private clearTable;
|
|
37
|
+
private renderTable;
|
|
38
|
+
private renderTopBorder;
|
|
39
|
+
private renderHeader;
|
|
40
|
+
private renderHeaderSeparator;
|
|
41
|
+
private renderRow;
|
|
42
|
+
private renderBottomBorder;
|
|
43
|
+
}
|
|
44
|
+
export interface CoursePickerOptions {
|
|
45
|
+
showAll?: boolean;
|
|
46
|
+
title?: string;
|
|
47
|
+
prompt?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface CoursePickerResult {
|
|
50
|
+
course: CanvasCourse;
|
|
51
|
+
rl: ReturnType<typeof createReadlineInterface>;
|
|
52
|
+
}
|
|
53
|
+
export declare function displayCourses(courses: CanvasCourse[], options?: {
|
|
54
|
+
showId?: boolean;
|
|
55
|
+
}): void;
|
|
56
|
+
export declare function pickCourse(options?: CoursePickerOptions): Promise<CoursePickerResult | null>;
|
|
57
|
+
export interface AssignmentDisplayOptions {
|
|
58
|
+
showId?: boolean;
|
|
59
|
+
showGrade?: boolean;
|
|
60
|
+
showDueDate?: boolean;
|
|
61
|
+
showStatus?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export declare function formatGrade(submission: any, pointsPossible: number): {
|
|
64
|
+
text: string;
|
|
65
|
+
color: (s: string) => string;
|
|
66
|
+
};
|
|
67
|
+
export declare function formatDueDate(dueAt: string | null): string;
|
|
68
|
+
export declare function displayAssignments(assignments: CanvasAssignment[], options?: AssignmentDisplayOptions): void;
|
|
69
|
+
export declare function displaySubmitAssignments(assignments: CanvasAssignment[]): Table;
|
|
70
|
+
export declare function displayAnnouncements(announcements: CanvasAnnouncement[]): Table;
|
|
71
|
+
export declare function printSeparator(char?: string, length?: number): void;
|
|
72
|
+
export declare function printHeader(title: string): void;
|
|
73
|
+
export declare function printSuccess(message: string): void;
|
|
74
|
+
export declare function printError(message: string): void;
|
|
75
|
+
export declare function printInfo(message: string): void;
|
|
76
|
+
export declare function printWarning(message: string): void;
|
|
77
|
+
export interface AnnouncementDetail {
|
|
78
|
+
title: string;
|
|
79
|
+
postedAt: string | null;
|
|
80
|
+
author: string;
|
|
81
|
+
message: string;
|
|
82
|
+
}
|
|
83
|
+
export declare function displayAnnouncementDetail(announcement: AnnouncementDetail): void;
|
|
84
|
+
//# sourceMappingURL=display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../lib/display.ts"],"names":[],"mappings":"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"}
|