@contentstack/cli-cm-import 0.1.1-beta.7 → 1.0.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.
@@ -9,22 +9,21 @@ const fs = require('fs');
9
9
  const path = require('path');
10
10
  const Promise = require('bluebird');
11
11
  const chalk = require('chalk');
12
- const _ = require('lodash')
12
+ const {isEmpty} = require('lodash');
13
13
 
14
14
  const helper = require('../util/fs');
15
15
  const { addlogs } = require('../util/log');
16
- let config = require('../../config/default')
17
- let stack = require('../util/contentstack-management-sdk')
16
+ let config = require('../../config/default');
17
+ let stack = require('../util/contentstack-management-sdk');
18
18
 
19
19
  let reqConcurrency = config.concurrency;
20
20
  let labelConfig = config.modules.labels;
21
- let labelsFolderPath
22
- let labelMapperPath
23
- let labelUidMapperPath
24
- let labelSuccessPath
25
- let labelFailsPath
26
- let client
27
-
21
+ let labelsFolderPath;
22
+ let labelMapperPath;
23
+ let labelUidMapperPath;
24
+ let labelSuccessPath;
25
+ let labelFailsPath;
26
+ let client;
28
27
 
29
28
  function importLabels() {
30
29
  this.fails = [];
@@ -40,10 +39,10 @@ function importLabels() {
40
39
  importLabels.prototype = {
41
40
  start: function (credentialConfig) {
42
41
  let self = this;
43
- config = credentialConfig
44
- client = stack.Client(config)
45
- addlogs(config, chalk.white('Migrating labels'), 'success')
46
- labelsFolderPath = path.resolve(config.data, labelConfig.dirName)
42
+ config = credentialConfig;
43
+ client = stack.Client(config);
44
+ addlogs(config, chalk.white('Migrating labels'), 'success');
45
+ labelsFolderPath = path.resolve(config.data, labelConfig.dirName);
47
46
  self.labels = helper.readFile(path.resolve(labelsFolderPath, labelConfig.fileName));
48
47
  labelMapperPath = path.resolve(config.data, 'mapper', 'labels');
49
48
  labelUidMapperPath = path.resolve(config.data, 'mapper', 'labels', 'uid-mapping.json');
@@ -51,63 +50,74 @@ importLabels.prototype = {
51
50
  labelFailsPath = path.resolve(config.data, 'labels', 'fails.json');
52
51
  mkdirp.sync(labelMapperPath);
53
52
  return new Promise(function (resolve, reject) {
54
- if (self.labels == undefined) {
55
- addlogs(config, chalk.white('No Label Found'), 'error');
56
- return resolve();
53
+ if (self.labels == undefined || isEmpty(self.labels)) {
54
+ addlogs(config, chalk.white('No Label Found'), 'success');
55
+ return resolve({ empty: true });
57
56
  }
58
57
  self.labelUids = Object.keys(self.labels);
59
- return Promise.map(self.labelUids, function (labelUid) {
60
- let label = self.labels[labelUid];
61
- if (label.parent.length != 0) {
62
- delete label['parent'];
63
- }
58
+ return Promise.map(
59
+ self.labelUids,
60
+ function (labelUid) {
61
+ let label = self.labels[labelUid];
62
+ if (label.parent.length != 0) {
63
+ delete label['parent'];
64
+ }
64
65
 
65
- if (!self.labelUidMapper.hasOwnProperty(labelUid)) {
66
- let requestOption = {
67
- label: label
68
- };
66
+ if (!self.labelUidMapper.hasOwnProperty(labelUid)) {
67
+ let requestOption = {
68
+ label: label,
69
+ };
69
70
 
70
- // return self.createLabels(self.labels[labelUid]);
71
- return client.stack({ api_key: config.target_stack, management_token: config.management_token }).label().create(requestOption)
72
- .then(function (response) {
73
- self.labelUidMapper[labelUid] = response;
74
- helper.writeFile(labelUidMapperPath, self.labelUidMapper);
75
- return;
76
- }).catch(function (error) {
77
- self.fails.push(label);
78
- // addlogs(config, chalk.red('Label: \'' + label.name + '\' failed to be imported\n'), 'error');
79
- if (error.errors.name) {
80
- addlogs(config, chalk.red('Label: \'' + label.name + '\' already exist'), 'error');
81
- } else {
82
- addlogs(config, chalk.red('Label: \'' + label.name + '\' failed to be imported\n'), 'error');
83
- }
84
- return;
71
+ return client
72
+ .stack({ api_key: config.target_stack, management_token: config.management_token })
73
+ .label()
74
+ .create(requestOption)
75
+ .then(function (response) {
76
+ self.labelUidMapper[labelUid] = response;
77
+ helper.writeFile(labelUidMapperPath, self.labelUidMapper);
78
+ })
79
+ .catch(function (error) {
80
+ self.fails.push(label);
81
+ if (error.errors.name) {
82
+ addlogs(config, chalk.red("Label: '" + label.name + "' already exist"), 'error');
83
+ } else {
84
+ addlogs(config, chalk.red("Label: '" + label.name + "' failed to be imported\n"), 'error');
85
+ }
86
+ });
87
+ } else {
88
+ // the label has already been created
89
+ addlogs(
90
+ config,
91
+ chalk.white("The label: '" + label.name + "' already exists. Skipping it to avoid duplicates!"),
92
+ 'success',
93
+ );
94
+ }
95
+ // import 1 labels at a time
96
+ },
97
+ {
98
+ concurrency: reqConcurrency,
99
+ },
100
+ )
101
+ .then(function () {
102
+ // eslint-disable-next-line no-undef
103
+ return self
104
+ .updateLabels()
105
+ .then(function () {
106
+ helper.writeFile(labelSuccessPath, self.success);
107
+ addlogs(config, chalk.green('Labels have been imported successfully!'), 'success');
108
+ return resolve();
109
+ })
110
+ .catch(function (error) {
111
+ // eslint-disable-next-line no-console
112
+ return reject(error);
85
113
  });
86
- } else {
87
- // the label has already been created
88
- addlogs(config, (chalk.white('The label: \'' + label.name +
89
- '\' already exists. Skipping it to avoid duplicates!')), 'success');
90
- return;
91
- }
92
- // import 1 labels at a time
93
- }, {
94
- concurrency: reqConcurrency
95
- }).then(function () {
96
- // eslint-disable-next-line no-undef
97
- return self.updateLabels().then(function () {
98
- helper.writeFile(labelSuccessPath, self.success);
99
- addlogs(config, (chalk.green('Labels have been imported successfully!')), 'success');
100
- return resolve();
101
- }).catch(function (error) {
102
- // eslint-disable-next-line no-console
114
+ })
115
+ .catch(function (error) {
116
+ // error while importing labels
117
+ helper.writeFile(labelFailsPath, self.fails);
118
+ addlogs(config, chalk.red('Label import failed'), 'error');
103
119
  return reject(error);
104
120
  });
105
- }).catch(function (error) {
106
- // error while importing labels
107
- helper.writeFile(labelFailsPath, self.fails);
108
- addlogs(config, chalk.red('Label import failed'), 'error');
109
- return reject(error);
110
- });
111
121
  });
112
122
  },
113
123
 
@@ -115,43 +125,53 @@ importLabels.prototype = {
115
125
  let self = this;
116
126
  return new Promise(function (resolve, reject) {
117
127
  let labelsObj = helper.readFile(path.resolve(labelsFolderPath, labelConfig.fileName));
118
- return Promise.map(self.labelUids, function (labelUid) {
119
- let label = labelsObj[labelUid];
120
- if (self.labelUidMapper.hasOwnProperty(labelUid)) {
121
- let newLabelUid = self.labelUidMapper[labelUid];
122
- if (label.parent.length > 0) {
123
- let parentUids = label.parent;
124
- for (let i = 0; i < parentUids.length; i++) {
125
- if (self.labelUidMapper.hasOwnProperty(parentUids[i])) {
126
- label.parent[i] = self.labelUidMapper[parentUids[i]].uid;
128
+ return Promise.map(
129
+ self.labelUids,
130
+ function (labelUid) {
131
+ let label = labelsObj[labelUid];
132
+ if (self.labelUidMapper.hasOwnProperty(labelUid)) {
133
+ let newLabelUid = self.labelUidMapper[labelUid];
134
+ if (label.parent.length > 0) {
135
+ let parentUids = label.parent;
136
+ for (let i = 0; i < parentUids.length; i++) {
137
+ if (self.labelUidMapper.hasOwnProperty(parentUids[i])) {
138
+ label.parent[i] = self.labelUidMapper[parentUids[i]].uid;
139
+ }
127
140
  }
141
+ return client
142
+ .stack({ api_key: config.target_stack, management_token: config.management_token })
143
+ .label(newLabelUid.uid)
144
+ .fetch()
145
+ .then(function (response) {
146
+ //Object.assign(response, _.cloneDeep(label))
147
+ response.parent = label.parent;
148
+ response
149
+ .update()
150
+ .then((result) => {
151
+ self.success.push(result);
152
+ })
153
+ .catch((error) => {
154
+ return reject(error);
155
+ });
156
+ })
157
+ .catch(function (error) {
158
+ return reject(error);
159
+ });
128
160
  }
129
- return client.stack({ api_key: config.target_stack, management_token: config.management_token }).label(newLabelUid.uid).fetch()
130
- .then(function (response) {
131
- //Object.assign(response, _.cloneDeep(label))
132
- response.parent = label.parent
133
- response.update().then((result) => {
134
- self.success.push(result);
135
- }).catch(error => {
136
- return reject(error);
137
- })
138
- }).catch(function (error) {
139
- return reject(error);
140
- });
141
161
  }
142
-
143
-
144
- }
145
- }, {
146
- concurrency: reqConcurrency
147
- }).then(function () {
148
- return resolve();
149
-
150
- }).catch(function (error) {
151
- // eslint-disable-next-line no-console
152
- return reject(error);
153
- });
162
+ },
163
+ {
164
+ concurrency: reqConcurrency,
165
+ },
166
+ )
167
+ .then(function () {
168
+ return resolve();
169
+ })
170
+ .catch(function (error) {
171
+ // eslint-disable-next-line no-console
172
+ return reject(error);
173
+ });
154
174
  });
155
- }
175
+ },
156
176
  };
157
177
  module.exports = new importLabels();
@@ -5,135 +5,148 @@
5
5
  * MIT Licensed
6
6
  */
7
7
 
8
- let mkdirp = require('mkdirp')
9
- let fs = require('fs')
10
- let path = require('path')
11
- let Promise = require('bluebird')
12
- let chalk = require('chalk')
8
+ let mkdirp = require('mkdirp');
9
+ let fs = require('fs');
10
+ let path = require('path');
11
+ let Promise = require('bluebird');
12
+ let chalk = require('chalk');
13
13
 
14
- let helper = require('../util/fs')
15
- let {addlogs} = require('../util/log')
16
- let util = require('../util')
17
- let stack = require('../util/contentstack-management-sdk')
18
- let config = require('../../config/default')
19
- let _ = require('lodash')
20
- let reqConcurrency = config.concurrency
21
- let langConfig = config.modules.locales
22
- let langFolderPath
23
- let langMapperPath
24
- let langUidMapperPath
25
- let langSuccessPath
26
- let langFailsPath
27
- let client
14
+ let helper = require('../util/fs');
15
+ let { addlogs } = require('../util/log');
16
+ let stack = require('../util/contentstack-management-sdk');
17
+ let config = require('../../config/default');
18
+ let {isEmpty, cloneDeep} = require('lodash');
19
+ let reqConcurrency = config.concurrency;
20
+ let langConfig = config.modules.locales;
21
+ let langFolderPath;
22
+ let langMapperPath;
23
+ let langUidMapperPath;
24
+ let langSuccessPath;
25
+ let langFailsPath;
26
+ let client;
28
27
 
29
- let masterLanguage = config.master_locale
28
+ let masterLanguage = config.master_locale;
30
29
 
31
30
  function importLanguages() {
32
- this.fails = []
33
- this.success = []
34
- this.langUidMapper = {}
31
+ this.fails = [];
32
+ this.success = [];
33
+ this.langUidMapper = {};
35
34
  }
36
35
 
37
36
  importLanguages.prototype = {
38
- start: function (credentialConfig) {
39
- addlogs(config, 'Migrating languages', 'success')
40
- let self = this
41
- config = credentialConfig
42
- client = stack.Client(config)
43
- langFolderPath = path.resolve(config.data, langConfig.dirName)
44
- langMapperPath = path.resolve(config.data, 'mapper', 'languages')
45
- langUidMapperPath = path.resolve(config.data, 'mapper', 'languages', 'uid-mapper.json')
46
- langSuccessPath = path.resolve(config.data, 'mapper', 'languages', 'success.json')
47
- langFailsPath = path.resolve(config.data, 'mapper', 'languages', 'fails.json')
48
- mkdirp.sync(langMapperPath)
49
- self.languages = helper.readFile(path.resolve(langFolderPath, langConfig.fileName))
37
+ start: function (credentialConfig) {
38
+ addlogs(config, 'Migrating languages', 'success');
39
+ let self = this;
40
+ config = credentialConfig;
41
+ client = stack.Client(config);
42
+ langFolderPath = path.resolve(config.data, langConfig.dirName);
43
+ langMapperPath = path.resolve(config.data, 'mapper', 'languages');
44
+ langUidMapperPath = path.resolve(config.data, 'mapper', 'languages', 'uid-mapper.json');
45
+ langSuccessPath = path.resolve(config.data, 'mapper', 'languages', 'success.json');
46
+ langFailsPath = path.resolve(config.data, 'mapper', 'languages', 'fails.json');
47
+ mkdirp.sync(langMapperPath);
48
+ self.languages = helper.readFile(path.resolve(langFolderPath, langConfig.fileName));
50
49
  if (fs.existsSync(langUidMapperPath)) {
51
- self.langUidMapper = helper.readFile(langUidMapperPath)
52
- self.langUidMapper = self.langUidMapper || {}
50
+ self.langUidMapper = helper.readFile(langUidMapperPath);
51
+ self.langUidMapper = self.langUidMapper || {};
53
52
  }
54
53
 
55
54
  return new Promise(function (resolve, reject) {
56
- if (self.languages === undefined) {
57
- addlogs(config, chalk.white('No Languages Found'), 'error')
58
- return resolve()
55
+ if (self.languages === undefined || isEmpty(self.languages)) {
56
+ addlogs(config, chalk.white('No Languages Found'), 'success');
57
+ return resolve({ empty: true });
59
58
  }
60
- let langUids = Object.keys(self.languages)
61
- return Promise.map(langUids, function (langUid) {
62
- let lang = self.languages[langUid]
63
- if (!self.langUidMapper.hasOwnProperty(langUid) && (lang.code !== masterLanguage)) {
64
- let requestOption = {
65
- locale: {
66
- code: lang.code,
67
- name: lang.name,
68
- },
59
+ let langUids = Object.keys(self.languages);
60
+ return Promise.map(
61
+ langUids,
62
+ function (langUid) {
63
+ let lang = self.languages[langUid];
64
+ if (!self.langUidMapper.hasOwnProperty(langUid) && lang.code !== masterLanguage) {
65
+ let requestOption = {
66
+ locale: {
67
+ code: lang.code,
68
+ name: lang.name,
69
+ },
70
+ };
71
+
72
+ return client
73
+ .stack({ api_key: config.target_stack, management_token: config.management_token })
74
+ .locale()
75
+ .create(requestOption)
76
+ .then((locale) => {
77
+ self.success.push(locale.items);
78
+ self.langUidMapper[langUid] = locale.uid;
79
+ helper.writeFile(langUidMapperPath, self.langUidMapper);
80
+ })
81
+ .catch(function (err) {
82
+ let error = JSON.parse(err.message);
83
+ if (error.hasOwnProperty('errorCode') && error.errorCode === 247) {
84
+ addlogs(config, error.errors.code[0], 'success');
85
+ return;
86
+ }
87
+ self.fails.push(lang);
88
+ addlogs(config, chalk.red("Language: '" + lang.code + "' failed to be import\n"), 'error');
89
+ });
90
+ } else {
91
+ // the language has already been created
92
+ addlogs(config, chalk.yellow("The language: '" + lang.code + "' already exists."), 'error');
69
93
  }
70
-
71
- return client.stack({api_key: config.target_stack, management_token: config.management_token}).locale().create(requestOption)
72
- .then(locale => {
73
- self.success.push(locale.items)
74
- self.langUidMapper[langUid] = locale.uid
75
- helper.writeFile(langUidMapperPath, self.langUidMapper)
76
- }).catch(function (err) {
77
- let error = JSON.parse(err.message)
78
- if (error.hasOwnProperty('errorCode') && error.errorCode === 247) {
79
- addlogs(config, error.errors.code[0], 'success')
80
- return
81
- }
82
- self.fails.push(lang)
83
- addlogs(config, chalk.red('Language: \'' + lang.code + '\' failed to be import\n'), 'error')
84
- })
85
- } else {
86
- // the language has already been created
87
- addlogs(config, chalk.yellow('The language: \'' + lang.code + '\' already exists.'), 'error')
88
- }
89
94
 
90
- // import 2 languages at a time
91
- }, {
92
- concurrency: reqConcurrency,
93
- }).then(function () {
94
- // languages have imported successfully
95
- self.update_locales(langUids)
96
- .then(() => {
97
- helper.writeFile(langSuccessPath, self.success)
98
- addlogs(config, chalk.green('Languages have been imported successfully!'), 'success')
99
- return resolve()
100
- }).catch(function (error) {
101
- return reject(error)
95
+ // import 2 languages at a time
96
+ },
97
+ {
98
+ concurrency: reqConcurrency,
99
+ },
100
+ )
101
+ .then(function () {
102
+ // languages have imported successfully
103
+ self
104
+ .update_locales(langUids)
105
+ .then(() => {
106
+ helper.writeFile(langSuccessPath, self.success);
107
+ addlogs(config, chalk.green('Languages have been imported successfully!'), 'success');
108
+ return resolve();
109
+ })
110
+ .catch(function (error) {
111
+ return reject(error);
112
+ });
102
113
  })
103
-
104
- }).catch(function (error) {
105
- // error while importing languages
106
- helper.writeFile(langFailsPath, self.fails)
107
- addlogs(config, chalk.red('Language import failed'), 'error')
108
- return reject(error)
109
- })
110
- })
114
+ .catch(function (error) {
115
+ // error while importing languages
116
+ helper.writeFile(langFailsPath, self.fails);
117
+ addlogs(config, chalk.red('Language import failed'), 'error');
118
+ return reject(error);
119
+ });
120
+ });
111
121
  },
112
122
  update_locales: function (langUids) {
113
- let self = this
123
+ let self = this;
114
124
  return new Promise(function (resolve, reject) {
115
- Promise.all(
116
- langUids.map(async langUid => {
117
- let lang = {}
118
- let requireKeys = config.modules.locales.requiredKeys
119
- let _lang = self.languages[langUid]
120
- requireKeys.forEach(e => {
121
- lang[e] = _lang[e]
122
- })
123
- let langobj = client.stack({api_key: config.target_stack, management_token: config.management_token}).locale(lang.code)
124
- Object.assign(langobj, _.cloneDeep(lang))
125
- langobj.update()
126
- .then(()=>{
125
+ Promise.all(
126
+ langUids.map(async (langUid) => {
127
+ let lang = {};
128
+ let requireKeys = config.modules.locales.requiredKeys;
129
+ let _lang = self.languages[langUid];
130
+ requireKeys.forEach((e) => {
131
+ lang[e] = _lang[e];
132
+ });
133
+ let langobj = client
134
+ .stack({ api_key: config.target_stack, management_token: config.management_token })
135
+ .locale(lang.code);
136
+ Object.assign(langobj, cloneDeep(lang));
137
+ langobj.update().then(() => {
138
+ // empty function
139
+ });
140
+ }),
141
+ )
142
+ .then(() => {
143
+ return resolve();
127
144
  })
128
- })
129
- )
130
- .then(()=>{
131
- return resolve()
132
- }).catch((error) => {
133
- return reject(error)
134
- })
135
- })
145
+ .catch((error) => {
146
+ return reject(error);
147
+ });
148
+ });
136
149
  },
137
- }
150
+ };
138
151
 
139
- module.exports = new importLanguages()
152
+ module.exports = new importLanguages();