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.
Files changed (86) hide show
  1. package/build/index.d.ts +64 -0
  2. package/build/index.d.ts.map +1 -0
  3. package/build/index.js +27 -0
  4. package/build/lib/constants.d.ts.map +1 -0
  5. package/build/{src/lib → lib}/debt/loan.d.ts +1 -1
  6. package/build/lib/debt/loan.d.ts.map +1 -0
  7. package/build/{src/lib → lib}/debt/loan.js +2 -2
  8. package/build/lib/debt/paymentTypes.d.ts.map +1 -0
  9. package/build/{src/lib → lib}/debt/payments.d.ts +2 -2
  10. package/build/lib/debt/payments.d.ts.map +1 -0
  11. package/build/{src/lib → lib}/debt/payments.js +1 -1
  12. package/build/lib/errors.d.ts.map +1 -0
  13. package/build/lib/investment/contributionTypes.d.ts.map +1 -0
  14. package/build/{src/lib → lib}/investment/contributions.d.ts +2 -2
  15. package/build/lib/investment/contributions.d.ts.map +1 -0
  16. package/build/{src/lib → lib}/investment/instrument.d.ts +1 -1
  17. package/build/lib/investment/instrument.d.ts.map +1 -0
  18. package/build/{src/lib → lib}/investment/instrument.js +2 -2
  19. package/build/{src/lib → lib}/investment/strategies.d.ts +2 -2
  20. package/build/lib/investment/strategies.d.ts.map +1 -0
  21. package/build/{src/lib → lib}/investment/strategies.js +2 -2
  22. package/build/lib/investment/withdrawalTypes.d.ts.map +1 -0
  23. package/build/{src/lib → lib}/investment/withdrawals.d.ts +2 -2
  24. package/build/lib/investment/withdrawals.d.ts.map +1 -0
  25. package/build/{src/lib → lib}/investment/withdrawals.js +2 -2
  26. package/build/lib/shared/primitives.d.ts.map +1 -0
  27. package/build/lib/shared/sorting.d.ts.map +1 -0
  28. package/package.json +3 -3
  29. package/build/src/index.d.ts +0 -18
  30. package/build/src/index.d.ts.map +0 -1
  31. package/build/src/index.js +0 -14
  32. package/build/src/lib/constants.d.ts.map +0 -1
  33. package/build/src/lib/debt/loan.d.ts.map +0 -1
  34. package/build/src/lib/debt/paymentTypes.d.ts.map +0 -1
  35. package/build/src/lib/debt/payments.d.ts.map +0 -1
  36. package/build/src/lib/errors.d.ts.map +0 -1
  37. package/build/src/lib/investment/contributionTypes.d.ts.map +0 -1
  38. package/build/src/lib/investment/contributions.d.ts.map +0 -1
  39. package/build/src/lib/investment/instrument.d.ts.map +0 -1
  40. package/build/src/lib/investment/strategies.d.ts.map +0 -1
  41. package/build/src/lib/investment/withdrawalTypes.d.ts.map +0 -1
  42. package/build/src/lib/investment/withdrawals.d.ts.map +0 -1
  43. package/build/src/lib/shared/primitives.d.ts.map +0 -1
  44. package/build/src/lib/shared/sorting.d.ts.map +0 -1
  45. package/build/tests/debt/loan.test.d.ts +0 -2
  46. package/build/tests/debt/loan.test.d.ts.map +0 -1
  47. package/build/tests/debt/loan.test.js +0 -87
  48. package/build/tests/debt/payments.test.d.ts +0 -2
  49. package/build/tests/debt/payments.test.d.ts.map +0 -1
  50. package/build/tests/debt/payments.test.js +0 -91
  51. package/build/tests/debt/sorting.test.d.ts +0 -2
  52. package/build/tests/debt/sorting.test.d.ts.map +0 -1
  53. package/build/tests/debt/sorting.test.js +0 -43
  54. package/build/tests/index.test.d.ts +0 -2
  55. package/build/tests/index.test.d.ts.map +0 -1
  56. package/build/tests/index.test.js +0 -66
  57. package/build/tests/investment/contributions.test.d.ts +0 -2
  58. package/build/tests/investment/contributions.test.d.ts.map +0 -1
  59. package/build/tests/investment/contributions.test.js +0 -113
  60. package/build/tests/investment/instrument.test.d.ts +0 -2
  61. package/build/tests/investment/instrument.test.d.ts.map +0 -1
  62. package/build/tests/investment/instrument.test.js +0 -57
  63. package/build/tests/investment/strategies.test.d.ts +0 -2
  64. package/build/tests/investment/strategies.test.d.ts.map +0 -1
  65. package/build/tests/investment/strategies.test.js +0 -15
  66. package/build/tests/investment/withdrawals.test.d.ts +0 -2
  67. package/build/tests/investment/withdrawals.test.d.ts.map +0 -1
  68. package/build/tests/investment/withdrawals.test.js +0 -66
  69. package/build/tests/shared/primitives.test.d.ts +0 -2
  70. package/build/tests/shared/primitives.test.d.ts.map +0 -1
  71. package/build/tests/shared/primitives.test.js +0 -76
  72. /package/build/{src/lib → lib}/constants.d.ts +0 -0
  73. /package/build/{src/lib → lib}/constants.js +0 -0
  74. /package/build/{src/lib → lib}/debt/paymentTypes.d.ts +0 -0
  75. /package/build/{src/lib → lib}/debt/paymentTypes.js +0 -0
  76. /package/build/{src/lib → lib}/errors.d.ts +0 -0
  77. /package/build/{src/lib → lib}/errors.js +0 -0
  78. /package/build/{src/lib → lib}/investment/contributionTypes.d.ts +0 -0
  79. /package/build/{src/lib → lib}/investment/contributionTypes.js +0 -0
  80. /package/build/{src/lib → lib}/investment/contributions.js +0 -0
  81. /package/build/{src/lib → lib}/investment/withdrawalTypes.d.ts +0 -0
  82. /package/build/{src/lib → lib}/investment/withdrawalTypes.js +0 -0
  83. /package/build/{src/lib → lib}/shared/primitives.d.ts +0 -0
  84. /package/build/{src/lib → lib}/shared/primitives.js +0 -0
  85. /package/build/{src/lib → lib}/shared/sorting.d.ts +0 -0
  86. /package/build/{src/lib → lib}/shared/sorting.js +0 -0
@@ -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.4",
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
  ],
@@ -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
@@ -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"}
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=loan.test.d.ts.map
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=payments.test.d.ts.map
@@ -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
- });