@contentstack/cli-variants 1.2.2 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/lib/export/attributes.js +27 -10
  2. package/lib/export/audiences.js +28 -10
  3. package/lib/export/events.js +28 -10
  4. package/lib/export/experiences.js +48 -13
  5. package/lib/export/projects.js +24 -6
  6. package/lib/export/variant-entries.js +25 -4
  7. package/lib/import/attribute.d.ts +2 -3
  8. package/lib/import/attribute.js +16 -8
  9. package/lib/import/audiences.d.ts +2 -3
  10. package/lib/import/audiences.js +21 -8
  11. package/lib/import/events.d.ts +3 -4
  12. package/lib/import/events.js +16 -9
  13. package/lib/import/experiences.d.ts +2 -3
  14. package/lib/import/experiences.js +60 -17
  15. package/lib/import/project.d.ts +2 -3
  16. package/lib/import/project.js +11 -6
  17. package/lib/import/variant-entries.js +62 -25
  18. package/lib/types/export-config.d.ts +2 -1
  19. package/lib/types/utils.d.ts +11 -0
  20. package/lib/utils/attributes-helper.js +17 -1
  21. package/lib/utils/audiences-helper.js +37 -6
  22. package/lib/utils/events-helper.js +17 -4
  23. package/lib/utils/personalization-api-adapter.d.ts +2 -1
  24. package/lib/utils/personalization-api-adapter.js +119 -27
  25. package/lib/utils/variant-api-adapter.d.ts +4 -1
  26. package/lib/utils/variant-api-adapter.js +91 -17
  27. package/package.json +5 -2
  28. package/src/export/attributes.ts +34 -10
  29. package/src/export/audiences.ts +35 -7
  30. package/src/export/events.ts +35 -7
  31. package/src/export/experiences.ts +74 -24
  32. package/src/export/projects.ts +31 -7
  33. package/src/export/variant-entries.ts +47 -12
  34. package/src/import/attribute.ts +22 -9
  35. package/src/import/audiences.ts +28 -10
  36. package/src/import/events.ts +21 -10
  37. package/src/import/experiences.ts +74 -20
  38. package/src/import/project.ts +22 -8
  39. package/src/import/variant-entries.ts +116 -40
  40. package/src/types/export-config.ts +2 -1
  41. package/src/types/utils.ts +12 -0
  42. package/src/utils/attributes-helper.ts +21 -2
  43. package/src/utils/audiences-helper.ts +41 -1
  44. package/src/utils/events-helper.ts +19 -1
  45. package/src/utils/personalization-api-adapter.ts +95 -19
  46. package/src/utils/variant-api-adapter.ts +79 -8
@@ -24,31 +24,45 @@ class ExportAttributes extends utils_1.PersonalizationAdapter {
24
24
  headers: { 'X-Project-Uid': exportConfig.project_id },
25
25
  });
26
26
  this.exportConfig = exportConfig;
27
+ this.exportConfig = exportConfig;
27
28
  this.personalizeConfig = exportConfig.modules.personalize;
28
29
  this.attributesConfig = exportConfig.modules.attributes;
29
30
  this.attributesFolderPath = (0, node_path_1.resolve)((0, cli_utilities_1.sanitizePath)(exportConfig.data), (0, cli_utilities_1.sanitizePath)(exportConfig.branchName || ''), (0, cli_utilities_1.sanitizePath)(this.personalizeConfig.dirName), (0, cli_utilities_1.sanitizePath)(this.attributesConfig.dirName));
30
31
  this.attributes = [];
32
+ this.exportConfig.context.module = 'attributes';
31
33
  }
32
34
  start() {
33
35
  return __awaiter(this, void 0, void 0, function* () {
34
- var _a;
36
+ var _a, _b;
35
37
  try {
36
- (0, utils_1.log)(this.exportConfig, 'Starting attributes export', 'info');
38
+ cli_utilities_1.log.info('Starting attributes export', this.exportConfig.context);
39
+ cli_utilities_1.log.debug('Initializing personalization adapter...', this.exportConfig.context);
37
40
  yield this.init();
41
+ cli_utilities_1.log.debug('Personalization adapter initialized successfully', this.exportConfig.context);
42
+ cli_utilities_1.log.debug(`Creating attributes directory at: ${this.attributesFolderPath}`, this.exportConfig.context);
38
43
  yield utils_1.fsUtil.makeDirectory(this.attributesFolderPath);
44
+ cli_utilities_1.log.debug('Attributes directory created successfully', this.exportConfig.context);
45
+ cli_utilities_1.log.debug('Fetching attributes from personalization API...', this.exportConfig.context);
39
46
  this.attributes = (yield this.getAttributes());
40
- if (!((_a = this.attributes) === null || _a === void 0 ? void 0 : _a.length)) {
41
- (0, utils_1.log)(this.exportConfig, 'No Attributes found with the given project!', 'info');
47
+ cli_utilities_1.log.debug(`Fetched ${((_a = this.attributes) === null || _a === void 0 ? void 0 : _a.length) || 0} attributes`, this.exportConfig.context);
48
+ if (!((_b = this.attributes) === null || _b === void 0 ? void 0 : _b.length)) {
49
+ cli_utilities_1.log.debug('No attributes found, completing export', this.exportConfig.context);
50
+ cli_utilities_1.log.info('No Attributes found with the given project!', this.exportConfig.context);
42
51
  }
43
52
  else {
53
+ cli_utilities_1.log.debug(`Processing ${this.attributes.length} attributes`, this.exportConfig.context);
44
54
  this.sanitizeAttribs();
45
- utils_1.fsUtil.writeFile((0, node_path_1.resolve)((0, cli_utilities_1.sanitizePath)(this.attributesFolderPath), (0, cli_utilities_1.sanitizePath)(this.attributesConfig.fileName)), this.attributes);
46
- (0, utils_1.log)(this.exportConfig, 'All the attributes have been exported successfully!', 'success');
55
+ cli_utilities_1.log.debug('Attributes sanitization completed', this.exportConfig.context);
56
+ const attributesFilePath = (0, node_path_1.resolve)((0, cli_utilities_1.sanitizePath)(this.attributesFolderPath), (0, cli_utilities_1.sanitizePath)(this.attributesConfig.fileName));
57
+ cli_utilities_1.log.debug(`Writing attributes to: ${attributesFilePath}`, this.exportConfig.context);
58
+ utils_1.fsUtil.writeFile(attributesFilePath, this.attributes);
59
+ cli_utilities_1.log.debug('Attributes export completed successfully', this.exportConfig.context);
60
+ cli_utilities_1.log.success(`Attributes exported successfully! Total attributes: ${this.attributes.length}`, this.exportConfig.context);
47
61
  }
48
62
  }
49
63
  catch (error) {
50
- (0, utils_1.log)(this.exportConfig, `Failed to export attributes!`, 'error');
51
- (0, utils_1.log)(this.config, error, 'error');
64
+ cli_utilities_1.log.debug(`Error occurred during attributes export: ${error}`, this.exportConfig.context);
65
+ (0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.exportConfig.context));
52
66
  }
53
67
  });
54
68
  }
