diff --git a/.eslintrc.json b/.eslintrc.json index 5edc0fc77..ef51e1ec5 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -22,7 +22,7 @@ "root": true, "settings": { "jsdoc": { - "mode": "jsdoc", + "mode": "typescript", "preferredTypes": { "array": "Array", "array.<>": "[]", @@ -84,6 +84,8 @@ ], "jsdoc/require-param-type": "error", "jsdoc/tag-lines": ["warn", "any", { "startLines": 1 }], + "jsdoc/no-undefined-types": "error", + "valid-jsdoc": "off", "spaced-comment": ["warn", "always", { "block": { "exceptions": ["*"], "balanced": true } }] }, "overrides": [ diff --git a/.github/workflows/code-test.yml b/.github/workflows/code-test.yml index f6184ecc0..2021742ac 100644 --- a/.github/workflows/code-test.yml +++ b/.github/workflows/code-test.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18.16 registry-url: https://registry.npmjs.org/ - run: npm ci --ignore-scripts diff --git a/.github/workflows/coverage-develop-branch.yml b/.github/workflows/coverage-develop-branch.yml index 61da0b184..daa1bd57c 100644 --- a/.github/workflows/coverage-develop-branch.yml +++ b/.github/workflows/coverage-develop-branch.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18.16 - run: npm ci --ignore-scripts diff --git a/.github/workflows/coverage-main-branch.yml b/.github/workflows/coverage-main-branch.yml index 078da7979..bd8aa2cdb 100644 --- a/.github/workflows/coverage-main-branch.yml +++ b/.github/workflows/coverage-main-branch.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18.16 - run: npm ci --ignore-scripts diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index a1f679d4c..8ee186b82 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -19,7 +19,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18.16 - run: npm ci --ignore-scripts diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 8d02b8017..7c43db805 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18.16 - run: npm ci - run: npm test @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 18.16 registry-url: https://registry.npmjs.org/ - run: npm ci - run: npm publish diff --git a/.husky/pre-commit b/.husky/pre-commit index 11e9a358a..718da8a9c 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,3 +1 @@ -#npm run docs -#git update-index --add docs/dist/documentation.md npx --no lint-staged diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md deleted file mode 100644 index e5895a01f..000000000 --- a/docs/dist/documentation.md +++ /dev/null @@ -1,8992 +0,0 @@ -## Classes - -
-
Builder
-

Builds metadata from a template using market specific customisation

-
-
Deployer
-

Reads metadata from local directory and deploys it to specified target business unit. -Source and target business units are also compared before the deployment to apply metadata specific patches.

-
-
Mcdev
-

main class

-
-
AssetMetadataType
-

FileTransfer MetadataType

-
-
AttributeGroupMetadataType
-

AttributeGroup MetadataType

-
-
AttributeSetMetadataType
-

AttributeSet MetadataType

-
-
AutomationMetadataType
-

Automation MetadataType

-
-
CampaignMetadataType
-

Campaign MetadataType

-
-
ContentAreaMetadataType
-

ContentArea MetadataType

-
-
DataExtensionMetadataType
-

DataExtension MetadataType

-
-
DataExtensionFieldMetadataType
-

DataExtensionField MetadataType

-
-
DataExtensionTemplateMetadataType
-

DataExtensionTemplate MetadataType

-
-
DataExtractMetadataType
-

DataExtract MetadataType

-
-
DataExtractTypeMetadataType
-

DataExtractType MetadataType -Only for Caching No retrieve/upsert is required -as this is a configuration in the EID

-
-
DiscoveryMetadataType
-

ImportFile MetadataType

-
-
EmailMetadataType
-

Email MetadataType

-
-
EmailSendMetadataType
-

MessageSendActivity MetadataType

-
-
EventMetadataType
-

Event MetadataType

-
-
FtpLocationMetadataType
-

ImportFile MetadataType

-
-
FileTransferMetadataType
-

FileTransfer MetadataType

-
-
FilterMetadataType
-

Filter MetadataType

-
-
FolderMetadataType
-

Folder MetadataType

-
-
ImportFileMetadataType
-

ImportFile MetadataType

-
-
JourneyMetadataType
-

Journey MetadataType -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -id: A unique id of the journey assigned by the journey’s API during its creation -key: A unique id of the journey within the MID. Can be generated by the developer -definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId

-
-
ListMetadataType
-

List MetadataType

-
-
MetadataType
-

MetadataType class that gets extended by their specific metadata type class. -Provides default functionality that can be overwritten by child metadata type classes

-
-
MobileCodeMetadataType
-

MobileCode MetadataType

-
-
MobileKeywordMetadataType
-

MobileKeyword MetadataType

-
-
MobileMessageMetadataType
-

MobileMessage MetadataType

-
-
QueryMetadataType
-

Query MetadataType

-
-
RoleMetadataType
-

ImportFile MetadataType

-
-
ScriptMetadataType
-

Script MetadataType

-
-
SendClassificationMetadataType
-

SendClassification MetadataType

-
-
TransactionalEmailTransactionalMessage
-

TransactionalEmail MetadataType

-
-
TransactionalMessageMetadataType
-

TransactionalMessage MetadataType

-
-
TransactionalPushTransactionalMessage
-

TransactionalPush TransactionalMessage

-
-
TransactionalSMSTransactionalMessage
-

TransactionalSMS MetadataType

-
-
TriggeredSendMetadataType
-

MessageSendActivity MetadataType

-
-
UserMetadataType
-

MetadataType

-
-
VerificationMetadataType
-

Verification MetadataType

-
-
Retriever
-

Retrieves metadata from a business unit and saves it to the local filesystem.

-
-
- -## Constants - -
-
BusinessUnit
-

Helper that handles retrieval of BU info

-
-
dataStore : TYPE.Cache
-
-
Cli
-

CLI helper class

-
-
config
-

Central class for loading and validating properties from config and auth

-
-
DevOps
-

DevOps helper class

-
-
File
-

File extends fs-extra. It adds logger and util methods for file handling

-
-
Init
-

CLI helper class

-
-
Init
-

CLI helper class

-
-
Init
-

CLI helper class

-
-
Init
-

CLI helper class

-
-
Util
-

Util that contains logger and simple util methods

-
-
- -## Functions - -
-
csvToArray(csv)Array.<string>
-

helper to convert CSVs into an array. if only one value was given, it's also returned as an array

-
-
Mcdev.(methodName, businessUnit, [selectedType], [keys])Promise.<Object.<string, Array.<string>>>
-

run a method across BUs

-
-
Mcdev.(methodName, cred, bu, [type], keyArr)Promise.<Array.<string>>
-

helper for Mcdev.#runMethod

-
-
Mcdev.(selectedType, buObject)Array.<string>
-

helper for Mcdev.#runOnBU

-
-
Mcdev.(cred, bu, type, [keyArr])Promise.<Array.<string>>
-

Updates the key to match the name field

-
-
Automation.(metadata)boolean
-

helper for postRetrieveTasks and execute

-
-
Automation.(metadataMap, key)Promise.<{key:string, response:object}>
-

helper for execute

-
-
Automation.(metadataEntry)Promise.<{key:string, response:object}>
-

helper for execute

-
-
Automation.(metadata)Promise.<{key:string, response:object}>
-

helper for pause

-
-
Automation.(metadata)
-

helper for preDeployTasks and execute

-
-
Automation.(metadataMap, key)Promise.<void>
-

helper for postDeployTasks

-
-
Automation.(metadataMap, originalMetadataMap, key, [oldKey])Promise.<{key:string, response:object}>
-

helper for postDeployTasks

-
-
DataExtension.(upsertedMetadata, originalMetadata, createdUpdated)void
-

takes care of updating attribute groups on child BUs after an update to Shared DataExtensions -helper for postDeployTasks -fixes an issue where shared data extensions are not visible in data designer on child BU; SF known issue: https://issues.salesforce.com/#q=W-11031095

-
-
DataExtension.()Array.<string>
-

helper for DataExtension.#fixShared

-
-
DataExtension.(childBuName, buObjectParent, clientParent, sharedDataExtensionMap)Promise.<Array.<string>>
-

helper for DataExtension.#fixShared

-
-
DataExtension.(deId, deKey, buObjectChildBu, clientChildBu, buObjectParent, clientParent)Promise.<boolean>
-

method that actually takes care of triggering the update for a particular BU-sharedDe combo -helper for DataExtension.#fixShared_onBU

-
-
DataExtension.(buObjectChildBu, clientChildBu, deKey, deId)Promise.<string>
-

add a new field to the shared DE to trigger an update to the data model -helper for DataExtension.#fixShared_item

-
-
DataExtension.(randomSuffix, buObjectParent, clientParent, deKey)Promise.<string>
-

get ID of the field added by DataExtension.#fixShared_item_addField on the shared DE via parent BU -helper for DataExtension.#fixShared_item

-
-
DataExtension.(randomSuffix, buObjectChildBu, clientChildBu, deKey, fieldObjectID)Promise
-

delete the field added by DataExtension.#fixShared_item_addField -helper for DataExtension.#fixShared_item

-
-
getUserName(userList, item, fieldname)string
-
-
setupSDK(sessionKey, authObject)SDK
-

Returns an SDK instance to be used for API calls

-
-
getActualJson(customerKey, type, subtype, [buName])Promise.<string>
-

gets file from Retrieve folder

-
-
getActualFile(customerKey, type, subtype, ext)string
-

gets file from Retrieve folder

-
-
- -## Typedefs - -
-
TypeKeyCombo : Object.<string, string>
-

object-key=metadata type, value=array of external keys

-
-
MetadataTypeItemDiff : Object.<string, any>
-

key=customer key

-
-
CodeExtractItem : object
-
-
CodeExtract : object
-
-
CodeExtractItem : object
-
-
ScriptMap : object
-
-
AssetSubType : Object.<string, any>
-
-
DataExtensionFieldMap : object
-
-
DataExtensionMap : object
-
-
UserDocumentMap : object
-

key=customer key

-
-
BusinessUnitAssignmentConfiguration : object
-
-
AutomationActivity : object
-
-
AutomationStep : object
-
-
AutomationSchedule : object
-

REST format

-
-
AutomationScheduleSoap : object
-

SOAP format

-
-
AutomationItem : object
-
-
VerificationItem : object
-
-
SDK : Object.<string, AutomationItem>
-
-
skipInteraction : object
-

signals what to insert automatically for things usually asked via wizard

-
-
AuthObject : object
-
-
SoapFilter : object
-
-
Mcdevrc : object
-
-
Logger : object
-
-
- - - -## Builder -Builds metadata from a template using market specific customisation - -**Kind**: global class - -* [Builder](#Builder) - * [new Builder(properties, buObject)](#new_Builder_new) - * _instance_ - * [.metadata](#Builder+metadata) : TYPE.MultiMetadataTypeList - * [._buildDefinition(metadataType, name, templateVariables)](#Builder+_buildDefinition) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [._buildTemplate(metadataType, keyArr, templateVariables)](#Builder+_buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * _static_ - * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Builder.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildDefinition(businessUnit, selectedType, name, market)](#Builder.buildDefinition) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildDefinitionBulk(listName, type, name)](#Builder.buildDefinitionBulk) ⇒ Promise.<Array.<TYPE.MultiMetadataTypeList>> - - - -### new Builder(properties, buObject) -Creates a Builder, uses v2 auth if v2AuthOptions are passed. - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | properties for auth saved | -| buObject | TYPE.BuObject | properties for auth | - - - -### builder.metadata : TYPE.MultiMetadataTypeList -**Kind**: instance property of [Builder](#Builder) - - -### builder.\_buildDefinition(metadataType, name, templateVariables) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Builds a specific metadata file by name - -**Kind**: instance method of [Builder](#Builder) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataType | string | metadata type to build | -| name | string | name of metadata to build | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### builder.\_buildTemplate(metadataType, keyArr, templateVariables) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Build a template based on a list of metadata files in the retrieve folder. - -**Kind**: instance method of [Builder](#Builder) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataType | string | metadata type to create a template of | -| keyArr | Array.<string> | customerkey of metadata to create a template of | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Builder.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Build a template based on a list of metadata files in the retrieve folder. - -**Kind**: static method of [Builder](#Builder) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | -| market | string | market localizations | - - - -### Builder.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Build a specific metadata file based on a template. - -**Kind**: static method of [Builder](#Builder) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | string | name of the metadata | -| market | string | market localizations | - - - -### Builder.buildDefinitionBulk(listName, type, name) ⇒ Promise.<Array.<TYPE.MultiMetadataTypeList>> -Build a specific metadata file based on a template using a list of bu-market combos - -**Kind**: static method of [Builder](#Builder) -**Returns**: Promise.<Array.<TYPE.MultiMetadataTypeList>> - - - -| Param | Type | Description | -| --- | --- | --- | -| listName | string | name of list of BU-market combos | -| type | string | supported metadata type | -| name | string | name of the metadata | - - - -## Deployer -Reads metadata from local directory and deploys it to specified target business unit. -Source and target business units are also compared before the deployment to apply metadata specific patches. - -**Kind**: global class - -* [Deployer](#Deployer) - * [new Deployer(properties, buObject)](#new_Deployer_new) - * _instance_ - * [.metadata](#Deployer+metadata) : TYPE.MultiMetadataTypeMap - * [._deploy([typeArr], [keyArr])](#Deployer+_deploy) ⇒ Promise.<TYPE.MultiMetadataTypeMap> - * _static_ - * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Deployer.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - * [._deployBU(cred, bu, properties, [typeArr], [keyArr])](#Deployer._deployBU) ⇒ Promise.<TYPE.MultiMetadataTypeMap> - * [.readBUMetadata(deployDir, [typeArr], [listBadKeys])](#Deployer.readBUMetadata) ⇒ TYPE.MultiMetadataTypeMap - * [.createFolderDefinitions(deployDir, metadata, metadataTypeArr)](#Deployer.createFolderDefinitions) ⇒ void - - - -### new Deployer(properties, buObject) -Creates a Deployer, uses v2 auth if v2AuthOptions are passed. - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | -| buObject | TYPE.BuObject | properties for auth | - - - -### deployer.metadata : TYPE.MultiMetadataTypeMap -**Kind**: instance property of [Deployer](#Deployer) - - -### deployer.\_deploy([typeArr], [keyArr]) ⇒ Promise.<TYPE.MultiMetadataTypeMap> -Deploy all metadata that is located in the deployDir - -**Kind**: instance method of [Deployer](#Deployer) -**Returns**: Promise.<TYPE.MultiMetadataTypeMap> - Promise of all deployed metadata - -| Param | Type | Description | -| --- | --- | --- | -| [typeArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type (can include subtype) | -| [keyArr] | Array.<string> | limit deployment to given metadata keys | - - - -### Deployer.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> -Deploys all metadata located in the 'deploy' directory to the specified business unit - -**Kind**: static method of [Deployer](#Deployer) -**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | -| [keyArr] | Array.<string> | limit deployment to given metadata keys | - - - -### Deployer.\_deployBU(cred, bu, properties, [typeArr], [keyArr]) ⇒ Promise.<TYPE.MultiMetadataTypeMap> -helper for [deploy](#Deployer.deploy) - -**Kind**: static method of [Deployer](#Deployer) -**Returns**: Promise.<TYPE.MultiMetadataTypeMap> - ensure that BUs are worked on sequentially - -| Param | Type | Description | -| --- | --- | --- | -| cred | string | name of Credential | -| bu | string | name of BU | -| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | -| [typeArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | -| [keyArr] | Array.<string> | limit deployment to given metadata keys | - - - -### Deployer.readBUMetadata(deployDir, [typeArr], [listBadKeys]) ⇒ TYPE.MultiMetadataTypeMap -Returns metadata of a business unit that is saved locally - -**Kind**: static method of [Deployer](#Deployer) -**Returns**: TYPE.MultiMetadataTypeMap - Metadata of BU in local directory - -| Param | Type | Description | -| --- | --- | --- | -| deployDir | string | root directory of metadata. | -| [typeArr] | Array.<string> | limit deployment to given metadata type | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | - - - -### Deployer.createFolderDefinitions(deployDir, metadata, metadataTypeArr) ⇒ void -parses asset metadata to auto-create folders in target folder - -**Kind**: static method of [Deployer](#Deployer) - -| Param | Type | Description | -| --- | --- | --- | -| deployDir | string | root directory of metadata. | -| metadata | TYPE.MultiMetadataTypeMap | list of metadata | -| metadataTypeArr | Array.<TYPE.SupportedMetadataTypes> | list of metadata types | - - - -## Mcdev -main class - -**Kind**: global class - -* [Mcdev](#Mcdev) - * [.version()](#Mcdev.version) ⇒ string - * [.setSkipInteraction([skipInteraction])](#Mcdev.setSkipInteraction) ⇒ void - * [.setLoggingLevel(argv)](#Mcdev.setLoggingLevel) ⇒ void - * [.setOptions(argv)](#Mcdev.setOptions) ⇒ void - * [.createDeltaPkg(argv)](#Mcdev.createDeltaPkg) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> - * [.selectTypes()](#Mcdev.selectTypes) ⇒ Promise - * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> - * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> - * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> - * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> - * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> - * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> - * [.document(businessUnit, type)](#Mcdev.document) ⇒ Promise.<void> - * [.deleteByKey(businessUnit, type, customerKey)](#Mcdev.deleteByKey) ⇒ Promise.<boolean> - * [.resolveId(businessUnit, type, id)](#Mcdev.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - * [.refresh(businessUnit, type, [keyArr])](#Mcdev.refresh) ⇒ Promise.<void> - * [.badKeys(businessUnit)](#Mcdev.badKeys) ⇒ Promise.<void> - * [.retrieveAsTemplate(businessUnit, selectedType, name, market)](#Mcdev.retrieveAsTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildTemplate(businessUnit, selectedType, keyArr, market)](#Mcdev.buildTemplate) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> - * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> - * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> - * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> - * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> - * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> - - - -### Mcdev.version() ⇒ string -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: string - current version of mcdev - - -### Mcdev.setSkipInteraction([skipInteraction]) ⇒ void -helper method to use unattended mode when including mcdev as a package - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| [skipInteraction] | boolean \| TYPE.skipInteraction | signals what to insert automatically for things usually asked via wizard | - - - -### Mcdev.setLoggingLevel(argv) ⇒ void -configures what is displayed in the console - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | list of command line parameters given by user | -| [argv.silent] | boolean | only errors printed to CLI | -| [argv.verbose] | boolean | chatty user CLI output | -| [argv.debug] | boolean | enables developer output & features | - - - -### Mcdev.setOptions(argv) ⇒ void -allows setting system wide / command related options - -**Kind**: static method of [Mcdev](#Mcdev) - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | list of command line parameters given by user | - - - -### Mcdev.createDeltaPkg(argv) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> -handler for 'mcdev createDeltaPkg - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - list of changed items - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | yargs parameters | -| [argv.range] | string | git commit range into deploy directory | -| [argv.filter] | string | filter file paths that start with any | -| [argv.diffArr] | Array.<TYPE.DeltaPkgItem> | list of files to include in delta package (skips git diff when provided) | - - - -### Mcdev.selectTypes() ⇒ Promise -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise - . - - -### Mcdev.explainTypes() ⇒ Array.<object> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Array.<object> - list of supported types with their apiNames - - -### Mcdev.upgrade() ⇒ Promise.<boolean> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - success flag - - -### Mcdev.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly]) ⇒ Promise.<object> -Retrieve all metadata from the specified business unit into the local file system. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<object> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> \| TYPE.TypeKeyCombo | limit retrieval to given metadata type | -| [keys] | Array.<string> | limit retrieval to given metadata key | -| [changelogOnly] | boolean | skip saving, only create json in memory | - - - -### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> -Deploys all metadata located in the 'deploy' directory to the specified business unit - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | -| [keyArr] | Array.<string> | limit deployment to given metadata keys | - - - -### Mcdev.initProject([credentialsName]) ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [credentialsName] | string | identifying name of the installed package / project | - - - -### Mcdev.joinProject() ⇒ Promise.<void> -Clones an existing project from git repository and installs it - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - - -### Mcdev.findBUs(credentialsName) ⇒ Promise.<void> -Refreshes BU names and ID's from MC instance - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| credentialsName | string | identifying name of the installed package / project | - - - -### Mcdev.document(businessUnit, type) ⇒ Promise.<void> -Creates docs for supported metadata types in Markdown and/or HTML format - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | metadata type | - - - -### Mcdev.deleteByKey(businessUnit, type, customerKey) ⇒ Promise.<boolean> -deletes metadata from MC instance by key - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - true if successful, false otherwise - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| customerKey | string | Identifier of metadata | - - - -### Mcdev.resolveId(businessUnit, type, id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | supported metadata type | -| id | string | Identifier of metadata | - - - -### Mcdev.refresh(businessUnit, type, [keyArr]) ⇒ Promise.<void> -ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| type | string | references credentials from properties.json | -| [keyArr] | Array.<string> | metadata keys | - - - -### Mcdev.badKeys(businessUnit) ⇒ Promise.<void> -Converts metadata to legacy format. Output is saved in 'converted' directory - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | - - - -### Mcdev.retrieveAsTemplate(businessUnit, selectedType, name, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve a specific metadata file and templatise. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | Array.<string> | name of the metadata | -| market | string | market which should be used to revert template | - - - -### Mcdev.buildTemplate(businessUnit, selectedType, keyArr, market) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Build a template based on a list of metadata files in the retrieve folder. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | -| market | string | market localizations | - - - -### Mcdev.buildDefinition(businessUnit, selectedType, name, market) ⇒ Promise.<void> -Build a specific metadata file based on a template. - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| name | string | name of the metadata | -| market | string | market localizations | - - - -### Mcdev.buildDefinitionBulk(listName, type, name) ⇒ Promise.<void> -Build a specific metadata file based on a template using a list of bu-market combos - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| listName | string | name of list of BU-market combos | -| type | string | supported metadata type | -| name | string | name of the metadata | - - - -### Mcdev.getFilesToCommit(businessUnit, selectedType, keyArr) ⇒ Promise.<Array.<string>> -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | references credentials from properties.json | -| selectedType | string | supported metadata type | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Schedule an item (shortcut for execute --schedule) - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Start/execute an item - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -pause an item - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -Updates the key to match the name field - -**Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys - -| Param | Type | Description | -| --- | --- | --- | -| businessUnit | string | name of BU | -| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -## Asset ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Asset](#Asset) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [subTypeArr], [key])](#Asset.retrieve) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveForCache([_], [subTypeArr])](#Asset.retrieveForCache) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType])](#Asset.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> - * [.create(metadata)](#Asset.create) ⇒ Promise - * [.update(metadata)](#Asset.update) ⇒ Promise - * [.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key)](#Asset.requestSubType) ⇒ Promise - * [.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables])](#Asset.requestAndSaveExtended) ⇒ Promise - * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> - * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> - * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> - * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildTemplateForNested) ⇒ Promise.<void> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Asset._buildForNested) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Asset.setFolderPath) - * [.setFolderId(metadata)](#Asset.setFolderId) - * [._mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly])](#Asset._mergeCode) ⇒ Promise.<Array.<TYPE.CodeExtract>> - * [._mergeCode_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly])](#Asset._mergeCode_slots) ⇒ Promise.<void> - * [._extractCode(metadata)](#Asset._extractCode) ⇒ TYPE.CodeExtractItem - * [._extractCode_slots(prefix, metadataSlots, codeArr)](#Asset._extractCode_slots) ⇒ void - * [.getJsonFromFS(dir, [_], selectedSubType)](#Asset.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.findSubType(templateDir, templateName)](#Asset.findSubType) ⇒ Promise.<TYPE.AssetSubType> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName)](#Asset.readSecondaryFolder) ⇒ TYPE.AssetItem - * [.getFilesToCommit(keyArr)](#Asset.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Asset.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Asset.postDeleteTasks) ⇒ void - * [.resolveId(id)](#Asset.resolveId) ⇒ Promise.<{key:string, name:string, path:string}> - - - -### Asset.retrieve(retrieveDir, _, [subTypeArr], [key]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves Metadata of Asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | - | -| [subTypeArr] | Array.<TYPE.AssetSubType> | optionally limit to a single subtype | -| [key] | string | customer key | - - - -### Asset.retrieveForCache([_], [subTypeArr]) ⇒ Promise.<{metadata: TYPE.AssetMap, type: string}> -Retrieves asset metadata for caching - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - - - -### Asset.retrieveAsTemplate(templateDir, name, templateVariables, [selectedSubType]) ⇒ Promise.<{metadata: TYPE.AssetItem, type: string}> -Retrieves asset metadata for templating - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{metadata: TYPE.AssetItem, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [selectedSubType] | TYPE.AssetSubType | optionally limit to a single subtype | - - - -### Asset.create(metadata) ⇒ Promise -Creates a single asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.update(metadata) ⇒ Promise -Updates a single asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.requestSubType(subType, [retrieveDir], [templateName], [templateVariables], key) ⇒ Promise -Retrieves Metadata of a specific asset type - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| [retrieveDir] | string | target directory for saving assets | -| [templateName] | string | name of the metadata file | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| key | string | customer key to filter by | - - - -### Asset.requestAndSaveExtended(items, subType, retrieveDir, [templateVariables]) ⇒ Promise -Retrieves extended metadata (files or extended content) of asset - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| items | Array | array of items to retrieve | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Asset.\_retrieveExtendedFile(metadata, subType, retrieveDir) ⇒ Promise.<void> -Some metadata types store their actual content as a separate file, e.g. images -This method retrieves these and saves them alongside the metadata json - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| subType | TYPE.AssetSubType | group of similar assets to put in a folder (ie. images) | -| retrieveDir | string | target directory for saving assets | - - - -### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](#Asset.preDeployTasks) -Some metadata types store their actual content as a separate file, e.g. images -This method reads these from the local FS stores them in the metadata object allowing to deploy it - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<string> - if found will return the path of the binary file - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset | -| subType | TYPE.AssetSubType | | group of similar assets to put in a folder (ie. images) | -| deployDir | string | | directory of deploy files | -| [pathOnly] | boolean | false | used by getFilesToCommit which does not need the binary file to be actually read | - - - -### Asset.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | - - - -### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> -Gets executed after deployment of metadata type - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### Asset.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.AssetItem> -prepares an asset definition for deployment - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset | -| deployDir | string | directory of deploy files | - - - -### Asset.\_getMainSubtype(extendedSubType) ⇒ string -find the subType matching the extendedSubType - -**Kind**: static method of [Asset](#Asset) -**Returns**: string - subType: block, message, other, etc - -| Param | Type | Description | -| --- | --- | --- | -| extendedSubType | string | webpage, htmlblock, etc | - - - -### Asset.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### Asset.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<void> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating -``` - - -### Asset.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<void> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.AssetItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### Asset.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### Asset.setFolderId(metadata) -Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadata | TYPE.AssetItem | | a single asset definition | -| deployDir | string | | directory of deploy files | -| subType | TYPE.AssetSubType | | asset-subtype name | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<void> - - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| prefix | string | | usually the customerkey | -| metadataSlots | object | | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| readDirArr | Array.<string> | | directory of deploy files | -| subtypeExtension | string | | asset-subtype name ending on -meta | -| subDirArr | Array.<string> | | directory of files w/o leading deploy dir | -| fileList | Array.<object> | | directory of files w/o leading deploy dir | -| customerKey | string | | external key of template (could have been changed if used during templating) | -| [templateName] | string | | name of the template used to built defintion (prior applying templating) | -| [fileListOnly] | boolean | false | does not read file contents nor update metadata if true | - - - -### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it -to allow saving that separately and formatted - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.CodeExtractItem - { json: metadata, codeArr: object[], subFolder: string[] } - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AssetItem | a single asset definition | - - - -### Asset.\_extractCode\_slots(prefix, metadataSlots, codeArr) ⇒ void -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| prefix | string | usually the customerkey | -| metadataSlots | object | metadata.views.html.slots or deeper slots.<>.blocks.<>.slots | -| codeArr | Array.<object> | to be extended array for extracted code | - - - -### Asset.getJsonFromFS(dir, [_], selectedSubType) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their fileName without '.json' ending - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map - -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [_] | void | unused parameter | -| selectedSubType | Array.<string> | asset, message, ... | - - - -### Asset.findSubType(templateDir, templateName) ⇒ Promise.<TYPE.AssetSubType> -check template directory for complex types that open subfolders for their subtypes - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<TYPE.AssetSubType> - subtype name - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | - - - -### Asset.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) ⇒ TYPE.AssetItem -optional method used for some types to try a different folder structure - -**Kind**: static method of [Asset](#Asset) -**Returns**: TYPE.AssetItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | - - - -### Asset.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Asset](#Asset) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Asset.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Asset.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item -cannot use the generic method due to the complexity of how assets are saved to disk - -**Kind**: static method of [Asset](#Asset) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### Asset.resolveId(id) ⇒ Promise.<{key:string, name:string, path:string}> -get name & key for provided id - -**Kind**: static method of [Asset](#Asset) -**Returns**: Promise.<{key:string, name:string, path:string}> - key, name and path of metadata; null if not found - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | - - - -## AttributeGroup ⇐ [MetadataType](#MetadataType) -AttributeGroup MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - - - -### AttributeGroup.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups. - -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### AttributeGroup.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema attribute groups for caching. - -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [AttributeGroup](#AttributeGroup) -**Returns**: TYPE.MetadataTypeItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | - - - -## AttributeSet ⇐ [MetadataType](#MetadataType) -AttributeSet MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.fixShared_retrieve(sharedDataExtensionMap, fixShared_fields)](#AttributeSet.fixShared_retrieve) ⇒ Promise.<Array.<string>> - * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> - - - -### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set Definitions. - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set definitions for caching. - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - - -### AttributeSet.fixShared\_retrieve(sharedDataExtensionMap, fixShared_fields) ⇒ Promise.<Array.<string>> -used to identify updated shared data extensions that are used in attributeSets. -helper for DataExtension.#fixShared_onBU - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Promise.<Array.<string>> - Promise of list of shared dataExtension IDs - -| Param | Type | Description | -| --- | --- | --- | -| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | -| fixShared_fields | object | DataExtensionField.fixShared_fields | - - - -### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: TYPE.MetadataTypeItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata | - - - -### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> -helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) - -**Kind**: static method of [AttributeSet](#AttributeSet) -**Returns**: Array.<object> - all system value definitions - - -## Automation ⇐ [MetadataType](#MetadataType) -Automation MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Automation](#Automation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Automation.retrieve) ⇒ Promise.<TYPE.AutomationMapObj> - * [.handleRESTErrors(ex, id)](#Automation.handleRESTErrors) ⇒ null - * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> - * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void - * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> - * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void - * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> - * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> - * [.create(metadata)](#Automation.create) ⇒ Promise - * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> - * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ boolean - * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ Promise.<void> - * [.setFolderPath(metadata)](#Automation.setFolderPath) - * [.setFolderId(metadata)](#Automation.setFolderId) - * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ TYPE.AutomationScheduleSoap - * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ string - * [.document([metadata])](#Automation.document) ⇒ Promise.<void> - * [.getFilesToCommit(keyArr)](#Automation.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Automation.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey)](#Automation.postDeleteTasks) ⇒ void - - - -### Automation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Automation.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) - -**Kind**: static method of [Automation](#Automation) -**Returns**: null - - - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | - - - -### Automation.retrieveChangelog() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves Metadata of Automation - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - - -### Automation.retrieveForCache() ⇒ Promise.<TYPE.AutomationMapObj> -Retrieves automation metadata for caching - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMapObj> - Promise of metadata - - -### Automation.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.AutomationItemObj> -Retrieve a specific Automation Definition by Name - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItemObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Automation.postRetrieveTasks(metadata) ⇒ TYPE.AutomationItem \| void -manages post retrieve steps - -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationItem \| void - parsed item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | a single automation | - - - -### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts - -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> \| void - formatted Error Message - -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | - - - -### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> -Deploys automation - the saved file is the original one due to large differences required for deployment - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationMap> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationMap | metadata mapped by their keyField | -| targetBU | string | name/shorthand of target businessUnit for mapping | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### Automation.create(metadata) ⇒ Promise -Creates a single automation - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | - - - -### Automation.update(metadata, metadataBefore) ⇒ Promise -Updates a single automation - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | single metadata entry | -| metadataBefore | TYPE.AutomationItem | metadata mapped by their keyField | - - - -### Automation.preDeployTasks(metadata) ⇒ Promise.<TYPE.AutomationItem> -Gets executed before deploying metadata - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<TYPE.AutomationItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | metadata mapped by their keyField | - - - -### Automation.validateDeployMetadata(metadata) ⇒ boolean -Validates the automation to be sure it can be deployed. -Whitelisted Activites are deployed but require configuration - -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - result if automation can be deployed based on steps - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | single automation record | - - - -### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ Promise.<void> -Gets executed after deployment of metadata type - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | -| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | - - - -### Automation.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [Automation](#Automation) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### Automation.setFolderId(metadata) -automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy - -**Kind**: static method of [Automation](#Automation) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Automation.\_buildSchedule(scheduleObject) ⇒ TYPE.AutomationScheduleSoap -Builds a schedule object to be used for scheduling an automation -based on combination of ical string and start/end dates. - -**Kind**: static method of [Automation](#Automation) -**Returns**: TYPE.AutomationScheduleSoap - Schedulable object for soap API (currently not rest supported) - -| Param | Type | Description | -| --- | --- | --- | -| scheduleObject | TYPE.AutomationSchedule | child of automation metadata used for scheduling | - - - -### Automation.\_calcTime(offsetServer, dateInput, [offsetInput]) ⇒ string -used to convert dates to the system timezone required for startDate - -**Kind**: static method of [Automation](#Automation) -**Returns**: string - date in server - -| Param | Type | Description | -| --- | --- | --- | -| offsetServer | number | stack4: US Mountain time (UTC-7); other stacks: US Central (UTC-6) | -| dateInput | string \| Date | date in ISO format (2021-12-05T20:00:00.983) | -| [offsetInput] | string | timzone difference (+02:00) | - - - -### Automation.document([metadata]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it - -**Kind**: static method of [Automation](#Automation) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.AutomationMap | a list of dataExtension definitions | - - - -### Automation.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Automation](#Automation) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Automation.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit - -**Kind**: static method of [Automation](#Automation) -**Returns**: boolean - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Automation.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [Automation](#Automation) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -## Campaign ⇐ [MetadataType](#MetadataType) -Campaign MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Campaign](#Campaign) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Campaign.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Campaign.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getAssetTags(retrieveDir, campaignId, name)](#Campaign.getAssetTags) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - - -### Campaign.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of campaigns. Afterwards, starts metadata retrieval for their campaign assets - -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Campaign.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### Campaign.getAssetTags(retrieveDir, campaignId, name) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Parses campaign asset response body and returns metadata entries mapped to their id - -**Kind**: static method of [Campaign](#Campaign) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Campaign Asset Object - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | folder where to save | -| campaignId | string | of camapaign to retrieve | -| name | string | of camapaign for saving | - - - -## ContentArea ⇐ [MetadataType](#MetadataType) -ContentArea MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [ContentArea](#ContentArea) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ContentArea.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.setFolderPath(metadata)](#ContentArea.setFolderPath) - * [.postRetrieveTasks(metadata)](#ContentArea.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - - - -### ContentArea.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [ContentArea](#ContentArea) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### ContentArea.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [ContentArea](#ContentArea) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### ContentArea.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving - -**Kind**: static method of [ContentArea](#ContentArea) -**Returns**: TYPE.MetadataTypeItem - parsed item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -## DataExtension ⇐ [MetadataType](#MetadataType) -DataExtension MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [DataExtension](#DataExtension) ⇐ [MetadataType](#MetadataType) - * [.upsert(metadataMap)](#DataExtension.upsert) ⇒ Promise - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#DataExtension.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.create(metadata)](#DataExtension.create) ⇒ Promise - * [.update(metadata)](#DataExtension.update) ⇒ Promise - * [.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated)](#DataExtension.postDeployTasks) ⇒ void - * [.retrieve(retrieveDir, [additionalFields], [_], [key])](#DataExtension.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveSharedForCache([additionalFields])](#DataExtension.retrieveSharedForCache) ⇒ Promise.<TYPE.DataExtensionMap> - * [.retrieveChangelog([additionalFields])](#DataExtension.retrieveChangelog) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.postRetrieveTasks(metadata)](#DataExtension.postRetrieveTasks) ⇒ TYPE.DataExtensionItem - * [.preDeployTasks(metadata)](#DataExtension.preDeployTasks) ⇒ Promise.<TYPE.DataExtensionItem> - * [.document([metadataMap])](#DataExtension.document) ⇒ Promise.<void> - * [.deleteByKey(customerKey)](#DataExtension.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#DataExtension.postDeleteTasks) ⇒ Promise.<void> - * [.retrieveForCache()](#DataExtension.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtension.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - * [.setFolderPath(metadata)](#DataExtension.setFolderPath) - * [.getFilesToCommit(keyArr)](#DataExtension.getFilesToCommit) ⇒ Array.<string> - - - -### DataExtension.upsert(metadataMap) ⇒ Promise -Upserts dataExtensions after retrieving them from source and target to compare -if create or update operation is needed. - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.DataExtensionMap | dataExtensions mapped by their customerKey | - - - -### DataExtension.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: 'create' \| 'update' \| 'skip' - action to take - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -### DataExtension.create(metadata) ⇒ Promise -Create a single dataExtension. Also creates their columns in 'dataExtension.columns' - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | - - - -### DataExtension.update(metadata) ⇒ Promise -Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.DataExtensionItem | single metadata entry | - - - -### DataExtension.postDeployTasks(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type - -**Kind**: static method of [DataExtension](#DataExtension) - -| Param | Type | Description | -| --- | --- | --- | -| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | -| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### DataExtension.retrieve(retrieveDir, [additionalFields], [_], [key]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [_] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### DataExtension.retrieveSharedForCache([additionalFields]) ⇒ Promise.<TYPE.DataExtensionMap> -get shared dataExtensions from parent BU and merge them into the cache -helper for [retrieve](#DataExtension.retrieve) and for AttributeSet.fixShared_retrieve - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionMap> - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### DataExtension.retrieveChangelog([additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### DataExtension.postRetrieveTasks(metadata) ⇒ TYPE.DataExtensionItem -manages post retrieve steps - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: TYPE.DataExtensionItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single dataExtension | - - - -### DataExtension.preDeployTasks(metadata) ⇒ Promise.<TYPE.DataExtensionItem> -prepares a DataExtension for deployment - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<TYPE.DataExtensionItem> - Promise of updated single DE - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.DataExtensionItem | a single data Extension | - - - -### DataExtension.document([metadataMap]) ⇒ Promise.<void> -Parses metadata into a readable Markdown/HTML format then saves it - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [metadataMap] | TYPE.DataExtensionMap | a list of dataExtension definitions | - - - -### DataExtension.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### DataExtension.postDeleteTasks(customerKey) ⇒ Promise.<void> -clean up after deleting a metadata item - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<void> - - promise - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### DataExtension.retrieveForCache() ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise - - -### DataExtension.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.DataExtensionMap, type: string}> -Retrieves dataExtension metadata in template format. - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Promise.<{metadata: TYPE.DataExtensionMap, type: string}> - Promise of items - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata item | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### DataExtension.setFolderPath(metadata) -dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve -it also sets the content type which is basically the subtype - -**Kind**: static method of [DataExtension](#DataExtension) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### DataExtension.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [DataExtension](#DataExtension) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## DataExtensionField ⇐ [MetadataType](#MetadataType) -DataExtensionField MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [DataExtensionField](#DataExtensionField) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields])](#DataExtensionField.retrieve) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.retrieveForCache([requestParams], [additionalFields])](#DataExtensionField.retrieveForCache) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - * [.convertToSortedArray(fieldsObj)](#DataExtensionField.convertToSortedArray) ⇒ Array.<TYPE.DataExtensionFieldItem> - * [.sortDeFields(a, b)](#DataExtensionField.sortDeFields) ⇒ boolean - * [.postRetrieveTasks(metadata, forDataExtension)](#DataExtensionField.postRetrieveTasks) ⇒ TYPE.DataExtensionFieldItem - * [.prepareDeployColumnsOnUpdate(deployColumns, deKey)](#DataExtensionField.prepareDeployColumnsOnUpdate) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - * [.deleteByKey(customerKey)](#DataExtensionField.deleteByKey) ⇒ Promise.<boolean> - * [.deleteByKeySOAP(customerKey, [fieldId])](#DataExtensionField.deleteByKeySOAP) ⇒ boolean - * [.postDeleteTasks(customerKey)](#DataExtensionField.postDeleteTasks) ⇒ void - - - -### DataExtensionField.retrieve(retrieveDir, [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records and saves it to disk - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### DataExtensionField.retrieveForCache([requestParams], [additionalFields]) ⇒ Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> -Retrieves all records for caching - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}> - Promise of items - -| Param | Type | Description | -| --- | --- | --- | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> -helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects - -| Param | Type | Description | -| --- | --- | --- | -| fieldsObj | TYPE.DataExtensionFieldMap | customerKey-based list of fields for one dataExtension | - - - -### DataExtensionField.sortDeFields(a, b) ⇒ boolean -sorting method to ensure `Ordinal` is respected - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - sorting based on Ordinal - -| Param | Type | Description | -| --- | --- | --- | -| a | TYPE.DataExtensionFieldItem | - | -| b | TYPE.DataExtensionFieldItem | - | - - - -### DataExtensionField.postRetrieveTasks(metadata, forDataExtension) ⇒ TYPE.DataExtensionFieldItem -manages post retrieve steps - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: TYPE.DataExtensionFieldItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.DataExtensionFieldItem | a single item | -| forDataExtension | boolean | when used by DataExtension class we remove more fields | - - - -### DataExtensionField.prepareDeployColumnsOnUpdate(deployColumns, deKey) ⇒ Promise.<Object.<string, TYPE.DataExtensionFieldItem>> -Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. -Removes FieldType field if its the same in deploy and target column, because it results in an error even if its of the same type - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<Object.<string, TYPE.DataExtensionFieldItem>> - existing fields by their original name to allow re-adding FieldType after update - -| Param | Type | Description | -| --- | --- | --- | -| deployColumns | Array.<TYPE.DataExtensionFieldItem> | Columns of data extension that will be deployed | -| deKey | string | external/customer key of Data Extension | - - - -### DataExtensionField.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### DataExtensionField.deleteByKeySOAP(customerKey, [fieldId]) ⇒ boolean -Delete a data extension from the specified business unit - -**Kind**: static method of [DataExtensionField](#DataExtensionField) -**Returns**: boolean - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [fieldId] | string | for programmatic deletes only one can pass in the ID directly | - - - -### DataExtensionField.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [DataExtensionField](#DataExtensionField) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -## DataExtensionTemplate ⇐ [MetadataType](#MetadataType) -DataExtensionTemplate MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - - -### DataExtensionTemplate.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [DataExtensionTemplate](#DataExtensionTemplate) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -## DataExtract ⇐ [MetadataType](#MetadataType) -DataExtract MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [DataExtract](#DataExtract) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtract.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtract.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#DataExtract.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(dataExtract)](#DataExtract.create) ⇒ Promise - * [.update(dataExtract)](#DataExtract.update) ⇒ Promise - * [.preDeployTasks(metadata)](#DataExtract.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#DataExtract.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#DataExtract.deleteByKey) ⇒ Promise.<boolean> - - - -### DataExtract.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity. -Endpoint /automation/v1/dataextracts/ returns all Data Extracts - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### DataExtract.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### DataExtract.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific dataExtract Definition by Name - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### DataExtract.create(dataExtract) ⇒ Promise -Creates a single Data Extract - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - - - -### DataExtract.update(dataExtract) ⇒ Promise -Updates a single Data Extract - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| dataExtract | TYPE.MetadataTypeItem | a single Data Extract | - - - -### DataExtract.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a dataExtract for deployment - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single dataExtract activity definition | - - - -### DataExtract.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: TYPE.MetadataTypeItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### DataExtract.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [DataExtract](#DataExtract) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -## DataExtractType ⇐ [MetadataType](#MetadataType) -DataExtractType MetadataType -Only for Caching No retrieve/upsert is required -as this is a configuration in the EID - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [DataExtractType](#DataExtractType) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#DataExtractType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#DataExtractType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - - -### DataExtractType.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type. - -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### DataExtractType.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Type for caching. - -**Kind**: static method of [DataExtractType](#DataExtractType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -## Discovery ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - - -### Discovery.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves API endpoint -documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm - -**Kind**: static method of [Discovery](#Discovery) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | not used | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -## Email ⇐ [MetadataType](#MetadataType) -Email MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Email](#Email) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Email.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Email.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postRetrieveTasks(metadata)](#Email.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - - - -### Email.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Email.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy - -**Kind**: static method of [Email](#Email) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Email.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [Email](#Email) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | - - - -## EmailSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [EmailSend](#EmailSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#EmailSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadataItem)](#EmailSend.update) ⇒ Promise - * [.create(metadataItem)](#EmailSend.create) ⇒ Promise - * [.deleteByKey(customerKey)](#EmailSend.deleteByKey) ⇒ Promise.<boolean> - * [.preDeployTasks(metadata)](#EmailSend.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postRetrieveTasks(metadata)](#EmailSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - - - -### EmailSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### EmailSend.update(metadataItem) ⇒ Promise -Updates a single item - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | - - - -### EmailSend.create(metadataItem) ⇒ Promise -Creates a single item - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataItem | TYPE.MetadataTypeItem | a single item | - - - -### EmailSend.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### EmailSend.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a single item for deployment - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### EmailSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [EmailSend](#EmailSend) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | - - - -## Event ⇐ [MetadataType](#MetadataType) -Event MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Event](#Event) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Event.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#Event.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.create(metadata)](#Event.create) ⇒ Promise - * [.update(metadataEntry)](#Event.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata)](#Event.parseMetadata) ⇒ TYPE.MetadataTypeItem - - - -### Event.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Event Definition. -Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details. -Currently it is not needed to loop over Imports with endpoint /interaction/v1/EventDefinitions/{id} - -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Event.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### Event.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Event Definition by Name - -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Event.postRetrieveTasks(eventDef) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| eventDef | TYPE.MetadataTypeItem | a single item of Event Definition | - - - -### Event.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy - -**Kind**: static method of [Event](#Event) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### Event.create(metadata) ⇒ Promise -Creates a single Event Definition - -**Kind**: static method of [Event](#Event) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single Event Definition | - - - -### Event.update(metadataEntry) ⇒ Promise -Updates a single Event Definition (using PUT method since PATCH isn't supported) - -**Kind**: static method of [Event](#Event) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single Event Definition | - - - -### Event.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment - -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed version - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single eventDefinition | - - - -### Event.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving - -**Kind**: static method of [Event](#Event) -**Returns**: TYPE.MetadataTypeItem - parsed metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single event definition | - - - -## FtpLocation ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [FtpLocation](#FtpLocation) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FtpLocation.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FtpLocation.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - - -### FtpLocation.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FtpLocation -Endpoint /automation/v1/ftplocations/ return all FtpLocations - -**Kind**: static method of [FtpLocation](#FtpLocation) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### FtpLocation.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. - -**Kind**: static method of [FtpLocation](#FtpLocation) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - - -## FileTransfer ⇐ [MetadataType](#MetadataType) -FileTransfer MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [FileTransfer](#FileTransfer) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#FileTransfer.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#FileTransfer.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#FileTransfer.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(fileTransfer)](#FileTransfer.create) ⇒ Promise - * [.update(fileTransfer)](#FileTransfer.update) ⇒ Promise - * [.preDeployTasks(metadata)](#FileTransfer.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#FileTransfer.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#FileTransfer.deleteByKey) ⇒ Promise.<boolean> - - - -### FileTransfer.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity. -Endpoint /automation/v1/filetransfers/ returns all File Transfers - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### FileTransfer.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of FileTransfer Activity for caching - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - - -### FileTransfer.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific File Transfer Definition by Name - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### FileTransfer.create(fileTransfer) ⇒ Promise -Creates a single File Transfer - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - - - -### FileTransfer.update(fileTransfer) ⇒ Promise -Updates a single File Transfer - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| fileTransfer | TYPE.MetadataTypeItem | a single File Transfer | - - - -### FileTransfer.preDeployTasks(metadata) ⇒ Promise -prepares a fileTransfer for deployment - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - - - -### FileTransfer.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: TYPE.MetadataTypeItem - parsed metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single fileTransfer activity definition | - - - -### FileTransfer.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [FileTransfer](#FileTransfer) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -## Filter ⇐ [MetadataType](#MetadataType) -Filter MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - - -### Filter.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Filter. -Endpoint /automation/v1/filters/ returns all Filters, -but only with some of the fields. So it is needed to loop over -Filters with the endpoint /automation/v1/filters/{id} - -**Kind**: static method of [Filter](#Filter) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -## Folder ⇐ [MetadataType](#MetadataType) -Folder MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Folder](#Folder) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#Folder.retrieve) ⇒ Promise - * [.retrieveForCache([_], [subTypeArr])](#Folder.retrieveForCache) ⇒ Promise - * [.upsert(metadata)](#Folder.upsert) ⇒ Promise.<object> - * [.create(metadataEntry)](#Folder.create) ⇒ Promise - * [.update(metadataEntry)](#Folder.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Folder.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.getJsonFromFS(dir, [listBadKeys])](#Folder.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList])](#Folder.retrieveHelper) ⇒ Promise.<object> - * [.postRetrieveTasks(metadata)](#Folder.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.saveResults(results, retrieveDir, mid)](#Folder.saveResults) ⇒ Promise.<object> - - - -### Folder.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise -Retrieves metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | content type of folder | -| [key] | string | customer key of single item to retrieve | - - - -### Folder.retrieveForCache([_], [subTypeArr]) ⇒ Promise -Retrieves folder metadata for caching - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [subTypeArr] | Array.<string> | content type of folder | - - - -### Folder.upsert(metadata) ⇒ Promise.<object> -Folder upsert (copied from Metadata Upsert), after retrieving from target -and comparing to check if create or update operation is needed. -Copied due to having a dependency on itself, meaning the created need to be serial - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | - - - -### Folder.create(metadataEntry) ⇒ Promise -creates a folder based on metatadata - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata of the folder | - - - -### Folder.update(metadataEntry) ⇒ Promise -Updates a single Folder. - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | - - - -### Folder.preDeployTasks(metadata) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares a folder for deployment - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of parsed folder metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single folder definition | - - - -### Folder.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending - -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map - -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | - - - -### Folder.retrieveHelper([additionalFields], [queryAllAccounts], [contentTypeList]) ⇒ Promise.<object> -Helper to retrieve the folders as promise - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - soap object - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [queryAllAccounts] | boolean | which queryAllAccounts setting to use | -| [contentTypeList] | Array.<string> | content type of folder | - - - -### Folder.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type - -**Kind**: static method of [Folder](#Folder) -**Returns**: TYPE.MetadataTypeItem - cloned metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | metadata mapped by their keyField | - - - -### Folder.saveResults(results, retrieveDir, mid) ⇒ Promise.<object> -Helper for writing Metadata to disk, used for Retrieve and deploy - -**Kind**: static method of [Folder](#Folder) -**Returns**: Promise.<object> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| results | object | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| mid | number | current mid for this credential / business unit | - - - -## ImportFile ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [ImportFile](#ImportFile) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#ImportFile.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#ImportFile.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#ImportFile.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(importFile)](#ImportFile.create) ⇒ Promise - * [.update(importFile)](#ImportFile.update) ⇒ Promise - * [.deploy(metadataMap, deployDir, retrieveDir)](#ImportFile.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.preDeployTasks(metadata)](#ImportFile.preDeployTasks) ⇒ Promise - * [.postRetrieveTasks(metadata)](#ImportFile.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(customerKey)](#ImportFile.deleteByKey) ⇒ Promise.<boolean> - - - -### ImportFile.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Import File. -Endpoint /automation/v1/imports/ return all Import Files with all details. -Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id} - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### ImportFile.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | - - - -### ImportFile.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Retrieve a specific Import Definition by Name - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### ImportFile.create(importFile) ⇒ Promise -Creates a single Import File - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | - - - -### ImportFile.update(importFile) ⇒ Promise -Updates a single Import File - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| importFile | TYPE.MetadataTypeItem | a single Import File | - - - -### ImportFile.deploy(metadataMap, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### ImportFile.preDeployTasks(metadata) ⇒ Promise -prepares a import definition for deployment - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single importDef | - - - -### ImportFile.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: TYPE.MetadataTypeItem - parsed metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### ImportFile.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [ImportFile](#ImportFile) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -## Journey ⇐ [MetadataType](#MetadataType) -Journey MetadataType -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! -id: A unique id of the journey assigned by the journey’s API during its creation -key: A unique id of the journey within the MID. Can be generated by the developer -definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version of a journey has a unique DefinitionID while the Id and Key remain the same. Version 1 will have id == definitionId - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Journey](#Journey) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.update(metadata)](#Journey.update) ⇒ Promise - * [.create(metadata)](#Journey.create) ⇒ Promise - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [._postRetrieveTasksBulk(metadataMap)](#Journey._postRetrieveTasksBulk) - * [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - - - -### Journey.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Journey - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Journey.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### Journey.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Journey.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Journey.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy - -**Kind**: static method of [Journey](#Journey) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Journey.\_postRetrieveTasksBulk(metadataMap) -helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and - -**Kind**: static method of [Journey](#Journey) - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | key=customer key, value=metadata | - - - -### Journey.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! - -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### Journey.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment -! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! - -**Kind**: static method of [Journey](#Journey) -**Returns**: TYPE.MetadataTypeItem - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | - - - -### Journey.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [Journey](#Journey) -**Returns**: 'create' \| 'update' \| 'skip' - action to take - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -## List ⇐ [MetadataType](#MetadataType) -List MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [List](#List) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#List.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#List.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.deleteByKey(customerKey)](#List.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(list)](#List.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.parseMetadata(metadata, [parseForCache])](#List.parseMetadata) ⇒ TYPE.MetadataTypeItem - - - -### List.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Lists - -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### List.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [List](#List) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### List.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [List](#List) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### List.postRetrieveTasks(list) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - metadata - -| Param | Type | Description | -| --- | --- | --- | -| list | TYPE.MetadataTypeItem | a single list | - - - -### List.parseMetadata(metadata, [parseForCache]) ⇒ TYPE.MetadataTypeItem -parses retrieved Metadata before saving - -**Kind**: static method of [List](#List) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one sql string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single list definition | -| [parseForCache] | boolean | if set to true, the Category ID is kept | - - - -## MetadataType -MetadataType class that gets extended by their specific metadata type class. -Provides default functionality that can be overwritten by child metadata type classes - -**Kind**: global class - -* [MetadataType](#MetadataType) - * [.client](#MetadataType.client) : TYPE.SDK - * [.properties](#MetadataType.properties) : TYPE.Mcdevrc - * [.subType](#MetadataType.subType) : string - * [.buObject](#MetadataType.buObject) : TYPE.BuObject - * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap - * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#MetadataType.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void - * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata, targetDir, [isTemplating])](#MetadataType.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#MetadataType.setFolderPath) - * [.setFolderId(metadata)](#MetadataType.setFolderId) - * [.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key])](#MetadataType.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveChangelog([additionalFields], [subTypeArr])](#MetadataType.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([additionalFields], [subTypeArr], [key])](#MetadataType.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, name, templateVariables, [subType])](#MetadataType.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.retrieveTemplateREST(templateDir, uri, templateVariables, name)](#MetadataType.retrieveTemplateREST) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - * [.buildTemplate(retrieveDir, templateDir, key, templateVariables)](#MetadataType.buildTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.preDeployTasks(metadata, deployDir)](#MetadataType.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.create(metadata, deployDir)](#MetadataType.create) ⇒ void - * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void - * [.refresh()](#MetadataType.refresh) ⇒ void - * [.execute()](#MetadataType.execute) ⇒ void - * [.pause()](#MetadataType.pause) ⇒ void - * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean - * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null - * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null - * [.updateREST(metadataEntry, uri, [httpMethod])](#MetadataType.updateREST) ⇒ Promise.<object> \| null - * [.updateSOAP(metadataEntry, [handleOutside])](#MetadataType.updateSOAP) ⇒ Promise.<object> \| null - * [._handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside])](#MetadataType._handleSOAPErrors) - * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ null - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> - * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> - * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> - * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void - * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ void - * [.removeNotUpdateableFields(metadataEntry)](#MetadataType.removeNotUpdateableFields) ⇒ void - * [.keepTemplateFields(metadataEntry)](#MetadataType.keepTemplateFields) ⇒ void - * [.keepRetrieveFields(metadataEntry)](#MetadataType.keepRetrieveFields) ⇒ void - * [.isFiltered(metadataEntry, [include])](#MetadataType.isFiltered) ⇒ boolean - * [.isFilteredFolder(metadataEntry, [include])](#MetadataType.isFilteredFolder) ⇒ boolean - * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#MetadataType.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.applyTemplateValues(code, templateVariables)](#MetadataType.applyTemplateValues) ⇒ string - * [.applyTemplateNames(code, templateVariables)](#MetadataType.applyTemplateNames) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName)](#MetadataType.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MetadataType.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> - * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object - * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void - * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void - * [.resolveId(id)](#MetadataType.resolveId) ⇒ Promise.<string> - * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean - * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> - * [.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside])](#MetadataType.deleteByKeySOAP) ⇒ Promise.<boolean> - * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ Promise.<boolean> - * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object - * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> - - - -### MetadataType.client : TYPE.SDK -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.properties : TYPE.Mcdevrc -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.subType : string -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.buObject : TYPE.BuObject -**Kind**: static property of [MetadataType](#MetadataType) - - -### MetadataType.getJsonFromFS(dir, [listBadKeys]) ⇒ TYPE.MetadataTypeMap -Returns file contents mapped to their filename without '.json' ending - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - fileName => fileContent map - -| Param | Type | Description | -| --- | --- | --- | -| dir | string | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | - - - -### MetadataType.getFieldNamesToRetrieve([additionalFields], [isCaching]) ⇒ Array.<string> -Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set in child classes. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - Fieldnames - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [isCaching] | boolean | if true, then check if field should be skipped for caching | - - - -### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> -Deploys metadata - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | -| retrieveDir | string | directory where metadata after deploy should be saved | - - - -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void -Gets executed after deployment of metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | -| originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -### MetadataType.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - - - -### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MetadataType.postRetrieveTasks(metadata, targetDir, [isTemplating]) ⇒ TYPE.MetadataTypeItem -Gets executed after retreive of metadata type - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeItem - cloned metadata - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| targetDir | string | folder where retrieves should be saved | -| [isTemplating] | boolean | signals that we are retrieving templates | - - - -### MetadataType.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MetadataType.setFolderId(metadata) -generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MetadataType.retrieve(retrieveDir, [additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | - - - -### MetadataType.retrieveChangelog([additionalFields], [subTypeArr]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | - - - -### MetadataType.retrieveForCache([additionalFields], [subTypeArr], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [subTypeArr] | Array.<string> | optionally limit to a single subtype | -| [key] | string | customer key of single item to retrieve | - - - -### MetadataType.retrieveAsTemplate(templateDir, name, templateVariables, [subType]) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| [subType] | string | optionally limit to a single subtype | - - - -### MetadataType.retrieveTemplateREST(templateDir, uri, templateVariables, name) ⇒ Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> -Retrieve a specific Script by Name - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: TYPE.MetadataTypeItem, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| name | string | name (not key) of the metadata item | - - - -### MetadataType.buildTemplate(retrieveDir, templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - single metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| templateDir | string | (List of) Directory where built definitions will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -Gets executed before deploying metadata - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise of a single metadata item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| deployDir | string | folder where files for deployment are stored | - - - -### MetadataType.create(metadata, deployDir) ⇒ void -Abstract create method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| deployDir | string | directory where deploy metadata are saved | - - - -### MetadataType.update(metadata, [metadataBefore]) ⇒ void -Abstract update method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | -| [metadataBefore] | TYPE.MetadataTypeItem | metadata mapped by their keyField | - - - -### MetadataType.refresh() ⇒ void -Abstract refresh method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.execute() ⇒ void -Abstract execute method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.pause() ⇒ void -Abstract pause method that needs to be implemented in child metadata type - -**Kind**: static method of [MetadataType](#MetadataType) - - -### MetadataType.hasChanged(cachedVersion, metadata, [fieldName]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true if metadata was changed - -| Param | Type | Description | -| --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | - - - -### MetadataType.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent]) ⇒ boolean -test if metadata was actually changed or not to potentially skip it during deployment - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true on first identified deviation or false if none are found - -| Param | Type | Description | -| --- | --- | --- | -| cachedVersion | TYPE.MetadataTypeItem | cached version from the server | -| metadata | TYPE.MetadataTypeItem | item to upload | -| [fieldName] | string | optional field name to use for identifying the record in logs | -| [silent] | boolean | optionally suppress logging | - - - -### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> -MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | -| deployDir | string | directory where deploy metadata are saved | - - - -### MetadataType.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: 'create' \| 'update' \| 'skip' - action to take - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -### MetadataType.createREST(metadataEntry, uri) ⇒ Promise.<object> \| null -Creates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| uri | string | rest endpoint for POST | - - - -### MetadataType.createSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Creates a single metadata entry via fuel-soap (generic lib not wrapper) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.updateREST(metadataEntry, uri, [httpMethod]) ⇒ Promise.<object> \| null -Updates a single metadata entry via REST - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | -| uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | - - - -### MetadataType.updateSOAP(metadataEntry, [handleOutside]) ⇒ Promise.<object> \| null -Updates a single metadata entry via fuel-soap (generic lib not wrapper) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<object> \| null - Promise of API response or null in case of an error - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.\_handleSOAPErrors(ex, msg, [metadataEntry], [handleOutside]) -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | error that occured | -| msg | 'creating' \| 'updating' | what to print in the log | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - error message - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | error that occured | - - - -### MetadataType.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### MetadataType.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -Retrieves Metadata for Rest Types - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| uri | string | rest endpoint for GET | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MetadataType.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls]) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - Promise of item map (single item for templated result) - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| urlArray | Array.<object> | | {uri: string, id: string} combo of URL and ID/key of metadata | -| [concurrentRequests] | number | 10 | optionally set a different amount of concurrent requests | -| [logAmountOfUrls] | boolean | true | if true, prints an info message about to-be loaded amount of metadata | - - - -### MetadataType.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: null - - - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | - - - -### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> -Used to execute a query/automation etc. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) - -| Param | Type | Description | -| --- | --- | --- | -| uri | string | REST endpoint where the POST request should be sent | -| key | string | item key | - - - -### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> -Used to execute a query/automation etc. - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response - -| Param | Type | Description | -| --- | --- | --- | -| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | - - - -### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [singleRetrieve] | string \| number | key of single item to filter by | -| metadataMap | TYPE.MetadataTypeMap | saved metadata | - - - -### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MetadataType.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin) ⇒ void -Deletes a field in a metadata entry if the selected definition property equals false. - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | One entry of a metadataType | -| fieldPath | string | field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' | -| definitionProperty | 'isCreateable' \| 'isUpdateable' \| 'retrieving' \| 'templating' | delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] | -| origin | string | string of parent object, required when using arrays as these are parsed slightly differently. | - -**Example** -```js -Removes field (or nested fields childs) that are not updateable -deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); -``` - - -### MetadataType.removeNotCreateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not createable - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.removeNotUpdateableFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not updateable - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.keepTemplateFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the template - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.keepRetrieveFields(metadataEntry) ⇒ void -Remove fields from metadata entry that are not needed in the stored metadata - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | - - - -### MetadataType.isFiltered(metadataEntry, [include]) ⇒ boolean -checks if the current metadata entry should be saved on retrieve or not - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: skip saving == filtered; false: continue with saving - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - - - -### MetadataType.isFilteredFolder(metadataEntry, [include]) ⇒ boolean -optionally filter by what folder something is in - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | object | metadata entry | -| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | - - - -### MetadataType.saveResults(results, retrieveDir, [overrideType], [templateVariables]) ⇒ Promise.<TYPE.MetadataTypeMap> -Helper for writing Metadata to disk, used for Retrieve and deploy - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMap> - Promise of saved metadata - -| Param | Type | Description | -| --- | --- | --- | -| results | TYPE.MetadataTypeMap | metadata results from deploy | -| retrieveDir | string | directory where metadata should be stored after deploy/retrieve | -| [overrideType] | string | for use when there is a subtype (such as folder-queries) | -| [templateVariables] | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) -searches extracted file for template variable names and applies the market values - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) -searches extracted file for template variable values and applies the market variable names - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types (e.g script, asset, query) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string | Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MetadataType.findSubType(templateDir, templateName) ⇒ Promise.<string> -check template directory for complex types that open subfolders for their subtypes - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - subtype name - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| templateName | string | name of the metadata file | - - - -### MetadataType.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex) ⇒ object -optional method used for some types to try a different folder structure - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| typeDirArr | Array.<string> | current subdir for this type | -| templateName | string | name of the metadata template | -| fileName | string | name of the metadata template file w/o extension | -| ex | Error | error from first attempt | - - - -### MetadataType.buildDefinition(templateDir, targetDir, templateName, variables) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Builds definition based on template -NOTE: Most metadata files should use this generic method, unless custom -parsing is required (for example scripts & queries) - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| templateName | string | name of the metadata file | -| variables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> \| void - formatted Error Message - -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | - - - -### MetadataType.document([metadata], [isDeploy]) ⇒ void -Gets metadata cache with limited fields and does not store value to disk - -**Kind**: static method of [MetadataType](#MetadataType) - -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | a list of type definitions | -| [isDeploy] | boolean | used to skip non-supported message during deploy | - - - -### MetadataType.resolveId(id) ⇒ Promise.<string> -get name & key for provided id - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - key of metadata - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of metadata | - - - -### MetadataType.deleteByKey(customerKey) ⇒ boolean -Delete a metadata item from the specified business unit - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: boolean - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### MetadataType.postDeleteTasks(customerKey, [additionalExtensions]) ⇒ Promise.<void> -clean up after deleting a metadata item - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<void> - - Promise - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | -| [additionalExtensions] | Array.<string> | additional file extensions to delete on top of `${this.definition.type}-meta.json` | - - - -### MetadataType.deleteByKeySOAP(customerKey, [overrideKeyField], [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata | -| [overrideKeyField] | string | optionally change the name of the key field if the api uses a different name | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.deleteByKeyREST(url, key, [handleOutside]) ⇒ Promise.<boolean> -Delete a data extension from the specified business unit - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| url | string | endpoint | -| key | string | Identifier of metadata | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### MetadataType.readBUMetadataForType(readDir, [listBadKeys], [buMetadata]) ⇒ object -Returns metadata of a business unit that is saved locally - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: object - Metadata of BU in local directory - -| Param | Type | Description | -| --- | --- | --- | -| readDir | string | root directory of metadata. | -| [listBadKeys] | boolean | do not print errors, used for badKeys() | -| [buMetadata] | object | Metadata of BU in local directory | - - - -### MetadataType.getFilesToCommit(keyArr) ⇒ Promise.<Array.<string>> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> -**Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Array.<string> - list of keys - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | - - - -## MobileCode ⇐ [MetadataType](#MetadataType) -MobileCode MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [MobileCode](#MobileCode) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileCode.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#MobileCode.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - - -### MobileCode.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/code/ return all Mobile Codes with all details. - -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### MobileCode.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [MobileCode](#MobileCode) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -## MobileKeyword ⇐ [MetadataType](#MetadataType) -MobileKeyword MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [MobileKeyword](#MobileKeyword) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ TYPE.MetadataTypeMap - * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' - * [.retrieveForCache([_], [__], [key])](#MobileKeyword.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> - * [.create(metadata)](#MobileKeyword.create) ⇒ Promise - * [.update(metadata)](#MobileKeyword.update) ⇒ Promise - * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ Object - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileKeyword._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.preDeployTasks(metadata, deployDir)](#MobileKeyword.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileKeyword.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileKeyword.postUpdateTasks) ⇒ void - * [._mergeCode(metadata, deployDir, [templateName])](#MobileKeyword._mergeCode) ⇒ Promise.<string> - * [.deleteByKey(key)](#MobileKeyword.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#MobileKeyword.postDeleteTasks) ⇒ void - * [.getFilesToCommit(keyArr)](#MobileKeyword.getFilesToCommit) ⇒ Array.<string> - - - -### MobileKeyword.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords -Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all details. - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap -Builds map of metadata entries mapped to their keyfields - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.MetadataTypeMap - keyField => metadata map - -| Param | Type | Description | -| --- | --- | --- | -| body | object | json of response body | -| [singleRetrieve] | string \| number | key of single item to filter by | - - - -### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ 'create' \| 'update' \| 'skip' -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: 'create' \| 'update' \| 'skip' - action to take - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.MetadataTypeItemDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.MetadataTypeItem> | list of items to create | - - - -### MobileKeyword.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | - - - -### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ Promise.<TYPE.MetadataTypeItemObj> -retrieve an item and create a template from it - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItemObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| key | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### MobileKeyword.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileKeyword.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileKeyword.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void -manages post retrieve steps - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: TYPE.CodeExtractItem \| TYPE.MetadataTypeItem \| void - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object -helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Object - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| metadataScript | string | the code of the file | - - - -### MobileKeyword.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MobileKeyword.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### MobileKeyword.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares an event definition for deployment - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileKeyword | -| deployDir | string | directory of deploy files | - - - -### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) - -**Kind**: static method of [MobileKeyword](#MobileKeyword) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<string> - content for metadata.script - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### MobileKeyword.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -### MobileKeyword.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [MobileKeyword](#MobileKeyword) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### MobileKeyword.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [MobileKeyword](#MobileKeyword) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## MobileMessage ⇐ [MetadataType](#MetadataType) -MobileMessage MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [MobileMessage](#MobileMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#MobileMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void - * [.retrieveForCache([_], [__], [key])](#MobileMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#MobileMessage.update) ⇒ Promise - * [.create(metadata)](#MobileMessage.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#MobileMessage._mergeCode) ⇒ Promise.<string> - * [.prepExtractedCode(code)](#MobileMessage.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#MobileMessage.getFilesToCommit) ⇒ Array.<string> - * [.postRetrieveTasks(metadata)](#MobileMessage.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.preDeployTasks(metadata, deployDir)](#MobileMessage.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(metadataEntry, apiResponse)](#MobileMessage.postCreateTasks) ⇒ void - * [.postUpdateTasks(metadataEntry, apiResponse)](#MobileMessage.postUpdateTasks) ⇒ void - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileMessage.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#MobileMessage._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.deleteByKey(id)](#MobileMessage.deleteByKey) ⇒ Promise.<boolean> - - - -### MobileMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> \| void -Retrieves Metadata of Mobile Keywords - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> \| void - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### MobileMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to retrieve | - - - -### MobileMessage.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileMessage.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<string> - code - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### MobileMessage.prepExtractedCode(code) ⇒ Object -helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Object - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| code | string | the code of the file | - - - -### MobileMessage.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### MobileMessage.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | - - - -### MobileMessage.preDeployTasks(metadata, deployDir) ⇒ TYPE.MetadataTypeItem -prepares an event definition for deployment - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: TYPE.MetadataTypeItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single MobileMessage | -| deployDir | string | directory of deploy files | - - - -### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [MobileMessage](#MobileMessage) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](#MetadataType.updateREST) - -**Kind**: static method of [MobileMessage](#MobileMessage) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | - - - -### MobileMessage.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### MobileMessage.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### MobileMessage.deleteByKey(id) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit -! the endpoint expects the ID and not a key but for mcdev in this case key==id - -**Kind**: static method of [MobileMessage](#MobileMessage) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| id | string | Identifier of item | - - - -## Query ⇐ [MetadataType](#MetadataType) -Query MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Query](#Query) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> - * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> - * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.create(query)](#Query.create) ⇒ Promise - * [.update(query)](#Query.update) ⇒ Promise - * [.preDeployTasks(metadata, deployDir)](#Query.preDeployTasks) ⇒ Promise.<TYPE.QueryItem> - * [.applyTemplateValues(code, templateVariables)](#Query.applyTemplateValues) ⇒ string - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> - * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void - * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void - * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) - - - -### Query.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves Metadata of queries - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Query.execute(keyArr) ⇒ Promise.<Array.<string>> -a function to start query execution via API - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Query.retrieveForCache() ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> -Retrieves query metadata for caching - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: TYPE.QueryMap, type: string}> - Promise of metadata - - -### Query.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: Query, type: string}> -Retrieve a specific Query by Name - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<{metadata: Query, type: string}> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Query.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [Query](#Query) -**Returns**: TYPE.CodeExtractItem - Array with one metadata object and one query string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.QueryItem | a single query | - - - -### Query.create(query) ⇒ Promise -Creates a single query - -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| query | TYPE.QueryItem | a single query | - - - -### Query.update(query) ⇒ Promise -Updates a single query - -**Kind**: static method of [Query](#Query) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| query | TYPE.QueryItem | a single query | - - - -### Query.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.QueryItem> -prepares a Query for deployment - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<TYPE.QueryItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.QueryItem | a single query activity | -| deployDir | string | directory of deploy files | - - - -### Query.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) -searches extracted SQL file for template variables and applies the market values - -**Kind**: static method of [Query](#Query) -**Returns**: string - code with markets applied - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code from extracted code | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Query.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### Query.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.QueryItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -queries are saved as 1 json and 1 sql file. both files need to be run through templating -``` - - -### Query.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Query.getErrorsREST(ex) ⇒ Array.<string> \| void -Standardizes a check for multiple messages but adds query specific filters to error texts - -**Kind**: static method of [Query](#Query) -**Returns**: Array.<string> \| void - formatted Error Message - -| Param | Type | Description | -| --- | --- | --- | -| ex | object | response payload from REST API | - - - -### Query.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Query](#Query) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Query.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [Query](#Query) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### Query.postDeployTasks(upsertResults) -Gets executed after deployment of metadata type - -**Kind**: static method of [Query](#Query) - -| Param | Type | Description | -| --- | --- | --- | -| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | - - - -## Role ⇐ [MetadataType](#MetadataType) -ImportFile MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Role](#Role) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [___], [key])](#Role.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.preDeployTasks(metadata)](#Role.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.create(metadata)](#Role.create) ⇒ Promise - * [.update(metadata)](#Role.update) ⇒ Promise - * [.document([metadata])](#Role.document) ⇒ Promise.<void> - * [._traverseRoles(role, element, [permission], [isAllowed])](#Role._traverseRoles) ⇒ void - - - -### Role.retrieve(retrieveDir, _, [___], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Gets metadata from Marketing Cloud - -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Metadata store object - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | -| [___] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Role.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -Gets executed before deploying metadata - -**Kind**: static method of [Role](#Role) -**Returns**: TYPE.MetadataTypeItem - Promise of a single metadata item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | - - - -### Role.create(metadata) ⇒ Promise -Create a single Role. - -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### Role.update(metadata) ⇒ Promise -Updates a single Role. - -**Kind**: static method of [Role](#Role) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### Role.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles - -**Kind**: static method of [Role](#Role) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | role definitions | - - - -### Role.\_traverseRoles(role, element, [permission], [isAllowed]) ⇒ void -iterates through permissions to output proper row-names for nested permissionss - -**Kind**: static method of [Role](#Role) - -| Param | Type | Description | -| --- | --- | --- | -| role | string | name of the user role | -| element | object | data of the permission | -| [permission] | string | name of the permission | -| [isAllowed] | string | "true" / "false" from the | - - - -## Script ⇐ [MetadataType](#MetadataType) -Script MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Script](#Script) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#Script.retrieve) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveForCache()](#Script.retrieveForCache) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> - * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Script.retrieveAsTemplate) ⇒ Promise.<{metadata: TYPE.Script, type: string}> - * [.update(script)](#Script.update) ⇒ Promise - * [.create(script)](#Script.create) ⇒ Promise - * [._mergeCode(metadata, deployDir, [templateName])](#Script._mergeCode) ⇒ Promise.<string> - * [.preDeployTasks(metadata, dir)](#Script.preDeployTasks) ⇒ TYPE.ScriptItem - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Script.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#Script._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.postRetrieveTasks(metadata)](#Script.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.prepExtractedCode(metadataScript, metadataName)](#Script.prepExtractedCode) ⇒ Object - * [.getFilesToCommit(keyArr)](#Script.getFilesToCommit) ⇒ Array.<string> - * [.deleteByKey(customerKey)](#Script.deleteByKey) ⇒ Promise.<boolean> - * [.postDeleteTasks(customerKey)](#Script.postDeleteTasks) ⇒ void - - - -### Script.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves Metadata of Script -Endpoint /automation/v1/scripts/ return all Scripts with all details. - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### Script.retrieveForCache() ⇒ Promise.<{metadata: TYPE.ScriptMap, type: string}> -Retrieves script metadata for caching - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.ScriptMap, type: string}> - Promise - - -### Script.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ Promise.<{metadata: TYPE.Script, type: string}> -Retrieve a specific Script by Name - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<{metadata: TYPE.Script, type: string}> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where retrieved metadata directory will be saved | -| name | string | name of the metadata file | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | - - - -### Script.update(script) ⇒ Promise -Updates a single Script - -**Kind**: static method of [Script](#Script) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | - - - -### Script.create(script) ⇒ Promise -Creates a single Script - -**Kind**: static method of [Script](#Script) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| script | TYPE.MetadataTypeItem | a single Script | - - - -### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<string> - content for metadata.script - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.ScriptItem | a single asset definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### Script.preDeployTasks(metadata, dir) ⇒ TYPE.ScriptItem -prepares a Script for deployment - -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.ScriptItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.ScriptItem | a single script activity definition | -| dir | string | directory of deploy files | - - - -### Script.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### Script.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.ScriptItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### Script.postRetrieveTasks(metadata) ⇒ TYPE.CodeExtractItem -manages post retrieve steps - -**Kind**: static method of [Script](#Script) -**Returns**: TYPE.CodeExtractItem - a single item with code parts extracted - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.ScriptItem | a single item | - - - -### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object -helper for [postRetrieveTasks](#Script.postRetrieveTasks) and [_buildForNested](#Script._buildForNested) - -**Kind**: static method of [Script](#Script) -**Returns**: Object - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| metadataScript | string | the code of the file | -| metadataName | string | the name of the metadata | - - - -### Script.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [Script](#Script) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -### Script.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Script](#Script) -**Returns**: Promise.<boolean> - deletion success flag - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### Script.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [Script](#Script) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -## SendClassification ⇐ [MetadataType](#MetadataType) -SendClassification MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - - -### SendClassification.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [SendClassification](#SendClassification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalEmail MetadataType - -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) - -* [TransactionalEmail](#TransactionalEmail) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.update(metadata)](#TransactionalEmail.update) ⇒ Promise - * [.preDeployTasks(metadata)](#TransactionalEmail.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postCreateTasks(_, apiResponse)](#TransactionalEmail.postCreateTasks) ⇒ void - * [.postDeployTasks()](#TransactionalEmail.postDeployTasks) ⇒ void - * [.postRetrieveTasks(metadata)](#TransactionalEmail.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.deleteByKey(key)](#TransactionalEmail.deleteByKey) ⇒ Promise.<boolean> - - - -### TransactionalEmail.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | how the item shall look after the update | - - - -### TransactionalEmail.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalEmail.postCreateTasks(_, apiResponse) ⇒ void -helper for [TransactionalEmail.createREST](TransactionalEmail.createREST) - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) - -| Param | Type | Description | -| --- | --- | --- | -| _ | TYPE.MetadataTypeItem | not used | -| apiResponse | object | varies depending on the API call | - - - -### TransactionalEmail.postDeployTasks() ⇒ void -Gets executed after deployment of metadata type - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) - - -### TransactionalEmail.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: TYPE.MetadataTypeItem - a single item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalEmail.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [TransactionalEmail](#TransactionalEmail) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -## TransactionalMessage ⇐ [MetadataType](#MetadataType) -TransactionalMessage MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [TransactionalMessage](#TransactionalMessage) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TransactionalMessage.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache([_], [__], [key])](#TransactionalMessage.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.update(metadata)](#TransactionalMessage.update) ⇒ Promise - * [.create(metadata)](#TransactionalMessage.create) ⇒ Promise - * [.deleteByKey(key)](#TransactionalMessage.deleteByKey) ⇒ Promise.<boolean> - - - -### TransactionalMessage.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### TransactionalMessage.retrieveForCache([_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves event definition metadata for caching - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| [_] | void | parameter not used | -| [__] | void | parameter not used | -| [key] | string | customer key of single item to cache | - - - -### TransactionalMessage.update(metadata) ⇒ Promise -Updates a single item - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalMessage.create(metadata) ⇒ Promise -Creates a single item - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalMessage.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [TransactionalMessage](#TransactionalMessage) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -## TransactionalPush ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalPush TransactionalMessage - -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) - -* [TransactionalPush](#TransactionalPush) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.preDeployTasks(metadata)](#TransactionalPush.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.postRetrieveTasks(metadata)](#TransactionalPush.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - - - -### TransactionalPush.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares for deployment - -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalPush.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [TransactionalPush](#TransactionalPush) -**Returns**: TYPE.MetadataTypeItem - a single item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -## TransactionalSMS ⇐ [TransactionalMessage](#TransactionalMessage) -TransactionalSMS MetadataType - -**Kind**: global class -**Extends**: [TransactionalMessage](#TransactionalMessage) - -* [TransactionalSMS](#TransactionalSMS) ⇐ [TransactionalMessage](#TransactionalMessage) - * [.postDeleteTasks(customerKey)](#TransactionalSMS.postDeleteTasks) ⇒ void - * [.preDeployTasks(metadata, deployDir)](#TransactionalSMS.preDeployTasks) ⇒ Promise.<TYPE.MetadataTypeItem> - * [._mergeCode(metadata, deployDir, [templateName])](#TransactionalSMS._mergeCode) ⇒ Promise.<string> - * [.postRetrieveTasks(metadata)](#TransactionalSMS.postRetrieveTasks) ⇒ Promise.<TYPE.CodeExtractItem> - * [.prepExtractedCode(metadataScript)](#TransactionalSMS.prepExtractedCode) ⇒ Promise.<{fileExt:string, code:string}> - * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> - * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#TransactionalSMS.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode)](#TransactionalSMS._buildForNested) ⇒ Promise.<Array.<Array.<string>>> - * [._isHTML(code)](#TransactionalSMS._isHTML) ⇒ boolean - * [.getFilesToCommit(keyArr)](#TransactionalSMS.getFilesToCommit) ⇒ Array.<string> - - - -### TransactionalSMS.postDeleteTasks(customerKey) ⇒ void -clean up after deleting a metadata item - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of metadata item | - - - -### TransactionalSMS.preDeployTasks(metadata, deployDir) ⇒ Promise.<TYPE.MetadataTypeItem> -prepares for deployment - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.MetadataTypeItem> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | -| deployDir | string | directory of deploy files | - - - -### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<string> - content for metadata.script - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single definition | -| deployDir | string | directory of deploy files | -| [templateName] | string | name of the template used to built defintion (prior applying templating) | - - - -### TransactionalSMS.postRetrieveTasks(metadata) ⇒ Promise.<TYPE.CodeExtractItem> -manages post retrieve steps - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<TYPE.CodeExtractItem> - Array with one metadata object and one ssjs string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Promise.<{fileExt:string, code:string}> -helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<{fileExt:string, code:string}> - returns found extension and file content - -| Param | Type | Description | -| --- | --- | --- | -| metadataScript | string | the code of the file | - - - -### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) -handles extracted code if any are found for complex types - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - - - -### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) -handles extracted code if any are found for complex types - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | - -**Example** -```js -scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating -``` - - -### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) -handles extracted code if any are found for complex types - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Promise.<Array.<Array.<string>>> - list of extracted files with path-parts provided as an array - -| Param | Type | Description | -| --- | --- | --- | -| templateDir | string | Directory where metadata templates are stored | -| targetDir | string \| Array.<string> | (List of) Directory where built definitions will be saved | -| metadata | TYPE.MetadataTypeItem | main JSON file that was read from file system | -| templateVariables | TYPE.TemplateMap | variables to be replaced in the metadata | -| templateName | string | name of the template to be built | -| mode | 'definition' \| 'template' | defines what we use this helper for | - - - -### TransactionalSMS.\_isHTML(code) ⇒ boolean -very simplified test for HTML code in our SMS - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: boolean - true if HTML is found - -| Param | Type | Description | -| --- | --- | --- | -| code | string | sms source code | - - - -### TransactionalSMS.getFilesToCommit(keyArr) ⇒ Array.<string> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [TransactionalSMS](#TransactionalSMS) -**Returns**: Array.<string> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## TriggeredSend ⇐ [MetadataType](#MetadataType) -MessageSendActivity MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [TriggeredSend](#TriggeredSend) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#TriggeredSend.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#TriggeredSend.create) ⇒ Promise - * [.update(metadata)](#TriggeredSend.update) ⇒ Promise - * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem - * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> - * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> - * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> - - - -### TriggeredSend.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### TriggeredSend.create(metadata) ⇒ Promise -Create a single TSD. - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### TriggeredSend.update(metadata) ⇒ Promise -Updates a single TSD. - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### TriggeredSend.deleteByKey(customerKey) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | Identifier of data extension | - - - -### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -parses retrieved Metadata before saving - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem \| void - Array with one metadata object and one sql string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -### TriggeredSend.preDeployTasks(metadata) ⇒ TYPE.MetadataTypeItem -prepares a TSD for deployment - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | of a single TSD | - - - -### TriggeredSend.refresh([keyArr], [checkKey]) ⇒ Promise.<void> -TSD-specific refresh method that finds active TSDs and refreshes them - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<void> - - - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [keyArr] | Array.<string> | | metadata keys | -| [checkKey] | boolean | true | whether to check if the key is valid | - - - -### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> -helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<Array.<string>> - keyArr - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMapObj | TSD item map | - - - -### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | - - - -### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> -helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: Promise.<boolean> - true if refresh was successful - -| Param | Type | Description | -| --- | --- | --- | -| key | string | external key of triggered send item | -| checkKey | boolean | whether to check if key exists on the server | - - - -## User ⇐ [MetadataType](#MetadataType) -MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [User](#User) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, _, [__], [key])](#User.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#User.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#User.create) ⇒ Promise - * [.update(metadata)](#User.update) ⇒ Promise - * [.preDeployTasks(metadata)](#User.preDeployTasks) ⇒ TYPE.UserDocument - * [.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#User.createOrUpdate) ⇒ void - * [.postDeployTasks(upsertResults)](#User.postDeployTasks) ⇒ Promise.<void> - * [._getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale])](#User._getRoleObjectForDeploy) ⇒ object - * [.retrieveChangelog()](#User.retrieveChangelog) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#User.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.document([metadata])](#User.document) ⇒ Promise.<void> - * [.postRetrieveTasks(metadata)](#User.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void - - - -### User.retrieve(retrieveDir, _, [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| _ | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### User.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves import definition metadata for caching - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - - -### User.create(metadata) ⇒ Promise -Create a single item. - -**Kind**: static method of [User](#User) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### User.update(metadata) ⇒ Promise -Updates a single item. - -**Kind**: static method of [User](#User) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | single metadata entry | - - - -### User.preDeployTasks(metadata) ⇒ TYPE.UserDocument -prepares a item for deployment - -**Kind**: static method of [User](#User) -**Returns**: TYPE.UserDocument - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.UserDocument | of a single item | - - - -### User.createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ void -helper for [upsert](#MetadataType.upsert) - -**Kind**: static method of [User](#User) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeMap | list of metadata | -| metadataKey | string | key of item we are looking at | -| hasError | boolean | error flag from previous code | -| metadataToUpdate | Array.<TYPE.UserDocumentDiff> | list of items to update | -| metadataToCreate | Array.<TYPE.UserDocument> | list of items to create | - - - -### User.postDeployTasks(upsertResults) ⇒ Promise.<void> -Gets executed after deployment of metadata type - -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - promise - -| Param | Type | Description | -| --- | --- | --- | -| upsertResults | TYPE.UserDocumentMap | metadata mapped by their keyField | - - - -### User.\_getRoleObjectForDeploy(roleId, roleName, userId, assignmentOnly, [isRoleRemovale]) ⇒ object -helper for [User._prepareRoleAssignments](User._prepareRoleAssignments) - -**Kind**: static method of [User](#User) -**Returns**: object - format needed by API - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| roleId | string | | role.ObjectID | -| roleName | string | | role.Name | -| userId | number | | user.AccountUserID | -| assignmentOnly | boolean | | if true, only assignment configuration will be returned | -| [isRoleRemovale] | boolean | false | if true, role will be removed from user; otherwise added | - - - -### User.retrieveChangelog() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### User.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata - -**Kind**: static method of [User](#User) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of item map - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [requestParams] | TYPE.SoapRequestParams | required for the specific request (filter for example) | -| [singleRetrieve] | string \| number | key of single item to filter by | -| [additionalFields] | Array.<string> | Returns specified fields even if their retrieve definition is not set to true | - - - -### User.document([metadata]) ⇒ Promise.<void> -Creates markdown documentation of all roles - -**Kind**: static method of [User](#User) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| [metadata] | TYPE.MetadataTypeMap | user list | - - - -### User.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void -manages post retrieve steps - -**Kind**: static method of [User](#User) -**Returns**: TYPE.MetadataTypeItem \| void - a single item - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single item | - - - -## Verification ⇐ [MetadataType](#MetadataType) -Verification MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [Verification](#Verification) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], key)](#Verification.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.handleRESTErrors(ex, id)](#Verification.handleRESTErrors) ⇒ null - * [.retrieveForCache()](#Verification.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.create(metadata)](#Verification.create) ⇒ Promise - * [.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields)](#Verification.postCreateTasks) ⇒ void - * [.update(metadata)](#Verification.update) ⇒ Promise - * [.preDeployTasks(metadata)](#Verification.preDeployTasks) ⇒ TYPE.VerificationItem - * [.postRetrieveTasks(metadata)](#Verification.postRetrieveTasks) ⇒ TYPE.VerificationItem - * [.deleteByKey(key)](#Verification.deleteByKey) ⇒ Promise.<boolean> - - - -### Verification.retrieve(retrieveDir, [_], [__], key) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Verification Activity. - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| key | string | customer key of single item to retrieve | - - - -### Verification.handleRESTErrors(ex, id) ⇒ null -helper for [this.retrieveRESTcollection](this.retrieveRESTcollection) - -**Kind**: static method of [Verification](#Verification) -**Returns**: null - - - -| Param | Type | Description | -| --- | --- | --- | -| ex | Error | exception | -| id | string | id or key of item | - - - -### Verification.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of Data Extract Activity for caching - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata - - -### Verification.create(metadata) ⇒ Promise -Creates a single Data Extract - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | - - - -### Verification.postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) ⇒ void -helper for [createREST](#MetadataType.createREST) - -**Kind**: static method of [Verification](#Verification) - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | a single metadata Entry | -| apiResponse | object | varies depending on the API call | -| metadataEntryWithAllFields | TYPE.MetadataTypeItem | like metadataEntry but before non-creatable fields were stripped | - - - -### Verification.update(metadata) ⇒ Promise -Updates a single Data Extract - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single Data Extract | - - - -### Verification.preDeployTasks(metadata) ⇒ TYPE.VerificationItem -prepares a verification for deployment - -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - metadata object - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | - - - -### Verification.postRetrieveTasks(metadata) ⇒ TYPE.VerificationItem -parses retrieved Metadata before saving - -**Kind**: static method of [Verification](#Verification) -**Returns**: TYPE.VerificationItem - Array with one metadata object and one sql string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.VerificationItem | a single verification activity definition | - - - -### Verification.deleteByKey(key) ⇒ Promise.<boolean> -Delete a metadata item from the specified business unit - -**Kind**: static method of [Verification](#Verification) -**Returns**: Promise.<boolean> - deletion success status - -| Param | Type | Description | -| --- | --- | --- | -| key | string | Identifier of item | - - - -## Retriever -Retrieves metadata from a business unit and saves it to the local filesystem. - -**Kind**: global class - -* [Retriever](#Retriever) - * [new Retriever(properties, buObject)](#new_Retriever_new) - * [.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly])](#Retriever+retrieve) ⇒ Promise.<TYPE.MultiMetadataTypeList> - * [._getTypeDependencies(metadataTypes)](#Retriever+_getTypeDependencies) ⇒ Array.<TYPE.SupportedMetadataTypes> - - - -### new Retriever(properties, buObject) -Creates a Retriever, uses v2 auth if v2AuthOptions are passed. - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | -| buObject | TYPE.BuObject | properties for auth | - - - -### retriever.retrieve(metadataTypes, [namesOrKeys], [templateVariables], [changelogOnly]) ⇒ Promise.<TYPE.MultiMetadataTypeList> -Retrieve metadata of specified types into local file system and Retriever.metadata - -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Promise.<TYPE.MultiMetadataTypeList> - Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} - -| Param | Type | Description | -| --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | -| [namesOrKeys] | Array.<string> \| TYPE.TypeKeyCombo | name of Metadata to retrieveAsTemplate or list of keys for normal retrieval | -| [templateVariables] | TYPE.TemplateMap | Object of values which can be replaced (in case of templating) | -| [changelogOnly] | boolean | skip saving, only create json in memory | - - - -### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> -helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types - -**Kind**: instance method of [Retriever](#Retriever) -**Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types - -| Param | Type | Description | -| --- | --- | --- | -| metadataTypes | Array.<TYPE.SupportedMetadataTypes> | list of metadata types to retrieve; can include subtypes! | - - - -## BusinessUnit -Helper that handles retrieval of BU info - -**Kind**: global constant - - -### BusinessUnit.refreshBUProperties(properties, credentialsName) ⇒ Promise.<boolean> -Refreshes BU names and ID's from MC instance - -**Kind**: static method of [BusinessUnit](#BusinessUnit) -**Returns**: Promise.<boolean> - success of refresh - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | current properties that have to be refreshed | -| credentialsName | string | identifying name of the installed package / project | - - - -## dataStore : TYPE.Cache -**Kind**: global constant - - -## Cli -CLI helper class - -**Kind**: global constant - -* [Cli](#Cli) - * [.initMcdevConfig()](#Cli.initMcdevConfig) ⇒ Promise.<boolean> - * [.addExtraCredential(properties)](#Cli.addExtraCredential) ⇒ Promise.<(boolean\|string)> - * [.postFixKeysReretrieve(type, dependentTypes)](#Cli.postFixKeysReretrieve) ⇒ Promise.<boolean> - * [.logExistingCredentials(properties)](#Cli.logExistingCredentials) ⇒ void - * [.updateCredential(properties, credName)](#Cli.updateCredential) ⇒ Promise.<boolean> - * [.getCredentialObject(properties, target, [isCredentialOnly], [allowAll])](#Cli.getCredentialObject) ⇒ Promise.<TYPE.BuObject> - * [._selectBU(properties, [credential], [isCredentialOnly], [allowAll])](#Cli._selectBU) ⇒ Promise.<Array> - * [._setCredential(properties, [credName])](#Cli._setCredential) ⇒ Promise.<(boolean\|string)> - * [._askCredentials(properties, [credName])](#Cli._askCredentials) ⇒ Promise.<object> - * [.selectTypes(properties, [setTypesArr])](#Cli.selectTypes) ⇒ Promise.<void> - * [._summarizeSubtypes(responses, type)](#Cli._summarizeSubtypes) ⇒ void - * [.explainTypes()](#Cli.explainTypes) ⇒ Array.<object> - - - -### Cli.initMcdevConfig() ⇒ Promise.<boolean> -used when initially setting up a project. -loads default config and adds first credential - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<boolean> - success of init - - -### Cli.addExtraCredential(properties) ⇒ Promise.<(boolean\|string)> -Extends template file for properties.json - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<(boolean\|string)> - status - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | - - - -### Cli.postFixKeysReretrieve(type, dependentTypes) ⇒ Promise.<boolean> -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<boolean> - true if user wants to continue with retrieve - -| Param | Type | Description | -| --- | --- | --- | -| type | TYPE.SupportedMetadataTypes | limit execution to given metadata type | -| dependentTypes | Array.<TYPE.SupportedMetadataTypes> | types that depent on type | - - - -### Cli.logExistingCredentials(properties) ⇒ void -helper that logs to cli which credentials are already existing in our config file - -**Kind**: static method of [Cli](#Cli) - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | - - - -### Cli.updateCredential(properties, credName) ⇒ Promise.<boolean> -Extends template file for properties.json -update credentials - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<boolean> - success of update - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| credName | string | name of credential that needs updating | - - - -### Cli.getCredentialObject(properties, target, [isCredentialOnly], [allowAll]) ⇒ Promise.<TYPE.BuObject> -Returns Object with parameters required for accessing API - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<TYPE.BuObject> - credential to be used for Business Unit - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | object of all configuration including credentials | -| target | string | code of BU to use | -| [isCredentialOnly] | boolean \| string | true:don't ask for BU | string: name of BU | -| [allowAll] | boolean | Offer ALL as option in BU selection | - - - -### Cli.\_selectBU(properties, [credential], [isCredentialOnly], [allowAll]) ⇒ Promise.<Array> -helps select the right credential in case of bad initial input - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<Array> - selected credential/BU combo - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| [credential] | string | name of valid credential | -| [isCredentialOnly] | boolean | don't ask for BU if true | -| [allowAll] | boolean | Offer ALL as option in BU selection | - - - -### Cli.\_setCredential(properties, [credName]) ⇒ Promise.<(boolean\|string)> -helper around _askCredentials - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<(boolean\|string)> - success of refresh or credential name - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | from config file | -| [credName] | string | name of credential that needs updating | - - - -### Cli.\_askCredentials(properties, [credName]) ⇒ Promise.<object> -helper for [addExtraCredential](#Cli.addExtraCredential) - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<object> - credential info - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | from config file | -| [credName] | string | name of credential that needs updating | - - - -### Cli.selectTypes(properties, [setTypesArr]) ⇒ Promise.<void> -allows updating the metadata types that shall be retrieved - -**Kind**: static method of [Cli](#Cli) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| [setTypesArr] | Array.<string> | skip user prompt and overwrite with this list if given | - - - -### Cli.\_summarizeSubtypes(responses, type) ⇒ void -helper for [selectTypes](#Cli.selectTypes) that converts subtypes back to main type if all and only defaults were selected -this keeps the config automatically upgradable when we add new subtypes or change what is selected by default - -**Kind**: static method of [Cli](#Cli) - -| Param | Type | Description | -| --- | --- | --- | -| responses | object | wrapper object for respones | -| responses.selectedTypes | Array.<string> | what types the user selected | -| type | string | metadata type | - - - -### Cli.explainTypes() ⇒ Array.<object> -shows metadata type descriptions - -**Kind**: static method of [Cli](#Cli) -**Returns**: Array.<object> - list of supported types with their apiNames - - -## config -Central class for loading and validating properties from config and auth - -**Kind**: global constant - -* [config](#config) - * [.getProperties([silent], [isInit])](#config.getProperties) ⇒ Promise.<TYPE.Mcdevrc> - * [.checkProperties(properties, [silent])](#config.checkProperties) ⇒ Promise.<(boolean\|Array.<string>)> - * [.getDefaultProperties()](#config.getDefaultProperties) ⇒ Promise.<TYPE.Mcdevrc> - - - -### config.getProperties([silent], [isInit]) ⇒ Promise.<TYPE.Mcdevrc> -loads central properties from config file - -**Kind**: static method of [config](#config) -**Returns**: Promise.<TYPE.Mcdevrc> - central properties object - -| Param | Type | Description | -| --- | --- | --- | -| [silent] | boolean | omit throwing errors and print messages; assuming not silent if not set | -| [isInit] | boolean | don't tell the user to run init | - - - -### config.checkProperties(properties, [silent]) ⇒ Promise.<(boolean\|Array.<string>)> -check if the config file is correctly formatted and has values - -**Kind**: static method of [config](#config) -**Returns**: Promise.<(boolean\|Array.<string>)> - file structure ok OR list of fields to be fixed - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | javascript object in .mcdevrc.json | -| [silent] | boolean | set to true for internal use w/o cli output | - - - -### config.getDefaultProperties() ⇒ Promise.<TYPE.Mcdevrc> -defines how the properties.json should look like -used for creating a template and for checking if variables are set - -**Kind**: static method of [config](#config) -**Returns**: Promise.<TYPE.Mcdevrc> - default properties - - -## DevOps -DevOps helper class - -**Kind**: global constant - -* [DevOps](#DevOps) - * [.getDeltaList(properties, [range], [saveToDeployDir], [filterPaths], [commitHistory])](#DevOps.getDeltaList) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> - * [~delta](#DevOps.getDeltaList..delta) : Array.<TYPE.DeltaPkgItem> - * [~buObjects](#DevOps.getDeltaList..buObjects) : Object.<string, TYPE.BuObject> - * [~copied](#DevOps.getDeltaList..copied) : Array.<TYPE.DeltaPkgItem> - * [.buildDeltaDefinitions(properties, range, [diffArr], [commitHistory])](#DevOps.buildDeltaDefinitions) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> - * [~deltaDeployAll](#DevOps.buildDeltaDefinitions..deltaDeployAll) : Array.<TYPE.DeltaPkgItem> - * [.document(directory, jsonReport)](#DevOps.document) ⇒ void - * [.getFilesToCommit(properties, buObject, metadataType, keyArr)](#DevOps.getFilesToCommit) ⇒ Promise.<Array.<string>> - - - -### DevOps.getDeltaList(properties, [range], [saveToDeployDir], [filterPaths], [commitHistory]) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> -Extracts the delta between a commit and the current state for deployment. -Interactive commit selection if no commits are passed. - -**Kind**: static method of [DevOps](#DevOps) -**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | central properties object | -| [range] | string | git commit range | -| [saveToDeployDir] | boolean | if true, copy metadata changes into deploy directory | -| [filterPaths] | string | filter file paths that start with any specified path (comma separated) | -| [commitHistory] | number | cli option to override default commit history value in config | - - -* [.getDeltaList(properties, [range], [saveToDeployDir], [filterPaths], [commitHistory])](#DevOps.getDeltaList) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> - * [~delta](#DevOps.getDeltaList..delta) : Array.<TYPE.DeltaPkgItem> - * [~buObjects](#DevOps.getDeltaList..buObjects) : Object.<string, TYPE.BuObject> - * [~copied](#DevOps.getDeltaList..copied) : Array.<TYPE.DeltaPkgItem> - - - -#### getDeltaList~delta : Array.<TYPE.DeltaPkgItem> -**Kind**: inner constant of [getDeltaList](#DevOps.getDeltaList) - - -#### getDeltaList~buObjects : Object.<string, TYPE.BuObject> -**Kind**: inner constant of [getDeltaList](#DevOps.getDeltaList) - - -#### getDeltaList~copied : Array.<TYPE.DeltaPkgItem> -**Kind**: inner constant of [getDeltaList](#DevOps.getDeltaList) - - -### DevOps.buildDeltaDefinitions(properties, range, [diffArr], [commitHistory]) ⇒ Promise.<Array.<TYPE.DeltaPkgItem>> -wrapper around DevOps.getDeltaList, Builder.buildTemplate and M - -**Kind**: static method of [DevOps](#DevOps) -**Returns**: Promise.<Array.<TYPE.DeltaPkgItem>> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | project config file | -| range | string | git commit range | -| [diffArr] | Array.<TYPE.DeltaPkgItem> | instead of running git diff the method can also get a list of files to process | -| [commitHistory] | number | cli option to override default commit history value in config | - - - -#### buildDeltaDefinitions~deltaDeployAll : Array.<TYPE.DeltaPkgItem> -**Kind**: inner constant of [buildDeltaDefinitions](#DevOps.buildDeltaDefinitions) - - -### DevOps.document(directory, jsonReport) ⇒ void -create markdown file for deployment listing - -**Kind**: static method of [DevOps](#DevOps) - -| Param | Type | Description | -| --- | --- | --- | -| directory | string | - | -| jsonReport | object | - | - - - -### DevOps.getFilesToCommit(properties, buObject, metadataType, keyArr) ⇒ Promise.<Array.<string>> -should return only the json for all but asset, query and script that are saved as multiple files -additionally, the documentation for dataExtension and automation should be returned - -**Kind**: static method of [DevOps](#DevOps) -**Returns**: Promise.<Array.<string>> - list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | central properties object | -| buObject | TYPE.BuObject | references credentials | -| metadataType | string | metadata type to build | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## File -File extends fs-extra. It adds logger and util methods for file handling - -**Kind**: global constant - -* [File](#File) - * [.copyFile(from, to)](#File.copyFile) ⇒ object - * [.filterIllegalPathChars(path)](#File.filterIllegalPathChars) ⇒ string - * [.filterIllegalFilenames(filename)](#File.filterIllegalFilenames) ⇒ string - * [.reverseFilterIllegalFilenames(filename)](#File.reverseFilterIllegalFilenames) ⇒ string - * [.normalizePath(denormalizedPath)](#File.normalizePath) ⇒ string - * [.writeJSONToFile(directory, filename, content)](#File.writeJSONToFile) ⇒ Promise - * [.writePrettyToFile(directory, filename, filetype, content, [templateVariables])](#File.writePrettyToFile) ⇒ Promise.<boolean> - * [.beautify_beautyAmp(content, formatHTML)](#File.beautify_beautyAmp) ⇒ Promise.<string> - * [._beautify_prettier(directory, filename, filetype, content)](#File._beautify_prettier) ⇒ Promise.<string> - * [.writeToFile(directory, filename, filetype, content, [encoding])](#File.writeToFile) ⇒ Promise.<boolean> - * [.readJSONFile(directory, filename, sync, cleanPath)](#File.readJSONFile) ⇒ Promise.<object> \| object \| void - * [.readFilteredFilename(directory, filename, filetype, [encoding])](#File.readFilteredFilename) ⇒ Promise.<string> \| void - * [.readDirectories(directory, depth, [includeStem], [_stemLength])](#File.readDirectories) ⇒ Promise.<Array.<string>> - * [.readDirectoriesSync(directory, [depth], [includeStem], [_stemLength])](#File.readDirectoriesSync) ⇒ Array.<string> \| void - * [.saveConfigFile(properties)](#File.saveConfigFile) ⇒ Promise.<void> - * [.initPrettier([filetype])](#File.initPrettier) ⇒ Promise.<boolean> - - - -### File.copyFile(from, to) ⇒ object -copies a file from one path to another - -**Kind**: static method of [File](#File) -**Returns**: object - - results object - -| Param | Type | Description | -| --- | --- | --- | -| from | string | full filepath including name of existing file | -| to | string | full filepath including name where file should go | - - - -### File.filterIllegalPathChars(path) ⇒ string -makes sure Windows accepts path names - -**Kind**: static method of [File](#File) -**Returns**: string - - corrected string - -| Param | Type | Description | -| --- | --- | --- | -| path | string | filename or path | - - - -### File.filterIllegalFilenames(filename) ⇒ string -makes sure Windows accepts file names - -**Kind**: static method of [File](#File) -**Returns**: string - - corrected string - -| Param | Type | Description | -| --- | --- | --- | -| filename | string | filename or path | - - - -### File.reverseFilterIllegalFilenames(filename) ⇒ string -makes sure Windows accepts file names - -**Kind**: static method of [File](#File) -**Returns**: string - - corrected string - -| Param | Type | Description | -| --- | --- | --- | -| filename | string | filename or path | - - - -### File.normalizePath(denormalizedPath) ⇒ string -Takes various types of path strings and formats into a platform specific path - -**Kind**: static method of [File](#File) -**Returns**: string - Path strings - -| Param | Type | Description | -| --- | --- | --- | -| denormalizedPath | string \| Array.<string> | directory the file will be written to | - - - -### File.writeJSONToFile(directory, filename, content) ⇒ Promise -Saves json content to a file in the local file system. Will create the parent directory if it does not exist - -**Kind**: static method of [File](#File) -**Returns**: Promise - Promise - -| Param | Type | Description | -| --- | --- | --- | -| directory | string \| Array.<string> | directory the file will be written to | -| filename | string | name of the file without '.json' ending | -| content | object | filecontent | - - - -### File.writePrettyToFile(directory, filename, filetype, content, [templateVariables]) ⇒ Promise.<boolean> -Saves beautified files in the local file system. Will create the parent directory if it does not exist -! Important: run 'await File.initPrettier()' in your MetadataType.retrieve() once before hitting this - -**Kind**: static method of [File](#File) -**Returns**: Promise.<boolean> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| directory | string \| Array.<string> | directory the file will be written to | -| filename | string | name of the file without suffix | -| filetype | string | filetype ie. JSON or SSJS | -| content | string | filecontent | -| [templateVariables] | TYPE.TemplateMap | templating variables to be replaced in the metadata | - - - -### File.beautify\_beautyAmp(content, formatHTML) ⇒ Promise.<string> -helper for [writePrettyToFile](#File.writePrettyToFile), applying beautyAmp onto given stringified content - -**Kind**: static method of [File](#File) -**Returns**: Promise.<string> - original string on error; formatted string on success - -| Param | Type | Description | -| --- | --- | --- | -| content | string | filecontent | -| formatHTML | boolean | should we format HTML or not via prettier included in beautyAmp | - - - -### File.\_beautify\_prettier(directory, filename, filetype, content) ⇒ Promise.<string> -helper for [writePrettyToFile](#File.writePrettyToFile), applying prettier onto given stringified content -! Important: run 'await File.initPrettier()' in your MetadataType.retrieve() once before hitting this - -**Kind**: static method of [File](#File) -**Returns**: Promise.<string> - original string on error; formatted string on success - -| Param | Type | Description | -| --- | --- | --- | -| directory | string \| Array.<string> | directory the file will be written to | -| filename | string | name of the file without suffix | -| filetype | string | filetype ie. JSON or SSJS | -| content | string | filecontent | - - - -### File.writeToFile(directory, filename, filetype, content, [encoding]) ⇒ Promise.<boolean> -Saves text content to a file in the local file system. Will create the parent directory if it does not exist - -**Kind**: static method of [File](#File) -**Returns**: Promise.<boolean> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| directory | string \| Array.<string> | directory the file will be written to | -| filename | string | name of the file without '.json' ending | -| filetype | string | filetype suffix | -| content | string | filecontent | -| [encoding] | object | added for certain file types (like images) | - - - -### File.readJSONFile(directory, filename, sync, cleanPath) ⇒ Promise.<object> \| object \| void -Saves json content to a file in the local file system. Will create the parent directory if it does not exist - -**Kind**: static method of [File](#File) -**Returns**: Promise.<object> \| object \| void - Promise or JSON object depending on if async or not; void on error - -| Param | Type | Description | -| --- | --- | --- | -| directory | string \| Array.<string> | directory where the file is stored | -| filename | string | name of the file without '.json' ending | -| sync | boolean | should execute sync (default is async) | -| cleanPath | boolean | should execute sync (default is true) | - - - -### File.readFilteredFilename(directory, filename, filetype, [encoding]) ⇒ Promise.<string> \| void -reads file from local file system. - -**Kind**: static method of [File](#File) -**Returns**: Promise.<string> \| void - file contents; void on error - -| Param | Type | Description | -| --- | --- | --- | -| directory | string \| Array.<string> | directory where the file is stored | -| filename | string | name of the file without '.json' ending | -| filetype | string | filetype suffix | -| [encoding] | string | read file with encoding (defaults to utf-8) | - - - -### File.readDirectories(directory, depth, [includeStem], [_stemLength]) ⇒ Promise.<Array.<string>> -reads directories to a specific depth returning an array -of file paths to be iterated over - -**Kind**: static method of [File](#File) -**Returns**: Promise.<Array.<string>> - array of fully defined file paths - -| Param | Type | Description | -| --- | --- | --- | -| directory | string | directory to checkin | -| depth | number | how many levels to check (1 base) | -| [includeStem] | boolean | include the parent directory in the response | -| [_stemLength] | number | set recursively for subfolders. do not set manually! | - -**Example** -```js -['deploy/mcdev/bu1'] -``` - - -### File.readDirectoriesSync(directory, [depth], [includeStem], [_stemLength]) ⇒ Array.<string> \| void -reads directories to a specific depth returning an array -of file paths to be iterated over using sync api (required in constructors) -TODO - merge with readDirectories. so far the logic is really different - -**Kind**: static method of [File](#File) -**Returns**: Array.<string> \| void - array of fully defined file paths; void on error - -| Param | Type | Description | -| --- | --- | --- | -| directory | string | directory to checkin | -| [depth] | number | how many levels to check (1 base) | -| [includeStem] | boolean | include the parent directory in the response | -| [_stemLength] | number | set recursively for subfolders. do not set manually! | - -**Example** -```js -['deploy/mcdev/bu1'] -``` - - -### File.saveConfigFile(properties) ⇒ Promise.<void> -helper that splits the config back into auth & config parts to save them separately - -**Kind**: static method of [File](#File) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | central properties object | - - - -### File.initPrettier([filetype]) ⇒ Promise.<boolean> -Initalises Prettier formatting lib async. - -**Kind**: static method of [File](#File) -**Returns**: Promise.<boolean> - success of config load - -| Param | Type | Description | -| --- | --- | --- | -| [filetype] | string | filetype ie. JSON or SSJS | - - - -## Init -CLI helper class - -**Kind**: global constant - -* [Init](#Init) - * [.fixMcdevConfig(properties)](#Init.fixMcdevConfig) ⇒ Promise.<boolean> - * [.createIdeConfigFiles(versionBeforeUpgrade)](#Init.createIdeConfigFiles) ⇒ Promise.<boolean> - * [._updateLeaf(propertiersCur, defaultPropsCur, fieldName)](#Init._updateLeaf) ⇒ void - * [._getForcedUpdateList(projectVersion)](#Init._getForcedUpdateList) ⇒ Promise.<Array.<string>> - * [._createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent])](#Init._createIdeConfigFile) ⇒ Promise.<boolean> - * [.upgradeAuthFile()](#Init.upgradeAuthFile) ⇒ Promise.<boolean> - * [.initGitRepo()](#Init.initGitRepo) ⇒ Promise.<{status: string, repoName: string}> - * [.gitPush()](#Init.gitPush) ⇒ void - * [._addGitRemote()](#Init._addGitRemote) ⇒ string - * [._updateGitConfigUser()](#Init._updateGitConfigUser) ⇒ void - * [._getGitConfigUser()](#Init._getGitConfigUser) ⇒ Promise.<{'user.name': string, 'user.email': string}> - * [.initProject(properties, credentialName)](#Init.initProject) ⇒ Promise.<void> - * [.joinProject()](#Init.joinProject) ⇒ Promise.<void> - * [._initMarkets()](#Init._initMarkets) - * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> - * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> - * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> - - - -### Init.fixMcdevConfig(properties) ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | - - - -### Init.createIdeConfigFiles(versionBeforeUpgrade) ⇒ Promise.<boolean> -handles creation/update of all config file from the boilerplate - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - status of config file creation - -| Param | Type | Description | -| --- | --- | --- | -| versionBeforeUpgrade | string | 'x.y.z' | - - - -### Init.\_updateLeaf(propertiersCur, defaultPropsCur, fieldName) ⇒ void -recursive helper for [fixMcdevConfig](#Init.fixMcdevConfig) that adds missing settings - -**Kind**: static method of [Init](#Init) - -| Param | Type | Description | -| --- | --- | --- | -| propertiersCur | object | current sub-object of project settings | -| defaultPropsCur | object | current sub-object of default settings | -| fieldName | string | dot-concatenated object-path that needs adding | - - - -### Init.\_getForcedUpdateList(projectVersion) ⇒ Promise.<Array.<string>> -returns list of files that need to be updated - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<Array.<string>> - relevant files with path that need to be updated - -| Param | Type | Description | -| --- | --- | --- | -| projectVersion | string | version found in config file of the current project | - - - -### Init.\_createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent]) ⇒ Promise.<boolean> -handles creation/update of one config file from the boilerplate at a time - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| fileNameArr | Array.<string> | 0: path, 1: filename, 2: extension with dot | -| relevantForcedUpdates | Array.<string> | if fileNameArr is in this list we require an override | -| [boilerplateFileContent] | string | in case we cannot copy files 1:1 this can be used to pass in content | - - - -### Init.upgradeAuthFile() ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - - -### Init.initGitRepo() ⇒ Promise.<{status: string, repoName: string}> -check if git repo exists and otherwise create one - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{status: string, repoName: string}> - success flag - - -### Init.gitPush() ⇒ void -offer to push the new repo straight to the server - -**Kind**: static method of [Init](#Init) - - -### Init.\_addGitRemote() ⇒ string -offers to add the git remote origin - -**Kind**: static method of [Init](#Init) -**Returns**: string - repo name (optionally) - - -### Init.\_updateGitConfigUser() ⇒ void -checks global config and ask to config the user info and then store it locally - -**Kind**: static method of [Init](#Init) - - -### Init.\_getGitConfigUser() ⇒ Promise.<{'user.name': string, 'user.email': string}> -retrieves the global user.name and user.email values - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{'user.name': string, 'user.email': string}> - user.name and user.email - - -### Init.initProject(properties, credentialName) ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| credentialName | string | identifying name of the installed package / project | - - - -### Init.joinProject() ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - - -### Init.\_initMarkets() -helper for @initProject that optionally creates markets and market lists for all BUs - -**Kind**: static method of [Init](#Init) - - -### Init.\_downloadAllBUs(bu, gitStatus) ⇒ Promise.<void> -helper for [initProject](#Init.initProject) - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| bu | string | cred/bu or cred/* or * | -| gitStatus | string | signals what state the git repo is in | - - - -### Init.upgradeProject(properties, [initial], [repoName]) ⇒ Promise.<boolean> -wrapper around npm dependency & configuration file setup - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - success flag - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| [initial] | boolean | print message if not part of initial setup | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.installDependencies([repoName]) ⇒ Promise.<boolean> -initiates npm project and then -takes care of loading the pre-configured dependency list -from the boilerplate directory to them as dev-dependencies - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.\_getDefaultPackageJson([currentContent]) ⇒ Promise.<{script: object, author: string, license: string}> -ensure we have certain default values in our config - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{script: object, author: string, license: string}> - extended currentContent - -| Param | Type | Description | -| --- | --- | --- | -| [currentContent] | object | what was read from existing package.json file | - - - -## Init -CLI helper class - -**Kind**: global constant - -* [Init](#Init) - * [.fixMcdevConfig(properties)](#Init.fixMcdevConfig) ⇒ Promise.<boolean> - * [.createIdeConfigFiles(versionBeforeUpgrade)](#Init.createIdeConfigFiles) ⇒ Promise.<boolean> - * [._updateLeaf(propertiersCur, defaultPropsCur, fieldName)](#Init._updateLeaf) ⇒ void - * [._getForcedUpdateList(projectVersion)](#Init._getForcedUpdateList) ⇒ Promise.<Array.<string>> - * [._createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent])](#Init._createIdeConfigFile) ⇒ Promise.<boolean> - * [.upgradeAuthFile()](#Init.upgradeAuthFile) ⇒ Promise.<boolean> - * [.initGitRepo()](#Init.initGitRepo) ⇒ Promise.<{status: string, repoName: string}> - * [.gitPush()](#Init.gitPush) ⇒ void - * [._addGitRemote()](#Init._addGitRemote) ⇒ string - * [._updateGitConfigUser()](#Init._updateGitConfigUser) ⇒ void - * [._getGitConfigUser()](#Init._getGitConfigUser) ⇒ Promise.<{'user.name': string, 'user.email': string}> - * [.initProject(properties, credentialName)](#Init.initProject) ⇒ Promise.<void> - * [.joinProject()](#Init.joinProject) ⇒ Promise.<void> - * [._initMarkets()](#Init._initMarkets) - * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> - * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> - * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> - - - -### Init.fixMcdevConfig(properties) ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | - - - -### Init.createIdeConfigFiles(versionBeforeUpgrade) ⇒ Promise.<boolean> -handles creation/update of all config file from the boilerplate - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - status of config file creation - -| Param | Type | Description | -| --- | --- | --- | -| versionBeforeUpgrade | string | 'x.y.z' | - - - -### Init.\_updateLeaf(propertiersCur, defaultPropsCur, fieldName) ⇒ void -recursive helper for [fixMcdevConfig](#Init.fixMcdevConfig) that adds missing settings - -**Kind**: static method of [Init](#Init) - -| Param | Type | Description | -| --- | --- | --- | -| propertiersCur | object | current sub-object of project settings | -| defaultPropsCur | object | current sub-object of default settings | -| fieldName | string | dot-concatenated object-path that needs adding | - - - -### Init.\_getForcedUpdateList(projectVersion) ⇒ Promise.<Array.<string>> -returns list of files that need to be updated - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<Array.<string>> - relevant files with path that need to be updated - -| Param | Type | Description | -| --- | --- | --- | -| projectVersion | string | version found in config file of the current project | - - - -### Init.\_createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent]) ⇒ Promise.<boolean> -handles creation/update of one config file from the boilerplate at a time - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| fileNameArr | Array.<string> | 0: path, 1: filename, 2: extension with dot | -| relevantForcedUpdates | Array.<string> | if fileNameArr is in this list we require an override | -| [boilerplateFileContent] | string | in case we cannot copy files 1:1 this can be used to pass in content | - - - -### Init.upgradeAuthFile() ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - - -### Init.initGitRepo() ⇒ Promise.<{status: string, repoName: string}> -check if git repo exists and otherwise create one - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{status: string, repoName: string}> - success flag - - -### Init.gitPush() ⇒ void -offer to push the new repo straight to the server - -**Kind**: static method of [Init](#Init) - - -### Init.\_addGitRemote() ⇒ string -offers to add the git remote origin - -**Kind**: static method of [Init](#Init) -**Returns**: string - repo name (optionally) - - -### Init.\_updateGitConfigUser() ⇒ void -checks global config and ask to config the user info and then store it locally - -**Kind**: static method of [Init](#Init) - - -### Init.\_getGitConfigUser() ⇒ Promise.<{'user.name': string, 'user.email': string}> -retrieves the global user.name and user.email values - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{'user.name': string, 'user.email': string}> - user.name and user.email - - -### Init.initProject(properties, credentialName) ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| credentialName | string | identifying name of the installed package / project | - - - -### Init.joinProject() ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - - -### Init.\_initMarkets() -helper for @initProject that optionally creates markets and market lists for all BUs - -**Kind**: static method of [Init](#Init) - - -### Init.\_downloadAllBUs(bu, gitStatus) ⇒ Promise.<void> -helper for [initProject](#Init.initProject) - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| bu | string | cred/bu or cred/* or * | -| gitStatus | string | signals what state the git repo is in | - - - -### Init.upgradeProject(properties, [initial], [repoName]) ⇒ Promise.<boolean> -wrapper around npm dependency & configuration file setup - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - success flag - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| [initial] | boolean | print message if not part of initial setup | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.installDependencies([repoName]) ⇒ Promise.<boolean> -initiates npm project and then -takes care of loading the pre-configured dependency list -from the boilerplate directory to them as dev-dependencies - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.\_getDefaultPackageJson([currentContent]) ⇒ Promise.<{script: object, author: string, license: string}> -ensure we have certain default values in our config - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{script: object, author: string, license: string}> - extended currentContent - -| Param | Type | Description | -| --- | --- | --- | -| [currentContent] | object | what was read from existing package.json file | - - - -## Init -CLI helper class - -**Kind**: global constant - -* [Init](#Init) - * [.fixMcdevConfig(properties)](#Init.fixMcdevConfig) ⇒ Promise.<boolean> - * [.createIdeConfigFiles(versionBeforeUpgrade)](#Init.createIdeConfigFiles) ⇒ Promise.<boolean> - * [._updateLeaf(propertiersCur, defaultPropsCur, fieldName)](#Init._updateLeaf) ⇒ void - * [._getForcedUpdateList(projectVersion)](#Init._getForcedUpdateList) ⇒ Promise.<Array.<string>> - * [._createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent])](#Init._createIdeConfigFile) ⇒ Promise.<boolean> - * [.upgradeAuthFile()](#Init.upgradeAuthFile) ⇒ Promise.<boolean> - * [.initGitRepo()](#Init.initGitRepo) ⇒ Promise.<{status: string, repoName: string}> - * [.gitPush()](#Init.gitPush) ⇒ void - * [._addGitRemote()](#Init._addGitRemote) ⇒ string - * [._updateGitConfigUser()](#Init._updateGitConfigUser) ⇒ void - * [._getGitConfigUser()](#Init._getGitConfigUser) ⇒ Promise.<{'user.name': string, 'user.email': string}> - * [.initProject(properties, credentialName)](#Init.initProject) ⇒ Promise.<void> - * [.joinProject()](#Init.joinProject) ⇒ Promise.<void> - * [._initMarkets()](#Init._initMarkets) - * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> - * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> - * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> - - - -### Init.fixMcdevConfig(properties) ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | - - - -### Init.createIdeConfigFiles(versionBeforeUpgrade) ⇒ Promise.<boolean> -handles creation/update of all config file from the boilerplate - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - status of config file creation - -| Param | Type | Description | -| --- | --- | --- | -| versionBeforeUpgrade | string | 'x.y.z' | - - - -### Init.\_updateLeaf(propertiersCur, defaultPropsCur, fieldName) ⇒ void -recursive helper for [fixMcdevConfig](#Init.fixMcdevConfig) that adds missing settings - -**Kind**: static method of [Init](#Init) - -| Param | Type | Description | -| --- | --- | --- | -| propertiersCur | object | current sub-object of project settings | -| defaultPropsCur | object | current sub-object of default settings | -| fieldName | string | dot-concatenated object-path that needs adding | - - - -### Init.\_getForcedUpdateList(projectVersion) ⇒ Promise.<Array.<string>> -returns list of files that need to be updated - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<Array.<string>> - relevant files with path that need to be updated - -| Param | Type | Description | -| --- | --- | --- | -| projectVersion | string | version found in config file of the current project | - - - -### Init.\_createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent]) ⇒ Promise.<boolean> -handles creation/update of one config file from the boilerplate at a time - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| fileNameArr | Array.<string> | 0: path, 1: filename, 2: extension with dot | -| relevantForcedUpdates | Array.<string> | if fileNameArr is in this list we require an override | -| [boilerplateFileContent] | string | in case we cannot copy files 1:1 this can be used to pass in content | - - - -### Init.upgradeAuthFile() ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - - -### Init.initGitRepo() ⇒ Promise.<{status: string, repoName: string}> -check if git repo exists and otherwise create one - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{status: string, repoName: string}> - success flag - - -### Init.gitPush() ⇒ void -offer to push the new repo straight to the server - -**Kind**: static method of [Init](#Init) - - -### Init.\_addGitRemote() ⇒ string -offers to add the git remote origin - -**Kind**: static method of [Init](#Init) -**Returns**: string - repo name (optionally) - - -### Init.\_updateGitConfigUser() ⇒ void -checks global config and ask to config the user info and then store it locally - -**Kind**: static method of [Init](#Init) - - -### Init.\_getGitConfigUser() ⇒ Promise.<{'user.name': string, 'user.email': string}> -retrieves the global user.name and user.email values - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{'user.name': string, 'user.email': string}> - user.name and user.email - - -### Init.initProject(properties, credentialName) ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| credentialName | string | identifying name of the installed package / project | - - - -### Init.joinProject() ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - - -### Init.\_initMarkets() -helper for @initProject that optionally creates markets and market lists for all BUs - -**Kind**: static method of [Init](#Init) - - -### Init.\_downloadAllBUs(bu, gitStatus) ⇒ Promise.<void> -helper for [initProject](#Init.initProject) - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| bu | string | cred/bu or cred/* or * | -| gitStatus | string | signals what state the git repo is in | - - - -### Init.upgradeProject(properties, [initial], [repoName]) ⇒ Promise.<boolean> -wrapper around npm dependency & configuration file setup - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - success flag - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| [initial] | boolean | print message if not part of initial setup | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.installDependencies([repoName]) ⇒ Promise.<boolean> -initiates npm project and then -takes care of loading the pre-configured dependency list -from the boilerplate directory to them as dev-dependencies - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.\_getDefaultPackageJson([currentContent]) ⇒ Promise.<{script: object, author: string, license: string}> -ensure we have certain default values in our config - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{script: object, author: string, license: string}> - extended currentContent - -| Param | Type | Description | -| --- | --- | --- | -| [currentContent] | object | what was read from existing package.json file | - - - -## Init -CLI helper class - -**Kind**: global constant - -* [Init](#Init) - * [.fixMcdevConfig(properties)](#Init.fixMcdevConfig) ⇒ Promise.<boolean> - * [.createIdeConfigFiles(versionBeforeUpgrade)](#Init.createIdeConfigFiles) ⇒ Promise.<boolean> - * [._updateLeaf(propertiersCur, defaultPropsCur, fieldName)](#Init._updateLeaf) ⇒ void - * [._getForcedUpdateList(projectVersion)](#Init._getForcedUpdateList) ⇒ Promise.<Array.<string>> - * [._createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent])](#Init._createIdeConfigFile) ⇒ Promise.<boolean> - * [.upgradeAuthFile()](#Init.upgradeAuthFile) ⇒ Promise.<boolean> - * [.initGitRepo()](#Init.initGitRepo) ⇒ Promise.<{status: string, repoName: string}> - * [.gitPush()](#Init.gitPush) ⇒ void - * [._addGitRemote()](#Init._addGitRemote) ⇒ string - * [._updateGitConfigUser()](#Init._updateGitConfigUser) ⇒ void - * [._getGitConfigUser()](#Init._getGitConfigUser) ⇒ Promise.<{'user.name': string, 'user.email': string}> - * [.initProject(properties, credentialName)](#Init.initProject) ⇒ Promise.<void> - * [.joinProject()](#Init.joinProject) ⇒ Promise.<void> - * [._initMarkets()](#Init._initMarkets) - * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> - * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> - * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> - - - -### Init.fixMcdevConfig(properties) ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | - - - -### Init.createIdeConfigFiles(versionBeforeUpgrade) ⇒ Promise.<boolean> -handles creation/update of all config file from the boilerplate - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - status of config file creation - -| Param | Type | Description | -| --- | --- | --- | -| versionBeforeUpgrade | string | 'x.y.z' | - - - -### Init.\_updateLeaf(propertiersCur, defaultPropsCur, fieldName) ⇒ void -recursive helper for [fixMcdevConfig](#Init.fixMcdevConfig) that adds missing settings - -**Kind**: static method of [Init](#Init) - -| Param | Type | Description | -| --- | --- | --- | -| propertiersCur | object | current sub-object of project settings | -| defaultPropsCur | object | current sub-object of default settings | -| fieldName | string | dot-concatenated object-path that needs adding | - - - -### Init.\_getForcedUpdateList(projectVersion) ⇒ Promise.<Array.<string>> -returns list of files that need to be updated - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<Array.<string>> - relevant files with path that need to be updated - -| Param | Type | Description | -| --- | --- | --- | -| projectVersion | string | version found in config file of the current project | - - - -### Init.\_createIdeConfigFile(fileNameArr, relevantForcedUpdates, [boilerplateFileContent]) ⇒ Promise.<boolean> -handles creation/update of one config file from the boilerplate at a time - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| fileNameArr | Array.<string> | 0: path, 1: filename, 2: extension with dot | -| relevantForcedUpdates | Array.<string> | if fileNameArr is in this list we require an override | -| [boilerplateFileContent] | string | in case we cannot copy files 1:1 this can be used to pass in content | - - - -### Init.upgradeAuthFile() ⇒ Promise.<boolean> -helper method for this.upgradeProject that upgrades project config if needed - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - returns true if worked without errors - - -### Init.initGitRepo() ⇒ Promise.<{status: string, repoName: string}> -check if git repo exists and otherwise create one - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{status: string, repoName: string}> - success flag - - -### Init.gitPush() ⇒ void -offer to push the new repo straight to the server - -**Kind**: static method of [Init](#Init) - - -### Init.\_addGitRemote() ⇒ string -offers to add the git remote origin - -**Kind**: static method of [Init](#Init) -**Returns**: string - repo name (optionally) - - -### Init.\_updateGitConfigUser() ⇒ void -checks global config and ask to config the user info and then store it locally - -**Kind**: static method of [Init](#Init) - - -### Init.\_getGitConfigUser() ⇒ Promise.<{'user.name': string, 'user.email': string}> -retrieves the global user.name and user.email values - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{'user.name': string, 'user.email': string}> - user.name and user.email - - -### Init.initProject(properties, credentialName) ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| credentialName | string | identifying name of the installed package / project | - - - -### Init.joinProject() ⇒ Promise.<void> -Creates template file for properties.json - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - - -### Init.\_initMarkets() -helper for @initProject that optionally creates markets and market lists for all BUs - -**Kind**: static method of [Init](#Init) - - -### Init.\_downloadAllBUs(bu, gitStatus) ⇒ Promise.<void> -helper for [initProject](#Init.initProject) - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| bu | string | cred/bu or cred/* or * | -| gitStatus | string | signals what state the git repo is in | - - - -### Init.upgradeProject(properties, [initial], [repoName]) ⇒ Promise.<boolean> -wrapper around npm dependency & configuration file setup - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - success flag - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | config file's json | -| [initial] | boolean | print message if not part of initial setup | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.installDependencies([repoName]) ⇒ Promise.<boolean> -initiates npm project and then -takes care of loading the pre-configured dependency list -from the boilerplate directory to them as dev-dependencies - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<boolean> - install successful or error occured - -| Param | Type | Description | -| --- | --- | --- | -| [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - - -### Init.\_getDefaultPackageJson([currentContent]) ⇒ Promise.<{script: object, author: string, license: string}> -ensure we have certain default values in our config - -**Kind**: static method of [Init](#Init) -**Returns**: Promise.<{script: object, author: string, license: string}> - extended currentContent - -| Param | Type | Description | -| --- | --- | --- | -| [currentContent] | object | what was read from existing package.json file | - - - -## Util -Util that contains logger and simple util methods - -**Kind**: global constant - -* [Util](#Util) - * [.skipInteraction](#Util.skipInteraction) : TYPE.skipInteraction - * [.logger](#Util.logger) : TYPE.Logger - * [.filterObjByKeys(originalObj, [whitelistArr])](#Util.filterObjByKeys) ⇒ Object.<string, \*> - * [.includesStartsWith(arr, search)](#Util.includesStartsWith) ⇒ boolean - * [.includesStartsWithIndex(arr, search)](#Util.includesStartsWithIndex) ⇒ number - * [.checkMarket(market, properties)](#Util.checkMarket) ⇒ boolean - * [.verifyMarketList(mlName, properties)](#Util.verifyMarketList) - * [.signalFatalError()](#Util.signalFatalError) ⇒ void - * [.isTrue(attrValue)](#Util.isTrue) ⇒ boolean - * [.isFalse(attrValue)](#Util.isFalse) ⇒ boolean - * [._isValidType(selectedType, [handleOutside])](#Util._isValidType) ⇒ boolean - * [.getTypeAndSubType(selectedType)](#Util.getTypeAndSubType) ⇒ Array.<string> - * [.getRetrieveTypeChoices()](#Util.getRetrieveTypeChoices) ⇒ Array.<TYPE.SupportedMetadataTypes> - * [._createNewLoggerTransport([noLogFile])](#Util._createNewLoggerTransport) ⇒ object - * [.startLogger([restart], [noLogFile])](#Util.startLogger) ⇒ void - * [.metadataLogger(level, type, method, payload, [source])](#Util.metadataLogger) ⇒ void - * [.replaceByObject(str, obj)](#Util.replaceByObject) ⇒ string \| object - * [.inverseGet(objs, val)](#Util.inverseGet) ⇒ string - * [.getDependentMetadata(fixedType)](#Util.getDependentMetadata) ⇒ Array.<string> - * [.getMetadataHierachy(metadataTypes)](#Util.getMetadataHierachy) ⇒ Object.<string, Array.<string>> - * [.resolveObjPath(path, obj)](#Util.resolveObjPath) ⇒ any - * [.execSync(cmd, [args], [hideOutput])](#Util.execSync) ⇒ string \| void - * [.templateSearchResult(results, keyToSearch, searchValue)](#Util.templateSearchResult) ⇒ TYPE.MetadataTypeItem - * [.setLoggingLevel(argv)](#Util.setLoggingLevel) ⇒ void - * [.logBeta(type)](#Util.logBeta) - * [.getGrayMsg(msg)](#Util.getGrayMsg) ⇒ string - * [.logSubtypes(subTypeArr)](#Util.logSubtypes) ⇒ void - * [.getKeysString(keyArr, [isId])](#Util.getKeysString) ⇒ string - * [.sleep(ms)](#Util.sleep) ⇒ Promise.<void> - * [.getSsjs(code)](#Util.getSsjs) ⇒ string - * [.stringLike(testString, search)](#Util.stringLike) ⇒ boolean - * [.fieldsLike(metadata, [filters])](#Util.fieldsLike) ⇒ boolean - * [.capitalizeFirstLetter(str)](#Util.capitalizeFirstLetter) ⇒ string - - - -### Util.skipInteraction : TYPE.skipInteraction -**Kind**: static property of [Util](#Util) - - -### Util.logger : TYPE.Logger -Logger that creates timestamped log file in 'logs/' directory - -**Kind**: static property of [Util](#Util) - - -### Util.filterObjByKeys(originalObj, [whitelistArr]) ⇒ Object.<string, \*> -helper that allows filtering an object by its keys - -**Kind**: static method of [Util](#Util) -**Returns**: Object.<string, \*> - filtered object that only contains keys you provided - -| Param | Type | Description | -| --- | --- | --- | -| originalObj | Object.<string, \*> | object that you want to filter | -| [whitelistArr] | Array.<string> | positive filter. if not provided, returns originalObj without filter | - - - -### Util.includesStartsWith(arr, search) ⇒ boolean -extended Array.includes method that allows check if an array-element starts with a certain string - -**Kind**: static method of [Util](#Util) -**Returns**: boolean - found / not found - -| Param | Type | Description | -| --- | --- | --- | -| arr | Array.<string> | your array of strigns | -| search | string | the string you are looking for | - - - -### Util.includesStartsWithIndex(arr, search) ⇒ number -extended Array.includes method that allows check if an array-element starts with a certain string - -**Kind**: static method of [Util](#Util) -**Returns**: number - array index 0..n or -1 of not found - -| Param | Type | Description | -| --- | --- | --- | -| arr | Array.<string> | your array of strigns | -| search | string | the string you are looking for | - - - -### Util.checkMarket(market, properties) ⇒ boolean -check if a market name exists in current mcdev config - -**Kind**: static method of [Util](#Util) -**Returns**: boolean - found market or not - -| Param | Type | Description | -| --- | --- | --- | -| market | string | market localizations | -| properties | TYPE.Mcdevrc | local mcdev config | - - - -### Util.verifyMarketList(mlName, properties) -ensure provided MarketList exists and it's content including markets and BUs checks out - -**Kind**: static method of [Util](#Util) - -| Param | Type | Description | -| --- | --- | --- | -| mlName | string | name of marketList | -| properties | TYPE.Mcdevrc | General configuration to be used in retrieve | - - - -### Util.signalFatalError() ⇒ void -used to ensure the program tells surrounding software that an unrecoverable error occured - -**Kind**: static method of [Util](#Util) - - -### Util.isTrue(attrValue) ⇒ boolean -SFMC accepts multiple true values for Boolean attributes for which we are checking here. -The same problem occurs when evaluating boolean CLI flags - -**Kind**: static method of [Util](#Util) -**Returns**: boolean - attribute value == true ? true : false - -| Param | Type | Description | -| --- | --- | --- | -| attrValue | \* | value | - - - -### Util.isFalse(attrValue) ⇒ boolean -SFMC accepts multiple false values for Boolean attributes for which we are checking here. -The same problem occurs when evaluating boolean CLI flags - -**Kind**: static method of [Util](#Util) -**Returns**: boolean - attribute value == false ? true : false - -| Param | Type | Description | -| --- | --- | --- | -| attrValue | \* | value | - - - -### Util.\_isValidType(selectedType, [handleOutside]) ⇒ boolean -helper for Mcdev.retrieve, Mcdev.retrieveAsTemplate and Mcdev.deploy - -**Kind**: static method of [Util](#Util) -**Returns**: boolean - type ok or not - -| Param | Type | Description | -| --- | --- | --- | -| selectedType | TYPE.SupportedMetadataTypes | type or type-subtype | -| [handleOutside] | boolean | if the API reponse is irregular this allows you to handle it outside of this generic method | - - - -### Util.getTypeAndSubType(selectedType) ⇒ Array.<string> -helper that deals with extracting type and subtype - -**Kind**: static method of [Util](#Util) -**Returns**: Array.<string> - first elem is type, second elem is subType - -| Param | Type | Description | -| --- | --- | --- | -| selectedType | string | "type" or "type-subtype" | - - - -### Util.getRetrieveTypeChoices() ⇒ Array.<TYPE.SupportedMetadataTypes> -helper for getDefaultProperties() - -**Kind**: static method of [Util](#Util) -**Returns**: Array.<TYPE.SupportedMetadataTypes> - type choices - - -### Util.\_createNewLoggerTransport([noLogFile]) ⇒ object -wrapper around our standard winston logging to console and logfile - -**Kind**: static method of [Util](#Util) -**Returns**: object - initiated logger for console and file - -| Param | Type | Description | -| --- | --- | --- | -| [noLogFile] | boolean | optional flag to indicate if we should log to file; CLI logs are always on | - - - -### Util.startLogger([restart], [noLogFile]) ⇒ void -initiate winston logger - -**Kind**: static method of [Util](#Util) - -| Param | Type | Description | -| --- | --- | --- | -| [restart] | boolean | if true, logger will be restarted; otherwise, an existing logger will be used | -| [noLogFile] | boolean | if false, logger will log to file; otherwise, only to console | - - - -### Util.metadataLogger(level, type, method, payload, [source]) ⇒ void -Logger helper for Metadata functions - -**Kind**: static method of [Util](#Util) - -| Param | Type | Description | -| --- | --- | --- | -| level | string | of log (error, info, warn) | -| type | string | of metadata being referenced | -| method | string | name which log was called from | -| payload | \* | generic object which details the error | -| [source] | string | key/id of metadata which relates to error | - - - -### Util.replaceByObject(str, obj) ⇒ string \| object -replaces values in a JSON object string, based on a series of -key-value pairs (obj) - -**Kind**: static method of [Util](#Util) -**Returns**: string \| object - replaced version of str - -| Param | Type | Description | -| --- | --- | --- | -| str | string \| object | JSON object or its stringified version, which has values to be replaced | -| obj | TYPE.TemplateMap | key value object which contains keys to be replaced and values to be replaced with | - - - -### Util.inverseGet(objs, val) ⇒ string -get key of an object based on the first matching value - -**Kind**: static method of [Util](#Util) -**Returns**: string - key - -| Param | Type | Description | -| --- | --- | --- | -| objs | object | object of objects to be searched | -| val | string | value to be searched for | - - - -### Util.getDependentMetadata(fixedType) ⇒ Array.<string> -helper for Mcdev.fixKeys. Retrieve dependent metadata - -**Kind**: static method of [Util](#Util) -**Returns**: Array.<string> - array of types that depend on the given type - -| Param | Type | Description | -| --- | --- | --- | -| fixedType | string | type of the metadata passed as a parameter to fixKeys function | - - - -### Util.getMetadataHierachy(metadataTypes) ⇒ Object.<string, Array.<string>> -Returns Order in which metadata needs to be retrieved/deployed - -**Kind**: static method of [Util](#Util) -**Returns**: Object.<string, Array.<string>> - retrieve/deploy order as array - -| Param | Type | Description | -| --- | --- | --- | -| metadataTypes | Array.<string> | which should be retrieved/deployed | - - - -### Util.resolveObjPath(path, obj) ⇒ any -let's you dynamically walk down an object and get a value - -**Kind**: static method of [Util](#Util) -**Returns**: any - value of obj.path - -| Param | Type | Description | -| --- | --- | --- | -| path | string | 'fieldA.fieldB.fieldC' | -| obj | object | some parent object | - - - -### Util.execSync(cmd, [args], [hideOutput]) ⇒ string \| void -helper to run other commands as if run manually by user - -**Kind**: static method of [Util](#Util) -**Returns**: string \| void - output of command if hideOutput is true - -| Param | Type | Description | -| --- | --- | --- | -| cmd | string | to be executed command | -| [args] | Array.<string> | list of arguments | -| [hideOutput] | boolean | if true, output of command will be hidden from CLI | - - - -### Util.templateSearchResult(results, keyToSearch, searchValue) ⇒ TYPE.MetadataTypeItem -standardize check to ensure only one result is returned from template search - -**Kind**: static method of [Util](#Util) -**Returns**: TYPE.MetadataTypeItem - metadata to be used in building template - -| Param | Type | Description | -| --- | --- | --- | -| results | Array.<TYPE.MetadataTypeItem> | array of metadata | -| keyToSearch | string | the field which contains the searched value | -| searchValue | string | the value which is being looked for | - - - -### Util.setLoggingLevel(argv) ⇒ void -configures what is displayed in the console - -**Kind**: static method of [Util](#Util) - -| Param | Type | Description | -| --- | --- | --- | -| argv | object | list of command line parameters given by user | -| [argv.silent] | boolean | only errors printed to CLI | -| [argv.verbose] | boolean | chatty user CLI output | -| [argv.debug] | boolean | enables developer output & features | - - - -### Util.logBeta(type) -outputs a warning that the given type is still in beta - -**Kind**: static method of [Util](#Util) - -| Param | Type | Description | -| --- | --- | --- | -| type | string | api name of the type thats in beta | - - - -### Util.getGrayMsg(msg) ⇒ string -helper that wraps a message in the correct color codes to have them printed gray - -**Kind**: static method of [Util](#Util) -**Returns**: string - gray msg - -| Param | Type | Description | -| --- | --- | --- | -| msg | string | log message that should be wrapped with color codes | - - - -### Util.logSubtypes(subTypeArr) ⇒ void -helper to print the subtypes we filtered by - -**Kind**: static method of [Util](#Util) - -| Param | Type | Description | -| --- | --- | --- | -| subTypeArr | Array.<string> | list of subtypes to be printed | - - - -### Util.getKeysString(keyArr, [isId]) ⇒ string -helper to print the subtypes we filtered by - -**Kind**: static method of [Util](#Util) -**Returns**: string - string to be appended to log message - -| Param | Type | Description | -| --- | --- | --- | -| keyArr | Array.<string> \| string | list of subtypes to be printed | -| [isId] | boolean | optional flag to indicate if key is an id | - - - -### Util.sleep(ms) ⇒ Promise.<void> -pause execution of code; useful when multiple server calls are dependent on each other and might not be executed right away - -**Kind**: static method of [Util](#Util) -**Returns**: Promise.<void> - - promise to wait for - -| Param | Type | Description | -| --- | --- | --- | -| ms | number | time in miliseconds to wait | - - - -### Util.getSsjs(code) ⇒ string -helper for Asset.extractCode and Script.prepExtractedCode to determine if a code block is a valid SSJS block - -**Kind**: static method of [Util](#Util) -**Returns**: string - the SSJS code if code block is a valid SSJS block, otherwise null - -| Param | Type | Description | -| --- | --- | --- | -| code | string | code block to check | - -**Example** -```js -the following is invalid: - - - - the following is valid: - -``` - - -### Util.stringLike(testString, search) ⇒ boolean -allows us to filter just like with SQL's LIKE operator - -**Kind**: static method of [Util](#Util) -**Returns**: boolean - true if testString matches search - -| Param | Type | Description | -| --- | --- | --- | -| testString | string | field value to test | -| search | string | search string in SQL LIKE format | - - - -### Util.fieldsLike(metadata, [filters]) ⇒ boolean -returns true if no LIKE filter is defined or if all filters match - -**Kind**: static method of [Util](#Util) -**Returns**: boolean - true if no LIKE filter is defined or if all filters match - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single metadata item | -| [filters] | object | only used in recursive calls | - - - -### Util.capitalizeFirstLetter(str) ⇒ string -helper used by SOAP methods to ensure the type always uses an upper-cased first letter - -**Kind**: static method of [Util](#Util) -**Returns**: string - str with first letter capitalized - -| Param | Type | Description | -| --- | --- | --- | -| str | string | string to capitalize | - - - -## csvToArray(csv) ⇒ Array.<string> -helper to convert CSVs into an array. if only one value was given, it's also returned as an array - -**Kind**: global function -**Returns**: Array.<string> - values split into an array. - -| Param | Type | Description | -| --- | --- | --- | -| csv | string | potentially comma-separated value or null | - - - -## Mcdev.(methodName, businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> -run a method across BUs - -**Kind**: global function -**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of affected item keys - -| Param | Type | Description | -| --- | --- | --- | -| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | -| businessUnit | string | name of BU | -| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | -| [keys] | Array.<string> | customerkey of the metadata | - - - -## Mcdev.(methodName, cred, bu, [type], keyArr) ⇒ Promise.<Array.<string>> -helper for [Mcdev.#runMethod](Mcdev.#runMethod) - -**Kind**: global function -**Returns**: Promise.<Array.<string>> - list of keys that were affected - -| Param | Type | Description | -| --- | --- | --- | -| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | -| cred | string | name of Credential | -| bu | string | name of BU | -| [type] | TYPE.SupportedMetadataTypes | limit execution to given metadata type | -| keyArr | Array.<string> | customerkey of the metadata | - - - -## Mcdev.(selectedType, buObject) ⇒ Array.<string> -helper for [Mcdev.#runOnBU](Mcdev.#runOnBU) - -**Kind**: global function -**Returns**: Array.<string> - keyArr - -| Param | Type | Description | -| --- | --- | --- | -| selectedType | TYPE.SupportedMetadataTypes | limit execution to given metadata type | -| buObject | TYPE.BuObject | properties for auth | - - - -## Mcdev.(cred, bu, type, [keyArr]) ⇒ Promise.<Array.<string>> -Updates the key to match the name field - -**Kind**: global function -**Returns**: Promise.<Array.<string>> - list of keys that were affected - -| Param | Type | Description | -| --- | --- | --- | -| cred | string | name of Credential | -| bu | string | name of BU | -| type | TYPE.SupportedMetadataTypes | limit execution to given metadata type | -| [keyArr] | Array.<string> | customerkey of the metadata | - - - -## Automation.(metadata) ⇒ boolean -helper for [postRetrieveTasks](#Automation.postRetrieveTasks) and [execute](#Automation.execute) - -**Kind**: global function -**Returns**: boolean - true if the automation schedule is valid - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | a single automation | - - - -## Automation.(metadataMap, key) ⇒ Promise.<{key:string, response:object}> -helper for [execute](#Automation.execute) - -**Kind**: global function -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.AutomationMap | map of metadata | -| key | string | key of the metadata | - - - -## Automation.(metadataEntry) ⇒ Promise.<{key:string, response:object}> -helper for [execute](#Automation.execute) - -**Kind**: global function -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response - -| Param | Type | Description | -| --- | --- | --- | -| metadataEntry | TYPE.AutomationItem | metadata object | - - - -## Automation.(metadata) ⇒ Promise.<{key:string, response:object}> -helper for [pause](#Automation.pause) - -**Kind**: global function -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | automation metadata | - - - -## Automation.(metadata) -helper for [preDeployTasks](#Automation.preDeployTasks) and [execute](#Automation.execute) - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.AutomationItem | metadata mapped by their keyField | - - - -## Automation.(metadataMap, key) ⇒ Promise.<void> -helper for [postDeployTasks](#Automation.postDeployTasks) - -**Kind**: global function -**Returns**: Promise.<void> - - - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | -| key | string | current customer key | - - - -## Automation.(metadataMap, originalMetadataMap, key, [oldKey]) ⇒ Promise.<{key:string, response:object}> -helper for [postDeployTasks](#Automation.postDeployTasks) - -**Kind**: global function -**Returns**: Promise.<{key:string, response:object}> - metadata key and API response - -| Param | Type | Description | -| --- | --- | --- | -| metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | -| originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | -| key | string | current customer key | -| [oldKey] | string | old customer key before fixKey / changeKeyValue / changeKeyField | - - - -## DataExtension.(upsertedMetadata, originalMetadata, createdUpdated) ⇒ void -takes care of updating attribute groups on child BUs after an update to Shared DataExtensions -helper for [postDeployTasks](#DataExtension.postDeployTasks) -fixes an issue where shared data extensions are not visible in data designer on child BU; SF known issue: https://issues.salesforce.com/#q=W-11031095 - -**Kind**: global function - -| Param | Type | Description | -| --- | --- | --- | -| upsertedMetadata | TYPE.DataExtensionMap | metadata mapped by their keyField | -| originalMetadata | TYPE.DataExtensionMap | metadata to be updated (contains additioanl fields) | -| createdUpdated | Object | counter representing successful creates/updates | - - - -## DataExtension.() ⇒ Array.<string> -helper for [DataExtension.#fixShared](DataExtension.#fixShared) - -**Kind**: global function -**Returns**: Array.<string> - list of selected BU names - - -## DataExtension.(childBuName, buObjectParent, clientParent, sharedDataExtensionMap) ⇒ Promise.<Array.<string>> -helper for [DataExtension.#fixShared](DataExtension.#fixShared) - -**Kind**: global function -**Returns**: Promise.<Array.<string>> - updated shared DE keys on BU - -| Param | Type | Description | -| --- | --- | --- | -| childBuName | string | name of child BU to fix | -| buObjectParent | TYPE.BuObject | bu object for parent BU | -| clientParent | object | SDK for parent BU | -| sharedDataExtensionMap | Object.<string, string> | ID-Key relationship of shared data extensions | - - - -## DataExtension.(deId, deKey, buObjectChildBu, clientChildBu, buObjectParent, clientParent) ⇒ Promise.<boolean> -method that actually takes care of triggering the update for a particular BU-sharedDe combo -helper for [DataExtension.#fixShared_onBU](DataExtension.#fixShared_onBU) - -**Kind**: global function -**Returns**: Promise.<boolean> - flag that signals if the fix was successful - -| Param | Type | Description | -| --- | --- | --- | -| deId | string | data extension ObjectID | -| deKey | string | dataExtension key | -| buObjectChildBu | TYPE.BuObject | BU object for Child BU | -| clientChildBu | object | SDK for child BU | -| buObjectParent | TYPE.BuObject | BU object for Parent BU | -| clientParent | object | SDK for parent BU | - - - -## DataExtension.(buObjectChildBu, clientChildBu, deKey, deId) ⇒ Promise.<string> -add a new field to the shared DE to trigger an update to the data model -helper for [DataExtension.#fixShared_item](DataExtension.#fixShared_item) - -**Kind**: global function -**Returns**: Promise.<string> - randomSuffix - -| Param | Type | Description | -| --- | --- | --- | -| buObjectChildBu | TYPE.BuObject | BU object for Child BU | -| clientChildBu | object | SDK for child BU | -| deKey | string | dataExtension key | -| deId | string | dataExtension ObjectID | - - - -## DataExtension.(randomSuffix, buObjectParent, clientParent, deKey) ⇒ Promise.<string> -get ID of the field added by [DataExtension.#fixShared_item_addField](DataExtension.#fixShared_item_addField) on the shared DE via parent BU -helper for [DataExtension.#fixShared_item](DataExtension.#fixShared_item) - -**Kind**: global function -**Returns**: Promise.<string> - fieldObjectID - -| Param | Type | Description | -| --- | --- | --- | -| randomSuffix | string | - | -| buObjectParent | TYPE.BuObject | BU object for Parent BU | -| clientParent | object | SDK for parent BU | -| deKey | string | dataExtension key | - - - -## DataExtension.(randomSuffix, buObjectChildBu, clientChildBu, deKey, fieldObjectID) ⇒ Promise -delete the field added by [DataExtension.#fixShared_item_addField](DataExtension.#fixShared_item_addField) -helper for [DataExtension.#fixShared_item](DataExtension.#fixShared_item) - -**Kind**: global function -**Returns**: Promise - - - -| Param | Type | Description | -| --- | --- | --- | -| randomSuffix | string | - | -| buObjectChildBu | TYPE.BuObject | BU object for Child BU | -| clientChildBu | object | SDK for child BU | -| deKey | string | dataExtension key | -| fieldObjectID | string | field ObjectID | - - - -## getUserName(userList, item, fieldname) ⇒ string -**Kind**: global function -**Returns**: string - username or user id or 'n/a' - -| Param | Type | Description | -| --- | --- | --- | -| userList | Object.<string, string> | user-id > user-name map | -| item | Object.<string, string> | single metadata item | -| fieldname | string | name of field containing the info | - - - -## setupSDK(sessionKey, authObject) ⇒ [SDK](#SDK) -Returns an SDK instance to be used for API calls - -**Kind**: global function -**Returns**: [SDK](#SDK) - auth object - -| Param | Type | Description | -| --- | --- | --- | -| sessionKey | string | key for specific BU | -| authObject | TYPE.AuthObject | credentials for specific BU | - - - -## getActualJson(customerKey, type, subtype, [buName]) ⇒ Promise.<string> -gets file from Retrieve folder - -**Kind**: global function -**Returns**: Promise.<string> - file in string form - -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| customerKey | string | | of metadata | -| type | string | | of metadata | -| subtype | string | | of metadata | -| [buName] | string | "testBU" | used when we need to test on ParentBU | - - - -## getActualFile(customerKey, type, subtype, ext) ⇒ string -gets file from Retrieve folder - -**Kind**: global function -**Returns**: string - file path - -| Param | Type | Description | -| --- | --- | --- | -| customerKey | string | of metadata | -| type | string | of metadata | -| subtype | string | of metadata | -| ext | string | file extension | - - - -## TypeKeyCombo : Object.<string, string> -object-key=metadata type, value=array of external keys - -**Kind**: global typedef - - -## MetadataTypeItemDiff : Object.<string, any> -key=customer key - -**Kind**: global typedef - - -## CodeExtractItem : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| json | MetadataTypeItem | metadata of one item w/o code | -| codeArr | [Array.<CodeExtract>](#CodeExtract) | list of code snippets in this item | -| subFolder | Array.<string> | mostly set to null, otherwise list of subfolders | - - - -## CodeExtract : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| subFolder | Array.<string> | mostly set to null, otherwise subfolders path split into elements | -| fileName | string | name of file w/o extension | -| fileExt | string | file extension | -| content | string | file content | -| [encoding] | 'base64' | optional for binary files | - - - -## CodeExtractItem : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| name | string | name | -| key | string | key | -| description | string | - | -| targetKey | string | key of target data extension | -| createdDate | string | e.g. "2020-09-14T01:42:03.017" | -| modifiedDate | string | e.g. "2020-09-14T01:42:03.017" | -| targetUpdateTypeName | 'Overwrite' \| 'Update' \| 'Append' | defines how the query writes into the target data extension | -| [targetUpdateTypeId] | 0 \| 1 \| 2 | mapped to targetUpdateTypeName via this.definition.targetUpdateTypeMapping | -| [targetId] | string | Object ID of DE (removed before save) | -| [targetDescription] | string | Description DE (removed before save) | -| isFrozen | boolean | looks like this is always set to false | -| [queryText] | string | contains SQL query with line breaks converted to '\n'. The content is extracted during retrieval and written into a separate *.sql file | -| [categoryId] | string | holds folder ID, replaced with r__folder_Path during retrieve | -| r__folder_Path | string | folder path in which this DE is saved | -| json | QueryItem | metadata of one item w/o code | -| codeArr | [Array.<CodeExtract>](#CodeExtract) | list of code snippets in this item | -| subFolder | Array.<string> | mostly set to null, otherwise list of subfolders | - - - -## ScriptMap : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| name | string | name | -| key | string | key | -| description | string | - | -| createdDate | string | e.g. "2020-09-14T01:42:03.017" | -| modifiedDate | string | e.g. "2020-09-14T01:42:03.017" | -| [script] | string | contains script with line breaks converted to '\n'. The content is extracted during retrieval and written into a separate *.ssjs file | -| [categoryId] | string | holds folder ID, replaced with r__folder_Path during retrieve | -| r__folder_Path | string | folder path in which this DE is saved | - - - -## AssetSubType : Object.<string, any> -**Kind**: global typedef - - -## DataExtensionFieldMap : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| [ObjectID] | string | id | -| [CustomerKey] | string | key in format [DEkey].[FieldName] | -| [DataExtension] | object | - | -| DataExtension.CustomerKey | string | key of DE | -| Name | string | name of field | -| [Name_new] | string | custom attribute that is only used when trying to rename a field from Name to Name_new | -| DefaultValue | string | empty string for not set | -| IsRequired | true \| false | - | -| IsPrimaryKey | true \| false | - | -| Ordinal | string | 1, 2, 3, ... | -| FieldType | 'Text' \| 'Number' \| 'Date' \| 'Boolean' \| 'Decimal' \| 'EmailAddress' \| 'Phone' \| 'Locale' | can only be set on create | -| Scale | string | the number of places after the decimal that the field can hold; example: "0","1", ... | - - - -## DataExtensionMap : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| CustomerKey | string | key | -| Name | string | name | -| Description | string | - | -| [CreatedDate] | string | iso format | -| [ModifiedDate] | string | iso format | -| IsSendable | true \| false | - | -| IsTestable | true \| false | - | -| SendableDataExtensionField | object | - | -| SendableDataExtensionField.Name | string | - | -| SendableSubscriberField | object | - | -| SendableSubscriberField.Name | string | - | -| Fields | Array.<DataExtensionFieldItem> | list of DE fields | -| r__folder_ContentType | 'dataextension' \| 'salesforcedataextension' \| 'synchronizeddataextension' \| 'shared\_dataextension' \| 'shared\_salesforcedataextension' | retrieved from associated folder | -| r__folder_Path | string | folder path in which this DE is saved | -| [CategoryID] | string | holds folder ID, replaced with r__folder_Path during retrieve | -| [r__dataExtensionTemplate_Name] | string | name of optionally associated DE template | -| [Template] | object | - | -| [Template.CustomerKey] | string | key of optionally associated DE teplate | - - - -## UserDocumentMap : object -key=customer key - -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| [ID] | string | equal to UserID; optional in update/create calls | -| UserID | string | equal to ID; required in update/create calls | -| [AccountUserID] | number | user.AccountUserID | -| c__AccountUserID | number | copy of AccountUserID | -| CustomerKey | string | user.CustomerKey | -| Name | string | user.Name | -| Email | string | user.Email | -| NotificationEmailAddress | string | user.NotificationEmailAddress | -| ActiveFlag | boolean | user.ActiveFlag === true ? '✓' : '-' | -| IsAPIUser | boolean | user.IsAPIUser === true ? '✓' : '-' | -| MustChangePassword | boolean | user.MustChangePassword === true ? '✓' : '-' | -| DefaultBusinessUnit | number | defaultBUName | -| c__AssociatedBusinessUnits | Array.<number> | associatedBus | -| [Roles] | object | (API only) | -| [Roles.Role] | Array.<object> | roles (API only) | -| c__RoleNamesGlobal | Array.<string> | roles | -| UserPermissions | Array.<string> | userPermissions | -| LastSuccessfulLogin | string | this.timeSinceDate(user.LastSuccessfulLogin) | -| CreatedDate | string | user.CreatedDate | -| ModifiedDate | string | user.ModifiedDate | -| Client | object | - | -| [Client.ID] | number | EID e.g:7281698 | -| Client.ModifiedBy | number | AccountUserID of user who last modified this user | -| c__type | 'User' \| 'Installed Package' | - | -| [IsLocked] | boolean | (API only) | -| [Unlock] | boolean | used to unlock a user that has IsLocked === true | -| c__IsLocked_readOnly | boolean | copy of IsLocked | -| c__TimeZoneName | string | name of timezone | -| [TimeZone] | object | (API only) | -| [TimeZone.Name] | string | (API only) | -| [TimeZone.ID] | string | (API only) | -| c__LocaleCode | 'en-US' \| 'fr-CA' \| 'fr-FR' \| 'de-DE' \| 'it-IT' \| 'ja-JP' \| 'pt-BR' \| 'es-419' \| 'es-ES' | fr-CA, en-US, ... | -| [Locale] | object | (API only) | -| [Locale.LocaleCode] | 'en-US' \| 'fr-CA' \| 'fr-FR' \| 'de-DE' \| 'it-IT' \| 'ja-JP' \| 'pt-BR' \| 'es-419' \| 'es-ES' | (API only) | - - - -## BusinessUnitAssignmentConfiguration : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| Client | object | wrapper | -| Client.ID | number | EID e.g:7281698 | -| [PartnerKey] | string | empty string | -| ID | number | User ID e.g:717133502 | -| [ObjectID] | string | empty string | -| [Delete] | number | 0,1 | -| BusinessUnitAssignmentConfiguration | [BusinessUnitAssignmentConfiguration](#BusinessUnitAssignmentConfiguration) | - | -| BusinessUnitIds | object | wrapper | -| BusinessUnitIds.BusinessUnitId | Array.<number> \| number | e.g:[518003624] | -| IsDelete | boolean | assign BU if false, remove assignment if true | - - - -## AutomationActivity : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| name | string | name (not key) of activity | -| [objectTypeId] | string | Id of assoicated activity type; see this.definition.activityTypeMapping | -| [activityObjectId] | string | Object Id of assoicated metadata item | -| [displayOrder] | number | order within step; starts with 1 or higher number | -| r__type | string | see this.definition.activityTypeMapping | - - - -## AutomationStep : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| name | string | description | -| [annotation] | string | equals AutomationStep.name | -| [step] | number | step iterator; starts with 1 | -| [stepNumber] | number | step iterator, automatically set during deployment | -| activities | [Array.<AutomationActivity>](#AutomationActivity) | - | - - - -## AutomationSchedule : object -REST format - -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| typeId | number | ? | -| startDate | string | example: '2021-05-07T09:00:00' | -| endDate | string | example: '2021-05-07T09:00:00' | -| icalRecur | string | example: 'FREQ=DAILY;UNTIL=20790606T160000;INTERVAL=1' | -| timezoneName | string | example: 'W. Europe Standard Time'; see this.definition.timeZoneMapping | -| [timezoneId] | number | see this.definition.timeZoneMapping | - - - -## AutomationScheduleSoap : object -SOAP format - -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| Recurrence | object | - | -| Recurrence.$ | object | {'xsi:type': keyStem + 'lyRecurrence'} | -| [Recurrence.YearlyRecurrencePatternType] | 'ByYear' | * currently not supported by tool * | -| [Recurrence.MonthlyRecurrencePatternType] | 'ByMonth' | * currently not supported by tool * | -| [Recurrence.WeeklyRecurrencePatternType] | 'ByWeek' | * currently not supported by tool * | -| [Recurrence.DailyRecurrencePatternType] | 'ByDay' | - | -| [Recurrence.MinutelyRecurrencePatternType] | 'Interval' | - | -| [Recurrence.HourlyRecurrencePatternType] | 'Interval' | - | -| [Recurrence.YearInterval] | number | 1..n * currently not supported by tool * | -| [Recurrence.MonthInterval] | number | 1..n * currently not supported by tool * | -| [Recurrence.WeekInterval] | number | 1..n * currently not supported by tool * | -| [Recurrence.DayInterval] | number | 1..n | -| [Recurrence.HourInterval] | number | 1..n | -| [Recurrence.MinuteInterval] | number | 1..n | -| _interval | number | internal variable for CLI output only | -| TimeZone | object | - | -| TimeZone.ID | number | AutomationSchedule.timezoneId | -| _timezoneString | string | internal variable for CLI output only | -| StartDateTime | string | AutomationSchedule.startDate | -| EndDateTime | string | AutomationSchedule.endDate | -| _StartDateTime | string | AutomationSchedule.startDate; internal variable for CLI output only | -| RecurrenceRangeType | 'EndOn' \| 'EndAfter' | set to 'EndOn' if AutomationSchedule.icalRecur contains 'UNTIL'; otherwise to 'EndAfter' | -| Occurrences | number | only exists if RecurrenceRangeType=='EndAfter' | - - - -## AutomationItem : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| [id] | string | Object Id | -| key | string | key | -| name | string | name | -| description | string | - | -| type | 'scheduled' \| 'triggered' | Starting Source = Schedule / File Drop | -| status | 'Scheduled' \| 'Running' \| 'Ready' \| 'Building' \| 'PausedSchedule' \| 'InactiveTrigger' | - | -| [schedule] | [AutomationSchedule](#AutomationSchedule) | only existing if type=scheduled | -| [fileTrigger] | object | only existing if type=triggered | -| fileTrigger.fileNamingPattern | string | file name with placeholders | -| fileTrigger.fileNamePatternTypeId | number | - | -| fileTrigger.folderLocationText | string | where to look for the fileNamingPattern | -| fileTrigger.isPublished | boolean | ? | -| fileTrigger.queueFiles | boolean | ? | -| fileTrigger.triggerActive | boolean | - | -| [startSource] | object | - | -| [startSource.schedule] | [AutomationSchedule](#AutomationSchedule) | rewritten to AutomationItem.schedule | -| [startSource.fileDrop] | object | rewritten to AutomationItem.fileTrigger | -| startSource.fileDrop.fileNamingPattern | string | file name with placeholders | -| startSource.fileDrop.fileNamePatternTypeId | string | - | -| startSource.fileDrop.folderLocation | string | - | -| startSource.fileDrop.queueFiles | boolean | - | -| startSource.typeId | number | - | -| steps | [Array.<AutomationStep>](#AutomationStep) | - | -| r__folder_Path | string | folder path | -| [categoryId] | string | holds folder ID, replaced with r__folder_Path during retrieve | - - - -## VerificationItem : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| dataVerificationDefinitionId | string | ID / Key | -| verificationType | 'IsEqualTo' \| 'IsLessThan' \| 'IsGreaterThan' \| 'IsOutsideRange' \| 'IsInsideRange' \| 'IsNotEqualTo' \| 'IsNotLessThan' \| 'IsNotGreaterThan' \| 'IsNotOutsideRange' \| 'IsNotInsideRange' | key | -| value1 | number | used for all verificationTypes; lower value for IsOutsideRange, IsInsideRange, IsNotOutsideRange, IsNotInsideRange | -| value2 | number | only used for IsOutsideRange, IsInsideRange, IsNotOutsideRange, IsNotInsideRange; otherwise set to 0 | -| shouldStopOnFailure | boolean | flag to stop automation if verification fails | -| shouldEmailOnFailure | boolean | flag to send email if verification fails | -| notificationEmailAddress | string | email address to send notification to; empty string if shouldEmailOnFailure=false | -| notificationEmailMessage | string | email message to send; empty string if shouldEmailOnFailure=false | -| createdBy | number | user id of creator | -| r__dataExtension_CustomerKey | string | key of target data extension | - - - -## SDK : Object.<string, AutomationItem> -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| file | string | relative path to file | -| changes | number | changed lines | -| insertions | number | added lines | -| deletions | number | deleted lines | -| binary | boolean | is a binary file | -| moved | boolean | git thinks this file was moved | -| [fromPath] | string | git thinks this relative path is where the file was before | -| type | SupportedMetadataTypes | metadata type | -| externalKey | string | key | -| name | string | name | -| gitAction | 'move' \| 'add/update' \| 'delete' | what git recognized as an action | -| _credential | string | mcdev credential name | -| _businessUnit | string | mcdev business unit name inside of _credential | - - - -## skipInteraction : object -signals what to insert automatically for things usually asked via wizard - -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| client_id | string | client id of installed package | -| client_secret | string | client secret of installed package | -| auth_url | string | tenant specific auth url of installed package | -| account_id | number | MID of the Parent Business Unit | -| credentialName | string | how you would like the credential to be named | -| gitRemoteUrl | string | URL of Git remote server | - - - -## AuthObject : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| client_id | string | client_id client_id for sfmc-sdk auth | -| client_secret | string | client_secret for sfmc-sdk auth | -| account_id | number | mid of business unit to auth against | -| auth_url | string | authentication base url | - - - -## SoapFilter : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| [continueRequest] | string | request id | -| [options] | object | additional options (CallsInConversation, Client, ConversationID, Priority, RequestType, SaveOptions, ScheduledTime, SendResponseTo, SequenceCode) | -| clientIDs | \* | ? | -| [filter] | [SoapFilter](#SoapFilter) | simple or complex complex | -| [QueryAllAccounts] | boolean | all BUs or just one | -| leftOperand | string \| [SoapFilter](#SoapFilter) | string for simple or a new filter-object for complex | -| operator | 'AND' \| 'OR' \| 'equals' \| 'notEquals' \| 'isNull' \| 'isNotNull' \| 'greaterThan' \| 'lessThan' \| 'greaterThanOrEqual' \| 'lessThanOrEqual' \| 'between' \| 'IN' \| 'like' | various options | -| [rightOperand] | string \| number \| boolean \| Array \| [SoapFilter](#SoapFilter) | string for simple or a new filter-object for complex; omit for isNull and isNotNull | - - - -## Mcdevrc : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| credentials | object | list of credentials | -| options | object | configure options for mcdev | -| directories | object | configure directories for mcdev to read/write to | -| directories.businessUnits | string | "businessUnits/" | -| directories.deploy | string | "deploy/" | -| directories.docs | string | "docs/" | -| directories.retrieve | string | "retrieve/" | -| directories.template | string | "template/" | -| directories.templateBuilds | string | ["retrieve/", "deploy/"] | -| markets | Object.<string, object> | templating variables grouped by markets | -| marketList | object | combination of markets and BUs for streamlined deployments | -| metaDataTypes | object | templating variables grouped by markets | -| metaDataTypes.retrieve | Array.<string> | define what types shall be downloaded by default during retrieve | -| metaDataTypes.documentOnRetrieve | Array.<string> | which types should be parsed & documented after retrieve | -| version | string | mcdev version that last updated the config file | - - - -## Logger : object -**Kind**: global typedef -**Properties** - -| Name | Type | Description | -| --- | --- | --- | -| info | function | (msg) print info message | -| warn | function | (msg) print warning message | -| verbose | function | (msg) additional messages that are not important | -| debug | function | (msg) print debug message | -| error | function | (msg) print error message | -| errorStack | function | (ex, msg) print error with trace message | - diff --git a/jsconfig.json b/jsconfig.json index 55b6aa9c4..2a45291e2 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -2,6 +2,7 @@ "include": ["lib/**/*.js", "types/**/*.js", "test/**/*.js"], "compilerOptions": { "module": "es6", - "target": "esnext" + "target": "es2022", + "checkJs": false } } diff --git a/lib/Builder.js b/lib/Builder.js index 2d0e382a8..e8f24562d 100644 --- a/lib/Builder.js +++ b/lib/Builder.js @@ -1,6 +1,5 @@ 'use strict'; -import TYPE from '../types/mcdev.d.js'; import { Util } from './util/util.js'; import File from './util/file.js'; import config from './util/config.js'; @@ -9,6 +8,21 @@ import auth from './util/auth.js'; import MetadataTypeInfo from './MetadataTypeInfo.js'; // @ts-ignore +/** + * @typedef {import('../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * Builds metadata from a template using market specific customisation */ @@ -16,9 +30,9 @@ class Builder { /** * Creates a Builder, uses v2 auth if v2AuthOptions are passed. * - * @param {TYPE.Mcdevrc} properties properties for auth + * @param {Mcdevrc} properties properties for auth saved - * @param {TYPE.BuObject} buObject properties for auth + * @param {BuObject} buObject properties for auth */ constructor(properties, buObject) { this.properties = properties; @@ -40,7 +54,7 @@ saved ); /** - * @type {TYPE.MultiMetadataTypeList} + * @type {MultiMetadataTypeList} */ this.metadata = {}; } @@ -50,8 +64,8 @@ saved * * @param {string} metadataType metadata type to build * @param {string} name name of metadata to build - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise */ async _buildDefinition(metadataType, name, templateVariables) { let nameArr; @@ -103,7 +117,7 @@ saved * @param {string} selectedType supported metadata type * @param {string[]} keyArr customerkey of the metadata * @param {string} market market localizations - * @returns {Promise.} - + * @returns {Promise.} - */ static async buildTemplate(businessUnit, selectedType, keyArr, market) { const properties = await config.getProperties(); @@ -132,20 +146,20 @@ saved * * @param {string} metadataType metadata type to create a template of * @param {string[]} keyArr customerkey of metadata to create a template of - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise */ async _buildTemplate(metadataType, keyArr, templateVariables) { const type = metadataType; try { - /** @type {TYPE.MetadataTypeItemObj[]} */ + /** @type {MetadataTypeItemObj[]} */ const result = await Promise.all( keyArr.map((key) => { MetadataTypeInfo[type].client = this.client; MetadataTypeInfo[type].properties = this.properties; MetadataTypeInfo[type].buObject = this.buObject; - /** @type {TYPE.MetadataTypeItemObj} */ + /** @type {MetadataTypeItemObj} */ return MetadataTypeInfo[type].buildTemplate( this.retrieveDir, this.templateDir, @@ -169,7 +183,7 @@ saved * @param {string} selectedType supported metadata type * @param {string} name name of the metadata * @param {string} market market localizations - * @returns {Promise.} - + * @returns {Promise.} - */ static async buildDefinition(businessUnit, selectedType, name, market) { const properties = await config.getProperties(); @@ -199,7 +213,7 @@ saved * @param {string} listName name of list of BU-market combos * @param {string} type supported metadata type * @param {string} name name of the metadata - * @returns {Promise.} - + * @returns {Promise.} - */ static async buildDefinitionBulk(listName, type, name) { const properties = await config.getProperties(); diff --git a/lib/Deployer.js b/lib/Deployer.js index 2f304617e..67ddab538 100644 --- a/lib/Deployer.js +++ b/lib/Deployer.js @@ -1,6 +1,5 @@ 'use strict'; -import TYPE from '../types/mcdev.d.js'; import MetadataTypeInfo from './MetadataTypeInfo.js'; import path from 'node:path'; import Cli from './util/cli.js'; @@ -10,6 +9,23 @@ import config from './util/config.js'; import cache from './util/cache.js'; import auth from './util/auth.js'; +/** + * @typedef {import('../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + */ + /** * Reads metadata from local directory and deploys it to specified target business unit. * Source and target business units are also compared before the deployment to apply metadata specific patches. @@ -18,8 +34,8 @@ class Deployer { /** * Creates a Deployer, uses v2 auth if v2AuthOptions are passed. * - * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve - * @param {TYPE.BuObject} buObject properties for auth + * @param {Mcdevrc} properties General configuration to be used in retrieve + * @param {BuObject} buObject properties for auth */ constructor(properties, buObject) { this.buObject = buObject; @@ -42,9 +58,9 @@ class Deployer { * Deploys all metadata located in the 'deploy' directory to the specified business unit * * @param {string} businessUnit references credentials from properties.json - * @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type + * @param {SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type * @param {string[]} [keyArr] limit deployment to given metadata keys - * @returns {Promise.>} deployed metadata per BU (first key: bu name, second key: metadata type) + * @returns {Promise.>} deployed metadata per BU (first key: bu name, second key: metadata type) */ static async deploy(businessUnit, selectedTypesArr, keyArr) { Util.logger.info('mcdev:: Deploy'); @@ -184,10 +200,10 @@ class Deployer { * * @param {string} cred name of Credential * @param {string} bu name of BU - * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve - * @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type + * @param {Mcdevrc} properties General configuration to be used in retrieve + * @param {SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type * @param {string[]} [keyArr] limit deployment to given metadata keys - * @returns {Promise.} ensure that BUs are worked on sequentially + * @returns {Promise.} ensure that BUs are worked on sequentially */ static async _deployBU(cred, bu, properties, typeArr, keyArr) { const buPath = `${cred}/${bu}`; @@ -211,13 +227,13 @@ class Deployer { /** * Deploy all metadata that is located in the deployDir * - * @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type (can include subtype) + * @param {SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type (can include subtype) * @param {string[]} [keyArr] limit deployment to given metadata keys - * @returns {Promise.} Promise of all deployed metadata + * @returns {Promise.} Promise of all deployed metadata */ async _deploy(typeArr, keyArr) { if (await File.pathExists(this.deployDir)) { - /** @type {TYPE.MultiMetadataTypeMap} */ + /** @type {MultiMetadataTypeMap} */ this.metadata = Deployer.readBUMetadata(this.deployDir, typeArr); // filter found metadata by key if given @@ -282,7 +298,7 @@ class Deployer { const result = await MetadataTypeInfo[type].retrieveForCache(null, subTypeArr); cache.setMetadata(type, result.metadata); } - /** @type {TYPE.MultiMetadataTypeMap} */ + /** @type {MultiMetadataTypeMap} */ const multiMetadataTypeMap = {}; // deploy metadata files, extending cache once deploys for (const metadataType in deployOrder) { @@ -313,10 +329,10 @@ class Deployer { * @param {string} deployDir root directory of metadata. * @param {string[]} [typeArr] limit deployment to given metadata type * @param {boolean} [listBadKeys] do not print errors, used for badKeys() - * @returns {TYPE.MultiMetadataTypeMap} Metadata of BU in local directory + * @returns {MultiMetadataTypeMap} Metadata of BU in local directory */ static readBUMetadata(deployDir, typeArr, listBadKeys) { - /** @type {TYPE.MultiMetadataTypeMap} */ + /** @type {MultiMetadataTypeMap} */ const buMetadata = {}; try { File.ensureDirSync(deployDir); @@ -347,8 +363,8 @@ class Deployer { * parses asset metadata to auto-create folders in target folder * * @param {string} deployDir root directory of metadata. - * @param {TYPE.MultiMetadataTypeMap} metadata list of metadata - * @param {TYPE.SupportedMetadataTypes[]} metadataTypeArr list of metadata types + * @param {MultiMetadataTypeMap} metadata list of metadata + * @param {SupportedMetadataTypes[]} metadataTypeArr list of metadata types * @returns {void} */ static async createFolderDefinitions(deployDir, metadata, metadataTypeArr) { diff --git a/lib/Retriever.js b/lib/Retriever.js index 11e54ceae..25889fb52 100644 --- a/lib/Retriever.js +++ b/lib/Retriever.js @@ -1,12 +1,30 @@ 'use strict'; -import TYPE from '../types/mcdev.d.js'; import MetadataTypeInfo from './MetadataTypeInfo.js'; import MetadataDefinitions from './MetadataTypeDefinitions.js'; import { Util } from './util/util.js'; import File from './util/file.js'; import cache from './util/cache.js'; import auth from './util/auth.js'; + +/** + * @typedef {import('../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * Retrieves metadata from a business unit and saves it to the local filesystem. */ @@ -14,8 +32,8 @@ class Retriever { /** * Creates a Retriever, uses v2 auth if v2AuthOptions are passed. * - * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve - * @param {TYPE.BuObject} buObject properties for auth + * @param {Mcdevrc} properties General configuration to be used in retrieve + * @param {BuObject} buObject properties for auth */ constructor(properties, buObject) { this.buObject = buObject; @@ -32,22 +50,22 @@ class Retriever { /** * Retrieve metadata of specified types into local file system and Retriever.metadata * - * @param {TYPE.SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes! - * @param {string[]|TYPE.TypeKeyCombo} [namesOrKeys] name of Metadata to retrieveAsTemplate or list of keys for normal retrieval - * @param {TYPE.TemplateMap} [templateVariables] Object of values which can be replaced (in case of templating) + * @param {SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes! + * @param {string[] | TypeKeyCombo} [namesOrKeys] name of Metadata to retrieveAsTemplate or list of keys for normal retrieval + * @param {TemplateMap} [templateVariables] Object of values which can be replaced (in case of templating) * @param {boolean} [changelogOnly] skip saving, only create json in memory - * @returns {Promise.} Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} + * @returns {Promise.} Promise of a list of retrieved items grouped by type {automation:[...], query:[...]} */ async retrieve(metadataTypes, namesOrKeys, templateVariables, changelogOnly) { /** - * @type {TYPE.MultiMetadataTypeList} + * @type {MultiMetadataTypeList} */ const retrieveChangelog = {}; if (!namesOrKeys || (Array.isArray(namesOrKeys) && !namesOrKeys.length)) { // no keys were provided, ensure we retrieve all namesOrKeys = [null]; } - /** @type {TYPE.TypeKeyCombo} */ + /** @type {TypeKeyCombo} */ let typeKeyMap = {}; if (Array.isArray(namesOrKeys)) { // no keys or array of keys was provided (likely called via CLI or to retrieve all) @@ -192,8 +210,8 @@ class Retriever { /** * helper for {@link Retriever.retrieve} to get all dependencies of the given types * - * @param {TYPE.SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes! - * @returns {TYPE.SupportedMetadataTypes[]} unique list dependent metadata types + * @param {SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes! + * @returns {SupportedMetadataTypes[]} unique list dependent metadata types */ _getTypeDependencies(metadataTypes) { let dependencies = []; diff --git a/lib/index.js b/lib/index.js index 22b5cd53e..ceeb4e78d 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,6 +1,5 @@ 'use strict'; -import TYPE from '../types/mcdev.d.js'; import { Util } from './util/util.js'; import auth from './util/auth.js'; import File from './util/file.js'; @@ -17,6 +16,26 @@ import MetadataTypeDefinitions from './MetadataTypeDefinitions.js'; import Retriever from './Retriever.js'; import cache from './util/cache.js'; +/** + * @typedef {import('../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../types/mcdev.d.js').SkipInteraction} SkipInteraction + * @typedef {import('../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * main class */ @@ -31,7 +50,7 @@ class Mcdev { /** * helper method to use unattended mode when including mcdev as a package * - * @param {boolean | TYPE.skipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard + * @param {boolean | SkipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard * @returns {void} */ static setSkipInteraction(skipInteraction) { @@ -99,8 +118,9 @@ class Mcdev { * @param {string} [argv.range] git commit range into deploy directory * @param {string} [argv.filter] filter file paths that start with any - * @param {TYPE.DeltaPkgItem[]} [argv.diffArr] list of files to include in delta package (skips git diff when provided) - * @returns {Promise.} list of changed items + * @param {number} [argv.commitHistory] filter file paths that start with any + * @param {DeltaPkgItem[]} [argv.diffArr] list of files to include in delta package (skips git diff when provided) + * @returns {Promise.} list of changed items */ static async createDeltaPkg(argv) { Util.startLogger(); @@ -160,7 +180,7 @@ class Mcdev { * Retrieve all metadata from the specified business unit into the local file system. * * @param {string} businessUnit references credentials from properties.json - * @param {TYPE.SupportedMetadataTypes[]|TYPE.TypeKeyCombo} [selectedTypesArr] limit retrieval to given metadata type + * @param {SupportedMetadataTypes[] | TypeKeyCombo} [selectedTypesArr] limit retrieval to given metadata type * @param {string[]} [keys] limit retrieval to given metadata key * @param {boolean} [changelogOnly] skip saving, only create json in memory * @returns {Promise.} - @@ -288,7 +308,7 @@ class Mcdev { * @private * @param {string} cred name of Credential * @param {string} bu name of BU - * @param {TYPE.SupportedMetadataTypes[]|TYPE.TypeKeyCombo} [selectedTypesArr] limit retrieval to given metadata type/subtype + * @param {SupportedMetadataTypes[] | TypeKeyCombo} [selectedTypesArr] limit retrieval to given metadata type/subtype * @param {string[]} [keys] limit retrieval to given metadata key * @param {boolean} [changelogOnly] skip saving, only create json in memory * @returns {Promise.} ensure that BUs are worked on sequentially @@ -398,9 +418,9 @@ class Mcdev { * Deploys all metadata located in the 'deploy' directory to the specified business unit * * @param {string} businessUnit references credentials from properties.json - * @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type + * @param {SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type * @param {string[]} [keyArr] limit deployment to given metadata keys - * @returns {Promise.>} deployed metadata per BU (first key: bu name, second key: metadata type) + * @returns {Promise.>} deployed metadata per BU (first key: bu name, second key: metadata type) */ static async deploy(businessUnit, selectedTypesArr, keyArr) { console.time('Time'); // eslint-disable-line no-console @@ -495,7 +515,7 @@ class Mcdev { * deletes metadata from MC instance by key * * @param {string} businessUnit references credentials from properties.json - * @param {string} type supported metadata type + * @param {SupportedMetadataTypes} type supported metadata type * @param {string} customerKey Identifier of metadata * @returns {Promise.} true if successful, false otherwise */ @@ -533,7 +553,7 @@ class Mcdev { * get name & key for provided id * * @param {string} businessUnit references credentials from properties.json - * @param {string} type supported metadata type + * @param {SupportedMetadataTypes} type supported metadata type * @param {string} id Identifier of metadata * @returns {Promise.<{key:string, name:string, path:string}>} key, name and path of metadata; null if not found */ @@ -576,7 +596,7 @@ class Mcdev { * ensures triggered sends are restarted to ensure they pick up on changes of the underlying emails * * @param {string} businessUnit references credentials from properties.json - * @param {string} type references credentials from properties.json + * @param {SupportedMetadataTypes} type references credentials from properties.json * @param {string[]} [keyArr] metadata keys * @returns {Promise.} - */ @@ -685,10 +705,10 @@ class Mcdev { * Retrieve a specific metadata file and templatise. * * @param {string} businessUnit references credentials from properties.json - * @param {string} selectedType supported metadata type + * @param {SupportedMetadataTypes} selectedType supported metadata type * @param {string[]} name name of the metadata * @param {string} market market which should be used to revert template - * @returns {Promise.} - + * @returns {Promise.} - */ static async retrieveAsTemplate(businessUnit, selectedType, name, market) { Util.startLogger(); @@ -730,7 +750,7 @@ class Mcdev { * @param {string} selectedType supported metadata type * @param {string[]} keyArr customerkey of the metadata * @param {string} market market localizations - * @returns {Promise.} - + * @returns {Promise.} - */ static async buildTemplate(businessUnit, selectedType, keyArr, market) { Util.startLogger(); @@ -744,7 +764,7 @@ class Mcdev { * @param {string} selectedType supported metadata type * @param {string} name name of the metadata * @param {string} market market localizations - * @returns {Promise.} - + * @returns {Promise.} - */ static async buildDefinition(businessUnit, selectedType, name, market) { Util.startLogger(); @@ -797,7 +817,7 @@ class Mcdev { * Schedule an item (shortcut for execute --schedule) * * @param {string} businessUnit name of BU - * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {SupportedMetadataTypes} [selectedType] limit to given metadata types * @param {string[]} [keys] customerkey of the metadata * @returns {Promise.>} key: business unit name, value: list of scheduled item keys */ @@ -809,7 +829,7 @@ class Mcdev { * Start/execute an item * * @param {string} businessUnit name of BU - * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {SupportedMetadataTypes} [selectedType] limit to given metadata types * @param {string[]} [keys] customerkey of the metadata * @returns {Promise.>} key: business unit name, value: list of executed item keys */ @@ -820,7 +840,7 @@ class Mcdev { * pause an item * * @param {string} businessUnit name of BU - * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {SupportedMetadataTypes} [selectedType] limit to given metadata types * @param {string[]} [keys] customerkey of the metadata * @returns {Promise.>} key: business unit name, value: list of paused item keys */ @@ -831,7 +851,7 @@ class Mcdev { * Updates the key to match the name field * * @param {string} businessUnit name of BU - * @param {TYPE.SupportedMetadataTypes} selectedType limit to given metadata types + * @param {SupportedMetadataTypes} selectedType limit to given metadata types * @param {string[]} [keys] customerkey of the metadata * @returns {Promise.>} key: business unit name, value: list of paused item keys */ @@ -843,7 +863,7 @@ class Mcdev { * * @param {'execute'|'pause'|'fixKeys'} methodName what to run * @param {string} businessUnit name of BU - * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {SupportedMetadataTypes} [selectedType] limit to given metadata types * @param {string[]} [keys] customerkey of the metadata * @returns {Promise.>} key: business unit name, value: list of affected item keys */ @@ -1007,7 +1027,7 @@ class Mcdev { * @param {'execute'|'pause'|'fixKeys'} methodName what to run * @param {string} cred name of Credential * @param {string} bu name of BU - * @param {TYPE.SupportedMetadataTypes} [type] limit execution to given metadata type + * @param {SupportedMetadataTypes} [type] limit execution to given metadata type * @param {string[]} keyArr customerkey of the metadata * @returns {Promise.} list of keys that were affected */ @@ -1062,8 +1082,8 @@ class Mcdev { /** * helper for {@link Mcdev.#runOnBU} * - * @param {TYPE.SupportedMetadataTypes} selectedType limit execution to given metadata type - * @param {TYPE.BuObject} buObject properties for auth + * @param {SupportedMetadataTypes} selectedType limit execution to given metadata type + * @param {BuObject} buObject properties for auth * @returns {string[]} keyArr */ static async #retrieveKeysWithLike(selectedType, buObject) { @@ -1128,7 +1148,7 @@ class Mcdev { * * @param {string} cred name of Credential * @param {string} bu name of BU - * @param {TYPE.SupportedMetadataTypes} type limit execution to given metadata type + * @param {SupportedMetadataTypes} type limit execution to given metadata type * @param {string[]} [keyArr] customerkey of the metadata * @returns {Promise.} list of keys that were affected */ diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index 210c63800..b7273831d 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -1,7 +1,6 @@ 'use strict'; import MetadataType from './MetadataType.js'; -import TYPE from '../../types/mcdev.d.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import pLimit from 'p-limit'; @@ -9,6 +8,22 @@ import cliProgress from 'cli-progress'; import cache from '../util/cache.js'; import TriggeredSend from './TriggeredSend.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ +/** + * @typedef {import('../../types/mcdev.d.js').AssetSubType} AssetSubType + * @typedef {import('../../types/mcdev.d.js').AssetMap} AssetMap + * @typedef {import('../../types/mcdev.d.js').AssetItem} AssetItem + */ + /** * FileTransfer MetadataType * @@ -20,9 +35,9 @@ class Asset extends MetadataType { * * @param {string} retrieveDir Directory where retrieved metadata directory will be saved * @param {void} _ - - * @param {TYPE.AssetSubType[]} [subTypeArr] optionally limit to a single subtype + * @param {AssetSubType[]} [subTypeArr] optionally limit to a single subtype * @param {string} [key] customer key - * @returns {Promise.<{metadata: TYPE.AssetMap, type: string}>} Promise + * @returns {Promise.<{metadata: AssetMap, type: string}>} Promise */ static async retrieve(retrieveDir, _, subTypeArr, key) { const items = []; @@ -51,7 +66,7 @@ class Asset extends MetadataType { * * @param {void} [_] parameter not used * @param {string[]} [subTypeArr] optionally limit to a single subtype - * @returns {Promise.<{metadata: TYPE.AssetMap, type: string}>} Promise + * @returns {Promise.<{metadata: AssetMap, type: string}>} Promise */ static retrieveForCache(_, subTypeArr) { return this.retrieve(null, null, subTypeArr); @@ -62,9 +77,9 @@ class Asset extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @param {TYPE.AssetSubType} [selectedSubType] optionally limit to a single subtype - * @returns {Promise.<{metadata: TYPE.AssetItem, type: string}>} Promise + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @param {AssetSubType} [selectedSubType] optionally limit to a single subtype + * @returns {Promise.<{metadata: AssetItem, type: string}>} Promise */ static async retrieveAsTemplate(templateDir, name, templateVariables, selectedSubType) { const items = []; @@ -90,7 +105,7 @@ class Asset extends MetadataType { * helper for {@link Asset.retrieve} + {@link Asset.retrieveAsTemplate} * * @private - * @returns {TYPE.AssetSubType[]} subtype array + * @returns {AssetSubType[]} subtype array */ static _getSubTypes() { const selectedSubTypeArr = this.properties.metaDataTypes.retrieve.filter((type) => @@ -112,7 +127,7 @@ class Asset extends MetadataType { /** * Creates a single asset * - * @param {TYPE.AssetItem} metadata a single asset + * @param {AssetItem} metadata a single asset * @returns {Promise} Promise */ static create(metadata) { @@ -124,7 +139,7 @@ class Asset extends MetadataType { /** * Updates a single asset * - * @param {TYPE.AssetItem} metadata a single asset + * @param {AssetItem} metadata a single asset * @returns {Promise} Promise */ static update(metadata) { @@ -134,10 +149,10 @@ class Asset extends MetadataType { /** * Retrieves Metadata of a specific asset type * - * @param {TYPE.AssetSubType} subType group of similar assets to put in a folder (ie. images) + * @param {AssetSubType} subType group of similar assets to put in a folder (ie. images) * @param {string} [retrieveDir] target directory for saving assets * @param {string} [templateName] name of the metadata file - * @param {TYPE.TemplateMap} [templateVariables] variables to be replaced in the metadata + * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata * @param {string} key customer key to filter by * @returns {Promise} Promise */ @@ -147,7 +162,7 @@ class Asset extends MetadataType { } else { Util.logger.info(` - Caching Subtype: ${subType}`); } - /** @type {TYPE.AssetSubType[]} */ + /** @type {AssetSubType[]} */ const extendedSubTypeArr = this.definition.extendedSubTypes[subType]; const subtypeIds = extendedSubTypeArr?.map( (subTypeItemName) => Asset.definition.typeMapping[subTypeItemName] @@ -278,9 +293,9 @@ class Asset extends MetadataType { * Retrieves extended metadata (files or extended content) of asset * * @param {Array} items array of items to retrieve - * @param {TYPE.AssetSubType} subType group of similar assets to put in a folder (ie. images) + * @param {AssetSubType} subType group of similar assets to put in a folder (ie. images) * @param {string} retrieveDir target directory for saving assets - * @param {TYPE.TemplateMap} [templateVariables] variables to be replaced in the metadata + * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata * @returns {Promise} Promise */ static async requestAndSaveExtended(items, subType, retrieveDir, templateVariables) { @@ -428,8 +443,8 @@ class Asset extends MetadataType { * Some metadata types store their actual content as a separate file, e.g. images * This method retrieves these and saves them alongside the metadata json * - * @param {TYPE.AssetItem} metadata a single asset - * @param {TYPE.AssetSubType} subType group of similar assets to put in a folder (ie. images) + * @param {AssetItem} metadata a single asset + * @param {AssetSubType} subType group of similar assets to put in a folder (ie. images) * @param {string} retrieveDir target directory for saving assets * @returns {Promise.} - */ @@ -453,8 +468,8 @@ class Asset extends MetadataType { * Some metadata types store their actual content as a separate file, e.g. images * This method reads these from the local FS stores them in the metadata object allowing to deploy it * - * @param {TYPE.AssetItem} metadata a single asset - * @param {TYPE.AssetSubType} subType group of similar assets to put in a folder (ie. images) + * @param {AssetItem} metadata a single asset + * @param {AssetSubType} subType group of similar assets to put in a folder (ie. images) * @param {string} deployDir directory of deploy files * @param {boolean} [pathOnly] used by getFilesToCommit which does not need the binary file to be actually read * @returns {Promise.} if found will return the path of the binary file @@ -488,8 +503,8 @@ class Asset extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.AssetItem} metadata a single asset - * @returns {TYPE.CodeExtractItem} metadata + * @param {AssetItem} metadata a single asset + * @returns {CodeExtractItem} metadata */ static postRetrieveTasks(metadata) { // folder @@ -502,8 +517,8 @@ class Asset extends MetadataType { /** * Gets executed after deployment of metadata type * - * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField - * @param {TYPE.MetadataTypeMap} _ originalMetadata to be updated (contains additioanl fields) + * @param {MetadataTypeMap} metadata metadata mapped by their keyField + * @param {MetadataTypeMap} _ originalMetadata to be updated (contains additioanl fields) * @param {{created: number, updated: number}} createdUpdated counter representing successful creates/updates * @returns {Promise.} - */ @@ -524,7 +539,7 @@ class Asset extends MetadataType { * helper for {@link Asset.postDeployTasks}. triggers a refresh of active triggerredSendDefinitions associated with the updated asset-message items. Gets executed if refresh option has been set. * * @private - * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField + * @param {MetadataTypeMap} metadata metadata mapped by their keyField * @returns {Promise.} - */ static async _refreshTriggeredSend(metadata) { @@ -572,9 +587,9 @@ class Asset extends MetadataType { /** * prepares an asset definition for deployment * - * @param {TYPE.AssetItem} metadata a single asset + * @param {AssetItem} metadata a single asset * @param {string} deployDir directory of deploy files - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async preDeployTasks(metadata, deployDir) { // additonalattributes fail where the value is "" so we need to remove them from deploy @@ -672,8 +687,8 @@ class Asset extends MetadataType { * determines the subtype of the current asset * * @private - * @param {TYPE.AssetItem} metadata a single asset - * @returns {TYPE.AssetSubType | void} subtype + * @param {AssetItem} metadata a single asset + * @returns {AssetSubType | void} subtype */ static _getSubtype(metadata) { for (const sub in this.definition.extendedSubTypes) { @@ -688,8 +703,8 @@ class Asset extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string} targetDir Directory where built definitions will be saved - * @param {TYPE.AssetItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {AssetItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} - */ @@ -716,8 +731,8 @@ class Asset extends MetadataType { * @example assets of type codesnippetblock will result in 1 json and 1 amp/html file. both files need to be run through templating * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.AssetItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {AssetItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} - */ @@ -744,8 +759,8 @@ class Asset extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string} targetDir Directory where built definitions will be saved - * @param {TYPE.AssetItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {AssetItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @param {'definition'|'template'} mode defines what we use this helper for * @returns {Promise.} - @@ -834,7 +849,7 @@ class Asset extends MetadataType { /** * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve * - * @param {TYPE.MetadataTypeItem} metadata a single script activity definition + * @param {MetadataTypeItem} metadata a single script activity definition */ static setFolderPath(metadata) { try { @@ -856,7 +871,7 @@ class Asset extends MetadataType { /** * Asset-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item */ static setFolderId(metadata) { metadata.category = { @@ -868,12 +883,12 @@ class Asset extends MetadataType { /** * helper for {@link Asset.preDeployTasks} that loads extracted code content back into JSON * - * @param {TYPE.AssetItem} metadata a single asset definition + * @param {AssetItem} metadata a single asset definition * @param {string} deployDir directory of deploy files - * @param {TYPE.AssetSubType} subType asset-subtype name + * @param {AssetSubType} subType asset-subtype name * @param {string} [templateName] name of the template used to built defintion (prior applying templating) * @param {boolean} [fileListOnly] does not read file contents nor update metadata if true - * @returns {Promise.} fileList for templating (disregarded during deployment) + * @returns {Promise.} fileList for templating (disregarded during deployment) */ static async _mergeCode(metadata, deployDir, subType, templateName, fileListOnly = false) { const subtypeExtension = `.${this.definition.type}-${subType}-meta`; @@ -1233,8 +1248,8 @@ class Asset extends MetadataType { * helper for {@link Asset.postRetrieveTasks} that finds code content in JSON and extracts it * to allow saving that separately and formatted * - * @param {TYPE.AssetItem} metadata a single asset definition - * @returns {TYPE.CodeExtractItem} { json: metadata, codeArr: object[], subFolder: string[] } + * @param {AssetItem} metadata a single asset definition + * @returns {CodeExtractItem} { json: metadata, codeArr: object[], subFolder: string[] } */ static _extractCode(metadata) { const codeArr = []; @@ -1431,7 +1446,7 @@ class Asset extends MetadataType { * @param {string} dir directory that contains '.json' files to be read * @param {void} [_] unused parameter * @param {string[]} selectedSubType asset, message, ... - * @returns {TYPE.MetadataTypeMap} fileName => fileContent map + * @returns {MetadataTypeMap} fileName => fileContent map */ static getJsonFromFS(dir, _, selectedSubType) { const fileName2FileContent = {}; @@ -1499,7 +1514,7 @@ class Asset extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string} templateName name of the metadata file - * @returns {Promise.} subtype name + * @returns {Promise.} subtype name */ static async findSubType(templateDir, templateName) { const typeDirArr = [this.definition.type]; @@ -1535,7 +1550,7 @@ class Asset extends MetadataType { * @param {string[]} typeDirArr current subdir for this type * @param {string} templateName name of the metadata template * @param {string} fileName name of the metadata template file w/o extension - * @returns {TYPE.AssetItem} metadata + * @returns {AssetItem} metadata */ static async readSecondaryFolder(templateDir, typeDirArr, templateName, fileName) { // handles subtypes that create 1 folder per asset -> currently causes the below File.ReadFile to error out diff --git a/lib/metadataTypes/AttributeGroup.js b/lib/metadataTypes/AttributeGroup.js index bf17d44c7..0f18ac5d0 100644 --- a/lib/metadataTypes/AttributeGroup.js +++ b/lib/metadataTypes/AttributeGroup.js @@ -1,10 +1,14 @@ 'use strict'; import MetadataType from './MetadataType.js'; -import TYPE from '../../types/mcdev.d.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + */ + /** * AttributeGroup MetadataType * @@ -18,7 +22,7 @@ class AttributeGroup extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieve(retrieveDir, _, __, key) { return super.retrieveREST( @@ -31,7 +35,7 @@ class AttributeGroup extends MetadataType { /** * Retrieves Metadata of schema attribute groups for caching. * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache() { return super.retrieveREST(null, '/hub/v1/contacts/schema/attributeGroups'); @@ -40,8 +44,8 @@ class AttributeGroup extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single metadata - * @returns {TYPE.MetadataTypeItem} metadata + * @param {MetadataTypeItem} metadata a single metadata + * @returns {MetadataTypeItem} metadata */ static postRetrieveTasks(metadata) { // Member ID @@ -105,8 +109,8 @@ class AttributeGroup extends MetadataType { /** * prepares for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} Promise + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} Promise */ } diff --git a/lib/metadataTypes/AttributeSet.js b/lib/metadataTypes/AttributeSet.js index edd131c92..981afa9b3 100644 --- a/lib/metadataTypes/AttributeSet.js +++ b/lib/metadataTypes/AttributeSet.js @@ -2,10 +2,15 @@ import AttributeGroup from './AttributeGroup.js'; import MetadataType from './MetadataType.js'; -import TYPE from '../../types/mcdev.d.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + */ + /** * AttributeSet MetadataType * @@ -19,7 +24,7 @@ class AttributeSet extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { if (retrieveDir && !cache.getCache()?.attributeGroup) { @@ -36,7 +41,7 @@ class AttributeSet extends MetadataType { /** * Retrieves Metadata of schema set definitions for caching. * - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static retrieveForCache() { return super.retrieveREST(null, '/hub/v1/contacts/schema/setDefinitions'); @@ -151,7 +156,7 @@ class AttributeSet extends MetadataType { * * @param {object} body json of response body * @param {string|number} [singleRetrieve] key of single item to filter by - * @returns {TYPE.MetadataTypeMap} keyField => metadata map + * @returns {MetadataTypeMap} keyField => metadata map */ static parseResponseBody(body, singleRetrieve) { const metadataCache = super.parseResponseBody(body); @@ -167,8 +172,8 @@ class AttributeSet extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single metadata - * @returns {TYPE.MetadataTypeItem} metadata + * @param {MetadataTypeItem} metadata a single metadata + * @returns {MetadataTypeItem} metadata */ static postRetrieveTasks(metadata) { // folder diff --git a/lib/metadataTypes/Automation.js b/lib/metadataTypes/Automation.js index 8c33bcee6..01566314a 100644 --- a/lib/metadataTypes/Automation.js +++ b/lib/metadataTypes/Automation.js @@ -1,13 +1,33 @@ 'use strict'; import MetadataType from './MetadataType.js'; -import TYPE from '../../types/mcdev.d.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import Definitions from '../MetadataTypeDefinitions.js'; import cache from '../util/cache.js'; import pLimit from 'p-limit'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ +/** + * @typedef {import('../../types/mcdev.d.js').AutomationItem} AutomationItem + * @typedef {import('../../types/mcdev.d.js').AutomationItemObj} AutomationItemObj + * @typedef {import('../../types/mcdev.d.js').AutomationMap} AutomationMap + * @typedef {import('../../types/mcdev.d.js').AutomationMapObj} AutomationMapObj + * @typedef {import('../../types/mcdev.d.js').AutomationSchedule} AutomationSchedule + * @typedef {import('../../types/mcdev.d.js').AutomationScheduleSoap} AutomationScheduleSoap + */ + /** * Automation MetadataType * @@ -22,7 +42,7 @@ class Automation extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieve(retrieveDir, _, __, key) { let metadataMap; @@ -34,7 +54,7 @@ class Automation extends MetadataType { metadataMap = this._cachedMetadataMap; delete this._cachedMetadataMap; } else { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = null; if (key) { requestParams = { @@ -108,7 +128,7 @@ class Automation extends MetadataType { * helper for {@link Automation.retrieve} to get Automation Notifications * * @private - * @param {TYPE.MetadataTypeMap} metadataMap keyField => metadata map + * @param {MetadataTypeMap} metadataMap keyField => metadata map * @returns {Promise.} Promise of nothing */ static async #getAutomationNotificationsREST(metadataMap) { @@ -185,7 +205,7 @@ class Automation extends MetadataType { /** * Retrieves Metadata of Automation * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieveChangelog() { const results = await this.client.soap.retrieveBulk('Program', ['ObjectID']); @@ -230,7 +250,7 @@ class Automation extends MetadataType { /** * Retrieves automation metadata for caching * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieveForCache() { let results = {}; @@ -279,8 +299,8 @@ class Automation extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise of metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise of metadata */ static async retrieveAsTemplate(templateDir, name, templateVariables) { const results = await this.client.soap.retrieve('Program', ['ObjectID', 'Name'], { @@ -346,7 +366,7 @@ class Automation extends MetadataType { /** * helper for {@link Automation.postRetrieveTasks} and {@link Automation.execute} * - * @param {TYPE.AutomationItem} metadata a single automation + * @param {AutomationItem} metadata a single automation * @returns {boolean} true if the automation schedule is valid */ static #isValidSchedule(metadata) { @@ -369,8 +389,8 @@ class Automation extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.AutomationItem} metadata a single automation - * @returns {TYPE.AutomationItem | void} parsed item + * @param {AutomationItem} metadata a single automation + * @returns {AutomationItem | void} parsed item */ static postRetrieveTasks(metadata) { // folder @@ -558,7 +578,7 @@ class Automation extends MetadataType { /** * helper for {@link Automation.execute} * - * @param {TYPE.AutomationMap} metadataMap map of metadata + * @param {AutomationMap} metadataMap map of metadata * @param {string} key key of the metadata * @returns {Promise.<{key:string, response:object}>} metadata key and API response */ @@ -575,7 +595,7 @@ class Automation extends MetadataType { /** * helper for {@link Automation.execute} * - * @param {TYPE.AutomationItem} metadataEntry metadata object + * @param {AutomationItem} metadataEntry metadata object * @returns {Promise.<{key:string, response:object}>} metadata key and API response */ static async #runOnce(metadataEntry) { @@ -656,7 +676,7 @@ class Automation extends MetadataType { /** * helper for {@link Automation.pause} * - * @param {TYPE.AutomationItem} metadata automation metadata + * @param {AutomationItem} metadata automation metadata * @returns {Promise.<{key:string, response:object}>} metadata key and API response */ static async #pauseItem(metadata) { @@ -688,10 +708,10 @@ class Automation extends MetadataType { /** * Deploys automation - the saved file is the original one due to large differences required for deployment * - * @param {TYPE.AutomationMap} metadata metadata mapped by their keyField + * @param {AutomationMap} metadata metadata mapped by their keyField * @param {string} targetBU name/shorthand of target businessUnit for mapping * @param {string} retrieveDir directory where metadata after deploy should be saved - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async deploy(metadata, targetBU, retrieveDir) { const upsertResults = await this.upsert(metadata, targetBU); @@ -710,7 +730,7 @@ class Automation extends MetadataType { /** * Creates a single automation * - * @param {TYPE.AutomationItem} metadata single metadata entry + * @param {AutomationItem} metadata single metadata entry * @returns {Promise} Promise */ static create(metadata) { @@ -721,8 +741,8 @@ class Automation extends MetadataType { /** * Updates a single automation * - * @param {TYPE.AutomationItem} metadata single metadata entry - * @param {TYPE.AutomationItem} metadataBefore metadata mapped by their keyField + * @param {AutomationItem} metadata single metadata entry + * @param {AutomationItem} metadataBefore metadata mapped by their keyField * @returns {Promise} Promise */ static update(metadata, metadataBefore) { @@ -743,7 +763,7 @@ class Automation extends MetadataType { /** * helper for {@link Automation.preDeployTasks} and {@link Automation.execute} * - * @param {TYPE.AutomationItem} metadata metadata mapped by their keyField + * @param {AutomationItem} metadata metadata mapped by their keyField */ static #preDeploySchedule(metadata) { delete metadata.schedule.rangeTypeId; @@ -770,8 +790,8 @@ class Automation extends MetadataType { /** * Gets executed before deploying metadata * - * @param {TYPE.AutomationItem} metadata metadata mapped by their keyField - * @returns {Promise.} Promise + * @param {AutomationItem} metadata metadata mapped by their keyField + * @returns {Promise.} Promise */ static async preDeployTasks(metadata) { if (metadata.notifications) { @@ -869,7 +889,7 @@ class Automation extends MetadataType { * Validates the automation to be sure it can be deployed. * Whitelisted Activites are deployed but require configuration * - * @param {TYPE.AutomationItem} metadata single automation record + * @param {AutomationItem} metadata single automation record * @returns {boolean} result if automation can be deployed based on steps */ static validateDeployMetadata(metadata) { @@ -915,7 +935,7 @@ class Automation extends MetadataType { * helper for {@link MetadataType.updateREST} and {@link MetadataType.updateSOAP} that removes old files after the key was changed * * @private - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @returns {void} */ static async _postChangeKeyTasks(metadataEntry) { @@ -925,8 +945,8 @@ class Automation extends MetadataType { /** * Gets executed after deployment of metadata type * - * @param {TYPE.AutomationMap} metadataMap metadata mapped by their keyField - * @param {TYPE.AutomationMap} originalMetadataMap metadata to be updated (contains additioanl fields) + * @param {AutomationMap} metadataMap metadata mapped by their keyField + * @param {AutomationMap} originalMetadataMap metadata to be updated (contains additioanl fields) * @returns {Promise.} - */ static async postDeployTasks(metadataMap, originalMetadataMap) { @@ -982,7 +1002,7 @@ class Automation extends MetadataType { /** * helper for {@link Automation.postDeployTasks} * - * @param {TYPE.AutomationMap} metadataMap metadata mapped by their keyField + * @param {AutomationMap} metadataMap metadata mapped by their keyField * @param {string} key current customer key * @returns {Promise.} - */ @@ -1029,8 +1049,8 @@ class Automation extends MetadataType { /** * helper for {@link Automation.postDeployTasks} * - * @param {TYPE.AutomationMap} metadataMap metadata mapped by their keyField - * @param {TYPE.AutomationMap} originalMetadataMap metadata to be updated (contains additioanl fields) + * @param {AutomationMap} metadataMap metadata mapped by their keyField + * @param {AutomationMap} originalMetadataMap metadata to be updated (contains additioanl fields) * @param {string} key current customer key * @param {string} [oldKey] old customer key before fixKey / changeKeyValue / changeKeyField * @returns {Promise.<{key:string, response:object}>} metadata key and API response @@ -1113,7 +1133,7 @@ class Automation extends MetadataType { /** * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve * - * @param {TYPE.MetadataTypeItem} metadata a single script activity definition + * @param {MetadataTypeItem} metadata a single script activity definition */ static setFolderPath(metadata) { const folderIdField = metadata[this.definition.folderIdField] @@ -1148,7 +1168,7 @@ class Automation extends MetadataType { /** * automation-specific script that retrieves the folder ID from cache and updates the given metadata with it before deploy * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item */ static setFolderId(metadata) { try { @@ -1179,12 +1199,12 @@ class Automation extends MetadataType { * Builds a schedule object to be used for scheduling an automation * based on combination of ical string and start/end dates. * - * @param {TYPE.AutomationSchedule} scheduleObject child of automation metadata used for scheduling - * @returns {TYPE.AutomationScheduleSoap} Schedulable object for soap API (currently not rest supported) + * @param {AutomationSchedule} scheduleObject child of automation metadata used for scheduling + * @returns {AutomationScheduleSoap} Schedulable object for soap API (currently not rest supported) */ static _buildSchedule(scheduleObject) { /** - * @type {TYPE.AutomationScheduleSoap} + * @type {AutomationScheduleSoap} */ const schedule = { Recurrence: {}, TimeZone: { IDSpecified: true } }; // build recurrence @@ -1339,7 +1359,7 @@ class Automation extends MetadataType { * The json's first level of keys must represent the rows and the secend level the columns * * @private - * @param {TYPE.AutomationItem} json dataextension + * @param {AutomationItem} json dataextension * @param {object[][]} tabled prepped array for output in tabular format * @returns {string} file content */ @@ -1455,7 +1475,7 @@ class Automation extends MetadataType { * @private * @param {string} directory directory the file will be written to * @param {string} filename name of the file without '.json' ending - * @param {TYPE.AutomationItem} json dataextension.columns + * @param {AutomationItem} json dataextension.columns * @param {'html'|'md'} mode html or md * @returns {Promise.} Promise of success of saving the file */ @@ -1504,7 +1524,7 @@ class Automation extends MetadataType { /** * Parses metadata into a readable Markdown/HTML format then saves it * - * @param {TYPE.AutomationMap} [metadata] a list of dataExtension definitions + * @param {AutomationMap} [metadata] a list of dataExtension definitions * @returns {Promise.} - */ static async document(metadata) { diff --git a/lib/metadataTypes/Campaign.js b/lib/metadataTypes/Campaign.js index 00032f1d7..b589489f3 100644 --- a/lib/metadataTypes/Campaign.js +++ b/lib/metadataTypes/Campaign.js @@ -1,10 +1,22 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * Campaign MetadataType * @@ -18,7 +30,7 @@ class Campaign extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { const res = await super.retrieveREST( @@ -43,7 +55,7 @@ class Campaign extends MetadataType { /** * Retrieves event definition metadata for caching * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache() { return super.retrieveREST(null, '/legacy/v1/beta2/data/campaign/'); @@ -55,7 +67,7 @@ class Campaign extends MetadataType { * @param {string} retrieveDir folder where to save * @param {string} campaignId of camapaign to retrieve * @param {string} name of camapaign for saving - * @returns {Promise.} Campaign Asset Object + * @returns {Promise.} Campaign Asset Object */ static async getAssetTags(retrieveDir, campaignId, name) { const res = await this.client.rest.getBulk(`/hub/v1/campaigns/${campaignId}/assets`); diff --git a/lib/metadataTypes/ContentArea.js b/lib/metadataTypes/ContentArea.js index f9d18edb7..8f4ff2363 100644 --- a/lib/metadataTypes/ContentArea.js +++ b/lib/metadataTypes/ContentArea.js @@ -1,10 +1,22 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * ContentArea MetadataType * @@ -18,13 +30,13 @@ class ContentArea extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { Util.logger.warn( ' - Classic Content Areas are deprecated and will be discontinued by SFMC in the near future. Ensure that you migrate any existing Content Areas to Content Builder as soon as possible.' ); - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = null; if (key) { requestParams = { @@ -41,7 +53,7 @@ class ContentArea extends MetadataType { /** * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve * - * @param {TYPE.MetadataTypeItem} metadata a single script activity definition + * @param {MetadataTypeItem} metadata a single script activity definition */ static setFolderPath(metadata) { try { @@ -67,8 +79,8 @@ class ContentArea extends MetadataType { /** * parses retrieved Metadata before saving * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} parsed item + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} parsed item */ static postRetrieveTasks(metadata) { // folder diff --git a/lib/metadataTypes/DataExtension.js b/lib/metadataTypes/DataExtension.js index 95e2771af..ae80de4fe 100644 --- a/lib/metadataTypes/DataExtension.js +++ b/lib/metadataTypes/DataExtension.js @@ -1,7 +1,6 @@ 'use strict'; import jsonToTable from 'json-to-table'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import AttributeSet from './AttributeSet.js'; import DataExtensionField from './DataExtensionField.js'; @@ -13,6 +12,21 @@ import cache from '../util/cache.js'; import pLimit from 'p-limit'; import inquirer from 'inquirer'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ +/** + * @typedef {import('../../types/mcdev.d.js').DataExtensionFieldItem} DataExtensionFieldItem + * @typedef {import('../../types/mcdev.d.js').DataExtensionFieldMap} DataExtensionFieldMap + * @typedef {import('../../types/mcdev.d.js').DataExtensionItem} DataExtensionItem + * @typedef {import('../../types/mcdev.d.js').DataExtensionMap} DataExtensionMap + */ + /** * DataExtension MetadataType * @@ -23,7 +37,7 @@ class DataExtension extends MetadataType { * Upserts dataExtensions after retrieving them from source and target to compare * if create or update operation is needed. * - * @param {TYPE.DataExtensionMap} metadataMap dataExtensions mapped by their customerKey + * @param {DataExtensionMap} metadataMap dataExtensions mapped by their customerKey * @returns {Promise} Promise */ static async upsert(metadataMap) { @@ -128,11 +142,11 @@ class DataExtension extends MetadataType { /** * helper for {@link MetadataType.upsert} * - * @param {TYPE.MetadataTypeMap} metadataMap list of metadata + * @param {MetadataTypeMap} metadataMap list of metadata * @param {string} metadataKey key of item we are looking at * @param {boolean} hasError error flag from previous code - * @param {TYPE.MetadataTypeItemDiff[]} metadataToUpdate list of items to update - * @param {TYPE.MetadataTypeItem[]} metadataToCreate list of items to create + * @param {MetadataTypeItemDiff[]} metadataToUpdate list of items to update + * @param {MetadataTypeItem[]} metadataToCreate list of items to create * @returns {'create' | 'update' | 'skip'} action to take */ static async createOrUpdate( @@ -230,7 +244,7 @@ class DataExtension extends MetadataType { /** * Create a single dataExtension. Also creates their columns in 'dataExtension.columns' * - * @param {TYPE.DataExtensionItem} metadata single metadata entry + * @param {DataExtensionItem} metadata single metadata entry * @returns {Promise} Promise */ static async create(metadata) { @@ -243,7 +257,7 @@ class DataExtension extends MetadataType { * during deployment, that extra value is not accepted by the APIs which is why it needs to be removed * * @private - * @param {TYPE.DataExtensionItem} metadata single metadata entry + * @param {DataExtensionItem} metadata single metadata entry * @returns {void} */ static #cleanupRetentionPolicyFields(metadata) { @@ -261,7 +275,7 @@ class DataExtension extends MetadataType { /** * Updates a single dataExtension. Also updates their columns in 'dataExtension.columns' * - * @param {TYPE.DataExtensionItem} metadata single metadata entry + * @param {DataExtensionItem} metadata single metadata entry * @returns {Promise} Promise */ static async update(metadata) { @@ -270,8 +284,8 @@ class DataExtension extends MetadataType { /** * Gets executed after deployment of metadata type * - * @param {TYPE.DataExtensionMap} upsertedMetadata metadata mapped by their keyField - * @param {TYPE.DataExtensionMap} originalMetadata metadata to be updated (contains additioanl fields) + * @param {DataExtensionMap} upsertedMetadata metadata mapped by their keyField + * @param {DataExtensionMap} originalMetadata metadata to be updated (contains additioanl fields) * @param {{created: number, updated: number}} createdUpdated counter representing successful creates/updates * @returns {void} */ @@ -303,15 +317,15 @@ class DataExtension extends MetadataType { .sort((a, b) => a.Ordinal - b.Ordinal); } else if (existingFields) { // get list of updated fields - /** @type {TYPE.DataExtensionFieldItem[]} */ + /** @type {DataExtensionFieldItem[]} */ const updatedFieldsArr = originalMetadata[oldKey].Fields.Field.filter( (field) => field.ObjectID && field.ObjectID !== '' ); // convert existing fields obj into array and sort - /** @type {TYPE.DataExtensionFieldItem[]} */ + /** @type {DataExtensionFieldItem[]} */ const finalFieldsArr = Object.keys(existingFields) .map((el) => { - /** @type {TYPE.DataExtensionFieldItem} */ + /** @type {DataExtensionFieldItem} */ const existingField = existingFields[el]; // check if the current field was updated and then override with it. otherwise use existing value const field = @@ -327,7 +341,7 @@ class DataExtension extends MetadataType { .sort((a, b) => a.Ordinal - b.Ordinal); // get list of new fields - /** @type {TYPE.DataExtensionFieldItem[]} */ + /** @type {DataExtensionFieldItem[]} */ const newFieldsArr = originalMetadata[oldKey].Fields.Field.filter( (field) => !field.ObjectID ); @@ -354,8 +368,8 @@ class DataExtension extends MetadataType { * helper for {@link DataExtension.postDeployTasks} * fixes an issue where shared data extensions are not visible in data designer on child BU; SF known issue: https://issues.salesforce.com/#q=W-11031095 * - * @param {TYPE.DataExtensionMap} upsertedMetadata metadata mapped by their keyField - * @param {TYPE.DataExtensionMap} originalMetadata metadata to be updated (contains additioanl fields) + * @param {DataExtensionMap} upsertedMetadata metadata mapped by their keyField + * @param {DataExtensionMap} originalMetadata metadata to be updated (contains additioanl fields) * @param {{created: number, updated: number}} createdUpdated counter representing successful creates/updates * @returns {void} */ @@ -488,7 +502,7 @@ class DataExtension extends MetadataType { * helper for {@link DataExtension.#fixShared} * * @param {string} childBuName name of child BU to fix - * @param {TYPE.BuObject} buObjectParent bu object for parent BU + * @param {BuObject} buObjectParent bu object for parent BU * @param {object} clientParent SDK for parent BU * @param {Object.} sharedDataExtensionMap ID-Key relationship of shared data extensions * @returns {Promise.} updated shared DE keys on BU @@ -499,7 +513,7 @@ class DataExtension extends MetadataType { clientParent, sharedDataExtensionMap ) { - /** @type {TYPE.BuObject} */ + /** @type {BuObject} */ const buObjectChildBu = { eid: this.properties.credentials[buObjectParent.credential].eid, mid: this.properties.credentials[buObjectParent.credential].businessUnits[childBuName], @@ -571,9 +585,9 @@ class DataExtension extends MetadataType { * * @param {string} deId data extension ObjectID * @param {string} deKey dataExtension key - * @param {TYPE.BuObject} buObjectChildBu BU object for Child BU + * @param {BuObject} buObjectChildBu BU object for Child BU * @param {object} clientChildBu SDK for child BU - * @param {TYPE.BuObject} buObjectParent BU object for Parent BU + * @param {BuObject} buObjectParent BU object for Parent BU * @param {object} clientParent SDK for parent BU * @returns {Promise.} flag that signals if the fix was successful */ @@ -628,7 +642,7 @@ class DataExtension extends MetadataType { * add a new field to the shared DE to trigger an update to the data model * helper for {@link DataExtension.#fixShared_item} * - * @param {TYPE.BuObject} buObjectChildBu BU object for Child BU + * @param {BuObject} buObjectChildBu BU object for Child BU * @param {object} clientChildBu SDK for child BU * @param {string} deKey dataExtension key * @param {string} deId dataExtension ObjectID @@ -669,7 +683,7 @@ class DataExtension extends MetadataType { * helper for {@link DataExtension.#fixShared_item} * * @param {string} randomSuffix - - * @param {TYPE.BuObject} buObjectParent BU object for Parent BU + * @param {BuObject} buObjectParent BU object for Parent BU * @param {object} clientParent SDK for parent BU * @param {string} deKey dataExtension key * @returns {Promise.} fieldObjectID @@ -697,7 +711,7 @@ class DataExtension extends MetadataType { * helper for {@link DataExtension.#fixShared_item} * * @param {string} randomSuffix - - * @param {TYPE.BuObject} buObjectChildBu BU object for Child BU + * @param {BuObject} buObjectChildBu BU object for Child BU * @param {object} clientChildBu SDK for child BU * @param {string} deKey dataExtension key * @param {string} fieldObjectID field ObjectID @@ -725,12 +739,12 @@ class DataExtension extends MetadataType { * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true * @param {void} [_] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.<{metadata: TYPE.DataExtensionMap, type: string}>} Promise of item map + * @returns {Promise.<{metadata: DataExtensionMap, type: string}>} Promise of item map */ static async retrieve(retrieveDir, additionalFields, _, key) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = null; - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let fieldOptions = null; if (key) { requestParams = { @@ -776,14 +790,14 @@ class DataExtension extends MetadataType { * helper for {@link DataExtension.retrieve} and for AttributeSet.fixShared_retrieve * * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @returns {Promise.} keyField => metadata map + * @returns {Promise.} keyField => metadata map */ static async retrieveSharedForCache(additionalFields = []) { // for caching, we want to retrieve shared DEs as well from the instance parent BU Util.logger.info(' - Caching dependent Metadata: dataExtension (shared via _ParentBU_)'); const buObjectBak = this.buObject; const clientBak = this.client; - /** @type {TYPE.BuObject} */ + /** @type {BuObject} */ const buObjectParentBu = { eid: this.properties.credentials[this.buObject.credential].eid, mid: this.properties.credentials[this.buObject.credential].eid, @@ -850,8 +864,8 @@ class DataExtension extends MetadataType { * helper to retrieve all dataExtension fields and attach them to the dataExtension metadata * * @private - * @param {TYPE.DataExtensionMap} metadata already cached dataExtension metadata - * @param {TYPE.SoapRequestParams} [fieldOptions] optionally filter results + * @param {DataExtensionMap} metadata already cached dataExtension metadata + * @param {SoapRequestParams} [fieldOptions] optionally filter results * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true * @returns {Promise.} - */ @@ -885,7 +899,7 @@ class DataExtension extends MetadataType { * Retrieves dataExtension metadata. Afterwards starts retrieval of dataExtensionColumn metadata retrieval * * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @returns {Promise.<{metadata: TYPE.DataExtensionMap, type: string}>} Promise of item map + * @returns {Promise.<{metadata: DataExtensionMap, type: string}>} Promise of item map */ static async retrieveChangelog(additionalFields) { const metadata = await this._retrieveAll(additionalFields); @@ -894,8 +908,8 @@ class DataExtension extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.DataExtensionItem} metadata a single dataExtension - * @returns {TYPE.DataExtensionItem} metadata + * @param {DataExtensionItem} metadata a single dataExtension + * @returns {DataExtensionItem} metadata */ static async postRetrieveTasks(metadata) { // Error during deploy if SendableSubscriberField.Name = '_SubscriberKey' even though it is retrieved like that @@ -939,9 +953,9 @@ class DataExtension extends MetadataType { * Helper to retrieve Data Extension Fields * * @private - * @param {TYPE.SoapRequestParams} [options] options (e.g. continueRequest) + * @param {SoapRequestParams} [options] options (e.g. continueRequest) * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @returns {Promise.} Promise of items + * @returns {Promise.} Promise of items */ static async _retrieveFields(options, additionalFields) { if (!options) { @@ -958,7 +972,7 @@ class DataExtension extends MetadataType { * helps retrieving fields during templating and deploy where we dont want the full list * * @private - * @param {TYPE.DataExtensionMap} metadata list of DEs + * @param {DataExtensionMap} metadata list of DEs * @param {string} customerKey external key of single DE * @returns {Promise.} - */ @@ -988,7 +1002,7 @@ class DataExtension extends MetadataType { * helper for {@link MetadataType.updateREST} and {@link MetadataType.updateSOAP} that removes old files after the key was changed * * @private - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @returns {void} */ static async _postChangeKeyTasks(metadataEntry) { @@ -998,8 +1012,8 @@ class DataExtension extends MetadataType { /** * prepares a DataExtension for deployment * - * @param {TYPE.DataExtensionItem} metadata a single data Extension - * @returns {Promise.} Promise of updated single DE + * @param {DataExtensionItem} metadata a single data Extension + * @returns {Promise.} Promise of updated single DE */ static async preDeployTasks(metadata) { if (metadata.Name?.startsWith('_')) { @@ -1085,7 +1099,7 @@ class DataExtension extends MetadataType { * The json's first level of keys must represent the rows and the secend level the columns * * @private - * @param {TYPE.DataExtensionItem} json single dataextension + * @param {DataExtensionItem} json single dataextension * @param {object[][]} tabled prepped array for output in tabular format * @returns {string} file content */ @@ -1140,7 +1154,7 @@ class DataExtension extends MetadataType { * The json's first level of keys must represent the rows and the secend level the columns * * @private - * @param {TYPE.DataExtensionItem} json dataextension + * @param {DataExtensionItem} json dataextension * @param {object[][]} tabled prepped array for output in tabular format * @returns {string} file content */ @@ -1193,7 +1207,7 @@ class DataExtension extends MetadataType { * @private * @param {string} directory directory the file will be written to * @param {string} filename name of the file without '.json' ending - * @param {TYPE.DataExtensionItem} json dataextension.columns + * @param {DataExtensionItem} json dataextension.columns * @param {'html'|'md'} mode html or md * @param {string[]} [fieldsToKeep] list of keys(columns) to show. This will also specify * @returns {Promise.} Promise of success of saving the file @@ -1232,7 +1246,7 @@ class DataExtension extends MetadataType { /** * Parses metadata into a readable Markdown/HTML format then saves it * - * @param {TYPE.DataExtensionMap} [metadataMap] a list of dataExtension definitions + * @param {DataExtensionMap} [metadataMap] a list of dataExtension definitions * @returns {Promise.} - */ static async document(metadataMap) { @@ -1332,7 +1346,7 @@ class DataExtension extends MetadataType { /** * Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. * - * @returns {Promise.<{metadata: TYPE.DataExtensionMap, type: string}>} Promise + * @returns {Promise.<{metadata: DataExtensionMap, type: string}>} Promise */ static async retrieveForCache() { return this.retrieve(null, ['ObjectID', 'CustomerKey', 'Name'], this.buObject, null, null); @@ -1342,8 +1356,8 @@ class DataExtension extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata item - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.<{metadata: TYPE.DataExtensionMap, type: string}>} Promise of items + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.<{metadata: DataExtensionMap, type: string}>} Promise of items */ static async retrieveAsTemplate(templateDir, name, templateVariables) { const options = { @@ -1395,7 +1409,7 @@ class DataExtension extends MetadataType { * dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve * it also sets the content type which is basically the subtype * - * @param {TYPE.MetadataTypeItem} metadata a single script activity definition + * @param {MetadataTypeItem} metadata a single script activity definition */ static setFolderPath(metadata) { let error = false; @@ -1455,8 +1469,8 @@ class DataExtension extends MetadataType { * * @private * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @param {TYPE.SoapRequestParams} [options] e.g. filter - * @returns {Promise.} keyField => metadata map + * @param {SoapRequestParams} [options] e.g. filter + * @returns {Promise.} keyField => metadata map */ static async _retrieveAll(additionalFields, options) { const { metadata } = await super.retrieveSOAP(null, options, null, additionalFields); diff --git a/lib/metadataTypes/DataExtensionField.js b/lib/metadataTypes/DataExtensionField.js index c1f93fae7..747c01ca0 100644 --- a/lib/metadataTypes/DataExtensionField.js +++ b/lib/metadataTypes/DataExtensionField.js @@ -1,9 +1,24 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ +/** + * @typedef {import('../../types/mcdev.d.js').DataExtensionFieldMap} DataExtensionFieldMap + * @typedef {import('../../types/mcdev.d.js').DataExtensionFieldItem} DataExtensionFieldItem + */ /** * DataExtensionField MetadataType * @@ -15,7 +30,7 @@ class DataExtensionField extends MetadataType { * * @param {string} retrieveDir Directory where retrieved metadata directory will be saved * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @returns {Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}>} Promise of items + * @returns {Promise.<{metadata: DataExtensionFieldMap, type: string}>} Promise of items */ static async retrieve(retrieveDir, additionalFields) { return super.retrieveSOAP(retrieveDir, null, null, additionalFields); @@ -23,9 +38,9 @@ class DataExtensionField extends MetadataType { /** * Retrieves all records for caching * - * @param {TYPE.SoapRequestParams} [requestParams] required for the specific request (filter for example) + * @param {SoapRequestParams} [requestParams] required for the specific request (filter for example) * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @returns {Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}>} Promise of items + * @returns {Promise.<{metadata: DataExtensionFieldMap, type: string}>} Promise of items */ static async retrieveForCache(requestParams, additionalFields) { return super.retrieveSOAP(null, requestParams, null, additionalFields); @@ -33,8 +48,8 @@ class DataExtensionField extends MetadataType { /** * helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array * - * @param {TYPE.DataExtensionFieldMap} fieldsObj customerKey-based list of fields for one dataExtension - * @returns {TYPE.DataExtensionFieldItem[]} sorted array of field objects + * @param {DataExtensionFieldMap} fieldsObj customerKey-based list of fields for one dataExtension + * @returns {DataExtensionFieldItem[]} sorted array of field objects */ static convertToSortedArray(fieldsObj) { return ( @@ -48,8 +63,8 @@ class DataExtensionField extends MetadataType { /** * sorting method to ensure `Ordinal` is respected * - * @param {TYPE.DataExtensionFieldItem} a - - * @param {TYPE.DataExtensionFieldItem} b - + * @param {DataExtensionFieldItem} a - + * @param {DataExtensionFieldItem} b - * @returns {boolean} sorting based on Ordinal */ static sortDeFields(a, b) { @@ -58,9 +73,9 @@ class DataExtensionField extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.DataExtensionFieldItem} metadata a single item + * @param {DataExtensionFieldItem} metadata a single item * @param {boolean} forDataExtension when used by DataExtension class we remove more fields - * @returns {TYPE.DataExtensionFieldItem} metadata + * @returns {DataExtensionFieldItem} metadata */ static postRetrieveTasks(metadata, forDataExtension) { if (forDataExtension) { @@ -82,9 +97,9 @@ class DataExtensionField extends MetadataType { * Mofifies passed deployColumns for update by mapping ObjectID to their target column's values. * Removes FieldType field if its the same in deploy and target column, because it results in an error even if its of the same type * - * @param {TYPE.DataExtensionFieldItem[]} deployColumns Columns of data extension that will be deployed + * @param {DataExtensionFieldItem[]} deployColumns Columns of data extension that will be deployed * @param {string} deKey external/customer key of Data Extension - * @returns {Promise.>} existing fields by their original name to allow re-adding FieldType after update + * @returns {Promise.>} existing fields by their original name to allow re-adding FieldType after update */ static async prepareDeployColumnsOnUpdate(deployColumns, deKey) { // create list of DE keys that had changes to their fields to be able to use it as a filter in the --fixShared logic @@ -119,7 +134,7 @@ class DataExtensionField extends MetadataType { const fieldsObj = response.metadata; // ensure fields can be updated properly by their adding ObjectId based on Name-matching - /** @type {Object.} */ + /** @type {Object.} */ const existingFieldByName = {}; for (const key of Object.keys(fieldsObj)) { diff --git a/lib/metadataTypes/DataExtensionTemplate.js b/lib/metadataTypes/DataExtensionTemplate.js index edff5cb33..060f8ee71 100644 --- a/lib/metadataTypes/DataExtensionTemplate.js +++ b/lib/metadataTypes/DataExtensionTemplate.js @@ -1,8 +1,20 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * DataExtensionTemplate MetadataType * @@ -16,10 +28,10 @@ class DataExtensionTemplate extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = null; if (key) { requestParams = { diff --git a/lib/metadataTypes/DataExtract.js b/lib/metadataTypes/DataExtract.js index 1d50cd458..1d9a92dcc 100644 --- a/lib/metadataTypes/DataExtract.js +++ b/lib/metadataTypes/DataExtract.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * DataExtract MetadataType * @@ -20,7 +32,7 @@ class DataExtract extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieve(retrieveDir, _, __, key) { return super.retrieveREST(retrieveDir, '/automation/v1/dataextracts/', null, key); @@ -28,7 +40,7 @@ class DataExtract extends MetadataType { /** * Retrieves Metadata of Data Extract Activity for caching * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieveForCache() { return super.retrieveREST(null, '/automation/v1/dataextracts/'); @@ -39,8 +51,8 @@ class DataExtract extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise of metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise of metadata */ static async retrieveAsTemplate(templateDir, name, templateVariables) { const res = await this.client.rest.get( @@ -89,7 +101,7 @@ class DataExtract extends MetadataType { /** * Creates a single Data Extract * - * @param {TYPE.MetadataTypeItem} dataExtract a single Data Extract + * @param {MetadataTypeItem} dataExtract a single Data Extract * @returns {Promise} Promise */ static create(dataExtract) { @@ -99,7 +111,7 @@ class DataExtract extends MetadataType { /** * Updates a single Data Extract * - * @param {TYPE.MetadataTypeItem} dataExtract a single Data Extract + * @param {MetadataTypeItem} dataExtract a single Data Extract * @returns {Promise} Promise */ static update(dataExtract) { @@ -112,8 +124,8 @@ class DataExtract extends MetadataType { /** * prepares a dataExtract for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single dataExtract activity definition - * @returns {TYPE.MetadataTypeItem} metadata object + * @param {MetadataTypeItem} metadata a single dataExtract activity definition + * @returns {MetadataTypeItem} metadata object */ static preDeployTasks(metadata) { metadata.dataExtractTypeId = cache.searchForField( @@ -128,8 +140,8 @@ class DataExtract extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} metadata + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} metadata */ static postRetrieveTasks(metadata) { try { diff --git a/lib/metadataTypes/DataExtractType.js b/lib/metadataTypes/DataExtractType.js index 5f6185686..c66bf97fd 100644 --- a/lib/metadataTypes/DataExtractType.js +++ b/lib/metadataTypes/DataExtractType.js @@ -1,8 +1,20 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * DataExtractType MetadataType * Only for Caching No retrieve/upsert is required @@ -18,7 +30,7 @@ class DataExtractType extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { return super.retrieveREST(retrieveDir, '/automation/v1/dataextracttypes/', null, key); @@ -26,7 +38,7 @@ class DataExtractType extends MetadataType { /** * Retrieves Metadata of Data Extract Type for caching. * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache() { return super.retrieveREST(null, '/automation/v1/dataextracttypes/'); diff --git a/lib/metadataTypes/Discovery.js b/lib/metadataTypes/Discovery.js index 803c96e14..4c33ee5ea 100644 --- a/lib/metadataTypes/Discovery.js +++ b/lib/metadataTypes/Discovery.js @@ -1,9 +1,20 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ /** * ImportFile MetadataType * @@ -18,7 +29,7 @@ class Discovery extends MetadataType { * @param {void} [_] not used * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { if (key) { diff --git a/lib/metadataTypes/Email.js b/lib/metadataTypes/Email.js index 7c17111c6..81d33ef36 100644 --- a/lib/metadataTypes/Email.js +++ b/lib/metadataTypes/Email.js @@ -1,9 +1,21 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * Email MetadataType * @@ -17,10 +29,10 @@ class Email extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = null; if (key) { requestParams = { @@ -37,11 +49,11 @@ class Email extends MetadataType { /** * Helper for writing Metadata to disk, used for Retrieve and deploy * - * @param {TYPE.MetadataTypeMap} results metadata results from deploy + * @param {MetadataTypeMap} results metadata results from deploy * @param {string} retrieveDir directory where metadata should be stored after deploy/retrieve * @param {string} [overrideType] for use when there is a subtype (such as folder-queries) - * @param {TYPE.TemplateMap} [templateVariables] variables to be replaced in the metadata - * @returns {Promise.} Promise of saved metadata + * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata + * @returns {Promise.} Promise of saved metadata */ static async saveResults(results, retrieveDir, overrideType, templateVariables) { if (Object.keys(results).length) { @@ -55,8 +67,8 @@ class Email extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single query - * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string + * @param {MetadataTypeItem} metadata a single query + * @returns {MetadataTypeItem} Array with one metadata object and one query string */ static postRetrieveTasks(metadata) { // folder diff --git a/lib/metadataTypes/EmailSend.js b/lib/metadataTypes/EmailSend.js index e3c4a5cb2..2184d915d 100644 --- a/lib/metadataTypes/EmailSend.js +++ b/lib/metadataTypes/EmailSend.js @@ -1,10 +1,22 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * MessageSendActivity MetadataType * @@ -18,10 +30,10 @@ class EmailSend extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = { filter: { leftOperand: { @@ -58,7 +70,7 @@ class EmailSend extends MetadataType { /** * Updates a single item * - * @param {TYPE.MetadataTypeItem} metadataItem a single item + * @param {MetadataTypeItem} metadataItem a single item * @returns {Promise} Promise */ static update(metadataItem) { @@ -68,7 +80,7 @@ class EmailSend extends MetadataType { /** * Creates a single item * - * @param {TYPE.MetadataTypeItem} metadataItem a single item + * @param {MetadataTypeItem} metadataItem a single item * @returns {Promise} Promise */ static create(metadataItem) { @@ -88,8 +100,8 @@ class EmailSend extends MetadataType { /** * prepares a single item for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single script activity definition - * @returns {Promise.} Promise + * @param {MetadataTypeItem} metadata a single script activity definition + * @returns {Promise.} Promise */ static async preDeployTasks(metadata) { // re-add IsPlatformObject, required for visibility @@ -209,8 +221,8 @@ class EmailSend extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single query - * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string + * @param {MetadataTypeItem} metadata a single query + * @returns {MetadataTypeItem} Array with one metadata object and one query string */ static postRetrieveTasks(metadata) { // remove IsPlatformObject, always has to be 'false' diff --git a/lib/metadataTypes/Event.js b/lib/metadataTypes/Event.js index 8b4bd129d..28769e61f 100644 --- a/lib/metadataTypes/Event.js +++ b/lib/metadataTypes/Event.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * Event MetadataType * @@ -21,7 +33,7 @@ class Event extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { Util.logBeta(this.definition.type); @@ -38,7 +50,7 @@ class Event extends MetadataType { /** * Retrieves event definition metadata for caching * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache() { return super.retrieveREST(null, '/interaction/v1/EventDefinitions/'); @@ -49,8 +61,8 @@ class Event extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise of metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise of metadata */ static async retrieveAsTemplate(templateDir, name, templateVariables) { Util.logBeta(this.definition.type); @@ -108,8 +120,8 @@ class Event extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} eventDef a single item of Event Definition - * @returns {TYPE.MetadataTypeItem} metadata + * @param {MetadataTypeItem} eventDef a single item of Event Definition + * @returns {MetadataTypeItem} metadata */ static postRetrieveTasks(eventDef) { const val = this.parseMetadata(eventDef); @@ -133,10 +145,10 @@ class Event extends MetadataType { /** * Deploys metadata - merely kept here to be able to print {@link Util.logBeta} once per deploy * - * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField + * @param {MetadataTypeMap} metadata metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved * @param {string} retrieveDir directory where metadata after deploy should be saved - * @returns {Promise.} Promise of keyField => metadata map + * @returns {Promise.} Promise of keyField => metadata map */ static async deploy(metadata, deployDir, retrieveDir) { Util.logBeta(this.definition.type); @@ -146,7 +158,7 @@ class Event extends MetadataType { /** * Creates a single Event Definition * - * @param {TYPE.MetadataTypeItem} metadata a single Event Definition + * @param {MetadataTypeItem} metadata a single Event Definition * @returns {Promise} Promise */ static create(metadata) { @@ -156,7 +168,7 @@ class Event extends MetadataType { /** * Updates a single Event Definition (using PUT method since PATCH isn't supported) * - * @param {TYPE.MetadataTypeItem} metadataEntry a single Event Definition + * @param {MetadataTypeItem} metadataEntry a single Event Definition * @returns {Promise} Promise */ static async update(metadataEntry) { @@ -170,8 +182,8 @@ class Event extends MetadataType { /** * prepares an event definition for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single eventDefinition - * @returns {TYPE.MetadataTypeItem} parsed version + * @param {MetadataTypeItem} metadata a single eventDefinition + * @returns {MetadataTypeItem} parsed version */ static preDeployTasks(metadata) { metadata.dataExtensionId = cache.searchForField( @@ -187,8 +199,8 @@ class Event extends MetadataType { /** * parses retrieved Metadata before saving * - * @param {TYPE.MetadataTypeItem} metadata a single event definition - * @returns {TYPE.MetadataTypeItem} parsed metadata + * @param {MetadataTypeItem} metadata a single event definition + * @returns {MetadataTypeItem} parsed metadata */ static parseMetadata(metadata) { try { diff --git a/lib/metadataTypes/FileLocation.js b/lib/metadataTypes/FileLocation.js index 2b5927ba6..b1dbf6969 100644 --- a/lib/metadataTypes/FileLocation.js +++ b/lib/metadataTypes/FileLocation.js @@ -1,8 +1,20 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * ImportFile MetadataType * @@ -17,7 +29,7 @@ class FtpLocation extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static retrieve(retrieveDir, _, __, key) { return super.retrieveREST(retrieveDir, '/automation/v1/ftplocations/', null, key); @@ -26,7 +38,7 @@ class FtpLocation extends MetadataType { /** * Retrieves folder metadata into local filesystem. Also creates a uniquePath attribute for each folder. * - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieveForCache() { return super.retrieveREST(null, '/automation/v1/ftplocations/'); diff --git a/lib/metadataTypes/FileTransfer.js b/lib/metadataTypes/FileTransfer.js index 494f77fe9..5239945f0 100644 --- a/lib/metadataTypes/FileTransfer.js +++ b/lib/metadataTypes/FileTransfer.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * FileTransfer MetadataType * @@ -20,7 +32,7 @@ class FileTransfer extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { return super.retrieveREST(retrieveDir, '/automation/v1/filetransfers/', null, key); @@ -28,7 +40,7 @@ class FileTransfer extends MetadataType { /** * Retrieves Metadata of FileTransfer Activity for caching * - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieveForCache() { return super.retrieveREST(null, '/automation/v1/filetransfers/'); @@ -39,8 +51,8 @@ class FileTransfer extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise */ static async retrieveAsTemplate(templateDir, name, templateVariables) { const res = await this.client.rest.get( @@ -89,7 +101,7 @@ class FileTransfer extends MetadataType { /** * Creates a single File Transfer * - * @param {TYPE.MetadataTypeItem} fileTransfer a single File Transfer + * @param {MetadataTypeItem} fileTransfer a single File Transfer * @returns {Promise} Promise */ static create(fileTransfer) { @@ -99,7 +111,7 @@ class FileTransfer extends MetadataType { /** * Updates a single File Transfer * - * @param {TYPE.MetadataTypeItem} fileTransfer a single File Transfer + * @param {MetadataTypeItem} fileTransfer a single File Transfer * @returns {Promise} Promise */ static update(fileTransfer) { @@ -109,7 +121,7 @@ class FileTransfer extends MetadataType { /** * prepares a fileTransfer for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single fileTransfer activity definition + * @param {MetadataTypeItem} metadata a single fileTransfer activity definition * @returns {Promise} Promise */ static async preDeployTasks(metadata) { @@ -132,8 +144,8 @@ class FileTransfer extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single fileTransfer activity definition - * @returns {TYPE.MetadataTypeItem} parsed metadata + * @param {MetadataTypeItem} metadata a single fileTransfer activity definition + * @returns {MetadataTypeItem} parsed metadata */ static postRetrieveTasks(metadata) { try { diff --git a/lib/metadataTypes/Filter.js b/lib/metadataTypes/Filter.js index 6fc64079f..c24959523 100644 --- a/lib/metadataTypes/Filter.js +++ b/lib/metadataTypes/Filter.js @@ -1,8 +1,20 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * Filter MetadataType * @@ -19,7 +31,7 @@ class Filter extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { return super.retrieveREST(retrieveDir, '/automation/v1/filters/', null, key); diff --git a/lib/metadataTypes/Folder.js b/lib/metadataTypes/Folder.js index bdc026544..22ccea7b3 100644 --- a/lib/metadataTypes/Folder.js +++ b/lib/metadataTypes/Folder.js @@ -1,12 +1,24 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import toposort from 'toposort'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * Folder MetadataType * @@ -163,7 +175,7 @@ class Folder extends MetadataType { * and comparing to check if create or update operation is needed. * Copied due to having a dependency on itself, meaning the created need to be serial * - * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField + * @param {MetadataTypeMap} metadata metadata mapped by their keyField * @returns {Promise.} Promise of saved metadata */ static async upsert(metadata) { @@ -329,7 +341,7 @@ class Folder extends MetadataType { /** * creates a folder based on metatadata * - * @param {TYPE.MetadataTypeItem} metadataEntry metadata of the folder + * @param {MetadataTypeItem} metadataEntry metadata of the folder * @returns {Promise} Promise */ static async create(metadataEntry) { @@ -367,7 +379,7 @@ class Folder extends MetadataType { /** * Updates a single Folder. * - * @param {TYPE.MetadataTypeItem} metadataEntry single metadata entry + * @param {MetadataTypeItem} metadataEntry single metadata entry * @returns {Promise} Promise */ static async update(metadataEntry) { @@ -397,8 +409,8 @@ class Folder extends MetadataType { /** * prepares a folder for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single folder definition - * @returns {Promise.} Promise of parsed folder metadata + * @param {MetadataTypeItem} metadata a single folder definition + * @returns {Promise.} Promise of parsed folder metadata */ static async preDeployTasks(metadata) { if (!this.definition.deployFolderTypes.includes(metadata.ContentType.toLowerCase())) { @@ -453,7 +465,7 @@ class Folder extends MetadataType { * * @param {string} dir directory that contains '.json' files to be read * @param {boolean} [listBadKeys] do not print errors, used for badKeys() - * @returns {TYPE.MetadataTypeMap} fileName => fileContent map + * @returns {MetadataTypeMap} fileName => fileContent map */ static getJsonFromFS(dir, listBadKeys) { try { @@ -558,8 +570,8 @@ class Folder extends MetadataType { /** * Gets executed after retreive of metadata type * - * @param {TYPE.MetadataTypeItem} metadata metadata mapped by their keyField - * @returns {TYPE.MetadataTypeItem} cloned metadata + * @param {MetadataTypeItem} metadata metadata mapped by their keyField + * @returns {MetadataTypeItem} cloned metadata */ static postRetrieveTasks(metadata) { return JSON.parse(JSON.stringify(metadata)); diff --git a/lib/metadataTypes/ImportFile.js b/lib/metadataTypes/ImportFile.js index 22225a828..a4bb52116 100644 --- a/lib/metadataTypes/ImportFile.js +++ b/lib/metadataTypes/ImportFile.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * ImportFile MetadataType * @@ -21,7 +33,7 @@ class ImportFile extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { let objectId = null; @@ -78,7 +90,7 @@ class ImportFile extends MetadataType { * @param {void} [_] parameter not used * @param {void} [__] parameter not used * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static retrieveForCache(_, __, key) { return this.retrieve(null, null, null, key); @@ -89,8 +101,8 @@ class ImportFile extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise */ static async retrieveAsTemplate(templateDir, name, templateVariables) { // using '?$filter=name%20eq%20' + encodeURIComponent(name) would also work but that just retrieves more data for no reason @@ -157,7 +169,7 @@ class ImportFile extends MetadataType { /** * Creates a single Import File * - * @param {TYPE.MetadataTypeItem} importFile a single Import File + * @param {MetadataTypeItem} importFile a single Import File * @returns {Promise} Promise */ static create(importFile) { @@ -167,7 +179,7 @@ class ImportFile extends MetadataType { /** * Updates a single Import File * - * @param {TYPE.MetadataTypeItem} importFile a single Import File + * @param {MetadataTypeItem} importFile a single Import File * @returns {Promise} Promise */ static update(importFile) { @@ -179,10 +191,10 @@ class ImportFile extends MetadataType { /** * Deploys metadata * - * @param {TYPE.MetadataTypeMap} metadataMap metadata mapped by their keyField + * @param {MetadataTypeMap} metadataMap metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved * @param {string} retrieveDir directory where metadata after deploy should be saved - * @returns {Promise.} Promise of keyField => metadata map + * @returns {Promise.} Promise of keyField => metadata map */ static async deploy(metadataMap, deployDir, retrieveDir) { if ( @@ -209,7 +221,7 @@ class ImportFile extends MetadataType { /** * prepares a import definition for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single importDef + * @param {MetadataTypeItem} metadata a single importDef * @returns {Promise} Promise */ static async preDeployTasks(metadata) { @@ -321,8 +333,8 @@ class ImportFile extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} parsed metadata + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} parsed metadata */ static postRetrieveTasks(metadata) { metadata.r__fileLocation_name = cache.searchForField( diff --git a/lib/metadataTypes/Journey.js b/lib/metadataTypes/Journey.js index 1c7b2ba3c..7d0752499 100644 --- a/lib/metadataTypes/Journey.js +++ b/lib/metadataTypes/Journey.js @@ -1,12 +1,24 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import TransactionalEmail from './TransactionalEmail.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; import File from '../util/file.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * Journey MetadataType * ! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! @@ -24,7 +36,7 @@ class Journey extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { const extrasDefault = 'activities'; @@ -220,10 +232,10 @@ class Journey extends MetadataType { /** * Deploys metadata - merely kept here to be able to print {@link Util.logBeta} once per deploy * - * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField + * @param {MetadataTypeMap} metadata metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved * @param {string} retrieveDir directory where metadata after deploy should be saved - * @returns {Promise.} Promise of keyField => metadata map + * @returns {Promise.} Promise of keyField => metadata map */ static async deploy(metadata, deployDir, retrieveDir) { Util.logBeta(this.definition.type); @@ -233,7 +245,7 @@ class Journey extends MetadataType { /** * Updates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static update(metadata) { @@ -247,7 +259,7 @@ class Journey extends MetadataType { /** * Creates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static create(metadata) { @@ -256,11 +268,11 @@ class Journey extends MetadataType { /** * Helper for writing Metadata to disk, used for Retrieve and deploy * - * @param {TYPE.MetadataTypeMap} results metadata results from deploy + * @param {MetadataTypeMap} results metadata results from deploy * @param {string} retrieveDir directory where metadata should be stored after deploy/retrieve * @param {string} [overrideType] for use when there is a subtype (such as folder-queries) - * @param {TYPE.TemplateMap} [templateVariables] variables to be replaced in the metadata - * @returns {Promise.} Promise of saved metadata + * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata + * @returns {Promise.} Promise of saved metadata */ static async saveResults(results, retrieveDir, overrideType, templateVariables) { if (Object.keys(results).length) { @@ -273,7 +285,7 @@ class Journey extends MetadataType { /** * helper for Journey's {@link Journey.saveResults}. Gets executed after retreive of metadata type and * - * @param {TYPE.MetadataTypeMap} metadataMap key=customer key, value=metadata + * @param {MetadataTypeMap} metadataMap key=customer key, value=metadata */ static async _postRetrieveTasksBulk(metadataMap) { let needTransactionalEmail = false; @@ -298,8 +310,8 @@ class Journey extends MetadataType { * manages post retrieve steps * ! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} Array with one metadata object + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} Array with one metadata object */ static postRetrieveTasks(metadata) { // folder @@ -487,7 +499,7 @@ class Journey extends MetadataType { * helper for {@link Journey.postRetrieveTasks} * * @private - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item */ static _postRetrieveTasks_activities(metadata) { for (const activity of metadata.activities) { @@ -647,8 +659,8 @@ class Journey extends MetadataType { * prepares a TSD for deployment * ! BETA RELEASE of journey support (v4.3.0); it so far only resolves a limited amount of dependencies and will likely break during cross-BU deployments! * - * @param {TYPE.MetadataTypeItem} metadata of a single TSD - * @returns {TYPE.MetadataTypeItem} metadata object + * @param {MetadataTypeItem} metadata of a single TSD + * @returns {MetadataTypeItem} metadata object */ static async preDeployTasks(metadata) { if (metadata.status !== 'Draft') { @@ -809,7 +821,7 @@ class Journey extends MetadataType { * helper for {@link Journey.preDeployTasks} * * @private - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item */ static _preDeployTasks_activities(metadata) { for (const activity of metadata.activities) { @@ -892,11 +904,11 @@ class Journey extends MetadataType { /** * helper for {@link MetadataType.upsert} * - * @param {TYPE.MetadataTypeMap} metadataMap list of metadata + * @param {MetadataTypeMap} metadataMap list of metadata * @param {string} metadataKey key of item we are looking at * @param {boolean} hasError error flag from previous code - * @param {TYPE.MetadataTypeItemDiff[]} metadataToUpdate list of items to update - * @param {TYPE.MetadataTypeItem[]} metadataToCreate list of items to create + * @param {MetadataTypeItemDiff[]} metadataToUpdate list of items to update + * @param {MetadataTypeItem[]} metadataToCreate list of items to create * @returns {'create' | 'update' | 'skip'} action to take */ static createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) { diff --git a/lib/metadataTypes/List.js b/lib/metadataTypes/List.js index 2c57375f7..63da05577 100644 --- a/lib/metadataTypes/List.js +++ b/lib/metadataTypes/List.js @@ -1,12 +1,24 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import Folder from './Folder.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; import auth from '../util/auth.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * List MetadataType * @@ -20,10 +32,10 @@ class List extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieve(retrieveDir, _, __, key) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = null; if (key) { requestParams = { @@ -49,7 +61,7 @@ class List extends MetadataType { /** * Gets metadata cache with limited fields and does not store value to disk * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieveForCache() { const results = await this.retrieve(); @@ -82,14 +94,14 @@ class List extends MetadataType { * helper for @link retrieveForCache and @link retrieve * * @private - * @param {TYPE.MetadataTypeMapObj} results metadata from retrieve for current BU - * @returns {Promise.} Promise + * @param {MetadataTypeMapObj} results metadata from retrieve for current BU + * @returns {Promise.} Promise */ static async _retrieveParentAllSubs(results) { if (this.buObject.eid !== this.buObject.mid) { // for caching, we want to get the All Subscriber List from the Parent Account Util.logger.debug(' - Checking MasterUnsubscribeBehavior for current BU'); - /** @type {TYPE.BuObject} */ + /** @type {BuObject} */ const buObjectParentBu = { eid: this.properties.credentials[this.buObject.credential].eid, mid: this.properties.credentials[this.buObject.credential].eid, @@ -169,8 +181,8 @@ class List extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} list a single list - * @returns {TYPE.MetadataTypeItem} metadata + * @param {MetadataTypeItem} list a single list + * @returns {MetadataTypeItem} metadata */ static postRetrieveTasks(list) { return this.parseMetadata(list); @@ -178,9 +190,9 @@ class List extends MetadataType { /** * parses retrieved Metadata before saving * - * @param {TYPE.MetadataTypeItem} metadata a single list definition + * @param {MetadataTypeItem} metadata a single list definition * @param {boolean} [parseForCache] if set to true, the Category ID is kept - * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one sql string + * @returns {MetadataTypeItem} Array with one metadata object and one sql string */ static parseMetadata(metadata, parseForCache) { if (!metadata.r__folder_Path) { diff --git a/lib/metadataTypes/MetadataType.js b/lib/metadataTypes/MetadataType.js index 055d87e5e..a67c03c11 100644 --- a/lib/metadataTypes/MetadataType.js +++ b/lib/metadataTypes/MetadataType.js @@ -7,14 +7,28 @@ * in the generic version of the method */ -import TYPE from '../../types/mcdev.d.js'; - import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; import deepEqual from 'deep-equal'; import pLimit from 'p-limit'; import Mustache from 'mustache'; + +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('sfmc-sdk')} SDK + */ + /** * ensure that Mustache does not escape any characters * @@ -36,7 +50,7 @@ class MetadataType { * * @param {string} dir directory that contains '.json' files to be read * @param {boolean} [listBadKeys] do not print errors, used for badKeys() - * @returns {TYPE.MetadataTypeMap} fileName => fileContent map + * @returns {MetadataTypeMap} fileName => fileContent map */ static getJsonFromFS(dir, listBadKeys) { const fileName2FileContent = {}; @@ -105,10 +119,10 @@ class MetadataType { /** * Deploys metadata * - * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField + * @param {MetadataTypeMap} metadata metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved * @param {string} retrieveDir directory where metadata after deploy should be saved - * @returns {Promise.} Promise of keyField => metadata map + * @returns {Promise.} Promise of keyField => metadata map */ static async deploy(metadata, deployDir, retrieveDir) { const upsertResults = await this.upsert(metadata, deployDir); @@ -127,8 +141,8 @@ class MetadataType { /** * Gets executed after deployment of metadata type * - * @param {TYPE.MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create - * @param {TYPE.MetadataTypeMap} originalMetadata metadata to be updated (contains additioanl fields) + * @param {MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create + * @param {MetadataTypeMap} originalMetadata metadata to be updated (contains additioanl fields) * @param {{created: number, updated: number}} createdUpdated counter representing successful creates/updates * @returns {void} */ @@ -137,9 +151,9 @@ class MetadataType { /** * helper for {@link MetadataType.createREST} * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call - * @param {TYPE.MetadataTypeItem} metadataEntryWithAllFields like metadataEntry but before non-creatable fields were stripped + * @param {MetadataTypeItem} metadataEntryWithAllFields like metadataEntry but before non-creatable fields were stripped * @returns {void} */ static postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) {} @@ -147,7 +161,7 @@ class MetadataType { /** * helper for {@link MetadataType.updateREST} * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call * @returns {void} */ @@ -156,7 +170,7 @@ class MetadataType { /** * helper for {@link MetadataType.createREST} when legacy API endpoints as these do not return the created item but only their new id * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call * @returns {Promise.} - */ @@ -185,10 +199,10 @@ class MetadataType { /** * Gets executed after retreive of metadata type * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @param {string} targetDir folder where retrieves should be saved * @param {boolean} [isTemplating] signals that we are retrieving templates - * @returns {TYPE.MetadataTypeItem} cloned metadata + * @returns {MetadataTypeItem} cloned metadata */ static postRetrieveTasks(metadata, targetDir, isTemplating) { return JSON.parse(JSON.stringify(metadata)); @@ -196,7 +210,7 @@ class MetadataType { /** * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item */ static setFolderPath(metadata) { if (!this.definition.folderIdField) { @@ -221,7 +235,7 @@ class MetadataType { /** * generic script that retrieves the folder ID from cache and updates the given metadata with it before deploy * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item */ static setFolderId(metadata) { if (!this.definition.folderIdField) { @@ -243,7 +257,7 @@ class MetadataType { * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true * @param {string[]} [subTypeArr] optionally limit to a single subtype * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} metadata + * @returns {Promise.} metadata */ static retrieve(retrieveDir, additionalFields, subTypeArr, key) { Util.metadataLogger('error', this.definition.type, 'retrieve', `Not Supported`); @@ -255,7 +269,7 @@ class MetadataType { * * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true * @param {string[]} [subTypeArr] optionally limit to a single subtype - * @returns {Promise.} metadata + * @returns {Promise.} metadata */ static retrieveChangelog(additionalFields, subTypeArr) { return this.retrieveForCache(additionalFields, subTypeArr); @@ -267,7 +281,7 @@ class MetadataType { * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true * @param {string[]} [subTypeArr] optionally limit to a single subtype * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} metadata + * @returns {Promise.} metadata */ static async retrieveForCache(additionalFields, subTypeArr, key) { return this.retrieve(null, additionalFields, subTypeArr, key); @@ -277,9 +291,9 @@ class MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} [subType] optionally limit to a single subtype - * @returns {Promise.} metadata + * @returns {Promise.} metadata */ static retrieveAsTemplate(templateDir, name, templateVariables, subType) { Util.logger.error('retrieveAsTemplate is not supported yet for ' + this.definition.type); @@ -296,9 +310,9 @@ class MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} uri rest endpoint for GET - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} name name (not key) of the metadata item - * @returns {Promise.<{metadata: TYPE.MetadataTypeItem, type: string}>} Promise + * @returns {Promise.<{metadata: MetadataTypeItem, type: string}>} Promise */ static async retrieveTemplateREST(templateDir, uri, templateVariables, name) { return this.retrieveREST(templateDir, uri, templateVariables, name); @@ -310,8 +324,8 @@ class MetadataType { * @param {string} retrieveDir Directory where retrieved metadata directory will be saved * @param {string} templateDir (List of) Directory where built definitions will be saved * @param {string} key name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} single metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} single metadata */ static async buildTemplate(retrieveDir, templateDir, key, templateVariables) { // retrieve metadata template @@ -402,9 +416,9 @@ class MetadataType { /** * Gets executed before deploying metadata * - * @param {TYPE.MetadataTypeItem} metadata a single metadata item + * @param {MetadataTypeItem} metadata a single metadata item * @param {string} deployDir folder where files for deployment are stored - * @returns {Promise.} Promise of a single metadata item + * @returns {Promise.} Promise of a single metadata item */ static async preDeployTasks(metadata, deployDir) { return metadata; @@ -413,7 +427,7 @@ class MetadataType { /** * Abstract create method that needs to be implemented in child metadata type * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} metadata single metadata entry * @param {string} deployDir directory where deploy metadata are saved * @returns {void} */ @@ -429,8 +443,8 @@ class MetadataType { /** * Abstract update method that needs to be implemented in child metadata type * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry - * @param {TYPE.MetadataTypeItem} [metadataBefore] metadata mapped by their keyField + * @param {MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} [metadataBefore] metadata mapped by their keyField * @returns {void} */ static update(metadata, metadataBefore) { @@ -479,8 +493,8 @@ class MetadataType { /** * test if metadata was actually changed or not to potentially skip it during deployment * - * @param {TYPE.MetadataTypeItem} cachedVersion cached version from the server - * @param {TYPE.MetadataTypeItem} metadata item to upload + * @param {MetadataTypeItem} cachedVersion cached version from the server + * @param {MetadataTypeItem} metadata item to upload * @param {string} [fieldName] optional field name to use for identifying the record in logs * @returns {boolean} true if metadata was changed */ @@ -491,8 +505,8 @@ class MetadataType { /** * test if metadata was actually changed or not to potentially skip it during deployment * - * @param {TYPE.MetadataTypeItem} cachedVersion cached version from the server - * @param {TYPE.MetadataTypeItem} metadata item to upload + * @param {MetadataTypeItem} cachedVersion cached version from the server + * @param {MetadataTypeItem} metadata item to upload * @param {string} [fieldName] optional field name to use for identifying the record in logs * @param {boolean} [silent] optionally suppress logging * @returns {boolean} true on first identified deviation or false if none are found @@ -545,9 +559,9 @@ class MetadataType { /** * MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. * - * @param {TYPE.MetadataTypeMap} metadataMap metadata mapped by their keyField + * @param {MetadataTypeMap} metadataMap metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved - * @returns {Promise.} keyField => metadata map + * @returns {Promise.} keyField => metadata map */ static async upsert(metadataMap, deployDir) { const orignalMetadataMap = JSON.parse(JSON.stringify(metadataMap)); @@ -651,11 +665,11 @@ class MetadataType { /** * helper for {@link MetadataType.upsert} * - * @param {TYPE.MetadataTypeMap} metadataMap list of metadata + * @param {MetadataTypeMap} metadataMap list of metadata * @param {string} metadataKey key of item we are looking at * @param {boolean} hasError error flag from previous code - * @param {TYPE.MetadataTypeItemDiff[]} metadataToUpdate list of items to update - * @param {TYPE.MetadataTypeItem[]} metadataToCreate list of items to create + * @param {MetadataTypeItemDiff[]} metadataToUpdate list of items to update + * @param {MetadataTypeItem[]} metadataToCreate list of items to create * @returns {'create' | 'update' | 'skip'} action to take */ static createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) { @@ -804,7 +818,7 @@ class MetadataType { /** * Creates a single metadata entry via REST * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {string} uri rest endpoint for POST * @returns {Promise. | null} Promise of API response or null in case of an error */ @@ -844,7 +858,7 @@ class MetadataType { /** * Creates a single metadata entry via fuel-soap (generic lib not wrapper) * - * @param {TYPE.MetadataTypeItem} metadataEntry single metadata entry + * @param {MetadataTypeItem} metadataEntry single metadata entry * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method * @returns {Promise. | null} Promise of API response or null in case of an error */ @@ -875,7 +889,7 @@ class MetadataType { /** * Updates a single metadata entry via REST * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {string} uri rest endpoint for PATCH * @param {'patch'|'post'|'put'} [httpMethod] defaults to 'patch'; some update requests require PUT instead of PATCH * @returns {Promise. | null} Promise of API response or null in case of an error @@ -915,7 +929,7 @@ class MetadataType { * helper for {@link MetadataType.updateREST} and {@link MetadataType.updateSOAP} that removes old files after the key was changed * * @private - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {boolean} [keepMap] some types require to check the old-key new-key relationship in their postDeployTasks; currently used by dataExtension only * @returns {void} */ @@ -949,7 +963,7 @@ class MetadataType { /** * Updates a single metadata entry via fuel-soap (generic lib not wrapper) * - * @param {TYPE.MetadataTypeItem} metadataEntry single metadata entry + * @param {MetadataTypeItem} metadataEntry single metadata entry * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method * @returns {Promise. | null} Promise of API response or null in case of an error */ @@ -980,7 +994,7 @@ class MetadataType { * * @param {Error} ex error that occured * @param {'creating'|'updating'} msg what to print in the log - * @param {TYPE.MetadataTypeItem} [metadataEntry] single metadata entry + * @param {MetadataTypeItem} [metadataEntry] single metadata entry * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method */ static _handleSOAPErrors(ex, msg, metadataEntry, handleOutside) { @@ -1012,10 +1026,10 @@ class MetadataType { * Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata * * @param {string} retrieveDir Directory where retrieved metadata directory will be saved - * @param {TYPE.SoapRequestParams} [requestParams] required for the specific request (filter for example) + * @param {SoapRequestParams} [requestParams] required for the specific request (filter for example) * @param {string|number} [singleRetrieve] key of single item to filter by * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @returns {Promise.} Promise of item map + * @returns {Promise.} Promise of item map */ static async retrieveSOAP(retrieveDir, requestParams, singleRetrieve, additionalFields) { requestParams ||= {}; @@ -1050,9 +1064,9 @@ class MetadataType { * * @param {string} retrieveDir Directory where retrieved metadata directory will be saved * @param {string} uri rest endpoint for GET - * @param {TYPE.TemplateMap} [templateVariables] variables to be replaced in the metadata + * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata * @param {string|number} [singleRetrieve] key of single item to filter by - * @returns {Promise.<{metadata: (TYPE.MetadataTypeMap | TYPE.MetadataTypeItem), type: string}>} Promise of item map (single item for templated result) + * @returns {Promise.<{metadata: (MetadataTypeMap | MetadataTypeItem), type: string}>} Promise of item map (single item for templated result) */ static async retrieveREST(retrieveDir, uri, templateVariables, singleRetrieve) { const response = @@ -1102,7 +1116,7 @@ class MetadataType { * @param {object[]} urlArray {uri: string, id: string} combo of URL and ID/key of metadata * @param {number} [concurrentRequests] optionally set a different amount of concurrent requests * @param {boolean} [logAmountOfUrls] if true, prints an info message about to-be loaded amount of metadata - * @returns {Promise.<{metadata: (TYPE.MetadataTypeMap | TYPE.MetadataTypeItem), type: string}>} Promise of item map (single item for templated result) + * @returns {Promise.<{metadata: (MetadataTypeMap | MetadataTypeItem), type: string}>} Promise of item map (single item for templated result) */ static async retrieveRESTcollection(urlArray, concurrentRequests = 10, logAmountOfUrls = true) { if (logAmountOfUrls) { @@ -1177,7 +1191,7 @@ class MetadataType { /** * Used to execute a query/automation etc. * - * @param {TYPE.MetadataTypeItem} [metadataEntry] single metadata entry + * @param {MetadataTypeItem} [metadataEntry] single metadata entry * @returns {Promise.<{key:string, response:object}>} metadata key and API response */ static async executeSOAP(metadataEntry) { @@ -1210,7 +1224,7 @@ class MetadataType { * helper for {@link MetadataType.retrieveREST} and {@link MetadataType.retrieveSOAP} * * @param {string|number} [singleRetrieve] key of single item to filter by - * @param {TYPE.MetadataTypeMap} metadataMap saved metadata + * @param {MetadataTypeMap} metadataMap saved metadata * @returns {Promise.} - */ static async runDocumentOnRetrieve(singleRetrieve, metadataMap) { @@ -1239,7 +1253,7 @@ class MetadataType { * * @param {object} body json of response body * @param {string|number} [singleRetrieve] key of single item to filter by - * @returns {TYPE.MetadataTypeMap} keyField => metadata map + * @returns {MetadataTypeMap} keyField => metadata map */ static parseResponseBody(body, singleRetrieve) { const bodyIteratorField = this.definition.bodyIteratorField; @@ -1287,7 +1301,7 @@ class MetadataType { * @example * Removes field (or nested fields childs) that are not updateable * deleteFieldByDefinition(metadataEntry, 'CustomerKey', 'isUpdateable'); - * @param {TYPE.MetadataTypeItem} metadataEntry One entry of a metadataType + * @param {MetadataTypeItem} metadataEntry One entry of a metadataType * @param {string} fieldPath field path to be checked if it conforms to the definition (dot seperated if nested): 'fuu.bar' * @param {'isCreateable'|'isUpdateable'|'retrieving'|'templating'} definitionProperty delete field if definitionProperty equals false for specified field. Options: [isCreateable | isUpdateable] * @param {string} origin string of parent object, required when using arrays as these are parsed slightly differently. @@ -1360,7 +1374,7 @@ class MetadataType { /** * Remove fields from metadata entry that are not createable * - * @param {TYPE.MetadataTypeItem} metadataEntry metadata entry + * @param {MetadataTypeItem} metadataEntry metadata entry * @returns {void} */ static removeNotCreateableFields(metadataEntry) { @@ -1372,7 +1386,7 @@ class MetadataType { /** * Remove fields from metadata entry that are not updateable * - * @param {TYPE.MetadataTypeItem} metadataEntry metadata entry + * @param {MetadataTypeItem} metadataEntry metadata entry * @returns {void} */ static removeNotUpdateableFields(metadataEntry) { @@ -1384,7 +1398,7 @@ class MetadataType { /** * Remove fields from metadata entry that are not needed in the template * - * @param {TYPE.MetadataTypeItem} metadataEntry metadata entry + * @param {MetadataTypeItem} metadataEntry metadata entry * @returns {void} */ static keepTemplateFields(metadataEntry) { @@ -1396,7 +1410,7 @@ class MetadataType { /** * Remove fields from metadata entry that are not needed in the stored metadata * - * @param {TYPE.MetadataTypeItem} metadataEntry metadata entry + * @param {MetadataTypeItem} metadataEntry metadata entry * @returns {void} */ static keepRetrieveFields(metadataEntry) { @@ -1409,7 +1423,7 @@ class MetadataType { * checks if the current metadata entry should be saved on retrieve or not * * @static - * @param {TYPE.MetadataTypeItem} metadataEntry metadata entry + * @param {MetadataTypeItem} metadataEntry metadata entry * @param {boolean} [include] true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude * @returns {boolean} true: skip saving == filtered; false: continue with saving * @memberof MetadataType @@ -1584,11 +1598,11 @@ class MetadataType { /** * Helper for writing Metadata to disk, used for Retrieve and deploy * - * @param {TYPE.MetadataTypeMap} results metadata results from deploy + * @param {MetadataTypeMap} results metadata results from deploy * @param {string} retrieveDir directory where metadata should be stored after deploy/retrieve * @param {string} [overrideType] for use when there is a subtype (such as folder-queries) - * @param {TYPE.TemplateMap} [templateVariables] variables to be replaced in the metadata - * @returns {Promise.} Promise of saved metadata + * @param {TemplateMap} [templateVariables] variables to be replaced in the metadata + * @returns {Promise.} Promise of saved metadata */ static async saveResults(results, retrieveDir, overrideType, templateVariables) { const savedResults = {}; @@ -1749,7 +1763,7 @@ class MetadataType { * searches extracted file for template variable names and applies the market values * * @param {string} code code from extracted code - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @returns {string} code with markets applied */ static applyTemplateValues(code, templateVariables) { @@ -1761,7 +1775,7 @@ class MetadataType { * searches extracted file for template variable values and applies the market variable names * * @param {string} code code from extracted code - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @returns {string} code with markets applied */ static applyTemplateNames(code, templateVariables) { @@ -1774,8 +1788,8 @@ class MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string} targetDir Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} variables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} variables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -1795,8 +1809,8 @@ class MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -1842,8 +1856,8 @@ class MetadataType { * @param {string} templateDir Directory where metadata templates are stored * @param {string | string[]} targetDir (List of) Directory where built definitions will be saved * @param {string} templateName name of the metadata file - * @param {TYPE.TemplateMap} variables variables to be replaced in the metadata - * @returns {Promise.} Promise of item map + * @param {TemplateMap} variables variables to be replaced in the metadata + * @returns {Promise.} Promise of item map */ static async buildDefinition(templateDir, targetDir, templateName, variables) { // retrieve metadata template @@ -1973,7 +1987,7 @@ class MetadataType { /** * Gets metadata cache with limited fields and does not store value to disk * - * @param {TYPE.MetadataTypeMap} [metadata] a list of type definitions + * @param {MetadataTypeMap} [metadata] a list of type definitions * @param {boolean} [isDeploy] used to skip non-supported message during deploy * @returns {void} */ @@ -2133,7 +2147,7 @@ class MetadataType { /** * - * @param {TYPE.MetadataTypeMap} metadataMap metadata mapped by their keyField + * @param {MetadataTypeMap} metadataMap metadata mapped by their keyField * @returns {string[]} list of keys */ static getKeysForFixing(metadataMap) { @@ -2194,11 +2208,11 @@ MetadataType.definition = { type: '', }; /** - * @type {TYPE.SDK} + * @type {SDK} */ MetadataType.client = undefined; /** - * @type {TYPE.Mcdevrc} + * @type {Mcdevrc} */ MetadataType.properties = null; /** @@ -2206,7 +2220,7 @@ MetadataType.properties = null; */ MetadataType.subType = null; /** - * @type {TYPE.BuObject} + * @type {BuObject} */ MetadataType.buObject = null; diff --git a/lib/metadataTypes/MobileCode.js b/lib/metadataTypes/MobileCode.js index 5101af3f8..93cf374d1 100644 --- a/lib/metadataTypes/MobileCode.js +++ b/lib/metadataTypes/MobileCode.js @@ -1,8 +1,20 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * MobileCode MetadataType * @@ -17,7 +29,7 @@ class MobileCode extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { return super.retrieveREST( @@ -31,7 +43,7 @@ class MobileCode extends MetadataType { /** * Retrieves event definition metadata for caching * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache() { return super.retrieveREST(null, '/legacy/v1/beta/mobile/code/'); diff --git a/lib/metadataTypes/MobileKeyword.js b/lib/metadataTypes/MobileKeyword.js index 547151f96..128b33744 100644 --- a/lib/metadataTypes/MobileKeyword.js +++ b/lib/metadataTypes/MobileKeyword.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * MobileKeyword MetadataType * @@ -20,7 +32,7 @@ class MobileKeyword extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise. | void} Promise of metadata + * @returns {Promise. | void} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { try { @@ -50,7 +62,7 @@ class MobileKeyword extends MetadataType { * * @param {object} body json of response body * @param {string|number} [singleRetrieve] key of single item to filter by - * @returns {TYPE.MetadataTypeMap} keyField => metadata map + * @returns {MetadataTypeMap} keyField => metadata map */ static parseResponseBody(body, singleRetrieve) { const bodyIteratorField = this.definition.bodyIteratorField; @@ -99,7 +111,7 @@ class MobileKeyword extends MetadataType { * helper for {@link MobileKeyword.parseResponseBody} that creates a custom key field for this type based on mobileCode and keyword * * @private - * @param {TYPE.MetadataType} metadata single item + * @param {MetadataType} metadata single item */ static #createCustomKeyField(metadata) { metadata.c__codeKeyword = metadata.code.code + '.' + metadata.keyword; @@ -109,7 +121,7 @@ class MobileKeyword extends MetadataType { * helper for {@link MobileKeyword.preDeployTasks} and {@link MobileKeyword.createOrUpdate} to ensure we have code & keyword properly set * * @private - * @param {TYPE.MetadataType} metadata single item + * @param {MetadataType} metadata single item */ static #setCodeAndKeyword(metadata) { const [code, keyword] = metadata.c__codeKeyword.split('.'); @@ -126,11 +138,11 @@ class MobileKeyword extends MetadataType { /** * helper for {@link MetadataType.upsert} * - * @param {TYPE.MetadataTypeMap} metadataMap list of metadata + * @param {MetadataTypeMap} metadataMap list of metadata * @param {string} metadataKey key of item we are looking at * @param {boolean} hasError error flag from previous code - * @param {TYPE.MetadataTypeItemDiff[]} metadataToUpdate list of items to update - * @param {TYPE.MetadataTypeItem[]} metadataToCreate list of items to create + * @param {MetadataTypeItemDiff[]} metadataToUpdate list of items to update + * @param {MetadataTypeItem[]} metadataToCreate list of items to create * @returns {'create' | 'update' | 'skip'} action to take */ static createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) { @@ -154,7 +166,7 @@ class MobileKeyword extends MetadataType { * @param {void} [_] parameter not used * @param {void} [__] parameter not used * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache(_, __, key) { return this.retrieve(null, null, null, key); @@ -165,8 +177,8 @@ class MobileKeyword extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} key name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.} Promise of metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.} Promise of metadata */ static async retrieveAsTemplate(templateDir, key, templateVariables) { try { @@ -224,7 +236,7 @@ class MobileKeyword extends MetadataType { /** * Creates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static create(metadata) { @@ -233,7 +245,7 @@ class MobileKeyword extends MetadataType { /** * Updates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static update(metadata) { @@ -247,8 +259,8 @@ class MobileKeyword extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.CodeExtractItem | TYPE.MetadataTypeItem | void} Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered + * @param {MetadataTypeItem} metadata a single item + * @returns {CodeExtractItem | MetadataTypeItem | void} Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered */ static postRetrieveTasks(metadata) { try { @@ -298,8 +310,8 @@ class MobileKeyword extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -326,8 +338,8 @@ class MobileKeyword extends MetadataType { * @example scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -354,8 +366,8 @@ class MobileKeyword extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @param {'definition'|'template'} mode defines what we use this helper for * @returns {Promise.} list of extracted files with path-parts provided as an array @@ -419,9 +431,9 @@ class MobileKeyword extends MetadataType { /** * prepares an event definition for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single MobileKeyword + * @param {MetadataTypeItem} metadata a single MobileKeyword * @param {string} deployDir directory of deploy files - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async preDeployTasks(metadata, deployDir) { // code @@ -447,7 +459,7 @@ class MobileKeyword extends MetadataType { /** * helper for {@link MetadataType.createREST} * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call * @returns {void} */ @@ -457,7 +469,7 @@ class MobileKeyword extends MetadataType { /** * helper for {@link MetadataType.updateREST} * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call * @returns {void} */ @@ -468,7 +480,7 @@ class MobileKeyword extends MetadataType { /** * helper for {@link MobileKeyword.preDeployTasks} that loads extracted code content back into JSON * - * @param {TYPE.MetadataTypeItem} metadata a single definition + * @param {MetadataTypeItem} metadata a single definition * @param {string} deployDir directory of deploy files * @param {string} [templateName] name of the template used to built defintion (prior applying templating) * @returns {Promise.} content for metadata.script diff --git a/lib/metadataTypes/MobileMessage.js b/lib/metadataTypes/MobileMessage.js index 492be105c..be3300cb9 100644 --- a/lib/metadataTypes/MobileMessage.js +++ b/lib/metadataTypes/MobileMessage.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * MobileMessage MetadataType * @@ -19,7 +31,7 @@ class MobileMessage extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise. | void} Promise of metadata + * @returns {Promise. | void} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { if (key && key.startsWith('id:')) { @@ -53,7 +65,7 @@ class MobileMessage extends MetadataType { * @param {void} [_] parameter not used * @param {void} [__] parameter not used * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache(_, __, key) { return this.retrieve(null, null, null, key); @@ -62,7 +74,7 @@ class MobileMessage extends MetadataType { /** * Updates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static update(metadata) { @@ -76,7 +88,7 @@ class MobileMessage extends MetadataType { /** * Creates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static create(metadata) { @@ -85,7 +97,7 @@ class MobileMessage extends MetadataType { /** * helper for {@link MobileMessage.preDeployTasks} that loads extracted code content back into JSON * - * @param {TYPE.MetadataTypeItem} metadata a single definition + * @param {MetadataTypeItem} metadata a single definition * @param {string} deployDir directory of deploy files * @param {string} [templateName] name of the template used to built defintion (prior applying templating) * @returns {Promise.} code @@ -146,8 +158,8 @@ class MobileMessage extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single query - * @returns {TYPE.CodeExtractItem} Array with one metadata object and one query string + * @param {MetadataTypeItem} metadata a single query + * @returns {CodeExtractItem} Array with one metadata object and one query string */ static postRetrieveTasks(metadata) { // mobileCode @@ -248,9 +260,9 @@ class MobileMessage extends MetadataType { /** * prepares an event definition for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single MobileMessage + * @param {MetadataTypeItem} metadata a single MobileMessage * @param {string} deployDir directory of deploy files - * @returns {TYPE.MetadataTypeItem} Promise + * @returns {MetadataTypeItem} Promise */ static async preDeployTasks(metadata, deployDir) { // mobileCode @@ -306,7 +318,7 @@ class MobileMessage extends MetadataType { /** * helper for {@link MetadataType.createREST} * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call * @returns {void} */ @@ -316,7 +328,7 @@ class MobileMessage extends MetadataType { /** * helper for {@link MetadataType.updateREST} * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call * @returns {void} */ @@ -329,8 +341,8 @@ class MobileMessage extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -357,8 +369,8 @@ class MobileMessage extends MetadataType { * @example scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -385,8 +397,8 @@ class MobileMessage extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @param {'definition'|'template'} mode defines what we use this helper for * @returns {Promise.} list of extracted files with path-parts provided as an array diff --git a/lib/metadataTypes/Query.js b/lib/metadataTypes/Query.js index 1fffc67d2..98ca1a786 100644 --- a/lib/metadataTypes/Query.js +++ b/lib/metadataTypes/Query.js @@ -1,11 +1,29 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import { Util } from '../util/util.js'; import MetadataType from './MetadataType.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; import Mustache from 'mustache'; + +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + +/** + * @typedef {import('../../types/mcdev.d.js').QueryItem} QueryItem + * @typedef {import('../../types/mcdev.d.js').QueryMap} QueryMap + */ + /** * ensure that Mustache does not escape any characters * @@ -29,7 +47,7 @@ class Query extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.<{metadata: TYPE.QueryMap, type: string}>} Promise of metadata + * @returns {Promise.<{metadata: QueryMap, type: string}>} Promise of metadata */ static async retrieve(retrieveDir, _, __, key) { await File.initPrettier('sql'); @@ -109,7 +127,7 @@ class Query extends MetadataType { /** * Retrieves query metadata for caching * - * @returns {Promise.<{metadata: TYPE.QueryMap, type: string}>} Promise of metadata + * @returns {Promise.<{metadata: QueryMap, type: string}>} Promise of metadata */ static async retrieveForCache() { return super.retrieveREST(null, '/automation/v1/queries/'); @@ -120,7 +138,7 @@ class Query extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @returns {Promise.<{metadata: Query, type: string}>} Promise of metadata */ static async retrieveAsTemplate(templateDir, name, templateVariables) { @@ -135,8 +153,8 @@ class Query extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.QueryItem} metadata a single query - * @returns {TYPE.CodeExtractItem} Array with one metadata object and one query string + * @param {QueryItem} metadata a single query + * @returns {CodeExtractItem} Array with one metadata object and one query string */ static postRetrieveTasks(metadata) { // folder @@ -196,7 +214,7 @@ class Query extends MetadataType { /** * Creates a single query * - * @param {TYPE.QueryItem} query a single query + * @param {QueryItem} query a single query * @returns {Promise} Promise */ static create(query) { @@ -207,7 +225,7 @@ class Query extends MetadataType { /** * Updates a single query * - * @param {TYPE.QueryItem} query a single query + * @param {QueryItem} query a single query * @returns {Promise} Promise */ static update(query) { @@ -218,9 +236,9 @@ class Query extends MetadataType { /** * prepares a Query for deployment * - * @param {TYPE.QueryItem} metadata a single query activity + * @param {QueryItem} metadata a single query activity * @param {string} deployDir directory of deploy files - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async preDeployTasks(metadata, deployDir) { // folder @@ -258,7 +276,7 @@ class Query extends MetadataType { * searches extracted SQL file for template variables and applies the market values * * @param {string} code code from extracted code - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @returns {string} code with markets applied */ static applyTemplateValues(code, templateVariables) { @@ -282,8 +300,8 @@ class Query extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.QueryItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {QueryItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -310,8 +328,8 @@ class Query extends MetadataType { * @example queries are saved as 1 json and 1 sql file. both files need to be run through templating * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.QueryItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {QueryItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -338,8 +356,8 @@ class Query extends MetadataType { * @private * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.QueryItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {QueryItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @param {'definition'|'template'} mode defines what we use this helper for * @returns {Promise.} list of extracted files with path-parts provided as an array @@ -460,7 +478,7 @@ class Query extends MetadataType { /** * Gets executed after deployment of metadata type * - * @param {TYPE.MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create + * @param {MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create */ static async postDeployTasks(upsertResults) { if (Util.OPTIONS.execute) { diff --git a/lib/metadataTypes/Role.js b/lib/metadataTypes/Role.js index effa95d40..407a3f670 100644 --- a/lib/metadataTypes/Role.js +++ b/lib/metadataTypes/Role.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * ImportFile MetadataType * @@ -19,7 +31,7 @@ class Role extends MetadataType { * @param {string[]} _ Returns specified fields even if their retrieve definition is not set to true * @param {void} [___] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Metadata store object + * @returns {Promise.} Metadata store object */ static async retrieve(retrieveDir, _, ___, key) { if (retrieveDir && this.buObject.eid !== this.buObject.mid) { @@ -39,7 +51,7 @@ class Role extends MetadataType { rightOperand: false, }, }; - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ if (key) { // move original filter down one level into rightOperand and add key filter into leftOperand const keyFilter = { @@ -110,8 +122,8 @@ class Role extends MetadataType { /** * Gets executed before deploying metadata * - * @param {TYPE.MetadataTypeItem} metadata a single metadata item - * @returns {TYPE.MetadataTypeItem} Promise of a single metadata item + * @param {MetadataTypeItem} metadata a single metadata item + * @returns {MetadataTypeItem} Promise of a single metadata item */ static preDeployTasks(metadata) { if (this.definition.deployBlacklist.includes(metadata.CustomerKey)) { @@ -125,7 +137,7 @@ class Role extends MetadataType { /** * Create a single Role. * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} metadata single metadata entry * @returns {Promise} Promise */ static create(metadata) { @@ -135,7 +147,7 @@ class Role extends MetadataType { /** * Updates a single Role. * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} metadata single metadata entry * @returns {Promise} Promise */ static update(metadata) { @@ -145,7 +157,7 @@ class Role extends MetadataType { /** * Creates markdown documentation of all roles * - * @param {TYPE.MetadataTypeMap} [metadata] role definitions + * @param {MetadataTypeMap} [metadata] role definitions * @returns {Promise.} - */ static async document(metadata) { diff --git a/lib/metadataTypes/Script.js b/lib/metadataTypes/Script.js index 702cdfb33..cac486f54 100644 --- a/lib/metadataTypes/Script.js +++ b/lib/metadataTypes/Script.js @@ -1,10 +1,27 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + +/** + * @typedef {import('../../types/mcdev.d.js').ScriptItem} ScriptItem + * @typedef {import('../../types/mcdev.d.js').ScriptMap} ScriptMap + */ + /** * Script MetadataType * @@ -19,7 +36,7 @@ class Script extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.<{metadata: TYPE.ScriptMap, type: string}>} Promise + * @returns {Promise.<{metadata: ScriptMap, type: string}>} Promise */ static async retrieve(retrieveDir, _, __, key) { await File.initPrettier('ssjs'); @@ -28,7 +45,7 @@ class Script extends MetadataType { /** * Retrieves script metadata for caching * - * @returns {Promise.<{metadata: TYPE.ScriptMap, type: string}>} Promise + * @returns {Promise.<{metadata: ScriptMap, type: string}>} Promise */ static async retrieveForCache() { return super.retrieveREST(null, '/automation/v1/scripts/'); @@ -39,8 +56,8 @@ class Script extends MetadataType { * * @param {string} templateDir Directory where retrieved metadata directory will be saved * @param {string} name name of the metadata file - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata - * @returns {Promise.<{metadata: TYPE.Script, type: string}>} Promise + * @param {TemplateMap} templateVariables variables to be replaced in the metadata + * @returns {Promise.<{metadata: ScriptItem, type: string}>} Promise */ static async retrieveAsTemplate(templateDir, name, templateVariables) { await File.initPrettier('ssjs'); @@ -54,7 +71,7 @@ class Script extends MetadataType { /** * Updates a single Script * - * @param {TYPE.MetadataTypeItem} script a single Script + * @param {MetadataTypeItem} script a single Script * @returns {Promise} Promise */ static update(script) { @@ -64,7 +81,7 @@ class Script extends MetadataType { /** * Creates a single Script * - * @param {TYPE.MetadataTypeItem} script a single Script + * @param {MetadataTypeItem} script a single Script * @returns {Promise} Promise */ static create(script) { @@ -74,7 +91,7 @@ class Script extends MetadataType { /** * helper for {@link Script.preDeployTasks} that loads extracted code content back into JSON * - * @param {TYPE.ScriptItem} metadata a single asset definition + * @param {ScriptItem} metadata a single asset definition * @param {string} deployDir directory of deploy files * @param {string} [templateName] name of the template used to built defintion (prior applying templating) * @returns {Promise.} content for metadata.script @@ -109,9 +126,9 @@ class Script extends MetadataType { /** * prepares a Script for deployment * - * @param {TYPE.ScriptItem} metadata a single script activity definition + * @param {ScriptItem} metadata a single script activity definition * @param {string} dir directory of deploy files - * @returns {TYPE.ScriptItem} Promise + * @returns {ScriptItem} Promise */ static async preDeployTasks(metadata, dir) { // folder @@ -128,8 +145,8 @@ class Script extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.ScriptItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {ScriptItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -156,8 +173,8 @@ class Script extends MetadataType { * @example scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.ScriptItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {ScriptItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -184,8 +201,8 @@ class Script extends MetadataType { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.ScriptItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {ScriptItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @param {'definition'|'template'} mode defines what we use this helper for * @returns {Promise.} list of extracted files with path-parts provided as an array @@ -247,8 +264,8 @@ class Script extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.ScriptItem} metadata a single item - * @returns {TYPE.CodeExtractItem} a single item with code parts extracted + * @param {ScriptItem} metadata a single item + * @returns {CodeExtractItem} a single item with code parts extracted */ static postRetrieveTasks(metadata) { // folder diff --git a/lib/metadataTypes/SendClassification.js b/lib/metadataTypes/SendClassification.js index d71c450e3..9bdc62bd3 100644 --- a/lib/metadataTypes/SendClassification.js +++ b/lib/metadataTypes/SendClassification.js @@ -1,8 +1,20 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * SendClassification MetadataType * @@ -16,10 +28,10 @@ class SendClassification extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = null; if (key) { requestParams = { diff --git a/lib/metadataTypes/TransactionalEmail.js b/lib/metadataTypes/TransactionalEmail.js index 079ccdc58..7f6952ae1 100644 --- a/lib/metadataTypes/TransactionalEmail.js +++ b/lib/metadataTypes/TransactionalEmail.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import TransactionalMessage from './TransactionalMessage.js'; import Journey from './Journey.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * TransactionalEmail MetadataType * @@ -17,7 +29,7 @@ class TransactionalEmail extends TransactionalMessage { /** * Updates a single item * - * @param {TYPE.MetadataTypeItem} metadata how the item shall look after the update + * @param {MetadataTypeItem} metadata how the item shall look after the update * @returns {Promise} Promise */ static update(metadata) { @@ -36,8 +48,8 @@ class TransactionalEmail extends TransactionalMessage { /** * prepares for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} Promise + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} Promise */ static async preDeployTasks(metadata) { // asset @@ -82,7 +94,7 @@ class TransactionalEmail extends TransactionalMessage { /** * helper for {@link TransactionalEmail.createREST} * - * @param {TYPE.MetadataTypeItem} _ not used + * @param {MetadataTypeItem} _ not used * @param {object} apiResponse varies depending on the API call * @returns {void} */ @@ -119,8 +131,8 @@ class TransactionalEmail extends TransactionalMessage { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} a single item + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} a single item */ static postRetrieveTasks(metadata) { // asset diff --git a/lib/metadataTypes/TransactionalMessage.js b/lib/metadataTypes/TransactionalMessage.js index 38ec53694..9f05f562f 100644 --- a/lib/metadataTypes/TransactionalMessage.js +++ b/lib/metadataTypes/TransactionalMessage.js @@ -1,9 +1,21 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * TransactionalMessage MetadataType * @@ -19,7 +31,7 @@ class TransactionalMessage extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieve(retrieveDir, _, __, key) { let keyList; @@ -70,7 +82,7 @@ class TransactionalMessage extends MetadataType { * @param {void} [_] parameter not used * @param {void} [__] parameter not used * @param {string} [key] customer key of single item to cache - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieveForCache(_, __, key) { // the call to /messaging/v1/email/definitions/ does not return definitionId @@ -81,7 +93,7 @@ class TransactionalMessage extends MetadataType { /** * Updates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static update(metadata) { @@ -94,7 +106,7 @@ class TransactionalMessage extends MetadataType { /** * Creates a single item * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @returns {Promise} Promise */ static create(metadata) { diff --git a/lib/metadataTypes/TransactionalPush.js b/lib/metadataTypes/TransactionalPush.js index 90930c6c5..08965b6a8 100644 --- a/lib/metadataTypes/TransactionalPush.js +++ b/lib/metadataTypes/TransactionalPush.js @@ -1,10 +1,22 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import TransactionalMessage from './TransactionalMessage.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * TransactionalPush TransactionalMessage * @@ -16,8 +28,8 @@ class TransactionalPush extends TransactionalMessage { /** * prepares for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} Promise + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} Promise */ static async preDeployTasks(metadata) { // asset @@ -40,8 +52,8 @@ class TransactionalPush extends TransactionalMessage { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem} a single item + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem} a single item */ static postRetrieveTasks(metadata) { // asset diff --git a/lib/metadataTypes/TransactionalSMS.js b/lib/metadataTypes/TransactionalSMS.js index a7cb1adff..09ef81877 100644 --- a/lib/metadataTypes/TransactionalSMS.js +++ b/lib/metadataTypes/TransactionalSMS.js @@ -1,11 +1,23 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import TransactionalMessage from './TransactionalMessage.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * TransactionalSMS MetadataType * @@ -28,9 +40,9 @@ class TransactionalSMS extends TransactionalMessage { /** * prepares for deployment * - * @param {TYPE.MetadataTypeItem} metadata a single item + * @param {MetadataTypeItem} metadata a single item * @param {string} deployDir directory of deploy files - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async preDeployTasks(metadata, deployDir) { // code @@ -67,7 +79,7 @@ class TransactionalSMS extends TransactionalMessage { /** * helper for {@link TransactionalSMS.preDeployTasks} that loads extracted code content back into JSON * - * @param {TYPE.MetadataTypeItem} metadata a single definition + * @param {MetadataTypeItem} metadata a single definition * @param {string} deployDir directory of deploy files * @param {string} [templateName] name of the template used to built defintion (prior applying templating) * @returns {Promise.} content for metadata.script @@ -93,8 +105,8 @@ class TransactionalSMS extends TransactionalMessage { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {Promise.} Array with one metadata object and one ssjs string + * @param {MetadataTypeItem} metadata a single item + * @returns {Promise.} Array with one metadata object and one ssjs string */ static async postRetrieveTasks(metadata) { // extract message body @@ -174,8 +186,8 @@ class TransactionalSMS extends TransactionalMessage { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -202,8 +214,8 @@ class TransactionalSMS extends TransactionalMessage { * @example scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @returns {Promise.} list of extracted files with path-parts provided as an array */ @@ -230,8 +242,8 @@ class TransactionalSMS extends TransactionalMessage { * * @param {string} templateDir Directory where metadata templates are stored * @param {string|string[]} targetDir (List of) Directory where built definitions will be saved - * @param {TYPE.MetadataTypeItem} metadata main JSON file that was read from file system - * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata + * @param {MetadataTypeItem} metadata main JSON file that was read from file system + * @param {TemplateMap} templateVariables variables to be replaced in the metadata * @param {string} templateName name of the template to be built * @param {'definition'|'template'} mode defines what we use this helper for * @returns {Promise.} list of extracted files with path-parts provided as an array diff --git a/lib/metadataTypes/TriggeredSend.js b/lib/metadataTypes/TriggeredSend.js index 737360703..08d9914df 100644 --- a/lib/metadataTypes/TriggeredSend.js +++ b/lib/metadataTypes/TriggeredSend.js @@ -1,6 +1,5 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; @@ -8,6 +7,19 @@ import asset from './Asset.js'; import folder from './Folder.js'; import list from './List.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + /** * MessageSendActivity MetadataType * @@ -21,10 +33,10 @@ class TriggeredSend extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static retrieve(retrieveDir, _, __, key) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ let requestParams = { filter: { leftOperand: 'TriggeredSendStatus', @@ -53,7 +65,7 @@ class TriggeredSend extends MetadataType { /** * Create a single TSD. * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} metadata single metadata entry * @returns {Promise} Promise */ static create(metadata) { @@ -63,7 +75,7 @@ class TriggeredSend extends MetadataType { /** * Updates a single TSD. * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} metadata single metadata entry * @returns {Promise} Promise */ static update(metadata) { @@ -85,8 +97,8 @@ class TriggeredSend extends MetadataType { /** * parses retrieved Metadata before saving * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem | void} Array with one metadata object and one sql string + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem | void} Array with one metadata object and one sql string */ static postRetrieveTasks(metadata) { // remove IsPlatformObject, always has to be 'false' @@ -151,8 +163,8 @@ class TriggeredSend extends MetadataType { /** * prepares a TSD for deployment * - * @param {TYPE.MetadataTypeItem} metadata of a single TSD - * @returns {TYPE.MetadataTypeItem} metadata object + * @param {MetadataTypeItem} metadata of a single TSD + * @returns {MetadataTypeItem} metadata object */ static async preDeployTasks(metadata) { const cachedVersion = cache.getByKey(this.definition.type, metadata.CustomerKey); @@ -235,7 +247,7 @@ class TriggeredSend extends MetadataType { /** * helper for {@link TriggeredSend.refresh} that extracts the keys from the TSD item map and eli * - * @param {TYPE.MetadataTypeMapObj} metadata TSD item map + * @param {MetadataTypeMapObj} metadata TSD item map * @returns {Promise.} keyArr */ static async getKeysForValidTSDs(metadata) { @@ -250,7 +262,7 @@ class TriggeredSend extends MetadataType { * helper for {@link TriggeredSend.refresh} that finds active TSDs on the server and filters it by the same rules that {@link TriggeredSend.retrieve} is using to avoid refreshing TSDs with broken dependencies * * @param {boolean} [assetLoaded] if run after Asset.deploy via --refresh option this will skip caching assets - * @returns {Promise.} Promise of TSD item map + * @returns {Promise.} Promise of TSD item map */ static async findRefreshableItems(assetLoaded = false) { Util.logger.info('Finding refreshable items...'); @@ -294,7 +306,7 @@ class TriggeredSend extends MetadataType { } } // cache ACTIVE triggeredSends from the server - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ const requestParams = { filter: { leftOperand: 'TriggeredSendStatus', @@ -318,7 +330,7 @@ class TriggeredSend extends MetadataType { item[this.definition.keyField] = key; // check triggeredSend-key exists on the server AND its status==ACTIVE if (checkKey) { - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ const requestParams = { filter: { leftOperand: 'CustomerKey', diff --git a/lib/metadataTypes/User.js b/lib/metadataTypes/User.js index 7674b2484..0c1c76040 100644 --- a/lib/metadataTypes/User.js +++ b/lib/metadataTypes/User.js @@ -1,11 +1,30 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataType from './MetadataType.js'; import { Util } from '../util/util.js'; import File from '../util/file.js'; import cache from '../util/cache.js'; +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + +/** + * @typedef {import('../../types/mcdev.d.js').UserDocument} UserDocument + * @typedef {import('../../types/mcdev.d.js').UserDocumentDiff} UserDocumentDiff + * @typedef {import('../../types/mcdev.d.js').UserDocumentMap} UserDocumentMap + * @typedef {import('../../types/mcdev.d.js').UserConfiguration} UserConfiguration + */ + /** * MetadataType * @@ -19,7 +38,7 @@ class User extends MetadataType { * @param {void} _ unused parameter * @param {void} [__] unused parameter * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieve(retrieveDir, _, __, key) { if (this.buObject.eid !== this.buObject.mid) { @@ -31,7 +50,7 @@ class User extends MetadataType { /** * Retrieves import definition metadata for caching * - * @returns {Promise.} Promise + * @returns {Promise.} Promise */ static async retrieveForCache() { return this.retrieve(null); @@ -40,7 +59,7 @@ class User extends MetadataType { /** * Create a single item. * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} metadata single metadata entry * @returns {Promise} Promise */ static async create(metadata) { @@ -54,7 +73,7 @@ class User extends MetadataType { /** * Updates a single item. * - * @param {TYPE.MetadataTypeItem} metadata single metadata entry + * @param {MetadataTypeItem} metadata single metadata entry * @returns {Promise} Promise */ static async update(metadata) { @@ -67,8 +86,8 @@ class User extends MetadataType { /** * prepares a item for deployment * - * @param {TYPE.UserDocument} metadata of a single item - * @returns {TYPE.UserDocument} metadata object + * @param {UserDocument} metadata of a single item + * @returns {UserDocument} metadata object */ static async preDeployTasks(metadata) { metadata.Client = { @@ -198,11 +217,11 @@ class User extends MetadataType { /** * helper for {@link MetadataType.upsert} * - * @param {TYPE.MetadataTypeMap} metadata list of metadata + * @param {MetadataTypeMap} metadata list of metadata * @param {string} metadataKey key of item we are looking at * @param {boolean} hasError error flag from previous code - * @param {TYPE.UserDocumentDiff[]} metadataToUpdate list of items to update - * @param {TYPE.UserDocument[]} metadataToCreate list of items to create + * @param {UserDocumentDiff[]} metadataToUpdate list of items to update + * @param {UserDocument[]} metadataToCreate list of items to create * @returns {void} */ static createOrUpdate(metadata, metadataKey, hasError, metadataToUpdate, metadataToCreate) { @@ -229,9 +248,9 @@ class User extends MetadataType { /** * * @private - * @param {TYPE.MetadataTypeItem} metadata single metadata itme - * @param {TYPE.UserDocumentDiff} [updateItem] item to update - * @param {TYPE.UserDocument} [createItem] item to create + * @param {MetadataTypeItem} metadata single metadata itme + * @param {UserDocumentDiff} [updateItem] item to update + * @param {UserDocument} [createItem] item to create */ static _prepareBuAssignments(metadata, updateItem, createItem) { this.userBUassignments ||= { add: {}, delete: {} }; @@ -274,7 +293,7 @@ class User extends MetadataType { /** * Gets executed after deployment of metadata type * - * @param {TYPE.UserDocumentMap} upsertResults metadata mapped by their keyField + * @param {UserDocumentMap} upsertResults metadata mapped by their keyField * @returns {Promise.} promise */ static async postDeployTasks(upsertResults) { @@ -286,11 +305,11 @@ class User extends MetadataType { * create/update business unit assignments * * @private - * @param {TYPE.UserDocumentMap} upsertResults metadata mapped by their keyField + * @param {UserDocumentMap} upsertResults metadata mapped by their keyField * @returns {void} */ static async _handleBuAssignments(upsertResults) { - /** @type {TYPE.UserConfiguration[]} */ + /** @type {UserConfiguration[]} */ const configs = []; for (const action in this.userBUassignments) { for (const data of Object.entries(this.userBUassignments[action])) { @@ -301,7 +320,7 @@ class User extends MetadataType { } userId = userId.startsWith('key:') ? upsertResults[userId.slice(4)].ID : userId; configs.push( - /** @type {TYPE.UserConfiguration} */ { + /** @type {UserConfiguration} */ { Client: { ID: this.buObject.eid }, ID: userId, BusinessUnitAssignmentConfiguration: { @@ -337,7 +356,7 @@ class User extends MetadataType { const userBUresults = {}; for (const result of configureResults) { if (result.StatusCode === 'OK') { - /** @type {TYPE.UserConfiguration} */ + /** @type {UserConfiguration} */ const config = result.Object; const buArr = config.BusinessUnitAssignmentConfiguration.BusinessUnitIds @@ -395,7 +414,7 @@ class User extends MetadataType { * helper for {@link User.createOrUpdate} * * @private - * @param {TYPE.UserDocument} metadata single created user + * @param {UserDocument} metadata single created user * @returns {void} */ static _setPasswordForNewUser(metadata) { @@ -418,7 +437,7 @@ class User extends MetadataType { * Adding roles works automatically for roles listed on the user * * @private - * @param {TYPE.UserDocumentDiff} item updated user with before and after state + * @param {UserDocumentDiff} item updated user with before and after state * @returns {void} */ static _prepareRoleAssignments(item) { @@ -544,7 +563,7 @@ class User extends MetadataType { /** * Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieveChangelog() { return this._retrieve(); @@ -555,11 +574,11 @@ class User extends MetadataType { * @private * @param {string} retrieveDir Directory where retrieved metadata directory will be saved * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async _retrieve(retrieveDir, key) { this.userIdBuMap = {}; - /** @type {TYPE.SoapRequestParams} */ + /** @type {SoapRequestParams} */ const requestParams = { QueryAllAccounts: true, @@ -594,10 +613,10 @@ class User extends MetadataType { * Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata * * @param {string} retrieveDir Directory where retrieved metadata directory will be saved - * @param {TYPE.SoapRequestParams} [requestParams] required for the specific request (filter for example) + * @param {SoapRequestParams} [requestParams] required for the specific request (filter for example) * @param {string|number} [singleRetrieve] key of single item to filter by * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true - * @returns {Promise.} Promise of item map + * @returns {Promise.} Promise of item map */ static async retrieveSOAP(retrieveDir, requestParams, singleRetrieve, additionalFields) { // to avoid not retrieving roles and userPermissions for users above the 2500 records limit we need to retrieve users twice, once with ActiveFlag=true and once with ActiveFlag=false @@ -743,7 +762,7 @@ class User extends MetadataType { * helper for {@link User.retrieveSOAP} * * @private - * @param {TYPE.SoapRequestParams} [requestParams] required for the specific request (filter for example) + * @param {SoapRequestParams} [requestParams] required for the specific request (filter for example) * @param {string} soapType e.g. AccountUser * @param {string[]} fields list of fields to retrieve * @param {object} resultsBulk actual return value of this method @@ -930,7 +949,7 @@ class User extends MetadataType { /** * Creates markdown documentation of all roles * - * @param {TYPE.MetadataTypeMap} [metadata] user list + * @param {MetadataTypeMap} [metadata] user list * @returns {Promise.} - */ static async document(metadata) { @@ -962,7 +981,7 @@ class User extends MetadataType { this._getBuNames(); /** - * @type {TYPE.UserDocument[]} + * @type {UserDocument[]} */ const users = []; @@ -1096,8 +1115,8 @@ class User extends MetadataType { /** * manages post retrieve steps * - * @param {TYPE.MetadataTypeItem} metadata a single item - * @returns {TYPE.MetadataTypeItem | void} a single item + * @param {MetadataTypeItem} metadata a single item + * @returns {MetadataTypeItem | void} a single item */ static postRetrieveTasks(metadata) { metadata.c__type = 'Installed Package'; diff --git a/lib/metadataTypes/Verification.js b/lib/metadataTypes/Verification.js index 28cfc5ab3..3afa3d979 100644 --- a/lib/metadataTypes/Verification.js +++ b/lib/metadataTypes/Verification.js @@ -2,9 +2,26 @@ import Automation from './Automation.js'; import MetadataType from './MetadataType.js'; -import TYPE from '../../types/mcdev.d.js'; import { Util } from '../util/util.js'; import cache from '../util/cache.js'; + +/** + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + */ + +/** + * @typedef {import('../../types/mcdev.d.js').VerificationItem} VerificationItem + */ + /** * Verification MetadataType * @@ -18,7 +35,7 @@ class Verification extends MetadataType { * @param {void} [_] unused parameter * @param {void} [__] unused parameter * @param {string} key customer key of single item to retrieve - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieve(retrieveDir, _, __, key) { let paramArr = []; @@ -114,7 +131,7 @@ class Verification extends MetadataType { /** * Retrieves Metadata of Data Extract Activity for caching * - * @returns {Promise.} Promise of metadata + * @returns {Promise.} Promise of metadata */ static async retrieveForCache() { return this.retrieve(); @@ -123,7 +140,7 @@ class Verification extends MetadataType { /** * Creates a single Data Extract * - * @param {TYPE.VerificationItem} metadata a single Data Extract + * @param {VerificationItem} metadata a single Data Extract * @returns {Promise} Promise */ static create(metadata) { @@ -133,9 +150,9 @@ class Verification extends MetadataType { /** * helper for {@link MetadataType.createREST} * - * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @param {MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call - * @param {TYPE.MetadataTypeItem} metadataEntryWithAllFields like metadataEntry but before non-creatable fields were stripped + * @param {MetadataTypeItem} metadataEntryWithAllFields like metadataEntry but before non-creatable fields were stripped * @returns {void} */ static async postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) { @@ -164,7 +181,7 @@ class Verification extends MetadataType { /** * Updates a single Data Extract * - * @param {TYPE.VerificationItem} metadata a single Data Extract + * @param {VerificationItem} metadata a single Data Extract * @returns {Promise} Promise */ static update(metadata) { @@ -177,8 +194,8 @@ class Verification extends MetadataType { /** * prepares a verification for deployment * - * @param {TYPE.VerificationItem} metadata a single verification activity definition - * @returns {TYPE.VerificationItem} metadata object + * @param {VerificationItem} metadata a single verification activity definition + * @returns {VerificationItem} metadata object */ static preDeployTasks(metadata) { metadata.targetObjectId = cache.searchForField( @@ -193,8 +210,8 @@ class Verification extends MetadataType { /** * parses retrieved Metadata before saving * - * @param {TYPE.VerificationItem} metadata a single verification activity definition - * @returns {TYPE.VerificationItem} Array with one metadata object and one sql string + * @param {VerificationItem} metadata a single verification activity definition + * @returns {VerificationItem} Array with one metadata object and one sql string */ static postRetrieveTasks(metadata) { try { diff --git a/lib/util/auth.js b/lib/util/auth.js index 3bf665138..025f5c220 100644 --- a/lib/util/auth.js +++ b/lib/util/auth.js @@ -1,8 +1,28 @@ -import TYPE from '../../types/mcdev.d.js'; import { Util } from './util.js'; import File from './file.js'; import SDK from 'sfmc-sdk'; import Conf from 'conf'; + +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + const credentialStore = new Conf({ projectName: 'mcdev', configName: 'sessions', @@ -15,7 +35,7 @@ const Auth = { /** * For each business unit, set up base credentials to be used. * - * @param {TYPE.AuthObject} authObject details for + * @param {AuthObject} authObject details for * @param {string} credential of the instance * @returns {void} */ @@ -52,7 +72,7 @@ const Auth = { /** * Returns an SDK instance to be used for API calls * - * @param {TYPE.BuObject} buObject information about current context + * @param {BuObject} buObject information about current context * @returns {SDK} auth object */ getSDK(buObject) { @@ -88,7 +108,7 @@ const Auth = { * Returns an SDK instance to be used for API calls * * @param {string} sessionKey key for specific BU - * @param {TYPE.AuthObject} authObject credentials for specific BU + * @param {AuthObject} authObject credentials for specific BU * @returns {SDK} auth object */ function setupSDK(sessionKey, authObject) { diff --git a/lib/util/businessUnit.js b/lib/util/businessUnit.js index b26e010fc..befd82062 100644 --- a/lib/util/businessUnit.js +++ b/lib/util/businessUnit.js @@ -1,10 +1,29 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import { Util } from './util.js'; import File from './file.js'; import auth from './auth.js'; +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * Helper that handles retrieval of BU info */ @@ -12,7 +31,7 @@ const BusinessUnit = { /** * Refreshes BU names and ID's from MC instance * - * @param {TYPE.Mcdevrc} properties current properties that have to be refreshed + * @param {Mcdevrc} properties current properties that have to be refreshed * @param {string} credentialsName identifying name of the installed package / project * @returns {Promise.} success of refresh */ diff --git a/lib/util/cache.js b/lib/util/cache.js index f7a133f5b..bcbfb8443 100644 --- a/lib/util/cache.js +++ b/lib/util/cache.js @@ -1,7 +1,27 @@ -import TYPE from '../../types/mcdev.d.js'; import { Util } from './util.js'; -/** @type {TYPE.Cache} */ +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + +/** @type {Cache} */ const dataStore = {}; let currentMID = null; @@ -10,7 +30,7 @@ export default { * Method to setup buObject * NOTE: in future this may need to restore, rather than wipe the cache * - * @param {TYPE.BuObject} buObject for current Business unit + * @param {BuObject} buObject for current Business unit * @returns {void} */ initCache: (buObject) => { @@ -28,7 +48,7 @@ export default { /** * return entire cache for current MID * - * @returns {TYPE.MultiMetadataTypeMap} cache for one Business Unit + * @returns {MultiMetadataTypeMap} cache for one Business Unit */ getCache: () => dataStore[currentMID], @@ -48,16 +68,16 @@ export default { /** * return a specific item from cache * - * @param {TYPE.SupportedMetadataTypes} type of Metadata to retrieve from cache + * @param {SupportedMetadataTypes} type of Metadata to retrieve from cache * @param {string} key of the specific metadata - * @returns {TYPE.MetadataTypeItem} cached metadata item + * @returns {MetadataTypeItem} cached metadata item */ getByKey: (type, key) => dataStore[currentMID]?.[type]?.[key], /** * override cache for given metadata type with new data * - * @param {TYPE.SupportedMetadataTypes} type of Metadata to retrieve from cache - * @param {TYPE.MetadataTypeMap} metadataMap map to be set + * @param {SupportedMetadataTypes} type of Metadata to retrieve from cache + * @param {MetadataTypeMap} metadataMap map to be set * @returns {void} */ setMetadata: (type, metadataMap) => { @@ -66,8 +86,8 @@ export default { /** * merges entire metadata type with existing cache * - * @param {TYPE.SupportedMetadataTypes} type of Metadata to retrieve from cache - * @param {TYPE.MetadataTypeMap} metadataMap map to be merged + * @param {SupportedMetadataTypes} type of Metadata to retrieve from cache + * @param {MetadataTypeMap} metadataMap map to be merged * @param {number} overrideMID which should be used for merging * @returns {void} */ @@ -85,7 +105,7 @@ export default { /** * standardized method for getting data from cache. * - * @param {TYPE.SupportedMetadataTypes} metadataType metadata type ie. query + * @param {SupportedMetadataTypes} metadataType metadata type ie. query * @param {string|number|boolean} searchValue unique identifier of metadata being looked for * @param {string} searchField field name (key in object) which contains the unique identifer * @param {string} returnField field which should be returned diff --git a/lib/util/cli.js b/lib/util/cli.js index cceeb4616..fd2c4675b 100644 --- a/lib/util/cli.js +++ b/lib/util/cli.js @@ -1,6 +1,5 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import BuHelper from './businessUnit.js'; import File from './file.js'; import config from './config.js'; @@ -12,6 +11,27 @@ import 'console.table'; import MetadataTypeInfo from './../MetadataTypeInfo.js'; import TransactionalMessage from './../metadataTypes/TransactionalMessage.js'; +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * CLI helper class */ @@ -35,7 +55,7 @@ const Cli = { /** * Extends template file for properties.json * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @returns {Promise.} status */ async addExtraCredential(properties) { @@ -58,8 +78,8 @@ const Cli = { /** * - * @param {TYPE.SupportedMetadataTypes} type limit execution to given metadata type - * @param {TYPE.SupportedMetadataTypes[]} dependentTypes types that depent on type + * @param {SupportedMetadataTypes} type limit execution to given metadata type + * @param {SupportedMetadataTypes[]} dependentTypes types that depent on type * @returns {Promise.} true if user wants to continue with retrieve */ async postFixKeysReretrieve(type, dependentTypes) { @@ -98,7 +118,7 @@ const Cli = { /** * helper that logs to cli which credentials are already existing in our config file * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @returns {void} */ logExistingCredentials(properties) { @@ -113,7 +133,7 @@ const Cli = { * Extends template file for properties.json * update credentials * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @param {string} credName name of credential that needs updating * @returns {Promise.} success of update */ @@ -129,11 +149,11 @@ const Cli = { /** * Returns Object with parameters required for accessing API * - * @param {TYPE.Mcdevrc} properties object of all configuration including credentials + * @param {Mcdevrc} properties object of all configuration including credentials * @param {string} target code of BU to use * @param {boolean|string} [isCredentialOnly] true:don't ask for BU | string: name of BU * @param {boolean} [allowAll] Offer ALL as option in BU selection - * @returns {Promise.} credential to be used for Business Unit + * @returns {Promise.} credential to be used for Business Unit */ async getCredentialObject(properties, target, isCredentialOnly, allowAll) { try { @@ -196,7 +216,7 @@ const Cli = { /** * helps select the right credential in case of bad initial input * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @param {string} [credential] name of valid credential * @param {boolean} [isCredentialOnly] don't ask for BU if true * @param {boolean} [allowAll] Offer ALL as option in BU selection @@ -276,7 +296,7 @@ const Cli = { /** * helper around _askCredentials * - * @param {TYPE.Mcdevrc} properties from config file + * @param {Mcdevrc} properties from config file * @param {string} [credName] name of credential that needs updating * @returns {Promise.} success of refresh or credential name */ @@ -341,7 +361,7 @@ const Cli = { /** * helper for {@link Cli.addExtraCredential} * - * @param {TYPE.Mcdevrc} properties from config file + * @param {Mcdevrc} properties from config file * @param {string} [credName] name of credential that needs updating * @returns {Promise.} credential info */ @@ -432,7 +452,7 @@ const Cli = { /** * allows updating the metadata types that shall be retrieved * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @param {string[]} [setTypesArr] skip user prompt and overwrite with this list if given * @returns {Promise.} - */ diff --git a/lib/util/config.js b/lib/util/config.js index b5a33918d..e2db17b2b 100644 --- a/lib/util/config.js +++ b/lib/util/config.js @@ -1,4 +1,3 @@ -import TYPE from '../../types/mcdev.d.js'; import { Util } from './util.js'; import File from './file.js'; import inquirer from 'inquirer'; @@ -7,6 +6,27 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * Central class for loading and validating properties from config and auth */ @@ -18,7 +38,7 @@ const config = { * * @param {boolean} [silent] omit throwing errors and print messages; assuming not silent if not set * @param {boolean} [isInit] don't tell the user to run init - * @returns {Promise.} central properties object + * @returns {Promise.} central properties object */ async getProperties(silent, isInit) { if (config.properties) { @@ -81,7 +101,7 @@ const config = { /** * check if the config file is correctly formatted and has values * - * @param {TYPE.Mcdevrc} properties javascript object in .mcdevrc.json + * @param {Mcdevrc} properties javascript object in .mcdevrc.json * @param {boolean} [silent] set to true for internal use w/o cli output * @returns {Promise.} file structure ok OR list of fields to be fixed */ @@ -285,7 +305,7 @@ const config = { * defines how the properties.json should look like * used for creating a template and for checking if variables are set * - * @returns {Promise.} default properties + * @returns {Promise.} default properties */ async getDefaultProperties() { const configFileName = path.resolve(__dirname, Util.boilerplateDirectory, 'config.json'); diff --git a/lib/util/devops.js b/lib/util/devops.js index 7589ad05b..a503fa0f2 100644 --- a/lib/util/devops.js +++ b/lib/util/devops.js @@ -1,4 +1,3 @@ -import TYPE from '../../types/mcdev.d.js'; import File from './file.js'; import path from 'node:path'; import inquirer from 'inquirer'; @@ -9,21 +8,42 @@ const git = gitFactory(); import Builder from '../Builder.js'; import MetadataType from '../MetadataTypeInfo.js'; import jsonToTable from 'json-to-table'; + /** - * DevOps helper class + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo */ +/** + * DevOps helper class + */ const DevOps = { /** * Extracts the delta between a commit and the current state for deployment. * Interactive commit selection if no commits are passed. * - * @param {TYPE.Mcdevrc} properties central properties object + * @param {Mcdevrc} properties central properties object * @param {string} [range] git commit range * @param {boolean} [saveToDeployDir] if true, copy metadata changes into deploy directory * @param {string} [filterPaths] filter file paths that start with any specified path (comma separated) * @param {number} [commitHistory] cli option to override default commit history value in config - * @returns {Promise.} - + * @returns {Promise.} - */ async getDeltaList(properties, range, saveToDeployDir, filterPaths, commitHistory) { const rangeUserInput = range; @@ -77,11 +97,11 @@ const DevOps = { move: 0, }; /** - * @type {TYPE.DeltaPkgItem[]} + * @type {DeltaPkgItem[]} */ const delta = (await git.diffSummary([range])).files // populate additional info for all changed files - .map((/** @type {TYPE.DeltaPkgItem} */ file) => { + .map((/** @type {DeltaPkgItem} */ file) => { // If file was moved it's path needs to be parsed file.moved = file.file.includes('=>'); if (file.moved) { @@ -117,7 +137,7 @@ const DevOps = { .filter((file) => !file.file.endsWith('.error.log')) .filter((file) => !file.file.endsWith('.md')) // ensure badly named files on unsupported metadata types are not in our subset - .filter((/** @type {TYPE.DeltaPkgItem} */ file) => { + .filter((/** @type {DeltaPkgItem} */ file) => { if (MetadataType[file.type]) { return true; } else { @@ -127,7 +147,7 @@ const DevOps = { return false; } }) - .map((/** @type {TYPE.DeltaPkgItem} */ file) => { + .map((/** @type {DeltaPkgItem} */ file) => { // Gets external key based on file name und the assumption that filename = externalKey if (file.type === 'folder') { file.externalKey = null; @@ -221,7 +241,7 @@ const DevOps = { if (saveToDeployDir) { // if templating is not used, we need to add related files to the delta package const typeKeysMap = {}; - /** @type {Object.} */ + /** @type {Object.} */ const buObjects = {}; for (const file of delta) { if (file.gitAction === 'delete' || file.type === 'folder') { @@ -293,7 +313,7 @@ const DevOps = { } } - /** @type {TYPE.DeltaPkgItem[]} */ + /** @type {DeltaPkgItem[]} */ const copied = delta .filter((file) => !file.file.endsWith('.md')) // filter documentation files .map((file) => @@ -337,11 +357,11 @@ const DevOps = { /** * wrapper around DevOps.getDeltaList, Builder.buildTemplate and M * - * @param {TYPE.Mcdevrc} properties project config file + * @param {Mcdevrc} properties project config file * @param {string} range git commit range - * @param {TYPE.DeltaPkgItem[]} [diffArr] instead of running git diff the method can also get a list of files to process + * @param {DeltaPkgItem[]} [diffArr] instead of running git diff the method can also get a list of files to process * @param {number} [commitHistory] cli option to override default commit history value in config - * @returns {Promise.} - + * @returns {Promise.} - */ async buildDeltaDefinitions(properties, range, diffArr, commitHistory) { const skipInteraction = Util.skipInteraction; @@ -354,7 +374,7 @@ const DevOps = { return; } const sourceMarketListArr = Object.keys(properties.options.deployment.sourceTargetMapping); - /** @type {TYPE.DeltaPkgItem[]} */ + /** @type {DeltaPkgItem[]} */ const deltaDeployAll = []; for (const sourceML of sourceMarketListArr) { // check if sourceTargetMapping has valid values @@ -558,8 +578,8 @@ const DevOps = { * should return only the json for all but asset, query and script that are saved as multiple files * additionally, the documentation for dataExtension and automation should be returned * - * @param {TYPE.Mcdevrc} properties central properties object - * @param {TYPE.BuObject} buObject references credentials + * @param {Mcdevrc} properties central properties object + * @param {BuObject} buObject references credentials * @param {string} metadataType metadata type to build * @param {string[]} keyArr customerkey of the metadata * @returns {Promise.} list of all files that need to be committed in a flat array ['path/file1.ext', 'path/file2.ext'] diff --git a/lib/util/file.js b/lib/util/file.js index a3010350f..cdbd34186 100644 --- a/lib/util/file.js +++ b/lib/util/file.js @@ -1,7 +1,6 @@ /* eslint-disable no-control-regex */ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import fs from 'fs-extra'; import path from 'node:path'; @@ -10,6 +9,27 @@ import beautyAmp from 'beauty-amp-core2'; import { Util } from './util.js'; import updateNotifier from 'update-notifier'; +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + // inform user when there is an update const notifier = updateNotifier({ pkg: Util.packageJsonMcdev, @@ -165,7 +185,7 @@ const File = { * @param {string} filename name of the file without suffix * @param {string} filetype filetype ie. JSON or SSJS * @param {string} content filecontent - * @param {TYPE.TemplateMap} [templateVariables] templating variables to be replaced in the metadata + * @param {TemplateMap} [templateVariables] templating variables to be replaced in the metadata * @returns {Promise.} Promise */ writePrettyToFile: async function (directory, filename, filetype, content, templateVariables) { @@ -502,7 +522,7 @@ const File = { /** * helper that splits the config back into auth & config parts to save them separately * - * @param {TYPE.Mcdevrc} properties central properties object + * @param {Mcdevrc} properties central properties object * @returns {Promise.} - */ async saveConfigFile(properties) { diff --git a/lib/util/init.config.js b/lib/util/init.config.js index a8309d4d1..fde858d7e 100644 --- a/lib/util/init.config.js +++ b/lib/util/init.config.js @@ -1,6 +1,5 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import Cli from './cli.js'; import File from './file.js'; import config from './config.js'; @@ -11,6 +10,27 @@ import semver from 'semver'; import { fileURLToPath } from 'node:url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * CLI helper class */ @@ -19,7 +39,7 @@ const Init = { /** * helper method for this.upgradeProject that upgrades project config if needed * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @returns {Promise.} returns true if worked without errors */ async fixMcdevConfig(properties) { diff --git a/lib/util/init.js b/lib/util/init.js index 6ee716537..05d7b0100 100644 --- a/lib/util/init.js +++ b/lib/util/init.js @@ -1,5 +1,4 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import Cli from './cli.js'; import File from './file.js'; import config from './config.js'; @@ -11,6 +10,27 @@ import { Util } from './util.js'; import fs from 'node:fs'; import path from 'node:path'; +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * CLI helper class */ @@ -19,7 +39,7 @@ const Init = { /** * Creates template file for properties.json * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @param {string} credentialName identifying name of the installed package / project * @returns {Promise.} - */ @@ -374,7 +394,7 @@ const Init = { /** * wrapper around npm dependency & configuration file setup * - * @param {TYPE.Mcdevrc} properties config file's json + * @param {Mcdevrc} properties config file's json * @param {boolean} [initial] print message if not part of initial setup * @param {string} [repoName] if git URL was provided earlier, the repo name was extracted to use it for npm init * @returns {Promise.} success flag @@ -477,7 +497,7 @@ const Init = { * finds credentials that are set up in config but not in auth file * * @private - * @param {TYPE.Mcdevrc} properties javascript object in .mcdevrc.json + * @param {Mcdevrc} properties javascript object in .mcdevrc.json * @returns {string[]} list of credential names */ _getMissingCredentials(properties) { diff --git a/lib/util/util.js b/lib/util/util.js index 25dfe15c1..04caa2317 100644 --- a/lib/util/util.js +++ b/lib/util/util.js @@ -1,6 +1,5 @@ 'use strict'; -import TYPE from '../../types/mcdev.d.js'; import MetadataDefinitions from './../MetadataTypeDefinitions.js'; import process from 'node:process'; import toposort from 'toposort'; @@ -12,6 +11,29 @@ import { readJsonSync } from 'fs-extra/esm'; import { fileURLToPath } from 'node:url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); +/** + * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject + * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject + * @typedef {import('../../types/mcdev.d.js').Cache} Cache + * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract + * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem + * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem + * @typedef {import('../../types/mcdev.d.js').Logger} Logger + * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff + * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList + * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap + * @typedef {import('../../types/mcdev.d.js').skipInteraction} skipInteraction + * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams + * @typedef {import('../../types/mcdev.d.js').SupportedMetadataTypes} SupportedMetadataTypes + * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap + * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo + */ + /** * Util that contains logger and simple util methods */ @@ -21,7 +43,7 @@ export const Util = { configFileName: '.mcdevrc.json', parentBuName: '_ParentBU_', standardizedSplitChar: '/', - /** @type {TYPE.skipInteraction} */ + /** @type {skipInteraction} */ skipInteraction: false, packageJsonMcdev: readJsonSync(path.join(__dirname, '../../package.json')), OPTIONS: {}, @@ -68,7 +90,7 @@ export const Util = { * check if a market name exists in current mcdev config * * @param {string} market market localizations - * @param {TYPE.Mcdevrc} properties local mcdev config + * @param {Mcdevrc} properties local mcdev config * @returns {boolean} found market or not */ checkMarket(market, properties) { @@ -89,7 +111,7 @@ export const Util = { * ensure provided MarketList exists and it's content including markets and BUs checks out * * @param {string} mlName name of marketList - * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve + * @param {Mcdevrc} properties General configuration to be used in retrieve */ verifyMarketList(mlName, properties) { if (properties.marketList[mlName]) { @@ -162,7 +184,7 @@ export const Util = { /** * helper for Mcdev.retrieve, Mcdev.retrieveAsTemplate and Mcdev.deploy * - * @param {TYPE.SupportedMetadataTypes} selectedType type or type-subtype + * @param {SupportedMetadataTypes} selectedType type or type-subtype * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method * @returns {boolean} type ok or not */ @@ -206,7 +228,7 @@ export const Util = { /** * helper for getDefaultProperties() * - * @returns {TYPE.SupportedMetadataTypes[]} type choices + * @returns {SupportedMetadataTypes[]} type choices */ getRetrieveTypeChoices() { const typeChoices = []; @@ -311,7 +333,7 @@ export const Util = { /** * Logger that creates timestamped log file in 'logs/' directory * - * @type {TYPE.Logger} + * @type {Logger} */ logger: null, /** @@ -430,7 +452,7 @@ export const Util = { * key-value pairs (obj) * * @param {string | object} str JSON object or its stringified version, which has values to be replaced - * @param {TYPE.TemplateMap} obj key value object which contains keys to be replaced and values to be replaced with + * @param {TemplateMap} obj key value object which contains keys to be replaced and values to be replaced with * @returns {string | object} replaced version of str */ replaceByObject: function (str, obj) { @@ -632,10 +654,10 @@ export const Util = { /** * standardize check to ensure only one result is returned from template search * - * @param {TYPE.MetadataTypeItem[]} results array of metadata + * @param {MetadataTypeItem[]} results array of metadata * @param {string} keyToSearch the field which contains the searched value * @param {string} searchValue the value which is being looked for - * @returns {TYPE.MetadataTypeItem} metadata to be used in building template + * @returns {MetadataTypeItem} metadata to be used in building template */ templateSearchResult(results, keyToSearch, searchValue) { const matching = results.filter((item) => item[keyToSearch] === searchValue); @@ -851,7 +873,7 @@ export const Util = { /** * returns true if no LIKE filter is defined or if all filters match * - * @param {TYPE.MetadataTypeItem} metadata a single metadata item + * @param {MetadataTypeItem} metadata a single metadata item * @param {object} [filters] only used in recursive calls * @returns {boolean} true if no LIKE filter is defined or if all filters match */ diff --git a/package-lock.json b/package-lock.json index 69daffa48..992acc09b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,7 +48,6 @@ "eslint-plugin-unicorn": "51.0.1", "fast-xml-parser": "4.3.6", "husky": "9.0.11", - "jsdoc-to-markdown": "8.0.1", "lint-staged": "15.2.2", "mocha": "10.4.0", "mock-fs": "5.2.0", @@ -253,18 +252,6 @@ "node": ">=4" } }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -460,18 +447,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jsdoc/salty": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.1.tgz", - "integrity": "sha512-JXwylDNSHa549N9uceDYu8D4GMXwSo3H8CCPYEQqxhhHpxD28+lRl2b3bS/caaPj5w1YD3SWtrficJNTnUjGpg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", @@ -609,28 +584,6 @@ "optional": true, "peer": true }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", - "dev": true - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dev": true, - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", @@ -844,27 +797,6 @@ "node": ">=6" } }, - "node_modules/ansi-escape-sequences": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", - "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==", - "dev": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ansi-escape-sequences/node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -942,15 +874,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "dev": true, - "engines": { - "node": ">=12.17" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -1122,12 +1045,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "node_modules/boxen": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", @@ -1364,29 +1281,6 @@ "node": ">=14.14.0" } }, - "node_modules/cache-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-2.0.0.tgz", - "integrity": "sha512-4gkeHlFpSKgm3vm2gJN5sPqfmijYRFYCQ6tv5cLw0xVmT6r1z1vd4FNnpuOREco3cBs1G709sZ72LdgddKvL5w==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "fs-then-native": "^2.0.0", - "mkdirp2": "^1.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cache-point/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -1449,18 +1343,6 @@ } ] }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/chai": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.0.tgz", @@ -1716,19 +1598,6 @@ "node": ">=0.8" } }, - "node_modules/collect-all": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.4.tgz", - "integrity": "sha512-RKZhRwJtJEP5FWul+gkSMEnaK6H3AGPTTWOiRimCcs+rc/OmQE3Yhy1Q7A7KsdkG3ZXVdZq68Y6ONSdvkeEcKA==", - "dev": true, - "dependencies": { - "stream-connect": "^1.0.2", - "stream-via": "^1.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", @@ -1807,94 +1676,6 @@ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-args/node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/command-line-args/node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-tool": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.8.0.tgz", - "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==", - "dev": true, - "dependencies": { - "ansi-escape-sequences": "^4.0.0", - "array-back": "^2.0.0", - "command-line-args": "^5.0.0", - "command-line-usage": "^4.1.0", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-tool/node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz", - "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==", - "dev": true, - "dependencies": { - "ansi-escape-sequences": "^4.0.0", - "array-back": "^2.0.0", - "table-layout": "^0.4.2", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", @@ -1913,15 +1694,6 @@ "node": ">= 12.0.0" } }, - "node_modules/common-sequence": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-2.0.2.tgz", - "integrity": "sha512-jAg09gkdkrDO9EWTdXfv80WWH3yeZl5oT69fGfedBNS9pXUKYInVJ1bJ+/ht2+Moeei48TmSbQDYMc8EOx9G0g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -1968,24 +1740,6 @@ "proto-list": "~1.2.1" } }, - "node_modules/config-master": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz", - "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=", - "dev": true, - "dependencies": { - "walk-back": "^2.0.1" - } - }, - "node_modules/config-master/node_modules/walk-back": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", - "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/configstore": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", @@ -2256,29 +2010,6 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "node_modules/dmd": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dmd/-/dmd-6.2.0.tgz", - "integrity": "sha512-uXWxLF1H7TkUAuoHK59/h/ts5cKavm2LnhrIgJWisip4BVzPoXavlwyoprFFn2CzcahKYgvkfaebS6oxzgflkg==", - "dev": true, - "dependencies": { - "array-back": "^6.2.2", - "cache-point": "^2.0.0", - "common-sequence": "^2.0.2", - "file-set": "^4.0.2", - "handlebars": "^4.7.7", - "marked": "^4.2.3", - "object-get": "^2.1.1", - "reduce-flatten": "^3.0.1", - "reduce-unique": "^2.0.1", - "reduce-without": "^1.0.1", - "test-value": "^3.0.0", - "walk-back": "^5.1.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2345,15 +2076,6 @@ "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/env-paths": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", @@ -3010,28 +2732,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-set": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/file-set/-/file-set-4.0.2.tgz", - "integrity": "sha512-fuxEgzk4L8waGXaAkd8cMr73Pm0FxOVkn8hztzUW7BAHhOGH90viQNXbiOsnecCWmfInqU6YmAMwxRMdKETceQ==", - "dev": true, - "dependencies": { - "array-back": "^5.0.0", - "glob": "^7.1.6" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/file-set/node_modules/array-back": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz", - "integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3044,27 +2744,6 @@ "node": ">=8" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-replace/node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3260,15 +2939,6 @@ "node": ">=14.14" } }, - "node_modules/fs-then-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz", - "integrity": "sha512-X712jAOaWXkemQCAmWeg5rOT2i+KOpWz1Z/txk/cW0qlOu2oQ9H61vc5w3X/iyuUEfq/OyaFJ78/cZAQD1/bgA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3496,27 +3166,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4450,101 +4099,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsdoc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.0.tgz", - "integrity": "sha512-tzTgkklbWKrlaQL2+e3NNgLcZu3NaK2vsHRx7tyHQ+H5jcB9Gx0txSd2eJWlMC/xU1+7LQu4s58Ry0RkuaEQVg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.9.4", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc-api": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-8.0.0.tgz", - "integrity": "sha512-Rnhor0suB1Ds1abjmFkFfKeD+kSMRN9oHMTMZoJVUrmtCGDwXty+sWMA9sa4xbe4UyxuPjhC7tavZ40mDKK6QQ==", - "dev": true, - "dependencies": { - "array-back": "^6.2.2", - "cache-point": "^2.0.0", - "collect-all": "^1.0.4", - "file-set": "^4.0.2", - "fs-then-native": "^2.0.0", - "jsdoc": "^4.0.0", - "object-to-spawn-args": "^2.0.1", - "temp-path": "^1.0.0", - "walk-back": "^5.1.0" - }, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/jsdoc-parse": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-6.2.1.tgz", - "integrity": "sha512-9viGRUUtWOk/G4V0+nQ6rfLucz5plxh5I74WbNSNm9h9NWugCDVX4jbG8hZP9QqKGpdTPDE+qJXzaYNos3wqTA==", - "dev": true, - "dependencies": { - "array-back": "^6.2.2", - "lodash.omit": "^4.5.0", - "reduce-extract": "^1.0.0", - "sort-array": "^4.1.5", - "test-value": "^3.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdoc-to-markdown": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-8.0.1.tgz", - "integrity": "sha512-qJfNJhkq2C26UYoOdj8L1yheTJlk1veCsxwRejRmj07XZKCn7oSkuPErx6+JoNi8afCaUKdIM5oUu0uF2/T8iw==", - "dev": true, - "dependencies": { - "array-back": "^6.2.2", - "command-line-tool": "^0.8.0", - "config-master": "^3.1.0", - "dmd": "^6.2.0", - "jsdoc-api": "^8.0.0", - "jsdoc-parse": "^6.2.1", - "walk-back": "^5.1.0" - }, - "bin": { - "jsdoc2md": "bin/cli.js" - }, - "engines": { - "node": ">=12.17" - } - }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", @@ -4554,15 +4108,6 @@ "node": ">=12.0.0" } }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -4619,15 +4164,6 @@ "jsox": "lib/cli.js" } }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -4881,15 +4417,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, "node_modules/lint-staged": { "version": "15.2.2", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", @@ -5054,30 +4581,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", - "dev": true - }, - "node_modules/lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", - "dev": true - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -5406,50 +4915,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", - "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", - "dev": true, - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/marked": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz", - "integrity": "sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -5543,24 +5008,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.5.tgz", - "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==", - "dev": true - }, "node_modules/mocha": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", @@ -5743,12 +5190,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6004,12 +5445,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-get": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.1.tgz", - "integrity": "sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==", - "dev": true - }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -6041,15 +5476,6 @@ "node": ">= 0.4" } }, - "node_modules/object-to-spawn-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-2.0.1.tgz", - "integrity": "sha512-6FuKFQ39cOID+BMZ3QaphcC8Y4cw6LXBLyIgPU+OhIYwviJamPAn+4mITapnSBQrejB+NNp+FMskhD8Cq+Ys3w==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -6678,98 +6104,6 @@ "node": ">=8.10.0" } }, - "node_modules/reduce-extract": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/reduce-extract/-/reduce-extract-1.0.0.tgz", - "integrity": "sha512-QF8vjWx3wnRSL5uFMyCjDeDc5EBMiryoT9tz94VvgjKfzecHAVnqmXAwQDcr7X4JmLc2cjkjFGCVzhMqDjgR9g==", - "dev": true, - "dependencies": { - "test-value": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reduce-extract/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/reduce-extract/node_modules/test-value": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz", - "integrity": "sha512-wrsbRo7qP+2Je8x8DsK8ovCGyxe3sYfQwOraIY/09A2gFXU9DYKiTF14W4ki/01AEh56kMzAmlj9CaHGDDUBJA==", - "dev": true, - "dependencies": { - "array-back": "^1.0.2", - "typical": "^2.4.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reduce-flatten": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-3.0.1.tgz", - "integrity": "sha512-bYo+97BmUUOzg09XwfkwALt4PQH1M5L0wzKerBt6WLm3Fhdd43mMS89HiT1B9pJIqko/6lWx3OnV4J9f2Kqp5Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/reduce-unique": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-2.0.1.tgz", - "integrity": "sha512-x4jH/8L1eyZGR785WY+ePtyMNhycl1N2XOLxhCbzZFaqF4AXjLzqSxa2UHgJ2ZVR/HHyPOvl1L7xRnW8ye5MdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/reduce-without": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduce-without/-/reduce-without-1.0.1.tgz", - "integrity": "sha512-zQv5y/cf85sxvdrKPlfcRzlDn/OqKFThNimYmsS3flmkioKvkUGn2Qg9cJVoQiEvdxFGLE0MQER/9fZ9sUqdxg==", - "dev": true, - "dependencies": { - "test-value": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/reduce-without/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/reduce-without/node_modules/test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", - "dev": true, - "dependencies": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp-tree": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", @@ -6838,15 +6172,6 @@ "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", "dev": true }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -7201,46 +6526,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sort-array": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-4.1.5.tgz", - "integrity": "sha512-Ya4peoS1fgFN42RN1REk2FgdNOeLIEMKFGJvs7VTP3OklF8+kl2SkpVliZ4tk/PurWsrWRsdNdU+tgyOBkB9sA==", - "dev": true, - "dependencies": { - "array-back": "^5.0.0", - "typical": "^6.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sort-array/node_modules/array-back": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-5.0.0.tgz", - "integrity": "sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/sort-array/node_modules/typical": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-6.0.1.tgz", - "integrity": "sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -7305,39 +6590,6 @@ "node": ">= 0.4" } }, - "node_modules/stream-connect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz", - "integrity": "sha512-68Kl+79cE0RGKemKkhxTSg8+6AGrqBt+cbZAXevg2iJ6Y3zX4JhA/sZeGzLpxW9cXhmqAcE7KnJCisUmIUfnFQ==", - "dev": true, - "dependencies": { - "array-back": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-connect/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/stream-via": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz", - "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7532,40 +6784,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/table-layout": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", - "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", - "dev": true, - "dependencies": { - "array-back": "^2.0.0", - "deep-extend": "~0.6.0", - "lodash.padend": "^4.6.1", - "typical": "^2.6.1", - "wordwrapjs": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/temp-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", - "integrity": "sha512-TvmyH7kC6ZVTYkqCODjJIbgvu0FKiwQpZ4D1aknE7xpcDf/qEOB8KZEK5ef2pfbVoiBhNWs3yx4y+ESMtNYmlg==", - "dev": true - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -7580,31 +6798,6 @@ "node": ">=8" } }, - "node_modules/test-value": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", - "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", - "dev": true, - "dependencies": { - "array-back": "^2.0.0", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/test-value/node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -7724,31 +6917,6 @@ "node": ">=14.17" } }, - "node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", - "dev": true - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/uint8array-extras": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-0.3.0.tgz", @@ -7775,12 +6943,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -7957,15 +7119,6 @@ "eslint": ">=6.0.0" } }, - "node_modules/walk-back": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-5.1.0.tgz", - "integrity": "sha512-Uhxps5yZcVNbLEAnb+xaEEMdgTXl9qAQDzKYejG2AZ7qPwRQ81lozY9ECDbjLPNWm7YsO1IK5rsP1KoQzXAcGA==", - "dev": true, - "engines": { - "node": ">=12.17" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -8124,34 +7277,6 @@ "node": ">= 12.0.0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wordwrapjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", - "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", - "dev": true, - "dependencies": { - "reduce-flatten": "^1.0.1", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/reduce-flatten": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", - "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", @@ -8202,12 +7327,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index be47fbd3a..c93bfc630 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ "mcdev": "node lib/cli.js", "build": "run-s lint:fix docs test", "debug": "node --nolazy --inspect-brk=9229 lib/cli.js", - "docs": "jsdoc2md --files lib/**/*.js types/**/*.js > docs/dist/documentation.md", "lint:fix": "eslint --fix lib/**/*.js && eslint --fix types/*.js && eslint --fix test/**/*.js", "lint": "run-p -c lint-type lint-lib lint-test", "lint-lib": "eslint lib/**/*.js", @@ -99,7 +98,6 @@ "eslint-plugin-unicorn": "51.0.1", "fast-xml-parser": "4.3.6", "husky": "9.0.11", - "jsdoc-to-markdown": "8.0.1", "lint-staged": "15.2.2", "mocha": "10.4.0", "mock-fs": "5.2.0", @@ -111,9 +109,7 @@ }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ - "eslint --fix", - "npm run docs", - "git update-index --add docs/dist/documentation.md" + "eslint --fix" ] }, "type": "module" diff --git a/types/mcdev.d.js b/types/mcdev.d.js index 073d5e714..b8248717d 100644 --- a/types/mcdev.d.js +++ b/types/mcdev.d.js @@ -1,6 +1,5 @@ import SDK from 'sfmc-sdk'; /** - * @ignore * @typedef {object} BuObject * @property {string} clientId installed package client id * @property {string} clientSecret installed package client secret @@ -287,7 +286,7 @@ import SDK from 'sfmc-sdk'; */ /** - * @typedef {object} skipInteraction signals what to insert automatically for things usually asked via wizard + * @typedef {object} SkipInteraction signals what to insert automatically for things usually asked via wizard * @property {string} client_id client id of installed package * @property {string} client_secret client secret of installed package * @property {string} auth_url tenant specific auth url of installed package