nhb-toolbox 4.0.57 → 4.0.70

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/cjs/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMemoizedFibonacci = exports.getFibonacciSeriesMemo = exports.getFibonacciSeries = exports.getFibonacciNumbers = exports.getFibonacci = exports.generateFibonacci = exports.fibonacciGenerator = exports.calculatePercentage = exports.sumOfNumbers = exports.sumNumbers = exports.sumDigits = exports.reverseNumber = exports.getSumOfNumbers = exports.getRandomNumber = exports.getAverageOfNumbers = exports.getAverage = exports.convertToDecimal = exports.calculateLCM = exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.calculateAverage = exports.wordCount = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = exports.countWordsInString = exports.countWords = exports.slugifyString = exports.reverseString = exports.replaceAllInString = exports.normalizeString = exports.maskString = exports.formatWithPlural = exports.formatUnitWithPlural = exports.formatNumberWithPluralUnit = exports.extractURLs = exports.extractEmails = exports.convertStringCase = exports.isSnakeCase = exports.isPascalCase = exports.isPalindrome = exports.isKebabCase = exports.isEmojiOnly = exports.isCamelCase = exports.generateAnagrams = exports.truncateString = exports.trimString = exports.generateRandomID = exports.capitalizeString = void 0;
4
- exports.convertRgbaToHsla = exports.convertRgbaToHex8 = exports.convertHslToRgb = exports.convertHslToHex = exports.convertHslaToRgba = exports.convertHslaToHex8 = exports.convertHexToRgb = exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.generateRandomHSLColor = exports.generateRandomColorInHexRGB = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.roundNumber = exports.numberToOrdinal = exports.getRandomFloat = exports.getRandomDecimal = exports.getOrdinalNumber = exports.getOrdinal = exports.formatCurrency = exports.convertToOrdinal = exports.convertNumberToOrdinal = exports.convertNumberToCurrency = exports.clampNumber = exports.cardinalToOrdinal = exports.isPrimeNumber = exports.isPrime = exports.getPrimeNumbers = exports.findPrimeNumbers = exports.numberToWords = exports.convertToRomanNumerals = exports.convertNumberToWords = exports.isPerfectSquare = exports.isParOfFibonacciSeries = exports.isParOfFibonacci = exports.isOddNumber = exports.isOdd = exports.isMultiple = exports.isInvalidNumbers = exports.isFibonacci = exports.isEvenNumber = exports.isEven = exports.areInvalidNumbers = exports.getNthFibonacci = exports.getMemoizedFibonacciSeries = void 0;
5
- exports.getDuplicatesFromArray = exports.getDuplicates = exports.findMissingElements = exports.extractMissingElements = exports.extractDuplicatesFromArray = exports.extractDuplicates = exports.createOptionsArray = exports.sortAnArray = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = exports.getTimeStringFromUTC = exports.getMinutesFromUTC = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = exports.extractMinutesFromUTC = exports.extractHourMinute = exports.convertMinutesToUTCOffset = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.Chronus = exports.Chronos = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidTimeString = exports.isValidTime = exports.isLeapYear = exports.greet = exports.getGreeting = exports.generateGreeting = exports.Colour = exports.Color = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = void 0;
6
- exports.getQueryParams = exports.generateQueryParams = exports.formatQueryParams = exports.createQueryParams = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedValues = exports.parseStringifiedPrimitives = exports.parseStringifiedObjectValues = exports.parsePrimitives = exports.parsePrimitiveData = exports.parseObjectValues = exports.parseJsonToObject = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.countObjectFields = exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = exports.isFileUpload = exports.isFileList = exports.isFileArray = exports.isCustomFileArray = exports.isCustomFile = exports.serializeForm = exports.parseFormData = exports.createFormData = exports.createControlledFormData = exports.convertIntoFormData = exports.naturalSortForString = exports.naturalSort = exports.compareSorter = exports.compareNaturally = exports.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.removeDuplicates = exports.moveArrayElement = exports.getMissingElements = void 0;
7
- exports.isFunction = exports.isError = exports.isEmptyObjectGuard = exports.isEmptyObject = exports.isDate = exports.isBigInt = exports.isArrayWithLength = exports.isArrayOfType = exports.isArray = exports.doesReturnPromise = exports.isUndefined = exports.isTruthy = exports.isSymbol = exports.isString = exports.isPrimitive = exports.isPositiveInteger = exports.isNumber = exports.isNull = exports.isNonEmptyString = exports.isInteger = exports.isFalsy = exports.isBoolean = exports.throttleAction = exports.parsePrimitivesDeep = exports.parseJsonDeep = exports.parseJSON = exports.isDeepEqual = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.getClassDetails = exports.deepParsePrimitives = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = exports.saveToLocalStorage = exports.removeFromSessionStorage = exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.getQueryStringAsObject = exports.queryStringToObject = exports.parseQueryString = void 0;
8
- exports.isValidURL = exports.isValidEmail = exports.isUUID = exports.isURL = exports.isPhoneNumber = exports.isNumericString = exports.isNodeEnvironment = exports.isNodeENV = exports.isNode = exports.isIPAddress = exports.isExpectedNodeENV = exports.isEnvironment = exports.isEmailArray = exports.isEmail = exports.isDateString = exports.isBrowser = exports.isBase64 = exports.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isRegExp = exports.isPromise = exports.isObjectWithKeys = exports.isObjectEmpty = exports.isObject = exports.isNotEmptyObject = exports.isMethodDescriptor = exports.isMethod = exports.isMap = exports.isJSONObject = exports.isJSON = void 0;
3
+ exports.getFibonacciSeries = exports.getFibonacciNumbers = exports.getFibonacci = exports.generateFibonacci = exports.fibonacciGenerator = exports.calculatePercentage = exports.Unit = exports.Currency = exports.sumOfNumbers = exports.sumNumbers = exports.sumDigits = exports.reverseNumber = exports.getSumOfNumbers = exports.getRandomNumber = exports.getAverageOfNumbers = exports.getAverage = exports.convertToDecimal = exports.calculateLCM = exports.calculateLCD = exports.calculateHCF = exports.calculateGCD = exports.calculateAverage = exports.wordCount = exports.levenshteinDistance = exports.getLevenshteinDistance = exports.extractNumbersFromString = exports.countWordsInString = exports.countWords = exports.slugifyString = exports.reverseString = exports.replaceAllInString = exports.normalizeString = exports.maskString = exports.formatWithPlural = exports.formatUnitWithPlural = exports.formatNumberWithPluralUnit = exports.extractURLs = exports.extractEmails = exports.convertStringCase = exports.isSnakeCase = exports.isPascalCase = exports.isPalindrome = exports.isKebabCase = exports.isEmojiOnly = exports.isCamelCase = exports.generateAnagrams = exports.truncateString = exports.trimString = exports.generateRandomID = exports.capitalizeString = void 0;
4
+ exports.convertHslToRgb = exports.convertHslToHex = exports.convertHslaToRgba = exports.convertHslaToHex8 = exports.convertHexToRgb = exports.convertHexToHsl = exports.convertHex8ToRgba = exports.convertHex8ToHsla = exports.convertColorCode = exports.generateRandomHSLColor = exports.generateRandomColorInHexRGB = exports.getColorForInitial = exports.getNumbersInRange = exports.roundToNearestInterval = exports.roundToNearest = exports.roundNumberToNearestInterval = exports.roundNumber = exports.numberToOrdinal = exports.getRandomFloat = exports.getRandomDecimal = exports.getOrdinalNumber = exports.getOrdinal = exports.formatCurrency = exports.convertToOrdinal = exports.convertNumberToOrdinal = exports.convertNumberToCurrency = exports.clampNumber = exports.cardinalToOrdinal = exports.isPrimeNumber = exports.isPrime = exports.getPrimeNumbers = exports.findPrimeNumbers = exports.numberToWords = exports.convertToRomanNumerals = exports.convertNumberToWords = exports.isPerfectSquare = exports.isParOfFibonacciSeries = exports.isParOfFibonacci = exports.isOddNumber = exports.isOdd = exports.isMultiple = exports.isInvalidNumbers = exports.isFibonacci = exports.isEvenNumber = exports.isEven = exports.areInvalidNumbers = exports.getNthFibonacci = exports.getMemoizedFibonacciSeries = exports.getMemoizedFibonacci = exports.getFibonacciSeriesMemo = void 0;
5
+ exports.findMissingElements = exports.extractMissingElements = exports.extractDuplicatesFromArray = exports.extractDuplicates = exports.createOptionsArray = exports.sortAnArray = exports.shuffleArray = exports.isValidEmptyArray = exports.isInvalidOrEmptyArray = exports.getLastArrayElement = exports.flattenArray = exports.filterArrayOfObjects = exports.minutesToUTCOffset = exports.getTotalMinutesFromUTC = exports.getTotalMinutesFromTime = exports.getTotalMinutes = exports.getTimeStringFromUTC = exports.getMinutesFromUTC = exports.getCurrentTime = exports.getCurrentDateTime = exports.formatUTCOffset = exports.extractTotalMinutesFromTime = exports.extractTimeStringFromUTC = exports.extractTimeFromUTC = exports.extractMinutesFromUTC = exports.extractHourMinute = exports.convertMinutesToUTCOffset = exports.chronusts = exports.chronusjs = exports.chronus = exports.chronosts = exports.chronosjs = exports.chronos = exports.Chronus = exports.Chronos = exports.isValidUTCOffSet = exports.isValidUTC = exports.isValidTimeString = exports.isValidTime = exports.isLeapYear = exports.greet = exports.getGreeting = exports.generateGreeting = exports.Colour = exports.Color = exports.convertRgbToRgba = exports.convertRgbToHsl = exports.convertRgbToHex = exports.convertRgbaToHsla = exports.convertRgbaToHex8 = void 0;
6
+ exports.formatQueryParams = exports.createQueryParams = exports.remapObjectFields = exports.remapFields = exports.pickObjectFieldsByCondition = exports.pickObjectFields = exports.pickFieldsByCondition = exports.pickFields = exports.convertObjectValues = exports.sanitizeData = exports.parseStringifiedValues = exports.parseStringifiedPrimitives = exports.parseStringifiedObjectValues = exports.parsePrimitives = exports.parsePrimitiveData = exports.parseObjectValues = exports.parseJsonToObject = exports.mergeObjects = exports.mergeAndFlattenObjects = exports.flattenObjectKeyValue = exports.flattenObjectDotNotation = exports.extractUpdatedFields = exports.extractUpdatedAndNewFields = exports.extractNewFields = exports.countObjectFields = exports.cloneObject = exports.isValidFormData = exports.isOriginFileObj = exports.isFileUpload = exports.isFileList = exports.isFileArray = exports.isCustomFileArray = exports.isCustomFile = exports.serializeForm = exports.parseFormData = exports.createFormData = exports.createControlledFormData = exports.convertIntoFormData = exports.naturalSortForString = exports.naturalSort = exports.compareSorter = exports.compareNaturally = exports.splitArray = exports.rotateArray = exports.removeDuplicatesFromArray = exports.removeDuplicates = exports.moveArrayElement = exports.getMissingElements = exports.getDuplicatesFromArray = exports.getDuplicates = void 0;
7
+ exports.isEmptyObjectGuard = exports.isEmptyObject = exports.isDate = exports.isBigInt = exports.isArrayWithLength = exports.isArrayOfType = exports.isArray = exports.doesReturnPromise = exports.isUndefined = exports.isTruthy = exports.isSymbol = exports.isString = exports.isPrimitive = exports.isPositiveInteger = exports.isNumber = exports.isNull = exports.isNonEmptyString = exports.isInteger = exports.isFalsy = exports.isBoolean = exports.throttleAction = exports.parsePrimitivesDeep = exports.parseJsonDeep = exports.parseJSON = exports.isDeepEqual = exports.getStaticMethodsCount = exports.getStaticMethodNames = exports.getInstanceMethodsCount = exports.getInstanceMethodNames = exports.getClassDetails = exports.deepParsePrimitives = exports.debounceAction = exports.countStaticMethods = exports.countInstanceMethods = exports.convertArrayToString = exports.saveToSessionStorage = exports.saveToLocalStorage = exports.removeFromSessionStorage = exports.removeFromLocalStorage = exports.getFromSessionStorage = exports.getFromLocalStorage = exports.toggleFullScreen = exports.smoothScrollTo = exports.copyToClipboard = exports.updateQueryParam = exports.getQueryStringAsObject = exports.queryStringToObject = exports.parseQueryString = exports.getQueryParams = exports.generateQueryParams = void 0;
8
+ exports.isValidURL = exports.isValidEmail = exports.isUUID = exports.isURL = exports.isPhoneNumber = exports.isNumericString = exports.isNodeEnvironment = exports.isNodeENV = exports.isNode = exports.isIPAddress = exports.isExpectedNodeENV = exports.isEnvironment = exports.isEmailArray = exports.isEmail = exports.isDateString = exports.isBrowser = exports.isBase64 = exports.isValidSet = exports.isValidObject = exports.isValidMap = exports.isValidJSON = exports.isValidArray = exports.isSet = exports.isReturningPromise = exports.isRegularExpression = exports.isRegExp = exports.isPromise = exports.isObjectWithKeys = exports.isObjectEmpty = exports.isObject = exports.isNotEmptyObject = exports.isMethodDescriptor = exports.isMethod = exports.isMap = exports.isJSONObject = exports.isJSON = exports.isFunction = exports.isError = void 0;
9
9
  // ! String Utilities
