@transcend-io/cli 4.11.1 → 4.12.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/build/codecs.d.ts +32 -0
- package/build/codecs.d.ts.map +1 -1
- package/build/requests/constants.d.ts +239 -0
- package/build/requests/constants.d.ts.map +1 -1
- package/build/requests/constants.js +66 -1
- package/build/requests/constants.js.map +1 -1
- package/build/requests/filterRows.d.ts +10 -0
- package/build/requests/filterRows.d.ts.map +1 -0
- package/build/requests/filterRows.js +61 -0
- package/build/requests/filterRows.js.map +1 -0
- package/build/requests/index.d.ts +9 -3
- package/build/requests/index.d.ts.map +1 -1
- package/build/requests/index.js +9 -3
- package/build/requests/index.js.map +1 -1
- package/build/requests/mapCsvColumnsToApi.d.ts +16 -0
- package/build/requests/mapCsvColumnsToApi.d.ts.map +1 -0
- package/build/requests/mapCsvColumnsToApi.js +44 -0
- package/build/requests/mapCsvColumnsToApi.js.map +1 -0
- package/build/requests/mapCsvRowsToRequestInputs.d.ts +50 -0
- package/build/requests/mapCsvRowsToRequestInputs.d.ts.map +1 -0
- package/build/requests/mapCsvRowsToRequestInputs.js +57 -0
- package/build/requests/mapCsvRowsToRequestInputs.js.map +1 -0
- package/build/requests/mapEnumValues.d.ts +14 -0
- package/build/requests/mapEnumValues.d.ts.map +1 -0
- package/build/requests/mapEnumValues.js +42 -0
- package/build/requests/mapEnumValues.js.map +1 -0
- package/build/requests/mapRequestEnumValues.d.ts +21 -0
- package/build/requests/mapRequestEnumValues.d.ts.map +1 -0
- package/build/requests/mapRequestEnumValues.js +46 -0
- package/build/requests/mapRequestEnumValues.js.map +1 -0
- package/build/requests/submitPrivacyRequest.d.ts +5466 -0
- package/build/requests/submitPrivacyRequest.d.ts.map +1 -0
- package/build/requests/submitPrivacyRequest.js +81 -0
- package/build/requests/submitPrivacyRequest.js.map +1 -0
- package/build/requests/tests/mapCsvRowsToRequestInputs.test.d.ts +1 -0
- package/build/requests/tests/mapCsvRowsToRequestInputs.test.d.ts.map +1 -0
- package/build/requests/tests/mapCsvRowsToRequestInputs.test.js +3 -0
- package/build/requests/tests/mapCsvRowsToRequestInputs.test.js.map +1 -0
- package/build/tsbuildinfo +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.mapCsvColumnsToApi = void 0;
|
|
7
|
+
const type_utils_1 = require("@transcend-io/type-utils");
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const startCase_1 = __importDefault(require("lodash/startCase"));
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const fuzzyMatchColumns_1 = require("./fuzzyMatchColumns");
|
|
12
|
+
/**
|
|
13
|
+
* Determine the mapping between columns in CSV
|
|
14
|
+
*
|
|
15
|
+
* @param columnNames - The set of column names
|
|
16
|
+
* @param cached - The cached file state used to map DSR inputs
|
|
17
|
+
* @returns The column name mapping
|
|
18
|
+
*/
|
|
19
|
+
async function mapCsvColumnsToApi(columnNames, cached) {
|
|
20
|
+
// Determine the columns that should be mapped
|
|
21
|
+
const columnQuestions = (0, type_utils_1.getValues)(constants_1.ColumnName).filter((name) => !cached.columnNames[name]);
|
|
22
|
+
// Skip mapping when everything is mapped
|
|
23
|
+
const columnNameMap = columnQuestions.length === 0
|
|
24
|
+
? {}
|
|
25
|
+
: // prompt questions to map columns
|
|
26
|
+
await inquirer_1.default.prompt(columnQuestions.map((name) => {
|
|
27
|
+
const field = (0, startCase_1.default)(name.replace('ColumnName', ''));
|
|
28
|
+
const matches = (0, fuzzyMatchColumns_1.fuzzyMatchColumns)(columnNames, field, constants_1.IS_REQUIRED[name]);
|
|
29
|
+
return {
|
|
30
|
+
name,
|
|
31
|
+
message: `Choose the column that will be used to map in the field: ${field}`,
|
|
32
|
+
type: 'list',
|
|
33
|
+
default: matches[0],
|
|
34
|
+
choices: matches,
|
|
35
|
+
};
|
|
36
|
+
}));
|
|
37
|
+
(0, type_utils_1.getEntries)(columnNameMap).forEach(([k, v]) => {
|
|
38
|
+
// eslint-disable-next-line no-param-reassign
|
|
39
|
+
cached.columnNames[k] = v;
|
|
40
|
+
});
|
|
41
|
+
return columnNameMap;
|
|
42
|
+
}
|
|
43
|
+
exports.mapCsvColumnsToApi = mapCsvColumnsToApi;
|
|
44
|
+
//# sourceMappingURL=mapCsvColumnsToApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapCsvColumnsToApi.js","sourceRoot":"","sources":["../../src/requests/mapCsvColumnsToApi.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiE;AACjE,wDAAgC;AAChC,iEAAyC;AACzC,2CAAuE;AACvE,2DAAwD;AASxD;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CACtC,WAAqB,EACrB,MAAuB;IAEvB,8CAA8C;IAC9C,MAAM,eAAe,GAAG,IAAA,sBAAS,EAAC,sBAAU,CAAC,CAAC,MAAM,CAClD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CACpC,CAAC;IAEF,yCAAyC;IACzC,MAAM,aAAa,GACjB,eAAe,CAAC,MAAM,KAAK,CAAC;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kCAAkC;YAClC,MAAM,kBAAQ,CAAC,MAAM,CAKnB,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3B,MAAM,KAAK,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,IAAA,qCAAiB,EAC/B,WAAW,EACX,KAAK,EACL,uBAAW,CAAC,IAAI,CAAC,CAClB,CAAC;gBACF,OAAO;oBACL,IAAI;oBACJ,OAAO,EAAE,4DAA4D,KAAK,EAAE;oBAC5E,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;oBACnB,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;IACR,IAAA,uBAAU,EAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3C,6CAA6C;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,aAAa,CAAC;AACvB,CAAC;AAxCD,gDAwCC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { LanguageKey } from '@transcend-io/internationalization';
|
|
2
|
+
import { ObjByString } from '@transcend-io/type-utils';
|
|
3
|
+
import { CompletedRequestStatus, RequestAction, IdentifierType } from '@transcend-io/privacy-types';
|
|
4
|
+
import { CachedFileState } from './constants';
|
|
5
|
+
import { ColumnNameMap } from './mapCsvColumnsToApi';
|
|
6
|
+
/**
|
|
7
|
+
* Shape of additional identifiers
|
|
8
|
+
*/
|
|
9
|
+
export declare type AttestedExtraIdentifiers = {
|
|
10
|
+
[k in IdentifierType]?: {
|
|
11
|
+
/** Name of identifier */
|
|
12
|
+
name?: string;
|
|
13
|
+
/** Value of identifier */
|
|
14
|
+
value: string;
|
|
15
|
+
}[];
|
|
16
|
+
};
|
|
17
|
+
export interface PrivacyRequestInput {
|
|
18
|
+
/** Email of user */
|
|
19
|
+
email: string;
|
|
20
|
+
/** Email is verified */
|
|
21
|
+
emailIsVerified: boolean;
|
|
22
|
+
/** Core identifier for user */
|
|
23
|
+
coreIdentifier: string;
|
|
24
|
+
/** Action type being submitted */
|
|
25
|
+
requestType: RequestAction;
|
|
26
|
+
/** Type of data subject */
|
|
27
|
+
subjectType: string;
|
|
28
|
+
/** The status that the request should be created as */
|
|
29
|
+
status?: CompletedRequestStatus;
|
|
30
|
+
/** The time that the request was created */
|
|
31
|
+
createdAt?: Date;
|
|
32
|
+
/** Whether in silent mode */
|
|
33
|
+
isSilent: boolean;
|
|
34
|
+
/** Data silo IDs to submit for */
|
|
35
|
+
dataSiloIds?: string[];
|
|
36
|
+
/** Language key to map to */
|
|
37
|
+
locale?: LanguageKey;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Take the raw rows in a CSV upload, and map those rows to the request
|
|
41
|
+
* input shape that can be passed to the Transcend API to submit a privacy
|
|
42
|
+
* request.
|
|
43
|
+
*
|
|
44
|
+
* @param requestInputs - CSV of requests to be uploaded
|
|
45
|
+
* @param cached - The cached set of mapping values
|
|
46
|
+
* @param columnNameMap - Mapping of column names
|
|
47
|
+
* @returns [raw input, request input] list
|
|
48
|
+
*/
|
|
49
|
+
export declare function mapCsvRowsToRequestInputs(requestInputs: ObjByString[], cached: CachedFileState, columnNameMap: ColumnNameMap): [Record<string, string>, PrivacyRequestInput][];
|
|
50
|
+
//# sourceMappingURL=mapCsvRowsToRequestInputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapCsvRowsToRequestInputs.d.ts","sourceRoot":"","sources":["../../src/requests/mapCsvRowsToRequestInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,cAAc,EACf,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;GAEG;AACH,oBAAY,wBAAwB,GAAG;KACpC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE;QACtB,yBAAyB;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,0BAA0B;QAC1B,KAAK,EAAE,MAAM,CAAC;KACf,EAAE;CACJ,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,WAAW,EAAE,aAAa,CAAC;IAC3B,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,WAAW,EAAE,EAC5B,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,aAAa,GAC3B,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,EAAE,CAyDjD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapCsvRowsToRequestInputs = void 0;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
5
|
+
const splitCsvToList_1 = require("./splitCsvToList");
|
|
6
|
+
/**
|
|
7
|
+
* Take the raw rows in a CSV upload, and map those rows to the request
|
|
8
|
+
* input shape that can be passed to the Transcend API to submit a privacy
|
|
9
|
+
* request.
|
|
10
|
+
*
|
|
11
|
+
* @param requestInputs - CSV of requests to be uploaded
|
|
12
|
+
* @param cached - The cached set of mapping values
|
|
13
|
+
* @param columnNameMap - Mapping of column names
|
|
14
|
+
* @returns [raw input, request input] list
|
|
15
|
+
*/
|
|
16
|
+
function mapCsvRowsToRequestInputs(requestInputs, cached, columnNameMap) {
|
|
17
|
+
// map the CSV to request input
|
|
18
|
+
const getMappedName = (attribute) => cached.columnNames[attribute] || columnNameMap[attribute];
|
|
19
|
+
return requestInputs.map((input) => [
|
|
20
|
+
input,
|
|
21
|
+
{
|
|
22
|
+
email: input[getMappedName(constants_1.ColumnName.Email)],
|
|
23
|
+
emailIsVerified: true,
|
|
24
|
+
isSilent: true,
|
|
25
|
+
coreIdentifier: input[getMappedName(constants_1.ColumnName.CoreIdentifier)],
|
|
26
|
+
requestType: cached.requestTypeToRequestAction[input[getMappedName(constants_1.ColumnName.RequestType)]],
|
|
27
|
+
subjectType: cached.subjectTypeToSubjectName[input[getMappedName(constants_1.ColumnName.SubjectType)]] || 'Customer',
|
|
28
|
+
...(getMappedName(constants_1.ColumnName.Locale) !== constants_1.NONE &&
|
|
29
|
+
input[getMappedName(constants_1.ColumnName.Locale)]
|
|
30
|
+
? {
|
|
31
|
+
locale: cached.languageToLocale[input[getMappedName(constants_1.ColumnName.Locale)]],
|
|
32
|
+
}
|
|
33
|
+
: {}),
|
|
34
|
+
...(getMappedName(constants_1.ColumnName.RequestStatus) !== constants_1.NONE &&
|
|
35
|
+
cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]] !== constants_1.NONE &&
|
|
36
|
+
input[getMappedName(constants_1.ColumnName.RequestStatus)]
|
|
37
|
+
? {
|
|
38
|
+
status: cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]],
|
|
39
|
+
}
|
|
40
|
+
: {}),
|
|
41
|
+
...(getMappedName(constants_1.ColumnName.CreatedAt) !== constants_1.NONE &&
|
|
42
|
+
input[getMappedName(constants_1.ColumnName.CreatedAt)]
|
|
43
|
+
? {
|
|
44
|
+
createdAt: new Date(input[getMappedName(constants_1.ColumnName.CreatedAt)]),
|
|
45
|
+
}
|
|
46
|
+
: {}),
|
|
47
|
+
...(getMappedName(constants_1.ColumnName.DataSiloIds) !== constants_1.NONE &&
|
|
48
|
+
input[getMappedName(constants_1.ColumnName.DataSiloIds)]
|
|
49
|
+
? {
|
|
50
|
+
dataSiloIds: (0, splitCsvToList_1.splitCsvToList)(input[getMappedName(constants_1.ColumnName.DataSiloIds)]),
|
|
51
|
+
}
|
|
52
|
+
: {}),
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
exports.mapCsvRowsToRequestInputs = mapCsvRowsToRequestInputs;
|
|
57
|
+
//# sourceMappingURL=mapCsvRowsToRequestInputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapCsvRowsToRequestInputs.js","sourceRoot":"","sources":["../../src/requests/mapCsvRowsToRequestInputs.ts"],"names":[],"mappings":";;;AAQA,2CAAgE;AAEhE,qDAAkD;AAqClD;;;;;;;;;GASG;AACH,SAAgB,yBAAyB,CACvC,aAA4B,EAC5B,MAAuB,EACvB,aAA4B;IAE5B,+BAA+B;IAC/B,MAAM,aAAa,GAAG,CAAC,SAAqB,EAAU,EAAE,CACtD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAE,CAAC;IAC7D,OAAO,aAAa,CAAC,GAAG,CACtB,CAAC,KAAK,EAAiD,EAAE,CAAC;QACxD,KAAK;QACL;YACE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,KAAK,CAAC,CAAC;YAC7C,eAAe,EAAE,IAAI;YACrB,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,cAAc,CAAC,CAAC;YAC/D,WAAW,EACT,MAAM,CAAC,0BAA0B,CAC/B,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,CAC7C;YACH,WAAW,EACT,MAAM,CAAC,wBAAwB,CAC7B,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,CAC7C,IAAI,UAAU;YACjB,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,KAAK,gBAAI;gBAC7C,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC;gBACrC,CAAC,CAAC;oBACE,MAAM,EACJ,MAAM,CAAC,gBAAgB,CACrB,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC,CACxC;iBACJ;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,KAAK,gBAAI;gBACpD,MAAM,CAAC,qBAAqB,CAC1B,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC,CAC/C,KAAK,gBAAI;gBACV,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC;gBAC5C,CAAC,CAAC;oBACE,MAAM,EAAE,MAAM,CAAC,qBAAqB,CAClC,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC,CACrB;iBAC5B;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,SAAS,CAAC,KAAK,gBAAI;gBAChD,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,SAAS,CAAC,CAAC;gBACxC,CAAC,CAAC;oBACE,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,SAAS,CAAC,CAAC,CAAC;iBAChE;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,KAAK,gBAAI;gBAClD,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC;gBAC1C,CAAC,CAAC;oBACE,WAAW,EAAE,IAAA,+BAAc,EACzB,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,CAC7C;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CACF,CAAC;AACJ,CAAC;AA7DD,8DA6DC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map a set of inputs to a set of outputs
|
|
3
|
+
*
|
|
4
|
+
* @param csvInputs - Input list
|
|
5
|
+
* @param expectedOutputs - Output list
|
|
6
|
+
* @param cache - Cache
|
|
7
|
+
* @returns Mapping from row to enum value
|
|
8
|
+
*/
|
|
9
|
+
export declare function mapEnumValues<TValue extends string>(csvInputs: string[], expectedOutputs: TValue[], cache: {
|
|
10
|
+
[k in string]: TValue;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
[k in string]: TValue;
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=mapEnumValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapEnumValues.d.ts","sourceRoot":"","sources":["../../src/requests/mapEnumValues.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,MAAM,SAAS,MAAM,EACvD,SAAS,EAAE,MAAM,EAAE,EACnB,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,EAAE;KAAG,CAAC,IAAI,MAAM,GAAG,MAAM;CAAE,GAC/B,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,GAAG,MAAM;CAAE,CAAC,CA6BpC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.mapEnumValues = void 0;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const inquirer_autocomplete_prompt_1 = __importDefault(require("inquirer-autocomplete-prompt"));
|
|
9
|
+
const type_utils_1 = require("@transcend-io/type-utils");
|
|
10
|
+
const fuzzyMatchColumns_1 = require("./fuzzyMatchColumns");
|
|
11
|
+
/**
|
|
12
|
+
* Map a set of inputs to a set of outputs
|
|
13
|
+
*
|
|
14
|
+
* @param csvInputs - Input list
|
|
15
|
+
* @param expectedOutputs - Output list
|
|
16
|
+
* @param cache - Cache
|
|
17
|
+
* @returns Mapping from row to enum value
|
|
18
|
+
*/
|
|
19
|
+
async function mapEnumValues(csvInputs, expectedOutputs, cache) {
|
|
20
|
+
inquirer_1.default.registerPrompt('autocomplete', inquirer_autocomplete_prompt_1.default);
|
|
21
|
+
const inputs = csvInputs
|
|
22
|
+
.map((item) => item || '<blank>')
|
|
23
|
+
.filter((value) => !cache[value]);
|
|
24
|
+
if (inputs.length === 0) {
|
|
25
|
+
return cache;
|
|
26
|
+
}
|
|
27
|
+
const result = await inquirer_1.default.prompt(inputs.map((value) => ({
|
|
28
|
+
name: value,
|
|
29
|
+
message: `Map value of: ${value}`,
|
|
30
|
+
type: 'autocomplete',
|
|
31
|
+
default: expectedOutputs.find((x) => (0, fuzzyMatchColumns_1.fuzzySearch)(value, x)),
|
|
32
|
+
source: (answersSoFar, input) => !input
|
|
33
|
+
? expectedOutputs
|
|
34
|
+
: expectedOutputs.filter((x) => typeof x === 'string' && (0, fuzzyMatchColumns_1.fuzzySearch)(input, x)),
|
|
35
|
+
})));
|
|
36
|
+
return {
|
|
37
|
+
...cache,
|
|
38
|
+
...(0, type_utils_1.apply)(result, (r) => typeof r === 'string' ? r : Object.values(r)[0]),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
exports.mapEnumValues = mapEnumValues;
|
|
42
|
+
//# sourceMappingURL=mapEnumValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapEnumValues.js","sourceRoot":"","sources":["../../src/requests/mapEnumValues.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,gGAA8D;AAC9D,yDAA8D;AAC9D,2DAAkD;AAElD;;;;;;;GAOG;AACI,KAAK,UAAU,aAAa,CACjC,SAAmB,EACnB,eAAyB,EACzB,KAAgC;IAEhC,kBAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,sCAAkB,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,SAAS;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC;SAChC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IACD,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAClC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,iBAAiB,KAAK,EAAE;QACjC,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,+BAAW,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,YAAyB,EAAE,KAAa,EAAE,EAAE,CACnD,CAAC,KAAK;YACJ,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,eAAe,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,IAAA,+BAAW,EAAC,KAAK,EAAE,CAAC,CAAC,CACtD;KACR,CAAC,CAAC,CACJ,CAAC;IACF,OAAO;QACL,GAAG,KAAK;QACR,GAAG,IAAA,kBAAK,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACrB,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAY,CAAC,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,CACxE;KACF,CAAC;AACJ,CAAC;AAjCD,sCAiCC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { GraphQLClient } from 'graphql-request';
|
|
2
|
+
import type { PersistedState } from '@transcend-io/persisted-state';
|
|
3
|
+
import { ObjByString } from '@transcend-io/type-utils';
|
|
4
|
+
import { CachedState } from './constants';
|
|
5
|
+
import { ColumnNameMap } from './mapCsvColumnsToApi';
|
|
6
|
+
/**
|
|
7
|
+
* Map the values in a CSV to the enum values in Transcend
|
|
8
|
+
*
|
|
9
|
+
* @param client - GraphQL client
|
|
10
|
+
* @param requests - Set of privacy requests
|
|
11
|
+
* @param options - Options
|
|
12
|
+
*/
|
|
13
|
+
export declare function mapRequestEnumValues(client: GraphQLClient, requests: ObjByString[], { fileName, state, columnNameMap, }: {
|
|
14
|
+
/** Name of fileName to be cached */
|
|
15
|
+
fileName: string;
|
|
16
|
+
/** State value to write cache to */
|
|
17
|
+
state: PersistedState<typeof CachedState>;
|
|
18
|
+
/** Mapping of column names */
|
|
19
|
+
columnNameMap: ColumnNameMap;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=mapRequestEnumValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapRequestEnumValues.d.ts","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAMpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAoB,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,EACE,QAAQ,EACR,KAAK,EACL,aAAa,GACd,EAAE;IACD,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;IAC1C,8BAA8B;IAC9B,aAAa,EAAE,aAAa,CAAC;CAC9B,GACA,OAAO,CAAC,IAAI,CAAC,CAsDf"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapRequestEnumValues = void 0;
|
|
4
|
+
const privacy_types_1 = require("@transcend-io/privacy-types");
|
|
5
|
+
const internationalization_1 = require("@transcend-io/internationalization");
|
|
6
|
+
const logger_1 = require("../logger");
|
|
7
|
+
const graphql_1 = require("../graphql");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
const mapEnumValues_1 = require("./mapEnumValues");
|
|
10
|
+
const getUniqueValuesForColumn_1 = require("./getUniqueValuesForColumn");
|
|
11
|
+
/**
|
|
12
|
+
* Map the values in a CSV to the enum values in Transcend
|
|
13
|
+
*
|
|
14
|
+
* @param client - GraphQL client
|
|
15
|
+
* @param requests - Set of privacy requests
|
|
16
|
+
* @param options - Options
|
|
17
|
+
*/
|
|
18
|
+
async function mapRequestEnumValues(client, requests, { fileName, state, columnNameMap, }) {
|
|
19
|
+
// Current cache value
|
|
20
|
+
const cached = state.getValue(fileName);
|
|
21
|
+
// Get mapped value
|
|
22
|
+
const getMappedName = (attribute) => cached.columnNames[attribute] || columnNameMap[attribute];
|
|
23
|
+
// Fetch all data subjects in the organization
|
|
24
|
+
const { internalSubjects } = await (0, graphql_1.makeGraphQLRequest)(client, graphql_1.DATA_SUBJECTS);
|
|
25
|
+
logger_1.logger.info('Determine mapping for request action');
|
|
26
|
+
const requestTypeToRequestAction = await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, getMappedName(constants_1.ColumnName.RequestType)), Object.values(privacy_types_1.RequestAction), cached.requestTypeToRequestAction || {});
|
|
27
|
+
cached.requestTypeToRequestAction = requestTypeToRequestAction;
|
|
28
|
+
state.setValue(cached, fileName);
|
|
29
|
+
logger_1.logger.info('Determine mapping for subject');
|
|
30
|
+
const subjectTypeToSubjectName = await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, getMappedName(constants_1.ColumnName.SubjectType)), internalSubjects.map(({ type }) => type), cached.subjectTypeToSubjectName || {});
|
|
31
|
+
cached.subjectTypeToSubjectName = subjectTypeToSubjectName;
|
|
32
|
+
state.setValue(cached, fileName);
|
|
33
|
+
logger_1.logger.info('Determine mapping for locale');
|
|
34
|
+
const languageToLocale = await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, getMappedName(constants_1.ColumnName.Locale)), Object.values(internationalization_1.LanguageKey), cached.languageToLocale || {});
|
|
35
|
+
cached.languageToLocale = languageToLocale;
|
|
36
|
+
state.setValue(cached, fileName);
|
|
37
|
+
logger_1.logger.info('Determine mapping for request status');
|
|
38
|
+
const requestStatusColumn = getMappedName(constants_1.ColumnName.RequestStatus);
|
|
39
|
+
const statusToRequestStatus = requestStatusColumn === constants_1.NONE
|
|
40
|
+
? {}
|
|
41
|
+
: await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, requestStatusColumn), [...Object.values(privacy_types_1.CompletedRequestStatus), constants_1.NONE], cached.statusToRequestStatus || {});
|
|
42
|
+
cached.statusToRequestStatus = statusToRequestStatus;
|
|
43
|
+
state.setValue(cached, fileName);
|
|
44
|
+
}
|
|
45
|
+
exports.mapRequestEnumValues = mapRequestEnumValues;
|
|
46
|
+
//# sourceMappingURL=mapRequestEnumValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapRequestEnumValues.js","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":";;;AAEA,+DAGqC;AACrC,6EAAiE;AAEjE,sCAAmC;AACnC,wCAA4E;AAC5E,2CAA4D;AAC5D,mDAAgD;AAEhD,yEAAsE;AAEtE;;;;;;GAMG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAqB,EACrB,QAAuB,EACvB,EACE,QAAQ,EACR,KAAK,EACL,aAAa,GAQd;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAExC,mBAAmB;IACnB,MAAM,aAAa,GAAG,CAAC,SAAqB,EAAU,EAAE,CACtD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAE,CAAC;IAE7D,8CAA8C;IAC9C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,IAAA,4BAAkB,EAGlD,MAAM,EAAE,uBAAa,CAAC,CAAC;IAE1B,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,0BAA0B,GAC9B,MAAM,IAAA,6BAAa,EACjB,IAAA,mDAAwB,EAAC,QAAQ,EAAE,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,EACzE,MAAM,CAAC,MAAM,CAAC,6BAAa,CAAC,EAC5B,MAAM,CAAC,0BAA0B,IAAI,EAAE,CACxC,CAAC;IACJ,MAAM,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;IAC/D,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,eAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,wBAAwB,GAC5B,MAAM,IAAA,6BAAa,EACjB,IAAA,mDAAwB,EAAC,QAAQ,EAAE,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,EACzE,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EACxC,MAAM,CAAC,wBAAwB,IAAI,EAAE,CACtC,CAAC;IACJ,MAAM,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IAC3D,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,eAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAmC,MAAM,IAAA,6BAAa,EAC1E,IAAA,mDAAwB,EAAC,QAAQ,EAAE,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC,EACpE,MAAM,CAAC,MAAM,CAAC,kCAAW,CAAC,EAC1B,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAC9B,CAAC;IACF,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,mBAAmB,GAAG,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC;IACpE,MAAM,qBAAqB,GAGzB,mBAAmB,KAAK,gBAAI;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,MAAM,IAAA,6BAAa,EACjB,IAAA,mDAAwB,EAAC,QAAQ,EAAE,mBAAmB,CAAC,EACvD,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,sCAAsB,CAAC,EAAE,gBAAI,CAAC,EAChD,MAAM,CAAC,qBAAqB,IAAI,EAAE,CACnC,CAAC;IACR,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AArED,oDAqEC"}
|