@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.
- package/LICENSE +21 -0
- package/README.md +54 -23
- package/oclif.manifest.json +1 -1
- package/package.json +70 -66
- package/src/app.js +170 -103
- package/src/commands/cm/stacks/import.js +186 -0
- package/src/config/default.js +17 -57
- package/src/lib/import/assets.js +347 -281
- package/src/lib/import/content-types.js +203 -172
- package/src/lib/import/entries.js +1274 -681
- package/src/lib/import/environments.js +97 -82
- package/src/lib/import/extensions.js +95 -77
- package/src/lib/import/global-fields.js +114 -103
- package/src/lib/import/labels.js +118 -98
- package/src/lib/import/locales.js +124 -111
- package/src/lib/import/webhooks.js +76 -59
- package/src/lib/import/workflows.js +88 -68
- package/src/lib/util/contentstack-management-sdk.js +21 -8
- package/src/lib/util/extensionsUidReplace.js +34 -22
- package/src/lib/util/fs.js +3 -4
- package/src/lib/util/import-flags.js +150 -111
- package/src/lib/util/index.js +134 -130
- package/src/lib/util/log.js +73 -35
- package/src/lib/util/login.js +37 -36
- package/src/lib/util/lookupReplaceAssets.js +167 -61
- package/src/lib/util/lookupReplaceEntries.js +144 -66
- package/src/lib/util/removeReferenceFields.js +29 -26
- package/src/lib/util/schemaTemplate.js +31 -33
- package/src/lib/util/supress-mandatory-fields.js +14 -8
- package/src/lib/util/upload.js +29 -28
- package/src/commands/cm/import.js +0 -159
- package/src/lib/import/.DS_Store +0 -0
- package/src/lib/util/request.js +0 -82
package/src/lib/import/labels.js
CHANGED
|
@@ -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
|
|
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'), '
|
|
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(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
if (!self.labelUidMapper.hasOwnProperty(labelUid)) {
|
|
67
|
+
let requestOption = {
|
|
68
|
+
label: label,
|
|
69
|
+
};
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
let
|
|
122
|
-
if (
|
|
123
|
-
let
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
|
17
|
-
let
|
|
18
|
-
let
|
|
19
|
-
let
|
|
20
|
-
let
|
|
21
|
-
let
|
|
22
|
-
let
|
|
23
|
-
let
|
|
24
|
-
let
|
|
25
|
-
let
|
|
26
|
-
let
|
|
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'), '
|
|
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(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
let
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
.then(()
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
let requireKeys = config.modules.locales.requiredKeys
|
|
119
|
-
let _lang = self.languages[langUid]
|
|
120
|
-
requireKeys.forEach(e => {
|
|
121
|
-
lang[e] = _lang[e]
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
131
|
-
|
|
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();
|