@contentstack/cli-cm-bulk-publish 0.1.1-beta.3 → 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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +533 -281
  3. package/oclif.manifest.json +1 -1
  4. package/package.json +27 -12
  5. package/src/commands/cm/assets/publish.js +233 -0
  6. package/src/commands/cm/assets/unpublish.js +179 -0
  7. package/src/commands/cm/bulk-publish/cross-publish.js +187 -68
  8. package/src/commands/cm/bulk-publish/index.js +5 -6
  9. package/src/commands/cm/entries/publish-modified.js +197 -0
  10. package/src/commands/cm/entries/publish-non-localized-fields.js +208 -0
  11. package/src/commands/cm/entries/publish-only-unpublished.js +109 -0
  12. package/src/commands/cm/entries/publish.js +254 -0
  13. package/src/commands/cm/entries/unpublish.js +184 -0
  14. package/src/commands/cm/entries/update-and-publish.js +191 -0
  15. package/src/commands/cm/stacks/publish-clear-logs.js +82 -0
  16. package/src/commands/cm/stacks/publish-configure.js +46 -0
  17. package/src/commands/cm/stacks/publish-revert.js +102 -0
  18. package/src/commands/cm/stacks/publish.js +110 -0
  19. package/src/commands/cm/stacks/unpublish.js +282 -0
  20. package/src/config/index.js +60 -99
  21. package/src/consumer/publish.js +600 -377
  22. package/src/producer/add-fields.js +209 -189
  23. package/src/producer/cross-publish.js +195 -136
  24. package/src/producer/nonlocalized-field-changes.js +235 -216
  25. package/src/producer/publish-assets.js +104 -98
  26. package/src/producer/publish-edits.js +126 -113
  27. package/src/producer/publish-entries.js +135 -112
  28. package/src/producer/publish-unpublished-env.js +126 -114
  29. package/src/producer/revert.js +261 -230
  30. package/src/producer/unpublish.js +175 -137
  31. package/src/services/publish-only-unpublished.js +130 -0
  32. package/src/util/client.js +21 -17
  33. package/src/util/command-helper.js +25 -0
  34. package/src/util/fs.js +10 -11
  35. package/src/util/index.js +15 -16
  36. package/src/util/logger.js +21 -25
  37. package/src/util/queue.js +13 -13
  38. package/src/util/retryfailed.js +8 -4
  39. package/src/util/store.js +44 -52
  40. package/src/commands/cm/bulk-publish/add-fields.js +0 -117
  41. package/src/commands/cm/bulk-publish/assets.js +0 -117
  42. package/src/commands/cm/bulk-publish/clear.js +0 -63
  43. package/src/commands/cm/bulk-publish/configure.js +0 -46
  44. package/src/commands/cm/bulk-publish/entries.js +0 -125
  45. package/src/commands/cm/bulk-publish/entry-edits.js +0 -123
  46. package/src/commands/cm/bulk-publish/nonlocalized-field-changes.js +0 -116
  47. package/src/commands/cm/bulk-publish/revert.js +0 -81
  48. package/src/commands/cm/bulk-publish/unpublish.js +0 -164
  49. package/src/commands/cm/bulk-publish/unpublished-entries.js +0 -122
  50. package/src/util/request.js +0 -57
@@ -1,131 +1,137 @@
1
1
  /* eslint-disable no-console */
2
2
  /* eslint-disable new-cap */
3
3
  /* eslint-disable camelcase */
4
- const {getQueue} = require('../util/queue')
5
- const {bulkPublish, publishAsset, initializeLogger} = require('../consumer/publish')
6
- const retryFailedLogs = require('../util/retryfailed')
7
- const {validateFile} = require('../util/fs')
8
- const {setDelayForBulkPublish} = require('../util')
9
- const {isEmpty} = require('../util')
4
+ const { getQueue } = require('../util/queue');
5
+ const { performBulkPublish, publishAsset, initializeLogger } = require('../consumer/publish');
6
+ const retryFailedLogs = require('../util/retryfailed');
7
+ const { validateFile } = require('../util/fs');
8
+ const { isEmpty } = require('../util');
10
9
 
11
- const queue = getQueue()
12
- let logFileName
13
- let bulkPublishSet = []
14
- let filePath
10
+ const queue = getQueue();
11
+ let logFileName;
12
+ let bulkPublishSet = [];
13
+ let filePath;
15
14
 
16
15
  /* eslint-disable no-param-reassign */
17
16
 
18
17
  async function getAssets(stack, folder, bulkPublish, environments, locale, skip = 0) {
19
18
  return new Promise((resolve, reject) => {
20
- let queryParams = {
21
- folder: folder,
22
- skip: skip,
23
- include_count: true,
24
- include_folders: true,
25
- include_publish_details: true,
26
- }
27
- stack.asset().query(queryParams).find()
28
- .then(async assetResponse => {
29
- if (assetResponse && assetResponse.items.length > 0) {
30
- skip += assetResponse.items.length
31
- let assets = assetResponse.items
32
- for(let index = 0; index < assetResponse.items.length; index++) {
33
- if (assets[index].is_dir === true) {
34
- await getAssets(stack, assets[index].uid, bulkPublish, environments, locale, 0)
35
- continue;
36
- }
37
- if (bulkPublish) {
38
- if (bulkPublishSet.length < 10) {
39
- bulkPublishSet.push({
40
- uid: assets[index].uid,
41
- locale,
42
- publish_details: assets[index].publish_details || [],
43
- })
44
- }
45
- if (bulkPublishSet.length === 10) {
46
- await queue.Enqueue({assets: bulkPublishSet, Type: 'asset', environments: environments, locale, stack: stack})
47
- bulkPublishSet = []
19
+ let queryParams = {
20
+ folder: folder,
21
+ skip: skip,
22
+ include_count: true,
23
+ include_folders: true,
24
+ include_publish_details: true,
25
+ };
26
+ stack
27
+ .asset()
28
+ .query(queryParams)
29
+ .find()
30
+ .then(async (assetResponse) => {
31
+ if (assetResponse && assetResponse.items.length > 0) {
32
+ skip += assetResponse.items.length;
33
+ let assets = assetResponse.items;
34
+ for (let index = 0; index < assetResponse.items.length; index++) {
35
+ if (assets[index].is_dir === true) {
36
+ await getAssets(stack, assets[index].uid, bulkPublish, environments, locale, 0);
37
+ continue;
48
38
  }
39
+ if (bulkPublish) {
40
+ if (bulkPublishSet.length < 10) {
41
+ bulkPublishSet.push({
42
+ uid: assets[index].uid,
43
+ locale,
44
+ publish_details: assets[index].publish_details || [],
45
+ });
46
+ }
47
+ if (bulkPublishSet.length === 10) {
48
+ await queue.Enqueue({
49
+ assets: bulkPublishSet,
50
+ Type: 'asset',
51
+ environments: environments,
52
+ locale,
53
+ stack: stack,
54
+ });
55
+ bulkPublishSet = [];
56
+ }
49
57
 
50
- if (assetResponse.items.length - 1 === index && bulkPublishSet.length > 0 && bulkPublishSet.length < 10) {
51
- await queue.Enqueue({assets: bulkPublishSet, Type: 'asset', environments: environments, locale, stack: stack})
52
- bulkPublishSet = []
58
+ if (assetResponse.items.length - 1 === index && bulkPublishSet.length > 0 && bulkPublishSet.length < 10) {
59
+ await queue.Enqueue({
60
+ assets: bulkPublishSet,
61
+ Type: 'asset',
62
+ environments: environments,
63
+ locale,
64
+ stack: stack,
65
+ });
66
+ bulkPublishSet = [];
67
+ }
68
+ } else {
69
+ await queue.Enqueue({
70
+ assetUid: assets[index].uid,
71
+ publish_details: assets[index].publish_details || [],
72
+ environments: environments,
73
+ Type: 'asset',
74
+ locale,
75
+ stack: stack,
76
+ });
53
77
  }
54
- } else {
55
- await queue.Enqueue({
56
- assetUid: assets[index].uid, publish_details: assets[index].publish_details || [], environments: environments, Type: 'asset', locale, stack: stack
57
- })
58
78
  }
59
- // return resolve()
60
- }
61
- if (skip === assetResponse.count) {
62
- return resolve(true)
79
+ if (skip === assetResponse.count) {
80
+ return resolve(true);
81
+ }
82
+ await getAssets(stack, folder, bulkPublish, environments, locale, skip);
83
+ return resolve();
63
84
  }
64
- await getAssets(stack, folder, bulkPublish, environments, locale, skip)
65
- return resolve()
66
- } else {
67
- // throw new Error(JSON.stringify({errorMessage: "No Assets found"}))
68
- }
69
- })
70
- .catch(error => {
71
- reject(error)
72
85
  })
73
- })
74
-
75
- return true
86
+ .catch((error) => {
87
+ reject(error);
88
+ });
89
+ });
76
90
  }
77
91
 
78
92
  function setConfig(conf, bp) {
79
93
  if (bp) {
80
- queue.consumer = bulkPublish
81
- logFileName = 'bulk-publish-assets'
94
+ queue.consumer = performBulkPublish;
95
+ logFileName = 'bulk-publish-assets';
82
96
  } else {
83
- queue.consumer = publishAsset
84
- logFileName = 'publish-assets'
97
+ queue.consumer = publishAsset;
98
+ logFileName = 'publish-assets';
85
99
  }
86
- config = conf
87
- queue.config = conf
88
- filePath = initializeLogger(logFileName)
100
+ config = conf;
101
+ queue.config = conf;
102
+ filePath = initializeLogger(logFileName);
89
103
  }
90
104
 
91
- async function start({retryFailed, bulkPublish, environments, folderUid, locales}, stack, config) {
105
+ async function start({ retryFailed, bulkPublish, environments, folderUid, locales }, stack, config) {
92
106
  process.on('beforeExit', async () => {
93
- const isErrorLogEmpty = await isEmpty(`${filePath}.error`)
94
- const isSuccessLogEmpty = await isEmpty(`${filePath}.success`)
107
+ const isErrorLogEmpty = await isEmpty(`${filePath}.error`);
108
+ const isSuccessLogEmpty = await isEmpty(`${filePath}.success`);
95
109
  if (!isErrorLogEmpty) {
96
- console.log(`The error log for this session is stored at ${filePath}.error`)
110
+ console.log(`The error log for this session is stored at ${filePath}.error`);
97
111
  } else if (!isSuccessLogEmpty) {
98
- console.log(`The success log for this session is stored at ${filePath}.success`)
112
+ console.log(`The success log for this session is stored at ${filePath}.success`);
99
113
  }
100
- process.exit(0)
101
- })
114
+ process.exit(0);
115
+ });
102
116
 
103
- try {
104
- if (retryFailed) {
105
- if (!validateFile(retryFailed, ['publish-assets', 'bulk-publish-assets'])) {
106
- return false
107
- }
117
+ if (retryFailed) {
118
+ if (!validateFile(retryFailed, ['publish-assets', 'bulk-publish-assets'])) {
119
+ return false;
120
+ }
108
121
 
109
- bulkPublish = retryFailed.match(new RegExp('bulk')) ? true : false
110
- setConfig(config, bulkPublish)
122
+ bulkPublish = retryFailed.match(new RegExp('bulk')) ? true : false;
123
+ setConfig(config, bulkPublish);
111
124
 
112
- if (bulkPublish) {
113
- await retryFailedLogs(retryFailed, queue, 'bulk')
114
- } else {
115
- await retryFailedLogs(retryFailed, {assetQueue: queue}, 'publish')
116
- }
117
- } else if (folderUid) {
118
- setConfig(config, bulkPublish)
119
- for (let loc = 0; loc < locales.length; loc += 1) {
120
- try {
121
- await getAssets(stack, folderUid, bulkPublish, environments, locales[loc])
122
- } catch(error) {
123
- throw error
124
- }
125
- }
125
+ if (bulkPublish) {
126
+ await retryFailedLogs(retryFailed, queue, 'bulk');
127
+ } else {
128
+ await retryFailedLogs(retryFailed, { assetQueue: queue }, 'publish');
129
+ }
130
+ } else if (folderUid) {
131
+ setConfig(config, bulkPublish);
132
+ for (const element of locales) {
133
+ await getAssets(stack, folderUid, bulkPublish, environments, element);
126
134
  }
127
- } catch (error) {
128
- throw error
129
135
  }
130
136
  }
131
137
 
@@ -133,4 +139,4 @@ module.exports = {
133
139
  getAssets,
134
140
  setConfig,
135
141
  start,
136
- }
142
+ };
@@ -4,163 +4,176 @@
4
4
  /* eslint-disable no-console */
5
5
  /* eslint-disable max-params */
6
6
  /* eslint-disable camelcase */
7
- const {getQueue} = require('../util/queue')
8
- const {bulkPublish, publishEntry, initializeLogger} = require('../consumer/publish')
9
- const retryFailedLogs = require('../util/retryfailed')
10
- const {validateFile} = require('../util/fs')
11
- const {setDelayForBulkPublish} = require('../util')
12
- const {isEmpty} = require('../util')
7
+ const { getQueue } = require('../util/queue');
8
+ const { performBulkPublish, publishEntry, initializeLogger } = require('../consumer/publish');
9
+ const retryFailedLogs = require('../util/retryfailed');
10
+ const { validateFile } = require('../util/fs');
11
+ const { setDelayForBulkPublish } = require('../util');
12
+ const { isEmpty } = require('../util');
13
13
 
14
- let skipCount
15
- const queue = getQueue()
16
- let changedFlag = false
17
- let bulkPublishSet = []
18
- let logFileName
19
- let filePath
14
+ let skipCount;
15
+ const queue = getQueue();
16
+ let changedFlag = false;
17
+ let bulkPublishSet = [];
18
+ let logFileName;
19
+ let filePath;
20
20
 
21
21
  async function getEnvironment(stack, environmentName) {
22
22
  return new Promise((resolve, reject) => {
23
- stack.environment(environmentName).fetch()
24
- .then(env => {
25
- resolve(env)
26
- })
27
- .catch(error => reject(error))
28
- })
23
+ stack
24
+ .environment(environmentName)
25
+ .fetch()
26
+ .then((env) => {
27
+ resolve(env);
28
+ })
29
+ .catch((error) => reject(error));
30
+ });
29
31
  }
30
32
 
31
33
  async function getEntries(stack, contentType, environmentUid, locale, bulkPublish, environments, skip = 0) {
32
34
  return new Promise((resolve, reject) => {
33
- skipCount = skip
35
+ skipCount = skip;
34
36
 
35
37
  let queryParams = {
36
38
  include_count: true,
37
39
  skip: skipCount,
38
40
  include_publish_details: true,
39
41
  locale,
40
- }
42
+ };
41
43
 
42
- stack.contentType(contentType).entry().query(queryParams).find()
43
- .then(async responseEntries => {
44
- skipCount += responseEntries.items.length
45
- if (responseEntries.items.length > 0) {
46
- let entries = responseEntries.items
47
- for (let index = 0; index < responseEntries.items.length; index++) {
48
- const publishedEntry = entries[index].publish_details.find(publishEnv => publishEnv.environment === environmentUid && publishEnv.locale === locale)
49
- if (publishedEntry && publishedEntry.version < entries[index]._version) {
50
- changedFlag = true
51
- if (bulkPublish) {
52
- if (bulkPublishSet.length < 10) {
53
- bulkPublishSet.push({
54
- uid: entries[index].uid,
44
+ stack
45
+ .contentType(contentType)
46
+ .entry()
47
+ .query(queryParams)
48
+ .find()
49
+ .then(async (responseEntries) => {
50
+ skipCount += responseEntries.items.length;
51
+ if (responseEntries.items.length > 0) {
52
+ let entries = responseEntries.items;
53
+ for (let index = 0; index < responseEntries.items.length; index++) {
54
+ const publishedEntry = entries[index].publish_details.find(
55
+ (publishEnv) => publishEnv.environment === environmentUid && publishEnv.locale === locale,
56
+ );
57
+ if (publishedEntry && publishedEntry.version < entries[index]._version) {
58
+ changedFlag = true;
59
+ if (bulkPublish) {
60
+ if (bulkPublishSet.length < 10) {
61
+ bulkPublishSet.push({
62
+ uid: entries[index].uid,
63
+ content_type: contentType,
64
+ locale,
65
+ publish_details: entries[index].publish_details || [],
66
+ });
67
+ }
68
+ } else {
69
+ await queue.Enqueue({
55
70
  content_type: contentType,
56
- locale,
57
71
  publish_details: entries[index].publish_details || [],
58
- })
72
+ environments: environments,
73
+ entryUid: entries[index].uid,
74
+ locale,
75
+ Type: 'entry',
76
+ stack: stack,
77
+ });
59
78
  }
60
- } else {
79
+ }
80
+ if (bulkPublishSet.length === 10) {
61
81
  await queue.Enqueue({
62
- content_type: contentType, publish_details: entries[index].publish_details || [], environments: environments, entryUid: entries[index].uid, locale, Type: 'entry', stack: stack
63
- })
82
+ entries: bulkPublishSet,
83
+ locale,
84
+ Type: 'entry',
85
+ environments: environments,
86
+ stack: stack,
87
+ });
88
+ bulkPublishSet = [];
89
+ }
90
+ if (
91
+ index === responseEntries.items.length - 1 &&
92
+ bulkPublishSet.length > 0 &&
93
+ bulkPublishSet.length <= 10
94
+ ) {
95
+ await queue.Enqueue({
96
+ entries: bulkPublishSet,
97
+ locale,
98
+ Type: 'entry',
99
+ environments: environments,
100
+ stack: stack,
101
+ });
102
+ bulkPublishSet = [];
64
103
  }
65
- }
66
- if (bulkPublishSet.length === 10) {
67
- await queue.Enqueue({
68
- entries: bulkPublishSet, locale, Type: 'entry', environments: environments, stack: stack
69
- })
70
- bulkPublishSet = []
71
- }
72
- if (index === responseEntries.items.length - 1 && bulkPublishSet.length > 0 && bulkPublishSet.length <= 10) {
73
- await queue.Enqueue({
74
- entries: bulkPublishSet, locale, Type: 'entry', environments: environments, stack: stack
75
- })
76
- bulkPublishSet = []
77
104
  }
78
105
  }
79
- }
80
- if (responseEntries.count === skipCount) {
81
- if (!changedFlag) console.log(`No Edits Were observed on specified Environment for contentType ${contentType}`)
82
- bulkPublishSet = []
83
- return resolve()
84
- }
85
- await getEntries(stack, contentType, environmentUid, locale, bulkPublish, environments, skipCount)
86
- return resolve()
87
- })
88
- .catch(error =>{
89
- reject(error)
90
- })
91
- })
106
+ if (responseEntries.count === skipCount) {
107
+ if (!changedFlag)
108
+ console.log(`No Edits Were observed on specified Environment for contentType ${contentType}`);
109
+ bulkPublishSet = [];
110
+ return resolve();
111
+ }
112
+ await getEntries(stack, contentType, environmentUid, locale, bulkPublish, environments, skipCount);
113
+ return resolve();
114
+ })
115
+ .catch((error) => {
116
+ reject(error);
117
+ });
118
+ });
92
119
  }
93
120
 
94
121
  function setConfig(conf, bp) {
95
122
  if (bp) {
96
- logFileName = 'bulk-publish-edits'
97
- queue.consumer = bulkPublish
123
+ logFileName = 'bulk-publish-edits';
124
+ queue.consumer = performBulkPublish;
98
125
  } else {
99
- logFileName = 'publish-edits'
100
- queue.consumer = publishEntry
126
+ logFileName = 'publish-edits';
127
+ queue.consumer = publishEntry;
101
128
  }
102
- config = conf
103
- queue.config = config
104
- filePath = initializeLogger(logFileName)
129
+ config = conf;
130
+ queue.config = config;
131
+ filePath = initializeLogger(logFileName);
105
132
  }
106
133
 
107
- async function start({retryFailed, bulkPublish, sourceEnv, contentTypes, locales, environments}, stack, config) {
134
+ async function start({ retryFailed, bulkPublish, sourceEnv, contentTypes, locales, environments }, stack, config) {
108
135
  process.on('beforeExit', async () => {
109
- const isErrorLogEmpty = await isEmpty(`${filePath}.error`)
110
- const isSuccessLogEmpty = await isEmpty(`${filePath}.success`)
136
+ const isErrorLogEmpty = await isEmpty(`${filePath}.error`);
137
+ const isSuccessLogEmpty = await isEmpty(`${filePath}.success`);
111
138
  if (!isErrorLogEmpty) {
112
- console.log(`The error log for this session is stored at ${filePath}.error`)
139
+ console.log(`The error log for this session is stored at ${filePath}.error`);
113
140
  } else if (!isSuccessLogEmpty) {
114
- console.log(`The success log for this session is stored at ${filePath}.success`)
141
+ console.log(`The success log for this session is stored at ${filePath}.success`);
115
142
  }
116
- process.exit(0)
117
- })
143
+ process.exit(0);
144
+ });
118
145
 
119
- try {
120
- if (retryFailed) {
121
- if (typeof retryFailed === 'string') {
122
- if (!validateFile(retryFailed, ['publish-edits', 'bulk-publish-edits'])) {
123
- return false
124
- }
125
-
126
- bulkPublish = retryFailed.match(new RegExp('bulk')) ? true : false
127
- setConfig(config, bulkPublish)
146
+ if (retryFailed) {
147
+ if (typeof retryFailed === 'string') {
148
+ if (!validateFile(retryFailed, ['publish-edits', 'bulk-publish-edits'])) {
149
+ return false;
150
+ }
128
151
 
129
- if (bulkPublish) {
130
- await retryFailedLogs(retryFailed, queue, 'bulk')
131
- } else {
132
- await retryFailedLogs(retryFailed, {entryQueue: queue}, 'publish')
133
- }
152
+ bulkPublish = retryFailed.match(new RegExp('bulk')) ? true : false;
153
+ setConfig(config, bulkPublish);
154
+
155
+ if (bulkPublish) {
156
+ await retryFailedLogs(retryFailed, queue, 'bulk');
157
+ } else {
158
+ await retryFailedLogs(retryFailed, { entryQueue: queue }, 'publish');
134
159
  }
135
- } else if (sourceEnv) {
136
- setConfig(config, bulkPublish)
137
- try {
138
- const environmentDetails = await getEnvironment(stack, sourceEnv)
139
- for (let i = 0; i < contentTypes.length; i += 1) {
140
- for (let j = 0; j < locales.length; j += 1) {
141
- try {
142
- /* eslint-disable no-await-in-loop */
143
- await getEntries(stack, contentTypes[i], environmentDetails.uid, locales[j], bulkPublish, environments)
144
- /* eslint-enable no-await-in-loop */
145
- } catch (error) {
146
- throw error
147
- }
148
- }
149
- }
150
- } catch (error) {
151
- throw error
160
+ }
161
+ } else if (sourceEnv) {
162
+ setConfig(config, bulkPublish);
163
+ const environmentDetails = await getEnvironment(stack, sourceEnv);
164
+ for (let i = 0; i < contentTypes.length; i += 1) {
165
+ for (let j = 0; j < locales.length; j += 1) {
166
+ /* eslint-disable no-await-in-loop */
167
+ await getEntries(stack, contentTypes[i], environmentDetails.uid, locales[j], bulkPublish, environments);
168
+ /* eslint-enable no-await-in-loop */
152
169
  }
153
170
  }
154
- } catch(error) {
155
- throw error
156
171
  }
157
172
  }
158
173
 
159
- // start();
160
-
161
174
  module.exports = {
162
175
  getEntries,
163
176
  getEnvironment,
164
177
  setConfig,
165
178
  start,
166
- }
179
+ };