@transcend-io/cli 6.17.0 → 6.19.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.
Files changed (40) hide show
  1. package/README.md +9 -0
  2. package/build/cli-chunk-csv.d.ts +14 -0
  3. package/build/cli-chunk-csv.d.ts.map +1 -0
  4. package/build/cli-chunk-csv.js +140 -0
  5. package/build/cli-chunk-csv.js.map +1 -0
  6. package/build/cli-upload-preferences.js +78 -18
  7. package/build/cli-upload-preferences.js.map +1 -1
  8. package/build/cron/writeCsv.d.ts +17 -1
  9. package/build/cron/writeCsv.d.ts.map +1 -1
  10. package/build/cron/writeCsv.js +51 -2
  11. package/build/cron/writeCsv.js.map +1 -1
  12. package/build/enums.d.ts +2 -2
  13. package/build/enums.d.ts.map +1 -1
  14. package/build/oneTrust/helpers/oneTrustAssessmentToJson.d.ts +1 -1
  15. package/build/oneTrust/helpers/oneTrustAssessmentToJson.d.ts.map +1 -1
  16. package/build/oneTrust/helpers/oneTrustAssessmentToJson.js +2 -2
  17. package/build/oneTrust/helpers/oneTrustAssessmentToJson.js.map +1 -1
  18. package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.d.ts +1 -1
  19. package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.d.ts.map +1 -1
  20. package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.js +2 -2
  21. package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.js.map +1 -1
  22. package/build/oneTrust/helpers/syncOneTrustAssessmentsFromFile.d.ts.map +1 -1
  23. package/build/oneTrust/helpers/syncOneTrustAssessmentsFromFile.js +44 -51
  24. package/build/oneTrust/helpers/syncOneTrustAssessmentsFromFile.js.map +1 -1
  25. package/build/preference-management/getPreferencesForIdentifiers.d.ts.map +1 -1
  26. package/build/preference-management/getPreferencesForIdentifiers.js +6 -1
  27. package/build/preference-management/getPreferencesForIdentifiers.js.map +1 -1
  28. package/build/preference-management/parsePreferenceAndPurposeValuesFromCsv.d.ts.map +1 -1
  29. package/build/preference-management/parsePreferenceAndPurposeValuesFromCsv.js +75 -10
  30. package/build/preference-management/parsePreferenceAndPurposeValuesFromCsv.js.map +1 -1
  31. package/build/preference-management/parsePreferenceManagementCsv.d.ts +3 -1
  32. package/build/preference-management/parsePreferenceManagementCsv.d.ts.map +1 -1
  33. package/build/preference-management/parsePreferenceManagementCsv.js +7 -5
  34. package/build/preference-management/parsePreferenceManagementCsv.js.map +1 -1
  35. package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.d.ts +3 -1
  36. package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.d.ts.map +1 -1
  37. package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.js +2 -1
  38. package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.js.map +1 -1
  39. package/build/tsbuildinfo +1 -1
  40. package/package.json +3 -1
package/README.md CHANGED
@@ -645,6 +645,13 @@ You can also sync to disk in json format:
645
645
  tr-sync-ot --hostname=trial.onetrust.com --oneTrustAuth=$ONE_TRUST_OAUTH_TOKEN --dryRun=true --fileFormat=json --file=./oneTrustAssessments.json
