@ctrl/ngx-csv 2.1.1 → 5.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 CHANGED
@@ -1,22 +1,12 @@
1
- <div align="center">
2
- <h1>ngx-csv</h1>
3
- <br>
4
- <a href="https://www.npmjs.com/package/@ctrl/ngx-csv">
5
- <img src="https://badge.fury.io/js/%40ctrl%2Fngx-csv.svg" alt="npm">
6
- </a>
7
- <a href="https://travis-ci.org/TypeCtrl/ngx-csv">
8
- <img src="https://travis-ci.org/TypeCtrl/ngx-csv.svg?branch=master" alt="travis">
9
- </a>
10
- <a href="https://codecov.io/github/typectrl/ngx-csv">
11
- <img src="https://img.shields.io/codecov/c/github/typectrl/ngx-csv.svg" alt="codecov">
12
- </a>
13
- <br>
14
- <br>
15
- </div>
1
+ # @ctrl/ngx-csv
2
+
3
+ [![npm](https://badgen.net/npm/v/@ctrl/ngx-csv)](https://www.npmjs.com/package/@ctrl/ngx-csv)
4
+ [![CircleCI](https://badgen.net/circleci/github/scttcper/ngx-csv)](https://circleci.com/gh/scttcper/ngx-csv)
5
+ [![coverage](https://badgen.net/codecov/c/github/scttcper/ngx-csv)](https://codecov.io/gh/scttcper/ngx-csv)
16
6
 
17
7
  > Easily generate a CSV download in the browser with Angular
18
8
 
19
- **Demo**: https://ngx-csv.netlify.com/
9
+ **Demo**: https://ngx-csv.vercel.app
20
10
 
21
11
  ### Install
22
12
 
@@ -24,6 +14,17 @@
24
14
  npm install @ctrl/ngx-csv
25
15
  ```
26
16
 
17
+ ## Dependencies
18
+
19
+ Latest version available for each version of Angular
20
+
21
+ | ngx-trend | Angular |
22
+ | --------- | ------- |
23
+ | 2.1.1 | 8.x |
24
+ | 3.0.1 | 9.x |
25
+ | 4.0.0 | 10.x |
26
+ | current | >= 12.x |
27
+
27
28
  ### Import
28
29
 
29
30
  ```ts
@@ -40,12 +41,12 @@ Add the csvLink directive to your `<a>` tag
40
41
 
41
42
  ### Input
42
43
 
43
- * **data**: The body of the csv
44
- * **headers**: Set the first line of the csv
45
- * **delimiter**: Set the seperator between values. Default `','`
46
- * **filename**: Set the filename of the csv. Default `data.csv`
47
- * **uFEFF**: Adds a Byte order mark to setup the csv as UTF-8. Default `true`
48
- * **target**: Element target. Default `\_blank
44
+ - **data**: The body of the csv
45
+ - **headers**: Set the first line of the csv
46
+ - **delimiter**: Set the seperator between values. Default `','`
47
+ - **filename**: Set the filename of the csv. Default `data.csv`
48
+ - **uFEFF**: Adds a Byte order mark to setup the csv as UTF-8. Default `true`
49
+ - **target**: Element target. Default `\_blank
49
50
 
50
51
  ### Accepted Data Formats
51
52
 
@@ -106,4 +107,4 @@ const data = [
106
107
 
107
108
  ### See Also
108
109
 
109
- * [react-csv](https://github.com/abdennour/react-csv)
110
+ - [react-csv](https://github.com/abdennour/react-csv)
@@ -1,6 +1,7 @@
1
1
  import { OnChanges } from '@angular/core';
2
2
  import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
3
3
  import { HeaderObj } from './util';
4
+ import * as i0 from "@angular/core";
4
5
  export declare class CsvDirective implements OnChanges {
5
6
  private sanitizer;
6
7
  /** the body of the csv */
@@ -12,7 +13,7 @@ export declare class CsvDirective implements OnChanges {
12
13
  /** Set the seperator between values */
13
14
  delimiter: string;
14
15
  /** Set the filename of the csv. Default is `data.csv` */
15
- filename: string;
16
+ set filename(a: string);
16
17
  /** adds a Byte order mark to setup the csv as UTF-8 */
17
18
  uFEFF: boolean;
18
19
  href?: SafeResourceUrl;
@@ -20,7 +21,7 @@ export declare class CsvDirective implements OnChanges {
20
21
  download: string;
21
22
  target: string;
22
23
  constructor(sanitizer: DomSanitizer);
23
- onClick(): void;
24
- isIEBrowser(): boolean;
25
24
  ngOnChanges(): void;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<CsvDirective, never>;
26
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CsvDirective, "[csvLink]", never, { "data": "data"; "headers": "headers"; "delimiter": "delimiter"; "filename": "filename"; "uFEFF": "uFEFF"; "target": "target"; }, {}, never>;
26
27
  }
package/csv.module.d.ts CHANGED
@@ -1,2 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./csv.directive";
1
3
  export declare class CsvModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<CsvModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CsvModule, [typeof i1.CsvDirective], never, [typeof i1.CsvDirective]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<CsvModule>;
2
7
  }
package/ctrl-ngx-csv.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
+ /// <amd-module name="@ctrl/ngx-csv" />
4
5
  export * from './public_api';
@@ -0,0 +1,50 @@
1
+ import { Directive, HostBinding, Input } from '@angular/core';
2
+ import { buildURI } from './util';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/platform-browser";
5
+ export class CsvDirective {
6
+ constructor(sanitizer) {
7
+ this.sanitizer = sanitizer;
8
+ /** the body of the csv */
9
+ this.data = [];
10
+ /** Set the seperator between values */
11
+ this.delimiter = ',';
12
+ /** adds a Byte order mark to setup the csv as UTF-8 */
13
+ this.uFEFF = true;
14
+ /** filename */
15
+ this.download = 'data.csv';
16
+ this.target = '_blank';
17
+ }
18
+ /** Set the filename of the csv. Default is `data.csv` */
19
+ set filename(a) {
20
+ this.download = a;
21
+ }
22
+ ngOnChanges() {
23
+ this.href = this.sanitizer.bypassSecurityTrustResourceUrl(buildURI(this.data, this.uFEFF, this.headers, this.delimiter));
24
+ }
25
+ }
26
+ CsvDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvDirective, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive });
27
+ CsvDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: CsvDirective, selector: "[csvLink]", inputs: { data: "data", headers: "headers", delimiter: "delimiter", filename: "filename", uFEFF: "uFEFF", target: "target" }, host: { properties: { "href": "this.href", "download": "this.download", "target": "this.target" } }, usesOnChanges: true, ngImport: i0 });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{ selector: '[csvLink]' }]
31
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { data: [{
32
+ type: Input
33
+ }], headers: [{
34
+ type: Input
35
+ }], delimiter: [{
36
+ type: Input
37
+ }], filename: [{
38
+ type: Input
39
+ }], uFEFF: [{
40
+ type: Input
41
+ }], href: [{
42
+ type: HostBinding
43
+ }], download: [{
44
+ type: HostBinding
45
+ }], target: [{
46
+ type: Input
47
+ }, {
48
+ type: HostBinding
49
+ }] } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3N2LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHekUsT0FBTyxFQUFFLFFBQVEsRUFBYSxNQUFNLFFBQVEsQ0FBQzs7O0FBRzdDLE1BQU0sT0FBTyxZQUFZO0lBbUJ2QixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBbEIzQywwQkFBMEI7UUFDakIsU0FBSSxHQUE4RCxFQUFFLENBQUM7UUFHOUUsdUNBQXVDO1FBQzlCLGNBQVMsR0FBRyxHQUFHLENBQUM7UUFNekIsd0RBQXdEO1FBQy9DLFVBQUssR0FBRyxJQUFJLENBQUM7UUFFdEIsZUFBZTtRQUNBLGFBQVEsR0FBRyxVQUFVLENBQUM7UUFDYixXQUFNLEdBQUcsUUFBUSxDQUFDO0lBRUksQ0FBQztJQVovQyx5REFBeUQ7SUFDekQsSUFDSSxRQUFRLENBQUMsQ0FBUztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBVUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FDdkQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDOUQsQ0FBQztJQUNKLENBQUM7O3lHQXpCVSxZQUFZOzZGQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFEeEIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7bUdBR3pCLElBQUk7c0JBQVosS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUNTLElBQUk7c0JBQWxCLFdBQVc7Z0JBRUcsUUFBUTtzQkFBdEIsV0FBVztnQkFDWSxNQUFNO3NCQUE3QixLQUFLOztzQkFBSSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgYnVpbGRVUkksIEhlYWRlck9iaiB9IGZyb20gJy4vdXRpbCc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tjc3ZMaW5rXScgfSlcbmV4cG9ydCBjbGFzcyBDc3ZEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKiogdGhlIGJvZHkgb2YgdGhlIGNzdiAqL1xuICBASW5wdXQoKSBkYXRhOiBzdHJpbmcgfCBzdHJpbmdbXVtdIHwgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdIHwgYW55W10gPSBbXTtcbiAgLyoqIFNldCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY3N2ICovXG4gIEBJbnB1dCgpIGhlYWRlcnM/OiBzdHJpbmdbXSB8IEhlYWRlck9ialtdO1xuICAvKiogU2V0IHRoZSBzZXBlcmF0b3IgYmV0d2VlbiB2YWx1ZXMgKi9cbiAgQElucHV0KCkgZGVsaW1pdGVyID0gJywnO1xuICAvKiogU2V0IHRoZSBmaWxlbmFtZSBvZiB0aGUgY3N2LiBEZWZhdWx0IGlzIGBkYXRhLmNzdmAgKi9cbiAgQElucHV0KClcbiAgc2V0IGZpbGVuYW1lKGE6IHN0cmluZykge1xuICAgIHRoaXMuZG93bmxvYWQgPSBhO1xuICB9XG4gIC8qKiBhZGRzIGEgQnl0ZSBvcmRlciBtYXJrIHRvIHNldHVwIHRoZSBjc3YgYXMgVVRGLTggICovXG4gIEBJbnB1dCgpIHVGRUZGID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCkgaHJlZj86IFNhZmVSZXNvdXJjZVVybDtcbiAgLyoqIGZpbGVuYW1lICovXG4gIEBIb3N0QmluZGluZygpIGRvd25sb2FkID0gJ2RhdGEuY3N2JztcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCkgdGFyZ2V0ID0gJ19ibGFuayc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmhyZWYgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoXG4gICAgICBidWlsZFVSSSh0aGlzLmRhdGEsIHRoaXMudUZFRkYsIHRoaXMuaGVhZGVycywgdGhpcy5kZWxpbWl0ZXIpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CsvDirective } from './csv.directive';
3
+ import * as i0 from "@angular/core";
4
+ export class CsvModule {
5
+ }
6
+ CsvModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ CsvModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, declarations: [CsvDirective], exports: [CsvDirective] });
8
+ CsvModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule });
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{
12
+ declarations: [CsvDirective],
13
+ exports: [CsvDirective],
14
+ }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3N2Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFNL0MsTUFBTSxPQUFPLFNBQVM7O3NHQUFULFNBQVM7dUdBQVQsU0FBUyxpQkFITCxZQUFZLGFBQ2pCLFlBQVk7dUdBRVgsU0FBUzsyRkFBVCxTQUFTO2tCQUpyQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDNUIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENzdkRpcmVjdGl2ZSB9IGZyb20gJy4vY3N2LmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NzdkRpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtDc3ZEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBDc3ZNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RybC1uZ3gtY3N2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jdHJsLW5neC1jc3YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export { CsvModule } from './csv.module';
2
+ export { CsvDirective } from './csv.directive';
3
+ export * from './util';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxjQUFjLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENzdk1vZHVsZSB9IGZyb20gJy4vY3N2Lm1vZHVsZSc7XG5leHBvcnQgeyBDc3ZEaXJlY3RpdmUgfSBmcm9tICcuL2Nzdi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsJztcbiJdfQ==
@@ -0,0 +1,53 @@
1
+ export const isJsons = (array) => Array.isArray(array) &&
2
+ array.every(row => typeof row === 'object' && !(row instanceof Array));
3
+ export const isArrays = (array) => Array.isArray(array) && array.every(row => Array.isArray(row));
4
+ export function jsonsHeaders(array) {
5
+ return Array.from(new Set(array.map(item => Object.keys(item)).reduce((a, b) => [...a, ...b], [])));
6
+ }
7
+ export function jsons2arrays(jsons, headers) {
8
+ headers = headers || jsonsHeaders(jsons);
9
+ // allow headers to have custom labels, defaulting to having the header data key be the label
10
+ let headerLabels = headers;
11
+ let headerKeys = headers;
12
+ if (isJsons(headers)) {
13
+ headerLabels = headers.map(header => header.label);
14
+ headerKeys = headers.map(header => header.key);
15
+ }
16
+ const data = jsons.map(object => headerKeys.map(header => (header in object ? object[header] : '')));
17
+ return [headerLabels, ...data];
18
+ }
19
+ export const elementOrEmpty = (element) => element || element === 0 ? element : '';
20
+ export function joiner(data, delimiter = ',') {
21
+ return data
22
+ .map((row, index) => row.map((element) => '"' + elementOrEmpty(element) + '"').join(delimiter))
23
+ .join(`\n`);
24
+ }
25
+ export function arrays2csv(data, headers, delimiter) {
26
+ return joiner(headers ? [headers, ...data] : data, delimiter);
27
+ }
28
+ export function jsons2csv(data, headers, delimiter) {
29
+ return joiner(jsons2arrays(data, headers), delimiter);
30
+ }
31
+ export function string2csv(data, headers, delimiter) {
32
+ return headers ? `${headers.join(delimiter)}\n${data}` : data;
33
+ }
34
+ export function toCSV(data, headers, delimiter) {
35
+ if (isJsons(data)) {
36
+ return jsons2csv(data, headers, delimiter);
37
+ }
38
+ if (isArrays(data)) {
39
+ return arrays2csv(data, headers, delimiter);
40
+ }
41
+ if (typeof data === 'string') {
42
+ return string2csv(data, headers, delimiter);
43
+ }
44
+ throw new TypeError(`Data should be a "String", "Array of arrays" OR "Array of objects" `);
45
+ }
46
+ export function blob(data, uFEFF = true, headers, delimiter) {
47
+ const csv = toCSV(data, headers, delimiter);
48
+ return new Blob([uFEFF ? '\uFEFF' : '', csv], { type: 'text/csv' });
49
+ }
50
+ export function buildURI(data, uFEFF = true, headers, delimiter) {
51
+ return URL.createObjectURL(blob(data, uFEFF, headers, delimiter));
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUN0QyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNwQixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUN2QyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFlO0lBQzFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDZixJQUFJLEdBQUcsQ0FDTCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDeEUsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzFCLEtBQWtDLEVBQ2xDLE9BQWdDO0lBRWhDLE9BQU8sR0FBRyxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXpDLDZGQUE2RjtJQUM3RixJQUFJLFlBQVksR0FBYSxPQUFtQixDQUFDO0lBQ2pELElB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LENBQ2xCLElBQStELEVBQy9ELEtBQUssR0FBRyxJQUFJLEVBQ1osT0FBZ0MsRUFDaEMsU0FBa0I7SUFFbEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsSUFBK0QsRUFDL0QsS0FBSyxHQUFHLElBQUksRUFDWixPQUFnQyxFQUNoQyxTQUFrQjtJQUVsQixPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1hcnJvdy9wcmVmZXItYXJyb3ctZnVuY3Rpb25zICovXG5leHBvcnQgaW50ZXJmYWNlIEhlYWRlck9iaiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgaXNKc29ucyA9IChhcnJheTogYW55W10pID0+XG4gIEFycmF5LmlzQXJyYXkoYXJyYXkpICYmXG4gIGFycmF5LmV2ZXJ5KHJvdyA9PiB0eXBlb2Ygcm93ID09PSAnb2JqZWN0JyAmJiAhKHJvdyBpbnN0YW5jZW9mIEFycmF5KSk7XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5cyA9IChhcnJheTogYW55W10pID0+XG4gIEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5LmV2ZXJ5KHJvdyA9PiBBcnJheS5pc0FycmF5KHJvdykpO1xuXG5leHBvcnQgZnVuY3Rpb24ganNvbnNIZWFkZXJzKGFycmF5OiBvYmplY3RbXSkge1xuICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICBuZXcgU2V0KFxuICAgICAgYXJyYXkubWFwKGl0ZW0gPT4gT2JqZWN0LmtleXMoaXRlbSkpLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSksXG4gICAgKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpzb25zMmFycmF5cyhcbiAganNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1bXSxcbiAgaGVhZGVycz86IHN0cmluZ1tdIHwgSGVhZGVyT2JqW10sXG4pIHtcbiAgaGVhZGVycyA9IGhlYWRlcnMgfHwganNvbnNIZWFkZXJzKGpzb25zKTtcblxuICAvLyBhbGxvdyBoZWFkZXJzIHRvIGhhdmUgY3VzdG9tIGxhYmVscywgZGVmYXVsdGluZyB0byBoYXZpbmcgdGhlIGhlYWRlciBkYXRhIGtleSBiZSB0aGUgbGFiZWxcbiAgbGV0IGhlYWRlckxhYmVsczogc3RyaW5nW10gPSBoZWFkZXJzIGFzIHN0cmluZ1tdO1xuICBsZXQgaGVhZGVyS2V5czogc3RyaW5nW10gPSBoZWFkZXJzIGFzIHN0cmluZ1tdO1xuICBpZiAoaXNKc29ucyhoZWFkZXJzKSkge1xuICAgIGhlYWRlckxhYmVscyA9IChoZWFkZXJzIGFzIEhlYWRlck9ialtdKS5tYXAoaGVhZGVyID0+IGhlYWRlci5sYWJlbCk7XG4gICAgaGVhZGVyS2V5cyA9IChoZWFkZXJzIGFzIEhlYWRlck9ialtdKS5tYXAoaGVhZGVyID0+IGhlYWRlci5rZXkpO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGpzb25zLm1hcChvYmplY3QgPT5cbiAgICBoZWFkZXJLZXlzLm1hcChoZWFkZXIgPT4gKGhlYWRlciBpbiBvYmplY3QgPyBvYmplY3RbaGVhZGVyXSA6ICcnKSksXG4gICk7XG4gIHJldHVybiBbaGVhZGVyTGFiZWxzLCAuLi5kYXRhXTtcbn1cblxuZXhwb3J0IGNvbnN0IGVsZW1lbnRPckVtcHR5ID0gKGVsZW1lbnQ6IGFueSkgPT5cbiAgZWxlbWVudCB8fCBlbGVtZW50ID09PSAwID8gZWxlbWVudCA6ICcnO1xuXG5leHBvcnQgZnVuY3Rpb24gam9pbmVyKGRhdGE6IGFueSwgZGVsaW1pdGVyID0gJywnKSB7XG4gIHJldHVybiBkYXRhXG4gICAgLm1hcCgocm93OiBhbnksIGluZGV4OiBudW1iZXIpID0+XG4gICAgICByb3cubWFwKChlbGVtZW50OiBhbnkpID0+ICdcIicgKyBlbGVtZW50T3JFbXB0eShlbGVtZW50KSArICdcIicpLmpvaW4oZGVsaW1pdGVyKSxcbiAgICApXG4gICAgLmpvaW4oYFxcbmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzMmNzdihcbiAgZGF0YTogc3RyaW5nW11bXSxcbiAgaGVhZGVycz86IHN0cmluZ1tdIHwgSGVhZGVyT2JqW10sXG4gIGRlbGltaXRlcj86IHN0cmluZyxcbikge1xuICByZXR1cm4gam9pbmVyKGhlYWRlcnMgPyBbaGVhZGVycywgLi4uZGF0YV0gOiBkYXRhLCBkZWxpbWl0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganNvbnMyY3N2KFxuICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9W10sXG4gIGhlYWRlcnM/OiBzdHJpbmdbXSB8IEhlYWRlck9ialtdLFxuICBkZWxpbWl0ZXI/OiBzdHJpbmcsXG4pIHtcbiAgcmV0dXJuIGpvaW5lcihqc29uczJhcnJheXMoZGF0YSwgaGVhZGVycyksIGRlbGltaXRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmcyY3N2KFxuICBkYXRhOiBzdHJpbmcsXG4gIGhlYWRlcnM/OiBzdHJpbmdbXSxcbiAgZGVsaW1pdGVyPzogc3RyaW5nLFxuKSB7XG4gIHJldHVybiBoZWFkZXJzID8gYCR7aGVhZGVycy5qb2luKGRlbGltaXRlcil9XFxuJHtkYXRhfWAgOiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9DU1YoXG4gIGRhdGE6IHN0cmluZyB8IHN0cmluZ1tdW10gfCB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9W10gfCBhbnlbXSxcbiAgaGVhZGVycz86IHN0cmluZ1tdIHwgSGVhZGVyT2JqW10sXG4gIGRlbGltaXRlcj86IHN0cmluZyxcbikge1xuICBpZiAoaXNKc29ucyhkYXRhIGFzIGFueSkpIHtcbiAgICByZXR1cm4ganNvbnMyY3N2KGRhdGEgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdLCBoZWFkZXJzLCBkZWxpbWl0ZXIpO1xuICB9XG4gIGlmIChpc0FycmF5cyhkYXRhIGFzIGFueSkpIHtcbiAgICByZXR1cm4gYXJyYXlzMmNzdihkYXRhIGFzIHN0cmluZ1tdW10sIGhlYWRlcnMsIGRlbGltaXRlcik7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHJpbmcyY3N2KGRhdGEsIGhlYWRlcnMgYXMgc3RyaW5nW10sIGRlbGltaXRlcik7XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICBgRGF0YSBzaG91bGQgYmUgYSBcIlN0cmluZ1wiLCBcIkFycmF5IG9mIGFycmF5c1wiIE9SIFwiQXJyYXkgb2Ygb2JqZWN0c1wiIGAsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9iKFxuICBkYXRhOiBzdHJpbmcgfCBzdHJpbmdbXVtdIHwgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdIHwgYW55W10sXG4gIHVGRUZGID0gdHJ1ZSxcbiAgaGVhZGVycz86IHN0cmluZ1tdIHwgSGVhZGVyT2JqW10sXG4gIGRlbGltaXRlcj86IHN0cmluZyxcbikge1xuICBjb25zdCBjc3YgPSB0b0NTVihkYXRhLCBoZWFkZXJzLCBkZWxpbWl0ZXIpO1xuICByZXR1cm4gbmV3IEJsb2IoW3VGRUZGID8gJ1xcdUZFRkYnIDogJycsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVVJJKFxuICBkYXRhOiBzdHJpbmcgfCBzdHJpbmdbXVtdIHwgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVtdIHwgYW55W10sXG4gIHVGRUZGID0gdHJ1ZSxcbiAgaGVhZGVycz86IHN0cmluZ1tdIHwgSGVhZGVyT2JqW10sXG4gIGRlbGltaXRlcj86IHN0cmluZyxcbikge1xuICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKGRhdGEsIHVGRUZGLCBoZWFkZXJzLCBkZWxpbWl0ZXIpKTtcbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
- import { __decorate, __metadata } from 'tslib';
2
- import { Input, HostBinding, HostListener, Directive, NgModule } from '@angular/core';
3
- import { DomSanitizer } from '@angular/platform-browser';
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, Input, HostBinding, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/platform-browser';
4
4
 
5
5
  const isJsons = (array) => Array.isArray(array) &&
6
6
  array.every(row => typeof row === 'object' && !(row instanceof Array));
@@ -55,7 +55,7 @@ function buildURI(data, uFEFF = true, headers, delimiter) {
55
55
  return URL.createObjectURL(blob(data, uFEFF, headers, delimiter));
56
56
  }
57
57
 
58
- let CsvDirective = class CsvDirective {
58
+ class CsvDirective {
59
59
  constructor(sanitizer) {
60
60
  this.sanitizer = sanitizer;
61
61
  /** the body of the csv */
@@ -66,85 +66,57 @@ let CsvDirective = class CsvDirective {
66
66
  this.uFEFF = true;
67
67
  /** filename */
68
68
  this.download = 'data.csv';
69
- this.target = this.isIEBrowser() ? '' : '_blank';
69
+ this.target = '_blank';
70
70
  }
71
71
  /** Set the filename of the csv. Default is `data.csv` */
72
72
  set filename(a) {
73
73
  this.download = a;
74
74
  }
75
- onClick() {
76
- // IE handling
77
- if (this.isIEBrowser()) {
78
- const file = blob(this.data, this.uFEFF, this.headers, this.delimiter);
79
- window.navigator.msSaveBlob(file, this.download);
80
- }
81
- }
82
- isIEBrowser() {
83
- return !!window.navigator.msSaveOrOpenBlob;
84
- }
85
75
  ngOnChanges() {
86
76
  this.href = this.sanitizer.bypassSecurityTrustResourceUrl(buildURI(this.data, this.uFEFF, this.headers, this.delimiter));
87
77
  }
88
- };
89
- CsvDirective.ctorParameters = () => [
90
- { type: DomSanitizer }
91
- ];
92
- __decorate([
93
- Input(),
94
- __metadata("design:type", Object)
95
- ], CsvDirective.prototype, "data", void 0);
96
- __decorate([
97
- Input(),
98
- __metadata("design:type", Array)
99
- ], CsvDirective.prototype, "headers", void 0);
100
- __decorate([
101
- Input(),
102
- __metadata("design:type", Object)
103
- ], CsvDirective.prototype, "delimiter", void 0);
104
- __decorate([
105
- Input(),
106
- __metadata("design:type", String),
107
- __metadata("design:paramtypes", [String])
108
- ], CsvDirective.prototype, "filename", null);
109
- __decorate([
110
- Input(),
111
- __metadata("design:type", Object)
112
- ], CsvDirective.prototype, "uFEFF", void 0);
113
- __decorate([
114
- HostBinding(),
115
- __metadata("design:type", Object)
116
- ], CsvDirective.prototype, "href", void 0);
117
- __decorate([
118
- HostBinding(),
119
- __metadata("design:type", Object)
120
- ], CsvDirective.prototype, "download", void 0);
121
- __decorate([
122
- Input(), HostBinding(),
123
- __metadata("design:type", Object)
124
- ], CsvDirective.prototype, "target", void 0);
125
- __decorate([
126
- HostListener('click'),
127
- __metadata("design:type", Function),
128
- __metadata("design:paramtypes", []),
129
- __metadata("design:returntype", void 0)
130
- ], CsvDirective.prototype, "onClick", null);
131
- CsvDirective = __decorate([
132
- Directive({ selector: '[csvLink]' }),
133
- __metadata("design:paramtypes", [DomSanitizer])
134
- ], CsvDirective);
78
+ }
79
+ CsvDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvDirective, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive });
80
+ CsvDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: CsvDirective, selector: "[csvLink]", inputs: { data: "data", headers: "headers", delimiter: "delimiter", filename: "filename", uFEFF: "uFEFF", target: "target" }, host: { properties: { "href": "this.href", "download": "this.download", "target": "this.target" } }, usesOnChanges: true, ngImport: i0 });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvDirective, decorators: [{
82
+ type: Directive,
83
+ args: [{ selector: '[csvLink]' }]
84
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { data: [{
85
+ type: Input
86
+ }], headers: [{
87
+ type: Input
88
+ }], delimiter: [{
89
+ type: Input
90
+ }], filename: [{
91
+ type: Input
92
+ }], uFEFF: [{
93
+ type: Input
94
+ }], href: [{
95
+ type: HostBinding
96
+ }], download: [{
97
+ type: HostBinding
98
+ }], target: [{
99
+ type: Input
100
+ }, {
101
+ type: HostBinding
102
+ }] } });
135
103
 
