From a973f037de67d4399c92f67d84aedb99ab76ab37 Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Sat, 3 Jan 2026 17:24:42 -0300 Subject: [PATCH] =?UTF-8?q?refatora=C3=A7=C3=A3o=20para=20ia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AI.md | 80 +++++++++++++++++++++++++++++++++++++++++ README.md | 75 +++++++++++++++++++++++++++++++++++++- dist-front/index.d.mts | 12 ++++++- package.json | 15 +++++--- pacote.tgz | Bin 4187 -> 5825 bytes src/index.ts | 1 + src/respostas.ts | 12 ++++++- 7 files changed, 187 insertions(+), 8 deletions(-) create mode 100644 AI.md diff --git a/AI.md b/AI.md new file mode 100644 index 0000000..ec46bb5 --- /dev/null +++ b/AI.md @@ -0,0 +1,80 @@ +# AI / LLM usage notes (p-respostas) + +Este pacote fornece um **contrato estável** de respostas para operações (principalmente APIs), representando: + +- sucesso (`cod: 200`, `eCerto: true`, `eErro: false`, `mensagem: undefined`, `valor: T`) +- erro conhecido/permissão/não encontrado/timeout/erro interno (`cod` diferente de 200, `eErro: true`, `eCerto: false`, `valor: undefined`, `mensagem: string`) + +## Imports + +### TypeScript / ESM + +```ts +import { + codigosResposta, + gerarRespostas, + respostaComuns, + type tipoResposta, + type tipoRespostaErro, + type tipoRespostaSucesso, + type tipoPrErroInterno, +} from "p-respostas" +``` + +### CommonJS + +```js +const { respostaComuns, gerarRespostas, codigosResposta } = require("p-respostas") +``` + +## Como interpretar uma `tipoResposta` + +Regras úteis para checagem: + +- Se `res.eCerto === true` então: + - `res.cod === codigosResposta.sucesso` + - `res.valor` existe (tipo `T`) + - `res.mensagem` é `undefined` + +- Se `res.eErro === true` então: + - `res.valor` é sempre `undefined` + - `res.mensagem` é sempre `string` + - `res.cod` é um dos códigos de erro + +Exemplo: + +```ts +function handle(res: tipoResposta) { + if (res.eErro) { + // aqui o TS entende tipoRespostaErro + return { ok: false as const, status: res.cod, message: res.mensagem } + } + + // aqui o TS entende tipoRespostaSucesso + return { ok: true as const, value: res.valor } +} +``` + +## Como gerar respostas com log de erro interno + +```ts +const respostas = gerarRespostas((op) => { + // op.erro: qualquer coisa lançada + // op.local: string (obrigatória) + // op.mensagem: string opcional + // op.__filename: opcional + console.error("Erro interno", op) + + // Pode retornar complementos não-destrutivos + return { detalhes: ["id de rastreio: ..."] } +}) + +const r = respostas.erroInterno({ erro: new Error("boom"), local: "user.service" }) +``` + +## Garantias / restrições + +- Este pacote é amplamente importado por outros projetos. +- Os arquivos em `dist-*` são gerados automaticamente. +- Mudanças aqui devem focar em **melhorar o consumo (exports/tipos/docs)** sem alterar comportamento. + diff --git a/README.md b/README.md index 6896378..2120d75 100644 --- a/README.md +++ b/README.md @@ -1 +1,74 @@ -# drivers +# p-respostas + +Contrato simples e tipado de respostas para APIs e serviços (sucesso/erro), com suporte a: + +- **ESM** (`import`) via `dist-front/index.mjs` +- **CommonJS** (`require`) via `dist-back/index.js` +- **TypeScript** com tipos publicados em `dist-front/index.d.mts` + +> Importante: os diretórios `dist-*` são gerados automaticamente no build. Este repositório deve manter **compatibilidade** e **não alterar funcionalidades**. + +## Instalação + +```bash +pnpm add p-respostas +# ou +npm i p-respostas +``` + +## Uso rápido + +```ts +import { respostaComuns, gerarRespostas, codigosResposta, type tipoResposta } from "p-respostas" + +const r1 = respostaComuns.valor({ ok: true }) +// r1.cod === 200 + +const r2 = respostaComuns.erro("Falha ao processar") +// r2.eErro === true + +// Exemplo com logger/observabilidade +const respostas = gerarRespostas(({ erro, mensagem, local }) => { + console.error("erroInterno:", { erro, mensagem, local }) + // pode sobrescrever parcialmente a resposta final + return { detalhes: ["contate o suporte" as const] } +}) + +const r3: tipoResposta = respostas.valor("ok") +const r4: tipoResposta = respostas.erroInterno({ erro: new Error("boom"), local: "serviceX" }) +``` + +## API + +### `codigosResposta` + +Enum com os códigos HTTP usados pelo contrato: + +- `sucesso = 200` +- `erroConhecido = 400` +- `erroPermissao = 401` +- `erroNaoEncontrado = 404` +- `erroDesconhecido = 500` +- `tempoEsgotado = 504` + +### Tipos + +- `tipoRespostaSucesso` +- `tipoRespostaErro` +- `tipoResposta = tipoRespostaSucesso | tipoRespostaErro` +- `tipoPrErroInterno` + +### `gerarRespostas(registrarErroInterno)` + +Cria um conjunto de funções padronizadas para gerar respostas. + +`registrarErroInterno(op)` recebe `{ erro, mensagem?, local, __filename? }` e pode retornar um `Partial` para complementar a resposta final. + +### `respostaComuns` + +Instância default de `gerarRespostas(() => ({}))`. + +## Compatibilidade + +- Node: `>=20` +- Exporta ESM e CJS via `package.json#exports` diff --git a/dist-front/index.d.mts b/dist-front/index.d.mts index 6251cb1..8f6d345 100644 --- a/dist-front/index.d.mts +++ b/dist-front/index.d.mts @@ -1,3 +1,8 @@ +/** + * Códigos padrão usados pelo contrato de respostas. + * + * Observação: este enum é parte da API pública do pacote. + */ declare enum codigosResposta { sucesso = 200, erroConhecido = 400, @@ -29,6 +34,11 @@ type tipoPrErroInterno = { local: string; __filename?: string; }; +/** + * Cria um conjunto de geradores de respostas. + * + * @param registrarErroInterno callback para registrar/normalizar erros internos. + */ declare const gerarRespostas: ( /** Faz um processamento quando erro interno * Recebe o erro gerado, mensagem personalizada e detalhes @@ -68,7 +78,7 @@ registrarErroInterno: (op: tipoPrErroInterno) => Partial) => { erroEspera: (mensagem?: string | undefined | null, detalhes?: string[]) => tipoRespostaErro; }; /** - * Uso de respostas em comuns + * Instância default (sem handler de erro interno). */ declare const respostaComuns: { /** diff --git a/package.json b/package.json index 4a6b6ef..ec14b39 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,21 @@ { "name": "p-respostas", - "version": "0.54.0", - "description": "", - "main": "./src/index.ts", + "version": "0.56.0", + "description": "Contrato simples de respostas (sucesso/erro) para APIs e serviços.", + "main": "./dist-back/index.js", + "module": "./dist-front/index.mjs", "exports": { ".": { - "types": "./src/index.ts", + "types": "./dist-front/index.d.mts", "import": "./dist-front/index.mjs", "require": "./dist-back/index.js" } }, - "types": "./src/index.ts", + "types": "./dist-front/index.d.mts", + "engines": { + "node": ">=20" + }, + "sideEffects": false, "scripts": { "biome": "npx @biomejs/biome check --write ./src", "build": "npm --no-git-tag-version version minor && pnpm run biome && tsup --config ./node_modules/p-comuns/tsup/tsup.config.ts && pnpm run pacote", diff --git a/pacote.tgz b/pacote.tgz index a108c6532e4c4c81072ea0add12313910fad3d8b..8381adf1cdae0424654dc09ca7d16f5efd391751 100644 GIT binary patch literal 5825 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 LPh%P#0Ez$rWAw0J literal 4187 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 diff --git a/src/index.ts b/src/index.ts index 565aacc..9f14c03 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,2 @@ +// Re-export da API pública do pacote. export * from "./respostas" diff --git a/src/respostas.ts b/src/respostas.ts index 0f37f3c..245b910 100644 --- a/src/respostas.ts +++ b/src/respostas.ts @@ -1,3 +1,8 @@ +/** + * Códigos padrão usados pelo contrato de respostas. + * + * Observação: este enum é parte da API pública do pacote. + */ export enum codigosResposta { sucesso = 200, erroConhecido = 400, @@ -39,6 +44,11 @@ export type tipoPrErroInterno = { __filename?: string } +/** + * Cria um conjunto de geradores de respostas. + * + * @param registrarErroInterno callback para registrar/normalizar erros internos. + */ export const gerarRespostas = ( /** Faz um processamento quando erro interno * Recebe o erro gerado, mensagem personalizada e detalhes @@ -178,6 +188,6 @@ export const gerarRespostas = ( } /** - * Uso de respostas em comuns + * Instância default (sem handler de erro interno). */ export const respostaComuns = gerarRespostas(() => ({}))