rrule-rust 2.0.0 → 2.0.1
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/LICENSE.md +1 -1
- package/README.md +8 -11
- package/dist/datetime.d.ts +11 -11
- package/dist/datetime.js +30 -30
- package/package.json +27 -31
package/LICENSE.md
CHANGED
|
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
19
19
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
20
20
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
21
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
22
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -5,33 +5,30 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/rrule-rust)
|
|
6
6
|
[](https://github.com/lsndr/rrule-rust/blob/master/LICENSE.md)
|
|
7
7
|
|
|
8
|
-
|
|
9
8
|
`rrule-rust` is a library for working with recurrence rules based on Rust's [rrule](https://crates.io/crates/rrule) crate
|
|
10
9
|
|
|
11
|
-
|
|
12
10
|
1. [Quick Start](#quick-start)
|
|
13
|
-
2. [
|
|
11
|
+
2. [Performance](#performance)
|
|
14
12
|
|
|
15
13
|
## Quick Start
|
|
16
14
|
|
|
17
15
|
See [test folder](https://github.com/lsndr/rrule-rust/tree/master/tests) to find more use cases
|
|
18
16
|
|
|
19
17
|
```
|
|
20
|
-
npm i rrule-rust
|
|
18
|
+
npm i rrule-rust
|
|
21
19
|
```
|
|
22
20
|
|
|
23
|
-
|
|
24
21
|
```typescript
|
|
25
22
|
import { RRule, RRuleSet, Frequency, DateTime } from 'rrule-rust';
|
|
26
23
|
|
|
27
24
|
const rrule = new RRule({
|
|
28
25
|
frequency: Frequency.Daily,
|
|
29
|
-
count: 5
|
|
26
|
+
count: 5,
|
|
30
27
|
});
|
|
31
28
|
const set = new RRuleSet({
|
|
32
29
|
dtstart: DateTime.create(1997, 9, 2, 9, 0, 0, false),
|
|
33
30
|
tzid: 'US/Eastern',
|
|
34
|
-
rrules: [rrule]
|
|
31
|
+
rrules: [rrule],
|
|
35
32
|
});
|
|
36
33
|
|
|
37
34
|
const dates = set.all(); // [ DateTime, DateTime, DateTime, DateTime, DateTime ]
|
|
@@ -47,10 +44,10 @@ const asString = set.toString(); // DTSTART;TZID=US/Eastern:19970902T090000\nFRE
|
|
|
47
44
|
Memory: 36 GB LPDDR5
|
|
48
45
|
```
|
|
49
46
|
|
|
50
|
-
| | rrule
|
|
51
|
-
| -------- |
|
|
52
|
-
| UTC TZ | 15 904 ops/s
|
|
53
|
-
| Other TZ | 260 ops/s
|
|
47
|
+
| | rrule | rrule-rust | |
|
|
48
|
+
| -------- | ------------ | ------------- | ------------ |
|
|
49
|
+
| UTC TZ | 15 904 ops/s | 108 538 ops/s | ~6x faster |
|
|
50
|
+
| Other TZ | 260 ops/s | 106 034 ops/s | ~400x faster |
|
|
54
51
|
|
|
55
52
|
You can run benchmarks using `npm run benchmark`
|
|
56
53
|
|
package/dist/datetime.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface FromObjectOptions {
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class DateTime implements DateTimeLike {
|
|
16
16
|
private readonly numeric;
|
|
17
|
+
private constructor();
|
|
17
18
|
get year(): number;
|
|
18
19
|
get month(): number;
|
|
19
20
|
get day(): number;
|
|
@@ -21,17 +22,6 @@ export declare class DateTime implements DateTimeLike {
|
|
|
21
22
|
get minute(): number;
|
|
22
23
|
get second(): number;
|
|
23
24
|
get utc(): boolean;
|
|
24
|
-
private constructor();
|
|
25
|
-
/**
|
|
26
|
-
* Converts DateTime into a plain object.
|
|
27
|
-
*/
|
|
28
|
-
toObject(): DateTimeLike;
|
|
29
|
-
/**
|
|
30
|
-
* Converts DateTime into ISO 8601 string:
|
|
31
|
-
* - `YYYYMMDDTHHMMSSZ` for UTC
|
|
32
|
-
* - `YYYYMMDDTHHMMSS` for local
|
|
33
|
-
*/
|
|
34
|
-
toString(): string;
|
|
35
25
|
/**
|
|
36
26
|
* Creates a new DateTime object from the given date and time components.
|
|
37
27
|
*/
|
|
@@ -52,4 +42,14 @@ export declare class DateTime implements DateTimeLike {
|
|
|
52
42
|
* Creates a new DateTime object from provided string representation of a date according to RFC 5545.
|
|
53
43
|
*/
|
|
54
44
|
static fromString(str: string): DateTime;
|
|
45
|
+
/**
|
|
46
|
+
* Converts DateTime into a plain object.
|
|
47
|
+
*/
|
|
48
|
+
toObject(): DateTimeLike;
|
|
49
|
+
/**
|
|
50
|
+
* Converts DateTime into ISO 8601 string:
|
|
51
|
+
* - `YYYYMMDDTHHMMSSZ` for UTC
|
|
52
|
+
* - `YYYYMMDDTHHMMSS` for local
|
|
53
|
+
*/
|
|
54
|
+
toString(): string;
|
|
55
55
|
}
|
package/dist/datetime.js
CHANGED
|
@@ -5,6 +5,9 @@ exports.DateTime = void 0;
|
|
|
5
5
|
* Represents a date and time. Either local or UTC.
|
|
6
6
|
*/
|
|
7
7
|
class DateTime {
|
|
8
|
+
constructor(numeric) {
|
|
9
|
+
this.numeric = numeric;
|
|
10
|
+
}
|
|
8
11
|
get year() {
|
|
9
12
|
return Math.floor(this.numeric / 100000000000);
|
|
10
13
|
}
|
|
@@ -26,36 +29,6 @@ class DateTime {
|
|
|
26
29
|
get utc() {
|
|
27
30
|
return this.numeric % 10 == 1;
|
|
28
31
|
}
|
|
29
|
-
constructor(numeric) {
|
|
30
|
-
this.numeric = numeric;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Converts DateTime into a plain object.
|
|
34
|
-
*/
|
|
35
|
-
toObject() {
|
|
36
|
-
return {
|
|
37
|
-
year: this.year,
|
|
38
|
-
month: this.month,
|
|
39
|
-
day: this.day,
|
|
40
|
-
hour: this.hour,
|
|
41
|
-
minute: this.minute,
|
|
42
|
-
second: this.second,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Converts DateTime into ISO 8601 string:
|
|
47
|
-
* - `YYYYMMDDTHHMMSSZ` for UTC
|
|
48
|
-
* - `YYYYMMDDTHHMMSS` for local
|
|
49
|
-
*/
|
|
50
|
-
toString() {
|
|
51
|
-
const year = this.year.toString().padStart(4, '0');
|
|
52
|
-
const month = this.month.toString().padStart(2, '0');
|
|
53
|
-
const day = this.day.toString().padStart(2, '0');
|
|
54
|
-
const hour = this.hour.toString().padStart(2, '0');
|
|
55
|
-
const minute = this.minute.toString().padStart(2, '0');
|
|
56
|
-
const second = this.second.toString().padStart(2, '0');
|
|
57
|
-
return `${year}${month}${day}T${hour}${minute}${second}${this.utc ? 'Z' : ''}`;
|
|
58
|
-
}
|
|
59
32
|
/**
|
|
60
33
|
* Creates a new DateTime object from the given date and time components.
|
|
61
34
|
*/
|
|
@@ -116,6 +89,33 @@ class DateTime {
|
|
|
116
89
|
static fromNumeric(numeric) {
|
|
117
90
|
return new DateTime(numeric);
|
|
118
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Converts DateTime into a plain object.
|
|
94
|
+
*/
|
|
95
|
+
toObject() {
|
|
96
|
+
return {
|
|
97
|
+
year: this.year,
|
|
98
|
+
month: this.month,
|
|
99
|
+
day: this.day,
|
|
100
|
+
hour: this.hour,
|
|
101
|
+
minute: this.minute,
|
|
102
|
+
second: this.second,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Converts DateTime into ISO 8601 string:
|
|
107
|
+
* - `YYYYMMDDTHHMMSSZ` for UTC
|
|
108
|
+
* - `YYYYMMDDTHHMMSS` for local
|
|
109
|
+
*/
|
|
110
|
+
toString() {
|
|
111
|
+
const year = this.year.toString().padStart(4, '0');
|
|
112
|
+
const month = this.month.toString().padStart(2, '0');
|
|
113
|
+
const day = this.day.toString().padStart(2, '0');
|
|
114
|
+
const hour = this.hour.toString().padStart(2, '0');
|
|
115
|
+
const minute = this.minute.toString().padStart(2, '0');
|
|
116
|
+
const second = this.second.toString().padStart(2, '0');
|
|
117
|
+
return `${year}${month}${day}T${hour}${minute}${second}${this.utc ? 'Z' : ''}`;
|
|
118
|
+
}
|
|
119
119
|
/** @internal */
|
|
120
120
|
toNumeric() {
|
|
121
121
|
return this.numeric;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rrule-rust",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"keywords": [
|
|
@@ -48,20 +48,19 @@
|
|
|
48
48
|
"@types/jest": "^29.5.0",
|
|
49
49
|
"@types/luxon": "^3.4.2",
|
|
50
50
|
"@types/node": "^20.12.8",
|
|
51
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
52
|
-
"@typescript-eslint/parser": "^
|
|
51
|
+
"@typescript-eslint/eslint-plugin": "^7.12.0",
|
|
52
|
+
"@typescript-eslint/parser": "^7.12.0",
|
|
53
53
|
"benny": "^3.7.1",
|
|
54
54
|
"conventional-changelog-conventionalcommits": "^7.0.2",
|
|
55
55
|
"cpy-cli": "^5.0.0",
|
|
56
56
|
"cross-env": "^7.0.3",
|
|
57
|
-
"eslint": "^8.
|
|
58
|
-
"eslint-config-prettier": "^
|
|
57
|
+
"eslint": "^8.57.0",
|
|
58
|
+
"eslint-config-prettier": "^9.1.0",
|
|
59
59
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
60
|
-
"eslint-plugin-import": "^2.
|
|
61
|
-
"eslint-plugin-
|
|
60
|
+
"eslint-plugin-import": "^2.29.1",
|
|
61
|
+
"eslint-plugin-json": "^3.1.0",
|
|
62
62
|
"husky": "^9.0.11",
|
|
63
63
|
"jest": "^29.5.0",
|
|
64
|
-
"lint-staged": "^15.2.2",
|
|
65
64
|
"luxon": "^3.4.4",
|
|
66
65
|
"mkdirp": "^3.0.1",
|
|
67
66
|
"prettier": "^2.8.3",
|
|
@@ -72,10 +71,6 @@
|
|
|
72
71
|
"ts-node": "^10.9.1",
|
|
73
72
|
"typescript": "^5.4.5"
|
|
74
73
|
},
|
|
75
|
-
"lint-staged": {
|
|
76
|
-
"**/*.{js,ts,json}": "eslint --fix --max-warnings=0",
|
|
77
|
-
"**/*.rs": "rustfmt"
|
|
78
|
-
},
|
|
79
74
|
"engines": {
|
|
80
75
|
"node": ">= 10"
|
|
81
76
|
},
|
|
@@ -91,27 +86,28 @@
|
|
|
91
86
|
"universal": "napi universal",
|
|
92
87
|
"version": "napi version",
|
|
93
88
|
"benchmark": "ts-node ./benchmark/index.ts",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"lint
|
|
89
|
+
"format": "cargo fmt --all --check && prettier --check .",
|
|
90
|
+
"format:fix": "cargo fmt --all && prettier --write .",
|
|
91
|
+
"lint": "eslint \"**/*.{js,ts,json}\" --max-warnings=0",
|
|
92
|
+
"lint:fix": "npm run lint -- --fix",
|
|
97
93
|
"prepare": "husky && npm run build"
|
|
98
94
|
},
|
|
99
95
|
"optionalDependencies": {
|
|
100
|
-
"@rrule-rust/lib-win32-x64-msvc": "2.0.
|
|
101
|
-
"@rrule-rust/lib-darwin-x64": "2.0.
|
|
102
|
-
"@rrule-rust/lib-linux-x64-gnu": "2.0.
|
|
103
|
-
"@rrule-rust/lib-darwin-arm64": "2.0.
|
|
104
|
-
"@rrule-rust/lib-android-arm64": "2.0.
|
|
105
|
-
"@rrule-rust/lib-linux-arm64-gnu": "2.0.
|
|
106
|
-
"@rrule-rust/lib-linux-arm64-musl": "2.0.
|
|
107
|
-
"@rrule-rust/lib-win32-arm64-msvc": "2.0.
|
|
108
|
-
"@rrule-rust/lib-linux-arm-gnueabihf": "2.0.
|
|
109
|
-
"@rrule-rust/lib-linux-arm-musleabihf": "2.0.
|
|
110
|
-
"@rrule-rust/lib-linux-x64-musl": "2.0.
|
|
111
|
-
"@rrule-rust/lib-freebsd-x64": "2.0.
|
|
112
|
-
"@rrule-rust/lib-win32-ia32-msvc": "2.0.
|
|
113
|
-
"@rrule-rust/lib-android-arm-eabi": "2.0.
|
|
114
|
-
"@rrule-rust/lib-darwin-universal": "2.0.
|
|
115
|
-
"@rrule-rust/lib-linux-riscv64-gnu": "2.0.
|
|
96
|
+
"@rrule-rust/lib-win32-x64-msvc": "2.0.1",
|
|
97
|
+
"@rrule-rust/lib-darwin-x64": "2.0.1",
|
|
98
|
+
"@rrule-rust/lib-linux-x64-gnu": "2.0.1",
|
|
99
|
+
"@rrule-rust/lib-darwin-arm64": "2.0.1",
|
|
100
|
+
"@rrule-rust/lib-android-arm64": "2.0.1",
|
|
101
|
+
"@rrule-rust/lib-linux-arm64-gnu": "2.0.1",
|
|
102
|
+
"@rrule-rust/lib-linux-arm64-musl": "2.0.1",
|
|
103
|
+
"@rrule-rust/lib-win32-arm64-msvc": "2.0.1",
|
|
104
|
+
"@rrule-rust/lib-linux-arm-gnueabihf": "2.0.1",
|
|
105
|
+
"@rrule-rust/lib-linux-arm-musleabihf": "2.0.1",
|
|
106
|
+
"@rrule-rust/lib-linux-x64-musl": "2.0.1",
|
|
107
|
+
"@rrule-rust/lib-freebsd-x64": "2.0.1",
|
|
108
|
+
"@rrule-rust/lib-win32-ia32-msvc": "2.0.1",
|
|
109
|
+
"@rrule-rust/lib-android-arm-eabi": "2.0.1",
|
|
110
|
+
"@rrule-rust/lib-darwin-universal": "2.0.1",
|
|
111
|
+
"@rrule-rust/lib-linux-riscv64-gnu": "2.0.1"
|
|
116
112
|
}
|
|
117
113
|
}
|