@greatapps/common 1.1.680 → 1.1.681

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.
@@ -32,7 +32,8 @@ function trimOrDefault(value, fallback) {
32
32
  return trimmed.length > 0 ? trimmed : fallback;
33
33
  }
34
34
  function isValidCPF(value) {
35
- const digits = (value || "").replace(/\D/g, "");
35
+ if (value == null) return false;
36
+ const digits = value.replace(/\D/g, "");
36
37
  if (digits.length !== 11) return false;
37
38
  if (/^(\d)\1{10}$/.test(digits)) return false;
38
39
  const calcCheckDigit = (sliceLength) => {
@@ -46,7 +47,8 @@ function isValidCPF(value) {
46
47
  return calcCheckDigit(9) === parseInt(digits.charAt(9), 10) && calcCheckDigit(10) === parseInt(digits.charAt(10), 10);
47
48
  }
48
49
  function isValidCNPJ(value) {
49
- const digits = (value || "").replace(/\D/g, "");
50
+ if (value == null) return false;
51
+ const digits = value.replace(/\D/g, "");
50
52
  if (digits.length !== 14) return false;
51
53
  if (/^(\d)\1{13}$/.test(digits)) return false;
52
54
  const calcCheckDigit = (sliceLength) => {
@@ -61,7 +63,13 @@ function isValidCNPJ(value) {
61
63
  return calcCheckDigit(12) === parseInt(digits.charAt(12), 10) && calcCheckDigit(13) === parseInt(digits.charAt(13), 10);
62
64
  }
63
65
  function isValidTaxId(value, type) {
64
- return type === "cnpj" ? isValidCNPJ(value) : isValidCPF(value);
66
+ if (type === "cnpj") return isValidCNPJ(value);
67
+ if (type === "cpf") return isValidCPF(value);
68
+ if (value == null) return false;
69
+ const digits = value.replace(/\D/g, "");
70
+ if (digits.length === 11) return isValidCPF(digits);
71
+ if (digits.length === 14) return isValidCNPJ(digits);
72
+ return false;
65
73
  }
66
74
  export {
67
75
  MIN_PHONE_LENGTH,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/validators/common.ts"],"sourcesContent":["export function isValidEmail(value: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(value.trim());\r\n}\r\n\r\nexport function isNumericString(value: string): boolean {\r\n return /^\\d+$/.test(value);\r\n}\r\n\r\nexport function clampNumber(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nexport function isInRange(value: number, min: number, max: number): boolean {\r\n return !isNaN(value) && value >= min && value <= max;\r\n}\r\n\r\nexport function isConfirmationMatch(input: string, expected: string): boolean {\r\n return input === expected;\r\n}\r\n\r\nexport function hasExactLength(value: string, length: number): boolean {\r\n return value.length === length;\r\n}\r\n\r\nexport function hasMinLength(value: string, minLength: number): boolean {\r\n return value.length >= minLength;\r\n}\r\n\r\nexport function areFieldsRequired(...values: string[]): boolean {\r\n return values.every((v) => v.trim().length > 0);\r\n}\r\n\r\nexport const MIN_PHONE_LENGTH = 14;\r\n\r\nexport function isNonEmptyString(value: string): boolean {\r\n return value.trim().length > 0;\r\n}\r\n\r\nexport function trimOrDefault(value: string, fallback: string): string {\r\n const trimmed = value.trim();\r\n return trimmed.length > 0 ? trimmed : fallback;\r\n}\r\n\r\nexport function isValidCPF(value: string): boolean {\r\n const digits = (value || '').replace(/\\D/g, '');\r\n if (digits.length !== 11) return false;\r\n if (/^(\\d)\\1{10}$/.test(digits)) return false;\r\n const calcCheckDigit = (sliceLength: number): number => {\r\n let sum = 0;\r\n for (let i = 0; i < sliceLength; i++) {\r\n sum += parseInt(digits.charAt(i), 10) * (sliceLength + 1 - i);\r\n }\r\n const remainder = (sum * 10) % 11;\r\n return remainder === 10 ? 0 : remainder;\r\n };\r\n return calcCheckDigit(9) === parseInt(digits.charAt(9), 10) && calcCheckDigit(10) === parseInt(digits.charAt(10), 10);\r\n}\r\n\r\nexport function isValidCNPJ(value: string): boolean {\r\n const digits = (value || '').replace(/\\D/g, '');\r\n if (digits.length !== 14) return false;\r\n if (/^(\\d)\\1{13}$/.test(digits)) return false;\r\n const calcCheckDigit = (sliceLength: number): number => {\r\n const weights = sliceLength === 12 ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\r\n let sum = 0;\r\n for (let i = 0; i < sliceLength; i++) {\r\n sum += parseInt(digits.charAt(i), 10) * weights[i];\r\n }\r\n const remainder = sum % 11;\r\n return remainder < 2 ? 0 : 11 - remainder;\r\n };\r\n return calcCheckDigit(12) === parseInt(digits.charAt(12), 10) && calcCheckDigit(13) === parseInt(digits.charAt(13), 10);\r\n}\r\n\r\nexport function isValidTaxId(value: string, type: 'cpf' | 'cnpj'): boolean {\r\n return type === 'cnpj' ? isValidCNPJ(value) : isValidCPF(value);\r\n}\r\n"],"mappings":"AAAO,SAAS,aAAa,OAAwB;AACnD,QAAM,aAAa;AACnB,SAAO,WAAW,KAAK,MAAM,KAAK,CAAC;AACrC;AAEO,SAAS,gBAAgB,OAAwB;AACtD,SAAO,QAAQ,KAAK,KAAK;AAC3B;AAEO,SAAS,YAAY,OAAe,KAAa,KAAqB;AAC3E,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;AAEO,SAAS,UAAU,OAAe,KAAa,KAAsB;AAC1E,SAAO,CAAC,MAAM,KAAK,KAAK,SAAS,OAAO,SAAS;AACnD;AAEO,SAAS,oBAAoB,OAAe,UAA2B;AAC5E,SAAO,UAAU;AACnB;AAEO,SAAS,eAAe,OAAe,QAAyB;AACrE,SAAO,MAAM,WAAW;AAC1B;AAEO,SAAS,aAAa,OAAe,WAA4B;AACtE,SAAO,MAAM,UAAU;AACzB;AAEO,SAAS,qBAAqB,QAA2B;AAC9D,SAAO,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC;AAChD;AAEO,MAAM,mBAAmB;AAEzB,SAAS,iBAAiB,OAAwB;AACvD,SAAO,MAAM,KAAK,EAAE,SAAS;AAC/B;AAEO,SAAS,cAAc,OAAe,UAA0B;AACrE,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,QAAQ,SAAS,IAAI,UAAU;AACxC;AAEO,SAAS,WAAW,OAAwB;AACjD,QAAM,UAAU,SAAS,IAAI,QAAQ,OAAO,EAAE;AAC9C,MAAI,OAAO,WAAW,GAAI,QAAO;AACjC,MAAI,eAAe,KAAK,MAAM,EAAG,QAAO;AACxC,QAAM,iBAAiB,CAAC,gBAAgC;AACtD,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,aAAO,SAAS,OAAO,OAAO,CAAC,GAAG,EAAE,KAAK,cAAc,IAAI;AAAA,IAC7D;AACA,UAAM,YAAa,MAAM,KAAM;AAC/B,WAAO,cAAc,KAAK,IAAI;AAAA,EAChC;AACA,SAAO,eAAe,CAAC,MAAM,SAAS,OAAO,OAAO,CAAC,GAAG,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,OAAO,OAAO,EAAE,GAAG,EAAE;AACtH;AAEO,SAAS,YAAY,OAAwB;AAClD,QAAM,UAAU,SAAS,IAAI,QAAQ,OAAO,EAAE;AAC9C,MAAI,OAAO,WAAW,GAAI,QAAO;AACjC,MAAI,eAAe,KAAK,MAAM,EAAG,QAAO;AACxC,QAAM,iBAAiB,CAAC,gBAAgC;AACtD,UAAM,UAAU,gBAAgB,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClH,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,aAAO,SAAS,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;AAAA,IACnD;AACA,UAAM,YAAY,MAAM;AACxB,WAAO,YAAY,IAAI,IAAI,KAAK;AAAA,EAClC;AACA,SAAO,eAAe,EAAE,MAAM,SAAS,OAAO,OAAO,EAAE,GAAG,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,OAAO,OAAO,EAAE,GAAG,EAAE;AACxH;AAEO,SAAS,aAAa,OAAe,MAA+B;AACzE,SAAO,SAAS,SAAS,YAAY,KAAK,IAAI,WAAW,KAAK;AAChE;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/validators/common.ts"],"sourcesContent":["export function isValidEmail(value: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(value.trim());\r\n}\r\n\r\nexport function isNumericString(value: string): boolean {\r\n return /^\\d+$/.test(value);\r\n}\r\n\r\nexport function clampNumber(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\nexport function isInRange(value: number, min: number, max: number): boolean {\r\n return !isNaN(value) && value >= min && value <= max;\r\n}\r\n\r\nexport function isConfirmationMatch(input: string, expected: string): boolean {\r\n return input === expected;\r\n}\r\n\r\nexport function hasExactLength(value: string, length: number): boolean {\r\n return value.length === length;\r\n}\r\n\r\nexport function hasMinLength(value: string, minLength: number): boolean {\r\n return value.length >= minLength;\r\n}\r\n\r\nexport function areFieldsRequired(...values: string[]): boolean {\r\n return values.every((v) => v.trim().length > 0);\r\n}\r\n\r\nexport const MIN_PHONE_LENGTH = 14;\r\n\r\nexport function isNonEmptyString(value: string): boolean {\r\n return value.trim().length > 0;\r\n}\r\n\r\nexport function trimOrDefault(value: string, fallback: string): string {\r\n const trimmed = value.trim();\r\n return trimmed.length > 0 ? trimmed : fallback;\r\n}\r\n\r\nexport function isValidCPF(value: string | null | undefined): boolean {\r\n if (value == null) return false;\r\n const digits = value.replace(/\\D/g, '');\r\n if (digits.length !== 11) return false;\r\n if (/^(\\d)\\1{10}$/.test(digits)) return false;\r\n const calcCheckDigit = (sliceLength: number): number => {\r\n let sum = 0;\r\n for (let i = 0; i < sliceLength; i++) {\r\n sum += parseInt(digits.charAt(i), 10) * (sliceLength + 1 - i);\r\n }\r\n const remainder = (sum * 10) % 11;\r\n return remainder === 10 ? 0 : remainder;\r\n };\r\n return calcCheckDigit(9) === parseInt(digits.charAt(9), 10) && calcCheckDigit(10) === parseInt(digits.charAt(10), 10);\r\n}\r\n\r\nexport function isValidCNPJ(value: string | null | undefined): boolean {\r\n if (value == null) return false;\r\n const digits = value.replace(/\\D/g, '');\r\n if (digits.length !== 14) return false;\r\n if (/^(\\d)\\1{13}$/.test(digits)) return false;\r\n const calcCheckDigit = (sliceLength: number): number => {\r\n const weights = sliceLength === 12 ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\r\n let sum = 0;\r\n for (let i = 0; i < sliceLength; i++) {\r\n sum += parseInt(digits.charAt(i), 10) * weights[i];\r\n }\r\n const remainder = sum % 11;\r\n return remainder < 2 ? 0 : 11 - remainder;\r\n };\r\n return calcCheckDigit(12) === parseInt(digits.charAt(12), 10) && calcCheckDigit(13) === parseInt(digits.charAt(13), 10);\r\n}\r\n\r\n/**\r\n * Valida CPF ou CNPJ. Quando `type` é omitido, infere pelo tamanho:\r\n * 11 dígitos → CPF, 14 dígitos → CNPJ, qualquer outro → inválido.\r\n */\r\nexport function isValidTaxId(value: string | null | undefined, type?: 'cpf' | 'cnpj'): boolean {\r\n if (type === 'cnpj') return isValidCNPJ(value);\r\n if (type === 'cpf') return isValidCPF(value);\r\n if (value == null) return false;\r\n const digits = value.replace(/\\D/g, '');\r\n if (digits.length === 11) return isValidCPF(digits);\r\n if (digits.length === 14) return isValidCNPJ(digits);\r\n return false;\r\n}\r\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@greatapps/common",
3
- "version": "1.1.680",
3
+ "version": "1.1.681",
4
4
  "description": "Shared library for GreatApps frontend applications",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./src/index.ts",
@@ -42,8 +42,9 @@ export function trimOrDefault(value: string, fallback: string): string {
42
42
  return trimmed.length > 0 ? trimmed : fallback;
43
43
  }
44
44
 
45
- export function isValidCPF(value: string): boolean {
46
- const digits = (value || '').replace(/\D/g, '');
45
+ export function isValidCPF(value: string | null | undefined): boolean {
46
+ if (value == null) return false;
47
+ const digits = value.replace(/\D/g, '');
47
48
  if (digits.length !== 11) return false;
48
49
  if (/^(\d)\1{10}$/.test(digits)) return false;
49
50
  const calcCheckDigit = (sliceLength: number): number => {
@@ -57,8 +58,9 @@ export function isValidCPF(value: string): boolean {
57
58
  return calcCheckDigit(9) === parseInt(digits.charAt(9), 10) && calcCheckDigit(10) === parseInt(digits.charAt(10), 10);
58
59
  }
59
60
 
60
- export function isValidCNPJ(value: string): boolean {
61
- const digits = (value || '').replace(/\D/g, '');
61
+ export function isValidCNPJ(value: string | null | undefined): boolean {
62
+ if (value == null) return false;
63
+ const digits = value.replace(/\D/g, '');
62
64
  if (digits.length !== 14) return false;
63
65
  if (/^(\d)\1{13}$/.test(digits)) return false;
64
66
  const calcCheckDigit = (sliceLength: number): number => {
@@ -73,6 +75,16 @@ export function isValidCNPJ(value: string): boolean {
73
75
  return calcCheckDigit(12) === parseInt(digits.charAt(12), 10) && calcCheckDigit(13) === parseInt(digits.charAt(13), 10);
74
76
  }
75
77
 
76
- export function isValidTaxId(value: string, type: 'cpf' | 'cnpj'): boolean {
77
- return type === 'cnpj' ? isValidCNPJ(value) : isValidCPF(value);
78
+ /**
79
+ * Valida CPF ou CNPJ. Quando `type` é omitido, infere pelo tamanho:
80
+ * 11 dígitos → CPF, 14 dígitos → CNPJ, qualquer outro → inválido.
81
+ */
82
+ export function isValidTaxId(value: string | null | undefined, type?: 'cpf' | 'cnpj'): boolean {
83
+ if (type === 'cnpj') return isValidCNPJ(value);
84
+ if (type === 'cpf') return isValidCPF(value);
85
+ if (value == null) return false;
86
+ const digits = value.replace(/\D/g, '');
87
+ if (digits.length === 11) return isValidCPF(digits);
88
+ if (digits.length === 14) return isValidCNPJ(digits);
89
+ return false;
78
90
  }