@royalschedule/maps 4.0.1 → 4.0.2

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 (66) hide show
  1. package/dist/Excel/v1/from/index.js +2 -2
  2. package/dist/Excel/v1/from/index.js.map +1 -1
  3. package/dist/Excel/v2/from/index.js +2 -2
  4. package/dist/Excel/v2/from/index.js.map +1 -1
  5. package/dist/InfoMentor/to/schedules.js +2 -2
  6. package/dist/InfoMentor/to/schedules.js.map +1 -1
  7. package/dist/PlanDigital/index.d.ts +28 -28
  8. package/dist/RS/make-connected.js +2 -2
  9. package/dist/RS/make-connected.js.map +1 -1
  10. package/dist/SS12000/from/activities.js +36 -0
  11. package/dist/SS12000/from/activities.js.map +1 -0
  12. package/dist/SS12000/from/calendar-events.js +20 -0
  13. package/dist/SS12000/from/calendar-events.js.map +1 -0
  14. package/dist/SS12000/from/duties.js +21 -0
  15. package/dist/SS12000/from/duties.js.map +1 -0
  16. package/dist/SS12000/from/groups.js +23 -0
  17. package/dist/SS12000/from/groups.js.map +1 -0
  18. package/dist/SS12000/from/index.js +24 -0
  19. package/dist/SS12000/from/index.js.map +1 -0
  20. package/dist/SS12000/from/persons.js +43 -0
  21. package/dist/SS12000/from/persons.js.map +1 -0
  22. package/dist/SS12000/from/resources.js +9 -0
  23. package/dist/SS12000/from/resources.js.map +1 -0
  24. package/dist/SS12000/from/rooms.js +18 -0
  25. package/dist/SS12000/from/rooms.js.map +1 -0
  26. package/dist/SS12000/from/syllabuses.js +21 -0
  27. package/dist/SS12000/from/syllabuses.js.map +1 -0
  28. package/dist/SS12000/index.d.ts +36 -0
  29. package/dist/SS12000/index.js +12 -0
  30. package/dist/SS12000/index.js.map +1 -0
  31. package/dist/SS12000/to/activities.js +63 -0
  32. package/dist/SS12000/to/activities.js.map +1 -0
  33. package/dist/SS12000/to/calendar-events.js +53 -0
  34. package/dist/SS12000/to/calendar-events.js.map +1 -0
  35. package/dist/SS12000/to/common.js +25 -0
  36. package/dist/SS12000/to/common.js.map +1 -0
  37. package/dist/SS12000/to/duties.js +45 -0
  38. package/dist/SS12000/to/duties.js.map +1 -0
  39. package/dist/SS12000/to/groups.js +47 -0
  40. package/dist/SS12000/to/groups.js.map +1 -0
  41. package/dist/SS12000/to/index.d.ts +58 -0
  42. package/dist/SS12000/to/index.js +24 -0
  43. package/dist/SS12000/to/index.js.map +1 -0
  44. package/dist/SS12000/to/persons.js +40 -0
  45. package/dist/SS12000/to/persons.js.map +1 -0
  46. package/dist/SS12000/to/resources.js +27 -0
  47. package/dist/SS12000/to/resources.js.map +1 -0
  48. package/dist/SS12000/to/rooms.js +32 -0
  49. package/dist/SS12000/to/rooms.js.map +1 -0
  50. package/dist/SS12000/to/syllabuses.js +34 -0
  51. package/dist/SS12000/to/syllabuses.js.map +1 -0
  52. package/dist/SS12000/types/activities.d.ts +41 -0
  53. package/dist/SS12000/types/calendar-events.d.ts +23 -0
  54. package/dist/SS12000/types/codes.d.ts +9 -0
  55. package/dist/SS12000/types/duties.d.ts +23 -0
  56. package/dist/SS12000/types/duty-assignments.d.ts +13 -0
  57. package/dist/SS12000/types/groups.d.ts +23 -0
  58. package/dist/SS12000/types/index.d.ts +21 -0
  59. package/dist/SS12000/types/organisation.d.ts +20 -0
  60. package/dist/SS12000/types/persons.d.ts +30 -0
  61. package/dist/SS12000/types/resources.d.ts +13 -0
  62. package/dist/SS12000/types/rooms.d.ts +17 -0
  63. package/dist/SS12000/types/syllabus.d.ts +19 -0
  64. package/dist/index.d.ts +9 -7
  65. package/dist/index.js +2 -1
  66. package/package.json +1 -1