@@ -56,8 +70,11 @@ class ExportAttributes extends utils_1.PersonalizationAdapter {
56
70
  * function to remove invalid keys from attributes object
57
71
  */
58
72
  sanitizeAttribs() {
59
- var _a;
60
- this.attributes = ((_a = this.attributes) === null || _a === void 0 ? void 0 : _a.map((audience) => (0, omit_1.default)(audience, this.attributesConfig.invalidKeys))) || [];
73
+ var _a, _b;
74
+ cli_utilities_1.log.debug(`Sanitizing ${((_a = this.attributes) === null || _a === void 0 ? void 0 : _a.length) || 0} attributes`, this.exportConfig.context);
75
+ cli_utilities_1.log.debug(`Invalid keys to remove: ${JSON.stringify(this.attributesConfig.invalidKeys)}`, this.exportConfig.context);
76
+ this.attributes = ((_b = this.attributes) === null || _b === void 0 ? void 0 : _b.map((audience) => (0, omit_1.default)(audience, this.attributesConfig.invalidKeys))) || [];
77
+ cli_utilities_1.log.debug(`Sanitization complete. Total attributes after sanitization: ${this.attributes.length}`, this.exportConfig.context);
61
78
  }
62
79
  }
63
80
  exports.default = ExportAttributes;
@@ -14,6 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const omit_1 = __importDefault(require("lodash/omit"));
16
16
  const node_path_1 = require("node:path");
17
+ const cli_utilities_1 = require("@contentstack/cli-utilities");
17
18
  const utils_1 = require("../utils");
