chore: voltar para Next 15.5.5 e React 18
This commit is contained in:
parent
508ffe5022
commit
0cf1892256
5 changed files with 26 additions and 23 deletions
10
agents.md
10
agents.md
|
|
@ -19,9 +19,9 @@
|
||||||
- Para DEV: rode `pnpm convex:dev` e acesse `/dev/seed` uma vez para popular dados realistas.
|
- Para DEV: rode `pnpm convex:dev` e acesse `/dev/seed` uma vez para popular dados realistas.
|
||||||
|
|
||||||
## Stack atual (16/10/2025)
|
## Stack atual (16/10/2025)
|
||||||
- **Next.js**: `16.0.0-beta.0` (Turbopack em produção + cache de filesystem em DEV).
|
- **Next.js**: `15.5.5` (Turbopack em produção + cache de filesystem em DEV).
|
||||||
- `next.config.ts` mantém `experimental.turbopackFileSystemCacheForDev` e `experimental.trustHostHeader`; a lista de domínios válidos mora em `src/config/allowed-hosts.ts` e é aplicada pelo `middleware.ts`.
|
- `next.config.ts` mantém `experimental.turbopackFileSystemCacheForDev`; whitelist de domínios em `src/config/allowed-hosts.ts` usada tanto no `server.allowedHosts` quanto no `middleware.ts`.
|
||||||
- **React / React DOM**: `19.2.0`.
|
- **React / React DOM**: `18.2.0`.
|
||||||
- **Trilha de testes**: Vitest (`pnpm test`) sem modo watch por padrão (`--run --passWithNoTests`).
|
- **Trilha de testes**: Vitest (`pnpm test`) sem modo watch por padrão (`--run --passWithNoTests`).
|
||||||
- **CI**: workflow `Quality Checks` (`.github/workflows/quality-checks.yml`) roda `pnpm install`, `prisma:generate`, `lint`, `test`, `build`. Variáveis críticas (`BETTER_AUTH_SECRET`, `NEXT_PUBLIC_APP_URL`, etc.) são definidas apenas no runner — não afetam a VPS.
|
- **CI**: workflow `Quality Checks` (`.github/workflows/quality-checks.yml`) roda `pnpm install`, `prisma:generate`, `lint`, `test`, `build`. Variáveis críticas (`BETTER_AUTH_SECRET`, `NEXT_PUBLIC_APP_URL`, etc.) são definidas apenas no runner — não afetam a VPS.
|
||||||
- **Deploy**: pipeline `ci-cd-web-desktop.yml` (runner self-hosted). Build roda com pnpm 9, Node 20. Web é publicado em `/home/renan/apps/sistema` e o Swarm aponta `sistema_web` para essa pasta.
|
- **Deploy**: pipeline `ci-cd-web-desktop.yml` (runner self-hosted). Build roda com pnpm 9, Node 20. Web é publicado em `/home/renan/apps/sistema` e o Swarm aponta `sistema_web` para essa pasta.
|
||||||
|
|
@ -91,7 +91,7 @@ pnpm build
|
||||||
- **CI**: falhas mais comuns
|
- **CI**: falhas mais comuns
|
||||||
- `ERR_PNPM_OUTDATED_LOCKFILE`: mantenha `pnpm-lock.yaml` atualizado (principalmente após alterar dependências do desktop).
|
- `ERR_PNPM_OUTDATED_LOCKFILE`: mantenha `pnpm-lock.yaml` atualizado (principalmente após alterar dependências do desktop).
|
||||||
- Variáveis Better Auth ausentes (`BETTER_AUTH_SECRET`): definidas no workflow (`Quality Checks`).
|
- Variáveis Better Auth ausentes (`BETTER_AUTH_SECRET`): definidas no workflow (`Quality Checks`).
|
||||||
- Falha de host (Next 16): confira `src/config/allowed-hosts.ts`; o middleware retorna 403 quando o domínio do Traefik não está listado.
|
- Falha de host: confira `src/config/allowed-hosts.ts`; o middleware retorna 403 quando o domínio do Traefik não está listado.
|
||||||
|
|
||||||
## Produção / Deploy
|
## Produção / Deploy
|
||||||
- Runner self-hosted (VPS). Build roda fora de `/srv/apps/sistema` e rsync publica em `/home/renan/apps/sistema`.
|
- Runner self-hosted (VPS). Build roda fora de `/srv/apps/sistema` e rsync publica em `/home/renan/apps/sistema`.
|
||||||
|
|
@ -155,4 +155,4 @@ pnpm build
|
||||||
- `docs/admin-inventory-ui.md`, `docs/plano-app-desktop-maquinas.md` — detalhes do inventário/agente.
|
- `docs/admin-inventory-ui.md`, `docs/plano-app-desktop-maquinas.md` — detalhes do inventário/agente.
|
||||||
|
|
||||||
---
|
---
|
||||||
_Última atualização: 16/10/2025 (Next.js 16 beta, Turbopack, fluxos desktop + portal documentados)._
|
_Última atualização: 16/10/2025 (Next.js 15.5.5 estável, Turbopack, fluxos desktop + portal documentados)._
|
||||||
|
|
|
||||||
14
docs/DEV.md
14
docs/DEV.md
|
|
@ -4,8 +4,8 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
|
||||||
|
|
||||||
## Resumo rápido
|
## Resumo rápido
|
||||||
|
|
||||||
- **Node/PNPM**: Node 20.9+ (Next.js 16 exige essa versão mínima) + pnpm 9 (habilite via `corepack enable && corepack prepare pnpm@9 --activate`).
|
- **Node/PNPM**: Node 20.9+ (alinhado ao requisito do Next 15) + pnpm 9 (habilite via `corepack enable && corepack prepare pnpm@9 --activate`).
|
||||||
- **Next.js 16 (beta)**: Projeto já está em `next@16.0.0-beta.0`, com Turbopack como bundler padrão, cache de filesystem habilitado e `experimental.trustHostHeader` + middleware validando os domínios expostos pelo Traefik.
|
- **Next.js 15.5.5**: Projeto voltou para a versão estável (`next@15.5.5`) com Turbopack como bundler padrão, cache de filesystem habilitado e whitelist de domínios via `server.allowedHosts` + middleware.
|
||||||
- **Lint/Test/Build**: `pnpm lint`, `pnpm test`, `pnpm build`. O script de testes usa `vitest --run --passWithNoTests`, eliminando o modo watch interativo.
|
- **Lint/Test/Build**: `pnpm lint`, `pnpm test`, `pnpm build`. O script de testes usa `vitest --run --passWithNoTests`, eliminando o modo watch interativo.
|
||||||
- **Banco DEV**: SQLite em `prisma/prisma/db.dev.sqlite`. Defina `DATABASE_URL="file:./prisma/db.dev.sqlite"` ao chamar CLI do Prisma.
|
- **Banco DEV**: SQLite em `prisma/prisma/db.dev.sqlite`. Defina `DATABASE_URL="file:./prisma/db.dev.sqlite"` ao chamar CLI do Prisma.
|
||||||
- **Desktop (Tauri)**: fonte em `apps/desktop`. Usa Radix tabs + componentes shadcn-like, integra com os endpoints `/api/machines/*` e suporta atualização automática via GitHub Releases.
|
- **Desktop (Tauri)**: fonte em `apps/desktop`. Usa Radix tabs + componentes shadcn-like, integra com os endpoints `/api/machines/*` e suporta atualização automática via GitHub Releases.
|
||||||
|
|
@ -31,12 +31,12 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
|
||||||
|
|
||||||
> **Por quê inline?** Evitamos declarar `DATABASE_URL` em `prisma/.env` porque o Prisma lê também o `.env` da raiz (produção). O override inline garante isolamento do banco DEV.
|
> **Por quê inline?** Evitamos declarar `DATABASE_URL` em `prisma/.env` porque o Prisma lê também o `.env` da raiz (produção). O override inline garante isolamento do banco DEV.
|
||||||
|
|
||||||
## Next.js 16 (beta)
|
## Next.js 15 (estável)
|
||||||
|
|
||||||
- Comportamento sujeito a mudanças; acompanhe o changelog antes da GA. Breaking changes relevantes já mitigados: `params`/`searchParams` assíncronos, `cookies()`/`headers()` com await e `revalidateTag` aguardando novo perfil (não utilizamos).
|
- Mantemos o projeto em `next@15.5.5`, priorizando estabilidade enquanto acompanhamos as novidades do 16.
|
||||||
- **Turbopack** é o bundler padrão. Mantemos `experimental.turbopackFileSystemCacheForDev = true` no `next.config.ts` para acelerar reinicializações do `pnpm dev`.
|
- **React 18.2**: voltamos para a versão suportada oficialmente pelo Next 15. Evite APIs exclusivas do React 19 (`use(...)`, `useActionState`, etc.).
|
||||||
- **React Compiler (opcional)**: habilite com `reactCompiler: true` no `next.config.ts` e instale `babel-plugin-react-compiler`. Use apenas para experiências controladas (a compilação fica mais lenta).
|
- **Turbopack** segue como bundler padrão. Mantemos `experimental.turbopackFileSystemCacheForDev = true` no `next.config.ts` para acelerar reinicializações do `pnpm dev`.
|
||||||
- **Caching APIs**: considere `updateTag()`/`refresh()` em novas Server Actions. Atualmente não usamos `revalidateTag`.
|
- **Whitelist de hosts**: `server.allowedHosts` + middleware em `middleware.ts` garantem que apenas os domínios Traefik/localhost sejam aceitos.
|
||||||
|
|
||||||
## Comandos de qualidade
|
## Comandos de qualidade
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
import type { NextConfig } from "next"
|
import type { NextConfig } from "next"
|
||||||
|
import { ALLOWED_HOSTS } from "./src/config/allowed-hosts"
|
||||||
|
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
experimental: {
|
experimental: {
|
||||||
turbopackFileSystemCacheForDev: true,
|
turbopackFileSystemCacheForDev: true,
|
||||||
trustHostHeader: true,
|
},
|
||||||
|
// No Next 16 specific trustHostHeader flag; we whitelist via classic server.allowedHosts.
|
||||||
|
// @ts-expect-error server.allowedHosts disponível na linha 15.x
|
||||||
|
server: {
|
||||||
|
allowedHosts: [...ALLOWED_HOSTS],
|
||||||
},
|
},
|
||||||
} satisfies NextConfig
|
} satisfies NextConfig
|
||||||
|
|
||||||
|
|
|
||||||
12
package.json
12
package.json
|
|
@ -52,12 +52,12 @@
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"lucide-react": "^0.544.0",
|
"lucide-react": "^0.544.0",
|
||||||
"next": "16.0.0-beta.0",
|
"next": "15.5.5",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"pdfkit": "^0.17.2",
|
"pdfkit": "^0.17.2",
|
||||||
"postcss": "^8.5.6",
|
"postcss": "^8.5.6",
|
||||||
"react": "19.2.0",
|
"react": "18.2.0",
|
||||||
"react-dom": "19.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-hook-form": "^7.64.0",
|
"react-hook-form": "^7.64.0",
|
||||||
"recharts": "^2.15.4",
|
"recharts": "^2.15.4",
|
||||||
"sanitize-html": "^2.17.0",
|
"sanitize-html": "^2.17.0",
|
||||||
|
|
@ -75,12 +75,12 @@
|
||||||
"@tauri-apps/cli": "^2.8.4",
|
"@tauri-apps/cli": "^2.8.4",
|
||||||
"@types/node": "^20",
|
"@types/node": "^20",
|
||||||
"@types/pdfkit": "^0.17.3",
|
"@types/pdfkit": "^0.17.3",
|
||||||
"@types/react": "^19",
|
"@types/react": "^18",
|
||||||
"@types/react-dom": "^19",
|
"@types/react-dom": "^18",
|
||||||
"@types/sanitize-html": "^2.16.0",
|
"@types/sanitize-html": "^2.16.0",
|
||||||
"@types/three": "^0.180.0",
|
"@types/three": "^0.180.0",
|
||||||
"eslint": "^9",
|
"eslint": "^9",
|
||||||
"eslint-config-next": "16.0.0-beta.0",
|
"eslint-config-next": "15.5.5",
|
||||||
"eslint-plugin-react-hooks": "^5.0.0",
|
"eslint-plugin-react-hooks": "^5.0.0",
|
||||||
"prisma": "^6.16.2",
|
"prisma": "^6.16.2",
|
||||||
"tailwindcss": "^4",
|
"tailwindcss": "^4",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
"use client"
|
|
||||||
import { use } from "react"
|
|
||||||
import { AppShell } from "@/components/app-shell"
|
import { AppShell } from "@/components/app-shell"
|
||||||
import { SiteHeader } from "@/components/site-header"
|
import { SiteHeader } from "@/components/site-header"
|
||||||
import { DEFAULT_TENANT_ID } from "@/lib/constants"
|
import { DEFAULT_TENANT_ID } from "@/lib/constants"
|
||||||
|
|
@ -9,8 +7,8 @@ import { MachineBreadcrumbs } from "@/components/admin/machines/machine-breadcru
|
||||||
export const runtime = "nodejs"
|
export const runtime = "nodejs"
|
||||||
export const dynamic = "force-dynamic"
|
export const dynamic = "force-dynamic"
|
||||||
|
|
||||||
export default function AdminMachineDetailsPage({ params }: { params: Promise<{ id: string }> }) {
|
export default function AdminMachineDetailsPage({ params }: { params: { id: string } }) {
|
||||||
const { id } = use(params)
|
const { id } = params
|
||||||
return (
|
return (
|
||||||
<AppShell header={<SiteHeader title="Detalhe da máquina" lead="Inventário e métricas da máquina selecionada." />}>
|
<AppShell header={<SiteHeader title="Detalhe da máquina" lead="Inventário e métricas da máquina selecionada." />}>
|
||||||
<div className="mx-auto w-full max-w-6xl px-4 pb-12 lg:px-6">
|
<div className="mx-auto w-full max-w-6xl px-4 pb-12 lg:px-6">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue