@seidor-cloud-produtos/tax-core 0.0.6-beta3 → 0.0.6-beta4

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.
@@ -4,7 +4,6 @@ declare class CounterRegister extends Register {
4
4
  reg_blc: string;
5
5
  qtd_reg_blc: number;
6
6
  constructor(qtd_reg_blc?: number, register?: string);
7
- getKeyValue(): string;
8
7
  }
9
8
 
10
9
  export { CounterRegister as default };
@@ -4,7 +4,6 @@ declare class CounterRegister extends Register {
4
4
  reg_blc: string;
5
5
  qtd_reg_blc: number;
6
6
  constructor(qtd_reg_blc?: number, register?: string);
7
- getKeyValue(): string;
8
7
  }
9
8
 
10
9
  export { CounterRegister as default };
@@ -166,11 +166,9 @@ var CounterRegister = class extends Register {
166
166
  __publicField(this, "reg_blc", "");
167
167
  __publicField(this, "qtd_reg_blc", 0);
168
168
  }
169
- getKeyValue() {
170
- return `${Date.now()}`;
171
- }
172
169
  };
173
170
  __decorateClass([
171
+ Key(),
174
172
  Alphanumeric()
175
173
  ], CounterRegister.prototype, "reg_blc", 2);
176
174
  __decorateClass([
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/taxReport/CounterRegister.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts"],"sourcesContent":["import { Register } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n\n override getKeyValue(): string {\n return `${Date.now()}`\n }\n}\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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../lib/taxReport/CounterRegister.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts"],"sourcesContent":["import { Register } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Key()\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n}\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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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"],"mappings":"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","names":[]}
@@ -144,11 +144,9 @@ var CounterRegister = class extends Register {
144
144
  __publicField(this, "reg_blc", "");
145
145
  __publicField(this, "qtd_reg_blc", 0);
146
146
  }
147
- getKeyValue() {
148
- return `${Date.now()}`;
149
- }
150
147
  };
151
148
  __decorateClass([
149
+ Key(),
152
150
  Alphanumeric()
153
151
  ], CounterRegister.prototype, "reg_blc", 2);
