diff --git a/__tests__/FSRSV4.test.ts b/__tests__/FSRSV4.test.ts index 596c6f3..0101350 100644 --- a/__tests__/FSRSV4.test.ts +++ b/__tests__/FSRSV4.test.ts @@ -114,11 +114,17 @@ describe("get retrievability", () => { }); test("return retrievability percentage for review cards", () => { - const card = createEmptyCard(); - const sc = fsrs.repeat(card, new Date()); - const r = [undefined, undefined, undefined, "100.00%"]; - Grades.forEach((grade,index) => { - expect(fsrs.get_retrievability(sc[grade].card, new Date())).toBe(r[index]); + const card = createEmptyCard("2023-12-01 04:00:00"); + const sc = fsrs.repeat(card, "2023-12-01 04:05:00"); + const r = [undefined, undefined, undefined, "90.00%"]; + const r_number = [undefined, undefined, undefined, 0.9]; + Grades.forEach((grade, index) => { + expect(fsrs.get_retrievability(sc[grade].card, sc[grade].card.due)).toBe( + r[index], + ); + expect( + fsrs.get_retrievability(sc[grade].card, sc[grade].card.due, false), + ).toBe(r_number[index]); }); }); }); diff --git a/package.json b/package.json index 0f5fc24..d0cb7cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ts-fsrs", - "version": "3.5.6", + "version": "3.5.7", "description": "ts-fsrs is a ES modules package based on TypeScript, used to implement the Free Spaced Repetition Scheduler (FSRS) algorithm. It helps developers apply FSRS to their flashcard applications, there by improving the user learning experience.", "main": "dist/index.cjs", "umd": "dist/index.umd.js", diff --git a/src/fsrs/default.ts b/src/fsrs/default.ts index d977e35..1cbd3e9 100644 --- a/src/fsrs/default.ts +++ b/src/fsrs/default.ts @@ -9,7 +9,7 @@ export const default_w = [ ]; export const default_enable_fuzz = false; -export const FSRSVersion: string = "3.5.6"; +export const FSRSVersion: string = "3.5.7"; export const generatorParameters = ( props?: Partial, diff --git a/src/fsrs/fsrs.ts b/src/fsrs/fsrs.ts index fe8b133..4bd5816 100644 --- a/src/fsrs/fsrs.ts +++ b/src/fsrs/fsrs.ts @@ -159,20 +159,29 @@ export class FSRS extends FSRSAlgorithm { } } - get_retrievability = ( + /** + * Get the retrievability of the card + * @param card Card to be processed + * @param now Current time or scheduled time + * @param format default:true , Convert the result to another type. (Optional) + * @returns The retrievability of the card,if format is true, the result is a string, otherwise it is a number + */ + get_retrievability( card: CardInput | Card, - now: Date, - ): undefined | string => { + now: DateInput, + format: T = true as T, + ): undefined | (T extends true ? string : number) { const processedCard = this.preProcessCard(card); now = this.preProcessDate(now); if (processedCard.state !== State.Review) { return undefined; } const t = Math.max(now.diff(processedCard.last_review as Date, "days"), 0); - return ( - (this.forgetting_curve(t, processedCard.stability) * 100).toFixed(2) + "%" - ); - }; + const r = this.forgetting_curve(t, Math.round(processedCard.stability)); + return (format ? `${(r * 100).toFixed(2)}%` : r) as T extends true + ? string + : number; + } /** * @@ -420,4 +429,4 @@ export class FSRS extends FSRSAlgorithm { */ export const fsrs = (params?: Partial) => { return new FSRS(params || {}); -}; \ No newline at end of file +};