@churchapps/helpers 1.2.18 → 1.2.20

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.
@@ -1,12 +1,12 @@
1
1
  import { EventInterface } from "./interfaces/index.js";
2
- declare const RRule: any;
3
- type ParsedOptions = Partial<InstanceType<typeof RRule>["options"]>;
2
+ type ParsedOptions = any;
4
3
  export declare class EventHelper {
5
4
  static getRange: (event: EventInterface, startDate: Date, endDate: Date) => any;
6
5
  static getFullRRule: (event: EventInterface) => any;
7
6
  static removeExcludeDates: (events: EventInterface[]) => void;
8
7
  static getPartialRRuleString: (options: ParsedOptions) => any;
9
8
  static cleanRule: (options: ParsedOptions) => void;
9
+ static ensureInitialized: () => Promise<void>;
10
10
  }
11
11
  export {};
12
12
  //# sourceMappingURL=EventHelper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventHelper.d.ts","sourceRoot":"","sources":["../src/EventHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,QAAA,MAAM,KAAK,KAAwD,CAAC;AAGpE,KAAK,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAEpE,qBAAa,WAAW;IAEtB,MAAM,CAAC,QAAQ,GAAI,OAAM,cAAc,EAAE,WAAU,IAAI,EAAE,SAAQ,IAAI,SAYpE;IAED,MAAM,CAAC,YAAY,GAAI,OAAM,cAAc,SAI1C;IAED,MAAM,CAAC,kBAAkB,GAAI,QAAO,cAAc,EAAE,UAQnD;IAED,MAAM,CAAC,qBAAqB,GAAI,SAAQ,aAAa,SAIpD;IAED,MAAM,CAAC,SAAS,GAAI,SAAQ,aAAa,UAIxC;CAEF"}