@@ -0,0 +1,36 @@
1
+ import { isNil, omitBy } from "lodash-es";
2
+
3
+ //#region src/SS12000/from/activities.ts
4
+ var activities_default = (activities, options) => {
5
+ if (!Array.isArray(activities)) throw new Error("(SS12000::From::Activities) Activities input is not of array type", { cause: "invalid_input" });
6
+ const parentActivities = new Set(activities.map((x) => x.parentActivity?.id).filter(Boolean));
7
+ return activities.map((activity) => {
8
+ if (parentActivities.has(activity.id)) return;
9
+ const groupIndexSet = [...new Set([void 0, ...activity.rooms?.map(({ index }) => index) ?? []])];
10
+ const doc = {
11
+ ids: activity.id,
12
+ startDate: activity.startDate,
13
+ ...omitBy({
14
+ displayName: activity.displayName,
15
+ comment: activity.comment,
16
+ subject: activity.subject,
17
+ endDate: activity.endDate,
18
+ syllabus: activity._embedded?.syllabus
19
+ }, isNil),
20
+ ...activity.minutesPlanned && { plannedDuration: `${Math.ceil(activity.minutesPlanned / 60)} hrs` },
21
+ type: activity.activityType,
22
+ groups: activity.groups?.map(({ id }) => ({ to: id })),
23
+ teachers: activity.teachers?.map(({ duty: { id } }) => ({ to: id })),
24
+ ...activity.rooms && { locations: activity.rooms?.map(({ room, index }) => ({
25
+ locations: [room.id],
26
+ groupIndex: groupIndexSet.indexOf(index)
27
+ })) },
28
+ ...activity._embedded?.syllabus && { subject: activity._embedded.syllabus.subjectCode }
29
+ };
30
+ return doc;
31
+ }).filter((x) => x != null);
32
+ };
33
+
34
+ //#endregion
35
+ export { activities_default as default };
36
+ //# sourceMappingURL=activities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activities.js","names":[],"sources":["../../../src/SS12000/from/activities.ts"],"sourcesContent":["import { isNil, omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Activity } from '../types/activities';\n\nexport default (\n activities: Activity[],\n options?: { interval?: { start: string, end: string } }\n) => {\n if (!Array.isArray(activities))\n throw new Error('(SS12000::From::Activities) Activities input is not of array type', { cause: 'invalid_input' });\n\n const parentActivities = new Set(activities.map(x => x.parentActivity?.id).filter(Boolean));\n\n return activities\n .map((activity): CoreTypes.mixedWithoutInternalId.course | undefined => {\n // Skip activities that are above courses\n if (parentActivities.has(activity.id)) return;\n\n const groupIndexSet = [...new Set<number | undefined>([undefined, ...(activity.rooms?.map(({ index }) => index) ?? [])])];\n\n const doc = {\n ids: activity.id,\n startDate: activity.startDate,\n ...omitBy({\n displayName: activity.displayName,\n comment: activity.comment,\n subject: activity.subject,\n endDate: activity.endDate,\n syllabus: activity._embedded?.syllabus,\n }, isNil),\n ...activity.minutesPlanned && { plannedDuration: `${ Math.ceil(activity.minutesPlanned / 60) } hrs` },\n type: activity.activityType,\n groups: activity.groups?.map(({ id }) => ({ to: id })),\n teachers: activity.teachers?.map(({ duty: { id } }) => ({ to: id })),\n // not in the standard\n ...activity.rooms && {\n locations: activity.rooms?.map(({ room, index }) => ({ locations: [room.id!] as [string], groupIndex: groupIndexSet.indexOf(index) })),\n },\n ...activity._embedded?.syllabus && {\n subject: activity._embedded.syllabus.subjectCode,\n }\n };\n return doc;\n })\n .filter(x => x != null);\n};"],"mappings":";;;AAIA,0BACE,YACA,YACG;AACH,KAAI,CAAC,MAAM,QAAQ,YACjB,OAAM,IAAI,MAAM,qEAAqE,EAAE,OAAO;CAEhG,MAAM,mBAAmB,IAAI,IAAI,WAAW,KAAI,MAAK,EAAE,gBAAgB,IAAI,OAAO;AAElF,QAAO,WACJ,KAAK,aAAkE;AAEtE,MAAI,iBAAiB,IAAI,SAAS,IAAK;EAEvC,MAAM,gBAAgB,CAAC,GAAG,IAAI,IAAwB,CAAC,QAAW,GAAI,SAAS,OAAO,KAAK,EAAE,YAAY,UAAU;EAEnH,MAAM,MAAM;GACV,KAAW,SAAS;GACpB,WAAW,SAAS;GACpB,GAAG,OAAO;IACR,aAAa,SAAS;IACtB,SAAa,SAAS;IACtB,SAAa,SAAS;IACtB,SAAa,SAAS;IACtB,UAAa,SAAS,WAAW;MAChC;GACH,GAAG,SAAS,kBAAkB,EAAE,iBAAiB,GAAI,KAAK,KAAK,SAAS,iBAAiB,IAAK;GAC9F,MAAU,SAAS;GACnB,QAAU,SAAS,QAAQ,KAAK,EAAE,UAAU,EAAE,IAAI;GAClD,UAAU,SAAS,UAAU,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI;GAE9D,GAAG,SAAS,SAAS,EACnB,WAAW,SAAS,OAAO,KAAK,EAAE,MAAM,aAAa;IAAE,WAAW,CAAC,KAAK;IAAkB,YAAY,cAAc,QAAQ;;GAE9H,GAAG,SAAS,WAAW,YAAY,EACjC,SAAS,SAAS,UAAU,SAAS;;AAGzC,SAAO;IAER,QAAO,MAAK,KAAK"}
@@ -0,0 +1,20 @@
1
+ import rooms_default from "./rooms.js";
2
+ import moment from "moment";
3
+
4
+ //#region src/SS12000/from/calendar-events.ts
5
+ var calendar_events_default = (events) => {
6
+ if (!Array.isArray(events)) throw new Error("(SS12000::From::CalendarEvents) CalendarEvent input is not of array type", { cause: "invalid_input" });
7
+ return events.map((event) => ({
8
+ ids: event.id,
9
+ start: event.startTime.toString(),
10
+ end: event.endTime.toString(),
11
+ duration: moment(event.endTime).diff(event.endTime, "m"),
12
+ preferredDuration: moment(event.endTime).diff(event.endTime, "m"),
13
+ course: event.activity.id,
14
+ inLocations: rooms_default(event.rooms ?? [])
15
+ }));
16
+ };
17
+
18
+ //#endregion
19
+ export { calendar_events_default as default };
20
+ //# sourceMappingURL=calendar-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-events.js","names":["toRoom"],"sources":["../../../src/SS12000/from/calendar-events.ts"],"sourcesContent":["import moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { CalendarEvent } from '../types/calendar-events';\nimport toRoom from './rooms';\n\nexport default (events: CalendarEvent[]) => {\n if (!Array.isArray(events))\n throw new Error('(SS12000::From::CalendarEvents) CalendarEvent input is not of array type', { cause: 'invalid_input' });\n\n return events\n .map((event): CoreTypes.mixedWithoutInternalId.event => ({\n ids: event.id,\n start: event.startTime.toString(),\n end: event.endTime.toString(),\n duration: moment(event.endTime).diff(event.endTime, 'm'),\n preferredDuration: moment(event.endTime).diff(event.endTime, 'm'),\n course: event.activity.id,\n inLocations: toRoom(event.rooms ?? []),\n // resources: toResource([])\n }));\n};\n"],"mappings":";;;;AAKA,+BAAgB,WAA4B;AAC1C,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,4EAA4E,EAAE,OAAO;AAEvG,QAAO,OACJ,KAAK,WAAmD;EACvD,KAAmB,MAAM;EACzB,OAAmB,MAAM,UAAU;EACnC,KAAmB,MAAM,QAAQ;EACjC,UAAmB,OAAO,MAAM,SAAS,KAAK,MAAM,SAAS;EAC7D,mBAAmB,OAAO,MAAM,SAAS,KAAK,MAAM,SAAS;EAC7D,QAAmB,MAAM,SAAS;EAClC,aAAmBA,cAAO,MAAM,SAAS"}
@@ -0,0 +1,21 @@
1
+ import persons_default from "./persons.js";
2
+ import { omit } from "lodash-es";
3
+
4
+ //#region src/SS12000/from/duties.ts
5
+ var duties_default = (duties) => {
6
+ if (!Array.isArray(duties)) throw new Error("(SS12000::From::Duties) Teacher input is not of array type", { cause: "invalid_input" });
7
+ return duties.map((duty) => ({
8
+ ids: duty.id,
9
+ displayName: duty.displayName ?? duty.person?.displayName,
10
+ signature: duty.signature,
11
+ ...(duty.person || duty._embedded?.person) && { person: {
12
+ type: "Teacher",
13
+ ...duty.person && { ids: duty.person.id },
14
+ ...duty._embedded?.person && omit(persons_default([duty._embedded.person])[0], "type")
15
+ } }
16
+ }));
17
+ };
18
+
19
+ //#endregion
20
+ export { duties_default as default };
21
+ //# sourceMappingURL=duties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duties.js","names":["toPerson"],"sources":["../../../src/SS12000/from/duties.ts"],"sourcesContent":["import { omit } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Duty } from '../types/duties';\nimport toPerson from './persons';\n\nexport default (duties: Duty[]) => {\n if (!Array.isArray(duties))\n throw new Error('(SS12000::From::Duties) Teacher input is not of array type', { cause: 'invalid_input' });\n\n return duties\n .map((duty): CoreTypes.mixedWithoutInternalId.teacher => ({\n ids: duty.id,\n displayName: duty.displayName ?? duty.person?.displayName,\n signature: duty.signature,\n ...(duty.person || duty._embedded?.person) && {\n person: {\n type: 'Teacher',\n ...duty.person && { ids: duty.person.id },\n ...duty._embedded?.person && omit(toPerson([ duty._embedded.person ])[0], 'type')\n }\n }\n }));\n};\n"],"mappings":";;;;AAKA,sBAAgB,WAAmB;AACjC,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,8DAA8D,EAAE,OAAO;AAEzF,QAAO,OACJ,KAAK,UAAoD;EACxD,KAAa,KAAK;EAClB,aAAa,KAAK,eAAe,KAAK,QAAQ;EAC9C,WAAa,KAAK;EAClB,IAAI,KAAK,UAAU,KAAK,WAAW,WAAW,EAC5C,QAAQ;GACN,MAAM;GACN,GAAG,KAAK,UAAU,EAAE,KAAK,KAAK,OAAO;GACrC,GAAG,KAAK,WAAW,UAAU,KAAKA,gBAAS,CAAE,KAAK,UAAU,SAAU,IAAI"}
@@ -0,0 +1,23 @@
1
+ import moment from "moment";
2
+
3
+ //#region src/SS12000/from/groups.ts
4
+ function _transformGroupMembers(members, options) {
5
+ return [...new Set(members?.filter((member) => {
6
+ if (options?.end && member.startDate && !moment(member.startDate).isBefore(moment(options.end))) return false;
7
+ if (options?.start && member.endDate && !moment(member.endDate).isAfter(moment(options.start))) return false;
8
+ return true;
9
+ }).map((member) => member.person.id).filter(Boolean))];
10
+ }
11
+ var groups_default = (groups, options) => {
12
+ if (!Array.isArray(groups)) throw new Error("(SS12000::From::Groups) Group input is not of array type", { cause: "invalid_input" });
13
+ return groups.map((group) => ({
14
+ ids: group.id,
15
+ displayName: group.displayName,
16
+ ...group.groupType == "Klass" && { species: "class" },
17
+ ...group.groupMemberships && { members: _transformGroupMembers(group.groupMemberships, options) }
18
+ }));
19
+ };
20
+
21
+ //#endregion
22
+ export { groups_default as default };
23
+ //# sourceMappingURL=groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.js","names":[],"sources":["../../../src/SS12000/from/groups.ts"],"sourcesContent":["import moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { Group } from '../types/groups';\n\nfunction _transformGroupMembers (\n members: Group['groupMemberships'],\n options?: Pick<CoreTypes.division, 'start' | 'end'>\n) {\n return [\n ...new Set(\n members?.filter(member => {\n if (options?.end && member.startDate && !moment(member.startDate).isBefore(moment(options.end)))\n return false;\n if (options?.start && member.endDate && !moment(member.endDate).isAfter(moment(options.start)))\n return false;\n return true;\n })\n .map((member) => member.person.id)\n .filter(Boolean)\n )\n ];\n}\n\nexport default (\n groups: Group[],\n options?: Pick<CoreTypes.division, 'start' | 'end'>\n) => {\n if (!Array.isArray(groups))\n throw new Error('(SS12000::From::Groups) Group input is not of array type', { cause: 'invalid_input' });\n\n return groups\n .map((group): CoreTypes.mixedWithoutInternalId.group => ({\n ids: group.id,\n displayName: group.displayName,\n ...group.groupType == 'Klass' && { species: 'class' },\n ...group.groupMemberships && {\n members: _transformGroupMembers(group.groupMemberships, options)\n }\n }));\n};"],"mappings":";;;AAIA,SAAS,uBACP,SACA,SACA;AACA,QAAO,CACL,GAAG,IAAI,IACL,SAAS,QAAO,WAAU;AACxB,MAAI,SAAS,OAAO,OAAO,aAAa,CAAC,OAAO,OAAO,WAAW,SAAS,OAAO,QAAQ,MACxF,QAAO;AACT,MAAI,SAAS,SAAS,OAAO,WAAW,CAAC,OAAO,OAAO,SAAS,QAAQ,OAAO,QAAQ,QACrF,QAAO;AACT,SAAO;IAEN,KAAK,WAAW,OAAO,OAAO,IAC9B,OAAO;;AAKhB,sBACE,QACA,YACG;AACH,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,4DAA4D,EAAE,OAAO;AAEvF,QAAO,OACJ,KAAK,WAAmD;EACvD,KAAa,MAAM;EACnB,aAAa,MAAM;EACnB,GAAG,MAAM,aAAa,WAAW,EAAE,SAAS;EAC5C,GAAG,MAAM,oBAAoB,EAC3B,SAAS,uBAAuB,MAAM,kBAAkB"}
@@ -0,0 +1,24 @@
1
+ import activities_default from "./activities.js";
2
+ import rooms_default from "./rooms.js";
3
+ import calendar_events_default from "./calendar-events.js";
4
+ import persons_default from "./persons.js";
5
+ import duties_default from "./duties.js";
6
+ import groups_default from "./groups.js";
7
+ import resources_default from "./resources.js";
8
+ import syllabuses_default from "./syllabuses.js";
9
+
10
+ //#region src/SS12000/from/index.ts
11
+ var from_default = {
12
+ activities: activities_default,
13
+ calendarEvents: calendar_events_default,
14
+ duties: duties_default,
15
+ groups: groups_default,
16
+ persons: persons_default,
17
+ resources: resources_default,
18
+ rooms: rooms_default,
19
+ syllabuses: syllabuses_default
20
+ };
21
+
22
+ //#endregion
23
+ export { from_default as default };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_activities","_calendarEvents","_duties","_groups","_persons","_resources","_rooms","_syllabuses"],"sources":["../../../src/SS12000/from/index.ts"],"sourcesContent":["import _activities from './activities';\nimport _calendarEvents from './calendar-events';\nimport _duties from './duties';\nimport _groups from './groups';\nimport _persons from './persons';\nimport _resources from './resources';\nimport _rooms from './rooms';\nimport _syllabuses from './syllabuses';\n\nexport default {\n activities: _activities,\n calendarEvents: _calendarEvents,\n duties: _duties,\n groups: _groups,\n persons: _persons,\n resources: _resources,\n rooms: _rooms,\n syllabuses: _syllabuses,\n};"],"mappings":";;;;;;;;;;AASA,mBAAe;CACb,YAAgBA;CAChB,gBAAgBC;CAChB,QAAgBC;CAChB,QAAgBC;CAChB,SAAgBC;CAChB,WAAgBC;CAChB,OAAgBC;CAChB,YAAgBC"}
@@ -0,0 +1,43 @@
1
+ import { get, omitBy } from "lodash-es";
2
+
3
+ //#region src/SS12000/from/persons.ts
4
+ const SexMap = {
5
+ Man: "Man",
6
+ Kvinna: "Woman",
7
+ Okänt: void 0
8
+ };
9
+ const TypeMap = {
10
+ "Privat": "private",
11
+ "Hem": "private",
12
+ "Arbete övrigt": "organization",
13
+ "Arbete": "organization",
14
+ "Skola elev": "organization",
15
+ "Skola personal": "organization"
16
+ };
17
+ var persons_default = (groups) => {
18
+ if (!Array.isArray(groups)) throw new Error("(SS12000::From::Person) Person input is not of array type", { cause: "invalid_input" });
19
+ return groups.map((person) => ({
20
+ ids: person.id,
21
+ displayName: person.displayName,
22
+ type: "Student",
23
+ ...omitBy({
24
+ sex: person.sex ? get(SexMap, person.sex, void 0) : void 0,
25
+ displayName: person.displayName,
26
+ firstName: person.givenName,
27
+ lastName: person.familyName,
28
+ SSN: person.civicNo,
29
+ emails: person.emails?.map(({ type,...arg }) => ({
30
+ type: get(TypeMap, type, void 0),
31
+ ...arg
32
+ })),
33
+ phoneNumbers: person.phoneNumbers?.map(({ type,...arg }) => ({
34
+ type: get(TypeMap, type, void 0),
35
+ ...arg
36
+ }))
37
+ }, (x) => x == null)
38
+ }));
39
+ };
40
+
41
+ //#endregion
42
+ export { persons_default as default };
43
+ //# sourceMappingURL=persons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persons.js","names":["SexMap: Record<NonNullable<Person['sex']>, CoreTypes.person['sex']>","TypeMap: Record<\n NonNullable<\n Person['phoneNumbers']\n >[0]['type'],\n NonNullable<\n CoreTypes.person['phoneNumbers']\n >[0]['type']\n>"],"sources":["../../../src/SS12000/from/persons.ts"],"sourcesContent":["import { get, omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Person } from '../types/persons';\n\nconst SexMap: Record<NonNullable<Person['sex']>, CoreTypes.person['sex']> = { Man: 'Man', Kvinna: 'Woman', Okänt: undefined };\nconst TypeMap: Record<\n NonNullable<\n Person['phoneNumbers']\n >[0]['type'],\n NonNullable<\n CoreTypes.person['phoneNumbers']\n >[0]['type']\n> = {\n 'Privat': 'private',\n 'Hem': 'private',\n 'Arbete övrigt': 'organization',\n 'Arbete': 'organization',\n 'Skola elev': 'organization',\n 'Skola personal': 'organization'\n};\n\nexport default (groups: Person[]) => {\n if (!Array.isArray(groups))\n throw new Error('(SS12000::From::Person) Person input is not of array type', { cause: 'invalid_input' });\n\n return groups\n .map((person): CoreTypes.mixedWithoutInternalId.person => ({\n ids: person.id,\n displayName: person.displayName,\n type: 'Student',\n ...omitBy({\n sex: person.sex ? get(SexMap, person.sex, undefined) : undefined,\n displayName: person.displayName,\n firstName: person.givenName,\n lastName: person.familyName,\n SSN: person.civicNo,\n emails: person.emails?.map(({ type, ...arg }) => ({ type: get(TypeMap, type, undefined), ...arg })),\n phoneNumbers: person.phoneNumbers?.map(({ type, ...arg }) => ({ type: get(TypeMap, type, undefined), ...arg })),\n }, x => x == null)\n }));\n};"],"mappings":";;;AAIA,MAAMA,SAAsE;CAAE,KAAK;CAAO,QAAQ;CAAS,OAAO;;AAClH,MAAMC,UAOF;CACF,UAAkB;CAClB,OAAkB;CAClB,iBAAkB;CAClB,UAAkB;CAClB,cAAkB;CAClB,kBAAkB;;AAGpB,uBAAgB,WAAqB;AACnC,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,6DAA6D,EAAE,OAAO;AAExF,QAAO,OACJ,KAAK,YAAqD;EACzD,KAAa,OAAO;EACpB,aAAa,OAAO;EACpB,MAAa;EACb,GAAG,OAAO;GACR,KAAc,OAAO,MAAM,IAAI,QAAQ,OAAO,KAAK,UAAa;GAChE,aAAc,OAAO;GACrB,WAAc,OAAO;GACrB,UAAc,OAAO;GACrB,KAAc,OAAO;GACrB,QAAc,OAAO,QAAQ,KAAK,EAAE,KAAM,GAAG,WAAW;IAAE,MAAM,IAAI,SAAS,MAAM;IAAY,GAAG;;GAClG,cAAc,OAAO,cAAc,KAAK,EAAE,KAAM,GAAG,WAAW;IAAE,MAAM,IAAI,SAAS,MAAM;IAAY,GAAG;;MACvG,MAAK,KAAK"}
@@ -0,0 +1,9 @@
1
+ //#region src/SS12000/from/resources.ts
2
+ var resources_default = (resources) => {
3
+ if (!Array.isArray(resources)) throw new Error("(SS12000::From::Resources) Resources input is not of array type", { cause: "invalid_input" });
4
+ return resources.map((resource) => ({ ids: resource.id }));
5
+ };
6
+
7
+ //#endregion
8
+ export { resources_default as default };
9
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","names":[],"sources":["../../../src/SS12000/from/resources.ts"],"sourcesContent":["\nimport type { Resource } from '../types/resources';\n\nexport default (resources: Resource[]) => {\n if (!Array.isArray(resources))\n throw new Error('(SS12000::From::Resources) Resources input is not of array type', { cause: 'invalid_input' });\n\n return resources.map((resource) => ({\n ids: resource.id,\n }));\n};\n"],"mappings":";AAGA,yBAAgB,cAA0B;AACxC,KAAI,CAAC,MAAM,QAAQ,WACjB,OAAM,IAAI,MAAM,mEAAmE,EAAE,OAAO;AAE9F,QAAO,UAAU,KAAK,cAAc,EAClC,KAAK,SAAS"}
@@ -0,0 +1,18 @@
1
+ import { omitBy } from "lodash-es";
2
+
3
+ //#region src/SS12000/from/rooms.ts
4
+ var rooms_default = (locations) => {
5
+ if (!Array.isArray(locations)) throw new Error("(SS12000::From::Room) Room input is not of array type", { cause: "invalid_input" });
6
+ return locations.map((location) => ({
7
+ ids: location.id,
8
+ ...omitBy({
9
+ displayName: location.displayName,
10
+ seats: location.seats,
11
+ tags: location.tags
12
+ }, (x) => x == null)
13
+ }));
14
+ };
15
+
16
+ //#endregion
17
+ export { rooms_default as default };
18
+ //# sourceMappingURL=rooms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rooms.js","names":[],"sources":["../../../src/SS12000/from/rooms.ts"],"sourcesContent":["import { omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Room } from '../types/rooms';\n\nexport default (locations: Room[]) => {\n if (!Array.isArray(locations))\n throw new Error('(SS12000::From::Room) Room input is not of array type', { cause: 'invalid_input' });\n\n return locations\n .map((location): CoreTypes.mixedWithoutInternalId.location => ({\n ids: location.id,\n ...omitBy({\n displayName: location.displayName,\n seats: location.seats,\n tags: location.tags,\n }, x => x == null),\n }));\n};"],"mappings":";;;AAIA,qBAAgB,cAAsB;AACpC,KAAI,CAAC,MAAM,QAAQ,WACjB,OAAM,IAAI,MAAM,yDAAyD,EAAE,OAAO;AAEpF,QAAO,UACJ,KAAK,cAAyD;EAC7D,KAAK,SAAS;EACd,GAAG,OAAO;GACR,aAAa,SAAS;GACtB,OAAa,SAAS;GACtB,MAAa,SAAS;MACrB,MAAK,KAAK"}
@@ -0,0 +1,21 @@
1
+ import { omitBy } from "lodash-es";
2
+
3
+ //#region src/SS12000/from/syllabuses.ts
4
+ var syllabuses_default = (syllabuses) => {
5
+ if (!Array.isArray(syllabuses)) throw new Error("(SS12000::From::Syllabus) Syllabus input is not of array type", { cause: "invalid_input" });
6
+ return syllabuses.map((syllabus) => ({
7
+ ids: syllabus.id,
8
+ schoolType: syllabus.schoolType,
9
+ official: syllabus.official,
10
+ subjectName: syllabus.subjectName,
11
+ ...omitBy({
12
+ subjectDesignation: syllabus.subjectDesignation,
13
+ subjectCode: syllabus.subjectCode,
14
+ curriculum: syllabus.curriculum
15
+ }, (x) => x == null)
16
+ }));
17
+ };
18
+
19
+ //#endregion
20
+ export { syllabuses_default as default };
21
+ //# sourceMappingURL=syllabuses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syllabuses.js","names":[],"sources":["../../../src/SS12000/from/syllabuses.ts"],"sourcesContent":["import { omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Syllabus } from '../types/syllabus';\n\nexport default (syllabuses: Syllabus[]) => {\n if (!Array.isArray(syllabuses))\n throw new Error('(SS12000::From::Syllabus) Syllabus input is not of array type', { cause: 'invalid_input' });\n\n return syllabuses\n .map((syllabus): CoreTypes.mixedWithoutInternalId.syllabus => ({\n ids: syllabus.id,\n schoolType: syllabus.schoolType!,\n official: syllabus.official!,\n subjectName: syllabus.subjectName!,\n ...omitBy({\n subjectDesignation: syllabus.subjectDesignation,\n subjectCode: syllabus.subjectCode,\n curriculum: syllabus.curriculum,\n }, x => x == null),\n }));\n};"],"mappings":";;;AAIA,0BAAgB,eAA2B;AACzC,KAAI,CAAC,MAAM,QAAQ,YACjB,OAAM,IAAI,MAAM,iEAAiE,EAAE,OAAO;AAE5F,QAAO,WACJ,KAAK,cAAyD;EAC7D,KAAa,SAAS;EACtB,YAAa,SAAS;EACtB,UAAa,SAAS;EACtB,aAAa,SAAS;EACtB,GAAG,OAAO;GACR,oBAAoB,SAAS;GAC7B,aAAoB,SAAS;GAC7B,YAAoB,SAAS;MAC5B,MAAK,KAAK"}
@@ -0,0 +1,36 @@
1
+ import { Types as Types$1 } from "../core/types/index.js";
2
+ import { Person } from "./types/persons.js";
3
+ import { Group } from "./types/groups.js";
4
+ import { Duty } from "./types/duties.js";
5
+ import { Room } from "./types/rooms.js";
6
+ import { Syllabus } from "./types/syllabus.js";
7
+ import { Activity } from "./types/activities.js";
8
+ import { Resource } from "./types/resources.js";
9
+ import { CalendarEvent } from "./types/calendar-events.js";
10
+ import { export_default } from "./to/index.js";
11
+ import { Types } from "./types/index.js";
12
+
13
+ //#region src/SS12000/index.d.ts
14
+ declare class SS12000Map {
15
+ static from: {
16
+ activities: (activities: Activity[], options?: {
17
+ interval?: {
18
+ start: string;
19
+ end: string;
20
+ };
21
+ }) => Types$1.mixedWithoutInternalId.course[];
22
+ calendarEvents: (events: CalendarEvent[]) => Types$1.mixedWithoutInternalId.event[];
23
+ duties: (duties: Duty[]) => Types$1.mixedWithoutInternalId.teacher[];
24
+ groups: (groups: Group[], options?: Pick<Types$1.division, "start" | "end">) => Types$1.mixedWithoutInternalId.group[];
25
+ persons: (groups: Person[]) => Types$1.mixedWithoutInternalId.person[];
26
+ resources: (resources: Resource[]) => {
27
+ ids: string;
28
+ }[];
29
+ rooms: (locations: Room[]) => Types$1.mixedWithoutInternalId.location[];
30
+ syllabuses: (syllabuses: Syllabus[]) => Types$1.mixedWithoutInternalId.syllabus[];
31
+ };
32
+ static to: typeof export_default;
33
+ }
34
+ //#endregion
35
+ export { SS12000Map };
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,12 @@
1
+ import to_default from "./to/index.js";
2
+ import from_default from "./from/index.js";
3
+
4
+ //#region src/SS12000/index.ts
5
+ var SS12000Map = class {
6
+ static from = from_default;
7
+ static to = to_default;
8
+ };
9
+
10
+ //#endregion
11
+ export { SS12000Map };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_from","_to"],"sources":["../../src/SS12000/index.ts"],"sourcesContent":["import _to from './to';\nimport _from from './from';\nimport type { Types } from './types';\n\nexport class SS12000Map {\n static from = _from;\n static to = _to;\n}\n\nexport { Types as SS12000Types };"],"mappings":";;;;AAIA,IAAa,aAAb,MAAwB;CACtB,OAAO,OAAOA;CACd,OAAO,KAAOC"}
@@ -0,0 +1,63 @@
1
+ import { getDivisionId, toReference } from "./common.js";
2
+ import groups_default from "./groups.js";
3
+ import duties_default from "./duties.js";
4
+ import { get, has, isNil, isString, map, omitBy } from "lodash-es";
5
+ import moment from "moment";
6
+
7
+ //#region src/SS12000/to/activities.ts
8
+ function mapActivityType(type) {
9
+ switch (type) {
10
+ case "LUNCH": return "Övrigt";
11
+ default: return "Undervisning";
12
+ }
13
+ }
14
+ /**
15
+ * @deprecated This is only used for SCS. can be removed when scs use v2
16
+ */
17
+ var activities_default = (activities, belongsTo, expand) => {
18
+ if (!Array.isArray(activities)) throw new Error("(SS12000::To::Activities) Activities input is not of array type", { cause: "invalid_input" });
19
+ if (!activities.every((activity) => isString(activity) || isString(get(activity, "id")))) throw new Error("(SS12000::To::Activities) Some Activities are missing \"id\" values", { cause: "invalid_input" });
20
+ if (!belongsTo && !activities.every((activity) => isString(activity) && belongsTo || has(activity, "belongsTo"))) throw new Error("(SS12000::To::Activities) Some top layer Activities are missing \"belongsTo\" values", { cause: "invalid_input" });
21
+ return activities.map((activity) => {
22
+ const division = belongsTo ?? (!isString(activity) ? activity.belongsTo : void 0);
23
+ if (!division || isString(division) || !("id" in division && division.id)) throw new Error("(SS12000::To::Activities) Some events members are missing \"belongsTo\" values", { cause: "invalid_input" });
24
+ if (!("start" in division && division.start) || !("end" in division && division.end)) throw new Error("(SS12000::To::Activities) Some events members are missing \"belongsTo\" start or end values", { cause: "invalid_input" });
25
+ return {
26
+ id: `${getDivisionId(activity, belongsTo)}.${isString(activity) ? activity : activity.id}`,
27
+ calendarEventsRequired: "course" in activity,
28
+ activityType: mapActivityType(activity.type),
29
+ startDate: moment(division.start).toISOString(),
30
+ ...typeof activity != "string" && {
31
+ meta: {
32
+ created: moment(activity.createdAt).toISOString(),
33
+ modified: moment(activity.updatedAt).toISOString()
34
+ },
35
+ ...omitBy({
36
+ foreignId: activity.ids,
37
+ displayName: activity.displayName,
38
+ comment: get(activity, "comment"),
39
+ subject: get(activity, "subject")
40
+ }, isNil),
41
+ ...activity.groups && { groups: toReference(map(activity.groups, "to"), division, expand?.includes("referenceNames")) },
42
+ ...activity.teachers && { teachers: activity.teachers.map(({ to }) => ({ duty: toReference([to], belongsTo ?? activity.belongsTo, expand?.includes("referenceNames"))[0] })) },
43
+ ..."course" in activity && typeof activity.course == "object" && "id" in activity.course && activity.course.id && { parentActivity: toReference([activity.course], division, expand?.includes("referenceNames"))[0] },
44
+ ...activity.locations && { rooms: activity.locations.map(({ locations, groupIndex }) => ({
45
+ room: toReference(locations, division, expand?.includes("referenceNames"))[0],
46
+ index: groupIndex
47
+ })) },
48
+ ...expand?.some((x) => [
49
+ "groups",
50
+ "teachers",
51
+ "syllabus"
52
+ ].includes(x)) && { _embedded: {
53
+ ...expand.includes("groups") && { ...activity.groups && { groups: groups_default(map(activity.groups, "to"), division) } },
54
+ ...expand.includes("teachers") && { ...activity.teachers && { teachers: duties_default(map(activity.teachers, "to"), division) } }
55
+ } }
56
+ }
57
+ };
58
+ });
59
+ };
60
+
61
+ //#endregion
62
+ export { activities_default as default };
63
+ //# sourceMappingURL=activities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activities.js","names":["toGroup","toTeacher"],"sources":["../../../src/SS12000/to/activities.ts"],"sourcesContent":["import { isString, has, get, omitBy, isNil, map } from 'lodash-es';\nimport moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { Activity } from '../types/activities';\nimport type { ActivityType } from '../types/codes';\nimport type { Duty } from '../types/duties';\nimport { getDivisionId, toReference } from './common';\nimport toGroup from './groups';\nimport toTeacher from './duties';\n\ntype Expand = ('referenceNames' | 'teachers' | 'syllabus' | 'groups')[];\n\nfunction mapActivityType (type: CoreTypes.course['type']): ActivityType {\n switch (type) {\n case 'LUNCH':\n return 'Övrigt';\n default:\n return 'Undervisning';\n }\n}\n\n/**\n * @deprecated This is only used for SCS. can be removed when scs use v2\n */\nexport default (\n activities: (Extract<CoreTypes.mixed.course, { id: string }> | Extract<CoreTypes.mixed.event, { id: string }>)[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expand?: Expand\n): Activity[] => {\n if (!Array.isArray(activities))\n throw new Error('(SS12000::To::Activities) Activities input is not of array type', { cause: 'invalid_input' });\n\n if (!activities.every((activity) => isString(activity) || isString(get(activity, 'id'))))\n throw new Error('(SS12000::To::Activities) Some Activities are missing \"id\" values', { cause: 'invalid_input' });\n\n if (!belongsTo && !activities.every((activity) => (isString(activity) && belongsTo) || has(activity, 'belongsTo')))\n throw new Error('(SS12000::To::Activities) Some top layer Activities are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return activities.map((activity): Activity => {\n const division = belongsTo ?? (!isString(activity) ? activity.belongsTo : undefined);\n if (!division || isString(division) || !('id' in division && division.id))\n throw new Error('(SS12000::To::Activities) Some events members are missing \"belongsTo\" values', { cause: 'invalid_input' });\n if (!('start' in division && division.start) || !('end' in division && division.end))\n throw new Error('(SS12000::To::Activities) Some events members are missing \"belongsTo\" start or end values', { cause: 'invalid_input' });\n\n return {\n id: `${ getDivisionId(activity, belongsTo) }.${ isString(activity) ? activity : activity.id }`,\n calendarEventsRequired: 'course' in activity, // true for events, false for courses\n activityType: mapActivityType(activity.type),\n startDate: moment(division.start).toISOString(),\n ...typeof activity != 'string' && {\n meta: {\n created: moment(activity.createdAt).toISOString(),\n modified: moment(activity.updatedAt).toISOString()\n },\n ...omitBy({\n foreignId: activity.ids,\n displayName: activity.displayName,\n comment: get(activity, 'comment'),\n subject: get(activity, 'subject'),\n }, isNil),\n // @ts-ignore\n ...activity.groups && { groups: toReference(map(activity.groups, 'to'), division, expand?.includes('referenceNames')) },\n // @ts-ignore\n ...activity.teachers && { teachers: activity.teachers.map(({ to }) => ({ duty: toReference([to], belongsTo ?? activity.belongsTo, expand?.includes('referenceNames'))[0] as Duty })) },\n ...'course' in activity && typeof activity.course == 'object' && 'id' in activity.course && activity.course.id && {\n // @ts-ignore\n parentActivity: toReference([activity.course as CoreTypes.mixed.course], division, expand?.includes('referenceNames'))[0]\n },\n ...activity.locations && { rooms: activity.locations.map(({ locations, groupIndex }) => ({\n // @ts-ignore\n room: toReference(locations as any, division, expand?.includes('referenceNames'))[0],\n index: groupIndex\n }))\n },\n // syllabus: {\n // id: activity.id!,\n // ...expandReferenceNames && { displayName: activity.displayName }\n // },\n ...expand?.some(x => ['groups', 'teachers', 'syllabus'].includes(x)) && {\n _embedded: {\n ...expand.includes('groups') && {\n // @ts-ignore\n ...activity.groups && { groups: toGroup(map(activity.groups, 'to'), division) }\n },\n ...expand.includes('teachers') && {\n // @ts-ignore\n ...activity.teachers && { teachers: toTeacher(map(activity.teachers, 'to'), division) }\n },\n // ...expand.includes('syllabus') && {\n // syllabus: {\n // id: activity.id!,\n // displayName: activity.displayName,\n // }\n // },\n }\n }\n }\n }\n });\n};"],"mappings":";;;;;;;AAYA,SAAS,gBAAiB,MAA8C;AACtE,SAAQ,MAAR;EACE,KAAK,QACH,QAAO;EACT,QACE,QAAO;;;;;;AAOb,0BACE,YACA,WACA,WACe;AACf,KAAI,CAAC,MAAM,QAAQ,YACjB,OAAM,IAAI,MAAM,mEAAmE,EAAE,OAAO;AAE9F,KAAI,CAAC,WAAW,OAAO,aAAa,SAAS,aAAa,SAAS,IAAI,UAAU,QAC/E,OAAM,IAAI,MAAM,uEAAqE,EAAE,OAAO;AAEhG,KAAI,CAAC,aAAa,CAAC,WAAW,OAAO,aAAc,SAAS,aAAa,aAAc,IAAI,UAAU,cACnG,OAAM,IAAI,MAAM,wFAAsF,EAAE,OAAO;AAEjH,QAAO,WAAW,KAAK,aAAuB;EAC5C,MAAM,WAAW,cAAc,CAAC,SAAS,YAAY,SAAS,YAAY;AAC1E,MAAI,CAAC,YAAY,SAAS,aAAa,EAAE,QAAQ,YAAY,SAAS,IACpE,OAAM,IAAI,MAAM,kFAAgF,EAAE,OAAO;AAC3G,MAAI,EAAE,WAAW,YAAY,SAAS,UAAU,EAAE,SAAS,YAAY,SAAS,KAC9E,OAAM,IAAI,MAAM,+FAA6F,EAAE,OAAO;AAExH,SAAO;GACL,IAAwB,GAAI,cAAc,UAAU,WAAY,GAAI,SAAS,YAAY,WAAW,SAAS;GAC7G,wBAAwB,YAAY;GACpC,cAAwB,gBAAgB,SAAS;GACjD,WAAwB,OAAO,SAAS,OAAO;GAC/C,GAAG,OAAO,YAAY,YAAY;IAChC,MAAM;KACJ,SAAU,OAAO,SAAS,WAAW;KACrC,UAAU,OAAO,SAAS,WAAW;;IAEvC,GAAG,OAAO;KACR,WAAa,SAAS;KACtB,aAAa,SAAS;KACtB,SAAa,IAAI,UAAU;KAC3B,SAAa,IAAI,UAAU;OAC1B;IAEH,GAAG,SAAS,UAAe,EAAE,QAAe,YAAY,IAAI,SAAS,QAAQ,OAAO,UAAU,QAAQ,SAAS;IAE/G,GAAG,SAAS,YAAe,EAAE,UAAU,SAAS,SAAS,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC,KAAK,aAAa,SAAS,WAAW,QAAQ,SAAS,mBAAmB;IACzK,GAAG,YAAY,YAAY,OAAO,SAAS,UAAU,YAAY,QAAQ,SAAS,UAAU,SAAS,OAAO,MAAM,EAEhH,gBAAgB,YAAY,CAAC,SAAS,SAAmC,UAAU,QAAQ,SAAS,mBAAmB;IAEzH,GAAG,SAAS,aAAc,EAAE,OAAO,SAAS,UAAU,KAAK,EAAE,WAAW,kBAAkB;KAExF,MAAO,YAAY,WAAkB,UAAU,QAAQ,SAAS,mBAAmB;KACnF,OAAO;;IAOT,GAAG,QAAQ,MAAK,MAAK;KAAC;KAAU;KAAY;MAAY,SAAS,OAAO,EACtE,WAAW;KACT,GAAG,OAAO,SAAS,aAAa,EAE9B,GAAG,SAAS,UAAU,EAAE,QAAQA,eAAQ,IAAI,SAAS,QAAQ,OAAO;KAEtE,GAAG,OAAO,SAAS,eAAe,EAEhC,GAAG,SAAS,YAAY,EAAE,UAAUC,eAAU,IAAI,SAAS,UAAU,OAAO"}
@@ -0,0 +1,53 @@
1
+ import { getDivisionId, toReference } from "./common.js";
2
+ import groups_default from "./groups.js";
3
+ import duties_default from "./duties.js";
4
+ import activities_default from "./activities.js";
5
+ import { get, has, isNil, isNull, isString, map, omitBy, reject } from "lodash-es";
6
+ import moment from "moment";
7
+
8
+ //#region src/SS12000/to/calendar-events.ts
9
+ var calendar_events_default = (events, belongsTo, expand) => {
10
+ if (!Array.isArray(events)) throw new Error("(SS12000::To::CalendarEvents) CalendarEvent input is not of array type", { cause: "invalid_input" });
11
+ if (!events.every((event) => isString(event) || isString(get(event, "id")))) throw new Error("(SS12000::To::CalendarEvents) Some CalendarEvents are missing \"id\" values", { cause: "invalid_input" });
12
+ if (!belongsTo && !events.every((event) => isString(event) && belongsTo || has(event, "belongsTo"))) throw new Error("(SS12000::To::CalendarEvents) Some top layer CalendarEvents are missing \"belongsTo\" values", { cause: "invalid_input" });
13
+ return events.map((event) => {
14
+ const division = belongsTo ?? (!isString(event) ? event.belongsTo : void 0);
15
+ if (!division || isString(division) || !("id" in division && division.id)) throw new Error("(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" values", { cause: "invalid_input" });
16
+ if (!("start" in division && division.start) || !("end" in division && division.end)) throw new Error("(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" start or end values", { cause: "invalid_input" });
17
+ const course = !isString(event) && event.course && !isString(event.course) ? event.course : void 0;
18
+ return {
19
+ id: `${getDivisionId(event, belongsTo)}.${isString(event) ? event : event.id}`,
20
+ ...!isString(event) && {
21
+ meta: {
22
+ created: moment(event.createdAt).toISOString(),
23
+ modified: moment(event.updatedAt).toISOString(),
24
+ ...event.type && { type: event.type }
25
+ },
26
+ ...omitBy({
27
+ foreignId: event.ids,
28
+ color: event.color ?? course?.color
29
+ }, isNil),
30
+ startTime: event.start?.toString(),
31
+ endTime: event.end?.toString(),
32
+ ...course && { activity: toReference([course], division, expand?.includes("referenceNames"))[0] },
33
+ rooms: toReference(reject(event.inLocations, isNull) ?? [], division, expand?.includes("referenceNames")),
34
+ resources: toReference([], division, expand?.includes("referenceNames")),
35
+ teachers: toReference(map(event.teachers ?? course?.teachers ?? [], "to"), division, expand?.includes("referenceNames")),
36
+ groups: toReference(map(event.groups ?? course?.groups ?? [], "to"), division, expand?.includes("referenceNames")),
37
+ ...expand?.some((x) => [
38
+ "groups",
39
+ "teachers",
40
+ "activity"
41
+ ].includes(x)) && { _embedded: {
42
+ ...expand.includes("groups") && { groups: groups_default(map(event.groups, "to"), division) },
43
+ ...expand.includes("teachers") && { teachers: duties_default(map(event.teachers, "to"), division) },
44
+ ...expand.includes("activity") && course && { activity: activities_default([course], division)[0] }
45
+ } }
46
+ }
47
+ };
48
+ });
49
+ };
50
+
51
+ //#endregion
52
+ export { calendar_events_default as default };
53
+ //# sourceMappingURL=calendar-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-events.js","names":["toGroup","toTeacher","toActivities"],"sources":["../../../src/SS12000/to/calendar-events.ts"],"sourcesContent":["import { isString, has, get, omitBy, isNil, isNull, map, reject } from 'lodash-es';\nimport moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { CalendarEvent } from '../types/calendar-events';\nimport { getDivisionId, toReference } from './common';\nimport toActivities from './activities';\nimport toGroup from './groups';\nimport toTeacher from './duties';\n\ntype Expand = ('referenceNames' | 'teachers' | 'activity' | 'groups')[];\n\nexport default (\n events: Extract<CoreTypes.mixed.event, { id: string }>[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expand?: Expand\n): Partial<CalendarEvent>[] => {\n if (!Array.isArray(events))\n throw new Error('(SS12000::To::CalendarEvents) CalendarEvent input is not of array type', { cause: 'invalid_input' });\n\n if (!events.every((event) => isString(event) || isString(get(event, 'id'))))\n throw new Error('(SS12000::To::CalendarEvents) Some CalendarEvents are missing \"id\" values', { cause: 'invalid_input' });\n\n if (!belongsTo && !events.every((event) => (isString(event) && belongsTo) || has(event, 'belongsTo')))\n throw new Error('(SS12000::To::CalendarEvents) Some top layer CalendarEvents are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return events.map((event) => {\n const division = belongsTo ?? (!isString(event) ? event.belongsTo : undefined);\n if (!division || isString(division) || !('id' in division && division.id))\n throw new Error('(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" values', { cause: 'invalid_input' });\n if (!('start' in division && division.start) || !('end' in division && division.end))\n throw new Error('(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" start or end values', { cause: 'invalid_input' });\n\n const course = (!isString(event) && event.course && !isString(event.course)) ?\n event.course as Extract<CoreTypes.mixed.course, { id: string }>\n : undefined;\n\n return {\n id: `${ getDivisionId(event, belongsTo) }.${ isString(event) ? event : event.id }`,\n ...!isString(event) && {\n meta: {\n created: moment(event.createdAt).toISOString(),\n modified: moment(event.updatedAt).toISOString(),\n ...event.type && { type: event.type },\n },\n ...omitBy({\n foreignId: event.ids,\n color: event.color ?? course?.color,\n }, isNil),\n startTime: event.start?.toString(),\n endTime: event.end?.toString(),\n // Locked times have no course, so we need to check for it\n // @ts-ignore\n ...course && { activity: toReference([course], division, expand?.includes('referenceNames'))[0] },\n // @ts-ignore\n rooms: toReference(reject(event.inLocations, isNull) ?? [], division, expand?.includes('referenceNames')),\n // @ts-ignore\n resources: toReference([], division, expand?.includes('referenceNames')),\n // @ts-ignore\n teachers: toReference(map(event.teachers ?? course?.teachers ?? [], 'to'), division, expand?.includes('referenceNames')),\n // @ts-ignore\n groups: toReference(map(event.groups ?? course?.groups ?? [], 'to'), division, expand?.includes('referenceNames')),\n ...expand?.some(x => ['groups', 'teachers', 'activity'].includes(x)) && {\n _embedded: {\n ...expand.includes('groups') && {\n // @ts-ignore\n groups: toGroup(map(event.groups, 'to'), division)\n },\n ...expand.includes('teachers') && {\n // @ts-ignore\n teachers: toTeacher(map(event.teachers, 'to'), division)\n },\n ...(expand.includes('activity') && course)&& {\n activity: toActivities([course], division as Extract<CoreTypes.division, { id: string }>)[0]\n }\n }\n }\n }\n }\n });\n};\n"],"mappings":";;;;;;;;AAWA,+BACE,QACA,WACA,WAC6B;AAC7B,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,0EAA0E,EAAE,OAAO;AAErG,KAAI,CAAC,OAAO,OAAO,UAAU,SAAS,UAAU,SAAS,IAAI,OAAO,QAClE,OAAM,IAAI,MAAM,+EAA6E,EAAE,OAAO;AAExG,KAAI,CAAC,aAAa,CAAC,OAAO,OAAO,UAAW,SAAS,UAAU,aAAc,IAAI,OAAO,cACtF,OAAM,IAAI,MAAM,gGAA8F,EAAE,OAAO;AAEzH,QAAO,OAAO,KAAK,UAAU;EAC3B,MAAM,WAAW,cAAc,CAAC,SAAS,SAAS,MAAM,YAAY;AACpE,MAAI,CAAC,YAAY,SAAS,aAAa,EAAE,QAAQ,YAAY,SAAS,IACpE,OAAM,IAAI,MAAM,sFAAoF,EAAE,OAAO;AAC/G,MAAI,EAAE,WAAW,YAAY,SAAS,UAAU,EAAE,SAAS,YAAY,SAAS,KAC9E,OAAM,IAAI,MAAM,mGAAiG,EAAE,OAAO;EAE5H,MAAM,SAAU,CAAC,SAAS,UAAU,MAAM,UAAU,CAAC,SAAS,MAAM,UAClE,MAAM,SACJ;AAEJ,SAAO;GACL,IAAI,GAAI,cAAc,OAAO,WAAY,GAAI,SAAS,SAAS,QAAQ,MAAM;GAC7E,GAAG,CAAC,SAAS,UAAU;IACrB,MAAM;KACJ,SAAU,OAAO,MAAM,WAAW;KAClC,UAAU,OAAO,MAAM,WAAW;KAClC,GAAG,MAAM,QAAiB,EAAE,MAAM,MAAM;;IAE1C,GAAG,OAAO;KACR,WAAW,MAAM;KACjB,OAAW,MAAM,SAAS,QAAQ;OACjC;IACH,WAAW,MAAM,OAAO;IACxB,SAAW,MAAM,KAAK;IAGtB,GAAG,UAAU,EAAE,UAAU,YAAY,CAAC,SAAS,UAAU,QAAQ,SAAS,mBAAmB;IAE7F,OAAW,YAAY,OAAO,MAAM,aAAa,WAAW,IAAI,UAAU,QAAQ,SAAS;IAE3F,WAAW,YAAY,IAAI,UAAU,QAAQ,SAAS;IAEtD,UAAW,YAAY,IAAI,MAAM,YAAY,QAAQ,YAAY,IAAI,OAAO,UAAU,QAAQ,SAAS;IAEvG,QAAW,YAAY,IAAI,MAAM,UAAU,QAAQ,UAAU,IAAI,OAAO,UAAU,QAAQ,SAAS;IACnG,GAAG,QAAQ,MAAK,MAAK;KAAC;KAAU;KAAY;MAAY,SAAS,OAAO,EACtE,WAAW;KACT,GAAG,OAAO,SAAS,aAAa,EAE9B,QAAQA,eAAQ,IAAI,MAAM,QAAQ,OAAO;KAE3C,GAAG,OAAO,SAAS,eAAe,EAEhC,UAAUC,eAAU,IAAI,MAAM,UAAU,OAAO;KAEjD,GAAI,OAAO,SAAS,eAAe,UAAU,EAC3C,UAAUC,mBAAa,CAAC,SAAS,UAAyD"}
@@ -0,0 +1,25 @@
1
+ import { isNil, isObject, isString, omitBy } from "lodash-es";
2
+
3
+ //#region src/SS12000/to/common.ts
4
+ function toReference(input, belongsTo, expandReferenceNames) {
5
+ return input.map((x) => {
6
+ if (!(belongsTo && "id" in belongsTo && belongsTo.id) && !isString(x) && (!x.belongsTo || isString(x.belongsTo) || !("id" in x.belongsTo && x.belongsTo.id))) throw new Error("(SS12000::To::Reference) Some top layer entities are missing \"belongsTo\" values", { cause: "invalid_input" });
7
+ return {
8
+ id: `${getDivisionId(x, belongsTo)}.${isString(x) ? x : x.id}`,
9
+ ...!isString(x) && { ...omitBy({
10
+ foreignId: x.ids,
11
+ ...expandReferenceNames && { displayName: x.displayName }
12
+ }, isNil) }
13
+ };
14
+ });
15
+ }
16
+ function getDivisionId(entity, division) {
17
+ if (division) return division.id;
18
+ if (isString(entity)) throw new Error("(SS12000::To::getDivisionId) belongsTo is missing \"id\" value", { cause: "invalid_input" });
19
+ if (!isObject(entity) || !("belongsTo" in entity) || !entity.belongsTo || !isObject(entity.belongsTo) || !("id" in entity.belongsTo) || !isString(entity.belongsTo.id)) throw new Error("(SS12000::To::getDivisionId) entity is missing \"belongsTo.id\" value", { cause: "invalid_input" });
20
+ return entity.belongsTo.id;
21
+ }
22
+
23
+ //#endregion
24
+ export { getDivisionId, toReference };
25
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","names":[],"sources":["../../../src/SS12000/to/common.ts"],"sourcesContent":["import { isString, omitBy, isNil, isObject } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\n\nexport function toReference<T extends Partial<{\n id: string,\n belongsTo?: CoreTypes.division | string,\n ids: string,\n displayName: string\n}>> (\n input: T[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expandReferenceNames?: boolean\n) {\n return input.map((x) => {\n // Bth belongsTo.id and entity.belongsto.id cant be missing\n if (!(belongsTo && 'id' in belongsTo && belongsTo.id) && !isString(x) && (!x.belongsTo || isString(x.belongsTo) || !('id' in x.belongsTo && x.belongsTo.id)))\n throw new Error('(SS12000::To::Reference) Some top layer entities are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return {\n id: `${ getDivisionId(x, belongsTo) }.${ isString(x) ? x : x.id }`,\n ...!isString(x) && {\n ...omitBy({\n foreignId: x.ids,\n ...expandReferenceNames && { displayName: x.displayName }\n }, isNil),\n }\n };\n });\n}\n\nexport function getDivisionId(\n entity: unknown,\n division?: Extract<CoreTypes.division, { id: string }>\n) {\n if (division) return division.id;\n\n if (isString(entity)) {\n throw new Error('(SS12000::To::getDivisionId) belongsTo is missing \"id\" value', { cause: 'invalid_input' });\n };\n if (!isObject(entity) || !('belongsTo' in entity) || !entity.belongsTo || !isObject(entity.belongsTo) || !('id' in entity.belongsTo) || !isString(entity.belongsTo.id))\n throw new Error('(SS12000::To::getDivisionId) entity is missing \"belongsTo.id\" value', { cause: 'invalid_input' });\n return entity.belongsTo.id;\n}"],"mappings":";;;AAGA,SAAgB,YAMd,OACA,WACA,sBACA;AACA,QAAO,MAAM,KAAK,MAAM;AAEtB,MAAI,EAAE,aAAa,QAAQ,aAAa,UAAU,OAAO,CAAC,SAAS,OAAO,CAAC,EAAE,aAAa,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,KACtJ,OAAM,IAAI,MAAM,qFAAmF,EAAE,OAAO;AAE9G,SAAO;GACL,IAAI,GAAI,cAAc,GAAG,WAAY,GAAI,SAAS,KAAK,IAAI,EAAE;GAC7D,GAAG,CAAC,SAAS,MAAM,EACjB,GAAG,OAAO;IACR,WAAW,EAAE;IACb,GAAG,wBAAwB,EAAE,aAAa,EAAE;MAC3C;;;;AAMX,SAAgB,cACd,QACA,UACA;AACA,KAAI,SAAU,QAAO,SAAS;AAE9B,KAAI,SAAS,QACX,OAAM,IAAI,MAAM,kEAAgE,EAAE,OAAO;AAE3F,KAAI,CAAC,SAAS,WAAW,EAAE,eAAe,WAAW,CAAC,OAAO,aAAa,CAAC,SAAS,OAAO,cAAc,EAAE,QAAQ,OAAO,cAAc,CAAC,SAAS,OAAO,UAAU,IACjK,OAAM,IAAI,MAAM,yEAAuE,EAAE,OAAO;AAClG,QAAO,OAAO,UAAU"}
@@ -0,0 +1,45 @@
1
+ import { getDivisionId, toReference } from "./common.js";
2
+ import persons_default from "./persons.js";
3
+ import { get, has, isNil, isString, omitBy } from "lodash-es";
4
+ import moment from "moment";
5
+
6
+ //#region src/SS12000/to/duties.ts
7
+ /**
8
+ * @deprecated This is only used for SCS. can be removed when scs use v2
9
+ */
10
+ var duties_default = (teachers, belongsTo, expand) => {
11
+ if (!Array.isArray(teachers)) throw new Error("(SS12000::To::Duty) Teacher input is not of array type", { cause: "invalid_input" });
12
+ if (!teachers.every((teacher) => isString(teacher) || isString(get(teacher, "id")))) throw new Error("(SS12000::To::Duty) Some teachers are missing \"id\" values", { cause: "invalid_input" });
13
+ if (!belongsTo && !teachers.every((teacher) => isString(teacher) && belongsTo || has(teacher, "belongsTo"))) throw new Error("(SS12000::To::Duty) Some top layer teachers are missing \"belongsTo\" values", { cause: "invalid_input" });
14
+ return teachers.map((teacher) => {
15
+ const division = belongsTo ?? (!isString(teacher) ? teacher.belongsTo : void 0);
16
+ if (!division || isString(division) || !("id" in division && division.id)) throw new Error("(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" values", { cause: "invalid_input" });
17
+ if (!("start" in division && division.start) || !("end" in division && division.end)) throw new Error("(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" start or end values", { cause: "invalid_input" });
18
+ const person = !isString(teacher) && teacher.person && !isString(teacher.person) ? teacher.person : void 0;
19
+ return {
20
+ id: `${getDivisionId(teacher, belongsTo)}.${isString(teacher) ? teacher : teacher.id}`,
21
+ dutyRole: "Lärare",
22
+ startDate: moment(division.start).toISOString(),
23
+ endDate: moment(division.end).toISOString(),
24
+ ...typeof teacher != "string" && {
25
+ meta: {
26
+ created: moment(teacher.createdAt).toISOString(),
27
+ modified: moment(teacher.updatedAt).toISOString()
28
+ },
29
+ ...omitBy({
30
+ foreignId: teacher.ids,
31
+ displayName: teacher.displayName
32
+ }, isNil),
33
+ ...person && { person: {
34
+ ...toReference([person], belongsTo ?? teacher.belongsTo)[0],
35
+ ...expand?.includes("referenceNames") && { displayName: `${person.firstName ?? ""} ${person.lastName ?? ""}` }
36
+ } },
37
+ ...expand?.some((x) => ["person"].includes(x)) && { _embedded: { ...expand.includes("person") && person && { person: persons_default([person], division)[0] } } }
38
+ }
39
+ };
40
+ });
41
+ };
42
+
43
+ //#endregion
44
+ export { duties_default as default };
45
+ //# sourceMappingURL=duties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duties.js","names":["toPerson"],"sources":["../../../src/SS12000/to/duties.ts"],"sourcesContent":["import { isString, has, get, omitBy, isNil } from 'lodash-es';\nimport moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { Duty } from '../types/duties';\nimport { getDivisionId, toReference } from './common';\nimport toPerson from './persons';\n\ntype Expand = ('referenceNames' | 'person')[];\n\n/**\n * @deprecated This is only used for SCS. can be removed when scs use v2\n */\nexport default (\n teachers: Extract<CoreTypes.mixed.teacher, { id: string }>[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expand?: Expand\n): Duty[] => {\n if (!Array.isArray(teachers))\n throw new Error('(SS12000::To::Duty) Teacher input is not of array type', { cause: 'invalid_input' });\n\n if (!teachers.every((teacher) => isString(teacher) || isString(get(teacher, 'id'))))\n throw new Error('(SS12000::To::Duty) Some teachers are missing \"id\" values', { cause: 'invalid_input' });\n\n if (!belongsTo && !teachers.every((teacher) => (isString(teacher) && belongsTo) || has(teacher, 'belongsTo')))\n throw new Error('(SS12000::To::Duty) Some top layer teachers are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return teachers.map((teacher) => {\n const division = belongsTo ?? (!isString(teacher) ? teacher.belongsTo : undefined);\n if (!division || isString(division) || !('id' in division && division.id))\n throw new Error('(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" values', { cause: 'invalid_input' });\n if (!('start' in division && division.start) || !('end' in division && division.end))\n throw new Error('(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" start or end values', { cause: 'invalid_input' });\n\n const person = (!isString(teacher) && teacher.person && !isString(teacher.person)) ?\n teacher.person as Extract<CoreTypes.mixed.person, { id: string }>\n : undefined;\n\n return {\n id: `${ getDivisionId(teacher, belongsTo) }.${ isString(teacher) ? teacher : teacher.id }`,\n dutyRole: 'Lärare' as const,\n startDate: moment(division.start).toISOString(),\n endDate: moment(division.end).toISOString(),\n ...typeof teacher != 'string' && {\n meta: {\n created: moment(teacher.createdAt).toISOString(),\n modified: moment(teacher.updatedAt).toISOString()\n },\n ...omitBy({\n foreignId: teacher.ids,\n displayName: teacher.displayName,\n }, isNil),\n ...person && {\n person: {\n // @ts-ignore\n ...toReference([person], belongsTo ?? teacher.belongsTo)[0],\n ...expand?.includes('referenceNames') && {\n displayName: `${ person.firstName ?? '' } ${ person.lastName ?? '' }`\n }\n }\n },\n ...expand?.some(x => ['person'].includes(x)) && {\n _embedded: {\n ...(expand.includes('person') && person) && {\n person: toPerson([person], division as Extract<CoreTypes.division, { id: string }>)[0]\n }\n }\n }\n }\n };\n });\n};"],"mappings":";;;;;;;;;AAYA,sBACE,UACA,WACA,WACW;AACX,KAAI,CAAC,MAAM,QAAQ,UACjB,OAAM,IAAI,MAAM,0DAA0D,EAAE,OAAO;AAErF,KAAI,CAAC,SAAS,OAAO,YAAY,SAAS,YAAY,SAAS,IAAI,SAAS,QAC1E,OAAM,IAAI,MAAM,+DAA6D,EAAE,OAAO;AAExF,KAAI,CAAC,aAAa,CAAC,SAAS,OAAO,YAAa,SAAS,YAAY,aAAc,IAAI,SAAS,cAC9F,OAAM,IAAI,MAAM,gFAA8E,EAAE,OAAO;AAEzG,QAAO,SAAS,KAAK,YAAY;EAC/B,MAAM,WAAW,cAAc,CAAC,SAAS,WAAW,QAAQ,YAAY;AACxE,MAAI,CAAC,YAAY,SAAS,aAAa,EAAE,QAAQ,YAAY,SAAS,IACpE,OAAM,IAAI,MAAM,8EAA4E,EAAE,OAAO;AACvG,MAAI,EAAE,WAAW,YAAY,SAAS,UAAU,EAAE,SAAS,YAAY,SAAS,KAC9E,OAAM,IAAI,MAAM,2FAAyF,EAAE,OAAO;EAEpH,MAAM,SAAU,CAAC,SAAS,YAAY,QAAQ,UAAU,CAAC,SAAS,QAAQ,UACxE,QAAQ,SACN;AAEJ,SAAO;GACL,IAAW,GAAI,cAAc,SAAS,WAAY,GAAI,SAAS,WAAW,UAAU,QAAQ;GAC5F,UAAW;GACX,WAAW,OAAO,SAAS,OAAO;GAClC,SAAW,OAAO,SAAS,KAAK;GAChC,GAAG,OAAO,WAAW,YAAY;IAC/B,MAAM;KACJ,SAAU,OAAO,QAAQ,WAAW;KACpC,UAAU,OAAO,QAAQ,WAAW;;IAEtC,GAAG,OAAO;KACR,WAAa,QAAQ;KACrB,aAAa,QAAQ;OACpB;IACH,GAAG,UAAU,EACX,QAAQ;KAEN,GAAG,YAAY,CAAC,SAAS,aAAa,QAAQ,WAAW;KACzD,GAAG,QAAQ,SAAS,qBAAqB,EACvC,aAAa,GAAI,OAAO,aAAa,GAAI,GAAI,OAAO,YAAY;;IAItE,GAAG,QAAQ,MAAK,MAAK,CAAC,UAAU,SAAS,OAAO,EAC9C,WAAW,EACT,GAAI,OAAO,SAAS,aAAa,UAAW,EAC1C,QAAQA,gBAAS,CAAC,SAAS,UAAyD"}