@vestcards/shared 1.3.0 → 1.5.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/dist/date-Bn1ahM0R.cjs +1 -0
- package/dist/date-D5P-dKAx.js +134 -0
- package/dist/date.cjs +1 -1
- package/dist/date.d.ts +35 -0
- package/dist/date.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +39 -0
- package/dist/index.js +76 -65
- package/dist/spaced-repetition.cjs +1 -1
- package/dist/spaced-repetition.d.ts +28 -4
- package/dist/spaced-repetition.js +266 -223
- package/package.json +5 -3
- package/src/styles/blog.css +245 -0
- package/dist/date-DS8JYZte.js +0 -103
- package/dist/date-DoLsSDIb.cjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./fsrs-DO2rNRTM.cjs`),t=require(`./date-DoLsSDIb.cjs`);var n=.9,r=50,i=200,a=10,o=10,s=(e=>(e[e.New=0]=`New`,e[e.Learning=1]=`Learning`,e[e.Review=2]=`Review`,e[e.Relearning=3]=`Relearning`,e))(s||{}),c=(e=>(e[e.Manual=0]=`Manual`,e[e.Again=1]=`Again`,e[e.Hard=2]=`Hard`,e[e.Good=3]=`Good`,e[e.Easy=4]=`Easy`,e))(c||{}),l=class e{static card(t){return{...t,state:e.state(t.state),due:e.time(t.due),last_review:t.last_review?e.time(t.last_review):void 0}}static rating(e){if(typeof e==`string`){let t=c[`${e.charAt(0).toUpperCase()}${e.slice(1).toLowerCase()}`];if(t===void 0)throw Error(`Invalid rating:[${e}]`);return t}else if(typeof e==`number`)return e;throw Error(`Invalid rating:[${e}]`)}static state(e){if(typeof e==`string`){let t=s[`${e.charAt(0).toUpperCase()}${e.slice(1).toLowerCase()}`];if(t===void 0)throw Error(`Invalid state:[${e}]`);return t}else if(typeof e==`number`)return e;throw Error(`Invalid state:[${e}]`)}static time(e){if(typeof e==`object`&&e instanceof Date)return e;if(typeof e==`string`){let t=Date.parse(e);if(isNaN(t))throw Error(`Invalid date:[${e}]`);return new Date(t)}else if(typeof e==`number`)return new Date(e);throw Error(`Invalid date:[${e}]`)}static review_log(t){return{...t,due:e.time(t.due),rating:e.rating(t.rating),state:e.state(t.state),review:e.time(t.review)}}},u=`4.7.1`;Date.prototype.scheduler=function(e,t){return d(this,e,t)},Date.prototype.diff=function(e,t){return f(this,e,t)},Date.prototype.format=function(){return p(this)},Date.prototype.dueFormat=function(e,t,n){return ee(this,e,t,n)};function d(e,t,n){return new Date(n?l.time(e).getTime()+t*24*60*60*1e3:l.time(e).getTime()+t*60*1e3)}function f(e,t,n){if(!e||!t)throw Error(`Invalid date`);let r=l.time(e).getTime()-l.time(t).getTime(),i=0;switch(n){case`days`:i=Math.floor(r/(1440*60*1e3));break;case`minutes`:i=Math.floor(r/(60*1e3));break}return i}function p(e){let t=l.time(e),n=t.getFullYear(),r=t.getMonth()+1,i=t.getDate(),a=t.getHours(),o=t.getMinutes(),s=t.getSeconds();return`${n}-${m(r)}-${m(i)} ${m(a)}:${m(o)}:${m(s)}`}function m(e){return e<10?`0${e}`:`${e}`}var h=[60,60,24,31,12],g=[`second`,`min`,`hour`,`day`,`month`,`year`];function ee(e,t,n,r=g){e=l.time(e),t=l.time(t),r.length!==g.length&&(r=g);let i=e.getTime()-t.getTime(),a;for(i/=1e3,a=0;a<h.length&&!(i<h[a]);a++)i/=h[a];return`${Math.floor(i)}${n?r[a]:``}`}var te=Object.freeze([c.Again,c.Hard,c.Good,c.Easy]),ne=[{start:2.5,end:7,factor:.15},{start:7,end:20,factor:.1},{start:20,end:1/0,factor:.05}];function re(e,t,n){let r=1;for(let t of ne)r+=t.factor*Math.max(Math.min(e,t.end)-t.start,0);e=Math.min(e,n);let i=Math.max(2,Math.round(e-r)),a=Math.min(Math.round(e+r),n);return e>t&&(i=Math.max(i,t+1)),i=Math.min(i,a),{min_ivl:i,max_ivl:a}}function _(e,t,n){return Math.min(Math.max(e,t),n)}function ie(e,t){let n=Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),r=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate());return Math.floor((r-n)/864e5)}var ae=Object.freeze([.40255,1.18385,3.173,15.69105,7.1949,.5345,1.4604,.0046,1.54575,.1192,1.01925,1.9395,.11,.29605,2.2698,.2315,2.9898,.51655,.6621]);`${u}`;var v=.01,oe=Object.freeze([Object.freeze([v,100]),Object.freeze([v,100]),Object.freeze([v,100]),Object.freeze([v,100]),Object.freeze([1,10]),Object.freeze([.001,4]),Object.freeze([.001,4]),Object.freeze([.001,.75]),Object.freeze([0,4.5]),Object.freeze([0,.8]),Object.freeze([.001,3.5]),Object.freeze([.001,5]),Object.freeze([.001,.25]),Object.freeze([.001,.9]),Object.freeze([0,4]),Object.freeze([0,1]),Object.freeze([1,6]),Object.freeze([0,2]),Object.freeze([0,2])]),y=e=>{let t=[...ae];return e?.w&&(e.w.length===19?t=[...e.w]:e.w.length===17&&(t=e?.w.concat([0,0]),t[4]=+(t[5]*2+t[4]).toFixed(8),t[5]=+(Math.log(t[5]*3+1)/3).toFixed(8),t[6]=+(t[6]+.5).toFixed(8),console.debug(`[FSRS V5]auto fill w to 19 length`))),t=t.map((e,t)=>_(e,oe[t][0],oe[t][1])),{request_retention:e?.request_retention||.9,maximum_interval:e?.maximum_interval||36500,w:t,enable_fuzz:e?.enable_fuzz??!1,enable_short_term:e?.enable_short_term??!0}};function b(e,t){let n={due:e?l.time(e):new Date,stability:0,difficulty:0,elapsed_days:0,scheduled_days:0,reps:0,lapses:0,state:s.New,last_review:void 0};return t&&typeof t==`function`?t(n):n}var se=class{c;s0;s1;s2;constructor(e){let t=ce();this.c=1,this.s0=t(` `),this.s1=t(` `),this.s2=t(` `),e??=+new Date,this.s0-=t(e),this.s0<0&&(this.s0+=1),this.s1-=t(e),this.s1<0&&(this.s1+=1),this.s2-=t(e),this.s2<0&&(this.s2+=1)}next(){let e=2091639*this.s0+this.c*23283064365386963e-26;return this.s0=this.s1,this.s1=this.s2,this.s2=e-(this.c=e|0),this.s2}set state(e){this.c=e.c,this.s0=e.s0,this.s1=e.s1,this.s2=e.s2}get state(){return{c:this.c,s0:this.s0,s1:this.s1,s2:this.s2}}};function ce(){let e=4022871197;return function(t){t=String(t);for(let n=0;n<t.length;n++){e+=t.charCodeAt(n);let r=.02519603282416938*e;e=r>>>0,r-=e,r*=e,e=r>>>0,r-=e,e+=r*4294967296}return(e>>>0)*23283064365386963e-26}}function le(e){let t=new se(e),n=()=>t.next();return n.int32=()=>t.next()*4294967296|0,n.double=()=>n()+(n()*2097152|0)*11102230246251565e-32,n.state=()=>t.state,n.importState=e=>(t.state=e,n),n}var ue=-.5,de=19/81;function fe(e,t){return+((1+de*e/t)**+ue).toFixed(8)}var pe=class{param;intervalModifier;_seed;constructor(e){this.param=new Proxy(y(e),this.params_handler_proxy()),this.intervalModifier=this.calculate_interval_modifier(this.param.request_retention)}get interval_modifier(){return this.intervalModifier}set seed(e){this._seed=e}calculate_interval_modifier(e){if(e<=0||e>1)throw Error(`Requested retention rate should be in the range (0,1]`);return+((e**(1/ue)-1)/de).toFixed(8)}get parameters(){return this.param}set parameters(e){this.update_parameters(e)}params_handler_proxy(){let e=this;return{set:function(t,n,r){return n===`request_retention`&&Number.isFinite(r)&&(e.intervalModifier=e.calculate_interval_modifier(Number(r))),Reflect.set(t,n,r),!0}}}update_parameters(e){let t=y(e);for(let e in t)if(e in this.param){let n=e;this.param[n]=t[n]}}init_stability(e){return Math.max(this.param.w[e-1],.1)}init_difficulty(e){return this.constrain_difficulty(this.param.w[4]-Math.exp((e-1)*this.param.w[5])+1)}apply_fuzz(e,t){if(!this.param.enable_fuzz||e<2.5)return Math.round(e);let n=le(this._seed)(),{min_ivl:r,max_ivl:i}=re(e,t,this.param.maximum_interval);return Math.floor(n*(i-r+1)+r)}next_interval(e,t){let n=Math.min(Math.max(1,Math.round(e*this.intervalModifier)),this.param.maximum_interval);return this.apply_fuzz(n,t)}linear_damping(e,t){return+(e*(10-t)/9).toFixed(8)}next_difficulty(e,t){let n=-this.param.w[6]*(t-3),r=e+this.linear_damping(n,e);return this.constrain_difficulty(this.mean_reversion(this.init_difficulty(c.Easy),r))}constrain_difficulty(e){return Math.min(Math.max(+e.toFixed(8),1),10)}mean_reversion(e,t){return+(this.param.w[7]*e+(1-this.param.w[7])*t).toFixed(8)}next_recall_stability(e,t,n,r){let i=c.Hard===r?this.param.w[15]:1,a=c.Easy===r?this.param.w[16]:1;return+_(t*(1+Math.exp(this.param.w[8])*(11-e)*t**+-this.param.w[9]*(Math.exp((1-n)*this.param.w[10])-1)*i*a),v,36500).toFixed(8)}next_forget_stability(e,t,n){return+_(this.param.w[11]*e**+-this.param.w[12]*((t+1)**+this.param.w[13]-1)*Math.exp((1-n)*this.param.w[14]),v,36500).toFixed(8)}next_short_term_stability(e,t){return+_(e*Math.exp(this.param.w[17]*(t-3+this.param.w[18])),v,36500).toFixed(8)}forgetting_curve=fe;next_state(e,t,n){let{difficulty:r,stability:i}=e??{difficulty:0,stability:0};if(t<0)throw Error(`Invalid delta_t "${t}"`);if(n<0||n>4)throw Error(`Invalid grade "${n}"`);if(r===0&&i===0)return{difficulty:this.init_difficulty(n),stability:this.init_stability(n)};if(n===0)return{difficulty:r,stability:i};if(r<1||i<.01)throw Error(`Invalid memory state { difficulty: ${r}, stability: ${i} }`);let a=this.forgetting_curve(t,i),o=this.next_recall_stability(r,i,a,n),s=this.next_forget_stability(r,i,a),c=this.next_short_term_stability(i,n),l=o;if(n===1){let[e,t]=[0,0];this.param.enable_short_term&&(e=this.param.w[17],t=this.param.w[18]),l=_(+(i/Math.exp(e*t)).toFixed(8),v,s)}return t===0&&this.param.enable_short_term&&(l=c),{difficulty:this.next_difficulty(r,n),stability:l}}};function me(){return`${this.review_time.getTime()}_${this.current.reps}_${this.current.difficulty*this.current.stability}`}var x=(e=>(e.SCHEDULER=`Scheduler`,e.SEED=`Seed`,e))(x||{}),he=class{last;current;review_time;next=new Map;algorithm;initSeedStrategy;constructor(e,t,n,r={seed:me}){this.algorithm=n,this.initSeedStrategy=r.seed.bind(this),this.last=l.card(e),this.current=l.card(e),this.review_time=l.time(t),this.init()}init(){let{state:e,last_review:t}=this.current,n=0;e!==s.New&&t&&(n=ie(t,this.review_time)),this.current.last_review=this.review_time,this.current.elapsed_days=n,this.current.reps+=1,this.algorithm.seed=this.initSeedStrategy()}preview(){return{[c.Again]:this.review(c.Again),[c.Hard]:this.review(c.Hard),[c.Good]:this.review(c.Good),[c.Easy]:this.review(c.Easy),[Symbol.iterator]:this.previewIterator.bind(this)}}*previewIterator(){for(let e of te)yield this.review(e)}review(e){let{state:t}=this.last,n;switch(t){case s.New:n=this.newState(e);break;case s.Learning:case s.Relearning:n=this.learningState(e);break;case s.Review:n=this.reviewState(e);break}if(n)return n;throw Error(`Invalid grade`)}buildLog(e){let{last_review:t,due:n,elapsed_days:r}=this.last;return{rating:e,state:this.current.state,due:t||n,stability:this.current.stability,difficulty:this.current.difficulty,elapsed_days:this.current.elapsed_days,last_elapsed_days:r,scheduled_days:this.current.scheduled_days,review:this.review_time}}},ge=class extends he{newState(e){let t=this.next.get(e);if(t)return t;let n=l.card(this.current);switch(n.difficulty=this.algorithm.init_difficulty(e),n.stability=this.algorithm.init_stability(e),e){case c.Again:n.scheduled_days=0,n.due=this.review_time.scheduler(1),n.state=s.Learning;break;case c.Hard:n.scheduled_days=0,n.due=this.review_time.scheduler(5),n.state=s.Learning;break;case c.Good:n.scheduled_days=0,n.due=this.review_time.scheduler(10),n.state=s.Learning;break;case c.Easy:{let e=this.algorithm.next_interval(n.stability,this.current.elapsed_days);n.scheduled_days=e,n.due=this.review_time.scheduler(e,!0),n.state=s.Review;break}default:throw Error(`Invalid grade`)}let r={card:n,log:this.buildLog(e)};return this.next.set(e,r),r}learningState(e){let t=this.next.get(e);if(t)return t;let{state:n,difficulty:r,stability:i}=this.last,a=l.card(this.current),o=this.current.elapsed_days;switch(a.difficulty=this.algorithm.next_difficulty(r,e),a.stability=this.algorithm.next_short_term_stability(i,e),e){case c.Again:a.scheduled_days=0,a.due=this.review_time.scheduler(5,!1),a.state=n;break;case c.Hard:a.scheduled_days=0,a.due=this.review_time.scheduler(10),a.state=n;break;case c.Good:{let e=this.algorithm.next_interval(a.stability,o);a.scheduled_days=e,a.due=this.review_time.scheduler(e,!0),a.state=s.Review;break}case c.Easy:{let e=this.algorithm.next_short_term_stability(i,c.Good),t=this.algorithm.next_interval(e,o),n=Math.max(this.algorithm.next_interval(a.stability,o),t+1);a.scheduled_days=n,a.due=this.review_time.scheduler(n,!0),a.state=s.Review;break}default:throw Error(`Invalid grade`)}let u={card:a,log:this.buildLog(e)};return this.next.set(e,u),u}reviewState(e){let t=this.next.get(e);if(t)return t;let n=this.current.elapsed_days,{difficulty:r,stability:i}=this.last,a=this.algorithm.forgetting_curve(n,i),o=l.card(this.current),s=l.card(this.current),u=l.card(this.current),d=l.card(this.current);this.next_ds(o,s,u,d,r,i,a),this.next_interval(o,s,u,d,n),this.next_state(o,s,u,d),o.lapses+=1;let f={card:o,log:this.buildLog(c.Again)},p={card:s,log:super.buildLog(c.Hard)},m={card:u,log:super.buildLog(c.Good)},h={card:d,log:super.buildLog(c.Easy)};return this.next.set(c.Again,f),this.next.set(c.Hard,p),this.next.set(c.Good,m),this.next.set(c.Easy,h),this.next.get(e)}next_ds(e,t,n,r,i,a,o){e.difficulty=this.algorithm.next_difficulty(i,c.Again);let s=a/Math.exp(this.algorithm.parameters.w[17]*this.algorithm.parameters.w[18]),l=this.algorithm.next_forget_stability(i,a,o);e.stability=_(+s.toFixed(8),v,l),t.difficulty=this.algorithm.next_difficulty(i,c.Hard),t.stability=this.algorithm.next_recall_stability(i,a,o,c.Hard),n.difficulty=this.algorithm.next_difficulty(i,c.Good),n.stability=this.algorithm.next_recall_stability(i,a,o,c.Good),r.difficulty=this.algorithm.next_difficulty(i,c.Easy),r.stability=this.algorithm.next_recall_stability(i,a,o,c.Easy)}next_interval(e,t,n,r,i){let a,o;a=this.algorithm.next_interval(t.stability,i),o=this.algorithm.next_interval(n.stability,i),a=Math.min(a,o),o=Math.max(o,a+1);let s=Math.max(this.algorithm.next_interval(r.stability,i),o+1);e.scheduled_days=0,e.due=this.review_time.scheduler(5),t.scheduled_days=a,t.due=this.review_time.scheduler(a,!0),n.scheduled_days=o,n.due=this.review_time.scheduler(o,!0),r.scheduled_days=s,r.due=this.review_time.scheduler(s,!0)}next_state(e,t,n,r){e.state=s.Relearning,t.state=s.Review,n.state=s.Review,r.state=s.Review}},_e=class extends he{newState(e){let t=this.next.get(e);if(t)return t;this.current.scheduled_days=0,this.current.elapsed_days=0;let n=l.card(this.current),r=l.card(this.current),i=l.card(this.current),a=l.card(this.current);return this.init_ds(n,r,i,a),this.next_interval(n,r,i,a,0),this.next_state(n,r,i,a),this.update_next(n,r,i,a),this.next.get(e)}init_ds(e,t,n,r){e.difficulty=this.algorithm.init_difficulty(c.Again),e.stability=this.algorithm.init_stability(c.Again),t.difficulty=this.algorithm.init_difficulty(c.Hard),t.stability=this.algorithm.init_stability(c.Hard),n.difficulty=this.algorithm.init_difficulty(c.Good),n.stability=this.algorithm.init_stability(c.Good),r.difficulty=this.algorithm.init_difficulty(c.Easy),r.stability=this.algorithm.init_stability(c.Easy)}learningState(e){return this.reviewState(e)}reviewState(e){let t=this.next.get(e);if(t)return t;let n=this.current.elapsed_days,{difficulty:r,stability:i}=this.last,a=this.algorithm.forgetting_curve(n,i),o=l.card(this.current),s=l.card(this.current),c=l.card(this.current),u=l.card(this.current);return this.next_ds(o,s,c,u,r,i,a),this.next_interval(o,s,c,u,n),this.next_state(o,s,c,u),o.lapses+=1,this.update_next(o,s,c,u),this.next.get(e)}next_ds(e,t,n,r,i,a,o){e.difficulty=this.algorithm.next_difficulty(i,c.Again),e.stability=_(a,v,this.algorithm.next_forget_stability(i,a,o)),t.difficulty=this.algorithm.next_difficulty(i,c.Hard),t.stability=this.algorithm.next_recall_stability(i,a,o,c.Hard),n.difficulty=this.algorithm.next_difficulty(i,c.Good),n.stability=this.algorithm.next_recall_stability(i,a,o,c.Good),r.difficulty=this.algorithm.next_difficulty(i,c.Easy),r.stability=this.algorithm.next_recall_stability(i,a,o,c.Easy)}next_interval(e,t,n,r,i){let a,o,s,c;a=this.algorithm.next_interval(e.stability,i),o=this.algorithm.next_interval(t.stability,i),s=this.algorithm.next_interval(n.stability,i),c=this.algorithm.next_interval(r.stability,i),a=Math.min(a,o),o=Math.max(o,a+1),s=Math.max(s,o+1),c=Math.max(c,s+1),e.scheduled_days=a,e.due=this.review_time.scheduler(a,!0),t.scheduled_days=o,t.due=this.review_time.scheduler(o,!0),n.scheduled_days=s,n.due=this.review_time.scheduler(s,!0),r.scheduled_days=c,r.due=this.review_time.scheduler(c,!0)}next_state(e,t,n,r){e.state=s.Review,t.state=s.Review,n.state=s.Review,r.state=s.Review}update_next(e,t,n,r){let i={card:e,log:this.buildLog(c.Again)},a={card:t,log:super.buildLog(c.Hard)},o={card:n,log:super.buildLog(c.Good)},s={card:r,log:super.buildLog(c.Easy)};this.next.set(c.Again,i),this.next.set(c.Hard,a),this.next.set(c.Good,o),this.next.set(c.Easy,s)}},ve=class{fsrs;constructor(e){this.fsrs=e}replay(e,t,n){return this.fsrs.next(e,t,n)}handleManualRating(e,t,n,r,i,a,o){if(typeof t>`u`)throw Error(`reschedule: state is required for manual rating`);let l,u;if(t===s.New)l={rating:c.Manual,state:t,due:o??n,stability:e.stability,difficulty:e.difficulty,elapsed_days:r,last_elapsed_days:e.elapsed_days,scheduled_days:e.scheduled_days,review:n},u=b(n),u.last_review=n;else{if(typeof o>`u`)throw Error(`reschedule: due is required for manual rating`);let s=o.diff(n,`days`);l={rating:c.Manual,state:e.state,due:e.last_review||e.due,stability:e.stability,difficulty:e.difficulty,elapsed_days:r,last_elapsed_days:e.elapsed_days,scheduled_days:e.scheduled_days,review:n},u={...e,state:t,due:o,last_review:n,stability:i||e.stability,difficulty:a||e.difficulty,elapsed_days:r,scheduled_days:s,reps:e.reps+1}}return{card:u,log:l}}reschedule(e,t){let n=[],r=b(e.due);for(let e of t){let t;if(e.review=l.time(e.review),e.rating===c.Manual){let n=0;r.state!==s.New&&r.last_review&&(n=e.review.diff(r.last_review,`days`)),t=this.handleManualRating(r,e.state,e.review,n,e.stability,e.difficulty,e.due?l.time(e.due):void 0)}else t=this.replay(r,e.review,e.rating);n.push(t),r=t.card}return n}calculateManualRecord(e,t,n,r){if(!n)return null;let{card:i,log:a}=n,o=l.card(e);return o.due.getTime()===i.due.getTime()?null:(o.scheduled_days=i.due.diff(o.due,`days`),this.handleManualRating(o,i.state,l.time(t),a.elapsed_days,r?i.stability:void 0,r?i.difficulty:void 0,i.due))}},ye=class extends pe{strategyHandler=new Map;Scheduler;constructor(e){super(e);let{enable_short_term:t}=this.parameters;this.Scheduler=t?ge:_e}params_handler_proxy(){let e=this;return{set:function(t,n,r){return n===`request_retention`&&Number.isFinite(r)?e.intervalModifier=e.calculate_interval_modifier(Number(r)):n===`enable_short_term`&&(e.Scheduler=r===!0?ge:_e),Reflect.set(t,n,r),!0}}}useStrategy(e,t){return this.strategyHandler.set(e,t),this}clearStrategy(e){return e?this.strategyHandler.delete(e):this.strategyHandler.clear(),this}getScheduler(e,t){let n=this.strategyHandler.get(x.SEED);return new((this.strategyHandler.get(x.SCHEDULER))||this.Scheduler)(e,t,this,{seed:n||me})}repeat(e,t,n){let r=this.getScheduler(e,t).preview();return n&&typeof n==`function`?n(r):r}next(e,t,n,r){let i=this.getScheduler(e,t),a=l.rating(n);if(a===c.Manual)throw Error(`Cannot review a manual rating`);let o=i.review(a);return r&&typeof r==`function`?r(o):o}get_retrievability(e,t,n=!0){let r=l.card(e);t=t?l.time(t):new Date;let i=r.state===s.New?0:Math.max(t.diff(r.last_review,`days`),0),a=r.state===s.New?0:this.forgetting_curve(i,+r.stability.toFixed(8));return n?`${(a*100).toFixed(2)}%`:a}rollback(e,t,n){let r=l.card(e),i=l.review_log(t);if(i.rating===c.Manual)throw Error(`Cannot rollback a manual rating`);let a,o,u;switch(i.state){case s.New:a=i.due,o=void 0,u=0;break;case s.Learning:case s.Relearning:case s.Review:a=i.review,o=i.due,u=r.lapses-+(i.rating===c.Again&&i.state===s.Review);break}let d={...r,due:a,stability:i.stability,difficulty:i.difficulty,elapsed_days:i.last_elapsed_days,scheduled_days:i.scheduled_days,reps:Math.max(0,r.reps-1),lapses:Math.max(0,u),state:i.state,last_review:o};return n&&typeof n==`function`?n(d):d}forget(e,t,n=!1,r){let i=l.card(e);t=l.time(t);let a=i.state===s.New?0:t.diff(i.last_review,`days`),o={rating:c.Manual,state:i.state,due:i.due,stability:i.stability,difficulty:i.difficulty,elapsed_days:0,last_elapsed_days:i.elapsed_days,scheduled_days:a,review:t},u={card:{...i,due:t,stability:0,difficulty:0,elapsed_days:0,scheduled_days:0,reps:n?0:i.reps,lapses:n?0:i.lapses,state:s.New,last_review:i.last_review},log:o};return r&&typeof r==`function`?r(u):u}reschedule(e,t=[],n={}){let{recordLogHandler:r,reviewsOrderBy:i,skipManual:a=!0,now:o=new Date,update_memory_state:s=!1}=n;i&&typeof i==`function`&&t.sort(i),a&&(t=t.filter(e=>e.rating!==c.Manual));let u=new ve(this),d=u.reschedule(n.first_card||b(),t),f=d.length,p=l.card(e),m=u.calculateManualRecord(p,o,f?d[f-1]:void 0,s);return r&&typeof r==`function`?{collections:d.map(r),reschedule_item:m?r(m):null}:{collections:d,reschedule_item:m}}},be=(e=>new ye(e||{}))(y({request_retention:n,enable_fuzz:!0,maximum_interval:100})),xe=e=>e.due?e:{...e,due:new Date},Se=t=>e.i.indexOf(t),Ce=e=>({due:e.due,stability:e.stability,difficulty:e.difficulty,elapsed_days:e.elapsedDays,scheduled_days:e.scheduledDays,reps:e.reps,lapses:e.lapses,state:Se(e.state),last_review:e.lastReview}),we=(e,t,n)=>{let r=new Date,i=Ce(xe(e));return be.repeat(i,r,r=>{let i=r[ke(t)],a=Oe(i.card,e),o=i.log;return{nextCard:a,reviewLog:{id:0,cardReviewId:e.id,grade:t,state:De(o.state),due:o.due,stability:o.stability,difficulty:o.difficulty,elapsedDays:o.elapsed_days,lastElapsedDays:o.last_elapsed_days,scheduledDays:o.scheduled_days,review:o.review,duration:n}}})};function Te(t){let n=new Date,r=Ce(xe(t)),i=be.repeat(r,n),a=Object.fromEntries(e.r.map(e=>[e,new Date]));for(let e of te){let t=i[e].card.due,n=Ee(e);a[n]=t}return a}function Ee(t){return e.r[t]}function De(t){return e.i[t]}function Oe(e,t){return{...t,due:e.due,stability:e.stability,difficulty:e.difficulty,elapsedDays:e.elapsed_days,scheduledDays:e.scheduled_days,reps:e.reps,lapses:e.lapses,state:De(e.state),lastReview:e.last_review??null}}function ke(t){let n=e.r.indexOf(t);if(n===-1)throw Error(`Invalid rating: ${t}`);return n}function Ae(t,n){let r=b();return{id:``,due:null,stability:r.stability,difficulty:r.difficulty,elapsedDays:r.elapsed_days,scheduledDays:r.scheduled_days,reps:r.reps,lapses:r.lapses,state:e.n.New,lastReview:r.last_review??null,userDeckStudyId:t,cardId:n}}var S=Symbol.for(`immer-nothing`),C=Symbol.for(`immer-draftable`),w=Symbol.for(`immer-state`),je=process.env.NODE_ENV===`production`?[]:[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function T(e,...t){if(process.env.NODE_ENV!==`production`){let n=je[e],r=typeof n==`function`?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}throw Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var E=Object.getPrototypeOf;function D(e){return!!e&&!!e[w]}function O(e){return e?Pe(e)||Array.isArray(e)||!!e[C]||!!e.constructor?.[C]||M(e)||N(e):!1}var Me=Object.prototype.constructor.toString(),Ne=new WeakMap;function Pe(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;let n=Object.hasOwnProperty.call(t,`constructor`)&&t.constructor;if(n===Object)return!0;if(typeof n!=`function`)return!1;let r=Ne.get(n);return r===void 0&&(r=Function.toString.call(n),Ne.set(n,r)),r===Me}function k(e,t,n=!0){A(e)===0?(n?Reflect.ownKeys(e):Object.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function A(e){let t=e[w];return t?t.type_:Array.isArray(e)?1:M(e)?2:N(e)?3:0}function j(e,t){return A(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Fe(e,t,n){let r=A(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function Ie(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}function M(e){return e instanceof Map}function N(e){return e instanceof Set}function P(e){return e.copy_||e.base_}function F(e,t){if(M(e))return new Map(e);if(N(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);let n=Pe(e);if(t===!0||t===`class_only`&&!n){let t=Object.getOwnPropertyDescriptors(e);delete t[w];let n=Reflect.ownKeys(t);for(let r=0;r<n.length;r++){let i=n[r],a=t[i];a.writable===!1&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(t[i]={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[i]})}return Object.create(E(e),t)}else{let t=E(e);return t!==null&&n?{...e}:Object.assign(Object.create(t),e)}}function I(e,t=!1){return R(e)||D(e)||!O(e)?e:(A(e)>1&&Object.defineProperties(e,{set:L,add:L,clear:L,delete:L}),Object.freeze(e),t&&Object.values(e).forEach(e=>I(e,!0)),e)}function Le(){T(2)}var L={value:Le};function R(e){return typeof e!=`object`||!e?!0:Object.isFrozen(e)}var Re={};function z(e){let t=Re[e];return t||T(0,e),t}var B;function ze(){return B}function Be(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Ve(e,t){t&&(z(`Patches`),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function V(e){H(e),e.drafts_.forEach(Ue),e.drafts_=null}function H(e){e===B&&(B=e.parent_)}function He(e){return B=Be(B,e)}function Ue(e){let t=e[w];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function We(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];return e!==void 0&&e!==n?(n[w].modified_&&(V(t),T(4)),O(e)&&(e=U(t,e),t.parent_||W(t,e)),t.patches_&&z(`Patches`).generateReplacementPatches_(n[w].base_,e,t.patches_,t.inversePatches_)):e=U(t,n,[]),V(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===S?void 0:e}function U(e,t,n){if(R(t))return t;let r=e.immer_.shouldUseStrictIteration(),i=t[w];if(!i)return k(t,(r,a)=>Ge(e,i,t,r,a,n),r),t;if(i.scope_!==e)return t;if(!i.modified_)return W(e,i.base_,!0),i.base_;if(!i.finalized_){i.finalized_=!0,i.scope_.unfinalizedDrafts_--;let t=i.copy_,a=t,o=!1;i.type_===3&&(a=new Set(t),t.clear(),o=!0),k(a,(r,a)=>Ge(e,i,t,r,a,n,o),r),W(e,t,!1),n&&e.patches_&&z(`Patches`).generatePatches_(i,n,e.patches_,e.inversePatches_)}return i.copy_}function Ge(e,t,n,r,i,a,o){if(i==null||typeof i!=`object`&&!o)return;let s=R(i);if(!(s&&!o)){if(process.env.NODE_ENV!==`production`&&i===n&&T(5),D(i)){let o=U(e,i,a&&t&&t.type_!==3&&!j(t.assigned_,r)?a.concat(r):void 0);if(Fe(n,r,o),D(o))e.canAutoFreeze_=!1;else return}else o&&n.add(i);if(O(i)&&!s){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[r]===i&&s)return;U(e,i),(!t||!t.scope_.parent_)&&typeof r!=`symbol`&&(M(n)?n.has(r):Object.prototype.propertyIsEnumerable.call(n,r))&&W(e,i)}}}function W(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&I(t,n)}function Ke(e,t){let n=Array.isArray(e),r={type_:+!!n,scope_:t?t.scope_:ze(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1},i=r,a=G;n&&(i=[r],a=K);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,s}var G={get(e,t){if(t===w)return e;let n=P(e);if(!j(n,t))return qe(e,n,t);let r=n[t];return e.finalized_||!O(r)?r:r===q(e.base_,t)?(Y(e),e.copy_[t]=X(r,e)):r},has(e,t){return t in P(e)},ownKeys(e){return Reflect.ownKeys(P(e))},set(e,t,n){let r=Je(P(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=q(P(e),t),i=r?.[w];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(Ie(n,r)&&(n!==void 0||j(e.base_,t)))return!0;Y(e),J(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_[t]=!0,!0)},deleteProperty(e,t){return q(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,Y(e),J(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=P(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.type_!==1||t!==`length`,enumerable:r.enumerable,value:n[t]}},defineProperty(){T(11)},getPrototypeOf(e){return E(e.base_)},setPrototypeOf(){T(12)}},K={};k(G,(e,t)=>{K[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),K.deleteProperty=function(e,t){return process.env.NODE_ENV!==`production`&&isNaN(parseInt(t))&&T(13),K.set.call(this,e,t,void 0)},K.set=function(e,t,n){return process.env.NODE_ENV!==`production`&&t!==`length`&&isNaN(parseInt(t))&&T(14),G.set.call(this,e[0],t,n,e[0])};function q(e,t){let n=e[w];return(n?P(n):e)[t]}function qe(e,t,n){let r=Je(t,n);return r?`value`in r?r.value:r.get?.call(e.draft_):void 0}function Je(e,t){if(!(t in e))return;let n=E(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=E(n)}}function J(e){e.modified_||(e.modified_=!0,e.parent_&&J(e.parent_))}function Y(e){e.copy_||=F(e.base_,e.scope_.immer_.useStrictShallowCopy_)}var Ye=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(e,t,n)=>{if(typeof e==`function`&&typeof t!=`function`){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}typeof t!=`function`&&T(6),n!==void 0&&typeof n!=`function`&&T(7);let r;if(O(e)){let i=He(this),a=X(e,void 0),o=!0;try{r=t(a),o=!1}finally{o?V(i):H(i)}return Ve(i,n),We(r,i)}else if(!e||typeof e!=`object`){if(r=t(e),r===void 0&&(r=e),r===S&&(r=void 0),this.autoFreeze_&&I(r,!0),n){let t=[],i=[];z(`Patches`).generateReplacementPatches_(e,r,t,i),n(t,i)}return r}else T(1,e)},this.produceWithPatches=(e,t)=>{if(typeof e==`function`)return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},typeof e?.autoFreeze==`boolean`&&this.setAutoFreeze(e.autoFreeze),typeof e?.useStrictShallowCopy==`boolean`&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),typeof e?.useStrictIteration==`boolean`&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){O(e)||T(8),D(e)&&(e=Xe(e));let t=He(this),n=X(e,void 0);return n[w].isManual_=!0,H(t),n}finishDraft(e,t){let n=e&&e[w];(!n||!n.isManual_)&&T(9);let{scope_:r}=n;return Ve(r,t),We(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=z(`Patches`).applyPatches_;return D(e)?r(e,t):this.produce(e,e=>r(e,t))}};function X(e,t){let n=M(e)?z(`MapSet`).proxyMap_(e,t):N(e)?z(`MapSet`).proxySet_(e,t):Ke(e,t);return(t?t.scope_:ze()).drafts_.push(n),n}function Xe(e){return D(e)||T(10,e),Z(e)}function Z(e){if(!O(e)||R(e))return e;let t=e[w],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=F(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=F(e,!0);return k(n,(e,t)=>{Fe(n,e,Z(t))},r),t&&(t.finalized_=!1),n}var Ze=new Ye().produce;function Qe(e,t){let n=e+t,r=0;for(let e=0;e<n.length;e++){let t=n.charCodeAt(e);r=(r<<5)-r+t,r|=0}return r}function $e(e,t){return(Qe(e,t)>>>0)/4294967295}function et(e,t=new Set){if(e.reviewCards.length===0&&e.newCards.length===0)return;if(e.reviewCards.length===0)return Q(e.newCards,t)??e.newCards[0];if(e.newCards.length===0)return Q(e.reviewCards,t)??e.reviewCards[0];let n=Q(e.newCards,t),r=Q(e.reviewCards,t);if(!n)return r??e.newCards[0];if(!r)return n??e.reviewCards[0];let i=e.newCards.length,a=(.33+i/(i+e.reviewCards.length))/2;return $e(n.card.id,r.card.id)<a?n:r}function Q(e,t){return e.find(e=>!t.has(e.card.id))}function tt(e,t){let n=$(e,t);return n?Ze(e,e=>{rt(e,n)}):e}function nt(e,n,r){let i=$(n,r);if(!i)return n;let{nextCard:a}=we(i.cardReview,e,30),o=a.due&&(0,t.t.isSameDay)(a.due,new Date);return Ze(n,e=>{rt(e,i),o&&it(e,{...i,cardReview:a})})}function rt(e,t){t.cardReview.state===`New`?e.newCards=e.newCards.filter(e=>e.card.id!==t.card.id):e.reviewCards=e.reviewCards.filter(e=>e.card.id!==t.card.id),at(e,t.cardReview.state,`decrease`)}function it(e,t){if(t.cardReview.state===`New`){let n=e.newCards.findIndex(e=>e.cardReview.due&&t.cardReview.due&&e.cardReview.due>=t.cardReview.due||e.cardReview.difficulty>=t.cardReview.difficulty);n===-1?e.newCards.push(t):e.newCards.splice(n,0,t)}else{let n=ot(e,e.reviewCards);e.reviewCards.splice(n,0,t)}at(e,t.cardReview.state,`increase`)}function at(e,t,n){let r=n===`increase`?1:-1;switch(t){case`New`:e.stats.new+=r;break;case`Learning`:case`Relearning`:e.stats.learning+=r;break;case`Review`:e.stats.review+=r;break;default:e.stats.new+=r;break}e.stats.total+=r}function $(e,t){return e.newCards.find(e=>e.card.id===t)??e.reviewCards.find(e=>e.card.id===t)}function ot(e,t){if(t.length===0)return 0;let n=Math.max(4,Math.floor(t.length/3));return Math.min(n,t.length)}var st=5,ct={newCards:[],reviewCards:[],stats:{new:0,learning:0,review:0,total:0}},lt=class{recentlyReviewed=new Set;_reviewsCompleted=0;_correctGrades=0;getProgress(){return{reviewsCompleted:this._reviewsCompleted,correctGrades:this._correctGrades}}nextCard(e){return et(e,this.recentlyReviewed)}onRate(e,t){return this.recentlyReviewed.add(e),this.recentlyReviewed.size>5&&this.recentlyReviewed.delete(this.recentlyReviewed.values().next().value),this._reviewsCompleted++,(t===`Good`||t===`Easy`)&&this._correctGrades++,this.getProgress()}};exports.FSRS_RETENTION=n,exports.FlashcardSessionManager=lt,exports.MAX_CARDS_TO_FETCH=r,exports.MAX_LEARN_PER_DAY=i,exports.MAX_NEW_PER_DECK_DAY=a,exports.RECENTLY_REVIEWED_SET_SIZE=st,exports.THRESHOLD_CARDS_FOR_REFETCH=o,exports.defaultSessionData=ct,exports.getNextCardFromSession=et,exports.getReviewDateForEachRating=Te,exports.getSessionCard=$,exports.gradeCard=we,exports.mergeFsrsCard=Oe,exports.newCardReview=Ae,exports.removeCardFromSessionData=nt,exports.skipCardFromSessionData=tt;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./fsrs-DO2rNRTM.cjs`),t=require(`./date-Bn1ahM0R.cjs`);var n=.9,r=.1542,i=n**(-1/r)-1,a=50,o={learnDailyLimit:{recommended:200,min:100,max:500,step:50},newCardsPerDeckDailyLimit:{recommended:10,min:1,max:50,step:5}},s=10,c=(e,t)=>e===o.learnDailyLimit.recommended&&t===o.newCardsPerDeckDailyLimit.recommended,l=(e=>(e[e.New=0]=`New`,e[e.Learning=1]=`Learning`,e[e.Review=2]=`Review`,e[e.Relearning=3]=`Relearning`,e))(l||{}),u=(e=>(e[e.Manual=0]=`Manual`,e[e.Again=1]=`Again`,e[e.Hard=2]=`Hard`,e[e.Good=3]=`Good`,e[e.Easy=4]=`Easy`,e))(u||{}),d=class e{static card(t){return{...t,state:e.state(t.state),due:e.time(t.due),last_review:t.last_review?e.time(t.last_review):void 0}}static rating(e){if(typeof e==`string`){let t=u[`${e.charAt(0).toUpperCase()}${e.slice(1).toLowerCase()}`];if(t===void 0)throw Error(`Invalid rating:[${e}]`);return t}else if(typeof e==`number`)return e;throw Error(`Invalid rating:[${e}]`)}static state(e){if(typeof e==`string`){let t=l[`${e.charAt(0).toUpperCase()}${e.slice(1).toLowerCase()}`];if(t===void 0)throw Error(`Invalid state:[${e}]`);return t}else if(typeof e==`number`)return e;throw Error(`Invalid state:[${e}]`)}static time(e){if(typeof e==`object`&&e instanceof Date)return e;if(typeof e==`string`){let t=Date.parse(e);if(isNaN(t))throw Error(`Invalid date:[${e}]`);return new Date(t)}else if(typeof e==`number`)return new Date(e);throw Error(`Invalid date:[${e}]`)}static review_log(t){return{...t,due:e.time(t.due),rating:e.rating(t.rating),state:e.state(t.state),review:e.time(t.review)}}},f=`4.7.1`;Date.prototype.scheduler=function(e,t){return p(this,e,t)},Date.prototype.diff=function(e,t){return m(this,e,t)},Date.prototype.format=function(){return ee(this)},Date.prototype.dueFormat=function(e,t,n){return te(this,e,t,n)};function p(e,t,n){return new Date(n?d.time(e).getTime()+t*24*60*60*1e3:d.time(e).getTime()+t*60*1e3)}function m(e,t,n){if(!e||!t)throw Error(`Invalid date`);let r=d.time(e).getTime()-d.time(t).getTime(),i=0;switch(n){case`days`:i=Math.floor(r/(1440*60*1e3));break;case`minutes`:i=Math.floor(r/(60*1e3));break}return i}function ee(e){let t=d.time(e),n=t.getFullYear(),r=t.getMonth()+1,i=t.getDate(),a=t.getHours(),o=t.getMinutes(),s=t.getSeconds();return`${n}-${h(r)}-${h(i)} ${h(a)}:${h(o)}:${h(s)}`}function h(e){return e<10?`0${e}`:`${e}`}var g=[60,60,24,31,12],_=[`second`,`min`,`hour`,`day`,`month`,`year`];function te(e,t,n,r=_){e=d.time(e),t=d.time(t),r.length!==_.length&&(r=_);let i=e.getTime()-t.getTime(),a;for(i/=1e3,a=0;a<g.length&&!(i<g[a]);a++)i/=g[a];return`${Math.floor(i)}${n?r[a]:``}`}var ne=Object.freeze([u.Again,u.Hard,u.Good,u.Easy]),re=[{start:2.5,end:7,factor:.15},{start:7,end:20,factor:.1},{start:20,end:1/0,factor:.05}];function ie(e,t,n){let r=1;for(let t of re)r+=t.factor*Math.max(Math.min(e,t.end)-t.start,0);e=Math.min(e,n);let i=Math.max(2,Math.round(e-r)),a=Math.min(Math.round(e+r),n);return e>t&&(i=Math.max(i,t+1)),i=Math.min(i,a),{min_ivl:i,max_ivl:a}}function v(e,t,n){return Math.min(Math.max(e,t),n)}function ae(e,t){let n=Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),r=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate());return Math.floor((r-n)/864e5)}var oe=Object.freeze([.40255,1.18385,3.173,15.69105,7.1949,.5345,1.4604,.0046,1.54575,.1192,1.01925,1.9395,.11,.29605,2.2698,.2315,2.9898,.51655,.6621]);`${f}`;var y=.01,se=Object.freeze([Object.freeze([y,100]),Object.freeze([y,100]),Object.freeze([y,100]),Object.freeze([y,100]),Object.freeze([1,10]),Object.freeze([.001,4]),Object.freeze([.001,4]),Object.freeze([.001,.75]),Object.freeze([0,4.5]),Object.freeze([0,.8]),Object.freeze([.001,3.5]),Object.freeze([.001,5]),Object.freeze([.001,.25]),Object.freeze([.001,.9]),Object.freeze([0,4]),Object.freeze([0,1]),Object.freeze([1,6]),Object.freeze([0,2]),Object.freeze([0,2])]),b=e=>{let t=[...oe];return e?.w&&(e.w.length===19?t=[...e.w]:e.w.length===17&&(t=e?.w.concat([0,0]),t[4]=+(t[5]*2+t[4]).toFixed(8),t[5]=+(Math.log(t[5]*3+1)/3).toFixed(8),t[6]=+(t[6]+.5).toFixed(8),console.debug(`[FSRS V5]auto fill w to 19 length`))),t=t.map((e,t)=>v(e,se[t][0],se[t][1])),{request_retention:e?.request_retention||.9,maximum_interval:e?.maximum_interval||36500,w:t,enable_fuzz:e?.enable_fuzz??!1,enable_short_term:e?.enable_short_term??!0}};function x(e,t){let n={due:e?d.time(e):new Date,stability:0,difficulty:0,elapsed_days:0,scheduled_days:0,reps:0,lapses:0,state:l.New,last_review:void 0};return t&&typeof t==`function`?t(n):n}var ce=class{c;s0;s1;s2;constructor(e){let t=le();this.c=1,this.s0=t(` `),this.s1=t(` `),this.s2=t(` `),e??=+new Date,this.s0-=t(e),this.s0<0&&(this.s0+=1),this.s1-=t(e),this.s1<0&&(this.s1+=1),this.s2-=t(e),this.s2<0&&(this.s2+=1)}next(){let e=2091639*this.s0+this.c*23283064365386963e-26;return this.s0=this.s1,this.s1=this.s2,this.s2=e-(this.c=e|0),this.s2}set state(e){this.c=e.c,this.s0=e.s0,this.s1=e.s1,this.s2=e.s2}get state(){return{c:this.c,s0:this.s0,s1:this.s1,s2:this.s2}}};function le(){let e=4022871197;return function(t){t=String(t);for(let n=0;n<t.length;n++){e+=t.charCodeAt(n);let r=.02519603282416938*e;e=r>>>0,r-=e,r*=e,e=r>>>0,r-=e,e+=r*4294967296}return(e>>>0)*23283064365386963e-26}}function ue(e){let t=new ce(e),n=()=>t.next();return n.int32=()=>t.next()*4294967296|0,n.double=()=>n()+(n()*2097152|0)*11102230246251565e-32,n.state=()=>t.state,n.importState=e=>(t.state=e,n),n}var de=-.5,fe=19/81;function pe(e,t){return+((1+fe*e/t)**+de).toFixed(8)}var me=class{param;intervalModifier;_seed;constructor(e){this.param=new Proxy(b(e),this.params_handler_proxy()),this.intervalModifier=this.calculate_interval_modifier(this.param.request_retention)}get interval_modifier(){return this.intervalModifier}set seed(e){this._seed=e}calculate_interval_modifier(e){if(e<=0||e>1)throw Error(`Requested retention rate should be in the range (0,1]`);return+((e**(1/de)-1)/fe).toFixed(8)}get parameters(){return this.param}set parameters(e){this.update_parameters(e)}params_handler_proxy(){let e=this;return{set:function(t,n,r){return n===`request_retention`&&Number.isFinite(r)&&(e.intervalModifier=e.calculate_interval_modifier(Number(r))),Reflect.set(t,n,r),!0}}}update_parameters(e){let t=b(e);for(let e in t)if(e in this.param){let n=e;this.param[n]=t[n]}}init_stability(e){return Math.max(this.param.w[e-1],.1)}init_difficulty(e){return this.constrain_difficulty(this.param.w[4]-Math.exp((e-1)*this.param.w[5])+1)}apply_fuzz(e,t){if(!this.param.enable_fuzz||e<2.5)return Math.round(e);let n=ue(this._seed)(),{min_ivl:r,max_ivl:i}=ie(e,t,this.param.maximum_interval);return Math.floor(n*(i-r+1)+r)}next_interval(e,t){let n=Math.min(Math.max(1,Math.round(e*this.intervalModifier)),this.param.maximum_interval);return this.apply_fuzz(n,t)}linear_damping(e,t){return+(e*(10-t)/9).toFixed(8)}next_difficulty(e,t){let n=-this.param.w[6]*(t-3),r=e+this.linear_damping(n,e);return this.constrain_difficulty(this.mean_reversion(this.init_difficulty(u.Easy),r))}constrain_difficulty(e){return Math.min(Math.max(+e.toFixed(8),1),10)}mean_reversion(e,t){return+(this.param.w[7]*e+(1-this.param.w[7])*t).toFixed(8)}next_recall_stability(e,t,n,r){let i=u.Hard===r?this.param.w[15]:1,a=u.Easy===r?this.param.w[16]:1;return+v(t*(1+Math.exp(this.param.w[8])*(11-e)*t**+-this.param.w[9]*(Math.exp((1-n)*this.param.w[10])-1)*i*a),y,36500).toFixed(8)}next_forget_stability(e,t,n){return+v(this.param.w[11]*e**+-this.param.w[12]*((t+1)**+this.param.w[13]-1)*Math.exp((1-n)*this.param.w[14]),y,36500).toFixed(8)}next_short_term_stability(e,t){return+v(e*Math.exp(this.param.w[17]*(t-3+this.param.w[18])),y,36500).toFixed(8)}forgetting_curve=pe;next_state(e,t,n){let{difficulty:r,stability:i}=e??{difficulty:0,stability:0};if(t<0)throw Error(`Invalid delta_t "${t}"`);if(n<0||n>4)throw Error(`Invalid grade "${n}"`);if(r===0&&i===0)return{difficulty:this.init_difficulty(n),stability:this.init_stability(n)};if(n===0)return{difficulty:r,stability:i};if(r<1||i<.01)throw Error(`Invalid memory state { difficulty: ${r}, stability: ${i} }`);let a=this.forgetting_curve(t,i),o=this.next_recall_stability(r,i,a,n),s=this.next_forget_stability(r,i,a),c=this.next_short_term_stability(i,n),l=o;if(n===1){let[e,t]=[0,0];this.param.enable_short_term&&(e=this.param.w[17],t=this.param.w[18]),l=v(+(i/Math.exp(e*t)).toFixed(8),y,s)}return t===0&&this.param.enable_short_term&&(l=c),{difficulty:this.next_difficulty(r,n),stability:l}}};function he(){return`${this.review_time.getTime()}_${this.current.reps}_${this.current.difficulty*this.current.stability}`}var S=(e=>(e.SCHEDULER=`Scheduler`,e.SEED=`Seed`,e))(S||{}),ge=class{last;current;review_time;next=new Map;algorithm;initSeedStrategy;constructor(e,t,n,r={seed:he}){this.algorithm=n,this.initSeedStrategy=r.seed.bind(this),this.last=d.card(e),this.current=d.card(e),this.review_time=d.time(t),this.init()}init(){let{state:e,last_review:t}=this.current,n=0;e!==l.New&&t&&(n=ae(t,this.review_time)),this.current.last_review=this.review_time,this.current.elapsed_days=n,this.current.reps+=1,this.algorithm.seed=this.initSeedStrategy()}preview(){return{[u.Again]:this.review(u.Again),[u.Hard]:this.review(u.Hard),[u.Good]:this.review(u.Good),[u.Easy]:this.review(u.Easy),[Symbol.iterator]:this.previewIterator.bind(this)}}*previewIterator(){for(let e of ne)yield this.review(e)}review(e){let{state:t}=this.last,n;switch(t){case l.New:n=this.newState(e);break;case l.Learning:case l.Relearning:n=this.learningState(e);break;case l.Review:n=this.reviewState(e);break}if(n)return n;throw Error(`Invalid grade`)}buildLog(e){let{last_review:t,due:n,elapsed_days:r}=this.last;return{rating:e,state:this.current.state,due:t||n,stability:this.current.stability,difficulty:this.current.difficulty,elapsed_days:this.current.elapsed_days,last_elapsed_days:r,scheduled_days:this.current.scheduled_days,review:this.review_time}}},_e=class extends ge{newState(e){let t=this.next.get(e);if(t)return t;let n=d.card(this.current);switch(n.difficulty=this.algorithm.init_difficulty(e),n.stability=this.algorithm.init_stability(e),e){case u.Again:n.scheduled_days=0,n.due=this.review_time.scheduler(1),n.state=l.Learning;break;case u.Hard:n.scheduled_days=0,n.due=this.review_time.scheduler(5),n.state=l.Learning;break;case u.Good:n.scheduled_days=0,n.due=this.review_time.scheduler(10),n.state=l.Learning;break;case u.Easy:{let e=this.algorithm.next_interval(n.stability,this.current.elapsed_days);n.scheduled_days=e,n.due=this.review_time.scheduler(e,!0),n.state=l.Review;break}default:throw Error(`Invalid grade`)}let r={card:n,log:this.buildLog(e)};return this.next.set(e,r),r}learningState(e){let t=this.next.get(e);if(t)return t;let{state:n,difficulty:r,stability:i}=this.last,a=d.card(this.current),o=this.current.elapsed_days;switch(a.difficulty=this.algorithm.next_difficulty(r,e),a.stability=this.algorithm.next_short_term_stability(i,e),e){case u.Again:a.scheduled_days=0,a.due=this.review_time.scheduler(5,!1),a.state=n;break;case u.Hard:a.scheduled_days=0,a.due=this.review_time.scheduler(10),a.state=n;break;case u.Good:{let e=this.algorithm.next_interval(a.stability,o);a.scheduled_days=e,a.due=this.review_time.scheduler(e,!0),a.state=l.Review;break}case u.Easy:{let e=this.algorithm.next_short_term_stability(i,u.Good),t=this.algorithm.next_interval(e,o),n=Math.max(this.algorithm.next_interval(a.stability,o),t+1);a.scheduled_days=n,a.due=this.review_time.scheduler(n,!0),a.state=l.Review;break}default:throw Error(`Invalid grade`)}let s={card:a,log:this.buildLog(e)};return this.next.set(e,s),s}reviewState(e){let t=this.next.get(e);if(t)return t;let n=this.current.elapsed_days,{difficulty:r,stability:i}=this.last,a=this.algorithm.forgetting_curve(n,i),o=d.card(this.current),s=d.card(this.current),c=d.card(this.current),l=d.card(this.current);this.next_ds(o,s,c,l,r,i,a),this.next_interval(o,s,c,l,n),this.next_state(o,s,c,l),o.lapses+=1;let f={card:o,log:this.buildLog(u.Again)},p={card:s,log:super.buildLog(u.Hard)},m={card:c,log:super.buildLog(u.Good)},ee={card:l,log:super.buildLog(u.Easy)};return this.next.set(u.Again,f),this.next.set(u.Hard,p),this.next.set(u.Good,m),this.next.set(u.Easy,ee),this.next.get(e)}next_ds(e,t,n,r,i,a,o){e.difficulty=this.algorithm.next_difficulty(i,u.Again);let s=a/Math.exp(this.algorithm.parameters.w[17]*this.algorithm.parameters.w[18]),c=this.algorithm.next_forget_stability(i,a,o);e.stability=v(+s.toFixed(8),y,c),t.difficulty=this.algorithm.next_difficulty(i,u.Hard),t.stability=this.algorithm.next_recall_stability(i,a,o,u.Hard),n.difficulty=this.algorithm.next_difficulty(i,u.Good),n.stability=this.algorithm.next_recall_stability(i,a,o,u.Good),r.difficulty=this.algorithm.next_difficulty(i,u.Easy),r.stability=this.algorithm.next_recall_stability(i,a,o,u.Easy)}next_interval(e,t,n,r,i){let a,o;a=this.algorithm.next_interval(t.stability,i),o=this.algorithm.next_interval(n.stability,i),a=Math.min(a,o),o=Math.max(o,a+1);let s=Math.max(this.algorithm.next_interval(r.stability,i),o+1);e.scheduled_days=0,e.due=this.review_time.scheduler(5),t.scheduled_days=a,t.due=this.review_time.scheduler(a,!0),n.scheduled_days=o,n.due=this.review_time.scheduler(o,!0),r.scheduled_days=s,r.due=this.review_time.scheduler(s,!0)}next_state(e,t,n,r){e.state=l.Relearning,t.state=l.Review,n.state=l.Review,r.state=l.Review}},ve=class extends ge{newState(e){let t=this.next.get(e);if(t)return t;this.current.scheduled_days=0,this.current.elapsed_days=0;let n=d.card(this.current),r=d.card(this.current),i=d.card(this.current),a=d.card(this.current);return this.init_ds(n,r,i,a),this.next_interval(n,r,i,a,0),this.next_state(n,r,i,a),this.update_next(n,r,i,a),this.next.get(e)}init_ds(e,t,n,r){e.difficulty=this.algorithm.init_difficulty(u.Again),e.stability=this.algorithm.init_stability(u.Again),t.difficulty=this.algorithm.init_difficulty(u.Hard),t.stability=this.algorithm.init_stability(u.Hard),n.difficulty=this.algorithm.init_difficulty(u.Good),n.stability=this.algorithm.init_stability(u.Good),r.difficulty=this.algorithm.init_difficulty(u.Easy),r.stability=this.algorithm.init_stability(u.Easy)}learningState(e){return this.reviewState(e)}reviewState(e){let t=this.next.get(e);if(t)return t;let n=this.current.elapsed_days,{difficulty:r,stability:i}=this.last,a=this.algorithm.forgetting_curve(n,i),o=d.card(this.current),s=d.card(this.current),c=d.card(this.current),l=d.card(this.current);return this.next_ds(o,s,c,l,r,i,a),this.next_interval(o,s,c,l,n),this.next_state(o,s,c,l),o.lapses+=1,this.update_next(o,s,c,l),this.next.get(e)}next_ds(e,t,n,r,i,a,o){e.difficulty=this.algorithm.next_difficulty(i,u.Again),e.stability=v(a,y,this.algorithm.next_forget_stability(i,a,o)),t.difficulty=this.algorithm.next_difficulty(i,u.Hard),t.stability=this.algorithm.next_recall_stability(i,a,o,u.Hard),n.difficulty=this.algorithm.next_difficulty(i,u.Good),n.stability=this.algorithm.next_recall_stability(i,a,o,u.Good),r.difficulty=this.algorithm.next_difficulty(i,u.Easy),r.stability=this.algorithm.next_recall_stability(i,a,o,u.Easy)}next_interval(e,t,n,r,i){let a,o,s,c;a=this.algorithm.next_interval(e.stability,i),o=this.algorithm.next_interval(t.stability,i),s=this.algorithm.next_interval(n.stability,i),c=this.algorithm.next_interval(r.stability,i),a=Math.min(a,o),o=Math.max(o,a+1),s=Math.max(s,o+1),c=Math.max(c,s+1),e.scheduled_days=a,e.due=this.review_time.scheduler(a,!0),t.scheduled_days=o,t.due=this.review_time.scheduler(o,!0),n.scheduled_days=s,n.due=this.review_time.scheduler(s,!0),r.scheduled_days=c,r.due=this.review_time.scheduler(c,!0)}next_state(e,t,n,r){e.state=l.Review,t.state=l.Review,n.state=l.Review,r.state=l.Review}update_next(e,t,n,r){let i={card:e,log:this.buildLog(u.Again)},a={card:t,log:super.buildLog(u.Hard)},o={card:n,log:super.buildLog(u.Good)},s={card:r,log:super.buildLog(u.Easy)};this.next.set(u.Again,i),this.next.set(u.Hard,a),this.next.set(u.Good,o),this.next.set(u.Easy,s)}},ye=class{fsrs;constructor(e){this.fsrs=e}replay(e,t,n){return this.fsrs.next(e,t,n)}handleManualRating(e,t,n,r,i,a,o){if(typeof t>`u`)throw Error(`reschedule: state is required for manual rating`);let s,c;if(t===l.New)s={rating:u.Manual,state:t,due:o??n,stability:e.stability,difficulty:e.difficulty,elapsed_days:r,last_elapsed_days:e.elapsed_days,scheduled_days:e.scheduled_days,review:n},c=x(n),c.last_review=n;else{if(typeof o>`u`)throw Error(`reschedule: due is required for manual rating`);let l=o.diff(n,`days`);s={rating:u.Manual,state:e.state,due:e.last_review||e.due,stability:e.stability,difficulty:e.difficulty,elapsed_days:r,last_elapsed_days:e.elapsed_days,scheduled_days:e.scheduled_days,review:n},c={...e,state:t,due:o,last_review:n,stability:i||e.stability,difficulty:a||e.difficulty,elapsed_days:r,scheduled_days:l,reps:e.reps+1}}return{card:c,log:s}}reschedule(e,t){let n=[],r=x(e.due);for(let e of t){let t;if(e.review=d.time(e.review),e.rating===u.Manual){let n=0;r.state!==l.New&&r.last_review&&(n=e.review.diff(r.last_review,`days`)),t=this.handleManualRating(r,e.state,e.review,n,e.stability,e.difficulty,e.due?d.time(e.due):void 0)}else t=this.replay(r,e.review,e.rating);n.push(t),r=t.card}return n}calculateManualRecord(e,t,n,r){if(!n)return null;let{card:i,log:a}=n,o=d.card(e);return o.due.getTime()===i.due.getTime()?null:(o.scheduled_days=i.due.diff(o.due,`days`),this.handleManualRating(o,i.state,d.time(t),a.elapsed_days,r?i.stability:void 0,r?i.difficulty:void 0,i.due))}},be=class extends me{strategyHandler=new Map;Scheduler;constructor(e){super(e);let{enable_short_term:t}=this.parameters;this.Scheduler=t?_e:ve}params_handler_proxy(){let e=this;return{set:function(t,n,r){return n===`request_retention`&&Number.isFinite(r)?e.intervalModifier=e.calculate_interval_modifier(Number(r)):n===`enable_short_term`&&(e.Scheduler=r===!0?_e:ve),Reflect.set(t,n,r),!0}}}useStrategy(e,t){return this.strategyHandler.set(e,t),this}clearStrategy(e){return e?this.strategyHandler.delete(e):this.strategyHandler.clear(),this}getScheduler(e,t){let n=this.strategyHandler.get(S.SEED);return new((this.strategyHandler.get(S.SCHEDULER))||this.Scheduler)(e,t,this,{seed:n||he})}repeat(e,t,n){let r=this.getScheduler(e,t).preview();return n&&typeof n==`function`?n(r):r}next(e,t,n,r){let i=this.getScheduler(e,t),a=d.rating(n);if(a===u.Manual)throw Error(`Cannot review a manual rating`);let o=i.review(a);return r&&typeof r==`function`?r(o):o}get_retrievability(e,t,n=!0){let r=d.card(e);t=t?d.time(t):new Date;let i=r.state===l.New?0:Math.max(t.diff(r.last_review,`days`),0),a=r.state===l.New?0:this.forgetting_curve(i,+r.stability.toFixed(8));return n?`${(a*100).toFixed(2)}%`:a}rollback(e,t,n){let r=d.card(e),i=d.review_log(t);if(i.rating===u.Manual)throw Error(`Cannot rollback a manual rating`);let a,o,s;switch(i.state){case l.New:a=i.due,o=void 0,s=0;break;case l.Learning:case l.Relearning:case l.Review:a=i.review,o=i.due,s=r.lapses-+(i.rating===u.Again&&i.state===l.Review);break}let c={...r,due:a,stability:i.stability,difficulty:i.difficulty,elapsed_days:i.last_elapsed_days,scheduled_days:i.scheduled_days,reps:Math.max(0,r.reps-1),lapses:Math.max(0,s),state:i.state,last_review:o};return n&&typeof n==`function`?n(c):c}forget(e,t,n=!1,r){let i=d.card(e);t=d.time(t);let a=i.state===l.New?0:t.diff(i.last_review,`days`),o={rating:u.Manual,state:i.state,due:i.due,stability:i.stability,difficulty:i.difficulty,elapsed_days:0,last_elapsed_days:i.elapsed_days,scheduled_days:a,review:t},s={card:{...i,due:t,stability:0,difficulty:0,elapsed_days:0,scheduled_days:0,reps:n?0:i.reps,lapses:n?0:i.lapses,state:l.New,last_review:i.last_review},log:o};return r&&typeof r==`function`?r(s):s}reschedule(e,t=[],n={}){let{recordLogHandler:r,reviewsOrderBy:i,skipManual:a=!0,now:o=new Date,update_memory_state:s=!1}=n;i&&typeof i==`function`&&t.sort(i),a&&(t=t.filter(e=>e.rating!==u.Manual));let c=new ye(this),l=c.reschedule(n.first_card||x(),t),f=l.length,p=d.card(e),m=c.calculateManualRecord(p,o,f?l[f-1]:void 0,s);return r&&typeof r==`function`?{collections:l.map(r),reschedule_item:m?r(m):null}:{collections:l,reschedule_item:m}}},xe=(e=>new be(e||{}))(b({request_retention:n,enable_fuzz:!0,maximum_interval:100})),Se=e=>e.due?e:{...e,due:new Date},Ce=t=>e.i.indexOf(t),we=e=>({due:e.due,stability:e.stability,difficulty:e.difficulty,elapsed_days:e.elapsedDays,scheduled_days:e.scheduledDays,reps:e.reps,lapses:e.lapses,state:Ce(e.state),last_review:e.lastReview}),Te=(e,t,n)=>{let r=new Date,i=we(Se(e));return xe.repeat(i,r,r=>{let i=r[ke(t)],a=C(i.card,e),o=i.log;return{nextCard:a,reviewLog:{id:0,cardReviewId:e.id,grade:t,state:Oe(o.state),due:o.due,stability:o.stability,difficulty:o.difficulty,elapsedDays:o.elapsed_days,lastElapsedDays:o.last_elapsed_days,scheduledDays:o.scheduled_days,review:o.review,duration:n}}})};function Ee(t){let n=new Date,r=we(Se(t)),i=xe.repeat(r,n),a=Object.fromEntries(e.r.map(e=>[e,new Date]));for(let e of ne){let t=i[e].card.due,n=De(e);a[n]=t}return a}function De(t){return e.r[t]}function Oe(t){return e.i[t]}function C(e,t){return{...t,due:e.due,stability:e.stability,difficulty:e.difficulty,elapsedDays:e.elapsed_days,scheduledDays:e.scheduled_days,reps:e.reps,lapses:e.lapses,state:Oe(e.state),lastReview:e.last_review??null}}function ke(t){let n=e.r.indexOf(t);if(n===-1)throw Error(`Invalid rating: ${t}`);return n}function Ae(t,n){let r=x();return{id:``,due:null,stability:r.stability,difficulty:r.difficulty,elapsedDays:r.elapsed_days,scheduledDays:r.scheduled_days,reps:r.reps,lapses:r.lapses,state:e.n.New,lastReview:r.last_review??null,userDeckStudyId:t,cardId:n}}function je(e,t){return t<=0?0:(1+i*e/t)**-r}function Me(e,t){return je(e,t)*100}var Ne=Symbol.for(`immer-nothing`),Pe=Symbol.for(`immer-draftable`),w=Symbol.for(`immer-state`),Fe=process.env.NODE_ENV===`production`?[]:[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function T(e,...t){if(process.env.NODE_ENV!==`production`){let n=Fe[e],r=typeof n==`function`?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}throw Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var E=Object.getPrototypeOf;function D(e){return!!e&&!!e[w]}function O(e){return e?k(e)||Array.isArray(e)||!!e[Pe]||!!e.constructor?.[Pe]||N(e)||P(e):!1}var Ie=Object.prototype.constructor.toString(),Le=new WeakMap;function k(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;let n=Object.hasOwnProperty.call(t,`constructor`)&&t.constructor;if(n===Object)return!0;if(typeof n!=`function`)return!1;let r=Le.get(n);return r===void 0&&(r=Function.toString.call(n),Le.set(n,r)),r===Ie}function A(e,t,n=!0){j(e)===0?(n?Reflect.ownKeys(e):Object.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function j(e){let t=e[w];return t?t.type_:Array.isArray(e)?1:N(e)?2:P(e)?3:0}function M(e,t){return j(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Re(e,t,n){let r=j(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function ze(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}function N(e){return e instanceof Map}function P(e){return e instanceof Set}function F(e){return e.copy_||e.base_}function I(e,t){if(N(e))return new Map(e);if(P(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);let n=k(e);if(t===!0||t===`class_only`&&!n){let t=Object.getOwnPropertyDescriptors(e);delete t[w];let n=Reflect.ownKeys(t);for(let r=0;r<n.length;r++){let i=n[r],a=t[i];a.writable===!1&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(t[i]={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[i]})}return Object.create(E(e),t)}else{let t=E(e);return t!==null&&n?{...e}:Object.assign(Object.create(t),e)}}function L(e,t=!1){return z(e)||D(e)||!O(e)?e:(j(e)>1&&Object.defineProperties(e,{set:R,add:R,clear:R,delete:R}),Object.freeze(e),t&&Object.values(e).forEach(e=>L(e,!0)),e)}function Be(){T(2)}var R={value:Be};function z(e){return typeof e!=`object`||!e?!0:Object.isFrozen(e)}var Ve={};function B(e){let t=Ve[e];return t||T(0,e),t}var V;function He(){return V}function Ue(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function We(e,t){t&&(B(`Patches`),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function H(e){U(e),e.drafts_.forEach(Ke),e.drafts_=null}function U(e){e===V&&(V=e.parent_)}function Ge(e){return V=Ue(V,e)}function Ke(e){let t=e[w];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function qe(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];return e!==void 0&&e!==n?(n[w].modified_&&(H(t),T(4)),O(e)&&(e=W(t,e),t.parent_||G(t,e)),t.patches_&&B(`Patches`).generateReplacementPatches_(n[w].base_,e,t.patches_,t.inversePatches_)):e=W(t,n,[]),H(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===Ne?void 0:e}function W(e,t,n){if(z(t))return t;let r=e.immer_.shouldUseStrictIteration(),i=t[w];if(!i)return A(t,(r,a)=>Je(e,i,t,r,a,n),r),t;if(i.scope_!==e)return t;if(!i.modified_)return G(e,i.base_,!0),i.base_;if(!i.finalized_){i.finalized_=!0,i.scope_.unfinalizedDrafts_--;let t=i.copy_,a=t,o=!1;i.type_===3&&(a=new Set(t),t.clear(),o=!0),A(a,(r,a)=>Je(e,i,t,r,a,n,o),r),G(e,t,!1),n&&e.patches_&&B(`Patches`).generatePatches_(i,n,e.patches_,e.inversePatches_)}return i.copy_}function Je(e,t,n,r,i,a,o){if(i==null||typeof i!=`object`&&!o)return;let s=z(i);if(!(s&&!o)){if(process.env.NODE_ENV!==`production`&&i===n&&T(5),D(i)){let o=W(e,i,a&&t&&t.type_!==3&&!M(t.assigned_,r)?a.concat(r):void 0);if(Re(n,r,o),D(o))e.canAutoFreeze_=!1;else return}else o&&n.add(i);if(O(i)&&!s){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[r]===i&&s)return;W(e,i),(!t||!t.scope_.parent_)&&typeof r!=`symbol`&&(N(n)?n.has(r):Object.prototype.propertyIsEnumerable.call(n,r))&&G(e,i)}}}function G(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&L(t,n)}function Ye(e,t){let n=Array.isArray(e),r={type_:+!!n,scope_:t?t.scope_:He(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1},i=r,a=K;n&&(i=[r],a=q);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,s}var K={get(e,t){if(t===w)return e;let n=F(e);if(!M(n,t))return Xe(e,n,t);let r=n[t];return e.finalized_||!O(r)?r:r===J(e.base_,t)?(X(e),e.copy_[t]=Z(r,e)):r},has(e,t){return t in F(e)},ownKeys(e){return Reflect.ownKeys(F(e))},set(e,t,n){let r=Ze(F(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=J(F(e),t),i=r?.[w];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(ze(n,r)&&(n!==void 0||M(e.base_,t)))return!0;X(e),Y(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_[t]=!0,!0)},deleteProperty(e,t){return J(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,X(e),Y(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=F(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.type_!==1||t!==`length`,enumerable:r.enumerable,value:n[t]}},defineProperty(){T(11)},getPrototypeOf(e){return E(e.base_)},setPrototypeOf(){T(12)}},q={};A(K,(e,t)=>{q[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),q.deleteProperty=function(e,t){return process.env.NODE_ENV!==`production`&&isNaN(parseInt(t))&&T(13),q.set.call(this,e,t,void 0)},q.set=function(e,t,n){return process.env.NODE_ENV!==`production`&&t!==`length`&&isNaN(parseInt(t))&&T(14),K.set.call(this,e[0],t,n,e[0])};function J(e,t){let n=e[w];return(n?F(n):e)[t]}function Xe(e,t,n){let r=Ze(t,n);return r?`value`in r?r.value:r.get?.call(e.draft_):void 0}function Ze(e,t){if(!(t in e))return;let n=E(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=E(n)}}function Y(e){e.modified_||(e.modified_=!0,e.parent_&&Y(e.parent_))}function X(e){e.copy_||=I(e.base_,e.scope_.immer_.useStrictShallowCopy_)}var Qe=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(e,t,n)=>{if(typeof e==`function`&&typeof t!=`function`){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}typeof t!=`function`&&T(6),n!==void 0&&typeof n!=`function`&&T(7);let r;if(O(e)){let i=Ge(this),a=Z(e,void 0),o=!0;try{r=t(a),o=!1}finally{o?H(i):U(i)}return We(i,n),qe(r,i)}else if(!e||typeof e!=`object`){if(r=t(e),r===void 0&&(r=e),r===Ne&&(r=void 0),this.autoFreeze_&&L(r,!0),n){let t=[],i=[];B(`Patches`).generateReplacementPatches_(e,r,t,i),n(t,i)}return r}else T(1,e)},this.produceWithPatches=(e,t)=>{if(typeof e==`function`)return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},typeof e?.autoFreeze==`boolean`&&this.setAutoFreeze(e.autoFreeze),typeof e?.useStrictShallowCopy==`boolean`&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),typeof e?.useStrictIteration==`boolean`&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){O(e)||T(8),D(e)&&(e=$e(e));let t=Ge(this),n=Z(e,void 0);return n[w].isManual_=!0,U(t),n}finishDraft(e,t){let n=e&&e[w];(!n||!n.isManual_)&&T(9);let{scope_:r}=n;return We(r,t),qe(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=B(`Patches`).applyPatches_;return D(e)?r(e,t):this.produce(e,e=>r(e,t))}};function Z(e,t){let n=N(e)?B(`MapSet`).proxyMap_(e,t):P(e)?B(`MapSet`).proxySet_(e,t):Ye(e,t);return(t?t.scope_:He()).drafts_.push(n),n}function $e(e){return D(e)||T(10,e),et(e)}function et(e){if(!O(e)||z(e))return e;let t=e[w],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=I(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=I(e,!0);return A(n,(e,t)=>{Re(n,e,et(t))},r),t&&(t.finalized_=!1),n}var tt=new Qe().produce;function nt(e,t){let n=e+t,r=0;for(let e=0;e<n.length;e++){let t=n.charCodeAt(e);r=(r<<5)-r+t,r|=0}return r}function rt(e,t){return(nt(e,t)>>>0)/4294967295}function it(e,t=new Set){if(e.reviewCards.length===0&&e.newCards.length===0)return;if(e.reviewCards.length===0)return Q(e.newCards,t)??e.newCards[0];if(e.newCards.length===0)return Q(e.reviewCards,t)??e.reviewCards[0];let n=Q(e.newCards,t),r=Q(e.reviewCards,t);if(!n)return r??e.newCards[0];if(!r)return n??e.reviewCards[0];let i=e.newCards.length,a=(.33+i/(i+e.reviewCards.length))/2;return rt(n.card.id,r.card.id)<a?n:r}function Q(e,t){return e.find(e=>!t.has(e.card.id))}function at(e,t){let n=$(e,t);return n?tt(e,e=>{st(e,n)}):e}function ot(e,n,r){let i=$(n,r);if(!i)return n;let{nextCard:a}=Te(i.cardReview,e,30),o=a.due&&(0,t.t.isSameDay)(a.due,new Date);return tt(n,e=>{st(e,i),o&&ct(e,{...i,cardReview:a})})}function st(e,t){t.cardReview.state===`New`?e.newCards=e.newCards.filter(e=>e.card.id!==t.card.id):e.reviewCards=e.reviewCards.filter(e=>e.card.id!==t.card.id),lt(e,t.cardReview.state,`decrease`)}function ct(e,t){if(t.cardReview.state===`New`){let n=e.newCards.findIndex(e=>e.cardReview.due&&t.cardReview.due&&e.cardReview.due>=t.cardReview.due||e.cardReview.difficulty>=t.cardReview.difficulty);n===-1?e.newCards.push(t):e.newCards.splice(n,0,t)}else{let n=ut(e,e.reviewCards);e.reviewCards.splice(n,0,t)}lt(e,t.cardReview.state,`increase`)}function lt(e,t,n){let r=n===`increase`?1:-1;switch(t){case`New`:e.stats.new+=r;break;case`Learning`:case`Relearning`:e.stats.learning+=r;break;case`Review`:e.stats.review+=r;break;default:e.stats.new+=r;break}e.stats.total+=r}function $(e,t){return e.newCards.find(e=>e.card.id===t)??e.reviewCards.find(e=>e.card.id===t)}function ut(e,t){if(t.length===0)return 0;let n=Math.max(4,Math.floor(t.length/3));return Math.min(n,t.length)}var dt=5,ft={newCards:[],reviewCards:[],stats:{new:0,learning:0,review:0,total:0}},pt=class{recentlyReviewed=new Set;reviewHistory=[];_reviewsCompleted=0;_correctGrades=0;getProgress(){return{reviewsCompleted:this._reviewsCompleted,correctGrades:this._correctGrades}}nextCard(e){return it(e,this.recentlyReviewed)}onRate(e,t){if(this.reviewHistory.push({cardId:e,rating:t}),this.recentlyReviewed.add(e),this.recentlyReviewed.size>5){let e=this.recentlyReviewed.values().next().value;typeof e==`string`&&this.recentlyReviewed.delete(e)}return this._reviewsCompleted++,(t===`Good`||t===`Easy`)&&this._correctGrades++,this.getProgress()}undoRate(e,t){let n=this.reviewHistory.at(-1);return!n||n.cardId!==e||n.rating!==t?this.getProgress():(this.reviewHistory=this.reviewHistory.slice(0,-1),this.rebuildStateFromHistory(),this.getProgress())}rebuildStateFromHistory(){this.recentlyReviewed=new Set,this._reviewsCompleted=0,this._correctGrades=0;for(let e of this.reviewHistory){if(this.recentlyReviewed.add(e.cardId),this.recentlyReviewed.size>5){let e=this.recentlyReviewed.values().next().value;typeof e==`string`&&this.recentlyReviewed.delete(e)}this._reviewsCompleted++,(e.rating===`Good`||e.rating===`Easy`)&&this._correctGrades++}}};exports.FSRS_RETENTION=n,exports.FSRS_RETENTION_FACTOR=i,exports.FSRS_RETRIEVABILITY_DECAY=r,exports.FlashcardSessionManager=pt,exports.LEARNING_SETTINGS_LIMITS=o,exports.MAX_CARDS_TO_FETCH=a,exports.RECENTLY_REVIEWED_SET_SIZE=dt,exports.THRESHOLD_CARDS_FOR_REFETCH=s,exports.calculateRetentionPercentage=Me,exports.calculateRetrievability=je,exports.defaultSessionData=ft,exports.getNextCardFromSession=it,exports.getReviewDateForEachRating=Ee,exports.getSessionCard=$,exports.gradeCard=Te,exports.isRecommendedLearningSettings=c,exports.mergeFsrsCard=C,exports.newCardReview=Ae,exports.removeCardFromSessionData=ot,exports.skipCardFromSessionData=at;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { Card } from 'ts-fsrs';
|
|
2
2
|
|
|
3
|
+
export declare function calculateRetentionPercentage(elapsedDays: number, stability: number): number;
|
|
4
|
+
|
|
5
|
+
export declare function calculateRetrievability(elapsedDays: number, stability: number): number;
|
|
6
|
+
|
|
3
7
|
export declare const defaultSessionData: ISessionData;
|
|
4
8
|
|
|
5
9
|
/**
|
|
@@ -13,15 +17,22 @@ export declare const defaultSessionData: ISessionData;
|
|
|
13
17
|
*/
|
|
14
18
|
export declare class FlashcardSessionManager {
|
|
15
19
|
private recentlyReviewed;
|
|
20
|
+
private reviewHistory;
|
|
16
21
|
private _reviewsCompleted;
|
|
17
22
|
private _correctGrades;
|
|
18
23
|
getProgress(): SessionProgress;
|
|
19
24
|
nextCard(data: ISessionData): ISessionCard | undefined;
|
|
20
25
|
onRate(cardId: string, rating: ReviewRating): SessionProgress;
|
|
26
|
+
undoRate(cardId: string, rating: ReviewRating): SessionProgress;
|
|
27
|
+
private rebuildStateFromHistory;
|
|
21
28
|
}
|
|
22
29
|
|
|
23
30
|
export declare const FSRS_RETENTION = 0.9;
|
|
24
31
|
|
|
32
|
+
export declare const FSRS_RETENTION_FACTOR: number;
|
|
33
|
+
|
|
34
|
+
export declare const FSRS_RETRIEVABILITY_DECAY = 0.1542;
|
|
35
|
+
|
|
25
36
|
export declare function getNextCardFromSession(data: ISessionData, recentlyReviewed?: Set<string>): ISessionCard | undefined;
|
|
26
37
|
|
|
27
38
|
/**
|
|
@@ -97,6 +108,8 @@ declare interface ISessionData {
|
|
|
97
108
|
stats: IStudyStats;
|
|
98
109
|
}
|
|
99
110
|
|
|
111
|
+
export declare const isRecommendedLearningSettings: (learnDailyLimit: number | null, newCardsPerDeckDailyLimit: number | null) => boolean;
|
|
112
|
+
|
|
100
113
|
declare interface IStudyStats {
|
|
101
114
|
review: number;
|
|
102
115
|
learning: number;
|
|
@@ -104,11 +117,22 @@ declare interface IStudyStats {
|
|
|
104
117
|
total: number;
|
|
105
118
|
}
|
|
106
119
|
|
|
107
|
-
export declare const
|
|
108
|
-
|
|
109
|
-
|
|
120
|
+
export declare const LEARNING_SETTINGS_LIMITS: {
|
|
121
|
+
readonly learnDailyLimit: {
|
|
122
|
+
readonly recommended: 200;
|
|
123
|
+
readonly min: 100;
|
|
124
|
+
readonly max: 500;
|
|
125
|
+
readonly step: 50;
|
|
126
|
+
};
|
|
127
|
+
readonly newCardsPerDeckDailyLimit: {
|
|
128
|
+
readonly recommended: 10;
|
|
129
|
+
readonly min: 1;
|
|
130
|
+
readonly max: 50;
|
|
131
|
+
readonly step: 5;
|
|
132
|
+
};
|
|
133
|
+
};
|
|
110
134
|
|
|
111
|
-
export declare const
|
|
135
|
+
export declare const MAX_CARDS_TO_FETCH = 50;
|
|
112
136
|
|
|
113
137
|
export declare function mergeFsrsCard(fsrsCard: Card, card: ICardReview): ICardReview;
|
|
114
138
|
|