@cognima/banners 0.0.1-beta

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 (48) hide show
  1. package/assets/fonts/Manrope/Manrope-Bold.ttf +0 -0
  2. package/assets/fonts/Manrope/Manrope-Regular.ttf +0 -0
  3. package/assets/fonts/Others/AbyssinicaSIL-Regular.ttf +0 -0
  4. package/assets/fonts/Others/ChirpRegular.ttf +0 -0
  5. package/assets/fonts/Poppins/Poppins-Bold.ttf +0 -0
  6. package/assets/fonts/Poppins/Poppins-Medium.ttf +0 -0
  7. package/assets/fonts/Poppins/Poppins-Regular.ttf +0 -0
  8. package/assets/placeholders/album_art.png +0 -0
  9. package/assets/placeholders/avatar.png +0 -0
  10. package/assets/placeholders/badge.jpg +0 -0
  11. package/assets/placeholders/badge.png +0 -0
  12. package/assets/placeholders/badge_2.jpg +0 -0
  13. package/assets/placeholders/badge_3.jpg +0 -0
  14. package/assets/placeholders/badge_4.jpg +0 -0
  15. package/assets/placeholders/badge_5.jpg +0 -0
  16. package/assets/placeholders/banner.jpeg +0 -0
  17. package/assets/placeholders/images.jpeg +0 -0
  18. package/index.js +153 -0
  19. package/package.json +34 -0
  20. package/src/animation-effects.js +631 -0
  21. package/src/cache-manager.js +258 -0
  22. package/src/community-banner.js +1536 -0
  23. package/src/constants.js +208 -0
  24. package/src/discord-profile.js +584 -0
  25. package/src/e-commerce-banner.js +1214 -0
  26. package/src/effects.js +355 -0
  27. package/src/error-handler.js +305 -0
  28. package/src/event-banner.js +1319 -0
  29. package/src/facebook-post.js +679 -0
  30. package/src/gradient-welcome.js +430 -0
  31. package/src/image-filters.js +1034 -0
  32. package/src/image-processor.js +1014 -0
  33. package/src/instagram-post.js +504 -0
  34. package/src/interactive-elements.js +1208 -0
  35. package/src/linkedin-post.js +658 -0
  36. package/src/marketing-banner.js +1089 -0
  37. package/src/minimalist-banner.js +892 -0
  38. package/src/modern-profile.js +755 -0
  39. package/src/performance-optimizer.js +216 -0
  40. package/src/telegram-header.js +544 -0
  41. package/src/test-runner.js +645 -0
  42. package/src/tiktok-post.js +713 -0
  43. package/src/twitter-header.js +604 -0
  44. package/src/validator.js +442 -0
  45. package/src/welcome-leave.js +445 -0
  46. package/src/whatsapp-status.js +386 -0
  47. package/src/youtube-thumbnail.js +681 -0
  48. package/utils.js +710 -0
