@atlantjs/arch 13.3.0 → 14.0.1

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.
Files changed (50) hide show
  1. package/@tool-box/utils/datatypes/boolean-utils.d.ts +7 -0
  2. package/@tool-box/utils/datatypes/boolean-utils.js +146 -4
  3. package/@tool-box/utils/datatypes/string-utils.d.ts +32 -4
  4. package/@tool-box/utils/datatypes/string-utils.js +303 -14
  5. package/@tool-box/utils/ducts/common.d.ts +49 -0
  6. package/@tool-box/utils/ducts/common.js +36 -3
  7. package/@tool-box/utils/ducts/optional-type.d.ts +85 -0
  8. package/@tool-box/utils/ducts/optional-type.js +79 -0
  9. package/@tool-box/utils/ducts/return-type.d.ts +17 -17
  10. package/@tool-box/utils/ducts/return-type.js +14 -4
  11. package/@tool-box/utils/http-provider/http-provider.d.ts +6 -0
  12. package/@tool-box/utils/http-provider/http-provider.js +43 -14
  13. package/@tool-box/utils/map/map.abstract.d.ts +39 -0
  14. package/@tool-box/utils/map/map.abstract.js +70 -6
  15. package/@tool-box/utils/random/random.d.ts +168 -0
  16. package/@tool-box/utils/random/random.js +235 -0
  17. package/@tool-box/utils/type-guard/guardian.d.ts +450 -7
  18. package/@tool-box/utils/type-guard/guardian.js +539 -35
  19. package/objects/@common/edges/cron-expression.edge.d.ts +30 -2
  20. package/objects/@common/edges/cron-expression.edge.js +77 -5
  21. package/objects/@common/edges/email.edge.d.ts +39 -1
  22. package/objects/@common/edges/email.edge.js +80 -2
  23. package/objects/@common/edges/ulid.sketch.edge.d.ts +48 -1
  24. package/objects/@common/edges/ulid.sketch.edge.js +75 -4
  25. package/objects/@common/edges/url.edge.d.ts +182 -0
  26. package/objects/@common/edges/url.edge.js +249 -0
  27. package/objects/@common/edges/username.edge.d.ts +9 -0
  28. package/objects/@common/edges/username.edge.js +34 -0
  29. package/objects/@common/edges/uuid.sketch.edge.d.ts +97 -1
  30. package/objects/@common/edges/uuid.sketch.edge.js +127 -6
  31. package/objects/amount/amount-value.edge.d.ts +39 -0
  32. package/objects/amount/amount-value.edge.js +69 -0
  33. package/objects/amount/amount.edge.d.ts +378 -2
  34. package/objects/amount/amount.edge.js +493 -4
  35. package/objects/datetime/edges/datetime.edge.d.ts +422 -4
  36. package/objects/datetime/edges/datetime.edge.js +538 -33
  37. package/objects/password/password.edge.d.ts +90 -0
  38. package/objects/password/password.edge.js +140 -6
  39. package/objects/primitives/boolean.edge.sketch.d.ts +105 -3
  40. package/objects/primitives/boolean.edge.sketch.js +132 -6
  41. package/objects/primitives/number.edge.sketch.d.ts +236 -0
  42. package/objects/primitives/number.edge.sketch.js +310 -24
  43. package/objects/primitives/string.edge.sketch.d.ts +148 -0
  44. package/objects/primitives/string.edge.sketch.js +191 -7
  45. package/objects/schedule/schedule.edge.d.ts +194 -0
  46. package/objects/schedule/schedule.edge.js +269 -2
  47. package/objects/time/time.edge.d.ts +285 -2
  48. package/objects/time/time.edge.js +385 -6
  49. package/package.json +1 -1
  50. package/tsconfig.tsbuildinfo +1 -1
