ts-fsrs 2.1.1 → 2.2.0
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 +9 -0
- package/dist/default.d.ts +20 -0
- package/dist/default.js +67 -0
- package/dist/fsrs.d.ts +5 -4
- package/dist/fsrs.js +23 -20
- package/dist/help.d.ts +1 -7
- package/dist/index.d.ts +6 -25
- package/dist/index.js +19 -56
- package/dist/models.d.ts +0 -12
- package/dist/models.js +1 -9
- package/dist/type.d.ts +15 -0
- package/dist/type.js +2 -0
- package/package.json +3 -2
- package/dist/fsrs_version.d.ts +0 -2
- package/dist/fsrs_version.js +0 -7
package/README.md
CHANGED
|
@@ -9,6 +9,15 @@ developers apply FSRS to their flashcard applications, there by improving the us
|
|
|
9
9
|
npm install ts-fsrs
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
+
# Environment Variables
|
|
13
|
+
If you need to customize default parameters, you can modify the values using `.env`/`.env.local`/`.env.production`/`.env.development`.
|
|
14
|
+
|
|
15
|
+
Copy the [.env.local.example](./example/.env.local.example) file in this directory to .env.local (which will be ignored by Git):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
cp .env.local.example .env.local
|
|
19
|
+
```
|
|
20
|
+
|
|
12
21
|
# Example
|
|
13
22
|
|
|
14
23
|
```typescript
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Card, FSRSParameters, FSRS } from "./index";
|
|
2
|
+
import { EnvParams } from "./type";
|
|
3
|
+
export declare const envParams: EnvParams;
|
|
4
|
+
export declare const default_request_retention: number;
|
|
5
|
+
export declare const default_maximum_interval: number;
|
|
6
|
+
export declare const default_easy_bonus: number;
|
|
7
|
+
export declare const default_hard_factor: number;
|
|
8
|
+
export declare const default_w: number[];
|
|
9
|
+
export declare const default_enable_fuzz: boolean;
|
|
10
|
+
export declare const FSRSVersion: string;
|
|
11
|
+
export declare const generatorParameters: (props?: Partial<FSRSParameters>) => {
|
|
12
|
+
request_retention: number;
|
|
13
|
+
maximum_interval: number;
|
|
14
|
+
easy_bonus: number;
|
|
15
|
+
hard_factor: number;
|
|
16
|
+
w: number[];
|
|
17
|
+
enable_fuzz: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare const createEmptyCard: (now?: Date) => Card;
|
|
20
|
+
export declare const fsrs: (params?: Partial<FSRSParameters>) => FSRS;
|
package/dist/default.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fsrs = exports.createEmptyCard = exports.generatorParameters = exports.FSRSVersion = exports.default_enable_fuzz = exports.default_w = exports.default_hard_factor = exports.default_easy_bonus = exports.default_maximum_interval = exports.default_request_retention = exports.envParams = void 0;
|
|
7
|
+
const index_1 = require("./index");
|
|
8
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
9
|
+
dotenv_1.default.config({ path: `./.env.local` });
|
|
10
|
+
dotenv_1.default.config({ path: `./.env.production` });
|
|
11
|
+
dotenv_1.default.config({ path: `./.env.` });
|
|
12
|
+
dotenv_1.default.config({ path: `./.env.development` });
|
|
13
|
+
exports.envParams = {
|
|
14
|
+
FSRS_REQUEST_RETENTION: Number(process.env.FSRS_REQUEST_RETENTION),
|
|
15
|
+
FSRS_MAXIMUM_INTERVAL: Number(process.env.FSRS_MAXIMUM_INTERVAL),
|
|
16
|
+
FSRS_EASY_BOUND: Number(process.env.FSRS_EASY_BOUND),
|
|
17
|
+
FSRS_HARD_FACTOR: Number(process.env.FSRS_HARD_FACTOR),
|
|
18
|
+
FSRS_W: process.env.FSRS_W
|
|
19
|
+
? JSON.parse(process.env.FSRS_W)
|
|
20
|
+
: undefined,
|
|
21
|
+
FSRS_ENABLE_FUZZ: Boolean(process.env.FSRS_ENABLE_FUZZ),
|
|
22
|
+
};
|
|
23
|
+
exports.default_request_retention = !isNaN(exports.envParams.FSRS_REQUEST_RETENTION)
|
|
24
|
+
? exports.envParams.FSRS_REQUEST_RETENTION
|
|
25
|
+
: 0.9;
|
|
26
|
+
exports.default_maximum_interval = !isNaN(exports.envParams.FSRS_MAXIMUM_INTERVAL)
|
|
27
|
+
? exports.envParams.FSRS_MAXIMUM_INTERVAL
|
|
28
|
+
: 36500;
|
|
29
|
+
exports.default_easy_bonus = !isNaN(exports.envParams.FSRS_EASY_BOUND)
|
|
30
|
+
? exports.envParams.FSRS_EASY_BOUND
|
|
31
|
+
: 1.3;
|
|
32
|
+
exports.default_hard_factor = !isNaN(exports.envParams.FSRS_HARD_FACTOR)
|
|
33
|
+
? exports.envParams.FSRS_HARD_FACTOR
|
|
34
|
+
: 1.2;
|
|
35
|
+
exports.default_w = exports.envParams.FSRS_W || [
|
|
36
|
+
1, 1, 5, -0.5, -0.5, 0.2, 1.4, -0.12, 0.8, 2, -0.2, 0.2, 1,
|
|
37
|
+
];
|
|
38
|
+
exports.default_enable_fuzz = exports.envParams.FSRS_ENABLE_FUZZ || false;
|
|
39
|
+
exports.FSRSVersion = "2.2.0";
|
|
40
|
+
const generatorParameters = (props) => {
|
|
41
|
+
return {
|
|
42
|
+
request_retention: props?.request_retention || exports.default_request_retention,
|
|
43
|
+
maximum_interval: props?.maximum_interval || exports.default_maximum_interval,
|
|
44
|
+
easy_bonus: props?.easy_bonus || exports.default_easy_bonus,
|
|
45
|
+
hard_factor: props?.hard_factor || exports.default_hard_factor,
|
|
46
|
+
w: props?.w || exports.default_w,
|
|
47
|
+
enable_fuzz: props?.enable_fuzz || exports.default_enable_fuzz,
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
exports.generatorParameters = generatorParameters;
|
|
51
|
+
const createEmptyCard = (now) => {
|
|
52
|
+
return {
|
|
53
|
+
due: now || new Date(),
|
|
54
|
+
stability: 0,
|
|
55
|
+
difficulty: 0,
|
|
56
|
+
elapsed_days: 0,
|
|
57
|
+
scheduled_days: 0,
|
|
58
|
+
reps: 0,
|
|
59
|
+
lapses: 0,
|
|
60
|
+
state: index_1.State.New,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
exports.createEmptyCard = createEmptyCard;
|
|
64
|
+
const fsrs = (params) => {
|
|
65
|
+
return new index_1.FSRS(params || {});
|
|
66
|
+
};
|
|
67
|
+
exports.fsrs = fsrs;
|
package/dist/fsrs.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { SchedulingCard } from "./index";
|
|
2
|
+
import { FSRSParameters, Card, State, Rating } from "./models";
|
|
3
|
+
import type { int } from "./type";
|
|
4
|
+
export declare class FSRS {
|
|
4
5
|
private param;
|
|
5
6
|
private readonly intervalModifier;
|
|
6
7
|
private seed?;
|
|
7
|
-
constructor(param
|
|
8
|
+
constructor(param: Partial<FSRSParameters>);
|
|
8
9
|
repeat: (card: Card, now: Date) => {
|
|
9
10
|
0: {
|
|
10
11
|
card: Card;
|
package/dist/fsrs.js
CHANGED
|
@@ -3,25 +3,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FSRS = void 0;
|
|
6
7
|
const seedrandom_1 = __importDefault(require("seedrandom"));
|
|
7
8
|
const index_1 = require("./index");
|
|
8
9
|
const help_1 = require("./help");
|
|
10
|
+
const models_1 = require("./models");
|
|
9
11
|
class FSRS {
|
|
10
12
|
param;
|
|
11
13
|
intervalModifier;
|
|
12
14
|
seed;
|
|
13
15
|
constructor(param) {
|
|
14
|
-
this.param =
|
|
16
|
+
this.param = (0, index_1.generatorParameters)(param);
|
|
15
17
|
this.intervalModifier =
|
|
16
18
|
Math.log(this.param.request_retention) / Math.log(0.9);
|
|
17
19
|
}
|
|
18
20
|
repeat = (card, now) => {
|
|
19
21
|
card = {
|
|
20
22
|
...card,
|
|
23
|
+
last_review: card.last_review ? (0, help_1.fixDate)(card.last_review) : undefined,
|
|
21
24
|
};
|
|
22
25
|
now = new Date((0, help_1.fixDate)(now));
|
|
23
26
|
card.elapsed_days =
|
|
24
|
-
card.state ===
|
|
27
|
+
card.state === models_1.State.New ? 0 : now.diff(card.last_review, "days"); //相距时间
|
|
25
28
|
card.last_review = now; // 上次复习时间
|
|
26
29
|
card.reps += 1;
|
|
27
30
|
const s = new index_1.SchedulingCard(card);
|
|
@@ -29,7 +32,7 @@ class FSRS {
|
|
|
29
32
|
this.seed = String(card.last_review.getTime()) + String(card.elapsed_days);
|
|
30
33
|
let easy_interval, good_interval, hard_interval;
|
|
31
34
|
switch (card.state) {
|
|
32
|
-
case
|
|
35
|
+
case models_1.State.New:
|
|
33
36
|
this.init_ds(s);
|
|
34
37
|
s.again.due = now.scheduler(1);
|
|
35
38
|
s.hard.due = now.scheduler(5);
|
|
@@ -38,14 +41,14 @@ class FSRS {
|
|
|
38
41
|
s.easy.scheduled_days = easy_interval;
|
|
39
42
|
s.easy.due = now.scheduler(easy_interval, true);
|
|
40
43
|
break;
|
|
41
|
-
case
|
|
42
|
-
case
|
|
44
|
+
case models_1.State.Learning:
|
|
45
|
+
case models_1.State.Relearning:
|
|
43
46
|
hard_interval = 0;
|
|
44
47
|
good_interval = this.next_interval(s.good.stability);
|
|
45
48
|
easy_interval = Math.max(this.next_interval(s.easy.stability * this.param.easy_bonus), good_interval + 1);
|
|
46
49
|
s.schedule(now, hard_interval, good_interval, easy_interval);
|
|
47
50
|
break;
|
|
48
|
-
case
|
|
51
|
+
case models_1.State.Review: {
|
|
49
52
|
const interval = card.elapsed_days;
|
|
50
53
|
const last_d = card.difficulty;
|
|
51
54
|
const last_s = card.stability;
|
|
@@ -63,21 +66,21 @@ class FSRS {
|
|
|
63
66
|
return s.record_log(card, now);
|
|
64
67
|
};
|
|
65
68
|
get_retrievability = (card, now) => {
|
|
66
|
-
if (card.state !==
|
|
69
|
+
if (card.state !== models_1.State.Review) {
|
|
67
70
|
return undefined;
|
|
68
71
|
}
|
|
69
72
|
const t = Math.max(now.diff(card.last_review, "days"), 0);
|
|
70
73
|
return ((this.current_retrievability(t, card.stability) * 100).toFixed(2) + "%");
|
|
71
74
|
};
|
|
72
75
|
init_ds(s) {
|
|
73
|
-
s.again.difficulty = this.init_difficulty(
|
|
74
|
-
s.again.stability = this.init_stability(
|
|
75
|
-
s.hard.difficulty = this.init_difficulty(
|
|
76
|
-
s.hard.stability = this.init_stability(
|
|
77
|
-
s.good.difficulty = this.init_difficulty(
|
|
78
|
-
s.good.stability = this.init_stability(
|
|
79
|
-
s.easy.difficulty = this.init_difficulty(
|
|
80
|
-
s.easy.stability = this.init_stability(
|
|
76
|
+
s.again.difficulty = this.init_difficulty(models_1.Rating.Again);
|
|
77
|
+
s.again.stability = this.init_stability(models_1.Rating.Again);
|
|
78
|
+
s.hard.difficulty = this.init_difficulty(models_1.Rating.Hard);
|
|
79
|
+
s.hard.stability = this.init_stability(models_1.Rating.Hard);
|
|
80
|
+
s.good.difficulty = this.init_difficulty(models_1.Rating.Good);
|
|
81
|
+
s.good.stability = this.init_stability(models_1.Rating.Good);
|
|
82
|
+
s.easy.difficulty = this.init_difficulty(models_1.Rating.Easy);
|
|
83
|
+
s.easy.stability = this.init_stability(models_1.Rating.Easy);
|
|
81
84
|
}
|
|
82
85
|
/**
|
|
83
86
|
*
|
|
@@ -87,13 +90,13 @@ class FSRS {
|
|
|
87
90
|
* @param retrievability Retrievability
|
|
88
91
|
*/
|
|
89
92
|
next_ds(s, last_d, last_s, retrievability) {
|
|
90
|
-
s.again.difficulty = this.next_difficulty(last_d,
|
|
93
|
+
s.again.difficulty = this.next_difficulty(last_d, models_1.Rating.Again);
|
|
91
94
|
s.again.stability = this.next_forget_stability(s.again.difficulty, last_s, retrievability);
|
|
92
|
-
s.hard.difficulty = this.next_difficulty(last_d,
|
|
95
|
+
s.hard.difficulty = this.next_difficulty(last_d, models_1.Rating.Hard);
|
|
93
96
|
s.hard.stability = this.next_recall_stability(s.hard.difficulty, last_s, retrievability);
|
|
94
|
-
s.good.difficulty = this.next_difficulty(last_d,
|
|
97
|
+
s.good.difficulty = this.next_difficulty(last_d, models_1.Rating.Good);
|
|
95
98
|
s.good.stability = this.next_recall_stability(s.good.difficulty, last_s, retrievability);
|
|
96
|
-
s.easy.difficulty = this.next_difficulty(last_d,
|
|
99
|
+
s.easy.difficulty = this.next_difficulty(last_d, models_1.Rating.Easy);
|
|
97
100
|
s.easy.stability = this.next_recall_stability(s.easy.difficulty, last_s, retrievability);
|
|
98
101
|
}
|
|
99
102
|
/**
|
|
@@ -200,4 +203,4 @@ class FSRS {
|
|
|
200
203
|
return Math.exp((Math.log(0.9) * t) / s);
|
|
201
204
|
}
|
|
202
205
|
}
|
|
203
|
-
exports.
|
|
206
|
+
exports.FSRS = FSRS;
|
package/dist/help.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export type int = number & {
|
|
3
|
-
__int__: void;
|
|
4
|
-
};
|
|
5
|
-
export type double = number & {
|
|
6
|
-
__double__: void;
|
|
7
|
-
};
|
|
1
|
+
import type { int, unit } from "./type";
|
|
8
2
|
declare global {
|
|
9
3
|
export interface Date {
|
|
10
4
|
scheduler(t: int, isDay?: boolean): Date;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,26 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { SchedulingCard } from "./scheduler";
|
|
4
|
-
import FSRSVersion from "./fsrs_version";
|
|
5
|
-
declare const fsrs: (param?: FSRSParameters) => FSRS;
|
|
6
|
-
declare const createEmptyCard: (now?: Date) => Card;
|
|
7
|
-
declare const generatorParameters: (props?: {
|
|
8
|
-
request_retention?: number;
|
|
9
|
-
maximum_interval?: number;
|
|
10
|
-
easy_bonus?: number;
|
|
11
|
-
hard_factor?: number;
|
|
12
|
-
w?: number[];
|
|
13
|
-
enable_fuzz?: boolean;
|
|
14
|
-
}) => {
|
|
15
|
-
request_retention: number;
|
|
16
|
-
maximum_interval: number;
|
|
17
|
-
easy_bonus: number;
|
|
18
|
-
hard_factor: number;
|
|
19
|
-
w: number[];
|
|
20
|
-
enable_fuzz: boolean;
|
|
21
|
-
};
|
|
22
|
-
export { fsrs, FSRSVersion, State, Rating, SchedulingCard, createEmptyCard, generatorParameters, };
|
|
23
|
-
export type { StateType, RatingType, ReviewLog, Card, SchedulingLog, FSRSParameters, };
|
|
24
|
-
export { default_request_retention, default_maximum_interval, default_easy_bonus, default_hard_factor, default_w, default_enable_fuzz, };
|
|
1
|
+
export { SchedulingCard } from "./scheduler";
|
|
2
|
+
export { default_request_retention, default_maximum_interval, default_easy_bonus, default_hard_factor, default_w, default_enable_fuzz, FSRSVersion, generatorParameters, createEmptyCard, fsrs, envParams } from "./default";
|
|
25
3
|
export { date_scheduler, date_diff, formatDate, show_diff_message, } from "./help";
|
|
26
|
-
export type { int, double } from "./
|
|
4
|
+
export type { int, double } from "./type";
|
|
5
|
+
export type { FSRSParameters, Card, ReviewLog, StateType, RatingType, } from "./models";
|
|
6
|
+
export { State, Rating } from "./models";
|
|
7
|
+
export { FSRS } from "./fsrs";
|
package/dist/index.js
CHANGED
|
@@ -1,64 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
const models_1 = require("./models");
|
|
9
|
-
Object.defineProperty(exports, "default_easy_bonus", { enumerable: true, get: function () { return models_1.default_easy_bonus; } });
|
|
10
|
-
Object.defineProperty(exports, "default_enable_fuzz", { enumerable: true, get: function () { return models_1.default_enable_fuzz; } });
|
|
11
|
-
Object.defineProperty(exports, "default_hard_factor", { enumerable: true, get: function () { return models_1.default_hard_factor; } });
|
|
12
|
-
Object.defineProperty(exports, "default_maximum_interval", { enumerable: true, get: function () { return models_1.default_maximum_interval; } });
|
|
13
|
-
Object.defineProperty(exports, "default_request_retention", { enumerable: true, get: function () { return models_1.default_request_retention; } });
|
|
14
|
-
Object.defineProperty(exports, "default_w", { enumerable: true, get: function () { return models_1.default_w; } });
|
|
15
|
-
Object.defineProperty(exports, "Rating", { enumerable: true, get: function () { return models_1.Rating; } });
|
|
16
|
-
Object.defineProperty(exports, "State", { enumerable: true, get: function () { return models_1.State; } });
|
|
17
|
-
const scheduler_1 = require("./scheduler");
|
|
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_hard_factor = exports.default_easy_bonus = exports.default_maximum_interval = exports.default_request_retention = exports.SchedulingCard = void 0;
|
|
4
|
+
var scheduler_1 = require("./scheduler");
|
|
18
5
|
Object.defineProperty(exports, "SchedulingCard", { enumerable: true, get: function () { return scheduler_1.SchedulingCard; } });
|
|
19
|
-
|
|
20
|
-
exports
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
};
|
|
24
|
-
exports.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
scheduled_days: 0,
|
|
32
|
-
reps: 0,
|
|
33
|
-
lapses: 0,
|
|
34
|
-
state: models_1.State.New,
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
exports.createEmptyCard = createEmptyCard;
|
|
38
|
-
const generatorParameters = (props) => {
|
|
39
|
-
if (!props) {
|
|
40
|
-
return {
|
|
41
|
-
request_retention: models_1.default_request_retention,
|
|
42
|
-
maximum_interval: models_1.default_maximum_interval,
|
|
43
|
-
easy_bonus: models_1.default_easy_bonus,
|
|
44
|
-
hard_factor: models_1.default_hard_factor,
|
|
45
|
-
w: models_1.default_w,
|
|
46
|
-
enable_fuzz: models_1.default_enable_fuzz,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
const { w, request_retention, hard_factor, maximum_interval, enable_fuzz, easy_bonus, } = props;
|
|
50
|
-
return {
|
|
51
|
-
request_retention: request_retention || models_1.default_request_retention,
|
|
52
|
-
maximum_interval: maximum_interval || models_1.default_maximum_interval,
|
|
53
|
-
easy_bonus: easy_bonus || models_1.default_easy_bonus,
|
|
54
|
-
hard_factor: hard_factor || models_1.default_hard_factor,
|
|
55
|
-
w: w || models_1.default_w,
|
|
56
|
-
enable_fuzz: enable_fuzz || models_1.default_enable_fuzz,
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
exports.generatorParameters = generatorParameters;
|
|
6
|
+
var default_1 = require("./default");
|
|
7
|
+
Object.defineProperty(exports, "default_request_retention", { enumerable: true, get: function () { return default_1.default_request_retention; } });
|
|
8
|
+
Object.defineProperty(exports, "default_maximum_interval", { enumerable: true, get: function () { return default_1.default_maximum_interval; } });
|
|
9
|
+
Object.defineProperty(exports, "default_easy_bonus", { enumerable: true, get: function () { return default_1.default_easy_bonus; } });
|
|
10
|
+
Object.defineProperty(exports, "default_hard_factor", { enumerable: true, get: function () { return default_1.default_hard_factor; } });
|
|
11
|
+
Object.defineProperty(exports, "default_w", { enumerable: true, get: function () { return default_1.default_w; } });
|
|
12
|
+
Object.defineProperty(exports, "default_enable_fuzz", { enumerable: true, get: function () { return default_1.default_enable_fuzz; } });
|
|
13
|
+
Object.defineProperty(exports, "FSRSVersion", { enumerable: true, get: function () { return default_1.FSRSVersion; } });
|
|
14
|
+
Object.defineProperty(exports, "generatorParameters", { enumerable: true, get: function () { return default_1.generatorParameters; } });
|
|
15
|
+
Object.defineProperty(exports, "createEmptyCard", { enumerable: true, get: function () { return default_1.createEmptyCard; } });
|
|
16
|
+
Object.defineProperty(exports, "fsrs", { enumerable: true, get: function () { return default_1.fsrs; } });
|
|
17
|
+
Object.defineProperty(exports, "envParams", { enumerable: true, get: function () { return default_1.envParams; } });
|
|
60
18
|
var help_1 = require("./help");
|
|
61
19
|
Object.defineProperty(exports, "date_scheduler", { enumerable: true, get: function () { return help_1.date_scheduler; } });
|
|
62
20
|
Object.defineProperty(exports, "date_diff", { enumerable: true, get: function () { return help_1.date_diff; } });
|
|
63
21
|
Object.defineProperty(exports, "formatDate", { enumerable: true, get: function () { return help_1.formatDate; } });
|
|
64
22
|
Object.defineProperty(exports, "show_diff_message", { enumerable: true, get: function () { return help_1.show_diff_message; } });
|
|
23
|
+
var models_1 = require("./models");
|
|
24
|
+
Object.defineProperty(exports, "State", { enumerable: true, get: function () { return models_1.State; } });
|
|
25
|
+
Object.defineProperty(exports, "Rating", { enumerable: true, get: function () { return models_1.Rating; } });
|
|
26
|
+
var fsrs_1 = require("./fsrs");
|
|
27
|
+
Object.defineProperty(exports, "FSRS", { enumerable: true, get: function () { return fsrs_1.FSRS; } });
|
package/dist/models.d.ts
CHANGED
|
@@ -30,12 +30,6 @@ export interface Card {
|
|
|
30
30
|
state: State;
|
|
31
31
|
last_review?: Date;
|
|
32
32
|
}
|
|
33
|
-
export interface SchedulingLog {
|
|
34
|
-
[key: number]: {
|
|
35
|
-
card: Card;
|
|
36
|
-
log: ReviewLog;
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
33
|
export interface FSRSParameters {
|
|
40
34
|
request_retention: number;
|
|
41
35
|
maximum_interval: number;
|
|
@@ -44,9 +38,3 @@ export interface FSRSParameters {
|
|
|
44
38
|
w: number[];
|
|
45
39
|
enable_fuzz: boolean;
|
|
46
40
|
}
|
|
47
|
-
export declare const default_request_retention = 0.9;
|
|
48
|
-
export declare const default_maximum_interval = 36500;
|
|
49
|
-
export declare const default_easy_bonus = 1.3;
|
|
50
|
-
export declare const default_hard_factor = 1.2;
|
|
51
|
-
export declare const default_w: number[];
|
|
52
|
-
export declare const default_enable_fuzz = false;
|
package/dist/models.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Rating = exports.State = void 0;
|
|
4
4
|
var State;
|
|
5
5
|
(function (State) {
|
|
6
6
|
State[State["New"] = 0] = "New";
|
|
@@ -15,11 +15,3 @@ var Rating;
|
|
|
15
15
|
Rating[Rating["Good"] = 2] = "Good";
|
|
16
16
|
Rating[Rating["Easy"] = 3] = "Easy";
|
|
17
17
|
})(Rating || (exports.Rating = Rating = {}));
|
|
18
|
-
exports.default_request_retention = 0.9;
|
|
19
|
-
exports.default_maximum_interval = 36500;
|
|
20
|
-
exports.default_easy_bonus = 1.3;
|
|
21
|
-
exports.default_hard_factor = 1.2;
|
|
22
|
-
exports.default_w = [
|
|
23
|
-
1, 1, 5, -0.5, -0.5, 0.2, 1.4, -0.12, 0.8, 2, -0.2, 0.2, 1,
|
|
24
|
-
];
|
|
25
|
-
exports.default_enable_fuzz = false;
|
package/dist/type.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type unit = "days" | "minutes";
|
|
2
|
+
export type int = number & {
|
|
3
|
+
__int__: void;
|
|
4
|
+
};
|
|
5
|
+
export type double = number & {
|
|
6
|
+
__double__: void;
|
|
7
|
+
};
|
|
8
|
+
export interface EnvParams {
|
|
9
|
+
FSRS_REQUEST_RETENTION: number;
|
|
10
|
+
FSRS_MAXIMUM_INTERVAL: number;
|
|
11
|
+
FSRS_EASY_BOUND: number;
|
|
12
|
+
FSRS_HARD_FACTOR: number;
|
|
13
|
+
FSRS_W?: number[];
|
|
14
|
+
FSRS_ENABLE_FUZZ?: boolean;
|
|
15
|
+
}
|
package/dist/type.js
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-fsrs",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
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",
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
"FSRS"
|
|
11
11
|
],
|
|
12
12
|
"dependencies": {
|
|
13
|
+
"dotenv": "^16.3.1",
|
|
13
14
|
"seedrandom": "^3.0.5"
|
|
14
15
|
},
|
|
15
16
|
"devDependencies": {
|
|
16
|
-
"@types/node": "^20.6.2",
|
|
17
17
|
"@types/jest": "^29.5.5",
|
|
18
|
+
"@types/node": "^20.6.2",
|
|
18
19
|
"@types/seedrandom": "^3.0.5",
|
|
19
20
|
"@typescript-eslint/eslint-plugin": "^6.7.0",
|
|
20
21
|
"@typescript-eslint/parser": "^6.7.0",
|
package/dist/fsrs_version.d.ts
DELETED
package/dist/fsrs_version.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
const package_json_1 = require("../../package.json");
|
|
6
|
-
const FSRSVersion = package_json_1.version;
|
|
7
|
-
exports.default = FSRSVersion;
|