moneyfunx 3.0.4 → 3.0.8
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/build/index.d.ts +64 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +27 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/{src/lib → lib}/debt/loan.d.ts +1 -1
- package/build/lib/debt/loan.d.ts.map +1 -0
- package/build/{src/lib → lib}/debt/loan.js +2 -2
- package/build/lib/debt/paymentTypes.d.ts.map +1 -0
- package/build/{src/lib → lib}/debt/payments.d.ts +2 -2
- package/build/lib/debt/payments.d.ts.map +1 -0
- package/build/{src/lib → lib}/debt/payments.js +1 -1
- package/build/lib/errors.d.ts.map +1 -0
- package/build/lib/investment/contributionTypes.d.ts.map +1 -0
- package/build/{src/lib → lib}/investment/contributions.d.ts +2 -2
- package/build/lib/investment/contributions.d.ts.map +1 -0
- package/build/{src/lib → lib}/investment/instrument.d.ts +1 -1
- package/build/lib/investment/instrument.d.ts.map +1 -0
- package/build/{src/lib → lib}/investment/instrument.js +2 -2
- package/build/{src/lib → lib}/investment/strategies.d.ts +2 -2
- package/build/lib/investment/strategies.d.ts.map +1 -0
- package/build/{src/lib → lib}/investment/strategies.js +2 -2
- package/build/lib/investment/withdrawalTypes.d.ts.map +1 -0
- package/build/{src/lib → lib}/investment/withdrawals.d.ts +2 -2
- package/build/lib/investment/withdrawals.d.ts.map +1 -0
- package/build/{src/lib → lib}/investment/withdrawals.js +2 -2
- package/build/lib/shared/primitives.d.ts.map +1 -0
- package/build/lib/shared/sorting.d.ts.map +1 -0
- package/package.json +3 -3
- package/build/src/index.d.ts +0 -18
- package/build/src/index.d.ts.map +0 -1
- package/build/src/index.js +0 -14
- package/build/src/lib/constants.d.ts.map +0 -1
- package/build/src/lib/debt/loan.d.ts.map +0 -1
- package/build/src/lib/debt/paymentTypes.d.ts.map +0 -1
- package/build/src/lib/debt/payments.d.ts.map +0 -1
- package/build/src/lib/errors.d.ts.map +0 -1
- package/build/src/lib/investment/contributionTypes.d.ts.map +0 -1
- package/build/src/lib/investment/contributions.d.ts.map +0 -1
- package/build/src/lib/investment/instrument.d.ts.map +0 -1
- package/build/src/lib/investment/strategies.d.ts.map +0 -1
- package/build/src/lib/investment/withdrawalTypes.d.ts.map +0 -1
- package/build/src/lib/investment/withdrawals.d.ts.map +0 -1
- package/build/src/lib/shared/primitives.d.ts.map +0 -1
- package/build/src/lib/shared/sorting.d.ts.map +0 -1
- package/build/tests/debt/loan.test.d.ts +0 -2
- package/build/tests/debt/loan.test.d.ts.map +0 -1
- package/build/tests/debt/loan.test.js +0 -87
- package/build/tests/debt/payments.test.d.ts +0 -2
- package/build/tests/debt/payments.test.d.ts.map +0 -1
- package/build/tests/debt/payments.test.js +0 -91
- package/build/tests/debt/sorting.test.d.ts +0 -2
- package/build/tests/debt/sorting.test.d.ts.map +0 -1
- package/build/tests/debt/sorting.test.js +0 -43
- package/build/tests/index.test.d.ts +0 -2
- package/build/tests/index.test.d.ts.map +0 -1
- package/build/tests/index.test.js +0 -66
- package/build/tests/investment/contributions.test.d.ts +0 -2
- package/build/tests/investment/contributions.test.d.ts.map +0 -1
- package/build/tests/investment/contributions.test.js +0 -113
- package/build/tests/investment/instrument.test.d.ts +0 -2
- package/build/tests/investment/instrument.test.d.ts.map +0 -1
- package/build/tests/investment/instrument.test.js +0 -57
- package/build/tests/investment/strategies.test.d.ts +0 -2
- package/build/tests/investment/strategies.test.d.ts.map +0 -1
- package/build/tests/investment/strategies.test.js +0 -15
- package/build/tests/investment/withdrawals.test.d.ts +0 -2
- package/build/tests/investment/withdrawals.test.d.ts.map +0 -1
- package/build/tests/investment/withdrawals.test.js +0 -66
- package/build/tests/shared/primitives.test.d.ts +0 -2
- package/build/tests/shared/primitives.test.d.ts.map +0 -1
- package/build/tests/shared/primitives.test.js +0 -76
- /package/build/{src/lib → lib}/constants.d.ts +0 -0
- /package/build/{src/lib → lib}/constants.js +0 -0
- /package/build/{src/lib → lib}/debt/paymentTypes.d.ts +0 -0
- /package/build/{src/lib → lib}/debt/paymentTypes.js +0 -0
- /package/build/{src/lib → lib}/errors.d.ts +0 -0
- /package/build/{src/lib → lib}/errors.js +0 -0
- /package/build/{src/lib → lib}/investment/contributionTypes.d.ts +0 -0
- /package/build/{src/lib → lib}/investment/contributionTypes.js +0 -0
- /package/build/{src/lib → lib}/investment/contributions.js +0 -0
- /package/build/{src/lib → lib}/investment/withdrawalTypes.d.ts +0 -0
- /package/build/{src/lib → lib}/investment/withdrawalTypes.js +0 -0
- /package/build/{src/lib → lib}/shared/primitives.d.ts +0 -0
- /package/build/{src/lib → lib}/shared/primitives.js +0 -0
- /package/build/{src/lib → lib}/shared/sorting.d.ts +0 -0
- /package/build/{src/lib → lib}/shared/sorting.js +0 -0
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Moneyfunx
|
|
3
|
+
* A library for financial calculations regarding debt and investments.
|
|
4
|
+
*/
|
|
5
|
+
import * as constants from './lib/constants.js';
|
|
6
|
+
import * as loan from './lib/debt/loan.js';
|
|
7
|
+
import * as payments from './lib/debt/payments.js';
|
|
8
|
+
import * as paymentTypes from './lib/debt/paymentTypes.js';
|
|
9
|
+
import * as errors from './lib/errors.js';
|
|
10
|
+
import * as contributions from './lib/investment/contributions.js';
|
|
11
|
+
import * as contributionTypes from './lib/investment/contributionTypes.js';
|
|
12
|
+
import * as instrument from './lib/investment/instrument.js';
|
|
13
|
+
import * as withdrawals from './lib/investment/withdrawals.js';
|
|
14
|
+
import * as withdrawalTypes from './lib/investment/withdrawalTypes.js';
|
|
15
|
+
import * as strategies from './lib/investment/strategies.js';
|
|
16
|
+
import * as primitives from './lib/shared/primitives.js';
|
|
17
|
+
import * as sorting from './lib/shared/sorting.js';
|
|
18
|
+
export { constants, loan, payments, paymentTypes, errors, contributions, contributionTypes, instrument, withdrawals, withdrawalTypes, strategies, primitives, sorting, };
|
|
19
|
+
/**
|
|
20
|
+
* Consolidated namespace for unambiguous access.
|
|
21
|
+
* @example
|
|
22
|
+
* import moneyfunx from 'moneyfunx';
|
|
23
|
+
* moneyfunx.loan.calculateMonthlyPayment(...);
|
|
24
|
+
*/
|
|
25
|
+
declare const moneyfunx: {
|
|
26
|
+
avalanche<T extends sorting.HasRateAndBalance>(obj1: T, obj2: T): number;
|
|
27
|
+
snowball<T_1 extends sorting.HasRateAndBalance>(obj1: T_1, obj2: T_1): number;
|
|
28
|
+
sortWith<T_2 extends sorting.HasRateAndBalance>(sortable: T_2[], sortFunction: (obj1: sorting.HasRateAndBalance, obj2: sorting.HasRateAndBalance) => number): T_2[];
|
|
29
|
+
/**
|
|
30
|
+
* Moneyfunx
|
|
31
|
+
* A library for financial calculations regarding debt and investments.
|
|
32
|
+
*/
|
|
33
|
+
calculatePeriodicAmount(startingBalance: number, periodicInterestRate: number, totalNumberOfPeriods: number): number;
|
|
34
|
+
calculateBalanceRemaining(initialBalance: number, periodicAmountApplied: number, periodicInterestRate: number, periodsElapsed: number): number;
|
|
35
|
+
calculatePeriodsToZero(currentBalance: number, periodicAmountApplied: number, periodicInterestRate: number): number;
|
|
36
|
+
calculateInterestOverPeriods(initialBalance: number, periodicAmountApplied: number, periodicInterestRate: number, periodsElapsed: number): number;
|
|
37
|
+
performWaterfallDrawdown(financialInstruments: instrument.Instrument[], targetNetPeriodicIncome: number, totalPeriodsToSimulate: number, effectiveTaxRate?: number): withdrawalTypes.InstrumentsWithdrawalSchedule;
|
|
38
|
+
calculateAmortizedWithdrawal(instrument: instrument.Instrument, currentInstrumentBalance: number, periodicWithdrawalAmount: number, periodsElapsedOffset?: number, applicableTaxRate?: number, accrueBeforeWithdrawal?: boolean): withdrawalTypes.WithdrawalRecord;
|
|
39
|
+
drawdownInstruments(instruments: instrument.Instrument[], targetNetPeriodicIncome: number, totalPeriodsToSimulate: number, effectiveTaxRate?: number, accrueBeforeWithdrawal?: boolean): withdrawalTypes.InstrumentsWithdrawalSchedule;
|
|
40
|
+
Instrument: typeof instrument.Instrument;
|
|
41
|
+
determineExtraContribution(instruments: instrument.Instrument[], contribution: number): number;
|
|
42
|
+
amortizeContribution(instrument: instrument.Instrument, currentBalance: number, contribution: number, startPeriod?: number, accrueBeforeContribution?: boolean): contributionTypes.ContributionRecord;
|
|
43
|
+
amortizeContributions(instrument: instrument.Instrument, initialBalance: number, contribution: number, numContributions: number, startPeriod?: number, accrueBeforeContribution?: boolean): contributionTypes.ContributionRecord[];
|
|
44
|
+
contributeInstruments(instruments: instrument.Instrument[], contribution: number, numContributions: number, accrueBeforeContribution?: boolean): contributionTypes.InstrumentsContributionSchedule;
|
|
45
|
+
/**
|
|
46
|
+
* Moneyfunx
|
|
47
|
+
* A library for financial calculations regarding debt and investments.
|
|
48
|
+
*/
|
|
49
|
+
PaymentTooLowError: typeof errors.PaymentTooLowError;
|
|
50
|
+
NegativeContributionError: typeof errors.NegativeContributionError;
|
|
51
|
+
NegativeWithdrawalError: typeof errors.NegativeWithdrawalError;
|
|
52
|
+
determineExtraPayment(loans: loan.ILoan[], payment: number): number;
|
|
53
|
+
determineCarryover(loan: loan.Loan, loanPayment: number, loanFinalPayment: number, reduceMinimum: boolean): number;
|
|
54
|
+
amortizePayments(loan: loan.Loan, principal: number, payment: number | null, numPayments: number | null, startPeriod?: number, carryover?: number): paymentTypes.PaymentRecord[];
|
|
55
|
+
payLoans(loans: loan.Loan[], payment: number, reduceMinimum?: boolean): paymentTypes.LoansPaymentSchedule;
|
|
56
|
+
Loan: typeof loan.Loan;
|
|
57
|
+
TOTALS: "totals";
|
|
58
|
+
MAX_DURATION_YEARS: 110;
|
|
59
|
+
MAX_YIELD_FACTOR: 1.4;
|
|
60
|
+
MIN_GROWTH_FACTOR: 1;
|
|
61
|
+
MIN_YIELD_FACTOR: 0.45;
|
|
62
|
+
};
|
|
63
|
+
export default moneyfunx;
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,iBAAiB,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,WAAW,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,eAAe,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AAGnD,OAAO,EACL,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,OAAO,GACR,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,SAAS;;;;IA1Cf;;;OAGG;;;;;;;;;;;;;IAHH;;;OAGG;;;;;;;;;;;;;;CAqDF,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Moneyfunx
|
|
3
|
+
* A library for financial calculations regarding debt and investments.
|
|
4
|
+
*/
|
|
5
|
+
import * as constants from './lib/constants.js';
|
|
6
|
+
import * as loan from './lib/debt/loan.js';
|
|
7
|
+
import * as payments from './lib/debt/payments.js';
|
|
8
|
+
import * as paymentTypes from './lib/debt/paymentTypes.js';
|
|
9
|
+
import * as errors from './lib/errors.js';
|
|
10
|
+
import * as contributions from './lib/investment/contributions.js';
|
|
11
|
+
import * as contributionTypes from './lib/investment/contributionTypes.js';
|
|
12
|
+
import * as instrument from './lib/investment/instrument.js';
|
|
13
|
+
import * as withdrawals from './lib/investment/withdrawals.js';
|
|
14
|
+
import * as withdrawalTypes from './lib/investment/withdrawalTypes.js';
|
|
15
|
+
import * as strategies from './lib/investment/strategies.js';
|
|
16
|
+
import * as primitives from './lib/shared/primitives.js';
|
|
17
|
+
import * as sorting from './lib/shared/sorting.js';
|
|
18
|
+
// Named exports for granular access
|
|
19
|
+
export { constants, loan, payments, paymentTypes, errors, contributions, contributionTypes, instrument, withdrawals, withdrawalTypes, strategies, primitives, sorting, };
|
|
20
|
+
/**
|
|
21
|
+
* Consolidated namespace for unambiguous access.
|
|
22
|
+
* @example
|
|
23
|
+
* import moneyfunx from 'moneyfunx';
|
|
24
|
+
* moneyfunx.loan.calculateMonthlyPayment(...);
|
|
25
|
+
*/
|
|
26
|
+
const moneyfunx = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, constants), loan), payments), paymentTypes), errors), contributions), contributionTypes), instrument), withdrawals), withdrawalTypes), strategies), primitives), sorting);
|
|
27
|
+
export default moneyfunx;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,gBAAgB,OAAO,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Represents a financial loan and provides methods for amortization and
|
|
3
3
|
* interest calculations.
|
|
4
4
|
*/
|
|
5
|
-
import { HasRateAndBalance } from '../shared/sorting';
|
|
5
|
+
import { HasRateAndBalance } from '../shared/sorting.js';
|
|
6
6
|
export interface ILoan extends HasRateAndBalance {
|
|
7
7
|
id: string;
|
|
8
8
|
name: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loan.d.ts","sourceRoot":"","sources":["../../../src/lib/debt/loan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,KAAM,SAAQ,iBAAiB;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,IAAK,YAAW,KAAK;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;OASG;gBAED,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,MAAM;IAef;;;;;;OAMG;IACH,eAAe,CAAC,aAAa,GAAE,MAAwB,GAAG,MAAM;IAYhE;;;OAGG;IACH,mBAAmB,IAAI,MAAM;IAQ7B;;;;;OAKG;IACH,cAAc,CAAC,aAAa,GAAE,MAA4B,GAAG,MAAM;IAInE;;;;;;OAMG;IACH,iBAAiB,CACf,aAAa,GAAE,MAAwB,EACvC,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAST;;;;;;;OAOG;IACH,kBAAkB,CAChB,cAAc,EAAE,MAAM,EACtB,aAAa,GAAE,MAAwB,EACvC,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAcT;;;;;;;OAOG;IACH,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,aAAa,GAAE,MAAwB,EACvC,aAAa,GAAE,MAA4B,GAC1C,MAAM;CAyBV"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Represents a financial loan and provides methods for amortization and
|
|
3
3
|
* interest calculations.
|
|
4
4
|
*/
|
|
5
|
-
import * as errors from '../errors';
|
|
6
|
-
import * as primitives from '../shared/primitives';
|
|
5
|
+
import * as errors from '../errors.js';
|
|
6
|
+
import * as primitives from '../shared/primitives.js';
|
|
7
7
|
export class Loan {
|
|
8
8
|
/**
|
|
9
9
|
* @constructor
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymentTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/debt/paymentTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,aAAa,EAAE,CAAC;CACvC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* This file contains functions for computing detailed information on paying loans
|
|
4
4
|
*
|
|
5
5
|
*/
|
|
6
|
-
import type { ILoan, Loan } from '../debt/loan';
|
|
7
|
-
import type { PaymentRecord, LoansPaymentSchedule } from '../debt/paymentTypes';
|
|
6
|
+
import type { ILoan, Loan } from '../debt/loan.js';
|
|
7
|
+
import type { PaymentRecord, LoansPaymentSchedule } from '../debt/paymentTypes.js';
|
|
8
8
|
/**
|
|
9
9
|
*
|
|
10
10
|
* Calculates the extra amount in a payment after all loans' minimum payments are met
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../../src/lib/debt/payments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,EAEb,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,EAAE,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAYR;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,OAAO,GACrB,MAAM,CAOR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAC,IAAI,EACpB,WAAW,EAAE,MAAM,GAAC,IAAI,EACxB,WAAW,GAAE,MAAU,EACvB,SAAS,GAAE,MAAU,GACpB,aAAa,EAAE,CA+BjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,OAAe,GAC7B,oBAAoB,CAqItB"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* This file contains functions for computing detailed information on paying loans
|
|
4
4
|
*
|
|
5
5
|
*/
|
|
6
|
-
import * as errors from '../errors';
|
|
6
|
+
import * as errors from '../errors.js';
|
|
7
7
|
/**
|
|
8
8
|
*
|
|
9
9
|
* Calculates the extra amount in a payment after all loans' minimum payments are met
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAK5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contributionTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/investment/contributionTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,kBAAkB,EAAE,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAEnF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* This file containts functions for computing detailed information on contributing to investments
|
|
4
4
|
*
|
|
5
5
|
*/
|
|
6
|
-
import type { Instrument } from '../investment/instrument';
|
|
7
|
-
import { ContributionRecord, InstrumentsContributionSchedule } from '../investment/contributionTypes';
|
|
6
|
+
import type { Instrument } from '../investment/instrument.js';
|
|
7
|
+
import { ContributionRecord, InstrumentsContributionSchedule } from '../investment/contributionTypes.js';
|
|
8
8
|
/**
|
|
9
9
|
*
|
|
10
10
|
* @param {IInstrument[]} instruments The instruments to allocate maximum contributions
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../../../src/lib/investment/contributions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAGhC,MAAM,oCAAoC,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,UAAU,EAAE,EACzB,YAAY,EAAE,MAAM,GACnB,MAAM,CAMR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAU,EACvB,wBAAwB,GAAE,OAAc,GACvC,kBAAkB,CAgBpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,WAAW,GAAE,MAAU,EACvB,wBAAwB,GAAE,OAAc,GACvC,kBAAkB,EAAE,CAkBtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,UAAU,EAAE,EACzB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,wBAAwB,GAAE,OAAc,GACvC,+BAA+B,CA6FjC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Represents a financial instrument for investments and drawdowns.
|
|
3
3
|
*/
|
|
4
|
-
import { HasRateAndBalance } from '../shared/sorting';
|
|
4
|
+
import { HasRateAndBalance } from '../shared/sorting.js';
|
|
5
5
|
export interface IInstrument extends HasRateAndBalance {
|
|
6
6
|
id: string;
|
|
7
7
|
name: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../../src/lib/investment/instrument.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;;OAOG;gBAED,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,MAAU;IAWzB;;;;;;;OAOG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,GAAG,MAAM;IAmBlF;;;;;;OAMG;IACH,oBAAoB,CAClB,wBAAwB,EAAE,MAAM,EAChC,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAQT;;;;;;OAMG;IACH,sBAAsB,CACpB,sBAAsB,EAAE,MAAM,EAC9B,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAQT;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;;;;OAKG;IACH,cAAc,CAAC,aAAa,GAAE,MAA4B,GAAG,MAAM;CAGpE"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Represents a financial instrument for investments and drawdowns.
|
|
3
3
|
*/
|
|
4
|
-
import * as errors from '../errors';
|
|
5
|
-
import * as primitives from '../shared/primitives';
|
|
4
|
+
import * as errors from '../errors.js';
|
|
5
|
+
import * as primitives from '../shared/primitives.js';
|
|
6
6
|
export class Instrument {
|
|
7
7
|
/**
|
|
8
8
|
* @constructor
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This file contains high-level drawdown strategies for investment portfolios.
|
|
3
3
|
*/
|
|
4
|
-
import { Instrument } from '../investment/instrument';
|
|
5
|
-
import { InstrumentsWithdrawalSchedule } from '../investment/withdrawalTypes';
|
|
4
|
+
import { Instrument } from '../investment/instrument.js';
|
|
5
|
+
import { InstrumentsWithdrawalSchedule } from '../investment/withdrawalTypes.js';
|
|
6
6
|
/**
|
|
7
7
|
* Executes a 'Waterfall' drawdown strategy.
|
|
8
8
|
* Funds are pulled from instruments in the order they appear in the array.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../../../src/lib/investment/strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EACL,6BAA6B,EAE9B,MAAM,kCAAkC,CAAC;AAG1C;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,UAAU,EAAE,EAClC,uBAAuB,EAAE,MAAM,EAC/B,sBAAsB,EAAE,MAAM,EAC9B,gBAAgB,GAAE,MAAU,GAC3B,6BAA6B,CAsE/B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This file contains high-level drawdown strategies for investment portfolios.
|
|
3
3
|
*/
|
|
4
|
-
import { calculateAmortizedWithdrawal } from '../investment/withdrawals';
|
|
5
|
-
import { TOTALS } from '../constants';
|
|
4
|
+
import { calculateAmortizedWithdrawal } from '../investment/withdrawals.js';
|
|
5
|
+
import { TOTALS } from '../constants.js';
|
|
6
6
|
/**
|
|
7
7
|
* Executes a 'Waterfall' drawdown strategy.
|
|
8
8
|
* Funds are pulled from instruments in the order they appear in the array.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawalTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/investment/withdrawalTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG;IAC/E,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* This file contains functions for computing detailed information on drawing
|
|
3
3
|
* down investment instruments during retirement distribution.
|
|
4
4
|
*/
|
|
5
|
-
import { Instrument } from '../investment/instrument';
|
|
6
|
-
import { WithdrawalRecord, InstrumentsWithdrawalSchedule } from '../investment/withdrawalTypes';
|
|
5
|
+
import { Instrument } from '../investment/instrument.js';
|
|
6
|
+
import { WithdrawalRecord, InstrumentsWithdrawalSchedule } from '../investment/withdrawalTypes.js';
|
|
7
7
|
/**
|
|
8
8
|
* Calculates a single period's withdrawal record.
|
|
9
9
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawals.d.ts","sourceRoot":"","sources":["../../../src/lib/investment/withdrawals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAE9B,MAAM,kCAAkC,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,MAAM,EAChC,wBAAwB,EAAE,MAAM,EAChC,oBAAoB,GAAE,MAAU,EAChC,iBAAiB,GAAE,MAAU,EAC7B,sBAAsB,GAAE,OAAc,GACrC,gBAAgB,CAqClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,EAAE,EACzB,uBAAuB,EAAE,MAAM,EAC/B,sBAAsB,EAAE,MAAM,EAC9B,gBAAgB,GAAE,MAAU,EAC5B,sBAAsB,GAAE,OAAc,GACrC,6BAA6B,CAsE/B"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* This file contains functions for computing detailed information on drawing
|
|
3
3
|
* down investment instruments during retirement distribution.
|
|
4
4
|
*/
|
|
5
|
-
import { TOTALS } from '../constants';
|
|
6
|
-
import * as errors from '../errors';
|
|
5
|
+
import { TOTALS } from '../constants.js';
|
|
6
|
+
import * as errors from '../errors.js';
|
|
7
7
|
/**
|
|
8
8
|
* Calculates a single period's withdrawal record.
|
|
9
9
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/lib/shared/primitives.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,EAC5B,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,EAC7B,oBAAoB,EAAE,MAAM,EAC5B,cAAc,EAAE,MAAM,GACrB,MAAM,CAWR;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,EAC7B,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAKR;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,EAC7B,oBAAoB,EAAE,MAAM,EAC5B,cAAc,EAAE,MAAM,GACrB,MAAM,CAYR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorting.d.ts","sourceRoot":"","sources":["../../../src/lib/shared/sorting.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;CAAE,CAAC;AAEhF,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,KAAK,MAAM,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAE/E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAE9E;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,iBAAiB,EAClD,QAAQ,EAAE,CAAC,EAAE,EACb,YAAY,EAAE,YAAY,GACzB,CAAC,EAAE,CAEL"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "moneyfunx",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.8",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"main": "./build/index.js",
|
|
6
|
-
"types": "./build/index.d.ts",
|
|
7
5
|
"exports": {
|
|
8
6
|
".": {
|
|
9
7
|
"types": "./build/index.d.ts",
|
|
10
8
|
"import": "./build/index.js"
|
|
11
9
|
}
|
|
12
10
|
},
|
|
11
|
+
"module": "./build/index.js",
|
|
12
|
+
"types": "./build/index.d.ts",
|
|
13
13
|
"files": [
|
|
14
14
|
"build"
|
|
15
15
|
],
|
package/build/src/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MoneyFunx
|
|
3
|
-
* * mek it funx up
|
|
4
|
-
*/
|
|
5
|
-
export { MAX_DURATION_YEARS, TOTALS, } from './lib/constants';
|
|
6
|
-
export { ILoan, Loan } from './lib/debt/loan';
|
|
7
|
-
export { determineExtraPayment, amortizePayments, payLoans, } from './lib/debt/payments';
|
|
8
|
-
export { PaymentRecord, LoansPaymentSchedule, LoanPrincipals, PaymentSchedule, } from './lib/debt/paymentTypes';
|
|
9
|
-
export { NegativeContributionError, PaymentTooLowError, NegativeWithdrawalError } from './lib/errors';
|
|
10
|
-
export { amortizeContributions, contributeInstruments, determineExtraContribution, } from './lib/investment/contributions';
|
|
11
|
-
export { ContributionRecord, ContributionSchedule, InstrumentsContributionSchedule, } from './lib/investment/contributionTypes';
|
|
12
|
-
export { IInstrument, Instrument } from './lib/investment/instrument';
|
|
13
|
-
export { calculateAmortizedWithdrawal, drawdownInstruments, } from './lib/investment/withdrawals';
|
|
14
|
-
export { WithdrawalRecord, WithdrawalSchedule, InstrumentsWithdrawalSchedule, } from './lib/investment/withdrawalTypes';
|
|
15
|
-
export { performWaterfallDrawdown, } from './lib/investment/strategies';
|
|
16
|
-
export { calculatePeriodicAmount, calculateBalanceRemaining, calculatePeriodsToZero, calculateInterestOverPeriods, } from './lib/shared/primitives';
|
|
17
|
-
export { HasRateAndBalance, snowball, avalanche, sortWith } from './lib/shared/sorting';
|
|
18
|
-
//# sourceMappingURL=index.d.ts.map
|
package/build/src/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,kBAAkB,EAClB,MAAM,GACP,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEtG,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
|
package/build/src/index.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MoneyFunx
|
|
3
|
-
* * mek it funx up
|
|
4
|
-
*/
|
|
5
|
-
export { MAX_DURATION_YEARS, TOTALS, } from './lib/constants';
|
|
6
|
-
export { Loan } from './lib/debt/loan';
|
|
7
|
-
export { determineExtraPayment, amortizePayments, payLoans, } from './lib/debt/payments';
|
|
8
|
-
export { NegativeContributionError, PaymentTooLowError, NegativeWithdrawalError } from './lib/errors';
|
|
9
|
-
export { amortizeContributions, contributeInstruments, determineExtraContribution, } from './lib/investment/contributions';
|
|
10
|
-
export { Instrument } from './lib/investment/instrument';
|
|
11
|
-
export { calculateAmortizedWithdrawal, drawdownInstruments, } from './lib/investment/withdrawals';
|
|
12
|
-
export { performWaterfallDrawdown, } from './lib/investment/strategies';
|
|
13
|
-
export { calculatePeriodicAmount, calculateBalanceRemaining, calculatePeriodsToZero, calculateInterestOverPeriods, } from './lib/shared/primitives';
|
|
14
|
-
export { snowball, avalanche, sortWith } from './lib/shared/sorting';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,gBAAgB,OAAO,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loan.d.ts","sourceRoot":"","sources":["../../../../src/lib/debt/loan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,KAAM,SAAQ,iBAAiB;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,IAAK,YAAW,KAAK;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;;;OASG;gBAED,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,MAAM;IAef;;;;;;OAMG;IACH,eAAe,CAAC,aAAa,GAAE,MAAwB,GAAG,MAAM;IAYhE;;;OAGG;IACH,mBAAmB,IAAI,MAAM;IAQ7B;;;;;OAKG;IACH,cAAc,CAAC,aAAa,GAAE,MAA4B,GAAG,MAAM;IAInE;;;;;;OAMG;IACH,iBAAiB,CACf,aAAa,GAAE,MAAwB,EACvC,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAST;;;;;;;OAOG;IACH,kBAAkB,CAChB,cAAc,EAAE,MAAM,EACtB,aAAa,GAAE,MAAwB,EACvC,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAcT;;;;;;;OAOG;IACH,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,aAAa,GAAE,MAAwB,EACvC,aAAa,GAAE,MAA4B,GAC1C,MAAM;CAyBV"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paymentTypes.d.ts","sourceRoot":"","sources":["../../../../src/lib/debt/paymentTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,aAAa,EAAE,CAAC;CACvC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../../../src/lib/debt/payments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,aAAa,EAEb,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,EAAE,EACd,OAAO,EAAE,MAAM,GACd,MAAM,CAYR;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,OAAO,GACrB,MAAM,CAOR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAC,IAAI,EACpB,WAAW,EAAE,MAAM,GAAC,IAAI,EACxB,WAAW,GAAE,MAAU,EACvB,SAAS,GAAE,MAAU,GACpB,aAAa,EAAE,CA+BjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,OAAe,GAC7B,oBAAoB,CAqItB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAK5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contributionTypes.d.ts","sourceRoot":"","sources":["../../../../src/lib/investment/contributionTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,kBAAkB,EAAE,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAEnF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../../../../src/lib/investment/contributions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAGhC,MAAM,iCAAiC,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,UAAU,EAAE,EACzB,YAAY,EAAE,MAAM,GACnB,MAAM,CAMR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAU,EACvB,wBAAwB,GAAE,OAAc,GACvC,kBAAkB,CAgBpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,WAAW,GAAE,MAAU,EACvB,wBAAwB,GAAE,OAAc,GACvC,kBAAkB,EAAE,CAkBtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,UAAU,EAAE,EACzB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,wBAAwB,GAAE,OAAc,GACvC,+BAA+B,CA6FjC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../../../src/lib/investment/instrument.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;;OAOG;gBAED,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,MAAU;IAWzB;;;;;;;OAOG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,GAAG,MAAM;IAmBlF;;;;;;OAMG;IACH,oBAAoB,CAClB,wBAAwB,EAAE,MAAM,EAChC,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAQT;;;;;;OAMG;IACH,sBAAsB,CACpB,sBAAsB,EAAE,MAAM,EAC9B,aAAa,GAAE,MAA4B,GAC1C,MAAM;IAQT;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;;;;OAKG;IACH,cAAc,CAAC,aAAa,GAAE,MAA4B,GAAG,MAAM;CAGpE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../../../../src/lib/investment/strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EACL,6BAA6B,EAE9B,MAAM,+BAA+B,CAAC;AAGvC;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,UAAU,EAAE,EAClC,uBAAuB,EAAE,MAAM,EAC/B,sBAAsB,EAAE,MAAM,EAC9B,gBAAgB,GAAE,MAAU,GAC3B,6BAA6B,CAsE/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawalTypes.d.ts","sourceRoot":"","sources":["../../../../src/lib/investment/withdrawalTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG;IAC/E,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawals.d.ts","sourceRoot":"","sources":["../../../../src/lib/investment/withdrawals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAE9B,MAAM,+BAA+B,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,MAAM,EAChC,wBAAwB,EAAE,MAAM,EAChC,oBAAoB,GAAE,MAAU,EAChC,iBAAiB,GAAE,MAAU,EAC7B,sBAAsB,GAAE,OAAc,GACrC,gBAAgB,CAqClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,EAAE,EACzB,uBAAuB,EAAE,MAAM,EAC/B,sBAAsB,EAAE,MAAM,EAC9B,gBAAgB,GAAE,MAAU,EAC5B,sBAAsB,GAAE,OAAc,GACrC,6BAA6B,CAsE/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../../src/lib/shared/primitives.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,EAC5B,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,EAC7B,oBAAoB,EAAE,MAAM,EAC5B,cAAc,EAAE,MAAM,GACrB,MAAM,CAWR;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,EAC7B,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAKR;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,EAC7B,oBAAoB,EAAE,MAAM,EAC5B,cAAc,EAAE,MAAM,GACrB,MAAM,CAYR"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sorting.d.ts","sourceRoot":"","sources":["../../../../src/lib/shared/sorting.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;CAAE,CAAC;AAEhF,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,KAAK,MAAM,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAE/E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAE9E;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,iBAAiB,EAClD,QAAQ,EAAE,CAAC,EAAE,EACb,YAAY,EAAE,YAAY,GACzB,CAAC,EAAE,CAEL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loan.test.d.ts","sourceRoot":"","sources":["../../../tests/debt/loan.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { describe, expect, it } from 'vitest';
|
|
11
|
-
import { Loan } from '@/lib/debt/loan';
|
|
12
|
-
const Loans = () => [
|
|
13
|
-
new Loan(7500, 0.068, 12, 10, 'Student Loan'),
|
|
14
|
-
new Loan(150000, 0.0622, 12, 15, 'Mortgage', 75000, 1000),
|
|
15
|
-
new Loan(18300, 0, 12, 4, 'Car'),
|
|
16
|
-
];
|
|
17
|
-
function expectPaymentTooLow(fn, min, val) {
|
|
18
|
-
expect(fn).toThrow(`payment of ${val} cannot be less than ${min}`);
|
|
19
|
-
}
|
|
20
|
-
describe('loan module', () => {
|
|
21
|
-
const [loan1, mortgage, zeroRateLoan] = Loans();
|
|
22
|
-
it('creates a Loan with proper attributes', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
-
expect(loan1.name).toBe('Student Loan');
|
|
24
|
-
expect(loan1.principal).toBe(7500);
|
|
25
|
-
expect(loan1.annualRate).toBe(0.068);
|
|
26
|
-
expect(loan1.periodicRate).toBeCloseTo(0.068 / 12);
|
|
27
|
-
expect(loan1.periods).toBe(120);
|
|
28
|
-
expect(loan1.minPayment).toBeCloseTo(86.310247, 5);
|
|
29
|
-
expect(loan1.currentBalance).toBe(7500);
|
|
30
|
-
expect(loan1.fees).toBe(0);
|
|
31
|
-
}));
|
|
32
|
-
it('creates a Loan with working methods', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
-
expect(loan1.numPaymentsToZero()).toBe(120);
|
|
34
|
-
expect(loan1.numPaymentsToZero(300)).toBe(28);
|
|
35
|
-
expectPaymentTooLow(() => loan1.numPaymentsToZero(30), loan1.minPayment, 30);
|
|
36
|
-
expect(loan1.validatePayment(100)).toBe(100);
|
|
37
|
-
expect(loan1.validatePayment()).toBeCloseTo(86.310247, 5);
|
|
38
|
-
expectPaymentTooLow(() => loan1.numPaymentsToZero(-160), loan1.minPayment, -160);
|
|
39
|
-
expect(loan1.principalRemaining(33)).toBeCloseTo(5915.168870, 5);
|
|
40
|
-
expect(loan1.principalRemaining(0)).toBe(7500);
|
|
41
|
-
expect(loan1.principalRemaining(8, 300)).toBeCloseTo(5398.676996, 5);
|
|
42
|
-
expect(loan1.principalRemaining(40, 500)).toBe(0);
|
|
43
|
-
expect(loan1.principalRemaining(3, 200, 3000)).toBeCloseTo(2447.883123, 5);
|
|
44
|
-
expect(() => {
|
|
45
|
-
loan1.principalRemaining(21, 40, 9000);
|
|
46
|
-
}).toThrow(`payment of 40 cannot be less than ${loan1.minPayment}`);
|
|
47
|
-
expect(loan1.interestPaid(0)).toBe(0);
|
|
48
|
-
expect(loan1.interestPaid(22)).toBeCloseTo(875.426397, 5);
|
|
49
|
-
expect(loan1.interestPaid(8, 300)).toBeCloseTo(298.676996, 5);
|
|
50
|
-
expect(loan1.interestPaid(50, 300)).toBeCloseTo(610.360992, 5);
|
|
51
|
-
expectPaymentTooLow(() => loan1.interestPaid(30, 10, 20000), loan1.minPayment, 10);
|
|
52
|
-
}));
|
|
53
|
-
it('creates a Loan with optional parameters and proper attributes', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
-
expect(mortgage.name).toBe('Mortgage');
|
|
55
|
-
expect(mortgage.principal).toBe(150000);
|
|
56
|
-
expect(mortgage.annualRate).toBe(0.0622);
|
|
57
|
-
expect(mortgage.periodicRate).toBeCloseTo(0.005183, 5);
|
|
58
|
-
expect(mortgage.periods).toBe(180);
|
|
59
|
-
expect(mortgage.minPayment).toBeCloseTo(1283.683005, 5);
|
|
60
|
-
expect(mortgage.currentBalance).toBe(75000);
|
|
61
|
-
expect(mortgage.fees).toBe(1000);
|
|
62
|
-
}));
|
|
63
|
-
it('creates a Loan with optional parameters and working methods', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
-
expect(mortgage.numPaymentsToZero()).toBe(70);
|
|
65
|
-
expect(mortgage.numPaymentsToZero(1500)).toBe(59);
|
|
66
|
-
expectPaymentTooLow(() => mortgage.numPaymentsToZero(300), mortgage.minPayment, 300);
|
|
67
|
-
expect(mortgage.validatePayment(1300)).toBe(1300);
|
|
68
|
-
expect(mortgage.validatePayment()).toBeCloseTo(1283.683005, 5);
|
|
69
|
-
expectPaymentTooLow(() => mortgage.validatePayment(20), mortgage.minPayment, 20);
|
|
70
|
-
expectPaymentTooLow(() => mortgage.validatePayment(-160), mortgage.minPayment, -160);
|
|
71
|
-
expect(mortgage.principalRemaining(33)).toBeCloseTo(42881.516563, 5);
|
|
72
|
-
expect(mortgage.principalRemaining(0)).toBe(75000);
|
|
73
|
-
expect(mortgage.principalRemaining(8, 1300)).toBeCloseTo(67576.367309, 5);
|
|
74
|
-
expect(mortgage.principalRemaining(60, 1500)).toBe(0);
|
|
75
|
-
expect(mortgage.principalRemaining(3, 1300, 4000)).toBeCloseTo(142.273033, 5);
|
|
76
|
-
expectPaymentTooLow(() => mortgage.principalRemaining(21, 40, 9000), mortgage.minPayment, 40);
|
|
77
|
-
expect(mortgage.interestPaid(0)).toBe(0);
|
|
78
|
-
expect(mortgage.interestPaid(22)).toBeCloseTo(7442.995104, 5);
|
|
79
|
-
expect(mortgage.interestPaid(8, 1300)).toBeCloseTo(2976.367309, 5);
|
|
80
|
-
expect(mortgage.interestPaid(50, 1300)).toBeCloseTo(13140.910180, 5);
|
|
81
|
-
expect(mortgage.interestPaid(59)).toBeCloseTo(14157.609595, 5);
|
|
82
|
-
expectPaymentTooLow(() => mortgage.interestPaid(30, 10, 20000), mortgage.minPayment, 10);
|
|
83
|
-
}));
|
|
84
|
-
it('calculates min payment for zero-interest loan correctly', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
85
|
-
expect(zeroRateLoan.minPayment).toBe(381.25);
|
|
86
|
-
}));
|
|
87
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payments.test.d.ts","sourceRoot":"","sources":["../../../tests/debt/payments.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { describe, expect, it } from 'vitest';
|
|
11
|
-
import * as constants from '@/lib/constants';
|
|
12
|
-
import { Loan } from '@/lib/debt/loan';
|
|
13
|
-
import * as payments from '@/lib/debt/payments';
|
|
14
|
-
import * as sorting from '@/lib/shared/sorting';
|
|
15
|
-
const Loans = () => [
|
|
16
|
-
new Loan(314159.26, 0.0535, 12, 15, 'pi-house'),
|
|
17
|
-
new Loan(27182.81, 0.0828, 12, 4, 'e-car', 23456.78),
|
|
18
|
-
new Loan(10000, 0.0628, 12, 3, 'tau', undefined, 300),
|
|
19
|
-
];
|
|
20
|
-
describe('payments module', () => {
|
|
21
|
-
const [homeLoan, carLoan, otherLoan] = Loans();
|
|
22
|
-
const loansAV = sorting.sortWith([otherLoan, homeLoan, carLoan], sorting.avalanche);
|
|
23
|
-
const loansMinPayment = loansAV.reduce((currentValue, loan) => currentValue += loan.minPayment, 0);
|
|
24
|
-
it('amortizes a single loan', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
-
const homeLoanAmortizationSchedule = payments.amortizePayments(homeLoan, homeLoan.principal, null, null);
|
|
26
|
-
expect(homeLoanAmortizationSchedule.length).toBe(181);
|
|
27
|
-
expect(homeLoanAmortizationSchedule[3].period).toBe(4);
|
|
28
|
-
expect(homeLoanAmortizationSchedule[3].principal).toBeCloseTo(1156.712773, 5);
|
|
29
|
-
expect(homeLoanAmortizationSchedule[3].interest).toBeCloseTo(1385.292599, 5);
|
|
30
|
-
expect(homeLoanAmortizationSchedule[3].principalRemaining).toBeCloseTo(309563.122582, 5);
|
|
31
|
-
expect(homeLoanAmortizationSchedule[119].period).toBe(120);
|
|
32
|
-
expect(homeLoanAmortizationSchedule[119].principal).toBeCloseTo(1937.889312, 5);
|
|
33
|
-
expect(homeLoanAmortizationSchedule[119].interest).toBeCloseTo(604.116060, 5);
|
|
34
|
-
expect(homeLoanAmortizationSchedule[119].principalRemaining).toBeCloseTo(133564.778411, 5);
|
|
35
|
-
expect(homeLoanAmortizationSchedule[179].period).toBe(180);
|
|
36
|
-
expect(homeLoanAmortizationSchedule[179].principal).toBeCloseTo(2530.722568, 5);
|
|
37
|
-
expect(homeLoanAmortizationSchedule[179].interest).toBeCloseTo(11.282804, 5);
|
|
38
|
-
expect(homeLoanAmortizationSchedule[179].principalRemaining).toBe(0);
|
|
39
|
-
}));
|
|
40
|
-
it('determines extra payment for multiple loans', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
|
-
expect(payments.determineExtraPayment(loansAV, 3700)).toBeCloseTo(185.314618, 5);
|
|
42
|
-
}));
|
|
43
|
-
it('throws a paymentTooLowError when the total payment for loans is below their shared minimum', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
|
-
const tooLowPayment = 28;
|
|
45
|
-
expect(() => {
|
|
46
|
-
payments.determineExtraPayment(loansAV, tooLowPayment);
|
|
47
|
-
}).toThrow(`Payment amount of ${tooLowPayment} must be greater than ${loansMinPayment}`);
|
|
48
|
-
}));
|
|
49
|
-
it('determines carryover', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
-
expect(payments.determineCarryover(carLoan, 1867.19, 348.33, false)).toBeCloseTo(1518.860000, 5);
|
|
51
|
-
expect(payments.determineCarryover(carLoan, 1867.19, 348.33, true)).toBeCloseTo(851.669664, 5);
|
|
52
|
-
}));
|
|
53
|
-
it('amortizes payments for mutliple loans', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
-
const loansPaymentSummary = payments.payLoans(loansAV, 4000);
|
|
55
|
-
for (const loanAV of loansAV) {
|
|
56
|
-
expect(loansPaymentSummary[loanAV.id].lifetimeInterest.toFixed(5)).toBe(loansPaymentSummary[loanAV.id].amortizationSchedule
|
|
57
|
-
.reduce((acc, cv) => acc + cv.interest, 0)
|
|
58
|
-
.toFixed(5));
|
|
59
|
-
}
|
|
60
|
-
// 2 keys more than the 3 loans for totalInterest and totalPayments
|
|
61
|
-
expect(Object.keys(loansPaymentSummary).length).toBe(4);
|
|
62
|
-
expect(loansPaymentSummary[carLoan.id].lifetimeInterest).toBeCloseTo(1906.719625, 5);
|
|
63
|
-
expect(loansPaymentSummary[homeLoan.id].lifetimeInterest).toBeCloseTo(91584.952030, 5);
|
|
64
|
-
expect(loansPaymentSummary[otherLoan.id].lifetimeInterest).toBeCloseTo(876.423974, 5);
|
|
65
|
-
expect(loansPaymentSummary[constants.TOTALS].lifetimeInterest).toBeCloseTo(94368.095630, 5);
|
|
66
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule.length).toBe(111);
|
|
67
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[110].principal).toBeCloseTo(1975.328955, 5);
|
|
68
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[110].interest).toBeCloseTo(8.806674, 5);
|
|
69
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[110].principalRemaining).toBe(0);
|
|
70
|
-
}));
|
|
71
|
-
it('reduces minimum payments correctly and amortizes payments for multiple loans', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
72
|
-
const loansPaymentSummary = payments.payLoans(loansAV, 4000, true);
|
|
73
|
-
for (const loanAV of loansAV) {
|
|
74
|
-
expect(loansPaymentSummary[loanAV.id].lifetimeInterest.toFixed(5)).toBe(loansPaymentSummary[loanAV.id].amortizationSchedule
|
|
75
|
-
.reduce((acc, cv) => acc + cv.interest, 0)
|
|
76
|
-
.toFixed(5));
|
|
77
|
-
}
|
|
78
|
-
expect(Object.keys(loansPaymentSummary).length).toBe(4);
|
|
79
|
-
expect(loansPaymentSummary[carLoan.id].lifetimeInterest).toBeCloseTo(1906.719625, 5);
|
|
80
|
-
expect(loansPaymentSummary[homeLoan.id].lifetimeInterest).toBeCloseTo(118982.162556, 5);
|
|
81
|
-
expect(loansPaymentSummary[otherLoan.id].lifetimeInterest).toBeCloseTo(902.921493, 5);
|
|
82
|
-
expect(loansPaymentSummary[constants.TOTALS].lifetimeInterest).toBeCloseTo(121791.803675, 5);
|
|
83
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule.length).toBe(148);
|
|
84
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[110].principal).toBeCloseTo(2562.376664, 5);
|
|
85
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[110].interest).toBeCloseTo(464.943326, 5);
|
|
86
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[110].principalRemaining).toBeCloseTo(101723.977006, 5);
|
|
87
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[147].principal).toBeCloseTo(1458.892110, 5);
|
|
88
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[147].interest).toBeCloseTo(6.504227, 5);
|
|
89
|
-
expect(loansPaymentSummary[constants.TOTALS].amortizationSchedule[147].principalRemaining).toBe(0);
|
|
90
|
-
}));
|
|
91
|
-
});
|