@@ -1,13 +1,249 @@
1
1
  export declare abstract class NumberEdgeSketch {
2
2
  private value;
3
3
  constructor(value: number);
4
+ /**
5
+ * Retorna o valor numérico interno.
6
+ * @returns Número interno do edge
7
+ * @example
8
+ * new MyNumberEdge(42).toNumber() // 42
9
+ */
4
10
  toNumber(): number;
11
+ /**
12
+ * Retorna o valor como string.
13
+ * @returns String representando o número
14
+ * @example
15
+ * new MyNumberEdge(42).toString() // "42"
16
+ */
17
+ toString(): string;
18
+ /**
19
+ * Retorna o valor absoluto do número.
20
+ * @returns Valor absoluto (sempre positivo)
21
+ * @example
22
+ * new MyNumberEdge(-5).toAbsolute() // 5
23
+ * new MyNumberEdge(5).toAbsolute() // 5
24
+ */
25
+ toAbsolute(): number;
26
+ /**
27
+ * Retorna o número fixado com casas decimais.
28
+ * @param decimalPlaces - Número de casas decimais (padrão: 2)
29
+ * @returns String com o número formatado
30
+ * @example
31
+ * new MyNumberEdge(3.14159).toFixed(2) // "3.14"
32
+ * new MyNumberEdge(3).toFixed(2) // "3.00"
33
+ */
34
+ toFixed(decimalPlaces?: number): string;
35
+ /**
36
+ * Verifica se este valor é igual a outro.
37
+ * @param value - Número ou NumberEdgeSketch para comparação
38
+ * @returns true se os valores são iguais, false caso contrário
39
+ * @example
40
+ * new MyNumberEdge(5).isEqual(5) // true
41
+ * new MyNumberEdge(5).isEqual(6) // false
42
+ */
5
43
  isEqual(value: number | NumberEdgeSketch): boolean;
44
+ /**
45
+ * Verifica se este valor é diferente de outro.
46
+ * @param value - Número ou NumberEdgeSketch para comparação
47
+ * @returns true se os valores são diferentes, false caso contrário
48
+ * @example
49
+ * new MyNumberEdge(5).isDifferent(6) // true
50
+ * new MyNumberEdge(5).isDifferent(5) // false
51
+ */
6
52
  isDifferent(value: number | NumberEdgeSketch): boolean;
53
+ /**
54
+ * Verifica se este valor é maior que outro.
55
+ * @param value - Número ou NumberEdgeSketch para comparação
56
+ * @returns true se this > value, false caso contrário
57
+ * @example
58
+ * new MyNumberEdge(10).isBiggerThan(5) // true
59
+ * new MyNumberEdge(3).isBiggerThan(5) // false
60
+ */
7
61
  isBiggerThan(value: number | NumberEdgeSketch): boolean;
62
+ /**
63
+ * Verifica se este valor é menor que outro.
64
+ * @param value - Número ou NumberEdgeSketch para comparação
65
+ * @returns true se this < value, false caso contrário
66
+ * @example
67
+ * new MyNumberEdge(3).isSmallerThan(5) // true
68
+ * new MyNumberEdge(10).isSmallerThan(5) // false
69
+ */
8
70
  isSmallerThan(value: number | NumberEdgeSketch): boolean;
71
+ /**
72
+ * Verifica se este valor é maior ou igual a outro.
73
+ * @param value - Número ou NumberEdgeSketch para comparação
74
+ * @returns true se this >= value, false caso contrário
75
+ * @example
76
+ * new MyNumberEdge(5).isEqualOrBiggerThan(5) // true
77
+ * new MyNumberEdge(6).isEqualOrBiggerThan(5) // true
78
+ * new MyNumberEdge(4).isEqualOrBiggerThan(5) // false
79
+ */
9
80
  isEqualOrBiggerThan(value: number | NumberEdgeSketch): boolean;
81
+ /**
82
+ * Verifica se este valor é menor ou igual a outro.
83
+ * @param value - Número ou NumberEdgeSketch para comparação
84
+ * @returns true se this <= value, false caso contrário
85
+ * @example
86
+ * new MyNumberEdge(5).isEqualOrSmallerThan(5) // true
87
+ * new MyNumberEdge(4).isEqualOrSmallerThan(5) // true
88
+ * new MyNumberEdge(6).isEqualOrSmallerThan(5) // false
89
+ */
10
90
  isEqualOrSmallerThan(value: number | NumberEdgeSketch): boolean;
91
+ /**
92
+ * Verifica se este valor está entre dois limites (inclusivo).
93
+ * @param min - Limite mínimo
94
+ * @param max - Limite máximo
95
+ * @returns true se min <= this <= max, false caso contrário
96
+ * @example
97
+ * new MyNumberEdge(5).isBetween(1, 10) // true
98
+ * new MyNumberEdge(15).isBetween(1, 10) // false
99
+ */
11
100
  isBetween(min: number | NumberEdgeSketch, max: number | NumberEdgeSketch): boolean;
101
+ /**
102
+ * Verifica se o número é positivo (maior que zero).
103
+ * @returns true se o número é positivo, false caso contrário
104
+ * @example
105
+ * new MyNumberEdge(5).isPositive() // true
106
+ * new MyNumberEdge(-5).isPositive() // false
107
+ * new MyNumberEdge(0).isPositive() // false
108
+ */
109
+ isPositive(): boolean;
110
+ /**
111
+ * Verifica se o número é negativo (menor que zero).
112
+ * @returns true se o número é negativo, false caso contrário
113
+ * @example
114
+ * new MyNumberEdge(-5).isNegative() // true
115
+ * new MyNumberEdge(5).isNegative() // false
116
+ * new MyNumberEdge(0).isNegative() // false
117
+ */
118
+ isNegative(): boolean;
119
+ /**
120
+ * Verifica se o número é zero.
121
+ * @returns true se o número é zero, false caso contrário
122
+ * @example
123
+ * new MyNumberEdge(0).isZero() // true
124
+ * new MyNumberEdge(1).isZero() // false
125
+ */
126
+ isZero(): boolean;
127
+ /**
128
+ * Verifica se o número é inteiro (sem casas decimais).
129
+ * @returns true se o número é inteiro, false caso contrário
130
+ * @example
131
+ * new MyNumberEdge(5).isInteger() // true
132
+ * new MyNumberEdge(5.5).isInteger() // false
133
+ */
134
+ isInteger(): boolean;
135
+ /**
136
+ * Verifica se o número é float (possui casas decimais).
137
+ * @returns true se o número é float, false caso contrário
138
+ * @example
139
+ * new MyNumberEdge(5.5).isFloat() // true
140
+ * new MyNumberEdge(5).isFloat() // false
141
+ */
142
+ isFloat(): boolean;
143
+ /**
144
+ * Verifica se o número é par.
145
+ * @returns true se o número é par, false caso contrário
146
+ * @example
147
+ * new MyNumberEdge(4).isEven() // true
148
+ * new MyNumberEdge(5).isEven() // false
149
+ */
150
+ isEven(): boolean;
151
+ /**
152
+ * Verifica se o número é ímpar.
153
+ * @returns true se o número é ímpar, false caso contrário
154
+ * @example
155
+ * new MyNumberEdge(5).isOdd() // true
156
+ * new MyNumberEdge(4).isOdd() // false
157
+ */
158
+ isOdd(): boolean;
159
+ /**
160
+ * Soma este valor com outro e retorna o resultado.
161
+ * @param value - Número ou NumberEdgeSketch a somar
162
+ * @returns Resultado da soma
163
+ * @example
164
+ * new MyNumberEdge(5).add(3) // 8
165
+ */
166
+ add(value: number | NumberEdgeSketch): number;
167
+ /**
168
+ * Subtrai outro valor deste e retorna o resultado.
169
+ * @param value - Número ou NumberEdgeSketch a subtrair
170
+ * @returns Resultado da subtração
171
+ * @example
172
+ * new MyNumberEdge(10).subtract(3) // 7
173
+ */
174
+ subtract(value: number | NumberEdgeSketch): number;
175
+ /**
176
+ * Multiplica este valor por outro e retorna o resultado.
177
+ * @param value - Número ou NumberEdgeSketch a multiplicar
178
+ * @returns Resultado da multiplicação
179
+ * @example
180
+ * new MyNumberEdge(5).multiply(3) // 15
181
+ */
182
+ multiply(value: number | NumberEdgeSketch): number;
183
+ /**
184
+ * Divide este valor por outro e retorna o resultado.
185
+ * @param value - Número ou NumberEdgeSketch divisor
186
+ * @returns Resultado da divisão
187
+ * @throws {Error} Se o divisor for zero
188
+ * @example
189
+ * new MyNumberEdge(10).divide(2) // 5
190
+ */
191
+ divide(value: number | NumberEdgeSketch): number;
192
+ /**
193
+ * Retorna o resto da divisão deste valor por outro.
194
+ * @param value - Número ou NumberEdgeSketch divisor
195
+ * @returns Resto da divisão
196
+ * @throws {Error} Se o divisor for zero
197
+ * @example
198
+ * new MyNumberEdge(10).modulo(3) // 1
199
+ */
200
+ modulo(value: number | NumberEdgeSketch): number;
201
+ /**
202
+ * Eleva este valor à potência de outro.
203
+ * @param exponent - Expoente da potenciação
204
+ * @returns Resultado da potenciação
205
+ * @throws {TypeError} Se o expoente não for finito
206
+ * @example
207
+ * new MyNumberEdge(2).power(8) // 256
208
+ * new MyNumberEdge(5).power(2) // 25
209
+ */
210
+ power(exponent: number): number;
211
+ /**
212
+ * Retorna a raiz quadrada do número.
213
+ * @returns Raiz quadrada do valor
214
+ * @throws {Error} Se o número for negativo
215
+ * @example
216
+ * new MyNumberEdge(9).sqrt() // 3
217
+ * new MyNumberEdge(16).sqrt() // 4
218
+ */
219
+ sqrt(): number;
220
+ /**
221
+ * Arredonda o número para o inteiro mais próximo.
222
+ * @returns Número arredondado
223
+ * @example
224
+ * new MyNumberEdge(4.5).round() // 5
225
+ * new MyNumberEdge(4.4).round() // 4
226
+ */
227
+ round(): number;
228
+ /**
229
+ * Arredonda o número para baixo (floor).
230
+ * @returns Maior inteiro menor ou igual ao número
231
+ * @example
232
+ * new MyNumberEdge(4.9).floor() // 4
233
+ * new MyNumberEdge(-4.1).floor() // -5
234
+ */
235
+ floor(): number;
236
+ /**
237
+ * Arredonda o número para cima (ceil).
238
+ * @returns Menor inteiro maior ou igual ao número
239
+ * @example
240
+ * new MyNumberEdge(4.1).ceil() // 5
241
+ * new MyNumberEdge(-4.9).ceil() // -4
242
+ */
243
+ ceil(): number;
244
+ /**
245
+ * Valida se o valor fornecido no construtor é um número válido.
246
+ * @throws {TypeError} Se o valor for NaN
247
+ */
12
248
  private validate;
13
249
  }
