-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathcapital.min.js
More file actions
1 lines (1 loc) · 7.59 KB
/
capital.min.js
File metadata and controls
1 lines (1 loc) · 7.59 KB
1
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.capitaljs=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var amortizationCalc=function(amount,rate,totalTerm,amortizeTerm){var periodInt,monthlyPayment,summedInterest=0,summedPrincipal=0,monthlyIntPaid,monthlyPrincPaid,summedAmortize={};periodInt=rate/12/100;monthlyPayment=amount*(periodInt/(1-Math.pow(1+periodInt,-totalTerm)));monthlyPayment=monthlyPayment||amount/totalTerm;var i=0;while(i<amortizeTerm){monthlyIntPaid=amount*periodInt;monthlyPrincPaid=monthlyPayment-monthlyIntPaid;summedInterest=summedInterest+monthlyIntPaid;summedPrincipal=summedPrincipal+monthlyPrincPaid;amount=amount-monthlyPrincPaid;i+=1}summedAmortize.interest=summedInterest;summedAmortize.principal=summedPrincipal;summedAmortize.balance=amount;summedAmortize.payment=monthlyPayment;return summedAmortize};var errorCheck=function(opts){for(var key in opts){if(opts.hasOwnProperty(key)){if(typeof opts[key]==="undefined"||isNaN(parseFloat(opts[key]))||opts[key]<0){throw new Error("Loan "+key+" must be a non-negative value.")}}}};var roundNum=function(numObj){var tmp={};for(var property in numObj){tmp[property]=numObj[property];tmp[property+"Round"]=(Math.round(numObj[property]*100)/100).toFixed(2)}return tmp};var amortize=function(opts){errorCheck(opts);var amortized=amortizationCalc(opts.amount,opts.rate,opts.totalTerm,opts.amortizeTerm);return roundNum(amortized)};module.exports=amortize},{}],2:[function(require,module,exports){"use strict";var amortize=require("amortize"),enforcePositive=require("./utils/enforce/number/positive"),sumArray=require("./utils/sumArray");function amortization(opts){var amount=opts.amount;var rate=opts.rate;var totalTerm=opts.totalTerm;var _opts$amortizeTerm=opts.amortizeTerm;var amortizeTerm=_opts$amortizeTerm===undefined?true:_opts$amortizeTerm;var result={};enforcePositive(opts);if(!amount||!rate||!totalTerm||!amortizeTerm){throw new Error("Amount, rate, totalTerm, and amortizeTerm are required and must be non-negative.")}result=amortize(opts);return result}module.exports=amortization},{"./utils/enforce/number/positive":10,"./utils/sumArray":12,amortize:1}],3:[function(require,module,exports){"use strict";var enforcePositive=require("./utils/enforce/number/positive"),sumArray=require("./utils/sumArray");function arrayCheck(val){if(val.constructor===Array){val=sumArray(val)}return val}function cashFlow(opts){var income=opts.income;var _opts$expenses=opts.expenses;var expenses=_opts$expenses===undefined?true:_opts$expenses;var result={};enforcePositive(opts);if(!income||!expenses){throw new Error("Income and expenses are required and must be non-negative.")}result.income=arrayCheck(income);result.expenses=arrayCheck(expenses);result.cash=result.income-result.expenses;return result}module.exports=cashFlow},{"./utils/enforce/number/positive":10,"./utils/sumArray":12}],4:[function(require,module,exports){"use strict";var enforceNumber=require("./utils/enforce/number");function compoundAnnualGrowthRate(opts){var startValue=opts.startValue;var endValue=opts.endValue;var years=opts.years;var result={};enforceNumber(opts);if(!startValue||!endValue||!years){throw new Error("Start value, end value and years are required and must be numbers.")}result.raw=Math.pow(endValue/startValue,1/years)-1;result.rounded=Math.round(result.raw*1e3)/1e3;result.percent=result.rounded*100;return result}module.exports=compoundAnnualGrowthRate},{"./utils/enforce/number":9}],5:[function(require,module,exports){"use strict";module.exports={interest:require("./interest"),cashFlow:require("./cashFlow"),compoundAnnualGrowthRate:require("./compoundAnnualGrowthRate"),inflationAdjustedReturn:require("./inflationAdjustedReturn"),amortization:require("./amortization"),returnOnInvestment:require("./returnOnInvestment")}},{"./amortization":2,"./cashFlow":3,"./compoundAnnualGrowthRate":4,"./inflationAdjustedReturn":6,"./interest":7,"./returnOnInvestment":8}],6:[function(require,module,exports){"use strict";function inflationAdjustedReturn(opts){var investmentReturn=opts.investmentReturn;var _opts$inflationRate=opts.inflationRate;var inflationRate=_opts$inflationRate===undefined?true:_opts$inflationRate;var realReturn=void 0;if(!investmentReturn||!inflationRate){throw new Error("Income and expenses are required and must be non-negative.")}realReturn=((1+investmentReturn)/(1+inflationRate)-1)*100;realReturn=Math.round(realReturn*100)/100;return realReturn}module.exports=inflationAdjustedReturn},{}],7:[function(require,module,exports){"use strict";var enforcePositive=require("./utils/enforce/number/positive");function interest(opts){var principal=opts.principal;var rate=opts.rate;var periods=opts.periods;var compoundings=opts.compoundings;var result={};delete opts.compounding;delete opts.compoundingsPerPeriod;enforcePositive(opts);if(!principal||!rate||!periods){throw new Error("Principal, rate and number of periods are required and must be non-negative.")}if(compoundings){result.total=Math.pow(1+rate/100/compoundings,compoundings*periods)*principal;result.total=Math.round(result.total*100)/100}else{result.total=principal*(1+rate/100*periods)}result.interest=result.total-principal;return result}module.exports=interest},{"./utils/enforce/number/positive":10}],8:[function(require,module,exports){"use strict";var enforceNumber=require("./utils/enforce/number");function returnOnInvestment(opts){var earnings=opts.earnings;var initialInvestment=opts.initialInvestment;var result={};enforceNumber(opts);if(!earnings||!initialInvestment){throw new Error("Earnings and initial investment are required and must be numbers.")}result.raw=(earnings-initialInvestment)/initialInvestment;result.rounded=Math.round(result.raw*1e4)/1e4;result.percent=result.rounded*100;return result}module.exports=returnOnInvestment},{"./utils/enforce/number":9}],9:[function(require,module,exports){"use strict";function enforceNumber(opts){for(var key in opts){if(opts.hasOwnProperty(key)){if(typeof opts[key]==="undefined"||isNaN(parseFloat(opts[key]))){throw new Error(key+" must be a number.")}}}}module.exports=enforceNumber},{}],10:[function(require,module,exports){"use strict";var processOpts=require("../../processOpts");function check(key,val){if(typeof val==="undefined"||isNaN(parseFloat(val))||val<0){throw new Error(key+" must be a non-negative value.")}}function enforceNonNegativeNumber(opts){processOpts(opts,check)}module.exports=enforceNonNegativeNumber},{"../../processOpts":11}],11:[function(require,module,exports){"use strict";function processOpts(opts,cb){if(opts===Object(opts)&&Object.prototype.toString.call(opts)!=="[object Array]"){for(var key in opts){if(opts.hasOwnProperty(key)){cb(key,opts[key])}}}else if(opts instanceof Array){for(var i=0;i<opts.length;i++){cb("All params",opts[i])}}else{cb("All params",opts)}}module.exports=processOpts},{}],12:[function(require,module,exports){"use strict";function sumArray(arr){var total=0;for(var i=0;i<arr.length;i++){total+=arr[i]}return total}module.exports=sumArray},{}]},{},[5])(5)});