diff --git a/@types/lib/metadataTypes/FileLocation.d.ts b/@types/lib/metadataTypes/FileLocation.d.ts index a689d4866..c911a36af 100644 --- a/@types/lib/metadataTypes/FileLocation.d.ts +++ b/@types/lib/metadataTypes/FileLocation.d.ts @@ -1,4 +1,4 @@ -export default FtpLocation; +export default FileLocation; export type BuObject = import("../../types/mcdev.d.js").BuObject; export type CodeExtract = import("../../types/mcdev.d.js").CodeExtract; export type CodeExtractItem = import("../../types/mcdev.d.js").CodeExtractItem; @@ -26,10 +26,10 @@ export type TemplateMap = import("../../types/mcdev.d.js").TemplateMap; * * @augments MetadataType */ -declare class FtpLocation extends MetadataType { +declare class FileLocation extends MetadataType { /** - * Retrieves Metadata of FtpLocation - * Endpoint /automation/v1/ftplocations/ return all FtpLocations + * Retrieves Metadata of FileLocation + * Endpoint /automation/v1/ftplocations/ return all FileLocations * * @param {string} retrieveDir Directory where retrieved metadata directory will be saved * @param {void | string[]} [_] unused parameter @@ -44,8 +44,22 @@ declare class FtpLocation extends MetadataType { * @returns {Promise.} Promise */ static retrieveForCache(): Promise; + /** + * prepares a import definition for deployment + * + * @param {MetadataTypeItem} metadata a single importDef + * @returns {Promise.} Promise + */ + static preDeployTasks(metadata: MetadataTypeItem): Promise; + /** + * manages post retrieve steps + * + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} parsed metadata + */ + static postRetrieveTasks(metadata: MetadataTypeItem): MetadataTypeItem; } -declare namespace FtpLocation { +declare namespace FileLocation { let definition: { bodyIteratorField: string; dependencies: any[]; @@ -64,6 +78,20 @@ declare namespace FtpLocation { typeDescription: string; typeRetrieveByDefault: boolean; typeName: string; + locationTypeMapping: { + 'Enhanced FTP Site Import Directory': number; + 'External FTP Site': number; + 'External SFTP Site': number; + 'External FTPS Site': number; + 'Salesforce Objects and Reports': number; + Safehouse: number; + 'Enhanced FTP Site Export Directory': number; + 'Legacy Import Directory': number; + 'Relative location under FTP Site': number; + 'Amazon Simple Storage Service': number; + 'Azure Blob Storage': number; + 'Google Cloud Storage': number; + }; fields: { id: { isCreateable: boolean; @@ -95,6 +123,12 @@ declare namespace FtpLocation { retrieving: boolean; template: boolean; }; + c__locationType: { + isCreateable: boolean; + isUpdateable: boolean; + retrieving: boolean; + template: boolean; + }; }; }; } diff --git a/@types/lib/metadataTypes/FileLocation.d.ts.map b/@types/lib/metadataTypes/FileLocation.d.ts.map index 99b9b646d..05572e395 100644 --- a/@types/lib/metadataTypes/FileLocation.d.ts.map +++ b/@types/lib/metadataTypes/FileLocation.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FileLocation.d.ts","sourceRoot":"","sources":["../../../lib/metadataTypes/FileLocation.js"],"names":[],"mappings":";uBAKa,OAAO,wBAAwB,EAAE,QAAQ;0BACzC,OAAO,wBAAwB,EAAE,WAAW;8BAC5C,OAAO,wBAAwB,EAAE,eAAe;+BAChD,OAAO,wBAAwB,EAAE,gBAAgB;mCACjD,OAAO,wBAAwB,EAAE,oBAAoB;kCACrD,OAAO,wBAAwB,EAAE,mBAAmB;8BACpD,OAAO,wBAAwB,EAAE,eAAe;iCAChD,OAAO,wBAAwB,EAAE,kBAAkB;gCACnD,OAAO,wBAAwB,EAAE,iBAAiB;0BAClD,OAAO,wBAAwB,EAAE,WAAW;AAVzD;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH;IACI;;;;;;;;;OASG;IACH,6BANW,MAAM,MACN,IAAI,GAAG,MAAM,EAAE,OACf,IAAI,GAAG,MAAM,EAAE,QACf,MAAM,GACJ,OAAO,CAAE,kBAAkB,CAAC,CAIxC;IAED;;;;OAIG;IACH,2BAFa,OAAO,CAAE,kBAAkB,CAAC,CAIxC;CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA3CwB,mBAAmB"} \ No newline at end of file +{"version":3,"file":"FileLocation.d.ts","sourceRoot":"","sources":["../../../lib/metadataTypes/FileLocation.js"],"names":[],"mappings":";uBAMa,OAAO,wBAAwB,EAAE,QAAQ;0BACzC,OAAO,wBAAwB,EAAE,WAAW;8BAC5C,OAAO,wBAAwB,EAAE,eAAe;+BAChD,OAAO,wBAAwB,EAAE,gBAAgB;mCACjD,OAAO,wBAAwB,EAAE,oBAAoB;kCACrD,OAAO,wBAAwB,EAAE,mBAAmB;8BACpD,OAAO,wBAAwB,EAAE,eAAe;iCAChD,OAAO,wBAAwB,EAAE,kBAAkB;gCACnD,OAAO,wBAAwB,EAAE,iBAAiB;0BAClD,OAAO,wBAAwB,EAAE,WAAW;AAVzD;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH;IACI;;;;;;;;;OASG;IACH,6BANW,MAAM,MACN,IAAI,GAAG,MAAM,EAAE,OACf,IAAI,GAAG,MAAM,EAAE,QACf,MAAM,GACJ,OAAO,CAAE,kBAAkB,CAAC,CAIxC;IAED;;;;OAIG;IACH,2BAFa,OAAO,CAAE,kBAAkB,CAAC,CAIxC;IAED;;;;;OAKG;IACH,gCAHW,gBAAgB,GACd,OAAO,CAAE,gBAAgB,CAAC,CAOtC;IAED;;;;;OAKG;IACH,mCAHW,gBAAgB,GACd,gBAAgB,CAkB5B;CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAjFwB,mBAAmB"} \ No newline at end of file diff --git a/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts b/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts index 83db4f5df..8cdcf6658 100644 --- a/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts +++ b/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts @@ -16,6 +16,20 @@ declare namespace _default { let typeDescription: string; let typeRetrieveByDefault: boolean; let typeName: string; + let locationTypeMapping: { + 'Enhanced FTP Site Import Directory': number; + 'External FTP Site': number; + 'External SFTP Site': number; + 'External FTPS Site': number; + 'Salesforce Objects and Reports': number; + Safehouse: number; + 'Enhanced FTP Site Export Directory': number; + 'Legacy Import Directory': number; + 'Relative location under FTP Site': number; + 'Amazon Simple Storage Service': number; + 'Azure Blob Storage': number; + 'Google Cloud Storage': number; + }; namespace fields { namespace id { let isCreateable: boolean; @@ -63,6 +77,16 @@ declare namespace _default { let template_4: boolean; export { template_4 as template }; } + namespace c__locationType { + let isCreateable_5: boolean; + export { isCreateable_5 as isCreateable }; + let isUpdateable_5: boolean; + export { isUpdateable_5 as isUpdateable }; + let retrieving_5: boolean; + export { retrieving_5 as retrieving }; + let template_5: boolean; + export { template_5 as template }; + } } } export default _default; diff --git a/lib/metadataTypes/FileLocation.js b/lib/metadataTypes/FileLocation.js index d9e4f9d33..5e6bcad2d 100644 --- a/lib/metadataTypes/FileLocation.js +++ b/lib/metadataTypes/FileLocation.js @@ -1,6 +1,7 @@ 'use strict'; import MetadataType from './MetadataType.js'; +import { Util } from '../util/util.js'; /** * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject @@ -20,10 +21,10 @@ import MetadataType from './MetadataType.js'; * * @augments MetadataType */ -class FtpLocation extends MetadataType { +class FileLocation extends MetadataType { /** - * Retrieves Metadata of FtpLocation - * Endpoint /automation/v1/ftplocations/ return all FtpLocations + * Retrieves Metadata of FileLocation + * Endpoint /automation/v1/ftplocations/ return all FileLocations * * @param {string} retrieveDir Directory where retrieved metadata directory will be saved * @param {void | string[]} [_] unused parameter @@ -43,10 +44,47 @@ class FtpLocation extends MetadataType { static async retrieveForCache() { return super.retrieveREST(null, '/automation/v1/ftplocations/'); } + + /** + * prepares a import definition for deployment + * + * @param {MetadataTypeItem} metadata a single importDef + * @returns {Promise.} Promise + */ + static async preDeployTasks(metadata) { + if (metadata.c__locationType) { + metadata.locationTypeId = this.definition.locationTypeMapping[metadata.c__locationType]; + } + return metadata; + } + + /** + * manages post retrieve steps + * + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} parsed metadata + */ + static postRetrieveTasks(metadata) { + if (metadata.locationTypeId) { + try { + metadata.c__locationType = Util.inverseGet( + this.definition.locationTypeMapping, + metadata.locationTypeId + ); + delete metadata.locationTypeId; + } catch { + Util.logger.info( + 'Please report this new & unknown locationTypeId to the mcdev developer team via github: ' + + metadata.locationTypeId + ); + } + } + return metadata; + } } // Assign definition to static attributes import MetadataTypeDefinitions from '../MetadataTypeDefinitions.js'; -FtpLocation.definition = MetadataTypeDefinitions.fileLocation; +FileLocation.definition = MetadataTypeDefinitions.fileLocation; -export default FtpLocation; +export default FileLocation; diff --git a/lib/metadataTypes/definitions/FileLocation.definition.js b/lib/metadataTypes/definitions/FileLocation.definition.js index 8141984f4..336180322 100644 --- a/lib/metadataTypes/definitions/FileLocation.definition.js +++ b/lib/metadataTypes/definitions/FileLocation.definition.js @@ -17,6 +17,20 @@ export default { 'Used for export or import of files to/from Marketing Cloud. Previously this was labeled ftpLocation.', typeRetrieveByDefault: true, typeName: 'File Location', + locationTypeMapping: { + 'Enhanced FTP Site Import Directory': 0, + 'External FTP Site': 1, + 'External SFTP Site': 2, + 'External FTPS Site': 3, + 'Salesforce Objects and Reports': 4, + Safehouse: 5, + 'Enhanced FTP Site Export Directory': 6, + 'Legacy Import Directory': 8, + 'Relative location under FTP Site': 9, + 'Amazon Simple Storage Service': 13, + 'Azure Blob Storage': 15, + 'Google Cloud Storage': 16, + }, fields: { id: { isCreateable: false, @@ -34,13 +48,13 @@ export default { isCreateable: false, isUpdateable: false, retrieving: true, - template: false, + template: true, }, name: { isCreateable: false, isUpdateable: false, retrieving: true, - template: false, + template: true, }, relPath: { isCreateable: true, @@ -48,5 +62,11 @@ export default { retrieving: true, template: true, }, + c__locationType: { + isCreateable: false, + isUpdateable: false, + retrieving: true, + template: true, + }, }, };