mcdev 3.1.1 → 4.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 (135) hide show
  1. package/.eslintrc.json +67 -7
  2. package/.github/ISSUE_TEMPLATE/bug.yml +5 -1
  3. package/.github/ISSUE_TEMPLATE/task.md +1 -1
  4. package/.github/PULL_REQUEST_TEMPLATE.md +5 -3
  5. package/.github/dependabot.yml +14 -0
  6. package/.github/workflows/code-analysis.yml +57 -0
  7. package/.husky/commit-msg +10 -0
  8. package/.husky/post-checkout +5 -0
  9. package/.husky/pre-commit +2 -1
  10. package/.prettierrc +8 -0
  11. package/.vscode/settings.json +1 -1
  12. package/LICENSE +2 -2
  13. package/README.md +134 -45
  14. package/boilerplate/config.json +5 -11
  15. package/boilerplate/files/.prettierrc +8 -0
  16. package/boilerplate/files/.vscode/extensions.json +0 -1
  17. package/boilerplate/files/.vscode/settings.json +28 -2
  18. package/boilerplate/files/README.md +2 -2
  19. package/boilerplate/forcedUpdates.json +10 -0
  20. package/boilerplate/npm-dependencies.json +5 -5
  21. package/docs/dist/documentation.md +2795 -1724
  22. package/jsconfig.json +1 -1
  23. package/lib/Builder.js +166 -75
  24. package/lib/Deployer.js +244 -96
  25. package/lib/MetadataTypeDefinitions.js +2 -0
  26. package/lib/MetadataTypeInfo.js +2 -0
  27. package/lib/Retriever.js +61 -84
  28. package/lib/cli.js +133 -25
  29. package/lib/index.js +242 -563
  30. package/lib/metadataTypes/AccountUser.js +101 -95
  31. package/lib/metadataTypes/Asset.js +677 -248
  32. package/lib/metadataTypes/AttributeGroup.js +23 -12
  33. package/lib/metadataTypes/Automation.js +456 -357
  34. package/lib/metadataTypes/Campaign.js +33 -93
  35. package/lib/metadataTypes/ContentArea.js +31 -11
  36. package/lib/metadataTypes/DataExtension.js +391 -376
  37. package/lib/metadataTypes/DataExtensionField.js +131 -54
  38. package/lib/metadataTypes/DataExtensionTemplate.js +22 -4
  39. package/lib/metadataTypes/DataExtract.js +67 -50
  40. package/lib/metadataTypes/DataExtractType.js +14 -8
  41. package/lib/metadataTypes/Discovery.js +21 -16
  42. package/lib/metadataTypes/Email.js +32 -12
  43. package/lib/metadataTypes/EmailSendDefinition.js +85 -80
  44. package/lib/metadataTypes/EventDefinition.js +69 -47
  45. package/lib/metadataTypes/FileTransfer.js +78 -54
  46. package/lib/metadataTypes/Filter.js +11 -4
  47. package/lib/metadataTypes/Folder.js +149 -117
  48. package/lib/metadataTypes/FtpLocation.js +14 -8
  49. package/lib/metadataTypes/ImportFile.js +69 -69
  50. package/lib/metadataTypes/Interaction.js +19 -4
  51. package/lib/metadataTypes/List.js +54 -13
  52. package/lib/metadataTypes/MetadataType.js +687 -479
  53. package/lib/metadataTypes/MobileCode.js +46 -0
  54. package/lib/metadataTypes/MobileKeyword.js +114 -0
  55. package/lib/metadataTypes/Query.js +204 -103
  56. package/lib/metadataTypes/Role.js +76 -61
  57. package/lib/metadataTypes/Script.js +146 -82
  58. package/lib/metadataTypes/SetDefinition.js +20 -8
  59. package/lib/metadataTypes/TriggeredSendDefinition.js +78 -58
  60. package/lib/metadataTypes/definitions/Asset.definition.js +21 -10
  61. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +12 -0
  62. package/lib/metadataTypes/definitions/Automation.definition.js +10 -5
  63. package/lib/metadataTypes/definitions/Campaign.definition.js +44 -1
  64. package/lib/metadataTypes/definitions/DataExtension.definition.js +4 -0
  65. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +6 -0
  66. package/lib/metadataTypes/definitions/DataExtract.definition.js +18 -14
  67. package/lib/metadataTypes/definitions/Discovery.definition.js +12 -0
  68. package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +4 -0
  69. package/lib/metadataTypes/definitions/EventDefinition.definition.js +22 -0
  70. package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
  71. package/lib/metadataTypes/definitions/Filter.definition.js +4 -0
  72. package/lib/metadataTypes/definitions/Folder.definition.js +6 -0
  73. package/lib/metadataTypes/definitions/FtpLocation.definition.js +4 -0
  74. package/lib/metadataTypes/definitions/ImportFile.definition.js +10 -5
  75. package/lib/metadataTypes/definitions/Interaction.definition.js +4 -0
  76. package/lib/metadataTypes/definitions/MobileCode.definition.js +163 -0
  77. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +253 -0
  78. package/lib/metadataTypes/definitions/Query.definition.js +4 -0
  79. package/lib/metadataTypes/definitions/Role.definition.js +5 -0
  80. package/lib/metadataTypes/definitions/Script.definition.js +4 -0
  81. package/lib/metadataTypes/definitions/SetDefinition.definition.js +28 -0
  82. package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +4 -0
  83. package/lib/retrieveChangelog.js +7 -6
  84. package/lib/util/auth.js +117 -0
  85. package/lib/util/businessUnit.js +55 -66
  86. package/lib/util/cache.js +194 -0
  87. package/lib/util/cli.js +90 -116
  88. package/lib/util/config.js +302 -0
  89. package/lib/util/devops.js +240 -50
  90. package/lib/util/file.js +120 -191
  91. package/lib/util/init.config.js +195 -69
  92. package/lib/util/init.git.js +45 -50
  93. package/lib/util/init.js +72 -59
  94. package/lib/util/init.npm.js +48 -39
  95. package/lib/util/util.js +280 -564
  96. package/package.json +44 -33
  97. package/test/dataExtension.test.js +152 -0
  98. package/test/mockRoot/.mcdev-auth.json +8 -0
  99. package/test/mockRoot/.mcdevrc.json +67 -0
  100. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/childBU_dataextension_test.dataExtension-meta.json +39 -0
  101. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testDataExtension.dataExtension-meta.json +23 -0
  102. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +11 -0
  103. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.sql +4 -0
  104. package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.json +11 -0
  105. package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.sql +4 -0
  106. package/test/query.test.js +149 -0
  107. package/test/resourceFactory.js +142 -0
  108. package/test/resources/1111111/dataFolder/retrieve-response.xml +43 -0
  109. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +18 -0
  110. package/test/resources/9999999/automation/v1/queries/get-response.json +24 -0
  111. package/test/resources/9999999/automation/v1/queries/post-response.json +18 -0
  112. package/test/resources/9999999/dataExtension/build-expected.json +51 -0
  113. package/test/resources/9999999/dataExtension/create-expected.json +23 -0
  114. package/test/resources/9999999/dataExtension/create-response.xml +54 -0
  115. package/test/resources/9999999/dataExtension/retrieve-expected.json +51 -0
  116. package/test/resources/9999999/dataExtension/retrieve-response.xml +47 -0
  117. package/test/resources/9999999/dataExtension/template-expected.json +51 -0
  118. package/test/resources/9999999/dataExtension/update-expected.json +55 -0
  119. package/test/resources/9999999/dataExtension/update-response.xml +52 -0
  120. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +93 -0
  121. package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +303 -0
  122. package/test/resources/9999999/dataFolder/retrieve-response.xml +65 -0
  123. package/test/resources/9999999/query/build-expected.json +8 -0
  124. package/test/resources/9999999/query/get-expected.json +11 -0
  125. package/test/resources/9999999/query/patch-expected.json +11 -0
  126. package/test/resources/9999999/query/post-expected.json +11 -0
  127. package/test/resources/9999999/query/template-expected.json +8 -0
  128. package/test/resources/auth.json +32 -0
  129. package/test/resources/rest404-response.json +5 -0
  130. package/test/resources/retrieve-response.xml +21 -0
  131. package/test/utils.js +107 -0
  132. package/types/mcdev.d.js +301 -0
  133. package/CHANGELOG.md +0 -126
  134. package/PULL_REQUEST_TEMPLATE.md +0 -19
  135. package/test/util/file.js +0 -51