646
646
  ```
647
647
 
648
+ Once you save the assessments into disk, you can sync them to Transcend by reading from the file instead:
649
+
650
+ ```sh
651
+ # Syncs to Transcend by reading from file ./oneTrustAssessments.json
652
+ tr-sync-ot --source=file --file=./oneTrustAssessments.json --transcendAuth=$TRANSCEND_API_KEY
653
+ ```
654
+
648
655
  ### tr-push
649
656
 
650
657
  Given a transcend.yml file, sync the contents up to your connected services view (https://app.transcend.io/privacy-requests/connected-services).
@@ -2486,6 +2493,8 @@ In order to use this cli, you will first need to follow [this guide](https://doc
2486
2493
 
2487
2494
  #### Usage
2488
2495
 
2496
+ A sample CSV can be found [here](./examples/cli-upload-preferences-example.csv). In this example, `Sales` and `Marketing` are two custom Purposes, and `SalesCommunications` and `MarketingCommunications` are Preference Topics. During the interactive CLI prompt, you can map these columns to the slugs stored in Transcend!
2497
+
2489
2498
  Upload consent preferences to partition key `4d1c5daa-90b7-4d18-aa40-f86a43d2c726`
2490
2499
 
2491
2500
  ```sh
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Chunks a large CSV file into smaller files of approximately 1.5GB each
4
+ * Note that you may need to increase the node memory limit for this script to run!!
5
+ *
6
+ * Dev Usage:
7
+ * yarn ts-node ./src/cli-chunk-csv.ts --inputFile=./working/full_export.csv
8
+ *
9
+ * Standard usage:
10
+ * yarn tr-chunk-csv --inputFile=/path/to/large.csv --outputDir=/path/to/output
11
+ */
12
+ declare function main(): Promise<void>;
13
+ export { main };
14
+ //# sourceMappingURL=cli-chunk-csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-chunk-csv.d.ts","sourceRoot":"","sources":["../src/cli-chunk-csv.ts"],"names":[],"mappings":";AA4BA;;;;;;;;;GASG;AACH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA2InC;AAUD,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.main = void 0;
8
+ const csv_parse_1 = require("csv-parse");
9
+ const fs_1 = require("fs");
10
+ const path_1 = require("path");
11
+ const promises_1 = require("stream/promises");
12
+ const stream_1 = require("stream");
13
+ const yargs_parser_1 = __importDefault(require("yargs-parser"));
14
+ const colors_1 = __importDefault(require("colors"));
15
+ const logger_1 = require("./logger");
16
+ const writeCsv_1 = require("./cron/writeCsv");
17
+ /** Size of each chunk in bytes (need to stay WELL under JS string size limit of 512MB) */
18
+ const CHUNK_SIZE = 10 * 1024 * 1024;
19
+ /**
20
+ * Format memory usage for logging
21
+ *
22
+ * @param memoryData - The NodeJS memory usage data to format
23
+ * @returns A formatted string showing memory usage in MB
24
+ */
25
+ function formatMemoryUsage(memoryData) {
26
+ return Object.entries(memoryData)
27
+ .map(([key, value]) => `${key}: ${(value / 1024 / 1024).toFixed(2)} MB`)
28
+ .join(', ');
29
+ }
30
+ /**
31
+ * Chunks a large CSV file into smaller files of approximately 1.5GB each
32
+ * Note that you may need to increase the node memory limit for this script to run!!
33
+ *
34
+ * Dev Usage:
35
+ * yarn ts-node ./src/cli-chunk-csv.ts --inputFile=./working/full_export.csv
36
+ *
37
+ * Standard usage:
38
+ * yarn tr-chunk-csv --inputFile=/path/to/large.csv --outputDir=/path/to/output
39
+ */
40
+ async function main() {
41
+ // Parse command line arguments
42
+ const { inputFile, outputDir } = (0, yargs_parser_1.default)(process.argv.slice(2));
43
+ // Ensure inputFile is provided
44
+ if (!inputFile) {
45
+ logger_1.logger.error(colors_1.default.red('An input file must be provided. You can specify using --inputFile=/path/to/large.csv'));
46
+ process.exit(1);
47
+ }
48
+ const baseFileName = (0, path_1.basename)(inputFile, '.csv');
49
+ const outputDirectory = outputDir || (0, path_1.dirname)(inputFile);
50
+ let currentChunkSize = 0;
51
+ let currentChunkNumber = 1;
52
+ let headerRow = null;
53
+ let currentOutputFile = (0, path_1.join)(outputDirectory, `${baseFileName}_chunk1.csv`);
54
+ let expectedColumnCount = null;
55
+ let totalLinesProcessed = 0;
56
+ const parser = new csv_parse_1.Parser({
57
+ columns: false,
58
+ skip_empty_lines: true,
59
+ });
60
+ const chunker = new stream_1.Transform({
61
+ objectMode: true,
62
+ /**
63
+ * Transform function that processes each chunk of CSV data
64
+ *
65
+ * @param chunk - Array of strings representing a CSV row
66
+ * @param encoding - The encoding of the chunk
67
+ * @param callback - Callback function to signal completion
68
+ */
69
+ transform(chunk, encoding, callback) {
70
+ if (!headerRow) {
71
+ headerRow = chunk;
72
+ expectedColumnCount = headerRow.length;
73
+ logger_1.logger.info(colors_1.default.blue(`Found header row with ${expectedColumnCount} columns: ${headerRow.join(', ')}`));
74
+ callback();
75
+ return;
76
+ }
77
+ // Validate row structure
78
+ if (expectedColumnCount !== null &&
79
+ chunk.length !== expectedColumnCount) {
80
+ logger_1.logger.warn(colors_1.default.yellow(`Warning: Row ${totalLinesProcessed + 1} has ${chunk.length} columns, expected ${expectedColumnCount}`));
81
+ }
82
+ totalLinesProcessed += 1;
83
+ if (totalLinesProcessed % 1000000 === 0) {
84
+ const memoryUsage = formatMemoryUsage(process.memoryUsage());
85
+ logger_1.logger.info(colors_1.default.blue(`Processed ${totalLinesProcessed.toLocaleString()} lines... ` +
86
+ `Memory usage: ${memoryUsage}`));
87
+ }
88
+ const rowSize = Buffer.byteLength(chunk.join(','), 'utf8');
89
+ // Write the current row immediately
90
+ const data = [
91
+ {
92
+ ...Object.fromEntries(headerRow.map((header, index) => [header, chunk[index]])),
93
+ },
94
+ ];
95
+ currentChunkSize += rowSize;
96
+ if (currentChunkSize === rowSize) {
97
+ logger_1.logger.info(colors_1.default.yellow(`Starting new chunk ${currentChunkNumber} at ${currentOutputFile}`));
98
+ (0, writeCsv_1.writeCsvSync)(currentOutputFile, data, headerRow);
99
+ }
100
+ else {
101
+ (0, writeCsv_1.appendCsvSync)(currentOutputFile, data);
102
+ }
103
+ // Determine if we need to start a new chunk
104
+ if (currentChunkSize + rowSize > CHUNK_SIZE) {
105
+ currentChunkNumber += 1;
106
+ currentChunkSize = 0;
107
+ currentOutputFile = (0, path_1.join)(outputDirectory, `${baseFileName}_chunk${currentChunkNumber}.csv`);
108
+ }
109
+ callback();
110
+ },
111
+ /**
112
+ * Flush function that writes the final chunk of data
113
+ *
114
+ * @param callback - Callback function to signal completion
115
+ */
116
+ flush(callback) {
117
+ callback();
118
+ },
119
+ });
120
+ const readStream = (0, fs_1.createReadStream)(inputFile);
121
+ try {
122
+ logger_1.logger.info(colors_1.default.blue(`Starting to process ${inputFile}...`));
123
+ await (0, promises_1.pipeline)(readStream, parser, chunker);
124
+ logger_1.logger.info(colors_1.default.green(`Successfully chunked ${inputFile} into ${currentChunkNumber} files ` +
125
+ `(${totalLinesProcessed.toLocaleString()} total lines processed)`));
126
+ }
127
+ catch (error) {
128
+ logger_1.logger.error(colors_1.default.red('Error chunking CSV file:'), error);
129
+ process.exit(1);
130
+ }
131
+ }
132
+ exports.main = main;
133
+ // Run the main function if this file is being run directly
134
+ if (require.main === module) {
135
+ main().catch((error) => {
136
+ logger_1.logger.error(colors_1.default.red('Error:'), error);
137
+ process.exit(1);
138
+ });
139
+ }
140
+ //# sourceMappingURL=cli-chunk-csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-chunk-csv.js","sourceRoot":"","sources":["../src/cli-chunk-csv.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,9 @@ const logger_1 = require("./logger");
10
10
  const constants_1 = require("./constants");
