icetool
Version:
Your fonctions friends
111 lines (110 loc) • 7.92 kB
JavaScript
;
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;
}
};