@novha/calc-engines 1.6.2 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mortgage/france/FranceMortgageServiceImpl.js +25 -7
- package/dist/mortgage/france/domain/types.js +1 -1
- package/dist/types/mortgage/france/FranceMortgageServiceImpl.d.ts +1 -0
- package/dist/types/mortgage/france/domain/types.d.ts +4 -0
- package/package.json +1 -1
- package/src/mortgage/france/FranceMortgageServiceImpl.ts +37 -8
- package/src/mortgage/france/domain/types.ts +4 -0
|
@@ -39,12 +39,19 @@ class FranceMortgageServiceImpl {
|
|
|
39
39
|
maxMonthlyPayment -= monthlyInsuranceCost;
|
|
40
40
|
}
|
|
41
41
|
const maxLoanAmount = this.calculateLoanAmount(maxMonthlyPayment, stressedRate, loanDurationYears);
|
|
42
|
-
const
|
|
42
|
+
const monthlyPayment = this.calculateMonthlyPayment(requiredLoanAmount, this._input.annualInterestRate, loanDurationYears);
|
|
43
|
+
const totalPaid = monthlyPayment * loanDurationYears * 12;
|
|
44
|
+
const totalInterestPaid = totalPaid - requiredLoanAmount;
|
|
45
|
+
const amortizationSchedule = this.calculateAmortizationSchedule(requiredLoanAmount, this._input.annualInterestRate, loanDurationYears, monthlyPayment);
|
|
43
46
|
return {
|
|
47
|
+
loanAmount: requiredLoanAmount,
|
|
48
|
+
totalPaid,
|
|
49
|
+
totalInterestPaid,
|
|
50
|
+
monthlyPayment,
|
|
51
|
+
requiredLoanAmount,
|
|
44
52
|
maxMonthlyPayment,
|
|
45
53
|
maxLoanAmount,
|
|
46
54
|
totalProjectCost,
|
|
47
|
-
requiredLoanAmount,
|
|
48
55
|
loanDurationYears,
|
|
49
56
|
debtRatio: debtRatio,
|
|
50
57
|
monthlyInsuranceCost,
|
|
@@ -52,14 +59,21 @@ class FranceMortgageServiceImpl {
|
|
|
52
59
|
amortizationSchedule
|
|
53
60
|
};
|
|
54
61
|
}
|
|
55
|
-
|
|
62
|
+
calculateMonthlyPayment(principal, annualRate, years) {
|
|
63
|
+
const monthlyRate = annualRate / 100 / 12;
|
|
64
|
+
const payments = years * 12;
|
|
65
|
+
if (monthlyRate === 0) {
|
|
66
|
+
return payments === 0 ? 0 : principal / payments;
|
|
67
|
+
}
|
|
68
|
+
return (principal *
|
|
69
|
+
(monthlyRate / (1 - Math.pow(1 + monthlyRate, -payments))));
|
|
70
|
+
}
|
|
71
|
+
calculateAmortizationSchedule(loanAmount, annualRate, years, monthlyPayment) {
|
|
56
72
|
const monthlyRate = annualRate / 100 / 12;
|
|
57
73
|
const totalPayments = years * 12;
|
|
58
|
-
if (monthlyRate === 0 || loanAmount <= 0) {
|
|
74
|
+
if (monthlyRate === 0 || loanAmount <= 0 || monthlyPayment <= 0) {
|
|
59
75
|
return [];
|
|
60
76
|
}
|
|
61
|
-
const monthlyPayment = (loanAmount * monthlyRate) /
|
|
62
|
-
(1 - Math.pow(1 + monthlyRate, -totalPayments));
|
|
63
77
|
const schedule = [];
|
|
64
78
|
let balance = loanAmount;
|
|
65
79
|
for (let year = 1; year <= years; year++) {
|
|
@@ -102,10 +116,14 @@ class FranceMortgageServiceImpl {
|
|
|
102
116
|
loanDurationYears: 0,
|
|
103
117
|
debtRatio: 0,
|
|
104
118
|
monthlyInsuranceCost: 0,
|
|
119
|
+
loanAmount: 0,
|
|
120
|
+
monthlyPayment: 0,
|
|
121
|
+
totalInterestPaid: 0,
|
|
122
|
+
totalPaid: 0,
|
|
105
123
|
isEligible: false,
|
|
106
124
|
amortizationSchedule: []
|
|
107
125
|
};
|
|
108
126
|
}
|
|
109
127
|
}
|
|
110
128
|
exports.FranceMortgageServiceImpl = FranceMortgageServiceImpl;
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS9mcmFuY2UvRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxNQUFhLHlCQUF5QjtJQUlsQyxZQUFZLEtBQW9CLEVBQUUsS0FBb0I7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVM7UUFFTCxJQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0I7WUFDbkQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUNqQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU87WUFDM0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVk7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRW5DLE1BQU0saUJBQWlCLEdBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTztZQUM1RixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FB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LEVBQUUsVUFBa0IsRUFBRSxLQUFhO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFNUIsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQ3JDLENBQUM7UUFFRCxPQUFPLENBQ0gsY0FBYztZQUNkLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FDN0QsQ0FBQztJQUNOLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUN6QyxPQUFPO1lBQ0gsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixhQUFhLEVBQUUsQ0FBQztZQUNoQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNyQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXO1lBQzNELGlCQUFpQixFQUFFLENBQUM7WUFDcEIsU0FBUyxFQUFFLENBQUM7WUFDWixvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLG9CQUFvQixFQUFFLEVBQUU7U0FDM0IsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQTNKRCw4REEySkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcmFuY2VNb3J0Z2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBNb3J0Z2FnZVJ1bGVzLCBNb3J0Z2FnZUlucHV0LCBNb3J0Z2FnZU91dHB1dCwgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEZyYW5jZU1vcnRnYWdlU2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IE1vcnRnYWdlSW5wdXQ7XG4gICAgcHJpdmF0ZSBfcnVsZXM6IE1vcnRnYWdlUnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogTW9ydGdhZ2VJbnB1dCwgcnVsZXM6IE1vcnRnYWdlUnVsZXMpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGUoKTogTW9ydGdhZ2VPdXRwdXQge1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiZcbiAgICAgICAgICAgIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmXG4gICAgICAgICAgICB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5yZXF1aXJlc1ByaW1hcnlSZXNpZGVuY2UgJiZcbiAgICAgICAgICAgICF0aGlzLl9pbnB1dC5pc1ByaW1hcnlSZXNpZGVuY2VcbiAgICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVidFJhdGlvID1cbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiYgdGhpcy5fcnVsZXMuZmlyc3RUaW1lQnV5ZXIgJiZ0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5tYXhEZWJ0UmF0aW9cbiAgICAgICAgICAgICAgICA6IHRoaXMuX3J1bGVzLm1heERlYnRSYXRpbztcblxuICAgICAgICBjb25zdCBsb2FuRHVyYXRpb25ZZWFycyA9XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5pc0ZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLm1heExvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9pbnB1dC5pc05ld0J1aWxkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25OZXdCdWlsZFllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25ZZWFycztcblxuICAgICAgICBjb25zdCBtaW5Eb3duUGF5bWVudCA9IHRoaXMuX2lucHV0LnByb3BlcnR5UHJpY2UgKiB0aGlzLl9ydWxlcy5taW5Eb3duUGF5bWVudFJhdGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0LmRvd25QYXltZW50IDwgbWluRG93blBheW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm90YXJ5UmF0ZSA9IHRoaXMuX2lucHV0LmlzTmV3QnVpbGRcbiAgICAgICAgPyB0aGlzLl9ydWxlcy5mZWVzLm5vdGFyeVJhdGVOZXdQcm9wZXJ0eVxuICAgICAgICA6IHRoaXMuX3J1bGVzLmZlZXMubm90YXJ5UmF0ZU9sZFByb3BlcnR5O1xuXG4gICAgICAgIGNvbnN0IG5vdGFyeUZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogbm90YXJ5UmF0ZTtcbiAgICAgICAgY29uc3QgYmFua0ZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogdGhpcy5fcnVsZXMuZmVlcy5iYW5rRmVlc1JhdGU7XG4gICAgICAgIGNvbnN0IHRvdGFsUHJvamVjdENvc3QgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICsgbm90YXJ5RmVlcyArIGJhbmtGZWVzO1xuICAgICAgICBjb25zdCByZXF1aXJlZExvYW5BbW91bnQgPSB0b3RhbFByb2plY3RDb3N0IC0gdGhpcy5faW5wdXQuZG93blBheW1lbnQ7XG4gICAgICAgIGNvbnN0IHN0cmVzc2VkUmF0ZSA9IHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSArIHRoaXMuX3J1bGVzLnN0cmVzc1Rlc3QuaW50ZXJlc3RSYXRlQnVmZmVyO1xuXG4gICAgICAgIGNvbnN0IG1vbnRobHlJbnN1cmFuY2VDb3N0ID0gKHJlcXVpcmVkTG9hbkFtb3VudCAqIHRoaXMuX3J1bGVzLmluc3VyYW5jZS5hdmVyYWdlUmF0ZSkgLyAxMjtcblxuICAgICAgICBsZXQgbWF4TW9udGhseVBheW1lbnQgPSB0aGlzLl9pbnB1dC5uZXRNb250aGx5SW5jb21lICogZGVidFJhdGlvO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydWxlcy5pbnN1cmFuY2UuaW5jbHVkZWRJbkRlYnRSYXRpbykge1xuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQgLT0gbW9udGhseUluc3VyYW5jZUNvc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhMb2FuQW1vdW50ID0gdGhpcy5jYWxjdWxhdGVMb2FuQW1vdW50KFxuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICBzdHJlc3NlZFJhdGUsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFyc1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGFtb3J0aXphdGlvblNjaGVkdWxlID0gdGhpcy5jYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcbiAgICAgICAgICAgIHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSxcbiAgICAgICAgICAgIGxvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1heE1vbnRobHlQYXltZW50LFxuICAgICAgICAgICAgbWF4TG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRvdGFsUHJvamVjdENvc3QsXG4gICAgICAgICAgICByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFycyxcbiAgICAgICAgICAgIGRlYnRSYXRpbzogZGVidFJhdGlvLFxuICAgICAgICAgICAgbW9udGhseUluc3VyYW5jZUNvc3QsXG4gICAgICAgICAgICBpc0VsaWdpYmxlOiBtYXhMb2FuQW1vdW50ID49IHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIGFtb3J0aXphdGlvblNjaGVkdWxlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcbiAgICAgICAgbG9hbkFtb3VudDogbnVtYmVyLFxuICAgICAgICBhbm51YWxSYXRlOiBudW1iZXIsXG4gICAgICAgIHllYXJzOiBudW1iZXJcbiAgICApOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlSYXRlID0gYW5udWFsUmF0ZSAvIDEwMCAvIDEyO1xuICAgICAgICBjb25zdCB0b3RhbFBheW1lbnRzID0geWVhcnMgKiAxMjtcblxuICAgICAgICBpZiAobW9udGhseVJhdGUgPT09IDAgfHwgbG9hbkFtb3VudCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb250aGx5UGF5bWVudCA9XG4gICAgICAgICAgICAobG9hbkFtb3VudCAqIG1vbnRobHlSYXRlKSAvXG4gICAgICAgICAgICAoMSAtIE1hdGgucG93KDEgKyBtb250aGx5UmF0ZSwgLXRvdGFsUGF5bWVudHMpKTtcblxuICAgICAgICBjb25zdCBzY2hlZHVsZTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10gPSBbXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBsb2FuQW1vdW50O1xuXG4gICAgICAgIGZvciAobGV0IHllYXIgPSAxOyB5ZWFyIDw9IHllYXJzOyB5ZWFyKyspIHtcbiAgICAgICAgICAgIGxldCB5ZWFybHlQcmluY2lwYWwgPSAwO1xuICAgICAgICAgICAgbGV0IHllYXJseUludGVyZXN0ID0gMDtcblxuICAgICAgICAgICAgY29uc3QgcGF5bWVudHNJblllYXIgPSBNYXRoLm1pbigxMiwgdG90YWxQYXltZW50cyAtICh5ZWFyIC0gMSkgKiAxMik7XG5cbiAgICAgICAgICAgIGZvciAobGV0IG1vbnRoID0gMTsgbW9udGggPD0gcGF5bWVudHNJblllYXI7IG1vbnRoKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcmVzdFBheW1lbnQgPSBiYWxhbmNlICogbW9udGhseVJhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbmNpcGFsUGF5bWVudCA9IG1vbnRobHlQYXltZW50IC0gaW50ZXJlc3RQYXltZW50O1xuXG4gICAgICAgICAgICAgICAgeWVhcmx5SW50ZXJlc3QgKz0gaW50ZXJlc3RQYXltZW50O1xuICAgICAgICAgICAgICAgIHllYXJseVByaW5jaXBhbCArPSBwcmluY2lwYWxQYXltZW50O1xuICAgICAgICAgICAgICAgIGJhbGFuY2UgLT0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NoZWR1bGUucHVzaCh7XG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBwcmluY2lwYWw6IHllYXJseVByaW5jaXBhbCxcbiAgICAgICAgICAgICAgICBpbnRlcmVzdDogeWVhcmx5SW50ZXJlc3QsXG4gICAgICAgICAgICAgICAgYmFsYW5jZTogTWF0aC5tYXgoMCwgYmFsYW5jZSlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoYmFsYW5jZSA8PSAwKSBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY2hlZHVsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUxvYW5BbW91bnQobW9udGhseVBheW1lbnQ6IG51bWJlciwgYW5udWFsUmF0ZTogbnVtYmVyLCB5ZWFyczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbW9udGhseVJhdGUgPSBhbm51YWxSYXRlIC8gMTAwIC8gMTI7XG4gICAgICAgIGNvbnN0IHBheW1lbnRzID0geWVhcnMgKiAxMjtcblxuICAgICAgICBpZiAobW9udGhseVJhdGUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aGx5UGF5bWVudCAqIHBheW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG1vbnRobHlQYXltZW50ICpcbiAgICAgICAgICAgICgoMSAtIE1hdGgucG93KDEgKyBtb250aGx5UmF0ZSwgLXBheW1lbnRzKSkgLyBtb250aGx5UmF0ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluZWxpZ2libGVSZXN1bHQoaW5wdXQ6IE1vcnRnYWdlSW5wdXQpOiBNb3J0Z2FnZU91dHB1dCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtYXhNb250aGx5UGF5bWVudDogMCxcbiAgICAgICAgICAgIG1heExvYW5BbW91bnQ6IDAsXG4gICAgICAgICAgICB0b3RhbFByb2plY3RDb3N0OiBpbnB1dC5wcm9wZXJ0eVByaWNlLFxuICAgICAgICAgICAgcmVxdWlyZWRMb2FuQW1vdW50OiBpbnB1dC5wcm9wZXJ0eVByaWNlIC0gaW5wdXQuZG93blBheW1lbnQsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFyczogMCxcbiAgICAgICAgICAgIGRlYnRSYXRpbzogMCxcbiAgICAgICAgICAgIG1vbnRobHlJbnN1cmFuY2VDb3N0OiAwLFxuICAgICAgICAgICAgaXNFbGlnaWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbW9ydGl6YXRpb25TY2hlZHVsZTogW11cbiAgICAgICAgfTtcbiAgICB9XG59Il19
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS9mcmFuY2UvRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxNQUFhLHlCQUF5QjtJQUlsQyxZQUFZLEtBQW9CLEVBQUUsS0FBb0I7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVM7UUFFTCxJQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0I7WUFDbkQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUNqQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU87WUFDM0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVk7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRW5DLE1BQU0saUJBQWlCLEdBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTztZQUM1RixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FB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QUNOLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUN6QyxPQUFPO1lBQ0gsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixhQUFhLEVBQUUsQ0FBQztZQUNoQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNyQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXO1lBQzNELGlCQUFpQixFQUFFLENBQUM7WUFDcEIsU0FBUyxFQUFFLENBQUM7WUFDWixvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDO1lBQ2IsY0FBYyxFQUFFLENBQUM7WUFDakIsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixTQUFTLEVBQUUsQ0FBQztZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLG9CQUFvQixFQUFFLEVBQUU7U0FDM0IsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQXhMRCw4REF3TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcmFuY2VNb3J0Z2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBNb3J0Z2FnZVJ1bGVzLCBNb3J0Z2FnZUlucHV0LCBNb3J0Z2FnZU91dHB1dCwgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEZyYW5jZU1vcnRnYWdlU2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IE1vcnRnYWdlSW5wdXQ7XG4gICAgcHJpdmF0ZSBfcnVsZXM6IE1vcnRnYWdlUnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogTW9ydGdhZ2VJbnB1dCwgcnVsZXM6IE1vcnRnYWdlUnVsZXMpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGUoKTogTW9ydGdhZ2VPdXRwdXQge1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiZcbiAgICAgICAgICAgIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmXG4gICAgICAgICAgICB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5yZXF1aXJlc1ByaW1hcnlSZXNpZGVuY2UgJiZcbiAgICAgICAgICAgICF0aGlzLl9pbnB1dC5pc1ByaW1hcnlSZXNpZGVuY2VcbiAgICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVidFJhdGlvID1cbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiYgdGhpcy5fcnVsZXMuZmlyc3RUaW1lQnV5ZXIgJiZ0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5tYXhEZWJ0UmF0aW9cbiAgICAgICAgICAgICAgICA6IHRoaXMuX3J1bGVzLm1heERlYnRSYXRpbztcblxuICAgICAgICBjb25zdCBsb2FuRHVyYXRpb25ZZWFycyA9XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5pc0ZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLm1heExvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9pbnB1dC5pc05ld0J1aWxkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25OZXdCdWlsZFllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25ZZWFycztcblxuICAgICAgICBjb25zdCBtaW5Eb3duUGF5bWVudCA9IHRoaXMuX2lucHV0LnByb3BlcnR5UHJpY2UgKiB0aGlzLl9ydWxlcy5taW5Eb3duUGF5bWVudFJhdGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0LmRvd25QYXltZW50IDwgbWluRG93blBheW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm90YXJ5UmF0ZSA9IHRoaXMuX2lucHV0LmlzTmV3QnVpbGRcbiAgICAgICAgPyB0aGlzLl9ydWxlcy5mZWVzLm5vdGFyeVJhdGVOZXdQcm9wZXJ0eVxuICAgICAgICA6IHRoaXMuX3J1bGVzLmZlZXMubm90YXJ5UmF0ZU9sZFByb3BlcnR5O1xuXG4gICAgICAgIGNvbnN0IG5vdGFyeUZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogbm90YXJ5UmF0ZTtcbiAgICAgICAgY29uc3QgYmFua0ZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogdGhpcy5fcnVsZXMuZmVlcy5iYW5rRmVlc1JhdGU7XG4gICAgICAgIGNvbnN0IHRvdGFsUHJvamVjdENvc3QgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICsgbm90YXJ5RmVlcyArIGJhbmtGZWVzO1xuICAgICAgICBjb25zdCByZXF1aXJlZExvYW5BbW91bnQgPSB0b3RhbFByb2plY3RDb3N0IC0gdGhpcy5faW5wdXQuZG93blBheW1lbnQ7XG4gICAgICAgIGNvbnN0IHN0cmVzc2VkUmF0ZSA9IHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSArIHRoaXMuX3J1bGVzLnN0cmVzc1Rlc3QuaW50ZXJlc3RSYXRlQnVmZmVyO1xuXG4gICAgICAgIGNvbnN0IG1vbnRobHlJbnN1cmFuY2VDb3N0ID0gKHJlcXVpcmVkTG9hbkFtb3VudCAqIHRoaXMuX3J1bGVzLmluc3VyYW5jZS5hdmVyYWdlUmF0ZSkgLyAxMjtcblxuICAgICAgICBsZXQgbWF4TW9udGhseVBheW1lbnQgPSB0aGlzLl9pbnB1dC5uZXRNb250aGx5SW5jb21lICogZGVidFJhdGlvO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydWxlcy5pbnN1cmFuY2UuaW5jbHVkZWRJbkRlYnRSYXRpbykge1xuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQgLT0gbW9udGhseUluc3VyYW5jZUNvc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhMb2FuQW1vdW50ID0gdGhpcy5jYWxjdWxhdGVMb2FuQW1vdW50KFxuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICBzdHJlc3NlZFJhdGUsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFyc1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG1vbnRobHlQYXltZW50ID0gdGhpcy5jYWxjdWxhdGVNb250aGx5UGF5bWVudChcbiAgICAgICAgICAgIHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSxcbiAgICAgICAgICAgIGxvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdG90YWxQYWlkID0gbW9udGhseVBheW1lbnQgKiBsb2FuRHVyYXRpb25ZZWFycyAqIDEyO1xuICAgICAgICBjb25zdCB0b3RhbEludGVyZXN0UGFpZCA9IHRvdGFsUGFpZCAtIHJlcXVpcmVkTG9hbkFtb3VudDtcblxuICAgICAgICBjb25zdCBhbW9ydGl6YXRpb25TY2hlZHVsZSA9IHRoaXMuY2FsY3VsYXRlQW1vcnRpemF0aW9uU2NoZWR1bGUoXG4gICAgICAgICAgICByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5hbm51YWxJbnRlcmVzdFJhdGUsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFycyxcbiAgICAgICAgICAgIG1vbnRobHlQYXltZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYW5BbW91bnQ6IHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRvdGFsUGFpZCxcbiAgICAgICAgICAgIHRvdGFsSW50ZXJlc3RQYWlkLFxuICAgICAgICAgICAgbW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICBtYXhNb250aGx5UGF5bWVudCxcbiAgICAgICAgICAgIG1heExvYW5BbW91bnQsXG4gICAgICAgICAgICB0b3RhbFByb2plY3RDb3N0LFxuICAgICAgICAgICAgbG9hbkR1cmF0aW9uWWVhcnMsXG4gICAgICAgICAgICBkZWJ0UmF0aW86IGRlYnRSYXRpbyxcbiAgICAgICAgICAgIG1vbnRobHlJbnN1cmFuY2VDb3N0LFxuICAgICAgICAgICAgaXNFbGlnaWJsZTogbWF4TG9hbkFtb3VudCA+PSByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICBhbW9ydGl6YXRpb25TY2hlZHVsZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlTW9udGhseVBheW1lbnQocHJpbmNpcGFsOiBudW1iZXIsIGFubnVhbFJhdGU6IG51bWJlciwgeWVhcnM6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlSYXRlID0gYW5udWFsUmF0ZSAvIDEwMCAvIDEyO1xuICAgICAgICBjb25zdCBwYXltZW50cyA9IHllYXJzICogMTI7XG5cbiAgICAgICAgaWYgKG1vbnRobHlSYXRlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bWVudHMgPT09IDAgPyAwIDogcHJpbmNpcGFsIC8gcGF5bWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHJpbmNpcGFsICpcbiAgICAgICAgICAgIChtb250aGx5UmF0ZSAvICgxIC0gTWF0aC5wb3coMSArIG1vbnRobHlSYXRlLCAtcGF5bWVudHMpKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuICAgICAgICBsb2FuQW1vdW50OiBudW1iZXIsXG4gICAgICAgIGFubnVhbFJhdGU6IG51bWJlcixcbiAgICAgICAgeWVhcnM6IG51bWJlcixcbiAgICAgICAgbW9udGhseVBheW1lbnQ6IG51bWJlclxuICAgICk6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdIHtcbiAgICAgICAgY29uc3QgbW9udGhseVJhdGUgPSBhbm51YWxSYXRlIC8gMTAwIC8gMTI7XG4gICAgICAgIGNvbnN0IHRvdGFsUGF5bWVudHMgPSB5ZWFycyAqIDEyO1xuXG4gICAgICAgIGlmIChtb250aGx5UmF0ZSA9PT0gMCB8fCBsb2FuQW1vdW50IDw9IDAgfHwgbW9udGhseVBheW1lbnQgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2NoZWR1bGU6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdID0gW107XG4gICAgICAgIGxldCBiYWxhbmNlID0gbG9hbkFtb3VudDtcblxuICAgICAgICBmb3IgKGxldCB5ZWFyID0gMTsgeWVhciA8PSB5ZWFyczsgeWVhcisrKSB7XG4gICAgICAgICAgICBsZXQgeWVhcmx5UHJpbmNpcGFsID0gMDtcbiAgICAgICAgICAgIGxldCB5ZWFybHlJbnRlcmVzdCA9IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHBheW1lbnRzSW5ZZWFyID0gTWF0aC5taW4oMTIsIHRvdGFsUGF5bWVudHMgLSAoeWVhciAtIDEpICogMTIpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBtb250aCA9IDE7IG1vbnRoIDw9IHBheW1lbnRzSW5ZZWFyOyBtb250aCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJlc3RQYXltZW50ID0gYmFsYW5jZSAqIG1vbnRobHlSYXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW5jaXBhbFBheW1lbnQgPSBtb250aGx5UGF5bWVudCAtIGludGVyZXN0UGF5bWVudDtcblxuICAgICAgICAgICAgICAgIHllYXJseUludGVyZXN0ICs9IGludGVyZXN0UGF5bWVudDtcbiAgICAgICAgICAgICAgICB5ZWFybHlQcmluY2lwYWwgKz0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgICAgICAgICAgICBiYWxhbmNlIC09IHByaW5jaXBhbFBheW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjaGVkdWxlLnB1c2goe1xuICAgICAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICAgICAgcHJpbmNpcGFsOiB5ZWFybHlQcmluY2lwYWwsXG4gICAgICAgICAgICAgICAgaW50ZXJlc3Q6IHllYXJseUludGVyZXN0LFxuICAgICAgICAgICAgICAgIGJhbGFuY2U6IE1hdGgubWF4KDAsIGJhbGFuY2UpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGJhbGFuY2UgPD0gMCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NoZWR1bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVMb2FuQW1vdW50KG1vbnRobHlQYXltZW50OiBudW1iZXIsIGFubnVhbFJhdGU6IG51bWJlciwgeWVhcnM6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlSYXRlID0gYW5udWFsUmF0ZSAvIDEwMCAvIDEyO1xuICAgICAgICBjb25zdCBwYXltZW50cyA9IHllYXJzICogMTI7XG5cbiAgICAgICAgaWYgKG1vbnRobHlSYXRlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhseVBheW1lbnQgKiBwYXltZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtb250aGx5UGF5bWVudCAqXG4gICAgICAgICAgICAoKDEgLSBNYXRoLnBvdygxICsgbW9udGhseVJhdGUsIC1wYXltZW50cykpIC8gbW9udGhseVJhdGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmVsaWdpYmxlUmVzdWx0KGlucHV0OiBNb3J0Z2FnZUlucHV0KTogTW9ydGdhZ2VPdXRwdXQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQ6IDAsXG4gICAgICAgICAgICBtYXhMb2FuQW1vdW50OiAwLFxuICAgICAgICAgICAgdG90YWxQcm9qZWN0Q29zdDogaW5wdXQucHJvcGVydHlQcmljZSxcbiAgICAgICAgICAgIHJlcXVpcmVkTG9hbkFtb3VudDogaW5wdXQucHJvcGVydHlQcmljZSAtIGlucHV0LmRvd25QYXltZW50LFxuICAgICAgICAgICAgbG9hbkR1cmF0aW9uWWVhcnM6IDAsXG4gICAgICAgICAgICBkZWJ0UmF0aW86IDAsXG4gICAgICAgICAgICBtb250aGx5SW5zdXJhbmNlQ29zdDogMCxcbiAgICAgICAgICAgIGxvYW5BbW91bnQ6IDAsXG4gICAgICAgICAgICBtb250aGx5UGF5bWVudDogMCxcbiAgICAgICAgICAgIHRvdGFsSW50ZXJlc3RQYWlkOiAwLFxuICAgICAgICAgICAgdG90YWxQYWlkOiAwLFxuICAgICAgICAgICAgaXNFbGlnaWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbW9ydGl6YXRpb25TY2hlZHVsZTogW11cbiAgICAgICAgfTtcbiAgICB9XG59Il19
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2UvZnJhbmNlL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVzIHtcbiAgICBtYXhEZWJ0UmF0aW86IG51bWJlcjtcbiAgICBtYXhMb2FuRHVyYXRpb25ZZWFyczogbnVtYmVyO1xuICAgIG1heExvYW5EdXJhdGlvbk5ld0J1aWxkWWVhcnM6IG51bWJlcjtcbiAgICBtaW5Eb3duUGF5bWVudFJhdGU6IG51bWJlcjtcblxuICAgIGZpcnN0VGltZUJ1eWVyPzogRmlyc3RUaW1lQnV5ZXJSdWxlcztcblxuICAgIGluc3VyYW5jZTogTW9ydGdhZ2VJbnN1cmFuY2VSdWxlcztcbiAgICBmZWVzOiBNb3J0Z2FnZUZlZXNSdWxlcztcbiAgICBzdHJlc3NUZXN0OiBTdHJlc3NUZXN0UnVsZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyc3RUaW1lQnV5ZXJSdWxlcyB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBtYXhEZWJ0UmF0aW86IG51bWJlcjtcbiAgICBtYXhMb2FuRHVyYXRpb25ZZWFyczogbnVtYmVyO1xuICAgIHF1b3RhRGlzY2xhaW1lcjogc3RyaW5nO1xuICAgIHJlcXVpcmVzUHJpbWFyeVJlc2lkZW5jZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUluc3VyYW5jZVJ1bGVzIHtcbiAgICBhdmVyYWdlUmF0ZTogbnVtYmVyO1xuICAgIGluY2x1ZGVkSW5EZWJ0UmF0aW86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VGZWVzUnVsZXMge1xuICBub3RhcnlSYXRlT2xkUHJvcGVydHk6IG51bWJlcjtcbiAgbm90YXJ5UmF0ZU5ld1Byb3BlcnR5OiBudW1iZXI7XG4gIGJhbmtGZWVzUmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVzc1Rlc3RSdWxlcyB7XG4gICAgaW50ZXJlc3RSYXRlQnVmZmVyOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIHtcbiAgICB5ZWFyOiBudW1iZXI7XG4gICAgcHJpbmNpcGFsOiBudW1iZXI7XG4gICAgaW50ZXJlc3Q6IG51bWJlcjtcbiAgICBiYWxhbmNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VJbnB1dCB7XG4gICAgcHJvcGVydHlQcmljZTogbnVtYmVyO1xuICAgIGRvd25QYXltZW50OiBudW1iZXI7XG4gICAgbmV0TW9udGhseUluY29tZTogbnVtYmVyO1xuICAgIGxvYW5EdXJhdGlvblllYXJzOiBudW1iZXI7XG4gICAgYW5udWFsSW50ZXJlc3RSYXRlOiBudW1iZXI7XG4gICAgaXNQcmltYXJ5UmVzaWRlbmNlOiBib29sZWFuO1xuICAgIGlzRmlyc3RUaW1lQnV5ZXI6IGJvb2xlYW47XG4gICAgaXNOZXdCdWlsZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZU91dHB1dCB7XG4gICAgbG9hbkFtb3VudDogbnVtYmVyO1xuICAgIHRvdGFsUGFpZDogbnVtYmVyO1xuICAgIG1vbnRobHlQYXltZW50OiBudW1iZXI7XG4gICAgdG90YWxJbnRlcmVzdFBhaWQ6IG51bWJlcjtcbiAgICBtYXhNb250aGx5UGF5bWVudDogbnVtYmVyO1xuICAgIG1heExvYW5BbW91bnQ6IG51bWJlcjtcbiAgICBsb2FuRHVyYXRpb25ZZWFyczogbnVtYmVyO1xuICAgIGRlYnRSYXRpbzogbnVtYmVyO1xuICAgIHRvdGFsUHJvamVjdENvc3Q6IG51bWJlcjtcbiAgICByZXF1aXJlZExvYW5BbW91bnQ6IG51bWJlcjtcbiAgICBtb250aGx5SW5zdXJhbmNlQ29zdDogbnVtYmVyO1xuICAgIGlzRWxpZ2libGU6IGJvb2xlYW47XG4gICAgYW1vcnRpemF0aW9uU2NoZWR1bGU6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdO1xufVxuIl19
|
|
@@ -5,6 +5,7 @@ export declare class FranceMortgageServiceImpl implements FranceMortgageService
|
|
|
5
5
|
private _rules;
|
|
6
6
|
constructor(input: MortgageInput, rules: MortgageRules);
|
|
7
7
|
calculate(): MortgageOutput;
|
|
8
|
+
private calculateMonthlyPayment;
|
|
8
9
|
private calculateAmortizationSchedule;
|
|
9
10
|
private calculateLoanAmount;
|
|
10
11
|
private ineligibleResult;
|
|
@@ -44,6 +44,10 @@ export interface MortgageInput {
|
|
|
44
44
|
isNewBuild: boolean;
|
|
45
45
|
}
|
|
46
46
|
export interface MortgageOutput {
|
|
47
|
+
loanAmount: number;
|
|
48
|
+
totalPaid: number;
|
|
49
|
+
monthlyPayment: number;
|
|
50
|
+
totalInterestPaid: number;
|
|
47
51
|
maxMonthlyPayment: number;
|
|
48
52
|
maxLoanAmount: number;
|
|
49
53
|
loanDurationYears: number;
|
package/package.json
CHANGED
|
@@ -63,17 +63,31 @@ export class FranceMortgageServiceImpl implements FranceMortgageService {
|
|
|
63
63
|
loanDurationYears
|
|
64
64
|
);
|
|
65
65
|
|
|
66
|
-
const
|
|
66
|
+
const monthlyPayment = this.calculateMonthlyPayment(
|
|
67
67
|
requiredLoanAmount,
|
|
68
68
|
this._input.annualInterestRate,
|
|
69
69
|
loanDurationYears
|
|
70
70
|
);
|
|
71
71
|
|
|
72
|
+
const totalPaid = monthlyPayment * loanDurationYears * 12;
|
|
73
|
+
const totalInterestPaid = totalPaid - requiredLoanAmount;
|
|
74
|
+
|
|
75
|
+
const amortizationSchedule = this.calculateAmortizationSchedule(
|
|
76
|
+
requiredLoanAmount,
|
|
77
|
+
this._input.annualInterestRate,
|
|
78
|
+
loanDurationYears,
|
|
79
|
+
monthlyPayment
|
|
80
|
+
);
|
|
81
|
+
|
|
72
82
|
return {
|
|
83
|
+
loanAmount: requiredLoanAmount,
|
|
84
|
+
totalPaid,
|
|
85
|
+
totalInterestPaid,
|
|
86
|
+
monthlyPayment,
|
|
87
|
+
requiredLoanAmount,
|
|
73
88
|
maxMonthlyPayment,
|
|
74
89
|
maxLoanAmount,
|
|
75
90
|
totalProjectCost,
|
|
76
|
-
requiredLoanAmount,
|
|
77
91
|
loanDurationYears,
|
|
78
92
|
debtRatio: debtRatio,
|
|
79
93
|
monthlyInsuranceCost,
|
|
@@ -82,22 +96,33 @@ export class FranceMortgageServiceImpl implements FranceMortgageService {
|
|
|
82
96
|
};
|
|
83
97
|
}
|
|
84
98
|
|
|
99
|
+
private calculateMonthlyPayment(principal: number, annualRate: number, years: number): number {
|
|
100
|
+
const monthlyRate = annualRate / 100 / 12;
|
|
101
|
+
const payments = years * 12;
|
|
102
|
+
|
|
103
|
+
if (monthlyRate === 0) {
|
|
104
|
+
return payments === 0 ? 0 : principal / payments;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
principal *
|
|
109
|
+
(monthlyRate / (1 - Math.pow(1 + monthlyRate, -payments)))
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
85
113
|
private calculateAmortizationSchedule(
|
|
86
114
|
loanAmount: number,
|
|
87
115
|
annualRate: number,
|
|
88
|
-
years: number
|
|
116
|
+
years: number,
|
|
117
|
+
monthlyPayment: number
|
|
89
118
|
): AmortizationScheduleItem[] {
|
|
90
119
|
const monthlyRate = annualRate / 100 / 12;
|
|
91
120
|
const totalPayments = years * 12;
|
|
92
121
|
|
|
93
|
-
if (monthlyRate === 0 || loanAmount <= 0) {
|
|
122
|
+
if (monthlyRate === 0 || loanAmount <= 0 || monthlyPayment <= 0) {
|
|
94
123
|
return [];
|
|
95
124
|
}
|
|
96
125
|
|
|
97
|
-
const monthlyPayment =
|
|
98
|
-
(loanAmount * monthlyRate) /
|
|
99
|
-
(1 - Math.pow(1 + monthlyRate, -totalPayments));
|
|
100
|
-
|
|
101
126
|
const schedule: AmortizationScheduleItem[] = [];
|
|
102
127
|
let balance = loanAmount;
|
|
103
128
|
|
|
@@ -152,6 +177,10 @@ export class FranceMortgageServiceImpl implements FranceMortgageService {
|
|
|
152
177
|
loanDurationYears: 0,
|
|
153
178
|
debtRatio: 0,
|
|
154
179
|
monthlyInsuranceCost: 0,
|
|
180
|
+
loanAmount: 0,
|
|
181
|
+
monthlyPayment: 0,
|
|
182
|
+
totalInterestPaid: 0,
|
|
183
|
+
totalPaid: 0,
|
|
155
184
|
isEligible: false,
|
|
156
185
|
amortizationSchedule: []
|
|
157
186
|
};
|
|
@@ -53,6 +53,10 @@ export interface MortgageInput {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export interface MortgageOutput {
|
|
56
|
+
loanAmount: number;
|
|
57
|
+
totalPaid: number;
|
|
58
|
+
monthlyPayment: number;
|
|
59
|
+
totalInterestPaid: number;
|
|
56
60
|
maxMonthlyPayment: number;
|
|
57
61
|
maxLoanAmount: number;
|
|
58
62
|
loanDurationYears: number;
|