@@ -0,0 +1,442 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Módulo de Validação
5
+ *
6
+ * Este módulo fornece funcionalidades para validação de parâmetros
7
+ * e entradas no módulo de banners.
8
+ *
9
+ * @author Cognima Team (melhorado)
10
+ * @version 2.0.0
11
+ */
12
+
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+
15
+ /**
16
+ * Classe para validação de parâmetros
17
+ */
18
+ class Validator {
19
+ /**
20
+ * Cria uma nova instância do validador
21
+ */
22
+ constructor() {
23
+ this.errors = [];
24
+ }
25
+
26
+ /**
27
+ * Limpa os erros acumulados
28
+ */
29
+ clearErrors() {
30
+ this.errors = [];
31
+ }
32
+
33
+ /**
34
+ * Obtém os erros acumulados
35
+ * @returns {Array<Object>} - Lista de erros
36
+ */
37
+ getErrors() {
38
+ return [...this.errors];
39
+ }
40
+
41
+ /**
42
+ * Verifica se há erros acumulados
43
+ * @returns {boolean} - Se há erros
44
+ */
45
+ hasErrors() {
46
+ return this.errors.length > 0;
47
+ }
48
+
49
+ /**
50
+ * Adiciona um erro
51
+ * @param {string} field - Campo com erro
52
+ * @param {string} message - Mensagem de erro
53
+ * @param {*} value - Valor inválido
54
+ */
55
+ addError(field, message, value = undefined) {
56
+ this.errors.push({
57
+ field,
58
+ message,
59
+ value: value !== undefined ? String(value) : undefined
60
+ });
61
+ }
62
+
63
+ /**
64
+ * Valida se um valor é obrigatório
65
+ * @param {*} value - Valor a ser validado
66
+ * @param {string} field - Nome do campo
67
+ * @returns {boolean} - Se o valor é válido
68
+ */
69
+ required(value, field) {
70
+ if (value === undefined || value === null || value === "") {
71
+ this.addError(field, `O campo ${field} é obrigatório.`);
72
+ return false;
73
+ }
74
+ return true;
75
+ }
76
+
77
+ /**
78
+ * Valida se um valor é uma string
79
+ * @param {*} value - Valor a ser validado
80
+ * @param {string} field - Nome do campo
81
+ * @returns {boolean} - Se o valor é válido
82
+ */
83
+ isString(value, field) {
84
+ if (value !== undefined && value !== null && typeof value !== "string") {
85
+ this.addError(field, `O campo ${field} deve ser uma string.`, value);
86
+ return false;
87
+ }
88
+ return true;
89
+ }
90
+
91
+ /**
92
+ * Valida se um valor é um número
93
+ * @param {*} value - Valor a ser validado
94
+ * @param {string} field - Nome do campo
95
+ * @returns {boolean} - Se o valor é válido
96
+ */
97
+ isNumber(value, field) {
98
+ if (value !== undefined && value !== null && typeof value !== "number") {
99
+ this.addError(field, `O campo ${field} deve ser um número.`, value);
100
+ return false;
101
+ }
102
+ return true;
103
+ }
104
+
105
+ /**
106
+ * Valida se um valor é um booleano
107
+ * @param {*} value - Valor a ser validado
108
+ * @param {string} field - Nome do campo
109
+ * @returns {boolean} - Se o valor é válido
110
+ */
111
+ isBoolean(value, field) {
112
+ if (value !== undefined && value !== null && typeof value !== "boolean") {
113
+ this.addError(field, `O campo ${field} deve ser um booleano.`, value);
114
+ return false;
115
+ }
116
+ return true;
117
+ }
118
+
119
+ /**
120
+ * Valida se um valor é um objeto
121
+ * @param {*} value - Valor a ser validado
122
+ * @param {string} field - Nome do campo
123
+ * @returns {boolean} - Se o valor é válido
124
+ */
125
+ isObject(value, field) {
126
+ if (value !== undefined && value !== null && (typeof value !== "object" || Array.isArray(value))) {
127
+ this.addError(field, `O campo ${field} deve ser um objeto.`, value);
128
+ return false;
129
+ }
130
+ return true;
131
+ }
132
+
133
+ /**
134
+ * Valida se um valor é um array
135
+ * @param {*} value - Valor a ser validado
136
+ * @param {string} field - Nome do campo
137
+ * @returns {boolean} - Se o valor é válido
138
+ */
139
+ isArray(value, field) {
140
+ if (value !== undefined && value !== null && !Array.isArray(value)) {
141
+ this.addError(field, `O campo ${field} deve ser um array.`, value);
142
+ return false;
143
+ }
144
+ return true;
145
+ }
146
+
147
+ /**
148
+ * Valida se um valor está dentro de um intervalo
149
+ * @param {number} value - Valor a ser validado
150
+ * @param {number} min - Valor mínimo
151
+ * @param {number} max - Valor máximo
152
+ * @param {string} field - Nome do campo
153
+ * @returns {boolean} - Se o valor é válido
154
+ */
155
+ inRange(value, min, max, field) {
156
+ if (value !== undefined && value !== null) {
157
+ if (typeof value !== "number") {
158
+ this.addError(field, `O campo ${field} deve ser um número.`, value);
159
+ return false;
160
+ }
161
+
162
+ if (value < min || value > max) {
163
+ this.addError(field, `O campo ${field} deve estar entre ${min} e ${max}.`, value);
164
+ return false;
165
+ }
166
+ }
167
+ return true;
168
+ }
169
+
170
+ /**
171
+ * Valida se um valor tem um comprimento dentro de um intervalo
172
+ * @param {string|Array} value - Valor a ser validado
173
+ * @param {number} min - Comprimento mínimo
174
+ * @param {number} max - Comprimento máximo
175
+ * @param {string} field - Nome do campo
176
+ * @returns {boolean} - Se o valor é válido
177
+ */
178
+ lengthInRange(value, min, max, field) {
179
+ if (value !== undefined && value !== null) {
180
+ if (typeof value !== "string" && !Array.isArray(value)) {
181
+ this.addError(field, `O campo ${field} deve ser uma string ou um array.`, value);
182
+ return false;
183
+ }
184
+
185
+ if (value.length < min || value.length > max) {
186
+ this.addError(field, `O campo ${field} deve ter entre ${min} e ${max} caracteres.`, value);
187
+ return false;
188
+ }
189
+ }
190
+ return true;
191
+ }
192
+
193
+ /**
194
+ * Valida se um valor está em uma lista de valores permitidos
195
+ * @param {*} value - Valor a ser validado
196
+ * @param {Array} allowedValues - Lista de valores permitidos
197
+ * @param {string} field - Nome do campo
198
+ * @returns {boolean} - Se o valor é válido
199
+ */
200
+ oneOf(value, allowedValues, field) {
201
+ if (value !== undefined && value !== null && !allowedValues.includes(value)) {
202
+ this.addError(field, `O campo ${field} deve ser um dos seguintes valores: ${allowedValues.join(", ")}.`, value);
203
+ return false;
204
+ }
205
+ return true;
206
+ }
207
+
208
+ /**
209
+ * Valida se um valor é uma cor hexadecimal válida
210
+ * @param {string} value - Valor a ser validado
211
+ * @param {string} field - Nome do campo
212
+ * @returns {boolean} - Se o valor é válido
213
+ */
214
+ isHexColor(value, field) {
215
+ if (value !== undefined && value !== null) {
216
+ if (typeof value !== "string") {
217
+ this.addError(field, `O campo ${field} deve ser uma string.`, value);
218
+ return false;
219
+ }
220
+
221
+ const hexColorRegex = /^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6})$/;
222
+
223
+ if (!hexColorRegex.test(value)) {
224
+ this.addError(field, `O campo ${field} deve ser uma cor hexadecimal válida (ex: #FFF ou #FFFFFF).`, value);
225
+ return false;
226
+ }
227
+ }
228
+ return true;
229
+ }
230
+
231
+ /**
232
+ * Valida se um valor é uma URL válida
233
+ * @param {string} value - Valor a ser validado
234
+ * @param {string} field - Nome do campo
235
+ * @returns {boolean} - Se o valor é válido
236
+ */
237
+ isUrl(value, field) {
238
+ if (value !== undefined && value !== null) {
239
+ if (typeof value !== "string") {
240
+ this.addError(field, `O campo ${field} deve ser uma string.`, value);
241
+ return false;
242
+ }
243
+
244
+ try {
245
+ new URL(value);
246
+ return true;
247
+ } catch (err) {
248
+ this.addError(field, `O campo ${field} deve ser uma URL válida.`, value);
249
+ return false;
250
+ }
251
+ }
252
+ return true;
253
+ }
254
+
255
+ /**
256
+ * Valida se um valor é um caminho de arquivo válido
257
+ * @param {string} value - Valor a ser validado
258
+ * @param {string} field - Nome do campo
259
+ * @returns {boolean} - Se o valor é válido
260
+ */
261
+ isFilePath(value, field) {
262
+ if (value !== undefined && value !== null) {
263
+ if (typeof value !== "string") {
264
+ this.addError(field, `O campo ${field} deve ser uma string.`, value);
265
+ return false;
266
+ }
267
+
268
+ // Validação básica de caminho de arquivo
269
+ const invalidChars = /[<>:"|?*\x00-\x1F]/g;
270
+
271
+ if (invalidChars.test(value)) {
272
+ this.addError(field, `O campo ${field} contém caracteres inválidos para um caminho de arquivo.`, value);
273
+ return false;
274
+ }
275
+ }
276
+ return true;
277
+ }
278
+
279
+ /**
280
+ * Valida se um valor corresponde a um padrão regex
281
+ * @param {string} value - Valor a ser validado
282
+ * @param {RegExp} pattern - Padrão regex
283
+ * @param {string} field - Nome do campo
284
+ * @param {string} message - Mensagem de erro personalizada
285
+ * @returns {boolean} - Se o valor é válido
286
+ */
287
+ matches(value, pattern, field, message = null) {
288
+ if (value !== undefined && value !== null) {
289
+ if (typeof value !== "string") {
290
+ this.addError(field, `O campo ${field} deve ser uma string.`, value);
291
+ return false;
292
+ }
293
+
294
+ if (!pattern.test(value)) {
295
+ this.addError(field, message || `O campo ${field} não corresponde ao padrão esperado.`, value);
296
+ return false;
297
+ }
298
+ }
299
+ return true;
300
+ }
301
+
302
+ /**
303
+ * Valida se um objeto tem uma estrutura específica
304
+ * @param {Object} value - Objeto a ser validado
305
+ * @param {Object} schema - Esquema de validação
306
+ * @param {string} field - Nome do campo
307
+ * @returns {boolean} - Se o objeto é válido
308
+ */
309
+ validateObject(value, schema, field) {
310
+ if (value !== undefined && value !== null) {
311
+ if (typeof value !== "object" || Array.isArray(value)) {
312
+ this.addError(field, `O campo ${field} deve ser um objeto.`, value);
313
+ return false;
314
+ }
315
+
316
+ let isValid = true;
317
+
318
+ for (const key in schema) {
319
+ const subField = field ? `${field}.${key}` : key;
320
+ const validator = schema[key];
321
+
322
+ if (typeof validator === "function") {
323
+ isValid = validator.call(this, value[key], subField) && isValid;
324
+ } else if (typeof validator === "object" && !Array.isArray(validator)) {
325
+ isValid = this.validateObject(value[key], validator, subField) && isValid;
326
+ }
327
+ }
328
+
329
+ return isValid;
330
+ }
331
+ return true;
332
+ }
333
+
334
+ /**
335
+ * Valida se um array tem itens válidos
336
+ * @param {Array} value - Array a ser validado
337
+ * @param {Function} itemValidator - Função de validação para cada item
338
+ * @param {string} field - Nome do campo
339
+ * @returns {boolean} - Se o array é válido
340
+ */
341
+ validateArray(value, itemValidator, field) {
342
+ if (value !== undefined && value !== null) {
343
+ if (!Array.isArray(value)) {
344
+ this.addError(field, `O campo ${field} deve ser um array.`, value);
345
+ return false;
346
+ }
347
+
348
+ let isValid = true;
349
+
350
+ for (let i = 0; i < value.length; i++) {
351
+ const subField = `${field}[${i}]`;
352
+ isValid = itemValidator.call(this, value[i], subField) && isValid;
353
+ }
354
+
355
+ return isValid;
356
+ }
357
+ return true;
358
+ }
359
+
360
+ /**
361
+ * Valida um conjunto de parâmetros
362
+ * @param {Object} params - Parâmetros a serem validados
363
+ * @param {Object} rules - Regras de validação
364
+ * @returns {boolean} - Se os parâmetros são válidos
365
+ */
366
+ validate(params, rules) {
367
+ this.clearErrors();
368
+
369
+ let isValid = true;
370
+
371
+ for (const field in rules) {
372
+ const value = params[field];
373
+ const fieldRules = rules[field];
374
+
375
+ for (const rule of fieldRules) {
376
+ const { type, ...options } = rule;
377
+
378
+ switch (type) {
379
+ case "required":
380
+ isValid = this.required(value, field) && isValid;
381
+ break;
382
+ case "string":
383
+ isValid = this.isString(value, field) && isValid;
384
+ break;
385
+ case "number":
386
+ isValid = this.isNumber(value, field) && isValid;
387
+ break;
388
+ case "boolean":
389
+ isValid = this.isBoolean(value, field) && isValid;
390
+ break;
391
+ case "object":
392
+ isValid = this.isObject(value, field) && isValid;
393
+ break;
394
+ case "array":
395
+ isValid = this.isArray(value, field) && isValid;
396
+ break;
397
+ case "range":
398
+ isValid = this.inRange(value, options.min, options.max, field) && isValid;
399
+ break;
400
+ case "length":
401
+ isValid = this.lengthInRange(value, options.min, options.max, field) && isValid;
402
+ break;
403
+ case "oneOf":
404
+ isValid = this.oneOf(value, options.values, field) && isValid;
405
+ break;
406
+ case "hexColor":
407
+ isValid = this.isHexColor(value, field) && isValid;
408
+ break;
409
+ case "url":
410
+ isValid = this.isUrl(value, field) && isValid;
411
+ break;
412
+ case "filePath":
413
+ isValid = this.isFilePath(value, field) && isValid;
414
+ break;
415
+ case "regex":
416
+ isValid = this.matches(value, options.pattern, field, options.message) && isValid;
417
+ break;
418
+ case "custom":
419
+ if (typeof options.validator === "function") {
420
+ const result = options.validator(value, field);
421
+
422
+ if (result !== true) {
423
+ this.addError(field, options.message || result || `O campo ${field} é inválido.`, value);
424
+ isValid = false;
425
+ }
426
+ }
427
+ break;
428
+ }
429
+
430
+ // Se o campo é obrigatório e inválido, não continua validando
431
+ if (rule.type === "required" && !isValid) {
432
+ break;
433
+ }
434
+ }
435
+ }
436
+
437
+ return isValid;
438
+ }
439
+ }
440
+
441
+ module.exports = Validator;
442
+