arek-e-docsnap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +314 -0
  3. package/dist/bin/cli.d.ts +14 -0
  4. package/dist/bin/cli.d.ts.map +1 -0
  5. package/dist/cli/App.d.ts +15 -0
  6. package/dist/cli/App.d.ts.map +1 -0
  7. package/dist/cli/screens/ClassificationScreen.d.ts +13 -0
  8. package/dist/cli/screens/ClassificationScreen.d.ts.map +1 -0
  9. package/dist/cli/screens/CompleteScreen.d.ts +13 -0
  10. package/dist/cli/screens/CompleteScreen.d.ts.map +1 -0
  11. package/dist/cli/screens/PartnerSetupScreen.d.ts +8 -0
  12. package/dist/cli/screens/PartnerSetupScreen.d.ts.map +1 -0
  13. package/dist/cli/screens/SettlementPreviewScreen.d.ts +13 -0
  14. package/dist/cli/screens/SettlementPreviewScreen.d.ts.map +1 -0
  15. package/dist/cli/screens/TransactionReviewScreen.d.ts +13 -0
  16. package/dist/cli/screens/TransactionReviewScreen.d.ts.map +1 -0
  17. package/dist/cli/state.d.ts +79 -0
  18. package/dist/cli/state.d.ts.map +1 -0
  19. package/dist/cli.js +33723 -0
  20. package/dist/domain/errors.d.ts +70 -0
  21. package/dist/domain/errors.d.ts.map +1 -0
  22. package/dist/domain/models.d.ts +289 -0
  23. package/dist/domain/models.d.ts.map +1 -0
  24. package/dist/domain/settlement.d.ts +30 -0
  25. package/dist/domain/settlement.d.ts.map +1 -0
  26. package/dist/index.d.ts +18 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +312 -0
  29. package/dist/layers/config.d.ts +14 -0
  30. package/dist/layers/config.d.ts.map +1 -0
  31. package/dist/layers/filesystem.d.ts +16 -0
  32. package/dist/layers/filesystem.d.ts.map +1 -0
  33. package/dist/layers/logger.d.ts +16 -0
  34. package/dist/layers/logger.d.ts.map +1 -0
  35. package/dist/pdf.worker.mjs +28 -0
  36. package/dist/services/export.d.ts +56 -0
  37. package/dist/services/export.d.ts.map +1 -0
  38. package/dist/services/ocr-tesseract.d.ts +2 -0
  39. package/dist/services/ocr-tesseract.d.ts.map +1 -0
  40. package/dist/services/ocr.d.ts +32 -0
  41. package/dist/services/ocr.d.ts.map +1 -0
  42. package/dist/utils/compression.d.ts +31 -0
  43. package/dist/utils/compression.d.ts.map +1 -0
  44. package/dist/utils/console.d.ts +27 -0
  45. package/dist/utils/console.d.ts.map +1 -0
  46. package/dist/utils/progress.d.ts +30 -0
  47. package/dist/utils/progress.d.ts.map +1 -0
  48. package/dist/utils/transaction-parser.d.ts +41 -0
  49. package/dist/utils/transaction-parser.d.ts.map +1 -0
  50. package/package.json +95 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Export Service
