@bodar/totallylazy
Advanced tools
Comparing version 0.445.288 to 0.446.289
@@ -345,2 +345,3 @@ "use strict"; | ||
"symbols": [ | ||
"LE", | ||
"£" | ||
@@ -347,0 +348,0 @@ ] |
@@ -20,2 +20,8 @@ import { Money } from "./money"; | ||
export declare function findDecimalSeparator(isoCurrency: string, amount: string): AllowedDecimalSeparators; | ||
export interface ImplicitMoneyParserOptions { | ||
currency: string; | ||
locale?: string; | ||
strategy?: MatchStrategy<string>; | ||
} | ||
export declare function implicitMoneyParser({ currency, locale, strategy }: ImplicitMoneyParserOptions): Parser<Money>; | ||
//# sourceMappingURL=flexible-parsing.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.findDecimalSeparator = exports.flexibleMoneyParser = exports.FlexibleMoneyParser = exports.flexibleParse = void 0; | ||
exports.implicitMoneyParser = exports.findDecimalSeparator = exports.flexibleMoneyParser = exports.FlexibleMoneyParser = exports.flexibleParse = void 0; | ||
const tslib_1 = require("tslib"); | ||
@@ -13,2 +13,3 @@ const money_1 = require("./money"); | ||
const lazy_1 = require("../lazy"); | ||
const functions_1 = require("../functions"); | ||
function flexibleParse(value, locale = 'en', options) { | ||
@@ -66,10 +67,2 @@ return new FlexibleMoneyParser(locale, options).parse(value); | ||
exports.flexibleMoneyParser = flexibleMoneyParser; | ||
function isDecimalSeparator(value) { | ||
return value === '.' || value === ',' || value === '٫'; | ||
} | ||
function decimalSeparator(value) { | ||
if (isDecimalSeparator(value)) | ||
return value; | ||
throw new Error(`Invalid decimal separator${value}`); | ||
} | ||
function flip(value) { | ||
@@ -91,3 +84,3 @@ return value === "." ? "," : "."; | ||
} | ||
return decimalSeparator(lastSeparator); | ||
return parsing_1.decimalSeparator(lastSeparator); | ||
} | ||
@@ -97,5 +90,22 @@ const uniqueSeparators = arrays_1.unique(separators); | ||
return flip(lastSeparator); | ||
return decimalSeparator(lastSeparator); | ||
return parsing_1.decimalSeparator(lastSeparator); | ||
} | ||
exports.findDecimalSeparator = findDecimalSeparator; | ||
class ImplicitMoneyParser { | ||
constructor(currency, locale, parser = new parsing_1.NumberParser(amount => functions_1.get(() => findDecimalSeparator(currency, amount), parsing_1.inferDecimalSeparator(locale)), locale)) { | ||
this.currency = currency; | ||
this.parser = parser; | ||
} | ||
parse(value) { | ||
const amount = this.parser.parse(value); | ||
return { currency: this.currency, amount }; | ||
} | ||
parseAll(value) { | ||
return this.parser.parseAll(value).map(amount => ({ amount, currency: this.currency })); | ||
} | ||
} | ||
function implicitMoneyParser({ currency, locale = 'en', strategy = parsing_1.infer(locale) }) { | ||
return new ImplicitMoneyParser(money_1.CurrencySymbols.get(locale).parse(currency, strategy), locale); | ||
} | ||
exports.implicitMoneyParser = implicitMoneyParser; | ||
//# sourceMappingURL=flexible-parsing.js.map |
{ | ||
"name": "@bodar/totallylazy", | ||
"version": "0.445.288", | ||
"version": "0.446.289", | ||
"description": "Totallylazy", | ||
@@ -5,0 +5,0 @@ "repository": "git@github.com:bodar/totallylazy.js.git", |
@@ -103,2 +103,4 @@ import { NamedMatch, NamedRegExp } from "./characters"; | ||
export declare type AllowedDecimalSeparators = '.' | ',' | '٫'; | ||
export declare function isDecimalSeparator(value: any): value is AllowedDecimalSeparators; | ||
export declare function decimalSeparator(value: any): AllowedDecimalSeparators; | ||
export declare class NumberParser implements Parser<number> { | ||
@@ -109,3 +111,3 @@ private decimalSeparator; | ||
readonly globalNumberPattern: NamedRegExp; | ||
constructor(decimalSeparator: AllowedDecimalSeparators, locale: string); | ||
constructor(decimalSeparator: (amount: string) => AllowedDecimalSeparators, locale: string); | ||
parse(value: string): number; | ||
@@ -117,4 +119,8 @@ parseAll(value: string): number[]; | ||
} | ||
export declare function numberParser(decimalSeparator: AllowedDecimalSeparators, locale?: string): NumberParser; | ||
export declare type Locale = string; | ||
export declare function numberParser(): Parser<number>; | ||
export declare function numberParser(decimalSeparatorOrLocale: AllowedDecimalSeparators | Locale): Parser<number>; | ||
export declare function numberParser(decimalSeparator: AllowedDecimalSeparators, locale: Locale): Parser<number>; | ||
export declare function inferDecimalSeparator(locale: string): AllowedDecimalSeparators; | ||
export declare function numberOf(value: string): number; | ||
//# sourceMappingURL=parsing.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.numberOf = exports.numberParser = exports.NumberParser = exports.separatorsOf = exports.mapIgnoreError = exports.numberPattern = exports.Spaces = exports.digits = exports.numberFormatter = exports.Numerals = exports.atBoundaryOnly = exports.cleanValue = exports.extraDelimiters = exports.boundaryDelimiters = exports.CachingParser = exports.all = exports.AllParser = exports.parsers = exports.or = exports.OrParser = exports.infer = exports.prefer = exports.uniqueMatch = exports.DatumLookup = exports.IdentityParser = exports.mappingParser = exports.MappingParser = exports.preProcess = exports.PreProcessor = exports.namedRegexParser = exports.NamedRegexParser = void 0; | ||
exports.numberOf = exports.inferDecimalSeparator = exports.numberParser = exports.NumberParser = exports.decimalSeparator = exports.isDecimalSeparator = exports.separatorsOf = exports.mapIgnoreError = exports.numberPattern = exports.Spaces = exports.digits = exports.numberFormatter = exports.Numerals = exports.atBoundaryOnly = exports.cleanValue = exports.extraDelimiters = exports.boundaryDelimiters = exports.CachingParser = exports.all = exports.AllParser = exports.parsers = exports.or = exports.OrParser = exports.infer = exports.prefer = exports.uniqueMatch = exports.DatumLookup = exports.IdentityParser = exports.mappingParser = exports.MappingParser = exports.preProcess = exports.PreProcessor = exports.namedRegexParser = exports.NamedRegexParser = void 0; | ||
const tslib_1 = require("tslib"); | ||
@@ -287,2 +287,12 @@ const characters_1 = require("./characters"); | ||
exports.separatorsOf = separatorsOf; | ||
function isDecimalSeparator(value) { | ||
return value && typeof value === "string" && value === '.' || value === ',' || value === '٫'; | ||
} | ||
exports.isDecimalSeparator = isDecimalSeparator; | ||
function decimalSeparator(value) { | ||
if (isDecimalSeparator(value)) | ||
return value; | ||
throw new Error(`Invalid decimal separator${value}`); | ||
} | ||
exports.decimalSeparator = decimalSeparator; | ||
class NumberParser { | ||
@@ -303,18 +313,18 @@ constructor(decimalSeparator, locale) { | ||
} | ||
parseSingle(value) { | ||
parseSingle(value, decimalSeparator = this.decimalSeparator(value)) { | ||
const separators = separatorsOf(value); | ||
if (separators.length === 0) | ||
return this.numberOf(value); | ||
return this.numberOf(value, decimalSeparator); | ||
const lastSeparator = separators[separators.length - 1]; | ||
const groupSeparators = lastSeparator === this.decimalSeparator ? separators.slice(0, separators.length - 1) : separators; | ||
if (groupSeparators.indexOf(this.decimalSeparator) !== -1) | ||
const groupSeparators = lastSeparator === decimalSeparator ? separators.slice(0, separators.length - 1) : separators; | ||
if (groupSeparators.indexOf(decimalSeparator) !== -1) | ||
throw new Error(`Unable to parse '${value}'`); | ||
if (arrays_1.unique(groupSeparators).length > 1) | ||
throw new Error(`Unable to parse '${value}'`); | ||
return this.numberOf(value); | ||
return this.numberOf(value, decimalSeparator); | ||
} | ||
convert(value) { | ||
convert(value, decimalSeparator) { | ||
const numerals = Numerals.get(this.locale); | ||
return characters_1.characters(value).map(c => { | ||
if (c === this.decimalSeparator) | ||
if (c === decimalSeparator) | ||
return '.'; | ||
@@ -329,4 +339,4 @@ if (c === '-') | ||
} | ||
numberOf(value) { | ||
const text = this.convert(value); | ||
numberOf(value, decimalSeparator) { | ||
const text = this.convert(value, decimalSeparator); | ||
const result = numberOf(text); | ||
@@ -340,6 +350,14 @@ if (isNaN(result)) { | ||
exports.NumberParser = NumberParser; | ||
function numberParser(decimalSeparator, locale = 'en') { | ||
return new NumberParser(decimalSeparator, locale); | ||
function numberParser(decimalSeparatorOrLocale, locale = 'en') { | ||
if (!decimalSeparatorOrLocale) | ||
return numberParser(locale); | ||
if (isDecimalSeparator(decimalSeparatorOrLocale)) | ||
return new NumberParser(ignore => decimalSeparatorOrLocale, locale); | ||
return numberParser(inferDecimalSeparator(decimalSeparatorOrLocale), decimalSeparatorOrLocale); | ||
} | ||
exports.numberParser = numberParser; | ||
function inferDecimalSeparator(locale) { | ||
return functions_1.get(() => decimalSeparator(new Intl.NumberFormat(locale).formatToParts(.1).find(e => e.type === 'decimal').value), '.'); | ||
} | ||
exports.inferDecimalSeparator = inferDecimalSeparator; | ||
function numberOf(value) { | ||
@@ -346,0 +364,0 @@ if (!value || value.trim().length === 0) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
445534
6504