deco-migrate: 6 bugs de scaffold/template encontrados numa migração real (portal-davinci deco-fresh→TanStack)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 5
- Forks
- 2
- Avg merge
- 20h 12m
- Merged PRs (30d)
- 36
Description
Bugs do deco-migrate (packages/blocks-cli) encontrados na primeira migração real de um site de conteúdo deco-fresh (deco-sites/portal-davinci → TanStack). Todos reproduzíveis, com fix sugerido. Contexto completo: decocms/parity#233-265.
1. siteName gerado com maiúscula → lookup CMS falha (blank SSR) [ALTO]
As rotas geradas (src/routes/index.tsx, $.tsx) usam siteName: "Portaldavinci-tanstack" (capitalizado). O lookup do decofile é case-sensitive → retorna vazio → todas as seções renderizam vazias no SSR (CLS alto, página em branco sem JS).
Fix: siteName = nome do site em minúsculas (igual ao name do wrangler.jsonc). ctx.siteName.toLowerCase().
2. wrangler.jsonc com KV placeholder inválido [ALTO]
Gera "kv_namespaces": [{ "binding": "SITES_KV", "id": "dev-sites-kv" }]. O id precisa ser um UUID real → deploy falha com KV namespace 'dev-sites-kv' is not valid [code 10042].
Fix: criar o KV via wrangler kv namespace create no bootstrap e injetar o id, OU deixar comentado com instrução explícita.
3. // line comments dentro de funções useScript quebram após minificação [ALTO]
O minifyJs do useScript colapsa newlines → qualquer // comment dentro da função serializada engole o resto do código → Unexpected end of input em runtime (script inline malformado). No portal-davinci havia 15 (@ts-ignore + comentários) no Maps.tsx → mapa em branco + erro de console. Passa no typecheck e no build, só quebra em runtime.
Fix: o codemod do deco-migrate deve remover/converter // line comments (→ /* */) dentro de funções passadas a useScript/useScriptAsDataURI.
4. Template do setup.ts gera campos fora do SiteSetupOptions [MÉDIO]
O template emite css, fonts, meta, previewWrapper em createSiteSetup({...}), mas o tipo SiteSetupOptions do @decocms/blocks não tem esses campos → erros TS na fase build (meta does not exist in type SiteSetupOptions, @ts-expect-error não usado). O template usa @ts-ignore mas o generate usa @ts-expect-error.
Fix: alinhar o tipo SiteSetupOptions com o que o template gera (add css/fonts/previewWrapper/meta) OU remover do template.
5. Não gera public/_headers → assets sem cache imutável [MÉDIO]
Assets hasheados (/assets/*-<hash>.js) são servidos pelo CF Workers Assets com o default max-age=0, must-revalidate (a lógica de immutable do worker-entry não roda neles, pois são servidos antes do worker). PageSpeed/parity penalizam.
Fix: gerar public/_headers com /assets/* → Cache-Control: public, max-age=31536000, immutable (filenames são content-addressed).
6. Migrate não deve decriptar Secret blocks pra plaintext [MÉDIO/segurança]
Se o site origem usa Secret blocks (valor criptografado, decriptado server-side via decrypt key), a migração deve preservar o __resolveType de Secret + o ciphertext — não inline em plaintext no decofile de destino (regressão de segurança). No portal-davinci a Maps apiKey já estava plaintext no origem, mas validar o caminho Secret.
Menores relacionados (orchestrator-side, já tratados no plugin parity): bun run predev falha em deco-fresh (sem package.json); bun run generate precisa rodar antes do typecheck.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in packages/blocks-cli and trace the generators for src/routes/index.tsx, $.tsx, wrangler.jsonc, setup.ts, and public/_headers. Then inspect minifyJs, useScript, useScriptAsDataURI, and Secret handling against the six reproductions. Done means each listed migration failure is addressed without exposing Secret ciphertext as plaintext.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- build-system, cli, security, tooling
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100