UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

81 lines 11.4 kB
import { Injectable } from '@angular/core'; import { of } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "../file-reader.service"; export class ImportCsvFileService { constructor(fileReaderService) { this.fileReaderService = fileReaderService; } /** * Load CSV file. * * @param file File we want to load as CSV. * @param separator Separator for CSV data. * @return {Observable<string[][]>} Imported file */ loadFile(file, separator) { return this.fileReaderService .loadTextFile(file) .pipe(map((res) => this.parse(res, separator))); } /** * Combined csv validation * * @param file File we want to load as CSV. * @param separator Separator for CSV data. * @param isDataParsable (optional) Callback for verify that structure type is proper. * @param maxEntries (optional) Limitation for maximum entries count. * @return {Observable<CsvFileValidationErrors | null>} Result of validation */ validateFile(file, { separator, isDataParsable, maxEntries, }) { const errors = {}; return this.fileReaderService.loadTextFile(file).pipe(tap((data) => { this.validateEmpty(data, errors); }), map((res) => this.parse(res, separator)), tap((data) => { this.validateNotParsable(data, errors, isDataParsable); this.validateTooManyEntries(data, errors, maxEntries); }), catchError((errors) => of(errors)), map(() => (Object.keys(errors).length === 0 ? null : errors))); } /** * Processes the CSV data * * @param csvString raw extracted data from CSV * @param separator for csv data * @param ignoreHeader (optional) flag allows for ignore headers row while reading * @returns {string[][]} Parsed file */ parse(csvString, separator, ignoreHeader = true) { return csvString .split('\n') .map((row) => row.split(separator).map((cell) => cell.replace(/"/g, ''))) .filter((value, index) => !(ignoreHeader && index === 0) && value[0] !== ''); } validateEmpty(data, errors) { if (data.toString().length === 0) { errors.empty = true; throw errors; } } validateTooManyEntries(data, errors, maxEntries) { if (maxEntries && data.length > maxEntries) { errors.tooManyEntries = { maxEntries }; throw errors; } } validateNotParsable(data, errors, isDataParsable) { if (isDataParsable && !isDataParsable(data)) { errors.notParsable = true; throw errors; } } } ImportCsvFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ImportCsvFileService, deps: [{ token: i1.FileReaderService }], target: i0.ɵɵFactoryTarget.Injectable }); ImportCsvFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ImportCsvFileService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ImportCsvFileService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.FileReaderService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzdi1maWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL3NoYXJlZC9zZXJ2aWNlcy9maWxlL2Nzdi9pbXBvcnQtY3N2LWZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU90RCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQXNCLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUM5RDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsSUFBVSxFQUFFLFNBQWlCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQjthQUMxQixZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLENBQ1YsSUFBVSxFQUNWLEVBQ0UsU0FBUyxFQUNULGNBQWMsRUFDZCxVQUFVLEdBS1g7UUFFRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO1FBQzNDLE9BQ0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3pDLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFDeEMsR0FBRyxDQUFDLENBQUMsSUFBZ0IsRUFBRSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ2xDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM5RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTyxLQUFLLENBQ2IsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsWUFBWSxHQUFHLElBQUk7UUFFbkIsT0FBTyxTQUFTO2FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQzthQUNYLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDeEUsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FDcEUsQ0FBQztJQUNOLENBQUM7SUFFUyxhQUFhLENBQUMsSUFBWSxFQUFFLE1BQXdCO1FBQzVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxNQUFNLENBQUM7U0FDZDtJQUNILENBQUM7SUFFUyxzQkFBc0IsQ0FDOUIsSUFBZ0IsRUFDaEIsTUFBd0IsRUFDeEIsVUFBbUI7UUFFbkIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUU7WUFDMUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sTUFBTSxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRVMsbUJBQW1CLENBQzNCLElBQWdCLEVBQ2hCLE1BQXdCLEVBQ3hCLGNBQThDO1FBRTlDLElBQUksY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxDQUFDO1NBQ2Q7SUFDSCxDQUFDOztpSEFyR1Usb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZpbGVSZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1yZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDc3ZGaWxlVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4vY3N2LWZpbGUtdmFsaWRhdGlvbi1lcnJvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSW1wb3J0Q3N2RmlsZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZmlsZVJlYWRlclNlcnZpY2U6IEZpbGVSZWFkZXJTZXJ2aWNlKSB7fVxuICAvKipcbiAgICogTG9hZCBDU1YgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZSB3YW50IHRvIGxvYWQgYXMgQ1NWLlxuICAgKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciBmb3IgQ1NWIGRhdGEuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8c3RyaW5nW11bXT59IEltcG9ydGVkIGZpbGVcbiAgICovXG4gIGxvYWRGaWxlKGZpbGU6IEZpbGUsIHNlcGFyYXRvcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmdbXVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVJlYWRlclNlcnZpY2VcbiAgICAgIC5sb2FkVGV4dEZpbGUoZmlsZSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiB0aGlzLnBhcnNlKHJlcyBhcyBzdHJpbmcsIHNlcGFyYXRvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lZCBjc3YgdmFsaWRhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlIHdhbnQgdG8gbG9hZCBhcyBDU1YuXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhdG9yIGZvciBDU1YgZGF0YS5cbiAgICogQHBhcmFtIGlzRGF0YVBhcnNhYmxlIChvcHRpb25hbCkgQ2FsbGJhY2sgZm9yIHZlcmlmeSB0aGF0IHN0cnVjdHVyZSB0eXBlIGlzIHByb3Blci5cbiAgICogQHBhcmFtIG1heEVudHJpZXMgKG9wdGlvbmFsKSBMaW1pdGF0aW9uIGZvciBtYXhpbXVtIGVudHJpZXMgY291bnQuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3N2RmlsZVZhbGlkYXRpb25FcnJvcnMgfCBudWxsPn0gUmVzdWx0IG9mIHZhbGlkYXRpb25cbiAgICovXG4gIHZhbGlkYXRlRmlsZShcbiAgICBmaWxlOiBGaWxlLFxuICAgIHtcbiAgICAgIHNlcGFyYXRvcixcbiAgICAgIGlzRGF0YVBhcnNhYmxlLFxuICAgICAgbWF4RW50cmllcyxcbiAgICB9OiB7XG4gICAgICBzZXBhcmF0b3I6IHN0cmluZztcbiAgICAgIGlzRGF0YVBhcnNhYmxlPzogKGRhdGE6IHN0cmluZ1tdW10pID0+IGJvb2xlYW47XG4gICAgICBtYXhFbnRyaWVzPzogbnVtYmVyO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxDc3ZGaWxlVmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcbiAgICBjb25zdCBlcnJvcnM6IENzdkZpbGVWYWxpZGF0aW9uRXJyb3JzID0ge307XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmlsZVJlYWRlclNlcnZpY2UubG9hZFRleHRGaWxlKGZpbGUpIGFzIE9ic2VydmFibGU8c3RyaW5nPlxuICAgICkucGlwZShcbiAgICAgIHRhcCgoZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVFbXB0eShkYXRhLCBlcnJvcnMpO1xuICAgICAgfSksXG4gICAgICBtYXAoKHJlcykgPT4gdGhpcy5wYXJzZShyZXMsIHNlcGFyYXRvcikpLFxuICAgICAgdGFwKChkYXRhOiBzdHJpbmdbXVtdKSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVOb3RQYXJzYWJsZShkYXRhLCBlcnJvcnMsIGlzRGF0YVBhcnNhYmxlKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVRvb01hbnlFbnRyaWVzKGRhdGEsIGVycm9ycywgbWF4RW50cmllcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9ycykgPT4gb2YoZXJyb3JzKSksXG4gICAgICBtYXAoKCkgPT4gKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID09PSAwID8gbnVsbCA6IGVycm9ycykpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgdGhlIENTViBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBjc3ZTdHJpbmcgcmF3IGV4dHJhY3RlZCBkYXRhIGZyb20gQ1NWXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgZm9yIGNzdiBkYXRhXG4gICAqIEBwYXJhbSBpZ25vcmVIZWFkZXIgKG9wdGlvbmFsKSBmbGFnIGFsbG93cyBmb3IgaWdub3JlIGhlYWRlcnMgcm93IHdoaWxlIHJlYWRpbmdcbiAgICogQHJldHVybnMge3N0cmluZ1tdW119IFBhcnNlZCBmaWxlXG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2UoXG4gICAgY3N2U3RyaW5nOiBzdHJpbmcsXG4gICAgc2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaWdub3JlSGVhZGVyID0gdHJ1ZVxuICApOiBzdHJpbmdbXVtdIHtcbiAgICByZXR1cm4gY3N2U3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKChyb3cpID0+IHJvdy5zcGxpdChzZXBhcmF0b3IpLm1hcCgoY2VsbCkgPT4gY2VsbC5yZXBsYWNlKC9cIi9nLCAnJykpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHZhbHVlLCBpbmRleCkgPT4gIShpZ25vcmVIZWFkZXIgJiYgaW5kZXggPT09IDApICYmIHZhbHVlWzBdICE9PSAnJ1xuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUVtcHR5KGRhdGE6IHN0cmluZywgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzKTogdm9pZCB7XG4gICAgaWYgKGRhdGEudG9TdHJpbmcoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGVycm9ycy5lbXB0eSA9IHRydWU7XG4gICAgICB0aHJvdyBlcnJvcnM7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlVG9vTWFueUVudHJpZXMoXG4gICAgZGF0YTogc3RyaW5nW11bXSxcbiAgICBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMsXG4gICAgbWF4RW50cmllcz86IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBpZiAobWF4RW50cmllcyAmJiBkYXRhLmxlbmd0aCA+IG1heEVudHJpZXMpIHtcbiAgICAgIGVycm9ycy50b29NYW55RW50cmllcyA9IHsgbWF4RW50cmllcyB9O1xuICAgICAgdGhyb3cgZXJyb3JzO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU5vdFBhcnNhYmxlKFxuICAgIGRhdGE6IHN0cmluZ1tdW10sXG4gICAgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzLFxuICAgIGlzRGF0YVBhcnNhYmxlPzogKGRhdGE6IHN0cmluZ1tdW10pID0+IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYgKGlzRGF0YVBhcnNhYmxlICYmICFpc0RhdGFQYXJzYWJsZShkYXRhKSkge1xuICAgICAgZXJyb3JzLm5vdFBhcnNhYmxlID0gdHJ1ZTtcbiAgICAgIHRocm93IGVycm9ycztcbiAgICB9XG4gIH1cbn1cbiJdfQ==