chukyo-sdk 0.1.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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +227 -0
  3. package/dist/cjs/albo/client.js +133 -0
  4. package/dist/cjs/albo/index.js +55 -0
  5. package/dist/cjs/albo/parser/albo.js +110 -0
  6. package/dist/cjs/albo/types/albo.js +351 -0
  7. package/dist/cjs/albo/types/alboCalendar.js +51 -0
  8. package/dist/cjs/albo/types/alboCommon.js +55 -0
  9. package/dist/cjs/albo/types/alboInformation.js +136 -0
  10. package/dist/cjs/albo/types/alboMenu.js +92 -0
  11. package/dist/cjs/albo/types/alboQuestionnaire.js +229 -0
  12. package/dist/cjs/albo/types/alboSharedItem.js +137 -0
  13. package/dist/cjs/albo/types/alboSystem.js +103 -0
  14. package/dist/cjs/albo/types/alboUniversalForm.js +51 -0
  15. package/dist/cjs/common/dom.js +137 -0
  16. package/dist/cjs/common/utils.js +29 -0
  17. package/dist/cjs/constants.js +127 -0
  18. package/dist/cjs/core/request.js +39 -0
  19. package/dist/cjs/cubics/client.js +49 -0
  20. package/dist/cjs/cubics/index.js +22 -0
  21. package/dist/cjs/cubics/parser/cubics.js +103 -0
  22. package/dist/cjs/cubics/types/cubics.js +90 -0
  23. package/dist/cjs/errors.js +55 -0
  24. package/dist/cjs/index.js +50 -0
  25. package/dist/cjs/manabo/client.js +135 -0
  26. package/dist/cjs/manabo/index.js +44 -0
  27. package/dist/cjs/manabo/parser/manaboClass.js +386 -0
  28. package/dist/cjs/manabo/parser/manaboEntry.js +38 -0
  29. package/dist/cjs/manabo/parser/manaboMail.js +153 -0
  30. package/dist/cjs/manabo/parser/manaboNews.js +26 -0
  31. package/dist/cjs/manabo/parser/manaboTimetable.js +93 -0
  32. package/dist/cjs/manabo/types/manaboClass.js +223 -0
  33. package/dist/cjs/manabo/types/manaboEntry.js +43 -0
  34. package/dist/cjs/manabo/types/manaboMail.js +117 -0
  35. package/dist/cjs/manabo/types/manaboNews.js +20 -0
  36. package/dist/cjs/manabo/types/manaboTimetable.js +79 -0
  37. package/dist/cjs/package.json +1 -0
  38. package/dist/cjs/shib/builder.js +239 -0
  39. package/dist/cjs/shib/index.js +32 -0
  40. package/dist/cjs/shib/parser/shibLogin.js +138 -0
  41. package/dist/cjs/shib/parser/shibUser.js +51 -0
  42. package/dist/cjs/shib/types/common.js +2 -0
  43. package/dist/cjs/shib/types/shibLogin.js +92 -0
  44. package/dist/cjs/shib/types/shibUser.js +44 -0
  45. package/dist/cjs/transports/fetch.js +84 -0
  46. package/dist/cjs/types.js +9 -0
  47. package/dist/esm/albo/client.d.ts +80 -0
  48. package/dist/esm/albo/client.d.ts.map +1 -0
  49. package/dist/esm/albo/client.js +129 -0
  50. package/dist/esm/albo/index.d.ts +12 -0
  51. package/dist/esm/albo/index.d.ts.map +1 -0
  52. package/dist/esm/albo/index.js +11 -0
  53. package/dist/esm/albo/parser/albo.d.ts +69 -0
  54. package/dist/esm/albo/parser/albo.d.ts.map +1 -0
  55. package/dist/esm/albo/parser/albo.js +84 -0
  56. package/dist/esm/albo/types/albo.d.ts +460 -0
  57. package/dist/esm/albo/types/albo.d.ts.map +1 -0
  58. package/dist/esm/albo/types/albo.js +348 -0
  59. package/dist/esm/albo/types/alboCalendar.d.ts +58 -0
  60. package/dist/esm/albo/types/alboCalendar.d.ts.map +1 -0
  61. package/dist/esm/albo/types/alboCalendar.js +48 -0
  62. package/dist/esm/albo/types/alboCommon.d.ts +52 -0
  63. package/dist/esm/albo/types/alboCommon.d.ts.map +1 -0
  64. package/dist/esm/albo/types/alboCommon.js +51 -0
  65. package/dist/esm/albo/types/alboInformation.d.ts +214 -0
  66. package/dist/esm/albo/types/alboInformation.d.ts.map +1 -0
  67. package/dist/esm/albo/types/alboInformation.js +133 -0
  68. package/dist/esm/albo/types/alboMenu.d.ts +114 -0
  69. package/dist/esm/albo/types/alboMenu.d.ts.map +1 -0
  70. package/dist/esm/albo/types/alboMenu.js +89 -0
  71. package/dist/esm/albo/types/alboQuestionnaire.d.ts +442 -0
  72. package/dist/esm/albo/types/alboQuestionnaire.d.ts.map +1 -0
  73. package/dist/esm/albo/types/alboQuestionnaire.js +226 -0
  74. package/dist/esm/albo/types/alboSharedItem.d.ts +205 -0
  75. package/dist/esm/albo/types/alboSharedItem.d.ts.map +1 -0
  76. package/dist/esm/albo/types/alboSharedItem.js +134 -0
  77. package/dist/esm/albo/types/alboSystem.d.ts +129 -0
  78. package/dist/esm/albo/types/alboSystem.d.ts.map +1 -0
  79. package/dist/esm/albo/types/alboSystem.js +100 -0
  80. package/dist/esm/albo/types/alboUniversalForm.d.ts +63 -0
  81. package/dist/esm/albo/types/alboUniversalForm.d.ts.map +1 -0
  82. package/dist/esm/albo/types/alboUniversalForm.js +48 -0
  83. package/dist/esm/common/dom.d.ts +35 -0
  84. package/dist/esm/common/dom.d.ts.map +1 -0
  85. package/dist/esm/common/dom.js +120 -0
  86. package/dist/esm/common/utils.d.ts +15 -0
  87. package/dist/esm/common/utils.d.ts.map +1 -0
  88. package/dist/esm/common/utils.js +22 -0
  89. package/dist/esm/constants.d.ts +113 -0
  90. package/dist/esm/constants.d.ts.map +1 -0
  91. package/dist/esm/constants.js +124 -0
  92. package/dist/esm/core/request.d.ts +29 -0
  93. package/dist/esm/core/request.d.ts.map +1 -0
  94. package/dist/esm/core/request.js +33 -0
  95. package/dist/esm/cubics/client.d.ts +13 -0
  96. package/dist/esm/cubics/client.d.ts.map +1 -0
  97. package/dist/esm/cubics/client.js +45 -0
  98. package/dist/esm/cubics/index.d.ts +4 -0
  99. package/dist/esm/cubics/index.d.ts.map +1 -0
  100. package/dist/esm/cubics/index.js +3 -0
  101. package/dist/esm/cubics/parser/cubics.d.ts +8 -0
  102. package/dist/esm/cubics/parser/cubics.d.ts.map +1 -0
  103. package/dist/esm/cubics/parser/cubics.js +99 -0
  104. package/dist/esm/cubics/types/cubics.d.ts +94 -0
  105. package/dist/esm/cubics/types/cubics.d.ts.map +1 -0
  106. package/dist/esm/cubics/types/cubics.js +87 -0
  107. package/dist/esm/errors.d.ts +46 -0
  108. package/dist/esm/errors.d.ts.map +1 -0
  109. package/dist/esm/errors.js +46 -0
  110. package/dist/esm/index.d.ts +19 -0
  111. package/dist/esm/index.d.ts.map +1 -0
  112. package/dist/esm/index.js +25 -0
  113. package/dist/esm/manabo/client.d.ts +75 -0
  114. package/dist/esm/manabo/client.d.ts.map +1 -0
  115. package/dist/esm/manabo/client.js +131 -0
  116. package/dist/esm/manabo/index.d.ts +12 -0
  117. package/dist/esm/manabo/index.d.ts.map +1 -0
  118. package/dist/esm/manabo/index.js +11 -0
  119. package/dist/esm/manabo/parser/manaboClass.d.ts +9 -0
  120. package/dist/esm/manabo/parser/manaboClass.d.ts.map +1 -0
  121. package/dist/esm/manabo/parser/manaboClass.js +377 -0
  122. package/dist/esm/manabo/parser/manaboEntry.d.ts +8 -0
  123. package/dist/esm/manabo/parser/manaboEntry.d.ts.map +1 -0
  124. package/dist/esm/manabo/parser/manaboEntry.js +33 -0
  125. package/dist/esm/manabo/parser/manaboMail.d.ts +8 -0
  126. package/dist/esm/manabo/parser/manaboMail.d.ts.map +1 -0
  127. package/dist/esm/manabo/parser/manaboMail.js +145 -0
  128. package/dist/esm/manabo/parser/manaboNews.d.ts +7 -0
  129. package/dist/esm/manabo/parser/manaboNews.d.ts.map +1 -0
  130. package/dist/esm/manabo/parser/manaboNews.js +22 -0
  131. package/dist/esm/manabo/parser/manaboTimetable.d.ts +4 -0
  132. package/dist/esm/manabo/parser/manaboTimetable.d.ts.map +1 -0
  133. package/dist/esm/manabo/parser/manaboTimetable.js +89 -0
  134. package/dist/esm/manabo/types/manaboClass.d.ts +294 -0
  135. package/dist/esm/manabo/types/manaboClass.d.ts.map +1 -0
  136. package/dist/esm/manabo/types/manaboClass.js +220 -0
  137. package/dist/esm/manabo/types/manaboEntry.d.ts +24 -0
  138. package/dist/esm/manabo/types/manaboEntry.d.ts.map +1 -0
  139. package/dist/esm/manabo/types/manaboEntry.js +40 -0
  140. package/dist/esm/manabo/types/manaboMail.d.ts +103 -0
  141. package/dist/esm/manabo/types/manaboMail.d.ts.map +1 -0
  142. package/dist/esm/manabo/types/manaboMail.js +114 -0
  143. package/dist/esm/manabo/types/manaboNews.d.ts +15 -0
  144. package/dist/esm/manabo/types/manaboNews.d.ts.map +1 -0
  145. package/dist/esm/manabo/types/manaboNews.js +17 -0
  146. package/dist/esm/manabo/types/manaboTimetable.d.ts +88 -0
  147. package/dist/esm/manabo/types/manaboTimetable.d.ts.map +1 -0
  148. package/dist/esm/manabo/types/manaboTimetable.js +76 -0
  149. package/dist/esm/package.json +1 -0
  150. package/dist/esm/shib/builder.d.ts +154 -0
  151. package/dist/esm/shib/builder.d.ts.map +1 -0
  152. package/dist/esm/shib/builder.js +212 -0
  153. package/dist/esm/shib/index.d.ts +15 -0
  154. package/dist/esm/shib/index.d.ts.map +1 -0
  155. package/dist/esm/shib/index.js +14 -0
  156. package/dist/esm/shib/parser/shibLogin.d.ts +47 -0
  157. package/dist/esm/shib/parser/shibLogin.d.ts.map +1 -0
  158. package/dist/esm/shib/parser/shibLogin.js +127 -0
  159. package/dist/esm/shib/parser/shibUser.d.ts +11 -0
  160. package/dist/esm/shib/parser/shibUser.d.ts.map +1 -0
  161. package/dist/esm/shib/parser/shibUser.js +46 -0
  162. package/dist/esm/shib/types/common.d.ts +20 -0
  163. package/dist/esm/shib/types/common.d.ts.map +1 -0
  164. package/dist/esm/shib/types/common.js +1 -0
  165. package/dist/esm/shib/types/shibLogin.d.ts +62 -0
  166. package/dist/esm/shib/types/shibLogin.d.ts.map +1 -0
  167. package/dist/esm/shib/types/shibLogin.js +89 -0
  168. package/dist/esm/shib/types/shibUser.d.ts +36 -0
  169. package/dist/esm/shib/types/shibUser.d.ts.map +1 -0
  170. package/dist/esm/shib/types/shibUser.js +41 -0
  171. package/dist/esm/transports/fetch.d.ts +36 -0
  172. package/dist/esm/transports/fetch.d.ts.map +1 -0
  173. package/dist/esm/transports/fetch.js +80 -0
  174. package/dist/esm/types.d.ts +71 -0
  175. package/dist/esm/types.d.ts.map +1 -0
  176. package/dist/esm/types.js +8 -0
  177. package/package.json +72 -0
