UNPKG

6.75 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 if (invalid.length) {
20 throw new Error('Invalid options: ' + invalid.join(', '));
21 }
22 return __assign({}, options);
23}
24export function parseOptions(options) {
25 var opts = __assign(__assign({}, DEFAULT_OPTIONS), initializeOptions(options));
26 if (isPresent(opts.byeaster))
27 opts.freq = RRule.YEARLY;
28 if (!(isPresent(opts.freq) && RRule.FREQUENCIES[opts.freq])) {
29 throw new Error("Invalid frequency: " + opts.freq + " " + options.freq);
30 }
31 if (!opts.dtstart)
32 opts.dtstart = new Date(new Date().setMilliseconds(0));
33 if (!isPresent(opts.wkst)) {
34 opts.wkst = RRule.MO.weekday;
35 }
36 else if (isNumber(opts.wkst)) {
37 // cool, just keep it like that
38 }
39 else {
40 opts.wkst = opts.wkst.weekday;
41 }
42 if (isPresent(opts.bysetpos)) {
43 if (isNumber(opts.bysetpos))
44 opts.bysetpos = [opts.bysetpos];
45 for (var i = 0; i < opts.bysetpos.length; i++) {
46 var v = opts.bysetpos[i];
47 if (v === 0 || !(v >= -366 && v <= 366)) {
48 throw new Error('bysetpos must be between 1 and 366,' + ' or between -366 and -1');
49 }
50 }
51 }
52 if (!(Boolean(opts.byweekno) ||
53 notEmpty(opts.byweekno) ||
54 notEmpty(opts.byyearday) ||
55 Boolean(opts.bymonthday) ||
56 notEmpty(opts.bymonthday) ||
57 isPresent(opts.byweekday) ||
58 isPresent(opts.byeaster))) {
59 switch (opts.freq) {
60 case RRule.YEARLY:
61 if (!opts.bymonth)
62 opts.bymonth = opts.dtstart.getUTCMonth() + 1;
63 opts.bymonthday = opts.dtstart.getUTCDate();
64 break;
65 case RRule.MONTHLY:
66 opts.bymonthday = opts.dtstart.getUTCDate();
67 break;
68 case RRule.WEEKLY:
69 opts.byweekday = [dateutil.getWeekday(opts.dtstart)];
70 break;
71 }
72 }
73 // bymonth
74 if (isPresent(opts.bymonth) && !isArray(opts.bymonth)) {
75 opts.bymonth = [opts.bymonth];
76 }
77 // byyearday
78 if (isPresent(opts.byyearday) &&
79 !isArray(opts.byyearday) &&
80 isNumber(opts.byyearday)) {
81 opts.byyearday = [opts.byyearday];
82 }
83 // bymonthday
84 if (!isPresent(opts.bymonthday)) {
85 opts.bymonthday = [];
86 opts.bynmonthday = [];
87 }
88 else if (isArray(opts.bymonthday)) {
89 var bymonthday = [];
90 var bynmonthday = [];
91 for (var i = 0; i < opts.bymonthday.length; i++) {
92 var v = opts.bymonthday[i];
93 if (v > 0) {
94 bymonthday.push(v);
95 }
96 else if (v < 0) {
97 bynmonthday.push(v);
98 }
99 }
100 opts.bymonthday = bymonthday;
101 opts.bynmonthday = bynmonthday;
102 }
103 else if (opts.bymonthday < 0) {
104 opts.bynmonthday = [opts.bymonthday];
105 opts.bymonthday = [];
106 }
107 else {
108 opts.bynmonthday = [];
109 opts.bymonthday = [opts.bymonthday];
110 }
111 // byweekno
112 if (isPresent(opts.byweekno) && !isArray(opts.byweekno)) {
113 opts.byweekno = [opts.byweekno];
114 }
115 // byweekday / bynweekday
116 if (!isPresent(opts.byweekday)) {
117 opts.bynweekday = null;
118 }
119 else if (isNumber(opts.byweekday)) {
120 opts.byweekday = [opts.byweekday];
121 opts.bynweekday = null;
122 }
123 else if (isWeekdayStr(opts.byweekday)) {
124 opts.byweekday = [Weekday.fromStr(opts.byweekday).weekday];
125 opts.bynweekday = null;
126 }
127 else if (opts.byweekday instanceof Weekday) {
128 if (!opts.byweekday.n || opts.freq > RRule.MONTHLY) {
129 opts.byweekday = [opts.byweekday.weekday];
130 opts.bynweekday = null;
131 }
132 else {
133 opts.bynweekday = [[opts.byweekday.weekday, opts.byweekday.n]];
134 opts.byweekday = null;
135 }
136 }
137 else {
138 var byweekday = [];
139 var bynweekday = [];
140 for (var i = 0; i < opts.byweekday.length; i++) {
141 var wday = opts.byweekday[i];
142 if (isNumber(wday)) {
143 byweekday.push(wday);
144 continue;
145 }
146 else if (isWeekdayStr(wday)) {
147 byweekday.push(Weekday.fromStr(wday).weekday);
148 continue;
149 }
150 if (!wday.n || opts.freq > RRule.MONTHLY) {
151 byweekday.push(wday.weekday);
152 }
153 else {
154 bynweekday.push([wday.weekday, wday.n]);
155 }
156 }
157 opts.byweekday = notEmpty(byweekday) ? byweekday : null;
158 opts.bynweekday = notEmpty(bynweekday) ? bynweekday : null;
159 }
160 // byhour
161 if (!isPresent(opts.byhour)) {
162 opts.byhour =
163 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