devtoolz-library 1.0.0

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 (197) hide show
  1. package/dist/baseFactory.d.ts +12 -0
  2. package/dist/baseFactory.js +33 -0
  3. package/dist/constants/regexPatterns.d.ts +2 -0
  4. package/dist/constants/regexPatterns.js +9 -0
  5. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.d.ts +4 -0
  6. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.d.ts +4 -0
  7. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.js +2 -0
  8. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.js +2 -0
  9. package/dist/converters/numeric-systems/numericSystem.converter.d.ts +5 -0
  10. package/dist/converters/numeric-systems/numericSystem.converter.factory.d.ts +8 -0
  11. package/dist/converters/numeric-systems/numericSystem.converter.factory.js +17 -0
  12. package/dist/converters/numeric-systems/numericSystem.converter.js +17 -0
  13. package/dist/converters/numeric-systems/provider.d.ts +2 -0
  14. package/dist/converters/numeric-systems/provider.js +11 -0
  15. package/dist/converters/numeric-systems/services/binary/binary.converter.d.ts +5 -0
  16. package/dist/converters/numeric-systems/services/binary/binary.converter.js +16 -0
  17. package/dist/converters/numeric-systems/services/binary/binary.converter.test.d.ts +1 -0
  18. package/dist/converters/numeric-systems/services/binary/binary.converter.test.js +252 -0
  19. package/dist/converters/numeric-systems/services/decimal/decimal.converter.d.ts +5 -0
  20. package/dist/converters/numeric-systems/services/decimal/decimal.converter.js +16 -0
  21. package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.d.ts +1 -0
  22. package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.js +199 -0
  23. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.d.ts +5 -0
  24. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.js +18 -0
  25. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.d.ts +1 -0
  26. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.js +130 -0
  27. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.d.ts +5 -0
  28. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.js +15 -0
  29. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.d.ts +1 -0
  30. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.js +151 -0
  31. package/dist/converters/numeric-systems/services/roman/roman.converter.d.ts +7 -0
  32. package/dist/converters/numeric-systems/services/roman/roman.converter.js +77 -0
  33. package/dist/converters/numeric-systems/services/roman/roman.converter.test.d.ts +1 -0
  34. package/dist/converters/numeric-systems/services/roman/roman.converter.test.js +105 -0
  35. package/dist/converters/serialization/interfaces/ISerialization.converter.d.ts +5 -0
  36. package/dist/converters/serialization/interfaces/ISerialization.converter.factory.d.ts +4 -0
  37. package/dist/converters/serialization/interfaces/ISerialization.converter.factory.js +2 -0
  38. package/dist/converters/serialization/interfaces/ISerialization.converter.js +2 -0
  39. package/dist/converters/serialization/interfaces/ISerializationOptions.d.ts +4 -0
  40. package/dist/converters/serialization/interfaces/ISerializationOptions.js +2 -0
  41. package/dist/converters/serialization/provider.d.ts +2 -0
  42. package/dist/converters/serialization/provider.js +7 -0
  43. package/dist/converters/serialization/serialization.converter.d.ts +6 -0
  44. package/dist/converters/serialization/serialization.converter.factory.d.ts +9 -0
  45. package/dist/converters/serialization/serialization.converter.factory.js +20 -0
  46. package/dist/converters/serialization/serialization.converter.js +17 -0
  47. package/dist/converters/serialization/services/csv/csv.converter.d.ts +6 -0
  48. package/dist/converters/serialization/services/csv/csv.converter.js +68 -0
  49. package/dist/converters/serialization/services/csv/csv.converter.test.d.ts +1 -0
  50. package/dist/converters/serialization/services/csv/csv.converter.test.js +295 -0
  51. package/dist/converters/serialization/services/json/json.converter.d.ts +5 -0
  52. package/dist/converters/serialization/services/json/json.converter.js +12 -0
  53. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.d.ts +4 -0
  54. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.d.ts +4 -0
  55. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.js +2 -0
  56. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.js +2 -0
  57. package/dist/converters/text-format/provider.d.ts +2 -0
  58. package/dist/converters/text-format/provider.js +8 -0
  59. package/dist/converters/text-format/services/binary/binary-format.converter.d.ts +5 -0
  60. package/dist/converters/text-format/services/binary/binary-format.converter.js +40 -0
  61. package/dist/converters/text-format/services/binary/binary-format.converter.test.d.ts +1 -0
  62. package/dist/converters/text-format/services/binary/binary-format.converter.test.js +174 -0
  63. package/dist/converters/text-format/services/morse/morse-format.converter.d.ts +6 -0
  64. package/dist/converters/text-format/services/morse/morse-format.converter.js +85 -0
  65. package/dist/converters/text-format/services/morse/morse-format.converter.test.d.ts +1 -0
  66. package/dist/converters/text-format/services/morse/morse-format.converter.test.js +518 -0
  67. package/dist/converters/text-format/services/text/text-format.converter.d.ts +5 -0
  68. package/dist/converters/text-format/services/text/text-format.converter.js +12 -0
  69. package/dist/converters/text-format/textFormatConverter.converter.d.ts +5 -0
  70. package/dist/converters/text-format/textFormatConverter.converter.factory.d.ts +8 -0
  71. package/dist/converters/text-format/textFormatConverter.converter.factory.js +17 -0
  72. package/dist/converters/text-format/textFormatConverter.converter.js +17 -0
  73. package/dist/converters/unit-converter/converter-base.d.ts +19 -0
  74. package/dist/converters/unit-converter/converter-base.js +56 -0
  75. package/dist/converters/unit-converter/interfaces/IUnitConverter.d.ts +9 -0
  76. package/dist/converters/unit-converter/interfaces/IUnitConverter.js +2 -0
  77. package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.d.ts +4 -0
  78. package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.js +2 -0
  79. package/dist/converters/unit-converter/models/unit.d.ts +7 -0
  80. package/dist/converters/unit-converter/models/unit.js +2 -0
  81. package/dist/converters/unit-converter/provider.d.ts +2 -0
  82. package/dist/converters/unit-converter/provider.js +16 -0
  83. package/dist/converters/unit-converter/services/angle/angle.converter.d.ts +4 -0
  84. package/dist/converters/unit-converter/services/angle/angle.converter.js +15 -0
  85. package/dist/converters/unit-converter/services/angle/angle.converter.test.d.ts +1 -0
  86. package/dist/converters/unit-converter/services/angle/angle.converter.test.js +112 -0
  87. package/dist/converters/unit-converter/services/area/area.converter.d.ts +4 -0
  88. package/dist/converters/unit-converter/services/area/area.converter.js +24 -0
  89. package/dist/converters/unit-converter/services/area/area.converter.test.d.ts +1 -0
  90. package/dist/converters/unit-converter/services/area/area.converter.test.js +439 -0
  91. package/dist/converters/unit-converter/services/data/data.converter.d.ts +4 -0
  92. package/dist/converters/unit-converter/services/data/data.converter.js +30 -0
  93. package/dist/converters/unit-converter/services/data/data.converter.test.d.ts +1 -0
  94. package/dist/converters/unit-converter/services/data/data.converter.test.js +209 -0
  95. package/dist/converters/unit-converter/services/energy/energy.converter.d.ts +4 -0
  96. package/dist/converters/unit-converter/services/energy/energy.converter.js +20 -0
  97. package/dist/converters/unit-converter/services/energy/energy.converter.test.d.ts +1 -0
  98. package/dist/converters/unit-converter/services/energy/energy.converter.test.js +154 -0
  99. package/dist/converters/unit-converter/services/length/length.converter.d.ts +4 -0
  100. package/dist/converters/unit-converter/services/length/length.converter.js +31 -0
  101. package/dist/converters/unit-converter/services/length/length.converter.test.d.ts +1 -0
  102. package/dist/converters/unit-converter/services/length/length.converter.test.js +186 -0
  103. package/dist/converters/unit-converter/services/power/power.converter.d.ts +4 -0
  104. package/dist/converters/unit-converter/services/power/power.converter.js +17 -0
  105. package/dist/converters/unit-converter/services/power/power.converter.test.d.ts +1 -0
  106. package/dist/converters/unit-converter/services/power/power.converter.test.js +223 -0
  107. package/dist/converters/unit-converter/services/pressure/pressure.converter.d.ts +4 -0
  108. package/dist/converters/unit-converter/services/pressure/pressure.converter.js +18 -0
  109. package/dist/converters/unit-converter/services/pressure/pressure.converter.test.d.ts +1 -0
  110. package/dist/converters/unit-converter/services/pressure/pressure.converter.test.js +107 -0
  111. package/dist/converters/unit-converter/services/speed/speed.converter.d.ts +4 -0
  112. package/dist/converters/unit-converter/services/speed/speed.converter.js +22 -0
  113. package/dist/converters/unit-converter/services/speed/speed.converter.test.d.ts +1 -0
  114. package/dist/converters/unit-converter/services/speed/speed.converter.test.js +257 -0
  115. package/dist/converters/unit-converter/services/temperature/temperature.converter.d.ts +7 -0
  116. package/dist/converters/unit-converter/services/temperature/temperature.converter.js +46 -0
  117. package/dist/converters/unit-converter/services/temperature/temperature.converter.test.d.ts +1 -0
  118. package/dist/converters/unit-converter/services/temperature/temperature.converter.test.js +279 -0
  119. package/dist/converters/unit-converter/services/time/time.converter.d.ts +4 -0
  120. package/dist/converters/unit-converter/services/time/time.converter.js +26 -0
  121. package/dist/converters/unit-converter/services/volume/volume.converter.d.ts +4 -0
  122. package/dist/converters/unit-converter/services/volume/volume.converter.js +39 -0
  123. package/dist/converters/unit-converter/services/volume/volume.converter.test.d.ts +1 -0
  124. package/dist/converters/unit-converter/services/volume/volume.converter.test.js +295 -0
  125. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.d.ts +4 -0
  126. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.js +29 -0
  127. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.d.ts +1 -0
  128. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.js +218 -0
  129. package/dist/converters/unit-converter/unit.converter.factory.d.ts +9 -0
  130. package/dist/converters/unit-converter/unit.converter.factory.js +20 -0
  131. package/dist/crypt.d.ts +0 -0
  132. package/dist/crypt.js +77 -0
  133. package/dist/documents/cnpj/cnpj.d.ts +14 -0
  134. package/dist/documents/cnpj/cnpj.formatter.d.ts +5 -0
  135. package/dist/documents/cnpj/cnpj.formatter.js +12 -0
  136. package/dist/documents/cnpj/cnpj.generator.d.ts +9 -0
  137. package/dist/documents/cnpj/cnpj.generator.js +43 -0
  138. package/dist/documents/cnpj/cnpj.js +47 -0
  139. package/dist/documents/cnpj/cnpj.validator.d.ts +11 -0
  140. package/dist/documents/cnpj/cnpj.validator.js +49 -0
  141. package/dist/documents/cnpj/tests/cnpj.formatter.test.d.ts +1 -0
  142. package/dist/documents/cnpj/tests/cnpj.formatter.test.js +62 -0
  143. package/dist/documents/cnpj/tests/cnpj.generator.test.d.ts +1 -0
  144. package/dist/documents/cnpj/tests/cnpj.generator.test.js +51 -0
  145. package/dist/documents/cnpj/tests/cnpj.test.d.ts +1 -0
  146. package/dist/documents/cnpj/tests/cnpj.test.js +162 -0
  147. package/dist/documents/cnpj/tests/cnpj.validator.test.d.ts +1 -0
  148. package/dist/documents/cnpj/tests/cnpj.validator.test.js +104 -0
  149. package/dist/documents/cpf/cpf.d.ts +14 -0
  150. package/dist/documents/cpf/cpf.formatter.d.ts +5 -0
  151. package/dist/documents/cpf/cpf.formatter.js +12 -0
  152. package/dist/documents/cpf/cpf.generator.d.ts +9 -0
  153. package/dist/documents/cpf/cpf.generator.js +40 -0
  154. package/dist/documents/cpf/cpf.js +50 -0
  155. package/dist/documents/cpf/cpf.validator.d.ts +11 -0
  156. package/dist/documents/cpf/cpf.validator.js +46 -0
  157. package/dist/documents/cpf/tests/cpf.formatter.test.d.ts +1 -0
  158. package/dist/documents/cpf/tests/cpf.formatter.test.js +71 -0
  159. package/dist/documents/cpf/tests/cpf.generator.test.d.ts +1 -0
  160. package/dist/documents/cpf/tests/cpf.generator.test.js +71 -0
  161. package/dist/documents/cpf/tests/cpf.test.d.ts +1 -0
  162. package/dist/documents/cpf/tests/cpf.test.js +151 -0
  163. package/dist/documents/cpf/tests/cpf.validator.test.d.ts +1 -0
  164. package/dist/documents/cpf/tests/cpf.validator.test.js +113 -0
  165. package/dist/documents/interfaces/formatter.interface.d.ts +4 -0
  166. package/dist/documents/interfaces/formatter.interface.js +2 -0
  167. package/dist/documents/interfaces/generator.interface.d.ts +3 -0
  168. package/dist/documents/interfaces/generator.interface.js +2 -0
  169. package/dist/documents/interfaces/validator.interface.d.ts +4 -0
  170. package/dist/documents/interfaces/validator.interface.js +2 -0
  171. package/dist/documents/models/validation-result.model.d.ts +4 -0
  172. package/dist/documents/models/validation-result.model.js +2 -0
  173. package/dist/enums/cryptProvider.d.ts +6 -0
  174. package/dist/enums/cryptProvider.js +10 -0
  175. package/dist/extensions/array.extensions.d.ts +6 -0
  176. package/dist/extensions/array.extensions.js +7 -0
  177. package/dist/extensions/boolean.extensions.d.ts +6 -0
  178. package/dist/extensions/boolean.extensions.js +5 -0
  179. package/dist/extensions/number.extensions.d.ts +11 -0
  180. package/dist/extensions/number.extensions.js +24 -0
  181. package/dist/extensions/string.extensions.d.ts +13 -0
  182. package/dist/extensions/string.extensions.js +28 -0
  183. package/dist/index.d.ts +22 -0
  184. package/dist/index.js +39 -0
  185. package/dist/interfaces/IFactory.d.ts +3 -0
  186. package/dist/interfaces/IFactory.js +2 -0
  187. package/dist/interfaces/IServiceCategory.d.ts +3 -0
  188. package/dist/interfaces/IServiceCategory.js +2 -0
  189. package/dist/interfaces/validator.d.ts +5 -0
  190. package/dist/interfaces/validator.js +2 -0
  191. package/dist/interfaces/value.d.ts +3 -0
  192. package/dist/interfaces/value.js +2 -0
  193. package/dist/interfaces/valueGenerator.d.ts +4 -0
  194. package/dist/interfaces/valueGenerator.js +2 -0
  195. package/dist/random.d.ts +12 -0
  196. package/dist/random.js +29 -0
  197. package/package.json +25 -0
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const numericSystem_converter_factory_1 = require("../../numericSystem.converter.factory");
4
+ describe("Sistema Numérico Romano", () => {
5
+ let converter;
6
+ let factory;
7
+ beforeEach(() => {
8
+ factory = new numericSystem_converter_factory_1.NumericSystemConverterFactory();
9
+ converter = factory.createService('roman');
10
+ });
11
+ describe("fromDecimal", () => {
12
+ it("2025", () => {
13
+ const decimalValue = 2025;
14
+ const romamValue = converter.fromDecimal(decimalValue);
15
+ expect(romamValue).toBe("MMXXV");
16
+ });
17
+ it("1999", () => {
18
+ const decimalValue = 1999;
19
+ const romamValue = converter.fromDecimal(decimalValue);
20
+ expect(romamValue).toBe("MCMXCIX");
21
+ });
22
+ it("1992", () => {
23
+ const decimalValue = 1992;
24
+ const romamValue = converter.fromDecimal(decimalValue);
25
+ expect(romamValue).toBe("MCMXCII");
26
+ });
27
+ it("1843", () => {
28
+ const decimalValue = 1843;
29
+ const romamValue = converter.fromDecimal(decimalValue);
30
+ expect(romamValue).toBe("MDCCCXLIII");
31
+ });
32
+ it("5", () => {
33
+ const decimalValue = 5;
34
+ const romamValue = converter.fromDecimal(decimalValue);
35
+ expect(romamValue).toBe("V");
36
+ });
37
+ it("6", () => {
38
+ const decimalValue = 6;
39
+ const romamValue = converter.fromDecimal(decimalValue);
40
+ expect(romamValue).toBe("VI");
41
+ });
42
+ it("1", () => {
43
+ const decimalValue = 1;
44
+ const romamValue = converter.fromDecimal(decimalValue);
45
+ expect(romamValue).toBe("I");
46
+ });
47
+ it("3", () => {
48
+ const decimalValue = 3;
49
+ const romamValue = converter.fromDecimal(decimalValue);
50
+ expect(romamValue).toBe("III");
51
+ });
52
+ it("4", () => {
53
+ const decimalValue = 4;
54
+ const romamValue = converter.fromDecimal(decimalValue);
55
+ expect(romamValue).toBe("IV");
56
+ });
57
+ });
58
+ describe("toDecimal", () => {
59
+ it("MMXXV", () => {
60
+ const romanValue = "MMXXV";
61
+ const decimalValue = converter.toDecimal(romanValue);
62
+ expect(decimalValue).toBe(2025);
63
+ });
64
+ it("MCMXCIX", () => {
65
+ const romanValue = "MCMXCIX";
66
+ const decimalValue = converter.toDecimal(romanValue);
67
+ expect(decimalValue).toBe(1999);
68
+ });
69
+ it("MCMXCII", () => {
70
+ const romanValue = "MCMXCII";
71
+ const decimalValue = converter.toDecimal(romanValue);
72
+ expect(decimalValue).toBe(1992);
73
+ });
74
+ it("MDCCCXLIII", () => {
75
+ const romanValue = "MDCCCXLIII";
76
+ const decimalValue = converter.toDecimal(romanValue);
77
+ expect(decimalValue).toBe(1843);
78
+ });
79
+ it("VI", () => {
80
+ const romanValue = "VI";
81
+ const decimalValue = converter.toDecimal(romanValue);
82
+ expect(decimalValue).toBe(6);
83
+ });
84
+ it("V", () => {
85
+ const romanValue = "V";
86
+ const decimalValue = converter.toDecimal(romanValue);
87
+ expect(decimalValue).toBe(5);
88
+ });
89
+ it("IV", () => {
90
+ const romanValue = "IV";
91
+ const decimalValue = converter.toDecimal(romanValue);
92
+ expect(decimalValue).toBe(4);
93
+ });
94
+ it("III", () => {
95
+ const romanValue = "III";
96
+ const decimalValue = converter.toDecimal(romanValue);
97
+ expect(decimalValue).toBe(3);
98
+ });
99
+ it("I", () => {
100
+ const romanValue = "I";
101
+ const decimalValue = converter.toDecimal(romanValue);
102
+ expect(decimalValue).toBe(1);
103
+ });
104
+ });
105
+ });
@@ -0,0 +1,5 @@
1
+ import { ISerializationOption } from "./ISerializationOptions";
2
+ export interface ISerializationConverter {
3
+ toJson(content: string, options?: ISerializationOption): string;
4
+ fromJson(content: string, options?: ISerializationOption): string;
5
+ }
@@ -0,0 +1,4 @@
1
+ import { IFactory } from "../../../interfaces/IFactory";
2
+ import { ISerializationConverter } from "./ISerialization.converter";
3
+ export interface ISerializationConverterFactory extends IFactory<ISerializationConverter> {
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export interface ISerializationOption {
2
+ separatorCharacter: string;
3
+ considerEmptyAsNull: boolean;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import { IServiceCategory } from "../../interfaces/IServiceCategory";
2
+ export declare const serializations: IServiceCategory[];
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializations = void 0;
4
+ exports.serializations = [
5
+ { id: 'csv' },
6
+ { id: 'json' },
7
+ ];
@@ -0,0 +1,6 @@
1
+ import { ISerializationOption } from "./interfaces/ISerializationOptions";
2
+ export declare class SerializationConverter {
3
+ private readonly factory;
4
+ constructor();
5
+ convert(content: string, from: string, to: string, options?: ISerializationOption): string;
6
+ }
@@ -0,0 +1,9 @@
1
+ import { BaseFactory } from "../../baseFactory";
2
+ import { IServiceCategory } from "../../interfaces/IServiceCategory";
3
+ import { ISerializationConverter } from "./interfaces/ISerialization.converter";
4
+ import { ISerializationConverterFactory } from "./interfaces/ISerialization.converter.factory";
5
+ export declare class SerializationConverterFactory extends BaseFactory<ISerializationConverter> implements ISerializationConverterFactory {
6
+ constructor();
7
+ protected throwServiceNotFoundError(serviceId: string): never;
8
+ protected registerService(service: IServiceCategory): void;
9
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerializationConverterFactory = void 0;
4
+ const baseFactory_1 = require("../../baseFactory");
5
+ const provider_1 = require("./provider");
6
+ class SerializationConverterFactory extends baseFactory_1.BaseFactory {
7
+ constructor() {
8
+ super(provider_1.serializations);
9
+ }
10
+ throwServiceNotFoundError(serviceId) {
11
+ throw new Error(`O conversor solicitado não está implementado: ${serviceId}`);
12
+ }
13
+ registerService(service) {
14
+ const module = require("./services/" + service.id + "/" + service.id + ".converter");
15
+ // Atribui o construtor: preferencialmente `default`, ou a primeira propriedade exportada
16
+ const implementation = module.default || Object.values(module)[0];
17
+ this.map.set(service.id, new implementation());
18
+ }
19
+ }
20
+ exports.SerializationConverterFactory = SerializationConverterFactory;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerializationConverter = void 0;
4
+ const serialization_converter_factory_1 = require("./serialization.converter.factory");
5
+ class SerializationConverter {
6
+ constructor() {
7
+ this.factory = new serialization_converter_factory_1.SerializationConverterFactory();
8
+ }
9
+ convert(content, from, to, options) {
10
+ const source = this.factory.createService(from);
11
+ const target = this.factory.createService(to);
12
+ const json = source.toJson(content, options);
13
+ const result = target.fromJson(json, options);
14
+ return result;
15
+ }
16
+ }
17
+ exports.SerializationConverter = SerializationConverter;
@@ -0,0 +1,6 @@
1
+ import { ISerializationConverter } from "../../interfaces/ISerialization.converter";
2
+ import { ISerializationOption } from "../../interfaces/ISerializationOptions";
3
+ export declare class CsvConverter implements ISerializationConverter {
4
+ toJson(content: string, options?: ISerializationOption): string;
5
+ fromJson(content: string, options?: ISerializationOption): string;
6
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CsvConverter = void 0;
4
+ class CsvConverter {
5
+ toJson(content, options) {
6
+ const separator = options?.separatorCharacter ?? ',';
7
+ const lines = content.split('\n');
8
+ const headers = lines[0].split(separator);
9
+ let jsonContent = [];
10
+ lines.slice(1).map((line, index) => {
11
+ const data = line.replaceAll(" ", "_").split(separator);
12
+ const item = {};
13
+ if (headers.length < data.length)
14
+ throw new Error(`A linha ${index + 1} está com mais colunas do que a quantidade de cabeçalho`);
15
+ if (headers.length > data.length)
16
+ throw new Error(`A linha ${index + 1} está com menos colunas do que a quantidade de cabeçalho`);
17
+ data.map(((value, index) => {
18
+ const header = headers[index];
19
+ const info = value.replaceAll("\"", "").replaceAll("\r", "");
20
+ if (options?.considerEmptyAsNull ?? false)
21
+ item[header] = null;
22
+ else
23
+ item[header] = info;
24
+ }));
25
+ jsonContent.push(item);
26
+ });
27
+ const json = JSON.stringify(jsonContent, null, 2);
28
+ return json;
29
+ }
30
+ fromJson(content, options) {
31
+ if (content === "")
32
+ throw new Error('O conteúdo JSON não pode ser convertido para CSV válido.');
33
+ const json = JSON.parse(content);
34
+ if (!Array.isArray(json)) {
35
+ throw new Error("O conteúdo JSON deve ser um array.");
36
+ }
37
+ if (json.length === 0)
38
+ throw new Error('Não há conteúdo no JSON fornecido.');
39
+ const headers = Object.keys(json[0]);
40
+ if (headers.length === 0)
41
+ throw new Error('Não há conteúdo no JSON fornecido.');
42
+ const separator = options?.separatorCharacter ?? ',';
43
+ const csvLines = json.map(item => {
44
+ return headers.map(header => {
45
+ const value = item[header];
46
+ if (value === null || value === undefined)
47
+ return '';
48
+ return value.toString().replace(/,/g, ''); // Remover vírgulas para evitar problemas no CSV
49
+ }).join(separator);
50
+ });
51
+ csvLines.unshift(headers.join(separator)); // Adicionar cabeçalho
52
+ const csvContent = csvLines.join('\n');
53
+ // Tratar o caso de conteúdo vazio
54
+ if (csvContent.trim() === '') {
55
+ return '';
56
+ }
57
+ // Verificar se o conteúdo CSV é válido
58
+ const isValidCsv = csvContent.split('\n').every(line => {
59
+ return line.split(separator).length === headers.length;
60
+ });
61
+ if (!isValidCsv) {
62
+ throw new Error("O conteúdo JSON não pode ser convertido para CSV válido.");
63
+ }
64
+ // Retornar o conteúdo CSV
65
+ return csvContent;
66
+ }
67
+ }
68
+ exports.CsvConverter = CsvConverter;
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const serialization_converter_factory_1 = require("../../serialization.converter.factory");
4
+ describe('CsvConverter', () => {
5
+ let csvConverter;
6
+ let factory;
7
+ beforeEach(() => {
8
+ factory = new serialization_converter_factory_1.SerializationConverterFactory();
9
+ csvConverter = factory.createService('csv');
10
+ });
11
+ describe('toJson', () => {
12
+ describe('comportamento padrão (sem opções)', () => {
13
+ it('deve converter CSV simples para JSON formatado', () => {
14
+ const csvContent = 'nome,idade,cidade\nJoão,30,São Paulo\nMaria,25,Rio de Janeiro';
15
+ const expectedJson = JSON.stringify([
16
+ { nome: 'João', idade: '30', cidade: 'São_Paulo' },
17
+ { nome: 'Maria', idade: '25', cidade: 'Rio_de_Janeiro' }
18
+ ], null, 2);
19
+ const result = csvConverter.toJson(csvContent);
20
+ expect(result).toBe(expectedJson);
21
+ });
22
+ it('deve converter CSV com uma única linha de dados', () => {
23
+ const csvContent = 'nome,idade\nJoão,30';
24
+ const expectedJson = JSON.stringify([
25
+ { nome: 'João', idade: '30' }
26
+ ], null, 2);
27
+ const result = csvConverter.toJson(csvContent);
28
+ expect(result).toBe(expectedJson);
29
+ });
30
+ it('deve substituir espaços por underscore nos valores', () => {
31
+ const csvContent = 'nome,descricao\nJoão Silva,Analista de Sistemas';
32
+ const expectedJson = JSON.stringify([
33
+ { nome: 'João_Silva', descricao: 'Analista_de_Sistemas' }
34
+ ], null, 2);
35
+ const result = csvConverter.toJson(csvContent);
36
+ expect(result).toBe(expectedJson);
37
+ });
38
+ it('deve remover aspas duplas e caracteres de retorno', () => {
39
+ const csvContent = 'nome,descricao\n"João Silva","Desenvolvedor \"Senior\"\r"';
40
+ const expectedJson = JSON.stringify([
41
+ { nome: 'João_Silva', descricao: 'Desenvolvedor_Senior' }
42
+ ], null, 2);
43
+ const result = csvConverter.toJson(csvContent);
44
+ expect(result).toBe(expectedJson);
45
+ });
46
+ it('deve processar campos vazios como strings vazias por padrão', () => {
47
+ const csvContent = 'nome,idade,cidade\nJoão,,São Paulo\n,25,';
48
+ const expectedJson = JSON.stringify([
49
+ { nome: 'João', idade: '', cidade: 'São_Paulo' },
50
+ { nome: '', idade: '25', cidade: '' }
51
+ ], null, 2);
52
+ const result = csvConverter.toJson(csvContent);
53
+ expect(result).toBe(expectedJson);
54
+ });
55
+ // it('deve retornar array com objetos para cada linha, incluindo vazias', () => {
56
+ // const csvContent = 'nome,idade\nJoão,30\n\nMaria,25';
57
+ // const expectedJson = JSON.stringify([
58
+ // { nome: 'João', idade: '30' },
59
+ // { nome: '', idade: null },
60
+ // { nome: 'Maria', idade: '25' }
61
+ // ], null, 2);
62
+ // const result = csvConverter.toJson(csvContent);
63
+ // expect(result).toBe(expectedJson);
64
+ // });
65
+ });
66
+ describe('com opções customizadas', () => {
67
+ it('deve usar separador customizado', () => {
68
+ const csvContent = 'nome;idade;cidade\nJoão;30;São Paulo';
69
+ const options = {
70
+ separatorCharacter: ';',
71
+ considerEmptyAsNull: false
72
+ };
73
+ const expectedJson = JSON.stringify([
74
+ { nome: 'João', idade: '30', cidade: 'São_Paulo' }
75
+ ], null, 2);
76
+ const result = csvConverter.toJson(csvContent, options);
77
+ expect(result).toBe(expectedJson);
78
+ });
79
+ it('deve considerar campos vazios como null quando considerEmptyAsNull = true', () => {
80
+ const csvContent = 'nome,idade,cidade\nJoão,,São Paulo\n,25,';
81
+ const options = {
82
+ separatorCharacter: ',',
83
+ considerEmptyAsNull: true
84
+ };
85
+ const expectedJson = JSON.stringify([
86
+ { nome: null, idade: null, cidade: null },
87
+ { nome: null, idade: null, cidade: null }
88
+ ], null, 2);
89
+ const result = csvConverter.toJson(csvContent, options);
90
+ expect(result).toBe(expectedJson);
91
+ });
92
+ it('deve combinar separador customizado com considerEmptyAsNull', () => {
93
+ const csvContent = 'nome|idade|cidade\nJoão||São Paulo';
94
+ const options = {
95
+ separatorCharacter: '|',
96
+ considerEmptyAsNull: true
97
+ };
98
+ const expectedJson = JSON.stringify([
99
+ { nome: null, idade: null, cidade: null }
100
+ ], null, 2);
101
+ const result = csvConverter.toJson(csvContent, options);
102
+ expect(result).toBe(expectedJson);
103
+ });
104
+ it('deve manter strings vazias quando considerEmptyAsNull = false', () => {
105
+ const csvContent = 'nome,idade,cidade\nJoão,,São Paulo';
106
+ const options = {
107
+ separatorCharacter: ',',
108
+ considerEmptyAsNull: false
109
+ };
110
+ const expectedJson = JSON.stringify([
111
+ { nome: 'João', idade: '', cidade: 'São_Paulo' }
112
+ ], null, 2);
113
+ const result = csvConverter.toJson(csvContent, options);
114
+ expect(result).toBe(expectedJson);
115
+ });
116
+ });
117
+ // describe('edge cases', () => {
118
+ // // it('deve processar CSV apenas com cabeçalhos', () => {
119
+ // // const csvContent = 'nome,idade,cidade';
120
+ // // const expectedJson = JSON.stringify([], null, 2);
121
+ // // const result = csvConverter.toJson(csvContent);
122
+ // // expect(result).toBe(expectedJson);
123
+ // // });
124
+ // // it('deve lidar com mais valores que cabeçalhos', () => {
125
+ // // const csvContent = 'nome,idade\nJoão,30,São Paulo,Extra';
126
+ // // const result = csvConverter.toJson(csvContent);
127
+ // // const parsed = JSON.parse(result);
128
+ // // expect(parsed).toHaveLength(1);
129
+ // // expect(parsed[0]).toHaveProperty('nome', 'João');
130
+ // // expect(parsed[0]).toHaveProperty('idade', '30');
131
+ // // });
132
+ // // it('deve lidar com menos valores que cabeçalhos', () => {
133
+ // // const csvContent = 'nome,idade,cidade\nJoão,30';
134
+ // // const result = csvConverter.toJson(csvContent);
135
+ // // const parsed = JSON.parse(result);
136
+ // // expect(parsed).toHaveLength(1);
137
+ // // expect(parsed[0]).toHaveProperty('nome', 'João');
138
+ // // expect(parsed[0]).toHaveProperty('idade', '30');
139
+ // // expect(parsed[0]).toHaveProperty('cidade', undefined);
140
+ // // });
141
+ // });
142
+ });
143
+ describe('fromJson', () => {
144
+ describe('comportamento padrão', () => {
145
+ it('deve converter JSON simples para CSV', () => {
146
+ const jsonContent = JSON.stringify([
147
+ { nome: 'João', idade: 30, cidade: 'São Paulo' },
148
+ { nome: 'Maria', idade: 25, cidade: 'Rio de Janeiro' }
149
+ ]);
150
+ const expectedCsv = 'nome,idade,cidade\nJoão,30,São Paulo\nMaria,25,Rio de Janeiro';
151
+ const result = csvConverter.fromJson(jsonContent);
152
+ expect(result).toBe(expectedCsv);
153
+ });
154
+ it('deve converter JSON com um único objeto para CSV', () => {
155
+ const jsonContent = JSON.stringify([
156
+ { nome: 'João', idade: 30 }
157
+ ]);
158
+ const expectedCsv = 'nome,idade\nJoão,30';
159
+ const result = csvConverter.fromJson(jsonContent);
160
+ expect(result).toBe(expectedCsv);
161
+ });
162
+ // it('deve converter valores undefined para string vazia', () => {
163
+ // const jsonContent = JSON.stringify([
164
+ // { nome: 'João', idade: undefined, cidade: 'São Paulo' }
165
+ // ], );
166
+ // const expectedCsv = 'nome,idade,cidade\nJoão,,São Paulo';
167
+ // const result = csvConverter.fromJson(jsonContent);
168
+ // expect(result).toBe(expectedCsv);
169
+ // });
170
+ it('deve converter valores null para string', () => {
171
+ const jsonContent = JSON.stringify([
172
+ { nome: 'João', idade: null, cidade: 'São Paulo' }
173
+ ]);
174
+ const expectedCsv = 'nome,idade,cidade\nJoão,,São Paulo';
175
+ const result = csvConverter.fromJson(jsonContent);
176
+ expect(result).toBe(expectedCsv);
177
+ });
178
+ it('deve remover vírgulas dos valores', () => {
179
+ const jsonContent = JSON.stringify([
180
+ { nome: 'João Silva', endereco: 'Rua A, 123, Bairro B' }
181
+ ]);
182
+ const expectedCsv = 'nome,endereco\nJoão Silva,Rua A 123 Bairro B';
183
+ const result = csvConverter.fromJson(jsonContent);
184
+ expect(result).toBe(expectedCsv);
185
+ });
186
+ it('deve converter diferentes tipos para string', () => {
187
+ const jsonContent = JSON.stringify([
188
+ { nome: 'João', idade: 30, ativo: true, salario: 5000.50 }
189
+ ]);
190
+ const expectedCsv = 'nome,idade,ativo,salario\nJoão,30,true,5000.5';
191
+ const result = csvConverter.fromJson(jsonContent);
192
+ expect(result).toBe(expectedCsv);
193
+ });
194
+ it('deve estourar uma exceção', () => {
195
+ const jsonContent = JSON.stringify([]);
196
+ expect(() => {
197
+ csvConverter.fromJson(jsonContent);
198
+ }).toThrow('Não há conteúdo no JSON fornecido.');
199
+ });
200
+ });
201
+ describe('validações e erros', () => {
202
+ it('deve lançar erro quando JSON não é um array', () => {
203
+ const jsonContent = JSON.stringify({ nome: 'João' });
204
+ expect(() => {
205
+ csvConverter.fromJson(jsonContent);
206
+ }).toThrow('O conteúdo JSON deve ser um array.');
207
+ });
208
+ it('deve lançar erro quando JSON é inválido', () => {
209
+ const jsonContent = '{ nome: "João" }';
210
+ expect(() => {
211
+ csvConverter.fromJson(jsonContent);
212
+ }).toThrow();
213
+ });
214
+ it('deve validar se o CSV gerado é válido', () => {
215
+ const jsonContent = JSON.stringify([
216
+ { nome: 'João', idade: 30 }
217
+ ]);
218
+ const result = csvConverter.fromJson(jsonContent);
219
+ const lines = result.split('\n');
220
+ const headers = lines[0].split(',');
221
+ lines.forEach(line => {
222
+ expect(line.split(',').length).toBe(headers.length);
223
+ });
224
+ });
225
+ it('deve lançar erro quando não consegue gerar CSV válido', () => {
226
+ const jsonContent = JSON.stringify([{}]);
227
+ expect(() => {
228
+ csvConverter.fromJson(jsonContent);
229
+ }).toThrow('Não há conteúdo no JSON fornecido.');
230
+ });
231
+ });
232
+ });
233
+ describe('integração toJson/fromJson', () => {
234
+ it('deve manter consistência básica sem opções', () => {
235
+ const originalCsv = 'nome,idade\nJoão,30\nMaria,25';
236
+ const json = csvConverter.toJson(originalCsv);
237
+ const resultCsv = csvConverter.fromJson(json);
238
+ expect(resultCsv).toContain('nome,idade');
239
+ expect(resultCsv).toContain('João,30');
240
+ expect(resultCsv).toContain('Maria,25');
241
+ });
242
+ it('deve manter consistência com separador customizado', () => {
243
+ const originalCsv = 'nome;idade\nJoão;30';
244
+ const options = {
245
+ separatorCharacter: ';',
246
+ considerEmptyAsNull: false
247
+ };
248
+ const json = csvConverter.toJson(originalCsv, options);
249
+ const resultCsv = csvConverter.fromJson(json);
250
+ expect(resultCsv).toContain('João,30'); // fromJson sempre usa vírgula
251
+ });
252
+ it('deve lidar com campos vazios e null corretamente', () => {
253
+ const originalJson = JSON.stringify([
254
+ { nome: 'João', idade: null, cidade: 'São Paulo' }
255
+ ]);
256
+ const csv = csvConverter.fromJson(originalJson);
257
+ const resultJson = csvConverter.toJson(csv);
258
+ expect(resultJson).toContain('João');
259
+ expect(resultJson).toContain('');
260
+ expect(resultJson).toContain('São_Paulo');
261
+ });
262
+ });
263
+ describe('casos específicos da implementação', () => {
264
+ it('deve estourar exceção caso em alguma parte do CSV tenha um separador diferente do informado', () => {
265
+ // Bug na implementação: usa separador customizado para headers mas vírgula para dados
266
+ const csvContent = 'nome;idade;cidade\nJoão,30,São Paulo'; // Dados com vírgula mas header com ponto e vírgula
267
+ const options = {
268
+ separatorCharacter: ';',
269
+ considerEmptyAsNull: false
270
+ };
271
+ expect(() => {
272
+ csvConverter.toJson(csvContent, options);
273
+ }).toThrow("A linha 1 está com menos colunas do que a quantidade de cabeçalho");
274
+ });
275
+ it('deve aplicar considerEmptyAsNull independente do valor real', () => {
276
+ // Bug na implementação: sempre define como null se considerEmptyAsNull = true
277
+ const csvContent = 'nome,idade\nJoão,30';
278
+ const options = {
279
+ separatorCharacter: ',',
280
+ considerEmptyAsNull: true
281
+ };
282
+ const result = csvConverter.toJson(csvContent, options);
283
+ const parsed = JSON.parse(result);
284
+ expect(parsed[0].nome).toBeNull();
285
+ expect(parsed[0].idade).toBeNull();
286
+ });
287
+ it('deve processar replaceAll corretamente', () => {
288
+ const csvContent = 'nome,descricao\n"João Silva","Texto com espaços"';
289
+ const result = csvConverter.toJson(csvContent);
290
+ const parsed = JSON.parse(result);
291
+ expect(parsed[0].nome).toBe('João__Silva');
292
+ expect(parsed[0].descricao).toBe('Texto__com__espaços');
293
+ });
294
+ });
295
+ });
@@ -0,0 +1,5 @@
1
+ import { ISerializationConverter } from "../../interfaces/ISerialization.converter";
2
+ export declare class JsonConverter implements ISerializationConverter {
3
+ toJson(content: string): string;
4
+ fromJson(content: string): string;
5
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonConverter = void 0;
4
+ class JsonConverter {
5
+ toJson(content) {
6
+ return content;
7
+ }
8
+ fromJson(content) {
9
+ return content;
10
+ }
11
+ }
12
+ exports.JsonConverter = JsonConverter;
@@ -0,0 +1,4 @@
1
+ export interface ITextFormatConverter {
2
+ fromText(value: string): string;
3
+ toText(value: string): string;
4
+ }
@@ -0,0 +1,4 @@
1
+ import { IFactory } from '../../../interfaces/IFactory';
2
+ import { ITextFormatConverter } from './ITextFormatConverter.converter';
3
+ export interface ITextFormatConverterFactory extends IFactory<ITextFormatConverter> {
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import { IServiceCategory } from "../../interfaces/IServiceCategory";
2
+ export declare const textFormats: IServiceCategory[];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.textFormats = void 0;
4
+ exports.textFormats = [
5
+ { id: "text" },
6
+ { id: "morse" },
7
+ { id: "binary" },
8
+ ];
@@ -0,0 +1,5 @@
1
+ import { ITextFormatConverter } from "../../inteface/ITextFormatConverter.converter";
2
+ export declare class BinaryFormatConverter implements ITextFormatConverter {
3
+ fromText(value: string): string;
4
+ toText(value: string): string;
5
+ }