@multisystemsuite/timezone-engine-calendar-sync 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @multisystemsuite/timezone-engine-calendar-sync
2
+
3
+ Enterprise calendar synchronization.
package/dist/index.cjs ADDED
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var dateFns = require('date-fns');
4
+ var timezoneEngineCore = require('@multisystemsuite/timezone-engine-core');
5
+
6
+ // src/index.ts
7
+ function mergeCalendarSources(sources) {
8
+ const merged = sources.flat();
9
+ return merged.sort((a, b) => a.start.getTime() - b.start.getTime());
10
+ }
11
+ function detectCalendarConflicts(events) {
12
+ const conflicts = [];
13
+ for (let i = 0; i < events.length; i++) {
14
+ for (let j = i + 1; j < events.length; j++) {
15
+ const a = events[i];
16
+ const b = events[j];
17
+ if (a && b && dateFns.areIntervalsOverlapping({ start: a.start, end: a.end }, { start: b.start, end: b.end })) {
18
+ conflicts.push([a, b]);
19
+ }
20
+ }
21
+ }
22
+ return conflicts;
23
+ }
24
+ function syncCalendarEvents(events) {
25
+ return events.map((event) => {
26
+ const timezone = timezoneEngineCore.safeTimezoneFallback(event.timezone);
27
+ return {
28
+ ...event,
29
+ timezone,
30
+ start: timezoneEngineCore.toUTC(event.start, timezone),
31
+ end: timezoneEngineCore.toUTC(event.end, timezone)
32
+ };
33
+ });
34
+ }
35
+
36
+ exports.detectCalendarConflicts = detectCalendarConflicts;
37
+ exports.mergeCalendarSources = mergeCalendarSources;
38
+ exports.syncCalendarEvents = syncCalendarEvents;
39
+ //# sourceMappingURL=index.cjs.map
40
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":["areIntervalsOverlapping","safeTimezoneFallback","toUTC"],"mappings":";;;;;;AAKO,SAAS,qBAAqB,OAAA,EAAqD;AACxF,EAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,EAAK;AAC5B,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,OAAA,EAAQ,GAAI,CAAA,CAAE,KAAA,CAAM,OAAA,EAAS,CAAA;AACpE;AAGO,SAAS,wBAAwB,MAAA,EAAoD;AAC1F,EAAA,MAAM,YAAmC,EAAC;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,IAAS,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,MAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,MAAA,IACE,KACA,CAAA,IACAA,+BAAA,CAAwB,EAAE,KAAA,EAAO,CAAA,CAAE,OAAO,GAAA,EAAK,CAAA,CAAE,KAAI,EAAG,EAAE,OAAO,CAAA,CAAE,KAAA,EAAO,KAAK,CAAA,CAAE,GAAA,EAAK,CAAA,EACtF;AACA,QAAA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,SAAA;AACT;AAGO,SAAS,mBAAmB,MAAA,EAAkD;AACnF,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC3B,IAAA,MAAM,QAAA,GAAWC,uCAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA;AACpD,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,QAAA;AAAA,MACA,KAAA,EAAOC,wBAAA,CAAM,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AAAA,MAClC,GAAA,EAAKA,wBAAA,CAAM,KAAA,CAAM,GAAA,EAAK,QAAQ;AAAA,KAChC;AAAA,EACF,CAAC,CAAA;AACH","file":"index.cjs","sourcesContent":["import { areIntervalsOverlapping } from \"date-fns\";\nimport type { CalendarSyncEvent } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { safeTimezoneFallback, toUTC } from \"@multisystemsuite/timezone-engine-core\";\n\n/** Merge calendar events from multiple sources with timezone normalization */\nexport function mergeCalendarSources(sources: CalendarSyncEvent[][]): CalendarSyncEvent[] {\n const merged = sources.flat();\n return merged.sort((a, b) => a.start.getTime() - b.start.getTime());\n}\n\n/** Detect conflicts when syncing calendars across regions */\nexport function detectCalendarConflicts(events: CalendarSyncEvent[]): CalendarSyncEvent[][] {\n const conflicts: CalendarSyncEvent[][] = [];\n for (let i = 0; i < events.length; i++) {\n for (let j = i + 1; j < events.length; j++) {\n const a = events[i];\n const b = events[j];\n if (\n a &&\n b &&\n areIntervalsOverlapping({ start: a.start, end: a.end }, { start: b.start, end: b.end })\n ) {\n conflicts.push([a, b]);\n }\n }\n }\n return conflicts;\n}\n\n/** Normalize external calendar events to UTC for enterprise sync pipelines */\nexport function syncCalendarEvents(events: CalendarSyncEvent[]): CalendarSyncEvent[] {\n return events.map((event) => {\n const timezone = safeTimezoneFallback(event.timezone);\n return {\n ...event,\n timezone,\n start: toUTC(event.start, timezone),\n end: toUTC(event.end, timezone),\n };\n });\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { CalendarSyncEvent } from '@multisystemsuite/timezone-engine-shared-types';
2
+
3
+ /** Merge calendar events from multiple sources with timezone normalization */
4
+ declare function mergeCalendarSources(sources: CalendarSyncEvent[][]): CalendarSyncEvent[];
5
+ /** Detect conflicts when syncing calendars across regions */
6
+ declare function detectCalendarConflicts(events: CalendarSyncEvent[]): CalendarSyncEvent[][];
7
+ /** Normalize external calendar events to UTC for enterprise sync pipelines */
8
+ declare function syncCalendarEvents(events: CalendarSyncEvent[]): CalendarSyncEvent[];
9
+
10
+ export { detectCalendarConflicts, mergeCalendarSources, syncCalendarEvents };
@@ -0,0 +1,10 @@
1
+ import { CalendarSyncEvent } from '@multisystemsuite/timezone-engine-shared-types';
2
+
3
+ /** Merge calendar events from multiple sources with timezone normalization */
4
+ declare function mergeCalendarSources(sources: CalendarSyncEvent[][]): CalendarSyncEvent[];
5
+ /** Detect conflicts when syncing calendars across regions */
6
+ declare function detectCalendarConflicts(events: CalendarSyncEvent[]): CalendarSyncEvent[][];
7
+ /** Normalize external calendar events to UTC for enterprise sync pipelines */
8
+ declare function syncCalendarEvents(events: CalendarSyncEvent[]): CalendarSyncEvent[];
9
+
10
+ export { detectCalendarConflicts, mergeCalendarSources, syncCalendarEvents };
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
1
+ import { areIntervalsOverlapping } from 'date-fns';
2
+ import { safeTimezoneFallback, toUTC } from '@multisystemsuite/timezone-engine-core';
3
+
4
+ // src/index.ts
5
+ function mergeCalendarSources(sources) {
6
+ const merged = sources.flat();
7
+ return merged.sort((a, b) => a.start.getTime() - b.start.getTime());
8
+ }
9
+ function detectCalendarConflicts(events) {
10
+ const conflicts = [];
11
+ for (let i = 0; i < events.length; i++) {
12
+ for (let j = i + 1; j < events.length; j++) {
13
+ const a = events[i];
14
+ const b = events[j];
15
+ if (a && b && areIntervalsOverlapping({ start: a.start, end: a.end }, { start: b.start, end: b.end })) {
16
+ conflicts.push([a, b]);
17
+ }
18
+ }
19
+ }
20
+ return conflicts;
21
+ }
22
+ function syncCalendarEvents(events) {
23
+ return events.map((event) => {
24
+ const timezone = safeTimezoneFallback(event.timezone);
25
+ return {
26
+ ...event,
27
+ timezone,
28
+ start: toUTC(event.start, timezone),
29
+ end: toUTC(event.end, timezone)
30
+ };
31
+ });
32
+ }
33
+
34
+ export { detectCalendarConflicts, mergeCalendarSources, syncCalendarEvents };
35
+ //# sourceMappingURL=index.js.map
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;AAKO,SAAS,qBAAqB,OAAA,EAAqD;AACxF,EAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,EAAK;AAC5B,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,OAAA,EAAQ,GAAI,CAAA,CAAE,KAAA,CAAM,OAAA,EAAS,CAAA;AACpE;AAGO,SAAS,wBAAwB,MAAA,EAAoD;AAC1F,EAAA,MAAM,YAAmC,EAAC;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,KAAA,IAAS,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,MAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,MAAA,IACE,KACA,CAAA,IACA,uBAAA,CAAwB,EAAE,KAAA,EAAO,CAAA,CAAE,OAAO,GAAA,EAAK,CAAA,CAAE,KAAI,EAAG,EAAE,OAAO,CAAA,CAAE,KAAA,EAAO,KAAK,CAAA,CAAE,GAAA,EAAK,CAAA,EACtF;AACA,QAAA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,SAAA;AACT;AAGO,SAAS,mBAAmB,MAAA,EAAkD;AACnF,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC3B,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA;AACpD,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,QAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AAAA,MAClC,GAAA,EAAK,KAAA,CAAM,KAAA,CAAM,GAAA,EAAK,QAAQ;AAAA,KAChC;AAAA,EACF,CAAC,CAAA;AACH","file":"index.js","sourcesContent":["import { areIntervalsOverlapping } from \"date-fns\";\nimport type { CalendarSyncEvent } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { safeTimezoneFallback, toUTC } from \"@multisystemsuite/timezone-engine-core\";\n\n/** Merge calendar events from multiple sources with timezone normalization */\nexport function mergeCalendarSources(sources: CalendarSyncEvent[][]): CalendarSyncEvent[] {\n const merged = sources.flat();\n return merged.sort((a, b) => a.start.getTime() - b.start.getTime());\n}\n\n/** Detect conflicts when syncing calendars across regions */\nexport function detectCalendarConflicts(events: CalendarSyncEvent[]): CalendarSyncEvent[][] {\n const conflicts: CalendarSyncEvent[][] = [];\n for (let i = 0; i < events.length; i++) {\n for (let j = i + 1; j < events.length; j++) {\n const a = events[i];\n const b = events[j];\n if (\n a &&\n b &&\n areIntervalsOverlapping({ start: a.start, end: a.end }, { start: b.start, end: b.end })\n ) {\n conflicts.push([a, b]);\n }\n }\n }\n return conflicts;\n}\n\n/** Normalize external calendar events to UTC for enterprise sync pipelines */\nexport function syncCalendarEvents(events: CalendarSyncEvent[]): CalendarSyncEvent[] {\n return events.map((event) => {\n const timezone = safeTimezoneFallback(event.timezone);\n return {\n ...event,\n timezone,\n start: toUTC(event.start, timezone),\n end: toUTC(event.end, timezone),\n };\n });\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@multisystemsuite/timezone-engine-calendar-sync",
3
+ "version": "2.0.0",
4
+ "description": "Enterprise calendar synchronization for @multisystemsuite/timezone-engine",
5
+ "license": "MIT",
6
+ "author": "MultiSystemSuite",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/multisystemsuite/timezone-engine.git",
10
+ "directory": "packages/timezone-calendar-sync"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "type": "module",
16
+ "main": "./dist/index.cjs",
17
+ "module": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "import": {
22
+ "types": "./dist/index.d.ts",
23
+ "default": "./dist/index.js"
24
+ },
25
+ "require": {
26
+ "types": "./dist/index.d.cts",
27
+ "default": "./dist/index.cjs"
28
+ }
29
+ }
30
+ },
31
+ "sideEffects": false,
32
+ "files": [
33
+ "dist",
34
+ "README.md"
35
+ ],
36
+ "dependencies": {
37
+ "date-fns": "^4.1.0",
38
+ "@multisystemsuite/timezone-engine-core": "2.0.0",
39
+ "@multisystemsuite/timezone-engine-shared-types": "2.0.0"
40
+ },
41
+ "devDependencies": {
42
+ "rimraf": "^6.0.1",
43
+ "tsup": "^8.3.5",
44
+ "typescript": "^5.7.2",
45
+ "vitest": "^2.1.8"
46
+ },
47
+ "scripts": {
48
+ "build": "tsup",
49
+ "dev": "tsup --watch",
50
+ "clean": "rimraf dist",
51
+ "typecheck": "tsc --noEmit",
52
+ "lint": "eslint src",
53
+ "lint:fix": "eslint src --fix",
54
+ "test": "vitest run",
55
+ "test:coverage": "vitest run --coverage"
56
+ }
57
+ }