arcli 1.8.0 → 2.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/CHANGELOG.md +56 -1
- package/README.md +2 -2
- package/dist/cli/commands/billing.command.options.js +17 -15
- package/dist/cli/commands/billing.command.options.js.map +1 -1
- package/dist/cli/commands/billing.command.parser.js +57 -28
- package/dist/cli/commands/billing.command.parser.js.map +1 -1
- package/dist/cli/commands/billing.command.pdf.d.ts +1 -1
- package/dist/cli/commands/billing.command.pdf.js +17 -2
- package/dist/cli/commands/billing.command.pdf.js.map +1 -1
- package/dist/cli/commands/config.command.js +4 -2
- package/dist/cli/commands/config.command.js.map +1 -1
- package/dist/cli/commands/vouchers.command.js +4 -4
- package/dist/cli/commands/vouchers.command.js.map +1 -1
- package/dist/cli/error-output.d.ts +7 -0
- package/dist/cli/error-output.js +26 -0
- package/dist/cli/error-output.js.map +1 -0
- package/dist/cli/help-argv.d.ts +5 -0
- package/dist/cli/help-argv.js +21 -0
- package/dist/cli/help-argv.js.map +1 -0
- package/dist/cli/help.js +3 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.js +14 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/interactive/advanced-options.js +2 -2
- package/dist/cli/interactive/advanced-options.js.map +1 -1
- package/dist/cli/interactive/interactive-mode.js +76 -8
- package/dist/cli/interactive/interactive-mode.js.map +1 -1
- package/dist/cli/interactive/invoice-picker.js +3 -2
- package/dist/cli/interactive/invoice-picker.js.map +1 -1
- package/dist/cli/interactive/note.flow.d.ts +2 -0
- package/dist/cli/interactive/note.flow.js +21 -8
- package/dist/cli/interactive/note.flow.js.map +1 -1
- package/dist/cli/interactive/pdf.flow.js +33 -22
- package/dist/cli/interactive/pdf.flow.js.map +1 -1
- package/dist/cli/interactive/prompts.d.ts +3 -1
- package/dist/cli/interactive/prompts.js +8 -4
- package/dist/cli/interactive/prompts.js.map +1 -1
- package/dist/cli/interactive/repeat.flow.js +22 -7
- package/dist/cli/interactive/repeat.flow.js.map +1 -1
- package/dist/cli/interactive/update.flow.d.ts +6 -0
- package/dist/cli/interactive/update.flow.js +26 -0
- package/dist/cli/interactive/update.flow.js.map +1 -0
- package/dist/cli/interactive/validators.js +8 -4
- package/dist/cli/interactive/validators.js.map +1 -1
- package/dist/cli/option-parsers.d.ts +6 -0
- package/dist/cli/option-parsers.js +34 -0
- package/dist/cli/option-parsers.js.map +1 -0
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/lib/dates/arca-date.d.ts +13 -0
- package/dist/lib/dates/arca-date.js +28 -11
- package/dist/lib/dates/arca-date.js.map +1 -1
- package/dist/lib/errors/app-error.d.ts +3 -0
- package/dist/lib/errors/app-error.js +3 -0
- package/dist/lib/errors/app-error.js.map +1 -1
- package/dist/lib/files/restrict-to-owner.d.ts +7 -0
- package/dist/lib/files/restrict-to-owner.js +19 -0
- package/dist/lib/files/restrict-to-owner.js.map +1 -0
- package/dist/lib/identity/format-cuit.d.ts +2 -0
- package/dist/lib/identity/format-cuit.js +6 -0
- package/dist/lib/identity/format-cuit.js.map +1 -0
- package/dist/lib/numbers/argentine-amount.d.ts +23 -0
- package/dist/lib/numbers/argentine-amount.js +37 -0
- package/dist/lib/numbers/argentine-amount.js.map +1 -0
- package/dist/lib/numbers/strict-integer.d.ts +4 -0
- package/dist/lib/numbers/strict-integer.js +10 -0
- package/dist/lib/numbers/strict-integer.js.map +1 -0
- package/dist/lib/security/pem.js +5 -1
- package/dist/lib/security/pem.js.map +1 -1
- package/dist/modules/billing/billing-response.js +3 -2
- package/dist/modules/billing/billing-response.js.map +1 -1
- package/dist/modules/billing/billing.amounts.d.ts +2 -0
- package/dist/modules/billing/billing.amounts.js +6 -3
- package/dist/modules/billing/billing.amounts.js.map +1 -1
- package/dist/modules/billing/billing.associated-vouchers.js +14 -3
- package/dist/modules/billing/billing.associated-vouchers.js.map +1 -1
- package/dist/modules/billing/billing.batch.js +6 -0
- package/dist/modules/billing/billing.batch.js.map +1 -1
- package/dist/modules/billing/billing.date-range.js +14 -9
- package/dist/modules/billing/billing.date-range.js.map +1 -1
- package/dist/modules/billing/billing.display.js +4 -4
- package/dist/modules/billing/billing.display.js.map +1 -1
- package/dist/modules/billing/billing.errors.d.ts +12 -0
- package/dist/modules/billing/billing.errors.js +18 -0
- package/dist/modules/billing/billing.errors.js.map +1 -0
- package/dist/modules/billing/billing.schemas.js +13 -5
- package/dist/modules/billing/billing.schemas.js.map +1 -1
- package/dist/modules/billing/billing.service.js +10 -3
- package/dist/modules/billing/billing.service.js.map +1 -1
- package/dist/modules/billing/billing.validation.js +4 -0
- package/dist/modules/billing/billing.validation.js.map +1 -1
- package/dist/modules/config/config-value-parser.js +12 -10
- package/dist/modules/config/config-value-parser.js.map +1 -1
- package/dist/modules/config/config.schemas.d.ts +2 -2
- package/dist/modules/config/config.service.d.ts +5 -0
- package/dist/modules/config/config.service.js +29 -6
- package/dist/modules/config/config.service.js.map +1 -1
- package/dist/modules/examples/examples.js +5 -1
- package/dist/modules/examples/examples.js.map +1 -1
- package/dist/modules/interactive/amount-input.d.ts +3 -5
- package/dist/modules/interactive/amount-input.js +9 -26
- package/dist/modules/interactive/amount-input.js.map +1 -1
- package/dist/modules/interactive/config-fields.js +2 -1
- package/dist/modules/interactive/config-fields.js.map +1 -1
- package/dist/modules/interactive/equivalent-command.js +6 -8
- package/dist/modules/interactive/equivalent-command.js.map +1 -1
- package/dist/modules/interactive/invoice-copy.d.ts +19 -0
- package/dist/modules/interactive/invoice-copy.js +26 -0
- package/dist/modules/interactive/invoice-copy.js.map +1 -0
- package/dist/modules/interactive/periods.d.ts +2 -2
- package/dist/modules/interactive/periods.js +8 -4
- package/dist/modules/interactive/periods.js.map +1 -1
- package/dist/modules/parameters/health.d.ts +17 -0
- package/dist/modules/parameters/health.js +29 -0
- package/dist/modules/parameters/health.js.map +1 -0
- package/dist/modules/pdf/pdf.errors.d.ts +0 -1
- package/dist/modules/pdf/pdf.errors.js +1 -3
- package/dist/modules/pdf/pdf.errors.js.map +1 -1
- package/dist/modules/storybook/showcase.js +4 -1
- package/dist/modules/storybook/showcase.js.map +1 -1
- package/dist/modules/update-check/changelog.d.ts +23 -0
- package/dist/modules/update-check/changelog.js +99 -0
- package/dist/modules/update-check/changelog.js.map +1 -0
- package/dist/modules/update-check/update-check.presenter.d.ts +4 -0
- package/dist/modules/update-check/update-check.presenter.js +80 -2
- package/dist/modules/update-check/update-check.presenter.js.map +1 -1
- package/dist/modules/update-check/update-check.service.d.ts +3 -0
- package/dist/modules/update-check/update-check.service.js +2 -2
- package/dist/modules/update-check/update-check.service.js.map +1 -1
- package/dist/modules/vouchers/voucher-history.presenter.d.ts +3 -3
- package/dist/modules/vouchers/voucher-history.presenter.js +27 -7
- package/dist/modules/vouchers/voucher-history.presenter.js.map +1 -1
- package/dist/services/arca/arca-context.resolver.js +5 -0
- package/dist/services/arca/arca-context.resolver.js.map +1 -1
- package/dist/services/clipboard/clipboard.d.ts +2 -0
- package/dist/services/clipboard/clipboard.js +17 -0
- package/dist/services/clipboard/clipboard.js.map +1 -0
- package/dist/services/pdf/escape-html.d.ts +6 -0
- package/dist/services/pdf/escape-html.js +25 -0
- package/dist/services/pdf/escape-html.js.map +1 -0
- package/dist/services/pdf/pdf-exporter.js +2 -1
- package/dist/services/pdf/pdf-exporter.js.map +1 -1
- package/dist/ui/components/statusBar.d.ts +15 -4
- package/dist/ui/components/statusBar.js +16 -11
- package/dist/ui/components/statusBar.js.map +1 -1
- package/dist/ui/presenters/errors.presenter.js +5 -4
- package/dist/ui/presenters/errors.presenter.js.map +1 -1
- package/dist/ui/primitives/renderLogo.d.ts +2 -1
- package/dist/ui/primitives/renderLogo.js +21 -4
- package/dist/ui/primitives/renderLogo.js.map +1 -1
- package/dist/ui/primitives/renderPanel.d.ts +2 -0
- package/dist/ui/primitives/renderPanel.js +15 -5
- package/dist/ui/primitives/renderPanel.js.map +1 -1
- package/dist/ui/stream/terminal-stream.d.ts +6 -0
- package/dist/ui/stream/terminal-stream.js +15 -1
- package/dist/ui/stream/terminal-stream.js.map +1 -1
- package/dist/ui/theme/theme.d.ts +3 -3
- package/dist/ui/theme/theme.js +14 -3
- package/dist/ui/theme/theme.js.map +1 -1
- package/llms.txt +10 -8
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { PdfError } from '../../modules/pdf/pdf.errors.js';
|
|
|
5
5
|
import { mapBillingResultToPdfData } from '../../modules/pdf/pdf-data.mapper.js';
|
|
6
6
|
import { buildPdfFileName } from '../../modules/pdf/pdf-file-name.js';
|
|
7
7
|
import { resolvePdfIssuer } from '../../modules/pdf/pdf-issuer.js';
|
|
8
|
+
import { escapeHtmlStrings } from './escape-html.js';
|
|
8
9
|
export const TESTING_FOOTER = 'COMPROBANTE DE PRUEBA - SIN VALIDEZ FISCAL';
|
|
9
10
|
export function toPdfFailure(error) {
|
|
10
11
|
if (error instanceof PdfError) {
|
|
@@ -37,7 +38,7 @@ export async function exportBillingPdf(input) {
|
|
|
37
38
|
footerText: result.environment === 'testing' ? TESTING_FOOTER : undefined,
|
|
38
39
|
logo: readLogoAsDataUrl(input.config.emisor.logo),
|
|
39
40
|
};
|
|
40
|
-
const bytes = await input.renderer.render(data, options);
|
|
41
|
+
const bytes = await input.renderer.render(escapeHtmlStrings(data), options);
|
|
41
42
|
const folder = resolvePdfTargetFolder(input.folder, result.environment);
|
|
42
43
|
const path = join(folder, buildPdfFileName(result.voucherKind, data.puntoVenta, data.cbteDesde));
|
|
43
44
|
mkdirSync(folder, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-exporter.js","sourceRoot":"","sources":["../../../src/services/pdf/pdf-exporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf-exporter.js","sourceRoot":"","sources":["../../../src/services/pdf/pdf-exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { type UiTextColor } from '../primitives/text';
|
|
2
|
+
/** Ancho de la barra de estado: el preset `wide`, o menos si la terminal es mas angosta. */
|
|
3
|
+
export declare function statusBarWidth(): number;
|
|
4
|
+
/** Un dato de la barra. */
|
|
5
|
+
export interface StatusBarSegment {
|
|
6
|
+
readonly color?: UiTextColor;
|
|
7
|
+
readonly text: string;
|
|
8
|
+
}
|
|
9
|
+
/** Como se separan los datos de un lado: con ` · ` o con un tramo de la misma linea de la barra (` ━ `). */
|
|
10
|
+
export type StatusBarSeparator = 'dot' | 'rule';
|
|
11
|
+
export interface StatusBarOptions {
|
|
12
|
+
readonly leftSeparator?: StatusBarSeparator;
|
|
13
|
+
readonly rightSeparator?: StatusBarSeparator;
|
|
14
|
+
}
|
|
2
15
|
/**
|
|
3
16
|
* Barra de una linea con el contexto de la sesion, como la barra de estado de un editor:
|
|
4
|
-
* `━━
|
|
17
|
+
* `━━ izquierda · ... ━━━━━━━━━━━━ derecha ━ ... ━━`. No es una caja: no compite con los paneles de contenido.
|
|
5
18
|
*/
|
|
6
|
-
|
|
7
|
-
export declare function statusBarWidth(): number;
|
|
8
|
-
export declare function statusBar(title: string, status: string, statusColor?: UiTextColor): string;
|
|
19
|
+
export declare function statusBar(left: readonly StatusBarSegment[], right?: readonly StatusBarSegment[], options?: StatusBarOptions): string;
|
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
import { usesAsciiBorders } from '../primitives/renderPanel.js';
|
|
2
2
|
import { fitToTerminal } from '../primitives/terminalWidth.js';
|
|
3
|
-
import {
|
|
3
|
+
import { colorize, stripAnsi } from '../primitives/text.js';
|
|
4
4
|
import { UI_THEME } from '../theme/theme.js';
|
|
5
|
-
/**
|
|
6
|
-
* Barra de una linea con el contexto de la sesion, como la barra de estado de un editor:
|
|
7
|
-
* `━━ TITULO ━━━━━━━━━━━━ estado ━━`. No es una caja: no compite con los paneles de contenido.
|
|
8
|
-
*/
|
|
9
5
|
/** Ancho de la barra de estado: el preset `wide`, o menos si la terminal es mas angosta. */
|
|
10
6
|
export function statusBarWidth() {
|
|
11
7
|
return fitToTerminal(UI_THEME.widths.wide.min);
|
|
12
8
|
}
|
|
13
|
-
|
|
9
|
+
function renderSegments(segments, separator, fill) {
|
|
10
|
+
return segments
|
|
11
|
+
.map(({ color, text }) => (color ? colorize(text, color) : text))
|
|
12
|
+
.join(colorize(` ${separator === 'rule' ? fill : '·'} `, 'muted'));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Barra de una linea con el contexto de la sesion, como la barra de estado de un editor:
|
|
16
|
+
* `━━ izquierda · ... ━━━━━━━━━━━━ derecha ━ ... ━━`. No es una caja: no compite con los paneles de contenido.
|
|
17
|
+
*/
|
|
18
|
+
export function statusBar(left, right = [], options = {}) {
|
|
14
19
|
const fill = usesAsciiBorders() ? '=' : '━';
|
|
15
20
|
const width = statusBarWidth();
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const used = 2 + stripAnsi(
|
|
21
|
+
const leftText = ` ${renderSegments(left, options.leftSeparator ?? 'dot', fill)} `;
|
|
22
|
+
const rightText = right.length > 0 ? ` ${renderSegments(right, options.rightSeparator ?? 'dot', fill)} ` : '';
|
|
23
|
+
const used = 2 + stripAnsi(leftText).length + stripAnsi(rightText).length + 2;
|
|
19
24
|
const middle = Math.max(2, width - used);
|
|
20
25
|
return [
|
|
21
26
|
colorize(fill.repeat(2), 'muted'),
|
|
22
|
-
|
|
27
|
+
leftText,
|
|
23
28
|
colorize(fill.repeat(middle), 'muted'),
|
|
24
|
-
|
|
29
|
+
rightText,
|
|
25
30
|
colorize(fill.repeat(2), 'muted'),
|
|
26
31
|
].join('');
|
|
27
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusBar.js","sourceRoot":"","sources":["../../../src/ui/components/statusBar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"statusBar.js","sourceRoot":"","sources":["../../../src/ui/components/statusBar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,4FAA4F;AAC5F,MAAM,UAAU,cAAc;IAC5B,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC;AAgBD,SAAS,cAAc,CAAC,QAAqC,EAAE,SAA6B,EAAE,IAAY;IACxG,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,IAAiC,EACjC,QAAqC,EAAE,EACvC,UAA4B,EAAE;IAE9B,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5C,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,IAAI,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;IACnF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IAEzC,OAAO;QACL,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACjC,QAAQ;QACR,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QACtC,SAAS;QACT,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;KAClC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ZodError } from 'zod';
|
|
2
2
|
import { AppError } from '../../lib/errors/app-error.js';
|
|
3
|
-
import { PdfError } from '../../modules/pdf/pdf.errors.js';
|
|
4
3
|
import { errorPanel } from '../components/errorPanel.js';
|
|
5
4
|
import { renderJson } from '../primitives/renderJson.js';
|
|
6
5
|
import { bold } from '../primitives/text.js';
|
|
@@ -15,6 +14,8 @@ function formatErrorTitle(code) {
|
|
|
15
14
|
return 'Lote invalido';
|
|
16
15
|
case 'BATCH_EMISSION_ERROR':
|
|
17
16
|
return 'Lote interrumpido';
|
|
17
|
+
case 'EMISSION_UNCERTAIN':
|
|
18
|
+
return 'Emision sin confirmar';
|
|
18
19
|
case 'PDF_GENERATION_ERROR':
|
|
19
20
|
case 'PDF_ISSUER_INCOMPLETE':
|
|
20
21
|
case 'PDF_PLUGIN_MISSING':
|
|
@@ -26,7 +27,7 @@ function formatErrorTitle(code) {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
function formatErrorHint(error) {
|
|
29
|
-
if (error
|
|
30
|
+
if (error.suggestion) {
|
|
30
31
|
return error.suggestion;
|
|
31
32
|
}
|
|
32
33
|
switch (error.code) {
|
|
@@ -37,7 +38,7 @@ function formatErrorHint(error) {
|
|
|
37
38
|
case 'BATCH_VALIDATION_ERROR':
|
|
38
39
|
return 'Corrija esos comprobantes en el archivo y vuelva a correr el lote completo.';
|
|
39
40
|
case 'BATCH_EMISSION_ERROR':
|
|
40
|
-
return 'Los comprobantes de arriba ya se emitieron: no los vuelva a cargar.
|
|
41
|
+
return 'Los comprobantes de arriba ya se emitieron: no los vuelva a cargar. Antes de reintentar el que fallo, verifique con `arcli ultimos` si se emitio; despues reintente los que quedaron sin procesar.';
|
|
41
42
|
default:
|
|
42
43
|
return null;
|
|
43
44
|
}
|
|
@@ -88,7 +89,7 @@ export function formatCliError(error, useJson) {
|
|
|
88
89
|
codigo: error.code,
|
|
89
90
|
detalles: formatErrorDetailsAsJson(error.details),
|
|
90
91
|
error: error.message,
|
|
91
|
-
...(error
|
|
92
|
+
...(error.suggestion ? { sugerencia: error.suggestion } : {}),
|
|
92
93
|
});
|
|
93
94
|
}
|
|
94
95
|
const details = formatErrorDetails(error.details);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/errors.presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"errors.presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/errors.presenter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { UI_THEME } from '../theme/theme.js';
|
|
2
|
+
import { fitToTerminal } from './terminalWidth.js';
|
|
1
3
|
import { colorize } from './text.js';
|
|
2
4
|
export const ARCLI_ASCII_BANNER = [
|
|
3
5
|
' d8888 8888888b. .d8888b. 888 8888888 ',
|
|
@@ -13,21 +15,36 @@ export const ARCLI_ASCII_BANNER = [
|
|
|
13
15
|
// segun las columnas en blanco de ARCLI_ASCII_BANNER (letras separadas por
|
|
14
16
|
// una columna vacia en las 8 filas: 12, 23, 34, 43).
|
|
15
17
|
const ARCLI_BANNER_AR_CLI_SPLIT_COLUMN = 23;
|
|
18
|
+
// Ultima columna con trazo de ARCLI_ASCII_BANNER (el final de la "I"): la firma termina justo debajo.
|
|
19
|
+
const BANNER_LAST_COLUMN = 50;
|
|
20
|
+
const CREDIT = 'LcsGrz';
|
|
21
|
+
/** Debajo del logo, en gris y alineado al final de la "I": `v1.8.0 | LcsGrz`, o solo la firma sin version. */
|
|
22
|
+
function renderLogoFooter(version) {
|
|
23
|
+
const footer = version ? `v${version} | ${CREDIT}` : CREDIT;
|
|
24
|
+
return colorize(footer.padStart(BANNER_LAST_COLUMN + 1), 'muted');
|
|
25
|
+
}
|
|
16
26
|
function renderLogoWidth() {
|
|
17
27
|
return ARCLI_ASCII_BANNER.split('\n')[0]?.length ?? 0;
|
|
18
28
|
}
|
|
19
|
-
|
|
29
|
+
/** Sangria para centrar el logo en el ancho de las cajas y de la barra de estado. */
|
|
30
|
+
function logoIndent() {
|
|
31
|
+
const visibleWidth = BANNER_LAST_COLUMN + 1;
|
|
32
|
+
return ' '.repeat(Math.max(0, Math.floor((fitToTerminal(UI_THEME.widths.wide.min) - visibleWidth) / 2)));
|
|
33
|
+
}
|
|
34
|
+
/** El logo de ARCLI, centrado; con `version`, la muestra debajo, junto a la firma. */
|
|
35
|
+
export function renderLogo(version) {
|
|
20
36
|
const columns = process.stdout.columns;
|
|
21
37
|
// En una terminal mas angosta que el dibujo, cada linea se partiria: se muestra solo el nombre.
|
|
22
38
|
if (columns && columns < renderLogoWidth()) {
|
|
23
|
-
|
|
39
|
+
const suffix = version ? ` ${colorize(`v${version}`, 'muted')}` : '';
|
|
40
|
+
return `\n${colorize('AR', 'info')}${colorize('CLI', 'neutral')}${suffix}\n`;
|
|
24
41
|
}
|
|
25
42
|
const logo = ARCLI_ASCII_BANNER.split('\n').map((line) => {
|
|
26
43
|
const ar = line.slice(0, ARCLI_BANNER_AR_CLI_SPLIT_COLUMN);
|
|
27
44
|
const cli = line.slice(ARCLI_BANNER_AR_CLI_SPLIT_COLUMN);
|
|
28
45
|
return `${colorize(ar, 'info')}${colorize(cli, 'neutral')}`;
|
|
29
46
|
});
|
|
30
|
-
const
|
|
31
|
-
return `\n\n${[...logo,
|
|
47
|
+
const indent = logoIndent();
|
|
48
|
+
return `\n\n${[...logo, renderLogoFooter(version)].map((line) => `${indent}${line}`).join('\n')}\n\n`;
|
|
32
49
|
}
|
|
33
50
|
//# sourceMappingURL=renderLogo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderLogo.js","sourceRoot":"","sources":["../../../src/ui/primitives/renderLogo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;CACvD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,4EAA4E;AAC5E,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAE5C,SAAS,eAAe;IACtB,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU;
|
|
1
|
+
{"version":3,"file":"renderLogo.js","sourceRoot":"","sources":["../../../src/ui/primitives/renderLogo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;CACvD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,4EAA4E;AAC5E,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAE5C,sGAAsG;AACtG,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB,8GAA8G;AAC9G,SAAS,gBAAgB,CAAC,OAA2B;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAE5D,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,qFAAqF;AACrF,SAAS,UAAU;IACjB,MAAM,YAAY,GAAG,kBAAkB,GAAG,CAAC,CAAC;IAE5C,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAEvC,gGAAgG;IAChG,IAAI,OAAO,IAAI,OAAO,GAAG,eAAe,EAAE,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAErE,OAAO,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC;IAC/E,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACvD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEzD,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,OAAO,OAAO,CAAC,GAAG,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACxG,CAAC"}
|
|
@@ -12,6 +12,8 @@ export interface RenderPanelProps {
|
|
|
12
12
|
readonly footerDivider?: boolean;
|
|
13
13
|
readonly maxWidth?: UiWidthPreset | number;
|
|
14
14
|
readonly padding?: Partial<BoxenSpacing>;
|
|
15
|
+
/** Solo `command`: deja las lineas en blanco (con su barra) en lugar de sacarlas. */
|
|
16
|
+
readonly preserveBlankLines?: boolean;
|
|
15
17
|
readonly subtitle?: string;
|
|
16
18
|
readonly subtitleColor?: UiTextColor;
|
|
17
19
|
readonly title?: string;
|
|
@@ -3,7 +3,7 @@ import { UI_THEME } from '../theme/theme.js';
|
|
|
3
3
|
import { renderDivider } from './renderDivider.js';
|
|
4
4
|
import { renderFooter } from './renderFooter.js';
|
|
5
5
|
import { renderSubtitle } from './renderSubtitle.js';
|
|
6
|
-
import { resolveTerminalColumns } from './terminalWidth.js';
|
|
6
|
+
import { fitToTerminal, resolveTerminalColumns } from './terminalWidth.js';
|
|
7
7
|
import { bold, centerLineBlock, centerLines, colorize, flattenVisibleLines, maxVisibleWidth, stripAnsi, wrapIndentedPlainText, } from './text.js';
|
|
8
8
|
function resolvePadding(padding) {
|
|
9
9
|
const base = UI_THEME.spacing.panelPadding;
|
|
@@ -72,9 +72,8 @@ function renderCommandBlock(props) {
|
|
|
72
72
|
const bar = colorize(usesAsciiBorders() ? UI_THEME.commandBar.ascii : UI_THEME.commandBar.unicode, 'info');
|
|
73
73
|
const lines = typeof props.content === 'string' ? props.content.split('\n') : [...props.content];
|
|
74
74
|
const titleLines = props.title ? [formatTitle(props.title, props.titleColor) ?? ''] : [];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
.join('\n');
|
|
75
|
+
const contentLines = props.preserveBlankLines ? lines : lines.filter((line) => stripAnsi(line).trim().length > 0);
|
|
76
|
+
return [...titleLines, ...contentLines].map((line) => `${bar}${line}`.trimEnd()).join('\n');
|
|
78
77
|
}
|
|
79
78
|
function formatTitle(title, color) {
|
|
80
79
|
if (!title) {
|
|
@@ -156,6 +155,17 @@ export function renderPanel(props) {
|
|
|
156
155
|
titleAlignment: props.titleAlignment ?? borderStyle.titleAlignment ?? 'center',
|
|
157
156
|
width: panelWidth,
|
|
158
157
|
});
|
|
159
|
-
|
|
158
|
+
const panel = footerDividerLine && borderStyle.junction ? joinDividers(box, borderStyle.junction) : box;
|
|
159
|
+
return borderType === 'ticket' ? centerInContentWidth(panel, panelWidth) : panel;
|
|
160
|
+
}
|
|
161
|
+
/** Centra el panel en el ancho comun de las cajas y la barra de estado (o el de la terminal, si es menor). */
|
|
162
|
+
function centerInContentWidth(panel, panelWidth) {
|
|
163
|
+
const indent = ' '.repeat(Math.max(0, Math.floor((fitToTerminal(UI_THEME.widths.wide.min) - panelWidth) / 2)));
|
|
164
|
+
return indent
|
|
165
|
+
? panel
|
|
166
|
+
.split('\n')
|
|
167
|
+
.map((line) => `${indent}${line}`)
|
|
168
|
+
.join('\n')
|
|
169
|
+
: panel;
|
|
160
170
|
}
|
|
161
171
|
//# sourceMappingURL=renderPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderPanel.js","sourceRoot":"","sources":["../../../src/ui/primitives/renderPanel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAqE,MAAM,OAAO,CAAC;AAE1F,OAAO,EAAE,QAAQ,EAA6D,MAAM,gBAAgB,CAAC;AAErG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"renderPanel.js","sourceRoot":"","sources":["../../../src/ui/primitives/renderPanel.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,12 @@ interface TerminalStreamOptions {
|
|
|
2
2
|
readonly json?: boolean;
|
|
3
3
|
readonly target?: 'stderr' | 'stdout';
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* Lo que se muestra incluye textos de afuera (observaciones de ARCA, datos del JSON, errores de npm). Solo pasan
|
|
7
|
+
* los colores (SGR), saltos de linea y tabs: un texto no puede mover el cursor, borrar la pantalla ni pisar una
|
|
8
|
+
* linea para ocultar, por ejemplo, el aviso de PRODUCCION.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sanitizeTerminalText(content: string): string;
|
|
5
11
|
export declare function formatTerminalOutput(content: string, options?: TerminalStreamOptions): string;
|
|
6
12
|
export declare function writeTerminalOutput(content: string): void;
|
|
7
13
|
export declare function writeTerminalJson(content: string): void;
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { highlightJsonValues } from '../primitives/renderJson.js';
|
|
2
2
|
import { supportsColor } from '../primitives/text.js';
|
|
3
|
+
// OSC (titulo, hipervinculos), CSI (cursor, borrar pantalla, colores), otros ESC y caracteres de control sueltos.
|
|
4
|
+
/* eslint-disable no-control-regex */
|
|
5
|
+
const TERMINAL_SEQUENCES = /\u001B\][\s\S]*?(?:\u0007|\u001B\\)|\u001B\[[0-?]*[ -/]*[@-~]|\u001B[@-~]|[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;
|
|
6
|
+
const COLOR_SEQUENCE = /^\u001B\[[0-9;]*m$/;
|
|
7
|
+
/* eslint-enable no-control-regex */
|
|
8
|
+
/**
|
|
9
|
+
* Lo que se muestra incluye textos de afuera (observaciones de ARCA, datos del JSON, errores de npm). Solo pasan
|
|
10
|
+
* los colores (SGR), saltos de linea y tabs: un texto no puede mover el cursor, borrar la pantalla ni pisar una
|
|
11
|
+
* linea para ocultar, por ejemplo, el aviso de PRODUCCION.
|
|
12
|
+
*/
|
|
13
|
+
export function sanitizeTerminalText(content) {
|
|
14
|
+
return content.replace(TERMINAL_SEQUENCES, (sequence) => (COLOR_SEQUENCE.test(sequence) ? sequence : ''));
|
|
15
|
+
}
|
|
3
16
|
export function formatTerminalOutput(content, options = {}) {
|
|
4
17
|
const target = options.target ?? 'stdout';
|
|
5
|
-
const
|
|
18
|
+
const safeContent = sanitizeTerminalText(content);
|
|
19
|
+
const renderedContent = options.json && supportsColor(target) ? highlightJsonValues(safeContent, target) : safeContent;
|
|
6
20
|
return `\n${renderedContent}\n\n`;
|
|
7
21
|
}
|
|
8
22
|
export function writeTerminalOutput(content) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-stream.js","sourceRoot":"","sources":["../../../src/ui/stream/terminal-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,UAAiC,EAAE;IACvF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"terminal-stream.js","sourceRoot":"","sources":["../../../src/ui/stream/terminal-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,kHAAkH;AAClH,qCAAqC;AACrC,MAAM,kBAAkB,GACtB,sHAAsH,CAAC;AACzH,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAC5C,oCAAoC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,UAAiC,EAAE;IACvF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC1C,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GACnB,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAEjG,OAAO,KAAK,eAAe,MAAM,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC"}
|
package/dist/ui/theme/theme.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { Spacing as BoxenSpacing } from 'boxen';
|
|
|
2
2
|
/**
|
|
3
3
|
* Tipo de borde segun lo que se muestra:
|
|
4
4
|
* - common: paneles de contenido (configuracion, observaciones, sugerencias, avisos FCE)
|
|
5
|
-
* - ticket: comprobante, como common pero con la linea de corte punteada antes del estado
|
|
5
|
+
* - ticket: comprobante, como common pero con la linea de corte punteada antes del estado; va centrado
|
|
6
6
|
* - error: errores del CLI o de ARCA (redondeado con franja gruesa a la izquierda)
|
|
7
7
|
* - attention: observaciones y avisos (como error, con la franja a trazos)
|
|
8
8
|
* - tip: sugerencias (como error, con la franja fina punteada)
|
|
@@ -34,8 +34,8 @@ export interface UiBorderStyle {
|
|
|
34
34
|
/** Alineacion del titulo sobre el borde; por defecto, centrado. */
|
|
35
35
|
readonly titleAlignment?: 'center' | 'left';
|
|
36
36
|
}
|
|
37
|
-
export type UiColorToken = 'danger' | 'debug' | 'info' | 'muted' | 'neutral' | 'subtle' | 'success' | 'warning';
|
|
38
|
-
export type UiWidthPreset = 'compact' | 'standard' | 'wide';
|
|
37
|
+
export type UiColorToken = 'danger' | 'debug' | 'highlight' | 'info' | 'muted' | 'neutral' | 'production' | 'subtle' | 'success' | 'testing' | 'warning';
|
|
38
|
+
export type UiWidthPreset = 'compact' | 'standard' | 'ticket' | 'wide';
|
|
39
39
|
export interface UiWidthRange {
|
|
40
40
|
readonly max: number;
|
|
41
41
|
readonly min: number;
|
package/dist/ui/theme/theme.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const CONTENT_WIDTH = { max: 92, min: 92 };
|
|
1
2
|
export const UI_THEME = {
|
|
2
3
|
badgeBrackets: ['[', ']'],
|
|
3
4
|
asciiBorderStyle: {
|
|
@@ -183,14 +184,20 @@ export const UI_THEME = {
|
|
|
183
184
|
colors: {
|
|
184
185
|
danger: '\u001B[31m',
|
|
185
186
|
debug: '\u001B[95m',
|
|
187
|
+
// Naranja amarillento (paleta de 256 colores): para invitar a una accion, como actualizar arcli.
|
|
188
|
+
highlight: '\u001B[38;5;214m',
|
|
186
189
|
info: '\u001B[36m',
|
|
187
190
|
muted: '\u001B[2m',
|
|
188
191
|
// Color por defecto de la terminal: claro en fondos oscuros y oscuro en fondos claros.
|
|
189
192
|
// Un blanco fijo (\u001B[37m) casi no se leia en terminales con fondo claro.
|
|
190
193
|
neutral: '\u001B[39m',
|
|
194
|
+
// Entornos en la barra del modo interactivo (paleta de 256 colores): celeste para produccion.
|
|
195
|
+
production: '\u001B[38;5;117m',
|
|
191
196
|
// Gris (bright black): para titulos de datos crudos, que tienen que verse pero sin competir.
|
|
192
197
|
subtle: '\u001B[90m',
|
|
193
198
|
success: '\u001B[32m',
|
|
199
|
+
// Naranja para testing; mas rojizo que `highlight`, para no confundirlo con el boton de actualizar.
|
|
200
|
+
testing: '\u001B[38;5;208m',
|
|
194
201
|
warning: '\u001B[33m',
|
|
195
202
|
},
|
|
196
203
|
headingLineMinWidth: 18,
|
|
@@ -210,10 +217,14 @@ export const UI_THEME = {
|
|
|
210
217
|
gap: 2,
|
|
211
218
|
labelWidth: 30,
|
|
212
219
|
},
|
|
220
|
+
// Un solo ancho para todas las cajas, igual al de la barra de estado y al que centra el logo, asi todo ocupa
|
|
221
|
+
// el mismo espacio. En una terminal mas angosta se achica (ver renderPanel y fitToTerminal).
|
|
213
222
|
widths: {
|
|
214
|
-
compact:
|
|
215
|
-
standard:
|
|
216
|
-
|
|
223
|
+
compact: CONTENT_WIDTH,
|
|
224
|
+
standard: CONTENT_WIDTH,
|
|
225
|
+
// Los comprobantes son mas angostos, como un ticket, y van centrados en CONTENT_WIDTH.
|
|
226
|
+
ticket: { max: 80, min: 68 },
|
|
227
|
+
wide: CONTENT_WIDTH,
|
|
217
228
|
},
|
|
218
229
|
};
|
|
219
230
|
//# sourceMappingURL=theme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AA8FA,MAAM,aAAa,GAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,gBAAgB,EAAE;QAChB,GAAG,EAAE;YACH,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG;YACV,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,GAAG;SACd;QACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;KAC1B;IACD,YAAY,EAAE;QACZ,SAAS,EAAE;YACT,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;SACF;QACD,SAAS,EAAE;YACT,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAC1B;QACD,MAAM,EAAE;YACN,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;SACF;QACD,IAAI,EAAE;YACJ,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAC1B;QACD,KAAK,EAAE;YACL,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;SACF;QACD,KAAK,EAAE;YACL,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;SACF;QACD,IAAI,EAAE;YACJ,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAC1B;QACD,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,cAAc,EAAE,MAAM;SACvB;QACD,IAAI,EAAE;YACJ,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;SACF;QACD,KAAK,EAAE;YACL,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YACzB,cAAc,EAAE,MAAM;SACvB;QACD,MAAM,EAAE;YACN,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAC1B;QACD,GAAG,EAAE;YACH,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;SACF;QACD,OAAO,EAAE;YACP,GAAG,EAAE;gBACH,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;SAC1B;KACF;IACD,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1C,MAAM,EAAE;QACN,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,YAAY;QACnB,iGAAiG;QACjG,SAAS,EAAE,kBAAkB;QAC7B,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,WAAW;QAClB,uFAAuF;QACvF,6EAA6E;QAC7E,OAAO,EAAE,YAAY;QACrB,8FAA8F;QAC9F,UAAU,EAAE,kBAAkB;QAC9B,6FAA6F;QAC7F,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,YAAY;QACrB,oGAAoG;QACpG,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE,YAAY;KACtB;IACD,mBAAmB,EAAE,EAAE;IACvB,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;SACX;QACD,YAAY,EAAE;YACZ,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;SACR;KACF;IACD,KAAK,EAAE;QACL,GAAG,EAAE,CAAC;QACN,UAAU,EAAE,EAAE;KACf;IACD,6GAA6G;IAC7G,6FAA6F;IAC7F,MAAM,EAAE;QACN,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,aAAa;QACvB,uFAAuF;QACvF,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAC5B,IAAI,EAAE,aAAa;KACpB;CACF,CAAC"}
|
package/llms.txt
CHANGED
|
@@ -50,20 +50,20 @@ Shortcuts (`family` = comando alternativo `arcli <family> <letra>`, ej. `arcli f
|
|
|
50
50
|
|
|
51
51
|
## Flags principales (alias corto entre paréntesis)
|
|
52
52
|
|
|
53
|
-
- `-m, --monto <n>`: importe total (requerido).
|
|
53
|
+
- `-m, --monto <n>`: importe total (requerido). Montos en formato argentino: punto para miles, coma para decimales (`15000`, `15.000`, `1.500,50`). `1500.50` da error; máximo 2 decimales (la cotización, 6). Aplica a `--monto`, `--exento`, `--nogravado`, `--cm` y `--alicuota TASA:MONTO`. En JSON los montos son números, también con 2 decimales como máximo. Enteros (`--pv`, `--ar`, `--dia`…) solo con dígitos; `--cuit`/`--cuil`/`--dni` aceptan guiones.
|
|
54
54
|
- Concepto: `--concepto <tipo>` (`productos`/`servicios`/`productos-servicios`) o atajos `--cs` `--cp` `--csp`. Uno solo, no combinar `--concepto` con un atajo.
|
|
55
55
|
- IVA receptor: `--iva-receptor <tipo>` / `--ir <tipo>` (alias) o un atajo `--ir-ce|--ir-cf|--ir-il|--ir-ina|--ir-ms|--ir-mtip|--ir-pe|--ir-ri|--ir-rm|--ir-se|--ir-snc`. Usar exactamente una forma.
|
|
56
56
|
Valores válidos: `cliente-del-exterior`, `consumidor-final`, `iva-liberado`, `iva-no-alcanzado`, `monotributista-social`, `monotributo-trabajador-independiente-promovido`, `proveedor-del-exterior`, `responsable-inscripto`, `responsable-monotributo`, `sujeto-exento`, `sujeto-no-categorizado`.
|
|
57
57
|
El IVA receptor tiene que ser válido para la letra: `A` solo admite `responsable-inscripto`, `responsable-monotributo`, `monotributista-social` y `monotributo-trabajador-independiente-promovido`; `B` admite el resto; `C` admite todos. Letras `A` y `B` siempre discriminan IVA al 21%.
|
|
58
|
-
- IVA (solo letras A y B): `--alicuota general|reducida|incrementada|cero` o el número `0|2.5|5|10.5|21|27` (default `config.alicuota` o 21; la config no aplica a C). Varias alícuotas: repetir `--alicuota TASA:MONTO` con el monto IVA incluido de cada una (`--alicuota general:1210 --alicuota reducida:552
|
|
58
|
+
- IVA (solo letras A y B): `--alicuota general|reducida|incrementada|cero` o el número `0|2.5|5|10.5|21|27` (default `config.alicuota` o 21; la config no aplica a C). Varias alícuotas: repetir `--alicuota TASA:MONTO` con el monto IVA incluido de cada una (`--alicuota general:1210 --alicuota reducida:552,50`); `--monto` pasa a ser opcional y, si se pasa, tiene que coincidir con la suma. En JSON: `alicuotas: [{tasa, monto}]`. Además, `--exento <monto>` y `--nogravado <monto>` (sin guion). `--monto` es siempre el total; exento y no gravado se descuentan y el IVA se calcula sobre el resto. En letra C esos flags dan error.
|
|
59
59
|
- Identidad del receptor: `--cuit <n>` / `--cuil <n>` / `--dni <n>` / `--consumidor-final` (alias `--cfinal`, documento 0). Usar como máximo una. Desde $10.000.000 (total × cotización) no se puede usar `--consumidor-final`: identificar con `--dni`/`--cuit`/`--cuil` y `--ir-cf`.
|
|
60
60
|
- Punto de venta: `--punto-venta <n>` (alias `--pv`). Si no se pasa, usa el default de config.
|
|
61
61
|
- Moneda: `--moneda <codigo>` (alias `--mda`, ej. `ARS`/`USD`; `USD` se envía como `DOL`) y `--cotizacion-moneda <n>` (alias `--cm`). En moneda extranjera la cotización es obligatoria y no puede ser 1; si el pago es en la misma moneda extranjera, usar `--misma-moneda` en lugar de `--cm` (consulta la cotización oficial a ARCA). En pesos no pasar cotización distinta de 1.
|
|
62
|
-
- Fechas: `-f, --fecha <fecha>` acepta formato argentino día-primero: `D`, `DD`, `D/M`, `DD/MM`, `D-M-YY`, `DD-MM-YYYY` (con `-` o `/`); si se omiten mes/año usa los actuales. También `--servicio-desde`/`--sd` y `--servicio-hasta`/`--sh`, y `-d, --dia <n>` (día de vencimiento). `--vencimiento <fecha>` (alias `--vto`) fija `FchVtoPago` aparte del período de servicio (servicios y facturas FCE; no en productos ni NC/ND FCE). Ventana de `--fecha` respecto de hoy: productos ±5 días, servicios ±10, FCE −5/+1; en productos y FCE una fecha futura tiene que caer en el mes actual.
|
|
62
|
+
- Fechas: `-f, --fecha <fecha>` acepta formato argentino día-primero: `D`, `DD`, `D/M`, `DD/MM`, `D-M-YY`, `DD-MM-YYYY` (con `-` o `/`); si se omiten mes/año usa los actuales. También `--servicio-desde`/`--sd` y `--servicio-hasta`/`--sh`, y `-d, --dia <n>` (día de vencimiento; no se combina con `--fecha` ni `--servicio-hasta`). "Hoy" es siempre la fecha argentina, aunque el equipo esté en UTC. `--vencimiento <fecha>` (alias `--vto`) fija `FchVtoPago` aparte del período de servicio (servicios y facturas FCE; no en productos ni NC/ND FCE). Ventana de `--fecha` respecto de hoy: productos ±5 días, servicios ±10, FCE −5/+1; en productos y FCE una fecha futura tiene que caer en el mes actual.
|
|
63
63
|
- Comprobante asociado (obligatorio en notas de crédito/débito): `--ac <shortcut>` (ej. `fc`), `--apv <n>` (punto de venta, alias `--asociado-punto-venta`), `--ar <n>` (número), `--acuit <n>`, `--at <n>` (tipo ARCA, alternativa a `--ac`; no combinar ambos), `--afecha <fecha>` (fecha del asociado, opcional salvo en NC/ND FCE). En notas comunes, en lugar del bloque `--ac` se puede usar un período: `--periodo-desde <fecha>` y `--periodo-hasta <fecha>` (alias `--pd`/`--ph`); no se combinan con `--ac`/`--at`, no aplican a FCE y el período no puede terminar después de la nota.
|
|
64
64
|
- Crédito electrónico (FCE): las facturas `fcea/fceb/fcec` requieren `--cbu <22 dígitos>` (o `arcli config establecer cbu ...`); opcionales `--alias <alias>` y `--transferencia sca|adc` (default `sca`). Las NC/ND FCE (`ncea`…`ndec`) requieren `--afecha`, aceptan `--anulacion`, toman `--acuit` del CUIT emisor si se omite y no aceptan `--cbu`/`--alias`/`--transferencia`. Fuera de FCE esos flags dan error.
|
|
65
65
|
- Régimen FCE: `arcli fce-obligado <cuit> [--fecha <fecha>] [--json]` consulta en ARCA (`wsfecred`) si el receptor está obligado a recibir FCE y desde qué monto. Con `arcli config establecer verificarFce true`, cada factura con CUIT hace esa consulta y devuelve avisos en `avisos` (JSON) sin bloquear. Requiere autorizar `wsfecred` en ARCA además de `wsfe`.
|
|
66
|
-
- Ejecución: `--previsualizar` (
|
|
66
|
+
- Ejecución: `--previsualizar` (solo arma y muestra la solicitud) vs `--emitir` (real contra ARCA) — son mutuamente excluyentes. El entorno sale de `config.entorno` (`testing` por defecto) salvo `--testing`/`--produccion`. Sin `--emitir` ni `--previsualizar` decide `config.emitir` (o `"emitir"` del JSON); si tampoco hay, en una terminal pregunta y con `--json` o sin TTY no emite. `--produccion --emitir` emite de verdad sin confirmación adicional, y lo mismo pasa sin flags si la config tiene `entorno produccion` y `emitir true`. Para no depender de la config, pasá siempre `--testing` o `--produccion` y `--emitir` o `--previsualizar` explícitos.
|
|
67
67
|
- Salida: `--json` (estructurada, para scripts/agentes — desactiva el aviso de nueva versión), `--bruto` (incluye la respuesta cruda de ARCA).
|
|
68
68
|
- `--cargar <path.json>`: carga uno o un array de comprobantes desde un JSON en vez de flags (ver forma abajo). Los flags pisan lo que venga del archivo.
|
|
69
69
|
- PDF: `--exportar-pdf` (alias `--pdf`) genera el PDF con QR después de emitir; `--sin-pdf` no lo genera; sin flag decide `config pdf` (`preguntar` por defecto, que sin TTY o con `--json` no genera). Datos que solo van en el PDF (ARCA no los recibe): `--descripcion <texto>`, `--receptor-nombre <texto>`, `--receptor-domicilio <texto>`. Requiere el plugin (`arcli pdf instalar`, ~160 MB; desde un agente instalarlo antes, porque sin TTY nunca se descarga solo) y `emisor.razonSocial`, `emisor.domicilio`, `emisor.inicioActividades` en la config. Detalle: `docs/pdf.md`.
|
|
@@ -138,13 +138,15 @@ JSON, nunca alcanza con chequear el exit code.
|
|
|
138
138
|
|
|
139
139
|
## Salida de error
|
|
140
140
|
|
|
141
|
-
Sin `--json
|
|
141
|
+
Sin `--json` (ni `json=true` en la config): panel de texto en stderr. Con `--json` o `json=true`: JSON en stderr con la forma
|
|
142
142
|
`{"codigo": "...", "detalles": {...} | null, "error": "mensaje", "sugerencia": "..." | null}`.
|
|
143
|
-
`codigo` es `CONFIGURATION_ERROR`, `INPUT_VALIDATION_ERROR`, `
|
|
144
|
-
|
|
143
|
+
`codigo` es `CONFIGURATION_ERROR`, `INPUT_VALIDATION_ERROR`, `EMISSION_UNCERTAIN` (falló la llamada
|
|
144
|
+
que emite: puede haberse emitido igual; antes de reintentar, verificar con el `arcli ultimos <tipo> --pv <n>`
|
|
145
|
+
que viene en `sugerencia`), `TRANSIENT_ERROR` (consultas: reintentar), `UNEXPECTED_ERROR`, `VOUCHER_NOT_FOUND` (`consultar`), o en un lote
|
|
145
146
|
(`--cargar` con un array) `BATCH_VALIDATION_ERROR` (no se emitió ninguno; `detalles.comprobantes` lista cada
|
|
146
147
|
`{indice, error}`) y `BATCH_EMISSION_ERROR` (se cortó a mitad: los resultados ya procesados salen antes por
|
|
147
|
-
stdout;
|
|
148
|
+
stdout; si viene `detalles.sinConfirmar`, verificar ese índice con `arcli ultimos` antes de reintentarlo;
|
|
149
|
+
después reintentar `detalles.sinProcesar`, nunca los ya emitidos). El proceso termina con
|
|
148
150
|
exit code `1` en cualquier error.
|
|
149
151
|
|
|
150
152
|
## Comando `config`
|