136
- let CsvModule = class CsvModule {
137
- };
138
- CsvModule = __decorate([
139
- NgModule({
140
- declarations: [CsvDirective],
141
- exports: [CsvDirective],
142
- })
143
- ], CsvModule);
104
+ class CsvModule {
105
+ }
106
+ CsvModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
107
+ CsvModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, declarations: [CsvDirective], exports: [CsvDirective] });
108
+ CsvModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule });
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, decorators: [{
110
+ type: NgModule,
111
+ args: [{
112
+ declarations: [CsvDirective],
113
+ exports: [CsvDirective],
114
+ }]
115
+ }] });
144
116
 
145
117
  /**
146
118
  * Generated bundle index. Do not edit.
147
119
  */
148
120
 
149
121
  export { CsvDirective, CsvModule, arrays2csv, blob, buildURI, elementOrEmpty, isArrays, isJsons, joiner, jsons2arrays, jsons2csv, jsonsHeaders, string2csv, toCSV };
150
- //# sourceMappingURL=ctrl-ngx-csv.js.map
122
+ //# sourceMappingURL=ctrl-ngx-csv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctrl-ngx-csv.mjs","sources":["../../src/lib/util.ts","../../src/lib/csv.directive.ts","../../src/lib/csv.module.ts","../../src/lib/ctrl-ngx-csv.ts"],"sourcesContent":["/* eslint-disable prefer-arrow/prefer-arrow-functions */\nexport interface HeaderObj {\n label: string;\n key: string;\n}\n\nexport const isJsons = (array: any[]) =>\n Array.isArray(array) &&\n array.every(row => typeof row === 'object' && !(row instanceof Array));\n\nexport const isArrays = (array: any[]) =>\n Array.isArray(array) && array.every(row => Array.isArray(row));\n\nexport function jsonsHeaders(array: object[]) {\n return Array.from(\n new Set(\n array.map(item => Object.keys(item)).reduce((a, b) => [...a, ...b], []),\n ),\n );\n}\n\nexport function jsons2arrays(\n jsons: { [key: string]: string }[],\n headers?: string[] | HeaderObj[],\n) {\n headers = headers || jsonsHeaders(jsons);\n\n // allow headers to have custom labels, defaulting to having the header data key be the label\n let headerLabels: string[] = headers as string[];\n let headerKeys: string[] = headers as string[];\n if (isJsons(headers)) {\n headerLabels = (headers as HeaderObj[]).map(header => header.label);\n headerKeys = (headers as HeaderObj[]).map(header => header.key);\n }\n\n const data = jsons.map(object =>\n headerKeys.map(header => (header in object ? object[header] : '')),\n );\n return [headerLabels, ...data];\n}\n\nexport const elementOrEmpty = (element: any) =>\n element || element === 0 ? element : '';\n\nexport function joiner(data: any, delimiter = ',') {\n return data\n .map((row: any, index: number) =>\n row.map((element: any) => '\"' + elementOrEmpty(element) + '\"').join(delimiter),\n )\n .join(`\\n`);\n}\n\nexport function arrays2csv(\n data: string[][],\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n return joiner(headers ? [headers, ...data] : data, delimiter);\n}\n\nexport function jsons2csv(\n data: { [key: string]: string }[],\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n return joiner(jsons2arrays(data, headers), delimiter);\n}\n\nexport function string2csv(\n data: string,\n headers?: string[],\n delimiter?: string,\n) {\n return headers ? `${headers.join(delimiter)}\\n${data}` : data;\n}\n\nexport function toCSV(\n data: string | string[][] | { [key: string]: string }[] | any[],\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n if (isJsons(data as any)) {\n return jsons2csv(data as { [key: string]: string }[], headers, delimiter);\n }\n if (isArrays(data as any)) {\n return arrays2csv(data as string[][], headers, delimiter);\n }\n if (typeof data === 'string') {\n return string2csv(data, headers as string[], delimiter);\n }\n throw new TypeError(\n `Data should be a \"String\", \"Array of arrays\" OR \"Array of objects\" `,\n );\n}\n\nexport function blob(\n data: string | string[][] | { [key: string]: string }[] | any[],\n uFEFF = true,\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n const csv = toCSV(data, headers, delimiter);\n return new Blob([uFEFF ? '\\uFEFF' : '', csv], { type: 'text/csv' });\n}\n\nexport function buildURI(\n data: string | string[][] | { [key: string]: string }[] | any[],\n uFEFF = true,\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n return URL.createObjectURL(blob(data, uFEFF, headers, delimiter));\n}\n","import { Directive, HostBinding, Input, OnChanges } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { buildURI, HeaderObj } from './util';\n\n@Directive({ selector: '[csvLink]' })\nexport class CsvDirective implements OnChanges {\n /** the body of the csv */\n @Input() data: string | string[][] | { [key: string]: string }[] | any[] = [];\n /** Set the first line of the csv */\n @Input() headers?: string[] | HeaderObj[];\n /** Set the seperator between values */\n @Input() delimiter = ',';\n /** Set the filename of the csv. Default is `data.csv` */\n @Input()\n set filename(a: string) {\n this.download = a;\n }\n /** adds a Byte order mark to setup the csv as UTF-8 */\n @Input() uFEFF = true;\n @HostBinding() href?: SafeResourceUrl;\n /** filename */\n @HostBinding() download = 'data.csv';\n @Input() @HostBinding() target = '_blank';\n\n constructor(private sanitizer: DomSanitizer) {}\n\n ngOnChanges() {\n this.href = this.sanitizer.bypassSecurityTrustResourceUrl(\n buildURI(this.data, this.uFEFF, this.headers, this.delimiter),\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { CsvDirective } from './csv.directive';\n\n@NgModule({\n declarations: [CsvDirective],\n exports: [CsvDirective],\n})\nexport class CsvModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAMa,OAAO,GAAG,CAAC,KAAY,KAClC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IACpB,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,EAAE;MAE5D,QAAQ,GAAG,CAAC,KAAY,KACnC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;SAEjD,YAAY,CAAC,KAAe;IAC1C,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CACxE,CACF,CAAC;AACJ,CAAC;SAEe,YAAY,CAC1B,KAAkC,EAClC,OAAgC;IAEhC,OAAO,GAAG,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;;IAGzC,IAAI,YAAY,GAAa,OAAmB,CAAC;IACjD,IAAI,UAAU,GAAa,OAAmB,CAAC;IAC/C,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACpB,YAAY,GAAI,OAAuB,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QACpE,UAAU,GAAI,OAAuB,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;KACjE;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,IAC3B,UAAU,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CACnE,CAAC;IACF,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;AACjC,CAAC;MAEY,cAAc,GAAG,CAAC,OAAY,KACzC,OAAO,IAAI,OAAO,KAAK,CAAC,GAAG,OAAO,GAAG,GAAG;SAE1B,MAAM,CAAC,IAAS,EAAE,SAAS,GAAG,GAAG;IAC/C,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,GAAQ,EAAE,KAAa,KAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,OAAY,KAAK,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAC/E;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;SAEe,UAAU,CACxB,IAAgB,EAChB,OAAgC,EAChC,SAAkB;IAElB,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC;SAEe,SAAS,CACvB,IAAiC,EACjC,OAAgC,EAChC,SAAkB;IAElB,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AACxD,CAAC;SAEe,UAAU,CACxB,IAAY,EACZ,OAAkB,EAClB,SAAkB;IAElB,OAAO,OAAO,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC;AAChE,CAAC;SAEe,KAAK,CACnB,IAA+D,EAC/D,OAAgC,EAChC,SAAkB;IAElB,IAAI,OAAO,CAAC,IAAW,CAAC,EAAE;QACxB,OAAO,SAAS,CAAC,IAAmC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;KAC3E;IACD,IAAI,QAAQ,CAAC,IAAW,CAAC,EAAE;QACzB,OAAO,UAAU,CAAC,IAAkB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;KAC3D;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,OAAO,UAAU,CAAC,IAAI,EAAE,OAAmB,EAAE,SAAS,CAAC,CAAC;KACzD;IACD,MAAM,IAAI,SAAS,CACjB,qEAAqE,CACtE,CAAC;AACJ,CAAC;SAEe,IAAI,CAClB,IAA+D,EAC/D,KAAK,GAAG,IAAI,EACZ,OAAgC,EAChC,SAAkB;IAElB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACtE,CAAC;SAEe,QAAQ,CACtB,IAA+D,EAC/D,KAAK,GAAG,IAAI,EACZ,OAAgC,EAChC,SAAkB;IAElB,OAAO,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACpE;;MC1Ga,YAAY;IAmBvB,YAAoB,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;;QAjBlC,SAAI,GAA8D,EAAE,CAAC;;QAIrE,cAAS,GAAG,GAAG,CAAC;;QAOhB,UAAK,GAAG,IAAI,CAAC;;QAGP,aAAQ,GAAG,UAAU,CAAC;QACb,WAAM,GAAG,QAAQ,CAAC;KAEK;;IAX/C,IACI,QAAQ,CAAC,CAAS;QACpB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KACnB;IAUD,WAAW;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,8BAA8B,CACvD,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAC9D,CAAC;KACH;;yGAzBU,YAAY;6FAAZ,YAAY;2FAAZ,YAAY;kBADxB,SAAS;mBAAC,EAAE,QAAQ,EAAE,WAAW,EAAE;mGAGzB,IAAI;sBAAZ,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAGF,QAAQ;sBADX,KAAK;gBAKG,KAAK;sBAAb,KAAK;gBACS,IAAI;sBAAlB,WAAW;gBAEG,QAAQ;sBAAtB,WAAW;gBACY,MAAM;sBAA7B,KAAK;;sBAAI,WAAW;;;MCfV,SAAS;;sGAAT,SAAS;uGAAT,SAAS,iBAHL,YAAY,aACjB,YAAY;uGAEX,SAAS;2FAAT,SAAS;kBAJrB,QAAQ;mBAAC;oBACR,YAAY,EAAE,CAAC,YAAY,CAAC;oBAC5B,OAAO,EAAE,CAAC,YAAY,CAAC;iBACxB;;;ACPD;;;;;;"}
@@ -0,0 +1,122 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, Input, HostBinding, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/platform-browser';
4
+
5
+ const isJsons = (array) => Array.isArray(array) &&
6
+ array.every(row => typeof row === 'object' && !(row instanceof Array));
7
+ const isArrays = (array) => Array.isArray(array) && array.every(row => Array.isArray(row));
8
+ function jsonsHeaders(array) {
9
+ return Array.from(new Set(array.map(item => Object.keys(item)).reduce((a, b) => [...a, ...b], [])));
10
+ }
11
+ function jsons2arrays(jsons, headers) {
12
+ headers = headers || jsonsHeaders(jsons);
13
+ // allow headers to have custom labels, defaulting to having the header data key be the label
14
+ let headerLabels = headers;
15
+ let headerKeys = headers;
16
+ if (isJsons(headers)) {
17
+ headerLabels = headers.map(header => header.label);
18
+ headerKeys = headers.map(header => header.key);
19
+ }
20
+ const data = jsons.map(object => headerKeys.map(header => (header in object ? object[header] : '')));
21
+ return [headerLabels, ...data];
22
+ }
23
+ const elementOrEmpty = (element) => element || element === 0 ? element : '';
24
+ function joiner(data, delimiter = ',') {
25
+ return data
26
+ .map((row, index) => row.map((element) => '"' + elementOrEmpty(element) + '"').join(delimiter))
27
+ .join(`\n`);
28
+ }
29
+ function arrays2csv(data, headers, delimiter) {
30
+ return joiner(headers ? [headers, ...data] : data, delimiter);
31
+ }
32
+ function jsons2csv(data, headers, delimiter) {
33
+ return joiner(jsons2arrays(data, headers), delimiter);
34
+ }
35
+ function string2csv(data, headers, delimiter) {
36
+ return headers ? `${headers.join(delimiter)}\n${data}` : data;
37
+ }
38
+ function toCSV(data, headers, delimiter) {
39
+ if (isJsons(data)) {
40
+ return jsons2csv(data, headers, delimiter);
41
+ }
42
+ if (isArrays(data)) {
43
+ return arrays2csv(data, headers, delimiter);
44
+ }
45
+ if (typeof data === 'string') {
46
+ return string2csv(data, headers, delimiter);
47
+ }
48
+ throw new TypeError(`Data should be a "String", "Array of arrays" OR "Array of objects" `);
49
+ }
50
+ function blob(data, uFEFF = true, headers, delimiter) {
51
+ const csv = toCSV(data, headers, delimiter);
52
+ return new Blob([uFEFF ? '\uFEFF' : '', csv], { type: 'text/csv' });
53
+ }
54
+ function buildURI(data, uFEFF = true, headers, delimiter) {
55
+ return URL.createObjectURL(blob(data, uFEFF, headers, delimiter));
56
+ }
57
+
58
+ class CsvDirective {
59
+ constructor(sanitizer) {
60
+ this.sanitizer = sanitizer;
61
+ /** the body of the csv */
62
+ this.data = [];
63
+ /** Set the seperator between values */
64
+ this.delimiter = ',';
65
+ /** adds a Byte order mark to setup the csv as UTF-8 */
66
+ this.uFEFF = true;
67
+ /** filename */
68
+ this.download = 'data.csv';
69
+ this.target = '_blank';
70
+ }
71
+ /** Set the filename of the csv. Default is `data.csv` */
72
+ set filename(a) {
73
+ this.download = a;
74
+ }
75
+ ngOnChanges() {
76
+ this.href = this.sanitizer.bypassSecurityTrustResourceUrl(buildURI(this.data, this.uFEFF, this.headers, this.delimiter));
77
+ }
78
+ }
79
+ CsvDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvDirective, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive });
80
+ CsvDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: CsvDirective, selector: "[csvLink]", inputs: { data: "data", headers: "headers", delimiter: "delimiter", filename: "filename", uFEFF: "uFEFF", target: "target" }, host: { properties: { "href": "this.href", "download": "this.download", "target": "this.target" } }, usesOnChanges: true, ngImport: i0 });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvDirective, decorators: [{
82
+ type: Directive,
83
+ args: [{ selector: '[csvLink]' }]
84
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { data: [{
85
+ type: Input
86
+ }], headers: [{
87
+ type: Input
88
+ }], delimiter: [{
89
+ type: Input
90
+ }], filename: [{
91
+ type: Input
92
+ }], uFEFF: [{
93
+ type: Input
94
+ }], href: [{
95
+ type: HostBinding
96
+ }], download: [{
97
+ type: HostBinding
98
+ }], target: [{
99
+ type: Input
100
+ }, {
101
+ type: HostBinding
102
+ }] } });
103
+
104
+ class CsvModule {
105
+ }
106
+ CsvModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
107
+ CsvModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, declarations: [CsvDirective], exports: [CsvDirective] });
108
+ CsvModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule });
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CsvModule, decorators: [{
110
+ type: NgModule,
111
+ args: [{
112
+ declarations: [CsvDirective],
113
+ exports: [CsvDirective],
114
+ }]
115
+ }] });
116
+
117
+ /**
118
+ * Generated bundle index. Do not edit.
119
+ */
120
+
121
+ export { CsvDirective, CsvModule, arrays2csv, blob, buildURI, elementOrEmpty, isArrays, isJsons, joiner, jsons2arrays, jsons2csv, jsonsHeaders, string2csv, toCSV };
122
+ //# sourceMappingURL=ctrl-ngx-csv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctrl-ngx-csv.mjs","sources":["../../src/lib/util.ts","../../src/lib/csv.directive.ts","../../src/lib/csv.module.ts","../../src/lib/ctrl-ngx-csv.ts"],"sourcesContent":["/* eslint-disable prefer-arrow/prefer-arrow-functions */\nexport interface HeaderObj {\n label: string;\n key: string;\n}\n\nexport const isJsons = (array: any[]) =>\n Array.isArray(array) &&\n array.every(row => typeof row === 'object' && !(row instanceof Array));\n\nexport const isArrays = (array: any[]) =>\n Array.isArray(array) && array.every(row => Array.isArray(row));\n\nexport function jsonsHeaders(array: object[]) {\n return Array.from(\n new Set(\n array.map(item => Object.keys(item)).reduce((a, b) => [...a, ...b], []),\n ),\n );\n}\n\nexport function jsons2arrays(\n jsons: { [key: string]: string }[],\n headers?: string[] | HeaderObj[],\n) {\n headers = headers || jsonsHeaders(jsons);\n\n // allow headers to have custom labels, defaulting to having the header data key be the label\n let headerLabels: string[] = headers as string[];\n let headerKeys: string[] = headers as string[];\n if (isJsons(headers)) {\n headerLabels = (headers as HeaderObj[]).map(header => header.label);\n headerKeys = (headers as HeaderObj[]).map(header => header.key);\n }\n\n const data = jsons.map(object =>\n headerKeys.map(header => (header in object ? object[header] : '')),\n );\n return [headerLabels, ...data];\n}\n\nexport const elementOrEmpty = (element: any) =>\n element || element === 0 ? element : '';\n\nexport function joiner(data: any, delimiter = ',') {\n return data\n .map((row: any, index: number) =>\n row.map((element: any) => '\"' + elementOrEmpty(element) + '\"').join(delimiter),\n )\n .join(`\\n`);\n}\n\nexport function arrays2csv(\n data: string[][],\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n return joiner(headers ? [headers, ...data] : data, delimiter);\n}\n\nexport function jsons2csv(\n data: { [key: string]: string }[],\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n return joiner(jsons2arrays(data, headers), delimiter);\n}\n\nexport function string2csv(\n data: string,\n headers?: string[],\n delimiter?: string,\n) {\n return headers ? `${headers.join(delimiter)}\\n${data}` : data;\n}\n\nexport function toCSV(\n data: string | string[][] | { [key: string]: string }[] | any[],\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n if (isJsons(data as any)) {\n return jsons2csv(data as { [key: string]: string }[], headers, delimiter);\n }\n if (isArrays(data as any)) {\n return arrays2csv(data as string[][], headers, delimiter);\n }\n if (typeof data === 'string') {\n return string2csv(data, headers as string[], delimiter);\n }\n throw new TypeError(\n `Data should be a \"String\", \"Array of arrays\" OR \"Array of objects\" `,\n );\n}\n\nexport function blob(\n data: string | string[][] | { [key: string]: string }[] | any[],\n uFEFF = true,\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n const csv = toCSV(data, headers, delimiter);\n return new Blob([uFEFF ? '\\uFEFF' : '', csv], { type: 'text/csv' });\n}\n\nexport function buildURI(\n data: string | string[][] | { [key: string]: string }[] | any[],\n uFEFF = true,\n headers?: string[] | HeaderObj[],\n delimiter?: string,\n) {\n return URL.createObjectURL(blob(data, uFEFF, headers, delimiter));\n}\n","import { Directive, HostBinding, Input, OnChanges } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\nimport { buildURI, HeaderObj } from './util';\n\n@Directive({ selector: '[csvLink]' })\nexport class CsvDirective implements OnChanges {\n /** the body of the csv */\n @Input() data: string | string[][] | { [key: string]: string }[] | any[] = [];\n /** Set the first line of the csv */\n @Input() headers?: string[] | HeaderObj[];\n /** Set the seperator between values */\n @Input() delimiter = ',';\n /** Set the filename of the csv. Default is `data.csv` */\n @Input()\n set filename(a: string) {\n this.download = a;\n }\n /** adds a Byte order mark to setup the csv as UTF-8 */\n @Input() uFEFF = true;\n @HostBinding() href?: SafeResourceUrl;\n /** filename */\n @HostBinding() download = 'data.csv';\n @Input() @HostBinding() target = '_blank';\n\n constructor(private sanitizer: DomSanitizer) {}\n\n ngOnChanges() {\n this.href = this.sanitizer.bypassSecurityTrustResourceUrl(\n buildURI(this.data, this.uFEFF, this.headers, this.delimiter),\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { CsvDirective } from './csv.directive';\n\n@NgModule({\n declarations: [CsvDirective],\n exports: [CsvDirective],\n})\nexport class CsvModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -5,32 +5,40 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "2.1.1",
8
+ "version": "5.0.0",
9
9
  "peerDependencies": {
10
- "@angular/core": ">=8.0.0",
11
- "@angular/platform-browser": ">=8.0.0"
10
+ "@angular/core": ">=12.0.0-0"
12
11
  },
