Executando verificação de segurança...
14

NFeWizard-io: Ajuda / Como anda o Open-Source / 3 meses da minha primeira LIB

Um resumo de como anda o desenvolvimento open-source e uma busca por sugestões

3 meses no open-source

Após 3 meses do lançamento da minha biblioteca nfewizard-io no mundo open-source, posso dizer que tem sido uma experiência revigorante. Foi muito interessante receber diversos contatos de diferentes frentes, como LinkedIn, GitHub e até mesmo Telegram, com dúvidas, sugestões, pull requests, issues e mensagens de apoio ao projeto.

Graças a essas interações, hoje a biblioteca conta com novas funcionalidades, como emissão de NFC-e, geração de DANFE com QR code, entre outras melhorias menores que facilitam a geração e emissão de documentos fiscais.

Além disso, agora é possível acessar a tipagem completa de NFe em TypeScript, pois ela é exportada diretamente pela biblioteca.

E uma boa surpresa: nesse período, recebemos até uma doação em apoio ao projeto!

Pedido de ajuda

Agora vamos à parte técnica, onde uma ajuda seria muito bem-vinda.

Recentemente, adicionei a possibilidade de build da biblioteca utilizando o Rollup. Porém, apesar de usar o rollup-plugin-terser o tamanho final (unpacked size) está ficando bastante grande.

Isso ocorre, em parte, porque a biblioteca precisa incluir a cadeia de certificados das autoridades certificadoras para comunicação com a SEFAZ, além dos schemas de validação dos XMLs para validar o conteúdo antes de enviá-lo à SEFAZ, reduzindo o risco de erro e consumo indevido em casos de múltiplas tentativas.

Ambas as pastas de certificados e schemas são adicionadas à build.

Testei carregar os schemas sob demanda via CDN, mas isso aumentou significativamente o tempo de execução dos métodos.

Sugestões ou pull requests com possíveis soluções seriam extremamente bem-vindas!

Caso queiram dar uma olhada, segue a página do projeto:
NFeWizard-io - GitHub
NFeWizard-io - Documentação

Carregando publicação patrocinada...
1

Após revisar o repositório, tive uma ideia de compressão dos certificados e schemas que seria viável. Uma abordagem prática para reduzir o tamanho do bundle seria:

  1. Comprimir as pastas certificates e schemas utilizando gzip.
  2. Usar a biblioteca zlib em Node.js para descompactá-los sob demanda, carregando cada schema ou certificado apenas quando necessário.

Essa abordagem deve reduzir o tamanho do pacote final, mantendo o desempenho.

Aqui está um exemplo prático para implementar a sugestão de compressão e lazy loading dos certificados e schemas:

  1. Comprimir arquivos com gzip:

    • No terminal, comprima os arquivos na pasta certificates e schemas:
      gzip -k ./certificates/*.pem ./schemas/*.xsd
      
  2. Descompactar sob demanda com zlib:

    • No código, use o módulo zlib para carregar e descomprimir quando necessário:
    import zlib from 'zlib';
    import fs from 'fs';
    import path from 'path';
    
    // Função para descomprimir e carregar arquivos
    const loadCompressedFile = (filePath) => {
        const compressedData = fs.readFileSync(`${filePath}.gz`);
        return zlib.gunzipSync(compressedData).toString('utf8');
    };
    
    // Exemplo de uso
    const schemaContent = loadCompressedFile(path.resolve(__dirname, './schemas/schema-name.xsd'));
    
  3. Atualizar o Rollup para incluir apenas os arquivos comprimidos:

    • Certifique-se de que o Rollup inclui os arquivos .gz para evitar duplicação e reduzir o tamanho final do bundle.

Esse processo diminui o bundle inicial e carrega apenas o que for necessário para a comunicação com a SEFAZ, mantendo o desempenho.

O que acha? se falei besteira pode desconsiderar