@royalschedule/maps 4.0.14 → 4.0.16

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 (348) hide show
  1. package/dist/Additio/from/courses.js.map +1 -1
  2. package/dist/Additio/from/events.js.map +1 -1
  3. package/dist/Additio/from/groups.js.map +1 -1
  4. package/dist/Additio/from/index.js.map +1 -1
  5. package/dist/Additio/from/locations.js.map +1 -1
  6. package/dist/Additio/from/persons.js.map +1 -1
  7. package/dist/Additio/from/schedules.d.ts +7 -6
  8. package/dist/Additio/from/schedules.js +2 -4
  9. package/dist/Additio/from/schedules.js.map +1 -1
  10. package/dist/Additio/from/teachers.js.map +1 -1
  11. package/dist/Additio/to/index.d.ts +11 -9
  12. package/dist/Additio/to/schedules.js +2 -4
  13. package/dist/Additio/to/schedules.js.map +1 -1
  14. package/dist/Admentum/from/courses.js.map +1 -1
  15. package/dist/Admentum/from/events.js.map +1 -1
  16. package/dist/Admentum/from/groups.js.map +1 -1
  17. package/dist/Admentum/from/index.js.map +1 -1
  18. package/dist/Admentum/from/locations.js.map +1 -1
  19. package/dist/Admentum/from/persons.js.map +1 -1
  20. package/dist/Admentum/from/schedules.d.ts +7 -6
  21. package/dist/Admentum/from/schedules.js +2 -4
  22. package/dist/Admentum/from/schedules.js.map +1 -1
  23. package/dist/Admentum/from/teachers.js.map +1 -1
  24. package/dist/Admentum/to/index.d.ts +9 -8
  25. package/dist/Admentum/to/schedules.js +4 -7
  26. package/dist/Admentum/to/schedules.js.map +1 -1
  27. package/dist/Excel/index.d.ts +263 -26
  28. package/dist/Excel/v1/from/index.js +2 -1
  29. package/dist/Excel/v1/from/index.js.map +1 -1
  30. package/dist/Excel/v1/index.d.ts +218 -20
  31. package/dist/Excel/v2/from/index.js +49 -57
  32. package/dist/Excel/v2/from/index.js.map +1 -1
  33. package/dist/Excel/v2/index.d.ts +263 -26
  34. package/dist/IdunSoft/from/courses.js.map +1 -1
  35. package/dist/IdunSoft/from/events.js +1 -2
  36. package/dist/IdunSoft/from/events.js.map +1 -1
  37. package/dist/IdunSoft/from/groups.js.map +1 -1
  38. package/dist/IdunSoft/from/index.js.map +1 -1
  39. package/dist/IdunSoft/from/locations.js.map +1 -1
  40. package/dist/IdunSoft/from/schedules.d.ts +6 -5
  41. package/dist/IdunSoft/from/schedules.js.map +1 -1
  42. package/dist/IdunSoft/from/teachers.js.map +1 -1
  43. package/dist/IdunSoft/to/index.d.ts +2 -1
  44. package/dist/IdunSoft/to/schedules.js +5 -8
  45. package/dist/IdunSoft/to/schedules.js.map +1 -1
  46. package/dist/InfoMentor/to/index.d.ts +2 -1
  47. package/dist/InfoMentor/to/schedules.js +3 -4
  48. package/dist/InfoMentor/to/schedules.js.map +1 -1
  49. package/dist/PlanDigital/from/index.js.map +1 -1
  50. package/dist/PlanDigital/from/schedules.js +9 -11
  51. package/dist/PlanDigital/from/schedules.js.map +1 -1
  52. package/dist/PlanDigital/index.d.ts +74 -59
  53. package/dist/Quiculum/file/to/index.d.ts +10 -9
  54. package/dist/Quiculum/file/to/schedules.js +5 -9
  55. package/dist/Quiculum/file/to/schedules.js.map +1 -1
  56. package/dist/RS/from/division.d.ts +2 -1
  57. package/dist/RS/from/division.js +9 -6
  58. package/dist/RS/from/division.js.map +1 -1
  59. package/dist/RS/from/index.js.map +1 -1
  60. package/dist/RS/from/schedules.d.ts +2 -1
  61. package/dist/RS/from/schedules.js +2 -1
  62. package/dist/RS/from/schedules.js.map +1 -1
  63. package/dist/RS/make-connected.d.ts +17 -16
  64. package/dist/RS/make-connected.js +63 -96
  65. package/dist/RS/make-connected.js.map +1 -1
  66. package/dist/RS/to/index.js.map +1 -1
  67. package/dist/RS/to/initial-configuration.js +4 -6
  68. package/dist/RS/to/initial-configuration.js.map +1 -1
  69. package/dist/RS/to/input/collections.js.map +1 -1
  70. package/dist/RS/to/input/default.js +1 -2
  71. package/dist/RS/to/input/default.js.map +1 -1
  72. package/dist/RS/to/input/dependencies.js +1 -3
  73. package/dist/RS/to/input/dependencies.js.map +1 -1
  74. package/dist/RS/to/input/dynamic-locked-times.js +1 -2
  75. package/dist/RS/to/input/dynamic-locked-times.js.map +1 -1
  76. package/dist/RS/to/input/events.js +5 -3
  77. package/dist/RS/to/input/events.js.map +1 -1
  78. package/dist/RS/to/input/groups.js.map +1 -1
  79. package/dist/RS/to/input/individuals.js +2 -3
  80. package/dist/RS/to/input/individuals.js.map +1 -1
  81. package/dist/RS/to/input/input.js +1 -3
  82. package/dist/RS/to/input/input.js.map +1 -1
  83. package/dist/RS/to/input/intervals.js +2 -4
  84. package/dist/RS/to/input/intervals.js.map +1 -1
  85. package/dist/RS/to/input/periods.js +6 -8
  86. package/dist/RS/to/input/periods.js.map +1 -1
  87. package/dist/RS/to/input/settings.js.map +1 -1
  88. package/dist/RS/to/input/teachers.js.map +1 -1
  89. package/dist/RS/to/input/util/attach-locked-times.js.map +1 -1
  90. package/dist/RS/to/input/util/parse-days.js.map +1 -1
  91. package/dist/RS/to/input/util/parse-group-references.js.map +1 -1
  92. package/dist/RS/to/input/util/parse-intervals.js +2 -4
  93. package/dist/RS/to/input/util/parse-intervals.js.map +1 -1
  94. package/dist/RS/to/input/util/parse-location-references.js +1 -2
  95. package/dist/RS/to/input/util/parse-location-references.js.map +1 -1
  96. package/dist/RS/to/input/util/parse-max-working-hours.js.map +1 -1
  97. package/dist/RS/to/input/util/parse-minimum-break-length.js.map +1 -1
  98. package/dist/RS/to/input/util/util.js +1 -2
  99. package/dist/RS/to/input/util/util.js.map +1 -1
  100. package/dist/RS/to/schedules.js +3 -2
  101. package/dist/RS/to/schedules.js.map +1 -1
  102. package/dist/RS/types/to.d.ts +13 -3
  103. package/dist/RS/types/to.js +6 -0
  104. package/dist/RS/types/to.js.map +1 -0
  105. package/dist/SS12000/from/activities.js +1 -2
  106. package/dist/SS12000/from/activities.js.map +1 -1
  107. package/dist/SS12000/from/calendar-events.js.map +1 -1
  108. package/dist/SS12000/from/duties.js.map +1 -1
  109. package/dist/SS12000/from/groups.js.map +1 -1
  110. package/dist/SS12000/from/index.js.map +1 -1
  111. package/dist/SS12000/from/persons.js.map +1 -1
  112. package/dist/SS12000/from/resources.js.map +1 -1
  113. package/dist/SS12000/from/rooms.js.map +1 -1
  114. package/dist/SS12000/from/syllabuses.js.map +1 -1
  115. package/dist/SS12000/index.d.ts +12567 -9
  116. package/dist/SS12000/to/activities.js.map +1 -1
  117. package/dist/SS12000/to/calendar-events.js.map +1 -1
  118. package/dist/SS12000/to/common.js.map +1 -1
  119. package/dist/SS12000/to/duties.js.map +1 -1
  120. package/dist/SS12000/to/groups.js.map +1 -1
  121. package/dist/SS12000/to/index.d.ts +17 -16
  122. package/dist/SS12000/to/persons.js.map +1 -1
  123. package/dist/SS12000/to/resources.js.map +1 -1
  124. package/dist/SS12000/to/rooms.js.map +1 -1
  125. package/dist/SS12000/to/syllabuses.js.map +1 -1
  126. package/dist/SchoolSoft/api/from/index.js.map +1 -1
  127. package/dist/SchoolSoft/api/from/schedules.js +8 -12
  128. package/dist/SchoolSoft/api/from/schedules.js.map +1 -1
  129. package/dist/SchoolSoft/api/index.d.ts +444 -9
  130. package/dist/SchoolSoft/file/from/index.js.map +1 -1
  131. package/dist/SchoolSoft/file/from/schedules.js +83 -87
  132. package/dist/SchoolSoft/file/from/schedules.js.map +1 -1
  133. package/dist/SchoolSoft/file/index.d.ts +2 -1
  134. package/dist/SchoolSoft/file/to/index.d.ts +3 -2
  135. package/dist/SchoolSoft/file/to/schedules.js +1 -2
  136. package/dist/SchoolSoft/file/to/schedules.js.map +1 -1
  137. package/dist/SchoolSoft/index.d.ts +2 -1
  138. package/dist/Schoolity/txt/to/index.d.ts +2 -1
  139. package/dist/Schoolity/txt/to/schedules.js +5 -12
  140. package/dist/Schoolity/txt/to/schedules.js.map +1 -1
  141. package/dist/Skola24/mdb/from/course-and-events.js +3 -5
  142. package/dist/Skola24/mdb/from/course-and-events.js.map +1 -1
  143. package/dist/Skola24/mdb/from/groups.js.map +1 -1
  144. package/dist/Skola24/mdb/from/index.js.map +1 -1
  145. package/dist/Skola24/mdb/from/locations.js.map +1 -1
  146. package/dist/Skola24/mdb/from/schedule.d.ts +6 -5
  147. package/dist/Skola24/mdb/from/schedule.js.map +1 -1
  148. package/dist/Skola24/mdb/from/teachers.js.map +1 -1
  149. package/dist/Skola24/txt/from/calendar-exceptions.js +1 -2
  150. package/dist/Skola24/txt/from/calendar-exceptions.js.map +1 -1
  151. package/dist/Skola24/txt/from/division.js.map +1 -1
  152. package/dist/Skola24/txt/from/index.js.map +1 -1
  153. package/dist/Skola24/txt/from/period.js +31 -34
  154. package/dist/Skola24/txt/from/period.js.map +1 -1
  155. package/dist/Skola24/txt/from/schedules.d.ts +9 -8
  156. package/dist/Skola24/txt/from/schedules.js +10 -12
  157. package/dist/Skola24/txt/from/schedules.js.map +1 -1
  158. package/dist/Skola24/txt/from/util.js.map +1 -1
  159. package/dist/Skola24/txt/index.d.ts +2 -1
  160. package/dist/Skola24/txt/to/index.d.ts +2 -1
  161. package/dist/Skola24/txt/to/schedules.js +5 -12
  162. package/dist/Skola24/txt/to/schedules.js.map +1 -1
  163. package/dist/common/constants.js.map +1 -1
  164. package/dist/common/functions.js +46 -10
  165. package/dist/common/functions.js.map +1 -1
  166. package/dist/common/get-date.js.map +1 -1
  167. package/dist/common/make-chainable/index.js.map +1 -1
  168. package/dist/common/types.d.ts +3 -6
  169. package/dist/core/from/configurations.js.map +1 -1
  170. package/dist/core/from/courses.js.map +1 -1
  171. package/dist/core/from/events.js +1 -1
  172. package/dist/core/from/events.js.map +1 -1
  173. package/dist/core/from/exceptions.js.map +1 -1
  174. package/dist/core/from/groups.js.map +1 -1
  175. package/dist/core/from/index.js +9 -6
  176. package/dist/core/from/index.js.map +1 -1
  177. package/dist/core/from/locations.js.map +1 -1
  178. package/dist/core/from/locked-times.js.map +1 -1
  179. package/dist/core/from/overlap-groups.js.map +1 -1
  180. package/dist/core/from/periods.js.map +1 -1
  181. package/dist/core/from/persons.js.map +1 -1
  182. package/dist/core/from/root-intervals.js.map +1 -1
  183. package/dist/core/from/schedules.js.map +1 -1
  184. package/dist/core/from/syllabuses.js.map +1 -1
  185. package/dist/core/from/teachers.js.map +1 -1
  186. package/dist/core/index.d.ts +24 -1
  187. package/dist/core/index.js +4 -0
  188. package/dist/core/index.js.map +1 -1
  189. package/dist/core/interfaces/index.d.ts +23 -0
  190. package/dist/core/interfaces/index.js +6 -0
  191. package/dist/core/interfaces/other/companies.d.ts +132 -0
  192. package/dist/core/interfaces/other/companies.js +9 -0
  193. package/dist/core/interfaces/other/companies.js.map +1 -0
  194. package/dist/core/interfaces/other/etc.d.ts +19 -0
  195. package/dist/core/interfaces/other/index.d.ts +6 -0
  196. package/dist/core/interfaces/other/integrations.d.ts +17 -0
  197. package/dist/core/interfaces/other/operations.d.ts +36 -0
  198. package/dist/core/interfaces/other/policies.d.ts +31 -0
  199. package/dist/core/interfaces/other/sync-logs.d.ts +21 -0
  200. package/dist/core/interfaces/other/users.d.ts +35 -0
  201. package/dist/core/interfaces/vertices/companies.d.ts +8 -0
  202. package/dist/core/interfaces/vertices/configurations.d.ts +58 -0
  203. package/dist/core/interfaces/vertices/courses.d.ts +68 -0
  204. package/dist/core/{types → interfaces/vertices}/division-settings.d.ts +31 -29
  205. package/dist/core/interfaces/vertices/divisions.d.ts +31 -0
  206. package/dist/core/interfaces/vertices/events.d.ts +100 -0
  207. package/dist/core/interfaces/vertices/exceptions.d.ts +74 -0
  208. package/dist/core/interfaces/vertices/generations.d.ts +23 -0
  209. package/dist/core/interfaces/vertices/groups.d.ts +53 -0
  210. package/dist/core/interfaces/vertices/index.d.ts +209 -0
  211. package/dist/core/interfaces/vertices/index.js +3 -0
  212. package/dist/core/interfaces/vertices/locations.d.ts +22 -0
  213. package/dist/core/interfaces/vertices/locked-times.d.ts +37 -0
  214. package/dist/core/interfaces/vertices/overlap-groups.d.ts +17 -0
  215. package/dist/core/interfaces/vertices/periods.d.ts +15 -0
  216. package/dist/core/interfaces/vertices/persons.d.ts +32 -0
  217. package/dist/core/interfaces/vertices/properties/belongs-to.d.ts +11 -0
  218. package/dist/core/interfaces/vertices/properties/coalesced.d.ts +8 -0
  219. package/dist/core/interfaces/vertices/properties/days.d.ts +9 -0
  220. package/dist/core/interfaces/vertices/properties/index.d.ts +15 -0
  221. package/dist/core/interfaces/vertices/properties/intervals.d.ts +10 -0
  222. package/dist/core/{types/common → interfaces/vertices/properties}/maximum-schedule-span.d.ts +1 -1
  223. package/dist/core/interfaces/vertices/properties/min-break-length.d.ts +5 -0
  224. package/dist/core/{types/common/planned-schedule-duration.d.ts → interfaces/vertices/properties/planned-scheduled-duration.d.ts} +2 -2
  225. package/dist/core/interfaces/vertices/properties/species.d.ts +9 -0
  226. package/dist/core/interfaces/vertices/properties/tags.d.ts +9 -0
  227. package/dist/core/interfaces/vertices/properties/week.d.ts +22 -0
  228. package/dist/core/interfaces/vertices/properties/week.js +6 -0
  229. package/dist/core/interfaces/vertices/properties/week.js.map +1 -0
  230. package/dist/core/interfaces/vertices/root-intervals.d.ts +14 -0
  231. package/dist/core/interfaces/vertices/syllabuses.d.ts +18 -0
  232. package/dist/core/interfaces/vertices/teachers.d.ts +43 -0
  233. package/dist/core/interfaces/vertices/users.d.ts +8 -0
  234. package/dist/core/interfaces/vertices/util/common.d.ts +28 -0
  235. package/dist/core/interfaces/vertices/util/custom-vertex-export/index.d.ts +31 -0
  236. package/dist/core/interfaces/vertices/util/custom-vertex-export/util.d.ts +51 -0
  237. package/dist/core/interfaces/vertices/util/deep-vertex-export/index.d.ts +64 -0
  238. package/dist/core/interfaces/vertices/util/edges.d.ts +105 -0
  239. package/dist/core/interfaces/vertices/util/index.d.ts +5 -0
  240. package/dist/core/interfaces/vertices/util/keys-of.d.ts +27 -0
  241. package/dist/core/interfaces/vertices/util/serialized-vertex-export.d.ts +12 -0
  242. package/dist/core/interfaces/vertices/util/util.d.ts +76 -0
  243. package/dist/core/interfaces/vertices/util/vertex-query/index.d.ts +44 -0
  244. package/dist/core/interfaces/vertices/util/vertex-query/util.d.ts +13 -0
  245. package/dist/core/interfaces/vertices/util/vertex.d.ts +70 -0
  246. package/dist/core/interfaces/vertices/vertex-query.d.ts +102 -0
  247. package/dist/core/interfaces/vertices/vertex-query.js +94 -0
  248. package/dist/core/interfaces/vertices/vertex-query.js.map +1 -0
  249. package/dist/core/to/configurations.js +2 -3
  250. package/dist/core/to/configurations.js.map +1 -1
  251. package/dist/core/to/courses.js +2 -3
  252. package/dist/core/to/courses.js.map +1 -1
  253. package/dist/core/to/division.js.map +1 -1
  254. package/dist/core/to/events.js +2 -3
  255. package/dist/core/to/events.js.map +1 -1
  256. package/dist/core/to/exceptions.js +4 -4
  257. package/dist/core/to/exceptions.js.map +1 -1
  258. package/dist/core/to/groups.js +2 -3
  259. package/dist/core/to/groups.js.map +1 -1
  260. package/dist/core/to/locations.js +2 -3
  261. package/dist/core/to/locations.js.map +1 -1
  262. package/dist/core/to/locked-times.js +2 -3
  263. package/dist/core/to/locked-times.js.map +1 -1
  264. package/dist/core/to/overlap-groups.js +2 -3
  265. package/dist/core/to/overlap-groups.js.map +1 -1
  266. package/dist/core/to/periods.js +2 -3
  267. package/dist/core/to/periods.js.map +1 -1
  268. package/dist/core/to/persons.js +3 -9
  269. package/dist/core/to/persons.js.map +1 -1
  270. package/dist/core/to/root-intervals.js +2 -3
  271. package/dist/core/to/root-intervals.js.map +1 -1
  272. package/dist/core/to/schedules.d.ts +17 -18
  273. package/dist/core/to/schedules.js.map +1 -1
  274. package/dist/core/to/settings.js +2 -3
  275. package/dist/core/to/settings.js.map +1 -1
  276. package/dist/core/to/syllabuses.js +2 -3
  277. package/dist/core/to/syllabuses.js.map +1 -1
  278. package/dist/core/to/teachers.js +4 -4
  279. package/dist/core/to/teachers.js.map +1 -1
  280. package/dist/core/to/util.d.ts +4 -8
  281. package/dist/core/to/util.js +7 -5
  282. package/dist/core/to/util.js.map +1 -1
  283. package/dist/core/types/common/index.d.ts +4 -41
  284. package/dist/core/types/index.d.ts +108 -112
  285. package/dist/core/util.js +4 -5
  286. package/dist/core/util.js.map +1 -1
  287. package/dist/identify/constants/index.d.ts +1 -1
  288. package/dist/identify/constants/index.js +2 -1
  289. package/dist/identify/constants/index.js.map +1 -1
  290. package/dist/identify/index.js +9 -3
  291. package/dist/identify/index.js.map +1 -1
  292. package/dist/index.d.ts +23 -1
  293. package/dist/index.js +4 -1
  294. package/dist/sdui/from/classes.js.map +1 -1
  295. package/dist/sdui/from/courses.js.map +1 -1
  296. package/dist/sdui/from/holidays.js.map +1 -1
  297. package/dist/sdui/from/index.js.map +1 -1
  298. package/dist/sdui/from/lessons.js +4 -0
  299. package/dist/sdui/from/lessons.js.map +1 -1
  300. package/dist/sdui/from/rooms.js.map +1 -1
  301. package/dist/sdui/from/schedules.d.ts +10 -8
  302. package/dist/sdui/from/schedules.js.map +1 -1
  303. package/dist/sdui/from/school-years.js +0 -1
  304. package/dist/sdui/from/school-years.js.map +1 -1
  305. package/dist/sdui/from/substitution-plans.js.map +1 -1
  306. package/dist/sdui/from/teachers.js.map +1 -1
  307. package/dist/sdui/index.d.ts +1 -1
  308. package/dist/sdui/to/classes.js.map +1 -1
  309. package/dist/sdui/to/courses.js.map +1 -1
  310. package/dist/sdui/to/holidays.js.map +1 -1
  311. package/dist/sdui/to/hours.js.map +1 -1
  312. package/dist/sdui/to/index.d.ts +12 -10
  313. package/dist/sdui/to/lessons.js.map +1 -1
  314. package/dist/sdui/to/rooms.js.map +1 -1
  315. package/dist/sdui/to/schedules.js.map +1 -1
  316. package/dist/sdui/to/school-years.js.map +1 -1
  317. package/dist/sdui/to/substitution-plans.js +3 -6
  318. package/dist/sdui/to/substitution-plans.js.map +1 -1
  319. package/dist/sdui/to/teachers.js.map +1 -1
  320. package/dist/vKlass/from/index.js.map +1 -1
  321. package/dist/vKlass/from/schedule.d.ts +4 -3
  322. package/dist/vKlass/from/schedule.js +2 -2
  323. package/dist/vKlass/from/schedule.js.map +1 -1
  324. package/dist/vKlass/to/schedules.d.ts +4 -4
  325. package/dist/vKlass/to/schedules.js +6 -17
  326. package/dist/vKlass/to/schedules.js.map +1 -1
  327. package/package.json +24 -22
  328. package/dist/core/types/areas.d.ts +0 -10
  329. package/dist/core/types/common/break-lengths.d.ts +0 -5
  330. package/dist/core/types/common/days.d.ts +0 -8
  331. package/dist/core/types/common/intervals.d.ts +0 -20
  332. package/dist/core/types/common/tag.d.ts +0 -9
  333. package/dist/core/types/configurations.d.ts +0 -31
  334. package/dist/core/types/courses.d.ts +0 -60
  335. package/dist/core/types/divisions.d.ts +0 -24
  336. package/dist/core/types/events.d.ts +0 -56
  337. package/dist/core/types/exceptions.d.ts +0 -35
  338. package/dist/core/types/groups.d.ts +0 -44
  339. package/dist/core/types/locations.d.ts +0 -27
  340. package/dist/core/types/locked-times.d.ts +0 -33
  341. package/dist/core/types/overlap-groups.d.ts +0 -14
  342. package/dist/core/types/periods.d.ts +0 -14
  343. package/dist/core/types/persons.d.ts +0 -38
  344. package/dist/core/types/root-intervals.d.ts +0 -13
  345. package/dist/core/types/schedules.d.ts +0 -44
  346. package/dist/core/types/syllabus.d.ts +0 -18
  347. package/dist/core/types/teachers.d.ts +0 -44
  348. package/dist/core/vertex-mapping.d.ts +0 -69
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["warnings: string[]","errors: string[]","groups","teachers"],"sources":["../../../src/PlanDigital/from/schedules.ts"],"sourcesContent":["import { size, countBy, sum } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Types as PlanDigitalTypes } from '../types';\nimport type { InternalIdKey } from '../../core/types/common';\n\nnamespace OutTypes {\n export type group = Omit<CoreTypes.serialized.group, InternalIdKey>;\n export type teacher = Omit<CoreTypes.serialized.teacher, InternalIdKey>;\n export type course = Omit<CoreTypes.serialized.course, InternalIdKey>;\n}\n\ntype Out = {\n groups?: OutTypes.group[];\n teachers?: OutTypes.teacher[];\n courses?: OutTypes.course[];\n meta?: {\n errors?: string[];\n warnings?: string[];\n };\n};\n\nexport default (\n input: PlanDigitalTypes.schedule,\n options: PlanDigitalTypes.options\n): Out => {\n // gather all import related warnings/errors\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // there must be at least a single period\n if (!input['Perioder'].length) {\n errors.push('The schedule data does not contain any periods.');\n return { meta: { errors } };\n }\n\n // ensure that at least one period is selected\n const selectedPeriods = options.selectedPeriods;\n if (!selectedPeriods?.length) {\n errors.push('No periods were selected.');\n return { meta: { errors } };\n }\n\n // ensure that the selected periods exist\n for (const x of options.selectedPeriods ?? []) {\n if (!input['Perioder'].some(p => p.Namn == x)) {\n errors.push(`The selected period ${x} does not exist.`);\n return { meta: { errors } };\n }\n }\n\n // ensure that all periods use the same time unit\n const numUnits = size(countBy(input['Perioder'].map(x => x.Tidsenhet)));\n if (numUnits > 1) {\n errors.push('Different time periods used for different periods.');\n return { meta: { errors } };\n }\n const timeUnit = input['Perioder'][0].Tidsenhet;\n\n\n ////\n //// fetch courses, groups, and teachers\n ////\n const courses = new Array<OutTypes.course>();\n const teacherSet = new Set<string>();\n const groupSet = new Set<string>();\n input['Tabell Tjänstefördelning'].forEach(c => {\n // check if the course should be taken into account\n // (the course must then have some scheduled time during the selected periods)\n const periodTimes = selectedPeriods.map(x => c[`Tid ${x}`] ?? 0);\n if (sum(periodTimes) == 0) return;\n\n const displayName = c[options.displayName ?? 'Gruppnamn'];\n const subject = c['Kurskod'];\n const groups = c['Klass']?.split(',').map(x => x.trim());\n const teachers = c['Sign'] ?.split(',').map(x => x.trim());\n\n // fetch the expected schedule time in whatever units\n const periodTime = size(countBy(periodTimes)) == 1 ? periodTimes[0] : undefined;\n const minutesPerWeek = timeUnit == 'Minuter/Vecka' ? periodTime : undefined;\n const expectedTotalHours = timeUnit == 'Timmar/Period' ? periodTime : undefined;\n\n // add groups and teachers\n teachers.forEach(x => teacherSet.add(x));\n groups.forEach(x => groupSet.add(x));\n\n // add course\n courses.push({\n displayName,\n subject,\n teachers: teachers.map(to => ({ to })),\n groups: groups .map(to => ({ to })),\n\n ...(minutesPerWeek != undefined && { minutesPerWeek }),\n ...(expectedTotalHours != undefined && { expectedTotalHours })\n });\n\n });\n\n\n const teachers = [...teacherSet].map(ids => ({ ids, displayName: ids }));\n const groups = [...groupSet ].map(ids => ({ ids, displayName: ids, species: 'class' as const }));\n return { groups, teachers, courses,\n meta: {\n ...( errors.length && { errors: errors } ),\n ...( warnings.length && { warnings: warnings } )\n }\n };\n};"],"mappings":";;;AAqBA,yBACE,OACA,YACQ;CAER,MAAMA,WAAqB;CAC3B,MAAMC,SAAqB;AAG3B,KAAI,CAAC,MAAM,YAAY,QAAQ;AAC7B,SAAO,KAAK;AACZ,SAAO,EAAE,MAAM,EAAE;;CAInB,MAAM,kBAAkB,QAAQ;AAChC,KAAI,CAAC,iBAAiB,QAAQ;AAC5B,SAAO,KAAK;AACZ,SAAO,EAAE,MAAM,EAAE;;AAInB,MAAK,MAAM,KAAK,QAAQ,mBAAmB,GACzC,KAAI,CAAC,MAAM,YAAY,MAAK,MAAK,EAAE,QAAQ,IAAI;AAC7C,SAAO,KAAK,uBAAuB,EAAE;AACrC,SAAO,EAAE,MAAM,EAAE;;CAKrB,MAAM,WAAW,KAAK,QAAQ,MAAM,YAAY,KAAI,MAAK,EAAE;AAC3D,KAAI,WAAW,GAAG;AAChB,SAAO,KAAK;AACZ,SAAO,EAAE,MAAM,EAAE;;CAEnB,MAAM,WAAW,MAAM,YAAY,GAAG;CAMtC,MAAM,UAAa,IAAI;CACvB,MAAM,6BAAa,IAAI;CACvB,MAAM,2BAAa,IAAI;AACvB,OAAM,4BAA4B,SAAQ,MAAK;EAG7C,MAAM,cAAc,gBAAgB,KAAI,MAAK,EAAE,OAAO,QAAQ;AAC9D,MAAI,IAAI,gBAAgB,EAAG;EAE3B,MAAM,cAAc,EAAE,QAAQ,eAAe;EAC7C,MAAM,UAAc,EAAE;EACtB,MAAMC,WAAc,EAAE,UAAU,MAAM,KAAK,KAAI,MAAK,EAAE;EACtD,MAAMC,aAAc,EAAE,SAAU,MAAM,KAAK,KAAI,MAAK,EAAE;EAGtD,MAAM,aAAqB,KAAK,QAAQ,iBAAiB,IAAI,YAAY,KAAK;EAC9E,MAAM,iBAAqB,YAAY,kBAA0B,aAAiB;EAClF,MAAM,qBAAqB,YAAY,kBAA0B,aAAiB;AAGlF,aAAS,SAAQ,MAAK,WAAW,IAAI;AACrC,WAAO,SAAQ,MAAO,SAAS,IAAI;AAGnC,UAAQ,KAAK;GACX;GACA;GACA,UAAUA,WAAS,KAAI,QAAO,EAAE;GAChC,QAAUD,SAAS,KAAI,QAAO,EAAE;GAEhC,GAAI,kBAAsB,UAAa,EAAE;GACzC,GAAI,sBAAsB,UAAa,EAAE;;;CAM7C,MAAM,WAAW,CAAC,GAAG,YAAY,KAAI,SAAQ;EAAE;EAAK,aAAa;;CACjE,MAAM,SAAW,CAAC,GAAG,UAAY,KAAI,SAAQ;EAAE;EAAK,aAAa;EAAK,SAAS;;AAC/E,QAAO;EAAE;EAAQ;EAAU;EACzB,MAAM;GACJ,GAAK,OAAO,UAAY,EAAY;GACpC,GAAK,SAAS,UAAU,EAAY"}
1
+ {"version":3,"file":"schedules.js","names":["warnings: string[]","errors: string[]","teachers"],"sources":["../../../src/PlanDigital/from/schedules.ts"],"sourcesContent":["import { size, countBy, sum } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Types as PlanDigitalTypes } from '../types';\nimport type { InternalIdKey } from '../../core/types/common';\n\nnamespace OutTypes {\n export type group = Omit<CoreTypes.Serialized.Group, InternalIdKey>;\n export type teacher = Omit<CoreTypes.Serialized.Teacher, InternalIdKey>;\n export type course = Omit<CoreTypes.Serialized.Course, InternalIdKey>;\n}\n\ntype Out = {\n groups?: OutTypes.group[];\n teachers?: OutTypes.teacher[];\n courses?: OutTypes.course[];\n meta?: {\n errors?: string[];\n warnings?: string[];\n };\n};\n\nexport default (\n input: PlanDigitalTypes.schedule,\n options: PlanDigitalTypes.options\n): Out => {\n // gather all import related warnings/errors\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // there must be at least a single period\n if (!input['Perioder'].length) {\n errors.push('The schedule data does not contain any periods.');\n return { meta: { errors } };\n }\n\n // ensure that at least one period is selected\n const selectedPeriods = options.selectedPeriods;\n if (!selectedPeriods?.length) {\n errors.push('No periods were selected.');\n return { meta: { errors } };\n }\n\n // ensure that the selected periods exist\n for (const x of options.selectedPeriods ?? []) {\n if (!input['Perioder'].some(p => p.Namn == x)) {\n errors.push(`The selected period ${x} does not exist.`);\n return { meta: { errors } };\n }\n }\n\n // ensure that all periods use the same time unit\n const numUnits = size(countBy(input['Perioder'].map(x => x.Tidsenhet)));\n if (numUnits > 1) {\n errors.push('Different time periods used for different periods.');\n return { meta: { errors } };\n }\n const timeUnit = input['Perioder'][0].Tidsenhet;\n\n\n ////\n //// fetch courses, groups, and teachers\n ////\n const courses = new Array<OutTypes.course>();\n const teacherSet = new Set<string>();\n const groupSet = new Set<string>();\n input['Tabell Tjänstefördelning'].forEach(c => {\n // check if the course should be taken into account\n // (the course must then have some scheduled time during the selected periods)\n const periodTimes = selectedPeriods.map(x => c[`Tid ${x}`] ?? 0);\n if (sum(periodTimes) == 0) return;\n\n const displayName = c[options.displayName ?? 'Gruppnamn'];\n const subject = c['Kurskod'];\n const groups = c['Klass']?.split(',').map(x => x.trim());\n const teachers = c['Sign'] ?.split(',').map(x => x.trim());\n\n // fetch the expected schedule time in whatever units\n const periodTime = size(countBy(periodTimes)) == 1 ? periodTimes[0] : undefined;\n const minutesPerWeek = timeUnit == 'Minuter/Vecka' ? periodTime : undefined;\n const expectedTotalHours = timeUnit == 'Timmar/Period' ? periodTime : undefined;\n\n // add groups and teachers\n teachers.forEach(x => teacherSet.add(x));\n groups.forEach(x => groupSet.add(x));\n\n // add course\n courses.push({\n displayName,\n subject,\n teachers: teachers.map(to => ({ to })),\n groups: groups .map(to => ({ to })),\n\n ...(minutesPerWeek != undefined && { minutesPerWeek }),\n ...(expectedTotalHours != undefined && { expectedTotalHours })\n });\n\n });\n\n\n const teachers = [...teacherSet].map(ids => ({ ids, displayName: ids }));\n const groups = [...groupSet ].map(ids => ({ ids, displayName: ids, species: 'class' as const }));\n return { groups, teachers, courses,\n meta: {\n ...( errors.length && { errors: errors } ),\n ...( warnings.length && { warnings: warnings } )\n }\n };\n};"],"mappings":";;;AAqBA,yBACE,OACA,YACQ;CAER,MAAMA,WAAqB,EAAE;CAC7B,MAAMC,SAAqB,EAAE;AAG7B,KAAI,CAAC,MAAM,YAAY,QAAQ;AAC7B,SAAO,KAAK,kDAAkD;AAC9D,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;CAI7B,MAAM,kBAAkB,QAAQ;AAChC,KAAI,CAAC,iBAAiB,QAAQ;AAC5B,SAAO,KAAK,4BAA4B;AACxC,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;AAI7B,MAAK,MAAM,KAAK,QAAQ,mBAAmB,EAAE,CAC3C,KAAI,CAAC,MAAM,YAAY,MAAK,MAAK,EAAE,QAAQ,EAAE,EAAE;AAC7C,SAAO,KAAK,uBAAuB,EAAE,kBAAkB;AACvD,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;AAM/B,KADiB,KAAK,QAAQ,MAAM,YAAY,KAAI,MAAK,EAAE,UAAU,CAAC,CAAC,GACxD,GAAG;AAChB,SAAO,KAAK,qDAAqD;AACjE,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;CAE7B,MAAM,WAAW,MAAM,YAAY,GAAG;CAMtC,MAAM,UAAa,IAAI,OAAwB;CAC/C,MAAM,6BAAa,IAAI,KAAa;CACpC,MAAM,2BAAa,IAAI,KAAa;AACpC,OAAM,4BAA4B,SAAQ,MAAK;EAG7C,MAAM,cAAc,gBAAgB,KAAI,MAAK,EAAE,OAAO,QAAQ,EAAE;AAChE,MAAI,IAAI,YAAY,IAAI,EAAG;EAE3B,MAAM,cAAc,EAAE,QAAQ,eAAe;EAC7C,MAAM,UAAc,EAAE;EACtB,MAAM,SAAc,EAAE,UAAU,MAAM,IAAI,CAAC,KAAI,MAAK,EAAE,MAAM,CAAC;EAC7D,MAAMC,aAAc,EAAE,SAAU,MAAM,IAAI,CAAC,KAAI,MAAK,EAAE,MAAM,CAAC;EAG7D,MAAM,aAAqB,KAAK,QAAQ,YAAY,CAAC,IAAI,IAAI,YAAY,KAAK;EAC9E,MAAM,iBAAqB,YAAY,kBAA0B,aAAiB;EAClF,MAAM,qBAAqB,YAAY,kBAA0B,aAAiB;AAGlF,aAAS,SAAQ,MAAK,WAAW,IAAI,EAAE,CAAC;AACxC,SAAO,SAAQ,MAAO,SAAS,IAAI,EAAE,CAAC;AAGtC,UAAQ,KAAK;GACX;GACA;GACA,UAAUA,WAAS,KAAI,QAAO,EAAE,IAAI,EAAE;GACtC,QAAU,OAAS,KAAI,QAAO,EAAE,IAAI,EAAE;GAEtC,GAAI,kBAAsB,UAAa,EAAE,gBAAoB;GAC7D,GAAI,sBAAsB,UAAa,EAAE,oBAAoB;GAC9D,CAAC;GAEF;CAGF,MAAM,WAAW,CAAC,GAAG,WAAW,CAAC,KAAI,SAAQ;EAAE;EAAK,aAAa;EAAK,EAAE;AAExE,QAAO;EAAE,QADQ,CAAC,GAAG,SAAW,CAAC,KAAI,SAAQ;GAAE;GAAK,aAAa;GAAK,SAAS;GAAkB,EAAE;EAClF;EAAU;EACzB,MAAM;GACJ,GAAK,OAAO,UAAY,EAAY,QAAU;GAC9C,GAAK,SAAS,UAAU,EAAY,UAAU;GAC/C;EACF"}
@@ -1,106 +1,121 @@
1
- import { DateType } from "../common/types.js";
2
- import { AvailableLocation, GroupReference, ID, PersonReference } from "../core/types/common/index.js";
3
- import { BreakLength } from "../core/types/common/break-lengths.js";
4
- import { AllowedInterval } from "../core/types/common/intervals.js";
5
- import { Day } from "../core/types/common/days.js";
6
- import { MaximumScheduleSpan } from "../core/types/common/maximum-schedule-span.js";
7
- import { Tag } from "../core/types/common/tag.js";
8
- import { PlannedScheduledDuration } from "../core/types/common/planned-schedule-duration.js";
1
+ import { Day } from "../core/interfaces/vertices/properties/days.js";
2
+ import { Interval } from "../core/interfaces/vertices/properties/intervals.js";
3
+ import { Tag } from "../core/interfaces/vertices/properties/tags.js";
4
+ import { MaximumScheduleSpan } from "../core/interfaces/vertices/properties/maximum-schedule-span.js";
5
+ import { PlannedScheduledDuration } from "../core/interfaces/vertices/properties/planned-scheduled-duration.js";
6
+ import { MinBreakLength } from "../core/interfaces/vertices/properties/min-break-length.js";
9
7
  import { Types } from "./types/index.js";
