@contentstack/cli-cm-export-to-csv 1.10.2 → 1.11.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.
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * Data transformation utilities.
4
+ * Migrated from: packages/contentstack-export-to-csv/src/util/index.js
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.flatten = flatten;
8
+ exports.sanitizeData = sanitizeData;
9
+ exports.cleanEntries = cleanEntries;
10
+ exports.getMappedUsers = getMappedUsers;
11
+ exports.getMappedRoles = getMappedRoles;
12
+ exports.determineUserOrgRole = determineUserOrgRole;
13
+ exports.cleanOrgUsers = cleanOrgUsers;
14
+ exports.cleanTeamsData = cleanTeamsData;
15
+ exports.getTeamsUserDetails = getTeamsUserDetails;
16
+ exports.formatTaxonomiesData = formatTaxonomiesData;
17
+ exports.formatTermsOfTaxonomyData = formatTermsOfTaxonomyData;
18
+ exports.kebabize = kebabize;
19
+ exports.getFormattedDate = getFormattedDate;
20
+ exports.getDateTime = getDateTime;
21
+ const tslib_1 = require("tslib");
22
+ const omit_1 = tslib_1.__importDefault(require("lodash/omit"));
23
+ // ============================================================================
24
+ // Core Transformation Functions
25
+ // ============================================================================
26
+ /**
27
+ * Flatten a nested object into a single-level object.
28
+ * Arrays are flattened with bracket notation (e.g., "field[0]").
29
+ *
30
+ * @see https://stackoverflow.com/questions/19098797/fastest-way-to-flatten-un-flatten-nested-json-objects
31
+ */
32
+ function flatten(data) {
33
+ const result = {};
34
+ function recurse(cur, prop) {
35
+ if (Object(cur) !== cur) {
36
+ result[prop] = cur;
37
+ }
38
+ else if (Array.isArray(cur)) {
39
+ const l = cur.length;
40
+ for (let i = 0; i < l; i++) {
41
+ recurse(cur[i], prop + '[' + i + ']');
42
+ }
43
+ if (l === 0) {
44
+ result[prop] = [];
45
+ }
46
+ }
47
+ else {
48
+ let isEmpty = true;
49
+ for (const p in cur) {
50
+ isEmpty = false;
51
+ recurse(cur[p], prop ? prop + '.' + p : p);
52
+ }
53
+ if (isEmpty && prop) {
54
+ result[prop] = {};
55
+ }
56
+ }
57
+ }
58
+ recurse(data, '');
59
+ return result;
60
+ }
61
+ /**
62
+ * Sanitize data against CSV injection attacks.
63
+ * Prefixes potentially dangerous characters with a quote.
64
+ * Also converts objects/arrays to JSON strings.
65
+ */
66
+ function sanitizeData(flatData) {
67
+ // sanitize against CSV Injections
68
+ const CSVRegex = /^[\\+\\=@\\-]/;
69
+ for (const key in flatData) {
70
+ const value = flatData[key];
71
+ if (typeof value === 'string' && value.match(CSVRegex)) {
72
+ flatData[key] = `"'${value.replace(/"/g, '""')}"`;
73
+ }
74
+ else if (typeof value === 'object' && value !== null) {
75
+ // convert any objects or arrays to string
76
+ // to store this data correctly in csv
77
+ flatData[key] = JSON.stringify(value);
78
+ }
79
+ }
80
+ return flatData;
81
+ }
82
+ // ============================================================================
83
+ // Entry Transformation Functions
84
+ // ============================================================================
85
+ /**
86
+ * Clean and format entries for CSV export.
87
+ */
88
+ function cleanEntries(entries, language, environments, contentTypeUid) {
89
+ const filteredEntries = entries.filter((entry) => {
90
+ return entry.locale === language;
91
+ });
92
+ return filteredEntries.map((entry) => {
93
+ var _a;
94
+ let workflow = '';
95
+ const envArr = [];
96
+ if ((_a = entry.publish_details) === null || _a === void 0 ? void 0 : _a.length) {
97
+ entry.publish_details.forEach((env) => {
98
+ envArr.push(JSON.stringify([environments[env.environment], env.locale, env.time]));
99
+ });
100
+ }
101
+ // Create a mutable copy for transformation
102
+ const mutableEntry = Object.assign({}, entry);
103
+ delete mutableEntry.publish_details;
104
+ delete mutableEntry.setWorkflowStage;
105
+ if ('_workflow' in mutableEntry) {
106
+ const workflowData = mutableEntry._workflow;
107
+ if (workflowData === null || workflowData === void 0 ? void 0 : workflowData.name) {
108
+ workflow = workflowData.name;
109
+ delete mutableEntry._workflow;
110
+ }
111
+ }
112
+ let flatEntry = flatten(mutableEntry);
113
+ flatEntry = sanitizeData(flatEntry);
114
+ flatEntry.publish_details = envArr;
115
+ flatEntry._workflow = workflow;
116
+ flatEntry.ACL = JSON.stringify({}); // setting ACL to empty obj
117
+ flatEntry.content_type_uid = contentTypeUid; // content_type_uid is being returned as 'uid' from the sdk for some reason
118
+ // entry['url'] might also be wrong
119
+ delete flatEntry.stackHeaders;
120
+ delete flatEntry.update;
121
+ delete flatEntry.delete;
122
+ delete flatEntry.fetch;
123
+ delete flatEntry.publish;
124
+ delete flatEntry.unpublish;
125
+ delete flatEntry.import;
126
+ delete flatEntry.publishRequest;
127
+ return flatEntry;
128
+ });
129
+ }
130
+ // ============================================================================
131
+ // Organization User Transformation Functions
132
+ // ============================================================================
133
+ /**
134
+ * Map user UIDs to emails.
135
+ */
136
+ function getMappedUsers(users) {
137
+ const mappedUsers = {};
138
+ users.items.forEach((user) => {
139
+ mappedUsers[user.user_uid] = user.email;
140
+ });
141
+ mappedUsers['System'] = 'System';
142
+ return mappedUsers;
143
+ }
144
+ /**
145
+ * Map role UIDs to names.
146
+ */
147
+ function getMappedRoles(roles) {
148
+ const mappedRoles = {};
149
+ roles.items.forEach((role) => {
150
+ mappedRoles[role.uid] = role.name;
151
+ });
152
+ return mappedRoles;
153
+ }
154
+ /**
155
+ * Determine a user's organization role.
156
+ */
157
+ function determineUserOrgRole(user, roles) {
158
+ let roleName = 'No Role';
159
+ const roleUids = user.org_roles ? [...user.org_roles] : [];
160
+ if (roleUids.length > 0) {
161
+ const roleUid = roleUids.shift();
162
+ roleName = roles[roleUid];
163
+ }
164
+ if (user.is_owner) {
165
+ roleName = 'Owner';
166
+ }
167
+ return roleName;
168
+ }
169
+ /**
170
+ * Clean and format organization users for CSV export.
171
+ */
172
+ function cleanOrgUsers(orgUsers, mappedUsers, mappedRoles) {
173
+ const userList = [];
174
+ orgUsers.items.forEach((user) => {
175
+ let invitedBy;
176
+ try {
177
+ invitedBy = mappedUsers[user.invited_by] || 'System';
178
+ }
179
+ catch (_a) {
180
+ invitedBy = 'System';
181
+ }
182
+ const formattedUser = {
183
+ 'Email': user.email,
184
+ 'User UID': user.user_uid,
185
+ 'Organization Role': determineUserOrgRole(user, mappedRoles),
186
+ 'Status': user.status,
187
+ 'Invited By': invitedBy,
188
+ 'Created Time': getFormattedDate(user.created_at),
189
+ 'Updated Time': getFormattedDate(user.updated_at),
190
+ };
191
+ userList.push(formattedUser);
192
+ });
193
+ return userList;
194
+ }
195
+ // ============================================================================
196
+ // Team Transformation Functions
197
+ // ============================================================================
198
+ /**
199
+ * Removes unnecessary fields from team data and assigns org level roles.
200
+ */
201
+ async function cleanTeamsData(data, managementAPIClient, org) {
202
+ const roleMap = await getOrgRolesForTeams(managementAPIClient, org);
203
+ const fieldToBeDeleted = [
204
+ '_id',
205
+ 'createdAt',
206
+ 'createdBy',
207
+ 'updatedAt',
208
+ 'updatedBy',
209
+ '__v',
210
+ 'createdByUserName',
211
+ 'updatedByUserName',
212
+ 'organizationUid',
213
+ 'urlPath',
214
+ 'update',
215
+ 'delete',
216
+ 'fetch',
217
+ 'stackRoleMappings',
218
+ 'teamUsers',
219
+ ];
220
+ if (data === null || data === void 0 ? void 0 : data.length) {
221
+ return data.map((team) => {
222
+ var _a;
223
+ const cleanedTeam = (0, omit_1.default)(team, fieldToBeDeleted);
224
+ cleanedTeam.organizationRole = team.organizationRole === roleMap.member ? 'member' : 'admin';
225
+ if (!Object.prototype.hasOwnProperty.call(cleanedTeam, 'description')) {
226
+ cleanedTeam.description = '';
227
+ }
228
+ cleanedTeam.Total_Members = ((_a = team.users) === null || _a === void 0 ? void 0 : _a.length) || 0;
229
+ return cleanedTeam;
230
+ });
231
+ }
232
+ else {
233
+ return [];
234
+ }
235
+ }
236
+ /**
237
+ * Get all org level roles for teams.
238
+ */
239
+ async function getOrgRolesForTeams(managementAPIClient, org) {
240
+ const roleMap = {}; // for org level there are two roles only admin and member
241
+ // SDK call to get the role UIDs
242
+ try {
243
+ const roles = await managementAPIClient.organization(org.uid).roles();
244
+ roles.items.forEach((item) => {
245
+ if (item.name === 'member' || item.name === 'admin') {
246
+ roleMap[item.name] = item.uid;
247
+ }
248
+ });
249
+ }
250
+ catch (err) {
251
+ // Import handleErrorMsg here to avoid circular dependency
252
+ const { handleErrorMsg } = await Promise.resolve().then(() => tslib_1.__importStar(require('./error-handler')));
253
+ handleErrorMsg(err);
254
+ }
255
+ return roleMap;
256
+ }
257
+ /**
258
+ * Get team user details from all teams.
259
+ */
260
+ function getTeamsUserDetails(teams) {
261
+ const allTeamUsers = [];
262
+ teams.forEach((team) => {
263
+ var _a;
264
+ if ((_a = team.users) === null || _a === void 0 ? void 0 : _a.length) {
265
+ team.users.forEach((user) => {
266
+ const userWithTeam = Object.assign(Object.assign({}, user), { 'team-name': team.name, 'team-uid': team.uid });
267
+ delete userWithTeam.active;
268
+ delete userWithTeam.orgInvitationStatus;
269
+ allTeamUsers.push(userWithTeam);
270
+ });
271
+ }
272
+ });
273
+ return allTeamUsers;
274
+ }
275
+ // ============================================================================
276
+ // Taxonomy Transformation Functions
277
+ // ============================================================================
278
+ /**
279
+ * Change taxonomies data in required CSV headers format.
280
+ */
281
+ function formatTaxonomiesData(taxonomies) {
282
+ if (taxonomies === null || taxonomies === void 0 ? void 0 : taxonomies.length) {
283
+ const formattedTaxonomies = taxonomies.map((taxonomy) => {
284
+ return sanitizeData({
285
+ 'Taxonomy UID': taxonomy.uid,
286
+ Name: taxonomy.name,
287
+ Description: taxonomy.description || '',
288
+ });
289
+ });
290
+ return formattedTaxonomies;
291
+ }
292
+ }
293
+ /**
294
+ * Modify the linked taxonomy data's terms in required CSV headers format.
295
+ */
296
+ function formatTermsOfTaxonomyData(terms, taxonomyUID) {
297
+ if (terms === null || terms === void 0 ? void 0 : terms.length) {
298
+ const formattedTerms = terms.map((term) => {
299
+ return sanitizeData({
300
+ 'Taxonomy UID': taxonomyUID,
301
+ UID: term.uid,
302
+ Name: term.name,
303
+ 'Parent UID': term.parent_uid,
304
+ Depth: term.depth,
305
+ });
306
+ });
307
+ return formattedTerms;
308
+ }
309
+ }
310
+ // ============================================================================
311
+ // Utility Functions
312
+ // ============================================================================
313
+ /**
314
+ * Convert string to kebab-case.
315
+ */
316
+ function kebabize(str) {
317
+ return str
318
+ .split(' ')
319
+ .map((word) => word.toLowerCase())
320
+ .join('-');
321
+ }
322
+ /**
323
+ * Get formatted date string (MM/DD/YYYY).
324
+ */
325
+ function getFormattedDate(date) {
326
+ let dateObj;
327
+ if (!(date instanceof Date)) {
328
+ dateObj = new Date(date);
329
+ }
330
+ else {
331
+ dateObj = date;
332
+ }
333
+ const year = dateObj.getFullYear();
334
+ const month = (1 + dateObj.getMonth()).toString().padStart(2, '0');
335
+ const day = dateObj.getDate().toString().padStart(2, '0');
336
+ return month + '/' + day + '/' + year;
337
+ }
338
+ /**
339
+ * Get date-time string for file naming.
340
+ */
341
+ function getDateTime() {
342
+ const date = new Date();
343
+ const dateTime = date.toLocaleString().split(',');
344
+ dateTime[0] = dateTime[0].split('/').join('-');
345
+ dateTime[1] = dateTime[1].trim(); // trim the space before time
346
+ dateTime[1] = dateTime[1].split(' ').join('');
347
+ return dateTime.join('_');
348
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Error handling utilities.
3
+ * Migrated from: packages/contentstack-export-to-csv/src/util/index.js
4
+ */
5
+ import type { ErrorWithMessage, TaxonomyError } from '../types';
6
+ /**
7
+ * Format an error into a user-friendly message.
8
+ *
9
+ * Handles various error formats from the Contentstack API:
10
+ * - String errors
11
+ * - Error objects with `message` property
12
+ * - Error objects with `errorMessage` property
13
+ * - Error objects with `errors` object containing field-specific errors
14
+ */
15
+ export declare function formatError(error: unknown): string;
16
+ /**
17
+ * Handle and print error messages.
18
+ * Uses the CLI utilities handleAndLogError for consistent error handling.
19
+ * Exits the process with code 1.
20
+ */
21
+ export declare function handleErrorMsg(err: ErrorWithMessage | Error | unknown, context?: Record<string, unknown>): never;
22
+ /**
23
+ * Handle taxonomy-specific errors.
24
+ * Exits the process with code 1.
25
+ */
26
+ export declare function handleTaxonomyErrorMsg(err: TaxonomyError | Error | unknown, context?: Record<string, unknown>): never;
27
+ /**
28
+ * Utility function to wait for a specified time.
29
+ * Used for rate limiting API calls.
30
+ */
31
+ export declare function wait(time: number): Promise<void>;
32
+ /**
33
+ * Exit the program gracefully.
34
+ */
35
+ export declare function exitProgram(): never;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Error handling utilities.
4
+ * Migrated from: packages/contentstack-export-to-csv/src/util/index.js
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.formatError = formatError;
8
+ exports.handleErrorMsg = handleErrorMsg;
9
+ exports.handleTaxonomyErrorMsg = handleTaxonomyErrorMsg;
10
+ exports.wait = wait;
11
+ exports.exitProgram = exitProgram;
12
+ const cli_utilities_1 = require("@contentstack/cli-utilities");
13
+ /**
14
+ * Format an error into a user-friendly message.
15
+ *
16
+ * Handles various error formats from the Contentstack API:
17
+ * - String errors
18
+ * - Error objects with `message` property
19
+ * - Error objects with `errorMessage` property
20
+ * - Error objects with `errors` object containing field-specific errors
21
+ */
22
+ function formatError(error) {
23
+ let parsedError = error;
24
+ try {
25
+ if (typeof error === 'string') {
26
+ parsedError = JSON.parse(error);
27
+ }
28
+ else if (error && typeof error === 'object' && 'message' in error) {
29
+ parsedError = JSON.parse(error.message);
30
+ }
31
+ }
32
+ catch (_a) {
33
+ // If parsing fails, use the original error
34
+ }
35
+ let message;
36
+ if (typeof parsedError === 'string') {
37
+ message = parsedError;
38
+ }
39
+ else {
40
+ message = (parsedError === null || parsedError === void 0 ? void 0 : parsedError.errorMessage) || (parsedError === null || parsedError === void 0 ? void 0 : parsedError.error_message) || (parsedError === null || parsedError === void 0 ? void 0 : parsedError.message) || String(parsedError);
41
+ }
42
+ if (typeof parsedError === 'object' && (parsedError === null || parsedError === void 0 ? void 0 : parsedError.errors) && Object.keys(parsedError.errors).length > 0) {
43
+ const errors = parsedError.errors;
44
+ Object.keys(errors).forEach((e) => {
45
+ let entity = e;
46
+ switch (e) {
47
+ case 'authorization':
48
+ entity = 'Management Token';
49
+ break;
50
+ case 'api_key':
51
+ entity = 'Stack API key';
52
+ break;
53
+ case 'uid':
54
+ entity = 'Content Type';
55
+ break;
56
+ case 'access_token':
57
+ entity = 'Delivery Token';
58
+ break;
59
+ }
60
+ message += ' ' + [entity, errors[e]].join(' ');
61
+ });
62
+ }
63
+ return message;
64
+ }
65
+ /**
66
+ * Handle and print error messages.
67
+ * Uses the CLI utilities handleAndLogError for consistent error handling.
68
+ * Exits the process with code 1.
69
+ */
70
+ function handleErrorMsg(err, context) {
71
+ const errorObj = err;
72
+ const errorMessage = (errorObj === null || errorObj === void 0 ? void 0 : errorObj.errorMessage) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.message) || cli_utilities_1.messageHandler.parse('CLI_EXPORT_CSV_API_FAILED');
73
+ cli_utilities_1.log.debug('Error occurred', Object.assign(Object.assign({}, context), { error: errorMessage }));
74
+ cli_utilities_1.cliux.print(`Error: ${errorMessage}`, { color: 'red' });
75
+ process.exit(1);
76
+ }
77
+ /**
78
+ * Handle taxonomy-specific errors.
79
+ * Exits the process with code 1.
80
+ */
81
+ function handleTaxonomyErrorMsg(err, context) {
82
+ var _a, _b;
83
+ const errorObj = err;
84
+ if ((errorObj === null || errorObj === void 0 ? void 0 : errorObj.errorMessage) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.message)) {
85
+ const errorMsg = (errorObj === null || errorObj === void 0 ? void 0 : errorObj.errorMessage) || ((_a = errorObj === null || errorObj === void 0 ? void 0 : errorObj.errors) === null || _a === void 0 ? void 0 : _a.taxonomy) || ((_b = errorObj === null || errorObj === void 0 ? void 0 : errorObj.errors) === null || _b === void 0 ? void 0 : _b.term) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.message);
86
+ cli_utilities_1.log.debug('Taxonomy error', Object.assign(Object.assign({}, context), { error: errorMsg }));
87
+ cli_utilities_1.cliux.print(`Error: ${errorMsg}`, { color: 'red' });
88
+ }
89
+ else {
90
+ cli_utilities_1.log.debug('Unknown taxonomy error', Object.assign(Object.assign({}, context), { error: err }));
91
+ console.log(err);
92
+ cli_utilities_1.cliux.print(`Error: ${cli_utilities_1.messageHandler.parse('CLI_EXPORT_CSV_API_FAILED')}`, { color: 'red' });
93
+ }
94
+ process.exit(1);
95
+ }
96
+ /**
97
+ * Utility function to wait for a specified time.
98
+ * Used for rate limiting API calls.
99
+ */
100
+ function wait(time) {
101
+ return new Promise((resolve) => {
102
+ setTimeout(resolve, time);
103
+ });
104
+ }
105
+ /**
106
+ * Exit the program gracefully.
107
+ */
108
+ function exitProgram() {
109
+ cli_utilities_1.log.debug('Exiting program');
110
+ process.exit(0);
111
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Utility module exports.
3
+ * Migrated from: packages/contentstack-export-to-csv/src/util/index.js
4
+ */
5
+ export { formatError, handleErrorMsg, handleTaxonomyErrorMsg, wait, exitProgram } from './error-handler';
6
+ export { flatten, sanitizeData, cleanEntries, getMappedUsers, getMappedRoles, determineUserOrgRole, cleanOrgUsers, cleanTeamsData, getTeamsUserDetails, formatTaxonomiesData, formatTermsOfTaxonomyData, kebabize, getFormattedDate, getDateTime, } from './data-transform';
7
+ export { write, csvParse } from './csv-writer';
8
+ export { getOrganizations, getOrganizationsWhereUserIsAdmin, getOrgUsers, getOrgRoles, getStacks, getContentTypeCount, getContentTypes, getLanguages, getEntriesCount, getEntries, getEnvironments, getAllTeams, exportOrgTeams, getRoleData, taxonomySDKHandler, getAllTaxonomies, getAllTermsOfTaxonomy, getTaxonomy, createImportableCSV, } from './api-client';
9
+ export { startupQuestions, chooseOrganization, chooseStack, chooseBranch, chooseContentType, chooseInMemContentTypes, chooseLanguage, chooseFallbackOptions, promptContinueExport, } from './interactive';
10
+ export { exportTeams, getTeamsDetail, exportRoleMappings, mapRoleWithTeams } from './teams-export';
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Utility module exports.
4
+ * Migrated from: packages/contentstack-export-to-csv/src/util/index.js
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.exportTeams = exports.promptContinueExport = exports.chooseFallbackOptions = exports.chooseLanguage = exports.chooseInMemContentTypes = exports.chooseContentType = exports.chooseBranch = exports.chooseStack = exports.chooseOrganization = exports.startupQuestions = exports.createImportableCSV = exports.getTaxonomy = exports.getAllTermsOfTaxonomy = exports.getAllTaxonomies = exports.taxonomySDKHandler = exports.getRoleData = exports.exportOrgTeams = exports.getAllTeams = exports.getEnvironments = exports.getEntries = exports.getEntriesCount = exports.getLanguages = exports.getContentTypes = exports.getContentTypeCount = exports.getStacks = exports.getOrgRoles = exports.getOrgUsers = exports.getOrganizationsWhereUserIsAdmin = exports.getOrganizations = exports.csvParse = exports.write = exports.getDateTime = exports.getFormattedDate = exports.kebabize = exports.formatTermsOfTaxonomyData = exports.formatTaxonomiesData = exports.getTeamsUserDetails = exports.cleanTeamsData = exports.cleanOrgUsers = exports.determineUserOrgRole = exports.getMappedRoles = exports.getMappedUsers = exports.cleanEntries = exports.sanitizeData = exports.flatten = exports.exitProgram = exports.wait = exports.handleTaxonomyErrorMsg = exports.handleErrorMsg = exports.formatError = void 0;
8
+ exports.mapRoleWithTeams = exports.exportRoleMappings = exports.getTeamsDetail = void 0;
9
+ // Error handling
10
+ var error_handler_1 = require("./error-handler");
11
+ Object.defineProperty(exports, "formatError", { enumerable: true, get: function () { return error_handler_1.formatError; } });
12
+ Object.defineProperty(exports, "handleErrorMsg", { enumerable: true, get: function () { return error_handler_1.handleErrorMsg; } });
13
+ Object.defineProperty(exports, "handleTaxonomyErrorMsg", { enumerable: true, get: function () { return error_handler_1.handleTaxonomyErrorMsg; } });
14
+ Object.defineProperty(exports, "wait", { enumerable: true, get: function () { return error_handler_1.wait; } });
15
+ Object.defineProperty(exports, "exitProgram", { enumerable: true, get: function () { return error_handler_1.exitProgram; } });
16
+ // Data transformation
17
+ var data_transform_1 = require("./data-transform");
18
+ Object.defineProperty(exports, "flatten", { enumerable: true, get: function () { return data_transform_1.flatten; } });
19
+ Object.defineProperty(exports, "sanitizeData", { enumerable: true, get: function () { return data_transform_1.sanitizeData; } });
20
+ Object.defineProperty(exports, "cleanEntries", { enumerable: true, get: function () { return data_transform_1.cleanEntries; } });
21
+ Object.defineProperty(exports, "getMappedUsers", { enumerable: true, get: function () { return data_transform_1.getMappedUsers; } });
22
+ Object.defineProperty(exports, "getMappedRoles", { enumerable: true, get: function () { return data_transform_1.getMappedRoles; } });
23
+ Object.defineProperty(exports, "determineUserOrgRole", { enumerable: true, get: function () { return data_transform_1.determineUserOrgRole; } });
24
+ Object.defineProperty(exports, "cleanOrgUsers", { enumerable: true, get: function () { return data_transform_1.cleanOrgUsers; } });
25
+ Object.defineProperty(exports, "cleanTeamsData", { enumerable: true, get: function () { return data_transform_1.cleanTeamsData; } });
26
+ Object.defineProperty(exports, "getTeamsUserDetails", { enumerable: true, get: function () { return data_transform_1.getTeamsUserDetails; } });
27
+ Object.defineProperty(exports, "formatTaxonomiesData", { enumerable: true, get: function () { return data_transform_1.formatTaxonomiesData; } });
28
+ Object.defineProperty(exports, "formatTermsOfTaxonomyData", { enumerable: true, get: function () { return data_transform_1.formatTermsOfTaxonomyData; } });
29
+ Object.defineProperty(exports, "kebabize", { enumerable: true, get: function () { return data_transform_1.kebabize; } });
30
+ Object.defineProperty(exports, "getFormattedDate", { enumerable: true, get: function () { return data_transform_1.getFormattedDate; } });
31
+ Object.defineProperty(exports, "getDateTime", { enumerable: true, get: function () { return data_transform_1.getDateTime; } });
32
+ // CSV writing
33
+ var csv_writer_1 = require("./csv-writer");
34
+ Object.defineProperty(exports, "write", { enumerable: true, get: function () { return csv_writer_1.write; } });
35
+ Object.defineProperty(exports, "csvParse", { enumerable: true, get: function () { return csv_writer_1.csvParse; } });
36
+ // API client
37
+ var api_client_1 = require("./api-client");
38
+ Object.defineProperty(exports, "getOrganizations", { enumerable: true, get: function () { return api_client_1.getOrganizations; } });
39
+ Object.defineProperty(exports, "getOrganizationsWhereUserIsAdmin", { enumerable: true, get: function () { return api_client_1.getOrganizationsWhereUserIsAdmin; } });
40
+ Object.defineProperty(exports, "getOrgUsers", { enumerable: true, get: function () { return api_client_1.getOrgUsers; } });
41
+ Object.defineProperty(exports, "getOrgRoles", { enumerable: true, get: function () { return api_client_1.getOrgRoles; } });
42
+ Object.defineProperty(exports, "getStacks", { enumerable: true, get: function () { return api_client_1.getStacks; } });
43
+ Object.defineProperty(exports, "getContentTypeCount", { enumerable: true, get: function () { return api_client_1.getContentTypeCount; } });
44
+ Object.defineProperty(exports, "getContentTypes", { enumerable: true, get: function () { return api_client_1.getContentTypes; } });
45
+ Object.defineProperty(exports, "getLanguages", { enumerable: true, get: function () { return api_client_1.getLanguages; } });
46
+ Object.defineProperty(exports, "getEntriesCount", { enumerable: true, get: function () { return api_client_1.getEntriesCount; } });
47
+ Object.defineProperty(exports, "getEntries", { enumerable: true, get: function () { return api_client_1.getEntries; } });
48
+ Object.defineProperty(exports, "getEnvironments", { enumerable: true, get: function () { return api_client_1.getEnvironments; } });
49
+ Object.defineProperty(exports, "getAllTeams", { enumerable: true, get: function () { return api_client_1.getAllTeams; } });
50
+ Object.defineProperty(exports, "exportOrgTeams", { enumerable: true, get: function () { return api_client_1.exportOrgTeams; } });
51
+ Object.defineProperty(exports, "getRoleData", { enumerable: true, get: function () { return api_client_1.getRoleData; } });
52
+ Object.defineProperty(exports, "taxonomySDKHandler", { enumerable: true, get: function () { return api_client_1.taxonomySDKHandler; } });
53
+ Object.defineProperty(exports, "getAllTaxonomies", { enumerable: true, get: function () { return api_client_1.getAllTaxonomies; } });
54
+ Object.defineProperty(exports, "getAllTermsOfTaxonomy", { enumerable: true, get: function () { return api_client_1.getAllTermsOfTaxonomy; } });
55
+ Object.defineProperty(exports, "getTaxonomy", { enumerable: true, get: function () { return api_client_1.getTaxonomy; } });
56
+ Object.defineProperty(exports, "createImportableCSV", { enumerable: true, get: function () { return api_client_1.createImportableCSV; } });
57
+ // Interactive prompts
58
+ var interactive_1 = require("./interactive");
59
+ Object.defineProperty(exports, "startupQuestions", { enumerable: true, get: function () { return interactive_1.startupQuestions; } });
60
+ Object.defineProperty(exports, "chooseOrganization", { enumerable: true, get: function () { return interactive_1.chooseOrganization; } });
61
+ Object.defineProperty(exports, "chooseStack", { enumerable: true, get: function () { return interactive_1.chooseStack; } });
62
+ Object.defineProperty(exports, "chooseBranch", { enumerable: true, get: function () { return interactive_1.chooseBranch; } });
63
+ Object.defineProperty(exports, "chooseContentType", { enumerable: true, get: function () { return interactive_1.chooseContentType; } });
64
+ Object.defineProperty(exports, "chooseInMemContentTypes", { enumerable: true, get: function () { return interactive_1.chooseInMemContentTypes; } });
65
+ Object.defineProperty(exports, "chooseLanguage", { enumerable: true, get: function () { return interactive_1.chooseLanguage; } });
66
+ Object.defineProperty(exports, "chooseFallbackOptions", { enumerable: true, get: function () { return interactive_1.chooseFallbackOptions; } });
67
+ Object.defineProperty(exports, "promptContinueExport", { enumerable: true, get: function () { return interactive_1.promptContinueExport; } });
68
+ // Team export functions (composite functions)
69
+ var teams_export_1 = require("./teams-export");
70
+ Object.defineProperty(exports, "exportTeams", { enumerable: true, get: function () { return teams_export_1.exportTeams; } });
71
+ Object.defineProperty(exports, "getTeamsDetail", { enumerable: true, get: function () { return teams_export_1.getTeamsDetail; } });
72
+ Object.defineProperty(exports, "exportRoleMappings", { enumerable: true, get: function () { return teams_export_1.exportRoleMappings; } });
73
+ Object.defineProperty(exports, "mapRoleWithTeams", { enumerable: true, get: function () { return teams_export_1.mapRoleWithTeams; } });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Interactive prompt utilities.
3
+ * Migrated from: packages/contentstack-export-to-csv/src/util/index.js
4
+ */
5
+ import type { ManagementClient, StackClient, OrganizationChoice, StackChoice, BranchChoice, LanguageChoice, FallbackOptions, Branch } from '../types';
6
+ /**
7
+ * Display startup questions to choose an action.
8
+ */
9
+ export declare function startupQuestions(): Promise<string>;
10
+ /**
11
+ * Prompt user to choose an organization.
12
+ */
13
+ export declare function chooseOrganization(managementAPIClient: ManagementClient, action?: string): Promise<OrganizationChoice>;
14
+ /**
15
+ * Prompt user to choose a stack.
16
+ */
17
+ export declare function chooseStack(managementAPIClient: ManagementClient, orgUid: string, stackApiKey?: string): Promise<StackChoice>;
18
+ /**
19
+ * Prompt user to choose a branch.
20
+ */
21
+ export declare function chooseBranch(branchList: Branch[]): Promise<BranchChoice>;
22
+ /**
23
+ * Prompt user to choose content types (basic checkbox).
24
+ */
25
+ export declare function chooseContentType(stackAPIClient: StackClient, skip: number): Promise<string[]>;
26
+ /**
27
+ * Prompt user to choose content types (searchable multi-select).
28
+ */
29
+ export declare function chooseInMemContentTypes(contentTypesList: string[]): Promise<string[]>;
30
+ /**
31
+ * Prompt user to choose a language/locale.
32
+ */
33
+ export declare function chooseLanguage(stackAPIClient: StackClient): Promise<LanguageChoice>;
34
+ /**
35
+ * Prompt user for fallback options.
36
+ */
37
+ export declare function chooseFallbackOptions(stackAPIClient: StackClient): Promise<FallbackOptions>;
38
+ /**
39
+ * Prompt to continue exporting without certain fields.
40
+ */
41
+ export declare function promptContinueExport(): Promise<boolean>;