@@ -7,50 +7,336 @@ class NumberEdgeSketch {
7
7
  this.value = value;
8
8
  this.validate(value);
9
9
  }
10
+ // ==================== Getters ====================
11
+ /**
12
+ * Retorna o valor numérico interno.
13
+ * @returns Número interno do edge
14
+ * @example
15
+ * new MyNumberEdge(42).toNumber() // 42
16
+ */
10
17
  toNumber() {
11
18
  return this.value;
12
19
  }
20
+ /**
21
+ * Retorna o valor como string.
22
+ * @returns String representando o número
23
+ * @example
24
+ * new MyNumberEdge(42).toString() // "42"
25
+ */
26
+ toString() {
27
+ return String(this.value);
28
+ }
29
+ /**
30
+ * Retorna o valor absoluto do número.
31
+ * @returns Valor absoluto (sempre positivo)
32
+ * @example
33
+ * new MyNumberEdge(-5).toAbsolute() // 5
34
+ * new MyNumberEdge(5).toAbsolute() // 5
35
+ */
36
+ toAbsolute() {
37
+ return Math.abs(this.value);
38
+ }
39
+ /**
40
+ * Retorna o número fixado com casas decimais.
41
+ * @param decimalPlaces - Número de casas decimais (padrão: 2)
42
+ * @returns String com o número formatado
43
+ * @example
44
+ * new MyNumberEdge(3.14159).toFixed(2) // "3.14"
45
+ * new MyNumberEdge(3).toFixed(2) // "3.00"
46
+ */
47
+ toFixed(decimalPlaces = 2) {
48
+ return this.value.toFixed(decimalPlaces);
49
+ }
50
+ // ==================== Comparações ====================
51
+ /**
52
+ * Verifica se este valor é igual a outro.
53
+ * @param value - Número ou NumberEdgeSketch para comparação
54
+ * @returns true se os valores são iguais, false caso contrário
55
+ * @example
56
+ * new MyNumberEdge(5).isEqual(5) // true
57
+ * new MyNumberEdge(5).isEqual(6) // false
58
+ */
13
59
  isEqual(value) {
14
- if (value instanceof NumberEdgeSketch) {
15
- return value.toNumber() === this.value;
16
- }
17
- return this.value === value;
60
+ const comparand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
61
+ return this.value === comparand;
18
62
  }
