validation-br 1.4.5 → 1.5.2
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/.github/workflows/test.yml +6 -6
- package/.prettierrc.js +1 -1
- package/dist/cnh.d.ts +91 -91
- package/dist/cnh.js +138 -138
- package/dist/cnh.js.map +1 -1
- package/dist/cnh.test.d.ts +1 -1
- package/dist/cnpj.d.ts +114 -82
- package/dist/cnpj.js +179 -129
- package/dist/cnpj.js.map +1 -1
- package/dist/cnpj.test.d.ts +1 -1
- package/dist/cpf.d.ts +99 -99
- package/dist/cpf.js +146 -146
- package/dist/cpf.js.map +1 -1
- package/dist/cpf.test.d.ts +1 -1
- package/dist/data/ValidationBRError.d.ts +6 -6
- package/dist/data/ValidationBRError.js +9 -9
- package/dist/data/ValidationBRError.js.map +1 -1
- package/dist/index.d.ts +21 -21
- package/dist/index.js +41 -41
- package/dist/index.test.d.ts +1 -1
- package/dist/judicialProcess.d.ts +126 -126
- package/dist/judicialProcess.js +189 -189
- package/dist/judicialProcess.js.map +1 -1
- package/dist/judicialProcess.test.d.ts +1 -1
- package/dist/nup17.d.ts +102 -102
- package/dist/nup17.js +154 -154
- package/dist/nup17.js.map +1 -1
- package/dist/nup17.test.d.ts +1 -1
- package/dist/pisPasep.d.ts +81 -81
- package/dist/pisPasep.js +125 -125
- package/dist/pisPasep.js.map +1 -1
- package/dist/pisPasep.test.d.ts +1 -1
- package/dist/postalCode.d.ts +83 -83
- package/dist/postalCode.js +135 -135
- package/dist/postalCode.js.map +1 -1
- package/dist/postalCode.test.d.ts +1 -1
- package/dist/renavam.d.ts +75 -75
- package/dist/renavam.js +121 -121
- package/dist/renavam.js.map +1 -1
- package/dist/renavam.test.d.ts +1 -1
- package/dist/tituloEleitor.d.ts +93 -93
- package/dist/tituloEleitor.js +142 -142
- package/dist/tituloEleitor.js.map +1 -1
- package/dist/tituloEleitor.test.d.ts +1 -1
- package/dist/utils-applyMask.test.d.ts +1 -1
- package/dist/utils-checkRepeatedSequence.test.d.ts +1 -0
- package/dist/utils-clearValue.test.d.ts +1 -1
- package/dist/utils-fakeNumber.test.d.ts +1 -1
- package/dist/utils-insertAtPosition.test.d.ts +1 -1
- package/dist/utils-invalidListGenerator.test.d.ts +1 -1
- package/dist/utils-randomLetter.test.d.ts +1 -1
- package/dist/utils-removeFromPosition.test.d.ts +1 -1
- package/dist/utils-sumElementsByMultipliers.test.d.ts +1 -1
- package/dist/utils-sumToDV.test.d.ts +1 -1
- package/dist/utils.d.ts +131 -133
- package/dist/utils.js +189 -190
- package/dist/utils.js.map +1 -1
- package/{.eslintrc.js → eslint.config.js} +39 -39
- package/jest.config.js +1 -6
- package/package.json +5 -25
- package/readme.md +11 -2
- package/.eslintcache +0 -1
- package/.eslintignore +0 -2
package/dist/utils.js
CHANGED
|
@@ -1,191 +1,190 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* @
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* fakeNumber(
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* @param {
|
|
64
|
-
* @
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* @
|
|
127
|
-
*
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
* @param {String|Number}
|
|
144
|
-
* @
|
|
145
|
-
*
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
* applyMask('
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* @param {String}
|
|
161
|
-
* @
|
|
162
|
-
*
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* randomLetter()
|
|
178
|
-
* Pega uma letra maiúscula aleatoriamente
|
|
179
|
-
*
|
|
180
|
-
* @example
|
|
181
|
-
* randomLetter() // -> A
|
|
182
|
-
* randomLetter() // -> S
|
|
183
|
-
*
|
|
184
|
-
* @returns {String}
|
|
185
|
-
*/
|
|
186
|
-
function randomLetter() {
|
|
187
|
-
const idx = Math.floor(1 + Math.random() * 26);
|
|
188
|
-
return String.fromCharCode(idx + 64);
|
|
189
|
-
}
|
|
190
|
-
exports.randomLetter = randomLetter;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sumToDV = sumToDV;
|
|
7
|
+
exports.checkRepeatedSequence = checkRepeatedSequence;
|
|
8
|
+
exports.sumElementsByMultipliers = sumElementsByMultipliers;
|
|
9
|
+
exports.fakeNumber = fakeNumber;
|
|
10
|
+
exports.clearValue = clearValue;
|
|
11
|
+
exports.insertAtPosition = insertAtPosition;
|
|
12
|
+
exports.removeFromPosition = removeFromPosition;
|
|
13
|
+
exports.applyMask = applyMask;
|
|
14
|
+
exports.randomLetter = randomLetter;
|
|
15
|
+
const ValidationBRError_1 = __importDefault(require("./data/ValidationBRError"));
|
|
16
|
+
/**
|
|
17
|
+
* Calcula o DV verificador a partir das regras do MOD11:
|
|
18
|
+
* O valor da soma é dividido por 11. O resultado é o resto da divisão. Caso o resto seja
|
|
19
|
+
* menor que 2, ou seja, o valor da divisão seja 10 ou 11, o resultado é 0.
|
|
20
|
+
*
|
|
21
|
+
* @param {Integer} sum Soma
|
|
22
|
+
* @returns {Integer}
|
|
23
|
+
*/
|
|
24
|
+
function sumToDV(sum) {
|
|
25
|
+
return sum % 11 < 2 ? 0 : 11 - (sum % 11);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Checa se o número repassado possui todos os digitos iguais
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* checkRepeatedSequence(12345678)
|
|
32
|
+
* // -> false
|
|
33
|
+
* checkRepeatedSequence(11111111)
|
|
34
|
+
* // -> true
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
function checkRepeatedSequence(value) {
|
|
38
|
+
return [...value].every(digit => digit === value[0]);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Multiplica os elementos de uma string com os elementos de outra, ou de um array
|
|
42
|
+
* e soma o resultado ao final
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* sumElementsByMultipliers('123', '987') //-> 46
|
|
46
|
+
* sumElementsByMultipliers('123', [9, 8, 7]) //-> 46
|
|
47
|
+
*
|
|
48
|
+
* @param {String} value
|
|
49
|
+
* @param {String|Array} multiplier
|
|
50
|
+
* @returns {Integer} Somatório
|
|
51
|
+
*/
|
|
52
|
+
function sumElementsByMultipliers(value, multiplier) {
|
|
53
|
+
return multiplier.reduce((accu, curr, i) => accu + curr * Number(value[i]), 0);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* fakeNumber()
|
|
57
|
+
* Cria um número aleatório com o número de caracteres
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* fakeNumber(8, true) // -> 00083159
|
|
61
|
+
* fakeNumber(4) // -> 831
|
|
62
|
+
*
|
|
63
|
+
* @param {Integer} length
|
|
64
|
+
* @param {Boolean} forceLength Adiciona zeros à esquerda para ter os números de caractes exatos
|
|
65
|
+
* @returns {String}
|
|
66
|
+
*/
|
|
67
|
+
function fakeNumber(length, forceLength = false, isAlpha = false) {
|
|
68
|
+
let value;
|
|
69
|
+
if (isAlpha)
|
|
70
|
+
value = Math.round(Math.random() * 36 ** length).toString(36).toLocaleUpperCase();
|
|
71
|
+
else
|
|
72
|
+
value = Math.floor(Math.random() * 10 ** length).toString();
|
|
73
|
+
if (forceLength)
|
|
74
|
+
return String(value).padStart(length, '0');
|
|
75
|
+
return String(value);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Limpa um número informado, retirando caracteres diferentes de números,
|
|
79
|
+
* preenchendo com zeros à esquerda se for menor que o tamanho exato e
|
|
80
|
+
* removendo uma parte do número se for maior que tamanho definido.
|
|
81
|
+
*
|
|
82
|
+
* 1) Retira caracteres não-numéricos
|
|
83
|
+
* 2) Preenche com zeros à esquerda se 'value' for menor que 'length'
|
|
84
|
+
* 3) Remove caracteres à direita se 'value' for maior que 'length'
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* clearValue(12345-6, 6) // -> 123456
|
|
88
|
+
* clearValue(12345678, 3) // -> 123
|
|
89
|
+
* clearValue(12345, 10) // -> 0000001234
|
|
90
|
+
*
|
|
91
|
+
* @param {Number|String} value
|
|
92
|
+
* @param {Number} length Tamanho exato. Se for null, só retira os caracteres não-numéricos
|
|
93
|
+
* @returns {String} Número com o tamanho exato
|
|
94
|
+
*/
|
|
95
|
+
function clearValue(value, length = null, options) {
|
|
96
|
+
let clearedValue = String(value).replace(/([/.-]+)/gi, '');
|
|
97
|
+
if (options) {
|
|
98
|
+
const shouldRejectEmpty = options.rejectEmpty === true && clearedValue.length === 0;
|
|
99
|
+
if (shouldRejectEmpty) {
|
|
100
|
+
throw ValidationBRError_1.default.EMPTY_VALUE;
|
|
101
|
+
}
|
|
102
|
+
const shouldRejectHigherLength = options.rejectHigherLength === true && length && clearedValue.length > length;
|
|
103
|
+
if (shouldRejectHigherLength) {
|
|
104
|
+
throw ValidationBRError_1.default.MAX_LEN_EXCEDEED;
|
|
105
|
+
}
|
|
106
|
+
const shouldRejectEqualSequence = options.rejectEqualSequence === true && length;
|
|
107
|
+
if (shouldRejectEqualSequence) {
|
|
108
|
+
if (checkRepeatedSequence(clearedValue))
|
|
109
|
+
throw ValidationBRError_1.default.REPEATED_SEQUENCE;
|
|
110
|
+
}
|
|
111
|
+
if (length && options.fillZerosAtLeft)
|
|
112
|
+
clearedValue = clearedValue.padStart(length, '0');
|
|
113
|
+
if (length && options.trimAtRight)
|
|
114
|
+
clearedValue = clearedValue.substring(0, length);
|
|
115
|
+
}
|
|
116
|
+
return clearedValue;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* insertAtPosition()
|
|
120
|
+
* Insere um conjunto de caracteres em um local específico de uma string
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* insertAtPosition('AAABBB', 'C', 3) // -> AAACBBB
|
|
124
|
+
* insertAtPosition('000011122223445555', 99, 7) // -> 00001119922223445555
|
|
125
|
+
*
|
|
126
|
+
* @param {String|Number} value Valor original
|
|
127
|
+
* @param {String|Number} insertValue Valor que será inserido
|
|
128
|
+
* @param {String|Number} position Posição que receberá o novo valor
|
|
129
|
+
* @returns {String}
|
|
130
|
+
*
|
|
131
|
+
*/
|
|
132
|
+
function insertAtPosition(value, insertValue, position) {
|
|
133
|
+
return `${value.substring(0, position)}${insertValue}${value.substring(position)}`;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* removeFromPosition()
|
|
137
|
+
* Retira um conjunto de caracteres de um local específico de uma string
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* removeFromPosition('00001119922223445555', 7,9) // -> 000011122223445555
|
|
141
|
+
* removeFromPosition('AAACBBB', 3,4) // -> AAABBB
|
|
142
|
+
*
|
|
143
|
+
* @param {String|Number} value Valor original
|
|
144
|
+
* @param {String|Number} startPosition
|
|
145
|
+
* @param {String|Number} endPosition
|
|
146
|
+
* @returns {String}
|
|
147
|
+
*
|
|
148
|
+
*/
|
|
149
|
+
function removeFromPosition(value, startPosition, endPosition) {
|
|
150
|
+
return [value.slice(0, startPosition), value.slice(endPosition)].join('');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* applyMask()
|
|
154
|
+
* Aplica uma máscara a uma string
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* applyMask('59650000', '00.000-000') // -> 59.650-000
|
|
158
|
+
* applyMask('99877665544', '(00) 0 0000-0000') // -> (99) 8 7766-5544
|
|
159
|
+
*
|
|
160
|
+
* @param {String|Number} value Valor original
|
|
161
|
+
* @param {String} mask
|
|
162
|
+
* @returns {String}
|
|
163
|
+
*
|
|
164
|
+
*/
|
|
165
|
+
function applyMask(value, mask) {
|
|
166
|
+
const maskLen = clearValue(mask).length;
|
|
167
|
+
let masked = clearValue(value, maskLen, { fillZerosAtLeft: true, trimAtRight: true });
|
|
168
|
+
const specialChars = ['/', '-', '.', '(', ')', ' '];
|
|
169
|
+
for (let position = 0; position < mask.length; position += 1) {
|
|
170
|
+
const current = mask[position];
|
|
171
|
+
if (specialChars.includes(current))
|
|
172
|
+
masked = insertAtPosition(masked, current, position);
|
|
173
|
+
}
|
|
174
|
+
return masked;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* randomLetter()
|
|
178
|
+
* Pega uma letra maiúscula aleatoriamente
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* randomLetter() // -> A
|
|
182
|
+
* randomLetter() // -> S
|
|
183
|
+
*
|
|
184
|
+
* @returns {String}
|
|
185
|
+
*/
|
|
186
|
+
function randomLetter() {
|
|
187
|
+
const idx = Math.floor(1 + Math.random() * 26);
|
|
188
|
+
return String.fromCharCode(idx + 64);
|
|
189
|
+
}
|
|
191
190
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
root: true,
|
|
3
|
-
extends: ['airbnb-base', 'prettier'],
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
},
|
|
2
|
+
// root: true,
|
|
3
|
+
// extends: ['airbnb-base', 'prettier'],
|
|
4
|
+
// parserOptions: {
|
|
5
|
+
// ecmaVersion: 2018,
|
|
6
|
+
// sourceType: 'module',
|
|
7
|
+
// },
|
|
8
|
+
// env: {
|
|
9
|
+
// node: true,
|
|
10
|
+
// jest: true,
|
|
11
|
+
// },
|
|
13
12
|
settings: {
|
|
14
13
|
'import/resolver': {
|
|
15
14
|
node: {
|
|
@@ -18,19 +17,19 @@ module.exports = {
|
|
|
18
17
|
},
|
|
19
18
|
},
|
|
20
19
|
rules: {
|
|
21
|
-
'@typescript-eslint/no-unused-vars': ['error', { varsIgnorePattern: '^_', args: 'none' }],
|
|
20
|
+
// '@typescript-eslint/no-unused-vars': ['error', { varsIgnorePattern: '^_', args: 'none' }],
|
|
22
21
|
'array-callback-return': 'off',
|
|
23
22
|
'arrow-body-style': 'off',
|
|
24
23
|
curly: ['error', 'multi-line', 'consistent'],
|
|
25
24
|
'class-methods-use-this': 'off',
|
|
26
25
|
'consistent-return': 'warn',
|
|
27
26
|
'default-case': 'off',
|
|
28
|
-
'import/extensions': ['error', 'never'],
|
|
29
|
-
'import/first': 'warn',
|
|
30
|
-
'import/no-named-as-default': 'warn',
|
|
31
|
-
'import/no-named-as-default-member': 'warn',
|
|
32
|
-
'import/no-unresolved': 'warn',
|
|
33
|
-
'import/prefer-default-export': 'off',
|
|
27
|
+
// 'import/extensions': ['error', 'never'],
|
|
28
|
+
// 'import/first': 'warn',
|
|
29
|
+
// 'import/no-named-as-default': 'warn',
|
|
30
|
+
// 'import/no-named-as-default-member': 'warn',
|
|
31
|
+
// 'import/no-unresolved': 'warn',
|
|
32
|
+
// 'import/prefer-default-export': 'off',
|
|
34
33
|
'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }],
|
|
35
34
|
'max-classes-per-file': 'off',
|
|
36
35
|
'max-len': ['error', 120, 2, { ignoreUrls: true, ignoreTemplateLiterals: true }],
|
|
@@ -43,7 +42,7 @@ module.exports = {
|
|
|
43
42
|
'no-loop-func': 'off',
|
|
44
43
|
'no-mixed-operators': 'off',
|
|
45
44
|
'no-nested-ternary': 'off',
|
|
46
|
-
'no-only-tests/no-only-tests': 'error',
|
|
45
|
+
// 'no-only-tests/no-only-tests': 'error',
|
|
47
46
|
'no-param-reassign': 'off',
|
|
48
47
|
'no-plusplus': 'off',
|
|
49
48
|
'no-prototype-builtins': 'off',
|
|
@@ -56,27 +55,28 @@ module.exports = {
|
|
|
56
55
|
'no-unused-vars': 'off',
|
|
57
56
|
'no-use-before-define': ['warn', { functions: false, classes: false }],
|
|
58
57
|
'prefer-destructuring': 'off',
|
|
59
|
-
semi: ['error', '
|
|
58
|
+
semi: ['error', 'always'],
|
|
60
59
|
'sort-imports': 'off',
|
|
61
60
|
'no-unused-expressions': 'off',
|
|
62
61
|
quotes: ['error', 'single', { avoidEscape: true }],
|
|
63
|
-
'@typescript-eslint/ban-types': 'error',
|
|
62
|
+
// '@typescript-eslint/ban-types': 'error',
|
|
64
63
|
},
|
|
65
|
-
overrides: [
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
],
|
|
81
|
-
plugins: ['no-only-tests', '@typescript-eslint'],
|
|
82
|
-
|
|
64
|
+
// overrides: [
|
|
65
|
+
// {
|
|
66
|
+
// files: ['*.ts'],
|
|
67
|
+
// rules: {
|
|
68
|
+
// 'no-dupe-class-members': 'off',
|
|
69
|
+
// 'no-undef': 'off',
|
|
70
|
+
// '@typescript-eslint/explicit-function-return-type': 'error',
|
|
71
|
+
// },
|
|
72
|
+
// },
|
|
73
|
+
// {
|
|
74
|
+
// files: ['*.d.ts'],
|
|
75
|
+
// rules: {
|
|
76
|
+
// 'no-useless-constructor': 'off', // crashes on constructor declaration in .d.ts files
|
|
77
|
+
// },
|
|
78
|
+
// },
|
|
79
|
+
// ],
|
|
80
|
+
// plugins: ['no-only-tests', '@typescript-eslint'],
|
|
81
|
+
ignores: ['dist/*', '/node_modules/**'],
|
|
82
|
+
};
|
package/jest.config.js
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
globals: {
|
|
3
|
-
'ts-jest': {
|
|
4
|
-
tsconfig: 'tsconfig.json',
|
|
5
|
-
},
|
|
6
|
-
},
|
|
7
2
|
moduleFileExtensions: ['ts', 'js'],
|
|
8
3
|
transform: {
|
|
9
|
-
'^.+\\.(ts|tsx)$': 'ts-jest',
|
|
4
|
+
'^.+\\.(ts|tsx)$': ['ts-jest', { /* ts-jest config goes here in Jest */ }],
|
|
10
5
|
},
|
|
11
6
|
testRegex: '(/src/.*\\.(test|spec))\\.(jsx?|tsx?)$',
|
|
12
7
|
testEnvironment: 'node',
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "validation-br",
|
|
3
3
|
"description": "Brazilian personal documents validation - cpf, cnpj, titulo, pis/pasep, cnh, renavam, processos judiciais, protocolo federal, código de rastreamento dos correios",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.5.2",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"author": "Cláudio Medeiros <klawdyo@gmail.com>",
|
|
@@ -11,15 +11,8 @@
|
|
|
11
11
|
"test": "jest",
|
|
12
12
|
"test:watch": "jest --watch",
|
|
13
13
|
"test:coverage": "jest --collectCoverageFrom=src/**/*.ts --coverage",
|
|
14
|
-
"lint:list": "eslint */**/*.js --fix",
|
|
15
14
|
"format": "prettier --write \"./**/*.{js,ts,json}\"",
|
|
16
|
-
"prepublish": "
|
|
17
|
-
"prepare": "husky install"
|
|
18
|
-
},
|
|
19
|
-
"husky": {
|
|
20
|
-
"hooks": {
|
|
21
|
-
"pre-commit": "tsc --noEmit && lint-staged"
|
|
22
|
-
}
|
|
15
|
+
"prepublish": "npm run build"
|
|
23
16
|
},
|
|
24
17
|
"lint-staged": {
|
|
25
18
|
"*.{js,ts}": [
|
|
@@ -30,23 +23,10 @@
|
|
|
30
23
|
"devDependencies": {
|
|
31
24
|
"@types/jest": "^27.4.0",
|
|
32
25
|
"@types/node": "^14.14.2",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"eslint": "^7.11.0",
|
|
36
|
-
"eslint-config-airbnb-base": "^14.2.0",
|
|
37
|
-
"eslint-config-prettier": "^6.14.0",
|
|
38
|
-
"eslint-import-resolver-node": "^0.3.4",
|
|
39
|
-
"eslint-import-resolver-typescript": "^2.3.0",
|
|
40
|
-
"eslint-plugin-import": "^2.22.1",
|
|
41
|
-
"eslint-plugin-no-only-tests": "^2.4.0",
|
|
42
|
-
"eslint-plugin-prettier": "^3.1.4",
|
|
43
|
-
"husky": "^7.0.4",
|
|
44
|
-
"jest": "^27.4.7",
|
|
45
|
-
"lint-staged": "^10.4.2",
|
|
46
|
-
"prettier": "^2.1.2",
|
|
47
|
-
"ts-jest": "^27.1.2",
|
|
26
|
+
"jest": "^29.7.0",
|
|
27
|
+
"ts-jest": "^29.2.5",
|
|
48
28
|
"ts-node": "^9.0.0",
|
|
49
|
-
"typescript": "^
|
|
29
|
+
"typescript": "^5.6.2"
|
|
50
30
|
},
|
|
51
31
|
"repository": {
|
|
52
32
|
"url": "https://github.com/klawdyo/validation-br"
|
package/readme.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# validation-br
|
|
2
2
|
|
|
3
|
-
Biblioteca de validação de documentos pessoais do Brasil com suporte a CPF, CNPJ, Título Eleitoral, PIS/PASEP, CNH. Também valida numerações de outros tipos de registros como RENAVAM, Processos Judiciais, Número de Protocolo do Governo Federal e Objetos registrados de Rastreamento dos Correios.
|
|
3
|
+
Biblioteca de validação de documentos pessoais do Brasil com suporte a CPF, CNPJ (numérico e alfanumérico), Título Eleitoral, PIS/PASEP, CNH. Também valida numerações de outros tipos de registros como RENAVAM, Processos Judiciais, Número de Protocolo do Governo Federal e Objetos registrados de Rastreamento dos Correios.
|
|
4
4
|
|
|
5
5
|
Validation-BR também permite criação de números fake para facilitar o desenvolvimento e testes, além de aplicar máscaras e calcular somente os dígitos verificadores.
|
|
6
6
|
|
|
@@ -126,6 +126,8 @@ cnh.dv('624729276') // -> '37'
|
|
|
126
126
|
|
|
127
127
|
Valida um CNPJ
|
|
128
128
|
|
|
129
|
+
> A partir da [Nota Técnica conjunta COCAD/SUARA/RFB nº 49 de 14 de maio de 2024](https://github.com/user-attachments/files/15851229/Nota.COCAD.SUARA.2024.05.49.CNPJ.Alfanumerico-1.pdf), os números de CNPJ poderão ser alfanuméricos. A alteração entra em uso em 2026.
|
|
130
|
+
|
|
129
131
|
```js
|
|
130
132
|
// Importação somente da validação
|
|
131
133
|
import { isCNPJ } from 'validation-br'
|
|
@@ -145,6 +147,9 @@ cnpj.validateOrFail('99362238000180') //-> true
|
|
|
145
147
|
// Número fake com e sem máscara
|
|
146
148
|
cnpj.fake() // -> 55585709000198
|
|
147
149
|
cnpj.fake(true) // -> 55.585.709/0001-98
|
|
150
|
+
cnpj.fake({ withMask: true}) // -> 55.585.709/0001-98
|
|
151
|
+
cnpj.fake({ withMask: true, alphanumeric: true}) // -> A1.222.333/0001-50
|
|
152
|
+
cnpj.fake({ withMask: false, alphanumeric: true}) // -> A1222333/0001-50
|
|
148
153
|
|
|
149
154
|
// Aplica uma máscara
|
|
150
155
|
cnpj.mask('99362238000180') // -> 99.362.238/0001-80
|
|
@@ -410,12 +415,16 @@ Todos os testes passando com 100% de cobertura
|
|
|
410
415
|
|
|
411
416
|
# Github Actions
|
|
412
417
|
|
|
413
|
-
Github actions executados nas versões
|
|
418
|
+
Github actions executados nas versões 18, 20 e 22 do Node.
|
|
414
419
|
|
|
415
420
|

|
|
416
421
|
|
|
417
422
|
# Changelog
|
|
418
423
|
|
|
424
|
+
- **16/12/2023**:
|
|
425
|
+
- 1.5.0
|
|
426
|
+
- CNPJ alfanumérico
|
|
427
|
+
- Removidos github actions dos node 12, 14 e 16 e acrescentado o 22
|
|
419
428
|
- **16/12/2023**:
|
|
420
429
|
- 1.4.5
|
|
421
430
|
- Corrige o caminho da definição dos types. (Thanks @ishigami)
|