@@ -1,41 +1,47 @@
1
1
  'use strict';
2
2
 
3
+ const TYPE = require('../../types/mcdev.d');
3
4
  const MetadataType = require('./MetadataType');
4
5
  const Util = require('../util/util');
5
6
 
6
7
  /**
7
8
  * ImportFile MetadataType
9
+ *
8
10
  * @augments MetadataType
9
11
  */
10
12
  class Discovery extends MetadataType {
11
13
  /**
12
14
  * Retrieves API endpoint
13
15
  * documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm
14
- * @param {String} retrieveDir Directory where retrieved metadata directory will be saved
15
- * @param {String[]} [_] not used
16
- * @param {Object} buObject properties for auth
17
- * @returns {Promise} Promise
16
+ *
17
+ * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
18
+ * @param {void} [_] not used
19
+ * @param {TYPE.BuObject} buObject properties for auth
20
+ * @param {void} [___] unused parameter
21
+ * @param {string} [key] customer key of single item to retrieve
22
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
18
23
  */
19
- static async retrieve(retrieveDir, _, buObject) {
24
+ static async retrieve(retrieveDir, _, buObject, ___, key) {
25
+ if (key) {
26
+ Util.logger.error('Discovery.retrieve() does not support key parameter');
27
+ }
20
28
  if (buObject.eid !== buObject.mid) {
21
29
  // don't run for BUs other than Parent BU
22
- Util.logger.warn('Skipping Discovery retrieval on non-parent BU');
30
+ Util.logger.warn(' - Skipping Discovery retrieval on non-parent BU');
23
31
  return;
24
32
  } else {
25
- const res = await Promise.all(
26
- Object.keys(this.definition.endPointMapping).map((endpoint) =>
27
- this.client.RestClient.get({
28
- uri: this.definition.endPointMapping[endpoint],
29
- headers: {},
30
- })
33
+ const res = await this.client.rest.getCollection(
34
+ Object.keys(this.definition.endPointMapping).map(
35
+ (endpoint) => this.definition.endPointMapping[endpoint]
31
36
  )
32
37
  );
38
+
33
39
  const metadataStructure = {};
34
40
  for (const [i, v] of res.entries()) {
35
- v.body.key = Object.keys(this.definition.endPointMapping)[i];
36
- metadataStructure[v.body.key] = v.body;
41
+ v.key = Object.keys(this.definition.endPointMapping)[i];
42
+ metadataStructure[v.key] = v;
37
43
  }
38
- await this.saveResults(metadataStructure, retrieveDir, null);
44
+ await super.saveResults(metadataStructure, retrieveDir, null);
39
45
  Util.logger.info('Downloaded: ' + this.definition.type);
40
46
  return { metadata: metadataStructure, type: this.definition.type };
41
47
  }
@@ -44,6 +50,5 @@ class Discovery extends MetadataType {
44
50
 
45
51
  // Assign definition to static attributes
46
52
  Discovery.definition = require('../MetadataTypeDefinitions').discovery;
47
- Discovery.client = undefined;
48
53
 
49
54
  module.exports = Discovery;
@@ -1,43 +1,63 @@
1
1
  'use strict';
2
2
 
3
+ const TYPE = require('../../types/mcdev.d');
3
4
  const MetadataType = require('./MetadataType');
4
5
  const Util = require('../util/util');
6
+ const cache = require('../util/cache');
5
7
 
6
8
  /**
7
9
  * Email MetadataType
10
+ *
8
11
  * @augments MetadataType
9
12
  */
10
13
  class Email extends MetadataType {
11
14
  /**
12
15
  * Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
13
- * @param {String} retrieveDir Directory where retrieved metadata directory will be saved
14
- * @returns {Promise<Object>} Promise of metadata
16
+ *
17
+ * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
18
+ * @param {void} [_] unused parameter
19
+ * @param {void} [__] unused parameter
20
+ * @param {void} [___] unused parameter
21
+ * @param {string} [key] customer key of single item to retrieve
22
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
15
23
  */
16
- static retrieve(retrieveDir) {
24
+ static retrieve(retrieveDir, _, __, ___, key) {
17
25
  Util.logger.warn(
18
- 'Classic E-Mails are deprecated and will be discontinued by SFMC in the near future. Ensure that you migrate any existing E-Mails to Content Builder as soon as possible.'
26
+ ' - Classic E-Mails are deprecated and will be discontinued by SFMC in the near future. Ensure that you migrate any existing E-Mails to Content Builder as soon as possible.'
19
27
  );
28
+ /** @type {TYPE.SoapRequestParams} */
29
+ let requestParams = null;
30
+ if (key) {
31
+ requestParams = {
32
+ filter: {
33
+ leftOperand: 'CustomerKey',
34
+ operator: 'equals',
35
+ rightOperand: key,
36
+ },
37
+ };
38
+ }
20
39
  // !dont activate `await File.initPrettier('html');` as we only want to retrieve for migration and formatting might mess with the outcome
21
- return super.retrieveSOAPgeneric(retrieveDir, null);
40
+ return super.retrieveSOAP(retrieveDir, null, requestParams);
22
41
  }
23
42
  /**
24
43
  * manages post retrieve steps
25
- * @param {Object} metadata a single query
26
- * @returns {Object[]} Array with one metadata object and one query string
44
+ *
45
+ * @param {TYPE.MetadataTypeItem} metadata a single query
46
+ * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string
27
47
  */
28
48
  static postRetrieveTasks(metadata) {
29
49
  return this.parseMetadata(metadata);
30
50
  }
31
51
  /**
32
52
  * parses retrieved Metadata before saving
33
- * @param {Object} metadata a single query activity definition
34
- * @returns {Array} Array with one metadata object and one sql string
53
+ *
54
+ * @param {TYPE.MetadataTypeItem} metadata a single query activity definition
55
+ * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one sql string
35
56
  */
36
57
  static parseMetadata(metadata) {
37
58
  // folder
38
59
  try {
39
- metadata.r__folder_Path = Util.getFromCache(
40
- this.cache,
60
+ metadata.r__folder_Path = cache.searchForField(
41
61
  'folder',
42
62
  metadata.CategoryID,
43
63
  'ID',
@@ -46,7 +66,7 @@ class Email extends MetadataType {
46
66
  delete metadata.CategoryID;
47
67
  } catch (ex) {
48
68
  Util.logger.warn(
49
- `Classic E-Mail '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
69
+ ` - Classic E-Mail '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
50
70
  );
51
71
  }
52
72
 
@@ -1,22 +1,29 @@
1
1
  'use strict';
2
2
 
3
+ const TYPE = require('../../types/mcdev.d');
3
4
  const MetadataType = require('./MetadataType');
4
5
  const Util = require('../util/util');
6
+ const cache = require('../util/cache');
5
7
 
6
8
  /**
7
9
  * MessageSendActivity MetadataType
10
+ *
8
11
  * @augments MetadataType
9
12
  */
10
13
  class EmailSendDefinition extends MetadataType {
11
14
  /**
12
15
  * Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
13
- * @param {String} retrieveDir Directory where retrieved metadata directory will be saved
14
- * @param {void} _ -
15
- * @param {Object} buObject properties for auth
16
- * @returns {Promise<Object>} Promise of metadata
16
+ *
17
+ * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
18
+ * @param {void} [_] unused parameter
19
+ * @param {void} [__] unused parameter
20
+ * @param {void} [___] unused parameter
21
+ * @param {string} [key] customer key of single item to retrieve
22
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
17
23
  */
18
- static retrieve(retrieveDir, _, buObject) {
19
- const options = {
24
+ static retrieve(retrieveDir, _, __, ___, key) {
25
+ /** @type {TYPE.SoapRequestParams} */
26
+ let requestParams = {
20
27
  filter: {
21
28
  leftOperand: {
22
29
  // somehow that parameter controls visible (non deleted?) email send activities
@@ -32,12 +39,27 @@ class EmailSendDefinition extends MetadataType {
32
39
  },
33
40
  },
34
41
  };
35
- return super.retrieveSOAPgeneric(retrieveDir, buObject, options);
42
+ if (key) {
43
+ // move original filter down one level into rightOperand and add key filter into leftOperand
44
+ requestParams = {
45
+ filter: {
46
+ leftOperand: {
47
+ leftOperand: 'CustomerKey',
48
+ operator: 'equals',
49
+ rightOperand: key,
50
+ },
51
+ operator: 'AND',
52
+ rightOperand: requestParams.filter,
53
+ },
54
+ };
55
+ }
56
+ return super.retrieveSOAP(retrieveDir, null, requestParams);
36
57
  }
37
58
 
38
59
  /**
39
60
  * Updates a single item
40
- * @param {Object} metadataItem a single item
61
+ *
62
+ * @param {TYPE.MetadataTypeItem} metadataItem a single item
41
63
  * @returns {Promise} Promise
42
64
  */
43
65
  static update(metadataItem) {
@@ -46,62 +68,54 @@ class EmailSendDefinition extends MetadataType {
46
68
 
47
69
  /**
48
70
  * Creates a single item
49
- * @param {Object} metadataItem a single item
71
+ *
72
+ * @param {TYPE.MetadataTypeItem} metadataItem a single item
50
73
  * @returns {Promise} Promise
51
74
  */
52
75
  static create(metadataItem) {
53
76
  return super.createSOAP(metadataItem);
54
77
  }
55
78
 
79
+ /**
80
+ * Delete a metadata item from the specified business unit
81
+ *
82
+ * @param {TYPE.BuObject} buObject references credentials
83
+ * @param {string} customerKey Identifier of data extension
84
+ * @returns {Promise.<boolean>} deletion success status
85
+ */
86
+ static deleteByKey(buObject, customerKey) {
87
+ return super.deleteByKeySOAP(buObject, customerKey, false);
88
+ }
89
+
56
90
  /**
57
91
  * prepares a single item for deployment
58
- * @param {Object} metadata a single script activity definition
59
- * @returns {Promise} Promise
92
+ *
93
+ * @param {TYPE.MetadataTypeItem} metadata a single script activity definition
94
+ * @returns {Promise.<TYPE.MetadataTypeItem>} Promise
60
95
  */
61
96
  static async preDeployTasks(metadata) {
62
97
  // re-add IsPlatformObject, required for visibility
63
98
  metadata.IsPlatformObject = false;
64
99
  // folder
65
- try {
66
- metadata.CategoryID = Util.getFromCache(
67
- this.cache,
68
- 'folder',
69
- metadata.r__folder_Path,
70
- 'Path',
71
- 'ID'
72
- );
73
- delete metadata.r__folder_Path;
74
- } catch (ex) {
75
- Util.logger.error(`${this.definition.typeName} '${metadata.key}': ${ex.message}`);
76
- }
100
+ metadata.CategoryID = cache.searchForField('folder', metadata.r__folder_Path, 'Path', 'ID');
101
+ delete metadata.r__folder_Path;
77
102
  // email
78
- try {
79
- metadata.Email = {};
80
- if (metadata.r__email_Name) {
81
- // classic
82
- metadata.Email.ID = Util.getFromCache(
83
- this.cache,
84
- 'email',
85
- metadata.r__email_Name,
86
- 'Name',
87
- 'ID'
88
- );
89
- delete metadata.r__email_Name;
90
- } else if (metadata.r__assetMessage_Key) {
91
- // content builder
92
- // * this ignores r__assetMessage_Name on purpose as that is only unique per parent folder but useful during PR reviews
93
- metadata.Email.ID = Util.getFromCache(
94
- this.cache,
95
- 'asset',
96
- metadata.r__assetMessage_Key,
97
- 'customerKey',
98
- 'legacyData.legacyId'
99
- );
100
- delete metadata.r__assetMessage_Key;
101
- delete metadata.r__assetMessage_Name;
102
- }
103
- } catch (ex) {
104
- Util.logger.error(`${this.definition.typeName} '${metadata.key}': ${ex.message}`);
103
+ metadata.Email = {};
104
+ if (metadata.r__email_Name) {
105
+ // classic
106
+ metadata.Email.ID = cache.searchForField('email', metadata.r__email_Name, 'Name', 'ID');
107
+ delete metadata.r__email_Name;
108
+ } else if (metadata.r__assetMessage_Key) {
109
+ // content builder
110
+ // * this ignores r__assetMessage_Name on purpose as that is only unique per parent folder but useful during PR reviews
111
+ metadata.Email.ID = cache.searchForField(
112
+ 'asset',
113
+ metadata.r__assetMessage_Key,
114
+ 'customerKey',
115
+ 'legacyData.legacyId'
116
+ );
117
+ delete metadata.r__assetMessage_Key;
118
+ delete metadata.r__assetMessage_Name;
105
119
  }
106
120
  // Target Audience DataExtension
107
121
  // normalize first because this can be an array
@@ -121,8 +135,7 @@ class EmailSendDefinition extends MetadataType {
121
135
  `Skipping ${metadata.Name} (${metadata.CustomerKey}): Expecting DataSourceTypeID to equal 'CustomObject' when r__dataExtension_Key is defined; Found '${sdl.DataSourceTypeID}'`
122
136
  );
123
137
  }
124
- sdl.CustomObjectID = Util.getFromCache(
125
- this.cache,
138
+ sdl.CustomObjectID = cache.searchForField(
126
139
  'dataExtension',
127
140
  sdl.r__dataExtension_Key,
128
141
  'CustomerKey',
@@ -137,7 +150,7 @@ class EmailSendDefinition extends MetadataType {
137
150
  // get List (required)
138
151
  if (sdl.r__list_PathName) {
139
152
  sdl.List = {
140
- ID: Util.getListObjectIdFromCache(this.cache, sdl.r__list_PathName, 'ID'),
153
+ ID: cache.getListObjectId(sdl.r__list_PathName, 'ID'),
141
154
  };
142
155
  delete sdl.r__list_PathName;
143
156
  } else {
@@ -152,24 +165,25 @@ class EmailSendDefinition extends MetadataType {
152
165
 
153
166
  /**
154
167
  * manages post retrieve steps
155
- * @param {Object} metadata a single query
156
- * @returns {Object[]} Array with one metadata object and one query string
168
+ *
169
+ * @param {TYPE.MetadataTypeItem} metadata a single query
170
+ * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string
157
171
  */
158
172
  static postRetrieveTasks(metadata) {
159
173
  return this.parseMetadata(metadata);
160
174
  }
161
175
  /**
162
176
  * parses retrieved Metadata before saving
163
- * @param {Object} metadata a single query activity definition
164
- * @returns {Array} Array with one metadata object and one sql string
177
+ *
178
+ * @param {TYPE.MetadataTypeItem} metadata a single query activity definition
179
+ * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one sql string
165
180
  */
166
181
  static parseMetadata(metadata) {
167
182
  // remove IsPlatformObject, always has to be 'false'
168
183
  delete metadata.IsPlatformObject;
169
184
  // folder
170
185
  try {
171
- metadata.r__folder_Path = Util.getFromCache(
172
- this.cache,
186
+ metadata.r__folder_Path = cache.searchForField(
173
187
  'folder',
174
188
  metadata.CategoryID,
175
189
  'ID',
@@ -178,34 +192,26 @@ class EmailSendDefinition extends MetadataType {
178
192
  delete metadata.CategoryID;
179
193
  } catch (ex) {
180
194
  Util.logger.warn(
181
- `${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
195
+ ` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
182
196
  );
183
197
  }
184
198
  // email
185
199
  try {
186
200
  // classic
187
- const classicEmail = Util.getFromCache(
188
- this.cache,
189
- 'email',
190
- metadata.Email.ID,
191
- 'ID',
192
- 'Name'
193
- );
201
+ const classicEmail = cache.searchForField('email', metadata.Email.ID, 'ID', 'Name');
194
202
  metadata.r__email_Name = classicEmail;
195
203
  delete metadata.Email;
196
- } catch (ex) {
204
+ } catch {
197
205
  try {
198
206
  // content builder
199
- const contentBuilderEmailName = Util.getFromCache(
200
- this.cache,
207
+ const contentBuilderEmailName = cache.searchForField(
201
208
  'asset',
202
209
  metadata.Email.ID,
203
210
  'legacyData.legacyId',
204
211
  'name'
205
212
  );
206
213
  metadata.r__assetMessage_Name = contentBuilderEmailName;
207
- const contentBuilderEmailKey = Util.getFromCache(
208
- this.cache,
214
+ const contentBuilderEmailKey = cache.searchForField(
209
215
  'asset',
210
216
  metadata.Email.ID,
211
217
  'legacyData.legacyId',
@@ -213,9 +219,9 @@ class EmailSendDefinition extends MetadataType {
213
219
  );
214
220
  metadata.r__assetMessage_Key = contentBuilderEmailKey;
215
221
  delete metadata.Email;
216
- } catch (ex) {
222
+ } catch {
217
223
  Util.logger.warn(
218
- `${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder.`
224
+ ` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder.`
219
225
  );
220
226
  }
221
227
  }
@@ -231,27 +237,26 @@ class EmailSendDefinition extends MetadataType {
231
237
  // get DataExtension keys
232
238
  if (sdl.CustomObjectID) {
233
239
  try {
234
- sdl.r__dataExtension_Key = Util.getFromCache(
235
- this.cache,
240
+ sdl.r__dataExtension_Key = cache.searchForField(
236
241
  'dataExtension',
237
242
  sdl.CustomObjectID,
238
243
  'ObjectID',
239
244
  'CustomerKey'
240
245
  );
241
246
  delete sdl.CustomObjectID;
242
- } catch (ex) {
247
+ } catch {
243
248
  Util.logger.warn(
244
- `${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find Target Audience (DataExtension) with ObjectID ${sdl.CustomObjectID}.`
249
+ ` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find Target Audience (DataExtension) with ObjectID ${sdl.CustomObjectID}.`
245
250
  );
246
251
  }
247
252
  }
248
253
  // List
249
254
  try {
250
- sdl.r__list_PathName = Util.getListPathNameFromCache(this.cache, sdl.List.ID, 'ID');
255
+ sdl.r__list_PathName = cache.getListPathName(sdl.List.ID, 'ID');
251
256
  delete sdl.List;
252
257
  } catch (ex) {
253
258
  Util.logger.warn(
254
- `${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
259
+ ` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
255
260
  );
256
261
  }
257
262
  }