UNPKG

icetool

Version:
111 lines (110 loc) 7.92 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _NumberFormat_instances, _NumberFormat_language, _NumberFormat_data, _NumberFormat_translateTime, _NumberFormat_noneStyle, _NumberFormat_short, _NumberFormat_romanStyle; Object.defineProperty(exports, "__esModule", { value: true }); exports.NumberFormat = void 0; const types_1 = require("../../interface/types"); const Error_1 = require("../Error"); const Translate_1 = require("../Translate"); const numbers = [100000, 90000, 50000, 40000, 10000, 9000, 5000, 4000, 1000, 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1, 0]; const romans = ["ↈ", "ↂↈ", "ↇ", "ↂↇ", "ↂ", "ↀↂ", "ↁ", "ↀↁ", "M", "ↀ", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I", "N"]; const romansLength = ["ↂↈ", "ↂↇ", "ↀↂ", "ↀↁ", "CM", "CD", "XC", "XL", "IX", "IV", "ↈ", "ↇ", "ↂ", "ↁ", "ↀ", "M", "D", "C", "L", "X", "V", "I", "N"]; class NumberFormat { constructor(lang, data) { _NumberFormat_instances.add(this); _NumberFormat_language.set(this, void 0); _NumberFormat_data.set(this, {}); _NumberFormat_translateTime.set(this, void 0); __classPrivateFieldSet(this, _NumberFormat_language, lang, "f"); __classPrivateFieldGet(this, _NumberFormat_data, "f").decimalNumber = (data?.decimalNumber ?? 1); __classPrivateFieldGet(this, _NumberFormat_data, "f").compactDisplay = data?.compactDisplay ?? "long"; __classPrivateFieldGet(this, _NumberFormat_data, "f").style = data?.style ?? "none"; if (!types_1.language.includes(__classPrivateFieldGet(this, _NumberFormat_language, "f"))) throw new Error_1.Errors("us-US", "languageNotValid"); if (!types_1.styleFormatNumber.includes(__classPrivateFieldGet(this, _NumberFormat_data, "f").style)) throw new Error_1.Errors(__classPrivateFieldGet(this, _NumberFormat_language, "f"), "notType"); if (!types_1.compactDisplayFormatNumber.includes(__classPrivateFieldGet(this, _NumberFormat_data, "f").compactDisplay)) throw new Error_1.Errors(__classPrivateFieldGet(this, _NumberFormat_language, "f"), "notType"); if (Math.abs(Math.floor(__classPrivateFieldGet(this, _NumberFormat_data, "f").decimalNumber)) != __classPrivateFieldGet(this, _NumberFormat_data, "f").decimalNumber) throw new Error_1.Errors(__classPrivateFieldGet(this, _NumberFormat_language, "f"), "notType"); __classPrivateFieldSet(this, _NumberFormat_translateTime, new Translate_1.Translate(__classPrivateFieldGet(this, _NumberFormat_language, "f")), "f"); } format(value) { if (__classPrivateFieldGet(this, _NumberFormat_data, "f").style === "roman") { if ((Math.floor(Number(value)) == Number(value) && !isNaN(Number(value))) || (typeof (value) === "string" && String(value).replace(/[ↈↇↂↁↀIVXLCDMN]/g, "").length == 0)) { return __classPrivateFieldGet(this, _NumberFormat_instances, "m", _NumberFormat_romanStyle).call(this, value); } else throw new Error_1.Errors(__classPrivateFieldGet(this, _NumberFormat_language, "f"), "notType"); } else if (__classPrivateFieldGet(this, _NumberFormat_data, "f").style === "none") { if (!isNaN(Number(value))) { return __classPrivateFieldGet(this, _NumberFormat_instances, "m", _NumberFormat_noneStyle).call(this, value); } else throw new Error_1.Errors(__classPrivateFieldGet(this, _NumberFormat_language, "f"), "notType"); } } } exports.NumberFormat = NumberFormat; _NumberFormat_language = new WeakMap(), _NumberFormat_data = new WeakMap(), _NumberFormat_translateTime = new WeakMap(), _NumberFormat_instances = new WeakSet(), _NumberFormat_noneStyle = function _NumberFormat_noneStyle(number) { const value = __classPrivateFieldGet(this, _NumberFormat_data, "f").compactDisplay == "short" ? __classPrivateFieldGet(this, _NumberFormat_instances, "m", _NumberFormat_short).call(this, number) : { symbol: "", number: number }; let integer = Math.floor(value.number); let decimal = (value.number - integer).toFixed(__classPrivateFieldGet(this, _NumberFormat_data, "f").decimalNumber ?? 0); if (Number(decimal) >= 1) { decimal = (Number(decimal) - 1).toFixed(__classPrivateFieldGet(this, _NumberFormat_data, "f").decimalNumber ?? 0); integer++; } return `${`${integer}`.replace(/\B(?=(\d{3})+(?!\d))/g, __classPrivateFieldGet(this, _NumberFormat_translateTime, "f").get("convert.separator"))}${Number(decimal) > 0 ? `${__classPrivateFieldGet(this, _NumberFormat_translateTime, "f").get("convert.decimal")}${`${decimal}`.slice(2)}`.replace(/(0{1,})$/g, "") : ""}${value.symbol}`; }, _NumberFormat_short = function _NumberFormat_short(number) { const numberSymbols = __classPrivateFieldGet(this, _NumberFormat_translateTime, "f").get("convert.symbol"); const numberLength = (Math.ceil(Math.log10(Math.abs(number) + 1)) || 1); if (numberLength < 4) return { symbol: "", number: number }; const symbolIndex = Math.floor((numberLength - 1) / 3); const numberSymbol = numberSymbols[symbolIndex >= numberSymbols.length ? numberSymbols.length - 1 : symbolIndex]; return { symbol: numberSymbol, number: Math.round(number) / Math.pow(1000, symbolIndex >= numberSymbols.length ? numberSymbols.length - 1 : symbolIndex) }; const str = Math.floor(number).toString(); const symbol = Math.floor(str.length / 3.00001); if (symbol == 0) return { symbol: "", number: number }; else { const [symbolFind, lengthNumber] = numberSymbol[symbol] ? [numberSymbol[symbol], (str.length % 3 || 3)] : [numberSymbol[numberSymbol.length - 1], (str.length - ((numberSymbol.length - 1) * 3))]; const convertingNumber = Number(`${str.slice(0, lengthNumber)}.${str.slice(lengthNumber)}0`); } }, _NumberFormat_romanStyle = function _NumberFormat_romanStyle(value) { if (isNaN(Number(value))) { let roman = String(value); let number = 0; for (let i = 0; i < romansLength.length; i++) { const char = romansLength[i]; while (roman.includes(char)) { roman = roman.replace(char, ""); number += numbers[romans.indexOf(char)]; } } return number; } else { let number = Number(value); let romansText = ""; for (let i = 0; i < numbers.length; i++) { const num = Math.floor(number / numbers[i]); romansText += romans[i].repeat(num); number -= (numbers[i] * num); } return romansText; } };