Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

humanizer.node

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

humanizer.node - npm Package Compare versions

Comparing version
1.0.3
to
1.0.4
+10
dist/metricNumerals.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const MetricNumerals_1 = require("./src/Humanizer/Numbers/MetricNumerals");
Number.prototype.toMetric = function () {
return MetricNumerals_1.MetricNumerals.toMetric(this);
};
String.prototype.fromMetric = function () {
return MetricNumerals_1.MetricNumerals.fromMetric(this);
};
//# sourceMappingURL=metricNumerals.js.map
{"version":3,"file":"metricNumerals.js","sourceRoot":"","sources":["../metricNumerals.ts"],"names":[],"mappings":";;AAAA,2EAAuE;AAWvE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG;IACzB,OAAO,+BAAc,CAAC,QAAQ,CAAC,IAAc,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG;IAC1B,OAAO,+BAAc,CAAC,UAAU,CAAC,IAAc,CAAC,CAAA;AACpD,CAAC,CAAA"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* (5).Tens == 50
*/
Number.prototype.tens = function () {
return this * 10;
};
Number.prototype.hundreds = function () {
return this * 100;
};
Number.prototype.thousands = function () {
return this * 1000;
};
Number.prototype.millions = function () {
return this * 1000000;
};
Number.prototype.billions = function () {
return this * 1000000000;
};
//# sourceMappingURL=numberToNumbers.js.map
{"version":3,"file":"numberToNumbers.js","sourceRoot":"","sources":["../numberToNumbers.ts"],"names":[],"mappings":";;AAaA;;GAEG;AACH,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG;IACpB,OAAO,IAAc,GAAG,EAAE,CAAC;AAC/B,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG;IACxB,OAAO,IAAc,GAAG,GAAG,CAAC;AAChC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,IAAc,GAAG,IAAI,CAAC;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG;IACxB,OAAO,IAAc,GAAG,OAAO,CAAC;AACpC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG;IACxB,OAAO,IAAc,GAAG,UAAU,CAAC;AACvC,CAAC,CAAA"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const RomanNumerals_1 = require("./src/Humanizer/Numbers/RomanNumerals");
Number.prototype.toRoman = function () {
return RomanNumerals_1.RomanNumerals.toRoman(this);
};
String.prototype.fromRoman = function () {
return RomanNumerals_1.RomanNumerals.fromRoman(this);
};
//# sourceMappingURL=romanNumerals.js.map
{"version":3,"file":"romanNumerals.js","sourceRoot":"","sources":["../romanNumerals.ts"],"names":[],"mappings":";;AACI,yEAAqE;AAYrE,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG;IACvB,OAAO,6BAAa,CAAC,OAAO,CAAC,IAAc,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,6BAAa,CAAC,SAAS,CAAC,IAAc,CAAC,CAAA;AAClD,CAAC,CAAA"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/// <summary>
/// Style for the cardinal direction humanization
/// </summary>
var HeadingStyle;
(function (HeadingStyle) {
/// <summary>
/// Returns an abbreviated format
/// </summary>
HeadingStyle[HeadingStyle["Abbreviated"] = 0] = "Abbreviated";
/// <summary>
/// Returns the full format
/// </summary>
HeadingStyle[HeadingStyle["Full"] = 1] = "Full";
})(HeadingStyle = exports.HeadingStyle || (exports.HeadingStyle = {}));
/// <summary>
/// Contains extensions to transform a number indicating a heading into the
/// textual representation of the heading.
/// </summary>
class Heading {
// https://stackoverflow.com/a/7490772/1720761
/// <summary>
/// Returns a textual representation of the heading.
///
/// This representation has a maximum deviation of 11.25 degrees.
/// </summary>
/// <returns>A textual representation of the heading</returns>
/// <param name="culture">The culture to return the textual representation in</param>
/// <param name="style">Whether to return a short result or not. <see cref="HeadingStyle"/></param>
static toHeading(heading, style = HeadingStyle.Abbreviated) {
const val = Math.floor((heading / 22.5) + .5);
const result = Heading.headings[val % 16];
if (style === HeadingStyle.Abbreviated) {
return result.short;
}
return result.full;
}
/// <summary>
/// Returns a char arrow indicating the heading.
///
/// This representation has a maximum deviation of 22.5 degrees.
/// </summary>
/// <returns>The heading arrow.</returns>
static toHeadingArrow(heading) {
const val = Math.floor((heading / 45) + .5);
return Heading.headingArrows[val % 8];
}
/// <summary>
/// Returns a heading based on the short textual representation of the heading.
/// </summary>
/// <returns>The heading. -1 if the heading could not be parsed.</returns>
static fromAbbreviatedHeading(heading) {
const index = Heading.headings.findIndex((element) => {
return element.short.toUpperCase() === heading;
});
if (index === -1) {
return -1;
}
return (index * 22.5);
}
}
exports.Heading = Heading;
Heading.headings = [
{ short: "N", full: "north" },
{ short: "NNE", full: "north-northeast" },
{ short: "NE", full: "northeast" },
{ short: "ENE", full: "east-northeast" },
{ short: "E", full: "east" },
{ short: "ESE", full: "east-southeast" },
{ short: "SE", full: "southeast" },
{ short: "SSE", full: "south-southeast" },
{ short: "S", full: "south" },
{ short: "SSW", full: "south-southwest" },
{ short: "SW", full: "southwest" },
{ short: "WSW", full: "west-southwest" },
{ short: "W", full: "west" },
{ short: "WNW", full: "west-northwest" },
{ short: "NW", full: "northwest" },
{ short: "NNW", full: "north-northwest" }
];
Heading.headingArrows = ["↑", "↗", "→", "↘", "↓", "↙", "←", "↖"];
//# sourceMappingURL=Heading.js.map
{"version":3,"file":"Heading.js","sourceRoot":"","sources":["../../../../src/Humanizer/Numbers/Heading.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class MetricNumerals {
/// <summary>
/// Converts a Metric representation into a number.
/// </summary>
/// <remarks>
/// We don't support input in the format {number}{name} nor {number} {name}.
/// We only provide a solution for {number}{symbol} and {number} {symbol}.
/// </remarks>
/// <param name="input">Metric representation to convert to a number</param>
/// <example>
/// <code>
/// "1k".FromMetric() => 1000d
/// "123".FromMetric() => 123d
/// "100m".FromMetric() => 1E-1
/// </code>
/// </example>
/// <returns>A number after a conversion from a Metric representation.</returns>
static fromMetric(input) {
input = MetricNumerals.cleanRepresentation(input);
return MetricNumerals.buildNumber(input, input[input.length - 1]);
}
/// <summary>
/// Converts a number into a valid and Human-readable Metric representation.
/// </summary>
/// <remarks>
/// Inspired by a snippet from Thom Smith.
/// See <a href="http://stackoverflow.com/questions/12181024/formatting-a-number-with-a-metric-prefix">this link</a> for more.
/// </remarks>
/// <param name="input">Number to convert to a Metric representation.</param>
/// <param name="hasSpace">True will split the number and the symbol with a whitespace.</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <param name="decimals">If not null it is the numbers of decimals to round the number to</param>
/// <example>
/// <code>
/// 1000d.ToMetric() => "1k"
/// 123d.ToMetric() => "123"
/// 1E-1.ToMetric() => "100m"
/// </code>
/// </example>
/// <returns>A valid Metric representation</returns>
static toMetric(input, hasSpace = false, useSymbol = true, decimals) {
if (input === 0) {
return input.toString();
}
if (MetricNumerals.isOutOfRange(input)) {
throw new Error("ArgumentOutOfRangeException");
}
return MetricNumerals.buildRepresentation(input, hasSpace, useSymbol, decimals);
}
/// <summary>
/// Clean or handle any wrong input
/// </summary>
/// <param name="input">Metric representation to clean</param>
/// <returns>A cleaned representation</returns>
static cleanRepresentation(input) {
if (input == null) {
throw new Error("ArgumentNullException");
}
input = input.trim();
input = MetricNumerals.replaceNameBySymbol(input);
if (input.length === 0 || MetricNumerals.isInvalidMetricNumeral(input)) {
throw new Error("Empty or invalid Metric string");
}
return input.replace(" ", "");
}
/// <summary>
/// Build a number from a metric representation or from a number
/// </summary>
/// <param name="input">A Metric representation to parse to a number</param>
/// <param name="last">The last character of input</param>
/// <returns>A number build from a Metric representation</returns>
static buildNumber(input, last) {
return MetricNumerals.isLetter(last)
? MetricNumerals.buildMetricNumber(input, last)
: Number(input);
}
static isLetter(char) {
return char.length === 1 && (/[a-z]/i).test(char);
}
/// <summary>
/// Build a number from a metric representation
/// </summary>
/// <param name="input">A Metric representation to parse to a number</param>
/// <param name="last">The last character of input</param>
/// <returns>A number build from a Metric representation</returns>
static buildMetricNumber(input, last) {
const num = Number(input.substring(0, input.length - 1));
const expo = MetricNumerals.Symbols[0].indexOf(last) >= 0 ?
MetricNumerals.getExponent(MetricNumerals.Symbols[0], last) :
-MetricNumerals.getExponent(MetricNumerals.Symbols[1], last);
return num * Math.pow(10, expo);
}
static getExponent(symbols, last) {
return (symbols.indexOf(last) + 1) * 3;
}
/// <summary>
/// Replace every symbol's name by its symbol representation.
/// </summary>
/// <param name="input">Metric representation with a name or a symbol</param>
/// <returns>A metric representation with a symbol</returns>
static replaceNameBySymbol(input) {
MetricNumerals.Names.map((item, index) => {
input = input.replace(item.value, item.key);
});
return input;
}
/// <summary>
/// Build a Metric representation of the number.
/// </summary>
/// <param name="input">Number to convert to a Metric representation.</param>
/// <param name="hasSpace">True will split the number and the symbol with a whitespace.</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <param name="decimals">If not null it is the numbers of decimals to round the number to</param>
/// <returns>A number in a Metric representation</returns>
static buildRepresentation(input, hasSpace, useSymbol, decimals) {
const exponent = Math.floor(Math.log10(Math.abs(input)) / 3);
if (exponent !== 0) {
return MetricNumerals.buildMetricRepresentation(input, exponent, hasSpace, useSymbol, decimals);
}
let representation = decimals ? Math.round(input).toString() : input.toString();
if (hasSpace) {
representation += " ";
}
return representation;
}
/// <summary>
/// Build a Metric representation of the number.
/// </summary>
/// <param name="input">Number to convert to a Metric representation.</param>
/// <param name="exponent">Exponent of the number in a scientific notation</param>
/// <param name="hasSpace">True will split the number and the symbol with a whitespace.</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <param name="decimals">If not null it is the numbers of decimals to round the number to</param>
/// <returns>A number in a Metric representation</returns>
static buildMetricRepresentation(input, exponent, hasSpace, useSymbol, decimals) {
let number = input * Math.pow(1000, -exponent);
if (decimals) {
number = Math.round(number);
}
const symbol = Math.sign(exponent) === 1
? MetricNumerals.Symbols[0][exponent - 1]
: MetricNumerals.Symbols[1][-exponent - 1];
return number
+ (hasSpace ? " " : "")
+ MetricNumerals.getUnit(symbol, useSymbol);
}
/// <summary>
/// Get the unit from a symbol of from the symbol's name.
/// </summary>
/// <param name="symbol">The symbol linked to the unit</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <returns>A symbol or a symbol's name</returns>
static getUnit(symbol, useSymbol) {
// @ts-ignore
return useSymbol ? symbol.toString() : MetricNumerals.Names[symbol];
}
/// <summary>
/// Check if a Metric representation is out of the valid range.
/// </summary>
/// <param name="input">A Metric representation who might be out of the valid range.</param>
/// <returns>True if input is out of the valid range.</returns>
static isOutOfRange(input) {
// bool outside(double min, double max) => !(max > input && input > min);
// return (Math.Sign(input) == 1 && outside(SmallLimit, BigLimit))
// || (Math.Sign(input) == -1 && outside(-BigLimit, -SmallLimit));
return false;
}
/// <summary>
/// Check if a string is not a valid Metric representation.
/// A valid representation is in the format "{0}{1}" or "{0} {1}"
/// where {0} is a number and {1} is an allowed symbol.
/// </summary>
/// <remarks>
/// ToDo: Performance: Use (string input, out number) to escape the double use of Parse()
/// </remarks>
/// <param name="input">A string who might contain a invalid Metric representation.</param>
/// <returns>True if input is not a valid Metric representation.</returns>
static isInvalidMetricNumeral(input) {
const index = input.length - 1;
const last = input[index];
const isSymbol = MetricNumerals.Symbols[0].indexOf(last) >= 0 || MetricNumerals.Symbols[1].indexOf(last) >= 0;
if (!isSymbol) {
return true;
}
input = input.replace(last, "");
return isNaN(Number(input));
}
}
exports.MetricNumerals = MetricNumerals;
MetricNumerals.BigLimit = 1E+27;
MetricNumerals.SmallLimit = 1E-27;
/// <summary>
/// Symbols is a list of every symbols for the Metric system.
/// </summary>
MetricNumerals.Symbols = [
["k", "M", "G", "T", "P", "E", "Z", "Y"],
["m", "μ", "n", "p", "f", "a", "z", "y"]
];
/// <summary>
/// Names link a Metric symbol (as key) to its name (as value).
/// </summary>
/// <remarks>
/// We dont support :
/// {'h', "hecto"},
/// {'da', "deca" }, // !string
/// {'d', "deci" },
/// {'c', "centi"},
/// </remarks>
MetricNumerals.Names = [
{ key: "Y", value: "yotta" },
{ key: "Z", value: "zetta" },
{ key: "E", value: "exa" },
{ key: "P", value: "peta" },
{ key: "T", value: "tera" },
{ key: "G", value: "giga" },
{ key: "M", value: "mega" },
{ key: "k", value: "kilo" },
{ key: "m", value: "milli" },
{ key: "μ", value: "micro" },
{ key: "n", value: "nano" },
{ key: "p", value: "pico" },
{ key: "f", value: "femto" },
{ key: "a", value: "atto" },
{ key: "z", value: "zepto" },
{ key: "y", value: "yocto" }
];
//# sourceMappingURL=MetricNumerals.js.map
{"version":3,"file":"MetricNumerals.js","sourceRoot":"","sources":["../../../../src/Humanizer/Numbers/MetricNumerals.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/// <summary>
/// Contains extension methods for changing a number to Roman representation (ToRoman) and from Roman representation back
/// to the number (FromRoman)
/// </summary>
class RomanNumerals {
/// <summary>
/// Converts Roman numbers into integer
/// </summary>
/// <param name="input">Roman number</param>
/// <returns>Human-readable number</returns>
static fromRoman(input) {
if (input == null) {
throw new Error("input can't be null");
}
input = input.trim().toUpperCase();
const length = input.length;
if ((length === 0) || RomanNumerals.isInvalidRomanNumeral(input)) {
throw new Error("Empty or invalid Roman numeral string.");
}
let total = 0;
let i = length;
while (i > 0) {
let digit = RomanNumerals.romanToDigit(input[--i].toString());
if (i > 0) {
const previousDigit = RomanNumerals.romanToDigit(input[i - 1].toString());
if (previousDigit < digit) {
digit -= previousDigit;
i--;
}
}
total += digit;
}
return total;
}
static romanToDigit(char) {
let rtnVal = 0;
RomanNumerals.RomanNumerals.forEach(pair => {
if (pair.key === char) {
rtnVal = pair.value;
}
});
return rtnVal;
}
/// <summary>
/// Converts the input to Roman number
/// </summary>
/// <param name="input">Integer input</param>
/// <returns>Roman number</returns>
/// <exception cref="ArgumentOutOfRangeException">Thrown when the input is smaller than 1 or larger than 3999</exception>
static toRoman(input) {
const minValue = 1;
const maxValue = 3999;
if ((input < minValue) || (input > maxValue)) {
throw new Error("ArgumentOutOfRangeException");
}
let sb = "";
RomanNumerals.RomanNumerals.forEach(pair => {
while (Math.floor(input / pair.value) > 0) {
sb += pair.key;
input -= pair.value;
}
});
return sb;
}
static isInvalidRomanNumeral(input) {
return !RomanNumerals.ValidRomanNumeral.test(input);
}
}
exports.RomanNumerals = RomanNumerals;
RomanNumerals.RomanNumerals = [
{ key: "M", value: 1000 },
{ key: "CM", value: 900 },
{ key: "D", value: 500 },
{ key: "CD", value: 400 },
{ key: "C", value: 100 },
{ key: "XC", value: 90 },
{ key: "L", value: 50 },
{ key: "XL", value: 40 },
{ key: "X", value: 10 },
{ key: "IX", value: 9 },
{ key: "V", value: 5 },
{ key: "IV", value: 4 },
{ key: "I", value: 1 }
];
RomanNumerals.ValidRomanNumeral = /^(?:(?=[MDCLXVI])((M{0,3})((C[DM])|(D?C{0,3}))?((X[LC])|(L?XX{0,2})|L)?((I[VX])|(V?(II{0,2}))|V)?))$/i;
//# sourceMappingURL=RomanNumerals.js.map
{"version":3,"file":"RomanNumerals.js","sourceRoot":"","sources":["../../../../src/Humanizer/Numbers/RomanNumerals.ts"],"names":[],"mappings":"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"}
require('./dist')
// let fileSize = (10).kilobytes()
// console.log(fileSize.bits) // -> 81920
// console.log(fileSize.bytes) // -> 10240
// console.log(fileSize.kilobytes) // -> 10
// console.log(fileSize.megabytes) // -> 0.009765625
// console.log(fileSize.gigabytes) // -> 0.0000095367431640625
// console.log(fileSize.terabytes) // -> 9.313225746154785e-9
console.log("100m".fromMetric())
import { MetricNumerals } from "./src/Humanizer/Numbers/MetricNumerals"
declare global {
interface Number {
toMetric(): string
}
interface String {
fromMetric(): number
}
}
Number.prototype.toMetric = function (): string {
return MetricNumerals.toMetric(this as number)
}
String.prototype.fromMetric = function (): number {
return MetricNumerals.fromMetric(this as string)
}
export {};
declare global {
interface Number {
tens(): number
hundreds(): number
thousands(): number
millions(): number
billions(): number
}
}
/**
* (5).Tens == 50
*/
Number.prototype.tens = function (): number {
return this as number * 10;
}
Number.prototype.hundreds = function (): number {
return this as number * 100;
}
Number.prototype.thousands = function (): number {
return this as number * 1000;
}
Number.prototype.millions = function (): number {
return this as number * 1000000;
}
Number.prototype.billions = function (): number {
return this as number * 1000000000;
}
import { RomanNumerals } from "./src/Humanizer/Numbers/RomanNumerals"
declare global {
interface Number {
toRoman(): string
}
interface String {
fromRoman(): number
}
}
Number.prototype.toRoman = function (): string {
return RomanNumerals.toRoman(this as number)
}
String.prototype.fromRoman = function (): number {
return RomanNumerals.fromRoman(this as string)
}
/// <summary>
/// Style for the cardinal direction humanization
/// </summary>
export enum HeadingStyle {
/// <summary>
/// Returns an abbreviated format
/// </summary>
Abbreviated,
/// <summary>
/// Returns the full format
/// </summary>
Full
}
/// <summary>
/// Contains extensions to transform a number indicating a heading into the
/// textual representation of the heading.
/// </summary>
export abstract class Heading {
static readonly headings = [
{ short: "N", full: "north"},
{ short: "NNE" , full: "north-northeast"},
{ short: "NE" , full: "northeast"},
{ short: "ENE" , full: "east-northeast"},
{ short: "E", full: "east"},
{ short: "ESE" , full: "east-southeast"},
{ short: "SE" , full: "southeast"},
{ short: "SSE" , full: "south-southeast"},
{ short: "S", full: "south"},
{ short: "SSW" , full: "south-southwest"},
{ short: "SW" , full: "southwest"},
{ short: "WSW" , full: "west-southwest"},
{ short: "W", full: "west"},
{ short: "WNW" , full: "west-northwest"},
{ short: "NW" , full: "northwest"},
{ short: "NNW" , full: "north-northwest"}
];
static readonly headingArrows = [ "↑", "↗", "→", "↘", "↓", "↙", "←", "↖" ];
// https://stackoverflow.com/a/7490772/1720761
/// <summary>
/// Returns a textual representation of the heading.
///
/// This representation has a maximum deviation of 11.25 degrees.
/// </summary>
/// <returns>A textual representation of the heading</returns>
/// <param name="culture">The culture to return the textual representation in</param>
/// <param name="style">Whether to return a short result or not. <see cref="HeadingStyle"/></param>
public static toHeading(heading: number, style: HeadingStyle = HeadingStyle.Abbreviated): string {
const val = Math.floor((heading / 22.5) + .5);
const result = Heading.headings[val % 16];
if (style === HeadingStyle.Abbreviated) {
return result.short;
}
return result.full;
}
/// <summary>
/// Returns a char arrow indicating the heading.
///
/// This representation has a maximum deviation of 22.5 degrees.
/// </summary>
/// <returns>The heading arrow.</returns>
public static toHeadingArrow(heading: number): string {
const val = Math.floor((heading / 45) + .5);
return Heading.headingArrows[val % 8];
}
/// <summary>
/// Returns a heading based on the short textual representation of the heading.
/// </summary>
/// <returns>The heading. -1 if the heading could not be parsed.</returns>
public static fromAbbreviatedHeading(heading: string): number {
const index = Heading.headings.findIndex((element) => {
return element.short.toUpperCase() === heading;
})
if (index === -1) {
return -1;
}
return (index * 22.5);
}
}
export abstract class MetricNumerals {
private static readonly BigLimit = 1E+27;
private static readonly SmallLimit = 1E-27;
/// <summary>
/// Symbols is a list of every symbols for the Metric system.
/// </summary>
private static readonly Symbols =
[
[ "k", "M", "G", "T", "P", "E", "Z", "Y" ],
[ "m", "μ", "n", "p", "f", "a", "z", "y" ]
];
/// <summary>
/// Names link a Metric symbol (as key) to its name (as value).
/// </summary>
/// <remarks>
/// We dont support :
/// {'h', "hecto"},
/// {'da', "deca" }, // !string
/// {'d', "deci" },
/// {'c', "centi"},
/// </remarks>
private static readonly Names =
[
{key: "Y", value: "yotta" },
{key: "Z", value: "zetta" },
{key: "E", value: "exa" },
{key: "P", value: "peta" },
{key: "T", value: "tera" },
{key: "G", value: "giga" },
{key: "M", value: "mega" },
{key: "k", value: "kilo" },
{key: "m", value: "milli" },
{key: "μ", value: "micro" },
{key: "n", value: "nano" },
{key: "p", value: "pico" },
{key: "f", value: "femto" },
{key: "a", value: "atto" },
{key: "z", value: "zepto" },
{key: "y", value: "yocto" }
];
/// <summary>
/// Converts a Metric representation into a number.
/// </summary>
/// <remarks>
/// We don't support input in the format {number}{name} nor {number} {name}.
/// We only provide a solution for {number}{symbol} and {number} {symbol}.
/// </remarks>
/// <param name="input">Metric representation to convert to a number</param>
/// <example>
/// <code>
/// "1k".FromMetric() => 1000d
/// "123".FromMetric() => 123d
/// "100m".FromMetric() => 1E-1
/// </code>
/// </example>
/// <returns>A number after a conversion from a Metric representation.</returns>
public static fromMetric(input: string): number {
input = MetricNumerals.cleanRepresentation(input);
return MetricNumerals.buildNumber(input, input[input.length - 1]);
}
/// <summary>
/// Converts a number into a valid and Human-readable Metric representation.
/// </summary>
/// <remarks>
/// Inspired by a snippet from Thom Smith.
/// See <a href="http://stackoverflow.com/questions/12181024/formatting-a-number-with-a-metric-prefix">this link</a> for more.
/// </remarks>
/// <param name="input">Number to convert to a Metric representation.</param>
/// <param name="hasSpace">True will split the number and the symbol with a whitespace.</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <param name="decimals">If not null it is the numbers of decimals to round the number to</param>
/// <example>
/// <code>
/// 1000d.ToMetric() => "1k"
/// 123d.ToMetric() => "123"
/// 1E-1.ToMetric() => "100m"
/// </code>
/// </example>
/// <returns>A valid Metric representation</returns>
public static toMetric(input: number, hasSpace: boolean = false, useSymbol: boolean = true, decimals?: number): string {
if (input === 0) {
return input.toString();
}
if (MetricNumerals.isOutOfRange(input)) {
throw new Error("ArgumentOutOfRangeException")
}
return MetricNumerals.buildRepresentation(input, hasSpace, useSymbol, decimals);
}
/// <summary>
/// Clean or handle any wrong input
/// </summary>
/// <param name="input">Metric representation to clean</param>
/// <returns>A cleaned representation</returns>
private static cleanRepresentation(input: string): string {
if (input == null) {
throw new Error("ArgumentNullException")
}
input = input.trim();
input = MetricNumerals.replaceNameBySymbol(input);
if (input.length === 0 || MetricNumerals.isInvalidMetricNumeral(input)) {
throw new Error("Empty or invalid Metric string")
}
return input.replace(" ", "");
}
/// <summary>
/// Build a number from a metric representation or from a number
/// </summary>
/// <param name="input">A Metric representation to parse to a number</param>
/// <param name="last">The last character of input</param>
/// <returns>A number build from a Metric representation</returns>
private static buildNumber(input: string, last: string): number {
return MetricNumerals.isLetter(last)
? MetricNumerals.buildMetricNumber(input, last)
: Number(input);
}
private static isLetter(char: string): boolean {
return char.length === 1 && (/[a-z]/i).test(char)
}
/// <summary>
/// Build a number from a metric representation
/// </summary>
/// <param name="input">A Metric representation to parse to a number</param>
/// <param name="last">The last character of input</param>
/// <returns>A number build from a Metric representation</returns>
private static buildMetricNumber(input: string, last: string): number {
const num = Number(input.substring(0, input.length - 1))
const expo = MetricNumerals.Symbols[0].indexOf(last) >= 0 ?
MetricNumerals.getExponent(MetricNumerals.Symbols[0], last) :
-MetricNumerals.getExponent(MetricNumerals.Symbols[1], last);
return num * Math.pow(10, expo)
}
private static getExponent(symbols: Array<string>, last: string): number {
return (symbols.indexOf(last) + 1) * 3;
}
/// <summary>
/// Replace every symbol's name by its symbol representation.
/// </summary>
/// <param name="input">Metric representation with a name or a symbol</param>
/// <returns>A metric representation with a symbol</returns>
private static replaceNameBySymbol(input: string): string {
MetricNumerals.Names.map((item, index) => {
input = input.replace(item.value, item.key)
})
return input;
}
/// <summary>
/// Build a Metric representation of the number.
/// </summary>
/// <param name="input">Number to convert to a Metric representation.</param>
/// <param name="hasSpace">True will split the number and the symbol with a whitespace.</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <param name="decimals">If not null it is the numbers of decimals to round the number to</param>
/// <returns>A number in a Metric representation</returns>
private static buildRepresentation(input: number, hasSpace: boolean, useSymbol: boolean, decimals?: number): string {
const exponent = Math.floor(Math.log10(Math.abs(input)) / 3);
if (exponent !== 0) { return MetricNumerals.buildMetricRepresentation(input, exponent, hasSpace, useSymbol, decimals); }
let representation = decimals ? Math.round(input).toString() : input.toString();
if (hasSpace) {
representation += " ";
}
return representation;
}
/// <summary>
/// Build a Metric representation of the number.
/// </summary>
/// <param name="input">Number to convert to a Metric representation.</param>
/// <param name="exponent">Exponent of the number in a scientific notation</param>
/// <param name="hasSpace">True will split the number and the symbol with a whitespace.</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <param name="decimals">If not null it is the numbers of decimals to round the number to</param>
/// <returns>A number in a Metric representation</returns>
private static buildMetricRepresentation(input: number,
exponent: number, hasSpace: boolean, useSymbol: boolean, decimals?: number): string {
let number = input * Math.pow(1000, -exponent);
if (decimals) {
number = Math.round(number);
}
const symbol = Math.sign(exponent) === 1
? MetricNumerals.Symbols[0][exponent - 1]
: MetricNumerals.Symbols[1][-exponent - 1];
return number
+ (hasSpace ? " " : "")
+ MetricNumerals.getUnit(symbol, useSymbol);
}
/// <summary>
/// Get the unit from a symbol of from the symbol's name.
/// </summary>
/// <param name="symbol">The symbol linked to the unit</param>
/// <param name="useSymbol">True will use symbol instead of name</param>
/// <returns>A symbol or a symbol's name</returns>
private static getUnit(symbol: string, useSymbol: boolean): number {
// @ts-ignore
return useSymbol ? symbol.toString() : MetricNumerals.Names[symbol];
}
/// <summary>
/// Check if a Metric representation is out of the valid range.
/// </summary>
/// <param name="input">A Metric representation who might be out of the valid range.</param>
/// <returns>True if input is out of the valid range.</returns>
private static isOutOfRange(input: number): boolean {
// bool outside(double min, double max) => !(max > input && input > min);
// return (Math.Sign(input) == 1 && outside(SmallLimit, BigLimit))
// || (Math.Sign(input) == -1 && outside(-BigLimit, -SmallLimit));
return false;
}
/// <summary>
/// Check if a string is not a valid Metric representation.
/// A valid representation is in the format "{0}{1}" or "{0} {1}"
/// where {0} is a number and {1} is an allowed symbol.
/// </summary>
/// <remarks>
/// ToDo: Performance: Use (string input, out number) to escape the double use of Parse()
/// </remarks>
/// <param name="input">A string who might contain a invalid Metric representation.</param>
/// <returns>True if input is not a valid Metric representation.</returns>
private static isInvalidMetricNumeral(input: string): boolean {
const index = input.length - 1;
const last = input[index]
const isSymbol = MetricNumerals.Symbols[0].indexOf(last) >= 0 || MetricNumerals.Symbols[1].indexOf(last) >= 0;
if (!isSymbol) {
return true;
}
input = input.replace(last, "")
return isNaN(Number(input))
}
}
/// <summary>
/// Contains extension methods for changing a number to Roman representation (ToRoman) and from Roman representation back
/// to the number (FromRoman)
/// </summary>
export abstract class RomanNumerals {
private static readonly RomanNumerals =
[
{ key: "M", value: 1000 },
{ key: "CM", value: 900 },
{ key: "D", value: 500 },
{ key: "CD", value: 400 },
{ key: "C", value: 100 },
{ key: "XC", value: 90 },
{ key: "L", value: 50 },
{ key: "XL", value: 40 },
{ key: "X", value: 10 },
{ key: "IX", value: 9 },
{ key: "V", value: 5 },
{ key: "IV", value: 4 },
{ key: "I", value: 1 }
];
private static readonly ValidRomanNumeral = /^(?:(?=[MDCLXVI])((M{0,3})((C[DM])|(D?C{0,3}))?((X[LC])|(L?XX{0,2})|L)?((I[VX])|(V?(II{0,2}))|V)?))$/i
/// <summary>
/// Converts Roman numbers into integer
/// </summary>
/// <param name="input">Roman number</param>
/// <returns>Human-readable number</returns>
public static fromRoman(input: string): number {
if (input == null) {
throw new Error("input can't be null");
}
input = input.trim().toUpperCase()
const length = input.length;
if ((length === 0) || RomanNumerals.isInvalidRomanNumeral(input)) {
throw new Error("Empty or invalid Roman numeral string.");
}
let total = 0;
let i = length;
while (i > 0) {
let digit = RomanNumerals.romanToDigit(input[--i].toString());
if (i > 0) {
const previousDigit = RomanNumerals.romanToDigit(input[i - 1].toString());
if (previousDigit < digit) {
digit -= previousDigit;
i--;
}
}
total += digit;
}
return total;
}
private static romanToDigit(char: string): number {
let rtnVal = 0;
RomanNumerals.RomanNumerals.forEach(pair => {
if (pair.key === char) {
rtnVal = pair.value;
}
});
return rtnVal;
}
/// <summary>
/// Converts the input to Roman number
/// </summary>
/// <param name="input">Integer input</param>
/// <returns>Roman number</returns>
/// <exception cref="ArgumentOutOfRangeException">Thrown when the input is smaller than 1 or larger than 3999</exception>
public static toRoman(input: number): string {
const minValue = 1;
const maxValue = 3999;
if ((input < minValue) || (input > maxValue)) {
throw new Error("ArgumentOutOfRangeException");
}
let sb = "";
RomanNumerals.RomanNumerals.forEach(pair => {
while (Math.floor(input / pair.value) > 0) {
sb += pair.key;
input -= pair.value;
}
})
return sb
}
private static isInvalidRomanNumeral(input: string): boolean {
return !RomanNumerals.ValidRomanNumeral.test(input);
}
}
+6
-7

@@ -1,2 +0,1 @@

// @ts-ignore
import { ByteSize } from './src/Humanizer/Bytes/ByteSize'

@@ -16,23 +15,23 @@

Number.prototype.bits = function (): ByteSize {
return ByteSize.fromBits(this)
return ByteSize.fromBits(this as number)
}
Number.prototype.bytes = function (): ByteSize {
return ByteSize.fromBytes(this)
return ByteSize.fromBytes(this as number)
}
Number.prototype.kilobytes = function (): ByteSize {
return ByteSize.fromKilobytes(this)
return ByteSize.fromKilobytes(this as number)
}
Number.prototype.megabytes = function (): ByteSize {
return ByteSize.fromMegabytes(this)
return ByteSize.fromMegabytes(this as number)
}
Number.prototype.gigabytes = function (): ByteSize {
return ByteSize.fromGigabytes(this)
return ByteSize.fromGigabytes(this as number)
}
Number.prototype.terabytes = function (): ByteSize {
return ByteSize.fromTerabytes(this)
return ByteSize.fromTerabytes(this as number)
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// @ts-ignore
const ByteSize_1 = require("./src/Humanizer/Bytes/ByteSize");

@@ -5,0 +4,0 @@ Number.prototype.bits = function () {

@@ -1,1 +0,1 @@

{"version":3,"file":"byteSize.js","sourceRoot":"","sources":["../byteSize.ts"],"names":[],"mappings":";;AAAA,aAAa;AACb,6DAAyD;AAazD,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG;IACpB,OAAO,mBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG;IACrB,OAAO,mBAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC,CAAA"}
{"version":3,"file":"byteSize.js","sourceRoot":"","sources":["../byteSize.ts"],"names":[],"mappings":";;AAAA,6DAAyD;AAazD,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG;IACpB,OAAO,mBAAQ,CAAC,QAAQ,CAAC,IAAc,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG;IACrB,OAAO,mBAAQ,CAAC,SAAS,CAAC,IAAc,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAc,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAc,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAc,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAc,CAAC,CAAA;AACjD,CAAC,CAAA"}
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ordinalize = exports.byteSize = exports.vocabularies = exports.toQuantity = exports.romanNumeral = exports.numberToWords = void 0;
const numberToWords = __importStar(require("./numberToWords"));
exports.numberToWords = numberToWords;
const romanNumeral = __importStar(require("./romanNumeral"));
exports.romanNumeral = romanNumeral;
const romanNumerals = __importStar(require("./romanNumerals"));
exports.romanNumerals = romanNumerals;
const toQuantity = __importStar(require("./toQuantity"));

@@ -35,2 +22,6 @@ exports.toQuantity = toQuantity;

exports.ordinalize = ordinalize;
const numberToNumbers = __importStar(require("./numberToNumbers"));
exports.numberToNumbers = numberToNumbers;
const metricNumerals = __importStar(require("./metricNumerals"));
exports.metricNumerals = metricNumerals;
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAgD;AAQ5C,sCAAa;AAPjB,6DAA8C;AAQ1C,oCAAY;AAPhB,yDAA0C;AAQtC,gCAAU;AAPd,6DAA8C;AAQ1C,oCAAY;AAPhB,qDAAsC;AAQlC,4BAAQ;AAPZ,yDAA0C;AAQtC,gCAAU"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+DAAgD;AAiB5C,sCAAa;AAhBjB,+DAAgD;AAU5C,sCAAa;AATjB,yDAA0C;AAUtC,gCAAU;AATd,6DAA8C;AAU1C,oCAAY;AAThB,qDAAsC;AAUlC,4BAAQ;AATZ,yDAA0C;AAUtC,gCAAU;AATd,mEAAoD;AAIhD,0CAAe;AAHnB,iEAAkD;AAS9C,wCAAc"}

@@ -1,1 +0,1 @@

{"version":3,"file":"numberToWords.js","sourceRoot":"","sources":["../numberToWords.ts"],"names":[],"mappings":";;AAAA,aAAa;AACb,4HAAwH;AASxH;;;GAGG;AACH,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG;IACxB,OAAO,6DAA6B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACrD,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;IAC9B,OAAO,6DAA6B,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAC5D,CAAC,CAAA"}
{"version":3,"file":"numberToWords.js","sourceRoot":"","sources":["../numberToWords.ts"],"names":[],"mappings":";;AAAA,aAAa;AACb,4HAAwH;AASxH;;;GAGG;AACH,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG;IACxB,OAAO,6DAA6B,CAAC,OAAO,CAAC,IAAc,CAAC,CAAA;AAC/D,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;IAC9B,OAAO,6DAA6B,CAAC,OAAO,CAAC,IAAc,EAAE,IAAI,CAAC,CAAA;AACtE,CAAC,CAAA"}
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;

@@ -20,0 +8,0 @@ };

@@ -1,1 +0,1 @@

{"version":3,"file":"ordinalize.js","sourceRoot":"","sources":["../ordinalize.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,YAAY;AACZ,4EAA6D;AAY7D,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG;IAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG;IAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAA"}
{"version":3,"file":"ordinalize.js","sourceRoot":"","sources":["../ordinalize.ts"],"names":[],"mappings":";;;;;;;;;AAAA,YAAY;AACZ,4EAA6D;AAY7D,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG;IAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG;IAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAc,CAAC,CAAA;AACpD,CAAC,CAAA"}
"use strict";
//The MIT License (MIT)
Object.defineProperty(exports, "__esModule", { value: true });
exports.ByteSize = void 0;
//Copyright (c) 2013-2014 Omar Khudeira (http://omar.io)

@@ -21,228 +20,224 @@ //Permission is hereby granted, free of charge, to any person obtaining a copy

//THE SOFTWARE.
let ByteSize = /** @class */ (() => {
class ByteSize {
constructor(byteSize) {
// Get ceiling because bis are whole units
this.bits = Math.ceil(byteSize * ByteSize.BitsInByte);
this.bytes = byteSize;
this.kilobytes = byteSize / ByteSize.BytesInKilobyte;
this.megabytes = byteSize / ByteSize.BytesInMegabyte;
this.gigabytes = byteSize / ByteSize.BytesInGigabyte;
this.terabytes = byteSize / ByteSize.BytesInTerabyte;
class ByteSize {
constructor(byteSize) {
// Get ceiling because bis are whole units
this.bits = Math.ceil(byteSize * ByteSize.BitsInByte);
this.bytes = byteSize;
this.kilobytes = byteSize / ByteSize.BytesInKilobyte;
this.megabytes = byteSize / ByteSize.BytesInMegabyte;
this.gigabytes = byteSize / ByteSize.BytesInGigabyte;
this.terabytes = byteSize / ByteSize.BytesInTerabyte;
}
largestWholeNumberSymbol() {
// Absolute value is used to deal with negative values
if (Math.abs(this.terabytes) >= 1) {
return ByteSize.TerabyteSymbol;
}
largestWholeNumberSymbol() {
// Absolute value is used to deal with negative values
if (Math.abs(this.terabytes) >= 1) {
return ByteSize.TerabyteSymbol;
}
if (Math.abs(this.gigabytes) >= 1) {
return ByteSize.GigabyteSymbol;
}
if (Math.abs(this.megabytes) >= 1) {
return ByteSize.MegabyteSymbol;
}
if (Math.abs(this.kilobytes) >= 1) {
return ByteSize.KilobyteSymbol;
}
if (Math.abs(this.bytes) >= 1) {
return ByteSize.ByteSymbol;
}
return ByteSize.BitSymbol;
if (Math.abs(this.gigabytes) >= 1) {
return ByteSize.GigabyteSymbol;
}
largestWholeNumberFullWord() {
// Absolute value is used to deal with negative values
if (Math.abs(this.terabytes) >= 1) {
return ByteSize.Terabyte;
}
if (Math.abs(this.gigabytes) >= 1) {
return ByteSize.Gigabyte;
}
if (Math.abs(this.megabytes) >= 1) {
return ByteSize.Megabyte;
}
if (Math.abs(this.kilobytes) >= 1) {
return ByteSize.Kilobyte;
}
if (Math.abs(this.bytes) >= 1) {
return ByteSize.Byte;
}
return ByteSize.Bit;
if (Math.abs(this.megabytes) >= 1) {
return ByteSize.MegabyteSymbol;
}
largestWholeNumberValue() {
// Absolute value is used to deal with negative values
if (Math.abs(this.terabytes) >= 1) {
return this.terabytes;
}
if (Math.abs(this.gigabytes) >= 1) {
return this.gigabytes;
}
if (Math.abs(this.megabytes) >= 1) {
return this.megabytes;
}
if (Math.abs(this.kilobytes) >= 1) {
return this.kilobytes;
}
if (Math.abs(this.bytes) >= 1) {
return this.bytes;
}
return this.bits;
if (Math.abs(this.kilobytes) >= 1) {
return ByteSize.KilobyteSymbol;
}
static fromBits(value) {
return new ByteSize(value / ByteSize.BitsInByte);
if (Math.abs(this.bytes) >= 1) {
return ByteSize.ByteSymbol;
}
static fromBytes(value) {
return new ByteSize(value);
return ByteSize.BitSymbol;
}
largestWholeNumberFullWord() {
// Absolute value is used to deal with negative values
if (Math.abs(this.terabytes) >= 1) {
return ByteSize.Terabyte;
}
static fromKilobytes(value) {
return new ByteSize(value * ByteSize.BytesInKilobyte);
if (Math.abs(this.gigabytes) >= 1) {
return ByteSize.Gigabyte;
}
static fromMegabytes(value) {
return new ByteSize(value * ByteSize.BytesInMegabyte);
if (Math.abs(this.megabytes) >= 1) {
return ByteSize.Megabyte;
}
static fromGigabytes(value) {
return new ByteSize(value * ByteSize.BytesInGigabyte);
if (Math.abs(this.kilobytes) >= 1) {
return ByteSize.Kilobyte;
}
static fromTerabytes(value) {
return new ByteSize(value * ByteSize.BytesInTerabyte);
if (Math.abs(this.bytes) >= 1) {
return ByteSize.Byte;
}
/// <summary>
/// Converts the value of the current ByteSize object to a string.
/// The metric prefix symbol (bit, byte, kilo, mega, giga, tera) used is
/// the largest metric prefix such that the corresponding value is greater
/// than or equal to one.
/// </summary>
toString() {
return this.largestWholeNumberValue() + " " + this.largestWholeNumberSymbol();
return ByteSize.Bit;
}
largestWholeNumberValue() {
// Absolute value is used to deal with negative values
if (Math.abs(this.terabytes) >= 1) {
return this.terabytes;
}
/// <summary>
/// Converts the value of the current ByteSize object to a string with
/// full words. The metric prefix symbol (bit, byte, kilo, mega, giga,
/// tera) used is the largest metric prefix such that the corresponding
/// value is greater than or equal to one.
/// </summary>
toFullWords() {
var byteSizeAsFullWords = this.toString();
// If there is more than one unit, make the word plural
return this.largestWholeNumberValue() > 1 ? byteSizeAsFullWords + "s" : byteSizeAsFullWords;
if (Math.abs(this.gigabytes) >= 1) {
return this.gigabytes;
}
equals(other) {
return this.bits === other.bits;
if (Math.abs(this.megabytes) >= 1) {
return this.megabytes;
}
compareTo(other) {
if (this.bits - other.bits < 0) {
return -1;
}
if (this.bits - other.bits > 0) {
return 1;
}
return 0;
if (Math.abs(this.kilobytes) >= 1) {
return this.kilobytes;
}
add(other) {
return ByteSize.fromBits(this.bits + other.bits);
if (Math.abs(this.bytes) >= 1) {
return this.bytes;
}
addBits(value) {
return ByteSize.fromBits(this.bits + value);
return this.bits;
}
static fromBits(value) {
return new ByteSize(value / ByteSize.BitsInByte);
}
static fromBytes(value) {
return new ByteSize(value);
}
static fromKilobytes(value) {
return new ByteSize(value * ByteSize.BytesInKilobyte);
}
static fromMegabytes(value) {
return new ByteSize(value * ByteSize.BytesInMegabyte);
}
static fromGigabytes(value) {
return new ByteSize(value * ByteSize.BytesInGigabyte);
}
static fromTerabytes(value) {
return new ByteSize(value * ByteSize.BytesInTerabyte);
}
/// <summary>
/// Converts the value of the current ByteSize object to a string.
/// The metric prefix symbol (bit, byte, kilo, mega, giga, tera) used is
/// the largest metric prefix such that the corresponding value is greater
/// than or equal to one.
/// </summary>
toString(fixePoint = 2) {
return this.largestWholeNumberValue().toFixed(fixePoint) + " " + this.largestWholeNumberSymbol();
}
/// <summary>
/// Converts the value of the current ByteSize object to a string with
/// full words. The metric prefix symbol (bit, byte, kilo, mega, giga,
/// tera) used is the largest metric prefix such that the corresponding
/// value is greater than or equal to one.
/// </summary>
toFullWords() {
const byteSizeAsFullWords = this.toString();
// If there is more than one unit, make the word plural
return this.largestWholeNumberValue() > 1 ? byteSizeAsFullWords + "s" : byteSizeAsFullWords;
}
equals(other) {
return this.bits === other.bits;
}
compareTo(other) {
if (this.bits - other.bits < 0) {
return -1;
}
addBytes(value) {
return ByteSize.fromBytes(this.bytes + value);
if (this.bits - other.bits > 0) {
return 1;
}
addKilobytes(value) {
return ByteSize.fromKilobytes(this.kilobytes + value);
return 0;
}
add(other) {
return ByteSize.fromBits(this.bits + other.bits);
}
addBits(value) {
return ByteSize.fromBits(this.bits + value);
}
addBytes(value) {
return ByteSize.fromBytes(this.bytes + value);
}
addKilobytes(value) {
return ByteSize.fromKilobytes(this.kilobytes + value);
}
addMegabytes(value) {
return ByteSize.fromMegabytes(this.megabytes + value);
}
addGigabytes(value) {
return ByteSize.fromGigabytes(this.gigabytes + value);
}
addTerabytes(value) {
return ByteSize.fromTerabytes(this.terabytes + value);
}
subtract(other) {
return ByteSize.fromBits(this.bits - other.bits);
}
static parse(s) {
// Arg checking
if (!s) {
throw new Error("The input is null or empty");
}
addMegabytes(value) {
return ByteSize.fromMegabytes(this.megabytes + value);
// Setup the result
let result = new ByteSize(4);
// Get the index of the first non-digit character
s = s.trimStart(); // Protect against leading spaces, https://github.com/microsoft/TypeScript/blob/master/lib/lib.es2019.string.d.ts
let num;
let found = false;
// Acquiring culture specific decimal separator
const decSep = "."; // Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
// Pick first non-digit number
for (num = 0; num < s.length; num++) {
if (!(!isNaN(Number(s[num])) || s[num] === decSep)) {
found = true;
break;
}
}
addGigabytes(value) {
return ByteSize.fromGigabytes(this.gigabytes + value);
if (found === false) {
return new ByteSize(1); // TODO: should raize error
}
addTerabytes(value) {
return ByteSize.fromTerabytes(this.terabytes + value);
const lastNumber = num;
// Cut the input string in half
const numberPart = s.substring(0, lastNumber).trim();
const sizePart = s.substring(lastNumber, s.length).trim();
// Get the numeric part
if (isNaN(Number(numberPart))) {
return new ByteSize(2); // TODO: should raize error
}
subtract(other) {
return ByteSize.fromBits(this.bits - other.bits);
}
static parse(s) {
// Arg checking
if (!s) {
throw new Error("The input is null or empty");
}
// Setup the result
let result = new ByteSize(4);
// Get the index of the first non-digit character
s = s.trimStart(); // Protect against leading spaces, https://github.com/microsoft/TypeScript/blob/master/lib/lib.es2019.string.d.ts
let num;
let found = false;
// Acquiring culture specific decimal separator
let decSep = "."; //Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
// Pick first non-digit number
for (num = 0; num < s.length; num++) {
if (!(!isNaN(Number(s[num])) || s[num] == decSep)) {
found = true;
break;
const nb = Number(numberPart);
// Get the magnitude part
switch (sizePart.toUpperCase()) {
case ByteSize.ByteSymbol:
if (sizePart === ByteSize.BitSymbol) { // Bits
if (nb % 1 !== 0) {
return new ByteSize(3); // TODO: should raize error
}
result = ByteSize.fromBits(nb);
}
}
if (found == false) {
return new ByteSize(1); //TODO: should raize error
}
let lastNumber = num;
// Cut the input string in half
var numberPart = s.substring(0, lastNumber).trim();
var sizePart = s.substring(lastNumber, s.length).trim();
// Get the numeric part
if (isNaN(Number(numberPart))) {
return new ByteSize(2); //TODO: should raize error
}
let nb = Number(numberPart);
// Get the magnitude part
switch (sizePart.toUpperCase()) {
case ByteSize.ByteSymbol:
if (sizePart == ByteSize.BitSymbol) { // Bits
if (nb % 1 != 0) // Can't have partial bits
{
return new ByteSize(3); //TODO: should raize error
}
result = ByteSize.fromBits(nb);
}
else { // Bytes
result = ByteSize.fromBytes(nb);
}
break;
case ByteSize.KilobyteSymbol:
result = ByteSize.fromKilobytes(nb);
break;
case ByteSize.MegabyteSymbol:
result = ByteSize.fromMegabytes(nb);
break;
case ByteSize.GigabyteSymbol:
result = ByteSize.fromGigabytes(nb);
break;
case ByteSize.TerabyteSymbol:
result = ByteSize.fromTerabytes(nb);
break;
}
return result;
else { // Bytes
result = ByteSize.fromBytes(nb);
}
break;
case ByteSize.KilobyteSymbol:
result = ByteSize.fromKilobytes(nb);
break;
case ByteSize.MegabyteSymbol:
result = ByteSize.fromMegabytes(nb);
break;
case ByteSize.GigabyteSymbol:
result = ByteSize.fromGigabytes(nb);
break;
case ByteSize.TerabyteSymbol:
result = ByteSize.fromTerabytes(nb);
break;
}
return result;
}
ByteSize.MinValue = ByteSize.fromBits(Number.MIN_VALUE);
ByteSize.MaxValue = ByteSize.fromBits(Number.MAX_VALUE);
ByteSize.BitsInByte = 8;
ByteSize.BytesInKilobyte = 1024;
ByteSize.BytesInMegabyte = 1048576;
ByteSize.BytesInGigabyte = 1073741824;
ByteSize.BytesInTerabyte = 1099511627776;
ByteSize.BitSymbol = "b";
ByteSize.Bit = "bit";
ByteSize.ByteSymbol = "B";
ByteSize.Byte = "byte";
ByteSize.KilobyteSymbol = "KB";
ByteSize.Kilobyte = "kilobyte";
ByteSize.MegabyteSymbol = "MB";
ByteSize.Megabyte = "megabyte";
ByteSize.GigabyteSymbol = "GB";
ByteSize.Gigabyte = "gigabyte";
ByteSize.TerabyteSymbol = "TB";
ByteSize.Terabyte = "terabyte";
return ByteSize;
})();
}
exports.ByteSize = ByteSize;
ByteSize.MinValue = ByteSize.fromBits(Number.MIN_VALUE);
ByteSize.MaxValue = ByteSize.fromBits(Number.MAX_VALUE);
ByteSize.BitsInByte = 8;
ByteSize.BytesInKilobyte = 1024;
ByteSize.BytesInMegabyte = 1048576;
ByteSize.BytesInGigabyte = 1073741824;
ByteSize.BytesInTerabyte = 1099511627776;
ByteSize.BitSymbol = "b";
ByteSize.Bit = "bit";
ByteSize.ByteSymbol = "B";
ByteSize.Byte = "byte";
ByteSize.KilobyteSymbol = "KB";
ByteSize.Kilobyte = "kilobyte";
ByteSize.MegabyteSymbol = "MB";
ByteSize.Megabyte = "megabyte";
ByteSize.GigabyteSymbol = "GB";
ByteSize.Gigabyte = "gigabyte";
ByteSize.TerabyteSymbol = "TB";
ByteSize.Terabyte = "terabyte";
//# sourceMappingURL=ByteSize.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"ByteSize.js","sourceRoot":"","sources":["../../../../src/Humanizer/Bytes/ByteSize.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"ByteSize.js","sourceRoot":"","sources":["../../../../src/Humanizer/Bytes/ByteSize.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.convert = void 0;
exports.convert = function (nb, nbString) {
let nMod100 = nb % 100;
const nMod100 = nb % 100;
if (nMod100 >= 11 && nMod100 <= 13) {

@@ -7,0 +6,0 @@ return nbString + "th";

@@ -1,1 +0,1 @@

{"version":3,"file":"Ordinalize.js","sourceRoot":"","sources":["../../../../src/Humanizer/Inflections/Ordinalize.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,UAAS,EAAU,EAAE,QAAgB;IACxD,IAAI,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,IAAI,EAAE,EAClC;QACI,OAAO,QAAQ,GAAG,IAAI,CAAC;KAC1B;IAED,QAAQ,EAAE,GAAG,EAAE,EACf;QACI,KAAK,CAAC;YACF,OAAO,QAAQ,GAAG,IAAI,CAAC;QAE3B,KAAK,CAAC;YACF,OAAO,QAAQ,GAAG,IAAI,CAAC;QAE3B,KAAK,CAAC;YACF,OAAO,QAAQ,GAAG,IAAI,CAAC;QAE3B;YACI,OAAO,QAAQ,GAAG,IAAI,CAAC;KAC9B;AACL,CAAC,CAAA"}
{"version":3,"file":"Ordinalize.js","sourceRoot":"","sources":["../../../../src/Humanizer/Inflections/Ordinalize.ts"],"names":[],"mappings":";;AAAa,QAAA,OAAO,GAAG,UAAS,EAAU,EAAE,QAAgB;IACxD,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC;IAEzB,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,IAAI,EAAE,EAAE;QAChC,OAAO,QAAQ,GAAG,IAAI,CAAC;KAC1B;IAED,QAAQ,EAAE,GAAG,EAAE,EAAE;QACb,KAAK,CAAC;YACF,OAAO,QAAQ,GAAG,IAAI,CAAC;QAE3B,KAAK,CAAC;YACF,OAAO,QAAQ,GAAG,IAAI,CAAC;QAE3B,KAAK,CAAC;YACF,OAAO,QAAQ,GAAG,IAAI,CAAC;QAE3B;YACI,OAAO,QAAQ,GAAG,IAAI,CAAC;KAC9B;AACL,CAAC,CAAA"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Vocabularies = void 0;
// @ts-ignore

@@ -22,3 +21,3 @@ const Vocabulary_1 = require("./Vocabulary");

static BuildDefault() {
var _default = new Vocabulary_1.Vocabulary();
const _default = new Vocabulary_1.Vocabulary();
_default.addPlural("$", "s");

@@ -85,3 +84,3 @@ _default.addPlural("s$", "s");

_default.addIrregular("personnel", "personnel");
//Fix #78a
// Fix #78a
_default.addIrregular("cache", "caches");

@@ -88,0 +87,0 @@ _default.addIrregular("is", "are", false);

@@ -1,1 +0,1 @@

{"version":3,"file":"Vocabularies.js","sourceRoot":"","sources":["../../../../src/Humanizer/Inflections/Vocabularies.ts"],"names":[],"mappings":";;;AAAA,aAAa;AACb,6CAA0C;AAEtC,aAAa;AACb,uGAAuG;AACvG,cAAc;AACd,MAAsB,YAAY;IAI9B,aAAa;IACb,mEAAmE;IACnE,2GAA2G;IAC3G,sFAAsF;IACtF,cAAc;IACP,MAAM,CAAC,OAAO;QACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YACxB,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,CAAA;SACtD;QACD,OAAO,YAAY,CAAC,QAAQ,CAAA;IAChC,CAAC;IAEO,MAAM,CAAC,YAAY;QAEvB,IAAI,QAAQ,GAAG,IAAI,uBAAU,EAAE,CAAC;QAEhC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7B,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC3C,QAAQ,CAAC,SAAS,CAAC,wEAAwE,EAAE,KAAK,CAAC,CAAC;QACpG,QAAQ,CAAC,SAAS,CAAC,iEAAiE,EAAE,MAAM,CAAC,CAAC;QAC9F,QAAQ,CAAC,SAAS,CAAC,iEAAiE,EAAE,OAAO,CAAC,CAAC;QAC/F,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACxC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAClC,QAAQ,CAAC,SAAS,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QACvD,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrC,QAAQ,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAChD,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC5C,QAAQ,CAAC,SAAS,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;QACxD,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC5C,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACjD,QAAQ,CAAC,SAAS,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;QACpD,QAAQ,CAAC,SAAS,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QACzD,QAAQ,CAAC,SAAS,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAEnD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1C,QAAQ,CAAC,WAAW,CAAC,6EAA6E,EAAE,OAAO,CAAC,CAAC;QAC7G,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC3C,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,QAAQ,CAAC,WAAW,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QAC3D,QAAQ,CAAC,WAAW,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAC1D,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC7C,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC5C,QAAQ,CAAC,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC9C,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC9C,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,QAAQ,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAClD,QAAQ,CAAC,WAAW,CAAC,uEAAuE,EAAE,MAAM,CAAC,CAAC;QACtG,QAAQ,CAAC,WAAW,CAAC,mEAAmE,EAAE,IAAI,CAAC,CAAC;QAChG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,QAAQ,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC9C,QAAQ,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAChD,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACzC,QAAQ,CAAC,WAAW,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACnD,QAAQ,CAAC,WAAW,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QAC3D,QAAQ,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;QACrD,QAAQ,CAAC,WAAW,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;QAE7D,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACjD,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC/C,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3C,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAChD,UAAU;QACV,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEzC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAG,KAAK,CAAC,CAAC;QAC/C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAG,KAAK,CAAC,CAAC;QAC/C,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAG,KAAK,CAAC,CAAC;QACvD,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAG,KAAK,CAAC,CAAC;QAChD,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAE5C,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACrC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACvC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACpC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACrC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACpC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEhC,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAvID,oCAuIC"}
{"version":3,"file":"Vocabularies.js","sourceRoot":"","sources":["../../../../src/Humanizer/Inflections/Vocabularies.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Vocabulary = void 0;
/// <summary>

@@ -20,3 +19,4 @@ /// A container for exceptions to simple pluralization/singularization rules.

/// <param name="plural">The plural form of the irregular word, e.g. "people".</param>
/// <param name="matchEnding">True to match these words on their own as well as at the end of longer words. False, otherwise.</param>
/// <param name="matchEnding">True to match these words on their own as well
/// as at the end of longer words. False, otherwise.</param>
addIrregular(singular, plural, matchEnding = true) {

@@ -59,12 +59,13 @@ if (matchEnding) {

/// <param name="word">Word to be pluralized</param>
/// <param name="inputIsKnownToBeSingular">Normally you call Pluralize on singular words; but if you're unsure call it with false</param>
/// <param name="inputIsKnownToBeSingular">Normally you call Pluralize on singular words;
/// but if you're unsure call it with false</param>
/// <returns></returns>
pluralize(word, inputIsKnownToBeSingular = true) {
var result = this.applyRules(this._plurals, word, false);
const result = this.applyRules(this._plurals, word, false);
if (inputIsKnownToBeSingular) {
return result !== null && result !== void 0 ? result : word;
return (result !== null && result !== void 0 ? result : word);
}
var asSingular = this.applyRules(this._singulars, word, false);
var asSingularAsPlural = this.applyRules(this._plurals, asSingular, false);
if (asSingular != null && asSingular != word && asSingular + "s" != word && asSingularAsPlural == word && result != word) {
const asSingular = this.applyRules(this._singulars, word, false);
const asSingularAsPlural = this.applyRules(this._plurals, asSingular, false);
if (asSingular !== "" && asSingular !== word && asSingular + "s" !== word && asSingularAsPlural === word && result !== word) {
return word;

@@ -78,20 +79,22 @@ }

/// <param name="word">Word to be singularized</param>
/// <param name="inputIsKnownToBePlural">Normally you call Singularize on plural words; but if you're unsure call it with false</param>
/// <param name="inputIsKnownToBePlural">Normally you call Singularize on plural words; but if you're unsure
/// call it with false</param>
/// <param name="skipSimpleWords">Skip singularizing single words that have an 's' on the end</param>
/// <returns></returns>
singularize(word, inputIsKnownToBePlural = true, skipSimpleWords = false) {
var result = this.applyRules(this._singulars, word, skipSimpleWords);
const result = this.applyRules(this._singulars, word, skipSimpleWords);
if (inputIsKnownToBePlural) {
return result !== null && result !== void 0 ? result : word;
return (result !== null && result !== void 0 ? result : word);
}
// the Plurality is unknown so we should check all possibilities
var asPlural = this.applyRules(this._plurals, word, false);
var asPluralAsSingular = this.applyRules(this._singulars, asPlural, false);
if (asPlural != word && word + "s" != asPlural && asPluralAsSingular == word && result != word) {
const asPlural = this.applyRules(this._plurals, word, false);
const asPluralAsSingular = this.applyRules(this._singulars, asPlural, false);
if (asPlural !== word && word + "s" !== asPlural && asPluralAsSingular === word && result !== word) {
return word;
}
return result !== null && result !== void 0 ? result : word;
return result === "" ? word : result;
}
applyRules(rules, word, skipFirstRule) {
if (word == null) {
// @ts-ignore
return null;

@@ -102,6 +105,6 @@ }

}
var result = word;
var end = skipFirstRule ? 1 : 0;
for (var i = rules.length - 1; i >= end; i--) {
if ((result = rules[i].apply(word)) != null) {
let result = word;
const end = skipFirstRule ? 1 : 0;
for (let i = rules.length - 1; i >= end; i--) {
if ((result = rules[i].apply(word)) !== "") {
break;

@@ -119,3 +122,3 @@ }

constructor(pattern, replacement) {
this._regex = new RegExp(pattern, 'i');
this._regex = new RegExp(pattern, "i");
this._replacement = replacement;

@@ -125,3 +128,3 @@ }

if (!this._regex.test(word)) {
return null;
return "";
}

@@ -128,0 +131,0 @@ return word.replace(this._regex, this._replacement);

@@ -1,1 +0,1 @@

{"version":3,"file":"Vocabulary.js","sourceRoot":"","sources":["../../../../src/Humanizer/Inflections/Vocabulary.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"Vocabulary.js","sourceRoot":"","sources":["../../../../src/Humanizer/Inflections/Vocabulary.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnglishNumberToWordsConverter = void 0;
let EnglishNumberToWordsConverter = /** @class */ (() => {
class EnglishNumberToWordsConverter {
static convertToOrdinal(number) {
return EnglishNumberToWordsConverter.convert(number, true);
class EnglishNumberToWordsConverter {
static convertToOrdinal(number) {
return EnglishNumberToWordsConverter.convert(number, true);
}
static convert(number, isOrdinal = false) {
number = Math.floor(number);
if (number === 0) {
return EnglishNumberToWordsConverter.getUnitValue(0, isOrdinal);
}
static convert(number, isOrdinal = false) {
number = Math.floor(number);
if (number == 0) {
return EnglishNumberToWordsConverter.getUnitValue(0, isOrdinal);
if (number < 0) {
return `minus ${EnglishNumberToWordsConverter.convert(-number)}`;
}
const parts = new Array();
if (Math.floor(number / 1000000000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000000000)} quintillion`);
number %= 1000000000000000000;
}
if (Math.floor(number / 1000000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000000)} quadrillion`);
number %= 1000000000000000;
}
if (Math.floor(number / 1000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000)} trillion`);
number %= 1000000000000;
}
if (Math.floor(number / 1000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000)} billion`);
number %= 1000000000;
}
if (Math.floor(number / 1000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000)} million`);
number %= 1000000;
}
if (Math.floor(number / 1000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000)} thousand`);
number %= 1000;
}
if (Math.floor(number / 100) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 100)} hundred`);
number %= 100;
}
if (Math.floor(number) > 0) {
if (parts.length !== 0) {
parts.push("and");
}
if (number < 0) {
return `minus ${EnglishNumberToWordsConverter.convert(-number)}`;
if (number < 20) {
parts.push(EnglishNumberToWordsConverter.getUnitValue(number, isOrdinal));
}
var parts = new Array();
if (Math.floor(number / 1000000000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000000000)} quintillion`);
number %= 1000000000000000000;
}
if (Math.floor(number / 1000000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000000)} quadrillion`);
number %= 1000000000000000;
}
if (Math.floor(number / 1000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000)} trillion`);
number %= 1000000000000;
}
if (Math.floor(number / 1000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000)} billion`);
number %= 1000000000;
}
if (Math.floor(number / 1000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000)} million`);
number %= 1000000;
}
if (Math.floor(number / 1000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000)} thousand`);
number %= 1000;
}
if (Math.floor(number / 100) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 100)} hundred`);
number %= 100;
}
if (Math.floor(number) > 0) {
if (parts.length != 0) {
parts.push("and");
else {
let lastPart = EnglishNumberToWordsConverter.TensMap[Math.floor(number / 10)];
if ((number % 10) > 0) {
lastPart += `-${EnglishNumberToWordsConverter.getUnitValue(number % 10, isOrdinal)}`;
}
if (number < 20) {
parts.push(EnglishNumberToWordsConverter.getUnitValue(number, isOrdinal));
else if (isOrdinal) {
const trimmed = lastPart.replace(/\y+$/g, ""); // lastPart.trimEnd('y')
lastPart = trimmed + "ieth";
}
else {
var lastPart = EnglishNumberToWordsConverter.TensMap[Math.floor(number / 10)];
if ((number % 10) > 0) {
lastPart += `-${EnglishNumberToWordsConverter.getUnitValue(number % 10, isOrdinal)}`;
}
else if (isOrdinal) {
let trimmed = lastPart.replace(/\y+$/g, ''); //lastPart.trimEnd('y')
lastPart = trimmed + "ieth";
}
parts.push(lastPart);
}
parts.push(lastPart);
}
else if (isOrdinal) {
parts[parts.length - 1] += "th";
}
var toWords = parts.join(" ");
if (isOrdinal) {
toWords = EnglishNumberToWordsConverter.removeOnePrefix(toWords);
}
return toWords;
}
static getUnitValue(number, isOrdinal) {
if (isOrdinal) {
let exceptionString = EnglishNumberToWordsConverter.exceptionNumbersToWords(number);
if (exceptionString != "NOTFOUND") {
return exceptionString;
}
else {
return EnglishNumberToWordsConverter.UnitsMap[number] + "th";
}
else if (isOrdinal) {
parts[parts.length - 1] += "th";
}
let toWords = parts.join(" ");
if (isOrdinal) {
toWords = EnglishNumberToWordsConverter.removeOnePrefix(toWords);
}
return toWords;
}
static getUnitValue(number, isOrdinal) {
if (isOrdinal) {
const exceptionString = EnglishNumberToWordsConverter.exceptionNumbersToWords(number);
if (exceptionString !== "NOTFOUND") {
return exceptionString;
}
else {
return EnglishNumberToWordsConverter.UnitsMap[number];
return EnglishNumberToWordsConverter.UnitsMap[number] + "th";
}
}
static removeOnePrefix(toWords) {
// one hundred => hundredth
if (toWords.indexOf("one") == 0) {
toWords = toWords.substring(4); //toWords.remove(0, 4);
}
return toWords;
else {
return EnglishNumberToWordsConverter.UnitsMap[number];
}
static exceptionNumbersToWords(number) {
let rtnVal = "NOTFOUND";
EnglishNumberToWordsConverter.OrdinalExceptions.forEach(element => {
if (element[0] == number) {
rtnVal = element[1].toString();
}
});
return rtnVal;
}
static removeOnePrefix(toWords) {
// one hundred => hundredth
if (toWords.indexOf("one") === 0) {
toWords = toWords.substring(4); // toWords.remove(0, 4);
}
return toWords;
}
EnglishNumberToWordsConverter.UnitsMap = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
EnglishNumberToWordsConverter.TensMap = ["zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"];
EnglishNumberToWordsConverter.OrdinalExceptions = [
[1, "first"],
[2, "second"],
[3, "third"],
[4, "fourth"],
[5, "fifth"],
[8, "eighth"],
[9, "ninth"],
[12, "twelfth"],
];
return EnglishNumberToWordsConverter;
})();
static exceptionNumbersToWords(number) {
let rtnVal = "NOTFOUND";
EnglishNumberToWordsConverter.OrdinalExceptions.forEach(element => {
// tslint:disable-next-line
if (element[0] == number) {
rtnVal = element[1].toString();
}
});
return rtnVal;
}
}
exports.EnglishNumberToWordsConverter = EnglishNumberToWordsConverter;
EnglishNumberToWordsConverter.UnitsMap = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
EnglishNumberToWordsConverter.TensMap = ["zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"];
EnglishNumberToWordsConverter.OrdinalExceptions = [
[1, "first"],
[2, "second"],
[3, "third"],
[4, "fourth"],
[5, "fifth"],
[8, "eighth"],
[9, "ninth"],
[12, "twelfth"],
];
//# sourceMappingURL=EnglishNumberToWordsConverter.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"EnglishNumberToWordsConverter.js","sourceRoot":"","sources":["../../../../../src/Humanizer/Localisation/NumberToWords/EnglishNumberToWordsConverter.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"EnglishNumberToWordsConverter.js","sourceRoot":"","sources":["../../../../../src/Humanizer/Localisation/NumberToWords/EnglishNumberToWordsConverter.ts"],"names":[],"mappings":"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"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ShowQuantityAs = void 0;
// @ts-ignore

@@ -32,9 +31,9 @@ const Vocabularies_1 = require("./src/Humanizer/Inflections/Vocabularies");

String.prototype.toQuantity = function (quantity, showQuantityAs = ShowQuantityAs.Numeric) {
let transformedInput = quantity == 1
const transformedInput = quantity === 1
? Vocabularies_1.Vocabularies.Default().singularize(this, false)
: Vocabularies_1.Vocabularies.Default().pluralize(this, false);
if (showQuantityAs == ShowQuantityAs.None) {
if (showQuantityAs === ShowQuantityAs.None) {
return transformedInput;
}
if (showQuantityAs == ShowQuantityAs.Numeric) {
if (showQuantityAs === ShowQuantityAs.Numeric) {
return `${quantity} ${transformedInput}`;

@@ -41,0 +40,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"toQuantity.js","sourceRoot":"","sources":["../toQuantity.ts"],"names":[],"mappings":";;;AACA,aAAa;AACb,2EAAuE;AACvE,2BAAwB;AAQxB;;GAEG;AACH,IAAY,cAaX;AAbD,WAAY,cAAc;IACtB,2EAA2E;IAC3E,mDAAI,CAAA;IACJ;;;OAGG;IACH,yDAAO,CAAA;IACP;;;OAGG;IACH,qDAAK,CAAA;AACT,CAAC,EAbW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAazB;AAED;;;;;GAKG;AACH,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,QAAgB,EAAE,iBAAiC,cAAc,CAAC,OAAO;IAC7G,IAAI,gBAAgB,GAAG,QAAQ,IAAI,CAAC;QACpC,CAAC,CAAC,2BAAY,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;QACjD,CAAC,CAAC,2BAAY,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAE/C,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE;QACvC,OAAO,gBAAgB,CAAC;KAC3B;IAED,IAAI,cAAc,IAAI,cAAc,CAAC,OAAO,EAAE;QAC1C,OAAO,GAAG,QAAQ,IAAI,gBAAgB,EAAE,CAAA;KAC3C;IACD,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAA;AACtD,CAAC,CAAA"}
{"version":3,"file":"toQuantity.js","sourceRoot":"","sources":["../toQuantity.ts"],"names":[],"mappings":";;AACA,aAAa;AACb,2EAAuE;AACvE,2BAAwB;AAQxB;;GAEG;AACH,IAAY,cAaX;AAbD,WAAY,cAAc;IACtB,2EAA2E;IAC3E,mDAAI,CAAA;IACJ;;;OAGG;IACH,yDAAO,CAAA;IACP;;;OAGG;IACH,qDAAK,CAAA;AACT,CAAC,EAbW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAazB;AAED;;;;;GAKG;AACH,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,QAAgB,EAAE,iBAAiC,cAAc,CAAC,OAAO;IAC7G,MAAM,gBAAgB,GAAG,QAAQ,KAAK,CAAC;QACvC,CAAC,CAAC,2BAAY,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAc,EAAE,KAAK,CAAC;QAC3D,CAAC,CAAC,2BAAY,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAc,EAAE,KAAK,CAAC,CAAA;IAEzD,IAAI,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE;QACxC,OAAO,gBAAgB,CAAC;KAC3B;IAED,IAAI,cAAc,KAAK,cAAc,CAAC,OAAO,EAAE;QAC3C,OAAO,GAAG,QAAQ,IAAI,gBAAgB,EAAE,CAAA;KAC3C;IACD,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAA;AACtD,CAAC,CAAA"}

@@ -1,1 +0,1 @@

{"version":3,"file":"vocabularies.js","sourceRoot":"","sources":["../vocabularies.ts"],"names":[],"mappings":";;AACA,aAAa;AACb,2EAAuE;AASvE,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,2BAAY,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG;IAC3B,OAAO,2BAAY,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACnD,CAAC,CAAA"}
{"version":3,"file":"vocabularies.js","sourceRoot":"","sources":["../vocabularies.ts"],"names":[],"mappings":";;AACA,aAAa;AACb,2EAAuE;AASvE,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;IACzB,OAAO,2BAAY,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAc,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG;IAC3B,OAAO,2BAAY,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAc,CAAC,CAAA;AAC7D,CAAC,CAAA"}
import * as numberToWords from './numberToWords'
import * as romanNumeral from './romanNumeral'
import * as romanNumerals from './romanNumerals'
import * as toQuantity from './toQuantity'

@@ -7,10 +7,14 @@ import * as vocabularies from './vocabularies'

import * as ordinalize from './ordinalize'
import * as numberToNumbers from './numberToNumbers'
import * as metricNumerals from './metricNumerals'
export {
numberToWords,
romanNumeral,
toQuantity,
vocabularies,
byteSize,
ordinalize
numberToNumbers,
romanNumerals,
toQuantity,
vocabularies,
byteSize,
ordinalize,
metricNumerals,
numberToWords
}

@@ -16,3 +16,3 @@ // @ts-ignore

Number.prototype.toWords = function (): string {
return EnglishNumberToWordsConverter.convert(this)
return EnglishNumberToWordsConverter.convert(this as number)
}

@@ -25,4 +25,4 @@

Number.prototype.toOrdinalWords = function (): string {
return EnglishNumberToWordsConverter.convert(this, true)
return EnglishNumberToWordsConverter.convert(this as number, true)
}

@@ -15,7 +15,7 @@ // @ts-ignor

Number.prototype.ordinalize = function (): string {
return ord.convert(this, this.toString())
return ord.convert(this as number, this.toString())
}
String.prototype.ordinalize = function (): string {
return ord.convert(Number(this), this)
return ord.convert(Number(this), this as string)
}
{
"name": "humanizer.node",
"version": "1.0.3",
"version": "1.0.4",
"description": "Humanizer meets all your Node needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantitie",

@@ -9,3 +9,4 @@ "main": "dist/index.js",

"build": "rimraf irf dist/* && tsc",
"test": "mocha"
"test": "mocha",
"local": "npm run build && node ./local_test.js"
},

@@ -34,4 +35,4 @@ "repository": {

"ts-node": "^8.10.1",
"typescript": "^3.7.4"
"typescript": "3.7.4"
}
}
+71
-14

@@ -10,3 +10,20 @@ # Humanizer.node

```
### Table of contents
- [Humanizer.node](#humanizernode)
- [Table of contents](#table-of-contents)
- [Implemented](#implemented)
- [Usage](#usage)
- [Examples](#examples)
- [ByteSize](#bytesize)
- [Vocabularies](#vocabularies)
- [Pluralize](#pluralize)
- [Singularize](#singularize)
- [Ordinalize](#ordinalize)
- [ToQuantity](#toquantity)
- [Number to words](#number-to-words)
- [Number to ordinal words](#number-to-ordinal-words)
- [Roman Numerals](#roman-numerals)
- [Metric numerals](#metric-numerals)
## Implemented

@@ -25,8 +42,3 @@

```js
require('humanizer.node').toQuantity
require('humanizer.node').numberToWords
require('humanizer.node').byteSize
require('humanizer.node').vocabularies
require('humanizer.node').romanNumeral
require('humanizer.node').ordinalize
require('humanizer.node')
```

@@ -40,3 +52,3 @@

let result = (10).megabytes().toString()
console.log(result) // -> 10 MB
console.log(result) // -> 10.00 MB
```

@@ -51,3 +63,3 @@

```js
require('humanizer.node').byteSize
require('humanizer.node')

@@ -88,3 +100,3 @@ let fileSize = (10).kilobytes()

```js
require('humanizer.node').vocabularies
require('humanizer.node')

@@ -108,3 +120,3 @@ "Man".pluralize() // -> Men

```js
require('humanizer.node').ordinalize
require('humanizer.node')

@@ -118,3 +130,3 @@ (1).ordinalize() => "1st"

```js
require('humanizer.node').toQuantity
require('humanizer.node')

@@ -151,3 +163,3 @@ "case".toQuantity(0) => "0 cases"

```js
require('humanizer.node').numberToWords
require('humanizer.node')

@@ -164,3 +176,3 @@ (1).toWords() => "one"

```js
require('humanizer.node').numberToWords
require('humanizer.node')

@@ -176,3 +188,48 @@ (0).toOrdinalWords() => "zeroth"

(21).toOrdinalWords() => "twenty first"
(121).toOrdinalWords() => "hundred and twenty first"
(121).toOrdinalWords() => "hundred and twenty-first"
```
## Roman Numerals
Humanizer can change numbers to Roman numerals using the `toRoman` extension. The numbers 1 to 10 can be expressed in Roman numerals as follows:
```ts
(1).toRoman() => "I"
(2).toRoman() => "II"
(3).toRoman() => "III"
(4).toRoman() => "IV"
(5).toRoman() => "V"
(6).toRoman() => "VI"
(7).toRoman() => "VII"
(8).toRoman() => "VIII"
(9).toRoman() => "IX"
(10).toRoman() => "X"
```
Also the reverse operation using the `fromRoman` extension.
```ts
"I".fromRoman() => 1
"II".fromRoman() => 2
"III".fromRoman() => 3
"IV".fromRoman() => 4
"V".fromRoman() => 5
```
## Metric numerals
Humanizer can change numbers to Metric numerals using the `toMetric` extension. The numbers 1, 1230 and 0.1 can be expressed in Metric numerals as follows:
```js
(1).toMetric() => "1"
(1230).toMetric() => "1.23k"
(0.1).toMetric() => "100m"
```
Also the reverse operation using the `fromMetric` extension.
```js
"1".fromMetric() => 1
"1.23k".fromMetric() => 1230
"100m".fromMetric() => 0.1
```

@@ -173,4 +173,4 @@ //The MIT License (MIT)

/// </summary>
public toString(): string {
return this.largestWholeNumberValue() + " " + this.largestWholeNumberSymbol();
public toString(fixePoint: number = 2): string {
return this.largestWholeNumberValue().toFixed(fixePoint) + " " + this.largestWholeNumberSymbol();
}

@@ -186,3 +186,3 @@

public toFullWords(): string {
var byteSizeAsFullWords = this.toString()
const byteSizeAsFullWords = this.toString()

@@ -257,7 +257,7 @@ // If there is more than one unit, make the word plural

let decSep = "." //Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
const decSep = "." // Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
// Pick first non-digit number
for (num = 0; num < s.length; num++) {
if (!(!isNaN(Number(s[num])) || s[num] == decSep)) {
if (!(!isNaN(Number(s[num])) || s[num] === decSep)) {
found = true;

@@ -268,28 +268,26 @@ break;

if (found == false) {
return new ByteSize(1); //TODO: should raize error
if (found === false) {
return new ByteSize(1); // TODO: should raize error
}
let lastNumber = num;
const lastNumber = num;
// Cut the input string in half
var numberPart = s.substring(0, lastNumber).trim()
var sizePart = s.substring(lastNumber, s.length).trim()
const numberPart = s.substring(0, lastNumber).trim()
const sizePart = s.substring(lastNumber, s.length).trim()
// Get the numeric part
if (isNaN(Number(numberPart))) {
return new ByteSize(2); //TODO: should raize error
return new ByteSize(2); // TODO: should raize error
}
let nb = Number(numberPart)
const nb = Number(numberPart)
// Get the magnitude part
switch (sizePart.toUpperCase()) {
case ByteSize.ByteSymbol:
if (sizePart == ByteSize.BitSymbol) { // Bits
if (nb % 1 != 0) // Can't have partial bits
{
return new ByteSize(3); //TODO: should raize error
if (sizePart === ByteSize.BitSymbol) { // Bits
if (nb % 1 !== 0) {
return new ByteSize(3); // TODO: should raize error
}
result = ByteSize.fromBits(nb);
}
else { // Bytes
} else { // Bytes
result = ByteSize.fromBytes(nb);

@@ -296,0 +294,0 @@ }

export const convert = function(nb: number, nbString: string): string {
let nMod100 = nb % 100;
const nMod100 = nb % 100;
if (nMod100 >= 11 && nMod100 <= 13)
{
if (nMod100 >= 11 && nMod100 <= 13) {
return nbString + "th";
}
switch (nb % 10)
{
switch (nb % 10) {
case 1:

@@ -12,0 +10,0 @@ return nbString + "st";

// @ts-ignore
import { Vocabulary } from "./Vocabulary";
/// <summary>
/// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default.
/// </summary>
export abstract class Vocabularies {
private static Instance: Vocabulary;
/// <summary>
/// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default.
/// The default vocabulary used for singular/plural irregularities.
/// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize().
/// At this time, multiple vocabularies and removing existing rules are not supported.
/// </summary>
export abstract class Vocabularies
{
private static Instance: Vocabulary;
/// <summary>
/// The default vocabulary used for singular/plural irregularities.
/// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize().
/// At this time, multiple vocabularies and removing existing rules are not supported.
/// </summary>
public static Default(): Vocabulary {
if (!Vocabularies.Instance) {
Vocabularies.Instance = Vocabularies.BuildDefault()
}
return Vocabularies.Instance
public static Default(): Vocabulary {
if (!Vocabularies.Instance) {
Vocabularies.Instance = Vocabularies.BuildDefault()
}
return Vocabularies.Instance
}
private static BuildDefault(): Vocabulary
{
var _default = new Vocabulary();
private static BuildDefault(): Vocabulary {
const _default = new Vocabulary();
_default.addPlural("$", "s");
_default.addPlural("s$", "s");
_default.addPlural("(ax|test)is$", "$1es");
_default.addPlural("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$", "$1i");
_default.addPlural("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$", "$1es");
_default.addPlural("(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$", "$1oes");
_default.addPlural("([dti])um$", "$1a");
_default.addPlural("sis$", "ses");
_default.addPlural("(?:([^f])fe|([lr])f)$", "$1$2ves");
_default.addPlural("(hive)$", "$1s");
_default.addPlural("([^aeiouy]|qu)y$", "$1ies");
_default.addPlural("(x|ch|ss|sh)$", "$1es");
_default.addPlural("(matr|vert|ind|d)ix|ex$", "$1ices");
_default.addPlural("([m|l])ouse$", "$1ice");
_default.addPlural("^(ox)$", "$1en");
_default.addPlural("(quiz)$", "$1zes");
_default.addPlural("(buz|blit|walt)z$", "$1zes");
_default.addPlural("(hoo|lea|loa|thie)f$", "$1ves");
_default.addPlural("(alumn|alg|larv|vertebr)a$", "$1ae");
_default.addPlural("(criteri|phenomen)on$", "$1a");
_default.addPlural("$", "s");
_default.addPlural("s$", "s");
_default.addPlural("(ax|test)is$", "$1es");
_default.addPlural("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$", "$1i");
_default.addPlural("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$", "$1es");
_default.addPlural("(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$", "$1oes");
_default.addPlural("([dti])um$", "$1a");
_default.addPlural("sis$", "ses");
_default.addPlural("(?:([^f])fe|([lr])f)$", "$1$2ves");
_default.addPlural("(hive)$", "$1s");
_default.addPlural("([^aeiouy]|qu)y$", "$1ies");
_default.addPlural("(x|ch|ss|sh)$", "$1es");
_default.addPlural("(matr|vert|ind|d)ix|ex$", "$1ices");
_default.addPlural("([m|l])ouse$", "$1ice");
_default.addPlural("^(ox)$", "$1en");
_default.addPlural("(quiz)$", "$1zes");
_default.addPlural("(buz|blit|walt)z$", "$1zes");
_default.addPlural("(hoo|lea|loa|thie)f$", "$1ves");
_default.addPlural("(alumn|alg|larv|vertebr)a$", "$1ae");
_default.addPlural("(criteri|phenomen)on$", "$1a");
_default.addSingular("s$", "");
_default.addSingular("(n)ews$", "$1ews");
_default.addSingular("([dti])a$", "$1um");
_default.addSingular("(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$", "$1sis");
_default.addSingular("([^f])ves$", "$1fe");
_default.addSingular("(hive)s$", "$1");
_default.addSingular("(tive)s$", "$1");
_default.addSingular("([lr]|hoo|lea|loa|thie)ves$", "$1f");
_default.addSingular("(^zomb)?([^aeiouy]|qu)ies$", "$2y");
_default.addSingular("(s)eries$", "$1eries");
_default.addSingular("(m)ovies$", "$1ovie");
_default.addSingular("(x|ch|ss|sh)es$", "$1");
_default.addSingular("([m|l])ice$", "$1ouse");
_default.addSingular("(o)es$", "$1");
_default.addSingular("(shoe)s$", "$1");
_default.addSingular("(cris|ax|test)es$", "$1is");
_default.addSingular("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$", "$1us");
_default.addSingular("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$", "$1");
_default.addSingular("^(ox)en", "$1");
_default.addSingular("(matr|d)ices$", "$1ix");
_default.addSingular("(vert|ind)ices$", "$1ex");
_default.addSingular("(quiz)zes$", "$1");
_default.addSingular("(buz|blit|walt)zes$", "$1z");
_default.addSingular("(alumn|alg|larv|vertebr)ae$", "$1a");
_default.addSingular("(criteri|phenomen)a$", "$1on");
_default.addSingular("([b|r|c]ook|room|smooth)ies$", "$1ie");
_default.addSingular("s$", "");
_default.addSingular("(n)ews$", "$1ews");
_default.addSingular("([dti])a$", "$1um");
_default.addSingular("(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$", "$1sis");
_default.addSingular("([^f])ves$", "$1fe");
_default.addSingular("(hive)s$", "$1");
_default.addSingular("(tive)s$", "$1");
_default.addSingular("([lr]|hoo|lea|loa|thie)ves$", "$1f");
_default.addSingular("(^zomb)?([^aeiouy]|qu)ies$", "$2y");
_default.addSingular("(s)eries$", "$1eries");
_default.addSingular("(m)ovies$", "$1ovie");
_default.addSingular("(x|ch|ss|sh)es$", "$1");
_default.addSingular("([m|l])ice$", "$1ouse");
_default.addSingular("(o)es$", "$1");
_default.addSingular("(shoe)s$", "$1");
_default.addSingular("(cris|ax|test)es$", "$1is");
_default.addSingular("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$", "$1us");
_default.addSingular("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$", "$1");
_default.addSingular("^(ox)en", "$1");
_default.addSingular("(matr|d)ices$", "$1ix");
_default.addSingular("(vert|ind)ices$", "$1ex");
_default.addSingular("(quiz)zes$", "$1");
_default.addSingular("(buz|blit|walt)zes$", "$1z");
_default.addSingular("(alumn|alg|larv|vertebr)ae$", "$1a");
_default.addSingular("(criteri|phenomen)a$", "$1on");
_default.addSingular("([b|r|c]ook|room|smooth)ies$", "$1ie");
_default.addIrregular("person", "people");
_default.addIrregular("man", "men");
_default.addIrregular("human", "humans");
_default.addIrregular("child", "children");
_default.addIrregular("sex", "sexes");
_default.addIrregular("move", "moves");
_default.addIrregular("goose", "geese");
_default.addIrregular("wave", "waves");
_default.addIrregular("die", "dice");
_default.addIrregular("foot", "feet");
_default.addIrregular("tooth", "teeth");
_default.addIrregular("curriculum", "curricula");
_default.addIrregular("database", "databases");
_default.addIrregular("zombie", "zombies");
_default.addIrregular("personnel", "personnel");
//Fix #78a
_default.addIrregular("cache", "caches");
_default.addIrregular("person", "people");
_default.addIrregular("man", "men");
_default.addIrregular("human", "humans");
_default.addIrregular("child", "children");
_default.addIrregular("sex", "sexes");
_default.addIrregular("move", "moves");
_default.addIrregular("goose", "geese");
_default.addIrregular("wave", "waves");
_default.addIrregular("die", "dice");
_default.addIrregular("foot", "feet");
_default.addIrregular("tooth", "teeth");
_default.addIrregular("curriculum", "curricula");
_default.addIrregular("database", "databases");
_default.addIrregular("zombie", "zombies");
_default.addIrregular("personnel", "personnel");
// Fix #78a
_default.addIrregular("cache", "caches");
_default.addIrregular("is", "are", false);
_default.addIrregular("that", "those", false);
_default.addIrregular("this", "these", false);
_default.addIrregular("bus", "buses", false);
_default.addIrregular("staff", "staff", false);
_default.addIrregular("training", "training", false);
_default.addIrregular("is", "are", false);
_default.addIrregular("that", "those", false);
_default.addIrregular("this", "these", false);
_default.addIrregular("bus", "buses", false);
_default.addIrregular("staff", "staff", false);
_default.addIrregular("training", "training", false);
_default.addUncountable("equipment");
_default.addUncountable("information");
_default.addUncountable("corn");
_default.addUncountable("milk");
_default.addUncountable("rice");
_default.addUncountable("money");
_default.addUncountable("species");
_default.addUncountable("series");
_default.addUncountable("fish");
_default.addUncountable("sheep");
_default.addUncountable("deer");
_default.addUncountable("aircraft");
_default.addUncountable("oz");
_default.addUncountable("tsp");
_default.addUncountable("tbsp");
_default.addUncountable("ml");
_default.addUncountable("l");
_default.addUncountable("water");
_default.addUncountable("waters");
_default.addUncountable("semen");
_default.addUncountable("sperm");
_default.addUncountable("bison");
_default.addUncountable("grass");
_default.addUncountable("hair");
_default.addUncountable("mud");
_default.addUncountable("elk");
_default.addUncountable("luggage");
_default.addUncountable("moose");
_default.addUncountable("offspring");
_default.addUncountable("salmon");
_default.addUncountable("shrimp");
_default.addUncountable("someone");
_default.addUncountable("swine");
_default.addUncountable("trout");
_default.addUncountable("tuna");
_default.addUncountable("corps");
_default.addUncountable("scissors");
_default.addUncountable("means");
_default.addUncountable("mail");
_default.addUncountable("equipment");
_default.addUncountable("information");
_default.addUncountable("corn");
_default.addUncountable("milk");
_default.addUncountable("rice");
_default.addUncountable("money");
_default.addUncountable("species");
_default.addUncountable("series");
_default.addUncountable("fish");
_default.addUncountable("sheep");
_default.addUncountable("deer");
_default.addUncountable("aircraft");
_default.addUncountable("oz");
_default.addUncountable("tsp");
_default.addUncountable("tbsp");
_default.addUncountable("ml");
_default.addUncountable("l");
_default.addUncountable("water");
_default.addUncountable("waters");
_default.addUncountable("semen");
_default.addUncountable("sperm");
_default.addUncountable("bison");
_default.addUncountable("grass");
_default.addUncountable("hair");
_default.addUncountable("mud");
_default.addUncountable("elk");
_default.addUncountable("luggage");
_default.addUncountable("moose");
_default.addUncountable("offspring");
_default.addUncountable("salmon");
_default.addUncountable("shrimp");
_default.addUncountable("someone");
_default.addUncountable("swine");
_default.addUncountable("trout");
_default.addUncountable("tuna");
_default.addUncountable("corps");
_default.addUncountable("scissors");
_default.addUncountable("means");
_default.addUncountable("mail");
return _default;
}
}
return _default;
}
}

@@ -17,3 +17,4 @@ /// <summary>

/// <param name="plural">The plural form of the irregular word, e.g. "people".</param>
/// <param name="matchEnding">True to match these words on their own as well as at the end of longer words. False, otherwise.</param>
/// <param name="matchEnding">True to match these words on their own as well
/// as at the end of longer words. False, otherwise.</param>
public addIrregular(singular: string, plural: string, matchEnding: boolean = true): void {

@@ -23,4 +24,3 @@ if (matchEnding) {

this.addSingular("(" + plural[0] + ")" + plural.substring(1) + "$", "$1" + singular.substring(1));
}
else {
} else {
this.addPlural(`^${singular}$`, plural);

@@ -61,6 +61,7 @@ this.addSingular(`^${plural}$`, singular);

/// <param name="word">Word to be pluralized</param>
/// <param name="inputIsKnownToBeSingular">Normally you call Pluralize on singular words; but if you're unsure call it with false</param>
/// <param name="inputIsKnownToBeSingular">Normally you call Pluralize on singular words;
/// but if you're unsure call it with false</param>
/// <returns></returns>
public pluralize(word: string, inputIsKnownToBeSingular: boolean = true): string {
var result = this.applyRules(this._plurals, word, false);
const result = this.applyRules(this._plurals, word, false);

@@ -71,5 +72,5 @@ if (inputIsKnownToBeSingular) {

var asSingular = this.applyRules(this._singulars, word, false);
var asSingularAsPlural = this.applyRules(this._plurals, asSingular, false);
if (asSingular != null && asSingular != word && asSingular + "s" != word && asSingularAsPlural == word && result != word) {
const asSingular = this.applyRules(this._singulars, word, false);
const asSingularAsPlural = this.applyRules(this._plurals, asSingular, false);
if (asSingular !== "" && asSingular !== word && asSingular + "s" !== word && asSingularAsPlural === word && result !== word) {
return word;

@@ -85,8 +86,9 @@ }

/// <param name="word">Word to be singularized</param>
/// <param name="inputIsKnownToBePlural">Normally you call Singularize on plural words; but if you're unsure call it with false</param>
/// <param name="inputIsKnownToBePlural">Normally you call Singularize on plural words; but if you're unsure
/// call it with false</param>
/// <param name="skipSimpleWords">Skip singularizing single words that have an 's' on the end</param>
/// <returns></returns>
public singularize(word: string, inputIsKnownToBePlural: boolean = true, skipSimpleWords: boolean = false): string {
var result = this.applyRules(this._singulars, word, skipSimpleWords);
const result = this.applyRules(this._singulars, word, skipSimpleWords);
if (inputIsKnownToBePlural) {

@@ -97,9 +99,9 @@ return result ?? word;

// the Plurality is unknown so we should check all possibilities
var asPlural = this.applyRules(this._plurals, word, false);
var asPluralAsSingular = this.applyRules(this._singulars, asPlural, false);
if (asPlural != word && word + "s" != asPlural && asPluralAsSingular == word && result != word) {
const asPlural = this.applyRules(this._plurals, word, false);
const asPluralAsSingular = this.applyRules(this._singulars, asPlural, false);
if (asPlural !== word && word + "s" !== asPlural && asPluralAsSingular === word && result !== word) {
return word;
}
return result ?? word;
return result === "" ? word : result;
}

@@ -109,2 +111,3 @@

if (word == null) {
// @ts-ignore
return null;

@@ -117,6 +120,6 @@ }

var result = word;
var end = skipFirstRule ? 1 : 0;
for (var i = rules.length - 1; i >= end; i--) {
if ((result = rules[i].apply(word)) != null) {
let result = word;
const end = skipFirstRule ? 1 : 0;
for (let i = rules.length - 1; i >= end; i--) {
if ((result = rules[i].apply(word)) !== "") {
break;

@@ -138,3 +141,3 @@ }

public constructor(pattern: string, replacement: string) {
this._regex = new RegExp(pattern, 'i');
this._regex = new RegExp(pattern, "i");
this._replacement = replacement;

@@ -145,3 +148,3 @@ }

if (!this._regex.test(word)) {
return null;
return "";
}

@@ -148,0 +151,0 @@ return word.replace(this._regex, this._replacement)

@@ -1,3 +0,2 @@

export class EnglishNumberToWordsConverter
{
export class EnglishNumberToWordsConverter {
private static readonly UnitsMap = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" ];

@@ -18,24 +17,19 @@ private static readonly TensMap = [ "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" ];

static convertToOrdinal(number: number): string
{
static convertToOrdinal(number: number): string {
return EnglishNumberToWordsConverter.convert(number, true);
}
static convert(number: number, isOrdinal: boolean = false): string
{
static convert(number: number, isOrdinal: boolean = false): string {
number = Math.floor(number)
if (number == 0)
{
if (number === 0) {
return EnglishNumberToWordsConverter.getUnitValue(0, isOrdinal);
}
if (number < 0)
{
if (number < 0) {
return `minus ${EnglishNumberToWordsConverter.convert(-number)}`
}
var parts = new Array<string>();
const parts = new Array<string>();
if (Math.floor(number / 1000000000000000000) > 0)
{
if (Math.floor(number / 1000000000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000000000)} quintillion`)

@@ -45,4 +39,3 @@ number %= 1000000000000000000;

if (Math.floor(number / 1000000000000000) > 0)
{
if (Math.floor(number / 1000000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000000)} quadrillion`);

@@ -52,4 +45,3 @@ number %= 1000000000000000;

if (Math.floor(number / 1000000000000) > 0)
{
if (Math.floor(number / 1000000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000000)} trillion`)

@@ -59,4 +51,3 @@ number %= 1000000000000;

if (Math.floor(number / 1000000000) > 0)
{
if (Math.floor(number / 1000000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000000)} billion`);

@@ -66,4 +57,3 @@ number %= 1000000000;

if (Math.floor(number / 1000000) > 0)
{
if (Math.floor(number / 1000000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000000)} million`);

@@ -73,4 +63,3 @@ number %= 1000000;

if (Math.floor(number / 1000) > 0)
{
if (Math.floor(number / 1000) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 1000)} thousand`);

@@ -80,4 +69,3 @@ number %= 1000;

if (Math.floor(number / 100) > 0)
{
if (Math.floor(number / 100) > 0) {
parts.push(`${EnglishNumberToWordsConverter.convert(number / 100)} hundred`);

@@ -87,23 +75,15 @@ number %= 100;

if (Math.floor(number) > 0)
{
if (parts.length != 0)
{
if (Math.floor(number) > 0) {
if (parts.length !== 0) {
parts.push("and");
}
if (number < 20)
{
if (number < 20) {
parts.push(EnglishNumberToWordsConverter.getUnitValue(number, isOrdinal));
}
else
{
var lastPart = EnglishNumberToWordsConverter.TensMap[Math.floor(number / 10)];
if ((number % 10) > 0)
{
} else {
let lastPart = EnglishNumberToWordsConverter.TensMap[Math.floor(number / 10)];
if ((number % 10) > 0) {
lastPart += `-${EnglishNumberToWordsConverter.getUnitValue(number % 10, isOrdinal)}`;
}
else if (isOrdinal)
{
let trimmed = lastPart.replace(/\y+$/g, ''); //lastPart.trimEnd('y')
} else if (isOrdinal) {
const trimmed = lastPart.replace(/\y+$/g, ""); // lastPart.trimEnd('y')
lastPart = trimmed + "ieth";

@@ -114,12 +94,9 @@ }

}
}
else if (isOrdinal)
{
} else if (isOrdinal) {
parts[parts.length - 1] += "th";
}
var toWords = parts.join(" ");
let toWords = parts.join(" ");
if (isOrdinal)
{
if (isOrdinal) {
toWords = EnglishNumberToWordsConverter.removeOnePrefix(toWords);

@@ -131,18 +108,11 @@ }

private static getUnitValue(number: number, isOrdinal: boolean): string
{
if (isOrdinal)
{
let exceptionString = EnglishNumberToWordsConverter.exceptionNumbersToWords(number)
if (exceptionString != "NOTFOUND")
{
private static getUnitValue(number: number, isOrdinal: boolean): string {
if (isOrdinal) {
const exceptionString = EnglishNumberToWordsConverter.exceptionNumbersToWords(number)
if (exceptionString !== "NOTFOUND") {
return exceptionString;
}
else
{
} else {
return EnglishNumberToWordsConverter.UnitsMap[number] + "th";
}
}
else
{
} else {
return EnglishNumberToWordsConverter.UnitsMap[number];

@@ -152,8 +122,6 @@ }

private static removeOnePrefix(toWords: string): string
{
private static removeOnePrefix(toWords: string): string {
// one hundred => hundredth
if (toWords.indexOf("one") == 0)
{
toWords = toWords.substring(4); //toWords.remove(0, 4);
if (toWords.indexOf("one") === 0) {
toWords = toWords.substring(4); // toWords.remove(0, 4);
}

@@ -164,6 +132,6 @@

private static exceptionNumbersToWords(number: number): string
{
private static exceptionNumbersToWords(number: number): string {
let rtnVal = "NOTFOUND";
EnglishNumberToWordsConverter.OrdinalExceptions.forEach(element => {
// tslint:disable-next-line
if (element[0] == number) {

@@ -175,2 +143,2 @@ rtnVal = element[1].toString()

}
}
}
let assert = require('assert');
require('../dist/numberToWords')
require('../dist/byteSize')
require('../dist')
describe('NumberToWords', function() {
describe('.toWords()', function() {
it('Trying (number).toWord', function() {
describe('ByteSize', function() {
const fileSize = (10).kilobytes()
describe('.bits()', function() {
it('Trying (number).bits()', function() {
assert.equal(fileSize.bits, 81920);
});
});
describe('.bytes()', function() {
it('Trying (number).bytes()', function() {
assert.equal(fileSize.bytes, 10240);
});
});
describe('.kilobytes()', function() {
it('Trying (number).kilobytes()', function() {
assert.equal(fileSize.kilobytes, 10);
});
});
describe('.megabytes()', function() {
it('Trying (number).megabytes()', function() {
assert.equal(fileSize.megabytes, 0.009765625);
});
});
describe('.gigabytes()', function() {
it('Trying (number).gigabytes()', function() {
assert.equal(fileSize.gigabytes, 0.0000095367431640625);
});
});
describe('.terabytes()', function() {
it('Trying (number).terabytes()', function() {
assert.equal(fileSize.terabytes, 9.313225746154785e-9);
});
});
});
describe('vocabularies', function() {
describe('.pluralize()', function() {
it('Trying (string).pluralize()', function() {
assert.equal("Man".pluralize(), "Men");
assert.equal("string".pluralize(), "strings");
});
});
});
describe('Ordinalize', function() {
describe('.ordinalize()', function() {
it('Trying (string).ordinalize()', function() {
assert.equal((1).ordinalize(), "1st");
assert.equal((5).ordinalize(), "5th");
});
});
});
describe('ToQuantity', function() {
describe('.toQuantity()', function() {
it('Trying (string).toQuantity()', function() {
assert.equal("case".toQuantity(0), "0 cases");
assert.equal("case".toQuantity(1), "1 case");
assert.equal("case".toQuantity(5), "5 cases");
assert.equal("man".toQuantity(2), "2 men");
assert.equal("case".toQuantity(5, 2), "five cases");
});
});
});
describe('Number to words', function() {
describe('.numberToWords()', function() {
it('Trying (string).numberToWords()', function() {
assert.equal((1).toWords(), "one");
assert.equal((10).toWords(), "ten");
assert.equal((11).toWords(), "eleven");
assert.equal((122).toWords(), "one hundred and twenty-two");
assert.equal((3501).toWords(), "three thousand five hundred and one");
});

@@ -14,8 +81,11 @@ });

describe('ByteSize', function() {
describe('.megabytes()', function() {
it('Trying (number).megabytes()', function() {
assert.equal((10).megabytes().toString(), "10 MB");
describe('Number to ordinal words', function() {
describe('.numberToWords()', function() {
it('Trying (string).numberToWords()', function() {
assert.equal((1).toOrdinalWords(), "first");
assert.equal((10).toOrdinalWords(), "tenth");
assert.equal((11).toOrdinalWords(), "eleventh");
assert.equal((121).toOrdinalWords(), "hundred and twenty-first");
});
});
});
});

@@ -8,3 +8,3 @@

interface String {
toQuantity(quantity: number, showQuantityAs: ShowQuantityAs): string
toQuantity(quantity: number, showQuantityAs?: ShowQuantityAs): string
}

@@ -38,11 +38,11 @@ }

String.prototype.toQuantity = function (quantity: number, showQuantityAs: ShowQuantityAs = ShowQuantityAs.Numeric): string {
let transformedInput = quantity == 1
? Vocabularies.Default().singularize(this, false)
: Vocabularies.Default().pluralize(this, false)
const transformedInput = quantity === 1
? Vocabularies.Default().singularize(this as string, false)
: Vocabularies.Default().pluralize(this as string, false)
if (showQuantityAs == ShowQuantityAs.None) {
if (showQuantityAs === ShowQuantityAs.None) {
return transformedInput;
}
if (showQuantityAs == ShowQuantityAs.Numeric) {
if (showQuantityAs === ShowQuantityAs.Numeric) {
return `${quantity} ${transformedInput}`

@@ -49,0 +49,0 @@ }

@@ -13,9 +13,9 @@

String.prototype.pluralize = function (): string {
return Vocabularies.Default().pluralize(this)
return Vocabularies.Default().pluralize(this as string)
}
String.prototype.singularize = function (): string {
return Vocabularies.Default().singularize(this)
return Vocabularies.Default().singularize(this as string)
}
//# sourceMappingURL=readme_examples.js.map
{"version":3,"file":"readme_examples.js","sourceRoot":"","sources":["../readme_examples.ts"],"names":[],"mappings":""}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RomanNumeralExtensions = void 0;
/// <summary>
/// Contains extension methods for changing a number to Roman representation (ToRoman) and from Roman representation back to the number (FromRoman)
/// </summary>
let RomanNumeralExtensions = /** @class */ (() => {
class RomanNumeralExtensions {
/// <summary>
/// Converts Roman numbers into integer
/// </summary>
/// <param name="input">Roman number</param>
/// <returns>Human-readable number</returns>
static fromRoman(input) {
if (input == null) {
throw new Error("input can't be null");
}
input = input.trim().toUpperCase();
let length = input.length;
if ((length == 0) || RomanNumeralExtensions.isInvalidRomanNumeral(input)) {
throw new Error("Empty or invalid Roman numeral string.");
}
let total = 0;
let i = length;
while (i > 0) {
let digit = RomanNumeralExtensions.romanToDigit(input[--i].toString());
if (i > 0) {
let previousDigit = RomanNumeralExtensions.romanToDigit(input[i - 1].toString());
if (previousDigit < digit) {
digit -= previousDigit;
i--;
}
}
total += digit;
}
return total;
}
static romanToDigit(char) {
let rtnVal = 0;
RomanNumeralExtensions.RomanNumerals.forEach(pair => {
if (pair.key == char) {
rtnVal = pair.value;
}
});
return rtnVal;
}
/// <summary>
/// Converts the input to Roman number
/// </summary>
/// <param name="input">Integer input</param>
/// <returns>Roman number</returns>
/// <exception cref="ArgumentOutOfRangeException">Thrown when the input is smaller than 1 or larger than 3999</exception>
static toRoman(input) {
const minValue = 1;
const maxValue = 3999;
if ((input < minValue) || (input > maxValue)) {
throw new Error("ArgumentOutOfRangeException");
}
let sb = "";
RomanNumeralExtensions.RomanNumerals.forEach(pair => {
while (Math.floor(input / pair.value) > 0) {
sb += pair.key;
input -= pair.value;
}
});
return sb;
}
static isInvalidRomanNumeral(input) {
return !RomanNumeralExtensions.ValidRomanNumeral.test(input);
}
}
RomanNumeralExtensions.RomanNumerals = [
{ key: "M", value: 1000 },
{ key: "CM", value: 900 },
{ key: "D", value: 500 },
{ key: "CD", value: 400 },
{ key: "C", value: 100 },
{ key: "XC", value: 90 },
{ key: "L", value: 50 },
{ key: "XL", value: 40 },
{ key: "X", value: 10 },
{ key: "IX", value: 9 },
{ key: "V", value: 5 },
{ key: "IV", value: 4 },
{ key: "I", value: 1 }
];
RomanNumeralExtensions.ValidRomanNumeral = /^(?:(?=[MDCLXVI])((M{0,3})((C[DM])|(D?C{0,3}))?((X[LC])|(L?XX{0,2})|L)?((I[VX])|(V?(II{0,2}))|V)?))$/i;
return RomanNumeralExtensions;
})();
exports.RomanNumeralExtensions = RomanNumeralExtensions;
//# sourceMappingURL=romanNumeral.js.map
{"version":3,"file":"romanNumeral.js","sourceRoot":"","sources":["../romanNumeral.ts"],"names":[],"mappings":"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"}
/// <summary>
/// Contains extension methods for changing a number to Roman representation (ToRoman) and from Roman representation back to the number (FromRoman)
/// </summary>
export abstract class RomanNumeralExtensions
{
private static readonly RomanNumerals =
[
{ key: "M", value: 1000 },
{ key: "CM", value: 900 },
{ key: "D", value: 500 },
{ key: "CD", value: 400 },
{ key: "C", value: 100 },
{ key: "XC", value: 90 },
{ key: "L", value: 50 },
{ key: "XL", value: 40 },
{ key: "X", value: 10 },
{ key: "IX", value: 9 },
{ key: "V", value: 5 },
{ key: "IV", value: 4 },
{ key: "I", value: 1 }
];
private static readonly ValidRomanNumeral = /^(?:(?=[MDCLXVI])((M{0,3})((C[DM])|(D?C{0,3}))?((X[LC])|(L?XX{0,2})|L)?((I[VX])|(V?(II{0,2}))|V)?))$/i
/// <summary>
/// Converts Roman numbers into integer
/// </summary>
/// <param name="input">Roman number</param>
/// <returns>Human-readable number</returns>
public static fromRoman(input: string): number
{
if (input == null)
{
throw new Error("input can't be null");
}
input = input.trim().toUpperCase()
let length = input.length;
if ((length == 0) || RomanNumeralExtensions.isInvalidRomanNumeral(input))
{
throw new Error("Empty or invalid Roman numeral string.");
}
let total = 0;
let i = length;
while (i > 0)
{
let digit = RomanNumeralExtensions.romanToDigit(input[--i].toString());
if (i > 0)
{
let previousDigit = RomanNumeralExtensions.romanToDigit(input[i - 1].toString());
if (previousDigit < digit)
{
digit -= previousDigit;
i--;
}
}
total += digit;
}
return total;
}
private static romanToDigit(char: string): number
{
let rtnVal = 0;
RomanNumeralExtensions.RomanNumerals.forEach(pair => {
if (pair.key == char) {
rtnVal = pair.value;
}
});
return rtnVal;
}
/// <summary>
/// Converts the input to Roman number
/// </summary>
/// <param name="input">Integer input</param>
/// <returns>Roman number</returns>
/// <exception cref="ArgumentOutOfRangeException">Thrown when the input is smaller than 1 or larger than 3999</exception>
public static toRoman(input: number): string
{
const minValue = 1;
const maxValue = 3999;
if ((input < minValue) || (input > maxValue))
{
throw new Error("ArgumentOutOfRangeException");
}
let sb = "";
RomanNumeralExtensions.RomanNumerals.forEach(pair => {
while (Math.floor(input / pair.value) > 0)
{
sb += pair.key;
input -= pair.value;
}
})
return sb
}
private static isInvalidRomanNumeral(input: string): boolean
{
return !RomanNumeralExtensions.ValidRomanNumeral.test(input);
}
}