arcli 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/README.md +3 -1
  3. package/dist/cli/commands/billing.command.batch.d.ts +22 -0
  4. package/dist/cli/commands/billing.command.batch.js +51 -0
  5. package/dist/cli/commands/billing.command.batch.js.map +1 -0
  6. package/dist/cli/commands/billing.command.options.js +7 -1
  7. package/dist/cli/commands/billing.command.options.js.map +1 -1
  8. package/dist/cli/commands/billing.command.output.d.ts +2 -0
  9. package/dist/cli/commands/billing.command.output.js +15 -1
  10. package/dist/cli/commands/billing.command.output.js.map +1 -1
  11. package/dist/cli/commands/billing.command.parser.d.ts +7 -0
  12. package/dist/cli/commands/billing.command.parser.js +96 -11
  13. package/dist/cli/commands/billing.command.parser.js.map +1 -1
  14. package/dist/cli/commands/billing.command.pdf.d.ts +24 -0
  15. package/dist/cli/commands/billing.command.pdf.js +130 -0
  16. package/dist/cli/commands/billing.command.pdf.js.map +1 -0
  17. package/dist/cli/commands/billing.command.shared.js +28 -12
  18. package/dist/cli/commands/billing.command.shared.js.map +1 -1
  19. package/dist/cli/commands/config.command.js +6 -6
  20. package/dist/cli/commands/config.command.js.map +1 -1
  21. package/dist/cli/commands/pdf.command.d.ts +2 -0
  22. package/dist/cli/commands/pdf.command.js +78 -0
  23. package/dist/cli/commands/pdf.command.js.map +1 -0
  24. package/dist/cli/commands/vouchers.command.d.ts +2 -0
  25. package/dist/cli/commands/vouchers.command.js +96 -0
  26. package/dist/cli/commands/vouchers.command.js.map +1 -0
  27. package/dist/cli/help.d.ts +1 -0
  28. package/dist/cli/help.js +23 -1
  29. package/dist/cli/help.js.map +1 -1
  30. package/dist/cli/interactive/advanced-options.d.ts +14 -0
  31. package/dist/cli/interactive/advanced-options.js +126 -0
  32. package/dist/cli/interactive/advanced-options.js.map +1 -0
  33. package/dist/cli/interactive/history.flow.js +10 -19
  34. package/dist/cli/interactive/history.flow.js.map +1 -1
  35. package/dist/cli/interactive/interactive-mode.js +2 -1
  36. package/dist/cli/interactive/interactive-mode.js.map +1 -1
  37. package/dist/cli/interactive/invoice.flow.d.ts +20 -0
  38. package/dist/cli/interactive/invoice.flow.js +120 -42
  39. package/dist/cli/interactive/invoice.flow.js.map +1 -1
  40. package/dist/cli/interactive/note.flow.d.ts +24 -0
  41. package/dist/cli/interactive/note.flow.js +205 -68
  42. package/dist/cli/interactive/note.flow.js.map +1 -1
  43. package/dist/cli/interactive/pdf.flow.d.ts +5 -0
  44. package/dist/cli/interactive/pdf.flow.js +89 -0
  45. package/dist/cli/interactive/pdf.flow.js.map +1 -0
  46. package/dist/cli/interactive/prompts.d.ts +8 -0
  47. package/dist/cli/interactive/prompts.js +22 -0
  48. package/dist/cli/interactive/prompts.js.map +1 -1
  49. package/dist/cli/interactive/session.d.ts +1 -1
  50. package/dist/cli/interactive/session.js +5 -1
  51. package/dist/cli/interactive/session.js.map +1 -1
  52. package/dist/cli/interactive/validators.d.ts +4 -0
  53. package/dist/cli/interactive/validators.js +18 -0
  54. package/dist/cli/interactive/validators.js.map +1 -1
  55. package/dist/cli/program.js +4 -0
  56. package/dist/cli/program.js.map +1 -1
  57. package/dist/cli/version.d.ts +1 -1
  58. package/dist/cli/version.js +1 -1
  59. package/dist/modules/billing/billing.amounts.d.ts +1 -1
  60. package/dist/modules/billing/billing.amounts.js +34 -13
  61. package/dist/modules/billing/billing.amounts.js.map +1 -1
  62. package/dist/modules/billing/billing.batch.d.ts +23 -0
  63. package/dist/modules/billing/billing.batch.js +43 -0
  64. package/dist/modules/billing/billing.batch.js.map +1 -0
  65. package/dist/modules/billing/billing.display.js +12 -3
  66. package/dist/modules/billing/billing.display.js.map +1 -1
  67. package/dist/modules/billing/billing.schemas.d.ts +35 -0
  68. package/dist/modules/billing/billing.schemas.js +32 -6
  69. package/dist/modules/billing/billing.schemas.js.map +1 -1
  70. package/dist/modules/billing/billing.serialize.js +13 -0
  71. package/dist/modules/billing/billing.serialize.js.map +1 -1
  72. package/dist/modules/billing/billing.types.internal.d.ts +3 -0
  73. package/dist/modules/config/config-doctor.js +13 -0
  74. package/dist/modules/config/config-doctor.js.map +1 -1
  75. package/dist/modules/config/config-value-parser.d.ts +1 -1
  76. package/dist/modules/config/config-value-parser.js +43 -2
  77. package/dist/modules/config/config-value-parser.js.map +1 -1
  78. package/dist/modules/config/config.presenter.d.ts +6 -2
  79. package/dist/modules/config/config.presenter.js +25 -6
  80. package/dist/modules/config/config.presenter.js.map +1 -1
  81. package/dist/modules/config/config.schemas.d.ts +42 -0
  82. package/dist/modules/config/config.schemas.js +29 -0
  83. package/dist/modules/config/config.schemas.js.map +1 -1
  84. package/dist/modules/config/config.service.d.ts +8 -0
  85. package/dist/modules/config/config.service.js +21 -0
  86. package/dist/modules/config/config.service.js.map +1 -1
  87. package/dist/modules/examples/examples.js +1 -0
  88. package/dist/modules/examples/examples.js.map +1 -1
  89. package/dist/modules/interactive/equivalent-command.js +13 -0
  90. package/dist/modules/interactive/equivalent-command.js.map +1 -1
  91. package/dist/modules/interactive/wizard.d.ts +16 -0
  92. package/dist/modules/interactive/wizard.js +33 -0
  93. package/dist/modules/interactive/wizard.js.map +1 -0
  94. package/dist/modules/pdf/pdf-data.mapper.d.ts +4 -0
  95. package/dist/modules/pdf/pdf-data.mapper.js +117 -0
  96. package/dist/modules/pdf/pdf-data.mapper.js.map +1 -0
  97. package/dist/modules/pdf/pdf-decision.d.ts +14 -0
  98. package/dist/modules/pdf/pdf-decision.js +19 -0
  99. package/dist/modules/pdf/pdf-decision.js.map +1 -0
  100. package/dist/modules/pdf/pdf-file-name.d.ts +3 -0
  101. package/dist/modules/pdf/pdf-file-name.js +7 -0
  102. package/dist/modules/pdf/pdf-file-name.js.map +1 -0
  103. package/dist/modules/pdf/pdf-issuer.d.ts +8 -0
  104. package/dist/modules/pdf/pdf-issuer.js +43 -0
  105. package/dist/modules/pdf/pdf-issuer.js.map +1 -0
  106. package/dist/modules/pdf/pdf.errors.d.ts +10 -0
  107. package/dist/modules/pdf/pdf.errors.js +11 -0
  108. package/dist/modules/pdf/pdf.errors.js.map +1 -0
  109. package/dist/modules/pdf/pdf.types.d.ts +91 -0
  110. package/dist/modules/pdf/pdf.types.js +2 -0
  111. package/dist/modules/pdf/pdf.types.js.map +1 -0
  112. package/dist/modules/storybook/showcase.js +6 -2
  113. package/dist/modules/storybook/showcase.js.map +1 -1
  114. package/dist/modules/{interactive → vouchers}/voucher-history.d.ts +9 -0
  115. package/dist/modules/{interactive → vouchers}/voucher-history.js +1 -0
  116. package/dist/modules/vouchers/voucher-history.js.map +1 -0
  117. package/dist/modules/vouchers/voucher-history.presenter.d.ts +22 -0
  118. package/dist/modules/vouchers/voucher-history.presenter.js +108 -0
  119. package/dist/modules/vouchers/voucher-history.presenter.js.map +1 -0
  120. package/dist/services/arca/arca-voucher-history.gateway.d.ts +1 -1
  121. package/dist/services/arca/arca-voucher-history.gateway.js +9 -1
  122. package/dist/services/arca/arca-voucher-history.gateway.js.map +1 -1
  123. package/dist/services/pdf/pdf-browser.d.ts +5 -0
  124. package/dist/services/pdf/pdf-browser.js +54 -0
  125. package/dist/services/pdf/pdf-browser.js.map +1 -0
  126. package/dist/services/pdf/pdf-exporter.d.ts +19 -0
  127. package/dist/services/pdf/pdf-exporter.js +47 -0
  128. package/dist/services/pdf/pdf-exporter.js.map +1 -0
  129. package/dist/services/pdf/pdf-plugin.d.ts +50 -0
  130. package/dist/services/pdf/pdf-plugin.js +143 -0
  131. package/dist/services/pdf/pdf-plugin.js.map +1 -0
  132. package/dist/ui/presenters/errors.presenter.js +22 -1
  133. package/dist/ui/presenters/errors.presenter.js.map +1 -1
  134. package/dist/ui/presenters/errors.zod-presenter.d.ts +2 -0
  135. package/dist/ui/presenters/errors.zod-presenter.js +4 -0
  136. package/dist/ui/presenters/errors.zod-presenter.js.map +1 -1
  137. package/dist/ui/presenters/index.d.ts +2 -0
  138. package/dist/ui/presenters/index.js +2 -0
  139. package/dist/ui/presenters/index.js.map +1 -1
  140. package/dist/ui/presenters/pdf.presenter.d.ts +13 -0
  141. package/dist/ui/presenters/pdf.presenter.js +46 -0
  142. package/dist/ui/presenters/pdf.presenter.js.map +1 -0
  143. package/dist/ui/primitives/text.d.ts +5 -0
  144. package/dist/ui/primitives/text.js +10 -1
  145. package/dist/ui/primitives/text.js.map +1 -1
  146. package/llms.txt +25 -5
  147. package/package.json +1 -1
  148. package/dist/cli/interactive/voucher-format.d.ts +0 -4
  149. package/dist/cli/interactive/voucher-format.js +0 -28
  150. package/dist/cli/interactive/voucher-format.js.map +0 -1
  151. package/dist/modules/interactive/voucher-history.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voucher-history.presenter.js","sourceRoot":"","sources":["../../../src/modules/vouchers/voucher-history.presenter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Arca } from '@arcasdk/core';