63
+ /**
64
+ * Verifica se este valor é diferente de outro.
65
+ * @param value - Número ou NumberEdgeSketch para comparação
66
+ * @returns true se os valores são diferentes, false caso contrário
67
+ * @example
68
+ * new MyNumberEdge(5).isDifferent(6) // true
69
+ * new MyNumberEdge(5).isDifferent(5) // false
70
+ */
19
71
  isDifferent(value) {
20
- if (value instanceof NumberEdgeSketch) {
21
- return value.toNumber() !== this.value;
22
- }
23
- return this.value !== value;
72
+ const comparand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
73
+ return this.value !== comparand;
24
74
  }
75
+ /**
76
+ * Verifica se este valor é maior que outro.
77
+ * @param value - Número ou NumberEdgeSketch para comparação
78
+ * @returns true se this > value, false caso contrário
79
+ * @example
80
+ * new MyNumberEdge(10).isBiggerThan(5) // true
81
+ * new MyNumberEdge(3).isBiggerThan(5) // false
82
+ */
25
83
  isBiggerThan(value) {
26
- if (value instanceof NumberEdgeSketch) {
27
- return value.toNumber() > this.value;
28
- }
29
- return this.value > value;
84
+ const comparand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
85
+ return this.value > comparand; // 🐛 fix: estava value.toNumber() > this.value (invertido)
30
86
  }
