@robertying/thu-learn-lib 5.0.0 → 6.0.0

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 (84) hide show
  1. package/README.md +94 -227
  2. package/lib/auth.d.ts +15 -4
  3. package/lib/auth.d.ts.map +1 -1
  4. package/lib/auth.js +65 -55
  5. package/lib/auth.js.map +1 -1
  6. package/lib/calendar.d.ts +12 -5
  7. package/lib/calendar.d.ts.map +1 -1
  8. package/lib/calendar.js +118 -20
  9. package/lib/calendar.js.map +1 -1
  10. package/lib/contents.d.ts.map +1 -1
  11. package/lib/contents.js +10 -6
  12. package/lib/contents.js.map +1 -1
  13. package/lib/courses.d.ts.map +1 -1
  14. package/lib/courses.js +15 -29
  15. package/lib/courses.js.map +1 -1
  16. package/lib/discussions.d.ts.map +1 -1
  17. package/lib/discussions.js +8 -19
  18. package/lib/discussions.js.map +1 -1
  19. package/lib/favorites.d.ts +1 -0
  20. package/lib/favorites.d.ts.map +1 -1
  21. package/lib/favorites.js +25 -60
  22. package/lib/favorites.js.map +1 -1
  23. package/lib/files.d.ts +4 -4
  24. package/lib/files.d.ts.map +1 -1
  25. package/lib/files.js +112 -134
  26. package/lib/files.js.map +1 -1
  27. package/lib/homework.d.ts +35 -5
  28. package/lib/homework.d.ts.map +1 -1
  29. package/lib/homework.js +150 -92
  30. package/lib/homework.js.map +1 -1
  31. package/lib/index.d.ts +45 -20
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +52 -17
  34. package/lib/index.js.map +1 -1
  35. package/lib/notices.d.ts +4 -4
  36. package/lib/notices.d.ts.map +1 -1
  37. package/lib/notices.js +13 -33
  38. package/lib/notices.js.map +1 -1
  39. package/lib/questionnaires.d.ts +6 -3
  40. package/lib/questionnaires.d.ts.map +1 -1
  41. package/lib/questionnaires.js +26 -24
  42. package/lib/questionnaires.js.map +1 -1
  43. package/lib/request.d.ts +64 -20
  44. package/lib/request.d.ts.map +1 -1
  45. package/lib/request.js +174 -64
  46. package/lib/request.js.map +1 -1
  47. package/lib/timetable.d.ts +26 -0
  48. package/lib/timetable.d.ts.map +1 -0
  49. package/lib/timetable.js +110 -0
  50. package/lib/timetable.js.map +1 -0
  51. package/lib/types.d.ts +117 -76
  52. package/lib/types.d.ts.map +1 -1
  53. package/lib/types.js +3 -0
  54. package/lib/types.js.map +1 -1
  55. package/lib/urls.d.ts +10 -20
  56. package/lib/urls.d.ts.map +1 -1
  57. package/lib/urls.js +11 -56
  58. package/lib/urls.js.map +1 -1
  59. package/lib/user.d.ts +7 -2
  60. package/lib/user.d.ts.map +1 -1
  61. package/lib/user.js +20 -6
  62. package/lib/user.js.map +1 -1
  63. package/lib/utils.d.ts +42 -4
  64. package/lib/utils.d.ts.map +1 -1
  65. package/lib/utils.js +80 -29
  66. package/lib/utils.js.map +1 -1
  67. package/package.json +9 -8
  68. package/src/auth.ts +72 -70
  69. package/src/calendar.ts +136 -24
  70. package/src/contents.ts +13 -6
  71. package/src/courses.ts +21 -37
  72. package/src/discussions.ts +10 -21
  73. package/src/favorites.ts +44 -80
  74. package/src/files.ts +124 -142
  75. package/src/homework.ts +207 -135
  76. package/src/index.ts +79 -48
  77. package/src/notices.ts +29 -42
  78. package/src/questionnaires.ts +62 -45
  79. package/src/request.ts +192 -69
  80. package/src/timetable.ts +121 -0
  81. package/src/types.ts +123 -87
  82. package/src/urls.ts +13 -64
  83. package/src/user.ts +22 -7
  84. package/src/utils.ts +97 -29
package/lib/favorites.js CHANGED
@@ -1,47 +1,32 @@
1
1
  // Favorites (收藏) and comments (备注).
2
- import { YES } from './request.js';
3
2
  import { ContentType, FailReason } from './types.js';
4
3
  import * as URLS from './urls.js';
5
- import { CONTENT_TYPE_MAP_REVERSE, decodeHTML } from './utils.js';
4
+ import { CONTENT_TYPE_MAP_REVERSE, YES, decodeHTML, expectSuccess, toRequiredServerTime, toServerTime, } from './utils.js';
6
5
  /**
7
6
  * Add an item to favorites. (收藏)
7
+ * Success is `result: 'success'`; the message is in the website's language ("收藏成功", "Added successfully.").
8
8
  */