2
- import type { IssuedVoucher, VoucherHistoryGateway } from '../../modules/interactive/voucher-history';
2
+ import type { IssuedVoucher, VoucherHistoryGateway } from '../../modules/vouchers/voucher-history';
3
3
  export declare class ArcaVoucherHistoryGateway implements VoucherHistoryGateway {
4
4
  private readonly arca;
5
5
  constructor(arca: Arca);
@@ -9,19 +9,27 @@ export class ArcaVoucherHistoryGateway {
9
9
  }
10
10
  async getVoucher(number, pointOfSale, voucherType) {
11
11
  const info = await this.arca.electronicBillingService.getVoucherInfo(number, pointOfSale, voucherType);
12
- if (!info?.cbteFch || info.resultado !== 'A') {
12
+ // ARCA devuelve null cuando el comprobante no existe.
13
+ if (!info?.cbteFch) {
13
14
  return undefined;
14
15
  }
15
16
  return {
16
17
  cae: info.codAutorizacion,
18
+ caeExpiration: info.fchVto,
17
19
  concept: info.concepto,
20
+ currency: info.monId,
18
21
  date: info.cbteFch,
19
22
  documentNumber: info.docNro ?? 0,
20
23
  documentTypeCode: info.docTipo ?? 99,
24
+ exchangeRate: info.monCotiz,
25
+ exemptAmount: info.impOpEx ?? 0,
21
26
  ivaAmount: info.impIVA ?? 0,
22
27
  netAmount: info.impNeto ?? 0,
23
28
  number,
29
+ result: info.resultado,
30
+ taxesAmount: info.impTrib ?? 0,
24
31
  total: info.impTotal ?? 0,
32
+ untaxedAmount: info.impTotConc ?? 0,
25
33
  };
26
34
  }
27
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"arca-voucher-history.gateway.js","sourceRoot":"","sources":["../../../src/services/arca/arca-voucher-history.gateway.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,yBAAyB;IACA;IAApC,YAAoC,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,WAAmB;QACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAEjG,OAAO,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,MAAc,EACd,WAAmB,EACnB,WAAmB;QAEnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAEvG,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YAC7C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,eAAe;YACzB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,cAAc,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;YAChC,gBAAgB,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YACpC,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC;YAC5B,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"arca-voucher-history.gateway.js","sourceRoot":"","sources":["../../../src/services/arca/arca-voucher-history.gateway.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,yBAAyB;IACA;IAApC,YAAoC,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,WAAmB;QACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAEjG,OAAO,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,MAAc,EACd,WAAmB,EACnB,WAAmB;QAEnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAEvG,sDAAsD;QACtD,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,eAAe;YACzB,aAAa,EAAE,IAAI,CAAC,MAAM;YAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,QAAQ,EAAE,IAAI,CAAC,KAAK;YACpB,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,cAAc,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;YAChC,gBAAgB,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YACpC,YAAY,EAAE,IAAI,CAAC,QAAQ;YAC3B,YAAY,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC;YAC5B,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,WAAW,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC;YAC9B,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC;YACzB,aAAa,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;SACpC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ /** Rutas conocidas de Chrome, Chromium y Edge. Con alguno instalado no hace falta descargar un navegador. */
2
+ export declare function listSystemBrowserCandidates(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string[];
3
+ export declare function findSystemBrowser(candidates?: readonly string[]): string | undefined;
4
+ /** Binario de chrome-headless-shell descargado con el CLI de Puppeteer en `<cacheDir>/chrome-headless-shell/<build>/<carpeta>/`. */
5
+ export declare function findDownloadedBrowser(cacheDir: string): string | undefined;
@@ -0,0 +1,54 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ /** Rutas conocidas de Chrome, Chromium y Edge. Con alguno instalado no hace falta descargar un navegador. */
5
+ export function listSystemBrowserCandidates(platform = process.platform, env = process.env) {
6
+ switch (platform) {
7
+ case 'darwin':
8
+ return ['/Applications', join(homedir(), 'Applications')].flatMap((folder) => [
9
+ join(folder, 'Google Chrome.app/Contents/MacOS/Google Chrome'),
10
+ join(folder, 'Chromium.app/Contents/MacOS/Chromium'),
11
+ join(folder, 'Microsoft Edge.app/Contents/MacOS/Microsoft Edge'),
12
+ ]);
13
+ case 'win32':
14
+ return [env.PROGRAMFILES, env['PROGRAMFILES(X86)'], env.LOCALAPPDATA]
15
+ .filter((folder) => Boolean(folder))
16
+ .flatMap((folder) => [
17
+ join(folder, 'Google', 'Chrome', 'Application', 'chrome.exe'),
18
+ join(folder, 'Microsoft', 'Edge', 'Application', 'msedge.exe'),
19
+ ]);
20
+ default:
21
+ return [
22
+ '/usr/bin/google-chrome',
23
+ '/usr/bin/google-chrome-stable',
24
+ '/usr/bin/chromium',
25
+ '/usr/bin/chromium-browser',
26
+ '/usr/bin/microsoft-edge',
27
+ '/snap/bin/chromium',
28
+ ];
29
+ }
30
+ }
31
+ export function findSystemBrowser(candidates = listSystemBrowserCandidates()) {
32
+ return candidates.find((candidate) => existsSync(candidate));
33
+ }
34
+ /** Binario de chrome-headless-shell descargado con el CLI de Puppeteer en `<cacheDir>/chrome-headless-shell/<build>/<carpeta>/`. */
35
+ export function findDownloadedBrowser(cacheDir) {
36
+ const root = join(cacheDir, 'chrome-headless-shell');
37
+ if (!existsSync(root)) {
38
+ return undefined;
39
+ }
40
+ const binaryName = process.platform === 'win32' ? 'chrome-headless-shell.exe' : 'chrome-headless-shell';
41
+ const folders = (path) => readdirSync(path, { withFileTypes: true })
42
+ .filter((entry) => entry.isDirectory())
43
+ .map((entry) => entry.name);
44
+ for (const build of folders(root)) {
45
+ for (const folder of folders(join(root, build))) {
46
+ const binary = join(root, build, folder, binaryName);
47
+ if (existsSync(binary)) {
48
+ return binary;
49
+ }
50
+ }
51
+ }
52
+ return undefined;
53
+ }
54
+ //# sourceMappingURL=pdf-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-browser.js","sourceRoot":"","sources":["../../../src/services/pdf/pdf-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,6GAA6G;AAC7G,MAAM,UAAU,2BAA2B,CACzC,WAA4B,OAAO,CAAC,QAAQ,EAC5C,MAAyB,OAAO,CAAC,GAAG;IAEpC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC5E,IAAI,CAAC,MAAM,EAAE,gDAAgD,CAAC;gBAC9D,IAAI,CAAC,MAAM,EAAE,sCAAsC,CAAC;gBACpD,IAAI,CAAC,MAAM,EAAE,kDAAkD,CAAC;aACjE,CAAC,CAAC;QACL,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;iBAClE,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;iBACrD,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC;gBAC7D,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,CAAC;aAC/D,CAAC,CAAC;QACP;YACE,OAAO;gBACL,wBAAwB;gBACxB,+BAA+B;gBAC/B,mBAAmB;gBACnB,2BAA2B;gBAC3B,yBAAyB;gBACzB,oBAAoB;aACrB,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,aAAgC,2BAA2B,EAAE;IAC7F,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,oIAAoI;AACpI,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAExG,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/B,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACvC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAErD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { BillingExecutionResult } from '../../modules/billing/billing.types.internal';
2
+ import type { ArcliConfig } from '../../modules/config/config.schemas';
3
+ import type { PdfOutcome, PdfVoucherExtras } from '../../modules/pdf/pdf.types';
4
+ import type { PdfRenderer } from './pdf-plugin';
5
+ export declare const TESTING_FOOTER = "COMPROBANTE DE PRUEBA - SIN VALIDEZ FISCAL";
6
+ export declare function toPdfFailure(error: unknown): Extract<PdfOutcome, {
7
+ error: unknown;
8
+ }>;
9
+ /** Los de testing van a una subcarpeta y con un pie que avisa que no valen, para no mezclarlos con los reales. */
10
+ export declare function resolvePdfTargetFolder(folder: string, environment: BillingExecutionResult['environment']): string;
11
+ export interface ExportPdfInput {
12
+ readonly config: Pick<ArcliConfig, 'cuit' | 'emisor'>;
13
+ readonly extras?: PdfVoucherExtras;
14
+ readonly folder: string;
15
+ readonly renderer: PdfRenderer;
16
+ readonly result: BillingExecutionResult;
17
+ }
18
+ /** Genera y guarda el PDF de un comprobante emitido. Devuelve la ruta del archivo. */
19
+ export declare function exportBillingPdf(input: ExportPdfInput): Promise<string>;
@@ -0,0 +1,47 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { extname, join } from 'node:path';
3
+ import { AppError } from '../../lib/errors/app-error.js';
4
+ import { PdfError } from '../../modules/pdf/pdf.errors.js';
5
+ import { mapBillingResultToPdfData } from '../../modules/pdf/pdf-data.mapper.js';
6
+ import { buildPdfFileName } from '../../modules/pdf/pdf-file-name.js';
7
+ import { resolvePdfIssuer } from '../../modules/pdf/pdf-issuer.js';
8
+ export const TESTING_FOOTER = 'COMPROBANTE DE PRUEBA - SIN VALIDEZ FISCAL';
9
+ export function toPdfFailure(error) {
10
+ if (error instanceof PdfError) {
11
+ return { error: { code: error.code, message: error.message, suggestion: error.suggestion } };
12
+ }
13
+ if (error instanceof AppError) {
14
+ return { error: { code: error.code, message: error.message } };
15
+ }
16
+ return {
17
+ error: { code: 'PDF_GENERATION_ERROR', message: error instanceof Error ? error.message : String(error) },
18
+ };
19
+ }
20
+ function readLogoAsDataUrl(path) {
21
+ if (!path) {
22
+ return undefined;
23
+ }
24
+ const mime = extname(path).toLowerCase() === '.png' ? 'image/png' : 'image/jpeg';
25
+ return `data:${mime};base64,${readFileSync(path).toString('base64')}`;
26
+ }
27
+ /** Los de testing van a una subcarpeta y con un pie que avisa que no valen, para no mezclarlos con los reales. */
28
+ export function resolvePdfTargetFolder(folder, environment) {
29
+ return environment === 'testing' ? join(folder, 'testing') : folder;
30
+ }
31
+ /** Genera y guarda el PDF de un comprobante emitido. Devuelve la ruta del archivo. */
32
+ export async function exportBillingPdf(input) {
33
+ const { result } = input;
34
+ const issuer = resolvePdfIssuer(input.config, result.voucherKind.letter);
35
+ const data = mapBillingResultToPdfData(result, issuer, input.extras);
36
+ const options = {
37
+ footerText: result.environment === 'testing' ? TESTING_FOOTER : undefined,
38
+ logo: readLogoAsDataUrl(input.config.emisor.logo),
39
+ };
40
+ const bytes = await input.renderer.render(data, options);
41
+ const folder = resolvePdfTargetFolder(input.folder, result.environment);
42
+ const path = join(folder, buildPdfFileName(result.voucherKind, data.puntoVenta, data.cbteDesde));
43
+ mkdirSync(folder, { recursive: true });
44
+ writeFileSync(path, bytes);
45
+ return path;
46
+ }
47
+ //# sourceMappingURL=pdf-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-exporter.js","sourceRoot":"","sources":["../../../src/services/pdf/pdf-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { InvoicePdfData, InvoicePdfOptions } from '../../modules/pdf/pdf.types';
2
+ export declare const PDF_PLUGIN_PACKAGE = "@arcasdk/pdf";
3
+ /** Version probada con arcli. Se sube a mano despues de revisar los PDFs que genera. */
4
+ export declare const PDF_PLUGIN_VERSION = "0.2.1";
5
+ export type PdfBrowserSource = 'config' | 'descargado' | 'entorno' | 'sistema';
6
+ export interface PdfPluginStatus {
7
+ readonly browser?: string;
8
+ readonly browserSource?: PdfBrowserSource;
9
+ readonly installed: boolean;
10
+ /** Version instalada, aunque no sea la que espera arcli. */
11
+ readonly installedVersion?: string;
12
+ readonly path: string;
13
+ readonly version: string;
14
+ }
15
+ export interface ProcessResult {
16
+ readonly code: number | null;
17
+ readonly output: string;
18
+ }
19
+ export type ProcessRunner = (command: string, args: readonly string[], options: {
20
+ readonly cwd: string;
21
+ readonly env: NodeJS.ProcessEnv;
22
+ }) => Promise<ProcessResult>;
23
+ export interface PdfRenderer {
24
+ render(data: InvoicePdfData, options: InvoicePdfOptions): Promise<Uint8Array>;
25
+ }
26
+ export interface PdfPluginOptions {
27
+ /** Ruta de `pdfNavegador` en la config. */
28
+ readonly configuredBrowser?: string;
29
+ readonly env?: NodeJS.ProcessEnv;
30
+ readonly findSystemBrowser?: () => string | undefined;
31
+ /** Carpeta del plugin: `<carpeta de config>/plugins/pdf`. */
32
+ readonly path: string;
33
+ readonly runProcess?: ProcessRunner;
34
+ }
35
+ export declare class PdfPlugin {
36
+ private readonly options;
37
+ private readonly env;
38
+ private readonly findSystemBrowser;
39
+ private readonly runProcess;
40
+ constructor(options: PdfPluginOptions);
41
+ private get browsersPath();
42
+ private readInstalledVersion;
43
+ /** Orden: config, variable de entorno de Puppeteer, navegador del sistema y, por ultimo, el descargado. */
44
+ private resolveBrowser;
45
+ getStatus(): PdfPluginStatus;
46
+ /** Instala el paquete y, si no hay un navegador para usar, descarga chrome-headless-shell. */
47
+ install(onStep?: (message: string) => void): Promise<PdfPluginStatus>;
48
+ uninstall(): void;
49
+ load(): PdfRenderer;
50
+ }
@@ -0,0 +1,143 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { createRequire } from 'node:module';
4
+ import { join } from 'node:path';
5
+ import { PDF_INSTALL_SUGGESTION, PdfError } from '../../modules/pdf/pdf.errors.js';
6
+ import { findDownloadedBrowser, findSystemBrowser } from './pdf-browser.js';
7
+ export const PDF_PLUGIN_PACKAGE = '@arcasdk/pdf';
8
+ /** Version probada con arcli. Se sube a mano despues de revisar los PDFs que genera. */
9
+ export const PDF_PLUGIN_VERSION = '0.2.1';
10
+ const runProcessWithSpawn = (command, args, options) => new Promise((resolve) => {
11
+ // En Windows npm es un .cmd y necesita shell.
12
+ const child = spawn(command, args, { cwd: options.cwd, env: options.env, shell: process.platform === 'win32' });
13
+ let output = '';
14
+ child.stdout.on('data', (chunk) => (output += chunk.toString()));
15
+ child.stderr.on('data', (chunk) => (output += chunk.toString()));
16
+ child.on('error', (error) => resolve({ code: 1, output: `${output}${error.message}` }));
17
+ child.on('close', (code) => resolve({ code, output }));
18
+ });
19
+ function lastLines(output, count = 5) {
20
+ return output.trim().split('\n').slice(-count).join('\n');
21
+ }
22
+ export class PdfPlugin {
23
+ options;
24
+ env;
25
+ findSystemBrowser;
26
+ runProcess;
27
+ constructor(options) {
28
+ this.options = options;
29
+ this.env = options.env ?? process.env;
30
+ this.findSystemBrowser = options.findSystemBrowser ?? (() => findSystemBrowser());
31
+ this.runProcess = options.runProcess ?? runProcessWithSpawn;
32
+ }
33
+ get browsersPath() {
34
+ return join(this.options.path, 'browsers');
35
+ }
36
+ readInstalledVersion() {
37
+ const manifest = join(this.options.path, 'node_modules', ...PDF_PLUGIN_PACKAGE.split('/'), 'package.json');
38
+ if (!existsSync(manifest)) {
39
+ return undefined;
40
+ }
41
+ return JSON.parse(readFileSync(manifest, 'utf8')).version;
42
+ }
43
+ /** Orden: config, variable de entorno de Puppeteer, navegador del sistema y, por ultimo, el descargado. */
44
+ resolveBrowser() {
45
+ if (this.options.configuredBrowser) {
46
+ return { path: this.options.configuredBrowser, source: 'config' };
47
+ }
48
+ if (this.env.PUPPETEER_EXECUTABLE_PATH) {
49
+ return { path: this.env.PUPPETEER_EXECUTABLE_PATH, source: 'entorno' };
50
+ }
51
+ const system = this.findSystemBrowser();
52
+ if (system) {
53
+ return { path: system, source: 'sistema' };
54
+ }
55
+ const downloaded = findDownloadedBrowser(this.browsersPath);
56
+ return downloaded ? { path: downloaded, source: 'descargado' } : undefined;
57
+ }
58
+ getStatus() {
59
+ const installedVersion = this.readInstalledVersion();
60
+ const browser = this.resolveBrowser();
61
+ return {
62
+ browser: browser?.path,
63
+ browserSource: browser?.source,
64
+ installed: installedVersion === PDF_PLUGIN_VERSION && Boolean(browser),
65
+ installedVersion,
66
+ path: this.options.path,
67
+ version: PDF_PLUGIN_VERSION,
68
+ };
69
+ }
70
+ /** Instala el paquete y, si no hay un navegador para usar, descarga chrome-headless-shell. */
71
+ async install(onStep = () => undefined) {
72
+ mkdirSync(this.options.path, { recursive: true });
73
+ const manifest = join(this.options.path, 'package.json');
74
+ if (!existsSync(manifest)) {
75
+ writeFileSync(manifest, `${JSON.stringify({ description: 'Plugin de PDF de arcli', private: true }, null, 2)}\n`);
76
+ }
77
+ if (this.readInstalledVersion() !== PDF_PLUGIN_VERSION) {
78
+ onStep(`Descargando ${PDF_PLUGIN_PACKAGE}@${PDF_PLUGIN_VERSION}...`);
79
+ // --ignore-scripts: npm 12 ya los bloquea; asi se comporta igual con cualquier version y el navegador lo
80
+ // resolvemos nosotros.
81
+ const result = await this.runProcess(process.platform === 'win32' ? 'npm.cmd' : 'npm', [
82
+ 'install',
83
+ `${PDF_PLUGIN_PACKAGE}@${PDF_PLUGIN_VERSION}`,
84
+ '--omit=dev',
85
+ '--ignore-scripts',
86
+ '--no-audit',
87
+ '--no-fund',
88
+ '--save-exact',
89
+ ], { cwd: this.options.path, env: this.env });
90
+ if (result.code !== 0) {
91
+ throw new PdfError('PDF_PLUGIN_INSTALL_ERROR', `npm no pudo instalar ${PDF_PLUGIN_PACKAGE}.`, {
92
+ details: { salida: lastLines(result.output) },
93
+ suggestion: 'Revise la conexion a internet o el proxy de npm y vuelva a correr `arcli pdf instalar`.',
94
+ });
95
+ }
96
+ }
97
+ if (!this.resolveBrowser()) {
98
+ onStep('Descargando el navegador para generar PDFs (unos 200 MB)...');
99
+ const require = createRequire(join(this.options.path, 'package.json'));
100
+ const puppeteerCli = join(require.resolve('puppeteer/package.json'), '..', 'lib', 'puppeteer', 'node', 'cli.js');
101
+ const result = await this.runProcess(process.execPath, [puppeteerCli, 'browsers', 'install', 'chrome-headless-shell'], { cwd: this.options.path, env: { ...this.env, PUPPETEER_CACHE_DIR: this.browsersPath } });
102
+ if (result.code !== 0 || !findDownloadedBrowser(this.browsersPath)) {
103
+ throw new PdfError('PDF_PLUGIN_INSTALL_ERROR', 'No se pudo descargar el navegador para generar PDFs.', {
104
+ details: { salida: lastLines(result.output) },
105
+ suggestion: 'Si ya tiene Chrome, Chromium o Edge, indique su ruta con `arcli config establecer pdfNavegador <ruta>`.',
106
+ });
107
+ }
108
+ }
109
+ return this.getStatus();
110
+ }
111
+ uninstall() {
112
+ rmSync(this.options.path, { force: true, recursive: true });
113
+ }
114
+ load() {
115
+ const installedVersion = this.readInstalledVersion();
116
+ if (installedVersion !== PDF_PLUGIN_VERSION) {
117
+ throw new PdfError('PDF_PLUGIN_MISSING', installedVersion
118
+ ? `El plugin de PDF esta en la version ${installedVersion} y arcli usa la ${PDF_PLUGIN_VERSION}.`
119
+ : 'Para generar PDFs falta instalar el plugin de PDF.', { suggestion: PDF_INSTALL_SUGGESTION });
120
+ }
121
+ const browser = this.resolveBrowser();
122
+ if (!browser) {
123
+ throw new PdfError('PDF_PLUGIN_MISSING', 'No se encontro un navegador para generar PDFs.', {
124
+ suggestion: `${PDF_INSTALL_SUGGESTION} Descarga uno, o indique Chrome con \`arcli config establecer pdfNavegador <ruta>\`.`,
125
+ });
126
+ }
127
+ // El SDK no deja elegir el ejecutable; Puppeteer lo toma de esta variable.
128
+ process.env.PUPPETEER_EXECUTABLE_PATH = browser.path;
129
+ const require = createRequire(join(this.options.path, 'package.json'));
130
+ const sdk = require(PDF_PLUGIN_PACKAGE);
131
+ return {
132
+ render: async (data, options) => {
133
+ try {
134
+ return await new sdk.InvoicePdfGenerator(options).generate(data);
135
+ }
136
+ catch (error) {
137
+ throw new PdfError('PDF_GENERATION_ERROR', `No se pudo generar el PDF: ${error instanceof Error ? error.message : String(error)}`, { suggestion: 'Si el navegador falla, pruebe con otro: `arcli config establecer pdfNavegador <ruta>`.' });
138
+ }
139
+ },
140
+ };
141
+ }
142
+ }
143
+ //# sourceMappingURL=pdf-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-plugin.js","sourceRoot":"","sources":["../../../src/services/pdf/pdf-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
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';
3
4
  import { errorPanel } from '../components/errorPanel.js';
4
5
  import { renderJson } from '../primitives/renderJson.js';
5
6
  import { bold } from '../primitives/text.js';
@@ -10,16 +11,33 @@ function formatErrorTitle(code) {
10
11
  return 'Error de configuracion';
11
12
  case 'INPUT_VALIDATION_ERROR':
12
13
  return 'Error de entrada';
14
+ case 'BATCH_VALIDATION_ERROR':
15
+ return 'Lote invalido';
16
+ case 'BATCH_EMISSION_ERROR':
17
+ return 'Lote interrumpido';
18
+ case 'PDF_GENERATION_ERROR':
19
+ case 'PDF_ISSUER_INCOMPLETE':
20
+ case 'PDF_PLUGIN_MISSING':
21
+ return 'PDF no generado';
22
+ case 'PDF_PLUGIN_INSTALL_ERROR':
23
+ return 'Plugin de PDF no instalado';
13
24
  default:
14
25
  return 'Error';
15
26
  }
16
27
  }
17
28
  function formatErrorHint(error) {
29
+ if (error instanceof PdfError && error.suggestion) {
30
+ return error.suggestion;
31
+ }
18
32
  switch (error.code) {
19
33
  case 'CONFIGURATION_ERROR':
20
34
  return 'Revise la configuracion con `arcli config` o corra `arcli config revisar`.';
21
35
  case 'INPUT_VALIDATION_ERROR':
22
36
  return 'Revise los parametros del comando con `ayuda` e intente nuevamente.';
37
+ case 'BATCH_VALIDATION_ERROR':
38
+ return 'Corrija esos comprobantes en el archivo y vuelva a correr el lote completo.';
39
+ case 'BATCH_EMISSION_ERROR':
40
+ return 'Los comprobantes de arriba ya se emitieron: no los vuelva a cargar. Reintente solo los que quedaron sin procesar.';
23
41
  default:
24
42
  return null;
25
43
  }
@@ -43,8 +61,10 @@ function formatErrorDetails(details) {
43
61
  if (!details) {
44
62
  return [];
45
63
  }
64
+ // Arrays y objetos (por ejemplo, la lista de items de un lote) solo van en el JSON:
65
+ // en texto se verian como "[object Object]" y ya estan en el mensaje.
46
66
  return Object.entries(details)
47
- .filter(([, value]) => value !== null && value !== undefined && value !== '')
67
+ .filter(([, value]) => value !== null && value !== undefined && value !== '' && typeof value !== 'object')
48
68
  .map(([key, value]) => {
49
69
  const label = key === 'path' ? 'Ruta' : key;
50
70
  return `${bold(`${label}:`)} ${String(value)}`;
@@ -68,6 +88,7 @@ export function formatCliError(error, useJson) {
68
88
  codigo: error.code,
69
89
  detalles: formatErrorDetailsAsJson(error.details),
70
90
  error: error.message,
91
+ ...(error instanceof PdfError && error.suggestion ? { sugerencia: error.suggestion } : {}),
71
92
  });
72
93
  }
73
94
  const details = formatErrorDetails(error.details);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/errors.presenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/errors.presenter.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  import { ZodError } from 'zod';
2
+ /** Resumen de una linea, para listar errores por item (por ejemplo, en un lote). */
3
+ export declare function summarizeZodError(error: ZodError): string;
2
4
  export declare function formatZodError(error: ZodError, useJson: boolean): string;
@@ -82,6 +82,10 @@ function formatPublicIssuePath(path) {
82
82
  const pathKey = formatZodIssuePath(path);
83
83
  return ZOD_PUBLIC_PATHS[pathKey] ?? path.map((segment) => String(segment));
84
84
  }
85
+ /** Resumen de una linea, para listar errores por item (por ejemplo, en un lote). */
86
+ export function summarizeZodError(error) {
87
+ return error.issues.map((issue) => humanizeZodIssue(issue)).join(' ');
88
+ }
85
89
  export function formatZodError(error, useJson) {
86
90
  if (useJson) {
87
91
  return renderJson({
@@ -1 +1 @@
1
- {"version":3,"file":"errors.zod-presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/errors.zod-presenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.zod-presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/errors.zod-presenter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export * from './billing.presenter';
2
2
  export * from './config.presenter';
3
3
  export * from './errors.presenter';
4
+ export { summarizeZodError } from './errors.zod-presenter';
5
+ export * from './pdf.presenter';
4
6
  export * from './showcase.presenter';
@@ -1,5 +1,7 @@
1
1
  export * from './billing.presenter.js';
2
2
  export * from './config.presenter.js';
3
3
  export * from './errors.presenter.js';
4
+ export { summarizeZodError } from './errors.zod-presenter.js';
5
+ export * from './pdf.presenter.js';
4
6
  export * from './showcase.presenter.js';
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/presenters/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/presenters/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { PdfOutcome } from '../../modules/pdf/pdf.types';
2
+ /** Texto que sigue al comprobante emitido: la ruta del PDF o por que no se genero. */
3
+ export declare function formatPdfOutcomeAsText(outcome: PdfOutcome, label?: string): string;
4
+ export interface PdfPluginStatusView {
5
+ readonly browser?: string;
6
+ readonly browserSource?: 'config' | 'descargado' | 'entorno' | 'sistema';
7
+ readonly installed: boolean;
8
+ readonly installedVersion?: string;
9
+ readonly path: string;
10
+ readonly version: string;
11
+ }
12
+ export declare function formatPdfPluginStatusAsJson(status: PdfPluginStatusView): string;
13
+ export declare function formatPdfPluginStatusAsText(status: PdfPluginStatusView, title?: string): string;
@@ -0,0 +1,46 @@
1
+ import { maskPath } from '../../lib/paths/mask-path.js';
2
+ import { errorPanel } from '../components/errorPanel.js';
3
+ import { keyValuePanel } from '../components/keyValuePanel.js';
4
+ import { noticePanel } from '../components/noticePanel.js';
5
+ import { renderKeyValueRows, resolveKeyValueLabelWidth } from '../primitives/renderKeyValue.js';
6
+ /** Texto que sigue al comprobante emitido: la ruta del PDF o por que no se genero. */
7
+ export function formatPdfOutcomeAsText(outcome, label) {
8
+ const prefix = label ? `${label}: ` : '';
9
+ if ('path' in outcome) {
10
+ return noticePanel(`${prefix}PDF guardado en ${outcome.path}`, 'success');
11
+ }
12
+ const hint = ['El comprobante ya esta emitido: solo falto el PDF.', outcome.error.suggestion]
13
+ .filter(Boolean)
14
+ .join('\n');
15
+ return errorPanel(`${prefix}PDF no generado`, outcome.error.message, [], hint);
16
+ }
17
+ const BROWSER_SOURCE_LABELS = {
18
+ config: 'pdfNavegador (config)',
19
+ descargado: 'descargado por arcli',
20
+ entorno: 'PUPPETEER_EXECUTABLE_PATH',
21
+ sistema: 'instalado en el sistema',
22
+ };
23
+ export function formatPdfPluginStatusAsJson(status) {
24
+ return JSON.stringify({
25
+ instalado: status.installed,
26
+ navegador: status.browser ?? null,
27
+ origenNavegador: status.browserSource ?? null,
28
+ ruta: status.path,
29
+ version: status.version,
30
+ versionInstalada: status.installedVersion ?? null,
31
+ }, null, 2);
32
+ }
33
+ export function formatPdfPluginStatusAsText(status, title = 'Plugin de PDF') {
34
+ const rows = [
35
+ ['Estado', status.installed ? 'instalado' : 'no instalado'],
36
+ ['Version', status.installedVersion ?? `no instalada (arcli usa la ${status.version})`],
37
+ [
38
+ 'Navegador',
39
+ status.browser ? `${status.browser} (${BROWSER_SOURCE_LABELS[status.browserSource ?? 'sistema']})` : 'ninguno',
40
+ ],
41
+ ['Carpeta', maskPath(status.path)],
42
+ ];
43
+ const footer = status.installed ? 'Listo para generar PDFs' : 'Instalelo con `arcli pdf instalar`';
44
+ return keyValuePanel(title, renderKeyValueRows(rows, { labelWidth: resolveKeyValueLabelWidth('standard', rows, [25, 75]) }), footer, 'standard', status.installed ? 'success' : 'warning', 'sheet');
45
+ }
46
+ //# sourceMappingURL=pdf.presenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.presenter.js","sourceRoot":"","sources":["../../../src/ui/presenters/pdf.presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,sFAAsF;AACtF,MAAM,UAAU,sBAAsB,CAAC,OAAmB,EAAE,KAAc;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,OAAO,WAAW,CAAC,GAAG,MAAM,mBAAmB,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,oDAAoD,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;SAC1F,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,UAAU,CAAC,GAAG,MAAM,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACjF,CAAC;AAWD,MAAM,qBAAqB,GAAsE;IAC/F,MAAM,EAAE,uBAAuB;IAC/B,UAAU,EAAE,sBAAsB;IAClC,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,yBAAyB;CACnC,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,MAA2B;IACrE,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QACjC,eAAe,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;QAC7C,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;KAClD,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA2B,EAAE,KAAK,GAAG,eAAe;IAC9F,MAAM,IAAI,GAAqC;QAC7C,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;QAC3D,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,IAAI,8BAA8B,MAAM,CAAC,OAAO,GAAG,CAAC;QACvF;YACE,WAAW;YACX,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,KAAK,qBAAqB,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC/G;QACD,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACnC,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oCAAoC,CAAC;IAEnG,OAAO,aAAa,CAClB,KAAK,EACL,kBAAkB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,yBAAyB,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAC/F,MAAM,EACN,UAAU,EACV,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACxC,OAAO,CACR,CAAC;AACJ,CAAC"}