ts-fsrs 5.2.1 → 5.2.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/dist/index.cjs +48 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.mjs +48 -20
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +49 -21
- package/dist/index.umd.js.map +1 -1
- package/package.json +10 -9
package/dist/index.umd.js
CHANGED
|
@@ -76,8 +76,9 @@
|
|
|
76
76
|
throw new Error(`Invalid state:[${value}]`);
|
|
77
77
|
}
|
|
78
78
|
static time(value) {
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
const date = new Date(value);
|
|
80
|
+
if (typeof value === "object" && value !== null && !Number.isNaN(Date.parse(value) || +date)) {
|
|
81
|
+
return date;
|
|
81
82
|
} else if (typeof value === "string") {
|
|
82
83
|
const timestamp = Date.parse(value);
|
|
83
84
|
if (!Number.isNaN(timestamp)) {
|
|
@@ -496,7 +497,7 @@
|
|
|
496
497
|
return prng;
|
|
497
498
|
}
|
|
498
499
|
|
|
499
|
-
const version="5.2.
|
|
500
|
+
const version="5.2.3";
|
|
500
501
|
|
|
501
502
|
const default_request_retention = 0.9;
|
|
502
503
|
const default_maximum_interval = 36500;
|
|
@@ -539,7 +540,7 @@
|
|
|
539
540
|
FSRS6_DEFAULT_DECAY
|
|
540
541
|
]);
|
|
541
542
|
const W17_W18_Ceiling = 2;
|
|
542
|
-
const CLAMP_PARAMETERS = (w17_w18_ceiling) => [
|
|
543
|
+
const CLAMP_PARAMETERS = (w17_w18_ceiling, enable_short_term = default_enable_short_term) => [
|
|
543
544
|
[S_MIN, INIT_S_MAX],
|
|
544
545
|
[S_MIN, INIT_S_MAX],
|
|
545
546
|
[S_MIN, INIT_S_MAX],
|
|
@@ -559,18 +560,26 @@
|
|
|
559
560
|
[1, 6],
|
|
560
561
|
[0, w17_w18_ceiling],
|
|
561
562
|
[0, w17_w18_ceiling],
|
|
562
|
-
[
|
|
563
|
+
[
|
|
564
|
+
enable_short_term ? 0.01 : 0,
|
|
565
|
+
0.8
|
|
566
|
+
],
|
|
563
567
|
[0.1, 0.8]
|
|
564
568
|
];
|
|
565
569
|
|
|
566
|
-
const clipParameters = (parameters, numRelearningSteps) => {
|
|
570
|
+
const clipParameters = (parameters, numRelearningSteps, enableShortTerm = default_enable_short_term) => {
|
|
567
571
|
let w17_w18_ceiling = W17_W18_Ceiling;
|
|
568
572
|
if (Math.max(0, numRelearningSteps) > 1) {
|
|
569
573
|
const value = -(Math.log(parameters[11]) + Math.log(Math.pow(2, parameters[13]) - 1) + parameters[14] * 0.3) / numRelearningSteps;
|
|
570
574
|
w17_w18_ceiling = clamp(+value.toFixed(8), 0.01, 2);
|
|
571
575
|
}
|
|
572
|
-
const clip = CLAMP_PARAMETERS(w17_w18_ceiling)
|
|
573
|
-
|
|
576
|
+
const clip = CLAMP_PARAMETERS(w17_w18_ceiling, enableShortTerm).slice(
|
|
577
|
+
0,
|
|
578
|
+
parameters.length
|
|
579
|
+
);
|
|
580
|
+
return clip.map(
|
|
581
|
+
([min, max], index) => clamp(parameters[index] || 0, min, max)
|
|
582
|
+
);
|
|
574
583
|
};
|
|
575
584
|
const checkParameters = (parameters) => {
|
|
576
585
|
const invalid = parameters.find(
|
|
@@ -585,18 +594,30 @@
|
|
|
585
594
|
}
|
|
586
595
|
return parameters;
|
|
587
596
|
};
|
|
588
|
-
const migrateParameters = (parameters) => {
|
|
597
|
+
const migrateParameters = (parameters, numRelearningSteps = 0, enableShortTerm = default_enable_short_term) => {
|
|
589
598
|
if (parameters === void 0) {
|
|
590
599
|
return [...default_w];
|
|
591
600
|
}
|
|
592
601
|
switch (parameters.length) {
|
|
593
602
|
case 21:
|
|
594
|
-
return
|
|
603
|
+
return clipParameters(
|
|
604
|
+
Array.from(parameters),
|
|
605
|
+
numRelearningSteps,
|
|
606
|
+
enableShortTerm
|
|
607
|
+
);
|
|
595
608
|
case 19:
|
|
596
609
|
console.debug("[FSRS-6]auto fill w from 19 to 21 length");
|
|
597
|
-
return
|
|
610
|
+
return clipParameters(
|
|
611
|
+
Array.from(parameters),
|
|
612
|
+
numRelearningSteps,
|
|
613
|
+
enableShortTerm
|
|
614
|
+
).concat([0, FSRS5_DEFAULT_DECAY]);
|
|
598
615
|
case 17: {
|
|
599
|
-
const w =
|
|
616
|
+
const w = clipParameters(
|
|
617
|
+
Array.from(parameters),
|
|
618
|
+
numRelearningSteps,
|
|
619
|
+
enableShortTerm
|
|
620
|
+
);
|
|
600
621
|
w[4] = +(w[5] * 2 + w[4]).toFixed(8);
|
|
601
622
|
w[5] = +(Math.log(w[5] * 3 + 1) / 3).toFixed(8);
|
|
602
623
|
w[6] = +(w[6] + 0.5).toFixed(8);
|
|
@@ -612,13 +633,18 @@
|
|
|
612
633
|
var _a, _b;
|
|
613
634
|
const learning_steps = Array.isArray(props == null ? void 0 : props.learning_steps) ? props.learning_steps : default_learning_steps;
|
|
614
635
|
const relearning_steps = Array.isArray(props == null ? void 0 : props.relearning_steps) ? props.relearning_steps : default_relearning_steps;
|
|
615
|
-
const
|
|
636
|
+
const enable_short_term = (_a = props == null ? void 0 : props.enable_short_term) != null ? _a : default_enable_short_term;
|
|
637
|
+
const w = migrateParameters(
|
|
638
|
+
props == null ? void 0 : props.w,
|
|
639
|
+
relearning_steps.length,
|
|
640
|
+
enable_short_term
|
|
641
|
+
);
|
|
616
642
|
return {
|
|
617
643
|
request_retention: (props == null ? void 0 : props.request_retention) || default_request_retention,
|
|
618
644
|
maximum_interval: (props == null ? void 0 : props.maximum_interval) || default_maximum_interval,
|
|
619
645
|
w,
|
|
620
|
-
enable_fuzz: (
|
|
621
|
-
enable_short_term
|
|
646
|
+
enable_fuzz: (_b = props == null ? void 0 : props.enable_fuzz) != null ? _b : default_enable_fuzz,
|
|
647
|
+
enable_short_term,
|
|
622
648
|
learning_steps,
|
|
623
649
|
relearning_steps
|
|
624
650
|
};
|
|
@@ -719,9 +745,10 @@
|
|
|
719
745
|
Number(value)
|
|
720
746
|
);
|
|
721
747
|
} else if (prop === "w") {
|
|
722
|
-
value =
|
|
723
|
-
|
|
724
|
-
target.relearning_steps.length
|
|
748
|
+
value = migrateParameters(
|
|
749
|
+
value,
|
|
750
|
+
target.relearning_steps.length,
|
|
751
|
+
target.enable_short_term
|
|
725
752
|
);
|
|
726
753
|
_this.forgetting_curve = forgetting_curve.bind(this, value);
|
|
727
754
|
_this.intervalModifier = _this.calculate_interval_modifier(
|
|
@@ -1569,9 +1596,10 @@
|
|
|
1569
1596
|
} else if (prop === "enable_short_term") {
|
|
1570
1597
|
_this.Scheduler = value === true ? BasicScheduler : LongTermScheduler;
|
|
1571
1598
|
} else if (prop === "w") {
|
|
1572
|
-
value =
|
|
1573
|
-
|
|
1574
|
-
target.relearning_steps.length
|
|
1599
|
+
value = migrateParameters(
|
|
1600
|
+
value,
|
|
1601
|
+
target.relearning_steps.length,
|
|
1602
|
+
target.enable_short_term
|
|
1575
1603
|
);
|
|
1576
1604
|
_this.forgetting_curve = forgetting_curve.bind(this, value);
|
|
1577
1605
|
_this.intervalModifier = _this.calculate_interval_modifier(
|