rrule-rust 1.1.3 → 1.1.5
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/index.d.ts +9 -9
- package/jest.config.ts +7 -0
- package/package.json +19 -26
- package/src/lib.rs +59 -32
package/index.d.ts
CHANGED
|
@@ -55,15 +55,15 @@ export class RRule {
|
|
|
55
55
|
toString(): string
|
|
56
56
|
setInterval(interval: number): this
|
|
57
57
|
setCount(count: number): this
|
|
58
|
-
setByWeekday(weekdays: Weekday
|
|
59
|
-
setByHour(hours:
|
|
60
|
-
setByMinute(minutes:
|
|
61
|
-
setBySecond(seconds:
|
|
62
|
-
setByMonthday(days:
|
|
63
|
-
setBySetpos(poses:
|
|
64
|
-
setByMonth(months: Month
|
|
65
|
-
setByWeekno(weekNumbers:
|
|
66
|
-
setByYearday(days:
|
|
58
|
+
setByWeekday(weekdays: ReadonlyArray<Weekday>): this
|
|
59
|
+
setByHour(hours: ReadonlyArray<number>): this
|
|
60
|
+
setByMinute(minutes: ReadonlyArray<number>): this
|
|
61
|
+
setBySecond(seconds: ReadonlyArray<number>): this
|
|
62
|
+
setByMonthday(days: ReadonlyArray<number>): this
|
|
63
|
+
setBySetpos(poses: ReadonlyArray<number>): this
|
|
64
|
+
setByMonth(months: ReadonlyArray<Month>): this
|
|
65
|
+
setByWeekno(weekNumbers: ReadonlyArray<number>): this
|
|
66
|
+
setByYearday(days: ReadonlyArray<number>): this
|
|
67
67
|
setWeekstart(day: Weekday): this
|
|
68
68
|
setUntil(timestamp: number): this
|
|
69
69
|
}
|
package/jest.config.ts
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rrule-rust",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"keywords": [
|
|
@@ -40,20 +40,22 @@
|
|
|
40
40
|
"license": "MIT",
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@napi-rs/cli": "^2.15.1",
|
|
43
|
+
"@types/jest": "^29.5.0",
|
|
43
44
|
"@types/node": "^18.15.5",
|
|
44
45
|
"@typescript-eslint/eslint-plugin": "^5.50.0",
|
|
45
46
|
"@typescript-eslint/parser": "^5.50.0",
|
|
46
|
-
"ava": "^5.1.1",
|
|
47
47
|
"benny": "^3.7.1",
|
|
48
48
|
"eslint": "^8.33.0",
|
|
49
49
|
"eslint-config-prettier": "^8.6.0",
|
|
50
50
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
51
51
|
"eslint-plugin-import": "^2.27.5",
|
|
52
52
|
"eslint-plugin-prettier": "^4.2.1",
|
|
53
|
+
"jest": "^29.5.0",
|
|
53
54
|
"lint-staged": "^13.1.0",
|
|
54
55
|
"pre-commit": "^1.2.2",
|
|
55
56
|
"prettier": "^2.8.3",
|
|
56
57
|
"rrule": "^2.7.2",
|
|
58
|
+
"ts-jest": "^29.0.5",
|
|
57
59
|
"ts-node": "^10.9.1",
|
|
58
60
|
"typescript": "^4.9.4"
|
|
59
61
|
},
|
|
@@ -64,15 +66,6 @@
|
|
|
64
66
|
"lint-staged": {
|
|
65
67
|
"**/*.{js,ts,json}": "eslint --fix --max-warnings=0"
|
|
66
68
|
},
|
|
67
|
-
"ava": {
|
|
68
|
-
"timeout": "10m",
|
|
69
|
-
"extensions": [
|
|
70
|
-
"ts"
|
|
71
|
-
],
|
|
72
|
-
"require": [
|
|
73
|
-
"ts-node/register"
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
69
|
"engines": {
|
|
77
70
|
"node": ">= 10"
|
|
78
71
|
},
|
|
@@ -81,7 +74,7 @@
|
|
|
81
74
|
"build": "napi build --platform --release --js-package-name @rrule-rust/lib",
|
|
82
75
|
"build:debug": "napi build --platform",
|
|
83
76
|
"prepublishOnly": "napi prepublish -t npm",
|
|
84
|
-
"test": "
|
|
77
|
+
"test": "jest",
|
|
85
78
|
"universal": "napi universal",
|
|
86
79
|
"version": "napi version",
|
|
87
80
|
"benchmark": "ts-node ./benchmark/index.ts",
|
|
@@ -90,19 +83,19 @@
|
|
|
90
83
|
"lint:fix-staged": "lint-staged"
|
|
91
84
|
},
|
|
92
85
|
"optionalDependencies": {
|
|
93
|
-
"@rrule-rust/lib-win32-x64-msvc": "1.1.
|
|
94
|
-
"@rrule-rust/lib-darwin-x64": "1.1.
|
|
95
|
-
"@rrule-rust/lib-linux-x64-gnu": "1.1.
|
|
96
|
-
"@rrule-rust/lib-darwin-arm64": "1.1.
|
|
97
|
-
"@rrule-rust/lib-android-arm64": "1.1.
|
|
98
|
-
"@rrule-rust/lib-linux-arm64-gnu": "1.1.
|
|
99
|
-
"@rrule-rust/lib-linux-arm64-musl": "1.1.
|
|
100
|
-
"@rrule-rust/lib-win32-arm64-msvc": "1.1.
|
|
101
|
-
"@rrule-rust/lib-linux-arm-gnueabihf": "1.1.
|
|
102
|
-
"@rrule-rust/lib-linux-x64-musl": "1.1.
|
|
103
|
-
"@rrule-rust/lib-freebsd-x64": "1.1.
|
|
104
|
-
"@rrule-rust/lib-win32-ia32-msvc": "1.1.
|
|
105
|
-
"@rrule-rust/lib-android-arm-eabi": "1.1.
|
|
106
|
-
"@rrule-rust/lib-darwin-universal": "1.1.
|
|
86
|
+
"@rrule-rust/lib-win32-x64-msvc": "1.1.5",
|
|
87
|
+
"@rrule-rust/lib-darwin-x64": "1.1.5",
|
|
88
|
+
"@rrule-rust/lib-linux-x64-gnu": "1.1.5",
|
|
89
|
+
"@rrule-rust/lib-darwin-arm64": "1.1.5",
|
|
90
|
+
"@rrule-rust/lib-android-arm64": "1.1.5",
|
|
91
|
+
"@rrule-rust/lib-linux-arm64-gnu": "1.1.5",
|
|
92
|
+
"@rrule-rust/lib-linux-arm64-musl": "1.1.5",
|
|
93
|
+
"@rrule-rust/lib-win32-arm64-msvc": "1.1.5",
|
|
94
|
+
"@rrule-rust/lib-linux-arm-gnueabihf": "1.1.5",
|
|
95
|
+
"@rrule-rust/lib-linux-x64-musl": "1.1.5",
|
|
96
|
+
"@rrule-rust/lib-freebsd-x64": "1.1.5",
|
|
97
|
+
"@rrule-rust/lib-win32-ia32-msvc": "1.1.5",
|
|
98
|
+
"@rrule-rust/lib-android-arm-eabi": "1.1.5",
|
|
99
|
+
"@rrule-rust/lib-darwin-universal": "1.1.5"
|
|
107
100
|
}
|
|
108
101
|
}
|
package/src/lib.rs
CHANGED
|
@@ -78,7 +78,7 @@ impl JsRRule {
|
|
|
78
78
|
#[napi(getter, ts_return_type = "Weekday[]")]
|
|
79
79
|
pub fn by_weekday(&self, env: Env) -> napi::Result<Array> {
|
|
80
80
|
let ndays = self.rrule.get_by_weekday();
|
|
81
|
-
let mut arr = env.create_array(0)
|
|
81
|
+
let mut arr = env.create_array(0)?;
|
|
82
82
|
|
|
83
83
|
for nday in ndays.iter() {
|
|
84
84
|
let day = match nday {
|
|
@@ -86,7 +86,7 @@ impl JsRRule {
|
|
|
86
86
|
_ => panic!("Unsupported"),
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
-
arr.insert(map_rust_weekday(day))
|
|
89
|
+
arr.insert(map_rust_weekday(day))?;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
Ok(arr)
|
|
@@ -120,10 +120,10 @@ impl JsRRule {
|
|
|
120
120
|
#[napi(getter, ts_return_type = "Month[]")]
|
|
121
121
|
pub fn by_month(&self, env: Env) -> napi::Result<Array> {
|
|
122
122
|
let months = self.rrule.get_by_month();
|
|
123
|
-
let mut arr = env.create_array(0)
|
|
123
|
+
let mut arr = env.create_array(0)?;
|
|
124
124
|
|
|
125
125
|
for month in months.iter() {
|
|
126
|
-
arr.insert(map_rust_month(month))
|
|
126
|
+
arr.insert(map_rust_month(month))?;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
Ok(arr)
|
|
@@ -174,7 +174,7 @@ impl JsRRule {
|
|
|
174
174
|
#[napi]
|
|
175
175
|
pub fn set_by_weekday(
|
|
176
176
|
&mut self,
|
|
177
|
-
#[napi(ts_arg_type = "Weekday
|
|
177
|
+
#[napi(ts_arg_type = "ReadonlyArray<Weekday>")] weekdays: Array,
|
|
178
178
|
) -> napi::Result<&Self> {
|
|
179
179
|
let mut vec: Vec<NWeekday> = Vec::new();
|
|
180
180
|
|
|
@@ -191,35 +191,50 @@ impl JsRRule {
|
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
#[napi]
|
|
194
|
-
pub fn set_by_hour(
|
|
194
|
+
pub fn set_by_hour(
|
|
195
|
+
&mut self,
|
|
196
|
+
#[napi(ts_arg_type = "ReadonlyArray<number>")] hours: Vec<u8>,
|
|
197
|
+
) -> napi::Result<&Self> {
|
|
195
198
|
replace_with_or_abort(&mut self.rrule, |self_| self_.by_hour(hours));
|
|
196
199
|
|
|
197
200
|
Ok(self)
|
|
198
201
|
}
|
|
199
202
|
|
|
200
203
|
#[napi]
|
|
201
|
-
pub fn set_by_minute(
|
|
204
|
+
pub fn set_by_minute(
|
|
205
|
+
&mut self,
|
|
206
|
+
#[napi(ts_arg_type = "ReadonlyArray<number>")] minutes: Vec<u8>,
|
|
207
|
+
) -> napi::Result<&Self> {
|
|
202
208
|
replace_with_or_abort(&mut self.rrule, |self_| self_.by_minute(minutes));
|
|
203
209
|
|
|
204
210
|
Ok(self)
|
|
205
211
|
}
|
|
206
212
|
|
|
207
213
|
#[napi]
|
|
208
|
-
pub fn set_by_second(
|
|
214
|
+
pub fn set_by_second(
|
|
215
|
+
&mut self,
|
|
216
|
+
#[napi(ts_arg_type = "ReadonlyArray<number>")] seconds: Vec<u8>,
|
|
217
|
+
) -> napi::Result<&Self> {
|
|
209
218
|
replace_with_or_abort(&mut self.rrule, |self_| self_.by_second(seconds));
|
|
210
219
|
|
|
211
220
|
Ok(self)
|
|
212
221
|
}
|
|
213
222
|
|
|
214
223
|
#[napi]
|
|
215
|
-
pub fn set_by_monthday(
|
|
224
|
+
pub fn set_by_monthday(
|
|
225
|
+
&mut self,
|
|
226
|
+
#[napi(ts_arg_type = "ReadonlyArray<number>")] days: Vec<i8>,
|
|
227
|
+
) -> napi::Result<&Self> {
|
|
216
228
|
replace_with_or_abort(&mut self.rrule, |self_| self_.by_month_day(days));
|
|
217
229
|
|
|
218
230
|
Ok(self)
|
|
219
231
|
}
|
|
220
232
|
|
|
221
233
|
#[napi]
|
|
222
|
-
pub fn set_by_setpos(
|
|
234
|
+
pub fn set_by_setpos(
|
|
235
|
+
&mut self,
|
|
236
|
+
#[napi(ts_arg_type = "ReadonlyArray<number>")] poses: Vec<i32>,
|
|
237
|
+
) -> napi::Result<&Self> {
|
|
223
238
|
replace_with_or_abort(&mut self.rrule, |self_| self_.by_set_pos(poses));
|
|
224
239
|
|
|
225
240
|
Ok(self)
|
|
@@ -228,7 +243,7 @@ impl JsRRule {
|
|
|
228
243
|
#[napi]
|
|
229
244
|
pub fn set_by_month(
|
|
230
245
|
&mut self,
|
|
231
|
-
#[napi(ts_arg_type = "Month
|
|
246
|
+
#[napi(ts_arg_type = "ReadonlyArray<Month>")] months: Array,
|
|
232
247
|
) -> napi::Result<&Self> {
|
|
233
248
|
let mut vec: Vec<Month> = Vec::new();
|
|
234
249
|
|
|
@@ -244,14 +259,20 @@ impl JsRRule {
|
|
|
244
259
|
}
|
|
245
260
|
|
|
246
261
|
#[napi]
|
|
247
|
-
pub fn set_by_weekno(
|
|
262
|
+
pub fn set_by_weekno(
|
|
263
|
+
&mut self,
|
|
264
|
+
#[napi(ts_arg_type = "ReadonlyArray<number>")] week_numbers: Vec<i8>,
|
|
265
|
+
) -> napi::Result<&Self> {
|
|
248
266
|
replace_with_or_abort(&mut self.rrule, |self_| self_.by_week_no(week_numbers));
|
|
249
267
|
|
|
250
268
|
Ok(self)
|
|
251
269
|
}
|
|
252
270
|
|
|
253
271
|
#[napi]
|
|
254
|
-
pub fn set_by_yearday(
|
|
272
|
+
pub fn set_by_yearday(
|
|
273
|
+
&mut self,
|
|
274
|
+
#[napi(ts_arg_type = "ReadonlyArray<number>")] days: Vec<i16>,
|
|
275
|
+
) -> napi::Result<&Self> {
|
|
255
276
|
replace_with_or_abort(&mut self.rrule, |self_| self_.by_year_day(days));
|
|
256
277
|
|
|
257
278
|
Ok(self)
|
|
@@ -275,8 +296,8 @@ impl JsRRule {
|
|
|
275
296
|
Ok(self)
|
|
276
297
|
}
|
|
277
298
|
|
|
278
|
-
pub fn validate(&self, dt_start: DateTime<Tz>) -> RRule {
|
|
279
|
-
self.rrule.clone().validate(dt_start).
|
|
299
|
+
pub fn validate(&self, dt_start: DateTime<Tz>) -> napi::Result<RRule> {
|
|
300
|
+
return Ok(self.rrule.clone().validate(dt_start).map_err(|e| napi::Error::new(napi::Status::GenericFailure, e))?);
|
|
280
301
|
}
|
|
281
302
|
}
|
|
282
303
|
|
|
@@ -289,21 +310,21 @@ pub struct JsRRuleSet {
|
|
|
289
310
|
#[napi]
|
|
290
311
|
impl JsRRuleSet {
|
|
291
312
|
#[napi(constructor)]
|
|
292
|
-
pub fn new(dtstart: i64, tzid: String) -> Self {
|
|
293
|
-
let tz = map_js_tz(&tzid)
|
|
313
|
+
pub fn new(dtstart: i64, tzid: String) -> napi::Result<Self> {
|
|
314
|
+
let tz = map_js_tz(&tzid)?;
|
|
294
315
|
let date = timestamp_to_date_with_tz(dtstart, &tz);
|
|
295
316
|
let rrule_set = RRuleSet::new(date);
|
|
296
317
|
|
|
297
|
-
JsRRuleSet { rrule_set, tz }
|
|
318
|
+
Ok(JsRRuleSet { rrule_set, tz })
|
|
298
319
|
}
|
|
299
320
|
|
|
300
|
-
#[napi(factory, ts_return_type="RRuleSet")]
|
|
301
|
-
pub fn parse(str: String) -> Self {
|
|
302
|
-
let rrule_set: RRuleSet = str.parse().
|
|
321
|
+
#[napi(factory, ts_return_type = "RRuleSet")]
|
|
322
|
+
pub fn parse(str: String) -> napi::Result<Self> {
|
|
323
|
+
let rrule_set: RRuleSet = str.parse().map_err(|e| napi::Error::new(napi::Status::GenericFailure, e))?;
|
|
303
324
|
let dtstart = rrule_set.get_dt_start();
|
|
304
325
|
let tz = dtstart.timezone();
|
|
305
326
|
|
|
306
|
-
JsRRuleSet { rrule_set, tz }
|
|
327
|
+
Ok(JsRRuleSet { rrule_set, tz })
|
|
307
328
|
}
|
|
308
329
|
|
|
309
330
|
#[napi]
|
|
@@ -314,7 +335,7 @@ impl JsRRuleSet {
|
|
|
314
335
|
#[napi]
|
|
315
336
|
pub fn add_rrule(&mut self, js_rrule: &JsRRule) -> napi::Result<&Self> {
|
|
316
337
|
let dt_start = self.rrule_set.get_dt_start().clone();
|
|
317
|
-
let rrule = js_rrule.validate(dt_start)
|
|
338
|
+
let rrule = js_rrule.validate(dt_start)?;
|
|
318
339
|
|
|
319
340
|
replace_with_or_abort(&mut self.rrule_set, |self_| self_.rrule(rrule));
|
|
320
341
|
|
|
@@ -323,7 +344,7 @@ impl JsRRuleSet {
|
|
|
323
344
|
|
|
324
345
|
#[napi]
|
|
325
346
|
pub fn add_exrule(&mut self, js_rrule: &JsRRule) -> napi::Result<&Self> {
|
|
326
|
-
let rrule = js_rrule.validate(*self.rrule_set.get_dt_start())
|
|
347
|
+
let rrule = js_rrule.validate(*self.rrule_set.get_dt_start())?;
|
|
327
348
|
|
|
328
349
|
replace_with_or_abort(&mut self.rrule_set, |self_| self_.exrule(rrule));
|
|
329
350
|
|
|
@@ -389,7 +410,7 @@ impl JsRRuleSet {
|
|
|
389
410
|
|
|
390
411
|
#[napi(ts_return_type = "number[]")]
|
|
391
412
|
pub fn all(&self, env: Env, limit: Option<u32>) -> napi::Result<Array> {
|
|
392
|
-
let mut arr = env.create_array(0)
|
|
413
|
+
let mut arr = env.create_array(0)?;
|
|
393
414
|
let mut left = match limit {
|
|
394
415
|
Some(number) => number,
|
|
395
416
|
None => 0,
|
|
@@ -403,15 +424,21 @@ impl JsRRuleSet {
|
|
|
403
424
|
}
|
|
404
425
|
|
|
405
426
|
let timestamp = date.timestamp_millis();
|
|
406
|
-
arr.insert(timestamp)
|
|
427
|
+
arr.insert(timestamp)?;
|
|
407
428
|
}
|
|
408
429
|
|
|
409
430
|
Ok(arr)
|
|
410
431
|
}
|
|
411
432
|
|
|
412
433
|
#[napi(ts_return_type = "number[]")]
|
|
413
|
-
pub fn between(
|
|
414
|
-
|
|
434
|
+
pub fn between(
|
|
435
|
+
&self,
|
|
436
|
+
env: Env,
|
|
437
|
+
after: i64,
|
|
438
|
+
before: i64,
|
|
439
|
+
inclusive: Option<bool>,
|
|
440
|
+
) -> napi::Result<Array> {
|
|
441
|
+
let mut arr = env.create_array(0)?;
|
|
415
442
|
|
|
416
443
|
for date in self.rrule_set.into_iter() {
|
|
417
444
|
let timestamp = date.timestamp_millis();
|
|
@@ -419,7 +446,7 @@ impl JsRRuleSet {
|
|
|
419
446
|
let is_before = self.is_before(timestamp, before, inclusive);
|
|
420
447
|
|
|
421
448
|
if is_after && is_before {
|
|
422
|
-
arr.insert(timestamp)
|
|
449
|
+
arr.insert(timestamp)?;
|
|
423
450
|
} else if !is_before {
|
|
424
451
|
break;
|
|
425
452
|
}
|
|
@@ -521,9 +548,9 @@ fn map_rust_month(month: &u8) -> JsMonth {
|
|
|
521
548
|
}
|
|
522
549
|
}
|
|
523
550
|
|
|
524
|
-
fn map_js_tz(tz: &str) -> Tz {
|
|
525
|
-
let chrono_tz = tz.parse().
|
|
526
|
-
Tz::Tz(chrono_tz)
|
|
551
|
+
fn map_js_tz(tz: &str) -> napi::Result<Tz> {
|
|
552
|
+
let chrono_tz = tz.parse().map_err(|e| napi::Error::new(napi::Status::GenericFailure, e))?;
|
|
553
|
+
Ok(Tz::Tz(chrono_tz))
|
|
527
554
|
}
|
|
528
555
|
|
|
529
556
|
fn timestamp_to_date_with_tz(timestamp: i64, tz: &Tz) -> DateTime<Tz> {
|