18
19
  class ExportAudiences extends utils_1.PersonalizationAdapter {
19
20
  constructor(exportConfig) {
@@ -27,29 +28,43 @@ class ExportAudiences extends utils_1.PersonalizationAdapter {
27
28
  this.audiencesConfig = exportConfig.modules.audiences;
28
29
  this.audiencesFolderPath = (0, node_path_1.resolve)(exportConfig.data, exportConfig.branchName || '', this.personalizeConfig.dirName, this.audiencesConfig.dirName);
29
30
  this.audiences = [];
31
+ this.exportConfig.context.module = 'audiences';
30
32
  }
31
33
  start() {
32
34
  return __awaiter(this, void 0, void 0, function* () {
33
- var _a;
35
+ var _a, _b;
34
36
  try {
35
- (0, utils_1.log)(this.exportConfig, 'Starting audiences export', 'info');
37
+ cli_utilities_1.log.debug('Starting audiences export process...', this.exportConfig.context);
38
+ cli_utilities_1.log.info('Starting audiences export', this.exportConfig.context);
39
+ cli_utilities_1.log.debug('Initializing personalization adapter...', this.exportConfig.context);
36
40
  yield this.init();
41
+ cli_utilities_1.log.debug('Personalization adapter initialized successfully', this.exportConfig.context);
42
+ cli_utilities_1.log.debug(`Creating audiences directory at: ${this.audiencesFolderPath}`, this.exportConfig.context);
37
43
  yield utils_1.fsUtil.makeDirectory(this.audiencesFolderPath);
44
+ cli_utilities_1.log.debug('Audiences directory created successfully', this.exportConfig.context);
45
+ cli_utilities_1.log.debug('Fetching audiences from personalization API...', this.exportConfig.context);
38
46
  this.audiences = (yield this.getAudiences());
39
- if (!((_a = this.audiences) === null || _a === void 0 ? void 0 : _a.length)) {
40
- (0, utils_1.log)(this.exportConfig, 'No Audiences found with the given project!', 'info');
47
+ cli_utilities_1.log.debug(`Fetched ${((_a = this.audiences) === null || _a === void 0 ? void 0 : _a.length) || 0} audiences`, this.exportConfig.context);
48
+ if (!((_b = this.audiences) === null || _b === void 0 ? void 0 : _b.length)) {
49
+ cli_utilities_1.log.debug('No audiences found, completing export', this.exportConfig.context);
50
+ cli_utilities_1.log.info('No Audiences found with the given project!', this.exportConfig.context);
41
51
  return;
42
52
  }
43
53
  else {
54
+ cli_utilities_1.log.debug(`Processing ${this.audiences.length} audiences`, this.exportConfig.context);
44
55
  this.sanitizeAttribs();
45
- utils_1.fsUtil.writeFile((0, node_path_1.resolve)(this.audiencesFolderPath, this.audiencesConfig.fileName), this.audiences);
46
- (0, utils_1.log)(this.exportConfig, 'All the audiences have been exported successfully!', 'success');
56
+ cli_utilities_1.log.debug('Audiences sanitization completed', this.exportConfig.context);
57
+ const audiencesFilePath = (0, node_path_1.resolve)(this.audiencesFolderPath, this.audiencesConfig.fileName);
58
+ cli_utilities_1.log.debug(`Writing audiences to: ${audiencesFilePath}`, this.exportConfig.context);
59
+ utils_1.fsUtil.writeFile(audiencesFilePath, this.audiences);
60
+ cli_utilities_1.log.debug('Audiences export completed successfully', this.exportConfig.context);
61
+ cli_utilities_1.log.success(`Audiences exported successfully! Total audiences: ${this.audiences.length}`, this.exportConfig.context);
47
62
  return;
48
63
  }
49
64
  }
50
65
  catch (error) {
51
- (0, utils_1.log)(this.exportConfig, `Failed to export audiences!`, 'error');
52
- (0, utils_1.log)(this.config, error, 'error');
66
+ cli_utilities_1.log.debug(`Error occurred during audiences export: ${error}`, this.exportConfig.context);
67
+ (0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.exportConfig.context));
53
68
  }
54
69
  });
55
70
  }
@@ -57,8 +72,11 @@ class ExportAudiences extends utils_1.PersonalizationAdapter {
57
72
  * function to remove invalid keys from audience object
58
73
  */
59
74
  sanitizeAttribs() {
60
- var _a;
61
- this.audiences = ((_a = this.audiences) === null || _a === void 0 ? void 0 : _a.map((audience) => (0, omit_1.default)(audience, this.audiencesConfig.invalidKeys))) || [];
75
+ var _a, _b;
76
+ cli_utilities_1.log.debug(`Sanitizing ${((_a = this.audiences) === null || _a === void 0 ? void 0 : _a.length) || 0} audiences`, this.exportConfig.context);
77
+ cli_utilities_1.log.debug(`Invalid keys to remove: ${JSON.stringify(this.audiencesConfig.invalidKeys)}`, this.exportConfig.context);
78
+ this.audiences = ((_b = this.audiences) === null || _b === void 0 ? void 0 : _b.map((audience) => (0, omit_1.default)(audience, this.audiencesConfig.invalidKeys))) || [];
79
+ cli_utilities_1.log.debug(`Sanitization complete. Total audiences after sanitization: ${this.audiences.length}`, this.exportConfig.context);
62
80
  }
63
81
  }
64
82
  exports.default = ExportAudiences;
@@ -14,6 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const omit_1 = __importDefault(require("lodash/omit"));
16
16
  const node_path_1 = require("node:path");
17
+ const cli_utilities_1 = require("@contentstack/cli-utilities");
17
18
  const utils_1 = require("../utils");
18
19
  class ExportEvents extends utils_1.PersonalizationAdapter {
19
20
  constructor(exportConfig) {
@@ -27,29 +28,43 @@ class ExportEvents extends utils_1.PersonalizationAdapter {
27
28
  this.eventsConfig = exportConfig.modules.events;
28
29
  this.eventsFolderPath = (0, node_path_1.resolve)(exportConfig.data, exportConfig.branchName || '', this.personalizeConfig.dirName, this.eventsConfig.dirName);
29
30
  this.events = [];
31
+ this.exportConfig.context.module = 'events';
30
32
  }
31
33
  start() {
32
34
  return __awaiter(this, void 0, void 0, function* () {
33
- var _a;
35
+ var _a, _b;
34
36
  try {
35
- (0, utils_1.log)(this.exportConfig, 'Starting events export', 'info');
37
+ cli_utilities_1.log.debug('Starting events export process...', this.exportConfig.context);
38
+ cli_utilities_1.log.info('Starting events export', this.exportConfig.context);
39
+ cli_utilities_1.log.debug('Initializing personalization adapter...', this.exportConfig.context);
36
40
  yield this.init();
41
+ cli_utilities_1.log.debug('Personalization adapter initialized successfully', this.exportConfig.context);
42
+ cli_utilities_1.log.debug(`Creating events directory at: ${this.eventsFolderPath}`, this.exportConfig.context);
37
43
  yield utils_1.fsUtil.makeDirectory(this.eventsFolderPath);
44
+ cli_utilities_1.log.debug('Events directory created successfully', this.exportConfig.context);
45
+ cli_utilities_1.log.debug('Fetching events from personalization API...', this.exportConfig.context);
38
46
  this.events = (yield this.getEvents());
39
- if (!((_a = this.events) === null || _a === void 0 ? void 0 : _a.length)) {
40
- (0, utils_1.log)(this.exportConfig, 'No Events found with the given project!', 'info');
47
+ cli_utilities_1.log.debug(`Fetched ${((_a = this.events) === null || _a === void 0 ? void 0 : _a.length) || 0} events`, this.exportConfig.context);
48
+ if (!((_b = this.events) === null || _b === void 0 ? void 0 : _b.length)) {
49
+ cli_utilities_1.log.debug('No events found, completing export', this.exportConfig.context);
50
+ cli_utilities_1.log.info('No Events found with the given project!', this.exportConfig.context);
41
51
  return;
42
52
  }
43
53
  else {
54
+ cli_utilities_1.log.debug(`Processing ${this.events.length} events`, this.exportConfig.context);
44
55
  this.sanitizeAttribs();
45
- utils_1.fsUtil.writeFile((0, node_path_1.resolve)(this.eventsFolderPath, this.eventsConfig.fileName), this.events);
46
- (0, utils_1.log)(this.exportConfig, 'All the events have been exported successfully!', 'success');
56
+ cli_utilities_1.log.debug('Events sanitization completed', this.exportConfig.context);
57
+ const eventsFilePath = (0, node_path_1.resolve)(this.eventsFolderPath, this.eventsConfig.fileName);
58
+ cli_utilities_1.log.debug(`Writing events to: ${eventsFilePath}`, this.exportConfig.context);
59
+ utils_1.fsUtil.writeFile(eventsFilePath, this.events);
60
+ cli_utilities_1.log.debug('Events export completed successfully', this.exportConfig.context);
61
+ cli_utilities_1.log.success(`Events exported successfully! Total events: ${this.events.length}`, this.exportConfig.context);
47
62
  return;
48
63
  }
49
64
  }
50
65
  catch (error) {
51
- (0, utils_1.log)(this.exportConfig, `Failed to export events!`, 'error');
52
- (0, utils_1.log)(this.config, error, 'error');
66
+ cli_utilities_1.log.debug(`Error occurred during events export: ${error}`, this.exportConfig.context);
67
+ (0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.exportConfig.context));
53
68
  }
54
69
  });
55
70
  }
@@ -57,8 +72,11 @@ class ExportEvents extends utils_1.PersonalizationAdapter {
57
72
  * function to remove invalid keys from event object
58
73
  */
59
74
  sanitizeAttribs() {
60
- var _a;
61
- this.events = ((_a = this.events) === null || _a === void 0 ? void 0 : _a.map((event) => (0, omit_1.default)(event, this.eventsConfig.invalidKeys))) || [];
75
+ var _a, _b;
76
+ cli_utilities_1.log.debug(`Sanitizing ${((_a = this.events) === null || _a === void 0 ? void 0 : _a.length) || 0} events`, this.exportConfig.context);
77
+ cli_utilities_1.log.debug(`Invalid keys to remove: ${JSON.stringify(this.eventsConfig.invalidKeys)}`, this.exportConfig.context);
78
+ this.events = ((_b = this.events) === null || _b === void 0 ? void 0 : _b.map((event) => (0, omit_1.default)(event, this.eventsConfig.invalidKeys))) || [];
79
+ cli_utilities_1.log.debug(`Sanitization complete. Total events after sanitization: ${this.events.length}`, this.exportConfig.context);
62
80
  }
63
81
  }
64
82
  exports.default = ExportEvents;
@@ -59,6 +59,7 @@ class ExportExperiences extends utils_1.PersonalizationAdapter {
59
59
  this.exportConfig = exportConfig;
60
60
  this.personalizeConfig = exportConfig.modules.personalize;
61
61
  this.experiencesFolderPath = path.resolve((0, cli_utilities_1.sanitizePath)(exportConfig.data), (0, cli_utilities_1.sanitizePath)(exportConfig.branchName || ''), (0, cli_utilities_1.sanitizePath)(this.personalizeConfig.dirName), 'experiences');
62
+ this.exportConfig.context.module = 'experiences';
62
63
  }
63
64
  start() {
64
65
  return __awaiter(this, void 0, void 0, function* () {
@@ -67,56 +68,90 @@ class ExportExperiences extends utils_1.PersonalizationAdapter {
67
68
  // get all experiences
68
69
  // loop through experiences and get content types attached to it
69
70
  // write experiences in to a file
70
- (0, utils_1.log)(this.exportConfig, 'Starting experiences export', 'info');
71
+ cli_utilities_1.log.debug('Starting experiences export process...', this.exportConfig.context);
72
+ cli_utilities_1.log.info('Starting experiences export', this.exportConfig.context);
73
+ cli_utilities_1.log.debug('Initializing personalization adapter...', this.exportConfig.context);
71
74
  yield this.init();
75
+ cli_utilities_1.log.debug('Personalization adapter initialized successfully', this.exportConfig.context);
76
+ cli_utilities_1.log.debug(`Creating experiences directory at: ${this.experiencesFolderPath}`, this.exportConfig.context);
72
77
  yield utils_1.fsUtil.makeDirectory(this.experiencesFolderPath);
73
- yield utils_1.fsUtil.makeDirectory(path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'versions'));
78
+ cli_utilities_1.log.debug('Experiences directory created successfully', this.exportConfig.context);
79
+ const versionsDirPath = path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'versions');
80
+ cli_utilities_1.log.debug(`Creating versions directory at: ${versionsDirPath}`, this.exportConfig.context);
81
+ yield utils_1.fsUtil.makeDirectory(versionsDirPath);
82
+ cli_utilities_1.log.debug('Versions directory created successfully', this.exportConfig.context);
83
+ cli_utilities_1.log.debug('Fetching experiences from personalization API...', this.exportConfig.context);
74
84
  const experiences = (yield this.getExperiences()) || [];
85
+ cli_utilities_1.log.debug(`Fetched ${(experiences === null || experiences === void 0 ? void 0 : experiences.length) || 0} experiences`, this.exportConfig.context);
75
86
  if (!experiences || (experiences === null || experiences === void 0 ? void 0 : experiences.length) < 1) {
76
- (0, utils_1.log)(this.exportConfig, 'No Experiences found with the give project', 'info');
87
+ cli_utilities_1.log.debug('No experiences found, completing export', this.exportConfig.context);
88
+ cli_utilities_1.log.info('No Experiences found with the given project!', this.exportConfig.context);
77
89
  return;
78
90
  }
79
- utils_1.fsUtil.writeFile(path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'experiences.json'), experiences);
91
+ const experiencesFilePath = path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'experiences.json');
92
+ cli_utilities_1.log.debug(`Writing experiences to: ${experiencesFilePath}`, this.exportConfig.context);
93
+ utils_1.fsUtil.writeFile(experiencesFilePath, experiences);
80
94
  const experienceToVariantsStrList = [];
81
95
  const experienceToContentTypesMap = {};
96
+ cli_utilities_1.log.debug(`Processing ${experiences.length} experiences for variants and content types`, this.exportConfig.context);
82
97
  for (let experience of experiences) {
98
+ cli_utilities_1.log.debug(`Processing experience: ${experience.name} (${experience.uid})`, this.exportConfig.context);
83
99
  // create id mapper for experience to variants
84
100
  let variants = (_b = (_a = experience === null || experience === void 0 ? void 0 : experience._cms) === null || _a === void 0 ? void 0 : _a.variants) !== null && _b !== void 0 ? _b : {};
101
+ cli_utilities_1.log.debug(`Found ${Object.keys(variants).length} variants for experience: ${experience.name}`, this.exportConfig.context);
85
102
  Object.keys(variants).forEach((variantShortId) => {
86
103
  const experienceToVariantsStr = `${experience.uid}-${variantShortId}-${variants[variantShortId]}`;
87
104
  experienceToVariantsStrList.push(experienceToVariantsStr);
105
+ cli_utilities_1.log.debug(`Added variant mapping: ${experienceToVariantsStr}`, this.exportConfig.context);
88
106
  });
89
107
  try {
90
108
  // fetch versions of experience
109
+ cli_utilities_1.log.debug(`Fetching versions for experience: ${experience.name}`, this.exportConfig.context);
91
110
  const experienceVersions = (yield this.getExperienceVersions(experience.uid)) || [];
111
+ cli_utilities_1.log.debug(`Fetched ${experienceVersions.length} versions for experience: ${experience.name}`, this.exportConfig.context);
92
112
  if (experienceVersions.length > 0) {
93
- utils_1.fsUtil.writeFile(path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'versions', `${experience.uid}.json`), experienceVersions);
113
+ const versionsFilePath = path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'versions', `${experience.uid}.json`);
114
+ cli_utilities_1.log.debug(`Writing experience versions to: ${versionsFilePath}`, this.exportConfig.context);
115
+ utils_1.fsUtil.writeFile(versionsFilePath, experienceVersions);
94
116
  }
95
117
  else {
96
- (0, utils_1.log)(this.exportConfig, `No versions found for experience ${experience.name}`, 'info');
118
+ cli_utilities_1.log.debug(`No versions found for experience: ${experience.name}`, this.exportConfig.context);
119
+ cli_utilities_1.log.info(`No versions found for experience '${experience.name}'`, this.exportConfig.context);
97
120
  }
98
121
  }
99
122
  catch (error) {
100
- (0, utils_1.log)(this.exportConfig, `Failed to fetch versions of experience ${experience.name}`, 'error');
123
+ cli_utilities_1.log.debug(`Error occurred while fetching versions for experience: ${experience.name}`, this.exportConfig.context);
124
+ (0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.exportConfig.context), `Failed to fetch versions of experience ${experience.name}`);
101
125
  }
102
126
  try {
103
127
  // fetch content of experience
128
+ cli_utilities_1.log.debug(`Fetching variant group for experience: ${experience.name}`, this.exportConfig.context);
104
129
  const { variant_groups: [variantGroup] = [] } = (yield this.getVariantGroup({ experienceUid: experience.uid })) || {};
105
130
  if ((_c = variantGroup === null || variantGroup === void 0 ? void 0 : variantGroup.content_types) === null || _c === void 0 ? void 0 : _c.length) {
131
+ cli_utilities_1.log.debug(`Found ${variantGroup.content_types.length} content types for experience: ${experience.name}`, this.exportConfig.context);
106
132
  experienceToContentTypesMap[experience.uid] = variantGroup.content_types;
107
133
  }
134
+ else {
135
+ cli_utilities_1.log.debug(`No content types found for experience: ${experience.name}`, this.exportConfig.context);
136
+ }
108
137
  }
109
138
  catch (error) {
110
- (0, utils_1.log)(this.exportConfig, `Failed to fetch content types of experience ${experience.name}`, 'error');
139
+ cli_utilities_1.log.debug(`Error occurred while fetching content types for experience: ${experience.name}`, this.exportConfig.context);
140
+ (0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.exportConfig.context), `Failed to fetch content types of experience ${experience.name}`);
111
141
  }
112
142
  }
