arcli 1.7.1 → 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 +78 -1
- package/README.md +11 -18
- 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 +7 -6
- 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 +4 -3
- 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/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 +99 -17
- 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 +153 -0
- package/dist/cli/interactive/invoice-picker.js.map +1 -0
- package/dist/cli/interactive/note.flow.d.ts +8 -2
- package/dist/cli/interactive/note.flow.js +39 -37
- 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 +36 -5
- package/dist/cli/interactive/prompts.js +185 -19
- package/dist/cli/interactive/prompts.js.map +1 -1
- package/dist/cli/interactive/repeat.flow.js +26 -17
- 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/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.d.ts +1 -1
- package/dist/modules/config/config-value-parser.js +21 -9
- 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 +4 -2
- 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.d.ts +5 -0
- package/dist/modules/config/config.service.js +30 -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.d.ts +1 -3
- package/dist/modules/interactive/config-fields.js +37 -42
- 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.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 +53 -15
- 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 -2
- package/dist/ui/components/statusBar.js +18 -9
- 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 +12 -10
- 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,2 +1,6 @@
|
|
|
1
|
+
import { type ChangelogEntry } from './changelog';
|
|
1
2
|
import type { UpdateCheckResult } from './update-check.service';
|
|
3
|
+
export declare const UPDATE_COMMAND = "npm install -g arcli@latest";
|
|
2
4
|
export declare function renderUpdateNoticePanel(result: UpdateCheckResult): string;
|
|
5
|
+
/** Pantalla de "Actualizar": versiones, novedades y como actualizar. */
|
|
6
|
+
export declare function renderUpdateDetails(result: UpdateCheckResult, entries: readonly ChangelogEntry[] | undefined): string;
|
|
@@ -1,6 +1,84 @@
|
|
|
1
|
-
import { noticePanel } from '../../ui/index.js';
|
|
1
|
+
import { bold, colorize, noticePanel, renderPanel } from '../../ui/index.js';
|
|
2
|
+
import { CHANGELOG_PAGE_URL } from './changelog.js';
|
|
3
|
+
export const UPDATE_COMMAND = 'npm install -g arcli@latest';
|
|
4
|
+
/** Versiones del changelog que se muestran, y cambios por version; el resto queda en el link. */
|
|
5
|
+
const MAX_CHANGELOG_ENTRIES = 3;
|
|
6
|
+
const MAX_CHANGES_PER_ENTRY = 6;
|
|
2
7
|
export function renderUpdateNoticePanel(result) {
|
|
3
8
|
return noticePanel(`Nueva version disponible: ${result.latestVersion} (actual: ${result.currentVersion})\n` +
|
|
4
|
-
|
|
9
|
+
`Actualiza con: ${UPDATE_COMMAND}`, 'info', 'info');
|
|
10
|
+
}
|
|
11
|
+
const KIND_LABELS = {
|
|
12
|
+
agregado: ['nuevo', 'success'],
|
|
13
|
+
cambiado: ['cambio', 'info'],
|
|
14
|
+
corregido: ['arreglo', 'warning'],
|
|
15
|
+
eliminado: ['quitado', 'danger'],
|
|
16
|
+
otro: ['otro', 'muted'],
|
|
17
|
+
seguridad: ['seguridad', 'danger'],
|
|
18
|
+
};
|
|
19
|
+
const KIND_LABEL_WIDTH = Math.max(...Object.values(KIND_LABELS).map(([label]) => label.length));
|
|
20
|
+
const CHANGE_INDENT = ' '.repeat(2 + KIND_LABEL_WIDTH + 2);
|
|
21
|
+
/** `2026-10-09` → `09/10/2026`; otro formato queda igual. */
|
|
22
|
+
function formatChangelogDate(date) {
|
|
23
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(date);
|
|
24
|
+
return match ? `${match[3]}/${match[2]}/${match[1]}` : date;
|
|
25
|
+
}
|
|
26
|
+
function formatChange(change) {
|
|
27
|
+
const text = change.topic ? `${bold(`${change.topic}:`)} ${change.text}` : change.text;
|
|
28
|
+
if (change.nested) {
|
|
29
|
+
return `${CHANGE_INDENT}· ${text}`;
|
|
30
|
+
}
|
|
31
|
+
const [label, color] = KIND_LABELS[change.kind];
|
|
32
|
+
return ` ${colorize(label.padEnd(KIND_LABEL_WIDTH), color)} ${text}`;
|
|
33
|
+
}
|
|
34
|
+
function formatChanges(changes) {
|
|
35
|
+
const lines = changes.slice(0, MAX_CHANGES_PER_ENTRY).map(formatChange);
|
|
36
|
+
const hidden = changes.length - MAX_CHANGES_PER_ENTRY;
|
|
37
|
+
return hidden > 0 ? [...lines, colorize(`${CHANGE_INDENT}y ${hidden} cambio(s) mas`, 'muted')] : lines;
|
|
38
|
+
}
|
|
39
|
+
function formatChangelog(entries) {
|
|
40
|
+
if (!entries || entries.length === 0) {
|
|
41
|
+
return [colorize(`No se pudieron cargar las novedades. Miralas en ${CHANGELOG_PAGE_URL}`, 'muted')];
|
|
42
|
+
}
|
|
43
|
+
const lines = entries
|
|
44
|
+
.slice(0, MAX_CHANGELOG_ENTRIES)
|
|
45
|
+
.flatMap((entry) => [
|
|
46
|
+
'',
|
|
47
|
+
`${bold(entry.version)}${entry.date ? ` · ${colorize(formatChangelogDate(entry.date), 'muted')}` : ''}`,
|
|
48
|
+
...(entry.summary ? [entry.summary] : []),
|
|
49
|
+
...(entry.changes.length > 0 ? [''] : []),
|
|
50
|
+
...formatChanges(entry.changes),
|
|
51
|
+
]);
|
|
52
|
+
const hidden = entries.length - MAX_CHANGELOG_ENTRIES;
|
|
53
|
+
if (hidden > 0) {
|
|
54
|
+
lines.push('', colorize(`Y ${hidden} version(es) mas en ${CHANGELOG_PAGE_URL}`, 'muted'));
|
|
55
|
+
}
|
|
56
|
+
return lines;
|
|
57
|
+
}
|
|
58
|
+
/** Pantalla de "Actualizar": versiones, novedades y como actualizar. */
|
|
59
|
+
export function renderUpdateDetails(result, entries) {
|
|
60
|
+
const versions = renderPanel({
|
|
61
|
+
borderType: 'sheet',
|
|
62
|
+
content: [
|
|
63
|
+
`Tu version ${result.currentVersion}`,
|
|
64
|
+
`Nueva version ${colorize(bold(result.latestVersion), 'highlight')}`,
|
|
65
|
+
'',
|
|
66
|
+
bold('NOVEDADES'),
|
|
67
|
+
...formatChangelog(entries),
|
|
68
|
+
],
|
|
69
|
+
title: 'Actualizacion disponible',
|
|
70
|
+
width: 'wide',
|
|
71
|
+
});
|
|
72
|
+
const howTo = renderPanel({
|
|
73
|
+
borderType: 'command',
|
|
74
|
+
content: [
|
|
75
|
+
'Para actualizar, arcli se cierra y deja este comando copiado. Pegalo en la terminal y apreta Enter:',
|
|
76
|
+
'',
|
|
77
|
+
bold(colorize(UPDATE_COMMAND, 'info')),
|
|
78
|
+
],
|
|
79
|
+
preserveBlankLines: true,
|
|
80
|
+
width: 'wide',
|
|
81
|
+
});
|
|
82
|
+
return `${versions}\n\n${howTo}`;
|
|
5
83
|
}
|
|
6
84
|
//# sourceMappingURL=update-check.presenter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.presenter.js","sourceRoot":"","sources":["../../../src/modules/update-check/update-check.presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"update-check.presenter.js","sourceRoot":"","sources":["../../../src/modules/update-check/update-check.presenter.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,10 @@ export interface UpdateCheckResult {
|
|
|
2
2
|
readonly currentVersion: string;
|
|
3
3
|
readonly latestVersion: string;
|
|
4
4
|
}
|
|
5
|
+
export declare function isNewerVersion(latestVersion: string, currentVersion: string): boolean;
|
|
5
6
|
export interface CheckForUpdateOptions {
|
|
6
7
|
readonly cwd?: string;
|
|
8
|
+
/** Cada cuanto se consulta el registry; por defecto, una vez por dia. */
|
|
9
|
+
readonly maxAgeMs?: number;
|
|
7
10
|
}
|
|
8
11
|
export declare function checkForUpdate(currentVersion: string, options?: CheckForUpdateOptions): Promise<UpdateCheckResult | null>;
|
|
@@ -10,7 +10,7 @@ const CACHE_DEFAULTS = {
|
|
|
10
10
|
function isUpdateCheckDisabled() {
|
|
11
11
|
return Boolean(process.env.CI) || Boolean(process.env.NO_UPDATE_NOTIFIER) || process.stderr.isTTY !== true;
|
|
12
12
|
}
|
|
13
|
-
function isNewerVersion(latestVersion, currentVersion) {
|
|
13
|
+
export function isNewerVersion(latestVersion, currentVersion) {
|
|
14
14
|
const parse = (version) => version.split('.').map((part) => Number.parseInt(part, 10) || 0);
|
|
15
15
|
const [latestMajor, latestMinor, latestPatch] = parse(latestVersion);
|
|
16
16
|
const [currentMajor, currentMinor, currentPatch] = parse(currentVersion);
|
|
@@ -54,7 +54,7 @@ export async function checkForUpdate(currentVersion, options = {}) {
|
|
|
54
54
|
return null;
|
|
55
55
|
}
|
|
56
56
|
const cache = createCacheStore(options.cwd);
|
|
57
|
-
const isCacheStale = Date.now() - cache.get('lastCheckedAt') > CHECK_INTERVAL_MS;
|
|
57
|
+
const isCacheStale = Date.now() - cache.get('lastCheckedAt') > (options.maxAgeMs ?? CHECK_INTERVAL_MS);
|
|
58
58
|
let latestVersion = cache.get('latestVersion');
|
|
59
59
|
if (isCacheStale) {
|
|
60
60
|
const fetchedVersion = await fetchLatestVersion();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.service.js","sourceRoot":"","sources":["../../../src/modules/update-check/update-check.service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,YAAY,GAAG,OAAO,CAAC;AAC7B,MAAM,YAAY,GAAG,8BAA8B,YAAY,SAAS,CAAC;AACzE,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAO9B,MAAM,cAAc,GAAqB;IACvC,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;CAClB,CAAC;AAOF,SAAS,qBAAqB;IAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AAC7G,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"update-check.service.js","sourceRoot":"","sources":["../../../src/modules/update-check/update-check.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,13 +22,18 @@ export interface VoucherHistoryGateway {
|
|
|
22
22
|
getLastNumber(pointOfSale: number, voucherType: number): Promise<number>;
|
|
23
23
|
getVoucher(number: number, pointOfSale: number, voucherType: number): Promise<IssuedVoucher | undefined>;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
/** Cuantos comprobantes listar si no se pide otra cantidad; se cambia con `config.comprobantesPorLista`. */
|
|
26
|
+
export declare const RECENT_VOUCHERS_LIMIT = 15;
|
|
26
27
|
export declare const MAX_RECENT_VOUCHERS = 50;
|
|
27
28
|
export declare function resolveDocumentType(code: number): BillingDocumentType | undefined;
|
|
28
29
|
/** ARCA no devuelve la alicuota de la factura; se deduce de IVA / neto cuando coincide con una tasa conocida. */
|
|
29
30
|
export declare function inferIvaRate(netAmount: number, ivaAmount: number): BillingIvaRate | undefined;
|
|
30
|
-
|
|
31
|
-
export declare function listRecentVouchers(gateway: VoucherHistoryGateway, pointOfSale: number, voucherType: number, options?: {
|
|
31
|
+
interface ListVouchersOptions {
|
|
32
32
|
readonly concurrency?: number;
|
|
33
33
|
readonly limit?: number;
|
|
34
|
-
}
|
|
34
|
+
}
|
|
35
|
+
/** Ultimos comprobantes emitidos, del mas nuevo al mas viejo. */
|
|
36
|
+
export declare function listRecentVouchers(gateway: VoucherHistoryGateway, pointOfSale: number, voucherType: number, options?: ListVouchersOptions): Promise<IssuedVoucher[]>;
|
|
37
|
+
/** Comprobantes desde `fromNumber` hacia atras (incluido), para paginar sin volver a pedir el ultimo numero. */
|
|
38
|
+
export declare function listVouchersFrom(gateway: VoucherHistoryGateway, pointOfSale: number, voucherType: number, fromNumber: number, options?: ListVouchersOptions): Promise<IssuedVoucher[]>;
|
|
39
|
+
export {};
|
|
@@ -12,7 +12,8 @@ const IVA_RATES = [
|
|
|
12
12
|
['21', 0.21],
|
|
13
13
|
['27', 0.27],
|
|
14
14
|
];
|
|
15
|
-
|
|
15
|
+
/** Cuantos comprobantes listar si no se pide otra cantidad; se cambia con `config.comprobantesPorLista`. */
|
|
16
|
+
export const RECENT_VOUCHERS_LIMIT = 15;
|
|
16
17
|
export const MAX_RECENT_VOUCHERS = 50;
|
|
17
18
|
export function resolveDocumentType(code) {
|
|
18
19
|
return DOCUMENT_TYPES_BY_CODE[code];
|
|
@@ -28,10 +29,14 @@ export function inferIvaRate(netAmount, ivaAmount) {
|
|
|
28
29
|
}
|
|
29
30
|
/** Ultimos comprobantes emitidos, del mas nuevo al mas viejo. */
|
|
30
31
|
export async function listRecentVouchers(gateway, pointOfSale, voucherType, options = {}) {
|
|
32
|
+
const lastNumber = await gateway.getLastNumber(pointOfSale, voucherType);
|
|
33
|
+
return listVouchersFrom(gateway, pointOfSale, voucherType, lastNumber, options);
|
|
34
|
+
}
|
|
35
|
+
/** Comprobantes desde `fromNumber` hacia atras (incluido), para paginar sin volver a pedir el ultimo numero. */
|
|
36
|
+
export async function listVouchersFrom(gateway, pointOfSale, voucherType, fromNumber, options = {}) {
|
|
31
37
|
const limit = options.limit ?? RECENT_VOUCHERS_LIMIT;
|
|
32
38
|
const concurrency = options.concurrency ?? 4;
|
|
33
|
-
const
|
|
34
|
-
const numbers = Array.from({ length: Math.min(limit, lastNumber) }, (_, index) => lastNumber - index);
|
|
39
|
+
const numbers = Array.from({ length: Math.max(0, Math.min(limit, fromNumber)) }, (_, index) => fromNumber - index);
|
|
35
40
|
const vouchers = [];
|
|
36
41
|
// Lotes chicos: cada consulta tarda ~0,5 s y no conviene saturar el web service.
|
|
37
42
|
for (let start = 0; start < numbers.length; start += concurrency) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voucher-history.js","sourceRoot":"","sources":["../../../src/modules/vouchers/voucher-history.ts"],"names":[],"mappings":"AA2BA,MAAM,sBAAsB,GAAwC;IAClE,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,kBAAkB;CACvB,CAAC;AAEF,MAAM,SAAS,GAAqD;IAClE,CAAC,GAAG,EAAE,CAAC,CAAC;IACR,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,SAAiB;IAC/D,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;IAE3E,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"voucher-history.js","sourceRoot":"","sources":["../../../src/modules/vouchers/voucher-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,15 @@ export interface VoucherDetailReport {
|
|
|
14
14
|
}
|
|
15
15
|
export declare function formatVoucherNumber(pointOfSale: number, number: number): string;
|
|
16
16
|
export declare function formatReceiver(voucher: IssuedVoucher): string;
|
|
17
|
-
/**
|
|
18
|
-
export declare function
|
|
17
|
+
/** Titulo del listado de ultimos comprobantes, tambien usado por el selector del modo interactivo. */
|
|
18
|
+
export declare function formatVoucherListTitle(report: Omit<VoucherListReport, 'vouchers'>): string;
|
|
19
|
+
/** Una fila del listado: numero, fecha, receptor, total y CAE, en columnas alineadas. */
|
|
20
|
+
export declare function formatVoucherListRow(pointOfSale: number, voucher: IssuedVoucher): string;
|
|
21
|
+
/**
|
|
22
|
+
* Filas para elegir un comprobante: cada columna mide lo justo para el dato mas largo de la lista y las separa
|
|
23
|
+
* `separator`. Con `width`, los separadores se agrandan para que las filas ocupen ese ancho, si entran.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatVoucherPickerRows(pointOfSale: number, vouchers: readonly IssuedVoucher[], separator: string, width?: number): string[];
|
|
19
26
|
export declare function formatVoucherListAsText(report: VoucherListReport): string;
|
|
20
27
|
export declare function formatVoucherListAsJson(report: VoucherListReport): string;
|
|
21
28
|
export declare function formatVoucherDetailAsJson(report: VoucherDetailReport): string;
|
|
@@ -16,28 +16,66 @@ export function formatReceiver(voucher) {
|
|
|
16
16
|
const label = DOCUMENT_LABELS[voucher.documentTypeCode] ?? `Doc ${voucher.documentTypeCode}`;
|
|
17
17
|
return `${label} ${voucher.documentNumber}`;
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
20
|
-
export function
|
|
19
|
+
/** Titulo del listado de ultimos comprobantes, tambien usado por el selector del modo interactivo. */
|
|
20
|
+
export function formatVoucherListTitle(report) {
|
|
21
|
+
return `Ultimas ${report.voucherKind.displayName} · PV ${report.pointOfSale} · ${report.environment}`;
|
|
22
|
+
}
|
|
23
|
+
/** Una fila del listado: numero, fecha, receptor, total y CAE, en columnas alineadas. */
|
|
24
|
+
export function formatVoucherListRow(pointOfSale, voucher) {
|
|
21
25
|
return [
|
|
22
|
-
|
|
26
|
+
formatVoucherNumber(pointOfSale, voucher.number),
|
|
23
27
|
formatArcaDateAsArgentineDate(voucher.date),
|
|
24
28
|
formatReceiver(voucher).padEnd(20),
|
|
25
|
-
formatMoneyLabel(voucher.total),
|
|
26
|
-
|
|
29
|
+
formatMoneyLabel(voucher.total).padStart(16),
|
|
30
|
+
voucher.cae ? `CAE ${voucher.cae}` : '',
|
|
31
|
+
]
|
|
32
|
+
.join(' ')
|
|
33
|
+
.trimEnd();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Reparte `extra` espacios entre los separadores, a los dos lados del simbolo: ` · ` pasa a ` · `, y asi.
|
|
37
|
+
* Los primeros se llevan el sobrante de la division.
|
|
38
|
+
*/
|
|
39
|
+
function widenSeparators(separator, count, extra) {
|
|
40
|
+
return Array.from({ length: count }, (_, index) => {
|
|
41
|
+
const spaces = Math.floor(extra / count) + (index < extra % count ? 1 : 0);
|
|
42
|
+
const left = Math.floor(spaces / 2);
|
|
43
|
+
return `${' '.repeat(left)}${separator}${' '.repeat(spaces - left)}`;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Filas para elegir un comprobante: cada columna mide lo justo para el dato mas largo de la lista y las separa
|
|
48
|
+
* `separator`. Con `width`, los separadores se agrandan para que las filas ocupen ese ancho, si entran.
|
|
49
|
+
*/
|
|
50
|
+
export function formatVoucherPickerRows(pointOfSale, vouchers, separator, width) {
|
|
51
|
+
const columns = vouchers.map((voucher) => ({
|
|
52
|
+
cae: voucher.cae ? `CAE ${voucher.cae}` : '',
|
|
53
|
+
date: formatArcaDateAsArgentineDate(voucher.date),
|
|
54
|
+
number: formatVoucherNumber(pointOfSale, voucher.number),
|
|
55
|
+
receiver: formatReceiver(voucher),
|
|
56
|
+
total: formatMoneyLabel(voucher.total),
|
|
57
|
+
}));
|
|
58
|
+
const receiverWidth = Math.max(0, ...columns.map((column) => column.receiver.length));
|
|
59
|
+
const totalWidth = Math.max(0, ...columns.map((column) => column.total.length));
|
|
60
|
+
const cells = columns.map((column) => [
|
|
61
|
+
column.number,
|
|
62
|
+
column.date,
|
|
63
|
+
column.receiver.padEnd(receiverWidth),
|
|
64
|
+
column.total.padStart(totalWidth),
|
|
65
|
+
column.cae,
|
|
66
|
+
].filter(Boolean));
|
|
67
|
+
const natural = Math.max(0, ...cells.map((row) => row.join(separator).length));
|
|
68
|
+
const gaps = Math.max(0, ...cells.map((row) => row.length - 1));
|
|
69
|
+
const extra = width === undefined || gaps === 0 ? 0 : Math.max(0, width - natural);
|
|
70
|
+
const separators = widenSeparators(separator, gaps, extra);
|
|
71
|
+
return cells.map((row) => row.map((cell, index) => (index === 0 ? cell : `${separators[index - 1]}${cell}`)).join(''));
|
|
27
72
|
}
|
|
28
73
|
export function formatVoucherListAsText(report) {
|
|
29
|
-
const {
|
|
74
|
+
const { pointOfSale, voucherKind, vouchers } = report;
|
|
30
75
|
if (vouchers.length === 0) {
|
|
31
76
|
return noticePanel(`No hay ${voucherKind.displayName} emitidas en el punto de venta ${pointOfSale}.`, 'muted');
|
|
32
77
|
}
|
|
33
|
-
|
|
34
|
-
formatVoucherNumber(pointOfSale, voucher.number),
|
|
35
|
-
formatArcaDateAsArgentineDate(voucher.date),
|
|
36
|
-
formatReceiver(voucher).padEnd(20),
|
|
37
|
-
formatMoneyLabel(voucher.total).padStart(16),
|
|
38
|
-
voucher.cae ? `CAE ${voucher.cae}` : '',
|
|
39
|
-
].join(' '));
|
|
40
|
-
return keyValuePanel(`Ultimas ${voucherKind.displayName} · PV ${pointOfSale} · ${environment}`, rows, undefined, 'wide', undefined, 'listing');
|
|
78
|
+
return keyValuePanel(formatVoucherListTitle(report), vouchers.map((voucher) => formatVoucherListRow(pointOfSale, voucher)), undefined, 'wide', undefined, 'listing');
|
|
41
79
|
}
|
|
42
80
|
function serializeVoucher(voucher) {
|
|
43
81
|
return {
|
|
@@ -103,6 +141,6 @@ export function formatVoucherDetailAsText(report) {
|
|
|
103
141
|
if (voucher.caeExpiration) {
|
|
104
142
|
rows.push(['Vencimiento CAE', formatArcaDateAsArgentineDate(voucher.caeExpiration)]);
|
|
105
143
|
}
|
|
106
|
-
return keyValuePanel(voucherKind.displayName, renderKeyValueRows(rows, { labelWidth: resolveKeyValueLabelWidth('
|
|
144
|
+
return keyValuePanel(voucherKind.displayName, renderKeyValueRows(rows, { labelWidth: resolveKeyValueLabelWidth('ticket', rows) }), voucher.result === 'A' ? 'APROBADO' : voucher.result === 'R' ? 'RECHAZADO' : undefined, 'ticket', voucher.result === 'R' ? 'danger' : 'success', 'ticket');
|
|
107
145
|
}
|
|
108
146
|
//# sourceMappingURL=voucher-history.presenter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voucher-history.presenter.js","sourceRoot":"","sources":["../../../src/modules/vouchers/voucher-history.presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAmBtG,MAAM,eAAe,GAA2B;IAC9C,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,KAAK;CACV,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,MAAc;IACrE,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAsB;IACnD,IAAI,OAAO,CAAC,gBAAgB,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,OAAO,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAE7F,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;AAC9C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"voucher-history.presenter.js","sourceRoot":"","sources":["../../../src/modules/vouchers/voucher-history.presenter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { dirname } from 'node:path';
|
|
1
2
|
import { ConfigurationError } from '../../lib/errors/app-error.js';
|
|
3
|
+
import { restrictFolderToOwner } from '../../lib/files/restrict-to-owner.js';
|
|
2
4
|
import { ensurePathExists, readPemFile } from '../../lib/security/pem.js';
|
|
3
5
|
import { ConfigService } from '../../modules/config/config.service.js';
|
|
4
6
|
export class ArcaContextResolver {
|
|
@@ -38,6 +40,9 @@ export class ArcaContextResolver {
|
|
|
38
40
|
const outputJson = this.resolveOutputJson(config);
|
|
39
41
|
const outputRaw = this.resolveOutputRaw(config);
|
|
40
42
|
const ticketPath = service.resolveTicketPath(config);
|
|
43
|
+
// Los tickets dan acceso a ARCA como este CUIT por unas horas: carpetas de versiones viejas pasan a 0700.
|
|
44
|
+
restrictFolderToOwner(dirname(service.getPath()));
|
|
45
|
+
restrictFolderToOwner(ticketPath);
|
|
41
46
|
this.ensurePathExists(certPath, 'certificado');
|
|
42
47
|
this.ensurePathExists(keyPath, 'clave privada');
|
|
43
48
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arca-context.resolver.js","sourceRoot":"","sources":["../../../src/services/arca/arca-context.resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"arca-context.resolver.js","sourceRoot":"","sources":["../../../src/services/arca/arca-context.resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
/** Herramientas del sistema para copiar, en orden de preferencia. En Linux depende de lo que este instalado. */
|
|
3
|
+
function clipboardCommands(platform) {
|
|
4
|
+
if (platform === 'darwin')
|
|
5
|
+
return [['pbcopy']];
|
|
6
|
+
if (platform === 'win32')
|
|
7
|
+
return [['clip']];
|
|
8
|
+
return [['wl-copy'], ['xclip', '-selection', 'clipboard'], ['xsel', '--clipboard', '--input']];
|
|
9
|
+
}
|
|
10
|
+
/** Copia el texto al portapapeles. Devuelve `false` si ninguna herramienta funciono. */
|
|
11
|
+
export function copyToClipboard(text, platform = process.platform) {
|
|
12
|
+
return clipboardCommands(platform).some(([command, ...args]) => {
|
|
13
|
+
const result = spawnSync(command, args, { input: text, stdio: ['pipe', 'ignore', 'ignore'], timeout: 2000 });
|
|
14
|
+
return !result.error && result.status === 0;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=clipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../../src/services/clipboard/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,gHAAgH;AAChH,SAAS,iBAAiB,CAAC,QAAyB;IAClD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5C,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,WAA4B,OAAO,CAAC,QAAQ;IACxF,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7G,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La plantilla de `@arcasdk/pdf` compila con `noEscape: true` y Chromium la renderiza con JS: una razon social
|
|
3
|
+
* con `<script>` se ejecutaria. Se escapan todos los textos antes de pasarlos; codigos, fechas y numeros no
|
|
4
|
+
* tienen esos caracteres, asi que no cambian.
|
|
5
|
+
*/
|
|
6
|
+
export declare function escapeHtmlStrings<T>(value: T): T;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const HTML_ENTITIES = {
|
|
2
|
+
'"': '"',
|
|
3
|
+
'&': '&',
|
|
4
|
+
"'": ''',
|
|
5
|
+
'<': '<',
|
|
6
|
+
'>': '>',
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* La plantilla de `@arcasdk/pdf` compila con `noEscape: true` y Chromium la renderiza con JS: una razon social
|
|
10
|
+
* con `<script>` se ejecutaria. Se escapan todos los textos antes de pasarlos; codigos, fechas y numeros no
|
|
11
|
+
* tienen esos caracteres, asi que no cambian.
|
|
12
|
+
*/
|
|
13
|
+
export function escapeHtmlStrings(value) {
|
|
14
|
+
if (typeof value === 'string') {
|
|
15
|
+
return value.replace(/[&<>"']/g, (char) => HTML_ENTITIES[char] ?? char);
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(value)) {
|
|
18
|
+
return value.map((item) => escapeHtmlStrings(item));
|
|
19
|
+
}
|
|
20
|
+
if (value && typeof value === 'object') {
|
|
21
|
+
return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, escapeHtmlStrings(item)]));
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=escape-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape-html.js","sourceRoot":"","sources":["../../../src/services/pdf/escape-html.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAqC;IACtD,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAI,KAAQ;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAM,CAAC;IAC/E,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAM,CAAC;IAC3D,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAM,CAAC;IAC7G,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -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,6 +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
|
-
export declare function statusBar(
|
|
19
|
+
export declare function statusBar(left: readonly StatusBarSegment[], right?: readonly StatusBarSegment[], options?: StatusBarOptions): string;
|
|
@@ -1,23 +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
|
+
/** Ancho de la barra de estado: el preset `wide`, o menos si la terminal es mas angosta. */
|
|
6
|
+
export function statusBarWidth() {
|
|
7
|
+
return fitToTerminal(UI_THEME.widths.wide.min);
|
|
8
|
+
}
|
|
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
|
+
}
|
|
5
14
|
/**
|
|
6
15
|
* Barra de una linea con el contexto de la sesion, como la barra de estado de un editor:
|
|
7
|
-
* `━━
|
|
16
|
+
* `━━ izquierda · ... ━━━━━━━━━━━━ derecha ━ ... ━━`. No es una caja: no compite con los paneles de contenido.
|
|
8
17
|
*/
|
|
9
|
-
export function statusBar(
|
|
18
|
+
export function statusBar(left, right = [], options = {}) {
|
|
10
19
|
const fill = usesAsciiBorders() ? '=' : '━';
|
|
11
|
-
const width =
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const used = 2 + stripAnsi(
|
|
20
|
+
const width = statusBarWidth();
|
|
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;
|
|
15
24
|
const middle = Math.max(2, width - used);
|
|
16
25
|
return [
|
|
17
26
|
colorize(fill.repeat(2), 'muted'),
|
|
18
|
-
|
|
27
|
+
leftText,
|
|
19
28
|
colorize(fill.repeat(middle), 'muted'),
|
|
20
|
-
|
|
29
|
+
rightText,
|
|
21
30
|
colorize(fill.repeat(2), 'muted'),
|
|
22
31
|
].join('');
|
|
23
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"}
|