11
11
  const preference_management_1 = require("./preference-management");
12
12
  const requests_1 = require("./requests");
13
+ const fs_1 = require("fs");
14
+ const bluebird_1 = require("bluebird");
15
+ const path_1 = require("path");
13
16
  /**
14
17
  * Upload consent preferences to the managed consent database
15
18
  *
@@ -17,18 +20,20 @@ const requests_1 = require("./requests");
17
20
  * https://docs.transcend.io/docs/consent/reference/managed-consent-database
18
21
  *
19
22
  * Dev Usage:
20
- * yarn ts-node ./src/cli-upload-consent-preferences-interactive --base64EncryptionKey=$TRANSCEND_CONSENT_ENCRYPTION_KEY \
23
+ * yarn ts-node ./src/cli-upload-preferences --base64EncryptionKey=$TRANSCEND_CONSENT_ENCRYPTION_KEY \
21
24
  * --base64SigningKey=$TRANSCEND_CONSENT_SIGNING_KEY --partition=4d1c5daa-90b7-4d18-aa40-f86a43d2c726
22
25
  *
23
26
  * Standard usage:
24
- * yarn tr-upload-consent-preferences-interactive --base64EncryptionKey=$TRANSCEND_CONSENT_ENCRYPTION_KEY \
27
+ * yarn tr-upload-preferences --base64EncryptionKey=$TRANSCEND_CONSENT_ENCRYPTION_KEY \
25
28
  * --base64SigningKey=$TRANSCEND_CONSENT_SIGNING_KEY --partition=4d1c5daa-90b7-4d18-aa40-f86a43d2c726
26
29
  */
27
30
  async function main() {
28
31
  // Parse command line arguments
29
32
  const {
33
+ /** Directory to load preferences from */
34
+ directory,
30
35
  /** File to load preferences from */
31
- file = './preferences.csv',
36
+ file,
32
37
  /** Transcend URL */
33
38
  transcendUrl = constants_1.DEFAULT_TRANSCEND_API,
34
39
  /** API key */
@@ -43,12 +48,16 @@ async function main() {
43
48
  skipWorkflowTriggers = 'false',
44
49
  /** Whether to skip conflict updates */
45
50
  skipConflictUpdates = 'false',
51
+ /** Whether to skip the check for existing records. SHOULD ONLY BE USED FOR INITIAL UPLOAD */
52
+ skipExistingRecordCheck = 'false',
46
53
  /** Whether to skip sending emails */
47
54
  isSilent = 'true',
48
55
  /** Attributes to add to any DSR request if created */
49
56
  attributes = 'Tags:transcend-cli,Source:transcend-cli',
50
57
  /** Store resulting, continuing where left off */
51
- receiptFilepath = './preference-management-upload-receipts.json', } = (0, yargs_parser_1.default)(process.argv.slice(2));
58
+ receiptFileDir = './receipts',
59
+ /** Number of files to process concurrently (only relevant for directory processing) */
60
+ concurrency = '10', } = (0, yargs_parser_1.default)(process.argv.slice(2));
52
61
  // Ensure auth is passed
53
62
  if (!auth) {
54
63
  logger_1.logger.error(colors_1.default.red('A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY'));
@@ -60,20 +69,71 @@ async function main() {
60
69
  'You can specify using --partition=ee1a0845-694e-4820-9d51-50c7d0a23467'));
61
70
  process.exit(1);
62
71
  }
63
- // Upload cookies
64
- await (0, preference_management_1.uploadPreferenceManagementPreferencesInteractive)({
65
- receiptFilepath,
66
- auth,
67
- sombraAuth,
68
- file,
69
- partition,
70
- transcendUrl,
71
- skipConflictUpdates: skipConflictUpdates !== 'false',
72
- skipWorkflowTriggers: skipWorkflowTriggers !== 'false',
73
- isSilent: isSilent !== 'false',
74
- dryRun: dryRun !== 'false',
75
- attributes: (0, requests_1.splitCsvToList)(attributes),
76
- });
72
+ if (!!directory && !!file) {
73
+ logger_1.logger.error(colors_1.default.red('Cannot provide both a directory and a file. Please provide only one.'));
74
+ process.exit(1);
75
+ }
76
+ if (!file && !directory) {
77
+ logger_1.logger.error(colors_1.default.red(
78
+ // eslint-disable-next-line max-len
79
+ 'A file or directory must be provided. Please provide one using --file=./preferences.csv or --directory=./preferences'));
80
+ process.exit(1);
81
+ }
82
+ const files = [];
83
+ if (directory) {
84
+ try {
85
+ const filesInDirectory = (0, fs_1.readdirSync)(directory);
86
+ const csvFiles = filesInDirectory.filter((file) => file.endsWith('.csv'));
87
+ if (csvFiles.length === 0) {
88
+ logger_1.logger.error(colors_1.default.red(`No CSV files found in directory: ${directory}`));
89
+ process.exit(1);
90
+ }
91
+ // Add full paths for each CSV file
92
+ files.push(...csvFiles.map((file) => (0, path_1.join)(directory, file)));
93
+ }
94
+ catch (err) {
95
+ logger_1.logger.error(colors_1.default.red(`Failed to read directory: ${directory}`));
96
+ logger_1.logger.error(colors_1.default.red(err.message));
97
+ process.exit(1);
98
+ }
99
+ }
100
+ else {
101
+ try {
102
+ // Verify file exists and is a CSV
103
+ if (!file.endsWith('.csv')) {
104
+ logger_1.logger.error(colors_1.default.red('File must be a CSV file'));
105
+ process.exit(1);
106
+ }
107
+ files.push(file);
108
+ }
109
+ catch (err) {
110
+ logger_1.logger.error(colors_1.default.red(`Failed to access file: ${file}`));
111
+ logger_1.logger.error(colors_1.default.red(err.message));
112
+ process.exit(1);
113
+ }
114
+ }
115
+ logger_1.logger.info(colors_1.default.green(`Processing ${files.length} consent preferences files for partition: ${partition}`));
116
+ logger_1.logger.debug(`Files to process: ${files.join(', ')}`);
117
+ if (skipExistingRecordCheck !== 'false') {
118
+ logger_1.logger.info(colors_1.default.bgYellow(`Skipping existing record check: ${skipExistingRecordCheck}`));
119
+ }
120
+ await (0, bluebird_1.map)(files, async (filePath) => {
121
+ const fileName = (0, path_1.basename)(filePath).replace('.csv', '');
122
+ await (0, preference_management_1.uploadPreferenceManagementPreferencesInteractive)({
123
+ receiptFilepath: (0, path_1.join)(receiptFileDir, `${fileName}-receipts.json`),
124
+ auth,
125
+ sombraAuth,
126
+ file: filePath,
127
+ partition,
128
+ transcendUrl,
129
+ skipConflictUpdates: skipConflictUpdates !== 'false',
130
+ skipWorkflowTriggers: skipWorkflowTriggers !== 'false',
131
+ skipExistingRecordCheck: skipExistingRecordCheck !== 'false',
132
+ isSilent: isSilent !== 'false',
133
+ dryRun: dryRun !== 'false',
134
+ attributes: (0, requests_1.splitCsvToList)(attributes),
135
+ });
136
+ }, { concurrency: parseInt(concurrency, 10) });
77
137
  }
78
138
  main();
79
139
  //# sourceMappingURL=cli-upload-preferences.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-upload-preferences.js","sourceRoot":"","sources":["../src/cli-upload-preferences.ts"],"names":[],"mappings":";;;;;;AAEA,gEAAiC;AACjC,oDAA4B;AAE5B,qCAAkC;AAClC,2CAAoD;AACpD,mEAA2F;AAC3F,yCAA4C;AAE5C;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM;IACJ,oCAAoC;IACpC,IAAI,GAAG,mBAAmB;IAC1B,oBAAoB;IACpB,YAAY,GAAG,iCAAqB;IACpC,cAAc;IACd,IAAI;IACJ,qBAAqB;IACrB,UAAU;IACV,iCAAiC;IACjC,SAAS;IACT,8BAA8B;IAC9B,MAAM,GAAG,OAAO;IAChB,wCAAwC;IACxC,oBAAoB,GAAG,OAAO;IAC9B,uCAAuC;IACvC,mBAAmB,GAAG,OAAO;IAC7B,qCAAqC;IACrC,QAAQ,GAAG,MAAM;IACjB,sDAAsD;IACtD,UAAU,GAAG,yCAAyC;IACtD,kDAAkD;IAClD,eAAe,GAAG,8CAA8C,GACjE,GAAG,IAAA,sBAAK,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAA8B,CAAC;IAE9D,wBAAwB;IACxB,IAAI,CAAC,IAAI,EAAE;QACT,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,uFAAuF,CACxF,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,mBAAmB;IACnB,IAAI,CAAC,SAAS,EAAE;QACd,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,gCAAgC;YAC9B,wEAAwE,CAC3E,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,iBAAiB;IACjB,MAAM,IAAA,wEAAgD,EAAC;QACrD,eAAe;QACf,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,SAAS;QACT,YAAY;QACZ,mBAAmB,EAAE,mBAAmB,KAAK,OAAO;QACpD,oBAAoB,EAAE,oBAAoB,KAAK,OAAO;QACtD,QAAQ,EAAE,QAAQ,KAAK,OAAO;QAC9B,MAAM,EAAE,MAAM,KAAK,OAAO;QAC1B,UAAU,EAAE,IAAA,yBAAc,EAAC,UAAU,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cli-upload-preferences.js","sourceRoot":"","sources":["../src/cli-upload-preferences.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,22 @@
1
1
  import { ObjByString } from '@transcend-io/type-utils';
2
2
  /**
3
- * Write a csv to file
3
+ * Write a csv to file synchronously, overwriting any existing content
4
+ *
5
+ * @param filePath - File to write out to
6
+ * @param data - Data to write
7
+ * @param headers - Headers. If true, use object keys as headers. If array, use provided headers.
8
+ */
9
+ export declare function writeCsvSync(filePath: string, data: ObjByString[], headers: string[]): void;
10
+ /**
11
+ * Append data to an existing csv file synchronously
12
+ * Assumes the data structure matches the existing file
13
+ *
14
+ * @param filePath - File to append to
15
+ * @param data - Data to append
16
+ */
17
+ export declare function appendCsvSync(filePath: string, data: ObjByString[]): void;
18
+ /**
19
+ * Write a csv to file asynchronously
4
20
  *
5
21
  * @param filePath - File to write out to
6
22
  * @param data - Data to write
@@ -1 +1 @@
1
- {"version":3,"file":"writeCsv.d.ts","sourceRoot":"","sources":["../../src/cron/writeCsv.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,GAAE,OAAO,GAAG,MAAM,EAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAaf"}
1
+ {"version":3,"file":"writeCsv.d.ts","sourceRoot":"","sources":["../../src/cron/writeCsv.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAcvD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,EAAE,MAAM,EAAE,GAChB,IAAI,CAaN;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAWzE;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EAAE,EACnB,OAAO,GAAE,OAAO,GAAG,MAAM,EAAS,GACjC,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -23,11 +23,60 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.writeCsv = void 0;
26
+ exports.writeCsv = exports.appendCsvSync = exports.writeCsvSync = void 0;
27
27
  const fastcsv = __importStar(require("fast-csv"));
28
28
  const fs_1 = require("fs");
29
29
  /**
30
- * Write a csv to file
30
+ * Escape a CSV value
31
+ *
32
+ * @param value - Value to escape
33
+ * @returns Escaped value
34
+ */
35
+ function escapeCsvValue(value) {
36
+ if (value.includes('"') || value.includes(',') || value.includes('\n')) {
37
+ return `"${value.replace(/"/g, '""')}"`;
38
+ }
39
+ return value;
40
+ }
41
+ /**
42
+ * Write a csv to file synchronously, overwriting any existing content
43
+ *
44
+ * @param filePath - File to write out to
45
+ * @param data - Data to write
46
+ * @param headers - Headers. If true, use object keys as headers. If array, use provided headers.
47
+ */
48
+ function writeCsvSync(filePath, data, headers) {
49
+ const rows = [];
50
+ rows.push(headers);
51
+ rows.push(...data.map((row) => Object.values(row)));
52
+ // Build CSV content with proper escaping
53
+ const csvContent = rows
54
+ .map((row) => row.map(escapeCsvValue).join(','))
55
+ .join('\n');
56
+ // Write to file, overwriting existing content
57
+ (0, fs_1.writeFileSync)(filePath, csvContent);
58
+ }
59
+ exports.writeCsvSync = writeCsvSync;
60
+ /**
61
+ * Append data to an existing csv file synchronously
62
+ * Assumes the data structure matches the existing file
63
+ *
64
+ * @param filePath - File to append to
65
+ * @param data - Data to append
66
+ */
67
+ function appendCsvSync(filePath, data) {
68
+ // Convert data to CSV rows
69
+ const rows = data.map((row) => Object.values(row));
70
+ // Build CSV content with proper escaping
71
+ const csvContent = rows
72
+ .map((row) => row.map(escapeCsvValue).join(','))
73
+ .join('\n');
74
+ // Append to file with leading newline
75
+ (0, fs_1.appendFileSync)(filePath, `\n${csvContent}`);
76
+ }
77
+ exports.appendCsvSync = appendCsvSync;
78
+ /**
79
+ * Write a csv to file asynchronously
31
80
  *
32
81
  * @param filePath - File to write out to
33
82
  * @param data - Data to write
@@ -1 +1 @@
1
- {"version":3,"file":"writeCsv.js","sourceRoot":"","sources":["../../src/cron/writeCsv.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAoC;AACpC,2BAAuC;AAIvC;;;;;;GAMG;AACI,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,IAAmB,EACnB,UAA8B,IAAI;IAElC,MAAM,EAAE,GAAG,IAAA,sBAAiB,EAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpC,IAAI;YACF,OAAO;iBACJ,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC;iBACR,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;iBACnB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SACnC;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;SACb;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAjBD,4BAiBC"}
1
+ {"version":3,"file":"writeCsv.js","sourceRoot":"","sources":["../../src/cron/writeCsv.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAoC;AACpC,2BAAsE;AAItE;;;;;GAKG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACtE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;KACzC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD;;;;;;GAMG;AACH,SAAgB,YAAY,CAC1B,QAAgB,EAChB,IAAmB,EACnB,OAAiB;IAEjB,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEpD,yCAAyC;IACzC,MAAM,UAAU,GAAG,IAAI;SACpB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,8CAA8C;IAC9C,IAAA,kBAAa,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtC,CAAC;AAjBD,oCAiBC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,QAAgB,EAAE,IAAmB;IACjE,2BAA2B;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnD,yCAAyC;IACzC,MAAM,UAAU,GAAG,IAAI;SACpB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,sCAAsC;IACtC,IAAA,mBAAc,EAAC,QAAQ,EAAE,KAAK,UAAU,EAAE,CAAC,CAAC;AAC9C,CAAC;AAXD,sCAWC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,IAAmB,EACnB,UAA8B,IAAI;IAElC,MAAM,EAAE,GAAG,IAAA,sBAAiB,EAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpC,IAAI;YACF,OAAO;iBACJ,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC;iBACR,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;iBACnB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SACnC;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;SACb;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAjBD,4BAiBC"}
package/build/enums.d.ts CHANGED
@@ -63,7 +63,7 @@ export declare const PathfinderPolicyName: {
63
63
  /**
64
64
  * Type override
65
65
  */
66
- export type PathfinderPolicyName = (typeof PathfinderPolicyName)[keyof typeof PathfinderPolicyName];
66
+ export type PathfinderPolicyName = typeof PathfinderPolicyName[keyof typeof PathfinderPolicyName];
67
67
  /**
68
68
  * The names of the OpenAI routes that we support setting policies for
69
69
  * reference: https://platform.openai.com/docs/api-reference/introduction
@@ -86,5 +86,5 @@ export declare const OpenAIRouteName: {
86
86
  /**
87
87
  * Type override
88
88
  */
89
- export type OpenAIRouteName = (typeof OpenAIRouteName)[keyof typeof OpenAIRouteName];
89
+ export type OpenAIRouteName = typeof OpenAIRouteName[keyof typeof OpenAIRouteName];
90
90
  //# sourceMappingURL=enums.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,oBAAY,qBAAqB;IAC/B,OAAO,YAAY;IACnB,UAAU,iBAAiB;IAC3B,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,kBAAkB,uBAAuB;IACzC,WAAW,gBAAgB;IAC3B,qBAAqB,0BAA0B;IAC/C,KAAK,UAAU;IACf,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,mBAAmB,wBAAwB;CAC5C;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;CAK/B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;CAc1B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GACzB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,oBAAY,qBAAqB;IAC/B,OAAO,YAAY;IACnB,UAAU,iBAAiB;IAC3B,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,kBAAkB,uBAAuB;IACzC,WAAW,gBAAgB;IAC3B,qBAAqB,0BAA0B;IAC/C,KAAK,UAAU;IACf,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,mBAAmB,wBAAwB;CAC5C;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;CAK/B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC9B,OAAO,oBAAoB,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;CAc1B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GACzB,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}
@@ -11,7 +11,7 @@ export declare const oneTrustAssessmentToJson: ({ assessment, index, total, wrap
11
11
  /** The position of the assessment in the final Json object */
12
12
  index: number;
13
13
  /** The total amount of the assessments in the final Json object */
14
- total: number;
14
+ total?: number | undefined;
15
15
  /** Whether to wrap every entry in brackets */
16
16
  wrap?: boolean | undefined;
17
17
  }) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"oneTrustAssessmentToJson.d.ts","sourceRoot":"","sources":["../../../src/oneTrust/helpers/oneTrustAssessmentToJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;IAMnC,gCAAgC;gBACpB,0BAA0B;IACtC,8DAA8D;WACvD,MAAM;IACb,mEAAmE;WAC5D,MAAM;IACb,8CAA8C;;MAE5C,MAqBH,CAAC"}