9
9
  export async function addToFavorites(s, type, id) {
10
- const json = await (await s.fetchWithToken(URLS.LEARN_FAVORITE_ADD(type, id))).json();
11
- if (json.result !== 'success' || !json.msg?.endsWith?.('成功')) {
12
- return Promise.reject({
13
- reason: FailReason.OPERATION_FAILED,
14
- extra: json,
15
- });
16
- }
10
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_ADD(type, id));
11
+ expectSuccess(json, FailReason.OPERATION_FAILED);
17
12
  }
18
13
  /**
19
14
  * Remove an item from favorites. (取消收藏)
20
15
  */
21
16
  export async function removeFromFavorites(s, id) {
22
- const json = await (await s.fetchWithToken(URLS.LEARN_FAVORITE_REMOVE(id))).json();
23
- if (json.result !== 'success' || !json.msg?.endsWith?.('成功')) {
24
- return Promise.reject({
25
- reason: FailReason.OPERATION_FAILED,
26
- extra: json,
27
- });
28
- }
17
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_REMOVE(id));
18
+ expectSuccess(json, FailReason.OPERATION_FAILED);
29
19
  }
30
20
  /**
31
21
  * Get favorites. (我的收藏)
32
22
  * If `courseID` or `type` is specified, only return favorites of that course or type.
33
23
  */
34
24
  export async function getFavorites(s, courseID, type) {
35
- const json = await (await s.fetchWithToken(URLS.LEARN_FAVORITE_LIST(type), {
25
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_LIST(type), {
36
26
  method: 'POST',
37
27
  body: URLS.LEARN_PAGE_LIST_FORM_DATA(courseID),
38
- })).json();
39
- if (json.result !== 'success') {
40
- return Promise.reject({
41
- reason: FailReason.INVALID_RESPONSE,
42
- extra: json,
43
- });
44
- }
28
+ });
29
+ expectSuccess(json, FailReason.INVALID_RESPONSE);
45
30
  const result = (json.object?.aaData ?? []);
46
31
  return result
47
32
  .map((e) => {
@@ -52,15 +37,15 @@ export async function getFavorites(s, courseID, type) {
52
37
  id: e.ywid,
53
38
  type: itemType,
54
39
  title: decodeHTML(e.ywbt),
55
- time: itemType === ContentType.DISCUSSION || itemType === ContentType.QUESTION ? e.tlsj : e.ywsj,
40
+ time: toRequiredServerTime(itemType === ContentType.DISCUSSION || itemType === ContentType.QUESTION ? e.tlsj : e.ywsj),
56
41
  state: e.ywzt,
57
42
  extra: e.ywbz ?? undefined,
58
43
  semesterId: e.xnxq,
59
44
  courseId: e.wlkcid,
60
45
  pinned: e.sfzd === YES,
61
- pinnedTime: e.zdsj === null ? undefined : e.zdsj, // Note: this field is originally unix timestamp instead of string
46
+ pinnedTime: toServerTime(e.zdsj),
62
47
  comment: e.bznr ?? undefined,
63
- addedTime: e.scsj,
48
+ addedTime: toRequiredServerTime(e.scsj),
64
49
  itemId: e.id,
65
50
  };
66
51
  })
@@ -70,63 +55,43 @@ export async function getFavorites(s, courseID, type) {
70
55
  * Pin a favorite item. (置顶)
71
56
  */
72
57
  export async function pinFavoriteItem(s, id) {
73
- const json = await (await s.fetchWithToken(URLS.LEARN_FAVORITE_PIN, {
58
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_PIN, {
74
59
  method: 'POST',
75
60
  body: URLS.LEARN_FAVORITE_PIN_UNPIN_FORM_DATA(id),
76
- })).json();
77
- if (json.result !== 'success') {
78
- return Promise.reject({
79
- reason: FailReason.OPERATION_FAILED,
80
- extra: json,
81
- });
82
- }
61
+ });
62
+ expectSuccess(json, FailReason.OPERATION_FAILED);
83
63
  }
84
64
  /**
85
65
  * Unpin a favorite item. (取消置顶)
86
66
  */
87
67
  export async function unpinFavoriteItem(s, id) {
88
- const json = await (await s.fetchWithToken(URLS.LEARN_FAVORITE_UNPIN, {
68
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_UNPIN, {
89
69
  method: 'POST',
90
70
  body: URLS.LEARN_FAVORITE_PIN_UNPIN_FORM_DATA(id),
91
- })).json();
92
- if (json.result !== 'success') {
93
- return Promise.reject({
94
- reason: FailReason.OPERATION_FAILED,
95
- extra: json,
96
- });
97
- }
71
+ });
72
+ expectSuccess(json, FailReason.OPERATION_FAILED);
98
73
  }