10
10
  var basics_1 = require("./string/basics");
11
11
  Object.defineProperty(exports, "capitalizeString", { enumerable: true, get: function () { return basics_1.capitalizeString; } });
@@ -56,6 +56,10 @@ Object.defineProperty(exports, "reverseNumber", { enumerable: true, get: functio
56
56
  Object.defineProperty(exports, "sumDigits", { enumerable: true, get: function () { return basics_2.sumDigits; } });
57
57
  Object.defineProperty(exports, "sumNumbers", { enumerable: true, get: function () { return basics_2.sumNumbers; } });
58
58
  Object.defineProperty(exports, "sumOfNumbers", { enumerable: true, get: function () { return basics_2.sumNumbers; } });
59
+ var Currency_1 = require("./number/Currency");
60
+ Object.defineProperty(exports, "Currency", { enumerable: true, get: function () { return Currency_1.Currency; } });
61
+ var Unit_1 = require("./number/Unit");
62
+ Object.defineProperty(exports, "Unit", { enumerable: true, get: function () { return Unit_1.Unit; } });
59
63
  var percent_1 = require("./number/percent");
60
64
  Object.defineProperty(exports, "calculatePercentage", { enumerable: true, get: function () { return percent_1.calculatePercentage; } });
61
65
  var fibonacci_1 = require("./number/fibonacci");
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Currency = void 0;
4
+ const utilities_1 = require("./utilities");
5
+ const rateCache = new Map();
6
+ /**
7
+ * * A utility class for handling currency operations like formatting and conversion.
8
+ *
9
+ * - Supports formatting based on locale.
10
+ * - Converts between **fiat currencies supported by `api.frankfurter.app`**.
11
+ * - Automatically caches conversion rates to reduce redundant API calls.
12
+ * - Intended for use with numeric inputs (number or numeric string).
13
+ */
14
+ class Currency {
15
+ #amount;
16
+ #code;
17
+ /**
18
+ * * The formatted currency string (e.g., `$1,000.00`).
19
+ *
20
+ * - Generated using the `en-US` locale during construction.
21
+ * - This is a display-friendly version of the currency value.
22
+ * - For formatting with other locales, use the `format(locale)` method.
23
+ */
24
+ currency;
25
+ /**
26
+ * Creates an instance of the Currency class.
27
+ *
28
+ * @param amount - The numeric amount of currency (e.g., `100`, `'99.99'`).
29
+ * @param code - The ISO 4217 currency code representing the currency (e.g., `'USD'`, `'EUR'`).
30
+ */
31
+ constructor(amount, code) {
32
+ this.#amount = Number(amount);
33
+ this.#code = code;
34
+ this.currency = this.format('en-US');
35
+ }
36
+ /**
37
+ * @instance Formats the currency for a given locale.
38
+ * @param locale - The target locale (e.g., 'de-DE')
39
+ * @returns The formatted currency string
40
+ */
41
+ format(locale) {
42
+ return (0, utilities_1.formatCurrency)(this.#amount, this.#code, locale);
43
+ }
44
+ /**
45
+ * @instance Converts the current currency amount to a target currency using real-time exchange rates.
46
+ *
47
+ * - Uses `api.frankfurter.app` to fetch live exchange rates.
48
+ * - Supports **only the following fiat currencies**:
49
+ * `AUD`, `BGN`, `BRL`, `CAD`, `CHF`, `CNY`, `CZK`, `DKK`, `EUR`, `GBP`, `HKD`, `HUF`, `IDR`, `ILS`, `INR`, `ISK`, `JPY`,
50
+ * `KRW`, `MXN`, `MYR`, `NOK`, `NZD`, `PHP`, `PLN`, `RON`, `SEK`, `SGD`, `THB`, `TRY`, `USD`, `ZAR`.
51
+ * - Uses cached rates unless `forceRefresh` is set to `true`.
52
+ * - If API fails or currency not supported, falls back to `fallbackRate` if provided.
53
+ *
54
+ * @param to - The target currency code (must be one of the supported ones, e.g., `'EUR'`, `'USD'`).
55
+ * @param options - Optional settings:
56
+ * - `fallbackRate`: A manual exchange rate to use if the API call fails or currency is not supported.
57
+ * - `forceRefresh`: If true, ignores cached rates and fetches fresh data.
58
+ * @returns The converted amount as a number.
59
+ * @throws Will throw if the API call fails and no `fallbackRate` is provided.
60
+ */
61
+ async convert(to, options) {
62
+ const key = `${this.#code}->${to}`;
63
+ if (!options?.forceRefresh && rateCache.has(key)) {
64
+ const cachedRate = rateCache.get(key);
65
+ return this.#amount * cachedRate;
66
+ }
67
+ try {
68
+ const rate = await this.#fetchFromFrankfurter(to);
69
+ rateCache.set(key, rate);
70
+ return this.#amount * rate;
71
+ }
72
+ catch (error) {
73
+ if (options?.fallbackRate != null) {
74
+ console.warn(`Currency conversion failed (${this.#code} → ${to}): ${JSON.stringify(error)}. Using fallback rate...`);
75
+ return this.#amount * options.fallbackRate;
76
+ }
77
+ throw new Error(`Currency conversion failed (${this.#code} → ${to}): ${JSON.stringify(error)}`);
78
+ }
79
+ }
80
+ /**
81
+ * @private @instance Attempts to fetch rate from frankfurter.app
82
+ * @param to - Target currency code
83
+ * @returns Exchange rate (multiplier)
84
+ */
85
+ async #fetchFromFrankfurter(to) {
86
+ const url = `https://api.frankfurter.app/latest?amount=${this.#amount}&from=${this.#code}&to=${to}`;
87
+ const res = await fetch(url, { redirect: 'error' });
88
+ if (!res.ok)
89
+ throw new Error(`Frankfurter error: ${res.status}`);
90
+ const data = (await res.json());
91
+ if (!data.rates?.[to]) {
92
+ throw new Error(`Currency "${to}" not found in rates`);
93
+ }
94
+ return data.rates[to] / this.#amount;
95
+ }
96
+ }
97
+ exports.Currency = Currency;
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Unit = void 0;
4
+ /**
5
+ * @class Represents a measurable unit and supports conversions between various types of units.
6
+ *
7
+ * Includes static methods for:
8
+ * - Length: meters, feet, kilometers, miles
9
+ * - Mass: kilograms, pounds, grams, ounces
10
+ * - Temperature: Celsius, Fahrenheit, Kelvin
11
+ * - Volume: liters, gallons
12
+ * - Area: square meters, square feet
13
+ * - Speed: km/h, mph
14
+ * - Time: hours, minutes, seconds, days
15
+ * - Digital Storage: kilobytes, megabytes, gigabytes
16
+ * - Energy: joules, calories
17
+ * - Pressure: atm, pascals
18
+ * - Frequency: Hz, kHz
19
+ */
20
+ class Unit {
21
+ #value;
22
+ #unit;
23
+ /**
24
+ * * Creates an instance of the Unit class.
25
+ * @param value The numeric value to work with.
26
+ * @param unit The unit type of the value (e.g., 'kg', 'm', 'kb').
27
+ */
28
+ constructor(value, unit) {
29
+ this.#value = value;
30
+ this.#unit = unit;
31
+ }
32
+ /**
33
+ * @instance Returns the original value with unit (if passed in the constructor).
34
+ * @returns A string in the format "value unit".
35
+ */
36
+ toString() {
37
+ return `${this.#value} ${this.#unit ?? ''}`.trim();
38
+ }
39
+ /**
40
+ * @instance Converts the value using a static method name from the Unit class.
41
+ *
42
+ * *Provides IntelliSense and type safety for method selection.*
43
+ *
44
+ * @param methodName - A key of Unit class static method accepting a number and returning a number.
45
+ * @returns The converted numeric value.
46
+ */
47
+ convert(methodName) {
48
+ const method = Unit[methodName];
49
+ if (typeof method !== 'function') {
50
+ throw new Error(`Method ${methodName} is not a valid method!`);
51
+ }
52
+ // @ts-expect-error -_-
53
+ return method(this.#value);
54
+ }
55
+ // ----- Static Conversion Methods -----
56
+ /** Converts meters to feet. */
57
+ static metersToFeet(m) {
58
+ return m * 3.28084;
59
+ }
60
+ /** Converts feet to meters. */
61
+ static feetToMeters(ft) {
62
+ return ft / 3.28084;
63
+ }
64
+ /** Converts kilometers to miles. */
65
+ static kmToMiles(km) {
66
+ return km * 0.621371;
67
+ }
68
+ /** Converts miles to kilometers. */
69
+ static milesToKm(mi) {
70
+ return mi / 0.621371;
71
+ }
72
+ /** Converts kilograms to pounds. */
73
+ static kgToLbs(kg) {
74
+ return kg * 2.20462;
75
+ }
76
+ /** Converts pounds to kilograms. */
77
+ static lbsToKg(lbs) {
78
+ return lbs / 2.20462;
79
+ }
80
+ /** Converts grams to ounces. */
81
+ static gramsToOunces(g) {
82
+ return g * 0.035274;
83
+ }
84
+ /** Converts ounces to grams. */
85
+ static ouncesToGrams(oz) {
86
+ return oz / 0.035274;
87
+ }
88
+ /** Converts Celsius to Fahrenheit. */
89
+ static celsiusToFahrenheit(c) {
90
+ return (c * 9) / 5 + 32;
91
+ }
92
+ /** Converts Fahrenheit to Celsius. */
93
+ static fahrenheitToCelsius(f) {
94
+ return ((f - 32) * 5) / 9;
95
+ }
96
+ /** Converts Celsius to Kelvin. */
97
+ static celsiusToKelvin(c) {
98
+ return c + 273.15;
99
+ }
100
+ /** Converts Kelvin to Celsius. */
101
+ static kelvinToCelsius(k) {
102
+ return k - 273.15;
103
+ }
104
+ /** Converts liters to gallons. */
105
+ static litersToGallons(l) {
106
+ return l * 0.264172;
107
+ }
108
+ /** Converts gallons to liters. */
109
+ static gallonsToLiters(gal) {
110
+ return gal / 0.264172;
111
+ }
112
+ /** Converts square meters to square feet. */
113
+ static sqmToSqft(sqm) {
114
+ return sqm * 10.7639;
115
+ }
116
+ /** Converts square feet to square meters. */
117
+ static sqftToSqm(sqft) {
118
+ return sqft / 10.7639;
119
+ }
120
+ /** Converts kilometers per hour to miles per hour. */
121
+ static kmphToMph(kmph) {
122
+ return kmph * 0.621371;
123
+ }
124
+ /** Converts miles per hour to kilometers per hour. */
125
+ static mphToKmph(mph) {
126
+ return mph / 0.621371;
127
+ }
128
+ /** Converts hours to minutes. */
129
+ static hoursToMinutes(h) {
130
+ return h * 60;
131
+ }
132
+ /** Converts minutes to seconds. */
133
+ static minutesToSeconds(m) {
134
+ return m * 60;
135
+ }
136
+ /** Converts days to hours. */
137
+ static daysToHours(d) {
138
+ return d * 24;
139
+ }
140
+ /** Converts megabytes to gigabytes. */
141
+ static mbToGb(mb) {
142
+ return mb / 1024;
143
+ }
144
+ /** Converts gigabytes to megabytes. */
145
+ static gbToMb(gb) {
146
+ return gb * 1024;
147
+ }
148
+ /** Converts kilobytes to megabytes. */
149
+ static kbToMb(kb) {
150
+ return kb / 1024;
151
+ }
152
+ /** Converts joules to calories. */
153
+ static joulesToCalories(j) {
154
+ return j * 0.239006;
155
+ }
156
+ /** Converts calories to joules. */
157
+ static caloriesToJoules(cal) {
158
+ return cal / 0.239006;
159
+ }
160
+ /** Converts atmospheres to pascals. */
161
+ static atmToPascal(atm) {
162
+ return atm * 101325;
163
+ }
164
+ /** Converts pascals to atmospheres. */
165
+ static pascalToAtm(pa) {
166
+ return pa / 101325;
167
+ }
168
+ /** Converts hertz to kilohertz. */
169
+ static hzToKHz(hz) {
170
+ return hz / 1000;
171
+ }
172
+ /** Converts kilohertz to hertz. */
173
+ static kHzToHz(khz) {
174
+ return khz * 1000;
175
+ }
176
+ }
177
+ exports.Unit = Unit;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CURRENCY_LOCALES = exports.LOCALE_CODES = exports.CURRENCY_CODES = exports.thousands = exports.tens = exports.teens = exports.ones = void 0;
3
+ exports.UNIT_LABELS = exports.SUPPORTED_CURRENCIES = exports.CURRENCY_LOCALES = exports.LOCALE_CODES = exports.CURRENCY_CODES = exports.thousands = exports.tens = exports.teens = exports.ones = void 0;
4
4
  exports.ones = [
5
5
  '',
6
6
  'one',
@@ -505,3 +505,83 @@ exports.CURRENCY_LOCALES = {
505
505
  ZMW: 'en-ZM', // Zambian Kwacha
506
506
  ZWL: 'en-ZW', // Zimbabwean Dollar
507
507
  };
508
+ /** * Fiat currencies supported by Frankfurter API */
509
+ exports.SUPPORTED_CURRENCIES = [
510
+ 'AUD',
511
+ 'BGN',
512
+ 'BRL',
513
+ 'CAD',
514
+ 'CHF',
515
+ 'CNY',
516
+ 'CZK',
517
+ 'DKK',
518
+ 'EUR',
519
+ 'GBP',
520
+ 'HKD',
521
+ 'HUF',
522
+ 'IDR',
523
+ 'ILS',
524
+ 'INR',
525
+ 'ISK',
526
+ 'JPY',
527
+ 'KRW',
528
+ 'MXN',
529
+ 'MYR',
530
+ 'NOK',
531
+ 'NZD',
532
+ 'PHP',
533
+ 'PLN',
534
+ 'RON',
535
+ 'SEK',
536
+ 'SGD',
537
+ 'THB',
538
+ 'TRY',
539
+ 'USD',
540
+ 'ZAR',
541
+ ];
542
+ /**
543
+ * @constant Unit names and their full readable labels.
544
+ */
545
+ exports.UNIT_LABELS = {
546
+ // Length
547
+ m: 'Meter',
548
+ km: 'Kilometer',
549
+ mi: 'Mile',
550
+ ft: 'Foot',
551
+ // Mass / Weight
552
+ kg: 'Kilogram',
553
+ lbs: 'Pound',
554
+ g: 'Gram',
555
+ oz: 'Ounce',
556
+ // Temperature
557
+ C: 'Celsius',
558
+ F: 'Fahrenheit',
559
+ K: 'Kelvin',
560
+ // Volume
561
+ l: 'Liter',
562
+ gal: 'Gallon',
563
+ // Area
564
+ sqm: 'Square Meter',
565
+ sqft: 'Square Foot',
566
+ // Speed
567
+ kmph: 'Kilometer per Hour',
568
+ mph: 'Miles per Hour',
569
+ // Time
570
+ h: 'Hour',
571
+ min: 'Minute',
572
+ sec: 'Second',
573
+ d: 'Day',
574
+ // Digital Storage
575
+ kb: 'Kilobyte',
576
+ mb: 'Megabyte',
577
+ gb: 'Gigabyte',
578
+ // Energy
579
+ j: 'Joule',
580
+ cal: 'Calorie',
581
+ // Pressure
582
+ atm: 'Atmosphere',
583
+ pa: 'Pascal',
584
+ // Frequency
585
+ hz: 'Hertz',
586
+ khz: 'Kilohertz',
587
+ };
@@ -11,7 +11,7 @@ export declare const MINUTE_FORMATS: readonly ["mm", "m"];
11
11
  export declare const SECOND_FORMATS: readonly ["ss", "s"];
12
12
  export declare const MILLISECOND_FORMATS: readonly ["ms", "mss"];
13
13
  export declare const TIME_FORMATS: readonly ["a", "A"];
14
- export declare const sortedFormats: ("a" | "M" | "D" | "h" | "s" | "A" | "YYYY" | "YY" | "yyyy" | "yy" | "MM" | "mmm" | "mmmm" | "DD" | "Do" | "d" | "dd" | "ddd" | "H" | "HH" | "hh" | "mm" | "m" | "ss" | "ms" | "mss")[];
14
+ export declare const sortedFormats: ("a" | "m" | "h" | "d" | "M" | "D" | "s" | "A" | "YYYY" | "YY" | "yyyy" | "yy" | "MM" | "mmm" | "mmmm" | "DD" | "Do" | "dd" | "ddd" | "H" | "HH" | "hh" | "mm" | "ss" | "ms" | "mss")[];
15
15
  export declare const TIME_ZONES: {
16
16
  /** International Date Line West (Baker Island, Howland Island) */
17
17
  readonly IDLW: number;
@@ -4,6 +4,8 @@ export { isCamelCase, isEmojiOnly, isKebabCase, isPalindrome, isPascalCase, isSn
4
4
  export { convertStringCase, extractEmails, extractURLs, formatUnitWithPlural as formatNumberWithPluralUnit, formatUnitWithPlural, formatUnitWithPlural as formatWithPlural, maskString, normalizeString, replaceAllInString, reverseString, slugifyString, } from './string/convert';
5
5
  export { countWords, countWords as countWordsInString, extractNumbersFromString, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, countWords as wordCount, } from './string/utilities';
6
6
  export { getAverage as calculateAverage, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, convertToDecimal, getAverage, getAverage as getAverageOfNumbers, getRandomNumber, sumNumbers as getSumOfNumbers, reverseNumber, sumDigits, sumNumbers, sumNumbers as sumOfNumbers, } from './number/basics';
7
+ export { Currency } from './number/Currency';
8
+ export { Unit } from './number/Unit';
7
9
  export { calculatePercentage } from './number/percent';
8
10
  export { fibonacciGenerator, fibonacciGenerator as generateFibonacci, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getNthFibonacci, } from './number/fibonacci';
9
11
  export { areInvalidNumbers, isEven, isEven as isEvenNumber, isFibonacci, areInvalidNumbers as isInvalidNumbers, isMultiple, isOdd, isOdd as isOddNumber, isFibonacci as isParOfFibonacci, isFibonacci as isParOfFibonacciSeries, isPerfectSquare, } from './number/guards';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,cAAc,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACN,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,oBAAoB,IAAI,0BAA0B,EAClD,oBAAoB,EACpB,oBAAoB,IAAI,gBAAgB,EACxC,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,aAAa,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,UAAU,EACV,UAAU,IAAI,kBAAkB,EAChC,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,IAAI,mBAAmB,EAC7C,UAAU,IAAI,SAAS,GACvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACN,UAAU,IAAI,gBAAgB,EAC9B,YAAY,IAAI,YAAY,EAC5B,YAAY,EACZ,YAAY,IAAI,YAAY,EAC5B,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,UAAU,IAAI,mBAAmB,EACjC,eAAe,EACf,UAAU,IAAI,eAAe,EAC7B,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,IAAI,YAAY,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,IAAI,iBAAiB,EACvC,kBAAkB,IAAI,YAAY,EAClC,kBAAkB,IAAI,mBAAmB,EACzC,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,IAAI,oBAAoB,EAC9C,sBAAsB,IAAI,0BAA0B,EACpD,eAAe,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,iBAAiB,EACjB,MAAM,EACN,MAAM,IAAI,YAAY,EACtB,WAAW,EACX,iBAAiB,IAAI,gBAAgB,EACrC,UAAU,EACV,KAAK,EACL,KAAK,IAAI,WAAW,EACpB,WAAW,IAAI,gBAAgB,EAC/B,WAAW,IAAI,sBAAsB,EACrC,eAAe,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,aAAa,IAAI,oBAAoB,EACrC,sBAAsB,EACtB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,gBAAgB,EAChB,gBAAgB,IAAI,eAAe,EACnC,OAAO,EACP,OAAO,IAAI,aAAa,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACN,UAAU,IAAI,iBAAiB,EAC/B,WAAW,EACX,cAAc,IAAI,uBAAuB,EACzC,UAAU,IAAI,sBAAsB,EACpC,UAAU,IAAI,gBAAgB,EAC9B,cAAc,EACd,UAAU,EACV,UAAU,IAAI,gBAAgB,EAC9B,cAAc,IAAI,gBAAgB,EAClC,cAAc,EACd,UAAU,IAAI,eAAe,EAC7B,cAAc,IAAI,WAAW,EAC7B,cAAc,IAAI,4BAA4B,EAC9C,cAAc,EACd,cAAc,IAAI,sBAAsB,GACxC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACN,2BAA2B,EAC3B,sBAAsB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EACN,WAAW,IAAI,gBAAgB,EAC/B,WAAW,EACX,WAAW,IAAI,KAAK,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACN,UAAU,EACV,WAAW,EACX,WAAW,IAAI,iBAAiB,EAChC,gBAAgB,IAAI,UAAU,EAC9B,gBAAgB,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EACN,OAAO,EACP,OAAO,IAAI,SAAS,EACpB,OAAO,IAAI,SAAS,EACpB,OAAO,IAAI,OAAO,EAClB,OAAO,IAAI,SAAS,EACpB,OAAO,IAAI,SAAS,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,eAAe,IAAI,yBAAyB,EAC5C,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,IAAI,wBAAwB,EAC9C,eAAe,IAAI,2BAA2B,EAC9C,eAAe,EACf,kBAAkB,EAClB,kBAAkB,IAAI,cAAc,EACpC,qBAAqB,IAAI,iBAAiB,EAC1C,kBAAkB,IAAI,oBAAoB,EAC1C,eAAe,EACf,eAAe,IAAI,uBAAuB,EAC1C,qBAAqB,IAAI,sBAAsB,EAC/C,eAAe,IAAI,kBAAkB,GACrC,MAAM,cAAc,CAAC;AAGtB,OAAO,EACN,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,IAAI,iBAAiB,EAC1C,YAAY,GACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EACN,kBAAkB,EAClB,aAAa,IAAI,iBAAiB,EAClC,aAAa,IAAI,0BAA0B,EAC3C,mBAAmB,IAAI,sBAAsB,EAC7C,mBAAmB,EACnB,aAAa,EACb,aAAa,IAAI,sBAAsB,EACvC,mBAAmB,IAAI,kBAAkB,EACzC,gBAAgB,EAChB,yBAAyB,IAAI,gBAAgB,EAC7C,yBAAyB,EACzB,WAAW,EACX,UAAU,GACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,WAAW,IAAI,gBAAgB,EAC/B,WAAW,IAAI,aAAa,EAC5B,WAAW,EACX,WAAW,IAAI,oBAAoB,GACnC,MAAM,eAAe,CAAC;AAGvB,OAAO,EACN,wBAAwB,IAAI,mBAAmB,EAC/C,wBAAwB,EACxB,wBAAwB,IAAI,cAAc,GAC1C,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EACN,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EACN,gBAAgB,EAChB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,iBAAiB,EACjB,iBAAiB,IAAI,kBAAkB,EACvC,iBAAiB,IAAI,eAAe,EACpC,iBAAiB,IAAI,4BAA4B,EACjD,iBAAiB,IAAI,0BAA0B,EAC/C,iBAAiB,IAAI,sBAAsB,EAC3C,YAAY,GACZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,mBAAmB,EACnB,UAAU,EACV,2BAA2B,IAAI,qBAAqB,EACpD,UAAU,IAAI,gBAAgB,EAC9B,2BAA2B,EAC3B,WAAW,EACX,WAAW,IAAI,iBAAiB,GAChC,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACN,mBAAmB,IAAI,iBAAiB,EACxC,mBAAmB,IAAI,iBAAiB,EACxC,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,IAAI,mBAAmB,EACvC,gBAAgB,IAAI,sBAAsB,EAC1C,gBAAgB,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,IAAI,uBAAuB,EAC/C,oBAAoB,EACpB,kBAAkB,IAAI,qBAAqB,EAC3C,WAAW,EACX,SAAS,EACT,SAAS,IAAI,aAAa,EAC1B,mBAAmB,IAAI,mBAAmB,EAC1C,cAAc,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EACN,SAAS,EACT,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,GACX,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,kBAAkB,IAAI,iBAAiB,EACvC,OAAO,EACP,aAAa,EACb,YAAY,IAAI,iBAAiB,EACjC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,aAAa,IAAI,kBAAkB,EACnC,OAAO,EACP,UAAU,EACV,MAAM,EACN,MAAM,IAAI,YAAY,EACtB,KAAK,EACL,kBAAkB,IAAI,QAAQ,EAC9B,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,aAAa,IAAI,aAAa,EAC9B,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,QAAQ,IAAI,mBAAmB,EAC/B,kBAAkB,EAClB,KAAK,EACL,YAAY,EACZ,MAAM,IAAI,WAAW,EACrB,KAAK,IAAI,UAAU,EACnB,gBAAgB,IAAI,aAAa,EACjC,KAAK,IAAI,UAAU,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACN,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,IAAI,iBAAiB,EAClC,WAAW,EACX,MAAM,EACN,aAAa,IAAI,SAAS,EAC1B,aAAa,IAAI,iBAAiB,EAClC,eAAe,EACf,aAAa,EACb,KAAK,EACL,MAAM,EACN,OAAO,IAAI,YAAY,EACvB,KAAK,IAAI,UAAU,GACnB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { Numeric } from '../types';
2
+ import type { ConvertOptions, CurrencyCode, LocaleCode, SupportedCurrency } from './types';
3
+ /**
4
+ * * A utility class for handling currency operations like formatting and conversion.
5
+ *
6
+ * - Supports formatting based on locale.
7
+ * - Converts between **fiat currencies supported by `api.frankfurter.app`**.
8
+ * - Automatically caches conversion rates to reduce redundant API calls.
9
+ * - Intended for use with numeric inputs (number or numeric string).
10
+ */
11
+ export declare class Currency {
12
+ #private;
13
+ /**
14
+ * * The formatted currency string (e.g., `$1,000.00`).
15
+ *
16
+ * - Generated using the `en-US` locale during construction.
17
+ * - This is a display-friendly version of the currency value.
18
+ * - For formatting with other locales, use the `format(locale)` method.
19
+ */
20
+ readonly currency: string;
21
+ /**
22
+ * Creates an instance of the Currency class.
23
+ *
24
+ * @param amount - The numeric amount of currency (e.g., `100`, `'99.99'`).
25
+ * @param code - The ISO 4217 currency code representing the currency (e.g., `'USD'`, `'EUR'`).
26
+ */
27
+ constructor(amount: Numeric, code: CurrencyCode);
28
+ /**
29
+ * @instance Formats the currency for a given locale.
30
+ * @param locale - The target locale (e.g., 'de-DE')
31
+ * @returns The formatted currency string
32
+ */
33
+ format(locale?: LocaleCode): string;
34
+ /**
35
+ * @instance Converts the current currency amount to a target currency using real-time exchange rates.
36
+ *
37
+ * - Uses `api.frankfurter.app` to fetch live exchange rates.
38
+ * - Supports **only the following fiat currencies**:
39
+ * `AUD`, `BGN`, `BRL`, `CAD`, `CHF`, `CNY`, `CZK`, `DKK`, `EUR`, `GBP`, `HKD`, `HUF`, `IDR`, `ILS`, `INR`, `ISK`, `JPY`,
40
+ * `KRW`, `MXN`, `MYR`, `NOK`, `NZD`, `PHP`, `PLN`, `RON`, `SEK`, `SGD`, `THB`, `TRY`, `USD`, `ZAR`.
41
+ * - Uses cached rates unless `forceRefresh` is set to `true`.
42
+ * - If API fails or currency not supported, falls back to `fallbackRate` if provided.
43
+ *
44
+ * @param to - The target currency code (must be one of the supported ones, e.g., `'EUR'`, `'USD'`).
45
+ * @param options - Optional settings:
46
+ * - `fallbackRate`: A manual exchange rate to use if the API call fails or currency is not supported.
47
+ * - `forceRefresh`: If true, ignores cached rates and fetches fresh data.
48
+ * @returns The converted amount as a number.
49
+ * @throws Will throw if the API call fails and no `fallbackRate` is provided.
50
+ */
51
+ convert(to: SupportedCurrency | CurrencyCode, options?: ConvertOptions): Promise<number>;
52
+ }
53
+ //# sourceMappingURL=Currency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Currency.d.ts","sourceRoot":"","sources":["../../../src/number/Currency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EACX,cAAc,EACd,YAAY,EAEZ,UAAU,EACV,iBAAiB,EACjB,MAAM,SAAS,CAAC;AAKjB;;;;;;;GAOG;AACH,qBAAa,QAAQ;;IAGpB;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;gBACS,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;IAM/C;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM;IAInC;;;;;;;;;;;;;;;;OAgBG;IACG,OAAO,CACZ,EAAE,EAAE,iBAAiB,GAAG,YAAY,EACpC,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC;CAiDlB"}
@@ -0,0 +1,101 @@
1
+ import type { UnitKey } from './types';
2
+ /**
3
+ * @class Represents a measurable unit and supports conversions between various types of units.
4
+ *
5
+ * Includes static methods for:
6
+ * - Length: meters, feet, kilometers, miles
7
+ * - Mass: kilograms, pounds, grams, ounces
8
+ * - Temperature: Celsius, Fahrenheit, Kelvin
9
+ * - Volume: liters, gallons
10
+ * - Area: square meters, square feet
11
+ * - Speed: km/h, mph
12
+ * - Time: hours, minutes, seconds, days
13
+ * - Digital Storage: kilobytes, megabytes, gigabytes
14
+ * - Energy: joules, calories
15
+ * - Pressure: atm, pascals
16
+ * - Frequency: Hz, kHz
17
+ */
18
+ export declare class Unit {
19
+ #private;
20
+ /**
21
+ * * Creates an instance of the Unit class.
22
+ * @param value The numeric value to work with.
23
+ * @param unit The unit type of the value (e.g., 'kg', 'm', 'kb').
24
+ */
25
+ constructor(value: number, unit?: UnitKey);
26
+ /**
27
+ * @instance Returns the original value with unit (if passed in the constructor).
28
+ * @returns A string in the format "value unit".
29
+ */
30
+ toString(): string;
31
+ /**
32
+ * @instance Converts the value using a static method name from the Unit class.
33
+ *
34
+ * *Provides IntelliSense and type safety for method selection.*
35
+ *
36
+ * @param methodName - A key of Unit class static method accepting a number and returning a number.
37
+ * @returns The converted numeric value.
38
+ */
39
+ convert<T extends keyof typeof Unit>(methodName: T): (typeof Unit)[T] extends (value: number) => number ? number : never;
40
+ /** Converts meters to feet. */
41
+ static metersToFeet(m: number): number;
42
+ /** Converts feet to meters. */
43
+ static feetToMeters(ft: number): number;
44
+ /** Converts kilometers to miles. */
45
+ static kmToMiles(km: number): number;
46
+ /** Converts miles to kilometers. */
47
+ static milesToKm(mi: number): number;
48
+ /** Converts kilograms to pounds. */
49
+ static kgToLbs(kg: number): number;
50
+ /** Converts pounds to kilograms. */
51
+ static lbsToKg(lbs: number): number;
52
+ /** Converts grams to ounces. */
53
+ static gramsToOunces(g: number): number;
54
+ /** Converts ounces to grams. */
55
+ static ouncesToGrams(oz: number): number;
56
+ /** Converts Celsius to Fahrenheit. */
57
+ static celsiusToFahrenheit(c: number): number;
58
+ /** Converts Fahrenheit to Celsius. */
59
+ static fahrenheitToCelsius(f: number): number;
60
+ /** Converts Celsius to Kelvin. */
61
+ static celsiusToKelvin(c: number): number;
62
+ /** Converts Kelvin to Celsius. */
63
+ static kelvinToCelsius(k: number): number;
64
+ /** Converts liters to gallons. */
65
+ static litersToGallons(l: number): number;
66
+ /** Converts gallons to liters. */
67
+ static gallonsToLiters(gal: number): number;
68
+ /** Converts square meters to square feet. */
69
+ static sqmToSqft(sqm: number): number;
70
+ /** Converts square feet to square meters. */
71
+ static sqftToSqm(sqft: number): number;
72
+ /** Converts kilometers per hour to miles per hour. */
73
+ static kmphToMph(kmph: number): number;
74
+ /** Converts miles per hour to kilometers per hour. */
75
+ static mphToKmph(mph: number): number;
76
+ /** Converts hours to minutes. */
77
+ static hoursToMinutes(h: number): number;
78
+ /** Converts minutes to seconds. */
79
+ static minutesToSeconds(m: number): number;
80
+ /** Converts days to hours. */
81
+ static daysToHours(d: number): number;
82
+ /** Converts megabytes to gigabytes. */
83
+ static mbToGb(mb: number): number;
84
+ /** Converts gigabytes to megabytes. */
85
+ static gbToMb(gb: number): number;
86
+ /** Converts kilobytes to megabytes. */
87
+ static kbToMb(kb: number): number;
88
+ /** Converts joules to calories. */
89
+ static joulesToCalories(j: number): number;
90
+ /** Converts calories to joules. */
91
+ static caloriesToJoules(cal: number): number;
92
+ /** Converts atmospheres to pascals. */
93
+ static atmToPascal(atm: number): number;
94
+ /** Converts pascals to atmospheres. */
95
+ static pascalToAtm(pa: number): number;
96
+ /** Converts hertz to kilohertz. */
97
+ static hzToKHz(hz: number): number;
98
+ /** Converts kilohertz to hertz. */
99
+ static kHzToHz(khz: number): number;
100
+ }
101
+ //# sourceMappingURL=Unit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Unit.d.ts","sourceRoot":"","sources":["../../../src/number/Unit.ts"],"names":[],"mappings":"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"}
@@ -169,4 +169,41 @@ export declare const CURRENCY_LOCALES: {
169
169
  readonly ZMW: "en-ZM";
170
170
  readonly ZWL: "en-ZW";
171
171
  };
172
+ /** * Fiat currencies supported by Frankfurter API */
173
+ export declare const SUPPORTED_CURRENCIES: readonly ["AUD", "BGN", "BRL", "CAD", "CHF", "CNY", "CZK", "DKK", "EUR", "GBP", "HKD", "HUF", "IDR", "ILS", "INR", "ISK", "JPY", "KRW", "MXN", "MYR", "NOK", "NZD", "PHP", "PLN", "RON", "SEK", "SGD", "THB", "TRY", "USD", "ZAR"];
174
+ /**
175
+ * @constant Unit names and their full readable labels.
176
+ */
177
+ export declare const UNIT_LABELS: {
178
+ readonly m: "Meter";
179
+ readonly km: "Kilometer";
180
+ readonly mi: "Mile";
181
+ readonly ft: "Foot";
182
+ readonly kg: "Kilogram";
183
+ readonly lbs: "Pound";
184
+ readonly g: "Gram";
185
+ readonly oz: "Ounce";
186
+ readonly C: "Celsius";
187
+ readonly F: "Fahrenheit";
188
+ readonly K: "Kelvin";
189
+ readonly l: "Liter";
190
+ readonly gal: "Gallon";
191
+ readonly sqm: "Square Meter";
192
+ readonly sqft: "Square Foot";
193
+ readonly kmph: "Kilometer per Hour";
194
+ readonly mph: "Miles per Hour";
195
+ readonly h: "Hour";
196
+ readonly min: "Minute";
197
+ readonly sec: "Second";
198
+ readonly d: "Day";
199
+ readonly kb: "Kilobyte";
200
+ readonly mb: "Megabyte";
201
+ readonly gb: "Gigabyte";
202
+ readonly j: "Joule";
203
+ readonly cal: "Calorie";
204
+ readonly atm: "Atmosphere";
205
+ readonly pa: "Pascal";
206
+ readonly hz: "Hertz";
207
+ readonly khz: "Kilohertz";
208
+ };
172
209
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/number/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,uFAWP,CAAC;AAEX,eAAO,MAAM,KAAK,sHAWR,CAAC;AAEX,eAAO,MAAM,IAAI,oGAWP,CAAC;AAEX,eAAO,MAAM,SAAS,8JAaZ,CAAC;AAEX,sCAAsC;AACtC,eAAO,MAAM,cAAc,2mCAiKjB,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,YAAY,mnCA8Hf,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiKnB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/number/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,uFAWP,CAAC;AAEX,eAAO,MAAM,KAAK,sHAWR,CAAC;AAEX,eAAO,MAAM,IAAI,oGAWP,CAAC;AAEX,eAAO,MAAM,SAAS,8JAaZ,CAAC;AAEX,sCAAsC;AACtC,eAAO,MAAM,cAAc,2mCAiKjB,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,YAAY,mnCA8Hf,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiKnB,CAAC;AAEX,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,oOAgCvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDd,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CURRENCY_CODES, CURRENCY_LOCALES, LOCALE_CODES } from './constants';
1
+ import type { CURRENCY_CODES, CURRENCY_LOCALES, LOCALE_CODES, SUPPORTED_CURRENCIES, UNIT_LABELS } from './constants';
2
2
  /** - Options for random number generator */
3
3
  export interface RandomNumberOptions {
4
4
  /** Minimum number to start with. */
@@ -38,6 +38,21 @@ export type RangedNumbers<T extends GetAs> = T extends 'array' ? number[] : stri
38
38
  export type CurrencyCode = keyof typeof CURRENCY_LOCALES | (typeof CURRENCY_CODES)[number];
39
39
  /** - List of all supported BCP 47 locales */
40
40
  export type LocaleCode = (typeof CURRENCY_LOCALES)[keyof typeof CURRENCY_LOCALES] | (typeof LOCALE_CODES)[number];
41
+ /** * Fiat currencies supported by Frankfurter API */
42
+ export type SupportedCurrency = (typeof SUPPORTED_CURRENCIES)[number];
43
+ /** - Options for `convert` method in `Currency` class */
44
+ export interface ConvertOptions {
45
+ /** A manual exchange rate to use if the API call fails. */
46
+ fallbackRate?: number;
47
+ /** If true, bypasses the cache and fetches fresh rate. */
48
+ forceRefresh?: boolean;
49
+ }
50
+ export interface FrankFurter {
51
+ amount: number;
52
+ base: CurrencyCode;
53
+ date: string;
54
+ rates: Record<CurrencyCode, number>;
55
+ }
41
56
  /** * Options to calculate what percentage a `part` is of a `total`. */
42
57
  export interface GetPercentOptions {
43
58
  /** Mode to calculate percentage from `part` and `total` */
@@ -103,4 +118,8 @@ export interface InversePercentageOptions {
103
118
  }
104
119
  /** * Options for calculating percentages and related values. */
105
120
  export type PercentageOptions = GetPercentOptions | GetValueOptions | GetOriginalOptions | GetChangeOptions | ApplyChangeOptions | GetDifferenceOptions | InversePercentageOptions;
121
+ /** * Short forms of units */
122
+ export type UnitKey = keyof typeof UNIT_LABELS;
123
+ /** Labels for the units */
124
+ export type UnitLabel = (typeof UNIT_LABELS)[UnitKey];
106
125
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/number/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/number/types.ts"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -6,6 +6,8 @@ export { convertStringCase, extractEmails, extractURLs, formatUnitWithPlural as
6
6
  export { countWords, countWords as countWordsInString, extractNumbersFromString, getLevenshteinDistance, getLevenshteinDistance as levenshteinDistance, countWords as wordCount, } from './string/utilities';
7
7
  // ! Number Utilities
8
8
  export { getAverage as calculateAverage, calculateHCF as calculateGCD, calculateHCF, calculateLCM as calculateLCD, calculateLCM, convertToDecimal, getAverage, getAverage as getAverageOfNumbers, getRandomNumber, sumNumbers as getSumOfNumbers, reverseNumber, sumDigits, sumNumbers, sumNumbers as sumOfNumbers, } from './number/basics';
9
+ export { Currency } from './number/Currency';
10
+ export { Unit } from './number/Unit';
9
11
  export { calculatePercentage } from './number/percent';
10
12
  export { fibonacciGenerator, fibonacciGenerator as generateFibonacci, getFibonacciSeries as getFibonacci, getFibonacciSeries as getFibonacciNumbers, getFibonacciSeries, getFibonacciSeriesMemo, getFibonacciSeriesMemo as getMemoizedFibonacci, getFibonacciSeriesMemo as getMemoizedFibonacciSeries, getNthFibonacci, } from './number/fibonacci';
11
13
  export { areInvalidNumbers, isEven, isEven as isEvenNumber, isFibonacci, areInvalidNumbers as isInvalidNumbers, isMultiple, isOdd, isOdd as isOddNumber, isFibonacci as isParOfFibonacci, isFibonacci as isParOfFibonacciSeries, isPerfectSquare, } from './number/guards';
@@ -0,0 +1,93 @@
1
+ import { formatCurrency } from './utilities';
2
+ const rateCache = new Map();
3
+ /**
4
+ * * A utility class for handling currency operations like formatting and conversion.
5
+ *
6
+ * - Supports formatting based on locale.
7
+ * - Converts between **fiat currencies supported by `api.frankfurter.app`**.
8
+ * - Automatically caches conversion rates to reduce redundant API calls.
9
+ * - Intended for use with numeric inputs (number or numeric string).
10
+ */
11
+ export class Currency {
12
+ #amount;
13
+ #code;
14
+ /**
15
+ * * The formatted currency string (e.g., `$1,000.00`).
16
+ *
17
+ * - Generated using the `en-US` locale during construction.
18
+ * - This is a display-friendly version of the currency value.
19
+ * - For formatting with other locales, use the `format(locale)` method.
20
+ */
21
+ currency;
22
+ /**
23
+ * Creates an instance of the Currency class.
24
+ *
25
+ * @param amount - The numeric amount of currency (e.g., `100`, `'99.99'`).
26
+ * @param code - The ISO 4217 currency code representing the currency (e.g., `'USD'`, `'EUR'`).
27
+ */
28
+ constructor(amount, code) {
29
+ this.#amount = Number(amount);
30
+ this.#code = code;
31
+ this.currency = this.format('en-US');
32
+ }
33
+ /**
34
+ * @instance Formats the currency for a given locale.
35
+ * @param locale - The target locale (e.g., 'de-DE')
36
+ * @returns The formatted currency string
37
+ */
38
+ format(locale) {
39
+ return formatCurrency(this.#amount, this.#code, locale);
40
+ }
41
+ /**
42
+ * @instance Converts the current currency amount to a target currency using real-time exchange rates.
43
+ *
44
+ * - Uses `api.frankfurter.app` to fetch live exchange rates.
45
+ * - Supports **only the following fiat currencies**:
46
+ * `AUD`, `BGN`, `BRL`, `CAD`, `CHF`, `CNY`, `CZK`, `DKK`, `EUR`, `GBP`, `HKD`, `HUF`, `IDR`, `ILS`, `INR`, `ISK`, `JPY`,
47
+ * `KRW`, `MXN`, `MYR`, `NOK`, `NZD`, `PHP`, `PLN`, `RON`, `SEK`, `SGD`, `THB`, `TRY`, `USD`, `ZAR`.
48
+ * - Uses cached rates unless `forceRefresh` is set to `true`.
49
+ * - If API fails or currency not supported, falls back to `fallbackRate` if provided.
50
+ *
51
+ * @param to - The target currency code (must be one of the supported ones, e.g., `'EUR'`, `'USD'`).
52
+ * @param options - Optional settings:
53
+ * - `fallbackRate`: A manual exchange rate to use if the API call fails or currency is not supported.
54
+ * - `forceRefresh`: If true, ignores cached rates and fetches fresh data.
55
+ * @returns The converted amount as a number.
56
+ * @throws Will throw if the API call fails and no `fallbackRate` is provided.
57
+ */
58
+ async convert(to, options) {
59
+ const key = `${this.#code}->${to}`;
60
+ if (!options?.forceRefresh && rateCache.has(key)) {
61
+ const cachedRate = rateCache.get(key);
62
+ return this.#amount * cachedRate;
63
+ }
64
+ try {
65
+ const rate = await this.#fetchFromFrankfurter(to);
66
+ rateCache.set(key, rate);
67
+ return this.#amount * rate;
68
+ }
69
+ catch (error) {
70
+ if (options?.fallbackRate != null) {
71
+ console.warn(`Currency conversion failed (${this.#code} → ${to}): ${JSON.stringify(error)}. Using fallback rate...`);
72
+ return this.#amount * options.fallbackRate;
73
+ }
74
+ throw new Error(`Currency conversion failed (${this.#code} → ${to}): ${JSON.stringify(error)}`);
75
+ }
76
+ }
77
+ /**
78
+ * @private @instance Attempts to fetch rate from frankfurter.app
79
+ * @param to - Target currency code
80
+ * @returns Exchange rate (multiplier)
81
+ */
82
+ async #fetchFromFrankfurter(to) {
83
+ const url = `https://api.frankfurter.app/latest?amount=${this.#amount}&from=${this.#code}&to=${to}`;
84
+ const res = await fetch(url, { redirect: 'error' });
85
+ if (!res.ok)
86
+ throw new Error(`Frankfurter error: ${res.status}`);
87
+ const data = (await res.json());
88
+ if (!data.rates?.[to]) {
89
+ throw new Error(`Currency "${to}" not found in rates`);
90
+ }
91
+ return data.rates[to] / this.#amount;
92
+ }
93
+ }
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @class Represents a measurable unit and supports conversions between various types of units.
3
+ *
4
+ * Includes static methods for:
5
+ * - Length: meters, feet, kilometers, miles
6
+ * - Mass: kilograms, pounds, grams, ounces
7
+ * - Temperature: Celsius, Fahrenheit, Kelvin
8
+ * - Volume: liters, gallons
9
+ * - Area: square meters, square feet
10
+ * - Speed: km/h, mph
11
+ * - Time: hours, minutes, seconds, days
12
+ * - Digital Storage: kilobytes, megabytes, gigabytes
13
+ * - Energy: joules, calories
14
+ * - Pressure: atm, pascals
15
+ * - Frequency: Hz, kHz
16
+ */
17
+ export class Unit {
18
+ #value;
19
+ #unit;
20
+ /**
21
+ * * Creates an instance of the Unit class.
22
+ * @param value The numeric value to work with.
23
+ * @param unit The unit type of the value (e.g., 'kg', 'm', 'kb').
24
+ */
25
+ constructor(value, unit) {
26
+ this.#value = value;
27
+ this.#unit = unit;
28
+ }
29
+ /**
30
+ * @instance Returns the original value with unit (if passed in the constructor).
31
+ * @returns A string in the format "value unit".
32
+ */
33
+ toString() {
34
+ return `${this.#value} ${this.#unit ?? ''}`.trim();
35
+ }
36
+ /**
37
+ * @instance Converts the value using a static method name from the Unit class.
38
+ *
39
+ * *Provides IntelliSense and type safety for method selection.*
40
+ *
41
+ * @param methodName - A key of Unit class static method accepting a number and returning a number.
42
+ * @returns The converted numeric value.
43
+ */
44
+ convert(methodName) {
45
+ const method = Unit[methodName];
46
+ if (typeof method !== 'function') {
47
+ throw new Error(`Method ${methodName} is not a valid method!`);
48
+ }
49
+ // @ts-expect-error -_-
50
+ return method(this.#value);
51
+ }
52
+ // ----- Static Conversion Methods -----
53
+ /** Converts meters to feet. */
54
+ static metersToFeet(m) {
55
+ return m * 3.28084;
56
+ }
57
+ /** Converts feet to meters. */
58
+ static feetToMeters(ft) {
59
+ return ft / 3.28084;
60
+ }
61
+ /** Converts kilometers to miles. */
62
+ static kmToMiles(km) {
63
+ return km * 0.621371;
64
+ }
65
+ /** Converts miles to kilometers. */
66
+ static milesToKm(mi) {
67
+ return mi / 0.621371;
68
+ }
69
+ /** Converts kilograms to pounds. */
70
+ static kgToLbs(kg) {
71
+ return kg * 2.20462;
72
+ }
73
+ /** Converts pounds to kilograms. */
74
+ static lbsToKg(lbs) {
75
+ return lbs / 2.20462;
76
+ }
77
+ /** Converts grams to ounces. */
78
+ static gramsToOunces(g) {
79
+ return g * 0.035274;
80
+ }
81
+ /** Converts ounces to grams. */
82
+ static ouncesToGrams(oz) {
83
+ return oz / 0.035274;
84
+ }
85
+ /** Converts Celsius to Fahrenheit. */
86
+ static celsiusToFahrenheit(c) {
87
+ return (c * 9) / 5 + 32;
88
+ }
89
+ /** Converts Fahrenheit to Celsius. */
90
+ static fahrenheitToCelsius(f) {
91
+ return ((f - 32) * 5) / 9;
92
+ }
93
+ /** Converts Celsius to Kelvin. */
94
+ static celsiusToKelvin(c) {
95
+ return c + 273.15;
96
+ }
97
+ /** Converts Kelvin to Celsius. */
98
+ static kelvinToCelsius(k) {
99
+ return k - 273.15;
100
+ }
101
+ /** Converts liters to gallons. */
102
+ static litersToGallons(l) {
103
+ return l * 0.264172;
104
+ }
105
+ /** Converts gallons to liters. */
106
+ static gallonsToLiters(gal) {
107
+ return gal / 0.264172;
108
+ }
109
+ /** Converts square meters to square feet. */
110
+ static sqmToSqft(sqm) {
111
+ return sqm * 10.7639;
112
+ }
113
+ /** Converts square feet to square meters. */
114
+ static sqftToSqm(sqft) {
115
+ return sqft / 10.7639;
116
+ }
117
+ /** Converts kilometers per hour to miles per hour. */
118
+ static kmphToMph(kmph) {
119
+ return kmph * 0.621371;
120
+ }
121
+ /** Converts miles per hour to kilometers per hour. */
122
+ static mphToKmph(mph) {
123
+ return mph / 0.621371;
124
+ }
125
+ /** Converts hours to minutes. */
126
+ static hoursToMinutes(h) {
127
+ return h * 60;
128
+ }
129
+ /** Converts minutes to seconds. */
130
+ static minutesToSeconds(m) {
131
+ return m * 60;
132
+ }
133
+ /** Converts days to hours. */
134
+ static daysToHours(d) {
135
+ return d * 24;
136
+ }
137
+ /** Converts megabytes to gigabytes. */
138
+ static mbToGb(mb) {
139
+ return mb / 1024;
140
+ }
141
+ /** Converts gigabytes to megabytes. */
142
+ static gbToMb(gb) {
143
+ return gb * 1024;
144
+ }
145
+ /** Converts kilobytes to megabytes. */
146
+ static kbToMb(kb) {
147
+ return kb / 1024;
148
+ }
149
+ /** Converts joules to calories. */
150
+ static joulesToCalories(j) {
151
+ return j * 0.239006;
152
+ }
153
+ /** Converts calories to joules. */
154
+ static caloriesToJoules(cal) {
155
+ return cal / 0.239006;
156
+ }
157
+ /** Converts atmospheres to pascals. */
158
+ static atmToPascal(atm) {
159
+ return atm * 101325;
160
+ }
161
+ /** Converts pascals to atmospheres. */
162
+ static pascalToAtm(pa) {
163
+ return pa / 101325;
164
+ }
165
+ /** Converts hertz to kilohertz. */
166
+ static hzToKHz(hz) {
167
+ return hz / 1000;
168
+ }
169
+ /** Converts kilohertz to hertz. */
170
+ static kHzToHz(khz) {
171
+ return khz * 1000;
172
+ }
173
+ }
@@ -502,3 +502,83 @@ export const CURRENCY_LOCALES = {
502
502
  ZMW: 'en-ZM', // Zambian Kwacha
503
503
  ZWL: 'en-ZW', // Zimbabwean Dollar
504
504
  };
505
+ /** * Fiat currencies supported by Frankfurter API */
506
+ export const SUPPORTED_CURRENCIES = [
507
+ 'AUD',
508
+ 'BGN',
509
+ 'BRL',
510
+ 'CAD',
511
+ 'CHF',
512
+ 'CNY',
513
+ 'CZK',
514
+ 'DKK',
515
+ 'EUR',
516
+ 'GBP',
517
+ 'HKD',
518
+ 'HUF',
519
+ 'IDR',
520
+ 'ILS',
521
+ 'INR',
522
+ 'ISK',
523
+ 'JPY',
524
+ 'KRW',
525
+ 'MXN',
526
+ 'MYR',
527
+ 'NOK',
528
+ 'NZD',
529
+ 'PHP',
530
+ 'PLN',
531
+ 'RON',
532
+ 'SEK',
533
+ 'SGD',
534
+ 'THB',
535
+ 'TRY',
536
+ 'USD',
537
+ 'ZAR',
538
+ ];
539
+ /**
540
+ * @constant Unit names and their full readable labels.
541
+ */
542
+ export const UNIT_LABELS = {
543
+ // Length
544
+ m: 'Meter',
545
+ km: 'Kilometer',
546
+ mi: 'Mile',
547
+ ft: 'Foot',
548
+ // Mass / Weight
549
+ kg: 'Kilogram',
550
+ lbs: 'Pound',
551
+ g: 'Gram',
552
+ oz: 'Ounce',
553
+ // Temperature
554
+ C: 'Celsius',
555
+ F: 'Fahrenheit',
556
+ K: 'Kelvin',
557
+ // Volume
558
+ l: 'Liter',
559
+ gal: 'Gallon',
560
+ // Area
561
+ sqm: 'Square Meter',
562
+ sqft: 'Square Foot',
563
+ // Speed
564
+ kmph: 'Kilometer per Hour',
565
+ mph: 'Miles per Hour',
566
+ // Time
567
+ h: 'Hour',
568
+ min: 'Minute',
569
+ sec: 'Second',
570
+ d: 'Day',
571
+ // Digital Storage
572
+ kb: 'Kilobyte',
573
+ mb: 'Megabyte',
574
+ gb: 'Gigabyte',
575
+ // Energy
576
+ j: 'Joule',
577
+ cal: 'Calorie',
578
+ // Pressure
579
+ atm: 'Atmosphere',
580
+ pa: 'Pascal',
581
+ // Frequency
582
+ hz: 'Hertz',
583
+ khz: 'Kilohertz',
584
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nhb-toolbox",
3
- "version": "4.0.57",
3
+ "version": "4.0.70",
4
4
  "description": "A versatile collection of smart, efficient, and reusable utility functions and classes for everyday development needs.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",