{"version":3,"file":"ngx-csv-parser.mjs","sources":["../../../projects/ngx-csv-parser/src/lib/_model/ngx-csv-parser-error.interface.ts","../../../projects/ngx-csv-parser/src/lib/ngx-csv-parser.service.ts","../../../projects/ngx-csv-parser/src/lib/ngx-csv-parser.component.ts","../../../projects/ngx-csv-parser/src/lib/ngx-csv-parser.module.ts","../../../projects/ngx-csv-parser/src/public-api.ts","../../../projects/ngx-csv-parser/src/ngx-csv-parser.ts"],"sourcesContent":["export class NgxCSVParserError {\r\n    type: string;     // A generalization of the error\r\n    code: number;     // Standardized error code\r\n    message: string;  // Human-readable details\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Observer } from 'rxjs';\r\nimport { NgxCSVParserError } from './_model/ngx-csv-parser-error.interface';\r\nimport { CSVParserConfig } from './_model/ngx-csv-parser-config.interface';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class NgxCsvParser {\r\n    private defaultCSVParserConfig: CSVParserConfig = {\r\n        header: true,\r\n        delimiter: ',',\r\n        encoding: 'utf8'\r\n    };\r\n\r\n    parse(\r\n        csvFile: File,\r\n        config: CSVParserConfig\r\n    ): Observable<Array<any> | NgxCSVParserError> {\r\n        config = {\r\n            ...this.defaultCSVParserConfig,\r\n            ...config\r\n        };\r\n\r\n        const ngxCSVParserObserver = new Observable(\r\n            (observer: Observer<Array<any> | NgxCSVParserError>) => {\r\n                try {\r\n                    let csvRecords = null;\r\n\r\n                    if (this.isCSVFile(csvFile)) {\r\n                        const reader = new FileReader();\r\n                        reader.readAsText(csvFile, config.encoding);\r\n\r\n                        reader.onload = () => {\r\n                            const csvData = (reader.result as string).trim();\r\n                            if (csvData) {\r\n                                const csvRecordsArray = this.csvStringToArray(\r\n                                    csvData,\r\n                                    config.delimiter\r\n                                );\r\n\r\n                                const headersRow =\r\n                                    this.getHeaderArray(csvRecordsArray);\r\n\r\n                                csvRecords =\r\n                                    this.getDataRecordsArrayFromCSVFile(\r\n                                        csvRecordsArray,\r\n                                        headersRow.length,\r\n                                        config\r\n                                    );\r\n\r\n                                observer.next(csvRecords);\r\n                            } else {\r\n                                observer.next([]);\r\n                            }\r\n                            observer.complete();\r\n                        };\r\n\r\n                        reader.onerror = () => {\r\n                            this.badCSVDataFormatErrorHandler(observer);\r\n                        };\r\n                    } else {\r\n                        this.notCSVFileErrorHandler(observer);\r\n                    }\r\n                } catch (error) {\r\n                    this.unknownCSVParserErrorHandler(observer);\r\n                }\r\n            }\r\n        );\r\n\r\n        return ngxCSVParserObserver;\r\n    }\r\n\r\n    csvStringToArray(csvDataString: string, delimiter: string) {\r\n        const regexPattern = new RegExp(\r\n            `(\\\\${delimiter}|\\\\r?\\\\n|\\\\r|^)(?:\\\"((?:\\\\\\\\.|\\\"\\\"|[^\\\\\\\\\\\"])*)\\\"|([^\\\\${delimiter}\\\"\\\\r\\\\n]*))`,\r\n            'gi'\r\n        );\r\n        let matchedPatternArray = regexPattern.exec(csvDataString);\r\n        const resultCSV = [[]];\r\n        while (matchedPatternArray) {\r\n            if (\r\n                matchedPatternArray[1].length &&\r\n                matchedPatternArray[1] !== delimiter\r\n            ) {\r\n                resultCSV.push([]);\r\n            }\r\n            const cleanValue = matchedPatternArray[2]\r\n                ? matchedPatternArray[2].replace(\r\n                      new RegExp('[\\\\\\\\\"](.)', 'g'),\r\n                      '$1'\r\n                  )\r\n                : matchedPatternArray[3];\r\n            resultCSV[resultCSV.length - 1].push(cleanValue);\r\n            matchedPatternArray = regexPattern.exec(csvDataString);\r\n        }\r\n        return resultCSV;\r\n    }\r\n\r\n    getDataRecordsArrayFromCSVFile(\r\n        csvRecordsArray: any,\r\n        headerLength: any,\r\n        config: any\r\n    ) {\r\n        const dataArr = [];\r\n        const headersArray = csvRecordsArray[0];\r\n\r\n        const startingRowToParseData = config.header ? 1 : 0;\r\n\r\n        for (let i = startingRowToParseData; i < csvRecordsArray.length; i++) {\r\n            const data = csvRecordsArray[i];\r\n\r\n            if (data.length === headerLength && config.header) {\r\n                const csvRecord = {};\r\n\r\n                for (let j = 0; j < data.length; j++) {\r\n                    if (data[j] === undefined || data[j] === null) {\r\n                        csvRecord[headersArray[j]] = '';\r\n                    } else {\r\n                        csvRecord[headersArray[j]] = data[j].trim();\r\n                    }\r\n                }\r\n                dataArr.push(csvRecord);\r\n            } else {\r\n                dataArr.push(data);\r\n            }\r\n        }\r\n        return dataArr;\r\n    }\r\n\r\n    isCSVFile(file: any) {\r\n        return file.name.toLowerCase().endsWith('.csv');\r\n    }\r\n\r\n    getHeaderArray(csvRecordsArr: any) {\r\n        const headers = csvRecordsArr[0];\r\n        const headerArray = [];\r\n        for (const header of headers) {\r\n            headerArray.push(header);\r\n        }\r\n        return headerArray;\r\n    }\r\n\r\n    notCSVFileErrorHandler(observer: Observer<any>) {\r\n        const ngcCSVParserError: NgxCSVParserError = this.errorBuilder(\r\n            'NOT_A_CSV_FILE',\r\n            'Selected file is not a csv File Type.',\r\n            2\r\n        );\r\n        observer.error(ngcCSVParserError);\r\n    }\r\n\r\n    unknownCSVParserErrorHandler(observer: Observer<any>) {\r\n        const ngcCSVParserError: NgxCSVParserError = this.errorBuilder(\r\n            'UNKNOWN_ERROR',\r\n            'Unknown error. Please refer to official documentation for library usage.',\r\n            404\r\n        );\r\n        observer.error(ngcCSVParserError);\r\n    }\r\n\r\n    badCSVDataFormatErrorHandler(observer: Observer<any>) {\r\n        const ngcCSVParserError: NgxCSVParserError = this.errorBuilder(\r\n            'BAD_CSV_DATA_FORMAT',\r\n            'Unable to parse CSV File.',\r\n            1\r\n        );\r\n        observer.error(ngcCSVParserError);\r\n    }\r\n\r\n    errorBuilder(type: string, message: any, code: any): NgxCSVParserError {\r\n        const ngcCSVParserError: NgxCSVParserError = new NgxCSVParserError();\r\n        ngcCSVParserError.type = type;\r\n        ngcCSVParserError.message = message;\r\n        ngcCSVParserError.code = code;\r\n        return ngcCSVParserError;\r\n    }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'lib-ngx-csv-parser',\n  template: `\n    <p>\n      ngx-csv-parser works!\n    </p>\n  `,\n  styles: []\n})\nexport class NgxCsvParserComponent implements OnInit {\n\n  constructor() { }\n\n  ngOnInit() {\n  }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NgxCsvParserComponent } from './ngx-csv-parser.component';\nimport { NgxCsvParser } from './ngx-csv-parser.service';\n\n@NgModule({\n  declarations: [NgxCsvParserComponent],\n  imports: [\n  ],\n  providers: [NgxCsvParser],\n  exports: [NgxCsvParserComponent]\n})\nexport class NgxCsvParserModule { }\n","/*\n * Public API Surface of ngx-csv-parser\n */\n\nexport * from './lib/ngx-csv-parser.service';\nexport * from './lib/_model/ngx-csv-parser-error.interface';\nexport * from './lib/ngx-csv-parser.component';\nexport * from './lib/ngx-csv-parser.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}