Compare commits

..

No commits in common. "9f8aa2299a2c5526b45a474629f9bbae58ec4b49" and "9aa36bcba98de8efd9babec6ab84099da5d46234" have entirely different histories.

9 changed files with 41 additions and 100 deletions

1
.agent

@ -1 +0,0 @@
Subproject commit 5503367656ec04508537df58064fdc1293fce956

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule ".agent"]
path = .agent
url = https://git2.idz.one/publico/.agent.git

View file

@ -18,7 +18,6 @@ var __copyProps = (to, from, except, desc) => {
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var respostas_exports = {}; var respostas_exports = {};
__export(respostas_exports, { __export(respostas_exports, {
IniciarRespostas: () => IniciarRespostas,
codigosResposta: () => codigosResposta, codigosResposta: () => codigosResposta,
gerarRespostas: () => gerarRespostas, gerarRespostas: () => gerarRespostas,
respostaComuns: () => respostaComuns respostaComuns: () => respostaComuns
@ -33,13 +32,9 @@ var codigosResposta = /* @__PURE__ */ ((codigosResposta2) => {
codigosResposta2[codigosResposta2["tempoEsgotado"] = 504] = "tempoEsgotado"; codigosResposta2[codigosResposta2["tempoEsgotado"] = 504] = "tempoEsgotado";
return codigosResposta2; return codigosResposta2;
})(codigosResposta || {}); })(codigosResposta || {});
function aplicarCallback(resposta, callback) { const gerarRespostas = (registrarErroInterno) => {
if (!callback) return resposta;
return callback(resposta);
}
const IniciarRespostas = (callback) => {
const valor = (valor2, detalhes) => { const valor = (valor2, detalhes) => {
const resposta = { return {
cod: 200 /* sucesso */, cod: 200 /* sucesso */,
valor: valor2, valor: valor2,
mensagem: void 0, mensagem: void 0,
@ -47,10 +42,9 @@ const IniciarRespostas = (callback) => {
eCerto: true, eCerto: true,
detalhes detalhes
}; };
return aplicarCallback(resposta, callback);
}; };
const valorTrue = (detalhes) => { const valorTrue = (detalhes) => {
const resposta = { return {
cod: 200 /* sucesso */, cod: 200 /* sucesso */,
valor: true, valor: true,
mensagem: void 0, mensagem: void 0,
@ -58,10 +52,9 @@ const IniciarRespostas = (callback) => {
eCerto: true, eCerto: true,
detalhes detalhes
}; };
return aplicarCallback(resposta, callback);
}; };
const erro = (mensagem, detalhes) => { const erro = (mensagem, detalhes) => {
const resposta = { return {
cod: 400 /* erroConhecido */, cod: 400 /* erroConhecido */,
valor: void 0, valor: void 0,
mensagem, mensagem,
@ -69,10 +62,9 @@ const IniciarRespostas = (callback) => {
eCerto: false, eCerto: false,
detalhes detalhes
}; };
return aplicarCallback(resposta, callback);
}; };
const erroPermissao = (mensagem, detalhes) => { const erroPermissao = (mensagem, detalhes) => {
const resposta = { return {
cod: 401 /* erroPermissao */, cod: 401 /* erroPermissao */,
valor: void 0, valor: void 0,
mensagem: mensagem || "Sem permiss\xE3o para esse recurso.", mensagem: mensagem || "Sem permiss\xE3o para esse recurso.",
@ -80,10 +72,9 @@ const IniciarRespostas = (callback) => {
eCerto: false, eCerto: false,
detalhes detalhes
}; };
return aplicarCallback(resposta, callback);
}; };
const naoEncontrado = (mensagem, detalhes) => { const naoEncontrado = (mensagem, detalhes) => {
const resposta = { return {
cod: 404 /* erroNaoEncontrado */, cod: 404 /* erroNaoEncontrado */,
valor: void 0, valor: void 0,
mensagem: mensagem || "Registro n\xE3o encontrado ou a execu\xE7\xE3o dessa a\xE7\xE3o depende de um registro existente.", mensagem: mensagem || "Registro n\xE3o encontrado ou a execu\xE7\xE3o dessa a\xE7\xE3o depende de um registro existente.",
@ -91,21 +82,21 @@ const IniciarRespostas = (callback) => {
eCerto: false, eCerto: false,
detalhes detalhes
}; };
return aplicarCallback(resposta, callback);
}; };
const erroInterno = (op) => { const erroInterno = (op) => {
const resRegistro = registrarErroInterno(op);
const mensagemFim = `${op.mensagem || "Erro interno"}`; const mensagemFim = `${op.mensagem || "Erro interno"}`;
const resposta = { return {
cod: 500 /* erroDesconhecido */, cod: 500 /* erroDesconhecido */,
valor: void 0, valor: void 0,
mensagem: mensagemFim, mensagem: mensagemFim,
eErro: true, eErro: true,
eCerto: false eCerto: false,
...resRegistro
}; };
return aplicarCallback(resposta, callback);
}; };
const tempoEsgotado = (mensagem, detalhes) => { const tempoEsgotado = (mensagem, detalhes) => {
const resposta = { return {
cod: 504 /* tempoEsgotado */, cod: 504 /* tempoEsgotado */,
valor: void 0, valor: void 0,
mensagem: mensagem || "Tempo de resposta esgotado ao tentar acessar o recurso.", mensagem: mensagem || "Tempo de resposta esgotado ao tentar acessar o recurso.",
@ -113,7 +104,6 @@ const IniciarRespostas = (callback) => {
eCerto: false, eCerto: false,
detalhes detalhes
}; };
return aplicarCallback(resposta, callback);
}; };
const erroEspera = tempoEsgotado; const erroEspera = tempoEsgotado;
return { return {
@ -151,11 +141,9 @@ const IniciarRespostas = (callback) => {
erroEspera erroEspera
}; };
}; };
const gerarRespostas = IniciarRespostas; const respostaComuns = gerarRespostas(() => ({}));
const respostaComuns = IniciarRespostas();
// Annotate the CommonJS export names for ESM import in node: // Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = { 0 && (module.exports = {
IniciarRespostas,
codigosResposta, codigosResposta,
gerarRespostas, gerarRespostas,
respostaComuns respostaComuns

View file

@ -34,13 +34,6 @@ type tipoPrErroInterno = {
local: string; local: string;
__filename?: string; __filename?: string;
}; };
/**
* Tipo do callback opcional de interceptação de respostas.
*
* Quando fornecido, é invocado após a construção de toda resposta,
* permitindo side-effects (ex.: logging, telemetria) sem alterar o tipo.
*/
type tipoCallbackResposta = <X>(resposta: tipoResposta<X>) => tipoResposta<X>;
/** /**
* Cria um conjunto de geradores de respostas. * Cria um conjunto de geradores de respostas.
* *
@ -56,16 +49,14 @@ interface InterfaceRespostas {
tempoEsgotado: (mensagem?: string | undefined | null, detalhes?: string[]) => tipoRespostaErro; tempoEsgotado: (mensagem?: string | undefined | null, detalhes?: string[]) => tipoRespostaErro;
erroEspera: (mensagem?: string | undefined | null, detalhes?: string[]) => tipoRespostaErro; erroEspera: (mensagem?: string | undefined | null, detalhes?: string[]) => tipoRespostaErro;
} }
declare const IniciarRespostas: ( declare const gerarRespostas: (
/** Callback opcional de interceptação — invocado após a construção de cada resposta */ /** Faz um processamento quando erro interno
callback?: tipoCallbackResposta) => InterfaceRespostas; * Recebe o erro gerado, mensagem personalizada e detalhes
/**
* @deprecated Use IniciarRespostas em seu lugar
*/ */
declare const gerarRespostas: (callback?: tipoCallbackResposta) => InterfaceRespostas; registrarErroInterno: (op: tipoPrErroInterno) => Partial<tipoRespostaErro>) => InterfaceRespostas;
/** /**
* Instância default (sem handler de interceptação). * Instância default (sem handler de erro interno).
*/ */
declare const respostaComuns: InterfaceRespostas; declare const respostaComuns: InterfaceRespostas;
export { IniciarRespostas, type InterfaceRespostas, codigosResposta, gerarRespostas, respostaComuns, type tipoCallbackResposta, type tipoPrErroInterno, type tipoResposta, type tipoRespostaErro, type tipoRespostaSucesso }; export { type InterfaceRespostas, codigosResposta, gerarRespostas, respostaComuns, type tipoPrErroInterno, type tipoResposta, type tipoRespostaErro, type tipoRespostaSucesso };

View file

@ -1 +1 @@
var m=(e=>(e[e.sucesso=200]="sucesso",e[e.erroConhecido=400]="erroConhecido",e[e.erroPermissao=401]="erroPermissao",e[e.erroNaoEncontrado=404]="erroNaoEncontrado",e[e.erroDesconhecido=500]="erroDesconhecido",e[e.tempoEsgotado=504]="tempoEsgotado",e))(m||{});function t(s,a){return a?a(s):s}var i=s=>{let a=(o,r)=>t({cod:200,valor:o,mensagem:void 0,eErro:!1,eCerto:!0,detalhes:r},s),d=o=>t({cod:200,valor:!0,mensagem:void 0,eErro:!1,eCerto:!0,detalhes:o},s),u=(o,r)=>t({cod:400,valor:void 0,mensagem:o,eErro:!0,eCerto:!1,detalhes:r},s),c=(o,r)=>t({cod:401,valor:void 0,mensagem:o||"Sem permiss\xE3o para esse recurso.",eErro:!0,eCerto:!1,detalhes:r},s),g=(o,r)=>t({cod:404,valor:void 0,mensagem:o||"Registro n\xE3o encontrado ou a execu\xE7\xE3o dessa a\xE7\xE3o depende de um registro existente.",eErro:!0,eCerto:!1,detalhes:r},s),e=o=>{let n={cod:500,valor:void 0,mensagem:`${o.mensagem||"Erro interno"}`,eErro:!0,eCerto:!1};return t(n,s)},p=(o,r)=>t({cod:504,valor:void 0,mensagem:o||"Tempo de resposta esgotado ao tentar acessar o recurso.",eErro:!0,eCerto:!1,detalhes:r},s);return{valor:a,valorTrue:d,erro:u,erroPermissao:c,erroInterno:e,naoEncontrado:g,tempoEsgotado:p,erroEspera:p}},l=i,R=i();export{i as IniciarRespostas,m as codigosResposta,l as gerarRespostas,R as respostaComuns}; var u=(e=>(e[e.sucesso=200]="sucesso",e[e.erroConhecido=400]="erroConhecido",e[e.erroPermissao=401]="erroPermissao",e[e.erroNaoEncontrado=404]="erroNaoEncontrado",e[e.erroDesconhecido=500]="erroDesconhecido",e[e.tempoEsgotado=504]="tempoEsgotado",e))(u||{}),g=t=>{let n=(o,r)=>({cod:200,valor:o,mensagem:void 0,eErro:!1,eCerto:!0,detalhes:r}),a=o=>({cod:200,valor:!0,mensagem:void 0,eErro:!1,eCerto:!0,detalhes:o}),i=(o,r)=>({cod:400,valor:void 0,mensagem:o,eErro:!0,eCerto:!1,detalhes:r}),p=(o,r)=>({cod:401,valor:void 0,mensagem:o||"Sem permiss\xE3o para esse recurso.",eErro:!0,eCerto:!1,detalhes:r}),d=(o,r)=>({cod:404,valor:void 0,mensagem:o||"Registro n\xE3o encontrado ou a execu\xE7\xE3o dessa a\xE7\xE3o depende de um registro existente.",eErro:!0,eCerto:!1,detalhes:r}),e=o=>{let r=t(o);return{cod:500,valor:void 0,mensagem:`${o.mensagem||"Erro interno"}`,eErro:!0,eCerto:!1,...r}},s=(o,r)=>({cod:504,valor:void 0,mensagem:o||"Tempo de resposta esgotado ao tentar acessar o recurso.",eErro:!0,eCerto:!1,detalhes:r});return{valor:n,valorTrue:a,erro:i,erroPermissao:p,erroInterno:e,naoEncontrado:d,tempoEsgotado:s,erroEspera:s}},l=g(()=>({}));export{u as codigosResposta,g as gerarRespostas,l as respostaComuns};

View file

@ -1,6 +1,6 @@
{ {
"name": "p-respostas", "name": "p-respostas",
"version": "0.67.0", "version": "0.66.0",
"description": "Contrato simples de respostas (sucesso/erro) para APIs e serviços.", "description": "Contrato simples de respostas (sucesso/erro) para APIs e serviços.",
"main": "./dist-back/index.js", "main": "./dist-back/index.js",
"module": "./dist-front/index.mjs", "module": "./dist-front/index.mjs",
@ -24,16 +24,16 @@
}, },
"peerDependencies": { "peerDependencies": {
"p-comuns": "git+https://git2.idz.one/publico/_comuns.git", "p-comuns": "git+https://git2.idz.one/publico/_comuns.git",
"zod": "4.4.3" "zod": "4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.4.12", "@biomejs/biome": "2.4.0",
"@types/node": "^22.19.15", "@types/node": "^22.19.15",
"check-node-version": "^4.2.1", "check-node-version": "^4.2.1",
"p-comuns": "git+https://git2.idz.one/publico/_comuns.git", "p-comuns": "git+https://git2.idz.one/publico/_comuns.git",
"tsup": "^8.5.1", "tsup": "^8.5.1",
"typescript": "^6", "typescript": "^6",
"zod": "4.4.3" "zod": "4.3.6"
}, },
"keywords": [], "keywords": [],
"author": { "author": {

Binary file not shown.

View file

@ -44,16 +44,6 @@ export type tipoPrErroInterno = {
__filename?: string __filename?: string
} }
/**
* Tipo do callback opcional de interceptação de respostas.
*
* Quando fornecido, é invocado após a construção de toda resposta,
* permitindo side-effects (ex.: logging, telemetria) sem alterar o tipo.
*/
export type tipoCallbackResposta = <X>(
resposta: tipoResposta<X>,
) => tipoResposta<X>
/** /**
* Cria um conjunto de geradores de respostas. * Cria um conjunto de geradores de respostas.
* *
@ -82,28 +72,14 @@ export interface InterfaceRespostas {
) => tipoRespostaErro ) => tipoRespostaErro
} }
// ─── Helper interno ───────────────────────────────────────────────── export const gerarRespostas = (
/** /** Faz um processamento quando erro interno
* Aplica o callback de interceptação quando fornecido. * Recebe o erro gerado, mensagem personalizada e detalhes
* Retorno com cast seguro: o callback preserva a forma da resposta, */
* mas o TypeScript não consegue estreitar o genérico <X> ao subtipo registrarErroInterno: (op: tipoPrErroInterno) => Partial<tipoRespostaErro>,
* concreto (ex.: tipoRespostaSucesso<T>), então o cast é inevitável
* e está isolado neste único ponto.
*/
function aplicarCallback<R extends tipoResposta<unknown>>(
resposta: R,
callback?: tipoCallbackResposta,
): R {
if (!callback) return resposta
return callback(resposta) as R
}
export const IniciarRespostas = (
/** Callback opcional de interceptação — invocado após a construção de cada resposta */
callback?: tipoCallbackResposta,
): InterfaceRespostas => { ): InterfaceRespostas => {
const valor = <T>(valor: T, detalhes?: string[]): tipoRespostaSucesso<T> => { const valor = <T>(valor: T, detalhes?: string[]): tipoRespostaSucesso<T> => {
const resposta: tipoRespostaSucesso<T> = { return {
cod: codigosResposta.sucesso, cod: codigosResposta.sucesso,
valor, valor,
mensagem: undefined, mensagem: undefined,
@ -111,11 +87,10 @@ export const IniciarRespostas = (
eCerto: true, eCerto: true,
detalhes, detalhes,
} }
return aplicarCallback(resposta, callback)
} }
const valorTrue = (detalhes?: string[]): tipoRespostaSucesso<true> => { const valorTrue = (detalhes?: string[]): tipoRespostaSucesso<true> => {
const resposta: tipoRespostaSucesso<true> = { return {
cod: codigosResposta.sucesso, cod: codigosResposta.sucesso,
valor: true, valor: true,
mensagem: undefined, mensagem: undefined,
@ -123,11 +98,10 @@ export const IniciarRespostas = (
eCerto: true, eCerto: true,
detalhes, detalhes,
} }
return aplicarCallback(resposta, callback)
} }
const erro = (mensagem: string, detalhes?: string[]): tipoRespostaErro => { const erro = (mensagem: string, detalhes?: string[]): tipoRespostaErro => {
const resposta: tipoRespostaErro = { return {
cod: codigosResposta.erroConhecido, cod: codigosResposta.erroConhecido,
valor: undefined, valor: undefined,
mensagem, mensagem,
@ -135,14 +109,13 @@ export const IniciarRespostas = (
eCerto: false, eCerto: false,
detalhes, detalhes,
} }
return aplicarCallback(resposta, callback)
} }
const erroPermissao = ( const erroPermissao = (
mensagem?: string | undefined | null, mensagem?: string | undefined | null,
detalhes?: string[], detalhes?: string[],
): tipoRespostaErro => { ): tipoRespostaErro => {
const resposta: tipoRespostaErro = { return {
cod: codigosResposta.erroPermissao, cod: codigosResposta.erroPermissao,
valor: undefined, valor: undefined,
mensagem: mensagem || "Sem permissão para esse recurso.", mensagem: mensagem || "Sem permissão para esse recurso.",
@ -150,14 +123,13 @@ export const IniciarRespostas = (
eCerto: false, eCerto: false,
detalhes, detalhes,
} }
return aplicarCallback(resposta, callback)
} }
const naoEncontrado = ( const naoEncontrado = (
mensagem?: string | undefined | null, mensagem?: string | undefined | null,
detalhes?: string[], detalhes?: string[],
): tipoRespostaErro => { ): tipoRespostaErro => {
const resposta: tipoRespostaErro = { return {
cod: codigosResposta.erroNaoEncontrado, cod: codigosResposta.erroNaoEncontrado,
valor: undefined, valor: undefined,
mensagem: mensagem:
@ -167,27 +139,28 @@ export const IniciarRespostas = (
eCerto: false, eCerto: false,
detalhes, detalhes,
} }
return aplicarCallback(resposta, callback)
} }
const erroInterno = (op: tipoPrErroInterno): tipoRespostaErro => { const erroInterno = (op: tipoPrErroInterno): tipoRespostaErro => {
const resRegistro = registrarErroInterno(op)
const mensagemFim = `${op.mensagem || "Erro interno"}` const mensagemFim = `${op.mensagem || "Erro interno"}`
const resposta: tipoRespostaErro = { return {
cod: codigosResposta.erroDesconhecido, cod: codigosResposta.erroDesconhecido,
valor: undefined, valor: undefined,
mensagem: mensagemFim, mensagem: mensagemFim,
eErro: true, eErro: true,
eCerto: false, eCerto: false,
...resRegistro,
} }
return aplicarCallback(resposta, callback)
} }
const tempoEsgotado = ( const tempoEsgotado = (
mensagem?: string | undefined | null, mensagem?: string | undefined | null,
detalhes?: string[], detalhes?: string[],
): tipoRespostaErro => { ): tipoRespostaErro => {
const resposta: tipoRespostaErro = { return {
cod: codigosResposta.tempoEsgotado, cod: codigosResposta.tempoEsgotado,
valor: undefined, valor: undefined,
mensagem: mensagem:
@ -196,7 +169,6 @@ export const IniciarRespostas = (
eCerto: false, eCerto: false,
detalhes, detalhes,
} }
return aplicarCallback(resposta, callback)
} }
const erroEspera = tempoEsgotado const erroEspera = tempoEsgotado
@ -239,11 +211,6 @@ export const IniciarRespostas = (
} }
/** /**
* @deprecated Use IniciarRespostas em seu lugar * Instância default (sem handler de erro interno).
*/ */
export const gerarRespostas = IniciarRespostas export const respostaComuns = gerarRespostas(() => ({}))
/**
* Instância default (sem handler de interceptação).
*/
export const respostaComuns = IniciarRespostas()

View file

@ -3,8 +3,7 @@
/* Linguagem e Ambiente */ /* Linguagem e Ambiente */
"target": "ES2020", /* Define a versão do JavaScript para o código emitido. */ "target": "ES2020", /* Define a versão do JavaScript para o código emitido. */
"lib": ["ES2022", "DOM", "DOM.Iterable"],/* Especifica as bibliotecas padrão a serem incluídas, como DOM para iteradores. */ "lib": ["ES2022", "DOM", "DOM.Iterable"],/* Especifica as bibliotecas padrão a serem incluídas, como DOM para iteradores. */
// IA manter "ignoreDeprecations": "6.0", "ignoreDeprecations": "6.0", /* Ignora erros de compatibilidade com depreciações TS 6.x */
"ignoreDeprecations": "6.0", /* Ignora erros de compatibilidade com depreciações TS 6.x */
"experimentalDecorators": true, /* Habilita o suporte experimental a decoradores. */ "experimentalDecorators": true, /* Habilita o suporte experimental a decoradores. */
"emitDecoratorMetadata": true, /* Emite metadados de tipos de design para declarações decoradas. */ "emitDecoratorMetadata": true, /* Emite metadados de tipos de design para declarações decoradas. */