investira.sdk 2.3.2 → 2.3.3

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.
@@ -1,4 +1,14 @@
1
1
  {
2
2
  "version": "0.2.0",
3
- "configurations": []
4
- }
3
+ "configurations": [
4
+ {
5
+ "trace": true,
6
+ "name": "debug node",
7
+ "type": "node",
8
+ "request": "attach",
9
+ "restart": true,
10
+ "cwd": "${workspaceFolder}",
11
+ "port": 9233,
12
+ }
13
+ ]
14
+ }
package/CHANGELOG.md CHANGED
@@ -462,3 +462,7 @@ O contrutor para a criação das mensagem foi alterado.
462
462
  # 2.3.2
463
463
 
464
464
  - [dates] Nova função setIntervalAfterRun
465
+
466
+ # 2.3.3
467
+
468
+ - [strings] Orimização da função toTitleCase
@@ -31,6 +31,9 @@ test('\ntoTitleCase', t => {
31
31
  t.deepEqual(strings.toTitleCase('maRtin lutHer king III'), 'Martin Luther King III');
32
32
  t.deepEqual(strings.toTitleCase('maRtin lutHer king iv'), 'Martin Luther King IV');
33
33
  t.deepEqual(strings.toTitleCase('joão adalberto da silva álves'), 'João Adalberto da Silva Álves');
34
+ t.deepEqual(strings.toTitleCase("Alberto D'avila"), "Alberto D'Avila");
35
+ t.deepEqual(strings.toTitleCase('Alberto D`avila'), 'Alberto D`Avila');
36
+ t.deepEqual(strings.toTitleCase('F.a.e.'), 'F.A.E.');
34
37
  t.end();
35
38
  });
36
39
 