13
- "repository": "typectrl/ngx-csv",
14
- "homepage": "https://github.com/typectrl/ngx-csv",
12
+ "repository": "scttcper/ngx-csv",
13
+ "homepage": "https://ngx-csv.vercel.app",
15
14
  "license": "MIT",
16
- "bugs": "https://github.com/typectrl/ngx-csv/issues",
17
15
  "keywords": [
18
16
  "ngx",
19
17
  "angular",
20
18
  "angular-component",
21
19
  "csv"
22
20
  ],
23
- "main": "bundles/ctrl-ngx-csv.umd.js",
24
- "module": "fesm5/ctrl-ngx-csv.js",
25
- "es2015": "fesm2015/ctrl-ngx-csv.js",
26
- "esm5": "esm5/ctrl-ngx-csv.js",
27
- "esm2015": "esm2015/ctrl-ngx-csv.js",
28
- "fesm5": "fesm5/ctrl-ngx-csv.js",
29
- "fesm2015": "fesm2015/ctrl-ngx-csv.js",
21
+ "module": "fesm2015/ctrl-ngx-csv.mjs",
22
+ "es2020": "fesm2020/ctrl-ngx-csv.mjs",
23
+ "esm2020": "esm2020/ctrl-ngx-csv.mjs",
24
+ "fesm2020": "fesm2020/ctrl-ngx-csv.mjs",
25
+ "fesm2015": "fesm2015/ctrl-ngx-csv.mjs",
30
26
  "typings": "ctrl-ngx-csv.d.ts",
31
- "metadata": "ctrl-ngx-csv.metadata.json",
27
+ "exports": {
28
+ "./package.json": {
29
+ "default": "./package.json"
30
+ },
31
+ ".": {
32
+ "types": "./ctrl-ngx-csv.d.ts",
33
+ "esm2020": "./esm2020/ctrl-ngx-csv.mjs",
34
+ "es2020": "./fesm2020/ctrl-ngx-csv.mjs",
35
+ "es2015": "./fesm2015/ctrl-ngx-csv.mjs",
36
+ "node": "./fesm2015/ctrl-ngx-csv.mjs",
37
+ "default": "./fesm2020/ctrl-ngx-csv.mjs"
38
+ }
39
+ },
32
40
  "sideEffects": false,
33
41
  "dependencies": {
34
- "tslib": "^1.9.0"
42
+ "tslib": "^2.3.0"
35
43
  }
36
44
  }