UNPKG

6.76 kBJavaScriptView Raw
1import { __assign } from "tslib";
2import { freqIsDailyOrGreater } from './types';
3import { includes, notEmpty, isPresent, isNumber, isArray, isWeekdayStr, } from './helpers';
4import { RRule, defaultKeys, DEFAULT_OPTIONS } from './rrule';
5import dateutil from './dateutil';
6import { Weekday } from './weekday';
7import { Time } from './datetime';
8export function initializeOptions(options) {
9 var invalid = [];
10 var keys = Object.keys(options);
11 // Shallow copy for options and origOptions and check for invalid
12 for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
13 var key = keys_1[_i];
14 if (!includes(defaultKeys, key))
15 invalid.push(key);
16 if (dateutil.isDate(options[key]) && !dateutil.isValidDate(options[key])) {
17 invalid.push(key);
18 }
19 }
20 if (invalid.length) {
21 throw new Error('Invalid options: ' + invalid.join(', '));
22 }
23 return __assign({}, options);
24}
25export function parseOptions(options) {
26 var opts = __assign(__assign({}, DEFAULT_OPTIONS), initializeOptions(options));
27 if (isPresent(opts.byeaster))
28 opts.freq = RRule.YEARLY;
29 if (!(isPresent(opts.freq) && RRule.FREQUENCIES[opts.freq])) {
30 throw new Error("Invalid frequency: ".concat(opts.freq, " ").concat(options.freq));
31 }
32 if (!opts.dtstart)
33 opts.dtstart = new Date(new Date().setMilliseconds(0));
34 if (!isPresent(opts.wkst)) {
35 opts.wkst = RRule.MO.weekday;
36 }
37 else if (isNumber(opts.wkst)) {
38 // cool, just keep it like that
39 }
40 else {
41 opts.wkst = opts.wkst.weekday;
42 }
43 if (isPresent(opts.bysetpos)) {
44 if (isNumber(opts.bysetpos))
45 opts.bysetpos = [opts.bysetpos];
46 for (var i = 0; i < opts.bysetpos.length; i++) {
47 var v = opts.bysetpos[i];
48 if (v === 0 || !(v >= -366 && v <= 366)) {
49 throw new Error('bysetpos must be between 1 and 366,' + ' or between -366 and -1');
50 }
51 }
52 }
53 if (!(Boolean(opts.byweekno) ||
54 notEmpty(opts.byweekno) ||
55 notEmpty(opts.byyearday) ||
56 Boolean(opts.bymonthday) ||
57 notEmpty(opts.bymonthday) ||
58 isPresent(opts.byweekday) ||
59 isPresent(opts.byeaster))) {
60 switch (opts.freq) {
61 case RRule.YEARLY:
62 if (!opts.bymonth)
63 opts.bymonth = opts.dtstart.getUTCMonth() + 1;
64 opts.bymonthday = opts.dtstart.getUTCDate();
65 break;
66 case RRule.MONTHLY:
67 opts.bymonthday = opts.dtstart.getUTCDate();
68 break;
69 case RRule.WEEKLY:
70 opts.byweekday = [dateutil.getWeekday(opts.dtstart)];
71 break;
72 }
73 }
74 // bymonth
75 if (isPresent(opts.bymonth) && !isArray(opts.bymonth)) {
76 opts.bymonth = [opts.bymonth];
77 }
78 // byyearday
79 if (isPresent(opts.byyearday) &&
80 !isArray(opts.byyearday) &&
81 isNumber(opts.byyearday)) {
82 opts.byyearday = [opts.byyearday];
83 }
84 // bymonthday
85 if (!isPresent(opts.bymonthday)) {
86 opts.bymonthday = [];
87 opts.bynmonthday = [];
88 }
89 else if (isArray(opts.bymonthday)) {
90 var bymonthday = [];
91 var bynmonthday = [];
92 for (var i = 0; i < opts.bymonthday.length; i++) {
93 var v = opts.bymonthday[i];
94 if (v > 0) {
95 bymonthday.push(v);
96 }
97 else if (v < 0) {
98 bynmonthday.push(v);
99 }
100 }
101 opts.bymonthday = bymonthday;
102 opts.bynmonthday = bynmonthday;
103 }
104 else if (opts.bymonthday < 0) {
105 opts.bynmonthday = [opts.bymonthday];
106 opts.bymonthday = [];
107 }
108 else {
109 opts.bynmonthday = [];
110 opts.bymonthday = [opts.bymonthday];
111 }
112 // byweekno
113 if (isPresent(opts.byweekno) && !isArray(opts.byweekno)) {
114 opts.byweekno = [opts.byweekno];
115 }
116 // byweekday / bynweekday
117 if (!isPresent(opts.byweekday)) {
118 opts.bynweekday = null;
119 }
120 else if (isNumber(opts.byweekday)) {
121 opts.byweekday = [opts.byweekday];
122 opts.bynweekday = null;
123 }
124 else if (isWeekdayStr(opts.byweekday)) {
125 opts.byweekday = [Weekday.fromStr(opts.byweekday).weekday];
126 opts.bynweekday = null;
127 }
128 else if (opts.byweekday instanceof Weekday) {
129 if (!opts.byweekday.n || opts.freq > RRule.MONTHLY) {
130 opts.byweekday = [opts.byweekday.weekday];
131 opts.bynweekday = null;
132 }
133 else {
134 opts.bynweekday = [[opts.byweekday.weekday, opts.byweekday.n]];
135 opts.byweekday = null;
136 }
137 }
138 else {
139 var byweekday = [];
140 var bynweekday = [];
141 for (var i = 0; i < opts.byweekday.length; i++) {
142 var wday = opts.byweekday[i];
143 if (isNumber(wday)) {
144 byweekday.push(wday);
145 continue;
146 }
147 else if (isWeekdayStr(wday)) {
148 byweekday.push(Weekday.fromStr(wday).weekday);
149 continue;
150 }
151 if (!wday.n || opts.freq > RRule.MONTHLY) {
152 byweekday.push(wday.weekday);
153 }
154 else {
155 bynweekday.push([wday.weekday, wday.n]);
156 }
157 }
158 opts.byweekday = notEmpty(byweekday) ? byweekday : null;
159 opts.bynweekday = notEmpty(bynweekday) ? bynweekday : null;
160 }
161 // byhour
162 if (!isPresent(opts.byhour)) {
163 opts.byhour = opts.freq < RRule.HOURLY ? [opts.dtstart.getUTCHours()] : null;
164 }
165 else if (isNumber(opts.byhour)) {
166 opts.byhour = [opts.byhour];
167 }
168 // byminute
169 if (!isPresent(opts.byminute)) {
170 opts.byminute =
171 opts.freq < RRule.MINUTELY ? [opts.dtstart.getUTCMinutes()] : null;
172 }
173 else if (isNumber(opts.byminute)) {
174 opts.byminute = [opts.byminute];
175 }
176 // bysecond
177 if (!isPresent(opts.bysecond)) {
178 opts.bysecond =
179 opts.freq < RRule.SECONDLY ? [opts.dtstart.getUTCSeconds()] : null;
180 }
181 else if (isNumber(opts.bysecond)) {
182 opts.bysecond = [opts.bysecond];
183 }
184 return { parsedOptions: opts };
185}
186export function buildTimeset(opts) {
187 var millisecondModulo = opts.dtstart.getTime() % 1000;
188 if (!freqIsDailyOrGreater(opts.freq)) {
189 return [];
190 }
191 var timeset = [];
192 opts.byhour.forEach(function (hour) {
193 opts.byminute.forEach(function (minute) {
194 opts.bysecond.forEach(function (second) {
195 timeset.push(new Time(hour, minute, second, millisecondModulo));
196 });
197 });
198 });
199 return timeset;
200}
201//# sourceMappingURL=parseoptions.js.map
\No newline at end of file