ts-fsrs 3.1.0-beta1 → 3.1.0-beta3
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/README.md +19 -22
- package/dist/algorithm.d.ts +8 -8
- package/dist/algorithm.js +3 -3
- package/dist/default.js +1 -1
- package/dist/fsrs.d.ts +2 -1
- package/dist/fsrs.js +35 -2
- package/dist/help.d.ts +2 -1
- package/dist/help.js +7 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -1
- package/dist/models.d.ts +6 -1
- package/dist/models.js +1 -0
- package/dist/scheduler.d.ts +1 -1
- package/dist/scheduler.js +10 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ cp .env.local.example .env.local
|
|
|
21
21
|
# Example
|
|
22
22
|
|
|
23
23
|
```typescript
|
|
24
|
-
import {createEmptyCard, formatDate, fsrs, generatorParameters, Rating} from 'ts-fsrs';
|
|
24
|
+
import {createEmptyCard, formatDate, fsrs, generatorParameters, Rating, Grades} from 'ts-fsrs';
|
|
25
25
|
|
|
26
26
|
const params = generatorParameters({ enable_fuzz: true });
|
|
27
27
|
const f = fsrs(params);
|
|
@@ -30,28 +30,25 @@ const now = new Date('2022-2-2 10:00:00');// new Date();
|
|
|
30
30
|
const scheduling_cards = f.repeat(card, now);
|
|
31
31
|
|
|
32
32
|
// console.log(scheduling_cards);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
.
|
|
36
|
-
.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
due: formatDate(card.due),
|
|
43
|
-
last_review: formatDate(card.last_review as Date),
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
console.table({
|
|
47
|
-
[`log_${Rating[grade]}`]: {
|
|
48
|
-
...log,
|
|
49
|
-
review: formatDate(log.review),
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
console.groupEnd();
|
|
53
|
-
console.log('----------------------------------------------------------------');
|
|
33
|
+
Grades.forEach(grade => { // [Rating.Again, Rating.Hard, Rating.Good, Rating.Easy]
|
|
34
|
+
const { log, card } = scheduling_cards[grade];
|
|
35
|
+
console.group(`${Rating[grade]}`);
|
|
36
|
+
console.table({
|
|
37
|
+
[`card_${Rating[grade]}`]: {
|
|
38
|
+
...card,
|
|
39
|
+
due: formatDate(card.due),
|
|
40
|
+
last_review: formatDate(card.last_review as Date),
|
|
41
|
+
},
|
|
54
42
|
});
|
|
43
|
+
console.table({
|
|
44
|
+
[`log_${Rating[grade]}`]: {
|
|
45
|
+
...log,
|
|
46
|
+
review: formatDate(log.review),
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
console.groupEnd();
|
|
50
|
+
console.log('----------------------------------------------------------------');
|
|
51
|
+
});
|
|
55
52
|
```
|
|
56
53
|
|
|
57
54
|
> More examples refer to the [Example](https://github.com/ishiko732/ts-fsrs/blob/master/example/index.ts)
|
package/dist/algorithm.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SchedulingCard } from "./index";
|
|
2
|
-
import { FSRSParameters,
|
|
2
|
+
import { FSRSParameters, Grade } from "./models";
|
|
3
3
|
import type { int } from "./type";
|
|
4
4
|
export declare class FSRSAlgorithm {
|
|
5
5
|
protected param: FSRSParameters;
|
|
@@ -23,16 +23,16 @@ export declare class FSRSAlgorithm {
|
|
|
23
23
|
* @param g Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
|
|
24
24
|
* @return Stability (interval when R=90%)
|
|
25
25
|
*/
|
|
26
|
-
init_stability(g:
|
|
26
|
+
init_stability(g: Grade): number;
|
|
27
27
|
/**
|
|
28
28
|
* The formula used is :
|
|
29
29
|
* $$D_0(G) = w_4 - (G-3) \cdot w_5$$
|
|
30
30
|
* $$\min \{\max \{D_0(G),1\},10\}$$
|
|
31
31
|
* where the D_0(3)=w_4 when the first rating is good.
|
|
32
|
-
* @param {
|
|
32
|
+
* @param {Grade} g Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
|
|
33
33
|
* @return {number} Difficulty D \in [1,10]
|
|
34
34
|
*/
|
|
35
|
-
init_difficulty(g:
|
|
35
|
+
init_difficulty(g: Grade): number;
|
|
36
36
|
/**
|
|
37
37
|
* If fuzzing is disabled or ivl is less than 2.5, it returns the original interval.
|
|
38
38
|
* @param {number} ivl - The interval to be fuzzed.
|
|
@@ -51,10 +51,10 @@ export declare class FSRSAlgorithm {
|
|
|
51
51
|
* $$next_d = D - w_6 \cdot (R - 2)$$
|
|
52
52
|
* $$D^\prime(D,R) = w_5 \cdot D_0(2) +(1 - w_5) \cdot next_d$$
|
|
53
53
|
* @param {number} d Difficulty D \in [1,10]
|
|
54
|
-
* @param {
|
|
54
|
+
* @param {Grade} g Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
|
|
55
55
|
* @return {number} next_D
|
|
56
56
|
*/
|
|
57
|
-
next_difficulty(d: number, g:
|
|
57
|
+
next_difficulty(d: number, g: Grade): number;
|
|
58
58
|
/**
|
|
59
59
|
* The formula used is :
|
|
60
60
|
* $$\min \{\max \{D_0,1\},10\}$$
|
|
@@ -75,10 +75,10 @@ export declare class FSRSAlgorithm {
|
|
|
75
75
|
* @param {number} d Difficulty D \in [1,10]
|
|
76
76
|
* @param {number} s Stability (interval when R=90%)
|
|
77
77
|
* @param {number} r Retrievability (probability of recall)
|
|
78
|
-
* @param {
|
|
78
|
+
* @param {Grade} g Grade (Rating[0.again,1.hard,2.good,3.easy])
|
|
79
79
|
* @return {number} S^\prime_r new stability after recall
|
|
80
80
|
*/
|
|
81
|
-
next_recall_stability(d: number, s: number, r: number, g:
|
|
81
|
+
next_recall_stability(d: number, s: number, r: number, g: Grade): number;
|
|
82
82
|
/**
|
|
83
83
|
* The formula used is :
|
|
84
84
|
* $$S^\prime_f(D,S,R) = w_11\cdot D^{-w_{12}}\cdot ((S+1)^{w_{13}}-1) \cdot e^{w_{14}\cdot(1-R)}.$$
|
package/dist/algorithm.js
CHANGED
|
@@ -61,7 +61,7 @@ class FSRSAlgorithm {
|
|
|
61
61
|
* $$D_0(G) = w_4 - (G-3) \cdot w_5$$
|
|
62
62
|
* $$\min \{\max \{D_0(G),1\},10\}$$
|
|
63
63
|
* where the D_0(3)=w_4 when the first rating is good.
|
|
64
|
-
* @param {
|
|
64
|
+
* @param {Grade} g Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
|
|
65
65
|
* @return {number} Difficulty D \in [1,10]
|
|
66
66
|
*/
|
|
67
67
|
init_difficulty(g) {
|
|
@@ -97,7 +97,7 @@ class FSRSAlgorithm {
|
|
|
97
97
|
* $$next_d = D - w_6 \cdot (R - 2)$$
|
|
98
98
|
* $$D^\prime(D,R) = w_5 \cdot D_0(2) +(1 - w_5) \cdot next_d$$
|
|
99
99
|
* @param {number} d Difficulty D \in [1,10]
|
|
100
|
-
* @param {
|
|
100
|
+
* @param {Grade} g Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
|
|
101
101
|
* @return {number} next_D
|
|
102
102
|
*/
|
|
103
103
|
next_difficulty(d, g) {
|
|
@@ -128,7 +128,7 @@ class FSRSAlgorithm {
|
|
|
128
128
|
* @param {number} d Difficulty D \in [1,10]
|
|
129
129
|
* @param {number} s Stability (interval when R=90%)
|
|
130
130
|
* @param {number} r Retrievability (probability of recall)
|
|
131
|
-
* @param {
|
|
131
|
+
* @param {Grade} g Grade (Rating[0.again,1.hard,2.good,3.easy])
|
|
132
132
|
* @return {number} S^\prime_r new stability after recall
|
|
133
133
|
*/
|
|
134
134
|
next_recall_stability(d, s, r, g) {
|
package/dist/default.js
CHANGED
|
@@ -29,7 +29,7 @@ exports.default_w = exports.envParams.FSRS_W || [
|
|
|
29
29
|
0.34, 1.26, 0.29, 2.61,
|
|
30
30
|
];
|
|
31
31
|
exports.default_enable_fuzz = exports.envParams.FSRS_ENABLE_FUZZ || false;
|
|
32
|
-
exports.FSRSVersion = "3.1.0-
|
|
32
|
+
exports.FSRSVersion = "3.1.0-beta3";
|
|
33
33
|
const generatorParameters = (props) => {
|
|
34
34
|
return {
|
|
35
35
|
request_retention: props?.request_retention || exports.default_request_retention,
|
package/dist/fsrs.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Card, CardInput, DateInput, FSRSParameters, RecordLog, ReviewLogInput } from "./models";
|
|
1
|
+
import { Card, CardInput, DateInput, FSRSParameters, RecordLog, RecordLogItem, ReviewLogInput } from "./models";
|
|
2
2
|
import { FSRSAlgorithm } from "./algorithm";
|
|
3
3
|
export declare class FSRS extends FSRSAlgorithm {
|
|
4
4
|
constructor(param: Partial<FSRSParameters>);
|
|
@@ -8,4 +8,5 @@ export declare class FSRS extends FSRSAlgorithm {
|
|
|
8
8
|
repeat: (card: CardInput, now: DateInput) => RecordLog;
|
|
9
9
|
get_retrievability: (card: Card, now: Date) => undefined | string;
|
|
10
10
|
rollback: (card: CardInput, log: ReviewLogInput) => Card;
|
|
11
|
+
forget: (card: CardInput, now: DateInput, reset_count?: boolean) => RecordLogItem;
|
|
11
12
|
}
|
package/dist/fsrs.js
CHANGED
|
@@ -80,12 +80,16 @@ class FSRS extends algorithm_1.FSRSAlgorithm {
|
|
|
80
80
|
rollback = (card, log) => {
|
|
81
81
|
card = this.preProcessCard(card);
|
|
82
82
|
log = this.preProcessLog(log);
|
|
83
|
-
|
|
83
|
+
if (log.rating === models_1.Rating.Manual) {
|
|
84
|
+
throw new Error("Cannot rollback a manual rating");
|
|
85
|
+
}
|
|
86
|
+
let last_due, last_review, last_lapses, last_elapsed_days;
|
|
84
87
|
switch (log.state) {
|
|
85
88
|
case models_1.State.New:
|
|
86
89
|
last_due = log.due;
|
|
87
90
|
last_review = undefined;
|
|
88
91
|
last_lapses = 0;
|
|
92
|
+
last_elapsed_days = 0;
|
|
89
93
|
break;
|
|
90
94
|
case models_1.State.Learning:
|
|
91
95
|
case models_1.State.Relearning:
|
|
@@ -95,6 +99,7 @@ class FSRS extends algorithm_1.FSRSAlgorithm {
|
|
|
95
99
|
last_lapses =
|
|
96
100
|
card.lapses -
|
|
97
101
|
(log.rating === models_1.Rating.Again && log.state === models_1.State.Review ? 1 : 0);
|
|
102
|
+
last_elapsed_days = log.elapsed_days == 0 ? 0 : card.scheduled_days;
|
|
98
103
|
break;
|
|
99
104
|
}
|
|
100
105
|
return {
|
|
@@ -102,7 +107,7 @@ class FSRS extends algorithm_1.FSRSAlgorithm {
|
|
|
102
107
|
due: last_due,
|
|
103
108
|
stability: log.stability,
|
|
104
109
|
difficulty: log.difficulty,
|
|
105
|
-
elapsed_days: log.
|
|
110
|
+
elapsed_days: log.last_elapsed_days,
|
|
106
111
|
scheduled_days: log.scheduled_days,
|
|
107
112
|
reps: Math.max(0, card.reps - 1),
|
|
108
113
|
lapses: Math.max(0, last_lapses),
|
|
@@ -110,5 +115,33 @@ class FSRS extends algorithm_1.FSRSAlgorithm {
|
|
|
110
115
|
last_review: last_review,
|
|
111
116
|
};
|
|
112
117
|
};
|
|
118
|
+
forget = (card, now, reset_count = false) => {
|
|
119
|
+
card = this.preProcessCard(card);
|
|
120
|
+
now = this.preProcessDate(now);
|
|
121
|
+
const forget_log = {
|
|
122
|
+
rating: models_1.Rating.Manual,
|
|
123
|
+
state: card.state,
|
|
124
|
+
due: card.due,
|
|
125
|
+
stability: card.stability,
|
|
126
|
+
difficulty: card.difficulty,
|
|
127
|
+
elapsed_days: 0,
|
|
128
|
+
last_elapsed_days: card.elapsed_days,
|
|
129
|
+
scheduled_days: card.scheduled_days,
|
|
130
|
+
review: now,
|
|
131
|
+
};
|
|
132
|
+
const forget_card = {
|
|
133
|
+
...card,
|
|
134
|
+
due: now,
|
|
135
|
+
stability: 0,
|
|
136
|
+
difficulty: 0,
|
|
137
|
+
elapsed_days: 0,
|
|
138
|
+
scheduled_days: 0,
|
|
139
|
+
reps: reset_count ? 0 : card.reps,
|
|
140
|
+
lapses: reset_count ? 0 : card.lapses,
|
|
141
|
+
state: models_1.State.New,
|
|
142
|
+
last_review: card.last_review,
|
|
143
|
+
};
|
|
144
|
+
return { card: forget_card, log: forget_log };
|
|
145
|
+
};
|
|
113
146
|
}
|
|
114
147
|
exports.FSRS = FSRS;
|
package/dist/help.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { int, unit } from "./type";
|
|
2
|
-
import { Rating, State } from "./models";
|
|
2
|
+
import { Grade, Rating, State } from "./models";
|
|
3
3
|
declare global {
|
|
4
4
|
export interface Date {
|
|
5
5
|
scheduler(t: int, isDay?: boolean): Date;
|
|
@@ -22,3 +22,4 @@ export declare function show_diff_message(due: Date, last_review: Date, unit?: b
|
|
|
22
22
|
export declare function fixDate(value: unknown): Date;
|
|
23
23
|
export declare function fixState(value: unknown): State;
|
|
24
24
|
export declare function fixRating(value: unknown): Rating;
|
|
25
|
+
export declare const Grades: Grade[];
|
package/dist/help.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fixRating = exports.fixState = exports.fixDate = exports.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = void 0;
|
|
3
|
+
exports.Grades = exports.fixRating = exports.fixState = exports.fixDate = exports.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = void 0;
|
|
4
4
|
const models_1 = require("./models");
|
|
5
5
|
Date.prototype.scheduler = function (t, isDay) {
|
|
6
6
|
return date_scheduler(this, t, isDay);
|
|
@@ -123,3 +123,9 @@ function fixRating(value) {
|
|
|
123
123
|
throw new Error(`Invalid rating:[${value}]`);
|
|
124
124
|
}
|
|
125
125
|
exports.fixRating = fixRating;
|
|
126
|
+
exports.Grades = [
|
|
127
|
+
models_1.Rating.Again,
|
|
128
|
+
models_1.Rating.Hard,
|
|
129
|
+
models_1.Rating.Good,
|
|
130
|
+
models_1.Rating.Easy,
|
|
131
|
+
];
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { SchedulingCard } from "./scheduler";
|
|
2
2
|
export { default_request_retention, default_maximum_interval, default_w, default_enable_fuzz, FSRSVersion, generatorParameters, createEmptyCard, fsrs, envParams, } from "./default";
|
|
3
|
-
export { date_scheduler, date_diff, formatDate, show_diff_message, } from "./help";
|
|
3
|
+
export { date_scheduler, date_diff, formatDate, show_diff_message, Grades, } from "./help";
|
|
4
4
|
export type { int, double } from "./type";
|
|
5
|
-
export type { FSRSParameters, Card, ReviewLog, RecordLog, RecordLogItem, StateType, RatingType, CardInput, DateInput, } from "./models";
|
|
5
|
+
export type { FSRSParameters, Card, ReviewLog, RecordLog, RecordLogItem, StateType, RatingType, Grade, CardInput, DateInput, } from "./models";
|
|
6
6
|
export { State, Rating } from "./models";
|
|
7
7
|
export { FSRS } from "./fsrs";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FSRS = exports.Rating = exports.State = exports.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = exports.envParams = exports.fsrs = exports.createEmptyCard = exports.generatorParameters = exports.FSRSVersion = exports.default_enable_fuzz = exports.default_w = exports.default_maximum_interval = exports.default_request_retention = exports.SchedulingCard = void 0;
|
|
3
|
+
exports.FSRS = exports.Rating = exports.State = exports.Grades = exports.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = exports.envParams = exports.fsrs = exports.createEmptyCard = exports.generatorParameters = exports.FSRSVersion = exports.default_enable_fuzz = exports.default_w = exports.default_maximum_interval = exports.default_request_retention = exports.SchedulingCard = void 0;
|
|
4
4
|
var scheduler_1 = require("./scheduler");
|
|
5
5
|
Object.defineProperty(exports, "SchedulingCard", { enumerable: true, get: function () { return scheduler_1.SchedulingCard; } });
|
|
6
6
|
var default_1 = require("./default");
|
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "date_scheduler", { enumerable: true, get: functi
|
|
|
18
18
|
Object.defineProperty(exports, "date_diff", { enumerable: true, get: function () { return help_1.date_diff; } });
|
|
19
19
|
Object.defineProperty(exports, "formatDate", { enumerable: true, get: function () { return help_1.formatDate; } });
|
|
20
20
|
Object.defineProperty(exports, "show_diff_message", { enumerable: true, get: function () { return help_1.show_diff_message; } });
|
|
21
|
+
Object.defineProperty(exports, "Grades", { enumerable: true, get: function () { return help_1.Grades; } });
|
|
21
22
|
var models_1 = require("./models");
|
|
22
23
|
Object.defineProperty(exports, "State", { enumerable: true, get: function () { return models_1.State; } });
|
|
23
24
|
Object.defineProperty(exports, "Rating", { enumerable: true, get: function () { return models_1.Rating; } });
|
package/dist/models.d.ts
CHANGED
|
@@ -7,11 +7,14 @@ export declare enum State {
|
|
|
7
7
|
}
|
|
8
8
|
export type RatingType = "Again" | "Hard" | "Good" | "Easy";
|
|
9
9
|
export declare enum Rating {
|
|
10
|
+
Manual = 0,
|
|
10
11
|
Again = 1,
|
|
11
12
|
Hard = 2,
|
|
12
13
|
Good = 3,
|
|
13
14
|
Easy = 4
|
|
14
15
|
}
|
|
16
|
+
type ExcludeManual<T> = Exclude<T, Rating.Manual>;
|
|
17
|
+
export type Grade = ExcludeManual<Rating>;
|
|
15
18
|
export interface ReviewLog {
|
|
16
19
|
rating: Rating;
|
|
17
20
|
state: State;
|
|
@@ -19,6 +22,7 @@ export interface ReviewLog {
|
|
|
19
22
|
stability: number;
|
|
20
23
|
difficulty: number;
|
|
21
24
|
elapsed_days: number;
|
|
25
|
+
last_elapsed_days: number;
|
|
22
26
|
scheduled_days: number;
|
|
23
27
|
review: Date;
|
|
24
28
|
}
|
|
@@ -27,7 +31,7 @@ export type RecordLogItem = {
|
|
|
27
31
|
log: ReviewLog;
|
|
28
32
|
};
|
|
29
33
|
export type RecordLog = {
|
|
30
|
-
[key in
|
|
34
|
+
[key in Grade]: RecordLogItem;
|
|
31
35
|
};
|
|
32
36
|
export interface Card {
|
|
33
37
|
due: Date;
|
|
@@ -54,3 +58,4 @@ export interface FSRSParameters {
|
|
|
54
58
|
w: number[];
|
|
55
59
|
enable_fuzz: boolean;
|
|
56
60
|
}
|
|
61
|
+
export {};
|
package/dist/models.js
CHANGED
package/dist/scheduler.d.ts
CHANGED
package/dist/scheduler.js
CHANGED
|
@@ -9,7 +9,7 @@ class SchedulingCard {
|
|
|
9
9
|
good;
|
|
10
10
|
easy;
|
|
11
11
|
last_review;
|
|
12
|
-
|
|
12
|
+
last_elapsed_days;
|
|
13
13
|
copy(card) {
|
|
14
14
|
return {
|
|
15
15
|
...card,
|
|
@@ -17,7 +17,7 @@ class SchedulingCard {
|
|
|
17
17
|
}
|
|
18
18
|
constructor(card, now) {
|
|
19
19
|
this.last_review = card.last_review || card.due;
|
|
20
|
-
this.
|
|
20
|
+
this.last_elapsed_days = card.elapsed_days;
|
|
21
21
|
card.elapsed_days =
|
|
22
22
|
card.state === models_1.State.New ? 0 : now.diff(card.last_review, "days"); //相距时间
|
|
23
23
|
card.last_review = now; // 上次复习时间
|
|
@@ -74,7 +74,8 @@ class SchedulingCard {
|
|
|
74
74
|
due: this.last_review,
|
|
75
75
|
stability: card.stability,
|
|
76
76
|
difficulty: card.difficulty,
|
|
77
|
-
elapsed_days:
|
|
77
|
+
elapsed_days: card.elapsed_days,
|
|
78
|
+
last_elapsed_days: this.last_elapsed_days,
|
|
78
79
|
scheduled_days: card.scheduled_days,
|
|
79
80
|
review: now,
|
|
80
81
|
},
|
|
@@ -87,7 +88,8 @@ class SchedulingCard {
|
|
|
87
88
|
due: this.last_review,
|
|
88
89
|
stability: card.stability,
|
|
89
90
|
difficulty: card.difficulty,
|
|
90
|
-
elapsed_days:
|
|
91
|
+
elapsed_days: card.elapsed_days,
|
|
92
|
+
last_elapsed_days: this.last_elapsed_days,
|
|
91
93
|
scheduled_days: card.scheduled_days,
|
|
92
94
|
review: now,
|
|
93
95
|
},
|
|
@@ -100,7 +102,8 @@ class SchedulingCard {
|
|
|
100
102
|
due: this.last_review,
|
|
101
103
|
stability: card.stability,
|
|
102
104
|
difficulty: card.difficulty,
|
|
103
|
-
elapsed_days:
|
|
105
|
+
elapsed_days: card.elapsed_days,
|
|
106
|
+
last_elapsed_days: this.last_elapsed_days,
|
|
104
107
|
scheduled_days: card.scheduled_days,
|
|
105
108
|
review: now,
|
|
106
109
|
},
|
|
@@ -113,7 +116,8 @@ class SchedulingCard {
|
|
|
113
116
|
due: this.last_review,
|
|
114
117
|
stability: card.stability,
|
|
115
118
|
difficulty: card.difficulty,
|
|
116
|
-
elapsed_days:
|
|
119
|
+
elapsed_days: card.elapsed_days,
|
|
120
|
+
last_elapsed_days: this.last_elapsed_days,
|
|
117
121
|
scheduled_days: card.scheduled_days,
|
|
118
122
|
review: now,
|
|
119
123
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-fsrs",
|
|
3
|
-
"version": "3.1.0-
|
|
3
|
+
"version": "3.1.0-beta3",
|
|
4
4
|
"description": "ts-fsrs is a TypeScript package used to implement the Free Spaced Repetition Scheduler (FSRS) algorithm. It helps developers apply FSRS to their flashcard applications, thereby improving the user learning experience.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|