1
+ {"version":3,"file":"oneTrustAssessmentToJson.d.ts","sourceRoot":"","sources":["../../../src/oneTrust/helpers/oneTrustAssessmentToJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;IAMnC,gCAAgC;gBACpB,0BAA0B;IACtC,8DAA8D;WACvD,MAAM;IACb,mEAAmE;;IAEnE,8CAA8C;;MAE5C,MAqBH,CAAC"}
@@ -15,11 +15,11 @@ const oneTrustAssessmentToJson = ({ assessment, index, total, wrap = true, }) =>
15
15
  }
16
16
  const stringifiedAssessment = JSON.stringify(assessment);
17
17
  // Add comma for all items except the last one
18
- const comma = index < total - 1 && !wrap ? ',' : '';
18
+ const comma = total && index < total - 1 && !wrap ? ',' : '';
19
19
  // write to file
20
20
  jsonEntry = `${jsonEntry + stringifiedAssessment + comma}\n`;
21
21
  // end with closing bracket
22
- if (index === total - 1 || wrap) {
22
+ if ((total && index === total - 1) || wrap) {
23
23
  jsonEntry += '\n]';
24
24
  }
25
25
  return jsonEntry;
@@ -1 +1 @@
1
- {"version":3,"file":"oneTrustAssessmentToJson.js","sourceRoot":"","sources":["../../../src/oneTrust/helpers/oneTrustAssessmentToJson.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACI,MAAM,wBAAwB,GAAG,CAAC,EACvC,UAAU,EACV,KAAK,EACL,KAAK,EACL,IAAI,GAAG,IAAI,GAUZ,EAAU,EAAE;IACX,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,gCAAgC;IAChC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE;QACvB,SAAS,GAAG,KAAK,CAAC;KACnB;IAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAEzD,8CAA8C;IAC9C,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpD,gBAAgB;IAChB,SAAS,GAAG,GAAG,SAAS,GAAG,qBAAqB,GAAG,KAAK,IAAI,CAAC;IAE7D,2BAA2B;IAC3B,IAAI,KAAK,KAAK,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE;QAC/B,SAAS,IAAI,KAAK,CAAC;KACpB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAnCW,QAAA,wBAAwB,4BAmCnC"}
1
+ {"version":3,"file":"oneTrustAssessmentToJson.js","sourceRoot":"","sources":["../../../src/oneTrust/helpers/oneTrustAssessmentToJson.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACI,MAAM,wBAAwB,GAAG,CAAC,EACvC,UAAU,EACV,KAAK,EACL,KAAK,EACL,IAAI,GAAG,IAAI,GAUZ,EAAU,EAAE;IACX,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,gCAAgC;IAChC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE;QACvB,SAAS,GAAG,KAAK,CAAC;KACnB;IAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAEzD,8CAA8C;IAC9C,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,gBAAgB;IAChB,SAAS,GAAG,GAAG,SAAS,GAAG,qBAAqB,GAAG,KAAK,IAAI,CAAC;IAE7D,2BAA2B;IAC3B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;QAC1C,SAAS,IAAI,KAAK,CAAC;KACpB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAnCW,QAAA,wBAAwB,4BAmCnC"}
@@ -20,6 +20,6 @@ export declare const syncOneTrustAssessmentToTranscend: ({ transcend, assessment
20
20
  /** The index of the assessment being written to the file */
21
21
  index: number;
22
22
  /** The total amount of assessments that we will write */
23
- total: number;
23
+ total?: number | undefined;
24
24
  }) => Promise<void>;
25
25
  //# sourceMappingURL=syncOneTrustAssessmentToTranscend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncOneTrustAssessmentToTranscend.d.ts","sourceRoot":"","sources":["../../../src/oneTrust/helpers/syncOneTrustAssessmentToTranscend.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAGzE,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC;IAM5C,oCAAoC;eACzB,aAAa;IACxB,0CAA0C;gBAC9B,0BAA0B;IACtC,4DAA4D;WACrD,MAAM;IACb,yDAAyD;WAClD,MAAM;MACX,QAAQ,IAAI,CAqCf,CAAC"}
1
+ {"version":3,"file":"syncOneTrustAssessmentToTranscend.d.ts","sourceRoot":"","sources":["../../../src/oneTrust/helpers/syncOneTrustAssessmentToTranscend.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAGzE,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC;IAM5C,oCAAoC;eACzB,aAAa;IACxB,0CAA0C;gBAC9B,0BAA0B;IACtC,4DAA4D;WACrD,MAAM;IACb,yDAAyD;;MAEvD,QAAQ,IAAI,CAyCf,CAAC"}
@@ -15,7 +15,7 @@ const oneTrustAssessmentToJson_1 = require("./oneTrustAssessmentToJson");
15
15
  * @param param - information about the assessment and Transcend instance to write to
16
16
  */
17
17
  const syncOneTrustAssessmentToTranscend = async ({ transcend, assessment, total, index, }) => {
18
- logger_1.logger.info(colors_1.default.magenta(`Writing enriched assessment ${index + 1} of ${total} to Transcend...`));
18
+ logger_1.logger.info(colors_1.default.magenta(`Writing enriched assessment ${index + 1} ${total ? `of ${total} ` : ' '}to Transcend...`));
19
19
  // convert the OneTrust assessment object into a json record
20
20
  const json = (0, oneTrustAssessmentToJson_1.oneTrustAssessmentToJson)({
21
21
  assessment,
@@ -32,7 +32,7 @@ const syncOneTrustAssessmentToTranscend = async ({ transcend, assessment, total,
32
32
  });
33
33
  }
34
34
  catch (e) {
35
- logger_1.logger.error(colors_1.default.red(`Failed to sync assessment ${index + 1} of ${total} to Transcend.\n` +
35
+ logger_1.logger.error(colors_1.default.red(`Failed to sync assessment ${index + 1} ${total ? `of ${total} ` : ' '}to Transcend.\n` +
36
36
  `\tAssessment Title: ${assessment.name}. Template Title: ${assessment.template.name}\n`));
37
37
  }
38
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"syncOneTrustAssessmentToTranscend.js","sourceRoot":"","sources":["../../../src/oneTrust/helpers/syncOneTrustAssessmentToTranscend.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAsC;AACtC,oDAA4B;AAE5B,2CAGuB;AAGvB,yEAAsE;AAStE;;;;;GAKG;AACI,MAAM,iCAAiC,GAAG,KAAK,EAAE,EACtD,SAAS,EACT,UAAU,EACV,KAAK,EACL,KAAK,GAUN,EAAiB,EAAE;IAClB,eAAM,CAAC,IAAI,CACT,gBAAM,CAAC,OAAO,CACZ,+BAA+B,KAAK,GAAG,CAAC,OAAO,KAAK,kBAAkB,CACvE,CACF,CAAC;IAEF,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAA,mDAAwB,EAAC;QACpC,UAAU;QACV,KAAK;QACL,KAAK;KACN,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,KAAK,GAAmC;QAC5C,IAAI;KACL,CAAC;IAEF,IAAI;QACF,MAAM,IAAA,4BAAkB,EAMrB,SAAS,EAAE,2CAAiC,EAAE;YAC/C,KAAK;SACN,CAAC,CAAC;KACJ;IAAC,OAAO,CAAC,EAAE;QACV,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,6BAA6B,KAAK,GAAG,CAAC,OAAO,KAAK,kBAAkB;YAClE,uBAAuB,UAAU,CAAC,IAAI,qBAAqB,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAC1F,CACF,CAAC;KACH;AACH,CAAC,CAAC;AAnDW,QAAA,iCAAiC,qCAmD5C"}
1
+ {"version":3,"file":"syncOneTrustAssessmentToTranscend.js","sourceRoot":"","sources":["../../../src/oneTrust/helpers/syncOneTrustAssessmentToTranscend.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAsC;AACtC,oDAA4B;AAE5B,2CAGuB;AAGvB,yEAAsE;AAStE;;;;;GAKG;AACI,MAAM,iCAAiC,GAAG,KAAK,EAAE,EACtD,SAAS,EACT,UAAU,EACV,KAAK,EACL,KAAK,GAUN,EAAiB,EAAE;IAClB,eAAM,CAAC,IAAI,CACT,gBAAM,CAAC,OAAO,CACZ,+BAA+B,KAAK,GAAG,CAAC,IACtC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAC3B,iBAAiB,CAClB,CACF,CAAC;IAEF,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAA,mDAAwB,EAAC;QACpC,UAAU;QACV,KAAK;QACL,KAAK;KACN,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,KAAK,GAAmC;QAC5C,IAAI;KACL,CAAC;IAEF,IAAI;QACF,MAAM,IAAA,4BAAkB,EAMrB,SAAS,EAAE,2CAAiC,EAAE;YAC/C,KAAK;SACN,CAAC,CAAC;KACJ;IAAC,OAAO,CAAC,EAAE;QACV,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,6BAA6B,KAAK,GAAG,CAAC,IACpC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAC3B,iBAAiB;YACf,uBAAuB,UAAU,CAAC,IAAI,qBAAqB,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAC1F,CACF,CAAC;KACH;AACH,CAAC,CAAC;AAvDW,QAAA,iCAAiC,qCAuD5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"syncOneTrustAssessmentsFromFile.d.ts","sourceRoot":"","sources":["../../../src/oneTrust/helpers/syncOneTrustAssessmentsFromFile.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;IAI1C,oCAAoC;eACzB,aAAa;IACxB,uEAAuE;UACjE,MAAM;MACV,QAAQ,IAAI,CA6Cf,CAAC"}
1
+ {"version":3,"file":"syncOneTrustAssessmentsFromFile.d.ts","sourceRoot":"","sources":["../../../src/oneTrust/helpers/syncOneTrustAssessmentsFromFile.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;IAI1C,oCAAoC;eACzB,aAAa;IACxB,uEAAuE;UACjE,MAAM;MACV,QAAQ,IAAI,CAwEf,CAAC"}