Skip to content

Commit 0d52cde

Browse files
committed
[#27] Refactoring
1 parent f31beb5 commit 0d52cde

File tree

4 files changed

+16
-19
lines changed

4 files changed

+16
-19
lines changed

src/lib/csv-stringifier-factory.ts

+2-15
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import {ObjectStringifierHeader} from './record';
66
const DEFAULT_FIELD_DELIMITER = ',';
77
const VALID_FIELD_DELIMITERS = [DEFAULT_FIELD_DELIMITER, ';'];
88

9-
const DEFAULT_RECORD_DELIMITER = '\n';
10-
const VALID_RECORD_DELIMITERS = [DEFAULT_RECORD_DELIMITER, '\r\n'];
11-
129
export interface ArrayCsvStringifierParams {
1310
header?: string[];
1411
fieldDelimiter?: string;
@@ -25,20 +22,16 @@ export class CsvStringifierFactory {
2522

2623
createArrayCsvStringifier(params: ArrayCsvStringifierParams) {
2724
const fieldDelimiter = params.fieldDelimiter || DEFAULT_FIELD_DELIMITER;
28-
const recordDelimiter = params.recordDelimiter || DEFAULT_RECORD_DELIMITER;
2925
_validateFieldDelimiter(fieldDelimiter);
30-
_validateRecordDelimiter(recordDelimiter);
3126
const fieldStringifier = new FieldStringifier(fieldDelimiter);
32-
return new ArrayCsvStringifier(fieldStringifier, fieldDelimiter, recordDelimiter, params.header);
27+
return new ArrayCsvStringifier(fieldStringifier, fieldDelimiter, params.recordDelimiter, params.header);
3328
}
3429

3530
createObjectCsvStringifier(params: ObjectCsvStringifierParams) {
3631
const fieldDelimiter = params.fieldDelimiter || DEFAULT_FIELD_DELIMITER;
37-
const recordDelimiter = params.recordDelimiter || DEFAULT_RECORD_DELIMITER;
3832
_validateFieldDelimiter(fieldDelimiter);
39-
_validateRecordDelimiter(recordDelimiter);
4033
const fieldStringifier = new FieldStringifier(fieldDelimiter);
41-
return new ObjectCsvStringifier(fieldStringifier, fieldDelimiter, recordDelimiter, params.header);
34+
return new ObjectCsvStringifier(fieldStringifier, fieldDelimiter, params.header, params.recordDelimiter);
4235
}
4336

4437
}
@@ -48,9 +41,3 @@ function _validateFieldDelimiter(delimiter: string): void {
4841
throw new Error(`Invalid field delimiter \`${delimiter}\` is specified`);
4942
}
5043
}
51-
52-
function _validateRecordDelimiter(delimiter: string): void {
53-
if (VALID_RECORD_DELIMITERS.indexOf(delimiter) === -1) {
54-
throw new Error(`Invalid record delimiter \`${delimiter}\` is specified`);
55-
}
56-
}

src/lib/csv-stringifiers/abstract.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
import {FieldStringifier} from '../field-stringifier';
22
import {Field} from '../record';
33

4+
const DEFAULT_RECORD_DELIMITER = '\n';
5+
const VALID_RECORD_DELIMITERS = [DEFAULT_RECORD_DELIMITER, '\r\n'];
6+
47
export abstract class CsvStringifier<T> {
58
private readonly fieldStringifier: FieldStringifier;
69
private readonly fieldDelimiter: string;
710
private readonly recordDelimiter: string;
811

9-
constructor(fieldStringifier: FieldStringifier, fieldDelimiter: string, recordDelimiter: string) {
12+
constructor(fieldStringifier: FieldStringifier, fieldDelimiter: string, recordDelimiter?: string) {
1013
this.fieldStringifier = fieldStringifier;
1114
this.fieldDelimiter = fieldDelimiter;
12-
this.recordDelimiter = recordDelimiter;
15+
this.recordDelimiter = recordDelimiter || DEFAULT_RECORD_DELIMITER;
16+
_validateRecordDelimiter(this.recordDelimiter);
1317
}
1418

1519
getHeaderString(): string | null {
@@ -32,3 +36,9 @@ export abstract class CsvStringifier<T> {
3236
.join(this.fieldDelimiter);
3337
}
3438
}
39+
40+
function _validateRecordDelimiter(delimiter: string): void {
41+
if (VALID_RECORD_DELIMITERS.indexOf(delimiter) === -1) {
42+
throw new Error(`Invalid record delimiter \`${delimiter}\` is specified`);
43+
}
44+
}

src/lib/csv-stringifiers/array.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {Field} from '../record';
55
export class ArrayCsvStringifier extends CsvStringifier<Field[]> {
66
private readonly header?: string[];
77

8-
constructor(fieldStringifier: FieldStringifier, fieldDelimiter: string, recordDelimiter: string, header?: string[]) {
8+
constructor(fieldStringifier: FieldStringifier, fieldDelimiter: string, recordDelimiter?: string, header?: string[]) {
99
super(fieldStringifier, fieldDelimiter, recordDelimiter);
1010
this.header = header;
1111
}

src/lib/csv-stringifiers/object.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {ObjectMap} from '../lang';
66
export class ObjectCsvStringifier extends CsvStringifier<ObjectMap<Field>> {
77
private readonly header: ObjectStringifierHeader;
88

9-
constructor(fieldStringifier: FieldStringifier, fieldDelimiter: string, recordDelimiter: string, header: ObjectStringifierHeader) {
9+
constructor(fieldStringifier: FieldStringifier, fieldDelimiter: string, header: ObjectStringifierHeader, recordDelimiter?: string) {
1010
super(fieldStringifier, fieldDelimiter, recordDelimiter);
1111
this.header = header;
1212
}

0 commit comments

Comments
 (0)