113
- utils_1.fsUtil.writeFile(path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'experiences-variants-ids.json'), experienceToVariantsStrList);
114
- utils_1.fsUtil.writeFile(path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'experiences-content-types.json'), experienceToContentTypesMap);
115
- (0, utils_1.log)(this.exportConfig, 'All the experiences have been exported successfully!', 'success');
143
+ const variantsIdsFilePath = path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'experiences-variants-ids.json');
144
+ cli_utilities_1.log.debug(`Writing experience variants mapping to: ${variantsIdsFilePath}`, this.exportConfig.context);
145
+ utils_1.fsUtil.writeFile(variantsIdsFilePath, experienceToVariantsStrList);
146
+ const contentTypesFilePath = path.resolve((0, cli_utilities_1.sanitizePath)(this.experiencesFolderPath), 'experiences-content-types.json');
147
+ cli_utilities_1.log.debug(`Writing experience content types mapping to: ${contentTypesFilePath}`, this.exportConfig.context);
148
+ utils_1.fsUtil.writeFile(contentTypesFilePath, experienceToContentTypesMap);
149
+ cli_utilities_1.log.debug('Experiences export completed successfully', this.exportConfig.context);
150
+ cli_utilities_1.log.success('Experiences exported successfully!', this.exportConfig.context);
116
151
  }
