@seidor-cloud-produtos/tax-core 0.0.9-beta12 → 0.0.9-beta13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -368,7 +368,7 @@ var CounterRegister = class {
368
368
  return this.reg;
369
369
  }
370
370
  getChildren() {
371
- throw new Error("Method not implemented.");
371
+ return [];
372
372
  }
373
373
  getKeyValue() {
374
374
  return `${this.reg}${this.reg_blc}`;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["import_reflect_metadata","FieldDataType","valueProviderType"]}
1
+ {"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["import_reflect_metadata","FieldDataType","valueProviderType"]}
package/dist/index.mjs CHANGED
@@ -344,7 +344,7 @@ var CounterRegister = class {
344
344
  return this.reg;
345
345
  }
346
346
  getChildren() {
347
- throw new Error("Method not implemented.");
347
+ return [];
348
348
  }
349
349
  getKeyValue() {
350
350
  return `${this.reg}${this.reg_blc}`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["FieldDataType","valueProviderType"]}
1
+ {"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["FieldDataType","valueProviderType"]}
@@ -128,7 +128,7 @@ var CounterRegister = class {
128
128
  return this.reg;
129
129
  }
130
130
  getChildren() {
131
- throw new Error("Method not implemented.");
131
+ return [];
132
132
  }
133
133
  getKeyValue() {
134
134
  return `${this.reg}${this.reg_blc}`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/Decorators.ts"],"sourcesContent":["import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,8BAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAqBzC,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA+DO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;ADtOA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA,EACA,cAAsB;AAClB,WAAO,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO;AAAA,EACrC;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;","names":[]}
1
+ {"version":3,"sources":["../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/Decorators.ts"],"sourcesContent":["import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,8BAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAqBzC,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA+DO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;ADtOA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,WAAO,CAAC;AAAA,EACZ;AAAA,EACA,cAAsB;AAClB,WAAO,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO;AAAA,EACrC;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;","names":[]}
@@ -105,7 +105,7 @@ var CounterRegister = class {
105
105
  return this.reg;
106
106
  }
107
107
  getChildren() {
108
- throw new Error("Method not implemented.");
108
+ return [];
109
109
  }
110
110
  getKeyValue() {
111
111
  return `${this.reg}${this.reg_blc}`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../lib/taxReport/Decorators.ts","../../lib/taxReport/CounterRegister.ts"],"sourcesContent":["import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAqBzC,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA+DO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;ACtOA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA,EACA,cAAsB;AAClB,WAAO,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO;AAAA,EACrC;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;","names":[]}
1
+ {"version":3,"sources":["../../lib/taxReport/Decorators.ts","../../lib/taxReport/CounterRegister.ts"],"sourcesContent":["import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAqBzC,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA+DO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;ACtOA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,WAAO,CAAC;AAAA,EACZ;AAAA,EACA,cAAsB;AAClB,WAAO,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO;AAAA,EACrC;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;","names":[]}
@@ -315,7 +315,7 @@ var CounterRegister = class {
315
315
  return this.reg;
316
316
  }
317
317
  getChildren() {
318
- throw new Error("Method not implemented.");
318
+ return [];
319
319
  }
320
320
  getKeyValue() {
321
321
  return `${this.reg}${this.reg_blc}`;
@@ -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, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n"],"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, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n"],"mappings":"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","names":[]}
@@ -289,7 +289,7 @@ var CounterRegister = class {
289
289
  return this.reg;
290
290
  }
291
291
  getChildren() {
292
- throw new Error("Method not implemented.");
292
+ return [];
293
293
  }
294
294
  getKeyValue() {
295
295
  return `${this.reg}${this.reg_blc}`;
@@ -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\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n"],"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\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seidor-cloud-produtos/tax-core",
3
- "version": "0.0.9-beta12",
3
+ "version": "0.0.9-beta13",
4
4
  "description": "Biblioteca para acelerar a geração de arquivos fiscais",
5
5
  "files": [
6
6
  "dist/**/*",