@@ -543,7 +543,7 @@ const dates = {
543
543
  * @returns {Date}
544
544
  */
545
545
  addWorkingDays: (pDate, pDays) => {
546
- //Força para procurar o próximo dia útil de dia atual for feriado
546
+ //Força para procurar o próximo dia útil se dia atual for feriado
547
547
  if ((isNull(pDays) || pDays === 0) && !dates.isWorkingDay(pDate)) {
548
548
  pDays = 1;
549
549
  }
@@ -3,9 +3,31 @@ const { isString, isEmpty } = require('./validators');
3
3
  const { toArray } = require('./arrays');
4
4
 
5
5
  const { InvalidData } = require('../messages/DataErrors');
6
- const toTitleCaseIgnore = ['I', 'II', 'III', 'IV', 'V', 'de', 'da', 'do', 'd', 'e', 'of', 'for', 'and'];
7
- const toTitleCaseFullUpperCase = ['i', 'ii', 'iii', 'iv', 'v'];
6
+ const toTitleCaseIgnore = ['de', 'da', 'do', 'd', 'e', 'of', 'for', 'and'];
7
+ const toTitleCaseFullUpperCase = [
8
+ 'i',
9
+ 'ii',
10
+ 'iii',
11
+ 'iv',
12
+ 'v',
13
+ 'vi',
14
+ 'vii',
15
+ 'viii',
16
+ 'ix',
17
+ 'x',
18
+ 'xi',
19
+ 'xii',
20
+ 'xiii',
21
+ 'xiv',
22
+ 'xv',
23
+ 'xvi',
24
+ 'xvii',
25
+ 'xviii',
26
+ 'xix',
27
+ 'xx'
28
+ ];
8
29
 
30
+ const toTitleCaseSeparators = ["'", '`', '.', '-', '(', ')', ':', ',', ';'];
9
31
  const strings = {
10
32
  /**
11
33
  * Substitui a ocorrência de uma string por outra
@@ -76,7 +98,7 @@ const strings = {
76
98
  },
77
99
 
78
100
  /**
79
- * Retorna string formatada como nome próprio
101
+ * Retorna uma string formatada como nome próprio, ou seja, com a primeira letra de cada palavra em maiúscula e as outras letras em minúscula, exceto palavras especiais que devem ser mantidas maiúsculas.
80
102
  *
81
103
  * @param {string} pString
82
104
  * @returns
@@ -88,22 +110,11 @@ const strings = {
88
110
  if (!isString(pString)) {
89
111
  throw new InvalidData('[spellChecker.checkTitleCase] is not a string [' + JSON.stringify(pString) + ']');
90
112
  }
91
- // return pString.replace(/(\w)(\w*)/gu, (_, i, r) => {
92
- // let j = i.toUpperCase() + (r != null ? r : '');
93
- // return xIgnore.indexOf(j.toLowerCase()) < 0 ? j : j.toLowerCase();
94
- // });
95
- let xLista = pString.split(' ');
96
- let xResult = '';
97
- for (let xPalavra of xLista) {
98
- if (toTitleCaseIgnore.includes(xPalavra)) {
99
- xResult += xPalavra + ' ';
100
- } else if (toTitleCaseFullUpperCase.includes(xPalavra)) {
101
- xResult += xPalavra.toUpperCase() + ' ';
102
- } else {
103
- xResult += xPalavra.charAt(0).toUpperCase() + xPalavra.slice(1).toLowerCase() + ' ';
104
- }
113
+ let xString = pvtoTitleCase(pString);
114
+ for (const xSepatator of toTitleCaseSeparators) {
115
+ xString = pvtoTitleCase(xString, xSepatator);
105
116
  }
106
- return xResult.trim();
117
+ return xString;
107
118
  },
108
119
  /**
109
120
  * Retorna um objeto com os paramentos da querystring
@@ -188,3 +199,36 @@ const strings = {
188
199
  };
189
200
 
190
201
  module.exports = strings;
202
+
203
+ /**
204
+ * Retorna uma string formatada como nome próprio, ou seja, com a primeira letra de cada palavra em maiúscula e as outras letras em minúscula, exceto palavras especiais que devem ser mantidas maiúsculas.
205
+ *
206
+ * @param {string} pString - A string a ser formatada.
207
+ * @param {string} [pSplit=' '] - O separador utilizado para dividir a string em palavras. Por padrão, é um espaço em branco.
208
+ * @returns {string} - A string formatada como nome próprio.
209
+ */
210
+ const pvtoTitleCase = (pString, pSplit) => {
211
+ // Define o separador padrão e converte a string para minúsculas, se o separador não foi especificado
212
+ if (!pSplit) {
213
+ pSplit = ' ';
214
+ pString = pString.toLocaleLowerCase();
215
+ }
216
+ // Divide a string em palavras e separa a primeira palavra da lista
217
+ const xPalavras = pString.split(pSplit);
218
+ const xPrimeira = xPalavras.shift();
219
+ // Formata as palavras restantes e as une em uma única string
220
+ const xPalavrasFormatadas = xPalavras.map(pWord => {
221
+ if (pSplit === ' ' && toTitleCaseIgnore.includes(pWord)) {
222
+ // Mantém a palavra em minúsculas, se for uma palavra ignorada no início de uma frase
223
+ return pWord;
224
+ } else if (toTitleCaseFullUpperCase.includes(pWord)) {
225
+ // Mantém a palavra em maiúsculas, se for uma palavra especial
226
+ return pWord.toUpperCase();
227
+ } else {
228
+ // Formata a palavra normalmente
229
+ return pWord.charAt(0).toUpperCase() + pWord.slice(1);
230
+ }
231
+ });
232
+ // Retorna a primeira palavra formatada e as palavras restantes unidas em uma única string, separadas pelo separador especificado
233
+ return [xPrimeira.charAt(0).toUpperCase() + xPrimeira.slice(1), ...xPalavrasFormatadas].join(pSplit);
234
+ };
@@ -1,4 +1,5 @@
1
- const EMAIL_REGEX = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
1
+ const EMAIL_REGEX =
2
+ /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
2
3
 
3
4
  const validators = {
4
5
  /**
package/nodemon.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "execMap": {
3
- "js": "node --inspect=9239"
3
+ "js": "node --inspect=9233 --trace-warnings "
4
4
  }
5
5
  }
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "investira.sdk",
3
- "version": "2.3.2",
3
+ "version": "2.3.3",
4
4
  "author": "Investira",
5
5
  "description": "Investira SDK",
6
6
  "main": "index.js",
7
7
  "type": "commonjs",
8
8
  "registry": true,
9
- "raw": "investira.sdk@2.3.2",
9
+ "raw": "investira.sdk@2.3.3",
10
10
  "escapedName": "investira.sdk",
11
- "rawSpec": "2.3.2",
11
+ "rawSpec": "2.3.3",
12
12
  "saveSpec": null,
13
- "fetchSpec": "2.3.2",
13
+ "fetchSpec": "2.3.3",
14
14
  "homepage": "https://investira.com.br/",
15
15
  "engines": {
16
16
  "node": ">=11.11.0 <=18.12",