99
74
  /**
100
75
  * Set a comment. (备注)
101
76
  * Set an empty string to remove the comment.
102
77
  */
103
78
  export async function setComment(s, type, id, content) {
104
- const json = await (await s.fetchWithToken(URLS.LEARN_COMMENT_SET, {
79
+ const json = await s.fetchJsonWithToken(URLS.LEARN_COMMENT_SET, {
105
80
  method: 'POST',
106
81
  body: URLS.LEARN_COMMENT_SET_FORM_DATA(type, id, content),
107
- })).json();
108
- if (json.result !== 'success' || !json.msg?.endsWith?.('成功')) {
109
- return Promise.reject({
110
- reason: FailReason.OPERATION_FAILED,
111
- extra: json,
112
- });
113
- }
82
+ });
83
+ expectSuccess(json, FailReason.OPERATION_FAILED);
114
84
  }
115
85
  /**
116
86
  * Get comments. (我的备注)
117
87
  * If `courseID` or `type` is specified, only return favorites of that course or type.
118
88
  */
119
89
  export async function getComments(s, courseID, type) {
120
- const json = await (await s.fetchWithToken(URLS.LEARN_COMMENT_LIST(type), {
90
+ const json = await s.fetchJsonWithToken(URLS.LEARN_COMMENT_LIST(type), {
121
91
  method: 'POST',
122
92
  body: URLS.LEARN_PAGE_LIST_FORM_DATA(courseID),
123
- })).json();
124
- if (json.result !== 'success') {
125
- return Promise.reject({
126
- reason: FailReason.INVALID_RESPONSE,
127
- extra: json,
128
- });
129
- }
93
+ });
94
+ expectSuccess(json, FailReason.INVALID_RESPONSE);
130
95
  const result = (json.object?.aaData ?? []);
131
96
  return result
132
97
  .map((e) => {
@@ -141,7 +106,7 @@ export async function getComments(s, courseID, type) {
141
106
  title: decodeHTML(e.ywbt),
142
107
  semesterId: e.xnxq,
143
108
  courseId: e.wlkcid,
144
- commentTime: e.cjsj,
109
+ commentTime: toRequiredServerTime(e.cjsj),
145
110
  itemId: e.id,
146
111
  };
147
112
  })
@@ -1 +1 @@
1
- {"version":3,"file":"favorites.js","sourceRoot":"","sources":["../src/favorites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"favorites.js","sourceRoot":"","sources":["../src/favorites.ts"],"names":[],"mappings":"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"}
package/lib/files.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import type { Session } from './request.ts';
2
- import type { File, FileCategory } from './types.ts';
2
+ import type { CourseFile, FileCategory } from './types.ts';
3
3
  import { CourseType } from './types.ts';
4
- /** Get all files (课程文件) of the specified course. */
5
- export declare function getFileList(s: Session, courseID: string, courseType?: CourseType): Promise<File[]>;
4
+ /** Get all files (课程文件) of the specified course; `category` is left out if the categories can't be fetched. */
5
+ export declare function getFileList(s: Session, courseID: string, courseType?: CourseType): Promise<CourseFile[]>;
6
6
  /** Get file categories of the specified course. */
7
7
  export declare function getFileCategoryList(s: Session, courseID: string, courseType?: CourseType): Promise<FileCategory[]>;
8
8
  /**
9
9
  * Get all files of the specified category of the specified course.
10
10
  * Note: this cannot get correct `visitCount` and `downloadCount` for student
11
11
  */
12
- export declare function getFileListByCategory(s: Session, courseID: string, categoryId: string, courseType?: CourseType): Promise<File[]>;
12
+ export declare function getFileListByCategory(s: Session, courseID: string, categoryId: string, courseType?: CourseType): Promise<CourseFile[]>;
13
13
  //# sourceMappingURL=files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAe,UAAU,EAAc,MAAM,YAAY,CAAC;AAIjE,oDAAoD;AACpD,wBAAsB,WAAW,CAC/B,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,CAoDjB;AAED,mDAAmD;AACnD,wBAAsB,mBAAmB,CACvC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,YAAY,EAAE,CAAC,CAmBzB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,CA8FjB"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAe,UAAU,EAAc,MAAM,YAAY,CAAC;AAIjE,+GAA+G;AAC/G,wBAAsB,WAAW,CAC/B,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,UAAU,EAAE,CAAC,CAmBvB;AAyCD,mDAAmD;AACnD,wBAAsB,mBAAmB,CACvC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,YAAY,EAAE,CAAC,CAczB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,UAAU,EAAE,CAAC,CAIvB"}
package/lib/files.js CHANGED
@@ -1,16 +1,15 @@
1
1
  // Course files (课程文件) and file categories.
2
2
  import { ContentType, CourseType, FailReason } from './types.js';
3
3
  import * as URLS from './urls.js';
4
- import { decodeHTML, formatFileSize } from './utils.js';
5
- /** Get all files (课程文件) of the specified course. */
4
+ import { YES, decodeHTML, expectSuccess, formatFileSize, toRequiredServerTime } from './utils.js';
5
+ /** Get all files (课程文件) of the specified course; `category` is left out if the categories can't be fetched. */
6
6
  export async function getFileList(s, courseID, courseType = CourseType.STUDENT) {
7
- const json = await (await s.fetchWithToken(URLS.LEARN_FILE_LIST(courseID, courseType))).json();
8
- if (json.result !== 'success') {
9
- return Promise.reject({
10
- reason: FailReason.INVALID_RESPONSE,
11
- extra: json,
12
- });
13
- }
7
+ // categories only fill `category`; don't fail the whole list when they can't be fetched
8
+ const [json, categoryList] = await Promise.all([
9
+ s.fetchJsonWithToken(URLS.LEARN_FILE_LIST(courseID, courseType)),
10
+ getFileCategoryList(s, courseID, courseType).catch(() => []),
11
+ ]);
12
+ expectSuccess(json, FailReason.INVALID_RESPONSE);
14
13
  let result = [];
15
14
  if (Array.isArray(json.object?.resultsList)) {
16
15
  // teacher
@@ -20,54 +19,54 @@ export async function getFileList(s, courseID, courseType = CourseType.STUDENT)
20
19
  // student
21
20
  result = json.object;
22
21
  }
23
- const categories = new Map((await getFileCategoryList(s, courseID, courseType)).map((c) => [c.id, c]));
24
- return result.map((f) => {
25
- const title = decodeHTML(f.bt);
26
- const fileId = f.wjid;
27
- const uploadTime = f.scsj;
28
- const downloadUrl = URLS.LEARN_FILE_DOWNLOAD(fileId, courseType);
29
- const previewUrl = URLS.LEARN_FILE_PREVIEW(ContentType.FILE, fileId, courseType, s.previewFirstPage);
30
- return {
31
- id: f.kjxxid,
32
- fileId,
33
- category: categories.get(f.kjflid),
34
- title,
35
- description: decodeHTML(f.ms),
36
- rawSize: f.wjdx,
37
- size: f.fileSize,
38
- uploadTime,
39
- publishTime: uploadTime,
22
+ const categories = new Map(categoryList.map((c) => [c.id, c]));
23
+ return result.map((f) => ({ ...parseFile(s, f, courseType), category: categories.get(f.kjflid) }));
24
+ }
25
+ /** a 0 / 1 flag, which the server sends as a number, a string or (in older answers) a boolean */
26
+ const isSet = (flag) => flag === true || Number(flag) === 1;
27
+ /** a count or size, which the server sends as a number or a string */
28
+ const toNumber = (value) => Number(value ?? 0) || 0;
29
+ /** a file of the object-shaped lists (`getFileList`, and `getFileListByCategory` for a teacher) */
30
+ function parseFile(s, f, courseType) {
31
+ const title = decodeHTML(f.bt);
32
+ const fileId = f.wjid;
33
+ const uploadTime = toRequiredServerTime(f.scsj);
34
+ const downloadUrl = URLS.LEARN_FILE_DOWNLOAD(fileId, courseType);
35
+ const previewUrl = URLS.LEARN_FILE_PREVIEW(ContentType.FILE, fileId, courseType, s.previewFirstPage);
36
+ return {
37
+ id: f.kjxxid,
38
+ fileId,
39
+ title,
40
+ description: decodeHTML(f.ms),
41
+ rawSize: toNumber(f.wjdx),
42
+ size: f.fileSize,
43
+ uploadTime,
44
+ publishTime: uploadTime,
45
+ downloadUrl,
46
+ previewUrl,
47
+ isNew: isSet(f.isNew), // 1 / 0 for a student
48
+ markedImportant: isSet(f.sfqd), // string '1' for a teacher, number 1 for a student
49
+ visitCount: toNumber(f.xsllcs ?? f.llcs),
50
+ downloadCount: toNumber(f.xzcs),
51
+ fileType: f.wjlx,
52
+ remoteFile: {
53
+ id: fileId,
54
+ name: title,
40
55
  downloadUrl,
41
56
  previewUrl,
42
- isNew: f.isNew ?? false,
43
- markedImportant: f.sfqd === 1,
44
- visitCount: f.xsllcs ?? f.llcs ?? 0,
45
- downloadCount: f.xzcs ?? 0,
46
- fileType: f.wjlx,
47
- remoteFile: {
48
- id: fileId,
49
- name: title,
50
- downloadUrl,
51
- previewUrl,
52
- size: f.fileSize,
53
- },
54
- };
55
- });
57
+ size: f.fileSize,
58
+ },
59
+ };
56
60
  }
57
61
  /** Get file categories of the specified course. */
58
62
  export async function getFileCategoryList(s, courseID, courseType = CourseType.STUDENT) {
59
- const json = await (await s.fetchWithToken(URLS.LEARN_FILE_CATEGORY_LIST(courseID, courseType))).json();
60
- if (json.result !== 'success') {
61
- return Promise.reject({
62
- reason: FailReason.INVALID_RESPONSE,
63
- extra: json,
64
- });
65
- }
63
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FILE_CATEGORY_LIST(courseID, courseType));
64
+ expectSuccess(json, FailReason.INVALID_RESPONSE);
66
65
  const result = (json.object?.rows ?? []);
67
66
  return result.map((c) => ({
68
67
  id: c.kjflid,
69
68
  title: decodeHTML(c.bt),
70
- creationTime: c.czsj,
69
+ creationTime: toRequiredServerTime(c.czsj),
71
70
  }));
72
71
  }
73
72
  /**
@@ -75,93 +74,72 @@ export async function getFileCategoryList(s, courseID, courseType = CourseType.S
75
74
  * Note: this cannot get correct `visitCount` and `downloadCount` for student
76
75
  */
77
76
  export async function getFileListByCategory(s, courseID, categoryId, courseType = CourseType.STUDENT) {
78
- if (courseType === CourseType.STUDENT) {
79
- const json = await (await s.fetchWithToken(URLS.LEARN_FILE_LIST_BY_CATEGORY_STUDENT(courseID, categoryId))).json();
80
- if (json.result !== 'success') {
81
- return Promise.reject({
82
- reason: FailReason.INVALID_RESPONSE,
83
- extra: json,
84
- });
85
- }
86
- const result = (json.object ?? []);
87
- return result.map((f) => {
88
- const fileId = f[7];
89
- const title = decodeHTML(f[1]);
90
- const rawSize = f[9];
91
- const size = formatFileSize(rawSize);
92
- const downloadUrl = URLS.LEARN_FILE_DOWNLOAD(fileId, courseType);
93
- const previewUrl = URLS.LEARN_FILE_PREVIEW(ContentType.FILE, fileId, courseType, s.previewFirstPage);
94
- return {
95
- id: f[0],
96
- fileId,
97
- title,
98
- description: decodeHTML(f[5]),
99
- rawSize,
100
- size,
101
- uploadTime: f[6],
102
- publishTime: f[10],
103
- downloadUrl,
104
- previewUrl,
105
- isNew: f[8] === 1,
106
- markedImportant: f[2] === 1,
107
- visitCount: 0,
108
- downloadCount: 0,
109
- fileType: f[13],
110
- remoteFile: {
111
- id: fileId,
112
- name: title,
113
- downloadUrl,
114
- previewUrl,
115
- size,
116
- },
117
- isFavorite: f[11],
118
- comment: f[14] ?? undefined,
119
- };
120
- });
121
- }
122
- else {
123
- const json = await (await s.fetchWithToken(URLS.LEARN_FILE_LIST_BY_CATEGORY_TEACHER, {
124
- method: 'POST',
125
- body: URLS.LEARN_FILE_LIST_BY_CATEGORY_TEACHER_FORM_DATA(courseID, categoryId),
126
- })).json();
127
- if (json.result !== 'success') {
128
- return Promise.reject({
129
- reason: FailReason.INVALID_RESPONSE,
130
- extra: json,
131
- });
132
- }
133
- const result = (json.object.aaData ?? []);
134
- return result.map((f) => {
135
- const title = decodeHTML(f.bt);
136
- const fileId = f.wjid;
137
- const uploadTime = f.scsj;
138
- const downloadUrl = URLS.LEARN_FILE_DOWNLOAD(fileId, courseType);
139
- const previewUrl = URLS.LEARN_FILE_PREVIEW(ContentType.FILE, fileId, courseType, s.previewFirstPage);
140
- return {
141
- id: f.kjxxid,
142
- fileId,
143
- title,
144
- description: decodeHTML(f.ms),
145
- rawSize: f.wjdx,
146
- size: f.fileSize,
147
- uploadTime,
148
- publishTime: uploadTime,
77
+ return courseType === CourseType.STUDENT
78
+ ? getStudentFileListByCategory(s, courseID, categoryId)
79
+ : getTeacherFileListByCategory(s, courseID, categoryId);
80
+ }
81
+ /** the columns of a row of the student's file list of a category, which is an array instead of an object */
82
+ const COLUMN = {
83
+ ID: 0,
84
+ TITLE: 1,
85
+ MARKED_IMPORTANT: 2,
86
+ DESCRIPTION: 5,
87
+ UPLOAD_TIME: 6,
88
+ FILE_ID: 7,
89
+ IS_NEW: 8,
90
+ RAW_SIZE: 9,
91
+ PUBLISH_TIME: 10,
92
+ IS_FAVORITE: 11,
93
+ FILE_TYPE: 13,
94
+ COMMENT: 14,
95
+ };
96
+ async function getStudentFileListByCategory(s, courseID, categoryId) {
97
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FILE_LIST_BY_CATEGORY_STUDENT(courseID, categoryId));
98
+ expectSuccess(json, FailReason.INVALID_RESPONSE);
99
+ const result = (json.object ?? []);
100
+ return result.map((f) => {
101
+ const fileId = f[COLUMN.FILE_ID];
102
+ const title = decodeHTML(f[COLUMN.TITLE]);
103
+ const rawSize = toNumber(f[COLUMN.RAW_SIZE]);
104
+ const size = formatFileSize(rawSize);
105
+ const downloadUrl = URLS.LEARN_FILE_DOWNLOAD(fileId, CourseType.STUDENT);
106
+ const previewUrl = URLS.LEARN_FILE_PREVIEW(ContentType.FILE, fileId, CourseType.STUDENT, s.previewFirstPage);
107
+ return {
108
+ id: f[COLUMN.ID],
109
+ fileId,
110
+ title,
111
+ description: decodeHTML(f[COLUMN.DESCRIPTION]),
112
+ rawSize,
113
+ size,
114
+ uploadTime: toRequiredServerTime(f[COLUMN.UPLOAD_TIME]),
115
+ publishTime: toRequiredServerTime(f[COLUMN.PUBLISH_TIME]),
116
+ downloadUrl,
117
+ previewUrl,
118
+ isNew: isSet(f[COLUMN.IS_NEW]),
119
+ markedImportant: isSet(f[COLUMN.MARKED_IMPORTANT]),
120
+ // not in this list
121
+ visitCount: 0,
122
+ downloadCount: 0,
123
+ fileType: f[COLUMN.FILE_TYPE],
124
+ remoteFile: {
125
+ id: fileId,
126
+ name: title,
149
127
  downloadUrl,
150
128
  previewUrl,
151
- isNew: f.isNew ?? false,
152
- markedImportant: f.sfqd === 1,
153
- visitCount: f.xsllcs ?? f.llcs ?? 0,
154
- downloadCount: f.xzcs ?? 0,
155
- fileType: f.wjlx,
156
- remoteFile: {
157
- id: fileId,
158
- name: title,
159
- downloadUrl,
160
- previewUrl,
161
- size: f.fileSize,
162
- },
163
- };
164
- });
165
- }
129
+ size,
130
+ },
131
+ isFavorite: f[COLUMN.IS_FAVORITE] === YES, // '是' / '否' like the other lists
132
+ comment: f[COLUMN.COMMENT] ?? undefined,
133
+ };
134
+ });
135
+ }
136
+ async function getTeacherFileListByCategory(s, courseID, categoryId) {
137
+ const json = await s.fetchJsonWithToken(URLS.LEARN_FILE_LIST_BY_CATEGORY_TEACHER, {
138
+ method: 'POST',
139
+ body: URLS.LEARN_FILE_LIST_BY_CATEGORY_TEACHER_FORM_DATA(courseID, categoryId),
140
+ });
141
+ expectSuccess(json, FailReason.INVALID_RESPONSE);
142
+ const result = (json.object?.aaData ?? []);
143
+ return result.map((f) => parseFile(s, f, CourseType.TEACHER));
166
144
  }
167
145
  //# sourceMappingURL=files.js.map
package/lib/files.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAI3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExD,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,CAAU,EACV,QAAgB,EAChB,UAAU,GAAe,UAAU,CAAC,OAAO;IAE3C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/F,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,UAAU,CAAC,gBAAgB;YACnC,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,GAAU,EAAE,CAAC;IACvB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;QAC5C,UAAU;QACV,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IACnC,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,UAAU;QACV,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACrG,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,MAAM;YACZ,MAAM;YACN,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAClC,KAAK;YACL,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC,IAAI;YACf,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,UAAU;YACV,WAAW,EAAE,UAAU;YACvB,WAAW;YACX,UAAU;YACV,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK;YACvB,eAAe,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;YAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;YACnC,aAAa,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;YAC1B,QAAQ,EAAE,CAAC,CAAC,IAAI;YAChB,UAAU,EAAE;gBACV,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,KAAK;gBACX,WAAW;gBACX,UAAU;gBACV,IAAI,EAAE,CAAC,CAAC,QAAQ;aACjB;SACa,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,CAAU,EACV,QAAgB,EAChB,UAAU,GAAe,UAAU,CAAC,OAAO;IAE3C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxG,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,UAAU,CAAC,gBAAgB;YACnC,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAU,CAAC;IAElD,OAAO,MAAM,CAAC,GAAG,CACf,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC;QACC,EAAE,EAAE,CAAC,CAAC,MAAM;QACZ,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,YAAY,EAAE,CAAC,CAAC,IAAI;KACrB,CAAwB,CAC5B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,CAAU,EACV,QAAgB,EAChB,UAAkB,EAClB,UAAU,GAAe,UAAU,CAAC,OAAO;IAE3C,IAAI,UAAU,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnH,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,MAAM,CAAC;gBACpB,MAAM,EAAE,UAAU,CAAC,gBAAgB;gBACnC,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAU,CAAC;QAE5C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YACrG,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBACR,MAAM;gBACN,KAAK;gBACL,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,OAAO;gBACP,IAAI;gBACJ,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClB,WAAW;gBACX,UAAU;gBACV,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACjB,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC3B,UAAU,EAAE,CAAC;gBACb,aAAa,EAAE,CAAC;gBAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;gBACf,UAAU,EAAE;oBACV,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,KAAK;oBACX,WAAW;oBACX,UAAU;oBACV,IAAI;iBACL;gBACD,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS;aACb,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,MAAM,CACjB,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,6CAA6C,CAAC,QAAQ,EAAE,UAAU,CAAC;SAC/E,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,MAAM,CAAC;gBACpB,MAAM,EAAE,UAAU,CAAC,gBAAgB;gBACnC,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAU,CAAC;QAEnD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;YACtB,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;YAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YACrG,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,MAAM;gBACZ,MAAM;gBACN,KAAK;gBACL,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC,CAAC,IAAI;gBACf,IAAI,EAAE,CAAC,CAAC,QAAQ;gBAChB,UAAU;gBACV,WAAW,EAAE,UAAU;gBACvB,WAAW;gBACX,UAAU;gBACV,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK;gBACvB,eAAe,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;gBAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;gBACnC,aAAa,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;gBAC1B,QAAQ,EAAE,CAAC,CAAC,IAAI;gBAChB,UAAU,EAAE;oBACV,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,KAAK;oBACX,WAAW;oBACX,UAAU;oBACV,IAAI,EAAE,CAAC,CAAC,QAAQ;iBACjB;aACa,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
package/lib/homework.d.ts CHANGED
@@ -1,17 +1,47 @@
1
1
  import type { Session } from './request.ts';
2
- import type { Homework, HomeworkListOptions, HomeworkTA, IExcellentHomework, IHomework, IHomeworkDetail, IHomeworkSubmitAttachment } from './types.ts';
2
+ import type { ExcellentHomeworkBase, Homework, HomeworkBase, HomeworkDetail, HomeworkListOptions, HomeworkStatus, HomeworkSubmitAttachment, HomeworkSubmitRequest, HomeworkTA } from './types.ts';
3
3
  import { CourseType } from './types.ts';
4
+ /** the student homework lists, by submission status */
5
+ export declare const HOMEWORK_LIST_SOURCES: readonly {
6
+ url: string;
7
+ status: HomeworkStatus;
8
+ }[];
4
9
  /**
5
10
  * Get all homeworks (课程作业) of the specified course: 3 status lists and the excellent homework list.
6
11
  * Details (page + description) only for the homework `options.details` selects.
7
12
  */
8
- export declare function getHomeworkList(s: Session, courseID: string): Promise<Homework[]>;
9
- export declare function getHomeworkList(s: Session, courseID: string, courseType: CourseType.STUDENT, options?: HomeworkListOptions): Promise<Homework[]>;
13
+ export declare function getHomeworkList(s: Session, courseID: string, courseType?: CourseType.STUDENT, options?: HomeworkListOptions): Promise<Homework[]>;
10
14
  export declare function getHomeworkList(s: Session, courseID: string, courseType: CourseType.TEACHER): Promise<HomeworkTA[]>;
11
15
  /**
12
16
  * Get the detail of one homework or excellent homework: its page (answer, submitted content, attachments) and the
13
17
  * description JSON (which wins for `description`). 2 requests.
14
18
  */
15
- export declare function getHomeworkDetail(s: Session, homework: Pick<IHomework | IExcellentHomework, 'url' | 'baseId'>): Promise<IHomeworkDetail>;
16
- export declare function submitHomework(s: Session, id: string, content?: string, attachment?: IHomeworkSubmitAttachment, removeAttachment?: boolean): Promise<void>;
19
+ export declare function getHomeworkDetail(s: Session, homework: Pick<HomeworkBase | ExcellentHomeworkBase, 'url' | 'baseId'>): Promise<HomeworkDetail>;
20
+ export declare function submitHomework(s: Session, id: string, content?: string, attachment?: HomeworkSubmitAttachment, removeAttachment?: boolean): Promise<void>;
21
+ /**
22
+ * The request `submitHomework` would send, for sending it with another HTTP client (e.g. one that reports upload
23
+ * progress). Checks the session first (`ensureSession`: one request, and a login only if it has expired), as the
24
+ * request is sent without the helper's re-login and retry. Read the answer with `checkHomeworkSubmitResponse`.
25
+ */
26
+ export declare function getHomeworkSubmitRequest(s: Session, id: string, content?: string, attachment?: HomeworkSubmitAttachment, removeAttachment?: boolean): Promise<HomeworkSubmitRequest>;
27
+ /**
28
+ * Check the server's answer to a homework submission: its parsed JSON, or the body as text. Rejects with
29
+ * `NOT_LOGGED_IN` for the login page of an expired session (which the server sends with status 200),
30
+ * `INVALID_RESPONSE` for any other text that isn't JSON, and `OPERATION_FAILED` (with the answer in `extra`) unless
31
+ * `result` is `'success'`.
32
+ */
33
+ export declare function checkHomeworkSubmitResponse(body: unknown): void;
34
+ /**
35
+ * The form the website's submit page sends (`fileUploadProgress` in `/res/js/common/myApp.js`): `fileupload` is the
36
+ * picked file, or the text "undefined" when none is picked (it appends `files[0]` as is); `zynr` is the whole current
37
+ * answer as HTML from its editor, sent every time (also when only the attachment changes); `isDeleted` is "1" when the
38
+ * existing attachment is deleted, and then the server ignores `zynr` (the submitted answer stays).
39
+ */
40
+ export declare const homeworkSubmitForm: (id: string, content?: string, attachment?: HomeworkSubmitAttachment, removeAttachment?: boolean) => FormData;
41
+ /**
42
+ * Plain text as the website's answer editor sends it: one `<p>` per line, with `&nbsp;` for an empty line, and `''`
43
+ * for text that is only whitespace. The server replaces the submitted answer with what is sent, so send its HTML
44
+ * as it is when the answer wasn't edited, to keep its formatting.
45
+ */
46
+ export declare function homeworkContentHtml(text: string): string;
17
47
  //# sourceMappingURL=homework.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"homework.d.ts","sourceRoot":"","sources":["../src/homework.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAGV,QAAQ,EACR,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,eAAe,EAEf,yBAAyB,EAE1B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,UAAU,EAAc,MAAM,YAAY,CAAC;AAIjE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEnF,wBAAgB,eAAe,CAC7B,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,CAAC,OAAO,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEvB,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AA2KrH;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,kBAAkB,EAAE,KAAK,GAAG,QAAQ,CAAC,GAC/D,OAAO,CAAC,eAAe,CAAC,CAM1B;AA2CD,wBAAsB,cAAc,CAClC,CAAC,EAAE,OAAO,EACV,EAAE,EAAE,MAAM,EACV,OAAO,SAAK,EACZ,UAAU,CAAC,EAAE,yBAAyB,EACtC,gBAAgB,UAAQ,GACvB,OAAO,CAAC,IAAI,CAAC,CAaf"}
1
+ {"version":3,"file":"homework.d.ts","sourceRoot":"","sources":["../src/homework.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAEV,qBAAqB,EACrB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,UAAU,EAEX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,UAAU,EAAc,MAAM,YAAY,CAAC;AAiBjE,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,EAAE,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,EAInF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,EAC/B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEvB,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AA2JrH;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,IAAI,CAAC,YAAY,GAAG,qBAAqB,EAAE,KAAK,GAAG,QAAQ,CAAC,GACrE,OAAO,CAAC,cAAc,CAAC,CAOzB;AAoCD,wBAAsB,cAAc,CAClC,CAAC,EAAE,OAAO,EACV,EAAE,EAAE,MAAM,EACV,OAAO,SAAK,EACZ,UAAU,CAAC,EAAE,wBAAwB,EACrC,gBAAgB,UAAQ,GACvB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,CAAC,EAAE,OAAO,EACV,EAAE,EAAE,MAAM,EACV,OAAO,SAAK,EACZ,UAAU,CAAC,EAAE,wBAAwB,EACrC,gBAAgB,UAAQ,GACvB,OAAO,CAAC,qBAAqB,CAAC,CAMhC;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAa/D;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OACzB,MAAM,iCAEG,wBAAwB,yCAgBtC,CAAC;AAIF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMxD"}