@@ -0,0 +1,145 @@
1
+ import { elementHasClass, getAttribute, getInnerHtml, getTextContent, isElement, loadDocument, queryAll, queryOne } from "../../common/dom";
2
+ import { normalizeWhitespace } from "../../common/utils";
3
+ import { ManaboMailMemberSchema, ManaboMailSendSchema, ManaboMailViewSchema, ManaboReceivedMailSchema, ManaboSentMailSchema, } from "../types/manaboMail";
4
+ const collectTextExcluding = (nodes, exclude) => normalizeWhitespace(nodes
5
+ .filter((node) => !exclude(node))
6
+ .map((node) => getTextContent(node))
7
+ .join(" "));
8
+ const extractPagination = (document) => {
9
+ const summaryElement = queryOne(".row.margin-top-md .col-sm-2", document);
10
+ const summaryText = normalizeWhitespace(getTextContent(summaryElement));
11
+ const pages = queryAll("ul.pagination li", document)
12
+ .map((li) => {
13
+ const anchor = queryOne("a", li);
14
+ const labelSource = anchor ?? queryOne("span", li);
15
+ const label = normalizeWhitespace(getTextContent(labelSource));
16
+ return {
17
+ label,
18
+ page: anchor ? (getAttribute(anchor, "page") ?? label) : label,
19
+ active: (anchor ? elementHasClass(anchor, "active") : false) || elementHasClass(li, "active"),
20
+ };
21
+ })
22
+ .filter((page) => page.label.length > 0);
23
+ return { summary: summaryText.length ? summaryText : null, pages };
24
+ };
25
+ export const parseManaboReceivedMail = (html) => {
26
+ const document = loadDocument(html);
27
+ const { summary, pages } = extractPagination(document);
28
+ const mails = queryAll("table.table-default tbody tr", document).map((row) => {
29
+ const cells = queryAll("td", row);
30
+ const checkbox = queryOne('input[type="checkbox"]', row);
31
+ const mailId = getAttribute(checkbox, "value") ?? getAttribute(checkbox, "name") ?? "";
32
+ const titleAnchor = queryOne("td.title a.a-mail-view", row);
33
+ const statusIcon = queryOne("td.title img.icon", row);
34
+ const senderCell = cells[2];
35
+ const senderImage = getAttribute(queryOne("img", senderCell), "src");
36
+ const humanSender = queryOne("span.margin-left-sm", senderCell);
37
+ const classSender = queryOne("a", senderCell);
38
+ const senderName = normalizeWhitespace(getTextContent(humanSender ?? classSender));
39
+ const receivedAt = normalizeWhitespace(getTextContent(cells[3] ?? null));
40
+ const statusAltRaw = normalizeWhitespace(getAttribute(statusIcon, "alt") ?? "");
41
+ return {
42
+ id: mailId,
43
+ title: normalizeWhitespace(getTextContent(titleAnchor)),
44
+ statusIconAlt: statusAltRaw.length ? statusAltRaw : null,
45
+ statusIconSrc: getAttribute(statusIcon, "src"),
46
+ mailLink: getAttribute(titleAnchor, "href"),
47
+ senderName: senderName.length ? senderName : null,
48
+ senderImage,
49
+ receivedAt,
50
+ };
51
+ });
52
+ return ManaboReceivedMailSchema.safeParse({ summary, pages, mails });
53
+ };
54
+ export const parseManaboSentMail = (html) => {
55
+ const document = loadDocument(html);
56
+ const summaryRaw = normalizeWhitespace(getTextContent(queryOne(".row.margin-top-md .col-sm-2", document)));
57
+ const mails = queryAll("table.table-default tbody tr", document).map((row) => {
58
+ const cells = queryAll("td", row);
59
+ const checkbox = queryOne('input[type="checkbox"]', row);
60
+ const mailId = getAttribute(checkbox, "value") ?? getAttribute(checkbox, "name") ?? "";
61
+ const titleCell = cells[1];
62
+ const titleAnchor = queryOne("a.a-mail-view", titleCell);
63
+ const statusIcon = queryOne("img.icon", titleCell);
64
+ const recipientCell = cells[2];
65
+ const recipientImage = getAttribute(queryOne("img", recipientCell), "src");
66
+ const humanSender = queryOne("span.margin-left-sm", recipientCell);
67
+ const classSender = queryOne("a", recipientCell);
68
+ const recipientName = normalizeWhitespace(getTextContent(humanSender ?? classSender));
69
+ const sentAt = normalizeWhitespace(getTextContent(cells[3] ?? null));
70
+ const unreadCountRaw = normalizeWhitespace(getTextContent(cells[4] ?? null));
71
+ const unreadCount = Number(unreadCountRaw.replace(/[^\d]/g, "")) || 0;
72
+ const statusAltRaw = normalizeWhitespace(getAttribute(statusIcon, "alt") ?? "");
73
+ return {
74
+ id: mailId,
75
+ title: normalizeWhitespace(getTextContent(titleAnchor)),
76
+ statusIconAlt: statusAltRaw.length ? statusAltRaw : null,
77
+ statusIconSrc: getAttribute(statusIcon, "src"),
78
+ mailLink: getAttribute(titleAnchor, "href"),
79
+ recipientName: recipientName.length ? recipientName : null,
80
+ recipientImage,
81
+ sentAt,
82
+ unreadCount,
83
+ };
84
+ });
85
+ return ManaboSentMailSchema.safeParse({ summary: summaryRaw.length ? summaryRaw : null, mails });
86
+ };
87
+ export const parseManaboMailView = (html) => {
88
+ const document = loadDocument(html);
89
+ const title = normalizeWhitespace(getTextContent(queryOne(".modal-title", document)));
90
+ const replyButton = queryOne(".a-reply-mail", document);
91
+ const nextButton = queryOne(".a-reopen-mail", document);
92
+ const senderBlocks = queryAll(".modal-body .margin-top-lg", document);
93
+ const senderBlock = senderBlocks[0];
94
+ const bodyBlock = senderBlocks[1];
95
+ const senderImage = getAttribute(queryOne("img", senderBlock), "src");
96
+ const senderName = normalizeWhitespace(getTextContent(queryOne("b", senderBlock)));
97
+ const sentAtRaw = senderBlock
98
+ ? collectTextExcluding(senderBlock.children ?? [], (node) => {
99
+ if (!isElement(node)) {
100
+ return false;
101
+ }
102
+ const name = node.name.toLowerCase();
103
+ return name === "a" || name === "script";
104
+ })
105
+ : "";
106
+ const sentAt = normalizeWhitespace(sentAtRaw);
107
+ const bodyHtml = bodyBlock ? getInnerHtml(bodyBlock).trim() : "";
108
+ return ManaboMailViewSchema.safeParse({
109
+ title,
110
+ replyMailId: getAttribute(replyButton, "reply_mail_id"),
111
+ fromMemberId: getAttribute(replyButton, "from_member_id"),
112
+ nextMailId: getAttribute(nextButton, "mail_id"),
113
+ senderName,
114
+ senderImage,
115
+ sentAt,
116
+ bodyHtml,
117
+ });
118
+ };
119
+ export const parseManaboMailSend = (html) => {
120
+ const document = loadDocument(html);
121
+ const modalTitle = normalizeWhitespace(getTextContent(queryOne(".modal-title", document)));
122
+ const form = queryOne("#form-mail", document);
123
+ return ManaboMailSendSchema.safeParse({
124
+ modalTitle,
125
+ form: {
126
+ action: getAttribute(queryOne('input[name="action"]', form), "value") ?? "",
127
+ replyMailId: getAttribute(queryOne('input[name="reply_mail_id"]', form), "value"),
128
+ signature: getAttribute(queryOne('input[name="signature"]', form), "value"),
129
+ csrfToken: getAttribute(queryOne('input[name="csrf_token"]', form), "value") ?? "",
130
+ },
131
+ submitLabel: normalizeWhitespace(getTextContent(queryOne(".button-send-mail", document))),
132
+ });
133
+ };
134
+ export const parseManaboMailMember = (html) => {
135
+ const document = loadDocument(html);
136
+ const members = queryAll(".div-mail-members li", document)
137
+ .map((item) => {
138
+ const anchor = queryOne("a.a-set-mail-member", item);
139
+ const name = normalizeWhitespace(getTextContent(anchor));
140
+ const image = getAttribute(queryOne("img", item), "src");
141
+ return { memberId: getAttribute(anchor, "member_id") ?? "", name, image };
142
+ })
143
+ .filter((member) => member.memberId.length > 0);
144
+ return ManaboMailMemberSchema.safeParse({ members });
145
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MaNaBo システムお知らせ(トップの「お知らせ」テーブル)のパーサ。
3
+ */
4
+ import type { ZodSafeParseResult } from "zod";
5
+ import { type ManaboNewsDTO } from "../types/manaboNews";
6
+ export declare const parseManaboNews: (html: string) => ZodSafeParseResult<ManaboNewsDTO>;
7
+ //# sourceMappingURL=manaboNews.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manaboNews.d.ts","sourceRoot":"","sources":["../../../../src/manabo/parser/manaboNews.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,KAAK,CAAC;AAG9C,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,kBAAkB,CAAC,aAAa,CAoB9E,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { getTextContent, loadDocument, queryAll, queryOne } from "../../common/dom";
2
+ import { normalizeWhitespace } from "../../common/utils";
3
+ import { ManaboNewsSchema } from "../types/manaboNews";
4
+ export const parseManaboNews = (html) => {
5
+ const document = loadDocument(html);
6
+ const rows = queryAll(".table-info tbody tr", document);
7
+ const items = [];
8
+ let message = null;
9
+ rows.forEach((row) => {
10
+ const text = normalizeWhitespace(getTextContent(row));
11
+ if (!text.length) {
12
+ return;
13
+ }
14
+ if (queryOne("a", row)) {
15
+ items.push({ text });
16
+ }
17
+ else {
18
+ message = text;
19
+ }
20
+ });
21
+ return ManaboNewsSchema.safeParse({ message, items });
22
+ };
@@ -0,0 +1,4 @@
1
+ import type { ZodSafeParseResult } from "zod";
2
+ import { type ManaboTimetableDTO } from "../types/manaboTimetable";
3
+ export declare const parseManaboTimetable: (html: string) => ZodSafeParseResult<ManaboTimetableDTO>;
4
+ //# sourceMappingURL=manaboTimetable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manaboTimetable.d.ts","sourceRoot":"","sources":["../../../../src/manabo/parser/manaboTimetable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,KAAK,CAAC;AAa9C,OAAO,EAEH,KAAK,kBAAkB,EAI1B,MAAM,0BAA0B,CAAC;AA0ElC,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,kBAAkB,CAAC,kBAAkB,CA+BxF,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { closest, elementHasClass, getAttribute, getTextContent, isElement, loadDocument, queryAll, queryOne, } from "../../common/dom";
2
+ import { normalizeWhitespace } from "../../common/utils";
3
+ import { ManaboTimetableSchema, } from "../types/manaboTimetable";
4
+ const collectTextExcluding = (nodes, exclude) => normalizeWhitespace(nodes
5
+ .filter((node) => !exclude(node))
6
+ .map((node) => getTextContent(node))
7
+ .join(" "));
8
+ /** 「NEW」バッジ(`<a><small class="label label-danger">NEW</small></a>`)を包む `<a>` の href。無ければ null。 */
9
+ const findNewContentHref = (root) => {
10
+ const badge = queryOne("small.label-danger", root);
11
+ if (!badge) {
12
+ return null;
13
+ }
14
+ const wrappingAnchor = closest(badge, "a");
15
+ return wrappingAnchor ? getAttribute(wrappingAnchor, "href") : null;
16
+ };
17
+ const buildSlot = (cell, day) => {
18
+ const student = queryOne("div.student", cell);
19
+ const anchor = student ? queryOne("a", student) : null;
20
+ if (!student || !anchor) {
21
+ return { day, className: null, teacher: null, href: null, isNew: false, newContentHref: null };
22
+ }
23
+ const classNameElement = queryOne("b", anchor);
24
+ const classNameText = normalizeWhitespace(classNameElement ? getTextContent(classNameElement) : "");
25
+ const teacherText = collectTextExcluding(anchor.children ?? [], (node) => {
26
+ if (!isElement(node))
27
+ return false;
28
+ return node.name === "b" || node.name === "a" || (node.name === "small" && elementHasClass(node, "label"));
29
+ });
30
+ const newContentHref = findNewContentHref(student);
31
+ return {
32
+ day,
33
+ className: classNameText.length ? classNameText : null,
34
+ teacher: teacherText.length ? teacherText : null,
35
+ href: getAttribute(anchor, "href"),
36
+ isNew: newContentHref !== null,
37
+ newContentHref,
38
+ };
39
+ };
40
+ const buildPeriod = (row, days) => {
41
+ const period = normalizeWhitespace(getTextContent(queryOne("th.time", row)));
42
+ const cells = queryAll("td", row);
43
+ const slots = cells.map((cell, index) => buildSlot(cell, days[index] ?? ""));
44
+ return { period, slots };
45
+ };
46
+ const buildOtherClass = (row) => {
47
+ const cells = queryAll("td", row);
48
+ const student = queryOne("span.student", cells[0] ?? undefined);
49
+ const classAnchor = student ? queryOne("a", student) : null;
50
+ const className = normalizeWhitespace(classAnchor ? getTextContent(classAnchor) : "");
51
+ const newContentHref = student ? findNewContentHref(student) : null;
52
+ const dayPeriod = normalizeWhitespace(getTextContent(cells[1]));
53
+ const teacher = normalizeWhitespace(getTextContent(cells[2]));
54
+ const classroom = normalizeWhitespace(getTextContent(cells[3]));
55
+ return {
56
+ className,
57
+ href: classAnchor ? getAttribute(classAnchor, "href") : null,
58
+ dayPeriod: dayPeriod.length ? dayPeriod : null,
59
+ teacher: teacher.length ? teacher : null,
60
+ classroom: classroom.length ? classroom : null,
61
+ isNew: newContentHref !== null,
62
+ newContentHref,
63
+ };
64
+ };
65
+ export const parseManaboTimetable = (html) => {
66
+ const document = loadDocument(html);
67
+ const title = normalizeWhitespace(getTextContent(queryOne("#time_table_name", document)));
68
+ const terms = queryAll(".calendar .nav-tabs a.a-load-timetable[archive_id]", document).map((anchor) => {
69
+ const enclosingLi = closest(anchor, "li");
70
+ return {
71
+ archiveId: getAttribute(anchor, "archive_id") ?? "",
72
+ label: normalizeWhitespace(getTextContent(anchor)),
73
+ active: elementHasClass(anchor, "active") || (enclosingLi ? elementHasClass(enclosingLi, "active") : false),
74
+ };
75
+ });
76
+ const viewModes = queryAll(".panel-body .text-right a.a-load-timetable", document).map((anchor) => ({
77
+ archiveId: getAttribute(anchor, "archive_id") ?? "",
78
+ mode: getAttribute(anchor, "mode"),
79
+ label: normalizeWhitespace(getTextContent(anchor)),
80
+ active: elementHasClass(anchor, "active"),
81
+ }));
82
+ const table = queryOne(".table-calendar", document);
83
+ const dayHeaders = table ? queryAll("thead tr th.data", table) : [];
84
+ const days = dayHeaders.map((element) => normalizeWhitespace(getTextContent(element)));
85
+ const periodRows = table ? queryAll("tbody tr", table) : [];
86
+ const periods = periodRows.map((row) => buildPeriod(row, days));
87
+ const otherClasses = queryAll(".other-class table tbody tr", document).map((row) => buildOtherClass(row));
88
+ return ManaboTimetableSchema.safeParse({ title, terms, viewModes, days, periods, otherClasses });
89
+ };
@@ -0,0 +1,294 @@
1
+ import { z } from "zod";
2
+ /** ディレクトリ(週・回)の 1 項目 */
3
+ export declare const ManaboClassDirectoryItemSchema: z.ZodObject<{
4
+ directoryId: z.ZodString;
5
+ title: z.ZodString;
6
+ }, z.core.$strip>;
7
+ export type ManaboClassDirectoryItemDTO = z.infer<typeof ManaboClassDirectoryItemSchema>;
8
+ /** 授業のディレクトリ一覧(左ペイン) */
9
+ export declare const ManaboClassDirectorySchema: z.ZodObject<{
10
+ classId: z.ZodString;
11
+ className: z.ZodString;
12
+ directories: z.ZodArray<z.ZodObject<{
13
+ directoryId: z.ZodString;
14
+ title: z.ZodString;
15
+ }, z.core.$strip>>;
16
+ }, z.core.$strip>;
17
+ export type ManaboClassDirectoryDTO = z.infer<typeof ManaboClassDirectorySchema>;
18
+ /** 教材行の先頭アイコン(種別+受講済み表示) */
19
+ export declare const ManaboClassContentIconSchema: z.ZodObject<{
20
+ pluginIconSrc: z.ZodString;
21
+ isIconChecked: z.ZodBoolean;
22
+ }, z.core.$strip>;
23
+ export type ManaboClassContentIconDTO = z.infer<typeof ManaboClassContentIconSchema>;
24
+ /** 期間・締切などのラベル/値ペア(例: 提出受付期間) */
25
+ export declare const ManaboClassContentDurationSchema: z.ZodObject<{
26
+ label: z.ZodString;
27
+ value: z.ZodString;
28
+ }, z.core.$strip>;
29
+ export type ManaboClassContentDurationDTO = z.infer<typeof ManaboClassContentDurationSchema>;
30
+ /** 教材に添付されたファイル */
31
+ export declare const ManaboClassContentFileSchema: z.ZodObject<{
32
+ fileName: z.ZodString;
33
+ href: z.ZodString;
34
+ icon: z.ZodString;
35
+ }, z.core.$strip>;
36
+ export type ManaboClassContentFileDTO = z.infer<typeof ManaboClassContentFileSchema>;
37
+ /** 開閉エリア内のアクションボタン(受講/結果 等) */
38
+ export declare const ManaboClassContentActionSchema: z.ZodObject<{
39
+ title: z.ZodString;
40
+ href: z.ZodString;
41
+ }, z.core.$strip>;
42
+ export type ManaboClassContentActionDTO = z.infer<typeof ManaboClassContentActionSchema>;
43
+ /** 資料教材の中身(コメント+ファイル群+期間) */
44
+ export declare const ManaboClassContentAttachedFileSchema: z.ZodObject<{
45
+ comment: z.ZodString;
46
+ files: z.ZodArray<z.ZodObject<{
47
+ fileName: z.ZodString;
48
+ href: z.ZodString;
49
+ icon: z.ZodString;
50
+ }, z.core.$strip>>;
51
+ duration: z.ZodArray<z.ZodObject<{
52
+ label: z.ZodString;
53
+ value: z.ZodString;
54
+ }, z.core.$strip>>;
55
+ }, z.core.$strip>;
56
+ export type ManaboClassContentAttachedFileDTO = z.infer<typeof ManaboClassContentAttachedFileSchema>;
57
+ /** 受講型教材のタイトル部(クリックで開閉するリンク) */
58
+ export declare const ManaboClassContentContentSchema: z.ZodObject<{
59
+ title: z.ZodString;
60
+ contentId: z.ZodString;
61
+ pluginKey: z.ZodString;
62
+ duration: z.ZodArray<z.ZodObject<{
63
+ label: z.ZodString;
64
+ value: z.ZodString;
65
+ }, z.core.$strip>>;
66
+ }, z.core.$strip>;
67
+ export type ManaboClassContentContentDTO = z.infer<typeof ManaboClassContentContentSchema>;
68
+ /** 受講型教材の開閉エリア(説明と受講可否/アクション) */
69
+ export declare const ManaboClassContentToggleAreaSchema: z.ZodObject<{
70
+ description: z.ZodString;
71
+ isExpired: z.ZodBoolean;
72
+ isNotAvailableYet: z.ZodBoolean;
73
+ actions: z.ZodArray<z.ZodObject<{
74
+ title: z.ZodString;
75
+ href: z.ZodString;
76
+ }, z.core.$strip>>;
77
+ }, z.core.$strip>;
78
+ export type ManaboClassContentToggleAreaDTO = z.infer<typeof ManaboClassContentToggleAreaSchema>;
79
+ /** 資料(ファイル添付)教材。plugin_key = "resource" 相当で、クリック開閉のない直接表示 */
80
+ export declare const ManaboClassResourceContentSchema: z.ZodObject<{
81
+ type: z.ZodLiteral<"resource">;
82
+ icon: z.ZodObject<{
83
+ pluginIconSrc: z.ZodString;
84
+ isIconChecked: z.ZodBoolean;
85
+ }, z.core.$strip>;
86
+ attachedFile: z.ZodObject<{
87
+ comment: z.ZodString;
88
+ files: z.ZodArray<z.ZodObject<{
89
+ fileName: z.ZodString;
90
+ href: z.ZodString;
91
+ icon: z.ZodString;
92
+ }, z.core.$strip>>;
93
+ duration: z.ZodArray<z.ZodObject<{
94
+ label: z.ZodString;
95
+ value: z.ZodString;
96
+ }, z.core.$strip>>;
97
+ }, z.core.$strip>;
98
+ }, z.core.$strip>;
99
+ export type ManaboClassResourceContentDTO = z.infer<typeof ManaboClassResourceContentSchema>;
100
+ /** 受講型教材(board / quiz / report など)。開閉エリアに説明と受講/結果ボタンを持つ。実際の種別は content.pluginKey を参照 */
101
+ export declare const ManaboClassActivityContentSchema: z.ZodObject<{
102
+ type: z.ZodLiteral<"activity">;
103
+ icon: z.ZodObject<{
104
+ pluginIconSrc: z.ZodString;
105
+ isIconChecked: z.ZodBoolean;
106
+ }, z.core.$strip>;
107
+ content: z.ZodObject<{
108
+ title: z.ZodString;
109
+ contentId: z.ZodString;
110
+ pluginKey: z.ZodString;
111
+ duration: z.ZodArray<z.ZodObject<{
112
+ label: z.ZodString;
113
+ value: z.ZodString;
114
+ }, z.core.$strip>>;
115
+ }, z.core.$strip>;
116
+ toggleArea: z.ZodObject<{
117
+ description: z.ZodString;
118
+ isExpired: z.ZodBoolean;
119
+ isNotAvailableYet: z.ZodBoolean;
120
+ actions: z.ZodArray<z.ZodObject<{
121
+ title: z.ZodString;
122
+ href: z.ZodString;
123
+ }, z.core.$strip>>;
124
+ }, z.core.$strip>;
125
+ }, z.core.$strip>;
126
+ export type ManaboClassActivityContentDTO = z.infer<typeof ManaboClassActivityContentSchema>;
127
+ /** 教材一覧(資料 or 受講型の判別ユニオン配列) */
128
+ export declare const ManaboClassContentSchema: z.ZodObject<{
129
+ contents: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
130
+ type: z.ZodLiteral<"resource">;
131
+ icon: z.ZodObject<{
132
+ pluginIconSrc: z.ZodString;
133
+ isIconChecked: z.ZodBoolean;
134
+ }, z.core.$strip>;
135
+ attachedFile: z.ZodObject<{
136
+ comment: z.ZodString;
137
+ files: z.ZodArray<z.ZodObject<{
138
+ fileName: z.ZodString;
139
+ href: z.ZodString;
140
+ icon: z.ZodString;
141
+ }, z.core.$strip>>;
142
+ duration: z.ZodArray<z.ZodObject<{
143
+ label: z.ZodString;
144
+ value: z.ZodString;
145
+ }, z.core.$strip>>;
146
+ }, z.core.$strip>;
147
+ }, z.core.$strip>, z.ZodObject<{
148
+ type: z.ZodLiteral<"activity">;
149
+ icon: z.ZodObject<{
150
+ pluginIconSrc: z.ZodString;
151
+ isIconChecked: z.ZodBoolean;
152
+ }, z.core.$strip>;
153
+ content: z.ZodObject<{
154
+ title: z.ZodString;
155
+ contentId: z.ZodString;
156
+ pluginKey: z.ZodString;
157
+ duration: z.ZodArray<z.ZodObject<{
158
+ label: z.ZodString;
159
+ value: z.ZodString;
160
+ }, z.core.$strip>>;
161
+ }, z.core.$strip>;
162
+ toggleArea: z.ZodObject<{
163
+ description: z.ZodString;
164
+ isExpired: z.ZodBoolean;
165
+ isNotAvailableYet: z.ZodBoolean;
166
+ actions: z.ZodArray<z.ZodObject<{
167
+ title: z.ZodString;
168
+ href: z.ZodString;
169
+ }, z.core.$strip>>;
170
+ }, z.core.$strip>;
171
+ }, z.core.$strip>]>>;
172
+ }, z.core.$strip>;
173
+ export type ManaboClassContentDTO = z.infer<typeof ManaboClassContentSchema>;
174
+ /** 出席表の 1 行 */
175
+ export declare const ManaboClassEntryRowSchema: z.ZodObject<{
176
+ directory: z.ZodString;
177
+ lectureDate: z.ZodNullable<z.ZodString>;
178
+ status: z.ZodString;
179
+ }, z.core.$strip>;
180
+ export type ManaboClassEntryRowDTO = z.infer<typeof ManaboClassEntryRowSchema>;
181
+ /** 出席表(出欠一覧) */
182
+ export declare const ManaboClassEntrySchema: z.ZodObject<{
183
+ rows: z.ZodArray<z.ZodObject<{
184
+ directory: z.ZodString;
185
+ lectureDate: z.ZodNullable<z.ZodString>;
186
+ status: z.ZodString;
187
+ }, z.core.$strip>>;
188
+ }, z.core.$strip>;
189
+ export type ManaboClassEntryDTO = z.infer<typeof ManaboClassEntrySchema>;
190
+ /** 授業のお知らせ 1 件 */
191
+ export declare const ManaboClassNewsItemSchema: z.ZodObject<{
192
+ id: z.ZodNullable<z.ZodString>;
193
+ newsId: z.ZodNullable<z.ZodString>;
194
+ title: z.ZodString;
195
+ bodyHtml: z.ZodString;
196
+ }, z.core.$strip>;
197
+ export type ManaboClassNewsItemDTO = z.infer<typeof ManaboClassNewsItemSchema>;
198
+ /** 授業のお知らせ一覧 */
199
+ export declare const ManaboClassNewsSchema: z.ZodObject<{
200
+ items: z.ZodArray<z.ZodObject<{
201
+ id: z.ZodNullable<z.ZodString>;
202
+ newsId: z.ZodNullable<z.ZodString>;
203
+ title: z.ZodString;
204
+ bodyHtml: z.ZodString;
205
+ }, z.core.$strip>>;
206
+ }, z.core.$strip>;
207
+ export type ManaboClassNewsDTO = z.infer<typeof ManaboClassNewsSchema>;
208
+ /** 成績評価方法・基準の 1 項目 */
209
+ export declare const ManaboClassSyllabusEvaluationSchema: z.ZodObject<{
210
+ type: z.ZodString;
211
+ weight: z.ZodString;
212
+ }, z.core.$strip>;
213
+ export type ManaboClassSyllabusEvaluationDTO = z.infer<typeof ManaboClassSyllabusEvaluationSchema>;
214
+ /** 教科書・教材 */
215
+ export declare const ManaboClassSyllabusTextbookSchema: z.ZodObject<{
216
+ type: z.ZodString;
217
+ title: z.ZodString;
218
+ }, z.core.$strip>;
219
+ export type ManaboClassSyllabusTextbookDTO = z.infer<typeof ManaboClassSyllabusTextbookSchema>;
220
+ /** 参考文献 */
221
+ export declare const ManaboClassSyllabusReferenceSchema: z.ZodObject<{
222
+ title: z.ZodString;
223
+ code: z.ZodString;
224
+ }, z.core.$strip>;
225
+ export type ManaboClassSyllabusReferenceDTO = z.infer<typeof ManaboClassSyllabusReferenceSchema>;
226
+ /** 授業計画の 1 回分 */
227
+ export declare const ManaboClassSyllabusPlanItemSchema: z.ZodObject<{
228
+ no: z.ZodNumber;
229
+ item: z.ZodString;
230
+ content: z.ZodString;
231
+ }, z.core.$strip>;
232
+ export type ManaboClassSyllabusPlanItemDTO = z.infer<typeof ManaboClassSyllabusPlanItemSchema>;
233
+ /** シラバス詳細 */
234
+ export declare const ManaboClassSyllabusSchema: z.ZodObject<{
235
+ object: z.ZodString;
236
+ goal: z.ZodArray<z.ZodString>;
237
+ method: z.ZodString;
238
+ usedMethods: z.ZodArray<z.ZodString>;
239
+ evaluation: z.ZodArray<z.ZodObject<{
240
+ type: z.ZodString;
241
+ weight: z.ZodString;
242
+ }, z.core.$strip>>;
243
+ textbooks: z.ZodArray<z.ZodObject<{
244
+ type: z.ZodString;
245
+ title: z.ZodString;
246
+ }, z.core.$strip>>;
247
+ references: z.ZodArray<z.ZodObject<{
248
+ title: z.ZodString;
249
+ code: z.ZodString;
250
+ }, z.core.$strip>>;
251
+ officeHour: z.ZodString;
252
+ plan: z.ZodArray<z.ZodObject<{
253
+ no: z.ZodNumber;
254
+ item: z.ZodString;
255
+ content: z.ZodString;
256
+ }, z.core.$strip>>;
257
+ comment: z.ZodString;
258
+ prePostStudy: z.ZodString;
259
+ }, z.core.$strip>;
260
+ export type ManaboClassSyllabusDTO = z.infer<typeof ManaboClassSyllabusSchema>;
261
+ /** 小テスト結果の 1 問 */
262
+ export declare const ManaboClassQuizResultQuestionSchema: z.ZodObject<{
263
+ page: z.ZodString;
264
+ questionNumber: z.ZodString;
265
+ questionText: z.ZodString;
266
+ correctAnswer: z.ZodString;
267
+ studentAnswer: z.ZodString;
268
+ isCorrect: z.ZodNullable<z.ZodBoolean>;
269
+ points: z.ZodNullable<z.ZodNumber>;
270
+ resultIconSrc: z.ZodNullable<z.ZodString>;
271
+ teacherComment: z.ZodNullable<z.ZodString>;
272
+ }, z.core.$strip>;
273
+ export type ManaboClassQuizResultQuestionDTO = z.infer<typeof ManaboClassQuizResultQuestionSchema>;
274
+ /** 小テスト結果ページ全体 */
275
+ export declare const ManaboClassQuizResultSchema: z.ZodObject<{
276
+ score: z.ZodObject<{
277
+ obtained: z.ZodNumber;
278
+ total: z.ZodNumber;
279
+ }, z.core.$strip>;
280
+ paginationSummary: z.ZodNullable<z.ZodString>;
281
+ questions: z.ZodArray<z.ZodObject<{
282
+ page: z.ZodString;
283
+ questionNumber: z.ZodString;
284
+ questionText: z.ZodString;
285
+ correctAnswer: z.ZodString;
286
+ studentAnswer: z.ZodString;
287
+ isCorrect: z.ZodNullable<z.ZodBoolean>;
288
+ points: z.ZodNullable<z.ZodNumber>;
289
+ resultIconSrc: z.ZodNullable<z.ZodString>;
290
+ teacherComment: z.ZodNullable<z.ZodString>;
291
+ }, z.core.$strip>>;
292
+ }, z.core.$strip>;
293
+ export type ManaboClassQuizResultDTO = z.infer<typeof ManaboClassQuizResultSchema>;
294
+ //# sourceMappingURL=manaboClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manaboClass.d.ts","sourceRoot":"","sources":["../../../../src/manabo/types/manaboClass.ts"],"names":[],"mappings":"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"}