Compare commits
No commits in common. "8c24d790ace7255404745dcbdf12c5396e8b9843" and "d800f14230815264644d53555f9d143088c57d1e" have entirely different histories.
8c24d790ac
...
d800f14230
7 changed files with 8 additions and 193 deletions
86
AI.md
86
AI.md
|
|
@ -1,86 +0,0 @@
|
||||||
# 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<T>`
|
|
||||||
|
|
||||||
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 (narrowing recomendado)
|
|
||||||
|
|
||||||
Para o TypeScript, o narrowing mais robusto costuma ser usando `cod`:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { codigosResposta, type tipoResposta } from "p-respostas"
|
|
||||||
|
|
||||||
function handle<T>(res: tipoResposta<T>) {
|
|
||||||
if (res.cod !== codigosResposta.sucesso) {
|
|
||||||
// aqui o TS entende tipoRespostaErro (na maioria dos setups)
|
|
||||||
return { ok: false as const, status: res.cod, message: res.mensagem }
|
|
||||||
}
|
|
||||||
|
|
||||||
// aqui o TS entende tipoRespostaSucesso<T>
|
|
||||||
return { ok: true as const, value: res.valor }
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
> Nota: em alguns setups, checar somente `res.eErro` pode não eliminar completamente `undefined` em `res.valor`.
|
|
||||||
> Se isso acontecer, prefira checar `cod` como no exemplo acima.
|
|
||||||
|
|
||||||
## 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.
|
|
||||||
75
README.md
75
README.md
|
|
@ -1,74 +1 @@
|
||||||
# p-respostas
|
# drivers
|
||||||
|
|
||||||
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<string> = respostas.valor("ok")
|
|
||||||
const r4: tipoResposta<string> = 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<T>`
|
|
||||||
- `tipoRespostaErro`
|
|
||||||
- `tipoResposta<T> = tipoRespostaSucesso<T> | 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<tipoRespostaErro>` para complementar a resposta final.
|
|
||||||
|
|
||||||
### `respostaComuns`
|
|
||||||
|
|
||||||
Instância default de `gerarRespostas(() => ({}))`.
|
|
||||||
|
|
||||||
## Compatibilidade
|
|
||||||
|
|
||||||
- Node: `>=20`
|
|
||||||
- Exporta ESM e CJS via `package.json#exports`
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,3 @@
|
||||||
/**
|
|
||||||
* Códigos padrão usados pelo contrato de respostas.
|
|
||||||
*
|
|
||||||
* Observação: este enum é parte da API pública do pacote.
|
|
||||||
*/
|
|
||||||
declare enum codigosResposta {
|
declare enum codigosResposta {
|
||||||
sucesso = 200,
|
sucesso = 200,
|
||||||
erroConhecido = 400,
|
erroConhecido = 400,
|
||||||
|
|
@ -34,11 +29,6 @@ type tipoPrErroInterno = {
|
||||||
local: string;
|
local: string;
|
||||||
__filename?: string;
|
__filename?: string;
|
||||||
};
|
};
|
||||||
/**
|
|
||||||
* Cria um conjunto de geradores de respostas.
|
|
||||||
*
|
|
||||||
* @param registrarErroInterno callback para registrar/normalizar erros internos.
|
|
||||||
*/
|
|
||||||
declare const gerarRespostas: (
|
declare const gerarRespostas: (
|
||||||
/** Faz um processamento quando erro interno
|
/** Faz um processamento quando erro interno
|
||||||
* Recebe o erro gerado, mensagem personalizada e detalhes
|
* Recebe o erro gerado, mensagem personalizada e detalhes
|
||||||
|
|
@ -78,7 +68,7 @@ registrarErroInterno: (op: tipoPrErroInterno) => Partial<tipoRespostaErro>) => {
|
||||||
erroEspera: (mensagem?: string | undefined | null, detalhes?: string[]) => tipoRespostaErro;
|
erroEspera: (mensagem?: string | undefined | null, detalhes?: string[]) => tipoRespostaErro;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Instância default (sem handler de erro interno).
|
* Uso de respostas em comuns
|
||||||
*/
|
*/
|
||||||
declare const respostaComuns: {
|
declare const respostaComuns: {
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
15
package.json
15
package.json
|
|
@ -1,21 +1,16 @@
|
||||||
{
|
{
|
||||||
"name": "p-respostas",
|
"name": "p-respostas",
|
||||||
"version": "0.56.0",
|
"version": "0.54.0",
|
||||||
"description": "Contrato simples de respostas (sucesso/erro) para APIs e serviços.",
|
"description": "",
|
||||||
"main": "./dist-back/index.js",
|
"main": "./src/index.ts",
|
||||||
"module": "./dist-front/index.mjs",
|
|
||||||
"exports": {
|
"exports": {
|
||||||
".": {
|
".": {
|
||||||
"types": "./dist-front/index.d.mts",
|
"types": "./src/index.ts",
|
||||||
"import": "./dist-front/index.mjs",
|
"import": "./dist-front/index.mjs",
|
||||||
"require": "./dist-back/index.js"
|
"require": "./dist-back/index.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"types": "./dist-front/index.d.mts",
|
"types": "./src/index.ts",
|
||||||
"engines": {
|
|
||||||
"node": ">=20"
|
|
||||||
},
|
|
||||||
"sideEffects": false,
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"biome": "npx @biomejs/biome check --write ./src",
|
"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",
|
"build": "npm --no-git-tag-version version minor && pnpm run biome && tsup --config ./node_modules/p-comuns/tsup/tsup.config.ts && pnpm run pacote",
|
||||||
|
|
|
||||||
BIN
pacote.tgz
BIN
pacote.tgz
Binary file not shown.
|
|
@ -1,2 +1 @@
|
||||||
// Re-export da API pública do pacote.
|
|
||||||
export * from "./respostas"
|
export * from "./respostas"
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,3 @@
|
||||||
/**
|
|
||||||
* Códigos padrão usados pelo contrato de respostas.
|
|
||||||
*
|
|
||||||
* Observação: este enum é parte da API pública do pacote.
|
|
||||||
*/
|
|
||||||
export enum codigosResposta {
|
export enum codigosResposta {
|
||||||
sucesso = 200,
|
sucesso = 200,
|
||||||
erroConhecido = 400,
|
erroConhecido = 400,
|
||||||
|
|
@ -44,11 +39,6 @@ export type tipoPrErroInterno = {
|
||||||
__filename?: string
|
__filename?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Cria um conjunto de geradores de respostas.
|
|
||||||
*
|
|
||||||
* @param registrarErroInterno callback para registrar/normalizar erros internos.
|
|
||||||
*/
|
|
||||||
export const gerarRespostas = (
|
export const gerarRespostas = (
|
||||||
/** Faz um processamento quando erro interno
|
/** Faz um processamento quando erro interno
|
||||||
* Recebe o erro gerado, mensagem personalizada e detalhes
|
* Recebe o erro gerado, mensagem personalizada e detalhes
|
||||||
|
|
@ -188,6 +178,6 @@ export const gerarRespostas = (
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instância default (sem handler de erro interno).
|
* Uso de respostas em comuns
|
||||||
*/
|
*/
|
||||||
export const respostaComuns = gerarRespostas(() => ({}))
|
export const respostaComuns = gerarRespostas(() => ({}))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue