@hcl-software/dxclient 222.0.0 → 224.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 (57) hide show
  1. package/README.md +187 -0
  2. package/dist/configuration/config.json +1 -0
  3. package/dist/configuration/versionConfigMap.json +1 -0
  4. package/dist/package.json +11 -11
  5. package/dist/packages/admintasks/src/commands/restartDXCore.js +18 -9
  6. package/dist/packages/admintasks/src/commands/restartDXCore.js.map +1 -1
  7. package/dist/packages/admintasks/src/errors/CommandLineMessages_en.json +1 -0
  8. package/dist/packages/livesync/src/commands/pullWcmDesignLibrary.d.ts +3 -2
  9. package/dist/packages/livesync/src/commands/pullWcmDesignLibrary.js +221 -75
  10. package/dist/packages/livesync/src/commands/pullWcmDesignLibrary.js.map +1 -1
  11. package/dist/packages/livesync/src/commands/pushTheme.js +8 -0
  12. package/dist/packages/livesync/src/commands/pushTheme.js.map +1 -1
  13. package/dist/packages/livesync/src/commands/pushWcmDesignLibrary.d.ts +5 -2
  14. package/dist/packages/livesync/src/commands/pushWcmDesignLibrary.js +325 -164
  15. package/dist/packages/livesync/src/commands/pushWcmDesignLibrary.js.map +1 -1
  16. package/dist/packages/livesync/src/errors/CommandLineMessages_en.json +45 -42
  17. package/dist/packages/livesync/src/messages/messages_en.json +11 -7
  18. package/dist/packages/livesync/src/services/EventsQueue.d.ts +1 -0
  19. package/dist/packages/livesync/src/services/EventsQueue.js +9 -2
  20. package/dist/packages/livesync/src/services/EventsQueue.js.map +1 -1
  21. package/dist/packages/livesync/src/services/foldersWcmServices.js +36 -6
  22. package/dist/packages/livesync/src/services/foldersWcmServices.js.map +1 -1
  23. package/dist/packages/livesync/src/services/htmlComponentWcmServices.js +34 -6
  24. package/dist/packages/livesync/src/services/htmlComponentWcmServices.js.map +1 -1
  25. package/dist/packages/livesync/src/services/livesyncUtils.d.ts +5 -1
  26. package/dist/packages/livesync/src/services/livesyncUtils.js +47 -1
  27. package/dist/packages/livesync/src/services/livesyncUtils.js.map +1 -1
  28. package/dist/packages/livesync/src/services/metadataServices.d.ts +8 -6
  29. package/dist/packages/livesync/src/services/metadataServices.js +279 -88
  30. package/dist/packages/livesync/src/services/metadataServices.js.map +1 -1
  31. package/dist/packages/livesync/src/services/ongoingSyncServices.js +144 -101
  32. package/dist/packages/livesync/src/services/ongoingSyncServices.js.map +1 -1
  33. package/dist/packages/livesync/src/services/presentationTemplateWcmServices.d.ts +6 -0
  34. package/dist/packages/livesync/src/services/presentationTemplateWcmServices.js +138 -0
  35. package/dist/packages/livesync/src/services/presentationTemplateWcmServices.js.map +1 -0
  36. package/dist/packages/livesync/src/services/wcmRestV2Services.js +9 -2
  37. package/dist/packages/livesync/src/services/wcmRestV2Services.js.map +1 -1
  38. package/dist/packages/livesync/src/types/EventQueueItem.type.d.ts +1 -1
  39. package/dist/packages/livesync/src/types/WCMDesignLibraryCache.type.d.ts +9 -0
  40. package/dist/packages/livesync/src/types/WCMDesignLibraryCache.type.js +3 -0
  41. package/dist/packages/livesync/src/types/WCMDesignLibraryCache.type.js.map +1 -0
  42. package/dist/packages/livesync/src/types/WcmRestApiV2.type.d.ts +18 -0
  43. package/dist/packages/livesync/src/types/index.d.ts +1 -0
  44. package/dist/packages/livesync/src/types/index.js +1 -0
  45. package/dist/packages/livesync/src/types/index.js.map +1 -1
  46. package/dist/src/index.js +29 -23
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/services/apiServices.js +80 -78
  49. package/dist/src/services/apiServices.js.map +1 -1
  50. package/dist/src/utils/constants.d.ts +9 -3
  51. package/dist/src/utils/constants.js +18 -8
  52. package/dist/src/utils/constants.js.map +1 -1
  53. package/dist/src/utils/utils.js +6 -2
  54. package/dist/src/utils/utils.js.map +1 -1
  55. package/dist/src/utils/validateOptions.js +4 -4
  56. package/dist/src/utils/validateOptions.js.map +1 -1
  57. package/package.json +11 -11
@@ -33,7 +33,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
34
  exports.PushWcmDesignLibrary = void 0;
35
35
  const path_1 = __importStar(require("path"));
36
- const fs_1 = __importDefault(require("fs"));
36
+ const fs = __importStar(require("fs"));
37
37
  const fs_extra_1 = require("fs-extra");
38
38
  const chokidar_1 = __importDefault(require("chokidar"));
39
39
  const lodash_1 = require("lodash");
@@ -54,235 +54,377 @@ class PushWcmDesignLibrary {
54
54
  }
55
55
  invoke(cmdArgs) {
56
56
  return __awaiter(this, void 0, void 0, function* () {
57
- logger_1.logger.debug('LiveSync Push WCM Design Library invoke function');
58
- let isSuccess = false;
59
- this.libraryPath = cmdArgs.libraryPath;
60
- this.savedMetadata = metadataServices_1.getSavedMetadata(cmdArgs.libraryPath);
61
- this.libraryMetaData = metadataServices_1.getLibraryMetadata(this.libraryPath);
62
- const libraryName = this.libraryMetaData.name;
63
- this.apiOptions = {
64
- dxProtocol: cmdArgs.dxProtocol,
65
- hostname: cmdArgs.hostname,
66
- dxPort: cmdArgs.dxPort,
67
- contenthandlerPath: cmdArgs.contenthandlerPath,
68
- dxUsername: cmdArgs.dxUsername,
69
- dxPassword: cmdArgs.dxPassword,
70
- };
57
+ let isSuccessful = false;
58
+ if (utils_1.isFeatureEnabled(constants_1.FeaturesEnum.LIVESYNC_WCM_HTML_COMPONENT)) {
59
+ isSuccessful = yield this.pushWcmHtmlComponents(cmdArgs);
60
+ }
61
+ else {
62
+ logger_1.logger.debug(utils_1.message('LIVESYNC_WCM_HTML_COMPONENT_DISABLED'), {}, true);
63
+ }
64
+ if (utils_1.isFeatureEnabled(constants_1.FeaturesEnum.LIVESYNC_WCM_PRESENTATION_TEMPLATE)) {
65
+ }
66
+ else {
67
+ logger_1.logger.debug(utils_1.message('LIVESYNC_WCM_PRESENTATION_TEMPLATE_DISABLED'), {}, true);
68
+ }
69
+ return isSuccessful;
70
+ });
71
+ }
72
+ pushWcmHtmlComponents(cmdArgs) {
73
+ return __awaiter(this, void 0, void 0, function* () {
71
74
  try {
72
- isSuccess = yield this.pushAll(cmdArgs.libraryPath);
73
- if (isSuccess) {
74
- yield this.deleteFoldersAndFiles(cmdArgs.libraryPath);
75
+ logger_1.logger.debug('Executing the function Push HTML Components and folders of WCM Design Library');
76
+ let isSuccess = false;
77
+ let wcmLibraryId = '';
78
+ this.libraryPath = cmdArgs.wcmLibraryPath;
79
+ this.libraryMetaData = metadataServices_1.getLibraryMetadata(this.libraryPath);
80
+ let { wcmLibraryName } = cmdArgs;
81
+ this.apiOptions = {
82
+ dxProtocol: cmdArgs.dxProtocol,
83
+ hostname: cmdArgs.hostname,
84
+ dxPort: cmdArgs.dxPort,
85
+ contenthandlerPath: cmdArgs.contenthandlerPath,
86
+ dxUsername: cmdArgs.dxUsername,
87
+ dxPassword: cmdArgs.dxPassword,
88
+ virtualPortalContext: cmdArgs.virtualPortalContext,
89
+ wcmProjectName: cmdArgs.wcmProjectName,
90
+ };
91
+ const libraryDetails = (wcmLibraryName || (this.libraryMetaData && (this.libraryMetaData.title.value || this.libraryMetaData.title)));
92
+ wcmLibraryId = yield livesyncUtils_1.getLibraryId(libraryDetails, this.apiOptions, 'push');
93
+ logger_1.logger.info(utils_1.message(`Library ID: ${wcmLibraryId}`));
94
+ try {
95
+ logger_1.logger.info(utils_1.message('LIVESYNC_PUSH_WCM_INITIAL_START'));
96
+ this.libraryMetaData = metadataServices_1.getLibraryMetadata(this.libraryPath);
97
+ if (!this.libraryMetaData) {
98
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_NO_METADATA', { 0: this.libraryPath }));
99
+ return false;
100
+ }
101
+ wcmLibraryName = this.libraryMetaData.name;
102
+ PushWcmDesignLibrary.savedMetadata = metadataServices_1.loadMetadata(this.libraryPath);
103
+ isSuccess = yield this.pushAll(cmdArgs.wcmLibraryPath);
104
+ if (isSuccess && utils_1.isFeatureEnabled(constants_1.FeaturesEnum.LIVESYNC_WCM_DELETE)) {
105
+ yield this.deleteFoldersAndFiles(cmdArgs.wcmLibraryPath);
106
+ }
107
+ PushWcmDesignLibrary.savedMetadata = metadataServices_1.loadMetadata(cmdArgs.wcmLibraryPath);
108
+ logger_1.logger.info(utils_1.message('LIVESYNC_PUSH_WCM_INITIAL_END'));
109
+ return new Promise((resolve) => {
110
+ this.ongoingSync(cmdArgs, {
111
+ onWatcherClose: (ongoingSyncSuccess) => __awaiter(this, void 0, void 0, function* () {
112
+ if (!ongoingSyncSuccess) {
113
+ logger_1.logger.error(utils_1.errorMessage('ERROR_WCM_DESIGN_LIBRARY_ONGOING_PUSH', { 0: wcmLibraryName }));
114
+ resolve(false);
115
+ }
116
+ else {
117
+ logger_1.logger.info(utils_1.message('LIVESYNC_PUSH_WCM_DESIGN_LIBRARY_END_SUCCESS'));
118
+ resolve(true);
119
+ }
120
+ }),
121
+ });
122
+ });
75
123
  }
76
- else {
77
- return false;
124
+ catch (error) {
125
+ logger_1.logger.error(utils_1.errorMessage('ERROR_WCM_DESIGN_LIBRARY_PUSH_GENERIC', {
126
+ 0: wcmLibraryName,
127
+ 1: error.message,
128
+ }));
129
+ isSuccess = false;
78
130
  }
79
- this.savedMetadata = metadataServices_1.getSavedMetadata(cmdArgs.libraryPath);
80
- return new Promise((resolve) => {
81
- this.ongoingSync(cmdArgs, {
82
- onWatcherClose: (ongoingSyncSuccess) => __awaiter(this, void 0, void 0, function* () {
83
- if (!ongoingSyncSuccess) {
84
- logger_1.logger.error(utils_1.errorMessage('ERROR_WCM_DESIGN_LIBRARY_ONGOING_PUSH', { 0: libraryName }));
85
- resolve(false);
86
- }
87
- else {
88
- logger_1.logger.info(utils_1.message('LIVESYNC_PUSH_WCM_DESIGN_LIBRARY_END_SUCCESS'));
89
- resolve(true);
90
- }
91
- }),
92
- });
93
- });
131
+ return isSuccess;
94
132
  }
95
- catch (error) {
96
- logger_1.logger.error(utils_1.errorMessage('ERROR_WCM_DESIGN_LIBRARY_PUSH_GENERIC', { 0: libraryName, 1: error.message }));
97
- isSuccess = false;
133
+ catch (e) {
134
+ logger_1.logger.error(utils_1.errorMessage('ERROR_WCM_DESIGN_LIBRARY_PUSH_GENERIC', { 0: cmdArgs.wcmLibraryName, 1: e }));
135
+ return false;
98
136
  }
99
- return isSuccess;
100
137
  });
101
138
  }
102
139
  deleteFoldersAndFiles(libraryPath) {
103
140
  return __awaiter(this, void 0, void 0, function* () {
104
- const deletelogic = Object.entries(this.savedMetadata).map(([key, entry]) => __awaiter(this, void 0, void 0, function* () {
105
- if (!this.savedMetadata[key])
141
+ logger_1.logger.debug('Executing function Push WCM Design Library deleteFoldersAndFiles');
142
+ const folderMetadataPath = path_1.join(libraryPath, '.library', 'Folder');
143
+ const componentMetadataPath = path_1.join(libraryPath, '.library', 'LibraryHTMLComponent');
144
+ const folderMetadataCollection = fs_extra_1.readdirSync(folderMetadataPath);
145
+ const deleteFolderJobs = folderMetadataCollection.map((file) => __awaiter(this, void 0, void 0, function* () {
146
+ const filePath = path_1.join(folderMetadataPath, file);
147
+ if (!fs_extra_1.existsSync(filePath))
106
148
  return;
107
- const isSuccess = fs_extra_1.existsSync(entry.localPath);
108
- if (!isSuccess && entry.type === 'Folder') {
109
- if (yield this.deleteRootMissingFolder(entry.parentID, entry.id)) {
110
- const metadataPath = path_1.join(libraryPath, '.library', 'folders', `${entry.id}.json`);
111
- logger_1.logger.debug('=====================');
112
- logger_1.logger.debug('deleting metadata: ', metadataPath);
113
- fs_1.default.rmSync(metadataPath, { recursive: true, force: true });
114
- this.savedMetadata[key] = null;
115
- logger_1.logger.debug('Deleted Folders And Files successfully');
149
+ const folderMeta = fs_extra_1.readJSONSync(filePath);
150
+ if (!fs_extra_1.existsSync(folderMeta.localPath)) {
151
+ if (!utils_1.isFeatureEnabled(constants_1.FeaturesEnum.LIVESYNC_WCM_DELETE_FOLDER)) {
152
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_DELETE_FOLDER_DISABLED', { 0: folderMeta.localPath }));
153
+ return;
116
154
  }
155
+ yield this.deleteRootMissingFolder(folderMeta.parentID, folderMeta.id, folderMeta.name);
117
156
  }
118
- else if (!isSuccess && entry.type === 'LibraryHTMLComponent') {
119
- const resp = yield htmlComponentWcmServices_1.deleteHtmlComponent(this.apiOptions, `${entry.id}`);
120
- if ([204, 404].includes(resp.status)) {
121
- try {
122
- const metadataPath = path_1.join(libraryPath, '.library', 'components', `${entry.id}.json`);
123
- fs_1.default.rmSync(metadataPath, { recursive: true, force: true });
124
- logger_1.logger.debug('Html file deleted successfully');
125
- }
126
- catch (err) {
127
- logger_1.logger.error(utils_1.errorMessage('ERROR_DELETE_HTML_FILE', { 0: err }));
157
+ }));
158
+ const isSuccess = yield Promise.all(deleteFolderJobs).then(() => {
159
+ logger_1.logger.debug('Initial Sync - Folder Delete Function Completed');
160
+ const componentsMetadataCollection = fs_extra_1.readdirSync(componentMetadataPath);
161
+ const deleteComponentJobs = componentsMetadataCollection.map((file) => __awaiter(this, void 0, void 0, function* () {
162
+ const filePath = path_1.join(componentMetadataPath, file);
163
+ const componentsMeta = fs_extra_1.readJSONSync(filePath);
164
+ if (!fs_extra_1.existsSync(componentsMeta.localPath)) {
165
+ const resp = yield htmlComponentWcmServices_1.deleteHtmlComponent(this.apiOptions, componentsMeta.id);
166
+ if ([204, 404, 409].includes(resp.status)) {
167
+ if (resp.status === 409) {
168
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_HTML_CONFLICT', { 0: componentsMeta.name }));
169
+ }
170
+ try {
171
+ fs.rmSync(filePath);
172
+ logger_1.logger.info(utils_1.message('LIVESYNC_PUSH_WCM_ONGOING_SYNC_DELETE_HTML_COMPONENT', { 0: componentsMeta.name, 1: this.libraryMetaData.name }));
173
+ }
174
+ catch (err) {
175
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_DELETE_HTML_DEFAULT', { 0: componentsMeta.name, 1: err }));
176
+ }
128
177
  }
129
- this.savedMetadata[key] = null;
130
- logger_1.logger.debug('Deleted Folders And Files successfully');
131
178
  }
132
- }
133
- }));
134
- yield Promise.all(deletelogic);
135
- return true;
179
+ }));
180
+ return Promise.all(deleteComponentJobs).then(() => {
181
+ logger_1.logger.debug('Initial Sync - Component Delete Function Completed');
182
+ return true;
183
+ }).catch(() => { return false; });
184
+ }).catch(() => { return false; });
185
+ logger_1.logger.debug('Initial Sync - Exiting function Push WCM Design Library deleteFoldersAndFiles');
186
+ return isSuccess;
136
187
  });
137
188
  }
138
- deleteRootMissingFolder(parentID, childID) {
189
+ deleteRootMissingFolder(parentID, childID, childName) {
139
190
  return __awaiter(this, void 0, void 0, function* () {
191
+ logger_1.logger.debug('Executing function Push WCM Design Library deleteRootMissingFolder');
192
+ let isDeleteSuccess = false;
140
193
  const parentFolderMeta = metadataServices_1.getFolderMeta(this.libraryPath, parentID);
194
+ let resp = { status: 999 };
141
195
  if (!parentFolderMeta) {
142
- return false;
196
+ isDeleteSuccess = true;
143
197
  }
144
- if (!fs_extra_1.existsSync(parentFolderMeta.localPath)) {
145
- yield this.deleteRootMissingFolder(parentFolderMeta.parentID, parentID);
198
+ else if (parentFolderMeta && !fs_extra_1.existsSync(parentFolderMeta.localPath)) {
199
+ isDeleteSuccess = yield this.deleteRootMissingFolder(parentFolderMeta.parentID, parentID, parentFolderMeta.name);
146
200
  }
147
201
  else {
148
- const resp = yield foldersWcmServices_1.deleteFolder(this.apiOptions, childID);
149
- if ([204, 404].includes(resp.status)) {
150
- try {
151
- const metadataPath = path_1.join(this.libraryPath, '.library', 'folders', `${childID}.json`);
152
- fs_1.default.rmSync(metadataPath, { recursive: true, force: true });
153
- logger_1.logger.debug('Folder deleted successfully');
154
- }
155
- catch (err) {
156
- logger_1.logger.error(utils_1.errorMessage('ERROR_DELETE_FOLDER', { 0: err }));
157
- return false;
158
- }
202
+ resp = yield foldersWcmServices_1.deleteFolder(this.apiOptions, childID);
203
+ isDeleteSuccess = [204, 404].includes(resp.status);
204
+ }
205
+ if (isDeleteSuccess) {
206
+ try {
207
+ const metadataPath = path_1.join(this.libraryPath, '.library', 'Folder', `${childID}.json`);
208
+ fs_extra_1.rmSync(metadataPath, { recursive: true, force: true });
209
+ logger_1.logger.info(utils_1.message('LIVESYNC_PUSH_WCM_ONGOING_SYNC_DELETE_FOLDER', { 0: childName, 1: this.libraryMetaData.name }));
159
210
  return true;
160
211
  }
212
+ catch (err) {
213
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_DELETE_FOLDER_DEFAULT', { 0: childName, 1: err }));
214
+ }
161
215
  }
162
216
  return false;
163
217
  });
164
218
  }
165
219
  pushAll(directoryPath) {
166
220
  return __awaiter(this, void 0, void 0, function* () {
167
- logger_1.logger.debug('LiveSync Push WCM Design Library initPusLibraryHTMLComponent function');
221
+ logger_1.logger.debug('Executing function Push WCM Design Library initPusLibraryHTMLComponent');
168
222
  const files = fs_extra_1.readdirSync(directoryPath);
169
- yield Promise.all(files.map((file) => __awaiter(this, void 0, void 0, function* () {
223
+ let isSuccessful = true;
224
+ for (let i = 0; i < files.length; i += 1) {
225
+ const file = files[i];
170
226
  const filePath = path_1.join(directoryPath, file);
227
+ const fileName = path_1.default.parse(filePath).name;
171
228
  const fileStats = fs_extra_1.statSync(filePath);
172
229
  if (!constants_1.LIVESYNC_WCM_LIBRARY_DEFAULT_DIRS.includes(file)) {
173
230
  if (directoryPath === this.libraryPath) {
174
- return;
231
+ continue;
232
+ }
233
+ if (fileName === '.html') {
234
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_INVALID_FILENAME', { 0: filePath }));
235
+ isSuccessful = false;
236
+ break;
175
237
  }
176
238
  if (path_1.default.extname(filePath) === '.html') {
177
- yield this.pushHTMLFile(filePath);
239
+ try {
240
+ yield this.pushHTMLFile(filePath);
241
+ }
242
+ catch (error) {
243
+ logger_1.logger.error(`Error pushing HTML file ${filePath}: ${error.message}`);
244
+ isSuccessful = false;
245
+ break;
246
+ }
178
247
  }
179
248
  else if (fileStats.isDirectory()) {
180
- yield this.pushFolderComponent(filePath);
249
+ try {
250
+ yield this.pushFolderComponent(filePath);
251
+ }
252
+ catch (error) {
253
+ logger_1.logger.error(`Error pushing folder component ${filePath}: ${error.message}`);
254
+ isSuccessful = false;
255
+ break;
256
+ }
181
257
  }
182
258
  }
183
259
  if (fileStats.isDirectory() && file !== '.library') {
184
- yield this.pushAll(filePath);
260
+ try {
261
+ yield this.pushAll(filePath);
262
+ }
263
+ catch (error) {
264
+ logger_1.logger.error(`Error processing directory ${filePath}: ${error.message}`);
265
+ isSuccessful = false;
266
+ break;
267
+ }
185
268
  }
186
- })));
187
- return true;
269
+ }
270
+ return isSuccessful;
188
271
  });
189
272
  }
190
273
  pushHTMLFile(filePath) {
191
274
  return __awaiter(this, void 0, void 0, function* () {
275
+ logger_1.logger.debug('Executing function Push WCM Design Library pushFile');
192
276
  const directoryPath = path_1.default.parse(filePath).dir;
193
- const directoryfileName = path_1.default.parse(directoryPath).name;
194
- const directoryFileMeta = this.savedMetadata[`${directoryfileName}`];
195
- logger_1.logger.debug('LiveSync Push WCM Design Library pushFile function');
277
+ const directoryFileMeta = metadataServices_1.getSavedMetadata(this.libraryPath, directoryPath, PushWcmDesignLibrary.savedMetadata);
196
278
  const fileName = path_1.default.parse(filePath).name;
197
- const libraryID = metadataServices_1.getLibraryMetadata(this.libraryPath).id;
198
- const parentID = directoryFileMeta ? directoryFileMeta.id : libraryID;
199
- const fileMeta = this.savedMetadata[`${fileName}`];
200
- const data = JSON.stringify({
201
- entry: {
202
- title: {
203
- lang: 'en',
204
- value: fileName,
205
- },
206
- description: {
207
- lang: 'en',
208
- value: 'HTML Component Description',
209
- },
210
- name: fileName,
211
- type: 'LibraryHTMLComponent',
212
- link: [
213
- {
214
- rel: 'library',
215
- href: `${this.apiOptions.contenthandlerPath}${constants_1.URL_PATH.wcmV2Libraries}/${libraryID}`,
279
+ const libraryID = this.libraryMetaData.id;
280
+ let parentID = directoryFileMeta ? directoryFileMeta.id : libraryID;
281
+ const fileMeta = metadataServices_1.getSavedMetadata(this.libraryPath, filePath, PushWcmDesignLibrary.savedMetadata);
282
+ const fileContent = fs_extra_1.readFileSync(filePath, 'utf8');
283
+ let metadata;
284
+ let referenceUrl = '';
285
+ if (this.apiOptions.virtualPortalContext) {
286
+ referenceUrl = `${this.apiOptions.contenthandlerPath}/${this.apiOptions.virtualPortalContext}`;
287
+ }
288
+ else {
289
+ referenceUrl = `${this.apiOptions.contenthandlerPath}`;
290
+ }
291
+ if (this.apiOptions.wcmProjectName) {
292
+ referenceUrl += `/$project/${this.apiOptions.wcmProjectName}`;
293
+ logger_1.logger.debug('referenceUrl appended with project name - %s', this.apiOptions.wcmProjectName);
294
+ }
295
+ logger_1.logger.debug('referenceUrl: %s', referenceUrl);
296
+ const fileIsNew = !fileMeta;
297
+ let resp = { status: 999 };
298
+ if (fileIsNew) {
299
+ const data = JSON.stringify({
300
+ entry: {
301
+ title: {
216
302
  lang: 'en',
217
- label: 'Library',
303
+ value: fileName,
218
304
  },
219
- {
220
- rel: 'parent',
221
- href: `${this.apiOptions.contenthandlerPath}${constants_1.URL_PATH.wcmV2Folders}/${parentID}`,
305
+ description: {
222
306
  lang: 'en',
223
- label: 'Parent',
307
+ value: 'HTML Component Description',
308
+ },
309
+ name: fileName,
310
+ type: 'LibraryHTMLComponent',
311
+ link: [
312
+ {
313
+ rel: 'library',
314
+ href: `${referenceUrl}${constants_1.URL_PATH.wcmV2Libraries}/${libraryID}`,
315
+ lang: 'en',
316
+ label: 'Library',
317
+ },
318
+ {
319
+ rel: 'parent',
320
+ href: `${referenceUrl}${constants_1.URL_PATH.wcmV2Folders}/${parentID}`,
321
+ lang: 'en',
322
+ label: 'Parent',
323
+ },
324
+ ],
325
+ content: {
326
+ type: 'text/html',
327
+ value: fileContent,
224
328
  },
225
- ],
226
- content: {
227
- type: 'text/html',
228
- value: fs_extra_1.readFileSync(filePath, 'utf8'),
229
329
  },
230
- },
231
- });
232
- if (!fileMeta) {
233
- const resp = yield htmlComponentWcmServices_1.createHtmlComponent(this.apiOptions, data);
234
- this.savedMetadata[fileName] = metadataServices_1.createComponentsMeta(this.libraryPath, resp.data, parentID, libraryID);
330
+ });
331
+ resp = yield htmlComponentWcmServices_1.createHtmlComponent(this.apiOptions, data);
235
332
  }
236
333
  else {
237
- const resp = yield htmlComponentWcmServices_1.updateHtmlComponent(this.apiOptions, fileMeta.id, data);
238
- this.savedMetadata[fileName] = metadataServices_1.createComponentsMeta(this.libraryPath, resp.data, fileMeta.parentID, libraryID, true);
334
+ if (fileContent === fileMeta.content.value) {
335
+ logger_1.logger.debug('File content unchanged: %s', filePath);
336
+ return true;
337
+ }
338
+ fileMeta.content.value = fileContent;
339
+ const data = JSON.stringify({ entry: { content: fileMeta.content } });
340
+ resp = yield htmlComponentWcmServices_1.updateHtmlComponent(this.apiOptions, fileMeta.id, data);
341
+ parentID = fileMeta.parentID;
342
+ }
343
+ switch (resp.status) {
344
+ case 200:
345
+ case 201:
346
+ metadata = metadataServices_1.createMetadata(this.libraryPath, resp.data, parentID, libraryID);
347
+ if (filePath !== metadata.localPath) {
348
+ fs_extra_1.moveSync(filePath, metadata.localPath);
349
+ }
350
+ PushWcmDesignLibrary.savedMetadata = metadataServices_1.saveMetadata(this.libraryPath, metadata, PushWcmDesignLibrary.savedMetadata);
351
+ logger_1.logger.info(utils_1.message(`LIVESYNC_PUSH_WCM_ONGOING_SYNC_${fileIsNew ? 'CREATE' : 'UPDATE'}_HTML_COMPONENT`, { 0: fileName, 1: this.libraryMetaData.name }));
352
+ return true;
353
+ case 400:
354
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_CREATE_HTML_DEFAULT', { 0: fileName, 1: resp.statusText }));
355
+ return false;
356
+ case 404:
357
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_UPDATE_HTML_NOTFOUND', { 0: fileName }));
358
+ return false;
359
+ default:
360
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_UPDATE_HTML_DEFAULT', { 0: fileName, 1: resp.statusText }));
361
+ return false;
239
362
  }
240
- return true;
241
363
  });
242
364
  }
243
365
  pushFolderComponent(filePath) {
244
366
  return __awaiter(this, void 0, void 0, function* () {
245
- logger_1.logger.debug('LiveSync Push WCM Design Library pushFile function');
367
+ logger_1.logger.debug('Executing function Push WCM Design Library pushFile');
246
368
  const fileName = path_1.default.parse(filePath).name;
247
- const fileMeta = this.savedMetadata[`${fileName}`];
248
- const libraryID = metadataServices_1.getLibraryMetadata(this.libraryPath).id;
369
+ const fileMeta = metadataServices_1.getSavedMetadata(this.libraryPath, filePath, PushWcmDesignLibrary.savedMetadata);
370
+ const libraryID = this.libraryMetaData.id;
249
371
  const directoryPath = path_1.default.parse(filePath).dir;
250
- const directoryFileName = path_1.default.parse(directoryPath).name;
251
- const directoryFileMeta = this.savedMetadata[`${directoryFileName}`];
372
+ const directoryFileMeta = metadataServices_1.getSavedMetadata(this.libraryPath, directoryPath, PushWcmDesignLibrary.savedMetadata);
252
373
  const parentID = directoryFileMeta.id;
253
- const data = {
254
- type: 'Folder',
255
- name: fileName,
256
- description: {
257
- lang: 'en',
258
- value: fileName,
259
- },
260
- title: {
261
- lang: 'en',
262
- value: fileName,
263
- },
264
- libraryID,
265
- parentID,
266
- };
267
- if (!fileMeta) {
268
- const resp = yield foldersWcmServices_1.createFolder(this.apiOptions, libraryID, JSON.stringify(data));
269
- resp.data.localPath = filePath;
270
- metadataServices_1.createFolderMeta(this.libraryPath, resp.data);
271
- this.savedMetadata[fileName] = resp.data;
374
+ const fileIsNew = !fileMeta;
375
+ let resp = { status: 999 };
376
+ if (fileIsNew) {
377
+ const data = {
378
+ type: 'Folder',
379
+ name: fileName,
380
+ description: {
381
+ lang: 'en',
382
+ value: fileName,
383
+ },
384
+ title: {
385
+ lang: 'en',
386
+ value: fileName,
387
+ },
388
+ libraryID,
389
+ parentID,
390
+ };
391
+ resp = yield foldersWcmServices_1.createFolder(this.apiOptions, libraryID, JSON.stringify(data));
272
392
  }
273
393
  else {
274
- const resp = yield foldersWcmServices_1.updateFolder(this.apiOptions, fileMeta.id, JSON.stringify(data));
275
- metadataServices_1.createFolderMeta(this.libraryPath, resp.data);
276
- resp.data.localPath = filePath;
277
- this.savedMetadata[fileName] = resp.data;
394
+ if (fileMeta.localPath === filePath) {
395
+ logger_1.logger.debug('Folder unchanged: %s', filePath);
396
+ return true;
397
+ }
398
+ const cleanFolderMeta = Object.assign({}, fileMeta);
399
+ delete cleanFolderMeta.localPath;
400
+ delete cleanFolderMeta.htmlComponents;
401
+ delete cleanFolderMeta.folders;
402
+ resp = yield foldersWcmServices_1.updateFolder(this.apiOptions, fileMeta.id, JSON.stringify(cleanFolderMeta));
403
+ }
404
+ switch (resp.status) {
405
+ case 200:
406
+ case 201:
407
+ resp.data.localPath = filePath;
408
+ metadataServices_1.createMetadata(this.libraryPath, resp.data, parentID, libraryID);
409
+ PushWcmDesignLibrary.savedMetadata = metadataServices_1.saveMetadata(this.libraryPath, resp.data, PushWcmDesignLibrary.getCache());
410
+ logger_1.logger.info(utils_1.message(`LIVESYNC_PUSH_WCM_ONGOING_SYNC_${fileIsNew ? 'CREATE' : 'UPDATE'}_FOLDER`, { 0: fileName, 1: this.libraryMetaData.name }));
411
+ return true;
412
+ case 400:
413
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_INITIAL_SYNC_CREATE_FOLDER', { 0: fileName, 1: resp.statusText }));
414
+ return false;
415
+ case 404:
416
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_UPDATE_FOLDER_NOTFOUND', { 0: fileName }));
417
+ return false;
418
+ default:
419
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_CREATE_FOLDER_DEFAULT', { 0: fileName, 1: resp.statusText }));
420
+ return false;
278
421
  }
279
- return true;
280
422
  });
281
423
  }
282
424
  ongoingSync(cmdArgs, hooks) {
283
- logger_1.logger.debug('LiveSync Push WCM Design Library ongoingSync function');
425
+ logger_1.logger.debug('Executing function Push WCM Design Library ongoingSync');
284
426
  let isSuccess = true;
285
- const { libraryPath } = cmdArgs;
427
+ const { wcmLibraryPath } = cmdArgs;
286
428
  const handlerProvider = {
287
429
  [constants_1.ChokidarEvent.ADD]: () => __awaiter(this, void 0, void 0, function* () {
288
430
  logger_1.logger.debug('File created');
@@ -294,13 +436,13 @@ class PushWcmDesignLibrary {
294
436
  }),
295
437
  [constants_1.ChokidarEvent.CHANGE_HTML]: ongoingSyncServices_1.updateWCMHtmlComponentHandler,
296
438
  [constants_1.ChokidarEvent.CHANGE_DIR]: ongoingSyncServices_1.updateWCMFolderHandler,
297
- [constants_1.ChokidarEvent.UNLINK]: ongoingSyncServices_1.deleteWCMHtmlComponentHandler,
439
+ [constants_1.ChokidarEvent.UNLINK_HTML]: ongoingSyncServices_1.deleteWCMHtmlComponentHandler,
298
440
  [constants_1.ChokidarEvent.UNLINK_DIR]: ongoingSyncServices_1.deleteWCMFolderHandle,
299
441
  };
300
442
  this.eventsQueue = new EventsQueue_1.EventsQueue(handlerProvider);
301
443
  this.eventsQueue.initialize();
302
444
  logger_1.logger.debug('Initializing chokidar watcher...');
303
- logger_1.logger.info(utils_1.message('LIVE_SYNC_START', { 0: libraryPath }));
445
+ logger_1.logger.info(utils_1.message('LIVE_SYNC_START', { 0: wcmLibraryPath }));
304
446
  const STABILITY_THRESHOLD = 100;
305
447
  const POLL_INTERVAL = 2000;
306
448
  const watchOptions = {
@@ -310,12 +452,17 @@ class PushWcmDesignLibrary {
310
452
  },
311
453
  persistent: true,
312
454
  ignoreInitial: true,
313
- ignored: filesServices_1.fileServices.getIgnoredPaths(libraryPath),
455
+ ignored: [...filesServices_1.fileServices.getIgnoredPaths(wcmLibraryPath), path_1.join(wcmLibraryPath, '.library')],
314
456
  };
315
457
  this.watcher = chokidar_1.default
316
- .watch(libraryPath, watchOptions)
458
+ .watch(wcmLibraryPath, watchOptions)
317
459
  .on(constants_1.ChokidarEvent.ADD, (chokidarPath) => __awaiter(this, void 0, void 0, function* () {
318
460
  logger_1.logger.debug(`Detected file created: ${chokidarPath}`);
461
+ const fileName = path_1.default.parse(chokidarPath).name;
462
+ if (fileName === '.html') {
463
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_INVALID_FILENAME', { 0: chokidarPath }));
464
+ return;
465
+ }
319
466
  const chokidarEventType = livesyncUtils_1.getEventByFileType(chokidarPath, constants_1.ChokidarEvent.ADD);
320
467
  switch (chokidarEventType) {
321
468
  case constants_1.ChokidarEvent.ADD_HTML:
@@ -349,6 +496,11 @@ class PushWcmDesignLibrary {
349
496
  }))
350
497
  .on(constants_1.ChokidarEvent.CHANGE, (chokidarPath) => __awaiter(this, void 0, void 0, function* () {
351
498
  logger_1.logger.debug(`Detected file updated: ${chokidarPath}`);
499
+ const fileName = path_1.default.parse(chokidarPath).name;
500
+ if (fileName === '.html') {
501
+ logger_1.logger.error(utils_1.errorMessage('ERROR_LIVESYNC_PUSH_WCM_INVALID_FILENAME', { 0: chokidarPath }));
502
+ return;
503
+ }
352
504
  const chokidarEventType = livesyncUtils_1.getEventByFileType(chokidarPath, constants_1.ChokidarEvent.CHANGE);
353
505
  switch (chokidarEventType) {
354
506
  case constants_1.ChokidarEvent.CHANGE_HTML:
@@ -389,7 +541,7 @@ class PushWcmDesignLibrary {
389
541
  logger_1.logger.debug(`Detected file deleted: ${chokidarPath}`);
390
542
  const chokidarEventType = livesyncUtils_1.getEventByFileType(chokidarPath, constants_1.ChokidarEvent.UNLINK);
391
543
  switch (chokidarEventType) {
392
- case constants_1.ChokidarEvent.UNLINK:
544
+ case constants_1.ChokidarEvent.UNLINK_HTML:
393
545
  this.eventsQueue.push({
394
546
  cmdArgs,
395
547
  chokidarEvent: chokidarEventType,
@@ -399,6 +551,9 @@ class PushWcmDesignLibrary {
399
551
  },
400
552
  });
401
553
  break;
554
+ case constants_1.ChokidarEvent.UNLINK:
555
+ this.eventsQueue.push({ cmdArgs, chokidarEvent: chokidarEventType, chokidarPath });
556
+ break;
402
557
  default:
403
558
  logger_1.logger.debug(`Detected file delete: ${chokidarPath}`);
404
559
  break;
@@ -466,6 +621,12 @@ class PushWcmDesignLibrary {
466
621
  }
467
622
  });
468
623
  }
624
+ static updateCache(savedMetadata) {
625
+ PushWcmDesignLibrary.savedMetadata = savedMetadata;
626
+ }
627
+ static getCache() {
628
+ return PushWcmDesignLibrary.savedMetadata;
629
+ }
469
630
  }
470
631
  exports.PushWcmDesignLibrary = PushWcmDesignLibrary;
471
632
  //# sourceMappingURL=pushWcmDesignLibrary.js.map