@mo7yw4ng/openape 1.0.1 → 1.0.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/README.md +8 -5
- package/esm/_dnt.polyfills.d.ts +83 -6
- package/esm/_dnt.polyfills.d.ts.map +1 -0
- package/esm/_dnt.polyfills.js +127 -1
- package/esm/_dnt.shims.d.ts +1 -0
- package/esm/_dnt.shims.d.ts.map +1 -0
- package/esm/deno.d.ts +2 -0
- package/esm/deno.d.ts.map +1 -0
- package/esm/deno.js +2 -1
- package/esm/src/commands/announcements.d.ts +3 -0
- package/esm/src/commands/announcements.d.ts.map +1 -0
- package/esm/src/commands/announcements.js +135 -0
- package/esm/src/commands/auth.d.ts +3 -0
- package/esm/src/commands/auth.d.ts.map +1 -0
- package/esm/src/commands/auth.js +260 -0
- package/esm/src/commands/calendar.d.ts +3 -0
- package/esm/src/commands/calendar.d.ts.map +1 -0
- package/esm/src/commands/calendar.js +180 -0
- package/esm/src/commands/courses.d.ts +3 -0
- package/esm/src/commands/courses.d.ts.map +1 -0
- package/esm/src/commands/courses.js +348 -0
- package/esm/src/commands/forums.d.ts +3 -0
- package/esm/src/commands/forums.d.ts.map +1 -0
- package/esm/src/commands/forums.js +226 -0
- package/esm/src/commands/grades.d.ts +3 -0
- package/esm/src/commands/grades.d.ts.map +1 -0
- package/esm/src/commands/grades.js +121 -0
- package/esm/src/commands/materials.d.ts +3 -0
- package/esm/src/commands/materials.d.ts.map +1 -0
- package/esm/src/commands/materials.js +522 -0
- package/esm/src/commands/quizzes.d.ts +3 -0
- package/esm/src/commands/quizzes.d.ts.map +1 -0
- package/esm/src/commands/quizzes.js +160 -0
- package/esm/src/commands/skills.d.ts +3 -0
- package/esm/src/commands/skills.d.ts.map +1 -0
- package/esm/src/commands/skills.js +110 -0
- package/esm/src/commands/videos.d.ts +3 -0
- package/esm/src/commands/videos.d.ts.map +1 -0
- package/esm/src/commands/videos.js +335 -0
- package/esm/src/index.d.ts +27 -0
- package/esm/src/index.d.ts.map +1 -0
- package/esm/src/index.js +149 -0
- package/esm/src/lib/auth.d.ts +25 -0
- package/esm/src/lib/auth.d.ts.map +1 -0
- package/esm/src/lib/auth.js +194 -0
- package/esm/src/lib/config.d.ts +6 -0
- package/esm/src/lib/config.d.ts.map +1 -0
- package/esm/src/lib/config.js +36 -0
- package/esm/src/lib/logger.d.ts +3 -0
- package/esm/src/lib/logger.d.ts.map +1 -0
- package/esm/src/lib/logger.js +24 -0
- package/esm/src/lib/moodle.d.ts +251 -0
- package/esm/src/lib/moodle.d.ts.map +1 -0
- package/esm/src/lib/moodle.js +833 -0
- package/esm/src/lib/session.d.ts +8 -0
- package/esm/src/lib/session.d.ts.map +1 -0
- package/esm/src/lib/session.js +42 -0
- package/esm/src/lib/token.d.ts +38 -0
- package/esm/src/lib/token.d.ts.map +1 -0
- package/esm/src/lib/token.js +178 -0
- package/esm/src/lib/types.d.ts +272 -0
- package/esm/src/lib/types.d.ts.map +1 -0
- package/esm/src/lib/types.js +1 -0
- package/esm/src/lib/utils.d.ts +37 -0
- package/esm/src/lib/utils.d.ts.map +1 -0
- package/esm/src/lib/utils.js +82 -0
- package/package.json +4 -4
- package/script/_dnt.polyfills.d.ts +83 -6
- package/script/_dnt.polyfills.d.ts.map +1 -0
- package/script/_dnt.polyfills.js +128 -0
- package/script/_dnt.shims.d.ts +1 -0
- package/script/_dnt.shims.d.ts.map +1 -0
- package/script/deno.d.ts +2 -0
- package/script/deno.d.ts.map +1 -0
- package/script/deno.js +2 -1
- package/script/src/commands/announcements.d.ts +1 -0
- package/script/src/commands/announcements.d.ts.map +1 -0
- package/script/src/commands/announcements.js +75 -222
- package/script/src/commands/auth.d.ts +2 -1
- package/script/src/commands/auth.d.ts.map +1 -0
- package/script/src/commands/auth.js +52 -24
- package/script/src/commands/calendar.d.ts +1 -0
- package/script/src/commands/calendar.d.ts.map +1 -0
- package/script/src/commands/calendar.js +112 -301
- package/script/src/commands/courses.d.ts +1 -0
- package/script/src/commands/courses.d.ts.map +1 -0
- package/script/src/commands/courses.js +43 -173
- package/script/src/commands/forums.d.ts +1 -0
- package/script/src/commands/forums.d.ts.map +1 -0
- package/script/src/commands/forums.js +145 -316
- package/script/src/commands/grades.d.ts +1 -0
- package/script/src/commands/grades.d.ts.map +1 -0
- package/script/src/commands/grades.js +62 -194
- package/script/src/commands/materials.d.ts +1 -0
- package/script/src/commands/materials.d.ts.map +1 -0
- package/script/src/commands/materials.js +283 -178
- package/script/src/commands/quizzes.d.ts +1 -0
- package/script/src/commands/quizzes.d.ts.map +1 -0
- package/script/src/commands/quizzes.js +40 -102
- package/script/src/commands/skills.d.ts +1 -0
- package/script/src/commands/skills.d.ts.map +1 -0
- package/script/src/commands/skills.js +17 -18
- package/script/src/commands/videos.d.ts +1 -0
- package/script/src/commands/videos.d.ts.map +1 -0
- package/script/src/commands/videos.js +127 -120
- package/script/src/index.d.ts +1 -0
- package/script/src/index.d.ts.map +1 -0
- package/script/src/index.js +5 -5
- package/script/src/lib/auth.d.ts +1 -0
- package/script/src/lib/auth.d.ts.map +1 -0
- package/script/src/lib/auth.js +9 -10
- package/script/src/lib/config.d.ts +1 -0
- package/script/src/lib/config.d.ts.map +1 -0
- package/script/src/lib/config.js +6 -7
- package/script/src/lib/logger.d.ts +1 -0
- package/script/src/lib/logger.d.ts.map +1 -0
- package/script/src/lib/logger.js +1 -2
- package/script/src/lib/moodle.d.ts +72 -55
- package/script/src/lib/moodle.d.ts.map +1 -0
- package/script/src/lib/moodle.js +275 -350
- package/script/src/lib/session.d.ts +1 -0
- package/script/src/lib/session.d.ts.map +1 -0
- package/script/src/lib/session.js +3 -29
- package/script/src/lib/token.d.ts +16 -5
- package/script/src/lib/token.d.ts.map +1 -0
- package/script/src/lib/token.js +71 -36
- package/script/src/lib/types.d.ts +11 -0
- package/script/src/lib/types.d.ts.map +1 -0
- package/script/src/lib/utils.d.ts +32 -0
- package/script/src/lib/utils.d.ts.map +1 -0
- package/script/src/lib/utils.js +93 -13
- package/skills/openape/SKILL.md +6 -26
|
@@ -3,17 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.registerGradesCommand =
|
|
6
|
+
exports.registerGradesCommand = registerGradesCommand;
|
|
7
7
|
const utils_js_1 = require("../lib/utils.js");
|
|
8
8
|
const moodle_js_1 = require("../lib/moodle.js");
|
|
9
9
|
const logger_js_1 = require("../lib/logger.js");
|
|
10
|
-
const auth_js_1 = require("../lib/auth.js");
|
|
11
|
-
const session_js_1 = require("../lib/session.js");
|
|
12
|
-
const auth_js_2 = require("../lib/auth.js");
|
|
13
|
-
const index_js_1 = require("../index.js");
|
|
14
10
|
const token_js_1 = require("../lib/token.js");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
11
|
+
const index_js_1 = require("../index.js");
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
17
14
|
function registerGradesCommand(program) {
|
|
18
15
|
const gradesCmd = program.command("grades");
|
|
19
16
|
gradesCmd.description("Grade operations");
|
|
@@ -28,14 +25,17 @@ function registerGradesCommand(program) {
|
|
|
28
25
|
const silent = outputFormat === "json" && !opts.verbose;
|
|
29
26
|
const log = (0, logger_js_1.createLogger)(opts.verbose, silent);
|
|
30
27
|
const baseDir = (0, utils_js_1.getBaseDir)();
|
|
31
|
-
const sessionPath =
|
|
28
|
+
const sessionPath = node_path_1.default.resolve(baseDir, ".auth", "storage-state.json");
|
|
32
29
|
// Check if session exists
|
|
33
|
-
if (!
|
|
30
|
+
if (!node_fs_1.default.existsSync(sessionPath)) {
|
|
31
|
+
log.error("未找到登入 session。請先執行 'openape auth login' 進行登入。");
|
|
32
|
+
log.info(`Session 預期位置: ${sessionPath}`);
|
|
34
33
|
return null;
|
|
35
34
|
}
|
|
36
35
|
// Try to load WS token
|
|
37
36
|
const wsToken = (0, token_js_1.loadWsToken)(sessionPath);
|
|
38
37
|
if (!wsToken) {
|
|
38
|
+
log.error("未找到 WS token。請先執行 'openape auth login' 進行登入。");
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
41
41
|
return {
|
|
@@ -46,128 +46,43 @@ function registerGradesCommand(program) {
|
|
|
46
46
|
},
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
// Helper function to create session context
|
|
50
|
-
async function createSessionContext(options, command) {
|
|
51
|
-
// Get global options if command is provided (for --verbose, --silent flags)
|
|
52
|
-
const opts = command?.optsWithGlobals ? command.optsWithGlobals() : options;
|
|
53
|
-
// Auto-enable silent mode for JSON output (unless --verbose is also set)
|
|
54
|
-
const outputFormat = getOutputFormat(command || { optsWithGlobals: () => ({ output: "json" }) });
|
|
55
|
-
const silent = outputFormat === "json" && !opts.verbose;
|
|
56
|
-
const log = (0, logger_js_1.createLogger)(opts.verbose, silent);
|
|
57
|
-
// Determine session path
|
|
58
|
-
const baseDir = (0, utils_js_1.getBaseDir)();
|
|
59
|
-
const sessionPath = path_1.default.resolve(baseDir, ".auth", "storage-state.json");
|
|
60
|
-
// Check if session exists
|
|
61
|
-
if (!fs_1.default.existsSync(sessionPath)) {
|
|
62
|
-
log.error("未找到登入 session。請先執行 'openape auth login' 進行登入。");
|
|
63
|
-
log.info(`Session 預期位置: ${sessionPath}`);
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
// Create minimal config
|
|
67
|
-
const config = {
|
|
68
|
-
username: "",
|
|
69
|
-
password: "",
|
|
70
|
-
courseUrl: "",
|
|
71
|
-
moodleBaseUrl: "https://ilearning.cycu.edu.tw",
|
|
72
|
-
headless: !options.headed,
|
|
73
|
-
slowMo: 0,
|
|
74
|
-
authStatePath: sessionPath,
|
|
75
|
-
ollamaBaseUrl: "",
|
|
76
|
-
};
|
|
77
|
-
log.info("啟動瀏覽器...");
|
|
78
|
-
const { browser, context, page } = await (0, auth_js_1.launchAuthenticated)(config, log);
|
|
79
|
-
try {
|
|
80
|
-
const session = await (0, session_js_1.extractSessionInfo)(page, config, log);
|
|
81
|
-
return { log, page, session, browser, context };
|
|
82
|
-
}
|
|
83
|
-
catch (err) {
|
|
84
|
-
await context.close();
|
|
85
|
-
await browser.close();
|
|
86
|
-
throw err;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
49
|
gradesCmd
|
|
90
50
|
.command("summary")
|
|
91
51
|
.description("Show grade summary across all courses")
|
|
92
52
|
.option("--output <format>", "Output format: json|csv|table|silent")
|
|
93
53
|
.action(async (options, command) => {
|
|
94
54
|
const output = getOutputFormat(command);
|
|
95
|
-
// Try pure API mode (no browser, fast!)
|
|
96
55
|
const apiContext = await createApiContext(options, command);
|
|
97
|
-
if (apiContext) {
|
|
98
|
-
try {
|
|
99
|
-
const courses = await (0, moodle_js_1.getEnrolledCoursesApi)(apiContext.session);
|
|
100
|
-
const gradeSummaries = [];
|
|
101
|
-
for (const course of courses) {
|
|
102
|
-
const grades = await (0, moodle_js_1.getCourseGradesApi)(apiContext.session, course.id);
|
|
103
|
-
gradeSummaries.push({
|
|
104
|
-
courseId: course.id,
|
|
105
|
-
courseName: course.fullname,
|
|
106
|
-
grade: grades.grade,
|
|
107
|
-
gradeFormatted: grades.gradeFormatted,
|
|
108
|
-
rank: grades.rank,
|
|
109
|
-
totalUsers: grades.totalUsers,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
// Calculate overall statistics
|
|
113
|
-
const gradedCourses = gradeSummaries.filter(g => g.grade !== undefined && g.grade !== null && g.grade !== "-");
|
|
114
|
-
const averageRank = gradeSummaries
|
|
115
|
-
.filter(g => g.rank !== undefined && g.rank !== null)
|
|
116
|
-
.reduce((sum, g) => sum + (g.rank || 0), 0) /
|
|
117
|
-
(gradeSummaries.filter(g => g.rank !== undefined && g.rank !== null).length || 1);
|
|
118
|
-
const summaryData = {
|
|
119
|
-
total_courses: courses.length,
|
|
120
|
-
graded_courses: gradedCourses.length,
|
|
121
|
-
average_rank: averageRank.toFixed(1),
|
|
122
|
-
grades: gradeSummaries,
|
|
123
|
-
};
|
|
124
|
-
(0, index_js_1.formatAndOutput)(summaryData, output, apiContext.log);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
// API failed, fall through to browser mode
|
|
129
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
130
|
-
console.error(`// API mode failed: ${msg}, trying browser mode...`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// Fallback to browser mode
|
|
134
|
-
const context = await createSessionContext(options, command);
|
|
135
|
-
if (!context) {
|
|
56
|
+
if (!apiContext) {
|
|
136
57
|
process.exitCode = 1;
|
|
137
58
|
return;
|
|
138
59
|
}
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
totalUsers: grades.totalUsers,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
// Calculate overall statistics
|
|
155
|
-
const gradedCourses = gradeSummaries.filter(g => g.grade !== undefined && g.grade !== null && g.grade !== "-");
|
|
156
|
-
const averageRank = gradeSummaries
|
|
157
|
-
.filter(g => g.rank !== undefined && g.rank !== null)
|
|
158
|
-
.reduce((sum, g) => sum + (g.rank || 0), 0) /
|
|
159
|
-
(gradeSummaries.filter(g => g.rank !== undefined && g.rank !== null).length || 1);
|
|
160
|
-
const summaryData = {
|
|
161
|
-
total_courses: courses.length,
|
|
162
|
-
graded_courses: gradedCourses.length,
|
|
163
|
-
average_rank: averageRank.toFixed(1),
|
|
164
|
-
grades: gradeSummaries,
|
|
165
|
-
};
|
|
166
|
-
(0, index_js_1.formatAndOutput)(summaryData, output, log);
|
|
167
|
-
}
|
|
168
|
-
finally {
|
|
169
|
-
await (0, auth_js_2.closeBrowserSafely)(browser, browserContext);
|
|
60
|
+
const courses = await (0, moodle_js_1.getEnrolledCoursesApi)(apiContext.session);
|
|
61
|
+
const gradeSummaries = [];
|
|
62
|
+
for (const course of courses) {
|
|
63
|
+
const grades = await (0, moodle_js_1.getCourseGradesApi)(apiContext.session, course.id);
|
|
64
|
+
gradeSummaries.push({
|
|
65
|
+
courseId: course.id,
|
|
66
|
+
courseName: course.fullname,
|
|
67
|
+
grade: grades.grade,
|
|
68
|
+
gradeFormatted: grades.gradeFormatted,
|
|
69
|
+
rank: grades.rank,
|
|
70
|
+
totalUsers: grades.totalUsers,
|
|
71
|
+
});
|
|
170
72
|
}
|
|
73
|
+
// Calculate overall statistics
|
|
74
|
+
const gradedCourses = gradeSummaries.filter(g => g.grade !== undefined && g.grade !== null && g.grade !== "-");
|
|
75
|
+
const averageRank = gradeSummaries
|
|
76
|
+
.filter(g => g.rank !== undefined && g.rank !== null)
|
|
77
|
+
.reduce((sum, g) => sum + (g.rank || 0), 0) /
|
|
78
|
+
(gradeSummaries.filter(g => g.rank !== undefined && g.rank !== null).length || 1);
|
|
79
|
+
const summaryData = {
|
|
80
|
+
total_courses: courses.length,
|
|
81
|
+
graded_courses: gradedCourses.length,
|
|
82
|
+
average_rank: averageRank.toFixed(1),
|
|
83
|
+
grades: gradeSummaries,
|
|
84
|
+
};
|
|
85
|
+
(0, index_js_1.formatAndOutput)(summaryData, output, apiContext.log);
|
|
171
86
|
});
|
|
172
87
|
gradesCmd
|
|
173
88
|
.command("course")
|
|
@@ -176,84 +91,37 @@ function registerGradesCommand(program) {
|
|
|
176
91
|
.option("--output <format>", "Output format: json|csv|table|silent")
|
|
177
92
|
.action(async (courseId, options, command) => {
|
|
178
93
|
const output = getOutputFormat(command);
|
|
179
|
-
// Try pure API mode (no browser, fast!)
|
|
180
94
|
const apiContext = await createApiContext(options, command);
|
|
181
|
-
if (apiContext) {
|
|
182
|
-
try {
|
|
183
|
-
const courses = await (0, moodle_js_1.getEnrolledCoursesApi)(apiContext.session);
|
|
184
|
-
const course = courses.find(c => c.id === parseInt(courseId, 10));
|
|
185
|
-
if (!course) {
|
|
186
|
-
apiContext.log.error(`Course not found: ${courseId}`);
|
|
187
|
-
process.exitCode = 1;
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
const grades = await (0, moodle_js_1.getCourseGradesApi)(apiContext.session, course.id);
|
|
191
|
-
const gradeData = {
|
|
192
|
-
courseId: grades.courseId,
|
|
193
|
-
courseName: grades.courseName,
|
|
194
|
-
grade: grades.grade,
|
|
195
|
-
gradeFormatted: grades.gradeFormatted,
|
|
196
|
-
rank: grades.rank,
|
|
197
|
-
totalUsers: grades.totalUsers,
|
|
198
|
-
items: grades.items?.map(item => ({
|
|
199
|
-
name: item.name,
|
|
200
|
-
grade: item.grade,
|
|
201
|
-
gradeFormatted: item.gradeFormatted,
|
|
202
|
-
range: item.range,
|
|
203
|
-
percentage: item.percentage,
|
|
204
|
-
weight: item.weight,
|
|
205
|
-
feedback: item.feedback,
|
|
206
|
-
graded: item.graded,
|
|
207
|
-
})),
|
|
208
|
-
};
|
|
209
|
-
(0, index_js_1.formatAndOutput)(gradeData, output, apiContext.log);
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
catch (e) {
|
|
213
|
-
// API failed, fall through to browser mode
|
|
214
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
215
|
-
console.error(`// API mode failed: ${msg}, trying browser mode...`);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
// Fallback to browser mode
|
|
219
|
-
const context = await createSessionContext(options, command);
|
|
220
|
-
if (!context) {
|
|
95
|
+
if (!apiContext) {
|
|
221
96
|
process.exitCode = 1;
|
|
222
97
|
return;
|
|
223
98
|
}
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
process.exitCode = 1;
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
const grades = await (0, moodle_js_1.getCourseGrades)(page, session, course.id);
|
|
234
|
-
const gradeData = {
|
|
235
|
-
courseId: grades.courseId,
|
|
236
|
-
courseName: grades.courseName,
|
|
237
|
-
grade: grades.grade,
|
|
238
|
-
gradeFormatted: grades.gradeFormatted,
|
|
239
|
-
rank: grades.rank,
|
|
240
|
-
totalUsers: grades.totalUsers,
|
|
241
|
-
items: grades.items?.map(item => ({
|
|
242
|
-
name: item.name,
|
|
243
|
-
grade: item.grade,
|
|
244
|
-
gradeFormatted: item.gradeFormatted,
|
|
245
|
-
range: item.range,
|
|
246
|
-
percentage: item.percentage,
|
|
247
|
-
weight: item.weight,
|
|
248
|
-
feedback: item.feedback,
|
|
249
|
-
graded: item.graded,
|
|
250
|
-
})),
|
|
251
|
-
};
|
|
252
|
-
(0, index_js_1.formatAndOutput)(gradeData, output, log);
|
|
253
|
-
}
|
|
254
|
-
finally {
|
|
255
|
-
await (0, auth_js_2.closeBrowserSafely)(browser, browserContext);
|
|
99
|
+
const courses = await (0, moodle_js_1.getEnrolledCoursesApi)(apiContext.session);
|
|
100
|
+
const course = courses.find(c => c.id === parseInt(courseId, 10));
|
|
101
|
+
if (!course) {
|
|
102
|
+
apiContext.log.error(`Course not found: ${courseId}`);
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
return;
|
|
256
105
|
}
|
|
106
|
+
const grades = await (0, moodle_js_1.getCourseGradesApi)(apiContext.session, course.id);
|
|
107
|
+
const gradeData = {
|
|
108
|
+
courseId: grades.courseId,
|
|
109
|
+
courseName: grades.courseName,
|
|
110
|
+
grade: grades.grade,
|
|
111
|
+
gradeFormatted: grades.gradeFormatted,
|
|
112
|
+
rank: grades.rank,
|
|
113
|
+
totalUsers: grades.totalUsers,
|
|
114
|
+
items: grades.items?.map(item => ({
|
|
115
|
+
name: item.name,
|
|
116
|
+
grade: item.grade,
|
|
117
|
+
gradeFormatted: item.gradeFormatted,
|
|
118
|
+
range: item.range,
|
|
119
|
+
percentage: item.percentage,
|
|
120
|
+
weight: item.weight,
|
|
121
|
+
feedback: item.feedback,
|
|
122
|
+
graded: item.graded,
|
|
123
|
+
})),
|
|
124
|
+
};
|
|
125
|
+
(0, index_js_1.formatAndOutput)(gradeData, output, apiContext.log);
|
|
257
126
|
});
|
|
258
127
|
}
|
|
259
|
-
exports.registerGradesCommand = registerGradesCommand;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materials.d.ts","sourceRoot":"","sources":["../../../src/src/commands/materials.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqlB/D"}
|