arcli 1.7.0 → 1.8.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/CHANGELOG.md +37 -1
- package/README.md +55 -156
- package/dist/cli/commands/vouchers.command.js +4 -3
- package/dist/cli/commands/vouchers.command.js.map +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/interactive/config.flow.d.ts +1 -1
- package/dist/cli/interactive/config.flow.js +53 -18
- package/dist/cli/interactive/config.flow.js.map +1 -1
- package/dist/cli/interactive/history.flow.d.ts +4 -0
- package/dist/cli/interactive/history.flow.js +22 -8
- package/dist/cli/interactive/history.flow.js.map +1 -1
- package/dist/cli/interactive/interactive-mode.js +24 -10
- package/dist/cli/interactive/interactive-mode.js.map +1 -1
- package/dist/cli/interactive/invoice-picker.d.ts +25 -0
- package/dist/cli/interactive/invoice-picker.js +152 -0
- package/dist/cli/interactive/invoice-picker.js.map +1 -0
- package/dist/cli/interactive/note.flow.d.ts +6 -2
- package/dist/cli/interactive/note.flow.js +19 -30
- package/dist/cli/interactive/note.flow.js.map +1 -1
- package/dist/cli/interactive/prompts.d.ts +34 -5
- package/dist/cli/interactive/prompts.js +181 -19
- package/dist/cli/interactive/prompts.js.map +1 -1
- package/dist/cli/interactive/repeat.flow.js +5 -11
- package/dist/cli/interactive/repeat.flow.js.map +1 -1
- package/dist/cli/interactive/status.flow.d.ts +3 -0
- package/dist/cli/interactive/status.flow.js +29 -0
- package/dist/cli/interactive/status.flow.js.map +1 -0
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/modules/config/config-value-parser.d.ts +1 -1
- package/dist/modules/config/config-value-parser.js +10 -0
- package/dist/modules/config/config-value-parser.js.map +1 -1
- package/dist/modules/config/config.presenter.d.ts +4 -0
- package/dist/modules/config/config.presenter.js +57 -37
- package/dist/modules/config/config.presenter.js.map +1 -1
- package/dist/modules/config/config.schemas.d.ts +2 -0
- package/dist/modules/config/config.schemas.js +4 -0
- package/dist/modules/config/config.schemas.js.map +1 -1
- package/dist/modules/config/config.sections.d.ts +14 -0
- package/dist/modules/config/config.sections.js +61 -0
- package/dist/modules/config/config.sections.js.map +1 -0
- package/dist/modules/config/config.service.js +1 -0
- package/dist/modules/config/config.service.js.map +1 -1
- package/dist/modules/interactive/config-fields.d.ts +1 -3
- package/dist/modules/interactive/config-fields.js +36 -42
- package/dist/modules/interactive/config-fields.js.map +1 -1
- package/dist/modules/vouchers/voucher-history.d.ts +9 -4
- package/dist/modules/vouchers/voucher-history.js +8 -3
- package/dist/modules/vouchers/voucher-history.js.map +1 -1
- package/dist/modules/vouchers/voucher-history.presenter.d.ts +9 -2
- package/dist/modules/vouchers/voucher-history.presenter.js +32 -14
- package/dist/modules/vouchers/voucher-history.presenter.js.map +1 -1
- package/dist/ui/components/statusBar.d.ts +2 -0
- package/dist/ui/components/statusBar.js +5 -1
- package/dist/ui/components/statusBar.js.map +1 -1
- package/llms.txt +3 -3
- package/package.json +1 -1
- package/dist/cli/interactive/lookup.flow.d.ts +0 -5
- package/dist/cli/interactive/lookup.flow.js +0 -72
- package/dist/cli/interactive/lookup.flow.js.map +0 -1
|
@@ -1,60 +1,222 @@
|
|
|
1
1
|
import checkbox from '@inquirer/checkbox';
|
|
2
2
|
import input from '@inquirer/input';
|
|
3
|
-
import select from '@inquirer/select';
|
|
3
|
+
import select, { Separator } from '@inquirer/select';
|
|
4
|
+
import { emitKeypressEvents } from 'node:readline';
|
|
5
|
+
import { styleText } from 'node:util';
|
|
4
6
|
import { BACK } from '../../modules/interactive/wizard.js';
|
|
5
7
|
import { colorize } from '../../ui/index.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
// La ayuda de teclas de @inquirer viene en ingles.
|
|
9
|
+
const HELP_TRANSLATIONS = {
|
|
10
|
+
'a all': ['a', 'todos'],
|
|
11
|
+
'i invert': ['i', 'invertir'],
|
|
12
|
+
'space select': ['espacio', 'marcar'],
|
|
13
|
+
'↑↓ navigate': ['↑↓', 'mover'],
|
|
14
|
+
'⏎ select': ['⏎', 'elegir'],
|
|
15
|
+
'⏎ submit': ['⏎', 'confirmar'],
|
|
16
|
+
};
|
|
17
|
+
function keysHelpTip(extra) {
|
|
18
|
+
return (keys) => [...keys.map(([key, action]) => HELP_TRANSLATIONS[`${key} ${action}`] ?? [key, action]), ...extra]
|
|
19
|
+
.map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)
|
|
20
|
+
.join(styleText('dim', ' • '));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* La pregunta activa lleva dos lineas en blanco arriba, para separarla de las ya respondidas. Al responderla
|
|
24
|
+
* @inquirer la redibuja con el prefijo "done", sin esas lineas, y las respuestas quedan juntas.
|
|
25
|
+
*/
|
|
26
|
+
const PROMPT_PREFIX = { idle: `\n\n${styleText('blue', '?')}` };
|
|
27
|
+
/**
|
|
28
|
+
* En las listas, mientras la pregunta esta activa, una linea en blanco entre la pregunta y las opciones, y otra
|
|
29
|
+
* entre la descripcion de la opcion marcada y la ayuda de teclas.
|
|
30
|
+
*/
|
|
31
|
+
function listStyle(extraKeys) {
|
|
32
|
+
return {
|
|
33
|
+
description: (text) => `${styleText('cyan', text)}\n`,
|
|
34
|
+
keysHelpTip: keysHelpTip(extraKeys),
|
|
35
|
+
message: (text, status) => status === 'done' ? styleText('bold', text) : `${styleText('bold', text)}\n`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const MENU_THEME = { prefix: PROMPT_PREFIX, style: listStyle([]) };
|
|
39
|
+
const STEP_THEME = { prefix: PROMPT_PREFIX, style: listStyle([['esc', 'volver']]) };
|
|
40
|
+
const TEXT_THEME = { prefix: PROMPT_PREFIX };
|
|
41
|
+
/**
|
|
42
|
+
* Una lista simple. Con `escapeValue`, Esc la cierra devolviendo ese valor (por ejemplo, "volver", "no" o
|
|
43
|
+
* "salir") y la ayuda de teclas lo muestra con `escapeLabel`; sin el, Esc no hace nada.
|
|
44
|
+
*/
|
|
45
|
+
export async function chooseOne(message, choices, defaultValue, options = {}) {
|
|
46
|
+
const { escapeLabel = 'volver', escapeValue } = options;
|
|
47
|
+
const config = {
|
|
48
|
+
choices: [...choices],
|
|
49
|
+
default: defaultValue,
|
|
50
|
+
loop: false,
|
|
51
|
+
message,
|
|
52
|
+
pageSize: 12,
|
|
53
|
+
theme: escapeValue === undefined
|
|
54
|
+
? MENU_THEME
|
|
55
|
+
: { prefix: PROMPT_PREFIX, style: listStyle([['esc', escapeLabel]]) },
|
|
56
|
+
};
|
|
57
|
+
if (escapeValue === undefined) {
|
|
58
|
+
return select(config);
|
|
59
|
+
}
|
|
60
|
+
const result = await runStepPrompt((context) => select(config, context), (answer) => ({ answer: choiceName(choices, answer), message }));
|
|
61
|
+
return 'answer' in result && result.answer !== BACK ? result.answer : escapeValue;
|
|
8
62
|
}
|
|
9
63
|
export async function askText(message, options = {}) {
|
|
10
64
|
const answer = await input({
|
|
11
65
|
default: options.defaultValue,
|
|
12
66
|
message,
|
|
67
|
+
theme: TEXT_THEME,
|
|
13
68
|
validate: options.validate,
|
|
14
69
|
});
|
|
15
70
|
return answer.trim();
|
|
16
71
|
}
|
|
72
|
+
/** Si o no; Esc cuenta como no. */
|
|
17
73
|
export async function confirm(message, yesLabel, noLabel = 'Cancelar') {
|
|
18
74
|
return chooseOne(message, [
|
|
19
75
|
{ name: yesLabel, value: true },
|
|
20
76
|
{ name: noLabel, value: false },
|
|
21
|
-
]);
|
|
77
|
+
], undefined, { escapeValue: false });
|
|
22
78
|
}
|
|
23
79
|
/** Ctrl+C dentro de un prompt de @inquirer. */
|
|
24
80
|
export function isPromptCancellation(error) {
|
|
25
81
|
return error instanceof Error && error.name === 'ExitPromptError';
|
|
26
82
|
}
|
|
83
|
+
// Lineas que ocupa el prompt fuera de la lista: linea en blanco, pregunta, descripcion y ayuda de teclas.
|
|
84
|
+
const PROMPT_CHROME_LINES = 6;
|
|
85
|
+
/** Alto de lista para `count` opciones: todas si entran en la terminal, si no las que entren (minimo 12). */
|
|
86
|
+
export function fitPageSize(count) {
|
|
87
|
+
const available = (process.stdout.rows || 24) - PROMPT_CHROME_LINES;
|
|
88
|
+
return Math.max(12, Math.min(count, available));
|
|
89
|
+
}
|
|
27
90
|
const BACK_CHOICE = { name: '← Volver', value: BACK };
|
|
91
|
+
// Linea en blanco entre las opciones y "Volver".
|
|
92
|
+
const BACK_SPACER = new Separator(' ');
|
|
93
|
+
// Alternativa a Esc, por si la terminal no la manda.
|
|
28
94
|
const BACK_TEXT = '<';
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
95
|
+
const ESCAPE_REASON = 'esc';
|
|
96
|
+
/** La misma linea que deja @inquirer al responder; hace falta cuando el prompt se borra al cerrarse. */
|
|
97
|
+
function writeAnsweredLine(message, answer) {
|
|
98
|
+
process.stdout.write(`${styleText('green', '✔')} ${styleText('bold', message)} ${styleText('cyan', answer)}\n`);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Corre un prompt de paso que se cierra con Esc (vuelve al paso anterior) o cuando se aborta `signal`.
|
|
102
|
+
* El prompt se borra al cerrarse, asi una pregunta abandonada no queda en pantalla; si se respondio,
|
|
103
|
+
* se escribe la linea "✔ pregunta respuesta" igual que siempre.
|
|
104
|
+
*/
|
|
105
|
+
async function runStepPrompt(run, answeredLine, signal) {
|
|
106
|
+
const controller = new AbortController();
|
|
107
|
+
const onKeypress = (_text, key) => {
|
|
108
|
+
if (key?.name === 'escape') {
|
|
109
|
+
controller.abort(ESCAPE_REASON);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const onAbort = () => controller.abort(signal?.reason);
|
|
113
|
+
signal?.addEventListener('abort', onAbort);
|
|
114
|
+
// @inquirer ya emite keypress sobre stdin; llamarlo de nuevo no hace nada.
|
|
115
|
+
emitKeypressEvents(process.stdin);
|
|
116
|
+
process.stdin.on('keypress', onKeypress);
|
|
117
|
+
try {
|
|
118
|
+
const answer = await run({ clearPromptOnDone: true, signal: controller.signal });
|
|
119
|
+
const line = answeredLine(answer);
|
|
120
|
+
writeAnsweredLine(line.message, line.answer);
|
|
121
|
+
return { answer };
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (!(error instanceof Error && error.name === 'AbortPromptError')) {
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
return controller.signal.reason === ESCAPE_REASON ? { answer: BACK } : { aborted: true };
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
process.stdin.off('keypress', onKeypress);
|
|
131
|
+
signal?.removeEventListener('abort', onAbort);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function stepConfig(message, choices, defaultValue, pageSize) {
|
|
135
|
+
return {
|
|
136
|
+
choices: [...choices, BACK_SPACER, BACK_CHOICE],
|
|
33
137
|
default: defaultValue,
|
|
34
138
|
loop: false,
|
|
35
139
|
message,
|
|
36
|
-
pageSize
|
|
37
|
-
|
|
140
|
+
pageSize,
|
|
141
|
+
theme: STEP_THEME,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function choiceName(choices, answer) {
|
|
145
|
+
if (answer === BACK) {
|
|
146
|
+
return BACK_CHOICE.name;
|
|
147
|
+
}
|
|
148
|
+
const chosen = choices.find((item) => !Separator.isSeparator(item) && item.value === answer);
|
|
149
|
+
return chosen?.short ?? chosen?.name ?? '';
|
|
150
|
+
}
|
|
151
|
+
async function selectStep(message, choices, defaultValue, pageSize, signal) {
|
|
152
|
+
return runStepPrompt((context) => select(stepConfig(message, choices, defaultValue, pageSize), context), (answer) => ({ answer: choiceName(choices, answer), message }), signal);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Como chooseOne, con una opcion "← Volver" al final para el motor de pasos (Esc hace lo mismo).
|
|
156
|
+
* Acepta separadores entre opciones.
|
|
157
|
+
*/
|
|
158
|
+
export async function chooseStep(message, choices, defaultValue, pageSize = 12) {
|
|
159
|
+
const result = await selectStep(message, choices, defaultValue, pageSize);
|
|
160
|
+
// Sin signal externo, solo Esc aborta, y eso ya vuelve como BACK.
|
|
161
|
+
return 'answer' in result ? result.answer : BACK;
|
|
38
162
|
}
|
|
39
|
-
/**
|
|
163
|
+
/** Borra la linea de la ultima respuesta ("✔ pregunta respuesta"), para redibujar la misma lista en su lugar. */
|
|
164
|
+
export function eraseLastAnswer() {
|
|
165
|
+
if (process.stdout.isTTY) {
|
|
166
|
+
process.stdout.write('\u001B[1A\u001B[2K\r');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Muestra la lista mientras `loading` esta en curso (por ejemplo, con "Cargando…" en lugar de un boton).
|
|
171
|
+
* Si termina la carga, la lista desaparece sin dejar rastro y devuelve lo cargado; si antes se elige
|
|
172
|
+
* una opcion (o Esc), devuelve esa respuesta.
|
|
173
|
+
*/
|
|
174
|
+
export async function chooseStepWhileLoading(message, choices, defaultValue, pageSize, loading) {
|
|
175
|
+
const loaded = new AbortController();
|
|
176
|
+
const stop = () => loaded.abort();
|
|
177
|
+
loading.then(stop, stop);
|
|
178
|
+
const result = await selectStep(message, choices, defaultValue, pageSize, loaded.signal);
|
|
179
|
+
return 'answer' in result ? result : { loaded: await loading };
|
|
180
|
+
}
|
|
181
|
+
/** Como askText, pero Esc (o escribir "<") vuelve al paso anterior. */
|
|
40
182
|
export async function askTextStep(message, options = {}) {
|
|
41
|
-
const
|
|
42
|
-
|
|
183
|
+
const result = await runStepPrompt((context) => input({
|
|
184
|
+
default: options.defaultValue,
|
|
185
|
+
message: `${message} ${colorize('([esc] para volver)', 'muted')}`,
|
|
186
|
+
theme: TEXT_THEME,
|
|
43
187
|
validate: (value) => (value.trim() === BACK_TEXT ? true : (options.validate?.(value) ?? true)),
|
|
44
|
-
});
|
|
188
|
+
}, context), (answer) => ({ answer: answer.trim(), message }));
|
|
189
|
+
if (!('answer' in result) || result.answer === BACK) {
|
|
190
|
+
return BACK;
|
|
191
|
+
}
|
|
192
|
+
const answer = result.answer.trim();
|
|
45
193
|
return answer === BACK_TEXT ? BACK : answer;
|
|
46
194
|
}
|
|
47
195
|
/**
|
|
48
196
|
* Seleccion multiple: espacio marca, Enter confirma (sin marcar nada tambien vale). Tiene un "← Volver" al
|
|
49
|
-
* final para el motor de pasos: si se marca, vuelve al paso anterior.
|
|
197
|
+
* final para el motor de pasos: si se marca (o con Esc), vuelve al paso anterior.
|
|
50
198
|
*/
|
|
51
199
|
export async function chooseManyStep(message, choices, selected = []) {
|
|
52
|
-
const
|
|
53
|
-
choices: [
|
|
200
|
+
const result = await runStepPrompt((context) => checkbox({
|
|
201
|
+
choices: [
|
|
202
|
+
...choices.map((choice) => ({ ...choice, checked: selected.includes(choice.value) })),
|
|
203
|
+
BACK_SPACER,
|
|
204
|
+
BACK_CHOICE,
|
|
205
|
+
],
|
|
54
206
|
loop: false,
|
|
55
207
|
message,
|
|
56
208
|
pageSize: 12,
|
|
57
|
-
|
|
58
|
-
|
|
209
|
+
theme: STEP_THEME,
|
|
210
|
+
}, context), (answer) => ({
|
|
211
|
+
answer: choices
|
|
212
|
+
.filter((choice) => answer.includes(choice.value))
|
|
213
|
+
.map((choice) => choice.name)
|
|
214
|
+
.join(', '),
|
|
215
|
+
message,
|
|
216
|
+
}));
|
|
217
|
+
if (!('answer' in result) || result.answer === BACK || result.answer.includes(BACK)) {
|
|
218
|
+
return BACK;
|
|
219
|
+
}
|
|
220
|
+
return result.answer;
|
|
59
221
|
}
|
|
60
222
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/interactive/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAa,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/interactive/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,11 @@ import { parseAmountInput } from '../../modules/interactive/amount-input.js';
|
|
|
3
3
|
import { invoiceKindChoices, ivaConditionChoices } from '../../modules/interactive/choices.js';
|
|
4
4
|
import { currentMonthPeriod, previousMonthPeriod } from '../../modules/interactive/periods.js';
|
|
5
5
|
import { BACK, runWizard } from '../../modules/interactive/wizard.js';
|
|
6
|
-
import { inferIvaRate,
|
|
7
|
-
import { formatVoucherSummary } from '../../modules/vouchers/voucher-history.presenter.js';
|
|
6
|
+
import { inferIvaRate, resolveDocumentType } from '../../modules/vouchers/voucher-history.js';
|
|
8
7
|
import { noticePanel, writeTerminalOutput } from '../../ui/index.js';
|
|
9
|
-
import { startSpinner } from '../spinner.js';
|
|
10
8
|
import { askAdvancedOptions } from './advanced-options.js';
|
|
11
9
|
import { buildInvoiceInput } from './invoice.flow.js';
|
|
10
|
+
import { pickInvoice } from './invoice-picker.js';
|
|
12
11
|
import { askTextStep, chooseStep } from './prompts.js';
|
|
13
12
|
import { previewAndEmit, requirePointOfSale } from './session.js';
|
|
14
13
|
import { validateAmount, validateCbu, validateDate } from './validators.js';
|
|
@@ -39,16 +38,11 @@ export function repeatSteps(session, pointOfSale, today = new Date()) {
|
|
|
39
38
|
name: 'factura',
|
|
40
39
|
run: async (state) => {
|
|
41
40
|
const voucherKind = state.voucherKind;
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
if (invoices.length === 0) {
|
|
45
|
-
writeTerminalOutput(noticePanel(`No hay ${voucherKind.displayName} emitidas en el punto de venta ${pointOfSale}.`, 'warning'));
|
|
46
|
-
return BACK;
|
|
47
|
-
}
|
|
48
|
-
const original = await chooseStep('¿Cual repetimos?', invoices.map((item) => ({ name: formatVoucherSummary(pointOfSale, item), value: item })));
|
|
49
|
-
if (original === BACK) {
|
|
41
|
+
const picked = await pickInvoice(session, { message: '¿Cual repetimos?', pointOfSale, voucherKind });
|
|
42
|
+
if (picked === BACK) {
|
|
50
43
|
return BACK;
|
|
51
44
|
}
|
|
45
|
+
const original = picked.invoice;
|
|
52
46
|
const documentType = resolveDocumentType(original.documentTypeCode);
|
|
53
47
|
if (!documentType) {
|
|
54
48
|
writeTerminalOutput(noticePanel('La factura tiene un tipo de documento que el asistente no soporta. Usa los flags del CLI.', 'warning'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repeat.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/repeat.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAGxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAsB,MAAM,mCAAmC,CAAC;AAChH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAmB,MAAM,kCAAkC,CAAC;AACpF,OAAO,
|
|
1
|
+
{"version":3,"file":"repeat.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/repeat.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAGxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAsB,MAAM,mCAAmC,CAAC;AAChH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAmB,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAsB,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAA2B,cAAc,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,gBAAgB,GAAmC;IACvD,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,qBAAqB;CACzB,CAAC;AAMF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5D,SAAS,cAAc,CAAC,MAAqB;IAC3C,OAAO,GAAG,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,OAA2B,EAC3B,WAAmB,EACnB,QAAc,IAAI,IAAI,EAAE;IAExB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAEnC,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,sCAAsC,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAEnG,OAAO,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;YACvD,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAoC,CAAC;gBAC/D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;gBAErG,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;gBAChC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBAEpE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,mBAAmB,CACjB,WAAW,CACT,2FAA2F,EAC3F,SAAS,CACV,CACF,CAAC;oBAEF,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,OAAO;oBACL,QAAQ,EAAE;wBACR,YAAY,EAAE,KAAK;wBACnB,OAAO,EAAE,WAAW,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;wBACtG,YAAY,EAAE,KAAK;qBACpB;oBACD,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,WAAW;oBAC/D,cAAc,EAAE,YAAY,KAAK,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc;oBACzF,YAAY;oBACZ,YAAY,EAAE,YAAY,KAAK,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;oBAClF,QAAQ;oBACR,WAAW,EAAE,QAAQ,CAAC,KAAK;iBAC5B,CAAC;YACJ,CAAC;SACF;QACD;YACE,IAAI,EAAE,cAAc;YACpB,wEAAwE;YACxE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,YAAY,GAAG,MAAM,UAAU,CACnC,uCAAuC,EACvC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,GAAG,CAAC,EACrD,MAAM,CAAC,qBAAqB,CAC7B,CAAC;gBAEF,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;YACzD,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,kBAAkB;SAC3D;QACD;YACE,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAyB,CAAC;gBACjD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE;oBAC9C,EAAE,IAAI,EAAE,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAgB,EAAE;oBAC5E,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAe,EAAE;iBAC5D,CAAC,CAAC;gBAEH,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;oBACxC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjE,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;gBAE/E,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiC,uBAAuB,EAAE;oBACvF,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;oBAC1E,EAAE,WAAW,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE;oBACjF,EAAE,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAc,EAAE;oBAC7E,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAe,EAAE;iBACjD,CAAC,CAAC;gBAEH,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAEvC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBACrB,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,CAAC;gBAC/F,CAAC;gBAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjG,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;gBAE9E,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;gBAE5E,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC;YACxG,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,WAAW;SAC/C;QACD;YACE,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;gBAEzF,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;YACvC,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,KAAK,6BAA6B,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;SACpG;QACD;YACE,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,kGAAkG;gBAClG,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAEhE,IAAI,OAAO,EAAE,CAAC;oBACZ,mBAAmB,CACjB,WAAW,CAAC,mFAAmF,EAAE,MAAM,CAAC,CACzG,CAAC;gBACJ,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE;oBACxD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,WAAW;oBACrC,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,kBAAkB,IAAI,IAAI;oBAC3E,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;oBACvC,WAAW,EAAE,KAAK,CAAC,WAAoC;iBACxD,CAAC,CAAC;gBAEH,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;YACjD,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA2B;IAC7D,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEhD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;QAC/D,QAAQ,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;KACvD,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,MAAM,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { formatQuotationAsText, formatStatusAsText } from '../../modules/parameters/parameters.presenter.js';
|
|
2
|
+
import { buildStatusReport } from '../../modules/parameters/status.js';
|
|
3
|
+
import { ArcaParametersGateway } from '../../services/arca/arca-parameters.gateway.js';
|
|
4
|
+
import { writeTerminalOutput } from '../../ui/index.js';
|
|
5
|
+
import { startSpinner } from '../spinner.js';
|
|
6
|
+
async function withSpinner(text, run) {
|
|
7
|
+
const spinner = startSpinner(text);
|
|
8
|
+
try {
|
|
9
|
+
return await run();
|
|
10
|
+
}
|
|
11
|
+
finally {
|
|
12
|
+
spinner?.stop();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Estado de los servidores de ARCA, del punto de venta y la cotizacion oficial del dolar. */
|
|
16
|
+
export async function runStatusFlow(session) {
|
|
17
|
+
const gateway = new ArcaParametersGateway(session.arca);
|
|
18
|
+
const { environment, pointOfSale } = session.runtime;
|
|
19
|
+
const [report, quotation] = await withSpinner('Consultando ARCA...', () => Promise.all([
|
|
20
|
+
buildStatusReport({ environment, gateway, pointOfSale }),
|
|
21
|
+
// La cotizacion es un extra: si falla, el estado se muestra igual.
|
|
22
|
+
gateway.getQuotation('USD').catch(() => undefined),
|
|
23
|
+
]));
|
|
24
|
+
writeTerminalOutput(formatStatusAsText(report));
|
|
25
|
+
if (quotation) {
|
|
26
|
+
writeTerminalOutput(formatQuotationAsText(quotation, environment));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=status.flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.flow.js","sourceRoot":"","sources":["../../../src/cli/interactive/status.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,KAAK,UAAU,WAAW,CAAI,IAAY,EAAE,GAAqB;IAC/D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA2B;IAC7D,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IACrD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,WAAW,CAAC,qBAAqB,EAAE,GAAG,EAAE,CACxE,OAAO,CAAC,GAAG,CAAC;QACV,iBAAiB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACxD,mEAAmE;QACnE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;KACnD,CAAC,CACH,CAAC;IAEF,mBAAmB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhD,IAAI,SAAS,EAAE,CAAC;QACd,mBAAmB,CAAC,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "1.
|
|
1
|
+
export declare const CLI_VERSION = "1.8.0";
|
package/dist/cli/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const CLI_VERSION = '1.
|
|
1
|
+
export const CLI_VERSION = '1.8.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type CanonicalConfigKey = 'alicuotaPorDefecto' | 'aliasCbu' | 'cbu' | 'cert.produccion' | 'cert.testing' | 'conceptoPorDefecto' | 'cotizacionPorDefecto' | 'cuit' | 'emisor.condicionIva' | 'emisor.domicilio' | 'emisor.iibb' | 'emisor.inicioActividades' | 'emisor.logo' | 'emisor.razonSocial' | 'entornoPorDefecto' | 'ivaReceptorPorDefecto' | 'key.produccion' | 'key.testing' | 'monedaPorDefecto' | 'output.emitirPorDefecto' | 'output.jsonPorDefecto' | 'output.brutoPorDefecto' | 'pdf' | 'pdfCarpeta' | 'pdfNavegador' | 'puntoVentaPorDefecto' | 'ticketPath' | 'verificarFce';
|
|
1
|
+
export type CanonicalConfigKey = 'alicuotaPorDefecto' | 'aliasCbu' | 'comprobantesPorLista' | 'cbu' | 'cert.produccion' | 'cert.testing' | 'conceptoPorDefecto' | 'cotizacionPorDefecto' | 'cuit' | 'emisor.condicionIva' | 'emisor.domicilio' | 'emisor.iibb' | 'emisor.inicioActividades' | 'emisor.logo' | 'emisor.razonSocial' | 'entornoPorDefecto' | 'ivaReceptorPorDefecto' | 'key.produccion' | 'key.testing' | 'monedaPorDefecto' | 'output.emitirPorDefecto' | 'output.jsonPorDefecto' | 'output.brutoPorDefecto' | 'pdf' | 'pdfCarpeta' | 'pdfNavegador' | 'puntoVentaPorDefecto' | 'ticketPath' | 'verificarFce';
|
|
2
2
|
export declare function parseConfigValue(key: CanonicalConfigKey, value: string): boolean | number | string;
|
|
@@ -3,6 +3,7 @@ import { resolve } from 'node:path';
|
|
|
3
3
|
import { parseArgentineDateInputAsArcaDate } from '../../lib/dates/arca-date.js';
|
|
4
4
|
import { readPemFile } from '../../lib/security/pem.js';
|
|
5
5
|
import { IVA_RATE_HINT } from '../billing/billing.schemas.js';
|
|
6
|
+
import { MAX_RECENT_VOUCHERS } from '../vouchers/voucher-history.js';
|
|
6
7
|
import { arcliDefaultConceptSchema, arcliDefaultIvaConditionSchema, arcliDefaultIvaRateSchema, arcliEnvironmentSchema, arcliPdfModeSchema, } from './config.schemas.js';
|
|
7
8
|
function parseBoolean(value) {
|
|
8
9
|
const normalizedValue = value.trim().toLowerCase();
|
|
@@ -49,6 +50,13 @@ function parsePositiveInteger(value) {
|
|
|
49
50
|
}
|
|
50
51
|
return parsedValue;
|
|
51
52
|
}
|
|
53
|
+
function parseRecentCount(value) {
|
|
54
|
+
const parsedValue = Number(value.trim());
|
|
55
|
+
if (!Number.isInteger(parsedValue) || parsedValue < 1 || parsedValue > MAX_RECENT_VOUCHERS) {
|
|
56
|
+
throw new Error(`La cantidad "${value}" no es valida: tiene que ser un numero entre 1 y ${MAX_RECENT_VOUCHERS}.`);
|
|
57
|
+
}
|
|
58
|
+
return parsedValue;
|
|
59
|
+
}
|
|
52
60
|
function parsePositiveNumber(value) {
|
|
53
61
|
const parsedValue = Number.parseFloat(value.trim());
|
|
54
62
|
if (!Number.isFinite(parsedValue) || parsedValue <= 0) {
|
|
@@ -88,6 +96,8 @@ export function parseConfigValue(key, value) {
|
|
|
88
96
|
return parseIvaRate(value);
|
|
89
97
|
case 'aliasCbu':
|
|
90
98
|
return parseCbuAlias(value);
|
|
99
|
+
case 'comprobantesPorLista':
|
|
100
|
+
return parseRecentCount(value);
|
|
91
101
|
case 'cbu':
|
|
92
102
|
return parseCbu(value);
|
|
93
103
|
case 'conceptoPorDefecto':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-value-parser.js","sourceRoot":"","sources":["../../../src/modules/config/config-value-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"config-value-parser.js","sourceRoot":"","sources":["../../../src/modules/config/config-value-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAiC1B,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEnD,IAAI,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,GAAG,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAClH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,eAAe,KAAK,OAAO,IAAI,eAAe,KAAK,GAAG,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QACvF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,0DAA0D,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,uBAAuB,aAAa,GAAG,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,wCAAwC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,4EAA4E,CAAC,CAAC;IAClH,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAEtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,oCAAoC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,mBAAmB,EAAE,CAAC;QAC3F,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,qDAAqD,mBAAmB,GAAG,CAAC,CAAC;IACpH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,oCAAoC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAsC;IACzE,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAEnD,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAEpC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,kGAAkG;AAClG,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,uDAAuD,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,iCAAiC,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,KAAa;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAEjD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAuB,EAAE,KAAa;IACrE,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,oBAAoB;YACvB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,sBAAsB;YACzB,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,oBAAoB;YACvB,OAAO,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,KAAK,sBAAsB;YACzB,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,qBAAqB;YACxB,OAAO,8BAA8B,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1E,KAAK,kBAAkB,CAAC;QACxB,KAAK,aAAa,CAAC;QACnB,KAAK,oBAAoB;YACvB,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,0BAA0B;YAC7B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,mBAAmB;YACtB,OAAO,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAClE,KAAK,uBAAuB;YAC1B,OAAO,8BAA8B,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1E,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,KAAK,cAAc,CAAC;QACpB,KAAK,yBAAyB,CAAC;QAC/B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,wBAAwB;YAC3B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,KAAK;YACR,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,KAAK,cAAc;YACjB,OAAO,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAClD,KAAK,sBAAsB;YACzB,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,YAAY;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,iBAAiB,CAAC;QACvB,KAAK,cAAc;YACjB,OAAO,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC5C,KAAK,gBAAgB,CAAC;QACtB,KAAK,aAAa;YAChB,OAAO,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC9C;YACE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -6,6 +6,10 @@ export interface ConfigPathSnapshot {
|
|
|
6
6
|
}
|
|
7
7
|
export declare function formatConfig(config: ArcliConfig, paths: ConfigPathSnapshot): string;
|
|
8
8
|
export declare function formatConfigPath(configPath: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* La configuracion por secciones, en el mismo orden que "Modificar configuracion" del modo interactivo.
|
|
11
|
+
* El peso esta en los valores: titulos en celeste, etiquetas y datos sin cargar atenuados.
|
|
12
|
+
*/
|
|
9
13
|
export declare function formatConfigAsText(config: ArcliConfig, paths: ConfigPathSnapshot): string;
|
|
10
14
|
export declare function formatConfigDoctor(report: ConfigDoctorReport): string;
|
|
11
15
|
export declare function formatConfigDoctorAsText(report: ConfigDoctorReport): string;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { formatArcaDateAsArgentineDate } from '../../lib/dates/arca-date.js';
|
|
2
2
|
import { maskPath } from '../../lib/paths/mask-path.js';
|
|
3
|
-
import {
|
|
3
|
+
import { colorize, keyValuePanel, resolveKeyValueLabelWidth, statusPanel, toneText, UI_THEME } from '../../ui/index.js';
|
|
4
|
+
import { RECENT_VOUCHERS_LIMIT } from '../vouchers/voucher-history.js';
|
|
5
|
+
import { CONFIG_LABELS, CONFIG_SECTIONS } from './config.sections.js';
|
|
4
6
|
function toPublicSnapshot(config, paths) {
|
|
5
7
|
return {
|
|
6
8
|
alicuota: config.alicuotaPorDefecto,
|
|
7
9
|
aliasCbu: config.aliasCbu,
|
|
10
|
+
comprobantesPorLista: config.comprobantesPorLista,
|
|
8
11
|
cbu: config.cbu,
|
|
9
12
|
cert: {
|
|
10
13
|
produccion: config.cert.produccion ? maskPath(config.cert.produccion) : undefined,
|
|
@@ -38,44 +41,61 @@ export function formatConfig(config, paths) {
|
|
|
38
41
|
export function formatConfigPath(configPath) {
|
|
39
42
|
return configPath;
|
|
40
43
|
}
|
|
44
|
+
const NOT_SET = 'no configurado';
|
|
45
|
+
const notSet = (value) => value ?? NOT_SET;
|
|
46
|
+
const yesNo = (value) => (value ? 'si' : 'no');
|
|
47
|
+
/** Como se muestra cada dato en `arcli config`. */
|
|
48
|
+
const CONFIG_TEXT_VALUES = {
|
|
49
|
+
alicuota: (c) => (c.alicuota ? `${c.alicuota}%` : '21% (por defecto)'),
|
|
50
|
+
aliasCbu: (c) => notSet(c.aliasCbu),
|
|
51
|
+
bruto: (c) => yesNo(c.bruto),
|
|
52
|
+
cbu: (c) => notSet(c.cbu),
|
|
53
|
+
'cert.produccion': (c) => notSet(c.cert.produccion),
|
|
54
|
+
'cert.testing': (c) => notSet(c.cert.testing),
|
|
55
|
+
comprobantesPorLista: (c) => c.comprobantesPorLista ?? `${RECENT_VOUCHERS_LIMIT} (por defecto)`,
|
|
56
|
+
concepto: (c) => notSet(c.concepto),
|
|
57
|
+
cotizacion: (c) => c.cotizacion ?? 1,
|
|
58
|
+
cuit: (c) => notSet(c.cuit),
|
|
59
|
+
'emisor.condicionIva': (c) => c.emisor.condicionIva ?? 'segun la letra',
|
|
60
|
+
'emisor.domicilio': (c) => notSet(c.emisor.domicilio),
|
|
61
|
+
'emisor.iibb': (c) => notSet(c.emisor.iibb),
|
|
62
|
+
'emisor.inicioActividades': (c) => c.emisor.inicioActividades ? formatArcaDateAsArgentineDate(c.emisor.inicioActividades) : NOT_SET,
|
|
63
|
+
'emisor.logo': (c) => notSet(c.emisor.logo),
|
|
64
|
+
'emisor.razonSocial': (c) => notSet(c.emisor.razonSocial),
|
|
65
|
+
emitir: (c) => yesNo(c.emitir),
|
|
66
|
+
entorno: (c) => c.entorno,
|
|
67
|
+
ivaReceptor: (c) => notSet(c.ivaReceptor),
|
|
68
|
+
json: (c) => yesNo(c.json),
|
|
69
|
+
'key.produccion': (c) => notSet(c.key.produccion),
|
|
70
|
+
'key.testing': (c) => notSet(c.key.testing),
|
|
71
|
+
moneda: (c) => c.moneda ?? 'PES',
|
|
72
|
+
pdf: (c) => c.pdf,
|
|
73
|
+
pdfCarpeta: (c) => c.pdfCarpeta,
|
|
74
|
+
pdfNavegador: (c) => c.pdfNavegador ?? 'automatico',
|
|
75
|
+
puntoVenta: (c) => notSet(c.puntoVenta),
|
|
76
|
+
ticketPath: (c) => c.ticketPath,
|
|
77
|
+
verificarFce: (c) => yesNo(c.verificarFce),
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* La configuracion por secciones, en el mismo orden que "Modificar configuracion" del modo interactivo.
|
|
81
|
+
* El peso esta en los valores: titulos en celeste, etiquetas y datos sin cargar atenuados.
|
|
82
|
+
*/
|
|
41
83
|
export function formatConfigAsText(config, paths) {
|
|
42
84
|
const safeConfig = toPublicSnapshot(config, paths);
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
[
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
['Key produccion', safeConfig.key.produccion ?? 'no configurado'],
|
|
58
|
-
['Punto de venta', safeConfig.puntoVenta ?? 'no configurado'],
|
|
59
|
-
['Emitir', safeConfig.emitir ? 'si' : 'no'],
|
|
60
|
-
['Salida JSON', safeConfig.json ? 'si' : 'no'],
|
|
61
|
-
['Salida bruta', safeConfig.bruto ? 'si' : 'no'],
|
|
62
|
-
['Ruta tickets WSAA', safeConfig.ticketPath],
|
|
63
|
-
['PDF', safeConfig.pdf],
|
|
64
|
-
['Carpeta de PDFs', safeConfig.pdfCarpeta],
|
|
65
|
-
['Navegador para PDFs', safeConfig.pdfNavegador ?? 'automatico'],
|
|
66
|
-
['Emisor: razon social', safeConfig.emisor.razonSocial ?? 'no configurado'],
|
|
67
|
-
['Emisor: domicilio', safeConfig.emisor.domicilio ?? 'no configurado'],
|
|
68
|
-
[
|
|
69
|
-
'Emisor: inicio actividades',
|
|
70
|
-
safeConfig.emisor.inicioActividades
|
|
71
|
-
? formatArcaDateAsArgentineDate(safeConfig.emisor.inicioActividades)
|
|
72
|
-
: 'no configurado',
|
|
73
|
-
],
|
|
74
|
-
['Emisor: IIBB', safeConfig.emisor.iibb ?? 'no configurado'],
|
|
75
|
-
['Emisor: condicion IVA', safeConfig.emisor.condicionIva ?? 'segun la letra'],
|
|
76
|
-
['Emisor: logo', safeConfig.emisor.logo ?? 'no configurado'],
|
|
77
|
-
];
|
|
78
|
-
return keyValuePanel('Configuracion', renderKeyValueRows(rows, { labelWidth: resolveKeyValueLabelWidth('standard', rows, [35, 65]) }), undefined, 'standard', undefined, 'sheet');
|
|
85
|
+
const sections = CONFIG_SECTIONS.map((section) => ({
|
|
86
|
+
label: section.label,
|
|
87
|
+
rows: section.keys.map((key) => [CONFIG_LABELS[key], String(CONFIG_TEXT_VALUES[key](safeConfig))]),
|
|
88
|
+
}));
|
|
89
|
+
// Un solo ancho de etiqueta para todas las secciones, asi los valores quedan en la misma columna.
|
|
90
|
+
const labelWidth = resolveKeyValueLabelWidth('standard', sections.flatMap((section) => section.rows), [35, 65]);
|
|
91
|
+
const gap = ' '.repeat(UI_THEME.table.gap);
|
|
92
|
+
const lines = sections.flatMap((section, index) => [
|
|
93
|
+
...(index > 0 ? [''] : []),
|
|
94
|
+
colorize(section.label, 'info'),
|
|
95
|
+
// Los datos van corridos bajo el titulo, asi la seccion se lee aun sin color (NO_COLOR, pipes).
|
|
96
|
+
...section.rows.map(([label, value]) => ` ${colorize(label.padEnd(labelWidth), 'muted')}${gap}${value === NOT_SET ? colorize(value, 'muted') : value}`),
|
|
97
|
+
]);
|
|
98
|
+
return keyValuePanel('Configuracion', lines, undefined, 'standard', undefined, 'sheet');
|
|
79
99
|
}
|
|
80
100
|
export function formatConfigDoctor(report) {
|
|
81
101
|
return JSON.stringify({
|