@designliquido/delegua-entidades 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -0
- package/fontes/analisador-dicas.d.ts +49 -0
- package/fontes/analisador-dicas.d.ts.map +1 -0
- package/fontes/analisador-dicas.js +145 -0
- package/fontes/analisador-dicas.js.map +1 -0
- package/fontes/cache-consultas.d.ts +39 -0
- package/fontes/cache-consultas.d.ts.map +1 -0
- package/fontes/cache-consultas.js +98 -0
- package/fontes/cache-consultas.js.map +1 -0
- package/fontes/carregador-lotes.d.ts +64 -0
- package/fontes/carregador-lotes.d.ts.map +1 -0
- package/fontes/carregador-lotes.js +148 -0
- package/fontes/carregador-lotes.js.map +1 -0
- package/fontes/carregador-preguicoso.d.ts +34 -0
- package/fontes/carregador-preguicoso.d.ts.map +1 -0
- package/fontes/carregador-preguicoso.js +157 -0
- package/fontes/carregador-preguicoso.js.map +1 -0
- package/fontes/colecao.d.ts +74 -0
- package/fontes/colecao.d.ts.map +1 -0
- package/fontes/colecao.js +374 -0
- package/fontes/colecao.js.map +1 -0
- package/fontes/construtor-consulta.d.ts +129 -0
- package/fontes/construtor-consulta.d.ts.map +1 -0
- package/fontes/construtor-consulta.js +446 -0
- package/fontes/construtor-consulta.js.map +1 -0
- package/fontes/contexto-entidades.d.ts +119 -0
- package/fontes/contexto-entidades.d.ts.map +1 -0
- package/fontes/contexto-entidades.js +329 -0
- package/fontes/contexto-entidades.js.map +1 -0
- package/fontes/detector-n-mais-um.d.ts +87 -0
- package/fontes/detector-n-mais-um.d.ts.map +1 -0
- package/fontes/detector-n-mais-um.js +225 -0
- package/fontes/detector-n-mais-um.js.map +1 -0
- package/fontes/entidade.d.ts +82 -0
- package/fontes/entidade.d.ts.map +1 -0
- package/fontes/entidade.js +467 -0
- package/fontes/entidade.js.map +1 -0
- package/fontes/erros/erro-concorrencia.d.ts +11 -0
- package/fontes/erros/erro-concorrencia.d.ts.map +1 -0
- package/fontes/erros/erro-concorrencia.js +18 -0
- package/fontes/erros/erro-concorrencia.js.map +1 -0
- package/fontes/erros/erro-tabela-nao-encontrada.d.ts +4 -0
- package/fontes/erros/erro-tabela-nao-encontrada.d.ts.map +1 -0
- package/fontes/erros/erro-tabela-nao-encontrada.js +11 -0
- package/fontes/erros/erro-tabela-nao-encontrada.js.map +1 -0
- package/fontes/erros/erro-validacao.d.ts +9 -0
- package/fontes/erros/erro-validacao.d.ts.map +1 -0
- package/fontes/erros/erro-validacao.js +13 -0
- package/fontes/erros/erro-validacao.js.map +1 -0
- package/fontes/erros/index.d.ts +4 -0
- package/fontes/erros/index.d.ts.map +1 -0
- package/fontes/erros/index.js +20 -0
- package/fontes/erros/index.js.map +1 -0
- package/fontes/gerenciador-cache.d.ts +87 -0
- package/fontes/gerenciador-cache.d.ts.map +1 -0
- package/fontes/gerenciador-cache.js +147 -0
- package/fontes/gerenciador-cache.js.map +1 -0
- package/fontes/ilc/gerador-definicoes.d.ts +13 -0
- package/fontes/ilc/gerador-definicoes.d.ts.map +1 -0
- package/fontes/ilc/gerador-definicoes.js +96 -0
- package/fontes/ilc/gerador-definicoes.js.map +1 -0
- package/fontes/ilc/gerador-entidades.d.ts +10 -0
- package/fontes/ilc/gerador-entidades.d.ts.map +1 -0
- package/fontes/ilc/gerador-entidades.js +318 -0
- package/fontes/ilc/gerador-entidades.js.map +1 -0
- package/fontes/ilc/leitor-configuracao.d.ts +32 -0
- package/fontes/ilc/leitor-configuracao.d.ts.map +1 -0
- package/fontes/ilc/leitor-configuracao.js +124 -0
- package/fontes/ilc/leitor-configuracao.js.map +1 -0
- package/fontes/ilc/migracoes.d.ts +3 -0
- package/fontes/ilc/migracoes.d.ts.map +1 -0
- package/fontes/ilc/migracoes.js +215 -0
- package/fontes/ilc/migracoes.js.map +1 -0
- package/fontes/ilc/semeadura.d.ts +2 -0
- package/fontes/ilc/semeadura.d.ts.map +1 -0
- package/fontes/ilc/semeadura.js +50 -0
- package/fontes/ilc/semeadura.js.map +1 -0
- package/fontes/indicadores-performance/executor-analise-performance.d.ts +80 -0
- package/fontes/indicadores-performance/executor-analise-performance.d.ts.map +1 -0
- package/fontes/indicadores-performance/executor-analise-performance.js +212 -0
- package/fontes/indicadores-performance/executor-analise-performance.js.map +1 -0
- package/fontes/indicadores-performance/index.d.ts +26 -0
- package/fontes/indicadores-performance/index.d.ts.map +1 -0
- package/fontes/indicadores-performance/index.js +199 -0
- package/fontes/indicadores-performance/index.js.map +1 -0
- package/fontes/interfaces-tipos/analise-n1-interface.d.ts +13 -0
- package/fontes/interfaces-tipos/analise-n1-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/analise-n1-interface.js +3 -0
- package/fontes/interfaces-tipos/analise-n1-interface.js.map +1 -0
- package/fontes/interfaces-tipos/atributo-interface.d.ts +30 -0
- package/fontes/interfaces-tipos/atributo-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/atributo-interface.js +3 -0
- package/fontes/interfaces-tipos/atributo-interface.js.map +1 -0
- package/fontes/interfaces-tipos/coluna-computada-interface.d.ts +16 -0
- package/fontes/interfaces-tipos/coluna-computada-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/coluna-computada-interface.js +3 -0
- package/fontes/interfaces-tipos/coluna-computada-interface.js.map +1 -0
- package/fontes/interfaces-tipos/configuracao-banco-dados-interface.d.ts +48 -0
- package/fontes/interfaces-tipos/configuracao-banco-dados-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/configuracao-banco-dados-interface.js +3 -0
- package/fontes/interfaces-tipos/configuracao-banco-dados-interface.js.map +1 -0
- package/fontes/interfaces-tipos/entidade-interface.d.ts +37 -0
- package/fontes/interfaces-tipos/entidade-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/entidade-interface.js +3 -0
- package/fontes/interfaces-tipos/entidade-interface.js.map +1 -0
- package/fontes/interfaces-tipos/ganchos.d.ts +12 -0
- package/fontes/interfaces-tipos/ganchos.d.ts.map +1 -0
- package/fontes/interfaces-tipos/ganchos.js +3 -0
- package/fontes/interfaces-tipos/ganchos.js.map +1 -0
- package/fontes/interfaces-tipos/index.d.ts +17 -0
- package/fontes/interfaces-tipos/index.d.ts.map +1 -0
- package/fontes/interfaces-tipos/index.js +33 -0
- package/fontes/interfaces-tipos/index.js.map +1 -0
- package/fontes/interfaces-tipos/indice-interface.d.ts +16 -0
- package/fontes/interfaces-tipos/indice-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/indice-interface.js +3 -0
- package/fontes/interfaces-tipos/indice-interface.js.map +1 -0
- package/fontes/interfaces-tipos/informacao-consulta-interface.d.ts +12 -0
- package/fontes/interfaces-tipos/informacao-consulta-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/informacao-consulta-interface.js +3 -0
- package/fontes/interfaces-tipos/informacao-consulta-interface.js.map +1 -0
- package/fontes/interfaces-tipos/muito-para-muitos-interface.d.ts +33 -0
- package/fontes/interfaces-tipos/muito-para-muitos-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/muito-para-muitos-interface.js +3 -0
- package/fontes/interfaces-tipos/muito-para-muitos-interface.js.map +1 -0
- package/fontes/interfaces-tipos/opcoes-serializacao-interface.d.ts +14 -0
- package/fontes/interfaces-tipos/opcoes-serializacao-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/opcoes-serializacao-interface.js +3 -0
- package/fontes/interfaces-tipos/opcoes-serializacao-interface.js.map +1 -0
- package/fontes/interfaces-tipos/polimorfico-interface.d.ts +32 -0
- package/fontes/interfaces-tipos/polimorfico-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/polimorfico-interface.js +3 -0
- package/fontes/interfaces-tipos/polimorfico-interface.js.map +1 -0
- package/fontes/interfaces-tipos/relacionamento-interface.d.ts +23 -0
- package/fontes/interfaces-tipos/relacionamento-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/relacionamento-interface.js +3 -0
- package/fontes/interfaces-tipos/relacionamento-interface.js.map +1 -0
- package/fontes/interfaces-tipos/restricao-interface.d.ts +14 -0
- package/fontes/interfaces-tipos/restricao-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/restricao-interface.js +3 -0
- package/fontes/interfaces-tipos/restricao-interface.js.map +1 -0
- package/fontes/interfaces-tipos/semente-interface.d.ts +7 -0
- package/fontes/interfaces-tipos/semente-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/semente-interface.js +3 -0
- package/fontes/interfaces-tipos/semente-interface.js.map +1 -0
- package/fontes/interfaces-tipos/tabela-interface.d.ts +12 -0
- package/fontes/interfaces-tipos/tabela-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/tabela-interface.js +3 -0
- package/fontes/interfaces-tipos/tabela-interface.js.map +1 -0
- package/fontes/interfaces-tipos/transacao-interface.d.ts +35 -0
- package/fontes/interfaces-tipos/transacao-interface.d.ts.map +1 -0
- package/fontes/interfaces-tipos/transacao-interface.js +3 -0
- package/fontes/interfaces-tipos/transacao-interface.js.map +1 -0
- package/fontes/migracoes/executor-migracoes.d.ts +14 -0
- package/fontes/migracoes/executor-migracoes.d.ts.map +1 -0
- package/fontes/migracoes/executor-migracoes.js +177 -0
- package/fontes/migracoes/executor-migracoes.js.map +1 -0
- package/fontes/migracoes/gerador-migracoes.d.ts +15 -0
- package/fontes/migracoes/gerador-migracoes.d.ts.map +1 -0
- package/fontes/migracoes/gerador-migracoes.js +108 -0
- package/fontes/migracoes/gerador-migracoes.js.map +1 -0
- package/fontes/migracoes/migracao.d.ts +35 -0
- package/fontes/migracoes/migracao.d.ts.map +1 -0
- package/fontes/migracoes/migracao.js +66 -0
- package/fontes/migracoes/migracao.js.map +1 -0
- package/fontes/migracoes/semeador.d.ts +18 -0
- package/fontes/migracoes/semeador.d.ts.map +1 -0
- package/fontes/migracoes/semeador.js +109 -0
- package/fontes/migracoes/semeador.js.map +1 -0
- package/fontes/rastreador-mudancas.d.ts +27 -0
- package/fontes/rastreador-mudancas.d.ts.map +1 -0
- package/fontes/rastreador-mudancas.js +94 -0
- package/fontes/rastreador-mudancas.js.map +1 -0
- package/fontes/relacionamento.d.ts +11 -0
- package/fontes/relacionamento.d.ts.map +1 -0
- package/fontes/relacionamento.js +15 -0
- package/fontes/relacionamento.js.map +1 -0
- package/fontes/roteador-bancos.d.ts +50 -0
- package/fontes/roteador-bancos.d.ts.map +1 -0
- package/fontes/roteador-bancos.js +90 -0
- package/fontes/roteador-bancos.js.map +1 -0
- package/fontes/serializador.d.ts +46 -0
- package/fontes/serializador.d.ts.map +1 -0
- package/fontes/serializador.js +79 -0
- package/fontes/serializador.js.map +1 -0
- package/fontes/taquigrafia.d.ts +41 -0
- package/fontes/taquigrafia.d.ts.map +1 -0
- package/fontes/taquigrafia.js +96 -0
- package/fontes/taquigrafia.js.map +1 -0
- package/fontes/tipos.d.ts +3 -0
- package/fontes/tipos.d.ts.map +1 -0
- package/fontes/tipos.js +3 -0
- package/fontes/tipos.js.map +1 -0
- package/fontes/transacao.d.ts +81 -0
- package/fontes/transacao.d.ts.map +1 -0
- package/fontes/transacao.js +243 -0
- package/fontes/transacao.js.map +1 -0
- package/fontes/validacoes/validador.d.ts +19 -0
- package/fontes/validacoes/validador.d.ts.map +1 -0
- package/fontes/validacoes/validador.js +157 -0
- package/fontes/validacoes/validador.js.map +1 -0
- package/index.d.ts +36 -0
- package/index.d.ts.map +1 -0
- package/index.js +59 -0
- package/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConstrutorConsulta = void 0;
|
|
4
|
+
const lincones_js_1 = require("@designliquido/lincones-js");
|
|
5
|
+
/**
|
|
6
|
+
* Construtor de consultas fluente para entidades.
|
|
7
|
+
* Permite encadear condições, ordenações, limites e deslocamentos.
|
|
8
|
+
*/
|
|
9
|
+
class ConstrutorConsulta {
|
|
10
|
+
constructor(entidade, tecnologia) {
|
|
11
|
+
this.entidade = entidade;
|
|
12
|
+
this.tecnologia = tecnologia;
|
|
13
|
+
this.tradutor = new lincones_js_1.TradutorSqlAnsi();
|
|
14
|
+
this._tabela = entidade.obterNome();
|
|
15
|
+
this._colunas = entidade.obterNomesColunas();
|
|
16
|
+
this._condicoes = [];
|
|
17
|
+
this._condicoesOu = [];
|
|
18
|
+
this._condicoesSqlExtras = [];
|
|
19
|
+
this._condicoesOuSqlExtras = [];
|
|
20
|
+
this._ordenacoes = [];
|
|
21
|
+
this._limite = null;
|
|
22
|
+
this._deslocamento = null;
|
|
23
|
+
this._juncoes = [];
|
|
24
|
+
this._colunasPersonalizadas = false;
|
|
25
|
+
this._relacionadosParaCarregar = [];
|
|
26
|
+
this._agrupamentos = [];
|
|
27
|
+
this._condicoesTendo = [];
|
|
28
|
+
this._incluirExcluidos = false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Adiciona uma condição WHERE (AND).
|
|
32
|
+
*/
|
|
33
|
+
onde(coluna, operador, valor) {
|
|
34
|
+
// Operadores que lincones-js não suporta - gerar SQL manualmente
|
|
35
|
+
const operadoresNovos = ['DIFERENTE', 'COMO', 'NAO_COMO', 'NAO_EM', 'COMECA_COM', 'TERMINA_COM', 'CONTEM', 'ENTRE', 'NULO', 'NAO_NULO'];
|
|
36
|
+
if (operadoresNovos.includes(operador)) {
|
|
37
|
+
const condicao = this.criarCondicao(coluna, operador, valor);
|
|
38
|
+
this._condicoesSqlExtras.push(this.traduzirCondicaoParaSql(condicao));
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
if (operador === 'EM' && valor instanceof ConstrutorConsulta) {
|
|
42
|
+
this._condicoesSqlExtras.push(`${coluna} IN (${valor.gerarSql()})`);
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
this._condicoes.push(this.criarCondicao(coluna, operador, valor));
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Adiciona mais uma condição AND.
|
|
50
|
+
*/
|
|
51
|
+
e(coluna, operador, valor) {
|
|
52
|
+
return this.onde(coluna, operador, valor);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Adiciona uma condição OR. Internamente cria um grupo separado de condições.
|
|
56
|
+
*/
|
|
57
|
+
ou(coluna, operador, valor) {
|
|
58
|
+
// Operadores que lincones-js não suporta - gerar SQL manualmente
|
|
59
|
+
const operadoresNovos = ['DIFERENTE', 'COMO', 'NAO_COMO', 'NAO_EM', 'COMECA_COM', 'TERMINA_COM', 'CONTEM', 'ENTRE', 'NULO', 'NAO_NULO'];
|
|
60
|
+
if (operadoresNovos.includes(operador)) {
|
|
61
|
+
const condicao = this.criarCondicao(coluna, operador, valor);
|
|
62
|
+
this._condicoesOuSqlExtras.push(this.traduzirCondicaoParaSql(condicao));
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
if (operador === 'EM' && valor instanceof ConstrutorConsulta) {
|
|
66
|
+
this._condicoesOuSqlExtras.push(`${coluna} IN (${valor.gerarSql()})`);
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
this._condicoesOu.push([this.criarCondicao(coluna, operador, valor)]);
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Define as colunas a serem selecionadas.
|
|
74
|
+
*/
|
|
75
|
+
selecionar(...colunas) {
|
|
76
|
+
this._colunas = colunas;
|
|
77
|
+
this._colunasPersonalizadas = true;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Adiciona uma ordenação.
|
|
82
|
+
*/
|
|
83
|
+
ordenarPor(coluna, direcao = 'ASC') {
|
|
84
|
+
this._ordenacoes.push({ coluna, direcao });
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Define o limite de registros retornados.
|
|
89
|
+
*/
|
|
90
|
+
limite(valor) {
|
|
91
|
+
this._limite = valor;
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Define o deslocamento (offset) dos registros.
|
|
96
|
+
*/
|
|
97
|
+
deslocamento(valor) {
|
|
98
|
+
this._deslocamento = valor;
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Define colunas para agrupamento (GROUP BY).
|
|
103
|
+
*/
|
|
104
|
+
agruparPor(...colunas) {
|
|
105
|
+
this._agrupamentos.push(...colunas);
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Adiciona condição HAVING (AND).
|
|
110
|
+
*/
|
|
111
|
+
tendo(coluna, operador, valor) {
|
|
112
|
+
this._condicoesTendo.push(this.criarCondicao(coluna, operador, valor));
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Adiciona uma junção (JOIN) a partir do nome de um relacionamento definido na entidade.
|
|
117
|
+
* Os relacionamentos são detectados pelos decoradores @temUm, @temMuitos e @pertenceA.
|
|
118
|
+
*/
|
|
119
|
+
incluir(nomeRelacionamento) {
|
|
120
|
+
const relacionamentos = this.entidade.obterRelacionamentos();
|
|
121
|
+
const rel = relacionamentos.find(r => r.nomePropriedade === nomeRelacionamento);
|
|
122
|
+
if (!rel) {
|
|
123
|
+
throw new Error(`Relacionamento '${nomeRelacionamento}' não encontrado na entidade '${this.entidade.obterNome()}'.`);
|
|
124
|
+
}
|
|
125
|
+
const tipoJuncao = rel.tipo === 'pertenceA' ? 'INTERNA' : 'ESQUERDA';
|
|
126
|
+
const juncao = new lincones_js_1.Juncao(tipoJuncao, rel.entidadeDestino, [new lincones_js_1.Condicao(new lincones_js_1.ReferenciaColuna(`${this._tabela}.${rel.colunaOrigem}`), 'IGUAL', new lincones_js_1.ReferenciaColuna(`${rel.entidadeDestino}.${rel.colunaDestino}`))]);
|
|
127
|
+
this._juncoes.push(juncao);
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Adiciona uma junção (JOIN) diretamente com um objeto Juncao.
|
|
132
|
+
*/
|
|
133
|
+
incluirJuncao(juncao) {
|
|
134
|
+
this._juncoes.push(juncao);
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Usa uma subconsulta como fonte (FROM).
|
|
139
|
+
*/
|
|
140
|
+
deSubconsulta(subconsulta, alias) {
|
|
141
|
+
this._tabela = `(${subconsulta.gerarSql()}) AS ${alias}`;
|
|
142
|
+
return this;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Marca relacionamentos para carregamento antecipado (eager loading).
|
|
146
|
+
* Os dados relacionados serão carregados em consultas separadas e anexados aos registros pai.
|
|
147
|
+
*/
|
|
148
|
+
incluirRelacionados(...nomes) {
|
|
149
|
+
this._relacionadosParaCarregar.push(...nomes);
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Inclui registros com exclusão lógica (soft-deleted) na consulta.
|
|
154
|
+
* Por padrão, registros com exclusão lógica são filtrados automaticamente.
|
|
155
|
+
*/
|
|
156
|
+
incluirExcluidos() {
|
|
157
|
+
this._incluirExcluidos = true;
|
|
158
|
+
return this;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Executa a consulta e retorna todos os registros encontrados.
|
|
162
|
+
*/
|
|
163
|
+
async todos() {
|
|
164
|
+
const sql = this.gerarSql();
|
|
165
|
+
const resultados = await this.tecnologia.executar(null, sql, []);
|
|
166
|
+
if (resultados.length === 0 || resultados[0].linhasRetornadas.length === 0) {
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
const registros = this.entidade.hidratarRegistros(resultados[0].linhasRetornadas);
|
|
170
|
+
// Carregamento antecipado de relacionamentos
|
|
171
|
+
if (this._relacionadosParaCarregar.length > 0) {
|
|
172
|
+
await this.carregarRelacionados(registros);
|
|
173
|
+
}
|
|
174
|
+
return registros;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Executa a consulta e retorna o primeiro registro ou null.
|
|
178
|
+
*/
|
|
179
|
+
async primeiro() {
|
|
180
|
+
this._limite = 1;
|
|
181
|
+
const resultados = await this.todos();
|
|
182
|
+
return resultados.length > 0 ? resultados[0] : null;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Executa a consulta e retorna a contagem de registros.
|
|
186
|
+
*/
|
|
187
|
+
async contar() {
|
|
188
|
+
return this.executarAgregacao('COUNT', null, 'contagem');
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Executa agregacao SUM.
|
|
192
|
+
*/
|
|
193
|
+
async somar(coluna) {
|
|
194
|
+
return this.executarAgregacao('SUM', coluna, 'soma');
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Executa agregacao AVG.
|
|
198
|
+
*/
|
|
199
|
+
async media(coluna) {
|
|
200
|
+
return this.executarAgregacao('AVG', coluna, 'media');
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Executa agregacao MIN.
|
|
204
|
+
*/
|
|
205
|
+
async minimo(coluna) {
|
|
206
|
+
return this.executarAgregacao('MIN', coluna, 'minimo');
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Executa agregacao MAX.
|
|
210
|
+
*/
|
|
211
|
+
async maximo(coluna) {
|
|
212
|
+
return this.executarAgregacao('MAX', coluna, 'maximo');
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Gera o SQL completo da consulta.
|
|
216
|
+
*/
|
|
217
|
+
gerarSql() {
|
|
218
|
+
const todasCondicoes = [...this._condicoes];
|
|
219
|
+
const tudo = !this._colunasPersonalizadas && todasCondicoes.length === 0 && this._condicoesOu.length === 0;
|
|
220
|
+
const comandoSelecionar = new lincones_js_1.Selecionar(-1, this._tabela, this._colunas, todasCondicoes, tudo, this._juncoes);
|
|
221
|
+
let sql = this.tradutor.traduzir([comandoSelecionar]);
|
|
222
|
+
// Adicionar condições extras (AND) para subqueries
|
|
223
|
+
if (this._condicoesSqlExtras.length > 0) {
|
|
224
|
+
const extras = this._condicoesSqlExtras.join(' AND ');
|
|
225
|
+
if (sql.includes('WHERE')) {
|
|
226
|
+
sql += `\nAND ${extras}`;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
sql += `\nWHERE ${extras}`;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Adicionar condições OR manualmente
|
|
233
|
+
if (this._condicoesOu.length > 0) {
|
|
234
|
+
const partesOu = this._condicoesOu.map(grupo => {
|
|
235
|
+
return grupo.map(c => this.traduzirCondicaoParaSql(c)).join(' AND ');
|
|
236
|
+
});
|
|
237
|
+
if (todasCondicoes.length > 0) {
|
|
238
|
+
sql += '\nOR ' + partesOu.join('\nOR ');
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// Se não há condições AND, precisamos adicionar WHERE
|
|
242
|
+
if (!sql.includes('WHERE')) {
|
|
243
|
+
sql += '\nWHERE ' + partesOu.join('\nOR ');
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
sql += '\nOR ' + partesOu.join('\nOR ');
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (this._condicoesOuSqlExtras.length > 0) {
|
|
251
|
+
const partesOuExtras = this._condicoesOuSqlExtras.join(' OR ');
|
|
252
|
+
if (sql.includes('WHERE')) {
|
|
253
|
+
sql += `\nOR ${partesOuExtras}`;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
sql += `\nWHERE ${partesOuExtras}`;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Adicionar filtro de exclusão lógica
|
|
260
|
+
if (this.entidade.possuiExclusaoLogica() && !this._incluirExcluidos) {
|
|
261
|
+
const colunaExclusao = this.entidade.obterNomeColunaExclusaoLogica();
|
|
262
|
+
if (sql.includes('WHERE')) {
|
|
263
|
+
sql += `\nAND ${colunaExclusao} IS NULL`;
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
sql += `\nWHERE ${colunaExclusao} IS NULL`;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Adicionar GROUP BY
|
|
270
|
+
if (this._agrupamentos.length > 0) {
|
|
271
|
+
const colunasAgrupadas = this._agrupamentos.join(', ');
|
|
272
|
+
sql += `\nGROUP BY ${colunasAgrupadas}`;
|
|
273
|
+
}
|
|
274
|
+
// Adicionar HAVING
|
|
275
|
+
if (this._condicoesTendo.length > 0) {
|
|
276
|
+
const condicoesTendo = this._condicoesTendo
|
|
277
|
+
.map(c => this.traduzirCondicaoParaSql(c))
|
|
278
|
+
.join(' AND ');
|
|
279
|
+
sql += `\nHAVING ${condicoesTendo}`;
|
|
280
|
+
}
|
|
281
|
+
// Adicionar ORDER BY
|
|
282
|
+
if (this._ordenacoes.length > 0) {
|
|
283
|
+
const ordenacoes = this._ordenacoes.map(o => `${o.coluna} ${o.direcao}`).join(', ');
|
|
284
|
+
sql += `\nORDER BY ${ordenacoes}`;
|
|
285
|
+
}
|
|
286
|
+
// Adicionar LIMIT
|
|
287
|
+
if (this._limite !== null) {
|
|
288
|
+
sql += `\nLIMIT ${this._limite}`;
|
|
289
|
+
}
|
|
290
|
+
// Adicionar OFFSET
|
|
291
|
+
if (this._deslocamento !== null) {
|
|
292
|
+
sql += `\nOFFSET ${this._deslocamento}`;
|
|
293
|
+
}
|
|
294
|
+
return sql;
|
|
295
|
+
}
|
|
296
|
+
criarCondicao(coluna, operador, valor) {
|
|
297
|
+
// Operadores especiais que não precisam de valor
|
|
298
|
+
if (operador === 'NULO' || operador === 'NAO_NULO') {
|
|
299
|
+
return new lincones_js_1.Condicao(new lincones_js_1.ReferenciaColuna(coluna), operador, null);
|
|
300
|
+
}
|
|
301
|
+
// Para operadores LIKE (COMO, COMECA_COM, TERMINA_COM, CONTEM)
|
|
302
|
+
if (operador === 'COMECA_COM') {
|
|
303
|
+
valor = `${valor}%`;
|
|
304
|
+
operador = 'COMO';
|
|
305
|
+
}
|
|
306
|
+
else if (operador === 'TERMINA_COM') {
|
|
307
|
+
valor = `%${valor}`;
|
|
308
|
+
operador = 'COMO';
|
|
309
|
+
}
|
|
310
|
+
else if (operador === 'CONTEM') {
|
|
311
|
+
valor = `%${valor}%`;
|
|
312
|
+
operador = 'COMO';
|
|
313
|
+
}
|
|
314
|
+
const tipoLiteral = typeof valor === 'number' ? 'INTEIRO' : 'TEXTO';
|
|
315
|
+
return new lincones_js_1.Condicao(new lincones_js_1.ReferenciaColuna(coluna), operador, new lincones_js_1.Literal(valor, tipoLiteral));
|
|
316
|
+
}
|
|
317
|
+
traduzirCondicaoParaSql(condicao) {
|
|
318
|
+
const operadores = {
|
|
319
|
+
'IGUAL': '=',
|
|
320
|
+
'DIFERENTE': '<>',
|
|
321
|
+
'MAIOR': '>',
|
|
322
|
+
'MAIOR_IGUAL': '>=',
|
|
323
|
+
'MENOR': '<',
|
|
324
|
+
'MENOR_IGUAL': '<=',
|
|
325
|
+
'EM': 'IN',
|
|
326
|
+
'NAO_EM': 'NOT IN',
|
|
327
|
+
'COMO': 'LIKE',
|
|
328
|
+
'NAO_COMO': 'NOT LIKE',
|
|
329
|
+
'NULO': 'IS NULL',
|
|
330
|
+
'NAO_NULO': 'IS NOT NULL'
|
|
331
|
+
};
|
|
332
|
+
const esquerda = condicao.esquerda.nomeColuna;
|
|
333
|
+
const operadorStr = String(condicao.operador);
|
|
334
|
+
const operador = operadores[operadorStr] || '=';
|
|
335
|
+
// Operadores IS NULL e IS NOT NULL não têm parte direita
|
|
336
|
+
if (operadorStr === 'NULO' || operadorStr === 'NAO_NULO') {
|
|
337
|
+
return `${esquerda} ${operador}`;
|
|
338
|
+
}
|
|
339
|
+
const direita = condicao.direita?.valor;
|
|
340
|
+
// Tratamento especial para IN e subconsultas
|
|
341
|
+
if ((operadorStr === 'EM' || operadorStr === 'NAO_EM') && direita instanceof ConstrutorConsulta) {
|
|
342
|
+
return `${esquerda} ${operador} (${direita.gerarSql()})`;
|
|
343
|
+
}
|
|
344
|
+
// Tratamento para IN com array de valores
|
|
345
|
+
if ((operadorStr === 'EM' || operadorStr === 'NAO_EM') && Array.isArray(direita)) {
|
|
346
|
+
const valoresFormatados = direita.map(v => typeof v === 'string' ? `'${v}'` : v).join(', ');
|
|
347
|
+
return `${esquerda} ${operador} (${valoresFormatados})`;
|
|
348
|
+
}
|
|
349
|
+
// Para BETWEEN, espera-se um array [min, max]
|
|
350
|
+
if (operadorStr === 'ENTRE' && Array.isArray(direita) && direita.length === 2) {
|
|
351
|
+
const min = typeof direita[0] === 'string' ? `'${direita[0]}'` : direita[0];
|
|
352
|
+
const max = typeof direita[1] === 'string' ? `'${direita[1]}'` : direita[1];
|
|
353
|
+
return `${esquerda} BETWEEN ${min} AND ${max}`;
|
|
354
|
+
}
|
|
355
|
+
const valorFormatado = typeof direita === 'string' ? `'${direita}'` : direita;
|
|
356
|
+
return `${esquerda} ${operador} ${valorFormatado}`;
|
|
357
|
+
}
|
|
358
|
+
async executarAgregacao(funcao, coluna, alias) {
|
|
359
|
+
const colunasOriginais = this._colunas;
|
|
360
|
+
const colunasPersonalizadasOriginais = this._colunasPersonalizadas;
|
|
361
|
+
const colunasAgregadas = [];
|
|
362
|
+
if (this._agrupamentos.length > 0) {
|
|
363
|
+
colunasAgregadas.push(...this._agrupamentos);
|
|
364
|
+
}
|
|
365
|
+
const alvo = coluna ? `${funcao}(${coluna})` : `${funcao}(*)`;
|
|
366
|
+
colunasAgregadas.push(`${alvo} as ${alias}`);
|
|
367
|
+
this._colunas = colunasAgregadas;
|
|
368
|
+
this._colunasPersonalizadas = true;
|
|
369
|
+
const sql = this.gerarSql();
|
|
370
|
+
this._colunas = colunasOriginais;
|
|
371
|
+
this._colunasPersonalizadas = colunasPersonalizadasOriginais;
|
|
372
|
+
const resultados = await this.tecnologia.executar(null, sql, []);
|
|
373
|
+
if (resultados.length === 0 || resultados[0].linhasRetornadas.length === 0) {
|
|
374
|
+
return this._agrupamentos.length > 0 ? [] : 0;
|
|
375
|
+
}
|
|
376
|
+
if (this._agrupamentos.length > 0) {
|
|
377
|
+
return resultados[0].linhasRetornadas;
|
|
378
|
+
}
|
|
379
|
+
return resultados[0].linhasRetornadas[0][alias] || 0;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Carrega relacionamentos de forma antecipada usando consultas separadas.
|
|
383
|
+
*/
|
|
384
|
+
async carregarRelacionados(registros) {
|
|
385
|
+
if (registros.length === 0)
|
|
386
|
+
return;
|
|
387
|
+
const relacionamentos = this.entidade.obterRelacionamentos();
|
|
388
|
+
for (const nomeRelacionamento of this._relacionadosParaCarregar) {
|
|
389
|
+
const rel = relacionamentos.find(r => r.nomePropriedade === nomeRelacionamento);
|
|
390
|
+
if (!rel) {
|
|
391
|
+
throw new Error(`Relacionamento '${nomeRelacionamento}' não encontrado na entidade '${this.entidade.obterNome()}'.`);
|
|
392
|
+
}
|
|
393
|
+
// Coletar valores da coluna de origem dos registros pai
|
|
394
|
+
const valoresOrigem = registros
|
|
395
|
+
.map(r => r.propriedades[rel.colunaOrigem])
|
|
396
|
+
.filter(v => v !== undefined && v !== null);
|
|
397
|
+
if (valoresOrigem.length === 0)
|
|
398
|
+
continue;
|
|
399
|
+
// Construir consulta para entidades relacionadas
|
|
400
|
+
// Como lincones não tem operador IN, usamos múltiplos OR
|
|
401
|
+
const valoresUnicos = Array.from(new Set(valoresOrigem));
|
|
402
|
+
let sqlRelacionados = `SELECT * FROM ${rel.entidadeDestino} WHERE `;
|
|
403
|
+
const condicoes = valoresUnicos.map(valor => {
|
|
404
|
+
const valorFormatado = typeof valor === 'string' ? `'${valor}'` : valor;
|
|
405
|
+
return `${rel.colunaDestino} = ${valorFormatado}`;
|
|
406
|
+
});
|
|
407
|
+
sqlRelacionados += condicoes.join(' OR ');
|
|
408
|
+
const resultadosRelacionados = await this.tecnologia.executar(null, sqlRelacionados, []);
|
|
409
|
+
if (resultadosRelacionados.length === 0 || resultadosRelacionados[0].linhasRetornadas.length === 0) {
|
|
410
|
+
// Nenhum relacionado encontrado, inicializar vazios
|
|
411
|
+
for (const registro of registros) {
|
|
412
|
+
if (rel.tipo === 'temMuitos') {
|
|
413
|
+
registro.propriedades[rel.nomePropriedade] = [];
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
registro.propriedades[rel.nomePropriedade] = null;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
const linhasRelacionadas = resultadosRelacionados[0].linhasRetornadas;
|
|
422
|
+
// Agrupar relacionados por valor da coluna de destino
|
|
423
|
+
const relacionadosPorChave = new Map();
|
|
424
|
+
for (const linha of linhasRelacionadas) {
|
|
425
|
+
const chave = linha[rel.colunaDestino];
|
|
426
|
+
if (!relacionadosPorChave.has(chave)) {
|
|
427
|
+
relacionadosPorChave.set(chave, []);
|
|
428
|
+
}
|
|
429
|
+
relacionadosPorChave.get(chave).push(linha);
|
|
430
|
+
}
|
|
431
|
+
// Anexar aos registros pai
|
|
432
|
+
for (const registro of registros) {
|
|
433
|
+
const valorOrigem = registro.propriedades[rel.colunaOrigem];
|
|
434
|
+
const relacionados = relacionadosPorChave.get(valorOrigem) || [];
|
|
435
|
+
if (rel.tipo === 'temMuitos') {
|
|
436
|
+
registro.propriedades[rel.nomePropriedade] = relacionados;
|
|
437
|
+
}
|
|
438
|
+
else if (rel.tipo === 'temUm' || rel.tipo === 'pertenceA') {
|
|
439
|
+
registro.propriedades[rel.nomePropriedade] = relacionados.length > 0 ? relacionados[0] : null;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
exports.ConstrutorConsulta = ConstrutorConsulta;
|
|
446
|
+
//# sourceMappingURL=construtor-consulta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"construtor-consulta.js","sourceRoot":"","sources":["../../fontes/construtor-consulta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { DescritorTipoClasse, ObjetoDeleguaClasse } from "@designliquido/delegua/interpretador/estruturas";
|
|
2
|
+
import { TecnologiaLinconesInterface } from "@designliquido/lincones-js";
|
|
3
|
+
import { Colecao } from "./colecao";
|
|
4
|
+
import { EntidadeInterface } from "./interfaces-tipos/entidade-interface";
|
|
5
|
+
import { Taquigrafo } from "./taquigrafia";
|
|
6
|
+
import { RastreadorMudancas } from "./rastreador-mudancas";
|
|
7
|
+
import { TransacaoInterface } from "./interfaces-tipos/transacao-interface";
|
|
8
|
+
import { RoteadorBancos } from "./roteador-bancos";
|
|
9
|
+
import { ConfiguracoesBancos } from "./interfaces-tipos/configuracao-banco-dados-interface";
|
|
10
|
+
import { OpcoesCacheL2 } from "./gerenciador-cache";
|
|
11
|
+
/**
|
|
12
|
+
* O contexto de entidades é usado para manter todas as entidades e seus relacionamentos
|
|
13
|
+
* em um só lugar. Suporta múltiplos bancos de dados com roteamento automático.
|
|
14
|
+
* Também gerencia cache L1 (identity map) e L2 (cache persistente).
|
|
15
|
+
*/
|
|
16
|
+
export declare class ContextoEntidades {
|
|
17
|
+
tecnologia: TecnologiaLinconesInterface;
|
|
18
|
+
colecoes: {
|
|
19
|
+
[key: string]: Colecao<EntidadeInterface>;
|
|
20
|
+
};
|
|
21
|
+
logger?: Taquigrafo;
|
|
22
|
+
rastreador: RastreadorMudancas;
|
|
23
|
+
private transacao;
|
|
24
|
+
private roteador;
|
|
25
|
+
private cache;
|
|
26
|
+
constructor(tecnologia: TecnologiaLinconesInterface, logger?: Taquigrafo, opcoesCacheL2?: OpcoesCacheL2);
|
|
27
|
+
registrarColecao(entidade: EntidadeInterface): Colecao<EntidadeInterface>;
|
|
28
|
+
colecao(tipoModelo: DescritorTipoClasse): Colecao<EntidadeInterface>;
|
|
29
|
+
novo(nomeEntidade: string, registro: ObjetoDeleguaClasse): void;
|
|
30
|
+
excluirRegistro(nomeEntidade: string, registro: ObjetoDeleguaClasse): void;
|
|
31
|
+
buscarTodos(nomeEntidade: string): Promise<ObjetoDeleguaClasse[]>;
|
|
32
|
+
buscarPorId(nomeEntidade: string, valorId: any): Promise<ObjetoDeleguaClasse | null>;
|
|
33
|
+
salvarMudancas(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Processa cascata de inserção para relacionamentos.
|
|
36
|
+
*/
|
|
37
|
+
private processarCascataInserir;
|
|
38
|
+
/**
|
|
39
|
+
* Processa cascata de atualização para relacionamentos.
|
|
40
|
+
*/
|
|
41
|
+
private processarCascataAtualizar;
|
|
42
|
+
/**
|
|
43
|
+
* Processa cascata de exclusão para relacionamentos.
|
|
44
|
+
*/
|
|
45
|
+
private processarCascataExcluir;
|
|
46
|
+
iniciar(caminho: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Inicia uma nova transação.
|
|
49
|
+
* Retorna a transação criada.
|
|
50
|
+
*/
|
|
51
|
+
iniciarTransacao(): TransacaoInterface;
|
|
52
|
+
/**
|
|
53
|
+
* Obtém a transação atual, se houver.
|
|
54
|
+
*/
|
|
55
|
+
obterTransacao(): TransacaoInterface | null;
|
|
56
|
+
/**
|
|
57
|
+
* Indica se existe uma transação ativa.
|
|
58
|
+
*/
|
|
59
|
+
possuiTransacao(): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Confirma a transação atual.
|
|
62
|
+
*/
|
|
63
|
+
confirmarTransacao(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Reverte a transação atual.
|
|
66
|
+
*/
|
|
67
|
+
reverterTransacao(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Registra um novo banco de dados.
|
|
70
|
+
*/
|
|
71
|
+
registrarBanco(nome: string, tecnologia: TecnologiaLinconesInterface, ehPadrao?: boolean): void;
|
|
72
|
+
/**
|
|
73
|
+
* Registra múltiplos bancos a partir de configurações.
|
|
74
|
+
*/
|
|
75
|
+
registrarBancos(configuracoes: ConfiguracoesBancos, tecnologias: {
|
|
76
|
+
[nome: string]: TecnologiaLinconesInterface;
|
|
77
|
+
}): void;
|
|
78
|
+
/**
|
|
79
|
+
* Obtém a tecnologia para um banco específico.
|
|
80
|
+
*/
|
|
81
|
+
obterTecnologia(nomeBanco?: string): TecnologiaLinconesInterface;
|
|
82
|
+
/**
|
|
83
|
+
* Obtém a tecnologia padrão.
|
|
84
|
+
*/
|
|
85
|
+
obterTecnologiaPadrao(): TecnologiaLinconesInterface;
|
|
86
|
+
/**
|
|
87
|
+
* Obtém o roteador de bancos para acesso avançado.
|
|
88
|
+
*/
|
|
89
|
+
obterRoteador(): RoteadorBancos;
|
|
90
|
+
/**
|
|
91
|
+
* Obtém um registro do cache.
|
|
92
|
+
*/
|
|
93
|
+
obterDoCache(nomeEntidade: string, id: any): ObjetoDeleguaClasse | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Armazena um registro no cache.
|
|
96
|
+
*/
|
|
97
|
+
armazenarenCache(nomeEntidade: string, id: any, registro: ObjetoDeleguaClasse): void;
|
|
98
|
+
/**
|
|
99
|
+
* Remove um registro do cache.
|
|
100
|
+
*/
|
|
101
|
+
removerDoCache(nomeEntidade: string, id: any): void;
|
|
102
|
+
/**
|
|
103
|
+
* Limpa o cache de uma entidade.
|
|
104
|
+
*/
|
|
105
|
+
limparCacheEntidade(nomeEntidade?: string): void;
|
|
106
|
+
/**
|
|
107
|
+
* Limpa todo o cache.
|
|
108
|
+
*/
|
|
109
|
+
limparCacheTudo(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Obtém estatísticas do cache.
|
|
112
|
+
*/
|
|
113
|
+
obterEstatisticasCache(): {
|
|
114
|
+
nivel1: number;
|
|
115
|
+
nivel2: number;
|
|
116
|
+
total: number;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=contexto-entidades.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contexto-entidades.d.ts","sourceRoot":"","sources":["../../fontes/contexto-entidades.ts"],"names":[],"mappings":"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"}
|