@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
JavaScript
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==