@craftguild/jscalendar 0.5.2 → 0.5.4

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 (124) hide show
  1. package/README.md +130 -94
  2. package/dist/index.cjs +3923 -0
  3. package/dist/index.d.cts +802 -0
  4. package/dist/index.d.mts +802 -0
  5. package/dist/index.mjs +3927 -0
  6. package/package.json +46 -31
  7. package/dist/__tests__/builders.test.d.ts +0 -1
  8. package/dist/__tests__/builders.test.js +0 -101
  9. package/dist/__tests__/calendar-extra.test.d.ts +0 -1
  10. package/dist/__tests__/calendar-extra.test.js +0 -221
  11. package/dist/__tests__/calendar.test.d.ts +0 -1
  12. package/dist/__tests__/calendar.test.js +0 -97
  13. package/dist/__tests__/ical-extra.test.d.ts +0 -1
  14. package/dist/__tests__/ical-extra.test.js +0 -87
  15. package/dist/__tests__/ical.test.d.ts +0 -1
  16. package/dist/__tests__/ical.test.js +0 -72
  17. package/dist/__tests__/index.test.d.ts +0 -1
  18. package/dist/__tests__/index.test.js +0 -9
  19. package/dist/__tests__/patch.test.d.ts +0 -1
  20. package/dist/__tests__/patch.test.js +0 -47
  21. package/dist/__tests__/recurrence.test.d.ts +0 -1
  22. package/dist/__tests__/recurrence.test.js +0 -640
  23. package/dist/__tests__/search.test.d.ts +0 -1
  24. package/dist/__tests__/search.test.js +0 -264
  25. package/dist/__tests__/timezones.test.d.ts +0 -1
  26. package/dist/__tests__/timezones.test.js +0 -12
  27. package/dist/__tests__/utils.test.d.ts +0 -1
  28. package/dist/__tests__/utils.test.js +0 -127
  29. package/dist/__tests__/validation.test.d.ts +0 -1
  30. package/dist/__tests__/validation.test.js +0 -224
  31. package/dist/ical.d.ts +0 -13
  32. package/dist/ical.js +0 -270
  33. package/dist/index.d.ts +0 -3
  34. package/dist/index.js +0 -2
  35. package/dist/jscal/base.d.ts +0 -89
  36. package/dist/jscal/base.js +0 -173
  37. package/dist/jscal/builders.d.ts +0 -183
  38. package/dist/jscal/builders.js +0 -287
  39. package/dist/jscal/constants.d.ts +0 -11
  40. package/dist/jscal/constants.js +0 -11
  41. package/dist/jscal/datetime.d.ts +0 -14
  42. package/dist/jscal/datetime.js +0 -42
  43. package/dist/jscal/defaults.d.ts +0 -31
  44. package/dist/jscal/defaults.js +0 -102
  45. package/dist/jscal/duration.d.ts +0 -43
  46. package/dist/jscal/duration.js +0 -75
  47. package/dist/jscal/event.d.ts +0 -23
  48. package/dist/jscal/event.js +0 -78
  49. package/dist/jscal/group.d.ts +0 -31
  50. package/dist/jscal/group.js +0 -69
  51. package/dist/jscal/guards.d.ts +0 -19
  52. package/dist/jscal/guards.js +0 -25
  53. package/dist/jscal/ids.d.ts +0 -11
  54. package/dist/jscal/ids.js +0 -77
  55. package/dist/jscal/normalize.d.ts +0 -32
  56. package/dist/jscal/normalize.js +0 -45
  57. package/dist/jscal/task.d.ts +0 -23
  58. package/dist/jscal/task.js +0 -67
  59. package/dist/jscal/types.d.ts +0 -38
  60. package/dist/jscal/types.js +0 -1
  61. package/dist/jscal.d.ts +0 -145
  62. package/dist/jscal.js +0 -126
  63. package/dist/patch.d.ts +0 -18
  64. package/dist/patch.js +0 -216
  65. package/dist/recurrence/constants.d.ts +0 -13
  66. package/dist/recurrence/constants.js +0 -13
  67. package/dist/recurrence/date-utils.d.ts +0 -125
  68. package/dist/recurrence/date-utils.js +0 -259
  69. package/dist/recurrence/expand.d.ts +0 -23
  70. package/dist/recurrence/expand.js +0 -315
  71. package/dist/recurrence/rule-candidates.d.ts +0 -21
  72. package/dist/recurrence/rule-candidates.js +0 -120
  73. package/dist/recurrence/rule-generate.d.ts +0 -11
  74. package/dist/recurrence/rule-generate.js +0 -36
  75. package/dist/recurrence/rule-matchers.d.ts +0 -34
  76. package/dist/recurrence/rule-matchers.js +0 -120
  77. package/dist/recurrence/rule-normalize.d.ts +0 -9
  78. package/dist/recurrence/rule-normalize.js +0 -57
  79. package/dist/recurrence/rule-selectors.d.ts +0 -7
  80. package/dist/recurrence/rule-selectors.js +0 -21
  81. package/dist/recurrence/rules.d.ts +0 -14
  82. package/dist/recurrence/rules.js +0 -57
  83. package/dist/recurrence/types.d.ts +0 -27
  84. package/dist/recurrence/types.js +0 -1
  85. package/dist/recurrence.d.ts +0 -2
  86. package/dist/recurrence.js +0 -1
  87. package/dist/search.d.ts +0 -44
  88. package/dist/search.js +0 -292
  89. package/dist/timezones/chunk_1.d.ts +0 -2
  90. package/dist/timezones/chunk_1.js +0 -72
  91. package/dist/timezones/chunk_2.d.ts +0 -2
  92. package/dist/timezones/chunk_2.js +0 -72
  93. package/dist/timezones/chunk_3.d.ts +0 -2
  94. package/dist/timezones/chunk_3.js +0 -72
  95. package/dist/timezones/chunk_4.d.ts +0 -2
  96. package/dist/timezones/chunk_4.js +0 -72
  97. package/dist/timezones/chunk_5.d.ts +0 -2
  98. package/dist/timezones/chunk_5.js +0 -72
  99. package/dist/timezones/chunk_6.d.ts +0 -2
  100. package/dist/timezones/chunk_6.js +0 -72
  101. package/dist/timezones/chunk_7.d.ts +0 -2
  102. package/dist/timezones/chunk_7.js +0 -6
  103. package/dist/timezones.d.ts +0 -9
  104. package/dist/timezones.js +0 -452
  105. package/dist/types.d.ts +0 -246
  106. package/dist/types.js +0 -1
  107. package/dist/utils.d.ts +0 -82
  108. package/dist/utils.js +0 -164
  109. package/dist/validate/asserts.d.ts +0 -155
  110. package/dist/validate/asserts.js +0 -381
  111. package/dist/validate/constants.d.ts +0 -25
  112. package/dist/validate/constants.js +0 -33
  113. package/dist/validate/error.d.ts +0 -19
  114. package/dist/validate/error.js +0 -25
  115. package/dist/validate/validators-common.d.ts +0 -64
  116. package/dist/validate/validators-common.js +0 -390
  117. package/dist/validate/validators-objects.d.ts +0 -8
  118. package/dist/validate/validators-objects.js +0 -70
  119. package/dist/validate/validators-recurrence.d.ts +0 -15
  120. package/dist/validate/validators-recurrence.js +0 -115
  121. package/dist/validate/validators.d.ts +0 -1
  122. package/dist/validate/validators.js +0 -1
  123. package/dist/validate.d.ts +0 -2
  124. package/dist/validate.js +0 -2