8
+ import "../index.js";
10
9
 
11
10
  //#region src/PlanDigital/index.d.ts
12
11
  declare class PlanDigitalMap {
13
12
  static from: {
14
13
  schedules: (input: Types.schedule, options: Types.options) => {
15
14
  groups?: {
15
+ ids?: string | undefined;
16
16
  exceptions?: string[] | undefined;
17
17
  lockedTimes?: string[] | undefined;
18
- createdAt?: DateType | undefined;
19
- updatedAt?: DateType | undefined;
20
- lastModifiedBy?: unknown;
21
- ids?: ID | undefined;
22
- belongsTo?: string | undefined;
23
- rank?: number | undefined;
24
- days?: Day[] | undefined;
18
+ is?: "group" | undefined;
25
19
  displayName?: string | undefined;
26
- intervals?: AllowedInterval[] | undefined;
27
- minBreakLength?: BreakLength | undefined;
20
+ createdAt?: string | undefined;
21
+ updatedAt?: string | undefined;
22
+ lastModifiedBy?: string | undefined;
23
+ rootInterval?: string | undefined;
24
+ belongsTo?: string | undefined;
25
+ tags?: Tag[] | undefined;
26
+ minBreakLength?: number | undefined;
27
+ maxNumWorkingHours?: number | false | undefined;
28
+ maxNumDailyWorkingHours?: number | number[] | false | undefined;
28
29
  maximumScheduleSpan?: MaximumScheduleSpan | undefined;
29
30
  forbidOverlappingEvents?: boolean | undefined;
30
31
  disableDayLengthPunishment?: boolean | undefined;
31
32
  weight?: number | undefined;
32
33
  species?: "class" | undefined;
34
+ intervals?: Interval[] | undefined;
35
+ days?: Day[] | undefined;
33
36
  parentGroups?: string[] | undefined;
34
37
  subGroups?: string[] | undefined;
35
38
  lunch?: string[] | undefined;
36
39
  members?: string[] | undefined;
37
- rootInterval?: string | undefined;
38
- tags?: Tag[] | undefined;
39
- maxNumWorkingHours?: number | boolean | undefined;
40
- maxNumDailyWorkingHours?: number | number[] | boolean | undefined;
40
+ derivedParentGroups?: {
41
+ implicit?: boolean | undefined;
42
+ explicit?: boolean | undefined;
43
+ group: string;
44
+ }[] | undefined;
41
45
  }[];
42
46
  teachers?: {
47
+ ids?: string | undefined;
43
48
  exceptions?: string[] | undefined;
44
49
  lockedTimes?: string[] | undefined;
45
- createdAt?: DateType | undefined;
46
- updatedAt?: DateType | undefined;
47
- lastModifiedBy?: unknown;
48
- ids?: ID | undefined;
49
- belongsTo?: string | undefined;
50
- rank?: number | undefined;
51
- days?: Day[] | undefined;
50
+ is?: "teacher" | undefined;
52
51
  displayName?: string | undefined;
53
- intervals?: AllowedInterval[] | undefined;
54
- minBreakLength?: BreakLength | undefined;
52
+ createdAt?: string | undefined;
53
+ updatedAt?: string | undefined;
54
+ lastModifiedBy?: string | undefined;
55
+ rootInterval?: string | undefined;
56
+ person?: string | undefined;
57
+ belongsTo?: string | undefined;
58
+ tags?: Tag[] | undefined;
59
+ minBreakLength?: number | undefined;
60
+ maxNumWorkingHours?: number | false | undefined;
61
+ maxNumDailyWorkingHours?: number | number[] | false | undefined;
55
62
  maximumScheduleSpan?: MaximumScheduleSpan | undefined;
56
63
  forbidOverlappingEvents?: boolean | undefined;
57
64
  disableDayLengthPunishment?: boolean | undefined;
58
65
  weight?: number | undefined;
66
+ intervals?: Interval[] | undefined;
67
+ days?: Day[] | undefined;
59
68
  lunch?: string[] | undefined;
60
- rootInterval?: string | undefined;
61
- tags?: Tag[] | undefined;
62
- maxNumWorkingHours?: number | boolean | undefined;
63
- maxNumDailyWorkingHours?: number | number[] | boolean | undefined;
64
- plannedScheduledDuration?: PlannedScheduledDuration | undefined;
65
- person?: string | undefined;
66
69
  signature?: string | undefined;
70
+ plannedScheduledDuration?: PlannedScheduledDuration | undefined;
71
+ complementaryTimes?: string[] | undefined;
67
72
  }[];
68
73
  courses?: {
74
+ ids?: string | undefined;
69
75
  exceptions?: string[] | undefined;
70
- groups?: GroupReference<string, string>[] | undefined;
71
- teachers?: PersonReference<string>[] | undefined;
72
- locations?: AvailableLocation<string>[] | undefined;
76
+ groups?: {
77
+ groupIndex?: number | undefined;
78
+ to: string;
79
+ exclude?: string[] | undefined;
80
+ }[] | undefined;
81
+ teachers?: {
82
+ groupIndex?: number | undefined;
83
+ to: string;
84
+ }[] | undefined;
85
+ locations?: {
86
+ groupIndex?: number | undefined;
87
+ rank?: number | undefined;
88
+ locations: [string];
89
+ }[] | undefined;
73
90
  events?: string[] | undefined;
74
91
  lockedTimes?: string[] | undefined;
75
- createdAt?: DateType | undefined;
76
- updatedAt?: DateType | undefined;
77
- lastModifiedBy?: unknown;
78
- ids?: ID | undefined;
79
- belongsTo?: string | undefined;
80
- type?: string | undefined;
81
- days?: Day[] | undefined;
82
- weeks?: number[] | undefined;
92
+ is?: "course" | undefined;
83
93
  displayName?: string | undefined;
94
+ createdAt?: string | undefined;
95
+ updatedAt?: string | undefined;
96
+ lastModifiedBy?: string | undefined;
97
+ overlapGroup?: string | undefined;
84
98
  period?: string | undefined;
85
- intervals?: AllowedInterval[] | undefined;
86
- minBreakLength?: BreakLength | undefined;
87
- weight?: number | undefined;
99
+ syllabus?: string | undefined;
100
+ belongsTo?: string | undefined;
101
+ type?: string | undefined;
88
102
  tags?: Tag[] | undefined;
89
- color?: string | undefined;
90
- participants?: PersonReference<string>[] | undefined;
91
- density?: number | undefined;
103
+ minBreakLength?: MinBreakLength | undefined;
104
+ weight?: number | undefined;
105
+ intervals?: Interval[] | undefined;
106
+ days?: Day[] | undefined;
92
107
  subject?: string | undefined;
108
+ color?: string | undefined;
93
109
  eventDurationVariance?: number | undefined;
94
- totalTime?: string | undefined;
95
- comment?: string | undefined;
96
- startDate?: DateType | undefined;
97
- endDate?: DateType | undefined;
98
110
  centerOfAttraction?: string | null | undefined;
99
- syllabus?: string | undefined;
100
- overlapGroup?: string | null | undefined;
111
+ density?: number | undefined;
101
112
  plannedDuration?: string | undefined;
102
113
  minutesPerWeek?: number | undefined;
103
114
  expectedTotalHours?: number | undefined;
115
+ participants?: {
116
+ groupIndex?: number | undefined;
117
+ to: string;
118
+ }[] | undefined;
104
119
  }[];
105
120
  meta?: {
106
121
  errors?: string[];
@@ -1,18 +1,19 @@
1
1
  import { Types } from "../../../core/types/index.js";
2
+ import "../../../index.js";
2
3
  import * as xlsx0 from "xlsx";
3
4
 
4
5
  //#region src/Quiculum/file/to/index.d.ts
5
6
  declare class export_default {
6
7
  static schedules: (schedule: {
7
- division: Types.division;
8
- settings: Types.divisionSettings;
9
- groups: Types.group[];
10
- teachers: Types.teacher[];
11
- locations: Types.location[];
12
- courses: Types.course[];
13
- events: Types.event[];
14
- periods: Types.period[];
15
- persons: Types.person[];
8
+ division: Types.Deep.Division;
9
+ settings: Types.Deep.Settings;
10
+ groups: Types.Deep.Group[];
11
+ teachers: Types.Deep.Teacher[];
12
+ locations: Types.Deep.Location[];
13
+ courses: Types.Deep.Course[];
14
+ events: Types.Deep.Event[];
15
+ periods: Types.Deep.Period[];
16
+ persons: Types.Deep.Person[];
16
17
  }) => xlsx0.WorkBook;
17
18
  }
18
19
  //#endregion
@@ -5,8 +5,7 @@ import XLSX from "xlsx";
5
5
  //#region src/Quiculum/file/to/schedules.ts
6
6
  var schedules_default = (schedule) => {
7
7
  const options = { idKey: "id" };
8
- const did = getVertexId(schedule.division, options);
9
- if (!did) throw new Error("division id is undefined");
8
+ if (!getVertexId(schedule.division, options)) throw new Error("division id is undefined");
10
9
  const periodsMap = new Map(schedule.periods?.map((p) => [getVertexId(p, options), p]));
11
10
  const defaultPeriod = { ranges: [{
12
11
  start: schedule.division.start,
@@ -36,11 +35,9 @@ var schedules_default = (schedule) => {
36
35
  if (!course) return null;
37
36
  const courseName = course.displayName ?? "";
38
37
  const inLocation = e.inLocations?.at(0);
39
- const location = inLocation ? locationsMap.get(getVertexId(inLocation, options)) : void 0;
40
- const locationName = location?.displayName;
38
+ const locationName = (inLocation ? locationsMap.get(getVertexId(inLocation, options)) : void 0)?.displayName;
41
39
  const _period = e.period ?? course.period ?? schedule.settings.period;
42
- const period = periodsMap.get(_period ? getVertexId(_period, options) : void 0);
43
- const weeksInPeriod = period?.ranges.map((x) => {
40
+ const weeksInPeriod = periodsMap.get(_period ? getVertexId(_period, options) : void 0)?.ranges.map((x) => {
44
41
  const start$1 = moment.utc(x.start);
45
42
  const end$1 = moment.utc(x.end);
46
43
  const weeks = new Array();
@@ -50,7 +47,7 @@ var schedules_default = (schedule) => {
50
47
  }
51
48
  return weeks;
52
49
  }).flat();
53
- const allWeeks = defaultPeriod?.ranges.map((x) => {
50
+ const excludedWeeks = (defaultPeriod?.ranges.map((x) => {
54
51
  const start$1 = moment.utc(x.start);
55
52
  const end$1 = moment.utc(x.end);
56
53
  const weeks = new Array();
@@ -59,8 +56,7 @@ var schedules_default = (schedule) => {
59
56
  start$1.add(1, "week");
60
57
  }
61
58
  return weeks;
62
- }).flat();
63
- const excludedWeeks = allWeeks.filter((x) => !weeksInPeriod?.includes(x)).join(", ");
59
+ }).flat()).filter((x) => !weeksInPeriod?.includes(x)).join(", ");
64
60
  const holidaysInPeriod = holidaysInDays.filter((x) => {
65
61
  return weeksInPeriod?.includes(x.week());
66
62
  }).map((x) => x.format("YYYY-MM-DD")).join(", ");
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["options: BaseOptions","defaultPeriod: Pick<CoreTypes.period, 'ranges'>","holidaysInDays: moment.Moment[]","start","end"],"sources":["../../../../src/Quiculum/file/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport XLSX from 'xlsx';\nimport type { Types as CoreTypes } from '../../../core/types';\nimport type { BaseOptions } from '../../../common/types';\nimport { getVertexId } from '../../../core/util';\n\ntype Schedule = {\n division: CoreTypes.division;\n settings: CoreTypes.divisionSettings;\n groups: CoreTypes.group[];\n teachers: CoreTypes.teacher[];\n locations: CoreTypes.location[];\n courses: CoreTypes.course[];\n events: CoreTypes.event[];\n periods: CoreTypes.period[];\n persons: CoreTypes.person[];\n};\n\n\n\nexport default (\n schedule: Schedule,\n): XLSX.WorkBook => {\n const options: BaseOptions = { idKey: 'id' };\n // must have a division id\n const did = getVertexId(schedule.division, options);\n if (!did) throw new Error('division id is undefined');\n\n // a map of period id -> period\n const periodsMap = new Map(schedule.periods?.map((p) => [getVertexId(p, options) as string | undefined, p as Pick<CoreTypes.period, 'ranges'>]));\n const defaultPeriod: Pick<CoreTypes.period, 'ranges'> = {\n ranges: [{ start: schedule.division.start, end: schedule.division.end }]\n };\n periodsMap.set(undefined, defaultPeriod);\n\n // a map of course id -> course\n const coursesMap = new Map(schedule.courses?.map((c) => [getVertexId(c, options), c]));\n\n // a map of location id -> location\n const locationsMap = new Map(schedule.locations?.map((l) => [getVertexId(l, options), l]));\n\n // get start and end dates from division in YYYY-MM-DD format\n const startDate = moment.utc(schedule.division.start).format('YYYY-MM-DD');\n const endDate = moment.utc(schedule.division.end).format('YYYY-MM-DD');\n // get schoolyear from division start date in format YY/YY (only considers the start year, for example 2023-01-01 becomes 23/24)\n const schoolYear = moment.utc(schedule.division.start).format('YY') + '/' +\n moment.utc(schedule.division.start).add(1, 'year').format('YY');\n\n const holidays = schedule.settings?.calendarExceptions\n ?.filter((x) => x.start && x.end);\n\n\n const holidaysInDays: moment.Moment[] = [];\n\n if (holidays) {\n for (const holiday of holidays) {\n const start = moment.utc(holiday.start);\n const end = moment.utc(holiday.end);\n while (start.isBefore(end)) {\n // Only push weekdays (Monday to Friday)\n if (start.isoWeekday() < 6) {\n holidaysInDays.push(start.clone());\n }\n start.add(1, 'day');\n }\n }\n }\n\n ////\n //// Activities (events)\n ////\n const activities = schedule.events\n ?.map((e) => {\n // must have start and end\n if (!e.start || !e.end) return null;\n const start = moment.utc(e.start);\n const end = moment.utc(e.end);\n\n // must have course\n const course = e.course ? coursesMap.get(getVertexId(e.course, options)) : undefined;\n if (!course) return null;\n const courseName = course.displayName ?? '';\n\n // Location\n const inLocation = e.inLocations?.at(0);\n const location = inLocation ? locationsMap.get(getVertexId(inLocation, options)) : undefined;\n const locationName = location?.displayName;\n\n const _period = e.period ?? course.period ?? schedule.settings.period;\n const period = periodsMap.get(_period ? getVertexId(_period, options) : undefined);\n\n const weeksInPeriod = period?.ranges\n .map((x) => {\n // fetch all weeks between start and end\n const start = moment.utc(x.start);\n const end = moment.utc(x.end);\n const weeks = new Array<number>();\n while (start.isBefore(end)) {\n weeks.push(start.week());\n start.add(1, 'week');\n }\n return weeks;\n })\n .flat();\n\n const allWeeks = defaultPeriod?.ranges\n .map((x) => {\n // fetch all weeks between start and end\n const start = moment.utc(x.start);\n const end = moment.utc(x.end);\n const weeks = new Array<number>();\n while (start.isBefore(end)) {\n weeks.push(start.week());\n start.add(1, 'week');\n }\n return weeks;\n })\n .flat();\n\n const excludedWeeks = allWeeks\n .filter((x) => !weeksInPeriod?.includes(x))\n .join(', ');\n\n // Get the holidays in the period (don't include holidays that are not in the period)\n const holidaysInPeriod = holidaysInDays\n .filter((x) => {\n return weeksInPeriod?.includes(x.week());\n })\n .map((x) => x.format('YYYY-MM-DD'))\n .join(', ');\n\n return {\n DayOfWeek: (start.day() + 6) % 7,\n Duration: end.diff(start, 'minutes'),\n EndDate: endDate,\n Name: courseName,\n StartDate: startDate,\n StartTime: start.format('HH:mm'),\n ExcludeDates: holidaysInPeriod,\n ExcludeWeeks: excludedWeeks,\n ExternalActivityID: e.ids,\n ExternalLocationID: '',\n ExternalTeachingGroupID: '',\n Location: locationName,\n SchoolYear: schoolYear,\n Teachers: ''\n };\n })\n .filter((x): x is NonNullable<typeof x> => !!x);\n\n ////\n //// store in workbook\n ////\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(activities), 'Activities');\n\n return wb;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"schedules.js","names":["options: BaseOptions","defaultPeriod: Pick<CoreTypes.Deep.Period, 'ranges'>","holidaysInDays: moment.Moment[]","start","end"],"sources":["../../../../src/Quiculum/file/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport XLSX from 'xlsx';\nimport type { Types as CoreTypes } from '../../../core/types';\nimport type { BaseOptions } from '../../../common/types';\nimport { getVertexId } from '../../../core/util';\n\ntype Schedule = {\n division: CoreTypes.Deep.Division;\n settings: CoreTypes.Deep.Settings;\n groups: CoreTypes.Deep.Group[];\n teachers: CoreTypes.Deep.Teacher[];\n locations: CoreTypes.Deep.Location[];\n courses: CoreTypes.Deep.Course[];\n events: CoreTypes.Deep.Event[];\n periods: CoreTypes.Deep.Period[];\n persons: CoreTypes.Deep.Person[];\n};\n\n\n\nexport default (\n schedule: Schedule,\n): XLSX.WorkBook => {\n const options: BaseOptions = { idKey: 'id' };\n // must have a division id\n const did = getVertexId(schedule.division, options);\n if (!did) throw new Error('division id is undefined');\n\n // a map of period id -> period\n const periodsMap = new Map(schedule.periods?.map((p) => [getVertexId(p, options) as string | undefined, p as Pick<CoreTypes.Deep.Period, 'ranges'>]));\n const defaultPeriod: Pick<CoreTypes.Deep.Period, 'ranges'> = {\n ranges: [{ start: schedule.division.start, end: schedule.division.end }]\n };\n periodsMap.set(undefined, defaultPeriod);\n\n // a map of course id -> course\n const coursesMap = new Map(schedule.courses?.map((c) => [getVertexId(c, options), c]));\n\n // a map of location id -> location\n const locationsMap = new Map(schedule.locations?.map((l) => [getVertexId(l, options), l]));\n\n // get start and end dates from division in YYYY-MM-DD format\n const startDate = moment.utc(schedule.division.start).format('YYYY-MM-DD');\n const endDate = moment.utc(schedule.division.end).format('YYYY-MM-DD');\n // get schoolyear from division start date in format YY/YY (only considers the start year, for example 2023-01-01 becomes 23/24)\n const schoolYear = moment.utc(schedule.division.start).format('YY') + '/' +\n moment.utc(schedule.division.start).add(1, 'year').format('YY');\n\n const holidays = schedule.settings?.calendarExceptions\n ?.filter((x) => x.start && x.end);\n\n\n const holidaysInDays: moment.Moment[] = [];\n\n if (holidays) {\n for (const holiday of holidays) {\n const start = moment.utc(holiday.start);\n const end = moment.utc(holiday.end);\n while (start.isBefore(end)) {\n // Only push weekdays (Monday to Friday)\n if (start.isoWeekday() < 6) {\n holidaysInDays.push(start.clone());\n }\n start.add(1, 'day');\n }\n }\n }\n\n ////\n //// Activities (events)\n ////\n const activities = schedule.events\n ?.map((e) => {\n // must have start and end\n if (!e.start || !e.end) return null;\n const start = moment.utc(e.start);\n const end = moment.utc(e.end);\n\n // must have course\n const course = e.course ? coursesMap.get(getVertexId(e.course, options)) : undefined;\n if (!course) return null;\n const courseName = course.displayName ?? '';\n\n // Location\n const inLocation = e.inLocations?.at(0);\n const location = inLocation ? locationsMap.get(getVertexId(inLocation, options)) : undefined;\n const locationName = location?.displayName;\n\n const _period = e.period ?? course.period ?? schedule.settings.period;\n const period = periodsMap.get(_period ? getVertexId(_period, options) : undefined);\n\n const weeksInPeriod = period?.ranges\n .map((x) => {\n // fetch all weeks between start and end\n const start = moment.utc(x.start);\n const end = moment.utc(x.end);\n const weeks = new Array<number>();\n while (start.isBefore(end)) {\n weeks.push(start.week());\n start.add(1, 'week');\n }\n return weeks;\n })\n .flat();\n\n const allWeeks = defaultPeriod?.ranges\n .map((x) => {\n // fetch all weeks between start and end\n const start = moment.utc(x.start);\n const end = moment.utc(x.end);\n const weeks = new Array<number>();\n while (start.isBefore(end)) {\n weeks.push(start.week());\n start.add(1, 'week');\n }\n return weeks;\n })\n .flat();\n\n const excludedWeeks = allWeeks\n .filter((x) => !weeksInPeriod?.includes(x))\n .join(', ');\n\n // Get the holidays in the period (don't include holidays that are not in the period)\n const holidaysInPeriod = holidaysInDays\n .filter((x) => {\n return weeksInPeriod?.includes(x.week());\n })\n .map((x) => x.format('YYYY-MM-DD'))\n .join(', ');\n\n return {\n DayOfWeek: (start.day() + 6) % 7,\n Duration: end.diff(start, 'minutes'),\n EndDate: endDate,\n Name: courseName,\n StartDate: startDate,\n StartTime: start.format('HH:mm'),\n ExcludeDates: holidaysInPeriod,\n ExcludeWeeks: excludedWeeks,\n ExternalActivityID: e.ids,\n ExternalLocationID: '',\n ExternalTeachingGroupID: '',\n Location: locationName,\n SchoolYear: schoolYear,\n Teachers: ''\n };\n })\n .filter((x): x is NonNullable<typeof x> => !!x);\n\n ////\n //// store in workbook\n ////\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(activities), 'Activities');\n\n return wb;\n};\n"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Types } from "../../core/types/index.js";
2
+ import "../../core/index.js";
2
3
 
3
4
  //#region src/RS/from/division.d.ts
4
- declare function division(input: unknown): Pick<Types.division, 'displayName' | 'start' | 'end'>;
5
+ declare function division(input: unknown): undefined | Pick<Types.Deep.Division, 'displayName' | 'start' | 'end'>;
5
6
  //#endregion
6
7
  export { division };
7
8
  //# sourceMappingURL=division.d.ts.map
@@ -1,12 +1,15 @@
1
1
  //#region src/RS/from/division.ts
2
2
  function division(input) {
3
- const division$1 = {};
4
- if (!input || typeof input != "object" || !("meta" in input) || !input.meta || typeof input.meta != "object" || !("division" in input.meta) || !input.meta.division || typeof input.meta.division != "object") return division$1;
3
+ if (!input || typeof input != "object" || !("meta" in input) || !input.meta || typeof input.meta != "object" || !("division" in input.meta) || !input.meta.division || typeof input.meta.division != "object") return;
5
4
  const d = input.meta.division;
6
- if ("displayName" in d && typeof d.displayName == "string") division$1.displayName = d.displayName;
7
- if ("start" in d && typeof d.start == "string") division$1.start = d.start;
8
- if ("end" in d && typeof d.end == "string") division$1.end = d.end;
9
- return division$1;
5
+ if (!("displayName" in d && typeof d.displayName == "string")) return;
6
+ if (!("start" in d && typeof d.start == "string")) return;
7
+ if (!("end" in d && typeof d.end == "string")) return;
8
+ return {
9
+ displayName: d.displayName,
10
+ start: d.start,
11
+ end: d.end
12
+ };
10
13
  }
11
14
 
12
15
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"division.js","names":["division: Pick<CoreTypes.division, 'displayName' | 'start' | 'end'>","division"],"sources":["../../../src/RS/from/division.ts"],"sourcesContent":["import type { CoreTypes } from '../../core';\n\nexport function division (input: unknown): Pick<CoreTypes.division, 'displayName' | 'start' | 'end'> {\n const division: Pick<CoreTypes.division, 'displayName' | 'start' | 'end'> = {};\n\n if ( !input || typeof input != 'object'\n || !('meta' in input ) || !input.meta || typeof input.meta != 'object'\n || !('division' in input.meta) || !input.meta.division || typeof input.meta.division != 'object'\n ) return division;\n\n const d = input.meta.division;\n\n if ('displayName' in d && typeof d.displayName == 'string') division.displayName = d.displayName;\n if ('start' in d && typeof d.start == 'string') division.start = d.start;\n if ('end' in d && typeof d.end == 'string') division.end = d.end;\n\n return division;\n};"],"mappings":";AAEA,SAAgB,SAAU,OAA2E;CACnG,MAAMA,aAAsE;AAE5E,KAAoC,CAAC,SAAuB,OAAO,SAAuB,YACrF,EAAE,UAAc,UAAe,CAAC,MAAM,QAAiB,OAAO,MAAM,QAAiB,YACrF,EAAE,cAAc,MAAM,SAAS,CAAC,MAAM,KAAK,YAAY,OAAO,MAAM,KAAK,YAAY,SACxF,QAAOC;CAET,MAAM,IAAI,MAAM,KAAK;AAErB,KAAI,iBAAiB,KAAK,OAAO,EAAE,eAAe,SAAU,YAAS,cAAc,EAAE;AACrF,KAAI,WAAiB,KAAK,OAAO,EAAE,SAAe,SAAU,YAAS,QAAc,EAAE;AACrF,KAAI,SAAiB,KAAK,OAAO,EAAE,OAAe,SAAU,YAAS,MAAc,EAAE;AAErF,QAAOA"}
1
+ {"version":3,"file":"division.js","names":[],"sources":["../../../src/RS/from/division.ts"],"sourcesContent":["import type { CoreTypes } from '../../core';\n\nexport function division (input: unknown): undefined | Pick<CoreTypes.Deep.Division, 'displayName' | 'start' | 'end'> {\n\n if ( !input || typeof input != 'object'\n || !('meta' in input ) || !input.meta || typeof input.meta != 'object'\n || !('division' in input.meta) || !input.meta.division || typeof input.meta.division != 'object'\n ) return;\n\n const d = input.meta.division;\n\n if (!('displayName' in d && typeof d.displayName == 'string')) return;\n if (!('start' in d && typeof d.start == 'string')) return;\n if (!('end' in d && typeof d.end == 'string')) return;\n\n const division: Pick<CoreTypes.Deep.Division, 'displayName' | 'start' | 'end'> = {\n displayName: d.displayName,\n start: d.start,\n end: d.end,\n };\n return division;\n};"],"mappings":";AAEA,SAAgB,SAAU,OAA4F;AAEpH,KAAoC,CAAC,SAAuB,OAAO,SAAuB,YACrF,EAAE,UAAc,UAAe,CAAC,MAAM,QAAiB,OAAO,MAAM,QAAiB,YACrF,EAAE,cAAc,MAAM,SAAS,CAAC,MAAM,KAAK,YAAY,OAAO,MAAM,KAAK,YAAY,SACxF;CAEF,MAAM,IAAI,MAAM,KAAK;AAErB,KAAI,EAAE,iBAAiB,KAAK,OAAO,EAAE,eAAe,UAAW;AAC/D,KAAI,EAAE,WAAiB,KAAK,OAAO,EAAE,SAAe,UAAW;AAC/D,KAAI,EAAE,SAAiB,KAAK,OAAO,EAAE,OAAe,UAAW;AAO/D,QALiF;EAC/E,aAAa,EAAE;EACf,OAAa,EAAE;EACf,KAAa,EAAE;EAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/RS/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport { division } from './division';\nimport { schedules } from './schedules';\n\nexport default {\n division: division,\n schedules: schedules,\n} satisfies FromInterface;"],"mappings":";;;;AAIA,mBAAe;CACF;CACA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/RS/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport { division } from './division';\nimport { schedules } from './schedules';\n\nexport default {\n division: division,\n schedules: schedules,\n} satisfies FromInterface;"],"mappings":";;;;AAIA,mBAAe;CACF;CACA;CACZ"}
@@ -1,8 +1,9 @@
1
1
  import { Types as Types$1 } from "../../core/types/index.js";
2
+ import "../../core/index.js";
2
3
  import { Types } from "../types/index.js";
3
4
 
4
5
  //#region src/RS/from/schedules.d.ts
5
- declare function schedules(input: Partial<Types.toOutput>, options: Pick<Types.toOptions, 'idKey'>): Partial<Types$1.serialized.schedule>;
6
+ declare function schedules(input: Partial<Types.toOutput>, options?: Pick<Types.toOptions, 'idKey'>): Partial<Types$1.SerializedWithOptionalId.Schedule>;
6
7
  //#endregion
7
8
  export { schedules };
8
9
  //# sourceMappingURL=schedules.d.ts.map
@@ -3,7 +3,8 @@ import { COLLECTION_ID } from "../to/input/util/util.js";
3
3
  import moment from "moment";
4
4
 
5
5
  //#region src/RS/from/schedules.ts
6
- function schedules(input, options) {
6
+ function schedules(input, options = {}) {
7
+ if (!options.idKey) options.idKey = "id";
7
8
  const warnings = [];
8
9
  const schedule = input.coreData;
9
10
  const eventConfigurations = input.output?.at(0)?.events;
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["warnings: string[]"],"sources":["../../../src/RS/from/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { Types } from '../types';\nimport { COLLECTION_ID } from '../to/input/util/util';\nimport { getVertexId } from '../../core/util';\nimport type { CoreTypes } from '../../core';\n\nexport function schedules (\n input: Partial<Types.toOutput>,\n options: Pick<Types.toOptions, 'idKey'>\n): Partial<CoreTypes.serialized.schedule> {\n const warnings: string[] = [];\n\n const schedule = input.coreData;\n const eventConfigurations = input.output?.at(0)?.events;\n\n if (!schedule ) throw new Error('Missing `coreData` in input.');\n if (!eventConfigurations) throw new Error('Missing `output.events` in input.');\n\n // check on later to ensure that all events are updated\n const eventsToUpdate = new Set(schedule.events?.map(x => getVertexId(x, options)));\n\n eventConfigurations.forEach(({ id: collectionAndId, ...placement }) => {\n // locate the corresponding event/locked time\n const collection = collectionAndId.split('.')[0] == COLLECTION_ID.events ? 'events' : 'lockedTimes';\n const id = collectionAndId.split('.')[1];\n const event = schedule[collection]?.find(x => getVertexId(x, options) == id);\n\n if (!event) {\n warnings.push(`Could not find ${id} (${collectionAndId}) in ${collection} collection.`);\n return;\n }\n\n event.parked = false;\n event.start = moment.utc('1970-01-05T00:00').add(placement.day, 'days').add(placement.start, 'minutes').toISOString();\n event.end = moment.utc('1970-01-05T00:00').add(placement.day, 'days').add(placement.end, 'minutes').toISOString();\n event.duration = placement.end - placement.start;\n\n if (collection == 'events') {\n (event as CoreTypes.serialized.event).inLocations = placement.dependencies?.filter(Boolean) ?? [];\n\n // remove from events to be updates\n eventsToUpdate.delete(id);\n }\n });\n\n // check if there are events that were not updated\n if (eventsToUpdate.size) {\n warnings.push(`The following events were not updated: ${[...eventsToUpdate].join(', ')}`);\n }\n\n\n return Object.assign(schedule, {\n meta: {\n ...warnings.length && { warnings: warnings }\n }\n });\n};"],"mappings":";;;;;AAMA,SAAgB,UACd,OACA,SACwC;CACxC,MAAMA,WAAqB;CAE3B,MAAM,WAAsB,MAAM;CAClC,MAAM,sBAAsB,MAAM,QAAQ,GAAG,IAAI;AAEjD,KAAI,CAAC,SAAqB,OAAM,IAAI,MAAM;AAC1C,KAAI,CAAC,oBAAqB,OAAM,IAAI,MAAM;CAG1C,MAAM,iBAAiB,IAAI,IAAI,SAAS,QAAQ,KAAI,MAAK,YAAY,GAAG;AAExE,qBAAoB,SAAS,EAAE,IAAI,gBAAiB,GAAG,gBAAgB;EAErE,MAAM,aAAa,gBAAgB,MAAM,KAAK,MAAM,cAAc,SAAS,WAAW;EACtF,MAAM,KAAa,gBAAgB,MAAM,KAAK;EAC9C,MAAM,QAAQ,SAAS,aAAa,MAAK,MAAK,YAAY,GAAG,YAAY;AAEzE,MAAI,CAAC,OAAO;AACV,YAAS,KAAK,kBAAkB,GAAG,IAAI,gBAAgB,OAAO,WAAW;AACzE;;AAGF,QAAM,SAAW;AACjB,QAAM,QAAW,OAAO,IAAI,oBAAoB,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,OAAO,WAAW;AAC3G,QAAM,MAAW,OAAO,IAAI,oBAAoB,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAO,WAAW;AAC3G,QAAM,WAAW,UAAU,MAAM,UAAU;AAE3C,MAAI,cAAc,UAAU;AAC1B,GAAC,MAAqC,cAAc,UAAU,cAAc,OAAO,YAAY;AAG/F,kBAAe,OAAO;;;AAK1B,KAAI,eAAe,KACjB,UAAS,KAAK,0CAA0C,CAAC,GAAG,gBAAgB,KAAK;AAInF,QAAO,OAAO,OAAO,UAAU,EAC7B,MAAM,EACJ,GAAG,SAAS,UAAU,EAAY"}
1
+ {"version":3,"file":"schedules.js","names":["warnings: string[]"],"sources":["../../../src/RS/from/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { Types } from '../types';\nimport { COLLECTION_ID } from '../to/input/util/util';\nimport { getVertexId } from '../../core/util';\nimport type { CoreTypes } from '../../core';\n\nexport function schedules (\n input: Partial<Types.toOutput>,\n options: Pick<Types.toOptions, 'idKey'> = {}\n): Partial<CoreTypes.SerializedWithOptionalId.Schedule> {\n // set default idKey if not provided\n if (!options.idKey) options.idKey = 'id';\n\n const warnings: string[] = [];\n\n const schedule = input.coreData;\n const eventConfigurations = input.output?.at(0)?.events;\n\n if (!schedule ) throw new Error('Missing `coreData` in input.');\n if (!eventConfigurations) throw new Error('Missing `output.events` in input.');\n\n // check on later to ensure that all events are updated\n const eventsToUpdate = new Set(schedule.events?.map(x => getVertexId(x, options)));\n\n eventConfigurations.forEach(({ id: collectionAndId, ...placement }) => {\n // locate the corresponding event/locked time\n const collection = collectionAndId.split('.')[0] == COLLECTION_ID.events ? 'events' : 'lockedTimes';\n const id = collectionAndId.split('.')[1];\n const event = schedule[collection]?.find(x => getVertexId(x, options) == id);\n\n if (!event) {\n warnings.push(`Could not find ${id} (${collectionAndId}) in ${collection} collection.`);\n return;\n }\n\n event.parked = false;\n event.start = moment.utc('1970-01-05T00:00').add(placement.day, 'days').add(placement.start, 'minutes').toISOString();\n event.end = moment.utc('1970-01-05T00:00').add(placement.day, 'days').add(placement.end, 'minutes').toISOString();\n event.duration = placement.end - placement.start;\n\n if (collection == 'events') {\n (event as CoreTypes.Serialized.Event).inLocations = placement.dependencies?.filter(Boolean) ?? [];\n\n // remove from events to be updates\n eventsToUpdate.delete(id);\n }\n });\n\n // check if there are events that were not updated\n if (eventsToUpdate.size) {\n warnings.push(`The following events were not updated: ${[...eventsToUpdate].join(', ')}`);\n }\n\n\n return Object.assign(schedule, {\n meta: {\n ...warnings.length && { warnings: warnings }\n }\n });\n};"],"mappings":";;;;;AAMA,SAAgB,UACd,OACA,UAA0C,EAAE,EACU;AAEtD,KAAI,CAAC,QAAQ,MAAO,SAAQ,QAAQ;CAEpC,MAAMA,WAAqB,EAAE;CAE7B,MAAM,WAAsB,MAAM;CAClC,MAAM,sBAAsB,MAAM,QAAQ,GAAG,EAAE,EAAE;AAEjD,KAAI,CAAC,SAAqB,OAAM,IAAI,MAAM,+BAA+B;AACzE,KAAI,CAAC,oBAAqB,OAAM,IAAI,MAAM,oCAAoC;CAG9E,MAAM,iBAAiB,IAAI,IAAI,SAAS,QAAQ,KAAI,MAAK,YAAY,GAAG,QAAQ,CAAC,CAAC;AAElF,qBAAoB,SAAS,EAAE,IAAI,gBAAiB,GAAG,gBAAgB;EAErE,MAAM,aAAa,gBAAgB,MAAM,IAAI,CAAC,MAAM,cAAc,SAAS,WAAW;EACtF,MAAM,KAAa,gBAAgB,MAAM,IAAI,CAAC;EAC9C,MAAM,QAAQ,SAAS,aAAa,MAAK,MAAK,YAAY,GAAG,QAAQ,IAAI,GAAG;AAE5E,MAAI,CAAC,OAAO;AACV,YAAS,KAAK,kBAAkB,GAAG,IAAI,gBAAgB,OAAO,WAAW,cAAc;AACvF;;AAGF,QAAM,SAAW;AACjB,QAAM,QAAW,OAAO,IAAI,mBAAmB,CAAC,IAAI,UAAU,KAAK,OAAO,CAAC,IAAI,UAAU,OAAO,UAAU,CAAC,aAAa;AACxH,QAAM,MAAW,OAAO,IAAI,mBAAmB,CAAC,IAAI,UAAU,KAAK,OAAO,CAAC,IAAI,UAAU,KAAO,UAAU,CAAC,aAAa;AACxH,QAAM,WAAW,UAAU,MAAM,UAAU;AAE3C,MAAI,cAAc,UAAU;AAC1B,GAAC,MAAqC,cAAc,UAAU,cAAc,OAAO,QAAQ,IAAI,EAAE;AAGjG,kBAAe,OAAO,GAAG;;GAE3B;AAGF,KAAI,eAAe,KACjB,UAAS,KAAK,0CAA0C,CAAC,GAAG,eAAe,CAAC,KAAK,KAAK,GAAG;AAI3F,QAAO,OAAO,OAAO,UAAU,EAC7B,MAAM,EACJ,GAAG,SAAS,UAAU,EAAY,UAAU,EAC7C,EACF,CAAC"}
@@ -1,22 +1,23 @@
1
- import { Mixed } from "../core/vertex-mapping.js";
2
- import { Types } from "../core/types/index.js";
1
+ import "../core/types/common/index.js";
2
+ import { Mixed } from "../core/interfaces/vertices/index.js";
3
+ import "../core/index.js";
4
+ import "./types/index.js";
3
5
 
4
6
  //#region src/RS/make-connected.d.ts
5
-
6
7
  type _Schedule = {
7
- division: Mixed<Types.division>;
8
- divisions: Mixed<Types.division>;
9
- settings: Mixed<Types.divisionSettings>;
10
- groups: Mixed<Types.group>[];
11
- teachers: Mixed<Types.teacher>[];
12
- locations: Mixed<Types.location>[];
13
- periods: Mixed<Types.period>[];
14
- persons: Mixed<Types.person>[];
15
- rootIntervals: Mixed<Types.rootInterval>[];
16
- lockedTimes: Mixed<Types.lockedTime>[];
17
- overlapGroups: Mixed<Types.overlapGroup>[];
18
- courses: Mixed<Types.course>[];
19
- events: Mixed<Types.event>[];
8
+ division: Mixed.Division;
9
+ divisions: Mixed.Division;
10
+ settings: Mixed.Settings;
11
+ groups: Mixed.Group[];
12
+ teachers: Mixed.Teacher[];
13
+ locations: Mixed.Location[];
14
+ periods: Mixed.Period[];
15
+ persons: Mixed.Person[];
16
+ rootIntervals: Mixed.RootInterval[];
17
+ lockedTimes: Mixed.LockedTime[];
18
+ overlapGroups: Mixed.OverlapGroup[];
19
+ courses: Mixed.Course[];
20
+ events: Mixed.Event[];
20
21
  };
21
22
  type MixedScheduleData = Partial<_Schedule>;
22
23
  //#endregion