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.umd.js CHANGED
@@ -76,8 +76,9 @@
76
76
  throw new Error(`Invalid state:[${value}]`);
77
77
  }
78
78
  static time(value) {
79
- if (typeof value === "object" && value instanceof Date) {
80
- return value;
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.1";
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
- [0, 0.8],
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
- return clip.map(([min, max], index) => clamp(parameters[index], min, max));
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 [...parameters];
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 [...parameters, 0, FSRS5_DEFAULT_DECAY];
610
+ return clipParameters(
611
+ Array.from(parameters),
612
+ numRelearningSteps,
613
+ enableShortTerm
614
+ ).concat([0, FSRS5_DEFAULT_DECAY]);
598
615
  case 17: {
599
- const w = [...parameters];
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 w = clipParameters(migrateParameters(props == null ? void 0 : props.w), relearning_steps.length);
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: (_a = props == null ? void 0 : props.enable_fuzz) != null ? _a : default_enable_fuzz,
621
- enable_short_term: (_b = props == null ? void 0 : props.enable_short_term) != null ? _b : default_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 = clipParameters(
723
- migrateParameters(value),
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 = clipParameters(
1573
- migrateParameters(value),
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(