1
+ {"version":3,"file":"EventHelper.d.ts","sourceRoot":"","sources":["../src/EventHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAiCvD,KAAK,aAAa,GAAG,GAAG,CAAC;AAEzB,qBAAa,WAAW;IAEtB,MAAM,CAAC,QAAQ,GAAI,OAAM,cAAc,EAAE,WAAU,IAAI,EAAE,SAAQ,IAAI,SAYpE;IAED,MAAM,CAAC,YAAY,GAAI,OAAM,cAAc,SAK1C;IAED,MAAM,CAAC,kBAAkB,GAAI,QAAO,cAAc,EAAE,UAQnD;IAED,MAAM,CAAC,qBAAqB,GAAI,SAAQ,aAAa,SAKpD;IAED,MAAM,CAAC,SAAS,GAAI,SAAQ,aAAa,UAIxC;IAGD,MAAM,CAAC,iBAAiB,sBAAe;CACxC"}
@@ -1,11 +1,36 @@
1
- import * as rrule from "rrule";
2
- const RRule = rrule.RRule || rrule.default?.RRule || rrule;
1
+ // Lazy initialization to handle both bundlers and Node.js ESM
2
+ let RRule = null;
3
+ let initPromise = null;
4
+ const ensureRRule = () => {
5
+ if (RRule)
6
+ return Promise.resolve();
7
+ if (!initPromise) {
8
+ initPromise = import("rrule").then((mod) => {
9
+ RRule = mod.RRule ?? mod.default?.RRule ?? mod;
10
+ });
11
+ }
12
+ return initPromise;
13
+ };
14
+ // Synchronous getter for RRule - throws if not initialized
15
+ const getRRule = () => {
16
+ if (!RRule) {
17
+ throw new Error("EventHelper: RRule not initialized. Ensure ensureRRule() is called first.");
18
+ }
19
+ return RRule;
20
+ };
21
+ // Initialize on first use for bundlers (they process the dynamic import statically)
22
+ // The promise is created immediately to start loading
23
+ initPromise = import("rrule").then((mod) => {
24
+ RRule = mod.RRule ?? mod.default?.RRule ?? mod;
25
+ }).catch(() => {
26
+ // rrule not available - EventHelper methods will fail gracefully
27
+ });
3
28
  export class EventHelper {
4
29
  static getRange = (event, startDate, endDate) => {
5
30
  const start = new Date(event.start);
6
31
  const rrule = EventHelper.getFullRRule(event);
7
32
  const dates = rrule.between(startDate, endDate);
8
- dates.forEach(d => {
33
+ dates.forEach((d) => {
9
34
  d.setHours(start.getHours());
10
35
  d.setMinutes(start.getMinutes());
11
36
  d.setSeconds(start.getSeconds());
@@ -13,21 +38,23 @@ export class EventHelper {
13
38
  return dates;
14
39
  };
15
40
  static getFullRRule = (event) => {
16
- let rrule = RRule.fromString(event.recurrenceRule);
41
+ const RR = getRRule();
42
+ let rrule = RR.fromString(event.recurrenceRule);
17
43
  rrule.options.dtstart = new Date(event.start);
18
44
  return rrule;
19
45
  };
20
46
  static removeExcludeDates = (events) => {
21
47
  for (let i = events.length - 1; i >= 0; i--) {
22
48
  if (events[i].exceptionDates?.length > 0) {
23
- const parsedDates = events[i].exceptionDates.map(d => new Date(d).toISOString());
49
+ const parsedDates = events[i].exceptionDates.map((d) => new Date(d).toISOString());
24
50
  if (parsedDates.indexOf(events[i].start.toISOString()) > -1)
25
51
  events.splice(i, 1);
26
52
  }
27
53
  }
28
54
  };
29
55
  static getPartialRRuleString = (options) => {
30
- const parts = new RRule(options).toString().split("RRULE:");
56
+ const RR = getRRule();
57
+ const parts = new RR(options).toString().split("RRULE:");
31
58
  const result = parts.length === 2 ? parts[1] : "";
32
59
  return result;
33
60
  };
@@ -36,5 +63,7 @@ export class EventHelper {
36
63
  options.byminute = undefined;
37
64
  options.bysecond = undefined;
38
65
  };
66
+ // Export for consumers who need to ensure initialization
67
+ static ensureInitialized = ensureRRule;
39
68
  }
40
69
  //# sourceMappingURL=EventHelper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventHelper.js","sourceRoot":"","sources":["../src/EventHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAK,KAAa,CAAC,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;AAKpE,MAAM,OAAO,WAAW;IAEtB,MAAM,CAAC,QAAQ,GAAG,CAAC,KAAoB,EAAE,SAAc,EAAE,OAAY,EAAE,EAAE;QACvE,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEhD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAChB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YACjC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC;IACf,CAAC,CAAA;IAED,MAAM,CAAC,YAAY,GAAG,CAAC,KAAoB,EAAE,EAAE;QAC7C,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC,CAAA;IAED,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAuB,EAAE,EAAE;QACtD,KAAK,IAAI,CAAC,GAAC,MAAM,CAAC,MAAM,GAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,MAAM,GAAC,CAAC,EACtC,CAAC;gBACC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/E,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAC,CAAC,CAAC;oBAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,MAAM,CAAC,qBAAqB,GAAG,CAAC,OAAqB,EAAE,EAAE;QACvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAA;IAED,MAAM,CAAC,SAAS,GAAG,CAAC,OAAqB,EAAE,EAAE;QAC3C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC/B,CAAC,CAAA"}
1
+ {"version":3,"file":"EventHelper.js","sourceRoot":"","sources":["../src/EventHelper.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { PersonInterface } from "./index.js";
2
+ export type DonationStatus = "pending" | "complete" | "failed";
2
3
  export interface DonationBatchInterface {
3
4
  id?: string;
4
5
  name?: string;
@@ -15,6 +16,7 @@ export interface DonationInterface {
15
16
  method?: string;
16
17
  methodDetails?: string;
17
18
  notes?: string;
19
+ status?: DonationStatus;
18
20
  person?: PersonInterface;
19
21
  fund?: FundInterface;
20
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Donation.d.ts","sourceRoot":"","sources":["../../src/interfaces/Donation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Donation.d.ts","sourceRoot":"","sources":["../../src/interfaces/Donation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Donation.js","sourceRoot":"","sources":["../../src/interfaces/Donation.ts"],"names":[],"mappings":"AAuKA,MAAM,OAAO,mBAAmB;IAC9B,EAAE,CAAS;IACX,IAAI,CAAS;IACb,IAAI,CAAS;IACb,KAAK,CAAS;IACd,SAAS,CAAU;IACnB,QAAQ,CAAU;IAClB,MAAM,CAAU;IAChB,mBAAmB,CAAU;IAC7B,mBAAmB,CAAU;IAE7B,YAAY,GAAS;QACnB,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC;QAClC,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE,mBAAmB,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE,mBAAmB,IAAI,YAAY,CAAC;IACtE,CAAC;CACF"}
1
+ {"version":3,"file":"Donation.js","sourceRoot":"","sources":["../../src/interfaces/Donation.ts"],"names":[],"mappings":"AA0KA,MAAM,OAAO,mBAAmB;IAC9B,EAAE,CAAS;IACX,IAAI,CAAS;IACb,IAAI,CAAS;IACb,KAAK,CAAS;IACd,SAAS,CAAU;IACnB,QAAQ,CAAU;IAClB,MAAM,CAAU;IAChB,mBAAmB,CAAU;IAC7B,mBAAmB,CAAU;IAE7B,YAAY,GAAS;QACnB,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC;QAClC,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE,mBAAmB,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE,mBAAmB,IAAI,YAAY,CAAC;IACtE,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@churchapps/helpers",
3
- "version": "1.2.18",
3
+ "version": "1.2.20",
4
4
  "type": "module",
5
5
  "description": "Library of helper functions not specific to any one ChurchApps project or framework.",
6
6
  "main": "dist/index.js",
@@ -51,7 +51,14 @@
51
51
  "typescript": "^5.9.2"
52
52
  },
53
53
  "dependencies": {
54
- "dayjs": "^1.11.18",
54
+ "dayjs": "^1.11.18"
55
+ },
56
+ "peerDependencies": {
55
57
  "rrule": "^2.8.1"
58
+ },
59
+ "peerDependenciesMeta": {
60
+ "rrule": {
61
+ "optional": true
62
+ }
56
63
  }
57
64
  }
@@ -1,9 +1,37 @@
1
1
  import { EventInterface } from "./interfaces/index.js";
2
- import * as rrule from "rrule";
3
- const RRule = rrule.RRule || (rrule as any).default?.RRule || rrule;
4
2
 
5
- // Define ParsedOptions based on RRule's options
6
- type ParsedOptions = Partial<InstanceType<typeof RRule>["options"]>;
3
+ // Lazy initialization to handle both bundlers and Node.js ESM
4
+ let RRule: any = null;
5
+ let initPromise: Promise<void> | null = null;
6
+
7
+ const ensureRRule = () => {
8
+ if (RRule) return Promise.resolve();
9
+ if (!initPromise) {
10
+ initPromise = import("rrule").then((mod) => {
11
+ RRule = (mod as any).RRule ?? (mod as any).default?.RRule ?? mod;
12
+ });
13
+ }
14
+ return initPromise;
15
+ };
16
+
17
+ // Synchronous getter for RRule - throws if not initialized
18
+ const getRRule = () => {
19
+ if (!RRule) {
20
+ throw new Error("EventHelper: RRule not initialized. Ensure ensureRRule() is called first.");
21
+ }
22
+ return RRule;
23
+ };
24
+
25
+ // Initialize on first use for bundlers (they process the dynamic import statically)
26
+ // The promise is created immediately to start loading
27
+ initPromise = import("rrule").then((mod) => {
28
+ RRule = (mod as any).RRule ?? (mod as any).default?.RRule ?? mod;
29
+ }).catch(() => {
30
+ // rrule not available - EventHelper methods will fail gracefully
31
+ });
32
+
33
+ // Define ParsedOptions as any since RRule is dynamically loaded
34
+ type ParsedOptions = any;
7
35
 
8
36
  export class EventHelper {
9
37
 
@@ -13,7 +41,7 @@ export class EventHelper {
13
41
 
14
42
  const dates = rrule.between(startDate, endDate);
15
43
 
16
- dates.forEach(d => {
44
+ dates.forEach((d: Date) => {
17
45
  d.setHours(start.getHours());
18
46
  d.setMinutes(start.getMinutes());
19
47
  d.setSeconds(start.getSeconds());
@@ -22,7 +50,8 @@ export class EventHelper {
22
50
  }
23
51
 
24
52
  static getFullRRule = (event:EventInterface) => {
25
- let rrule = RRule.fromString(event.recurrenceRule);
53
+ const RR = getRRule();
54
+ let rrule = RR.fromString(event.recurrenceRule);
26
55
  rrule.options.dtstart = new Date(event.start);
27
56
  return rrule;
28
57
  }
@@ -31,14 +60,15 @@ export class EventHelper {
31
60
  for (let i=events.length-1; i>=0; i--) {
32
61
  if (events[i].exceptionDates?.length>0)
33
62
  {
34
- const parsedDates = events[i].exceptionDates.map(d=>new Date(d).toISOString());
63
+ const parsedDates = events[i].exceptionDates.map((d: string | Date)=>new Date(d).toISOString());
35
64
  if (parsedDates.indexOf(events[i].start.toISOString())>-1) events.splice(i,1);
36
65
  }
37
66
  }
38
67
  }
39
68
 
40
69
  static getPartialRRuleString = (options:ParsedOptions) => {
41
- const parts = new RRule(options).toString().split("RRULE:");
70
+ const RR = getRRule();
71
+ const parts = new RR(options).toString().split("RRULE:");
42
72
  const result = parts.length===2 ? parts[1] : "";
43
73
  return result;
44
74
  }
@@ -49,4 +79,6 @@ export class EventHelper {
49
79
  options.bysecond = undefined;
50
80
  }
51
81
 
82
+ // Export for consumers who need to ensure initialization
83
+ static ensureInitialized = ensureRRule;
52
84
  }
@@ -1,5 +1,7 @@
1
1
  import { PersonInterface } from "./index.js";
2
2
 
3
+ export type DonationStatus = "pending" | "complete" | "failed";
4
+
3
5
  export interface DonationBatchInterface {
4
6
  id?: string;
5
7
  name?: string;
@@ -16,6 +18,7 @@ export interface DonationInterface {
16
18
  method?: string;
17
19
  methodDetails?: string;
18
20
  notes?: string;
21
+ status?: DonationStatus;
19
22
  person?: PersonInterface;
20
23
  fund?: FundInterface;
21
24
  }