Skip to content

Instantly share code, notes, and snippets.

@danielnass
Last active April 2, 2024 11:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielnass/817d815d7fe91731be409d06d02578cf to your computer and use it in GitHub Desktop.
Save danielnass/817d815d7fe91731be409d06d02578cf to your computer and use it in GitHub Desktop.
Flora & Stiches GAMBIARRA

O pacote Stitches que o Flora utiliza possui diversas correções e melhorias não lançadas, apenas buildadas, inclusive compatbilidade com a versão do TypeScript mais recente. As issues relacionadas ao problema do TS aqui e aqui.

Nesse passo a passo ensino como você pode aproveitar essas melhorias e também corrigir o problema do TypeScript The type of this node cannot be serialized because its property '[$$PropertyValue]' cannot be serialized, que acontece quando queremos usar o TypeScript 4.8+ e exportar um componente de um arquivo, como pode ser visto na imagem a seguir.

Captura de Tela 2023-07-18 às 17 13 14

Algumas threads já foram levantadas no Slack sobre a incopatibilidade

Usando a última versão do Stitches

No seu package.json adicione a seguinte configuração. A versão 1.3.1-1 é o último build feito. O Flora atualmente utiliza a versão 1.2.8 que não é compatível com TypeScript 4.8+.

  "overrides": {
    "@stitches/react": "1.3.1-1"
  },

Agora você pode usar o TypeScript 4.8+ e exportar os componentes com styled normalmente.

Alternativa que não atualiza o Stitches

Da pra contornar de certa forma o problema se criarmos um type gambiarra combinando alguns types do React, e usando a keyword as do TypeScript. A solução pode ser vista no arquivo abaixo StyledHtmlTable.tsx

Melhorando a performance do build

Algumas questões atrapalham na etapa de build quando usamos a função styled do Stitches, e uma pequena alteração no código interno da biblioteca pode melhorar bastante o desempenho.

Em um projeto que trabalho o tempo de build estava em torno de 120s, e depois do patch aplicado caiu para 30s. Essa correção é uma cortesia do usuário jasonaden que compartilhou a solução em uma issue no repositório do stitches

Vou utilizar o pacote patch-package neste caso - mais info https://github.com/ds300/patch-package

Para fazer o patch do Stitches para a últma versão disponível e resolver problemas de performance com build, execute os seguintes passos:

No package.json adicione o seguinte comando:

"scripts": {
+  "postinstall": "patch-package"
}

Logo após, instale o pacote pelo terminal

npm i -D patch-package

Agora procure pelo arquivo node_modules/@stitches/react/types/css-util.d.ts. Já com o arquivo aberto, procure pela linha 98 e comente

[K: string]: (
    | number
    | string
    // | CSS<Media, Theme, ThemeMap, Utils>
    | {}
    | undefined
)

Após a linha 100, adicione any

[K: string]: (
    | number
    | string
    // | CSS<Media, Theme, ThemeMap, Utils>
    | {}
    | undefined
    | any
)

Por fim, rode o seguinte comando no terminal

npx patch-package @stitches/react

Pronto, agora o build de um projeto com Flora/Stitches deve ficar mais rápido 💡

import type { FC, DetailedHTMLProps, TableHTMLAttributes } from 'react';
import { styled } from '@grupoboticario/flora-react';
type StitchesTableGambiarra = FC<DetailedHTMLProps<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>>;
export const StyledTable = styled('table', {
width: '100%',
marginTop: '$4',
}) as StitchesTableGambiarra;
import { Text, styled } from '@grupoboticario/flora-react';
export const StyledPercentage = styled(Text, {
display: 'block',
fontSize: '$sm',
color: '$medium-light-1',
opacity: 0.7,
marginTop: '$1',
}) as typeof Text;
@eroSilva
Copy link

eroSilva commented Apr 2, 2024

@danielnass incrível 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment