@pocket-portfolio/universal-csv-importer 1.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/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # @pocket-portfolio/universal-csv-importer
2
+
3
+ Parse **any** broker CSV with **Smart Mapping** – no broker-specific adapter required.
4
+
5
+ Import trading history from any CSV (unknown broker, custom export, or spreadsheet) by mapping columns once. Heuristic-based mapping works out of the box; no API keys needed.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @pocket-portfolio/universal-csv-importer
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ### Quick: parse with automatic column inference
16
+
17
+ ```javascript
18
+ const { parseUniversal } = require('@pocket-portfolio/universal-csv-importer');
19
+
20
+ const file = /* File or { name, arrayBuffer, ... } */;
21
+ const result = await parseUniversal(file, 'en-US');
22
+
23
+ if (result.trades) {
24
+ console.log(`Parsed ${result.trades.length} trades`);
25
+ } else {
26
+ // result.type === 'REQUIRES_MAPPING' – show UI to confirm/edit column mapping
27
+ console.log('Headers:', result.headers);
28
+ console.log('Proposed mapping:', result.proposedMapping);
29
+ // Then call genericParse(result.rawCsvText, userMapping, 'en-US') with final mapping
30
+ }
31
+ ```
32
+
33
+ ### With explicit column mapping
34
+
35
+ ```javascript
36
+ const { genericParse } = require('@pocket-portfolio/universal-csv-importer');
37
+
38
+ const csvText = 'Date,Symbol,Action,Qty,Price\n...';
39
+ const mapping = {
40
+ date: 'Date',
41
+ ticker: 'Symbol',
42
+ action: 'Action',
43
+ quantity: 'Qty',
44
+ price: 'Price',
45
+ };
46
+ const result = genericParse(csvText, mapping, 'en-US');
47
+ console.log(result.trades.length);
48
+ ```
49
+
50
+ ### Infer mapping only (for custom UIs)
51
+
52
+ ```javascript
53
+ const { inferMapping } = require('@pocket-portfolio/universal-csv-importer');
54
+
55
+ const { mapping, confidence, source } = await inferMapping({
56
+ headers: ['Date', 'Symbol', 'Type', 'Qty', 'Price'],
57
+ sampleRows: [/* first few rows */],
58
+ });
59
+ // Use mapping in your UI; source is 'heuristic' or 'llm'
60
+ ```
61
+
62
+ ## Smart Mapping
63
+
64
+ - **Heuristics:** Built-in synonyms match common column names (Date, Symbol, Action, Qty, Price, etc.) so most CSVs map automatically.
65
+ - **Optional LLM:** When used inside an app that provides an LLM endpoint, low-confidence cases can be improved; the package works without it.
66
+
67
+ ## Types (TypeScript)
68
+
69
+ For `UniversalMapping`, `RequiresMappingResult`, `StandardField`, etc., use the core package:
70
+
71
+ ```ts
72
+ import type { UniversalMapping, RequiresMappingResult } from '@pocket-portfolio/importer';
73
+ ```
74
+
75
+ ## Related
76
+
77
+ - [@pocket-portfolio/importer](https://www.npmjs.com/package/@pocket-portfolio/importer) – Core library (broker-specific parsers + universal API)
78
+ - [Pocket Portfolio](https://www.pocketportfolio.app) – Free portfolio tracker
79
+
80
+ ## Support the project
81
+
82
+ This package is **100% free and open-source**.
83
+
84
+ **[Support the work → pocketportfolio.app/sponsor](https://www.pocketportfolio.app/sponsor)**
85
+
86
+ ## License
87
+
88
+ MIT
package/index.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Universal CSV Importer – Smart Mapping for any broker
3
+ *
4
+ * This package exposes only the Universal Import API from @pocket-portfolio/importer:
5
+ * parseUniversal, genericParse, genericRowToTrade, inferMapping.
6
+ * For TypeScript types (UniversalMapping, RequiresMappingResult, etc.) use the core package.
7
+ *
8
+ * @example
9
+ * ```javascript
10
+ * const { parseUniversal, genericParse, inferMapping } = require('@pocket-portfolio/universal-csv-importer');
11
+ *
12
+ * // Parse with automatic column inference (returns ParseResult or RequiresMappingResult)
13
+ * const result = await parseUniversal(file, 'en-US');
14
+ * if (result.type === 'REQUIRES_MAPPING') {
15
+ * // Show UI for user to confirm/edit mapping, then:
16
+ * const parsed = genericParse(result.rawCsvText, userMapping, 'en-US');
17
+ * }
18
+ * ```
19
+ */
20
+
21
+ const importer = require('@pocket-portfolio/importer');
22
+
23
+ module.exports = {
24
+ parseUniversal: importer.parseUniversal,
25
+ genericParse: importer.genericParse,
26
+ genericRowToTrade: importer.genericRowToTrade,
27
+ inferMapping: importer.inferMapping,
28
+ };
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@pocket-portfolio/universal-csv-importer",
3
+ "version": "1.0.0",
4
+ "description": "Parse any broker CSV with smart column mapping. No broker-specific adapter required. Free & open-source. Support: pocketportfolio.app/sponsor",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "postinstall": "node scripts/postinstall.js"
8
+ },
9
+ "keywords": [
10
+ "universal",
11
+ "csv",
12
+ "importer",
13
+ "smart mapping",
14
+ "column mapping",
15
+ "any broker",
16
+ "portfolio",
17
+ "finance",
18
+ "trading",
19
+ "typescript",
20
+ "pocket-portfolio"
21
+ ],
22
+ "author": "Pocket Portfolio",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/PocketPortfolio/Financialprofilenetwork.git",
27
+ "directory": "packages/aliases/universal-csv-importer"
28
+ },
29
+ "dependencies": {
30
+ "@pocket-portfolio/importer": "^1.1.0"
31
+ },
32
+ "files": [
33
+ "index.js",
34
+ "README.md",
35
+ "scripts"
36
+ ],
37
+ "homepage": "https://www.pocketportfolio.app",
38
+ "bugs": {
39
+ "url": "https://github.com/PocketPortfolio/Financialprofilenetwork/issues"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ }
44
+ }
@@ -0,0 +1,24 @@
1
+ // Terminal Billboard - Founder's Club Promotion
2
+ const reset = "\x1b[0m";
3
+ const bright = "\x1b[1m";
4
+ const cyan = "\x1b[36m";
5
+ const yellow = "\x1b[33m";
6
+ const red = "\x1b[31m";
7
+ const bgOrange = "\x1b[48;5;208m";
8
+ const black = "\x1b[30m";
9
+
10
+ console.log(`
11
+ ${cyan}╔══════════════════════════════════════════════════════════════╗${reset}
12
+ ${cyan}║ ║${reset}
13
+ ${cyan}║ ${bright}🚀 Thanks for installing Universal CSV Importer!${reset}${cyan} ║${reset}
14
+ ${cyan}║ ║${reset}
15
+ ${cyan}║ ${yellow}We remain 100% Free & Open Source because of you.${reset}${cyan} ║${reset}
16
+ ${cyan}║ ║${reset}
17
+ ${cyan}║ ${bgOrange}${black} UK FOUNDER'S CLUB - BATCH 1 ${reset}${cyan} ║${reset}
18
+ ${cyan}║ ${red}🔥 Only 42/50 Lifetime Spots Remaining${reset}${cyan} ║${reset}
19
+ ${cyan}║ ║${reset}
20
+ ${cyan}║ ${bright}Claim your Badge & Lifetime Access here:${reset}${cyan} ║${reset}
21
+ ${cyan}║ 👉 https://www.pocketportfolio.app/sponsor?ref=npm ║${reset}
22
+ ${cyan}║ ║${reset}
23
+ ${cyan}╚══════════════════════════════════════════════════════════════╝${reset}
24
+ `);