twenty-import-csv 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.
Files changed (74) hide show
  1. package/.env.example +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +208 -0
  4. package/dist/browser-automation.d.ts +24 -0
  5. package/dist/browser-automation.d.ts.map +1 -0
  6. package/dist/browser-automation.js +295 -0
  7. package/dist/browser-automation.js.map +1 -0
  8. package/dist/cli-browser.d.ts +3 -0
  9. package/dist/cli-browser.d.ts.map +1 -0
  10. package/dist/cli-browser.js +134 -0
  11. package/dist/cli-browser.js.map +1 -0
  12. package/dist/cli-fixed.d.ts +3 -0
  13. package/dist/cli-fixed.d.ts.map +1 -0
  14. package/dist/cli-fixed.js +112 -0
  15. package/dist/cli-fixed.js.map +1 -0
  16. package/dist/cli-simple.d.ts +3 -0
  17. package/dist/cli-simple.d.ts.map +1 -0
  18. package/dist/cli-simple.js +167 -0
  19. package/dist/cli-simple.js.map +1 -0
  20. package/dist/cli.d.ts +3 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +167 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/load-graphql.d.ts +23 -0
  25. package/dist/load-graphql.d.ts.map +1 -0
  26. package/dist/load-graphql.js +239 -0
  27. package/dist/load-graphql.js.map +1 -0
  28. package/dist/load-old.d.ts +24 -0
  29. package/dist/load-old.d.ts.map +1 -0
  30. package/dist/load-old.js +183 -0
  31. package/dist/load-old.js.map +1 -0
  32. package/dist/load-real.d.ts +23 -0
  33. package/dist/load-real.d.ts.map +1 -0
  34. package/dist/load-real.js +202 -0
  35. package/dist/load-real.js.map +1 -0
  36. package/dist/load.d.ts +24 -0
  37. package/dist/load.d.ts.map +1 -0
  38. package/dist/load.js +195 -0
  39. package/dist/load.js.map +1 -0
  40. package/dist/mapper.d.ts +16 -0
  41. package/dist/mapper.d.ts.map +1 -0
  42. package/dist/mapper.js +181 -0
  43. package/dist/mapper.js.map +1 -0
  44. package/dist/parser-broken.d.ts +11 -0
  45. package/dist/parser-broken.d.ts.map +1 -0
  46. package/dist/parser-broken.js +88 -0
  47. package/dist/parser-broken.js.map +1 -0
  48. package/dist/parser-old.d.ts +11 -0
  49. package/dist/parser-old.d.ts.map +1 -0
  50. package/dist/parser-old.js +90 -0
  51. package/dist/parser-old.js.map +1 -0
  52. package/dist/parser.d.ts +11 -0
  53. package/dist/parser.d.ts.map +1 -0
  54. package/dist/parser.js +83 -0
  55. package/dist/parser.js.map +1 -0
  56. package/dist/reporter.d.ts +15 -0
  57. package/dist/reporter.d.ts.map +1 -0
  58. package/dist/reporter.js +144 -0
  59. package/dist/reporter.js.map +1 -0
  60. package/examples/contacts-mapping.txt +8 -0
  61. package/examples/contacts.csv +6 -0
  62. package/package.json +50 -0
  63. package/src/browser-automation.ts +350 -0
  64. package/src/cli-browser.ts +134 -0
  65. package/src/cli-simple.ts +158 -0
  66. package/src/cli.ts +159 -0
  67. package/src/load-graphql.ts +238 -0
  68. package/src/load-old.ts +177 -0
  69. package/src/load-real.ts +199 -0
  70. package/src/load.ts +197 -0
  71. package/src/mapper.ts +183 -0
  72. package/src/parser.ts +55 -0
  73. package/src/reporter.ts +131 -0
  74. package/tsconfig.json +24 -0
