@arkyn/shared 1.4.52 → 2.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -2
- package/src/formats/__test__/formatDate.spec.ts +88 -0
- package/src/formats/__test__/formatJsonObject.spec.ts +87 -0
- package/src/formats/__test__/formatJsonString.spec.ts +83 -0
- package/src/formats/__test__/formatToCep.spec.ts +37 -0
- package/src/formats/__test__/formatToCnpj.spec.ts +35 -0
- package/src/formats/__test__/formatToCpfCnpj.spec.ts +43 -0
- package/src/formats/__test__/formatToCurrency.spec.ts +50 -0
- package/src/formats/__test__/formatToEllipsis.spec.ts +44 -0
- package/src/formats/__test__/formatToHiddenDigits.spec.ts +58 -0
- package/src/formats/__test__/formatToPhone.spec.ts +58 -0
- package/src/formats/formatDate.ts +97 -0
- package/src/formats/formatJsonObject.ts +68 -26
- package/src/formats/formatJsonString.ts +40 -4
- package/src/formats/formatToCep.ts +35 -7
- package/src/formats/formatToCnpj.ts +39 -0
- package/src/formats/formatToCpf.ts +39 -0
- package/src/formats/formatToCpfCnpj.ts +31 -7
- package/src/formats/formatToCurrency.ts +53 -0
- package/src/formats/formatToEllipsis.ts +23 -3
- package/src/formats/formatToHiddenDigits.ts +75 -7
- package/src/formats/formatToPhone.ts +156 -6
- package/src/generators/__test__/generateColorByString.spec.ts +37 -0
- package/src/generators/__test__/generateId.spec.ts +44 -0
- package/src/generators/__test__/generateSlug.spec.ts +47 -0
- package/src/generators/generateColorByString.ts +18 -4
- package/src/generators/generateId.ts +36 -5
- package/src/generators/generateSlug.ts +17 -2
- package/src/index.ts +7 -15
- package/src/services/__test__/calculateCardInstallment.spec.ts +87 -0
- package/src/services/__test__/maskSensitiveData.spec.ts +102 -0
- package/src/services/__test__/removeCurrencySymbols.spec.ts +41 -0
- package/src/services/__test__/removeNonNumeric.spec.ts +33 -0
- package/src/services/__test__/truncateLargeFields.spec.ts +90 -0
- package/src/services/calculateCardInstallment.ts +57 -12
- package/src/services/maskSensitiveData.ts +29 -4
- package/src/services/removeCurrencySymbols.ts +25 -0
- package/src/services/removeNonNumeric.ts +18 -0
- package/src/services/truncateLargeFields.ts +40 -6
- package/src/validations/__test__/validateCpf.spec.ts +38 -0
- package/src/validations/__test__/validateDate.spec.ts +81 -0
- package/src/validations/__test__/validatePhone.spec.ts +39 -0
- package/src/validations/validateCpf.ts +64 -0
- package/src/validations/validateDate.ts +33 -11
- package/src/validations/validatePhone.ts +29 -2
- package/vitest.config.ts +5 -0
- package/dist/formats/formatBrazilianDateHour.d.ts +0 -3
- package/dist/formats/formatBrazilianDateHour.d.ts.map +0 -1
- package/dist/formats/formatBrazilianDateHour.js +0 -12
- package/dist/formats/formatBrazilianDateToDate.d.ts +0 -3
- package/dist/formats/formatBrazilianDateToDate.d.ts.map +0 -1
- package/dist/formats/formatBrazilianDateToDate.js +0 -9
- package/dist/formats/formatDateHour.d.ts +0 -3
- package/dist/formats/formatDateHour.d.ts.map +0 -1
- package/dist/formats/formatDateHour.js +0 -11
- package/dist/formats/formatJsonObject.d.ts +0 -3
- package/dist/formats/formatJsonObject.d.ts.map +0 -1
- package/dist/formats/formatJsonObject.js +0 -49
- package/dist/formats/formatJsonString.d.ts +0 -3
- package/dist/formats/formatJsonString.d.ts.map +0 -1
- package/dist/formats/formatJsonString.js +0 -12
- package/dist/formats/formatToBRL.d.ts +0 -3
- package/dist/formats/formatToBRL.d.ts.map +0 -1
- package/dist/formats/formatToBRL.js +0 -8
- package/dist/formats/formatToCNPJ.d.ts +0 -3
- package/dist/formats/formatToCNPJ.d.ts.map +0 -1
- package/dist/formats/formatToCNPJ.js +0 -9
- package/dist/formats/formatToCPF.d.ts +0 -3
- package/dist/formats/formatToCPF.d.ts.map +0 -1
- package/dist/formats/formatToCPF.js +0 -9
- package/dist/formats/formatToCep.d.ts +0 -3
- package/dist/formats/formatToCep.d.ts.map +0 -1
- package/dist/formats/formatToCep.js +0 -9
- package/dist/formats/formatToCpfCnpj.d.ts +0 -3
- package/dist/formats/formatToCpfCnpj.d.ts.map +0 -1
- package/dist/formats/formatToCpfCnpj.js +0 -13
- package/dist/formats/formatToEllipsis.d.ts +0 -3
- package/dist/formats/formatToEllipsis.d.ts.map +0 -1
- package/dist/formats/formatToEllipsis.js +0 -4
- package/dist/formats/formatToHiddenDigits.d.ts +0 -4
- package/dist/formats/formatToHiddenDigits.d.ts.map +0 -1
- package/dist/formats/formatToHiddenDigits.js +0 -14
- package/dist/formats/formatToPhone.d.ts +0 -3
- package/dist/formats/formatToPhone.d.ts.map +0 -1
- package/dist/formats/formatToPhone.js +0 -9
- package/dist/generators/generateColorByString.d.ts +0 -3
- package/dist/generators/generateColorByString.d.ts.map +0 -1
- package/dist/generators/generateColorByString.js +0 -14
- package/dist/generators/generateId.d.ts +0 -6
- package/dist/generators/generateId.d.ts.map +0 -1
- package/dist/generators/generateId.js +0 -23
- package/dist/generators/generateSlug.d.ts +0 -3
- package/dist/generators/generateSlug.d.ts.map +0 -1
- package/dist/generators/generateSlug.js +0 -11
- package/dist/index.d.ts +0 -26
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -30
- package/dist/parsers/parseToCharacters.d.ts +0 -17
- package/dist/parsers/parseToCharacters.d.ts.map +0 -1
- package/dist/parsers/parseToCharacters.js +0 -13
- package/dist/services/calculateCardInstallment.d.ts +0 -7
- package/dist/services/calculateCardInstallment.d.ts.map +0 -1
- package/dist/services/calculateCardInstallment.js +0 -14
- package/dist/services/maskSensitiveData.d.ts +0 -3
- package/dist/services/maskSensitiveData.d.ts.map +0 -1
- package/dist/services/maskSensitiveData.js +0 -38
- package/dist/services/range.d.ts +0 -4
- package/dist/services/range.d.ts.map +0 -1
- package/dist/services/range.js +0 -9
- package/dist/services/truncateLargeFields.d.ts +0 -3
- package/dist/services/truncateLargeFields.d.ts.map +0 -1
- package/dist/services/truncateLargeFields.js +0 -29
- package/dist/validations/regex.d.ts +0 -15
- package/dist/validations/regex.d.ts.map +0 -1
- package/dist/validations/regex.js +0 -25
- package/dist/validations/validateCPF.d.ts +0 -3
- package/dist/validations/validateCPF.d.ts.map +0 -1
- package/dist/validations/validateCPF.js +0 -36
- package/dist/validations/validateDate.d.ts +0 -8
- package/dist/validations/validateDate.d.ts.map +0 -1
- package/dist/validations/validateDate.js +0 -47
- package/dist/validations/validatePhone.d.ts +0 -3
- package/dist/validations/validatePhone.d.ts.map +0 -1
- package/dist/validations/validatePhone.js +0 -19
- package/src/formats/formatBrazilianDateHour.ts +0 -17
- package/src/formats/formatBrazilianDateToDate.ts +0 -13
- package/src/formats/formatDateHour.ts +0 -15
- package/src/formats/formatToBRL.ts +0 -10
- package/src/formats/formatToCNPJ.ts +0 -10
- package/src/formats/formatToCPF.ts +0 -10
- package/src/parsers/parseToCharacters.ts +0 -34
- package/src/services/range.ts +0 -15
- package/src/validations/validateCPF.ts +0 -38
- /package/src/{validations/regex.ts → regex/index.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/services/range.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,GAClB,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,MAAM,KACZ,CAAC,MAAM,EAAE,MAAM,CAMjB,CAAC;AAEF,QAAA,MAAM,MAAM,GAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,MAAM,KAAG,OACjB,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/services/range.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
const normalizeRange = (range, limit) => {
|
|
2
|
-
if (Array.isArray(range))
|
|
3
|
-
return range;
|
|
4
|
-
if (range >= 0)
|
|
5
|
-
return [0, range];
|
|
6
|
-
return [limit + 1 - Math.abs(range), limit];
|
|
7
|
-
};
|
|
8
|
-
const within = (range, value) => value >= range[0] && value <= range[1];
|
|
9
|
-
export { normalizeRange, within };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"truncateLargeFields.d.ts","sourceRoot":"","sources":["../../src/services/truncateLargeFields.ts"],"names":[],"mappings":"AAAA,iBAAS,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,MAAM,CA6BzE;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
function truncateLargeFields(jsonString, maxLength = 1000) {
|
|
2
|
-
function truncateValue(key, value) {
|
|
3
|
-
if (typeof value === "string" && value.length > maxLength) {
|
|
4
|
-
return `To large information: field as ${value.length} characters`;
|
|
5
|
-
}
|
|
6
|
-
return value;
|
|
7
|
-
}
|
|
8
|
-
function recursiveTruncate(obj) {
|
|
9
|
-
if (Array.isArray(obj)) {
|
|
10
|
-
return obj.map(recursiveTruncate);
|
|
11
|
-
}
|
|
12
|
-
else if (obj !== null && typeof obj === "object") {
|
|
13
|
-
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [
|
|
14
|
-
key,
|
|
15
|
-
truncateValue(key, recursiveTruncate(value)),
|
|
16
|
-
]));
|
|
17
|
-
}
|
|
18
|
-
return obj;
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
const parsedJson = JSON.parse(jsonString);
|
|
22
|
-
const truncatedJson = recursiveTruncate(parsedJson);
|
|
23
|
-
return JSON.stringify(truncatedJson);
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
throw new Error("Invalid JSON string");
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export { truncateLargeFields };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
declare const regex: {
|
|
2
|
-
URL: RegExp;
|
|
3
|
-
HOUR: RegExp;
|
|
4
|
-
RG: RegExp;
|
|
5
|
-
PHONE: RegExp;
|
|
6
|
-
PASSWORD: RegExp;
|
|
7
|
-
DATEHOUR: RegExp;
|
|
8
|
-
CPF: RegExp;
|
|
9
|
-
CNPJ: RegExp;
|
|
10
|
-
CEP: RegExp;
|
|
11
|
-
CPFCNPJ: RegExp;
|
|
12
|
-
DATE: RegExp;
|
|
13
|
-
};
|
|
14
|
-
export { regex };
|
|
15
|
-
//# sourceMappingURL=regex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../src/validations/regex.ts"],"names":[],"mappings":"AA0BA,QAAA,MAAM,KAAK;;;;;;;;;;;;CAYV,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
const CEP = /^(\d{8}|\d{2}\.?\d{3}\-\d{3})$/;
|
|
2
|
-
const CNPJ = /(^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$)/;
|
|
3
|
-
const CPF = /(^\d{3}\.\d{3}\.\d{3}\-\d{2}$)/;
|
|
4
|
-
const DATE = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/\d{4}$/;
|
|
5
|
-
const DATEHOUR = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/\d{4}\s(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/;
|
|
6
|
-
const HOUR = /^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/;
|
|
7
|
-
const PASSWORD = /(?=^.{8,}$)((?=.*\w)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[|!"$%&\/\(\)\?\^\'\\\+\-\*]))^.*/;
|
|
8
|
-
const PHONE = /([0-9]{2})?(\s|-)?(9?[0-9]{4})-?([0-9]{4}$)/;
|
|
9
|
-
const RG = /(^\d{1,2}).?(\d{3}).?(\d{3})-?(\d{1}|X|x$)/;
|
|
10
|
-
const URL = /^(((https?|ftp):\/\/)?([\w\-\.])+(\.)([\w]){2,4}([\w\/+=%&_\.~?\-]*))*$/;
|
|
11
|
-
const CPFCNPJ = /^(?:(\d{3}\.\d{3}\.\d{3}-\d{2})|(\d{11})|(\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2})|(\d{14}))$/;
|
|
12
|
-
const regex = {
|
|
13
|
-
URL,
|
|
14
|
-
HOUR,
|
|
15
|
-
RG,
|
|
16
|
-
PHONE,
|
|
17
|
-
PASSWORD,
|
|
18
|
-
DATEHOUR,
|
|
19
|
-
CPF,
|
|
20
|
-
CNPJ,
|
|
21
|
-
CEP,
|
|
22
|
-
CPFCNPJ,
|
|
23
|
-
DATE,
|
|
24
|
-
};
|
|
25
|
-
export { regex };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateCPF.d.ts","sourceRoot":"","sources":["../../src/validations/validateCPF.ts"],"names":[],"mappings":"AA2BA,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,WAQlC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
function removeNonDigits(cpf) {
|
|
2
|
-
return cpf.replace(/\D/g, "");
|
|
3
|
-
}
|
|
4
|
-
function isInvalidLength(cpf) {
|
|
5
|
-
const CPF_LENGTH = 11;
|
|
6
|
-
return cpf.length !== CPF_LENGTH;
|
|
7
|
-
}
|
|
8
|
-
function hasAllDigitsEqual(cpf) {
|
|
9
|
-
const [firstCpfDigit] = cpf;
|
|
10
|
-
return [...cpf].every((digit) => digit === firstCpfDigit);
|
|
11
|
-
}
|
|
12
|
-
function calculateDigit(cpf, factor) {
|
|
13
|
-
let total = 0;
|
|
14
|
-
for (const digit of cpf) {
|
|
15
|
-
if (factor > 1)
|
|
16
|
-
total += parseInt(digit) * factor--;
|
|
17
|
-
}
|
|
18
|
-
const rest = total % 11;
|
|
19
|
-
return rest < 2 ? 0 : 11 - rest;
|
|
20
|
-
}
|
|
21
|
-
function extractDigit(cpf) {
|
|
22
|
-
return cpf.slice(9);
|
|
23
|
-
}
|
|
24
|
-
function validateCPF(rawCpf) {
|
|
25
|
-
if (!rawCpf)
|
|
26
|
-
return false;
|
|
27
|
-
const cpf = removeNonDigits(rawCpf);
|
|
28
|
-
if (isInvalidLength(cpf))
|
|
29
|
-
return false;
|
|
30
|
-
if (hasAllDigitsEqual(cpf))
|
|
31
|
-
return false;
|
|
32
|
-
const digit1 = calculateDigit(cpf, 10);
|
|
33
|
-
const digit2 = calculateDigit(cpf, 11);
|
|
34
|
-
return extractDigit(cpf) === `${digit1}${digit2}`;
|
|
35
|
-
}
|
|
36
|
-
export { validateCPF };
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
type Format = "DD/MM/YYYY" | "MM-DD-YYYY" | "YYYY-MM-DD";
|
|
2
|
-
type Config = {
|
|
3
|
-
minYear?: number;
|
|
4
|
-
maxYear?: number;
|
|
5
|
-
};
|
|
6
|
-
declare function validateDate(date: string, format: Format, config?: Config): boolean;
|
|
7
|
-
export { validateDate };
|
|
8
|
-
//# sourceMappingURL=validateDate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateDate.d.ts","sourceRoot":"","sources":["../../src/validations/validateDate.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAEzD,KAAK,MAAM,GAAG;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CA6C5E;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
function validateDate(date, format, config) {
|
|
2
|
-
let day, month, year;
|
|
3
|
-
const minYear = config?.minYear || 0;
|
|
4
|
-
const maxYear = config?.maxYear || 3000;
|
|
5
|
-
if (format === "DD/MM/YYYY") {
|
|
6
|
-
const dateRegex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
|
|
7
|
-
if (!dateRegex.test(date))
|
|
8
|
-
return false;
|
|
9
|
-
[, day, month, year] = date.match(dateRegex) || [];
|
|
10
|
-
}
|
|
11
|
-
else if (format === "MM-DD-YYYY") {
|
|
12
|
-
const dateRegex = /^(\d{2})-(\d{2})-(\d{4})$/;
|
|
13
|
-
if (!dateRegex.test(date))
|
|
14
|
-
return false;
|
|
15
|
-
[, month, day, year] = date.match(dateRegex) || [];
|
|
16
|
-
}
|
|
17
|
-
else if (format === "YYYY-MM-DD") {
|
|
18
|
-
const dateRegex = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
19
|
-
if (!dateRegex.test(date))
|
|
20
|
-
return false;
|
|
21
|
-
[, year, month, day] = date.match(dateRegex) || [];
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
throw new Error("Invalid date format");
|
|
25
|
-
}
|
|
26
|
-
const dayNum = parseInt(day, 10);
|
|
27
|
-
const monthNum = parseInt(month, 10);
|
|
28
|
-
const yearNum = parseInt(year, 10);
|
|
29
|
-
if (dayNum < 1 || dayNum > 31)
|
|
30
|
-
return false;
|
|
31
|
-
if (monthNum < 1 || monthNum > 12)
|
|
32
|
-
return false;
|
|
33
|
-
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
34
|
-
if (monthNum === 2) {
|
|
35
|
-
const isLeapYear = (yearNum % 4 === 0 && yearNum % 100 !== 0) || yearNum % 400 === 0;
|
|
36
|
-
if (dayNum > (isLeapYear ? 29 : 28))
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
else if (dayNum > daysInMonth[monthNum - 1]) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
if (yearNum < minYear || yearNum > maxYear)
|
|
43
|
-
return false;
|
|
44
|
-
const isValidDate = new Date(yearNum, monthNum - 1, dayNum).getDate() === dayNum;
|
|
45
|
-
return isValidDate;
|
|
46
|
-
}
|
|
47
|
-
export { validateDate };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validatePhone.d.ts","sourceRoot":"","sources":["../../src/validations/validatePhone.ts"],"names":[],"mappings":"AAEA,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAiB7C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { countries } from "@arkyn/templates";
|
|
2
|
-
function validatePhone(phone) {
|
|
3
|
-
for (const country of countries) {
|
|
4
|
-
const countryCode = country.code;
|
|
5
|
-
const prefix = country.prefix ? `-${country.prefix}` : "";
|
|
6
|
-
const digitCount = country.mask.replace(/[^_]/g, "").length;
|
|
7
|
-
if (country.iso === "BR") {
|
|
8
|
-
const brazilRegex = new RegExp(`^\\${countryCode} \\d{2}9?\\d{8}$`);
|
|
9
|
-
if (brazilRegex.test(phone))
|
|
10
|
-
return true;
|
|
11
|
-
continue;
|
|
12
|
-
}
|
|
13
|
-
const regex = new RegExp(`^\\${countryCode}${prefix} \\d{${digitCount}}$`);
|
|
14
|
-
if (regex.test(phone))
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
export { validatePhone };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { regex } from "../validations/regex";
|
|
2
|
-
|
|
3
|
-
function formatBrazilianDateHour(date: string, hour: string) {
|
|
4
|
-
if (regex.HOUR.test(hour) === false) throw new Error("Invalid hour format");
|
|
5
|
-
|
|
6
|
-
const [day, month, year] = date.split("/").map(Number);
|
|
7
|
-
|
|
8
|
-
const dateHour = new Date(`${year}-${month}-${day}`);
|
|
9
|
-
const [hours, minutes] = hour.split(":").map(Number);
|
|
10
|
-
|
|
11
|
-
dateHour.setUTCHours(hours);
|
|
12
|
-
dateHour.setUTCMinutes(minutes);
|
|
13
|
-
|
|
14
|
-
return dateHour;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export { formatBrazilianDateHour };
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { regex } from "../validations/regex";
|
|
2
|
-
|
|
3
|
-
function formatBrazilianDateToDate(brazilianData: string) {
|
|
4
|
-
if (regex.DATE.test(brazilianData) === false)
|
|
5
|
-
throw new Error("Invalid date format");
|
|
6
|
-
|
|
7
|
-
const [day, month, year] = brazilianData.split("/").map(Number);
|
|
8
|
-
const formattedDate = `${year}-${month}-${day}`;
|
|
9
|
-
|
|
10
|
-
return new Date(formattedDate);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export { formatBrazilianDateToDate };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { regex } from "../validations/regex";
|
|
2
|
-
|
|
3
|
-
function formatDateHour(date: string, hour: string) {
|
|
4
|
-
if (regex.HOUR.test(hour) === false) throw new Error("Invalid hour format");
|
|
5
|
-
|
|
6
|
-
const dateHour = new Date(date);
|
|
7
|
-
const [hours, minutes] = hour.split(":").map(Number);
|
|
8
|
-
|
|
9
|
-
dateHour.setUTCHours(hours);
|
|
10
|
-
dateHour.setUTCMinutes(minutes);
|
|
11
|
-
|
|
12
|
-
return dateHour;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export { formatDateHour };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
function formatToBRL(value: number, showPrefix = true) {
|
|
2
|
-
const format = new Intl.NumberFormat("pt-BR", {
|
|
3
|
-
style: "currency",
|
|
4
|
-
currency: "BRL",
|
|
5
|
-
}).format(value);
|
|
6
|
-
|
|
7
|
-
return showPrefix ? format : format.replace("R$", "").trim();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export { formatToBRL };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
function formatToCNPJ(value: string): string {
|
|
2
|
-
const cleaned = value.replace(/\D/g, "");
|
|
3
|
-
const match = cleaned.match(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/);
|
|
4
|
-
if (match) {
|
|
5
|
-
return `${match[1]}.${match[2]}.${match[3]}/${match[4]}-${match[5]}`;
|
|
6
|
-
}
|
|
7
|
-
return value;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export { formatToCNPJ };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
function formatToCPF(value: string): string {
|
|
2
|
-
const cleaned = value.replace(/\D/g, "");
|
|
3
|
-
const match = cleaned.match(/^(\d{3})(\d{3})(\d{3})(\d{2})$/);
|
|
4
|
-
if (match) {
|
|
5
|
-
return `${match[1]}.${match[2]}.${match[3]}-${match[4]}`;
|
|
6
|
-
}
|
|
7
|
-
return value;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export { formatToCPF };
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const DIGIT = /^\d$/;
|
|
2
|
-
|
|
3
|
-
type DigitCharacterNode = {
|
|
4
|
-
kind: "digit";
|
|
5
|
-
digit: number;
|
|
6
|
-
character: string;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
type OtherCharacterNode = {
|
|
10
|
-
kind: "other";
|
|
11
|
-
character: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
type RootCharacterNode = {
|
|
15
|
-
kind: "root";
|
|
16
|
-
digits: number;
|
|
17
|
-
children: (DigitCharacterNode | OtherCharacterNode)[];
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const parseToCharacters = (value: string): RootCharacterNode => {
|
|
21
|
-
let digits = 0;
|
|
22
|
-
|
|
23
|
-
const children = value
|
|
24
|
-
.split("")
|
|
25
|
-
.map((character: string): DigitCharacterNode | OtherCharacterNode => {
|
|
26
|
-
if (DIGIT.test(character))
|
|
27
|
-
return { character, kind: "digit", digit: ++digits };
|
|
28
|
-
return { character, kind: "other" };
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
return { digits, children, kind: "root" };
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export { parseToCharacters };
|
package/src/services/range.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const normalizeRange = (
|
|
2
|
-
range: number | [number, number],
|
|
3
|
-
limit: number
|
|
4
|
-
): [number, number] => {
|
|
5
|
-
if (Array.isArray(range)) return range;
|
|
6
|
-
|
|
7
|
-
if (range >= 0) return [0, range];
|
|
8
|
-
|
|
9
|
-
return [limit + 1 - Math.abs(range), limit];
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
const within = (range: [number, number], value: number): boolean =>
|
|
13
|
-
value >= range[0] && value <= range[1];
|
|
14
|
-
|
|
15
|
-
export { normalizeRange, within };
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
function removeNonDigits(cpf: string) {
|
|
2
|
-
return cpf.replace(/\D/g, "");
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
function isInvalidLength(cpf: string) {
|
|
6
|
-
const CPF_LENGTH = 11;
|
|
7
|
-
return cpf.length !== CPF_LENGTH;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function hasAllDigitsEqual(cpf: string) {
|
|
11
|
-
const [firstCpfDigit] = cpf;
|
|
12
|
-
return [...cpf].every((digit) => digit === firstCpfDigit);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function calculateDigit(cpf: string, factor: number) {
|
|
16
|
-
let total = 0;
|
|
17
|
-
for (const digit of cpf) {
|
|
18
|
-
if (factor > 1) total += parseInt(digit) * factor--;
|
|
19
|
-
}
|
|
20
|
-
const rest = total % 11;
|
|
21
|
-
return rest < 2 ? 0 : 11 - rest;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function extractDigit(cpf: string) {
|
|
25
|
-
return cpf.slice(9);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function validateCPF(rawCpf: string) {
|
|
29
|
-
if (!rawCpf) return false;
|
|
30
|
-
const cpf = removeNonDigits(rawCpf);
|
|
31
|
-
if (isInvalidLength(cpf)) return false;
|
|
32
|
-
if (hasAllDigitsEqual(cpf)) return false;
|
|
33
|
-
const digit1 = calculateDigit(cpf, 10);
|
|
34
|
-
const digit2 = calculateDigit(cpf, 11);
|
|
35
|
-
return extractDigit(cpf) === `${digit1}${digit2}`;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export { validateCPF };
|
|
File without changes
|