117
152
  catch (error) {
118
- (0, utils_1.log)(this.exportConfig, `Failed to export experiences!`, 'error');
119
- (0, utils_1.log)(this.config, error, 'error');
153
+ cli_utilities_1.log.debug(`Error occurred during experiences export: ${error}`, this.exportConfig.context);
154
+ (0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.exportConfig.context));
120
155
  }
121
156
  });
122
157
  }
@@ -55,28 +55,46 @@ class ExportProjects extends utils_1.PersonalizationAdapter {
55
55
  this.exportConfig = exportConfig;
56
56
  this.personalizeConfig = exportConfig.modules.personalize;
57
57
  this.projectFolderPath = path.resolve((0, cli_utilities_1.sanitizePath)(exportConfig.data), (0, cli_utilities_1.sanitizePath)(exportConfig.branchName || ''), (0, cli_utilities_1.sanitizePath)(this.personalizeConfig.dirName), 'projects');
58
+ this.exportConfig.context.module = 'projects';
58
59
  }
59
60
  start() {
60
61
  return __awaiter(this, void 0, void 0, function* () {
61
- var _a;
62
+ var _a, _b;
62
63
  try {
63
- (0, utils_1.log)(this.exportConfig, 'Starting projects export', 'info');
64
+ cli_utilities_1.log.debug('Starting projects export process...', this.exportConfig.context);
65
+ cli_utilities_1.log.info(`Starting projects export`, this.exportConfig.context);
66
+ cli_utilities_1.log.debug('Initializing personalization adapter...', this.exportConfig.context);
64
67
  yield this.init();
68
+ cli_utilities_1.log.debug('Personalization adapter initialized successfully', this.exportConfig.context);
69
+ cli_utilities_1.log.debug(`Creating projects directory at: ${this.projectFolderPath}`, this.exportConfig.context);
65
70
  yield utils_1.fsUtil.makeDirectory(this.projectFolderPath);
71
+ cli_utilities_1.log.debug('Projects directory created successfully', this.exportConfig.context);
72
+ cli_utilities_1.log.debug(`Fetching projects for stack API key: ${this.exportConfig.apiKey}`, this.exportConfig.context);
66
73
  const project = yield this.projects({ connectedStackApiKey: this.exportConfig.apiKey });
74
+ cli_utilities_1.log.debug(`Fetched ${(project === null || project === void 0 ? void 0 : project.length) || 0} projects`, this.exportConfig.context);
67
75
  if (!project || (project === null || project === void 0 ? void 0 : project.length) < 1) {
68
- (0, utils_1.log)(this.exportConfig, 'No Personalize Project connected with the given stack', 'info');
76
+ cli_utilities_1.log.debug('No projects found, disabling personalization', this.exportConfig.context);
77
+ cli_utilities_1.log.info(`No Personalize Project connected with the given stack`, this.exportConfig.context);
69
78
  this.exportConfig.personalizationEnabled = false;
70
79
  return;
71
80
  }
81
+ cli_utilities_1.log.debug(`Found ${project.length} projects, enabling personalization`, this.exportConfig.context);
72
82
  this.exportConfig.personalizationEnabled = true;
73
83
  this.exportConfig.project_id = (_a = project[0]) === null || _a === void 0 ? void 0 : _a.uid;
74
- utils_1.fsUtil.writeFile(path.resolve((0, cli_utilities_1.sanitizePath)(this.projectFolderPath), 'projects.json'), project);
75
- (0, utils_1.log)(this.exportConfig, 'Project exported successfully!', 'success');
84
+ cli_utilities_1.log.debug(`Set project ID: ${(_b = project[0]) === null || _b === void 0 ? void 0 : _b.uid}`, this.exportConfig.context);
85
+ const projectsFilePath = path.resolve((0, cli_utilities_1.sanitizePath)(this.projectFolderPath), 'projects.json');
86
+ cli_utilities_1.log.debug(`Writing projects data to: ${projectsFilePath}`, this.exportConfig.context);
87
+ utils_1.fsUtil.writeFile(projectsFilePath, project);
88
+ cli_utilities_1.log.debug('Projects export completed successfully', this.exportConfig.context);
89
+ cli_utilities_1.log.success(`Projects exported successfully!`, this.exportConfig.context);
76
90
  }
77
91
  catch (error) {
78
92
  if (error !== 'Forbidden') {
79
- (0, utils_1.log)(this.exportConfig, `Failed to export projects!`, 'error');
93
+ cli_utilities_1.log.debug(`Error occurred during projects export: ${error}`, this.exportConfig.context);
94
+ cli_utilities_1.log.error('Failed to export projects!', this.exportConfig.context);
95
+ }
96
+ else {
97
+ cli_utilities_1.log.debug('Projects export forbidden, likely due to permissions', this.exportConfig.context);
80
98
  }
81
99
  throw error;
82
100
  }
@@ -46,7 +46,6 @@ const fs_1 = require("fs");
46
46
  const path_1 = require("path");
47
47
  const cli_utilities_1 = require("@contentstack/cli-utilities");
48
48
  const variant_api_adapter_1 = __importStar(require("../utils/variant-api-adapter"));
49
- const utils_1 = require("../utils");
50
49
  class VariantEntries extends variant_api_adapter_1.default {
51
50
  constructor(config) {
52
51
  const conf = {
@@ -64,6 +63,9 @@ class VariantEntries extends variant_api_adapter_1.default {
64
63
  super(Object.assign(config, conf));
65
64
  this.config = config;
66
65
  this.entriesDirPath = (0, path_1.resolve)((0, cli_utilities_1.sanitizePath)(config.data), (0, cli_utilities_1.sanitizePath)(config.branchName || ''), (0, cli_utilities_1.sanitizePath)(config.modules.entries.dirName));
66
+ if (this.config && this.config.context) {
67
+ this.config.context.module = 'variant-entries';
68
+ }
67
69
  }
68
70
  /**
69
71
  * This function exports variant entries for a specific content type and locale.
@@ -74,10 +76,16 @@ class VariantEntries extends variant_api_adapter_1.default {
74
76
  return __awaiter(this, void 0, void 0, function* () {
75
77
  const variantEntry = this.config.modules.variantEntry;
76
78
  const { entries, locale, contentTypeUid: content_type_uid } = options;
79
+ cli_utilities_1.log.debug(`Starting variant entries export for content type: ${content_type_uid}, locale: ${locale}`, this.config.context);
80
+ cli_utilities_1.log.debug(`Processing ${entries.length} entries for variant export`, this.config.context);
81
+ cli_utilities_1.log.debug('Initializing variant instance...', this.config.context);
77
82
  yield this.variantInstance.init();
83
+ cli_utilities_1.log.debug('Variant instance initialized successfully', this.config.context);
78
84
  for (let index = 0; index < entries.length; index++) {
79
85
  const entry = entries[index];
86
+ cli_utilities_1.log.debug(`Processing variant entries for entry: ${entry.title} (${entry.uid}) - ${index + 1}/${entries.length}`, this.config.context);
80
87
  const variantEntryBasePath = (0, path_1.join)((0, cli_utilities_1.sanitizePath)(this.entriesDirPath), (0, cli_utilities_1.sanitizePath)(content_type_uid), (0, cli_utilities_1.sanitizePath)(locale), (0, cli_utilities_1.sanitizePath)(variantEntry.dirName), (0, cli_utilities_1.sanitizePath)(entry.uid));
88
+ cli_utilities_1.log.debug(`Variant entry base path: ${variantEntryBasePath}`, this.config.context);
81
89
  const variantEntriesFs = new cli_utilities_1.FsUtility({
82
90
  isArray: true,
83
91
  keepMetadata: false,
@@ -87,15 +95,23 @@ class VariantEntries extends variant_api_adapter_1.default {
87
95
  chunkFileSize: variantEntry.chunkFileSize || 1,
88
96
  createDirIfNotExist: false,
89
97
  });
98
+ cli_utilities_1.log.debug('Initialized FsUtility for variant entries', this.config.context);
90
99
  const callback = (variantEntries) => {
100
+ cli_utilities_1.log.debug(`Callback received ${(variantEntries === null || variantEntries === void 0 ? void 0 : variantEntries.length) || 0} variant entries for entry: ${entry.uid}`, this.config.context);
91
101
  if (variantEntries === null || variantEntries === void 0 ? void 0 : variantEntries.length) {
92
102
  if (!(0, fs_1.existsSync)(variantEntryBasePath)) {
103
+ cli_utilities_1.log.debug(`Creating directory: ${variantEntryBasePath}`, this.config.context);
93
104
  (0, fs_1.mkdirSync)(variantEntryBasePath, { recursive: true });
94
105
  }
106
+ cli_utilities_1.log.debug(`Writing ${variantEntries.length} variant entries to file`, this.config.context);
95
107
  variantEntriesFs.writeIntoFile(variantEntries);
96
108
  }
109
+ else {
110
+ cli_utilities_1.log.debug(`No variant entries found for entry: ${entry.uid}`, this.config.context);
111
+ }
97
112
  };
98
113
  try {
114
+ cli_utilities_1.log.debug(`Fetching variant entries for entry: ${entry.uid}`, this.config.context);
99
115
  yield this.variantInstance.variantEntries({
100
116
  callback,
101
117
  getAllData: true,
@@ -104,15 +120,20 @@ class VariantEntries extends variant_api_adapter_1.default {
104
120
  locale,
105
121
  });
106
122
  if ((0, fs_1.existsSync)(variantEntryBasePath)) {
123
+ cli_utilities_1.log.debug(`Completing file for entry: ${entry.uid}`, this.config.context);
107
124
  variantEntriesFs.completeFile(true);
108
- (0, utils_1.log)(this.config, `Exported variant entries of type '${entry.title} (${entry.uid})' locale '${locale}'`, 'info');
125
+ cli_utilities_1.log.info(`Exported variant entries of type '${entry.title} (${entry.uid})' locale '${locale}'`, this.config.context);
126
+ }
127
+ else {
128
+ cli_utilities_1.log.debug(`No variant entries directory created for entry: ${entry.uid}`, this.config.context);
109
129
  }
110
130
  }
111
131
  catch (error) {
112
- (0, utils_1.log)(this.config, `Error exporting variant entries of type '${entry.title} (${entry.uid})' locale '${locale}'`, 'error');
113
- (0, utils_1.log)(this.config, error, 'error');
132
+ cli_utilities_1.log.debug(`Error occurred while exporting variant entries for entry: ${entry.uid}`, this.config.context);
133
+ (0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.config.context), `Error exporting variant entries of type '${entry.title} (${entry.uid})' locale '${locale}'`);
114
134
  }
115
135
  }
136
+ cli_utilities_1.log.debug(`Completed variant entries export for content type: ${content_type_uid}, locale: ${locale}`, this.config.context);
116
137
  });
117
138
  }
118
139
  }
@@ -1,15 +1,14 @@
1
1
  import { PersonalizationAdapter } from '../utils';
2
- import { ImportConfig, LogType } from '../types';
2
+ import { ImportConfig } from '../types';
3
3
  export default class Attribute extends PersonalizationAdapter<ImportConfig> {
4
4
  readonly config: ImportConfig;
5
- private readonly log;
6
5
  private mapperDirPath;
7
6
  private attrMapperDirPath;
8
7
  private attributesUidMapperPath;
9
8
  private attributesUidMapper;
10
9
  private personalizeConfig;
11
10
  private attributeConfig;
12
- constructor(config: ImportConfig, log?: LogType);
11
+ constructor(config: ImportConfig);
13
12
  /**
14
13
  * The function asynchronously imports attributes from a JSON file and creates them in the system.
15
14
  */
@@ -14,7 +14,7 @@ const fs_1 = require("fs");
14
14
  const cli_utilities_1 = require("@contentstack/cli-utilities");
15
15
  const utils_1 = require("../utils");
16
16
  class Attribute extends utils_1.PersonalizationAdapter {
17
- constructor(config, log = console.log) {
17
+ constructor(config) {
18
18
  const conf = {
19
19
  config,
20
20
  baseURL: config.modules.personalize.baseURL[config.region.name],
@@ -22,13 +22,13 @@ class Attribute extends utils_1.PersonalizationAdapter {
22
22
  };
23
23
  super(Object.assign(config, conf));
24
24
  this.config = config;
25
- this.log = log;
26
25
  this.personalizeConfig = this.config.modules.personalize;
27
26
  this.attributeConfig = this.personalizeConfig.attributes;
28
27
  this.mapperDirPath = (0, path_1.resolve)((0, cli_utilities_1.sanitizePath)(this.config.backupDir), 'mapper', (0, cli_utilities_1.sanitizePath)(this.personalizeConfig.dirName));
29
28
  this.attrMapperDirPath = (0, path_1.resolve)((0, cli_utilities_1.sanitizePath)(this.mapperDirPath), (0, cli_utilities_1.sanitizePath)(this.attributeConfig.dirName));
30
29
  this.attributesUidMapperPath = (0, path_1.resolve)((0, cli_utilities_1.sanitizePath)(this.attrMapperDirPath), 'uid-mapping.json');
31
30
  this.attributesUidMapper = {};
31
+ this.config.context.module = 'attributes';
32
32
  }
33
33
  /**
34
34
  * The function asynchronously imports attributes from a JSON file and creates them in the system.
@@ -36,39 +36,47 @@ class Attribute extends utils_1.PersonalizationAdapter {
36
36
  import() {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
38
  var _a;
39
- this.log(this.config, this.$t(this.messages.IMPORT_MSG, { module: 'Attributes' }), 'info');
40
39
  yield this.init();
41
40
  yield utils_1.fsUtil.makeDirectory(this.attrMapperDirPath);
41
+ cli_utilities_1.log.debug(`Created mapper directory: ${this.attrMapperDirPath}`, this.config.context);
42
42
  const { dirName, fileName } = this.attributeConfig;
43
43
  const attributesPath = (0, path_1.resolve)((0, cli_utilities_1.sanitizePath)(this.config.data), (0, cli_utilities_1.sanitizePath)(this.personalizeConfig.dirName), (0, cli_utilities_1.sanitizePath)(dirName), (0, cli_utilities_1.sanitizePath)(fileName));
44
+ cli_utilities_1.log.debug(`Checking for attributes file: ${attributesPath}`, this.config.context);
44
45
  if ((0, fs_1.existsSync)(attributesPath)) {
45
46
  try {
46
47
  const attributes = utils_1.fsUtil.readFile(attributesPath, true);
48
+ cli_utilities_1.log.info(`Found ${attributes.length} attributes to import`, this.config.context);
47
49
  for (const attribute of attributes) {
48
50
  const { key, name, description, uid } = attribute;
51
+ cli_utilities_1.log.debug(`Processing attribute: ${name} - ${attribute.__type}`, this.config.context);
49
52
  // skip creating preset attributes, as they are already present in the system
50
53
  if (attribute.__type === 'PRESET') {
54
+ cli_utilities_1.log.debug(`Skipping preset attribute: ${name}`, this.config.context);
51
55
  continue;
52
56
  }
53
57
  try {
58
+ cli_utilities_1.log.debug(`Creating custom attribute: ${name}`, this.config.context);
54
59
  const attributeRes = yield this.createAttribute({ key, name, description });
55
60
  //map old attribute uid to new attribute uid
56
61
  //mapper file is used to check whether attribute created or not before creating audience
57
62
  this.attributesUidMapper[uid] = (_a = attributeRes === null || attributeRes === void 0 ? void 0 : attributeRes.uid) !== null && _a !== void 0 ? _a : '';
63
+ cli_utilities_1.log.debug(`Created attribute: ${uid} -> ${attributeRes === null || attributeRes === void 0 ? void 0 : attributeRes.uid}`, this.config.context);
58
64
  }
59
65
  catch (error) {
60
- this.log(this.config, `Failed to create attribute ${name}!`, 'error');
61
- this.log(this.config, error, 'error');
66
+ (0, cli_utilities_1.handleAndLogError)(error, this.config.context, `Failed to create attribute: ${name}`);
62
67
  }
63
68
  }
64
69
  utils_1.fsUtil.writeFile(this.attributesUidMapperPath, this.attributesUidMapper);
65
- this.log(this.config, this.$t(this.messages.CREATE_SUCCESS, { module: 'Attributes' }), 'info');
70
+ cli_utilities_1.log.debug(`Saved ${Object.keys(this.attributesUidMapper).length} attribute mappings to: ${this.attributesUidMapperPath}`, this.config.context);
71
+ cli_utilities_1.log.success('Attributes imported successfully', this.config.context);
66
72
  }
67
73
  catch (error) {
68
- this.log(this.config, this.$t(this.messages.CREATE_FAILURE, { module: 'Attributes' }), 'error');
69
- this.log(this.config, error, 'error');
74
+ (0, cli_utilities_1.handleAndLogError)(error, this.config.context);
70
75
  }
71
76
  }
77
+ else {
78
+ cli_utilities_1.log.warn(`Attributes file not found: ${attributesPath}`, this.config.context);
79
+ }
72
80
  });
73
81
  }
74
82
  }
@@ -1,8 +1,7 @@
1
- import { ImportConfig, LogType } from '../types';
1
+ import { ImportConfig } from '../types';
2
2
  import { PersonalizationAdapter } from '../utils';
3
3
  export default class Audiences extends PersonalizationAdapter<ImportConfig> {
4
4
  readonly config: ImportConfig;
5
- private readonly log;
6
5
  private mapperDirPath;
7
6
  private audienceMapperDirPath;
8
7
  private attributesMapperPath;
@@ -11,7 +10,7 @@ export default class Audiences extends PersonalizationAdapter<ImportConfig> {
11
10
  private personalizeConfig;
12
11
  private audienceConfig;
13
12
  attributeConfig: ImportConfig['modules']['personalize']['attributes'];
14
- constructor(config: ImportConfig, log?: LogType);
13
+ constructor(config: ImportConfig);
15
14
  /**
16
15
  * The function asynchronously imports audiences from a JSON file and creates them in the system.
17
16
  */