@@ -0,0 +1,11 @@
1
+ export interface ParsedRecord {
2
+ [key: string]: any;
3
+ }
4
+ export declare function parseCSV(filePath: string): Promise<ParsedRecord[]>;
5
+ export declare function detectColumns(data: ParsedRecord[]): string[];
6
+ export declare function getFileInfo(filePath: string): {
7
+ name: string;
8
+ size: number;
9
+ rows: number;
10
+ };
11
+ //# sourceMappingURL=parser-broken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-broken.d.ts","sourceRoot":"","sources":["../src/parser-broken.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAyBxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAc5D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAS1F"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseCSV = parseCSV;
37
+ exports.detectColumns = detectColumns;
38
+ exports.getFileInfo = getFileInfo;
39
+ const path_1 = require("path");
40
+ const Papa = __importStar(require("papaparse"));
41
+ async function parseCSV(filePath) {
42
+ return new Promise((resolve, reject) => {
43
+ Papa.parse(fs.readFileSync(filePath, 'utf8'), {
44
+ header: true,
45
+ skipEmptyLines: true,
46
+ transformHeader: (header) => header.trim().toLowerCase().replace(/\s+/g, '_'),
47
+ transform: (value, field) => {
48
+ // Trim values and handle empty strings
49
+ return value ? value.trim() : null;
50
+ },
51
+ complete: (results) => {
52
+ if (results.errors.length > 0) {
53
+ console.warn(`āš ļø CSV parsing warnings: ${results.errors.length}`);
54
+ results.errors.forEach((error) => {
55
+ console.warn(` Row ${error.row}: ${error.message}`);
56
+ });
57
+ }
58
+ resolve(results.data);
59
+ },
60
+ error: (error) => {
61
+ reject(new Error(`CSV parsing failed: ${error.message}`));
62
+ }
63
+ });
64
+ });
65
+ }
66
+ function detectColumns(data) {
67
+ if (data.length === 0)
68
+ return [];
69
+ const allFields = new Set();
70
+ data.forEach(record => {
71
+ Object.keys(record).forEach(key => {
72
+ if (record[key] !== null && record[key] !== undefined && record[key] !== '') {
73
+ allFields.add(key);
74
+ }
75
+ });
76
+ });
77
+ return Array.from(allFields).sort();
78
+ }
79
+ function getFileInfo(filePath) {
80
+ const stats = fs.statSync(filePath);
81
+ const fileName = path.basename(filePath);
82
+ return {
83
+ name: (0, path_1.basename)(filePath),
84
+ size: stats.size,
85
+ rows: 0 // Will be updated after parsing
86
+ };
87
+ }
88
+ //# sourceMappingURL=parser-broken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-broken.js","sourceRoot":"","sources":["../src/parser-broken.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,4BAyBC;AAED,sCAcC;AAED,kCASC;AA3DD,+BAAgC;AAChC,gDAAkC;AAM3B,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;YAC5C,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YACrF,SAAS,EAAE,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;gBAC1C,uCAAuC;gBACvC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,CAAC;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;gBACpB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAsB,EAAE,EAAE;wBAChD,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvD,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,CAAC,OAAO,CAAC,IAAsB,CAAC,CAAC;YAC1C,CAAC;YACD,KAAK,EAAE,CAAC,KAAsB,EAAE,EAAE;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,aAAa,CAAC,IAAoB;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAChC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC5E,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAgB,WAAW,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE,IAAA,eAAQ,EAAC,QAAQ,CAAC;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,CAAC,CAAC,gCAAgC;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ParsedRecord {
2
+ [key: string]: any;
3
+ }
4
+ export declare function parseCSV(filePath: string): Promise<ParsedRecord[]>;
5
+ export declare function detectColumns(data: ParsedRecord[]): string[];
6
+ export declare function getFileInfo(filePath: string): {
7
+ name: string;
8
+ size: number;
9
+ rows: number;
10
+ };
11
+ //# sourceMappingURL=parser-old.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-old.d.ts","sourceRoot":"","sources":["../src/parser-old.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA2BxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAc5D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAS1F"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseCSV = parseCSV;
37
+ exports.detectColumns = detectColumns;
38
+ exports.getFileInfo = getFileInfo;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const Papa = __importStar(require("papaparse"));
42
+ async function parseCSV(filePath) {
43
+ return new Promise((resolve, reject) => {
44
+ const fileContent = fs.readFileSync(filePath, 'utf8');
45
+ Papa.parse(fileContent, {
46
+ header: true,
47
+ skipEmptyLines: true,
48
+ transformHeader: (header) => header.trim().toLowerCase().replace(/\s+/g, '_'),
49
+ transform: (value, field) => {
50
+ // Trim values and handle empty strings
51
+ return value ? value.trim() : null;
52
+ },
53
+ complete: (results) => {
54
+ if (results.errors.length > 0) {
55
+ console.warn(`āš ļø CSV parsing warnings: ${results.errors.length}`);
56
+ results.errors.forEach(error => {
57
+ console.warn(` Row ${error.row}: ${error.message}`);
58
+ });
59
+ }
60
+ resolve(results.data);
61
+ },
62
+ error: (error) => {
63
+ reject(new Error(`CSV parsing failed: ${error.message}`));
64
+ }
65
+ });
66
+ });
67
+ }
68
+ function detectColumns(data) {
69
+ if (data.length === 0)
70
+ return [];
71
+ const allFields = new Set();
72
+ data.forEach(record => {
73
+ Object.keys(record).forEach(key => {
74
+ if (record[key] !== null && record[key] !== undefined && record[key] !== '') {
75
+ allFields.add(key);
76
+ }
77
+ });
78
+ });
79
+ return Array.from(allFields).sort();
80
+ }
81
+ function getFileInfo(filePath) {
82
+ const stats = fs.statSync(filePath);
83
+ const fileName = path.basename(filePath);
84
+ return {
85
+ name: fileName,
86
+ size: stats.size,
87
+ rows: 0 // Will be updated after parsing
88
+ };
89
+ }
90
+ //# sourceMappingURL=parser-old.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-old.js","sourceRoot":"","sources":["../src/parser-old.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,4BA2BC;AAED,sCAcC;AAED,kCASC;AA/DD,uCAAyB;AACzB,2CAA6B;AAE7B,gDAAkC;AAM3B,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACtB,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YACrF,SAAS,EAAE,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;gBAC1C,uCAAuC;gBACvC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,CAAC;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;gBACpB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvD,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,CAAC,OAAO,CAAC,IAAsB,CAAC,CAAC;YAC1C,CAAC;YACD,KAAK,EAAE,CAAC,KAAsB,EAAE,EAAE;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,aAAa,CAAC,IAAoB;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAChC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC5E,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAgB,WAAW,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,CAAC,CAAC,gCAAgC;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ParsedRecord {
2
+ [key: string]: any;
3
+ }
4
+ export declare function parseCSV(filePath: string): Promise<ParsedRecord[]>;
5
+ export declare function detectColumns(data: ParsedRecord[]): string[];
6
+ export declare function getFileInfo(filePath: string): {
7
+ name: string;
8
+ size: number;
9
+ rows: number;
10
+ };
11
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAoBxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAc5D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQ1F"}
package/dist/parser.js ADDED
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseCSV = parseCSV;
37
+ exports.detectColumns = detectColumns;
38
+ exports.getFileInfo = getFileInfo;
39
+ const fs_1 = require("fs");
40
+ const path_1 = require("path");
41
+ const Papa = __importStar(require("papaparse"));
42
+ async function parseCSV(filePath) {
43
+ return new Promise((resolve, reject) => {
44
+ Papa.parse((0, fs_1.readFileSync)(filePath, 'utf8'), {
45
+ header: true,
46
+ skipEmptyLines: true,
47
+ complete: (results) => {
48
+ if (results.errors.length > 0) {
49
+ console.warn(`āš ļø CSV parsing warnings: ${results.errors.length}`);
50
+ results.errors.forEach((error) => {
51
+ console.warn(` Row ${error.row}: ${error.message}`);
52
+ });
53
+ }
54
+ resolve(results.data);
55
+ },
56
+ error: (error) => {
57
+ reject(new Error(`CSV parsing failed: ${error.message}`));
58
+ }
59
+ });
60
+ });
61
+ }
62
+ function detectColumns(data) {
63
+ if (data.length === 0)
64
+ return [];
65
+ const allFields = new Set();
66
+ data.forEach(record => {
67
+ Object.keys(record).forEach(key => {
68
+ if (record[key] !== null && record[key] !== undefined && record[key] !== '') {
69
+ allFields.add(key);
70
+ }
71
+ });
72
+ });
73
+ return Array.from(allFields).sort();
74
+ }
75
+ function getFileInfo(filePath) {
76
+ const stats = (0, fs_1.statSync)(filePath);
77
+ return {
78
+ name: (0, path_1.basename)(filePath),
79
+ size: stats.size,
80
+ rows: 0 // Will be updated after parsing
81
+ };
82
+ }
83
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,4BAoBC;AAED,sCAcC;AAED,kCAQC;AAtDD,2BAA4C;AAC5C,+BAAgC;AAChC,gDAAkC;AAM3B,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;YACzC,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;gBACpB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;wBACpC,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvD,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,CAAC,OAAO,CAAC,IAAsB,CAAC,CAAC;YAC1C,CAAC;YACD,KAAK,EAAE,CAAC,KAAU,EAAE,EAAE;gBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,aAAa,CAAC,IAAoB;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAChC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC5E,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAgB,WAAW,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO;QACL,IAAI,EAAE,IAAA,eAAQ,EAAC,QAAQ,CAAC;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,CAAC,CAAC,gCAAgC;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { LoadResult } from './load';
2
+ export interface ProgressBar {
3
+ update: (value: number, options?: any) => void;
4
+ stop: () => void;
5
+ }
6
+ export declare function showProgress(total: number): ProgressBar;
7
+ export declare function generateReport(result: LoadResult, objectType: string): Promise<void>;
8
+ export declare function showPreview(data: any[], objectType: string, limit?: number): void;
9
+ export declare function validateOptions(options: any): {
10
+ valid: boolean;
11
+ errors: string[];
12
+ };
13
+ export declare function formatFileSize(bytes: number): string;
14
+ export declare function formatDuration(ms: number): string;
15
+ //# sourceMappingURL=reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAWvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCpF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,IAAI,CAapF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,GAAG,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgClF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAYjD"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.showProgress = showProgress;
37
+ exports.generateReport = generateReport;
38
+ exports.showPreview = showPreview;
39
+ exports.validateOptions = validateOptions;
40
+ exports.formatFileSize = formatFileSize;
41
+ exports.formatDuration = formatDuration;
42
+ const fs = __importStar(require("fs"));
43
+ const cliProgress = __importStar(require("cli-progress"));
44
+ function showProgress(total) {
45
+ const progressBar = new cliProgress.SingleBar({
46
+ format: 'šŸ“¤ Importing |{bar}| {percentage}% | {value}/{total} records | Batch: {batch}',
47
+ barCompleteChar: '\u2588',
48
+ barIncompleteChar: '\u2591',
49
+ hideCursor: true
50
+ }, cliProgress.Presets.shades_grey);
51
+ progressBar.start(total, 0, { batch: '0/0' });
52
+ return progressBar;
53
+ }
54
+ function generateReport(result, objectType) {
55
+ return new Promise((resolve) => {
56
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
57
+ const reportFile = `import-report-${objectType}-${timestamp}.json`;
58
+ const report = {
59
+ timestamp: new Date().toISOString(),
60
+ objectType: objectType,
61
+ summary: {
62
+ total: result.success + result.errors,
63
+ success: result.success,
64
+ errors: result.errors,
65
+ successRate: ((result.success / (result.success + result.errors)) * 100).toFixed(2) + '%'
66
+ },
67
+ errors: result.errorLog
68
+ };
69
+ fs.writeFileSync(reportFile, JSON.stringify(report, null, 2), 'utf8');
70
+ console.log(`\nšŸ“Š Report saved to ${reportFile}`);
71
+ // Save error log if there are errors
72
+ if (result.errors > 0) {
73
+ const errorLogFile = `import-errors-${timestamp}.log`;
74
+ fs.writeFileSync(errorLogFile, result.errorLog.join('\n'), 'utf8');
75
+ console.log(`šŸ“„ Error log saved to ${errorLogFile}`);
76
+ }
77
+ // Show summary
78
+ console.log('\nšŸ“‹ Import Summary:');
79
+ console.log(` Total records: ${result.success + result.errors}`);
80
+ console.log(` āœ… Successful: ${result.success}`);
81
+ console.log(` āŒ Errors: ${result.errors}`);
82
+ console.log(` šŸ“ˆ Success rate: ${((result.success / (result.success + result.errors)) * 100).toFixed(2)}%`);
83
+ resolve();
84
+ });
85
+ }
86
+ function showPreview(data, objectType, limit = 5) {
87
+ console.log(`\nšŸ‘€ Preview - First ${limit} records for ${objectType}:`);
88
+ const preview = data.slice(0, limit).map((record, index) => ({
89
+ '#': index + 1,
90
+ ...record
91
+ }));
92
+ console.table(preview);
93
+ if (data.length > limit) {
94
+ console.log(`... and ${data.length - limit} more records`);
95
+ }
96
+ }
97
+ function validateOptions(options) {
98
+ const errors = [];
99
+ if (!options.file) {
100
+ errors.push('CSV file is required (--file)');
101
+ }
102
+ if (!options.object) {
103
+ errors.push('Object type is required (--object)');
104
+ }
105
+ if (!options.twentyUrl) {
106
+ errors.push('Twenty URL is required (--twenty-url)');
107
+ }
108
+ if (!options.twentyKey) {
109
+ errors.push('Twenty API key is required (--twenty-key)');
110
+ }
111
+ if (options.file && !fs.existsSync(options.file)) {
112
+ errors.push(`CSV file not found: ${options.file}`);
113
+ }
114
+ const validObjects = ['people', 'companies', 'opportunities', 'tasks', 'notes'];
115
+ if (options.object && !validObjects.includes(options.object.toLowerCase())) {
116
+ errors.push(`Invalid object type. Valid options: ${validObjects.join(', ')}`);
117
+ }
118
+ return {
119
+ valid: errors.length === 0,
120
+ errors
121
+ };
122
+ }
123
+ function formatFileSize(bytes) {
124
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
125
+ if (bytes === 0)
126
+ return '0 Bytes';
127
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
128
+ return Math.round(bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i];
129
+ }
130
+ function formatDuration(ms) {
131
+ const seconds = Math.floor(ms / 1000);
132
+ const minutes = Math.floor(seconds / 60);
133
+ const hours = Math.floor(minutes / 60);
134
+ if (hours > 0) {
135
+ return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
136
+ }
137
+ else if (minutes > 0) {
138
+ return `${minutes}m ${seconds % 60}s`;
139
+ }
140
+ else {
141
+ return `${seconds}s`;
142
+ }
143
+ }
144
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ first_name=name.firstName
2
+ last_name=name.lastName
3
+ email=email
4
+ phone=phone
5
+ company=company
6
+ job_title=jobTitle
7
+ city=city
8
+ country=country
@@ -0,0 +1,6 @@
1
+ first_name,last_name,email,phone,company,job_title,city,country
2
+ John,Doe,john.doe@example.com,+1-555-0123,ACME Corporation,Software Engineer,New York,United States
3
+ Jane,Smith,jane.smith@example.com,+1-555-0124,Tech Industries,Product Manager,San Francisco,United States
4
+ Bob,Johnson,bob.johnson@example.com,+1-555-0125,StartupXYZ,CTO,Austin,United States
5
+ Alice,Williams,alice.williams@example.com,+1-555-0126,Innovation Labs,Designer,Boston,United States
6
+ Charlie,Brown,charlie.brown@example.com,+1-555-0127,Global Corp,Marketing Director,Chicago,United States
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "twenty-import-csv",
3
+ "version": "1.0.0",
4
+ "description": "Universal CLI tool for importing CSV files into Twenty CRM",
5
+ "main": "dist/cli.js",
6
+ "bin": {
7
+ "twenty-import-csv": "dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "start": "node dist/cli.js",
12
+ "dev": "tsc --watch",
13
+ "test": "npm run build && node test-import.js"
14
+ },
15
+ "keywords": [
16
+ "twenty",
17
+ "crm",
18
+ "csv",
19
+ "import",
20
+ "cli",
21
+ "automation",
22
+ "browser-automation"
23
+ ],
24
+ "author": "deliveredbyai",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/deliveredbyai/twenty-import-csv.git"
29
+ },
30
+ "bugs": {
31
+ "url": "https://github.com/deliveredbyai/twenty-import-csv/issues"
32
+ },
33
+ "homepage": "https://github.com/deliveredbyai/twenty-import-csv#readme",
34
+ "dependencies": {
35
+ "@playwright/test": "^1.40.0",
36
+ "axios": "^1.6.0",
37
+ "cli-progress": "^3.12.0",
38
+ "commander": "^11.1.0",
39
+ "papaparse": "^5.4.1",
40
+ "playwright": "^1.40.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/cli-progress": "^3.11.5",
44
+ "@types/node": "^20.10.0",
45
+ "@types/papaparse": "^5.3.14"
46
+ },
47
+ "engines": {
48
+ "node": ">=16.0.0"
49
+ }
50
+ }