@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.
- package/README.md +9 -0
- package/build/cli-chunk-csv.d.ts +14 -0
- package/build/cli-chunk-csv.d.ts.map +1 -0
- package/build/cli-chunk-csv.js +140 -0
- package/build/cli-chunk-csv.js.map +1 -0
- package/build/cli-upload-preferences.js +78 -18
- package/build/cli-upload-preferences.js.map +1 -1
- package/build/cron/writeCsv.d.ts +17 -1
- package/build/cron/writeCsv.d.ts.map +1 -1
- package/build/cron/writeCsv.js +51 -2
- package/build/cron/writeCsv.js.map +1 -1
- package/build/enums.d.ts +2 -2
- package/build/enums.d.ts.map +1 -1
- package/build/oneTrust/helpers/oneTrustAssessmentToJson.d.ts +1 -1
- package/build/oneTrust/helpers/oneTrustAssessmentToJson.d.ts.map +1 -1
- package/build/oneTrust/helpers/oneTrustAssessmentToJson.js +2 -2
- package/build/oneTrust/helpers/oneTrustAssessmentToJson.js.map +1 -1
- package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.d.ts +1 -1
- package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.d.ts.map +1 -1
- package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.js +2 -2
- package/build/oneTrust/helpers/syncOneTrustAssessmentToTranscend.js.map +1 -1
- package/build/oneTrust/helpers/syncOneTrustAssessmentsFromFile.d.ts.map +1 -1
- package/build/oneTrust/helpers/syncOneTrustAssessmentsFromFile.js +44 -51
- package/build/oneTrust/helpers/syncOneTrustAssessmentsFromFile.js.map +1 -1
- package/build/preference-management/getPreferencesForIdentifiers.d.ts.map +1 -1
- package/build/preference-management/getPreferencesForIdentifiers.js +6 -1
- package/build/preference-management/getPreferencesForIdentifiers.js.map +1 -1
- package/build/preference-management/parsePreferenceAndPurposeValuesFromCsv.d.ts.map +1 -1
- package/build/preference-management/parsePreferenceAndPurposeValuesFromCsv.js +75 -10
- package/build/preference-management/parsePreferenceAndPurposeValuesFromCsv.js.map +1 -1
- package/build/preference-management/parsePreferenceManagementCsv.d.ts +3 -1
- package/build/preference-management/parsePreferenceManagementCsv.d.ts.map +1 -1
- package/build/preference-management/parsePreferenceManagementCsv.js +7 -5
- package/build/preference-management/parsePreferenceManagementCsv.js.map +1 -1
- package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.d.ts +3 -1
- package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.d.ts.map +1 -1
- package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.js +2 -1
- package/build/preference-management/uploadPreferenceManagementPreferencesInteractive.js.map +1 -1
- package/build/tsbuildinfo +1 -1
- 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-
|
|
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-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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;
|
|
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;AAC5C,2BAAiC;AACjC,uCAA+B;AAC/B,+BAAsC;AAEtC;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM;IACJ,yCAAyC;IACzC,SAAS;IACT,oCAAoC;IACpC,IAAI;IACJ,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,6FAA6F;IAC7F,uBAAuB,GAAG,OAAO;IACjC,qCAAqC;IACrC,QAAQ,GAAG,MAAM;IACjB,sDAAsD;IACtD,UAAU,GAAG,yCAAyC;IACtD,kDAAkD;IAClD,cAAc,GAAG,YAAY;IAC7B,uFAAuF;IACvF,WAAW,GAAG,IAAI,GACnB,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,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE;QACzB,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,sEAAsE,CACvE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;QACvB,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG;QACR,mCAAmC;QACnC,sHAAsH,CACvH,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,SAAS,EAAE;QACb,IAAI;YACF,MAAM,gBAAgB,GAAG,IAAA,gBAAW,EAAC,SAAS,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAC5D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;YAED,mCAAmC;YACnC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9D;QAAC,OAAO,GAAG,EAAE;YACZ,eAAM,CAAC,KAAK,CAAC,gBAAM,CAAC,GAAG,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC,CAAC;YACnE,eAAM,CAAC,KAAK,CAAC,gBAAM,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;KACF;SAAM;QACL,IAAI;YACF,kCAAkC;YAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC1B,eAAM,CAAC,KAAK,CAAC,gBAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClB;QAAC,OAAO,GAAG,EAAE;YACZ,eAAM,CAAC,KAAK,CAAC,gBAAM,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3D,eAAM,CAAC,KAAK,CAAC,gBAAM,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;KACF;IAED,eAAM,CAAC,IAAI,CACT,gBAAM,CAAC,KAAK,CACV,cAAc,KAAK,CAAC,MAAM,6CAA6C,SAAS,EAAE,CACnF,CACF,CAAC;IACF,eAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEtD,IAAI,uBAAuB,KAAK,OAAO,EAAE;QACvC,eAAM,CAAC,IAAI,CACT,gBAAM,CAAC,QAAQ,CACb,mCAAmC,uBAAuB,EAAE,CAC7D,CACF,CAAC;KACH;IAED,MAAM,IAAA,cAAG,EACP,KAAK,EACL,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjB,MAAM,QAAQ,GAAG,IAAA,eAAQ,EAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,IAAA,wEAAgD,EAAC;YACrD,eAAe,EAAE,IAAA,WAAI,EAAC,cAAc,EAAE,GAAG,QAAQ,gBAAgB,CAAC;YAClE,IAAI;YACJ,UAAU;YACV,IAAI,EAAE,QAAQ;YACd,SAAS;YACT,YAAY;YACZ,mBAAmB,EAAE,mBAAmB,KAAK,OAAO;YACpD,oBAAoB,EAAE,oBAAoB,KAAK,OAAO;YACtD,uBAAuB,EAAE,uBAAuB,KAAK,OAAO;YAC5D,QAAQ,EAAE,QAAQ,KAAK,OAAO;YAC9B,MAAM,EAAE,MAAM,KAAK,OAAO;YAC1B,UAAU,EAAE,IAAA,yBAAc,EAAC,UAAU,CAAC;SACvC,CAAC,CAAC;IACL,CAAC,EACD,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAC3C,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/build/cron/writeCsv.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/build/cron/writeCsv.js
CHANGED
|
@@ -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
|
-
*
|
|
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,
|
|
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 =
|
|
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 =
|
|
89
|
+
export type OpenAIRouteName = typeof OpenAIRouteName[keyof typeof OpenAIRouteName];
|
|
90
90
|
//# sourceMappingURL=enums.d.ts.map
|
package/build/enums.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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"}
|