@@ -1,72 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { JsCal } from "../jscal.js";
3
- const event = {
4
- "@type": "Event",
5
- uid: "e1",
6
- updated: "2026-02-01T00:00:00Z",
7
- title: "Demo",
8
- description: "Details",
9
- sequence: 2,
10
- start: "2026-02-01T10:00:00",
11
- timeZone: "America/New_York",
12
- duration: "PT30M",
13
- status: "confirmed",
14
- recurrenceRules: [
15
- {
16
- "@type": "RecurrenceRule",
17
- frequency: "weekly",
18
- byDay: [{ "@type": "NDay", day: "mo" }],
19
- },
20
- ],
21
- };
22
- describe("toICal", () => {
23
- it("exports minimal VEVENT with X-JSCALENDAR", () => {
24
- const ical = JsCal.toICal([event], { includeXJSCalendar: true });
25
- expect(ical).toContain("BEGIN:VCALENDAR");
26
- expect(ical).toContain("BEGIN:VEVENT");
27
- expect(ical).toContain("UID:e1");
28
- expect(ical).toContain("DTSTART;TZID=America/New_York:20260201T100000");
29
- expect(ical).toContain("DURATION:PT30M");
30
- expect(ical).toContain("RRULE:FREQ=WEEKLY;BYDAY=MO");
31
- expect(ical).toContain("X-JSCALENDAR:");
32
- expect(ical).toContain("END:VEVENT");
33
- expect(ical).toContain("END:VCALENDAR");
34
- });
35
- it("omits X-JSCALENDAR when disabled", () => {
36
- const ical = JsCal.toICal([event], { includeXJSCalendar: false });
37
- expect(ical).not.toContain("X-JSCALENDAR:");
38
- });
39
- it("exports full recurrence rule fields", () => {
40
- const rich = {
41
- "@type": "Event",
42
- uid: "e2",
43
- updated: "2026-02-01T00:00:00Z",
44
- title: "Rich",
45
- start: "2026-02-01T10:00:00",
46
- recurrenceRules: [
47
- {
48
- "@type": "RecurrenceRule",
49
- frequency: "monthly",
50
- interval: 2,
51
- count: 5,
52
- until: "2026-12-31T00:00:00",
53
- byDay: [{ "@type": "NDay", day: "mo", nthOfPeriod: 1 }],
54
- byMonthDay: [1, -1],
55
- byMonth: ["2", "3"],
56
- byYearDay: [32],
57
- byWeekNo: [1],
58
- byHour: [9],
59
- byMinute: [30],
60
- bySecond: [15],
61
- bySetPosition: [1],
62
- firstDayOfWeek: "mo",
63
- rscale: "gregorian",
64
- skip: "forward",
65
- },
66
- ],
67
- };
68
- const ical = JsCal.toICal([rich]);
69
- const unfolded = ical.replace(/\r\n[ \t]/g, "");
70
- expect(unfolded).toContain("RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5;UNTIL=20261231T000000;BYDAY=1MO;BYMONTHDAY=1,-1;BYMONTH=2,3;BYYEARDAY=32;BYWEEKNO=1;BYHOUR=9;BYMINUTE=30;BYSECOND=15;BYSETPOS=1;WKST=MO;RSCALE=GREGORIAN;SKIP=FORWARD");
71
- });
72
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,9 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { JsCal } from "../index.js";
3
- describe("index export", () => {
4
- it("re-exports JsCal", () => {
5
- expect(JsCal.Event).toBeDefined();
6
- expect(JsCal.Task).toBeDefined();
7
- expect(JsCal.Group).toBeDefined();
8
- });
9
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,47 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { applyPatch, PatchError } from "../patch.js";
3
- const base = {
4
- title: "Base",
5
- nested: {
6
- inner: 1,
7
- },
8
- };
9
- describe("applyPatch", () => {
10
- it("sets and removes properties", () => {
11
- const patched = applyPatch(base, {
12
- title: "Updated",
13
- "nested/inner": null,
14
- });
15
- expect(patched.title).toBe("Updated");
16
- expect("inner" in patched.nested).toBe(false);
17
- });
18
- it("rejects missing paths", () => {
19
- expect(() => applyPatch(base, { "missing/value": 1 })).toThrow(PatchError);
20
- });
21
- it("rejects prefix conflicts", () => {
22
- expect(() => applyPatch(base, {
23
- title: "Updated",
24
- "title/value": "Nope",
25
- })).toThrow(PatchError);
26
- });
27
- it("rejects array traversal", () => {
28
- const withArray = { items: [{ name: "a" }] };
29
- expect(() => applyPatch(withArray, { "items/0/name": "b" })).toThrow(PatchError);
30
- });
31
- it("rejects array targets", () => {
32
- const input = [];
33
- expect(() => applyPatch(input, { a: 1 })).toThrow(PatchError);
34
- });
35
- it("rejects missing path segments", () => {
36
- const input = { a: {} };
37
- expect(() => applyPatch(input, { "a/b/c": 1 })).toThrow(PatchError);
38
- });
39
- it("rejects undefined path nodes", () => {
40
- const input = { a: { b: undefined } };
41
- expect(() => applyPatch(input, { "a/b/c": 1 })).toThrow(PatchError);
42
- });
43
- it("handles empty patch", () => {
44
- const patched = applyPatch(base, {});
45
- expect(patched).toEqual(base);
46
- });
47
- });
@@ -1 +0,0 @@
1
- export {};