ts-fsrs 2.0.2 → 2.0.3
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 +2 -2
- package/lib/fsrs.d.ts +126 -126
- package/lib/fsrs.js +189 -189
- package/lib/help.d.ts +19 -19
- package/lib/help.js +70 -70
- package/lib/index.d.ts +25 -25
- package/lib/index.js +64 -64
- package/lib/models.d.ts +52 -52
- package/lib/models.js +23 -23
- package/lib/scheduler.d.ts +53 -53
- package/lib/scheduler.js +95 -95
- package/package.json +3 -3
package/lib/help.d.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
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
|
-
declare global {
|
|
9
|
-
export interface Date {
|
|
10
|
-
scheduler(t: int, isDay?: boolean): Date;
|
|
11
|
-
diff(pre: Date, unit: unit): int;
|
|
12
|
-
format(): string;
|
|
13
|
-
dueFormat(last_review: Date, unit?: boolean): string;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export declare function date_scheduler(now: Date, t: number, isDay?: boolean): Date;
|
|
17
|
-
export declare function date_diff(now: Date, pre: Date, unit: unit): number;
|
|
18
|
-
export declare function formatDate(date: Date): string;
|
|
19
|
-
export declare function show_diff_message(due: Date, last_review: Date, unit?: boolean): string;
|
|
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
|
+
declare global {
|
|
9
|
+
export interface Date {
|
|
10
|
+
scheduler(t: int, isDay?: boolean): Date;
|
|
11
|
+
diff(pre: Date, unit: unit): int;
|
|
12
|
+
format(): string;
|
|
13
|
+
dueFormat(last_review: Date, unit?: boolean): string;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export declare function date_scheduler(now: Date, t: number, isDay?: boolean): Date;
|
|
17
|
+
export declare function date_diff(now: Date, pre: Date, unit: unit): number;
|
|
18
|
+
export declare function formatDate(date: Date): string;
|
|
19
|
+
export declare function show_diff_message(due: Date, last_review: Date, unit?: boolean): string;
|
package/lib/help.js
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = void 0;
|
|
4
|
-
Date.prototype.scheduler = function (t, isDay) {
|
|
5
|
-
return date_scheduler(this, t, isDay);
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* 当前时间与之前的时间差值
|
|
9
|
-
* @param pre 比当前时间还要之前
|
|
10
|
-
* @param unit 单位: days | minutes
|
|
11
|
-
*/
|
|
12
|
-
Date.prototype.diff = function (pre, unit) {
|
|
13
|
-
return date_diff(this, pre, unit);
|
|
14
|
-
};
|
|
15
|
-
Date.prototype.format = function () {
|
|
16
|
-
return formatDate(this);
|
|
17
|
-
};
|
|
18
|
-
Date.prototype.dueFormat = function (last_review, unit) {
|
|
19
|
-
return show_diff_message(this, last_review, unit);
|
|
20
|
-
};
|
|
21
|
-
function date_scheduler(now, t, isDay) {
|
|
22
|
-
return new Date(isDay ? now.getTime() + t * 24 * 60 * 60 * 1000 : now.getTime() + t * 60 * 1000);
|
|
23
|
-
}
|
|
24
|
-
exports.date_scheduler = date_scheduler;
|
|
25
|
-
function date_diff(now, pre, unit) {
|
|
26
|
-
const diff = now.getTime() - pre.getTime();
|
|
27
|
-
let r = 0;
|
|
28
|
-
switch (unit) {
|
|
29
|
-
case 'days':
|
|
30
|
-
r = Math.floor((diff) / (24 * 60 * 60 * 1000));
|
|
31
|
-
break;
|
|
32
|
-
case 'minutes':
|
|
33
|
-
r = Math.floor((diff) / (60 * 1000));
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
return r;
|
|
37
|
-
}
|
|
38
|
-
exports.date_diff = date_diff;
|
|
39
|
-
function formatDate(date) {
|
|
40
|
-
const year = date.getFullYear();
|
|
41
|
-
const month = date.getMonth() + 1;
|
|
42
|
-
const day = date.getDate();
|
|
43
|
-
const hours = date.getHours();
|
|
44
|
-
const minutes = date.getMinutes();
|
|
45
|
-
const seconds = date.getSeconds();
|
|
46
|
-
return `${year}-${padZero(month)}-${padZero(day)} ${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;
|
|
47
|
-
}
|
|
48
|
-
exports.formatDate = formatDate;
|
|
49
|
-
function padZero(num) {
|
|
50
|
-
return num < 10 ? `0${num}` : `${num}`;
|
|
51
|
-
}
|
|
52
|
-
function show_diff_message(due, last_review, unit) {
|
|
53
|
-
const diff = due.getTime() - last_review.getTime();
|
|
54
|
-
if (diff < 1000 * 60 * 60) { // 小于1小时
|
|
55
|
-
return unit ? Math.floor((diff) / (60 * 1000)) + 'min' : String(Math.floor((diff) / (60 * 1000)));
|
|
56
|
-
}
|
|
57
|
-
else if (diff >= 1000 * 60 * 60 && diff < 1000 * 60 * 60 * 24) { // 大于1小时,小于1天
|
|
58
|
-
return unit ? Math.floor((diff) / (60 * 60 * 1000)) + 'hour' : String(Math.floor((diff) / (60 * 60 * 1000)));
|
|
59
|
-
}
|
|
60
|
-
else if (diff >= 1000 * 60 * 60 * 24 && diff < 1000 * 60 * 60 * 24 * 31) { // 大于1天,小于31天
|
|
61
|
-
return unit ? Math.floor((diff) / (24 * 60 * 60 * 1000)) + 'day' : String(Math.floor((diff) / (24 * 60 * 60 * 1000 * 1000)));
|
|
62
|
-
}
|
|
63
|
-
else if (diff >= 1000 * 60 * 60 * 24 * 31 && diff < 1000 * 60 * 60 * 24 * 365) { // 大于31天,小于365天
|
|
64
|
-
return unit ? ((diff) / (30 * 24 * 60 * 60 * 1000)).toFixed(2) + 'month' : ((diff) / (30 * 24 * 60 * 60 * 1000)).toFixed(2);
|
|
65
|
-
}
|
|
66
|
-
else { // 大于365天
|
|
67
|
-
return unit ? ((diff) / (365 * 24 * 60 * 60 * 1000)).toFixed(2) + 'year' : ((diff) / (365 * 24 * 60 * 60 * 1000)).toFixed(2);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
exports.show_diff_message = show_diff_message;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = void 0;
|
|
4
|
+
Date.prototype.scheduler = function (t, isDay) {
|
|
5
|
+
return date_scheduler(this, t, isDay);
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 当前时间与之前的时间差值
|
|
9
|
+
* @param pre 比当前时间还要之前
|
|
10
|
+
* @param unit 单位: days | minutes
|
|
11
|
+
*/
|
|
12
|
+
Date.prototype.diff = function (pre, unit) {
|
|
13
|
+
return date_diff(this, pre, unit);
|
|
14
|
+
};
|
|
15
|
+
Date.prototype.format = function () {
|
|
16
|
+
return formatDate(this);
|
|
17
|
+
};
|
|
18
|
+
Date.prototype.dueFormat = function (last_review, unit) {
|
|
19
|
+
return show_diff_message(this, last_review, unit);
|
|
20
|
+
};
|
|
21
|
+
function date_scheduler(now, t, isDay) {
|
|
22
|
+
return new Date(isDay ? now.getTime() + t * 24 * 60 * 60 * 1000 : now.getTime() + t * 60 * 1000);
|
|
23
|
+
}
|
|
24
|
+
exports.date_scheduler = date_scheduler;
|
|
25
|
+
function date_diff(now, pre, unit) {
|
|
26
|
+
const diff = now.getTime() - pre.getTime();
|
|
27
|
+
let r = 0;
|
|
28
|
+
switch (unit) {
|
|
29
|
+
case 'days':
|
|
30
|
+
r = Math.floor((diff) / (24 * 60 * 60 * 1000));
|
|
31
|
+
break;
|
|
32
|
+
case 'minutes':
|
|
33
|
+
r = Math.floor((diff) / (60 * 1000));
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
return r;
|
|
37
|
+
}
|
|
38
|
+
exports.date_diff = date_diff;
|
|
39
|
+
function formatDate(date) {
|
|
40
|
+
const year = date.getFullYear();
|
|
41
|
+
const month = date.getMonth() + 1;
|
|
42
|
+
const day = date.getDate();
|
|
43
|
+
const hours = date.getHours();
|
|
44
|
+
const minutes = date.getMinutes();
|
|
45
|
+
const seconds = date.getSeconds();
|
|
46
|
+
return `${year}-${padZero(month)}-${padZero(day)} ${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;
|
|
47
|
+
}
|
|
48
|
+
exports.formatDate = formatDate;
|
|
49
|
+
function padZero(num) {
|
|
50
|
+
return num < 10 ? `0${num}` : `${num}`;
|
|
51
|
+
}
|
|
52
|
+
function show_diff_message(due, last_review, unit) {
|
|
53
|
+
const diff = due.getTime() - last_review.getTime();
|
|
54
|
+
if (diff < 1000 * 60 * 60) { // 小于1小时
|
|
55
|
+
return unit ? Math.floor((diff) / (60 * 1000)) + 'min' : String(Math.floor((diff) / (60 * 1000)));
|
|
56
|
+
}
|
|
57
|
+
else if (diff >= 1000 * 60 * 60 && diff < 1000 * 60 * 60 * 24) { // 大于1小时,小于1天
|
|
58
|
+
return unit ? Math.floor((diff) / (60 * 60 * 1000)) + 'hour' : String(Math.floor((diff) / (60 * 60 * 1000)));
|
|
59
|
+
}
|
|
60
|
+
else if (diff >= 1000 * 60 * 60 * 24 && diff < 1000 * 60 * 60 * 24 * 31) { // 大于1天,小于31天
|
|
61
|
+
return unit ? Math.floor((diff) / (24 * 60 * 60 * 1000)) + 'day' : String(Math.floor((diff) / (24 * 60 * 60 * 1000 * 1000)));
|
|
62
|
+
}
|
|
63
|
+
else if (diff >= 1000 * 60 * 60 * 24 * 31 && diff < 1000 * 60 * 60 * 24 * 365) { // 大于31天,小于365天
|
|
64
|
+
return unit ? ((diff) / (30 * 24 * 60 * 60 * 1000)).toFixed(2) + 'month' : ((diff) / (30 * 24 * 60 * 60 * 1000)).toFixed(2);
|
|
65
|
+
}
|
|
66
|
+
else { // 大于365天
|
|
67
|
+
return unit ? ((diff) / (365 * 24 * 60 * 60 * 1000)).toFixed(2) + 'year' : ((diff) / (365 * 24 * 60 * 60 * 1000)).toFixed(2);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.show_diff_message = show_diff_message;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import FSRS from "./fsrs";
|
|
2
|
-
import { Card, default_easy_bonus, default_enable_fuzz, default_hard_factor, default_maximum_interval, default_request_retention, default_w, FSRSParameters, Rating, RatingType, ReviewLog, SchedulingLog, State, StateType } from "./models";
|
|
3
|
-
import { SchedulingCard } from "./scheduler";
|
|
4
|
-
declare const fsrs: (param?: FSRSParameters) => FSRS;
|
|
5
|
-
declare const createEmptyCard: (now?: Date) => Card;
|
|
6
|
-
declare const generatorParameters: (props?: {
|
|
7
|
-
request_retention?: number;
|
|
8
|
-
maximum_interval?: number;
|
|
9
|
-
easy_bonus?: number;
|
|
10
|
-
hard_factor?: number;
|
|
11
|
-
w?: number[];
|
|
12
|
-
enable_fuzz?: boolean;
|
|
13
|
-
}) => {
|
|
14
|
-
request_retention: number;
|
|
15
|
-
maximum_interval: number;
|
|
16
|
-
easy_bonus: number;
|
|
17
|
-
hard_factor: number;
|
|
18
|
-
w: number[];
|
|
19
|
-
enable_fuzz: boolean;
|
|
20
|
-
};
|
|
21
|
-
declare const FSRS_Version = "2.0.
|
|
22
|
-
export { fsrs, FSRS_Version, 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 };
|
|
25
|
-
export { date_scheduler, date_diff, formatDate, show_diff_message } from './help';
|
|
1
|
+
import FSRS from "./fsrs";
|
|
2
|
+
import { Card, default_easy_bonus, default_enable_fuzz, default_hard_factor, default_maximum_interval, default_request_retention, default_w, FSRSParameters, Rating, RatingType, ReviewLog, SchedulingLog, State, StateType } from "./models";
|
|
3
|
+
import { SchedulingCard } from "./scheduler";
|
|
4
|
+
declare const fsrs: (param?: FSRSParameters) => FSRS;
|
|
5
|
+
declare const createEmptyCard: (now?: Date) => Card;
|
|
6
|
+
declare const generatorParameters: (props?: {
|
|
7
|
+
request_retention?: number;
|
|
8
|
+
maximum_interval?: number;
|
|
9
|
+
easy_bonus?: number;
|
|
10
|
+
hard_factor?: number;
|
|
11
|
+
w?: number[];
|
|
12
|
+
enable_fuzz?: boolean;
|
|
13
|
+
}) => {
|
|
14
|
+
request_retention: number;
|
|
15
|
+
maximum_interval: number;
|
|
16
|
+
easy_bonus: number;
|
|
17
|
+
hard_factor: number;
|
|
18
|
+
w: number[];
|
|
19
|
+
enable_fuzz: boolean;
|
|
20
|
+
};
|
|
21
|
+
declare const FSRS_Version = "2.0.3";
|
|
22
|
+
export { fsrs, FSRS_Version, 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 };
|
|
25
|
+
export { date_scheduler, date_diff, formatDate, show_diff_message } from './help';
|
package/lib/index.js
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
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.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = exports.default_enable_fuzz = exports.default_w = exports.default_hard_factor = exports.default_easy_bonus = exports.default_maximum_interval = exports.default_request_retention = exports.generatorParameters = exports.createEmptyCard = exports.SchedulingCard = exports.Rating = exports.State = exports.FSRS_Version = exports.fsrs = void 0;
|
|
7
|
-
const fsrs_1 = __importDefault(require("./fsrs"));
|
|
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");
|
|
18
|
-
Object.defineProperty(exports, "SchedulingCard", { enumerable: true, get: function () { return scheduler_1.SchedulingCard; } });
|
|
19
|
-
const fsrs = (param) => {
|
|
20
|
-
return new fsrs_1.default(param);
|
|
21
|
-
};
|
|
22
|
-
exports.fsrs = fsrs;
|
|
23
|
-
const createEmptyCard = (now) => {
|
|
24
|
-
return {
|
|
25
|
-
due: now || new Date(),
|
|
26
|
-
stability: 0,
|
|
27
|
-
difficulty: 0,
|
|
28
|
-
elapsed_days: 0,
|
|
29
|
-
scheduled_days: 0,
|
|
30
|
-
reps: 0,
|
|
31
|
-
lapses: 0,
|
|
32
|
-
state: models_1.State.New,
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
exports.createEmptyCard = createEmptyCard;
|
|
36
|
-
const generatorParameters = (props) => {
|
|
37
|
-
if (!props) {
|
|
38
|
-
return {
|
|
39
|
-
request_retention: models_1.default_request_retention,
|
|
40
|
-
maximum_interval: models_1.default_maximum_interval,
|
|
41
|
-
easy_bonus: models_1.default_easy_bonus,
|
|
42
|
-
hard_factor: models_1.default_hard_factor,
|
|
43
|
-
w: models_1.default_w,
|
|
44
|
-
enable_fuzz: models_1.default_enable_fuzz,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
const { w, request_retention, hard_factor, maximum_interval, enable_fuzz, easy_bonus } = props;
|
|
48
|
-
return {
|
|
49
|
-
request_retention: request_retention || models_1.default_request_retention,
|
|
50
|
-
maximum_interval: maximum_interval || models_1.default_maximum_interval,
|
|
51
|
-
easy_bonus: easy_bonus || models_1.default_easy_bonus,
|
|
52
|
-
hard_factor: hard_factor || models_1.default_hard_factor,
|
|
53
|
-
w: w || models_1.default_w,
|
|
54
|
-
enable_fuzz: enable_fuzz || models_1.default_enable_fuzz,
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
exports.generatorParameters = generatorParameters;
|
|
58
|
-
const FSRS_Version = "2.0.
|
|
59
|
-
exports.FSRS_Version = FSRS_Version;
|
|
60
|
-
var help_1 = require("./help");
|
|
61
|
-
Object.defineProperty(exports, "date_scheduler", { enumerable: true, get: function () { return help_1.date_scheduler; } });
|
|
62
|
-
Object.defineProperty(exports, "date_diff", { enumerable: true, get: function () { return help_1.date_diff; } });
|
|
63
|
-
Object.defineProperty(exports, "formatDate", { enumerable: true, get: function () { return help_1.formatDate; } });
|
|
64
|
-
Object.defineProperty(exports, "show_diff_message", { enumerable: true, get: function () { return help_1.show_diff_message; } });
|
|
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.show_diff_message = exports.formatDate = exports.date_diff = exports.date_scheduler = exports.default_enable_fuzz = exports.default_w = exports.default_hard_factor = exports.default_easy_bonus = exports.default_maximum_interval = exports.default_request_retention = exports.generatorParameters = exports.createEmptyCard = exports.SchedulingCard = exports.Rating = exports.State = exports.FSRS_Version = exports.fsrs = void 0;
|
|
7
|
+
const fsrs_1 = __importDefault(require("./fsrs"));
|
|
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");
|
|
18
|
+
Object.defineProperty(exports, "SchedulingCard", { enumerable: true, get: function () { return scheduler_1.SchedulingCard; } });
|
|
19
|
+
const fsrs = (param) => {
|
|
20
|
+
return new fsrs_1.default(param);
|
|
21
|
+
};
|
|
22
|
+
exports.fsrs = fsrs;
|
|
23
|
+
const createEmptyCard = (now) => {
|
|
24
|
+
return {
|
|
25
|
+
due: now || new Date(),
|
|
26
|
+
stability: 0,
|
|
27
|
+
difficulty: 0,
|
|
28
|
+
elapsed_days: 0,
|
|
29
|
+
scheduled_days: 0,
|
|
30
|
+
reps: 0,
|
|
31
|
+
lapses: 0,
|
|
32
|
+
state: models_1.State.New,
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
exports.createEmptyCard = createEmptyCard;
|
|
36
|
+
const generatorParameters = (props) => {
|
|
37
|
+
if (!props) {
|
|
38
|
+
return {
|
|
39
|
+
request_retention: models_1.default_request_retention,
|
|
40
|
+
maximum_interval: models_1.default_maximum_interval,
|
|
41
|
+
easy_bonus: models_1.default_easy_bonus,
|
|
42
|
+
hard_factor: models_1.default_hard_factor,
|
|
43
|
+
w: models_1.default_w,
|
|
44
|
+
enable_fuzz: models_1.default_enable_fuzz,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const { w, request_retention, hard_factor, maximum_interval, enable_fuzz, easy_bonus } = props;
|
|
48
|
+
return {
|
|
49
|
+
request_retention: request_retention || models_1.default_request_retention,
|
|
50
|
+
maximum_interval: maximum_interval || models_1.default_maximum_interval,
|
|
51
|
+
easy_bonus: easy_bonus || models_1.default_easy_bonus,
|
|
52
|
+
hard_factor: hard_factor || models_1.default_hard_factor,
|
|
53
|
+
w: w || models_1.default_w,
|
|
54
|
+
enable_fuzz: enable_fuzz || models_1.default_enable_fuzz,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
exports.generatorParameters = generatorParameters;
|
|
58
|
+
const FSRS_Version = "2.0.3";
|
|
59
|
+
exports.FSRS_Version = FSRS_Version;
|
|
60
|
+
var help_1 = require("./help");
|
|
61
|
+
Object.defineProperty(exports, "date_scheduler", { enumerable: true, get: function () { return help_1.date_scheduler; } });
|
|
62
|
+
Object.defineProperty(exports, "date_diff", { enumerable: true, get: function () { return help_1.date_diff; } });
|
|
63
|
+
Object.defineProperty(exports, "formatDate", { enumerable: true, get: function () { return help_1.formatDate; } });
|
|
64
|
+
Object.defineProperty(exports, "show_diff_message", { enumerable: true, get: function () { return help_1.show_diff_message; } });
|
package/lib/models.d.ts
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
export type StateType = "Learning" | "New" | "Review" | "Relearning";
|
|
2
|
-
export declare enum State {
|
|
3
|
-
New = 0,
|
|
4
|
-
Learning = 1,
|
|
5
|
-
Review = 2,
|
|
6
|
-
Relearning = 3
|
|
7
|
-
}
|
|
8
|
-
export type RatingType = "Again" | "Hard" | "Good" | "Easy";
|
|
9
|
-
export declare enum Rating {
|
|
10
|
-
Again = 0,
|
|
11
|
-
Hard = 1,
|
|
12
|
-
Good = 2,
|
|
13
|
-
Easy = 3
|
|
14
|
-
}
|
|
15
|
-
export interface ReviewLog {
|
|
16
|
-
rating: Rating;
|
|
17
|
-
state: State;
|
|
18
|
-
elapsed_days: number;
|
|
19
|
-
scheduled_days: number;
|
|
20
|
-
review: Date;
|
|
21
|
-
}
|
|
22
|
-
export interface Card {
|
|
23
|
-
due: Date;
|
|
24
|
-
stability: number;
|
|
25
|
-
difficulty: number;
|
|
26
|
-
elapsed_days: number;
|
|
27
|
-
scheduled_days: number;
|
|
28
|
-
reps: number;
|
|
29
|
-
lapses: number;
|
|
30
|
-
state: State;
|
|
31
|
-
last_review?: Date;
|
|
32
|
-
}
|
|
33
|
-
export interface SchedulingLog {
|
|
34
|
-
[key: number]: {
|
|
35
|
-
card: Card;
|
|
36
|
-
log: ReviewLog;
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
export interface FSRSParameters {
|
|
40
|
-
request_retention: number;
|
|
41
|
-
maximum_interval: number;
|
|
42
|
-
easy_bonus: number;
|
|
43
|
-
hard_factor: number;
|
|
44
|
-
w: number[];
|
|
45
|
-
enable_fuzz: boolean;
|
|
46
|
-
}
|
|
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;
|
|
1
|
+
export type StateType = "Learning" | "New" | "Review" | "Relearning";
|
|
2
|
+
export declare enum State {
|
|
3
|
+
New = 0,
|
|
4
|
+
Learning = 1,
|
|
5
|
+
Review = 2,
|
|
6
|
+
Relearning = 3
|
|
7
|
+
}
|
|
8
|
+
export type RatingType = "Again" | "Hard" | "Good" | "Easy";
|
|
9
|
+
export declare enum Rating {
|
|
10
|
+
Again = 0,
|
|
11
|
+
Hard = 1,
|
|
12
|
+
Good = 2,
|
|
13
|
+
Easy = 3
|
|
14
|
+
}
|
|
15
|
+
export interface ReviewLog {
|
|
16
|
+
rating: Rating;
|
|
17
|
+
state: State;
|
|
18
|
+
elapsed_days: number;
|
|
19
|
+
scheduled_days: number;
|
|
20
|
+
review: Date;
|
|
21
|
+
}
|
|
22
|
+
export interface Card {
|
|
23
|
+
due: Date;
|
|
24
|
+
stability: number;
|
|
25
|
+
difficulty: number;
|
|
26
|
+
elapsed_days: number;
|
|
27
|
+
scheduled_days: number;
|
|
28
|
+
reps: number;
|
|
29
|
+
lapses: number;
|
|
30
|
+
state: State;
|
|
31
|
+
last_review?: Date;
|
|
32
|
+
}
|
|
33
|
+
export interface SchedulingLog {
|
|
34
|
+
[key: number]: {
|
|
35
|
+
card: Card;
|
|
36
|
+
log: ReviewLog;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface FSRSParameters {
|
|
40
|
+
request_retention: number;
|
|
41
|
+
maximum_interval: number;
|
|
42
|
+
easy_bonus: number;
|
|
43
|
+
hard_factor: number;
|
|
44
|
+
w: number[];
|
|
45
|
+
enable_fuzz: boolean;
|
|
46
|
+
}
|
|
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/lib/models.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default_enable_fuzz = exports.default_w = exports.default_hard_factor = exports.default_easy_bonus = exports.default_maximum_interval = exports.default_request_retention = exports.Rating = exports.State = void 0;
|
|
4
|
-
var State;
|
|
5
|
-
(function (State) {
|
|
6
|
-
State[State["New"] = 0] = "New";
|
|
7
|
-
State[State["Learning"] = 1] = "Learning";
|
|
8
|
-
State[State["Review"] = 2] = "Review";
|
|
9
|
-
State[State["Relearning"] = 3] = "Relearning";
|
|
10
|
-
})(State
|
|
11
|
-
var Rating;
|
|
12
|
-
(function (Rating) {
|
|
13
|
-
Rating[Rating["Again"] = 0] = "Again";
|
|
14
|
-
Rating[Rating["Hard"] = 1] = "Hard";
|
|
15
|
-
Rating[Rating["Good"] = 2] = "Good";
|
|
16
|
-
Rating[Rating["Easy"] = 3] = "Easy";
|
|
17
|
-
})(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 = [1, 1, 5, -0.5, -0.5, 0.2, 1.4, -0.12, 0.8, 2, -0.2, 0.2, 1];
|
|
23
|
-
exports.default_enable_fuzz = false;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default_enable_fuzz = exports.default_w = exports.default_hard_factor = exports.default_easy_bonus = exports.default_maximum_interval = exports.default_request_retention = exports.Rating = exports.State = void 0;
|
|
4
|
+
var State;
|
|
5
|
+
(function (State) {
|
|
6
|
+
State[State["New"] = 0] = "New";
|
|
7
|
+
State[State["Learning"] = 1] = "Learning";
|
|
8
|
+
State[State["Review"] = 2] = "Review";
|
|
9
|
+
State[State["Relearning"] = 3] = "Relearning";
|
|
10
|
+
})(State || (exports.State = State = {}));
|
|
11
|
+
var Rating;
|
|
12
|
+
(function (Rating) {
|
|
13
|
+
Rating[Rating["Again"] = 0] = "Again";
|
|
14
|
+
Rating[Rating["Hard"] = 1] = "Hard";
|
|
15
|
+
Rating[Rating["Good"] = 2] = "Good";
|
|
16
|
+
Rating[Rating["Easy"] = 3] = "Easy";
|
|
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 = [1, 1, 5, -0.5, -0.5, 0.2, 1.4, -0.12, 0.8, 2, -0.2, 0.2, 1];
|
|
23
|
+
exports.default_enable_fuzz = false;
|
package/lib/scheduler.d.ts
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import { Card, Rating, State } from './models';
|
|
2
|
-
export declare class SchedulingCard {
|
|
3
|
-
again: Card;
|
|
4
|
-
hard: Card;
|
|
5
|
-
good: Card;
|
|
6
|
-
easy: Card;
|
|
7
|
-
private copy;
|
|
8
|
-
constructor(card: Card);
|
|
9
|
-
update_state(state: State): this;
|
|
10
|
-
schedule(now: Date, hard_interval: number, good_interval: number, easy_interval: number): SchedulingCard;
|
|
11
|
-
record_log(card: Card, now: Date): {
|
|
12
|
-
0: {
|
|
13
|
-
card: Card;
|
|
14
|
-
log: {
|
|
15
|
-
rating: Rating;
|
|
16
|
-
state: State;
|
|
17
|
-
elapsed_days: number;
|
|
18
|
-
scheduled_days: number;
|
|
19
|
-
review: Date;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
1: {
|
|
23
|
-
card: Card;
|
|
24
|
-
log: {
|
|
25
|
-
rating: Rating;
|
|
26
|
-
state: State;
|
|
27
|
-
elapsed_days: number;
|
|
28
|
-
scheduled_days: number;
|
|
29
|
-
review: Date;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
2: {
|
|
33
|
-
card: Card;
|
|
34
|
-
log: {
|
|
35
|
-
rating: Rating;
|
|
36
|
-
state: State;
|
|
37
|
-
elapsed_days: number;
|
|
38
|
-
scheduled_days: number;
|
|
39
|
-
review: Date;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
3: {
|
|
43
|
-
card: Card;
|
|
44
|
-
log: {
|
|
45
|
-
rating: Rating;
|
|
46
|
-
state: State;
|
|
47
|
-
elapsed_days: number;
|
|
48
|
-
scheduled_days: number;
|
|
49
|
-
review: Date;
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
}
|
|
1
|
+
import { Card, Rating, State } from './models';
|
|
2
|
+
export declare class SchedulingCard {
|
|
3
|
+
again: Card;
|
|
4
|
+
hard: Card;
|
|
5
|
+
good: Card;
|
|
6
|
+
easy: Card;
|
|
7
|
+
private copy;
|
|
8
|
+
constructor(card: Card);
|
|
9
|
+
update_state(state: State): this;
|
|
10
|
+
schedule(now: Date, hard_interval: number, good_interval: number, easy_interval: number): SchedulingCard;
|
|
11
|
+
record_log(card: Card, now: Date): {
|
|
12
|
+
0: {
|
|
13
|
+
card: Card;
|
|
14
|
+
log: {
|
|
15
|
+
rating: Rating;
|
|
16
|
+
state: State;
|
|
17
|
+
elapsed_days: number;
|
|
18
|
+
scheduled_days: number;
|
|
19
|
+
review: Date;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
1: {
|
|
23
|
+
card: Card;
|
|
24
|
+
log: {
|
|
25
|
+
rating: Rating;
|
|
26
|
+
state: State;
|
|
27
|
+
elapsed_days: number;
|
|
28
|
+
scheduled_days: number;
|
|
29
|
+
review: Date;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
2: {
|
|
33
|
+
card: Card;
|
|
34
|
+
log: {
|
|
35
|
+
rating: Rating;
|
|
36
|
+
state: State;
|
|
37
|
+
elapsed_days: number;
|
|
38
|
+
scheduled_days: number;
|
|
39
|
+
review: Date;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
3: {
|
|
43
|
+
card: Card;
|
|
44
|
+
log: {
|
|
45
|
+
rating: Rating;
|
|
46
|
+
state: State;
|
|
47
|
+
elapsed_days: number;
|
|
48
|
+
scheduled_days: number;
|
|
49
|
+
review: Date;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
}
|