87
+ /**
88
+ * Verifica se este valor é menor que outro.
89
+ * @param value - Número ou NumberEdgeSketch para comparação
90
+ * @returns true se this < value, false caso contrário
91
+ * @example
92
+ * new MyNumberEdge(3).isSmallerThan(5) // true
93
+ * new MyNumberEdge(10).isSmallerThan(5) // false
94
+ */
31
95
  isSmallerThan(value) {
32
- if (value instanceof NumberEdgeSketch) {
33
- return value.toNumber() < this.value;
34
- }
35
- return this.value < value;
96
+ const comparand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
97
+ return this.value < comparand; // 🐛 fix: estava value.toNumber() < this.value (invertido)
36
98
  }
99
+ /**
100
+ * Verifica se este valor é maior ou igual a outro.
101
+ * @param value - Número ou NumberEdgeSketch para comparação
102
+ * @returns true se this >= value, false caso contrário
103
+ * @example
104
+ * new MyNumberEdge(5).isEqualOrBiggerThan(5) // true
105
+ * new MyNumberEdge(6).isEqualOrBiggerThan(5) // true
106
+ * new MyNumberEdge(4).isEqualOrBiggerThan(5) // false
107
+ */
37
108
  isEqualOrBiggerThan(value) {
38
- if (value instanceof NumberEdgeSketch) {
39
- return value.toNumber() >= this.value;
40
- }
41
- return this.value >= value;
109
+ const comparand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
110
+ return this.value >= comparand; // 🐛 fix: estava value.toNumber() >= this.value (invertido)
42
111
  }
112
+ /**
113
+ * Verifica se este valor é menor ou igual a outro.
114
+ * @param value - Número ou NumberEdgeSketch para comparação
115
+ * @returns true se this <= value, false caso contrário
116
+ * @example
117
+ * new MyNumberEdge(5).isEqualOrSmallerThan(5) // true
118
+ * new MyNumberEdge(4).isEqualOrSmallerThan(5) // true
119
+ * new MyNumberEdge(6).isEqualOrSmallerThan(5) // false
120
+ */
43
121
  isEqualOrSmallerThan(value) {
44
- if (value instanceof NumberEdgeSketch) {
45
- return value.toNumber() <= this.value;
46
- }
47
- return this.value <= value;
122
+ const comparand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
123
+ return this.value <= comparand; // 🐛 fix: estava value.toNumber() <= this.value (invertido)
48
124
  }
