@comet/cms-api 8.10.0-canary-20251204084621 → 8.10.0-canary-20251204101847

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.
Files changed (54) hide show
  1. package/lib/importer/data-streams/data-stream.d.ts +10 -0
  2. package/lib/importer/data-streams/data-stream.d.ts.map +1 -0
  3. package/lib/importer/data-streams/data-stream.js +7 -0
  4. package/lib/importer/data-streams/data-stream.js.map +1 -0
  5. package/lib/importer/data-streams/file-data-stream.d.ts +22 -0
  6. package/lib/importer/data-streams/file-data-stream.d.ts.map +1 -0
  7. package/lib/importer/data-streams/file-data-stream.js +16 -0
  8. package/lib/importer/data-streams/file-data-stream.js.map +1 -0
  9. package/lib/importer/data-streams/local-file-data-stream.d.ts +18 -0
  10. package/lib/importer/data-streams/local-file-data-stream.d.ts.map +1 -0
  11. package/lib/importer/data-streams/local-file-data-stream.js +99 -0
  12. package/lib/importer/data-streams/local-file-data-stream.js.map +1 -0
  13. package/lib/importer/decorators/csv-column.decorator.d.ts +35 -0
  14. package/lib/importer/decorators/csv-column.decorator.d.ts.map +1 -0
  15. package/lib/importer/decorators/csv-column.decorator.js +63 -0
  16. package/lib/importer/decorators/csv-column.decorator.js.map +1 -0
  17. package/lib/importer/import-target.interface.d.ts +6 -0
  18. package/lib/importer/import-target.interface.d.ts.map +1 -0
  19. package/lib/importer/import-target.interface.js +3 -0
  20. package/lib/importer/import-target.interface.js.map +1 -0
  21. package/lib/importer/importer-input.type.d.ts +4 -0
  22. package/lib/importer/importer-input.type.d.ts.map +1 -0
  23. package/lib/importer/importer-input.type.js +3 -0
  24. package/lib/importer/importer-input.type.js.map +1 -0
  25. package/lib/importer/pipes/end.pipe.d.ts +14 -0
  26. package/lib/importer/pipes/end.pipe.d.ts.map +1 -0
  27. package/lib/importer/pipes/end.pipe.js +19 -0
  28. package/lib/importer/pipes/end.pipe.js.map +1 -0
  29. package/lib/importer/pipes/importer-pipe.type.d.ts +19 -0
  30. package/lib/importer/pipes/importer-pipe.type.d.ts.map +1 -0
  31. package/lib/importer/pipes/importer-pipe.type.js +3 -0
  32. package/lib/importer/pipes/importer-pipe.type.js.map +1 -0
  33. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts +13 -0
  34. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts.map +1 -0
  35. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.js +22 -0
  36. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.js.map +1 -0
  37. package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts +24 -0
  38. package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts.map +1 -0
  39. package/lib/importer/pipes/parsers/csv-parser.pipe.js +98 -0
  40. package/lib/importer/pipes/parsers/csv-parser.pipe.js.map +1 -0
  41. package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts +19 -0
  42. package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts.map +1 -0
  43. package/lib/importer/pipes/parsers/data-transformer.pipe.js +51 -0
  44. package/lib/importer/pipes/parsers/data-transformer.pipe.js.map +1 -0
  45. package/lib/importer/pipes/parsers/data-validator.pipe.d.ts +15 -0
  46. package/lib/importer/pipes/parsers/data-validator.pipe.d.ts.map +1 -0
  47. package/lib/importer/pipes/parsers/data-validator.pipe.js +61 -0
  48. package/lib/importer/pipes/parsers/data-validator.pipe.js.map +1 -0
  49. package/lib/index.d.ts +8 -0
  50. package/lib/index.d.ts.map +1 -1
  51. package/lib/index.js +14 -2
  52. package/lib/index.js.map +1 -1
  53. package/lib/tsconfig.build.tsbuildinfo +1 -1
  54. package/package.json +3 -2
