@seidor-cloud-produtos/tax-core 0.0.9-beta13 → 0.0.9-beta14
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.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +29 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -25
- package/dist/index.mjs.map +1 -1
- package/dist/taxReport/CounterRegister.js +5 -5
- package/dist/taxReport/CounterRegister.js.map +1 -1
- package/dist/taxReport/CounterRegister.mjs +5 -5
- package/dist/taxReport/CounterRegister.mjs.map +1 -1
- package/dist/taxReport/Decorators.d.mts +32 -1
- package/dist/taxReport/Decorators.d.ts +32 -1
- package/dist/taxReport/Decorators.js +19 -19
- package/dist/taxReport/Decorators.js.map +1 -1
- package/dist/taxReport/Decorators.mjs +15 -15
- package/dist/taxReport/Decorators.mjs.map +1 -1
- package/dist/taxReport/Register.js.map +1 -1
- package/dist/taxReport/Register.mjs.map +1 -1
- package/dist/taxReport/ReportGenerator.js +5 -5
- package/dist/taxReport/ReportGenerator.js.map +1 -1
- package/dist/taxReport/ReportGenerator.mjs +5 -5
- package/dist/taxReport/ReportGenerator.mjs.map +1 -1
- package/dist/taxReport/implementations/TaxRegisterGenerator.js.map +1 -1
- package/dist/taxReport/implementations/TaxRegisterGenerator.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/Decorators-DhoiAspk.d.mts +0 -50
- package/dist/Decorators-DhoiAspk.d.ts +0 -50
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { default as Block } from './taxReport/Block.mjs';
|
|
2
|
-
export { D as Decorators } from './Decorators-DhoiAspk.mjs';
|
|
3
2
|
export { R as Register, a as RegisterEventNotifier, b as RegisterSubscriber } from './Register-DYZa-bHZ.mjs';
|
|
4
3
|
export { R as Generation } from './ReportGenerator-vfu8wCSF.mjs';
|
|
5
4
|
export { default as TaxReport } from './taxReport/TaxReport.mjs';
|
|
@@ -9,4 +8,5 @@ export { default as TaxRegisterGenerator } from './taxReport/implementations/Tax
|
|
|
9
8
|
export { OutputWriter } from './taxReport/interfaces/OutputWriter.mjs';
|
|
10
9
|
export { default as RegisterGenerator } from './taxReport/interfaces/RegisterGenerator.mjs';
|
|
11
10
|
export { default as RegisterPersist } from './taxReport/interfaces/RegisterPersist.mjs';
|
|
11
|
+
export { Alphanumeric, Decimal, DefaultAlphanumericLength, FieldDataType, FieldFormat, Key, KeyComposition, KeyFieldDefinition, MaximumNumericLength, Numeric, ValueProviderType } from './taxReport/Decorators.mjs';
|
|
12
12
|
import './taxReport/TagCounter.mjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { default as Block } from './taxReport/Block.js';
|
|
2
|
-
export { D as Decorators } from './Decorators-DhoiAspk.js';
|
|
3
2
|
export { R as Register, a as RegisterEventNotifier, b as RegisterSubscriber } from './Register-DYZa-bHZ.js';
|
|
4
3
|
export { R as Generation } from './ReportGenerator-DvTuQ4Xj.js';
|
|
5
4
|
export { default as TaxReport } from './taxReport/TaxReport.js';
|
|
@@ -9,4 +8,5 @@ export { default as TaxRegisterGenerator } from './taxReport/implementations/Tax
|
|
|
9
8
|
export { OutputWriter } from './taxReport/interfaces/OutputWriter.js';
|
|
10
9
|
export { default as RegisterGenerator } from './taxReport/interfaces/RegisterGenerator.js';
|
|
11
10
|
export { default as RegisterPersist } from './taxReport/interfaces/RegisterPersist.js';
|
|
11
|
+
export { Alphanumeric, Decimal, DefaultAlphanumericLength, FieldDataType, FieldFormat, Key, KeyComposition, KeyFieldDefinition, MaximumNumericLength, Numeric, ValueProviderType } from './taxReport/Decorators.js';
|
|
12
12
|
import './taxReport/TagCounter.js';
|
package/dist/index.js
CHANGED
|
@@ -30,14 +30,21 @@ var __publicField = (obj, key2, value) => __defNormalProp(obj, typeof key2 !== "
|
|
|
30
30
|
// lib/index.ts
|
|
31
31
|
var lib_exports = {};
|
|
32
32
|
__export(lib_exports, {
|
|
33
|
+
Alphanumeric: () => Alphanumeric,
|
|
33
34
|
Block: () => Block,
|
|
34
35
|
ConsoleOutput: () => ConsoleOutput,
|
|
35
|
-
|
|
36
|
+
Decimal: () => Decimal,
|
|
37
|
+
DefaultAlphanumericLength: () => DefaultAlphanumericLength,
|
|
38
|
+
FieldDataType: () => FieldDataType,
|
|
36
39
|
Generation: () => ReportGenerator_exports,
|
|
40
|
+
Key: () => Key,
|
|
41
|
+
MaximumNumericLength: () => MaximumNumericLength,
|
|
37
42
|
MemoryPersist: () => MemoryPersist,
|
|
43
|
+
Numeric: () => Numeric,
|
|
38
44
|
Register: () => Register,
|
|
39
45
|
TaxRegisterGenerator: () => TaxRegisterGenerator,
|
|
40
|
-
TaxReport: () => TaxReport
|
|
46
|
+
TaxReport: () => TaxReport,
|
|
47
|
+
ValueProviderType: () => ValueProviderType
|
|
41
48
|
});
|
|
42
49
|
module.exports = __toCommonJS(lib_exports);
|
|
43
50
|
var import_reflect_metadata2 = require("reflect-metadata");
|
|
@@ -95,32 +102,20 @@ var Block = class {
|
|
|
95
102
|
};
|
|
96
103
|
|
|
97
104
|
// lib/taxReport/Decorators.ts
|
|
98
|
-
var Decorators_exports = {};
|
|
99
|
-
__export(Decorators_exports, {
|
|
100
|
-
Alphanumeric: () => Alphanumeric,
|
|
101
|
-
Decimal: () => Decimal,
|
|
102
|
-
FieldDataType: () => FieldDataType,
|
|
103
|
-
Key: () => Key,
|
|
104
|
-
Numeric: () => Numeric,
|
|
105
|
-
defaultAlphanumericLength: () => defaultAlphanumericLength,
|
|
106
|
-
keyCompositionMetadata: () => keyCompositionMetadata,
|
|
107
|
-
maximumNumericLength: () => maximumNumericLength,
|
|
108
|
-
valueProviderType: () => valueProviderType
|
|
109
|
-
});
|
|
110
105
|
var import_reflect_metadata = require("reflect-metadata");
|
|
111
106
|
var keyCompositionMetadata = Symbol("key");
|
|
112
|
-
var
|
|
113
|
-
var
|
|
107
|
+
var MaximumNumericLength = 19;
|
|
108
|
+
var DefaultAlphanumericLength = 255;
|
|
114
109
|
var FieldDataType = /* @__PURE__ */ ((FieldDataType2) => {
|
|
115
110
|
FieldDataType2[FieldDataType2["alphanumeric"] = 0] = "alphanumeric";
|
|
116
111
|
FieldDataType2[FieldDataType2["numeric"] = 1] = "numeric";
|
|
117
112
|
return FieldDataType2;
|
|
118
113
|
})(FieldDataType || {});
|
|
119
|
-
var
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return
|
|
123
|
-
})(
|
|
114
|
+
var ValueProviderType = /* @__PURE__ */ ((ValueProviderType2) => {
|
|
115
|
+
ValueProviderType2[ValueProviderType2["property"] = 0] = "property";
|
|
116
|
+
ValueProviderType2[ValueProviderType2["method"] = 1] = "method";
|
|
117
|
+
return ValueProviderType2;
|
|
118
|
+
})(ValueProviderType || {});
|
|
124
119
|
function numericField(required, maximumLength, valueProvider, fillEntireLength = false, maximumDecimalsLength = 0) {
|
|
125
120
|
return {
|
|
126
121
|
required,
|
|
@@ -141,10 +136,10 @@ function alphanumericField(required, maximumLength, valueProvider, fillEntireLen
|
|
|
141
136
|
valueProvider
|
|
142
137
|
};
|
|
143
138
|
}
|
|
144
|
-
function Numeric(required = false, fillEntireLength = false, maximumLength =
|
|
139
|
+
function Numeric(required = false, fillEntireLength = false, maximumLength = MaximumNumericLength) {
|
|
145
140
|
return function(target, propertyKey, other) {
|
|
146
141
|
Reflect.defineMetadata(
|
|
147
|
-
propertyKey
|
|
142
|
+
propertyKey,
|
|
148
143
|
numericField(
|
|
149
144
|
required,
|
|
150
145
|
maximumLength,
|
|
@@ -155,7 +150,7 @@ function Numeric(required = false, fillEntireLength = false, maximumLength = max
|
|
|
155
150
|
);
|
|
156
151
|
};
|
|
157
152
|
}
|
|
158
|
-
function Decimal(required = false, fillEntireLength = false, maximumLength =
|
|
153
|
+
function Decimal(required = false, fillEntireLength = false, maximumLength = MaximumNumericLength, maximumDecimalsLength = 2) {
|
|
159
154
|
return function(target, propertyKey, other) {
|
|
160
155
|
Reflect.defineMetadata(
|
|
161
156
|
propertyKey,
|
|
@@ -170,7 +165,7 @@ function Decimal(required = false, fillEntireLength = false, maximumLength = max
|
|
|
170
165
|
);
|
|
171
166
|
};
|
|
172
167
|
}
|
|
173
|
-
function Alphanumeric(required = false, fillEntireLength = false, maximumLength =
|
|
168
|
+
function Alphanumeric(required = false, fillEntireLength = false, maximumLength = DefaultAlphanumericLength) {
|
|
174
169
|
return function(target, propertyKey, other) {
|
|
175
170
|
Reflect.defineMetadata(
|
|
176
171
|
propertyKey,
|
|
@@ -619,13 +614,20 @@ var TaxReport = class {
|
|
|
619
614
|
};
|
|
620
615
|
// Annotate the CommonJS export names for ESM import in node:
|
|
621
616
|
0 && (module.exports = {
|
|
617
|
+
Alphanumeric,
|
|
622
618
|
Block,
|
|
623
619
|
ConsoleOutput,
|
|
624
|
-
|
|
620
|
+
Decimal,
|
|
621
|
+
DefaultAlphanumericLength,
|
|
622
|
+
FieldDataType,
|
|
625
623
|
Generation,
|
|
624
|
+
Key,
|
|
625
|
+
MaximumNumericLength,
|
|
626
626
|
MemoryPersist,
|
|
627
|
+
Numeric,
|
|
627
628
|
Register,
|
|
628
629
|
TaxRegisterGenerator,
|
|
629
|
-
TaxReport
|
|
630
|
+
TaxReport,
|
|
631
|
+
ValueProviderType
|
|
630
632
|
});
|
|
631
633
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["import_reflect_metadata","FieldDataType","valueProviderType"]}
|
|
1
|
+
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\nimport {\n MaximumNumericLength,\n DefaultAlphanumericLength,\n FieldDataType,\n ValueProviderType,\n FieldFormat,\n Numeric, \n Alphanumeric, \n Decimal, \n Key,\n KeyComposition,\n KeyFieldDefinition,\n \n} from \"./taxReport/Decorators\";\n\nexport {\n Block,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n MaximumNumericLength,\n DefaultAlphanumericLength,\n FieldDataType,\n ValueProviderType,\n FieldFormat,\n Numeric, \n Alphanumeric, \n Decimal, \n Key,\n KeyComposition,\n KeyFieldDefinition,\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\";\n\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const MaximumNumericLength = 19;\nexport const DefaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum ValueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: ValueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: ValueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: ValueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = MaximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? ValueProviderType.method : ValueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = MaximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? ValueProviderType.method : ValueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = DefaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? ValueProviderType.method : ValueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: ValueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: ValueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any) {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? ValueProviderType.method : ValueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["import_reflect_metadata","FieldDataType","ValueProviderType"]}
|
package/dist/index.mjs
CHANGED
|
@@ -71,32 +71,20 @@ var Block = class {
|
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
// lib/taxReport/Decorators.ts
|
|
74
|
-
var Decorators_exports = {};
|
|
75
|
-
__export(Decorators_exports, {
|
|
76
|
-
Alphanumeric: () => Alphanumeric,
|
|
77
|
-
Decimal: () => Decimal,
|
|
78
|
-
FieldDataType: () => FieldDataType,
|
|
79
|
-
Key: () => Key,
|
|
80
|
-
Numeric: () => Numeric,
|
|
81
|
-
defaultAlphanumericLength: () => defaultAlphanumericLength,
|
|
82
|
-
keyCompositionMetadata: () => keyCompositionMetadata,
|
|
83
|
-
maximumNumericLength: () => maximumNumericLength,
|
|
84
|
-
valueProviderType: () => valueProviderType
|
|
85
|
-
});
|
|
86
74
|
import "reflect-metadata";
|
|
87
75
|
var keyCompositionMetadata = Symbol("key");
|
|
88
|
-
var
|
|
89
|
-
var
|
|
76
|
+
var MaximumNumericLength = 19;
|
|
77
|
+
var DefaultAlphanumericLength = 255;
|
|
90
78
|
var FieldDataType = /* @__PURE__ */ ((FieldDataType2) => {
|
|
91
79
|
FieldDataType2[FieldDataType2["alphanumeric"] = 0] = "alphanumeric";
|
|
92
80
|
FieldDataType2[FieldDataType2["numeric"] = 1] = "numeric";
|
|
93
81
|
return FieldDataType2;
|
|
94
82
|
})(FieldDataType || {});
|
|
95
|
-
var
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return
|
|
99
|
-
})(
|
|
83
|
+
var ValueProviderType = /* @__PURE__ */ ((ValueProviderType2) => {
|
|
84
|
+
ValueProviderType2[ValueProviderType2["property"] = 0] = "property";
|
|
85
|
+
ValueProviderType2[ValueProviderType2["method"] = 1] = "method";
|
|
86
|
+
return ValueProviderType2;
|
|
87
|
+
})(ValueProviderType || {});
|
|
100
88
|
function numericField(required, maximumLength, valueProvider, fillEntireLength = false, maximumDecimalsLength = 0) {
|
|
101
89
|
return {
|
|
102
90
|
required,
|
|
@@ -117,10 +105,10 @@ function alphanumericField(required, maximumLength, valueProvider, fillEntireLen
|
|
|
117
105
|
valueProvider
|
|
118
106
|
};
|
|
119
107
|
}
|
|
120
|
-
function Numeric(required = false, fillEntireLength = false, maximumLength =
|
|
108
|
+
function Numeric(required = false, fillEntireLength = false, maximumLength = MaximumNumericLength) {
|
|
121
109
|
return function(target, propertyKey, other) {
|
|
122
110
|
Reflect.defineMetadata(
|
|
123
|
-
propertyKey
|
|
111
|
+
propertyKey,
|
|
124
112
|
numericField(
|
|
125
113
|
required,
|
|
126
114
|
maximumLength,
|
|
@@ -131,7 +119,7 @@ function Numeric(required = false, fillEntireLength = false, maximumLength = max
|
|
|
131
119
|
);
|
|
132
120
|
};
|
|
133
121
|
}
|
|
134
|
-
function Decimal(required = false, fillEntireLength = false, maximumLength =
|
|
122
|
+
function Decimal(required = false, fillEntireLength = false, maximumLength = MaximumNumericLength, maximumDecimalsLength = 2) {
|
|
135
123
|
return function(target, propertyKey, other) {
|
|
136
124
|
Reflect.defineMetadata(
|
|
137
125
|
propertyKey,
|
|
@@ -146,7 +134,7 @@ function Decimal(required = false, fillEntireLength = false, maximumLength = max
|
|
|
146
134
|
);
|
|
147
135
|
};
|
|
148
136
|
}
|
|
149
|
-
function Alphanumeric(required = false, fillEntireLength = false, maximumLength =
|
|
137
|
+
function Alphanumeric(required = false, fillEntireLength = false, maximumLength = DefaultAlphanumericLength) {
|
|
150
138
|
return function(target, propertyKey, other) {
|
|
151
139
|
Reflect.defineMetadata(
|
|
152
140
|
propertyKey,
|
|
@@ -594,13 +582,20 @@ var TaxReport = class {
|
|
|
594
582
|
}
|
|
595
583
|
};
|
|
596
584
|
export {
|
|
585
|
+
Alphanumeric,
|
|
597
586
|
Block,
|
|
598
587
|
ConsoleOutput,
|
|
599
|
-
|
|
588
|
+
Decimal,
|
|
589
|
+
DefaultAlphanumericLength,
|
|
590
|
+
FieldDataType,
|
|
600
591
|
ReportGenerator_exports as Generation,
|
|
592
|
+
Key,
|
|
593
|
+
MaximumNumericLength,
|
|
601
594
|
MemoryPersist,
|
|
595
|
+
Numeric,
|
|
602
596
|
Register,
|
|
603
597
|
TaxRegisterGenerator,
|
|
604
|
-
TaxReport
|
|
598
|
+
TaxReport,
|
|
599
|
+
ValueProviderType
|
|
605
600
|
};
|
|
606
601
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["FieldDataType","valueProviderType"]}
|
|
1
|
+
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\nimport {\n MaximumNumericLength,\n DefaultAlphanumericLength,\n FieldDataType,\n ValueProviderType,\n FieldFormat,\n Numeric, \n Alphanumeric, \n Decimal, \n Key,\n KeyComposition,\n KeyFieldDefinition,\n \n} from \"./taxReport/Decorators\";\n\nexport {\n Block,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n MaximumNumericLength,\n DefaultAlphanumericLength,\n FieldDataType,\n ValueProviderType,\n FieldFormat,\n Numeric, \n Alphanumeric, \n Decimal, \n Key,\n KeyComposition,\n KeyFieldDefinition,\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\";\n\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const MaximumNumericLength = 19;\nexport const DefaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum ValueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: ValueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: ValueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: ValueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = MaximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? ValueProviderType.method : ValueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = MaximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? ValueProviderType.method : ValueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = DefaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? ValueProviderType.method : ValueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: ValueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: ValueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any) {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? ValueProviderType.method : ValueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["FieldDataType","ValueProviderType"]}
|