From 4aa775266f009b085dd9067e47a3206792812863 Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Sat, 30 May 2026 09:40:49 -0300 Subject: [PATCH] implementado filtro Delta --- dist-back/filtroDelta.js | 49 ++++++++++++++++- dist-front/index.d.mts | 74 +++++++++++++++++++++++++- dist-front/index.mjs | 2 +- package.json | 2 +- pacote.tgz | Bin 35393 -> 37420 bytes src/filtroDelta.ts | 112 ++++++++++++++++++++++++++++++++++++++- 6 files changed, 234 insertions(+), 5 deletions(-) diff --git a/dist-back/filtroDelta.js b/dist-back/filtroDelta.js index 7628013..e75fcf1 100644 --- a/dist-back/filtroDelta.js +++ b/dist-back/filtroDelta.js @@ -28,6 +28,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var filtroDelta_exports = {}; __export(filtroDelta_exports, { + iniciarFiltroDelta: () => iniciarFiltroDelta, + operadorFiltroDeltaDetalhes: () => operadorFiltroDeltaDetalhes, zColunaFiltroDelta: () => zColunaFiltroDelta, zCondicaoFiltroDelta: () => zCondicaoFiltroDelta, zFiltroDelta: () => zFiltroDelta, @@ -35,7 +37,45 @@ __export(filtroDelta_exports, { }); module.exports = __toCommonJS(filtroDelta_exports); var import_zod = __toESM(require("zod")); -const zOperadorFiltroDelta = import_zod.default.enum([">", "<", ">=", "<=", "=", "!=", "in", "like"]); +const zOperadorFiltroDelta = import_zod.default.enum([">", "<", ">=", "<=", "=", "!=", "in", "like", "\u2229"]); +const operadorFiltroDeltaDetalhes = { + ">": { + rotulo: "Maior que", + descricao: "O valor de A deve ser maior que o valor de B" + }, + "<": { + rotulo: "Menor que", + descricao: "O valor de A deve ser menor que o valor de B" + }, + ">=": { + rotulo: "Maior ou igual a", + descricao: "O valor de A deve ser maior ou igual ao valor de B" + }, + "<=": { + rotulo: "Menor ou igual a", + descricao: "O valor de A deve ser menor ou igual ao valor de B" + }, + "=": { + rotulo: "Igual a", + descricao: "O valor de A deve ser igual ao valor de B" + }, + "!=": { + rotulo: "Diferente de", + descricao: "O valor de A deve ser diferente do valor de B" + }, + in: { + rotulo: "Est\xE1 em", + descricao: "O valor de A deve estar presente na cole\xE7\xE3o ou lista definida em B" + }, + like: { + rotulo: "Cont\xE9m", + descricao: "O valor de A deve conter o texto informado em B" + }, + "\u2229": { + rotulo: "Interse\xE7\xE3o", + descricao: "A e B devem possuir pelo menos um elemento em comum" + } +}; const regexIdCondicaoFiltroDelta = /^\{[\w:]+\}$/; const regexColunaFiltroDelta = /^\w+(\.\w+)*$/; const zColunaFiltroDelta = import_zod.default.string().regex(regexColunaFiltroDelta, "Coluna inv\xE1lida").describe("nome da coluna ou caminho aninhado do jsonb"); @@ -100,8 +140,15 @@ const zFiltroDelta = import_zod.default.object({ } } }); +const iniciarFiltroDelta = () => { + return { + criarFiltroDelta: (filtro) => zFiltroDelta.parse(filtro) + }; +}; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { + iniciarFiltroDelta, + operadorFiltroDeltaDetalhes, zColunaFiltroDelta, zCondicaoFiltroDelta, zFiltroDelta, diff --git a/dist-front/index.d.mts b/dist-front/index.d.mts index 29477e5..9fe7732 100644 --- a/dist-front/index.d.mts +++ b/dist-front/index.d.mts @@ -129,6 +129,44 @@ declare const extensoes: { */ declare const tipoArquivo: (nomeArquivo: string | null | undefined) => tiposArquivo; +/** + * ============================================================================= + * FILTRO DELTA (zFiltroDelta) + * ============================================================================= + * + * OBJETIVO + * ----------------------------------------------------------------------------- + * Novo sistema de filtros projetado para maior flexibilidade e geração segura + * de instruções SQL dinâmicas (WHERE). + * + * REGRAS IMPORTANTES (PARA IA) + * ----------------------------------------------------------------------------- + * - O filtro é composto de duas partes obrigatórias: `condicoes` e `formula`. + * - Apenas referências aos `id`s das `condicoes` podem ser usadas na `formula`. + * - Não use sintaxe baseada em objetos aninhados para agrupamento (ex: { E: [], OU: [] }). Use fórmulas em string. + * + * 1) CONDIÇÕES (`condicoes`): + * Array de objetos contendo as definições isoladas de cada comparação. + * Exemplo: + * [ + * { id: "{1}", coluna: "idade", operador: ">=", valor: 18 }, + * { id: "{2}", coluna: "nome", operador: "like", valor: "%pa%" } + * ] + * - `id`: Deve SEMPRE seguir o formato {identificador}. Ex: `{c1}`, `{idade_min}`. + * - `coluna`: O nome da coluna ou um path JSONB válido (ex: `veiculo.ano`). + * - `operador`: Um dos valores do tipo `tipoOperadorFiltroDelta` (veja a constante). + * + * 2) FÓRMULA (`formula`): + * String que define a expressão lógica relacionando as condições através de seus `id`s. + * Operadores Lógicos Suportados (EM MAIÚSCULO): + * - `E` (AND) + * - `OU` (OR) + * - `NAO` (NOT) + * Suporta o agrupamento lógico usando parênteses `()` + * Exemplo válido: "({1} E NAO({2})) OU {3}" + * + * ============================================================================= + */ /** * Operadores permitidos para comparação. */ @@ -141,6 +179,11 @@ declare const zOperadorFiltroDelta: z.ZodEnum<{ "<=": "<="; like: "like"; in: "in"; + "\u2229": "∩"; +}>; +declare const operadorFiltroDeltaDetalhes: Record, { + rotulo: string; + descricao: string; }>; /** * Coluna simples ou caminho aninhado de jsonb. @@ -161,6 +204,7 @@ declare const zCondicaoFiltroDelta: z.ZodObject<{ "<=": "<="; like: "like"; in: "in"; + "\u2229": "∩"; }>; valor: z.ZodAny; }, z.core.$strip>; @@ -180,6 +224,7 @@ declare const zFiltroDelta: z.ZodObject<{ "<=": "<="; like: "like"; in: "in"; + "\u2229": "∩"; }>; valor: z.ZodAny; }, z.core.$strip>>; @@ -189,6 +234,33 @@ type tipoOperadorFiltroDelta = z.infer; type tipoColunaFiltroDelta = z.infer; type tipoCondicaoFiltroDelta = z.infer; type tipoFiltroDelta = z.infer; +type tipoFiltroDeltaColunaTipada = { + condicoes: (tipoCondicaoFiltroDelta & { + coluna: T; + })[]; + formula: string; +}; +/** + * Fábrica para criar filtros com colunas estritamente tipadas. + * Útil para autocompletar os nomes das colunas e garantir a estrutura no TypeScript. + * + * @example + * ```ts + * const { criarFiltroDelta } = iniciarFiltroDelta<"nome" | "idade" | "jsonb.propriedade">() + * + * const filtro = criarFiltroDelta({ + * condicoes: [ + * { id: "{c1}", coluna: "idade", operador: ">", valor: 18 }, + * { id: "{c2}", coluna: "nome", operador: "=", valor: "luiz" }, + * { id: "{c3}", coluna: "jsonb.propriedade", operador: "=", valor: "valor" }, + * ], + * formula: "({c1} E {c2}) OU {c3}", + * }) + * ``` + */ +declare const iniciarFiltroDelta: () => { + criarFiltroDelta: (filtro: tipoFiltroDeltaColunaTipada) => tipoFiltroDeltaColunaTipada; +}; /** * LocalStorage Tipado @@ -402,4 +474,4 @@ declare const nomeVariavel: (v: { [key: string]: any; }) => string; -export { Produtos, TipagemRotas, type TipoPayloadAuditoria, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, erUuid, esperar, extensoes, type interfaceConsulta, link_paiol, localValor, nomeVariavel, objetoPg, operadores, paraObjetoRegistroPg, pgObjeto, siglas_unidades_medida, texto_busca, tipoArquivo, type tipoColunaFiltroDelta, type tipoCondicaoFiltroDelta, type tipoFiltro, type tipoFiltroDelta, type tipoOperadorFiltroDelta, tipoUsuarioResiduos, tiposSituacoesElicencie, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zColunaFiltroDelta, zCondicaoFiltroDelta, zFiltro, zFiltroDelta, zOperadorFiltroDelta, zOperadores }; +export { Produtos, TipagemRotas, type TipoPayloadAuditoria, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, erUuid, esperar, extensoes, iniciarFiltroDelta, type interfaceConsulta, link_paiol, localValor, nomeVariavel, objetoPg, operadorFiltroDeltaDetalhes, operadores, paraObjetoRegistroPg, pgObjeto, siglas_unidades_medida, texto_busca, tipoArquivo, type tipoColunaFiltroDelta, type tipoCondicaoFiltroDelta, type tipoFiltro, type tipoFiltroDelta, type tipoFiltroDeltaColunaTipada, type tipoOperadorFiltroDelta, tipoUsuarioResiduos, tiposSituacoesElicencie, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zColunaFiltroDelta, zCondicaoFiltroDelta, zFiltro, zFiltroDelta, zOperadorFiltroDelta, zOperadores }; diff --git a/dist-front/index.mjs b/dist-front/index.mjs index 30d296e..d66c467 100644 --- a/dist-front/index.mjs +++ b/dist-front/index.mjs @@ -1 +1 @@ -var f="ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),I=o=>`eli-${Array.from({length:o||8}).map(()=>f[(999*Math.random()|0)%f.length]).join("")}`;var s={};globalThis.cacheMemoria_cache=s;var u=(o,a,r)=>{let n=typeof o=="string"?o:typeof o=="number"?String(o):encodeURIComponent(JSON.stringify(o)),t=r&&new Date().getTime()+r*1e3;a!==void 0&&(s[n]={valor:a,validade:t});let i=s[n];if(!(i?.validade&&i.validades,J=u,R=o=>a=>u(o,a);var K="00000000-0000-0000-0000-000000000000",x=(m=>(m.codigo="codigo",m.excluido="excluido",m.data_hora_criacao="data_hora_criacao",m.data_hora_atualizacao="data_hora_atualizacao",m.codigo_usuario_criacao="codigo_usuario_criacao",m.codigo_usuario_atualizacao="codigo_usuario_atualizacao",m.versao="versao",m))(x||{}),_=(a=>(a.token="token",a))(_||{}),b=(r=>(r.Usuario="usuario",r.Fornecedor="fornecedor",r))(b||{});import p from"zod";var h=(n=>(n["="]="=",n["!="]="!=",n[">"]=">",n[">="]=">=",n["<"]="<",n["<="]="<=",n.like="like",n.in="in",n.isNull="isNull",n))(h||{}),v=p.enum(["=","!=",">",">=","<","<=","like","in","isNull"]),Q=p.object({coluna:p.string(),valor:p.any(),operador:v,ou:p.boolean().optional()});var W="https://paiol.idz.one";var y=[{ext:"gif",tipo:"imagem",mime:"image/gif"},{ext:"jpg",tipo:"imagem",mime:"image/jpeg"},{ext:"jpeg",tipo:"imagem",mime:"image/jpeg"},{ext:"png",tipo:"imagem",mime:"image/png"},{ext:"bmp",tipo:"imagem",mime:"image/bmp"},{ext:"webp",tipo:"imagem",mime:"image/webp"},{ext:"tiff",tipo:"imagem",mime:"image/tiff"},{ext:"svg",tipo:"imagem",mime:"image/svg+xml"},{ext:"ico",tipo:"imagem",mime:"image/x-icon"},{ext:"pdf",tipo:"documento",mime:"application/pdf"},{ext:"doc",tipo:"documento",mime:"application/msword"},{ext:"docx",tipo:"documento",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"},{ext:"xls",tipo:"documento",mime:"application/vnd.ms-excel"},{ext:"xlsx",tipo:"documento",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},{ext:"ppt",tipo:"documento",mime:"application/vnd.ms-powerpoint"},{ext:"pptx",tipo:"documento",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{ext:"txt",tipo:"documento",mime:"text/plain"},{ext:"odt",tipo:"documento",mime:"application/vnd.oasis.opendocument.text"},{ext:"ods",tipo:"documento",mime:"application/vnd.oasis.opendocument.spreadsheet"},{ext:"rtf",tipo:"documento",mime:"application/rtf"},{ext:"csv",tipo:"documento",mime:"text/csv"},{ext:"mp4",tipo:"v\xEDdeo",mime:"video/mp4"},{ext:"avi",tipo:"v\xEDdeo",mime:"video/x-msvideo"},{ext:"mkv",tipo:"v\xEDdeo",mime:"video/x-matroska"},{ext:"mov",tipo:"v\xEDdeo",mime:"video/quicktime"},{ext:"wmv",tipo:"v\xEDdeo",mime:"video/x-ms-wmv"},{ext:"flv",tipo:"v\xEDdeo",mime:"video/x-flv"},{ext:"webm",tipo:"v\xEDdeo",mime:"video/webm"},{ext:"3gp",tipo:"v\xEDdeo",mime:"video/3gpp"},{ext:"mpeg",tipo:"v\xEDdeo",mime:"video/mpeg"}],S=o=>{let a=String(o||"").toLocaleLowerCase().split(".").pop();return y.find(n=>n.ext===a)?.tipo||"outros"};import l from"zod";var z=l.enum([">","<",">=","<=","=","!=","in","like"]),w=/^\{[\w:]+\}$/,O=/^\w+(\.\w+)*$/,T=l.string().regex(O,"Coluna inv\xE1lida").describe("nome da coluna ou caminho aninhado do jsonb"),j=l.object({id:l.string().describe("id da condi\xE7\xE3o do filtro").regex(w,"O id deve seguir o formato {identificador}"),coluna:T,operador:z,valor:l.any().describe("valor de compara\xE7\xE3o")}),F=o=>{let r=(o.match(/\{[\w:]+\}|\bNAO\b|\bE\b|\bOU\b|\(|\)/g)||[]).join(""),n=o.replace(/\s+/g,""),t=r.replace(/\s+/g,"");if(n!==t)return!1;let i=o.replace(/\{[\w:]+\}/g,"true").replace(/\bNAO\b/g,"!").replace(/\bE\b/g,"&&").replace(/\bOU\b/g,"||");try{return new Function(`return (${i})`)(),!0}catch{return!1}},eo=l.object({condicoes:l.array(j),formula:l.string().refine(F,{message:"F\xF3rmula inv\xE1lida. Use apenas refer\xEAncias de condi\xE7\xF5es {id} ou {id:sufixo}, operadores E/OU/NAO e par\xEAnteses."})}).superRefine((o,a)=>{let r=new Set(o.condicoes.map(t=>t.id)),n=o.formula.match(/\{[\w:]+\}/g)||[];for(let t of n)r.has(t)||a.addIssue({code:"custom",path:["formula"],message:`A refer\xEAncia ${t} n\xE3o existe em condicoes.`})});var ro=(o,a)=>{let r="localStorage"in globalThis?globalThis.localStorage:void 0;if(typeof r>"u")return null;let n=typeof o=="string"?o:encodeURIComponent(JSON.stringify(o));try{a!==void 0&&r.setItem(n,JSON.stringify(a));let t=r.getItem(n);if(t===null)return null;try{return JSON.parse(t)}catch{return t}}catch{return null}};var g=o=>{try{return Object.fromEntries(Object.entries(o).map(([a,r])=>[a,r===void 0||r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean"?r:JSON.stringify(r,null,2)]))}catch(a){throw new Error(`Erro na fun\xE7\xE3o paraObjetoRegistroPg: ${a.message} ${a.stack}`)}},no=g,io=g;var N=(o=>(o["e-licencie"]="e-licencie",o["gov.e-licencie"]="gov.e-licencie",o))(N||{});var k=(e=>(e.modelo="000_modelo",e.vencida="100_vencida",e.expirado="200_expirado",e.alerta="300_alerta",e.protocoladafora="350_protocoladafora",e.protocolada="400_protocolada",e.protocoladaApenas="430_protocolada",e.protocolada_alteracao="450_protocolada",e.prazo="500_prazo",e.emitida="515_emitida",e.valida="518_valida",e.novo="520_novo",e.recebido="521_recebido",e.em_andamento="530_em_andamento",e.aguardando="530_aguardando",e.aguardandoresposta="540_aguardandoresposta",e.suspensaotemporaria="540_suspensaotemporaria",e.cancelada="550_cancelada",e.execucao="560_execucao",e.pendente="570_pendente",e.executadafora="600_executadafora",e.executada="700_executada",e.naoexecutada="701_naoexecutada",e.concluida="730_concluida",e.respondido_negado="740_respondido_negado",e.respondido_aceito="741_respondido_aceito",e.atendidoparcial="742_atendidoparcial",e.naoatendido="743_naoatendido",e.atendido="744_atendido",e.renovada="760_renovada",e.finalizada="800_finalizada",e.emitirnota="101_emitirnota",e.faturaatrasada="301_faturaatrasada",e.pagarfatura="302_pagarfatura",e.aguardandoconfirmacao="531_aguardandoconfirmacao",e.agendado="701_agendado",e.faturapaga="801_faturapaga",e.excluida="999_excluida",e.requerida="401_requerida",e.vigente="516_vigente",e.emrenovacao="402_emrenovacao",e.arquivada="801_arquivada",e.aguardando_sincronizacao="999_aguardando_sincronizacao",e.nao_conforme="710_nao_conforme",e.conforme="720_conforme",e.nao_aplicavel="730_nao_aplicavel",e.parcial="715_parcial",e))(k||{});var so=()=>"Ol\xE1 Mundo! (fun\xE7\xE3o)";var uo="Ol\xE1 Mundo! (vari\xE1vel)";var bo=(...o)=>o.map(a=>a==null?"":String(a).normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\s+/g," ").toLowerCase()).join(" ");var c=class{constructor({caminho:a,acaoIr:r,rotulo:n}){this._partesCaminho=[];this._acaoIr=r,this._partesCaminho=(Array.isArray(a)?a:[a]).filter(Boolean).map(t=>String(t)).flatMap(t=>t.split("/")).filter(Boolean),this.rotulo=n}get caminho(){return`/${this._partesCaminho.join("/")}`}set caminho(a){this._partesCaminho=a.split("/").filter(r=>r)}endereco(a,r){let n=typeof globalThis<"u"&&globalThis.window||void 0,t=new URL(n?n.location.href:"http://localhost");t.pathname=this.caminho,t.search="";let i=Object.entries(a);for(let[d,m]of i)t.searchParams.set(String(d),JSON.stringify(m));return t.hash="",r&&(t.hash=`#${t.search}`,t.search=""),t.href}ir(a){if(this._acaoIr)this._acaoIr(this.endereco({...a}));else{let r=typeof globalThis<"u"&&globalThis.window||void 0;r&&(r.location.href=this.endereco({...a}))}}parametros(a){let r=a?new URL(a):new URL(typeof globalThis<"u"&&globalThis.window?globalThis.window.location.href:"http://localhost"),n=r.searchParams,t=Object.fromEntries(n.entries()),i=r.hash;if(i){let d=Object.fromEntries(new URLSearchParams(i.slice(1)).entries());t={...t,...d}}for(let d in t)try{t[d]=JSON.parse(t[d])}catch{console.log(`[${d}|${t[d]}] n\xE3o \xE9 um json v\xE1lido.`)}return t}};var D=(i=>(i.UN="UN",i.KG="KG",i.TON="TON",i.g="g",i["M\xB3"]="M\xB3",i.Lt="Lt",i))(D||{}),yo=[{sigla_unidade:"KG",nome:"Quilograma",sigla_normalizada:"KG",normalizar:o=>o,tipo:"massa"},{sigla_unidade:"g",nome:"Grama",sigla_normalizada:"KG",normalizar:o=>o/1e3,tipo:"massa"},{sigla_unidade:"TON",nome:"Tonelada",sigla_normalizada:"KG",normalizar:o=>o*1e3,tipo:"massa"},{sigla_unidade:"Lt",nome:"Litro",sigla_normalizada:"Lt",normalizar:o=>o,tipo:"volume"},{sigla_unidade:"M\xB3",nome:"Metro C\xFAbico",sigla_normalizada:"Lt",normalizar:o=>o*1e3,tipo:"volume"},{sigla_unidade:"UN",nome:"Unidade",sigla_normalizada:"UN",normalizar:o=>o,tipo:"unidade"}];import{NIL as C,v3 as U,v4 as L}from"uuid";var A=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Oo=o=>A.test(String(o||"")),M=(o,a)=>U(typeof o=="string"?o:typeof o=="number"?String(o):JSON.stringify(o),a?M(a):C),q=L,To=q;var Fo=o=>new Promise(a=>setTimeout(()=>a(!0),o)),No=o=>Object.keys(o).join("/");export{N as Produtos,c as TipagemRotas,I as aleatorio,u as cacheM,R as cacheMFixo,J as cacheMemoria,x as camposComuns,A as erUuid,Fo as esperar,y as extensoes,W as link_paiol,ro as localValor,No as nomeVariavel,io as objetoPg,h as operadores,g as paraObjetoRegistroPg,no as pgObjeto,D as siglas_unidades_medida,bo as texto_busca,S as tipoArquivo,b as tipoUsuarioResiduos,k as tiposSituacoesElicencie,_ as tx,so as umaFuncao,uo as umaVariavel,yo as unidades_medida,To as uuid,M as uuidV3,q as uuidV4,K as uuid_null,Oo as validarUuid,P as verCacheM,T as zColunaFiltroDelta,j as zCondicaoFiltroDelta,Q as zFiltro,eo as zFiltroDelta,z as zOperadorFiltroDelta,v as zOperadores}; +var u="ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),B=o=>`eli-${Array.from({length:o||8}).map(()=>u[(999*Math.random()|0)%u.length]).join("")}`;var p={};globalThis.cacheMemoria_cache=p;var c=(o,a,r)=>{let n=typeof o=="string"?o:typeof o=="number"?String(o):encodeURIComponent(JSON.stringify(o)),t=r&&new Date().getTime()+r*1e3;a!==void 0&&(p[n]={valor:a,validade:t});let i=p[n];if(!(i?.validade&&i.validadep,R=c,J=o=>a=>c(o,a);var K="00000000-0000-0000-0000-000000000000",x=(d=>(d.codigo="codigo",d.excluido="excluido",d.data_hora_criacao="data_hora_criacao",d.data_hora_atualizacao="data_hora_atualizacao",d.codigo_usuario_criacao="codigo_usuario_criacao",d.codigo_usuario_atualizacao="codigo_usuario_atualizacao",d.versao="versao",d))(x||{}),v=(a=>(a.token="token",a))(v||{}),_=(r=>(r.Usuario="usuario",r.Fornecedor="fornecedor",r))(_||{});import s from"zod";var b=(n=>(n["="]="=",n["!="]="!=",n[">"]=">",n[">="]=">=",n["<"]="<",n["<="]="<=",n.like="like",n.in="in",n.isNull="isNull",n))(b||{}),h=s.enum(["=","!=",">",">=","<","<=","like","in","isNull"]),H=s.object({coluna:s.string(),valor:s.any(),operador:h,ou:s.boolean().optional()});var X="https://paiol.idz.one";var y=[{ext:"gif",tipo:"imagem",mime:"image/gif"},{ext:"jpg",tipo:"imagem",mime:"image/jpeg"},{ext:"jpeg",tipo:"imagem",mime:"image/jpeg"},{ext:"png",tipo:"imagem",mime:"image/png"},{ext:"bmp",tipo:"imagem",mime:"image/bmp"},{ext:"webp",tipo:"imagem",mime:"image/webp"},{ext:"tiff",tipo:"imagem",mime:"image/tiff"},{ext:"svg",tipo:"imagem",mime:"image/svg+xml"},{ext:"ico",tipo:"imagem",mime:"image/x-icon"},{ext:"pdf",tipo:"documento",mime:"application/pdf"},{ext:"doc",tipo:"documento",mime:"application/msword"},{ext:"docx",tipo:"documento",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"},{ext:"xls",tipo:"documento",mime:"application/vnd.ms-excel"},{ext:"xlsx",tipo:"documento",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},{ext:"ppt",tipo:"documento",mime:"application/vnd.ms-powerpoint"},{ext:"pptx",tipo:"documento",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"},{ext:"txt",tipo:"documento",mime:"text/plain"},{ext:"odt",tipo:"documento",mime:"application/vnd.oasis.opendocument.text"},{ext:"ods",tipo:"documento",mime:"application/vnd.oasis.opendocument.spreadsheet"},{ext:"rtf",tipo:"documento",mime:"application/rtf"},{ext:"csv",tipo:"documento",mime:"text/csv"},{ext:"mp4",tipo:"v\xEDdeo",mime:"video/mp4"},{ext:"avi",tipo:"v\xEDdeo",mime:"video/x-msvideo"},{ext:"mkv",tipo:"v\xEDdeo",mime:"video/x-matroska"},{ext:"mov",tipo:"v\xEDdeo",mime:"video/quicktime"},{ext:"wmv",tipo:"v\xEDdeo",mime:"video/x-ms-wmv"},{ext:"flv",tipo:"v\xEDdeo",mime:"video/x-flv"},{ext:"webm",tipo:"v\xEDdeo",mime:"video/webm"},{ext:"3gp",tipo:"v\xEDdeo",mime:"video/3gpp"},{ext:"mpeg",tipo:"v\xEDdeo",mime:"video/mpeg"}],E=o=>{let a=String(o||"").toLocaleLowerCase().split(".").pop();return y.find(n=>n.ext===a)?.tipo||"outros"};import l from"zod";var O=l.enum([">","<",">=","<=","=","!=","in","like","\u2229"]),ao={">":{rotulo:"Maior que",descricao:"O valor de A deve ser maior que o valor de B"},"<":{rotulo:"Menor que",descricao:"O valor de A deve ser menor que o valor de B"},">=":{rotulo:"Maior ou igual a",descricao:"O valor de A deve ser maior ou igual ao valor de B"},"<=":{rotulo:"Menor ou igual a",descricao:"O valor de A deve ser menor ou igual ao valor de B"},"=":{rotulo:"Igual a",descricao:"O valor de A deve ser igual ao valor de B"},"!=":{rotulo:"Diferente de",descricao:"O valor de A deve ser diferente do valor de B"},in:{rotulo:"Est\xE1 em",descricao:"O valor de A deve estar presente na cole\xE7\xE3o ou lista definida em B"},like:{rotulo:"Cont\xE9m",descricao:"O valor de A deve conter o texto informado em B"},"\u2229":{rotulo:"Interse\xE7\xE3o",descricao:"A e B devem possuir pelo menos um elemento em comum"}},z=/^\{[\w:]+\}$/,T=/^\w+(\.\w+)*$/,w=l.string().regex(T,"Coluna inv\xE1lida").describe("nome da coluna ou caminho aninhado do jsonb"),F=l.object({id:l.string().describe("id da condi\xE7\xE3o do filtro").regex(z,"O id deve seguir o formato {identificador}"),coluna:w,operador:O,valor:l.any().describe("valor de compara\xE7\xE3o")}),D=o=>{let r=(o.match(/\{[\w:]+\}|\bNAO\b|\bE\b|\bOU\b|\(|\)/g)||[]).join(""),n=o.replace(/\s+/g,""),t=r.replace(/\s+/g,"");if(n!==t)return!1;let i=o.replace(/\{[\w:]+\}/g,"true").replace(/\bNAO\b/g,"!").replace(/\bE\b/g,"&&").replace(/\bOU\b/g,"||");try{return new Function(`return (${i})`)(),!0}catch{return!1}},j=l.object({condicoes:l.array(F),formula:l.string().refine(D,{message:"F\xF3rmula inv\xE1lida. Use apenas refer\xEAncias de condi\xE7\xF5es {id} ou {id:sufixo}, operadores E/OU/NAO e par\xEAnteses."})}).superRefine((o,a)=>{let r=new Set(o.condicoes.map(t=>t.id)),n=o.formula.match(/\{[\w:]+\}/g)||[];for(let t of n)r.has(t)||a.addIssue({code:"custom",path:["formula"],message:`A refer\xEAncia ${t} n\xE3o existe em condicoes.`})}),ro=()=>({criarFiltroDelta:o=>j.parse(o)});var no=(o,a)=>{let r="localStorage"in globalThis?globalThis.localStorage:void 0;if(typeof r>"u")return null;let n=typeof o=="string"?o:encodeURIComponent(JSON.stringify(o));try{a!==void 0&&r.setItem(n,JSON.stringify(a));let t=r.getItem(n);if(t===null)return null;try{return JSON.parse(t)}catch{return t}}catch{return null}};var f=o=>{try{return Object.fromEntries(Object.entries(o).map(([a,r])=>[a,r===void 0||r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean"?r:JSON.stringify(r,null,2)]))}catch(a){throw new Error(`Erro na fun\xE7\xE3o paraObjetoRegistroPg: ${a.message} ${a.stack}`)}},mo=f,lo=f;var C=(o=>(o["e-licencie"]="e-licencie",o["gov.e-licencie"]="gov.e-licencie",o))(C||{});var k=(e=>(e.modelo="000_modelo",e.vencida="100_vencida",e.expirado="200_expirado",e.alerta="300_alerta",e.protocoladafora="350_protocoladafora",e.protocolada="400_protocolada",e.protocoladaApenas="430_protocolada",e.protocolada_alteracao="450_protocolada",e.prazo="500_prazo",e.emitida="515_emitida",e.valida="518_valida",e.novo="520_novo",e.recebido="521_recebido",e.em_andamento="530_em_andamento",e.aguardando="530_aguardando",e.aguardandoresposta="540_aguardandoresposta",e.suspensaotemporaria="540_suspensaotemporaria",e.cancelada="550_cancelada",e.execucao="560_execucao",e.pendente="570_pendente",e.executadafora="600_executadafora",e.executada="700_executada",e.naoexecutada="701_naoexecutada",e.concluida="730_concluida",e.respondido_negado="740_respondido_negado",e.respondido_aceito="741_respondido_aceito",e.atendidoparcial="742_atendidoparcial",e.naoatendido="743_naoatendido",e.atendido="744_atendido",e.renovada="760_renovada",e.finalizada="800_finalizada",e.emitirnota="101_emitirnota",e.faturaatrasada="301_faturaatrasada",e.pagarfatura="302_pagarfatura",e.aguardandoconfirmacao="531_aguardandoconfirmacao",e.agendado="701_agendado",e.faturapaga="801_faturapaga",e.excluida="999_excluida",e.requerida="401_requerida",e.vigente="516_vigente",e.emrenovacao="402_emrenovacao",e.arquivada="801_arquivada",e.aguardando_sincronizacao="999_aguardando_sincronizacao",e.nao_conforme="710_nao_conforme",e.conforme="720_conforme",e.nao_aplicavel="730_nao_aplicavel",e.parcial="715_parcial",e))(k||{});var co=()=>"Ol\xE1 Mundo! (fun\xE7\xE3o)";var go="Ol\xE1 Mundo! (vari\xE1vel)";var ho=(...o)=>o.map(a=>a==null?"":String(a).normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\s+/g," ").toLowerCase()).join(" ");var g=class{constructor({caminho:a,acaoIr:r,rotulo:n}){this._partesCaminho=[];this._acaoIr=r,this._partesCaminho=(Array.isArray(a)?a:[a]).filter(Boolean).map(t=>String(t)).flatMap(t=>t.split("/")).filter(Boolean),this.rotulo=n}get caminho(){return`/${this._partesCaminho.join("/")}`}set caminho(a){this._partesCaminho=a.split("/").filter(r=>r)}endereco(a,r){let n=typeof globalThis<"u"&&globalThis.window||void 0,t=new URL(n?n.location.href:"http://localhost");t.pathname=this.caminho,t.search="";let i=Object.entries(a);for(let[m,d]of i)t.searchParams.set(String(m),JSON.stringify(d));return t.hash="",r&&(t.hash=`#${t.search}`,t.search=""),t.href}ir(a){if(this._acaoIr)this._acaoIr(this.endereco({...a}));else{let r=typeof globalThis<"u"&&globalThis.window||void 0;r&&(r.location.href=this.endereco({...a}))}}parametros(a){let r=a?new URL(a):new URL(typeof globalThis<"u"&&globalThis.window?globalThis.window.location.href:"http://localhost"),n=r.searchParams,t=Object.fromEntries(n.entries()),i=r.hash;if(i){let m=Object.fromEntries(new URLSearchParams(i.slice(1)).entries());t={...t,...m}}for(let m in t)try{t[m]=JSON.parse(t[m])}catch{console.log(`[${m}|${t[m]}] n\xE3o \xE9 um json v\xE1lido.`)}return t}};var N=(i=>(i.UN="UN",i.KG="KG",i.TON="TON",i.g="g",i["M\xB3"]="M\xB3",i.Lt="Lt",i))(N||{}),zo=[{sigla_unidade:"KG",nome:"Quilograma",sigla_normalizada:"KG",normalizar:o=>o,tipo:"massa"},{sigla_unidade:"g",nome:"Grama",sigla_normalizada:"KG",normalizar:o=>o/1e3,tipo:"massa"},{sigla_unidade:"TON",nome:"Tonelada",sigla_normalizada:"KG",normalizar:o=>o*1e3,tipo:"massa"},{sigla_unidade:"Lt",nome:"Litro",sigla_normalizada:"Lt",normalizar:o=>o,tipo:"volume"},{sigla_unidade:"M\xB3",nome:"Metro C\xFAbico",sigla_normalizada:"Lt",normalizar:o=>o*1e3,tipo:"volume"},{sigla_unidade:"UN",nome:"Unidade",sigla_normalizada:"UN",normalizar:o=>o,tipo:"unidade"}];import{NIL as A,v3 as M,v4 as q}from"uuid";var U=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Fo=o=>U.test(String(o||"")),L=(o,a)=>M(typeof o=="string"?o:typeof o=="number"?String(o):JSON.stringify(o),a?L(a):A),I=q,Do=I;var Co=o=>new Promise(a=>setTimeout(()=>a(!0),o)),ko=o=>Object.keys(o).join("/");export{C as Produtos,g as TipagemRotas,B as aleatorio,c as cacheM,J as cacheMFixo,R as cacheMemoria,x as camposComuns,U as erUuid,Co as esperar,y as extensoes,ro as iniciarFiltroDelta,X as link_paiol,no as localValor,ko as nomeVariavel,lo as objetoPg,ao as operadorFiltroDeltaDetalhes,b as operadores,f as paraObjetoRegistroPg,mo as pgObjeto,N as siglas_unidades_medida,ho as texto_busca,E as tipoArquivo,_ as tipoUsuarioResiduos,k as tiposSituacoesElicencie,v as tx,co as umaFuncao,go as umaVariavel,zo as unidades_medida,Do as uuid,L as uuidV3,I as uuidV4,K as uuid_null,Fo as validarUuid,P as verCacheM,w as zColunaFiltroDelta,F as zCondicaoFiltroDelta,H as zFiltro,j as zFiltroDelta,O as zOperadorFiltroDelta,h as zOperadores}; diff --git a/package.json b/package.json index a4e57ac..0646c7a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "p-comuns", - "version": "0.339.0", + "version": "0.342.0", "description": "", "main": "./dist-front/index.mjs", "module": "./dist-front/index.mjs", diff --git a/pacote.tgz b/pacote.tgz index e3b986793f73a6aa8cb9b1e849767417eb0888f5..999707f7767af6049f1a60960233f0d19103e4db 100644 GIT binary patch literal 37420 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�-Wu>hDy)x(j zuJir(M3DZrc8*t6=+@~hZDcF4qoWKD5%5?HAQ0KYq2GVSQ)~1xb)^1v&?Y(k5fqI; zdZdsq>rJ~Bcqu?qye>R^eCPN59$ZyNVJchbns*|-20VZ`MPr^GSio}T#{A9T-1VtmF^QT`v@`a0K!X1F`rFpgRbubD zk%RY?qX#I>k%qS-cy1ns@1$3MeD7|(5UbIFc7Mn_OP$UF{8>HPGjLK>i4{JSD5d~^ z655l5k!B0Q;8~F2w{-re?Pr$BNDIO~b~8BV{cmlpQ_}xj>dx2y^`8F<2(SrK8`;mA zBFyvwKM7$TSX_WTM+_TKGB+~lf_8>_Qy6py@Tr1;jH5UL*pPifk>6BsmxwAKA}}HE z88P^NPJGnwqJ@kijzb7^%hu3AT}Cjnskn6_UK_LZ+un)Lx=wYvTlD?74QxqW;oMNq zcuBX#NgJ&!{#JVRb|C}f9&zo97pa|h4Nb$YAp$U?vDiHY1LaV&csXj8F4-4tzui7; zx7+=8sUMcgHMbAjecS@4SSyU~_X=BGs`p|_<4>=N|6A*n z-~X06a3;+6|LfuZ?j!$)IFO=0^wU%#vYt5d`{6Lm0Qhhq(+n|pC1O|m1P y$S&2 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", valor: 18 }, + * { id: "{2}", coluna: "nome", operador: "like", valor: "%pa%" } + * ] + * - `id`: Deve SEMPRE seguir o formato {identificador}. Ex: `{c1}`, `{idade_min}`. + * - `coluna`: O nome da coluna ou um path JSONB válido (ex: `veiculo.ano`). + * - `operador`: Um dos valores do tipo `tipoOperadorFiltroDelta` (veja a constante). + * + * 2) FÓRMULA (`formula`): + * String que define a expressão lógica relacionando as condições através de seus `id`s. + * Operadores Lógicos Suportados (EM MAIÚSCULO): + * - `E` (AND) + * - `OU` (OR) + * - `NAO` (NOT) + * Suporta o agrupamento lógico usando parênteses `()` + * Exemplo válido: "({1} E NAO({2})) OU {3}" + * + * ============================================================================= + */ + /** * Operadores permitidos para comparação. */ -export const zOperadorFiltroDelta = z.enum([">", "<", ">=", "<=", "=", "!=", "in", "like"]) +export const zOperadorFiltroDelta = z.enum([">", "<", ">=", "<=", "=", "!=", "in", "like", "∩"]) + +export const operadorFiltroDeltaDetalhes: Record< + z.infer, + { rotulo: string; descricao: string } +> = { + ">": { + rotulo: "Maior que", + descricao: "O valor de A deve ser maior que o valor de B", + }, + "<": { + rotulo: "Menor que", + descricao: "O valor de A deve ser menor que o valor de B", + }, + ">=": { + rotulo: "Maior ou igual a", + descricao: "O valor de A deve ser maior ou igual ao valor de B", + }, + "<=": { + rotulo: "Menor ou igual a", + descricao: "O valor de A deve ser menor ou igual ao valor de B", + }, + "=": { + rotulo: "Igual a", + descricao: "O valor de A deve ser igual ao valor de B", + }, + "!=": { + rotulo: "Diferente de", + descricao: "O valor de A deve ser diferente do valor de B", + }, + in: { + rotulo: "Está em", + descricao: "O valor de A deve estar presente na coleção ou lista definida em B", + }, + like: { + rotulo: "Contém", + descricao: "O valor de A deve conter o texto informado em B", + }, + "∩": { + rotulo: "Interseção", + descricao: "A e B devem possuir pelo menos um elemento em comum", + }, +} /** * Valida o identificador da condição. @@ -160,3 +241,32 @@ export type tipoOperadorFiltroDelta = z.infer export type tipoColunaFiltroDelta = z.infer export type tipoCondicaoFiltroDelta = z.infer export type tipoFiltroDelta = z.infer + +export type tipoFiltroDeltaColunaTipada = { + condicoes: (tipoCondicaoFiltroDelta & { coluna: T })[] + formula: string +} +/** + * Fábrica para criar filtros com colunas estritamente tipadas. + * Útil para autocompletar os nomes das colunas e garantir a estrutura no TypeScript. + * + * @example + * ```ts + * const { criarFiltroDelta } = iniciarFiltroDelta<"nome" | "idade" | "jsonb.propriedade">() + * + * const filtro = criarFiltroDelta({ + * condicoes: [ + * { id: "{c1}", coluna: "idade", operador: ">", valor: 18 }, + * { id: "{c2}", coluna: "nome", operador: "=", valor: "luiz" }, + * { id: "{c3}", coluna: "jsonb.propriedade", operador: "=", valor: "valor" }, + * ], + * formula: "({c1} E {c2}) OU {c3}", + * }) + * ``` + */ +export const iniciarFiltroDelta = () => { + return { + criarFiltroDelta: (filtro: tipoFiltroDeltaColunaTipada) => + zFiltroDelta.parse(filtro) as tipoFiltroDeltaColunaTipada, + } +}