@arkyn/shared 1.3.74 → 1.3.76
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/dist/formats/formatToBRL.d.ts +3 -0
- package/dist/formats/formatToBRL.d.ts.map +1 -0
- package/dist/formats/formatToBRL.js +8 -0
- package/dist/formats/formatToHiddenDigits.d.ts +4 -0
- package/dist/formats/formatToHiddenDigits.d.ts.map +1 -0
- package/dist/formats/formatToHiddenDigits.js +14 -0
- package/dist/generators/generateColorByString.d.ts +3 -0
- package/dist/generators/generateColorByString.d.ts.map +1 -0
- package/dist/generators/generateColorByString.js +14 -0
- package/dist/generators/generateId.d.ts +6 -0
- package/dist/generators/generateId.d.ts.map +1 -0
- package/dist/generators/generateId.js +23 -0
- package/dist/generators/generateSlug.d.ts +3 -0
- package/dist/generators/generateSlug.d.ts.map +1 -0
- package/dist/generators/generateSlug.js +11 -0
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -6
- package/dist/parsers/parseToCharacters.d.ts +17 -0
- package/dist/parsers/parseToCharacters.d.ts.map +1 -0
- package/dist/parsers/parseToCharacters.js +13 -0
- package/dist/services/calculateCardInstallment.d.ts +7 -0
- package/dist/services/calculateCardInstallment.d.ts.map +1 -0
- package/dist/services/calculateCardInstallment.js +14 -0
- package/dist/services/range.d.ts +4 -0
- package/dist/services/range.d.ts.map +1 -0
- package/dist/services/range.js +9 -0
- package/dist/validations/regex.d.ts +15 -0
- package/dist/validations/regex.d.ts.map +1 -0
- package/dist/validations/regex.js +25 -0
- package/dist/validations/validateCPF.d.ts +3 -0
- package/dist/validations/validateCPF.d.ts.map +1 -0
- package/dist/validations/validateCPF.js +36 -0
- package/package.json +1 -1
- package/src/formats/formatToBRL.ts +10 -0
- package/src/formats/formatToHiddenDigits.ts +21 -0
- package/src/{uuid.ts → generators/generateId.ts} +7 -7
- package/src/index.ts +19 -6
- package/src/parsers/parseToCharacters.ts +34 -0
- package/src/services/range.ts +15 -0
- package/src/{regex.ts → validations/regex.ts} +4 -2
- package/src/validations/validateCPF.ts +38 -0
- package/src/currencyFormat.ts +0 -10
- /package/src/{generateColorByString.ts → generators/generateColorByString.ts} +0 -0
- /package/src/{generateSlug.ts → generators/generateSlug.ts} +0 -0
- /package/src/{calculateCardInstallment.ts → services/calculateCardInstallment.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatToBRL.d.ts","sourceRoot":"","sources":["../../src/formats/formatToBRL.ts"],"names":[],"mappings":"AAAA,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,UAAO,UAOpD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatToHiddenDigits.d.ts","sourceRoot":"","sources":["../../src/formats/formatToHiddenDigits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAKhE,QAAA,MAAM,oBAAoB,UACjB,MAAM,YACJ,2BAA2B,KACnC,MAUF,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { parseToCharacters } from "../parsers/parseToCharacters";
|
|
2
|
+
import { normalizeRange, within } from "../services/range";
|
|
3
|
+
const formatToHiddenDigits = (value, options = {}) => {
|
|
4
|
+
const characters = parseToCharacters(value);
|
|
5
|
+
const range = normalizeRange(options.range ?? 3, characters.digits);
|
|
6
|
+
return characters.children
|
|
7
|
+
.map((node) => {
|
|
8
|
+
if (node.kind === "digit" && within(range, node.digit))
|
|
9
|
+
return options.hider ?? "*";
|
|
10
|
+
return node.character;
|
|
11
|
+
})
|
|
12
|
+
.join("");
|
|
13
|
+
};
|
|
14
|
+
export { formatToHiddenDigits };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateColorByString.d.ts","sourceRoot":"","sources":["../../src/generators/generateColorByString.ts"],"names":[],"mappings":"AAAA,iBAAS,qBAAqB,CAAC,MAAM,EAAE,MAAM,UAgB5C;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function generateColorByString(string) {
|
|
2
|
+
var hash = 0;
|
|
3
|
+
for (var i = 0; i < string.length; i++) {
|
|
4
|
+
hash = string.charCodeAt(i) + ((hash << 5) - hash);
|
|
5
|
+
}
|
|
6
|
+
var red = (hash & 0xff0000) >> 16;
|
|
7
|
+
var green = (hash & 0x00ff00) >> 8;
|
|
8
|
+
var blue = hash & 0x0000ff;
|
|
9
|
+
var redHex = red.toString(16).padStart(2, "0");
|
|
10
|
+
var greenHex = green.toString(16).padStart(2, "0");
|
|
11
|
+
var blueHex = blue.toString(16).padStart(2, "0");
|
|
12
|
+
return "#" + redHex + greenHex + blueHex;
|
|
13
|
+
}
|
|
14
|
+
export { generateColorByString };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateId.d.ts","sourceRoot":"","sources":["../../src/generators/generateId.ts"],"names":[],"mappings":"AAsBA,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;;;EAK1C;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { v4, v7 } from "uuid";
|
|
2
|
+
function hexToBin(hex) {
|
|
3
|
+
const buffer = new Uint8Array(hex.length / 2);
|
|
4
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
5
|
+
buffer[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
6
|
+
}
|
|
7
|
+
return buffer;
|
|
8
|
+
}
|
|
9
|
+
function uuidV4() {
|
|
10
|
+
const uuid = v4();
|
|
11
|
+
return { text: uuid, binary: hexToBin(uuid) };
|
|
12
|
+
}
|
|
13
|
+
function uuidV7() {
|
|
14
|
+
const uuid = v7();
|
|
15
|
+
return { text: uuid, binary: hexToBin(uuid) };
|
|
16
|
+
}
|
|
17
|
+
function generateId(type) {
|
|
18
|
+
return {
|
|
19
|
+
v4: uuidV4()[type],
|
|
20
|
+
v7: uuidV7()[type],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export { generateId };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSlug.d.ts","sourceRoot":"","sources":["../../src/generators/generateSlug.ts"],"names":[],"mappings":"AAAA,iBAAS,YAAY,CAAC,MAAM,EAAE,MAAM,UAanC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function generateSlug(string) {
|
|
2
|
+
let slug = string.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
3
|
+
slug = slug
|
|
4
|
+
.replace(/[^\w\s-]/g, "")
|
|
5
|
+
.replace(/\s+/g, "-")
|
|
6
|
+
.toLowerCase();
|
|
7
|
+
slug = slug.replace(/-{2,}/g, "-");
|
|
8
|
+
slug = slug.replace(/^-+|-+$/g, "");
|
|
9
|
+
return slug;
|
|
10
|
+
}
|
|
11
|
+
export { generateSlug };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export { generateColorByString } from "./generateColorByString";
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
1
|
+
export { formatToBRL } from "./formats/formatToBRL";
|
|
2
|
+
export { formatToHiddenDigits } from "./formats/formatToHiddenDigits";
|
|
3
|
+
export { generateColorByString } from "./generators/generateColorByString";
|
|
4
|
+
export { generateId } from "./generators/generateId";
|
|
5
|
+
export { generateSlug } from "./generators/generateSlug";
|
|
6
|
+
export { parseToCharacters } from "./parsers/parseToCharacters";
|
|
7
|
+
export { calculateCardInstallment } from "./services/calculateCardInstallment";
|
|
8
|
+
export { normalizeRange, within } from "./services/range";
|
|
9
|
+
export { regex } from "./validations/regex";
|
|
10
|
+
export { validateCPF } from "./validations/validateCPF";
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
1
|
+
// Formats
|
|
2
|
+
export { formatToBRL } from "./formats/formatToBRL";
|
|
3
|
+
export { formatToHiddenDigits } from "./formats/formatToHiddenDigits";
|
|
4
|
+
// Generators
|
|
5
|
+
export { generateColorByString } from "./generators/generateColorByString";
|
|
6
|
+
export { generateId } from "./generators/generateId";
|
|
7
|
+
export { generateSlug } from "./generators/generateSlug";
|
|
8
|
+
// Parsers
|
|
9
|
+
export { parseToCharacters } from "./parsers/parseToCharacters";
|
|
10
|
+
// Services
|
|
11
|
+
export { calculateCardInstallment } from "./services/calculateCardInstallment";
|
|
12
|
+
export { normalizeRange, within } from "./services/range";
|
|
13
|
+
// Validations
|
|
14
|
+
export { regex } from "./validations/regex";
|
|
15
|
+
export { validateCPF } from "./validations/validateCPF";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type DigitCharacterNode = {
|
|
2
|
+
kind: "digit";
|
|
3
|
+
digit: number;
|
|
4
|
+
character: string;
|
|
5
|
+
};
|
|
6
|
+
type OtherCharacterNode = {
|
|
7
|
+
kind: "other";
|
|
8
|
+
character: string;
|
|
9
|
+
};
|
|
10
|
+
type RootCharacterNode = {
|
|
11
|
+
kind: "root";
|
|
12
|
+
digits: number;
|
|
13
|
+
children: (DigitCharacterNode | OtherCharacterNode)[];
|
|
14
|
+
};
|
|
15
|
+
declare const parseToCharacters: (value: string) => RootCharacterNode;
|
|
16
|
+
export { parseToCharacters };
|
|
17
|
+
//# sourceMappingURL=parseToCharacters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseToCharacters.d.ts","sourceRoot":"","sources":["../../src/parsers/parseToCharacters.ts"],"names":[],"mappings":"AAEA,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC,EAAE,CAAC;CACvD,CAAC;AAEF,QAAA,MAAM,iBAAiB,UAAW,MAAM,KAAG,iBAY1C,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const DIGIT = /^\d$/;
|
|
2
|
+
const parseToCharacters = (value) => {
|
|
3
|
+
let digits = 0;
|
|
4
|
+
const children = value
|
|
5
|
+
.split("")
|
|
6
|
+
.map((character) => {
|
|
7
|
+
if (DIGIT.test(character))
|
|
8
|
+
return { character, kind: "digit", digit: ++digits };
|
|
9
|
+
return { character, kind: "other" };
|
|
10
|
+
});
|
|
11
|
+
return { digits, children, kind: "root" };
|
|
12
|
+
};
|
|
13
|
+
export { parseToCharacters };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CalculateCardInstallmentProps } from "@arkyn/types";
|
|
2
|
+
declare function calculateCardInstallment(args: CalculateCardInstallmentProps): {
|
|
3
|
+
total_price: number;
|
|
4
|
+
installment_price: number;
|
|
5
|
+
};
|
|
6
|
+
export { calculateCardInstallment };
|
|
7
|
+
//# sourceMappingURL=calculateCardInstallment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateCardInstallment.d.ts","sourceRoot":"","sources":["../../src/services/calculateCardInstallment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAElE,iBAAS,wBAAwB,CAAC,IAAI,EAAE,6BAA6B;;;EAgBpE;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function calculateCardInstallment(args) {
|
|
2
|
+
const { cash_price, number_installments, fees = 0.0349 } = args;
|
|
3
|
+
let installment_price = 0;
|
|
4
|
+
let total_price = 0;
|
|
5
|
+
let numerator = Math.pow(1 + fees, number_installments) * fees;
|
|
6
|
+
let denominator = Math.pow(1 + fees, number_installments) - 1;
|
|
7
|
+
installment_price = cash_price * (numerator / denominator);
|
|
8
|
+
total_price = number_installments * installment_price;
|
|
9
|
+
return {
|
|
10
|
+
total_price: +total_price.toFixed(2),
|
|
11
|
+
installment_price: +installment_price.toFixed(2),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export { calculateCardInstallment };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/services/range.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc,UACX,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,SACzB,MAAM,KACZ,CAAC,MAAM,EAAE,MAAM,CAMjB,CAAC;AAEF,QAAA,MAAM,MAAM,UAAW,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,MAAM,KAAG,OACjB,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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 };
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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 };
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 };
|
package/package.json
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
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 };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FormatToHiddenDigitsOptions } from "@arkyn/types";
|
|
2
|
+
|
|
3
|
+
import { parseToCharacters } from "../parsers/parseToCharacters";
|
|
4
|
+
import { normalizeRange, within } from "../services/range";
|
|
5
|
+
|
|
6
|
+
const formatToHiddenDigits = (
|
|
7
|
+
value: string,
|
|
8
|
+
options: FormatToHiddenDigitsOptions = {}
|
|
9
|
+
): string => {
|
|
10
|
+
const characters = parseToCharacters(value);
|
|
11
|
+
const range = normalizeRange(options.range ?? 3, characters.digits);
|
|
12
|
+
return characters.children
|
|
13
|
+
.map((node) => {
|
|
14
|
+
if (node.kind === "digit" && within(range, node.digit))
|
|
15
|
+
return options.hider ?? "*";
|
|
16
|
+
return node.character;
|
|
17
|
+
})
|
|
18
|
+
.join("");
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { formatToHiddenDigits };
|
|
@@ -12,19 +12,19 @@ function hexToBin(hex: string) {
|
|
|
12
12
|
|
|
13
13
|
function uuidV4() {
|
|
14
14
|
const uuid = v4();
|
|
15
|
-
return {
|
|
16
|
-
text: uuid,
|
|
17
|
-
binary: hexToBin(uuid),
|
|
18
|
-
};
|
|
15
|
+
return { text: uuid, binary: hexToBin(uuid) };
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
function uuidV7() {
|
|
22
19
|
const uuid = v7();
|
|
20
|
+
return { text: uuid, binary: hexToBin(uuid) };
|
|
21
|
+
}
|
|
23
22
|
|
|
23
|
+
function generateId(type: "text" | "binary") {
|
|
24
24
|
return {
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
v4: uuidV4()[type],
|
|
26
|
+
v7: uuidV7()[type],
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export {
|
|
30
|
+
export { generateId };
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export {
|
|
1
|
+
// Formats
|
|
2
|
+
export { formatToBRL } from "./formats/formatToBRL";
|
|
3
|
+
export { formatToHiddenDigits } from "./formats/formatToHiddenDigits";
|
|
4
|
+
|
|
5
|
+
// Generators
|
|
6
|
+
export { generateColorByString } from "./generators/generateColorByString";
|
|
7
|
+
export { generateId } from "./generators/generateId";
|
|
8
|
+
export { generateSlug } from "./generators/generateSlug";
|
|
9
|
+
|
|
10
|
+
// Parsers
|
|
11
|
+
export { parseToCharacters } from "./parsers/parseToCharacters";
|
|
12
|
+
|
|
13
|
+
// Services
|
|
14
|
+
export { calculateCardInstallment } from "./services/calculateCardInstallment";
|
|
15
|
+
export { normalizeRange, within } from "./services/range";
|
|
16
|
+
|
|
17
|
+
// Validations
|
|
18
|
+
export { regex } from "./validations/regex";
|
|
19
|
+
export { validateCPF } from "./validations/validateCPF";
|
|
@@ -0,0 +1,34 @@
|
|
|
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 };
|
|
@@ -0,0 +1,15 @@
|
|
|
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,4 +1,4 @@
|
|
|
1
|
-
const CEP =
|
|
1
|
+
const CEP = /^(\d{8}|\d{2}\.?\d{3}\-\d{3})$/;
|
|
2
2
|
|
|
3
3
|
const CNPJ = /(^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$)/;
|
|
4
4
|
|
|
@@ -24,7 +24,7 @@ const URL =
|
|
|
24
24
|
const CPFCNPJ =
|
|
25
25
|
/^(?:(\d{3}\.\d{3}\.\d{3}-\d{2})|(\d{11})|(\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2})|(\d{14}))$/;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
const regex = {
|
|
28
28
|
URL,
|
|
29
29
|
HOUR,
|
|
30
30
|
RG,
|
|
@@ -37,3 +37,5 @@ export const regex = {
|
|
|
37
37
|
CPFCNPJ,
|
|
38
38
|
DATE,
|
|
39
39
|
};
|
|
40
|
+
|
|
41
|
+
export { regex };
|
|
@@ -0,0 +1,38 @@
|
|
|
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 };
|
package/src/currencyFormat.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
function currencyFormat(value: number) {
|
|
2
|
-
const format = new Intl.NumberFormat("pt-BR", {
|
|
3
|
-
style: "currency",
|
|
4
|
-
currency: "BRL",
|
|
5
|
-
}).format(value);
|
|
6
|
-
|
|
7
|
-
return { value: format, valueWithoutPrefix: format.replace("R$", "").trim() };
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export { currencyFormat };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|