125
+ /**
126
+ * Verifica se este valor está entre dois limites (inclusivo).
127
+ * @param min - Limite mínimo
128
+ * @param max - Limite máximo
129
+ * @returns true se min <= this <= max, false caso contrário
130
+ * @example
131
+ * new MyNumberEdge(5).isBetween(1, 10) // true
132
+ * new MyNumberEdge(15).isBetween(1, 10) // false
133
+ */
49
134
  isBetween(min, max) {
50
135
  const minimus = min instanceof NumberEdgeSketch ? min.toNumber() : min;
51
136
  const maximus = max instanceof NumberEdgeSketch ? max.toNumber() : max;
52
137
  return guardian_1._.isBetween(this.value, minimus, maximus);
53
138
  }
139
+ // ==================== Verificações ====================
140
+ /**
141
+ * Verifica se o número é positivo (maior que zero).
142
+ * @returns true se o número é positivo, false caso contrário
143
+ * @example
144
+ * new MyNumberEdge(5).isPositive() // true
145
+ * new MyNumberEdge(-5).isPositive() // false
146
+ * new MyNumberEdge(0).isPositive() // false
147
+ */
148
+ isPositive() {
149
+ return this.value > 0;
150
+ }
151
+ /**
152
+ * Verifica se o número é negativo (menor que zero).
153
+ * @returns true se o número é negativo, false caso contrário
154
+ * @example
155
+ * new MyNumberEdge(-5).isNegative() // true
156
+ * new MyNumberEdge(5).isNegative() // false
157
+ * new MyNumberEdge(0).isNegative() // false
158
+ */
159
+ isNegative() {
160
+ return this.value < 0;
161
+ }
162
+ /**
163
+ * Verifica se o número é zero.
164
+ * @returns true se o número é zero, false caso contrário
165
+ * @example
166
+ * new MyNumberEdge(0).isZero() // true
167
+ * new MyNumberEdge(1).isZero() // false
168
+ */
169
+ isZero() {
170
+ return this.value === 0;
171
+ }
172
+ /**
173
+ * Verifica se o número é inteiro (sem casas decimais).
174
+ * @returns true se o número é inteiro, false caso contrário
175
+ * @example
176
+ * new MyNumberEdge(5).isInteger() // true
177
+ * new MyNumberEdge(5.5).isInteger() // false
178
+ */
179
+ isInteger() {
180
+ return Number.isInteger(this.value);
181
+ }
182
+ /**
183
+ * Verifica se o número é float (possui casas decimais).
184
+ * @returns true se o número é float, false caso contrário
185
+ * @example
186
+ * new MyNumberEdge(5.5).isFloat() // true
187
+ * new MyNumberEdge(5).isFloat() // false
188
+ */
189
+ isFloat() {
190
+ return !Number.isInteger(this.value);
191
+ }
192
+ /**
193
+ * Verifica se o número é par.
194
+ * @returns true se o número é par, false caso contrário
195
+ * @example
196
+ * new MyNumberEdge(4).isEven() // true
197
+ * new MyNumberEdge(5).isEven() // false
198
+ */
199
+ isEven() {
200
+ return this.value % 2 === 0;
201
+ }
202
+ /**
203
+ * Verifica se o número é ímpar.
204
+ * @returns true se o número é ímpar, false caso contrário
205
+ * @example
206
+ * new MyNumberEdge(5).isOdd() // true
207
+ * new MyNumberEdge(4).isOdd() // false
208
+ */
209
+ isOdd() {
210
+ return this.value % 2 !== 0;
211
+ }
212
+ // ==================== Operações Aritméticas ====================
213
+ /**
214
+ * Soma este valor com outro e retorna o resultado.
215
+ * @param value - Número ou NumberEdgeSketch a somar
216
+ * @returns Resultado da soma
217
+ * @example
218
+ * new MyNumberEdge(5).add(3) // 8
219
+ */
220
+ add(value) {
221
+ const operand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
222
+ return this.value + operand;
223
+ }
224
+ /**
225
+ * Subtrai outro valor deste e retorna o resultado.
226
+ * @param value - Número ou NumberEdgeSketch a subtrair
227
+ * @returns Resultado da subtração
228
+ * @example
229
+ * new MyNumberEdge(10).subtract(3) // 7
230
+ */
231
+ subtract(value) {
232
+ const operand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
233
+ return this.value - operand;
234
+ }
235
+ /**
236
+ * Multiplica este valor por outro e retorna o resultado.
237
+ * @param value - Número ou NumberEdgeSketch a multiplicar
238
+ * @returns Resultado da multiplicação
239
+ * @example
240
+ * new MyNumberEdge(5).multiply(3) // 15
241
+ */
242
+ multiply(value) {
243
+ const operand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
244
+ return this.value * operand;
245
+ }
246
+ /**
247
+ * Divide este valor por outro e retorna o resultado.
248
+ * @param value - Número ou NumberEdgeSketch divisor
249
+ * @returns Resultado da divisão
250
+ * @throws {Error} Se o divisor for zero
251
+ * @example
252
+ * new MyNumberEdge(10).divide(2) // 5
253
+ */
254
+ divide(value) {
255
+ const operand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
256
+ if (operand === 0) {
257
+ throw new Error(`${this.constructor.name}: division by zero is not allowed.`);
258
+ }
259
+ return this.value / operand;
260
+ }
261
+ /**
262
+ * Retorna o resto da divisão deste valor por outro.
263
+ * @param value - Número ou NumberEdgeSketch divisor
264
+ * @returns Resto da divisão
265
+ * @throws {Error} Se o divisor for zero
266
+ * @example
267
+ * new MyNumberEdge(10).modulo(3) // 1
268
+ */
269
+ modulo(value) {
270
+ const operand = value instanceof NumberEdgeSketch ? value.toNumber() : value;
271
+ if (operand === 0) {
272
+ throw new Error(`${this.constructor.name}: modulo by zero is not allowed.`);
273
+ }
274
+ return this.value % operand;
275
+ }
276
+ /**
277
+ * Eleva este valor à potência de outro.
278
+ * @param exponent - Expoente da potenciação
279
+ * @returns Resultado da potenciação
280
+ * @throws {TypeError} Se o expoente não for finito
281
+ * @example
282
+ * new MyNumberEdge(2).power(8) // 256
283
+ * new MyNumberEdge(5).power(2) // 25
284
+ */
285
+ power(exponent) {
286
+ if (!Number.isFinite(exponent)) {
287
+ throw new TypeError(`${this.constructor.name}: exponent should be a finite number.`);
288
+ }
289
+ return this.value ** exponent;
290
+ }
291
+ /**
292
+ * Retorna a raiz quadrada do número.
293
+ * @returns Raiz quadrada do valor
294
+ * @throws {Error} Se o número for negativo
295
+ * @example
296
+ * new MyNumberEdge(9).sqrt() // 3
297
+ * new MyNumberEdge(16).sqrt() // 4
298
+ */
299
+ sqrt() {
300
+ if (this.value < 0) {
301
+ throw new Error(`${this.constructor.name}: cannot calculate sqrt of a negative number.`);
302
+ }
303
+ return Math.sqrt(this.value);
304
+ }
305
+ /**
306
+ * Arredonda o número para o inteiro mais próximo.
307
+ * @returns Número arredondado
308
+ * @example
309
+ * new MyNumberEdge(4.5).round() // 5
310
+ * new MyNumberEdge(4.4).round() // 4
311
+ */
312
+ round() {
313
+ return Math.round(this.value);
314
+ }
315
+ /**
316
+ * Arredonda o número para baixo (floor).
317
+ * @returns Maior inteiro menor ou igual ao número
318
+ * @example
319
+ * new MyNumberEdge(4.9).floor() // 4
320
+ * new MyNumberEdge(-4.1).floor() // -5
321
+ */
322
+ floor() {
323
+ return Math.floor(this.value);
324
+ }
325
+ /**
326
+ * Arredonda o número para cima (ceil).
327
+ * @returns Menor inteiro maior ou igual ao número
328
+ * @example
329
+ * new MyNumberEdge(4.1).ceil() // 5
330
+ * new MyNumberEdge(-4.9).ceil() // -4
331
+ */
332
+ ceil() {
333
+ return Math.ceil(this.value);
334
+ }
335
+ // ==================== Privados ====================
336
+ /**
337
+ * Valida se o valor fornecido no construtor é um número válido.
338
+ * @throws {TypeError} Se o valor for NaN
339
+ */
54
340
  validate(value) {
55
341
  if (Number.isNaN(value)) {
56
342
  throw new TypeError(`${this.constructor.name} should be valid.`);