@yakuzaa/jade-runtime 0.1.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.
Files changed (113) hide show
  1. package/dist/apis/audit_service.d.ts +43 -0
  2. package/dist/apis/audit_service.d.ts.map +1 -0
  3. package/dist/apis/audit_service.js +73 -0
  4. package/dist/apis/audit_service.js.map +1 -0
  5. package/dist/apis/auth_service.d.ts +51 -0
  6. package/dist/apis/auth_service.d.ts.map +1 -0
  7. package/dist/apis/auth_service.js +120 -0
  8. package/dist/apis/auth_service.js.map +1 -0
  9. package/dist/apis/console_api.d.ts +34 -0
  10. package/dist/apis/console_api.d.ts.map +1 -0
  11. package/dist/apis/console_api.js +90 -0
  12. package/dist/apis/console_api.js.map +1 -0
  13. package/dist/apis/datetime_api.d.ts +13 -0
  14. package/dist/apis/datetime_api.d.ts.map +1 -0
  15. package/dist/apis/datetime_api.js +89 -0
  16. package/dist/apis/datetime_api.js.map +1 -0
  17. package/dist/apis/http_client.d.ts +32 -0
  18. package/dist/apis/http_client.d.ts.map +1 -0
  19. package/dist/apis/http_client.js +83 -0
  20. package/dist/apis/http_client.js.map +1 -0
  21. package/dist/apis/permission_service.d.ts +18 -0
  22. package/dist/apis/permission_service.d.ts.map +1 -0
  23. package/dist/apis/permission_service.js +56 -0
  24. package/dist/apis/permission_service.js.map +1 -0
  25. package/dist/core/event_loop.d.ts +14 -0
  26. package/dist/core/event_loop.d.ts.map +1 -0
  27. package/dist/core/event_loop.js +60 -0
  28. package/dist/core/event_loop.js.map +1 -0
  29. package/dist/core/memory_manager.d.ts +43 -0
  30. package/dist/core/memory_manager.d.ts.map +1 -0
  31. package/dist/core/memory_manager.js +218 -0
  32. package/dist/core/memory_manager.js.map +1 -0
  33. package/dist/core/runtime.d.ts +18 -0
  34. package/dist/core/runtime.d.ts.map +1 -0
  35. package/dist/core/runtime.js +116 -0
  36. package/dist/core/runtime.js.map +1 -0
  37. package/dist/persistence/local_datastore.d.ts +34 -0
  38. package/dist/persistence/local_datastore.d.ts.map +1 -0
  39. package/dist/persistence/local_datastore.js +112 -0
  40. package/dist/persistence/local_datastore.js.map +1 -0
  41. package/dist/persistence/sync_manager.d.ts +49 -0
  42. package/dist/persistence/sync_manager.d.ts.map +1 -0
  43. package/dist/persistence/sync_manager.js +187 -0
  44. package/dist/persistence/sync_manager.js.map +1 -0
  45. package/dist/pwa/pwa_generator.d.ts +16 -0
  46. package/dist/pwa/pwa_generator.d.ts.map +1 -0
  47. package/dist/pwa/pwa_generator.js +107 -0
  48. package/dist/pwa/pwa_generator.js.map +1 -0
  49. package/dist/stdlib/matematica.d.ts +121 -0
  50. package/dist/stdlib/matematica.d.ts.map +1 -0
  51. package/dist/stdlib/matematica.js +250 -0
  52. package/dist/stdlib/matematica.js.map +1 -0
  53. package/dist/stdlib/moeda.d.ts +129 -0
  54. package/dist/stdlib/moeda.d.ts.map +1 -0
  55. package/dist/stdlib/moeda.js +212 -0
  56. package/dist/stdlib/moeda.js.map +1 -0
  57. package/dist/stdlib/texto.d.ts +101 -0
  58. package/dist/stdlib/texto.d.ts.map +1 -0
  59. package/dist/stdlib/texto.js +205 -0
  60. package/dist/stdlib/texto.js.map +1 -0
  61. package/dist/stdlib/xml.d.ts +77 -0
  62. package/dist/stdlib/xml.d.ts.map +1 -0
  63. package/dist/stdlib/xml.js +212 -0
  64. package/dist/stdlib/xml.js.map +1 -0
  65. package/dist/ui/binding.d.ts +22 -0
  66. package/dist/ui/binding.d.ts.map +1 -0
  67. package/dist/ui/binding.js +62 -0
  68. package/dist/ui/binding.js.map +1 -0
  69. package/dist/ui/components/botao.d.ts +4 -0
  70. package/dist/ui/components/botao.d.ts.map +1 -0
  71. package/dist/ui/components/botao.js +4 -0
  72. package/dist/ui/components/botao.js.map +1 -0
  73. package/dist/ui/components/campo.d.ts +8 -0
  74. package/dist/ui/components/campo.d.ts.map +1 -0
  75. package/dist/ui/components/campo.js +9 -0
  76. package/dist/ui/components/campo.js.map +1 -0
  77. package/dist/ui/components/card.d.ts +4 -0
  78. package/dist/ui/components/card.d.ts.map +1 -0
  79. package/dist/ui/components/card.js +4 -0
  80. package/dist/ui/components/card.js.map +1 -0
  81. package/dist/ui/components/formulario.d.ts +4 -0
  82. package/dist/ui/components/formulario.d.ts.map +1 -0
  83. package/dist/ui/components/formulario.js +4 -0
  84. package/dist/ui/components/formulario.js.map +1 -0
  85. package/dist/ui/components/tabela.d.ts +3 -0
  86. package/dist/ui/components/tabela.d.ts.map +1 -0
  87. package/dist/ui/components/tabela.js +4 -0
  88. package/dist/ui/components/tabela.js.map +1 -0
  89. package/dist/ui/reactive.d.ts +61 -0
  90. package/dist/ui/reactive.d.ts.map +1 -0
  91. package/dist/ui/reactive.js +149 -0
  92. package/dist/ui/reactive.js.map +1 -0
  93. package/dist/ui/refs.d.ts +13 -0
  94. package/dist/ui/refs.d.ts.map +1 -0
  95. package/dist/ui/refs.js +32 -0
  96. package/dist/ui/refs.js.map +1 -0
  97. package/dist/ui/router.d.ts +39 -0
  98. package/dist/ui/router.d.ts.map +1 -0
  99. package/dist/ui/router.js +74 -0
  100. package/dist/ui/router.js.map +1 -0
  101. package/dist/ui/theme.d.ts +19 -0
  102. package/dist/ui/theme.d.ts.map +1 -0
  103. package/dist/ui/theme.js +183 -0
  104. package/dist/ui/theme.js.map +1 -0
  105. package/dist/ui/ui_engine.d.ts +89 -0
  106. package/dist/ui/ui_engine.d.ts.map +1 -0
  107. package/dist/ui/ui_engine.js +406 -0
  108. package/dist/ui/ui_engine.js.map +1 -0
  109. package/dist/ui/virtual_list.d.ts +29 -0
  110. package/dist/ui/virtual_list.d.ts.map +1 -0
  111. package/dist/ui/virtual_list.js +88 -0
  112. package/dist/ui/virtual_list.js.map +1 -0
  113. package/package.json +76 -0
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Biblioteca monetária para o runtime JADE
3
+ * Acessível via Moeda.metodo(args) no código JADE
4
+ *
5
+ * Toda aritmética é feita em centavos (inteiros) para eliminar
6
+ * erros de ponto flutuante IEEE 754 em operações monetárias.
7
+ *
8
+ * Exemplo do problema resolvido:
9
+ * 0.1 + 0.2 === 0.30000000000000004 ← JavaScript puro
10
+ * Moeda.somar(0.1, 0.2) === 0.30 ← esta lib
11
+ */
12
+ export class MoedaStdlib {
13
+ // ── Conversão interna ─────────────────────────────────────
14
+ /**
15
+ * Converte reais para centavos inteiros
16
+ * 1234.50 → 123450
17
+ */
18
+ static toCentavos(valor) {
19
+ return Math.round(valor * 100);
20
+ }
21
+ /**
22
+ * Converte centavos inteiros para reais
23
+ * 123450 → 1234.50
24
+ */
25
+ static fromCentavos(centavos) {
26
+ return centavos / 100;
27
+ }
28
+ // ── Formatação ────────────────────────────────────────────
29
+ /**
30
+ * Formata valor como moeda brasileira
31
+ * 1234.5 → "R$ 1.234,50"
32
+ * -500 → "-R$ 500,00"
33
+ * 0 → "R$ 0,00"
34
+ */
35
+ static formatarBRL(valor) {
36
+ const negativo = valor < 0;
37
+ const centavos = Math.round(Math.abs(valor) * 100);
38
+ const reais = Math.floor(centavos / 100);
39
+ const cents = centavos % 100;
40
+ const reaisStr = reais.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
41
+ const resultado = `R$ ${reaisStr},${cents.toString().padStart(2, '0')}`;
42
+ return negativo ? '-' + resultado : resultado;
43
+ }
44
+ /**
45
+ * Formata valor em formato compacto para dashboards
46
+ * 1_500_000 → "R$ 1,5mi"
47
+ * 45_000 → "R$ 45mil"
48
+ * 1_500 → "R$ 1,5mil"
49
+ * 500 → "R$ 500,00"
50
+ */
51
+ static formatarCompacto(valor) {
52
+ const negativo = valor < 0;
53
+ const abs = Math.abs(valor);
54
+ let resultado;
55
+ if (abs >= 1_000_000) {
56
+ const mi = abs / 1_000_000;
57
+ resultado = `R$ ${MoedaStdlib._compactarNumero(mi)}mi`;
58
+ }
59
+ else if (abs >= 1_000) {
60
+ const mil = abs / 1_000;
61
+ resultado = `R$ ${MoedaStdlib._compactarNumero(mil)}mil`;
62
+ }
63
+ else {
64
+ resultado = MoedaStdlib.formatarBRL(abs);
65
+ }
66
+ return negativo ? '-' + resultado : resultado;
67
+ }
68
+ static _compactarNumero(n) {
69
+ // Exibe até 1 casa decimal, sem zeros desnecessários
70
+ const arredondado = Math.round(n * 10) / 10;
71
+ return arredondado % 1 === 0
72
+ ? arredondado.toFixed(0)
73
+ : arredondado.toFixed(1).replace('.', ',');
74
+ }
75
+ // ── Parsing ───────────────────────────────────────────────
76
+ /**
77
+ * Converte texto de moeda brasileira para número
78
+ * "R$ 1.234,50" → 1234.50
79
+ * "1.234,50" → 1234.50
80
+ * "1234,50" → 1234.50
81
+ * "-R$ 500,00" → -500.00
82
+ * Retorna NaN se o formato não for reconhecido
83
+ */
84
+ static parseBRL(texto) {
85
+ const limpo = texto.trim().replace(/R\$\s?/g, '').trim();
86
+ const negativo = limpo.startsWith('-');
87
+ const sem_sinal = limpo.replace(/^-/, '').trim();
88
+ // Formato brasileiro: 1.234,50
89
+ const br = sem_sinal.replace(/\./g, '').replace(',', '.');
90
+ const valor = parseFloat(br);
91
+ if (isNaN(valor))
92
+ return NaN;
93
+ return negativo ? -valor : valor;
94
+ }
95
+ // ── Aritmética segura (via centavos) ──────────────────────
96
+ /**
97
+ * Soma monetária sem erro de ponto flutuante
98
+ * somar(0.1, 0.2) === 0.30 (não 0.30000000000000004)
99
+ */
100
+ static somar(a, b) {
101
+ return MoedaStdlib.fromCentavos(MoedaStdlib.toCentavos(a) + MoedaStdlib.toCentavos(b));
102
+ }
103
+ /**
104
+ * Subtração monetária sem erro de ponto flutuante
105
+ */
106
+ static subtrair(a, b) {
107
+ return MoedaStdlib.fromCentavos(MoedaStdlib.toCentavos(a) - MoedaStdlib.toCentavos(b));
108
+ }
109
+ /**
110
+ * Multiplica um valor monetário por um fator (ex: preço × quantidade)
111
+ * O fator pode ser decimal (ex: 1.5 unidades)
112
+ */
113
+ static multiplicar(valor, fator) {
114
+ return MoedaStdlib.fromCentavos(Math.round(MoedaStdlib.toCentavos(valor) * fator));
115
+ }
116
+ /**
117
+ * Divide um valor monetário por um divisor
118
+ * Arredonda para centavos (sem distribuição do resto — veja distribuir())
119
+ */
120
+ static dividir(valor, divisor) {
121
+ if (divisor === 0)
122
+ return NaN;
123
+ return MoedaStdlib.fromCentavos(Math.round(MoedaStdlib.toCentavos(valor) / divisor));
124
+ }
125
+ // ── Comparações seguras ───────────────────────────────────
126
+ /**
127
+ * Compara dois valores monetários com precisão de centavos
128
+ * Evita problemas de 0.1 + 0.2 !== 0.3
129
+ */
130
+ static igual(a, b) {
131
+ return MoedaStdlib.toCentavos(a) === MoedaStdlib.toCentavos(b);
132
+ }
133
+ static maior(a, b) {
134
+ return MoedaStdlib.toCentavos(a) > MoedaStdlib.toCentavos(b);
135
+ }
136
+ static menor(a, b) {
137
+ return MoedaStdlib.toCentavos(a) < MoedaStdlib.toCentavos(b);
138
+ }
139
+ static maiorOuIgual(a, b) {
140
+ return MoedaStdlib.toCentavos(a) >= MoedaStdlib.toCentavos(b);
141
+ }
142
+ static menorOuIgual(a, b) {
143
+ return MoedaStdlib.toCentavos(a) <= MoedaStdlib.toCentavos(b);
144
+ }
145
+ // ── Operações de negócio ──────────────────────────────────
146
+ /**
147
+ * Aplica desconto percentual sobre um valor
148
+ * descontar(100, 10) → 90.00 (10% de desconto)
149
+ */
150
+ static descontar(valor, percentual) {
151
+ return MoedaStdlib.fromCentavos(Math.round(MoedaStdlib.toCentavos(valor) * (1 - percentual / 100)));
152
+ }
153
+ /**
154
+ * Acrescenta percentual sobre um valor
155
+ * acrescentar(100, 10) → 110.00 (10% de acréscimo)
156
+ */
157
+ static acrescentar(valor, percentual) {
158
+ return MoedaStdlib.fromCentavos(Math.round(MoedaStdlib.toCentavos(valor) * (1 + percentual / 100)));
159
+ }
160
+ /**
161
+ * Calcula o valor de um percentual sobre um montante
162
+ * porcentagem(200, 15) → 30.00 (15% de R$200)
163
+ */
164
+ static porcentagem(valor, percentual) {
165
+ return MoedaStdlib.fromCentavos(Math.round(MoedaStdlib.toCentavos(valor) * percentual / 100));
166
+ }
167
+ /**
168
+ * Distribui um valor em N partes iguais, resolvendo o problema do centavo
169
+ * Os centavos restantes são distribuídos nas primeiras parcelas
170
+ *
171
+ * distribuir(10, 3) → [3.34, 3.33, 3.33] (não [3.33, 3.33, 3.33] = 9.99)
172
+ * distribuir(100, 4) → [25, 25, 25, 25]
173
+ */
174
+ static distribuir(total, partes) {
175
+ if (partes <= 0)
176
+ return [];
177
+ const totalCentavos = MoedaStdlib.toCentavos(total);
178
+ const baseCentavos = Math.floor(totalCentavos / partes);
179
+ const resto = totalCentavos % partes;
180
+ return Array.from({ length: partes }, (_, i) => MoedaStdlib.fromCentavos(i < resto ? baseCentavos + 1 : baseCentavos));
181
+ }
182
+ /**
183
+ * Calcula valor total de uma lista de itens (quantidade × preço unitário)
184
+ * Seguro contra ponto flutuante
185
+ */
186
+ static totalItens(itens) {
187
+ const centavos = itens.reduce((acc, item) => acc + Math.round(MoedaStdlib.toCentavos(item.precoUnitario) * item.quantidade), 0);
188
+ return MoedaStdlib.fromCentavos(centavos);
189
+ }
190
+ }
191
+ export const MoedaMetodos = {
192
+ toCentavos: MoedaStdlib.toCentavos,
193
+ fromCentavos: MoedaStdlib.fromCentavos,
194
+ formatarBRL: MoedaStdlib.formatarBRL,
195
+ formatarCompacto: MoedaStdlib.formatarCompacto,
196
+ parseBRL: MoedaStdlib.parseBRL,
197
+ somar: MoedaStdlib.somar,
198
+ subtrair: MoedaStdlib.subtrair,
199
+ multiplicar: MoedaStdlib.multiplicar,
200
+ dividir: MoedaStdlib.dividir,
201
+ igual: MoedaStdlib.igual,
202
+ maior: MoedaStdlib.maior,
203
+ menor: MoedaStdlib.menor,
204
+ maiorOuIgual: MoedaStdlib.maiorOuIgual,
205
+ menorOuIgual: MoedaStdlib.menorOuIgual,
206
+ descontar: MoedaStdlib.descontar,
207
+ acrescentar: MoedaStdlib.acrescentar,
208
+ porcentagem: MoedaStdlib.porcentagem,
209
+ distribuir: MoedaStdlib.distribuir,
210
+ totalItens: MoedaStdlib.totalItens,
211
+ };
212
+ //# sourceMappingURL=moeda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moeda.js","sourceRoot":"","sources":["../../stdlib/moeda.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,OAAO,WAAW;IAEtB,6DAA6D;IAE7D;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,QAAgB;QAClC,OAAO,QAAQ,GAAG,GAAG,CAAC;IACxB,CAAC;IAED,6DAA6D;IAE7D;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,KAAa;QAC9B,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,GAAG,GAAG,CAAC;QAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAa;QACnC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,SAAiB,CAAC;QAEtB,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC;YAC3B,SAAS,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC;QACzD,CAAC;aAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;YACxB,SAAS,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,CAAS;QACvC,qDAAqD;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAC5C,OAAO,WAAW,GAAG,CAAC,KAAK,CAAC;YAC1B,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,6DAA6D;IAE7D;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAa;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjD,+BAA+B;QAC/B,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAE7B,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACnC,CAAC;IAED,6DAA6D;IAE7D;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,WAAW,CAAC,YAAY,CAC7B,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CACtD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAS,EAAE,CAAS;QAClC,OAAO,WAAW,CAAC,YAAY,CAC7B,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CACtD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,KAAa,EAAE,KAAa;QAC7C,OAAO,WAAW,CAAC,YAAY,CAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAClD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,OAAe;QAC3C,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAC9B,OAAO,WAAW,CAAC,YAAY,CAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CACpD,CAAC;IACJ,CAAC;IAED,6DAA6D;IAE7D;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,CAAS,EAAE,CAAS;QAC/B,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,CAAS,EAAE,CAAS;QACtC,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,CAAS,EAAE,CAAS;QACtC,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,6DAA6D;IAE7D;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,UAAkB;QAChD,OAAO,WAAW,CAAC,YAAY,CAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,KAAa,EAAE,UAAkB;QAClD,OAAO,WAAW,CAAC,YAAY,CAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,KAAa,EAAE,UAAkB;QAClD,OAAO,WAAW,CAAC,YAAY,CAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,GAAG,CAAC,CAC7D,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,MAAc;QAC7C,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3B,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,aAAa,GAAG,MAAM,CAAC;QAErC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7C,WAAW,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CACtE,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,KAAsD;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAC7F,CAAC,CACF,CAAC;QACF,OAAO,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE,WAAW,CAAC,UAAU;IAClC,YAAY,EAAE,WAAW,CAAC,YAAY;IACtC,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;IAC9C,QAAQ,EAAE,WAAW,CAAC,QAAQ;IAC9B,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;IAC9B,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,YAAY,EAAE,WAAW,CAAC,YAAY;IACtC,YAAY,EAAE,WAAW,CAAC,YAAY;IACtC,SAAS,EAAE,WAAW,CAAC,SAAS;IAChC,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,WAAW,EAAE,WAAW,CAAC,WAAW;IACpC,UAAU,EAAE,WAAW,CAAC,UAAU;IAClC,UAAU,EAAE,WAAW,CAAC,UAAU;CACnC,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Text standard library for Jade runtime
3
+ * Provides built-in methods for the 'texto' type
4
+ */
5
+ export declare class TextoStdlib {
6
+ /**
7
+ * Converts string to uppercase
8
+ */
9
+ static maiusculo(texto: string): string;
10
+ /**
11
+ * Converts string to lowercase
12
+ */
13
+ static minusculo(texto: string): string;
14
+ /**
15
+ * Trims whitespace from both ends of string
16
+ */
17
+ static aparar(texto: string): string;
18
+ /**
19
+ * Returns the length of the string (counts Unicode characters correctly)
20
+ */
21
+ static tamanho(texto: string): number;
22
+ /**
23
+ * Remove acentos e diacríticos de uma string
24
+ * Ex: "João" → "Joao", "São Paulo" → "Sao Paulo"
25
+ */
26
+ static semAcentos(texto: string): string;
27
+ /**
28
+ * Checks if string contains the specified substring
29
+ * @param ignorarAcentos Se verdadeiro, "Joao" encontra "João" (default: false)
30
+ */
31
+ static contem(texto: string, busca: string, ignorarAcentos?: boolean): boolean;
32
+ /**
33
+ * Checks if string starts with the specified substring
34
+ */
35
+ static comecaCom(texto: string, prefixo: string): boolean;
36
+ /**
37
+ * Checks if string ends with the specified substring
38
+ */
39
+ static terminaCom(texto: string, sufixo: string): boolean;
40
+ /**
41
+ * Replaces all occurrences of a substring with another substring
42
+ */
43
+ static substituir(texto: string, busca: string, substituto: string): string;
44
+ /**
45
+ * Splits string by a delimiter into an array of strings
46
+ */
47
+ static dividir(texto: string, delimitador: string): string[];
48
+ /**
49
+ * Normalizes Unicode string to NFC form
50
+ */
51
+ static normalizar(texto: string): string;
52
+ /**
53
+ * Aplica uma máscara de formatação a uma string de dígitos
54
+ * Use '#' para cada dígito esperado; demais caracteres são inseridos como literais
55
+ *
56
+ * Exemplos:
57
+ * aplicarMascara("12345678901", "###.###.###-##") → "123.456.789-01"
58
+ * aplicarMascara("00360305000104","##.###.###/####-##") → "00.360.305/0001-04"
59
+ * aplicarMascara("01310100", "#####-###") → "01310-100"
60
+ * aplicarMascara("11987654321", "(##) #####-####") → "(11) 98765-4321"
61
+ */
62
+ static aplicarMascara(valor: string, mascara: string): string;
63
+ /**
64
+ * Validates Brazilian CPF (Cadastro de Pessoas Físicas)
65
+ * Aceita CPF formatado (123.456.789-01) ou apenas dígitos
66
+ */
67
+ static validarCPF(cpf: string): boolean;
68
+ /**
69
+ * Validates Brazilian CNPJ (Cadastro Nacional da Pessoa Jurídica)
70
+ * Aceita CNPJ formatado (00.360.305/0001-04) ou apenas dígitos
71
+ */
72
+ static validarCNPJ(cnpj: string): boolean;
73
+ /**
74
+ * Formats Brazilian CEP (Código de Endereçamento Postal)
75
+ */
76
+ static formatarCEP(cep: string): string;
77
+ /**
78
+ * Formats Brazilian phone number
79
+ * Returns (XX) XXXXX-XXXX for mobile or (XX) XXXX-XXXX for landline
80
+ */
81
+ static formatarTelefone(telefone: string): string;
82
+ }
83
+ export declare const TextoMetodos: {
84
+ maiusculo: typeof TextoStdlib.maiusculo;
85
+ minusculo: typeof TextoStdlib.minusculo;
86
+ aparar: typeof TextoStdlib.aparar;
87
+ tamanho: typeof TextoStdlib.tamanho;
88
+ semAcentos: typeof TextoStdlib.semAcentos;
89
+ contem: typeof TextoStdlib.contem;
90
+ comecaCom: typeof TextoStdlib.comecaCom;
91
+ terminaCom: typeof TextoStdlib.terminaCom;
92
+ substituir: typeof TextoStdlib.substituir;
93
+ dividir: typeof TextoStdlib.dividir;
94
+ normalizar: typeof TextoStdlib.normalizar;
95
+ aplicarMascara: typeof TextoStdlib.aplicarMascara;
96
+ validarCPF: typeof TextoStdlib.validarCPF;
97
+ validarCNPJ: typeof TextoStdlib.validarCNPJ;
98
+ formatarCEP: typeof TextoStdlib.formatarCEP;
99
+ formatarTelefone: typeof TextoStdlib.formatarTelefone;
100
+ };
101
+ //# sourceMappingURL=texto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texto.d.ts","sourceRoot":"","sources":["../../stdlib/texto.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,WAAW;IAEtB;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIrC;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIxC;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,OAAO;IAMrF;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIzD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAI3E;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;IAI5D;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIxC;;;;;;;;;OASG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAiB7D;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IA2BvC;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IA2BzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAMvC;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CASlD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;CAiBxB,CAAC"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Text standard library for Jade runtime
3
+ * Provides built-in methods for the 'texto' type
4
+ */
5
+ export class TextoStdlib {
6
+ /**
7
+ * Converts string to uppercase
8
+ */
9
+ static maiusculo(texto) {
10
+ return texto.toUpperCase();
11
+ }
12
+ /**
13
+ * Converts string to lowercase
14
+ */
15
+ static minusculo(texto) {
16
+ return texto.toLowerCase();
17
+ }
18
+ /**
19
+ * Trims whitespace from both ends of string
20
+ */
21
+ static aparar(texto) {
22
+ return texto.trim();
23
+ }
24
+ /**
25
+ * Returns the length of the string (counts Unicode characters correctly)
26
+ */
27
+ static tamanho(texto) {
28
+ return Array.from(texto).length;
29
+ }
30
+ /**
31
+ * Remove acentos e diacríticos de uma string
32
+ * Ex: "João" → "Joao", "São Paulo" → "Sao Paulo"
33
+ */
34
+ static semAcentos(texto) {
35
+ return texto.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
36
+ }
37
+ /**
38
+ * Checks if string contains the specified substring
39
+ * @param ignorarAcentos Se verdadeiro, "Joao" encontra "João" (default: false)
40
+ */
41
+ static contem(texto, busca, ignorarAcentos = false) {
42
+ if (!ignorarAcentos)
43
+ return texto.includes(busca);
44
+ const norm = (s) => TextoStdlib.semAcentos(s).toLowerCase();
45
+ return norm(texto).includes(norm(busca));
46
+ }
47
+ /**
48
+ * Checks if string starts with the specified substring
49
+ */
50
+ static comecaCom(texto, prefixo) {
51
+ return texto.startsWith(prefixo);
52
+ }
53
+ /**
54
+ * Checks if string ends with the specified substring
55
+ */
56
+ static terminaCom(texto, sufixo) {
57
+ return texto.endsWith(sufixo);
58
+ }
59
+ /**
60
+ * Replaces all occurrences of a substring with another substring
61
+ */
62
+ static substituir(texto, busca, substituto) {
63
+ return texto.split(busca).join(substituto);
64
+ }
65
+ /**
66
+ * Splits string by a delimiter into an array of strings
67
+ */
68
+ static dividir(texto, delimitador) {
69
+ return texto.split(delimitador);
70
+ }
71
+ /**
72
+ * Normalizes Unicode string to NFC form
73
+ */
74
+ static normalizar(texto) {
75
+ return texto.normalize('NFC');
76
+ }
77
+ /**
78
+ * Aplica uma máscara de formatação a uma string de dígitos
79
+ * Use '#' para cada dígito esperado; demais caracteres são inseridos como literais
80
+ *
81
+ * Exemplos:
82
+ * aplicarMascara("12345678901", "###.###.###-##") → "123.456.789-01"
83
+ * aplicarMascara("00360305000104","##.###.###/####-##") → "00.360.305/0001-04"
84
+ * aplicarMascara("01310100", "#####-###") → "01310-100"
85
+ * aplicarMascara("11987654321", "(##) #####-####") → "(11) 98765-4321"
86
+ */
87
+ static aplicarMascara(valor, mascara) {
88
+ const digits = valor.replace(/\D/g, '');
89
+ let resultado = '';
90
+ let di = 0;
91
+ for (const ch of mascara) {
92
+ if (di >= digits.length)
93
+ break;
94
+ if (ch === '#') {
95
+ resultado += digits[di++];
96
+ }
97
+ else {
98
+ resultado += ch;
99
+ }
100
+ }
101
+ return resultado;
102
+ }
103
+ // ── Validações e formatações brasileiras ─────────────────
104
+ /**
105
+ * Validates Brazilian CPF (Cadastro de Pessoas Físicas)
106
+ * Aceita CPF formatado (123.456.789-01) ou apenas dígitos
107
+ */
108
+ static validarCPF(cpf) {
109
+ const cpfLimpo = cpf.replace(/\D/g, '');
110
+ if (cpfLimpo.length !== 11)
111
+ return false;
112
+ if (/^(\d)\1{10}$/.test(cpfLimpo))
113
+ return false;
114
+ let soma = 0;
115
+ let resto;
116
+ for (let i = 1; i <= 9; i++) {
117
+ soma += parseInt(cpfLimpo.substring(i - 1, i)) * (11 - i);
118
+ }
119
+ resto = (soma * 10) % 11;
120
+ if (resto === 10 || resto === 11)
121
+ resto = 0;
122
+ if (resto !== parseInt(cpfLimpo.substring(9, 10)))
123
+ return false;
124
+ soma = 0;
125
+ for (let i = 1; i <= 10; i++) {
126
+ soma += parseInt(cpfLimpo.substring(i - 1, i)) * (12 - i);
127
+ }
128
+ resto = (soma * 10) % 11;
129
+ if (resto === 10 || resto === 11)
130
+ resto = 0;
131
+ if (resto !== parseInt(cpfLimpo.substring(10, 11)))
132
+ return false;
133
+ return true;
134
+ }
135
+ /**
136
+ * Validates Brazilian CNPJ (Cadastro Nacional da Pessoa Jurídica)
137
+ * Aceita CNPJ formatado (00.360.305/0001-04) ou apenas dígitos
138
+ */
139
+ static validarCNPJ(cnpj) {
140
+ const cnpjLimpo = cnpj.replace(/\D/g, '');
141
+ if (cnpjLimpo.length !== 14)
142
+ return false;
143
+ if (/^(\d)\1{13}$/.test(cnpjLimpo))
144
+ return false;
145
+ let soma = 0;
146
+ let peso = 5;
147
+ for (let i = 0; i < 12; i++) {
148
+ soma += parseInt(cnpjLimpo[i]) * peso;
149
+ peso = peso === 2 ? 9 : peso - 1;
150
+ }
151
+ let resto = soma % 11;
152
+ const digito1 = resto < 2 ? 0 : 11 - resto;
153
+ soma = 0;
154
+ peso = 6;
155
+ for (let i = 0; i < 13; i++) {
156
+ soma += parseInt(cnpjLimpo[i]) * peso;
157
+ peso = peso === 2 ? 9 : peso - 1;
158
+ }
159
+ resto = soma % 11;
160
+ const digito2 = resto < 2 ? 0 : 11 - resto;
161
+ return parseInt(cnpjLimpo[12]) === digito1 && parseInt(cnpjLimpo[13]) === digito2;
162
+ }
163
+ /**
164
+ * Formats Brazilian CEP (Código de Endereçamento Postal)
165
+ */
166
+ static formatarCEP(cep) {
167
+ const cepLimpo = cep.replace(/\D/g, '');
168
+ if (cepLimpo.length !== 8)
169
+ return cep;
170
+ return `${cepLimpo.substring(0, 5)}-${cepLimpo.substring(5)}`;
171
+ }
172
+ /**
173
+ * Formats Brazilian phone number
174
+ * Returns (XX) XXXXX-XXXX for mobile or (XX) XXXX-XXXX for landline
175
+ */
176
+ static formatarTelefone(telefone) {
177
+ const telLimpo = telefone.replace(/\D/g, '');
178
+ if (telLimpo.length === 11) {
179
+ return `(${telLimpo.substring(0, 2)}) ${telLimpo.substring(2, 7)}-${telLimpo.substring(7)}`;
180
+ }
181
+ else if (telLimpo.length === 10) {
182
+ return `(${telLimpo.substring(0, 2)}) ${telLimpo.substring(2, 6)}-${telLimpo.substring(6)}`;
183
+ }
184
+ return telefone;
185
+ }
186
+ }
187
+ export const TextoMetodos = {
188
+ maiusculo: TextoStdlib.maiusculo,
189
+ minusculo: TextoStdlib.minusculo,
190
+ aparar: TextoStdlib.aparar,
191
+ tamanho: TextoStdlib.tamanho,
192
+ semAcentos: TextoStdlib.semAcentos,
193
+ contem: TextoStdlib.contem,
194
+ comecaCom: TextoStdlib.comecaCom,
195
+ terminaCom: TextoStdlib.terminaCom,
196
+ substituir: TextoStdlib.substituir,
197
+ dividir: TextoStdlib.dividir,
198
+ normalizar: TextoStdlib.normalizar,
199
+ aplicarMascara: TextoStdlib.aplicarMascara,
200
+ validarCPF: TextoStdlib.validarCPF,
201
+ validarCNPJ: TextoStdlib.validarCNPJ,
202
+ formatarCEP: TextoStdlib.formatarCEP,
203
+ formatarTelefone: TextoStdlib.formatarTelefone,
204
+ };
205
+ //# sourceMappingURL=texto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texto.js","sourceRoot":"","sources":["../../stdlib/texto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Parser XML básico para o runtime JADE
3
+ * Suporta XML simples e NF-e brasileira (com namespaces xmlns)
4
+ * Acessível via XML.parse(texto) no código JADE
5
+ */
6
+ export interface XMLNode {
7
+ tag: string;
8
+ atributos: Record<string, string>;
9
+ filhos: XMLNode[];
10
+ texto: string;
11
+ }
12
+ export declare class XMLStdlib {
13
+ /**
14
+ * Faz parse de uma string XML e retorna um objeto navegável
15
+ * Tags com namespace (ex: nfe:det) são normalizadas para o nome local (det)
16
+ */
17
+ static parse(xmlTexto: string): XMLNode;
18
+ /**
19
+ * Busca o primeiro elemento com a tag informada (busca em profundidade)
20
+ * Ignora prefixos de namespace: buscar(xml, 'det') encontra tanto <det> quanto <nfe:det>
21
+ */
22
+ static buscar(no: XMLNode, tag: string): XMLNode | null;
23
+ /**
24
+ * Busca todos os elementos com a tag informada
25
+ * Ignora prefixos de namespace
26
+ */
27
+ static buscarTodos(no: XMLNode, tag: string): XMLNode[];
28
+ /**
29
+ * Retorna o texto de um elemento filho pelo nome da tag
30
+ * Atalho para: xml.buscar(no, tag)?.texto ?? ''
31
+ */
32
+ static texto(no: XMLNode, tag: string): string;
33
+ /**
34
+ * Converte XMLNode de volta para string XML
35
+ */
36
+ static serializar(no: XMLNode): string;
37
+ /**
38
+ * Extrai campos principais de uma NF-e (Nota Fiscal Eletrônica)
39
+ * Funciona com NF-e com ou sem namespace (xmlns:nfe=...)
40
+ */
41
+ static parsarNFe(xmlNFe: string): {
42
+ chave: string;
43
+ numero: string;
44
+ serie: string;
45
+ dataEmissao: string;
46
+ cnpjEmitente: string;
47
+ nomeEmitente: string;
48
+ cnpjDestinatario: string;
49
+ nomeDestinatario: string;
50
+ valorTotal: number;
51
+ itens: {
52
+ descricao: string;
53
+ quantidade: number;
54
+ valorUnitario: number;
55
+ valorTotal: number;
56
+ }[];
57
+ };
58
+ /**
59
+ * Extrai o nome local de uma tag (remove prefixo de namespace)
60
+ * "nfe:det" → "det", "det" → "det"
61
+ */
62
+ private static _localName;
63
+ private static _domToNode;
64
+ private static _buscarTodosRec;
65
+ private static _parseManual;
66
+ private static _parseElemento;
67
+ private static _parseAtributos;
68
+ }
69
+ export declare const XMLMetodos: {
70
+ parse: typeof XMLStdlib.parse;
71
+ buscar: typeof XMLStdlib.buscar;
72
+ buscarTodos: typeof XMLStdlib.buscarTodos;
73
+ texto: typeof XMLStdlib.texto;
74
+ serializar: typeof XMLStdlib.serializar;
75
+ parsarNFe: typeof XMLStdlib.parsarNFe;
76
+ };
77
+ //# sourceMappingURL=xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../stdlib/xml.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,SAAS;IAEpB;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAkBvC;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IASvD;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE;IAMvD;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAetC;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC/F;IAmCD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAKzB,OAAO,CAAC,MAAM,CAAC,UAAU;IAyBzB,OAAO,CAAC,MAAM,CAAC,eAAe;IAO9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAK3B,OAAO,CAAC,MAAM,CAAC,cAAc;IAyC7B,OAAO,CAAC,MAAM,CAAC,eAAe;CAY/B;AAED,eAAO,MAAM,UAAU;;;;;;;CAOtB,CAAC"}