154
152
  __decorateClass([
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts","../lib/taxReport/CounterRegister.ts"],"sourcesContent":["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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 { Register } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n\n override getKeyValue(): string {\n return `${Date.now()}`\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts","../lib/taxReport/CounterRegister.ts"],"sourcesContent":["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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 { Register } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Key()\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n}\n"],"mappings":"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","names":[]}
@@ -305,11 +305,9 @@ var CounterRegister = class extends Register {
305
305
  __publicField(this, "reg_blc", "");
306
306
  __publicField(this, "qtd_reg_blc", 0);
307
307
  }
308
- getKeyValue() {
309
- return `${Date.now()}`;
310
- }
311
308
  };
312
309
  __decorateClass([
310
+ Key(),
313
311
  Alphanumeric()
314
312
  ], CounterRegister.prototype, "reg_blc", 2);
315
313
  __decorateClass([
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/taxReport/ReportGenerator.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/Block.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts"],"sourcesContent":["import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n\n override getKeyValue(): string {\n return `${Date.now()}`\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../lib/taxReport/ReportGenerator.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/Block.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts"],"sourcesContent":["import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Key()\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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"],"mappings":"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","names":[]}
@@ -280,11 +280,9 @@ var CounterRegister = class extends Register {
280
280
  __publicField(this, "reg_blc", "");
281
281
  __publicField(this, "qtd_reg_blc", 0);
282
282
  }
283
- getKeyValue() {
284
- return `${Date.now()}`;
285
- }
286
283
  };
287
284
  __decorateClass([
285
+ Key(),
288
286
  Alphanumeric()
289
287
  ], CounterRegister.prototype, "reg_blc", 2);
290
288
  __decorateClass([
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/Block.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/ReportGenerator.ts"],"sourcesContent":["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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n\n override getKeyValue(): string {\n return `${Date.now()}`\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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 TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../lib/taxReport/Decorators.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Register.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/Block.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/ReportGenerator.ts"],"sourcesContent":["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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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 { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Key()\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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 TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -348,11 +348,9 @@ var CounterRegister = class extends Register {
348
348
  __publicField(this, "reg_blc", "");
349
349
  __publicField(this, "qtd_reg_blc", 0);
350
350
  }
351
- getKeyValue() {
352
- return `${Date.now()}`;
353
- }
354
351
  };
355
352
  __decorateClass([
353
+ Key(),
356
354
  Alphanumeric()
357
355
  ], CounterRegister.prototype, "reg_blc", 2);
358
356
  __decorateClass([
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/taxReport/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.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/ReportGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import Block from \"./Block\";\nimport * as Decorators from \"./Decorators\";\nimport { Register } from \"./Register\";\nimport ReportGenerator from \"./ReportGenerator\";\nimport TaxReport from \"./TaxReport\";\nimport ConsoleOutput from \"./implementations/ConsoleOutput\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n ReportGenerator,\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 } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\n }\n}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n\n override getKeyValue(): string {\n return `${Date.now()}`\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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 TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\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/taxReport/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.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/ReportGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import Block from \"./Block\";\nimport * as Decorators from \"./Decorators\";\nimport { Register } from \"./Register\";\nimport ReportGenerator from \"./ReportGenerator\";\nimport TaxReport from \"./TaxReport\";\nimport ConsoleOutput from \"./implementations/ConsoleOutput\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n ReportGenerator,\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 } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\n }\n}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Key()\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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 TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\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"]}
package/dist/index.mjs CHANGED
@@ -323,11 +323,9 @@ var CounterRegister = class extends Register {
323
323
  __publicField(this, "reg_blc", "");
324
324
  __publicField(this, "qtd_reg_blc", 0);
325
325
  }
326
- getKeyValue() {
327
- return `${Date.now()}`;
328
- }
329
326
  };
330
327
  __decorateClass([
328
+ Key(),
331
329
  Alphanumeric()
332
330
  ], CounterRegister.prototype, "reg_blc", 2);
333
331
  __decorateClass([
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.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/ReportGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\n }\n}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\n }\n\n override getKeyValue(): string {\n return `${Date.now()}`\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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 TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\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/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.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/ReportGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register } 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{\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: Register, b: Register) =>\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 Register>(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): Register {\n return this.registersPersist.getByKey(registerKey);\n }\n}\n","import {Register} 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: Register\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: Register): 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: Register): 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): PropertyDecorator | MethodDecorator {\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 Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n): PropertyDecorator | MethodDecorator {\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 Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n): PropertyDecorator | MethodDecorator {\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 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(): PropertyDecorator | MethodDecorator {\n return function (target: any, propertyKey: string, 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}\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport abstract class Register {\n private _registerNotifier: RegisterEventNotifier;\n private readonly _children: Register[];\n\n // @ts-ignore\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): Register[] {\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 {Register} 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: Register) {\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 {\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 } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\n\nexport default class CounterRegister extends Register {\n\n // @ts-ignore\n @Key()\n // @ts-ignore\n @Alphanumeric()\n reg_blc: string = \"\";\n\n // @ts-ignore\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n super(register, null);\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 separtorAtTheRegisterEnd: 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 separtorAtTheRegisterEnd: 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\n // let registerStr = \"\"\n const metadataKeys = Reflect.getMetadataKeys(register);\n for (const metadataKey of metadataKeys) {\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 this._options.fieldSeparator,\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n this._options.fieldSeparator,\n );\n break;\n }\n }\n if (this._options.separtorAtTheRegisterEnd) {\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 TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register } 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\";\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, null);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, null);\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, null);\n }\n\n qtd_lin: number = 0;\n}\n\nexport default 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);\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: Register) {}\n\n protected registerGeneration(register: Register) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: Register) {\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: Register) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n // Retrieve the metadata for the decorator\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seidor-cloud-produtos/tax-core",
3
- "version": "0.0.6-beta3",
3
+ "version": "0.0.6-beta4",
4
4
  "description": "Biblioteca para acelerar a geração de arquivos fiscais",
5
5
  "files": [
6
6
  "dist",