ng2csv 2.0.1 → 4.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.
- package/README.md +123 -24
- package/{esm2020 → esm2022}/lib/auto-csv-row-mapper.class.mjs +50 -50
- package/{esm2020 → esm2022}/lib/csv-configuration.class.mjs +11 -11
- package/{esm2020 → esm2022}/lib/csv-row-mapper.interface.mjs +2 -2
- package/esm2022/lib/ng2csv.module.mjs +12 -0
- package/{esm2020 → esm2022}/lib/ng2csv.service.mjs +68 -68
- package/{esm2020 → esm2022}/lib/ordered-projection-csv-row-mapper.class.mjs +12 -12
- package/{esm2020 → esm2022}/ng2csv.mjs +4 -4
- package/{esm2020 → esm2022}/public-api.mjs +10 -10
- package/{fesm2020 → fesm2022}/ng2csv.mjs +139 -139
- package/fesm2022/ng2csv.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/auto-csv-row-mapper.class.d.ts +9 -9
- package/lib/csv-configuration.class.d.ts +8 -8
- package/lib/csv-row-mapper.interface.d.ts +4 -4
- package/lib/ng2csv.module.d.ts +6 -6
- package/lib/ng2csv.service.d.ts +12 -12
- package/lib/ordered-projection-csv-row-mapper.class.d.ts +7 -7
- package/package.json +6 -12
- package/public-api.d.ts +6 -6
- package/esm2020/lib/ng2csv.module.mjs +0 -12
- package/fesm2015/ng2csv.mjs +0 -159
- package/fesm2015/ng2csv.mjs.map +0 -1
- package/fesm2020/ng2csv.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,24 +1,123 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
# ng2csv
|
|
2
|
+
|
|
3
|
+
[](https://github.com/rars/ng2csv/actions/workflows/node.js.yml)
|
|
4
|
+
|
|
5
|
+
Angular module for saving CSV files.
|
|
6
|
+
|
|
7
|
+
## Quickstart
|
|
8
|
+
|
|
9
|
+
1. Install `file-saver` and `ng2csv` modules from npm:
|
|
10
|
+
```
|
|
11
|
+
npm install file-saver ng2csv --save
|
|
12
|
+
```
|
|
13
|
+
2. Import `Ng2CsvModule` to your app:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
17
|
+
import { NgModule } from '@angular/core';
|
|
18
|
+
import { Ng2CsvModule } from 'ng2csv';
|
|
19
|
+
import { AppComponent } from './app.component';
|
|
20
|
+
|
|
21
|
+
@NgModule({
|
|
22
|
+
declarations: [
|
|
23
|
+
AppComponent
|
|
24
|
+
],
|
|
25
|
+
imports: [
|
|
26
|
+
BrowserModule,
|
|
27
|
+
Ng2CsvModule
|
|
28
|
+
],
|
|
29
|
+
providers: [],
|
|
30
|
+
bootstrap: [AppComponent]
|
|
31
|
+
})
|
|
32
|
+
export class AppModule { }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
3. Inject the `Ng2CsvService` into your component:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
import { Component } from '@angular/core';
|
|
39
|
+
import { Ng2CsvService } from 'ng2csv';
|
|
40
|
+
|
|
41
|
+
@Component({
|
|
42
|
+
selector: 'app-root',
|
|
43
|
+
templateUrl: './app.component.html',
|
|
44
|
+
styleUrls: ['./app.component.css'],
|
|
45
|
+
providers: [Ng2CsvService]
|
|
46
|
+
})
|
|
47
|
+
export class AppComponent {
|
|
48
|
+
public constructor(private ng2Csv: Ng2CsvService) {}
|
|
49
|
+
|
|
50
|
+
public download(): void {
|
|
51
|
+
this.ng2Csv.download([
|
|
52
|
+
{
|
|
53
|
+
id: 1,
|
|
54
|
+
name: 'Alice'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 2,
|
|
58
|
+
name: 'Bob'
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
'names.csv');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Configuration
|
|
67
|
+
|
|
68
|
+
### Auto mapping
|
|
69
|
+
|
|
70
|
+
Unless specified, an automatic mapping is used from the data to columns. It does this by looking at the properties available on the object and then enumerating them, one column for each, and using the `.toString()` method to serialise the values to the CSV data.
|
|
71
|
+
|
|
72
|
+
### Row headers and ordering
|
|
73
|
+
|
|
74
|
+
You can output a subset of the data's properties to CSV by defining your own custom mapping. This allows you to specify the order columns are written in and what value is written for each row in each column.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
import { OrderedProjectionCsvRowMapper } from 'ng2csv';
|
|
78
|
+
// ...
|
|
79
|
+
const rowMapper = new OrderedProjectionCsvRowMapper<MyType>([
|
|
80
|
+
['First Name', x => x.Name],
|
|
81
|
+
['Identifier', x => 'N' + x.Id.toString()]
|
|
82
|
+
]);
|
|
83
|
+
this.ng2Csv.download(myData, 'file.csv', rowMapper);
|
|
84
|
+
/*
|
|
85
|
+
Generates CSV:
|
|
86
|
+
"First Name","Identifier"
|
|
87
|
+
Alice,N1
|
|
88
|
+
Bob,N2
|
|
89
|
+
*/
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Delimiters, header row
|
|
93
|
+
|
|
94
|
+
You can control what character is used to separate columns (e.g. to use ';' or tab separators rather than ',') and whether to include a header row.
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
import { CsvConfiguration } from 'ng2csv';
|
|
98
|
+
// ...
|
|
99
|
+
const csvConfig = new CsvConfiguration();
|
|
100
|
+
csvConfig.delimiter = '\t';
|
|
101
|
+
csvConfig.includeHeaderRow = false;
|
|
102
|
+
this.ng2Csv.download(myData, 'file.csv', undefined, csvConfig);
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Null or undefined values
|
|
106
|
+
|
|
107
|
+
You can control how `null` or `undefined` values are written out in config.
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
import { CsvConfiguration } from 'ng2csv';
|
|
111
|
+
// ...
|
|
112
|
+
const csvConfig = new CsvConfiguration();
|
|
113
|
+
csvConfig.outputValueForNull = 'NULL';
|
|
114
|
+
csvConfig.outputValueForUndefined = 'UNDEFINED';
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Contributions welcome!
|
|
118
|
+
|
|
119
|
+
If you have a feature or improvement you would like to see included, please raise an issue or a PR and I will review.
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
See the [LICENSE](LICENSE.md) file for license rights and limitations (MIT).
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { OrderedProjectionCsvRowMapper } from './ordered-projection-csv-row-mapper.class';
|
|
2
|
-
export class AutoCsvRowMapper {
|
|
3
|
-
constructor(data) {
|
|
4
|
-
if (!data || data.length === 0) {
|
|
5
|
-
throw new Error('Parameter \'data\' must be a non-empty array of objects.');
|
|
6
|
-
}
|
|
7
|
-
if (typeof data[0] !== 'object') {
|
|
8
|
-
throw new Error('Parameter \'data\' must contain objects.');
|
|
9
|
-
}
|
|
10
|
-
const projections = [];
|
|
11
|
-
const allKeys = this.getAllKeys(data);
|
|
12
|
-
for (const key of allKeys) {
|
|
13
|
-
projections.push([
|
|
14
|
-
key,
|
|
15
|
-
this.createProjection(key)
|
|
16
|
-
]);
|
|
17
|
-
}
|
|
18
|
-
this.derivedCsvRowMapper = new OrderedProjectionCsvRowMapper(projections);
|
|
19
|
-
}
|
|
20
|
-
getColumnNames() {
|
|
21
|
-
return this.derivedCsvRowMapper.getColumnNames();
|
|
22
|
-
}
|
|
23
|
-
map(obj) {
|
|
24
|
-
return this.derivedCsvRowMapper.map(obj);
|
|
25
|
-
}
|
|
26
|
-
createProjection(property) {
|
|
27
|
-
return (x) => {
|
|
28
|
-
if (x.hasOwnProperty(property)) {
|
|
29
|
-
const propertyValue = x[property];
|
|
30
|
-
if (propertyValue === undefined || propertyValue === null) {
|
|
31
|
-
return '';
|
|
32
|
-
}
|
|
33
|
-
return propertyValue.toString();
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
return '';
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
getAllKeys(objs) {
|
|
41
|
-
const allKeys = {};
|
|
42
|
-
for (const obj of objs) {
|
|
43
|
-
for (const objectKey of Object.keys(obj)) {
|
|
44
|
-
allKeys[objectKey] = 1;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return Object.keys(allKeys);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { OrderedProjectionCsvRowMapper } from './ordered-projection-csv-row-mapper.class';
|
|
2
|
+
export class AutoCsvRowMapper {
|
|
3
|
+
constructor(data) {
|
|
4
|
+
if (!data || data.length === 0) {
|
|
5
|
+
throw new Error('Parameter \'data\' must be a non-empty array of objects.');
|
|
6
|
+
}
|
|
7
|
+
if (typeof data[0] !== 'object') {
|
|
8
|
+
throw new Error('Parameter \'data\' must contain objects.');
|
|
9
|
+
}
|
|
10
|
+
const projections = [];
|
|
11
|
+
const allKeys = this.getAllKeys(data);
|
|
12
|
+
for (const key of allKeys) {
|
|
13
|
+
projections.push([
|
|
14
|
+
key,
|
|
15
|
+
this.createProjection(key)
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
this.derivedCsvRowMapper = new OrderedProjectionCsvRowMapper(projections);
|
|
19
|
+
}
|
|
20
|
+
getColumnNames() {
|
|
21
|
+
return this.derivedCsvRowMapper.getColumnNames();
|
|
22
|
+
}
|
|
23
|
+
map(obj) {
|
|
24
|
+
return this.derivedCsvRowMapper.map(obj);
|
|
25
|
+
}
|
|
26
|
+
createProjection(property) {
|
|
27
|
+
return (x) => {
|
|
28
|
+
if (x.hasOwnProperty(property)) {
|
|
29
|
+
const propertyValue = x[property];
|
|
30
|
+
if (propertyValue === undefined || propertyValue === null) {
|
|
31
|
+
return '';
|
|
32
|
+
}
|
|
33
|
+
return propertyValue.toString();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
getAllKeys(objs) {
|
|
41
|
+
const allKeys = {};
|
|
42
|
+
for (const obj of objs) {
|
|
43
|
+
for (const objectKey of Object.keys(obj)) {
|
|
44
|
+
allKeys[objectKey] = 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return Object.keys(allKeys);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1jc3Ytcm93LW1hcHBlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nMmNzdi9zcmMvbGliL2F1dG8tY3N2LXJvdy1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFMUYsTUFBTSxPQUFPLGdCQUFnQjtJQUkzQixZQUFtQixJQUFTO1FBQzFCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDYiwwQ0FBMEMsQ0FDM0MsQ0FBQztTQUNIO1FBRUQsTUFBTSxXQUFXLEdBQXdDLEVBQUUsQ0FBQztRQUU1RCxNQUFNLE9BQU8sR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3pCLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsR0FBRztnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO2FBQzNCLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksNkJBQTZCLENBQzFELFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUN2QyxPQUFPLENBQUMsQ0FBSSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sYUFBYSxHQUFJLENBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7b0JBQ3pELE9BQU8sRUFBRSxDQUFDO2lCQUNYO2dCQUNELE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDO2FBQ1g7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVM7UUFDMUIsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBRXhCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QjtTQUNGO1FBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDc3ZSb3dNYXBwZXIgfSBmcm9tICcuL2Nzdi1yb3ctbWFwcGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPcmRlcmVkUHJvamVjdGlvbkNzdlJvd01hcHBlciB9IGZyb20gJy4vb3JkZXJlZC1wcm9qZWN0aW9uLWNzdi1yb3ctbWFwcGVyLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIEF1dG9Dc3ZSb3dNYXBwZXI8VD4gaW1wbGVtZW50cyBJQ3N2Um93TWFwcGVyPFQ+IHtcblxuICBwcml2YXRlIGRlcml2ZWRDc3ZSb3dNYXBwZXI6IE9yZGVyZWRQcm9qZWN0aW9uQ3N2Um93TWFwcGVyPFQ+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBUW10pIHtcbiAgICBpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1BhcmFtZXRlciBcXCdkYXRhXFwnIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXkgb2Ygb2JqZWN0cy4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGFbMF0gIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdQYXJhbWV0ZXIgXFwnZGF0YVxcJyBtdXN0IGNvbnRhaW4gb2JqZWN0cy4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2plY3Rpb25zOiBBcnJheTxbc3RyaW5nLCAob2JqOiBUKSA9PiBzdHJpbmddPiA9IFtdO1xuXG4gICAgY29uc3QgYWxsS2V5czogc3RyaW5nW10gPSB0aGlzLmdldEFsbEtleXMoZGF0YSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5cykge1xuICAgICAgcHJvamVjdGlvbnMucHVzaChbXG4gICAgICAgIGtleSxcbiAgICAgICAgdGhpcy5jcmVhdGVQcm9qZWN0aW9uKGtleSlcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHRoaXMuZGVyaXZlZENzdlJvd01hcHBlciA9IG5ldyBPcmRlcmVkUHJvamVjdGlvbkNzdlJvd01hcHBlcjxUPihcbiAgICAgIHByb2plY3Rpb25zXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5OYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGVyaXZlZENzdlJvd01hcHBlci5nZXRDb2x1bW5OYW1lcygpO1xuICB9XG5cbiAgcHVibGljIG1hcChvYmo6IFQpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGVyaXZlZENzdlJvd01hcHBlci5tYXAob2JqKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUHJvamVjdGlvbihwcm9wZXJ0eTogc3RyaW5nKTogKG9iajogVCkgPT4gc3RyaW5nIHtcbiAgICByZXR1cm4gKHg6IFQpID0+IHtcbiAgICAgIGlmICh4Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gKHggYXMgYW55KVtwcm9wZXJ0eV07XG4gICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcGVydHlWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEFsbEtleXMob2JqczogVFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGFsbEtleXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBvYmogb2Ygb2Jqcykge1xuICAgICAgZm9yIChjb25zdCBvYmplY3RLZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICBhbGxLZXlzW29iamVjdEtleV0gPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxLZXlzKTtcbiAgfVxufVxuIl19
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export class CsvConfiguration {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.delimiter = ',';
|
|
4
|
-
this.quote = '"';
|
|
5
|
-
this.newLine = '\r\n';
|
|
6
|
-
this.includeHeaderLine = true;
|
|
7
|
-
this.outputValueForNull = '';
|
|
8
|
-
this.outputValueForUndefined = '';
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export class CsvConfiguration {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.delimiter = ',';
|
|
4
|
+
this.quote = '"';
|
|
5
|
+
this.newLine = '\r\n';
|
|
6
|
+
this.includeHeaderLine = true;
|
|
7
|
+
this.outputValueForNull = '';
|
|
8
|
+
this.outputValueForUndefined = '';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LWNvbmZpZ3VyYXRpb24uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzJjc3Yvc3JjL2xpYi9jc3YtY29uZmlndXJhdGlvbi5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZ0JBQWdCO0lBQTdCO1FBQ1MsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNoQixVQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ1osWUFBTyxHQUFHLE1BQU0sQ0FBQztRQUNqQixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ3N2Q29uZmlndXJhdGlvbiB7XG4gIHB1YmxpYyBkZWxpbWl0ZXIgPSAnLCc7XG4gIHB1YmxpYyBxdW90ZSA9ICdcIic7XG4gIHB1YmxpYyBuZXdMaW5lID0gJ1xcclxcbic7XG4gIHB1YmxpYyBpbmNsdWRlSGVhZGVyTGluZSA9IHRydWU7XG4gIHB1YmxpYyBvdXRwdXRWYWx1ZUZvck51bGwgPSAnJztcbiAgcHVibGljIG91dHB1dFZhbHVlRm9yVW5kZWZpbmVkID0gJyc7XG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LXJvdy1tYXBwZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyY3N2L3NyYy9saWIvY3N2LXJvdy1tYXBwZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElDc3ZSb3dNYXBwZXI8VD4ge1xuICBnZXRDb2x1bW5OYW1lcygpOiBzdHJpbmdbXTtcbiAgbWFwKG9iajogVCk6IHN0cmluZ1tdO1xufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class Ng2CsvModule {
|
|
4
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: Ng2CsvModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
5
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.1", ngImport: i0, type: Ng2CsvModule }); }
|
|
6
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: Ng2CsvModule }); }
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: Ng2CsvModule, decorators: [{
|
|
9
|
+
type: NgModule,
|
|
10
|
+
args: [{}]
|
|
11
|
+
}] });
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyY3N2Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nMmNzdi9zcmMvbGliL25nMmNzdi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHekMsTUFBTSxPQUFPLFlBQVk7OEdBQVosWUFBWTsrR0FBWixZQUFZOytHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBRHhCLFFBQVE7bUJBQUMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBOZzJDc3ZNb2R1bGUgeyB9XG4iXX0=
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { saveAs } from 'file-saver';
|
|
3
|
-
import { AutoCsvRowMapper } from './auto-csv-row-mapper.class';
|
|
4
|
-
import { CsvConfiguration } from './csv-configuration.class';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class Ng2CsvService {
|
|
7
|
-
download(data, filename, csvRowMapper, config = new CsvConfiguration()) {
|
|
8
|
-
const csvData = this.convertToCsv(data, csvRowMapper, config);
|
|
9
|
-
const mimeType = 'text/csv; header='
|
|
10
|
-
+ (config.includeHeaderLine ? 'present' : 'absent');
|
|
11
|
-
const csvBlob = new Blob([csvData], { type: mimeType });
|
|
12
|
-
saveAs(csvBlob, filename, true);
|
|
13
|
-
}
|
|
14
|
-
convertToCsv(data, csvRowMapper, config = new CsvConfiguration()) {
|
|
15
|
-
if (csvRowMapper === undefined) {
|
|
16
|
-
csvRowMapper = new AutoCsvRowMapper(data);
|
|
17
|
-
}
|
|
18
|
-
const rows = [];
|
|
19
|
-
if (config.includeHeaderLine) {
|
|
20
|
-
const headerFieldSeparator = `${config.quote}${config.delimiter}${config.quote}`;
|
|
21
|
-
rows.push(config.quote
|
|
22
|
-
+ csvRowMapper.getColumnNames()
|
|
23
|
-
.map(x => this.escapeQuotes(x, config.quote))
|
|
24
|
-
.join(headerFieldSeparator)
|
|
25
|
-
+ config.quote);
|
|
26
|
-
}
|
|
27
|
-
for (const row of data) {
|
|
28
|
-
rows.push(csvRowMapper.map(row)
|
|
29
|
-
.map(x => this.mapNullOrUndefinedValues(x, config))
|
|
30
|
-
.map(x => this.escapeRowValue(x, config))
|
|
31
|
-
.join(config.delimiter));
|
|
32
|
-
}
|
|
33
|
-
return rows.join(config.newLine);
|
|
34
|
-
}
|
|
35
|
-
mapNullOrUndefinedValues(value, config) {
|
|
36
|
-
switch (value) {
|
|
37
|
-
case null: {
|
|
38
|
-
return config.outputValueForNull;
|
|
39
|
-
}
|
|
40
|
-
case undefined: {
|
|
41
|
-
return config.outputValueForUndefined;
|
|
42
|
-
}
|
|
43
|
-
default: {
|
|
44
|
-
return value;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
escapeQuotes(value, quoteChar) {
|
|
49
|
-
return value.replace(new RegExp(quoteChar.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), quoteChar + quoteChar);
|
|
50
|
-
}
|
|
51
|
-
escapeRowValue(value, config) {
|
|
52
|
-
if (value.indexOf(config.delimiter) > -1
|
|
53
|
-
|| value.indexOf(config.quote) > -1) {
|
|
54
|
-
const escapedValue = this.escapeQuotes(value, config.quote);
|
|
55
|
-
return `${config.quote}${escapedValue}${config.quote}`;
|
|
56
|
-
}
|
|
57
|
-
return value;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
63
|
-
type: Injectable,
|
|
64
|
-
args: [{
|
|
65
|
-
providedIn: 'root'
|
|
66
|
-
}]
|
|
67
|
-
}] });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { saveAs } from 'file-saver';
|
|
3
|
+
import { AutoCsvRowMapper } from './auto-csv-row-mapper.class';
|
|
4
|
+
import { CsvConfiguration } from './csv-configuration.class';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class Ng2CsvService {
|
|
7
|
+
download(data, filename, csvRowMapper, config = new CsvConfiguration()) {
|
|
8
|
+
const csvData = this.convertToCsv(data, csvRowMapper, config);
|
|
9
|
+
const mimeType = 'text/csv; header='
|
|
10
|
+
+ (config.includeHeaderLine ? 'present' : 'absent');
|
|
11
|
+
const csvBlob = new Blob([csvData], { type: mimeType });
|
|
12
|
+
saveAs(csvBlob, filename, true);
|
|
13
|
+
}
|
|
14
|
+
convertToCsv(data, csvRowMapper, config = new CsvConfiguration()) {
|
|
15
|
+
if (csvRowMapper === undefined) {
|
|
16
|
+
csvRowMapper = new AutoCsvRowMapper(data);
|
|
17
|
+
}
|
|
18
|
+
const rows = [];
|
|
19
|
+
if (config.includeHeaderLine) {
|
|
20
|
+
const headerFieldSeparator = `${config.quote}${config.delimiter}${config.quote}`;
|
|
21
|
+
rows.push(config.quote
|
|
22
|
+
+ csvRowMapper.getColumnNames()
|
|
23
|
+
.map(x => this.escapeQuotes(x, config.quote))
|
|
24
|
+
.join(headerFieldSeparator)
|
|
25
|
+
+ config.quote);
|
|
26
|
+
}
|
|
27
|
+
for (const row of data) {
|
|
28
|
+
rows.push(csvRowMapper.map(row)
|
|
29
|
+
.map(x => this.mapNullOrUndefinedValues(x, config))
|
|
30
|
+
.map(x => this.escapeRowValue(x, config))
|
|
31
|
+
.join(config.delimiter));
|
|
32
|
+
}
|
|
33
|
+
return rows.join(config.newLine);
|
|
34
|
+
}
|
|
35
|
+
mapNullOrUndefinedValues(value, config) {
|
|
36
|
+
switch (value) {
|
|
37
|
+
case null: {
|
|
38
|
+
return config.outputValueForNull;
|
|
39
|
+
}
|
|
40
|
+
case undefined: {
|
|
41
|
+
return config.outputValueForUndefined;
|
|
42
|
+
}
|
|
43
|
+
default: {
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
escapeQuotes(value, quoteChar) {
|
|
49
|
+
return value.replace(new RegExp(quoteChar.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), quoteChar + quoteChar);
|
|
50
|
+
}
|
|
51
|
+
escapeRowValue(value, config) {
|
|
52
|
+
if (value.indexOf(config.delimiter) > -1
|
|
53
|
+
|| value.indexOf(config.quote) > -1) {
|
|
54
|
+
const escapedValue = this.escapeQuotes(value, config.quote);
|
|
55
|
+
return `${config.quote}${escapedValue}${config.quote}`;
|
|
56
|
+
}
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: Ng2CsvService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
60
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: Ng2CsvService, providedIn: 'root' }); }
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: Ng2CsvService, decorators: [{
|
|
63
|
+
type: Injectable,
|
|
64
|
+
args: [{
|
|
65
|
+
providedIn: 'root'
|
|
66
|
+
}]
|
|
67
|
+
}] });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyY3N2LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzJjc3Yvc3JjL2xpYi9uZzJjc3Yuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBTTdELE1BQU0sT0FBTyxhQUFhO0lBQ2pCLFFBQVEsQ0FDWCxJQUFTLEVBQ1QsUUFBZ0IsRUFDaEIsWUFBK0IsRUFDL0IsU0FBMkIsSUFBSSxnQkFBZ0IsRUFBRTtRQUNuRCxNQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFdEUsTUFBTSxRQUFRLEdBQVcsbUJBQW1CO2NBQ3hDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXRELE1BQU0sT0FBTyxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sWUFBWSxDQUNmLElBQVMsRUFDVCxZQUErQixFQUMvQixTQUEyQixJQUFJLGdCQUFnQixFQUFFO1FBQ25ELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixZQUFZLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQztRQUVELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztRQUUxQixJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtZQUM1QixNQUFNLG9CQUFvQixHQUN4QixHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztrQkFDbEIsWUFBWSxDQUFDLGNBQWMsRUFBRTtxQkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM1QyxJQUFJLENBQUMsb0JBQW9CLENBQUM7a0JBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQjtRQUVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7aUJBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyx3QkFBd0IsQ0FDNUIsS0FBYSxFQUNiLE1BQXdCO1FBQzFCLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDVCxPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQzthQUNsQztZQUNELEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ2QsT0FBTyxNQUFNLENBQUMsdUJBQXVCLENBQUM7YUFDdkM7WUFDRCxPQUFPLENBQUMsQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUNoQixLQUFhLEVBQ2IsU0FBaUI7UUFDbkIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUNsQixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUNqRSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLGNBQWMsQ0FDbEIsS0FBYSxFQUNiLE1BQXdCO1FBQzFCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2VBQ2pDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3hEO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzhHQTlFVSxhQUFhO2tIQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgQXV0b0NzdlJvd01hcHBlciB9IGZyb20gJy4vYXV0by1jc3Ytcm93LW1hcHBlci5jbGFzcyc7XG5pbXBvcnQgeyBDc3ZDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jc3YtY29uZmlndXJhdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBJQ3N2Um93TWFwcGVyIH0gZnJvbSAnLi9jc3Ytcm93LW1hcHBlci5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOZzJDc3ZTZXJ2aWNlIHtcbiAgcHVibGljIGRvd25sb2FkPFQ+KFxuICAgICAgZGF0YTogVFtdLFxuICAgICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgICAgIGNzdlJvd01hcHBlcj86IElDc3ZSb3dNYXBwZXI8VD4sXG4gICAgICBjb25maWc6IENzdkNvbmZpZ3VyYXRpb24gPSBuZXcgQ3N2Q29uZmlndXJhdGlvbigpKTogdm9pZCB7XG4gICAgY29uc3QgY3N2RGF0YTogc3RyaW5nID0gdGhpcy5jb252ZXJ0VG9Dc3YoZGF0YSwgY3N2Um93TWFwcGVyLCBjb25maWcpO1xuXG4gICAgY29uc3QgbWltZVR5cGU6IHN0cmluZyA9ICd0ZXh0L2NzdjsgaGVhZGVyPSdcbiAgICAgICsgKGNvbmZpZy5pbmNsdWRlSGVhZGVyTGluZSA/ICdwcmVzZW50JyA6ICdhYnNlbnQnKTtcblxuICAgIGNvbnN0IGNzdkJsb2I6IEJsb2IgPSBuZXcgQmxvYihbY3N2RGF0YV0sIHsgdHlwZTogbWltZVR5cGUgfSk7XG4gICAgc2F2ZUFzKGNzdkJsb2IsIGZpbGVuYW1lLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9Dc3Y8VD4oXG4gICAgICBkYXRhOiBUW10sXG4gICAgICBjc3ZSb3dNYXBwZXI/OiBJQ3N2Um93TWFwcGVyPFQ+LFxuICAgICAgY29uZmlnOiBDc3ZDb25maWd1cmF0aW9uID0gbmV3IENzdkNvbmZpZ3VyYXRpb24oKSk6IHN0cmluZyB7XG4gICAgaWYgKGNzdlJvd01hcHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjc3ZSb3dNYXBwZXIgPSBuZXcgQXV0b0NzdlJvd01hcHBlcihkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGNvbmZpZy5pbmNsdWRlSGVhZGVyTGluZSkge1xuICAgICAgY29uc3QgaGVhZGVyRmllbGRTZXBhcmF0b3IgPVxuICAgICAgICBgJHtjb25maWcucXVvdGV9JHtjb25maWcuZGVsaW1pdGVyfSR7Y29uZmlnLnF1b3RlfWA7XG4gICAgICByb3dzLnB1c2goY29uZmlnLnF1b3RlXG4gICAgICAgICsgY3N2Um93TWFwcGVyLmdldENvbHVtbk5hbWVzKClcbiAgICAgICAgICAubWFwKHggPT4gdGhpcy5lc2NhcGVRdW90ZXMoeCwgY29uZmlnLnF1b3RlKSlcbiAgICAgICAgICAuam9pbihoZWFkZXJGaWVsZFNlcGFyYXRvcilcbiAgICAgICAgKyBjb25maWcucXVvdGUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcbiAgICAgIHJvd3MucHVzaChjc3ZSb3dNYXBwZXIubWFwKHJvdylcbiAgICAgICAgLm1hcCh4ID0+IHRoaXMubWFwTnVsbE9yVW5kZWZpbmVkVmFsdWVzKHgsIGNvbmZpZykpXG4gICAgICAgIC5tYXAoeCA9PiB0aGlzLmVzY2FwZVJvd1ZhbHVlKHgsIGNvbmZpZykpXG4gICAgICAgIC5qb2luKGNvbmZpZy5kZWxpbWl0ZXIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cy5qb2luKGNvbmZpZy5uZXdMaW5lKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwTnVsbE9yVW5kZWZpbmVkVmFsdWVzKFxuICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgIGNvbmZpZzogQ3N2Q29uZmlndXJhdGlvbik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBudWxsOiB7XG4gICAgICAgIHJldHVybiBjb25maWcub3V0cHV0VmFsdWVGb3JOdWxsO1xuICAgICAgfVxuICAgICAgY2FzZSB1bmRlZmluZWQ6IHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5vdXRwdXRWYWx1ZUZvclVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlUXVvdGVzKFxuICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgIHF1b3RlQ2hhcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAocXVvdGVDaGFyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyksICdnJyksXG4gICAgICBxdW90ZUNoYXIgKyBxdW90ZUNoYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVSb3dWYWx1ZShcbiAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICBjb25maWc6IENzdkNvbmZpZ3VyYXRpb24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZS5pbmRleE9mKGNvbmZpZy5kZWxpbWl0ZXIpID4gLTFcbiAgICAgICAgfHwgdmFsdWUuaW5kZXhPZihjb25maWcucXVvdGUpID4gLTEpIHtcbiAgICAgIGNvbnN0IGVzY2FwZWRWYWx1ZSA9IHRoaXMuZXNjYXBlUXVvdGVzKHZhbHVlLCBjb25maWcucXVvdGUpO1xuICAgICAgcmV0dXJuIGAke2NvbmZpZy5xdW90ZX0ke2VzY2FwZWRWYWx1ZX0ke2NvbmZpZy5xdW90ZX1gO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export class OrderedProjectionCsvRowMapper {
|
|
2
|
-
constructor(projections) {
|
|
3
|
-
this.projections = projections;
|
|
4
|
-
}
|
|
5
|
-
getColumnNames() {
|
|
6
|
-
return this.projections.map(x => x[0]);
|
|
7
|
-
}
|
|
8
|
-
map(obj) {
|
|
9
|
-
return this.projections.map(x => x[1](obj));
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export class OrderedProjectionCsvRowMapper {
|
|
2
|
+
constructor(projections) {
|
|
3
|
+
this.projections = projections;
|
|
4
|
+
}
|
|
5
|
+
getColumnNames() {
|
|
6
|
+
return this.projections.map(x => x[0]);
|
|
7
|
+
}
|
|
8
|
+
map(obj) {
|
|
9
|
+
return this.projections.map(x => x[1](obj));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJlZC1wcm9qZWN0aW9uLWNzdi1yb3ctbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyY3N2L3NyYy9saWIvb3JkZXJlZC1wcm9qZWN0aW9uLWNzdi1yb3ctbWFwcGVyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyw2QkFBNkI7SUFLeEMsWUFDSSxXQUFnRDtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDc3ZSb3dNYXBwZXIgfSBmcm9tICcuL2Nzdi1yb3ctbWFwcGVyLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBPcmRlcmVkUHJvamVjdGlvbkNzdlJvd01hcHBlcjxUPlxuICAgIGltcGxlbWVudHMgSUNzdlJvd01hcHBlcjxUPiB7XG5cbiAgcHJpdmF0ZSBwcm9qZWN0aW9uczogQXJyYXk8W3N0cmluZywgKG9iajogVCkgPT4gc3RyaW5nXT47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvamVjdGlvbnM6IEFycmF5PFtzdHJpbmcsIChvYmo6IFQpID0+IHN0cmluZ10+KSB7XG4gICAgdGhpcy5wcm9qZWN0aW9ucyA9IHByb2plY3Rpb25zO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0aW9ucy5tYXAoeCA9PiB4WzBdKTtcbiAgfVxuXG4gIHB1YmxpYyBtYXAob2JqOiBUKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnByb2plY3Rpb25zLm1hcCh4ID0+IHhbMV0ob2JqKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
5
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyY3N2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmcyY3N2L3NyYy9uZzJjc3YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of ng2csv
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/ng2csv.service';
|
|
5
|
-
export * from './lib/ng2csv.module';
|
|
6
|
-
export * from './lib/auto-csv-row-mapper.class';
|
|
7
|
-
export * from './lib/csv-configuration.class';
|
|
8
|
-
export * from './lib/csv-row-mapper.interface';
|
|
9
|
-
export * from './lib/ordered-projection-csv-row-mapper.class';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of ng2csv
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/ng2csv.service';
|
|
5
|
+
export * from './lib/ng2csv.module';
|
|
6
|
+
export * from './lib/auto-csv-row-mapper.class';
|
|
7
|
+
export * from './lib/csv-configuration.class';
|
|
8
|
+
export * from './lib/csv-row-mapper.interface';
|
|
9
|
+
export * from './lib/ordered-projection-csv-row-mapper.class';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nMmNzdi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZzJjc3ZcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZzJjc3Yuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZzJjc3YubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dG8tY3N2LXJvdy1tYXBwZXIuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3N2LWNvbmZpZ3VyYXRpb24uY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3N2LXJvdy1tYXBwZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29yZGVyZWQtcHJvamVjdGlvbi1jc3Ytcm93LW1hcHBlci5jbGFzcyc7XG4iXX0=
|