Skip to content

Commit cbfd4bc

Browse files
feat(kit): new maskitoStringifyNumber helper (#1987)
1 parent 5a66c7c commit cbfd4bc

File tree

7 files changed

+444
-14
lines changed

7 files changed

+444
-14
lines changed

projects/kit/src/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ export {
66
} from './lib/masks/date';
77
export {maskitoDateRangeOptionsGenerator} from './lib/masks/date-range';
88
export {maskitoDateTimeOptionsGenerator} from './lib/masks/date-time';
9-
export {maskitoNumberOptionsGenerator, maskitoParseNumber} from './lib/masks/number';
9+
export {
10+
maskitoNumberOptionsGenerator,
11+
type MaskitoNumberParams,
12+
maskitoParseNumber,
13+
maskitoStringifyNumber,
14+
} from './lib/masks/number';
1015
export {
1116
maskitoParseTime,
1217
maskitoStringifyTime,
+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export {maskitoNumberOptionsGenerator} from './number-mask';
2-
export {maskitoParseNumber} from './utils';
2+
export type {MaskitoNumberParams} from './number-params';
3+
export {maskitoParseNumber, maskitoStringifyNumber} from './utils';

projects/kit/src/lib/masks/number/number-mask.ts

+2-12
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
maskitoPostfixPostprocessorGenerator,
1616
maskitoPrefixPostprocessorGenerator,
1717
} from '../../processors';
18+
import type {MaskitoNumberParams} from './number-params';
1819
import {
1920
createLeadingZeroesValidationPlugin,
2021
createMinMaxPlugin,
@@ -46,18 +47,7 @@ export function maskitoNumberOptionsGenerator({
4647
prefix: unsafePrefix = '',
4748
postfix = '',
4849
minusSign = CHAR_MINUS,
49-
}: {
50-
min?: number;
51-
max?: number;
52-
precision?: number;
53-
decimalSeparator?: string;
54-
decimalPseudoSeparators?: string[]; // TODO v4: => readonly string[]
55-
decimalZeroPadding?: boolean;
56-
thousandSeparator?: string;
57-
prefix?: string;
58-
postfix?: string;
59-
minusSign?: string;
60-
} = {}): Required<MaskitoOptions> {
50+
}: MaskitoNumberParams = {}): Required<MaskitoOptions> {
6151
const pseudoMinuses = [
6252
CHAR_HYPHEN,
6353
CHAR_EN_DASH,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export interface MaskitoNumberParams {
2+
min?: number;
3+
max?: number;
4+
precision?: number;
5+
decimalSeparator?: string;
6+
decimalPseudoSeparators?: string[]; // TODO v4: => readonly string[]
7+
decimalZeroPadding?: boolean;
8+
thousandSeparator?: string;
9+
prefix?: string;
10+
postfix?: string;
11+
minusSign?: string;
12+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './generate-mask-expression';
22
export * from './parse-number';
3+
export * from './stringify-number';
34
export * from './stringify-number-without-exp';
45
export * from './to-number-parts';
56
export * from './validate-decimal-pseudo-separators';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import {maskitoTransform} from '@maskito/core';
2+
3+
import {clamp} from '../../../utils';
4+
import {maskitoNumberOptionsGenerator} from '../number-mask';
5+
import type {MaskitoNumberParams} from '../number-params';
6+
7+
export function maskitoStringifyNumber(
8+
number: number,
9+
params: MaskitoNumberParams,
10+
): string {
11+
if (Number.isNaN(number) || number === null) {
12+
return '';
13+
}
14+
15+
const {
16+
min = Number.MIN_SAFE_INTEGER,
17+
max = Number.MAX_SAFE_INTEGER,
18+
decimalSeparator = '.',
19+
} = params;
20+
21+
const value = clamp(number, min, max).toString().replace('.', decimalSeparator);
22+
23+
return maskitoTransform(value, maskitoNumberOptionsGenerator(params));
24+
}

0 commit comments

Comments
 (0)