3
+ *
4
+ * Phase 4: Export expense data to multiple formats (Excel, CSV, JSON)
5
+ */
6
+ import { Effect } from 'effect';
7
+ import { ExpenseItem, Partner, Settlement } from '../domain/models.js';
8
+ import { FileError } from '../domain/errors.js';
9
+ import { Logger } from '../layers/logger.js';
10
+ /**
11
+ * Export format options
12
+ */
13
+ export type ExportFormat = 'xlsx' | 'csv' | 'json';
14
+ /**
15
+ * Export configuration
16
+ */
17
+ export interface ExportConfig {
18
+ format: ExportFormat;
19
+ outputPath: string;
20
+ includeSettlement?: boolean;
21
+ includeSummary?: boolean;
22
+ }
23
+ /**
24
+ * Export data structure
25
+ */
26
+ export interface ExportData {
27
+ items: ExpenseItem[];
28
+ partners: Partner[];
29
+ settlements: Settlement[];
30
+ currency: string;
31
+ }
32
+ /**
33
+ * Export to Excel with formatting
34
+ *
35
+ * Phase 4.2: Creates a beautifully formatted Excel workbook
36
+ */
37
+ export declare function exportToExcel(data: ExportData, outputPath: string): Effect.Effect<string, FileError, Logger>;
38
+ /**
39
+ * Export to CSV
40
+ *
41
+ * Phase 4.3: Simple CSV format
42
+ */
43
+ export declare function exportToCSV(data: ExportData, outputPath: string): Effect.Effect<string, FileError, Logger>;
44
+ /**
45
+ * Export to JSON
46
+ *
47
+ * Phase 4.3: Structured JSON format
48
+ */
49
+ export declare function exportToJSON(data: ExportData, outputPath: string): Effect.Effect<string, FileError, Logger>;
50
+ /**
51
+ * Main export function - handles all formats
52
+ *
53
+ * Phase 4.3: Multi-format export
54
+ */
55
+ export declare function exportExpenses(config: ExportConfig, data: ExportData): Effect.Effect<string, FileError, Logger>;
56
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/services/export.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAmM1C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAwC1C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CA4D1C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,UAAU,GACf,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAmB1C"}
@@ -0,0 +1,2 @@
1
+ export declare function processPdfWithTesseract(pdfBuffer: Buffer): Promise<string[]>;
2
+ //# sourceMappingURL=ocr-tesseract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ocr-tesseract.d.ts","sourceRoot":"","sources":["../../src/services/ocr-tesseract.ts"],"names":[],"mappings":"AA0FA,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgDlF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * OCR Service (Phase 2.1-2.6)
3
+ *
4
+ * Extracts text from PDF files and parses into transactions
5
+ * Uses pdf-parse for simple text-based PDFs
6
+ */
7
+ import { Effect } from 'effect';
8
+ import { OCRError } from '../domain/errors';
9
+ import { Logger } from '../layers/logger';
10
+ import { type ParseResult, type ParserConfig } from '../utils/transaction-parser';
11
+ /**
12
+ * OCR Configuration
13
+ */
14
+ export interface OCRConfig extends ParserConfig {
15
+ /** OCR engine to use */
16
+ engine?: 'pdf-parse' | 'tesseract';
17
+ /** Minimum OCR confidence (0-1) */
18
+ minOcrConfidence?: number;
19
+ }
20
+ /**
21
+ * Process a PDF buffer and extract transactions
22
+ *
23
+ * This is the main entry point for Phase 2 OCR functionality.
24
+ * It extracts text from PDF and then parses transactions.
25
+ */
26
+ export declare function processPdfToTransactions(pdfBuffer: Buffer, config?: OCRConfig): Effect.Effect<ParseResult, OCRError, Logger>;
27
+ /**
28
+ * Legacy function for backward compatibility
29
+ * @deprecated Use processPdfToTransactions instead
30
+ */
31
+ export declare function processPdf(pdfBuffer: Buffer): Promise<string[]>;
32
+ //# sourceMappingURL=ocr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ocr.d.ts","sourceRoot":"","sources":["../../src/services/ocr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAErG;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,wBAAwB;IACxB,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACnC,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,SAAc,GACrB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAsB9C;AAkDD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKrE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * File Compression Utilities
3
+ *
4
+ * Compress and decompress files using Bun's built-in streams
5
+ */
6
+ export type CompressionFormat = 'gzip' | 'deflate';
7
+ /**
8
+ * Compress a file using native streams
9
+ */
10
+ export declare function compressFile(inputPath: string, outputPath: string, format?: CompressionFormat): Promise<void>;
11
+ /**
12
+ * Decompress a file using native streams
13
+ */
14
+ export declare function decompressFile(inputPath: string, outputPath: string, format?: CompressionFormat): Promise<void>;
15
+ /**
16
+ * Compress data in memory using Web Streams API
17
+ */
18
+ export declare function compressData(data: Buffer, format?: CompressionFormat): Promise<Buffer>;
19
+ /**
20
+ * Decompress data in memory using Web Streams API
21
+ */
22
+ export declare function decompressData(data: Buffer, format?: CompressionFormat): Promise<Buffer>;
23
+ /**
24
+ * Get file size reduction ratio
25
+ */
26
+ export declare function calculateCompressionRatio(originalSize: number, compressedSize: number): number;
27
+ /**
28
+ * Get file size in bytes
29
+ */
30
+ export declare function getFileSize(filePath: string): number;
31
+ //# sourceMappingURL=compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/utils/compression.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnD;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,iBAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,iBAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,iBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBpG;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,iBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBtG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Console Utilities
3
+ *
4
+ * Enhanced console utilities using Bun features
5
+ */
6
+ export type LogLevel = 'info' | 'warn' | 'error' | 'success';
7
+ /**
8
+ * Format console output with emoji and colors
9
+ */
10
+ export declare function log(level: LogLevel, message: string, data?: unknown): void;
11
+ /**
12
+ * Display an info message
13
+ */
14
+ export declare const info: (message: string, data?: unknown) => void;
15
+ /**
16
+ * Display a warning message
17
+ */
18
+ export declare const warn: (message: string, data?: unknown) => void;
19
+ /**
20
+ * Display an error message
21
+ */
22
+ export declare const error: (message: string, data?: unknown) => void;
23
+ /**
24
+ * Display a success message
25
+ */
26
+ export declare const success: (message: string, data?: unknown) => void;
27
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/utils/console.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAS7D;;GAEG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAI1E;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,SAA+B,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,SAA+B,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,SAAgC,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,OAAO,OAAO,SAAkC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import cliProgress from 'cli-progress';
2
+ /**
3
+ * Progress Bar Utilities
4
+ *
5
+ * CLI progress bars for long-running operations
6
+ */
7
+ export type ProgressOptions = {
8
+ total: number;
9
+ format?: string;
10
+ barCompleteString?: string;
11
+ barIncompleteString?: string;
12
+ width?: number;
13
+ };
14
+ /**
15
+ * Create a progress bar
16
+ */
17
+ export declare function createProgressBar(options: ProgressOptions): cliProgress.SingleBar;
18
+ /**
19
+ * Update progress bar
20
+ */
21
+ export declare function updateProgress(bar: cliProgress.SingleBar, current: number): void;
22
+ /**
23
+ * Complete progress bar
24
+ */
25
+ export declare function completeProgress(bar: cliProgress.SingleBar): void;
26
+ /**
27
+ * Multi-bar progress for parallel operations
28
+ */
29
+ export declare function createMultiBar(): cliProgress.MultiBar;
30
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC;;;;GAIG;AAEH,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,CAAC,SAAS,CAWjF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAAC,QAAQ,CAKrD"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Generic Transaction Parser
3
+ *
4
+ * Phase 2.7: Parse OCR text into structured transactions
5
+ *
6
+ * This parser is designed to work with ANY invoice/receipt format,
7
+ * not just Amex statements. It uses multiple heuristic strategies
8
+ * to extract transaction data from unstructured text.
9
+ */
10
+ import { Effect } from 'effect';
11
+ import { RawTransaction } from '../domain/models';
12
+ import { ParseError } from '../domain/errors';
13
+ import { Logger } from '../layers/logger';
14
+ /**
15
+ * Transaction parsing configuration
16
+ */
17
+ export interface ParserConfig {
18
+ /** Default currency if not detected */
19
+ defaultCurrency?: 'SEK' | 'EUR' | 'USD' | 'CHF';
20
+ /** Minimum confidence threshold (0-1) */
21
+ minConfidence?: number;
22
+ /** Enable debug logging */
23
+ debug?: boolean;
24
+ }
25
+ /**
26
+ * Parse result with confidence scoring
27
+ */
28
+ export interface ParseResult {
29
+ transactions: RawTransaction[];
30
+ totalLines: number;
31
+ parsedLines: number;
32
+ confidence: number;
33
+ }
34
+ /**
35
+ * Parse raw OCR text into transactions
36
+ *
37
+ * This is a generic parser that works with various invoice formats.
38
+ * It uses multiple strategies to extract date, description, and amount.
39
+ */
40
+ export declare function parseTransactions(text: string, config?: ParserConfig): Effect.Effect<ParseResult, ParseError, Logger>;
41
+ //# sourceMappingURL=transaction-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-parser.d.ts","sourceRoot":"","sources":["../../src/utils/transaction-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,eAAe,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAChD,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAqBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,YAAiB,GACxB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CA8EhD"}
package/package.json ADDED
@@ -0,0 +1,95 @@
1
+ {
2
+ "name": "arek-e-docsnap",
3
+ "version": "0.1.0",
4
+ "description": "Parse invoices and split expenses between partners",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "bin": {
10
+ "docsnap": "./dist/cli.js"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "README.md",
15
+ "LICENSE",
16
+ "CHANGELOG.md"
17
+ ],
18
+ "scripts": {
19
+ "dev": "bun run --watch ./src/bin/cli.ts",
20
+ "build": "rm -rf dist && bun build ./src/bin/cli.ts --outdir ./dist --format esm --target node --external ink --external react --external effect --external exceljs --external 'ink-*' --external 'react-*' && bun build ./src/index.ts --outdir ./dist --format esm --target node --external effect --external exceljs && tsc --declaration --emitDeclarationOnly && chmod +x dist/cli.js && cp vendor/pdf.worker.min.mjs dist/pdf.worker.mjs",
21
+ "build:watch": "bun --watch run build",
22
+ "type-check": "tsc --noEmit",
23
+ "test": "bun test",
24
+ "test:watch": "bun test --watch",
25
+ "test:coverage": "bun test --coverage",
26
+ "lint": "biome lint src tests --fix",
27
+ "format": "biome format src tests docs --write",
28
+ "format:check": "biome format src tests docs --check",
29
+ "lint:check": "biome lint src tests",
30
+ "prepublishOnly": "bun run build && bun run test && bun run lint:check",
31
+ "prepack": "bun run build",
32
+ "publish": "bun publish"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public",
36
+ "tag": "latest"
37
+ },
38
+ "keywords": [
39
+ "invoice",
40
+ "receipt",
41
+ "ocr",
42
+ "pdf",
43
+ "expense",
44
+ "splitting",
45
+ "partners",
46
+ "settlement",
47
+ "typescript",
48
+ "effect-ts",
49
+ "cli"
50
+ ],
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/arek-e/docsnap.git"
54
+ },
55
+ "bugs": {
56
+ "url": "https://github.com/arek-e/docsnap/issues"
57
+ },
58
+ "homepage": "https://github.com/arek-e/docsnap#readme",
59
+ "author": {
60
+ "name": "arek-e",
61
+ "url": "https://github.com/arek-e"
62
+ },
63
+ "engines": {
64
+ "node": ">=18.0.0",
65
+ "bun": ">=1.3.0"
66
+ },
67
+ "dependencies": {
68
+ "cli-progress": "^3.12.0",
69
+ "date-fns": "^3.0.0",
70
+ "dommatrix": "^1.0.3",
71
+ "effect": "^3.0.0",
72
+ "exceljs": "^4.4.0",
73
+ "ink": "^6.6.0",
74
+ "ink-select-input": "^5.0.0",
75
+ "ink-spinner": "^5.0.0",
76
+ "ink-text-input": "^6.0.0",
77
+ "jsdom": "^27.4.0",
78
+ "pdf-parse": "^2.4.5",
79
+ "uuid": "^9.0.0"
80
+ },
81
+ "optionalDependencies": {
82
+ "sharp": "^0.33.0",
83
+ "tesseract.js": "^7.0.0",
84
+ "tesseract.js-core": "^6.1.2"
85
+ },
86
+ "devDependencies": {
87
+ "@types/bun": "latest",
88
+ "@types/node": "^20.0.0",
89
+ "@types/react": "^19.2.7",
90
+ "@types/react-dom": "^19.2.3",
91
+ "@types/uuid": "^11.0.0",
92
+ "biome": "latest",
93
+ "typescript": "^5"
94
+ }
95
+ }