@@ -0,0 +1,10 @@
1
+ import type { Readable } from "stream";
2
+ import type { PipeMetadata } from "../pipes/importer-pipe.type";
3
+ export type StreamChunkAndMetadata = {
4
+ chunk: Buffer | string;
5
+ metadata: PipeMetadata;
6
+ };
7
+ export declare abstract class ImporterDataStream {
8
+ abstract getDataStreamAndMetadata(): Promise<Readable | null>;
9
+ }
10
+ //# sourceMappingURL=data-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-stream.d.ts","sourceRoot":"","sources":["../../../src/importer/data-streams/data-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;CAC1B,CAAC;AACF,8BAAsB,kBAAkB;IACpC,QAAQ,CAAC,wBAAwB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAChE"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImporterDataStream = void 0;
4
+ class ImporterDataStream {
5
+ }
6
+ exports.ImporterDataStream = ImporterDataStream;
7
+ //# sourceMappingURL=data-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-stream.js","sourceRoot":"","sources":["../../../src/importer/data-streams/data-stream.ts"],"names":[],"mappings":";;;AAQA,MAAsB,kBAAkB;CAEvC;AAFD,gDAEC"}
@@ -0,0 +1,22 @@
1
+ import { type ReadStream } from "node:fs";
2
+ import { type SdkStream } from "@smithy/types";
3
+ import { type IncomingMessage } from "http";
4
+ import { ImporterDataStream } from "./data-stream";
5
+ type FileStream = SdkStream<IncomingMessage> | ReadStream;
6
+ interface FileStreamAndSize {
7
+ fileStream: FileStream;
8
+ fileName?: string;
9
+ fileSize?: number;
10
+ }
11
+ export type FileStreamAndMetadata = {
12
+ dataStream: FileStream;
13
+ metadata: {
14
+ fileName?: string;
15
+ fileSize?: number;
16
+ };
17
+ };
18
+ export declare abstract class FileDataStream extends ImporterDataStream {
19
+ getFileStreamResult(fileStreamAndSize: FileStreamAndSize): FileStreamAndMetadata;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=file-data-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-data-stream.d.ts","sourceRoot":"","sources":["../../../src/importer/data-streams/file-data-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,KAAK,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;AAE1D,UAAU,iBAAiB;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACL,CAAC;AAEF,8BAAsB,cAAe,SAAQ,kBAAkB;IAC3D,mBAAmB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,qBAAqB;CAQnF"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileDataStream = void 0;
4
+ const data_stream_1 = require("./data-stream");
5
+ class FileDataStream extends data_stream_1.ImporterDataStream {
6
+ getFileStreamResult(fileStreamAndSize) {
7
+ return {
8
+ dataStream: fileStreamAndSize.fileStream,
9
+ metadata: {
10
+ fileName: fileStreamAndSize.fileName,
11
+ },
12
+ };
13
+ }
14
+ }
15
+ exports.FileDataStream = FileDataStream;
16
+ //# sourceMappingURL=file-data-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-data-stream.js","sourceRoot":"","sources":["../../../src/importer/data-streams/file-data-stream.ts"],"names":[],"mappings":";;;AAKA,+CAAmD;AAkBnD,MAAsB,cAAe,SAAQ,gCAAkB;IAC3D,mBAAmB,CAAC,iBAAoC;QACpD,OAAO;YACH,UAAU,EAAE,iBAAiB,CAAC,UAAU;YACxC,QAAQ,EAAE;gBACN,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;aACvC;SACJ,CAAC;IACN,CAAC;CACJ;AATD,wCASC"}
@@ -0,0 +1,18 @@
1
+ import { Readable } from "node:stream";
2
+ import { FileDataStream } from "./file-data-stream";
3
+ export declare class ImporterLocalFileDataStream extends FileDataStream {
4
+ private readonly logger;
5
+ fileKey: string;
6
+ constructor(fileKey: string);
7
+ getDataStreamAndMetadata(): Promise<Readable | null>;
8
+ private generateFileIterator;
9
+ protected getFileStreamAndSizeOfLocalFile({ filePath, encoding }: {
10
+ filePath?: string;
11
+ encoding?: BufferEncoding;
12
+ }): Promise<{
13
+ fileSize: number;
14
+ fileStream: import("fs").ReadStream;
15
+ fileName: string;
16
+ } | null>;
17
+ }
18
+ //# sourceMappingURL=local-file-data-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-data-stream.d.ts","sourceRoot":"","sources":["../../../src/importer/data-streams/local-file-data-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC,OAAO,EAAE,cAAc,EAA8B,MAAM,oBAAoB,CAAC;AAEhF,qBAAa,2BAA4B,SAAQ,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,EAAE,MAAM,CAAC;gBAEJ,OAAO,EAAE,MAAM;IAKrB,wBAAwB;YAUf,oBAAoB;cASnB,+BAA+B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE;;;;;CAiB3H"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
12
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13
+ var m = o[Symbol.asyncIterator], i;
14
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
15
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
16
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
17
+ };
18
+ var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
19
+ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
20
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
21
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
22
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
23
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
24
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
25
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
26
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
27
+ function fulfill(value) { resume("next", value); }
28
+ function reject(value) { resume("throw", value); }
29
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
30
+ };
31
+ var __importDefault = (this && this.__importDefault) || function (mod) {
32
+ return (mod && mod.__esModule) ? mod : { "default": mod };
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.ImporterLocalFileDataStream = void 0;
36
+ const node_fs_1 = require("node:fs");
37
+ const node_stream_1 = require("node:stream");
38
+ const common_1 = require("@nestjs/common");
39
+ const path_1 = __importDefault(require("path"));
40
+ const file_data_stream_1 = require("./file-data-stream");
41
+ class ImporterLocalFileDataStream extends file_data_stream_1.FileDataStream {
42
+ constructor(fileKey) {
43
+ super();
44
+ this.logger = new common_1.Logger();
45
+ this.fileKey = fileKey;
46
+ }
47
+ getDataStreamAndMetadata() {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const dataStreamAndSize = yield this.getFileStreamAndSizeOfLocalFile({ filePath: this.fileKey });
50
+ if (!dataStreamAndSize) {
51
+ return null;
52
+ }
53
+ const fileStreamAndMetadata = yield this.getFileStreamResult(dataStreamAndSize);
54
+ return node_stream_1.Readable.from(this.generateFileIterator(fileStreamAndMetadata));
55
+ });
56
+ }
57
+ generateFileIterator(fileStreamAndMetadata) {
58
+ return __asyncGenerator(this, arguments, function* generateFileIterator_1() {
59
+ var _a, e_1, _b, _c;
60
+ const { dataStream, metadata } = fileStreamAndMetadata;
61
+ try {
62
+ for (var _d = true, dataStream_1 = __asyncValues(dataStream), dataStream_1_1; dataStream_1_1 = yield __await(dataStream_1.next()), _a = dataStream_1_1.done, !_a; _d = true) {
63
+ _c = dataStream_1_1.value;
64
+ _d = false;
65
+ const chunk = _c;
66
+ const chunkAndMetadata = { chunk, metadata };
67
+ yield yield __await(chunkAndMetadata);
68
+ }
69
+ }
70
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
71
+ finally {
72
+ try {
73
+ if (!_d && !_a && (_b = dataStream_1.return)) yield __await(_b.call(dataStream_1));
74
+ }
75
+ finally { if (e_1) throw e_1.error; }
76
+ }
77
+ });
78
+ }
79
+ getFileStreamAndSizeOfLocalFile(_a) {
80
+ return __awaiter(this, arguments, void 0, function* ({ filePath, encoding }) {
81
+ if (!filePath) {
82
+ this.logger.error(`File ${filePath} does not exist`);
83
+ return null;
84
+ }
85
+ // check if file exists
86
+ if (!(0, node_fs_1.existsSync)(filePath)) {
87
+ this.logger.error(`File ${filePath} does not exist`);
88
+ return null;
89
+ }
90
+ const fileSize = (0, node_fs_1.statSync)(filePath).size;
91
+ // gzip file must be read as binary, without encoding
92
+ const fileStream = (0, node_fs_1.createReadStream)(filePath, filePath.endsWith(".gz") && !encoding ? {} : { encoding: encoding || "utf-8" });
93
+ this.logger.log(`Providing fileStreams for local file (${filePath} fileSize: ${fileSize}).`);
94
+ return { fileSize, fileStream, fileName: path_1.default.basename(filePath) };
95
+ });
96
+ }
97
+ }
98
+ exports.ImporterLocalFileDataStream = ImporterLocalFileDataStream;
99
+ //# sourceMappingURL=local-file-data-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-data-stream.js","sourceRoot":"","sources":["../../../src/importer/data-streams/local-file-data-stream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAiE;AACjE,6CAAuC;AAEvC,2CAAwC;AACxC,gDAAwB;AAGxB,yDAAgF;AAEhF,MAAa,2BAA4B,SAAQ,iCAAc;IAI3D,YAAY,OAAe;QACvB,KAAK,EAAE,CAAC;QAJK,WAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAKnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEK,wBAAwB;;YAC1B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;YAEhF,OAAO,sBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC3E,CAAC;KAAA;IAEc,oBAAoB,CAAC,qBAA4C;;;YAC5E,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC;;gBAEvD,KAA0B,eAAA,eAAA,cAAA,UAAU,CAAA,gBAAA,iGAAE,CAAC;oBAAb,0BAAU;oBAAV,WAAU;oBAAzB,MAAM,KAAK,KAAA,CAAA;oBAClB,MAAM,gBAAgB,GAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;oBACrE,oBAAM,gBAAgB,CAAA,CAAC;gBAC3B,CAAC;;;;;;;;;QACL,CAAC;KAAA;IAEe,+BAA+B;6DAAC,EAAE,QAAQ,EAAE,QAAQ,EAAoD;YACpH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,uBAAuB;YACvB,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,MAAM,QAAQ,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;YACzC,qDAAqD;YACrD,MAAM,UAAU,GAAG,IAAA,0BAAgB,EAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,EAAE,CAAC,CAAC;YAC9H,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,QAAQ,cAAc,QAAQ,IAAI,CAAC,CAAC;YAC7F,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvE,CAAC;KAAA;CACJ;AA7CD,kEA6CC"}
@@ -0,0 +1,35 @@
1
+ import { type ImporterInputClass } from "../importer-input.type";
2
+ export declare enum CsvColumnType {
3
+ String = "String",
4
+ Integer = "Integer",
5
+ Float = "Float",
6
+ Boolean = "Boolean",
7
+ DateTime = "DateTime"
8
+ }
9
+ interface ParsingOptions {
10
+ valueMapping?: ValueMapping;
11
+ dateFormatString?: string;
12
+ type?: CsvColumnType;
13
+ transform?: (value: string) => unknown;
14
+ }
15
+ export interface ImportFieldMetadata extends ParsingOptions {
16
+ key: string;
17
+ fieldPath: string;
18
+ fieldName: string | number;
19
+ }
20
+ interface ValueMapping {
21
+ [key: string]: boolean;
22
+ }
23
+ /**
24
+ * Decorator to define a CSV column for an entity property. It defines the mapping between csv column and entity property.
25
+ * @param {string} fieldName The name/header of the column in the csv file.
26
+ * @param {ParsingOptions} parsingOptions - {@link ParsingOptions} Parsing options for the CSV column.
27
+ * -------------------
28
+ * *ParsingOptions:*
29
+ * @property {{@link valueMapping}} valueMapping - A map defining boolean value representations
30
+ * @property {string} dateFormatString - date-fns format string for parsing this column
31
+ */
32
+ export declare const CsvColumn: (fieldName: string | number, parsingOptions?: Partial<ParsingOptions>) => (target: any, key: string) => void;
33
+ export declare const getFieldMetadata: (entity: ImporterInputClass) => ImportFieldMetadata[];
34
+ export {};
35
+ //# sourceMappingURL=csv-column.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-column.decorator.d.ts","sourceRoot":"","sources":["../../../src/importer/decorators/csv-column.decorator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,oBAAY,aAAa;IACrB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAED,UAAU,cAAc;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1C;AACD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AACD,UAAU,YAAY;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,GAAG,MAAM,EAAE,iBAAgB,OAAO,CAAC,cAAc,CAAM,MAG7E,QAAQ,GAAG,EAAE,KAAK,MAAM,SA8B5C,CAAC;AACF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,kBAAkB,KACD,mBAAmB,EAC5E,CAAC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFieldMetadata = exports.CsvColumn = exports.CsvColumnType = void 0;
4
+ const class_transformer_1 = require("class-transformer");
5
+ const date_fns_1 = require("date-fns");
6
+ var CsvColumnType;
7
+ (function (CsvColumnType) {
8
+ CsvColumnType["String"] = "String";
9
+ CsvColumnType["Integer"] = "Integer";
10
+ CsvColumnType["Float"] = "Float";
11
+ CsvColumnType["Boolean"] = "Boolean";
12
+ CsvColumnType["DateTime"] = "DateTime";
13
+ })(CsvColumnType || (exports.CsvColumnType = CsvColumnType = {}));
14
+ const defaultValueMapping = { true: true, false: false };
15
+ const metadataKey = "fields";
16
+ /**
17
+ * Decorator to define a CSV column for an entity property. It defines the mapping between csv column and entity property.
18
+ * @param {string} fieldName The name/header of the column in the csv file.
19
+ * @param {ParsingOptions} parsingOptions - {@link ParsingOptions} Parsing options for the CSV column.
20
+ * -------------------
21
+ * *ParsingOptions:*
22
+ * @property {{@link valueMapping}} valueMapping - A map defining boolean value representations
23
+ * @property {string} dateFormatString - date-fns format string for parsing this column
24
+ */
25
+ const CsvColumn = (fieldName, parsingOptions = {}) => {
26
+ const { valueMapping, dateFormatString, type, transform } = parsingOptions;
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ return function (target, key) {
29
+ const fields = Reflect.getOwnMetadata(metadataKey, target.constructor) || (Reflect.getMetadata(metadataKey, target.constructor) || []).slice(0);
30
+ fields.push({ key, fieldPath: key, fieldName, valueMapping, dateFormatString, type });
31
+ Reflect.defineMetadata(metadataKey, fields, target.constructor);
32
+ (0, class_transformer_1.Transform)(({ value }) => {
33
+ if (transform) {
34
+ return transform(value);
35
+ }
36
+ if (type === CsvColumnType.Boolean) {
37
+ const valueMapping = parsingOptions.valueMapping || defaultValueMapping;
38
+ return valueMapping[value];
39
+ }
40
+ if (type === CsvColumnType.Integer) {
41
+ return parseInt(value);
42
+ }
43
+ if (type === CsvColumnType.Float) {
44
+ return parseFloat(value);
45
+ }
46
+ if (type === CsvColumnType.DateTime) {
47
+ if (dateFormatString) {
48
+ return (0, date_fns_1.parse)(value, dateFormatString, new Date());
49
+ }
50
+ else {
51
+ return (0, date_fns_1.parseISO)(value);
52
+ }
53
+ }
54
+ return value;
55
+ })(target, key);
56
+ };
57
+ };
58
+ exports.CsvColumn = CsvColumn;
59
+ const getFieldMetadata = (entity) => {
60
+ return Reflect.getOwnMetadata(metadataKey, entity);
61
+ };
62
+ exports.getFieldMetadata = getFieldMetadata;
63
+ //# sourceMappingURL=csv-column.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-column.decorator.js","sourceRoot":"","sources":["../../../src/importer/decorators/csv-column.decorator.ts"],"names":[],"mappings":";;;AAAA,yDAA8C;AAC9C,uCAA2C;AAI3C,IAAY,aAMX;AAND,WAAY,aAAa;IACrB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;IACnB,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,sCAAqB,CAAA;AACzB,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB;AAiBD,MAAM,mBAAmB,GAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClF,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B;;;;;;;;GAQG;AACI,MAAM,SAAS,GAAG,CAAC,SAA0B,EAAE,iBAA0C,EAAE,EAAE,EAAE;IAClG,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;IAC3E,+DAA+D;IAC/D,OAAO,UAAU,MAAW,EAAE,GAAW;QACrC,MAAM,MAAM,GACR,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrI,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEhE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACpB,IAAI,SAAS,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,IAAI,mBAAmB,CAAC;gBACxE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,gBAAgB,EAAE,CAAC;oBACnB,OAAO,IAAA,gBAAK,EAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,OAAO,IAAA,mBAAQ,EAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC;AACN,CAAC,CAAC;AAjCW,QAAA,SAAS,aAiCpB;AACK,MAAM,gBAAgB,GAAG,CAAC,MAA0B,EAAE,EAAE;IAC3D,OAAO,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAA0B,CAAC;AAChF,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
@@ -0,0 +1,6 @@
1
+ export type ImportTargetInterface = {
2
+ id: string;
3
+ createdAt?: Date;
4
+ updatedAt?: Date;
5
+ };
6
+ //# sourceMappingURL=import-target.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-target.interface.d.ts","sourceRoot":"","sources":["../../src/importer/import-target.interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=import-target.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-target.interface.js","sourceRoot":"","sources":["../../src/importer/import-target.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type ImporterInputClass = {
2
+ new (): object;
3
+ };
4
+ //# sourceMappingURL=importer-input.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-input.type.d.ts","sourceRoot":"","sources":["../../src/importer/importer-input.type.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=importer-input.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-input.type.js","sourceRoot":"","sources":["../../src/importer/importer-input.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { Transform, type TransformCallback } from "stream";
2
+ import { type ImporterPipe } from "./importer-pipe.type";
3
+ export declare class ImporterEndPipe implements ImporterPipe {
4
+ getPipe(): EndHandler;
5
+ }
6
+ declare class EndHandler extends Transform {
7
+ constructor();
8
+ _transform(inputData: {
9
+ chunk: Buffer | string;
10
+ metadata: Record<string, unknown>;
11
+ }, encoding: BufferEncoding, callback: TransformCallback): void;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=end.pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end.pipe.d.ts","sourceRoot":"","sources":["../../../src/importer/pipes/end.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,eAAgB,YAAW,YAAY;IAChD,OAAO;CAGV;AAED,cAAM,UAAW,SAAQ,SAAS;;IAK9B,UAAU,CAAC,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB;CAG7I"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImporterEndPipe = void 0;
4
+ const stream_1 = require("stream");
5
+ class ImporterEndPipe {
6
+ getPipe() {
7
+ return new EndHandler();
8
+ }
9
+ }
10
+ exports.ImporterEndPipe = ImporterEndPipe;
11
+ class EndHandler extends stream_1.Transform {
12
+ constructor() {
13
+ super({ writableObjectMode: true, objectMode: true });
14
+ }
15
+ _transform(inputData, encoding, callback) {
16
+ callback();
17
+ }
18
+ }
19
+ //# sourceMappingURL=end.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end.pipe.js","sourceRoot":"","sources":["../../../src/importer/pipes/end.pipe.ts"],"names":[],"mappings":";;;AAAA,mCAA2D;AAI3D,MAAa,eAAe;IACxB,OAAO;QACH,OAAO,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC;CACJ;AAJD,0CAIC;AAED,MAAM,UAAW,SAAQ,kBAAS;IAC9B;QACI,KAAK,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,UAAU,CAAC,SAAwE,EAAE,QAAwB,EAAE,QAA2B;QACtI,QAAQ,EAAE,CAAC;IACf,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ import { type LoggerService } from "@nestjs/common";
2
+ import { type ValidationError as ClassValidationError } from "class-validator";
3
+ import { type Transform } from "stream";
4
+ export type PipeData = Record<string, unknown>;
5
+ export type PipeMetadata = Record<string, unknown>;
6
+ type ParserOptions = Record<string, unknown>;
7
+ export interface ValidationError extends ClassValidationError {
8
+ name?: string | number;
9
+ errorMessage: string;
10
+ value?: string;
11
+ }
12
+ export type ImporterPipe = {
13
+ getPipe(logger: LoggerService, options?: ParserOptions): Transform;
14
+ };
15
+ export type CompositeImporterPipe = {
16
+ getPipes(logger: LoggerService, options: ParserOptions): Transform[];
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=importer-pipe.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-pipe.type.d.ts","sourceRoot":"","sources":["../../../src/importer/pipes/importer-pipe.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,IAAI,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7C,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IACzD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,CAAC;CACxE,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=importer-pipe.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-pipe.type.js","sourceRoot":"","sources":["../../../src/importer/pipes/importer-pipe.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { type Connection, type EntityManager, type IDatabaseDriver } from "@mikro-orm/core";
2
+ import { type LoggerService } from "@nestjs/common";
3
+ import { type Transform } from "stream";
4
+ import { type ImporterInputClass } from "../../importer-input.type";
5
+ import { type CompositeImporterPipe } from "../importer-pipe.type";
6
+ import { type CsvParserOptions } from "./csv-parser.pipe";
7
+ export declare class ImporterCsvParseAndTransformPipes implements CompositeImporterPipe {
8
+ private readonly inputClass;
9
+ private readonly fields;
10
+ constructor(inputClass: ImporterInputClass, em: EntityManager<IDatabaseDriver<Connection>>);
11
+ getPipes(logger: LoggerService, parserOptions: CsvParserOptions): Transform[];
12
+ }
13
+ //# sourceMappingURL=csv-parser-and-transform.composite-pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-parser-and-transform.composite-pipe.d.ts","sourceRoot":"","sources":["../../../../src/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIxE,qBAAa,iCAAkC,YAAW,qBAAqB;IAIvE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAH/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;gBAG1B,UAAU,EAAE,kBAAkB,EAC/C,EAAE,EAAE,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAKlD,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,GAAG,SAAS,EAAE;CAQhF"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImporterCsvParseAndTransformPipes = void 0;
4
+ const csv_column_decorator_1 = require("../../decorators/csv-column.decorator");
5
+ const csv_parser_pipe_1 = require("./csv-parser.pipe");
6
+ const data_transformer_pipe_1 = require("./data-transformer.pipe");
7
+ const data_validator_pipe_1 = require("./data-validator.pipe");
8
+ class ImporterCsvParseAndTransformPipes {
9
+ constructor(inputClass, em) {
10
+ this.inputClass = inputClass;
11
+ this.fields = (0, csv_column_decorator_1.getFieldMetadata)(inputClass);
12
+ }
13
+ getPipes(logger, parserOptions) {
14
+ const parserPipe = new csv_parser_pipe_1.CsvParsePipe(parserOptions, this.fields).getPipe();
15
+ const transformPipe = new data_transformer_pipe_1.DataTransformerPipe(this.inputClass).getPipe(logger);
16
+ const validatorPipe = new data_validator_pipe_1.DataValidatorPipe().getPipe(logger);
17
+ const pipes = [parserPipe, transformPipe, validatorPipe];
18
+ return pipes;
19
+ }
20
+ }
21
+ exports.ImporterCsvParseAndTransformPipes = ImporterCsvParseAndTransformPipes;
22
+ //# sourceMappingURL=csv-parser-and-transform.composite-pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-parser-and-transform.composite-pipe.js","sourceRoot":"","sources":["../../../../src/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.ts"],"names":[],"mappings":";;;AAIA,gFAAmG;AAGnG,uDAAwE;AACxE,mEAA8D;AAC9D,+DAA0D;AAE1D,MAAa,iCAAiC;IAG1C,YACqB,UAA8B,EAC/C,EAA8C;QAD7B,eAAU,GAAV,UAAU,CAAoB;QAG/C,IAAI,CAAC,MAAM,GAAG,IAAA,uCAAgB,EAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,MAAqB,EAAE,aAA+B;QAC3D,MAAM,UAAU,GAAG,IAAI,8BAAY,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1E,MAAM,aAAa,GAAG,IAAI,2CAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,uCAAiB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9D,MAAM,KAAK,GAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAlBD,8EAkBC"}
@@ -0,0 +1,24 @@
1
+ import { type ParserOptionsArgs } from "@fast-csv/parse";
2
+ import { Transform, type TransformCallback } from "stream";
3
+ import { type ImportFieldMetadata } from "../../decorators/csv-column.decorator";
4
+ import { type ImporterPipe, type PipeMetadata } from "../importer-pipe.type";
5
+ export type CsvParserOptions = Omit<ParserOptionsArgs, "encoding"> & {
6
+ encoding: BufferEncoding;
7
+ };
8
+ export declare class CsvParsePipe implements ImporterPipe {
9
+ private readonly parserOptions;
10
+ constructor(parserOptions: CsvParserOptions, csvColumns: ImportFieldMetadata[]);
11
+ getPipe(): CsvParser;
12
+ private getParserOptions;
13
+ }
14
+ export declare class CsvParser extends Transform {
15
+ private readonly options;
16
+ private parser;
17
+ constructor(options: CsvParserOptions);
18
+ _transform(input: {
19
+ chunk: Buffer | string;
20
+ metadata: PipeMetadata;
21
+ }, encoding: BufferEncoding, callback: TransformCallback): void;
22
+ _flush(callback: TransformCallback): void;
23
+ }
24
+ //# sourceMappingURL=csv-parser.pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-parser.pipe.d.ts","sourceRoot":"","sources":["../../../../src/importer/pipes/parsers/csv-parser.pipe.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE7E,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,EAAE,cAAc,CAAA;CAAE,CAAC;AAElG,qBAAa,YAAa,YAAW,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;gBAErC,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,EAAE;IAI9E,OAAO;IAIP,OAAO,CAAC,gBAAgB;CAoC3B;AAED,qBAAa,SAAU,SAAQ,SAAS;IAGxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,MAAM,CAA0D;gBAE3C,OAAO,EAAE,gBAAgB;IAKtD,UAAU,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB;IAiB3H,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;CAI5C"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CsvParser = exports.CsvParsePipe = void 0;
37
+ const csv = __importStar(require("@fast-csv/parse"));
38
+ const stream_1 = require("stream");
39
+ class CsvParsePipe {
40
+ constructor(parserOptions, csvColumns) {
41
+ this.parserOptions = this.getParserOptions(parserOptions, csvColumns);
42
+ }
43
+ getPipe() {
44
+ return new CsvParser(this.parserOptions);
45
+ }
46
+ getParserOptions(jobRunParserOptions, csvColumns) {
47
+ var _a;
48
+ //check entity metadata for csv headers
49
+ const entityHasOnlyNumericCsvColumnNames = csvColumns.every((column) => typeof column.fieldPath === "number");
50
+ const entityHasOnlyStringCsvColumnNames = csvColumns.every((column) => typeof column.fieldPath === "string");
51
+ if (entityHasOnlyNumericCsvColumnNames && entityHasOnlyStringCsvColumnNames) {
52
+ throw new Error(`Error importing: CSV column names must be either all property names or all indices`);
53
+ }
54
+ if ((jobRunParserOptions === null || jobRunParserOptions === void 0 ? void 0 : jobRunParserOptions.headers) && entityHasOnlyNumericCsvColumnNames) {
55
+ throw new Error(`Error importing: Cannot use 'parserOptions.headers' when CSV column names are indices`);
56
+ }
57
+ return Object.assign(Object.assign({ delimiter: ";", quote: '"', trim: true }, jobRunParserOptions), { headers: ((_a = jobRunParserOptions === null || jobRunParserOptions === void 0 ? void 0 : jobRunParserOptions.headers) !== null && _a !== void 0 ? _a : entityHasOnlyNumericCsvColumnNames)
58
+ ? undefined
59
+ : (headers) => headers.map((header) => {
60
+ if (!header) {
61
+ return;
62
+ }
63
+ const csvColumn = csvColumns.find((column) => column.fieldName.toLowerCase() === header.toLowerCase());
64
+ if (!csvColumn) {
65
+ // There is no csvColumnName for this column. Will be ignored.
66
+ return header;
67
+ }
68
+ return csvColumn.key;
69
+ }) });
70
+ }
71
+ }
72
+ exports.CsvParsePipe = CsvParsePipe;
73
+ class CsvParser extends stream_1.Transform {
74
+ constructor(options) {
75
+ super({ objectMode: true });
76
+ this.options = options;
77
+ this.parser = csv.parse(Object.assign({}, this.options));
78
+ }
79
+ _transform(input, encoding, callback) {
80
+ const { chunk, metadata } = input;
81
+ this.parser.removeAllListeners();
82
+ this.parser.on("error", (err) => callback(err));
83
+ this.parser.on("data", (row) => {
84
+ this.push({ data: row, metadata });
85
+ });
86
+ this.parser.on("end", () => {
87
+ callback();
88
+ });
89
+ this.parser.write(chunk);
90
+ callback();
91
+ }
92
+ _flush(callback) {
93
+ this.parser.end();
94
+ callback();
95
+ }
96
+ }
97
+ exports.CsvParser = CsvParser;
98
+ //# sourceMappingURL=csv-parser.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-parser.pipe.js","sourceRoot":"","sources":["../../../../src/importer/pipes/parsers/csv-parser.pipe.ts"],"names":[],"mappings":"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"}