diff --git a/.github/workflows/code-test.yml b/.github/workflows/code-test.yml
index f5f0a580a..feadd8abc 100644
--- a/.github/workflows/code-test.yml
+++ b/.github/workflows/code-test.yml
@@ -13,6 +13,7 @@ jobs:
lintandTesting:
runs-on: ubuntu-latest
strategy:
+ fail-fast: false
matrix:
node: ["20.19", 21, 22, 23, 24, 25]
name: lint & test w/ node v${{ matrix.node }}
diff --git a/.husky/commit-msg b/.husky/commit-msg
index c1672c9e1..cf02777be 100644
--- a/.husky/commit-msg
+++ b/.husky/commit-msg
@@ -2,7 +2,7 @@ INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="^(#[[:digit:]]|Merge|Revert)"
-if ! [[ "$START_LINE" =~ $PATTERN ]] ; then
+if ! echo "$START_LINE" | grep -qE "$PATTERN" ; then
echo "Bad commit message, see example: \"#431 commit message\", you provided: \"$START_LINE\""
exit 1
fi
diff --git a/.husky/post-checkout b/.husky/post-checkout
old mode 100644
new mode 100755
index 862908326..b1ebc3d06
--- a/.husky/post-checkout
+++ b/.husky/post-checkout
@@ -1,3 +1,4 @@
+#!/bin/sh
# ### git commit message template ###
git config commit.template .git/templatemessage
TICKETID=`git rev-parse --abbrev-ref HEAD | LC_ALL=en_US.utf8 grep -oP '^((feature|bug|bugfix|fix|hotfix|task|chore)\/)?\K\d{1,7}' || true`
@@ -11,24 +12,21 @@ echo "[POST-CHECKOUT] Setting template commit to '$TEMPLATE'"
echo "$TEMPLATE" > ".git/templatemessage"
-if [[ $SKIP_HOOKS>0 ]]; then
+if [ "${SKIP_HOOKS:-0}" -gt 0 ] 2>/dev/null; then
echo "[POST-CHECKOUT] skipping hooks ($SKIP_HOOKS)"
exit 0
fi
# ### run npm install ###
echo "[POST-CHECKOUT] 📦 Checking for changes to dependencies"
-# define how to split strings into array elements
-IFS=$'\n'
# $1 is the new HEAD pointer
NEWHEAD=$1
# $2 is the previous HEAD pointer
OLDHEAD=$2
# extract all paths to package-lock.json files
-PACKAGE_LOCK_REGEX="(^package-lock\.json)"
-PACKAGES=$(git diff --name-only $OLDHEAD $NEWHEAD | grep -E $PACKAGE_LOCK_REGEX || true)
+PACKAGES=$(git diff --name-only "$OLDHEAD" "$NEWHEAD" | grep -E "^package-lock\.json" || true)
-if [[ ${PACKAGES[@]} ]]; then
+if [ -n "$PACKAGES" ]; then
for package in $PACKAGES; do
echo "📦 $package was changed."
done
diff --git a/@types/lib/Deployer.d.ts.map b/@types/lib/Deployer.d.ts.map
index a6bd23c6a..5587dc0cf 100644
--- a/@types/lib/Deployer.d.ts.map
+++ b/@types/lib/Deployer.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"Deployer.d.ts","sourceRoot":"","sources":["../../lib/Deployer.js"],"names":[],"mappings":";uBAYa,OAAO,qBAAqB,EAAE,QAAQ;0BACtC,OAAO,qBAAqB,EAAE,WAAW;8BACzC,OAAO,qBAAqB,EAAE,eAAe;sBAC7C,OAAO,qBAAqB,EAAE,OAAO;+BACrC,OAAO,qBAAqB,EAAE,gBAAgB;mCAC9C,OAAO,qBAAqB,EAAE,oBAAoB;kCAClD,OAAO,qBAAqB,EAAE,mBAAmB;8BACjD,OAAO,qBAAqB,EAAE,eAAe;iCAC7C,OAAO,qBAAqB,EAAE,kBAAkB;oCAChD,OAAO,qBAAqB,EAAE,qBAAqB;gCACnD,OAAO,qBAAqB,EAAE,iBAAiB;0BAC/C,OAAO,qBAAqB,EAAE,WAAW;mCACzC,OAAO,qBAAqB,EAAE,oBAAoB;2BAClD,OAAO,qBAAqB,EAAE,YAAY;sBAE1C,OAAO,qBAAqB,EAAE,OAAO;AAhBlD;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;GAGG;AACH;IA0BI;;;;;;;OAOG;IACH,4BALW,MAAM,qBACN,MAAM,EAAE,GAAG,YAAY,WACvB,MAAM,EAAE,GACN,OAAO,CAAE;YAAQ,MAAM,GAAE,oBAAoB;KAAC,CAAC,CA2J3D;IAED;;;;;;;;;OASG;IACH,uBAPW,MAAM,MACN,MAAM,cACN,OAAO,YACP,MAAM,EAAE,GAAG,YAAY,WACvB,MAAM,EAAE,GACN,OAAO,CAAE,oBAAoB,CAAC,CAsB1C;IA8HD;;;;;;;OAOG;IACH,iCALW,MAAM,YACN,MAAM,EAAE,gBACR,OAAO,GACL,OAAO,CAAE,oBAAoB,CAAC,CA4B1C;IAED;;;;;;;OAOG;IACH,0CALW,MAAM,YACN,oBAAoB,mBACpB,MAAM,EAAE,GACN,OAAO,CAAE,MAAM,CAAC,CAiH5B;IAnfD;;;;;OAKG;IACH,wBAHW,OAAO,YACP,QAAQ,EAmBlB;IAhBG,iDAAwB;IACxB,kDAA4B;IAC5B,kBAIE;IACF,oBAIE;IA0MN;;;;;;OAMG;IACH,gBAJW,MAAM,EAAE,GAAG,YAAY,WACvB,MAAM,EAAE,GACN,OAAO,CAAE,oBAAoB,CAAC,CAqH1C;IA7GO,mCAAmC;IACnC,UADW,oBAAoB,CACuC;CA0QjF"}
\ No newline at end of file
+{"version":3,"file":"Deployer.d.ts","sourceRoot":"","sources":["../../lib/Deployer.js"],"names":[],"mappings":";uBAYa,OAAO,qBAAqB,EAAE,QAAQ;0BACtC,OAAO,qBAAqB,EAAE,WAAW;8BACzC,OAAO,qBAAqB,EAAE,eAAe;sBAC7C,OAAO,qBAAqB,EAAE,OAAO;+BACrC,OAAO,qBAAqB,EAAE,gBAAgB;mCAC9C,OAAO,qBAAqB,EAAE,oBAAoB;kCAClD,OAAO,qBAAqB,EAAE,mBAAmB;8BACjD,OAAO,qBAAqB,EAAE,eAAe;iCAC7C,OAAO,qBAAqB,EAAE,kBAAkB;oCAChD,OAAO,qBAAqB,EAAE,qBAAqB;gCACnD,OAAO,qBAAqB,EAAE,iBAAiB;0BAC/C,OAAO,qBAAqB,EAAE,WAAW;mCACzC,OAAO,qBAAqB,EAAE,oBAAoB;2BAClD,OAAO,qBAAqB,EAAE,YAAY;sBAE1C,OAAO,qBAAqB,EAAE,OAAO;AAhBlD;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;GAGG;AACH;IA0BI;;;;;;;OAOG;IACH,4BALW,MAAM,qBACN,MAAM,EAAE,GAAG,YAAY,WACvB,MAAM,EAAE,GACN,OAAO,CAAE;YAAQ,MAAM,GAAE,oBAAoB;KAAC,CAAC,CA2J3D;IAED;;;;;;;;;OASG;IACH,uBAPW,MAAM,MACN,MAAM,cACN,OAAO,YACP,MAAM,EAAE,GAAG,YAAY,WACvB,MAAM,EAAE,GACN,OAAO,CAAE,oBAAoB,CAAC,CAsB1C;IA8HD;;;;;;;OAOG;IACH,iCALW,MAAM,YACN,MAAM,EAAE,gBACR,OAAO,GACL,OAAO,CAAE,oBAAoB,CAAC,CA4B1C;IAED;;;;;;;OAOG;IACH,0CALW,MAAM,YACN,oBAAoB,mBACpB,MAAM,EAAE,GACN,OAAO,CAAE,MAAM,CAAC,CAkH5B;IApfD;;;;;OAKG;IACH,wBAHW,OAAO,YACP,QAAQ,EAmBlB;IAhBG,iDAAwB;IACxB,kDAA4B;IAC5B,kBAIE;IACF,oBAIE;IA0MN;;;;;;OAMG;IACH,gBAJW,MAAM,EAAE,GAAG,YAAY,WACvB,MAAM,EAAE,GACN,OAAO,CAAE,oBAAoB,CAAC,CAqH1C;IA7GO,mCAAmC;IACnC,UADW,oBAAoB,CACuC;CA2QjF"}
\ No newline at end of file
diff --git a/@types/lib/metadataTypes/Asset.d.ts.map b/@types/lib/metadataTypes/Asset.d.ts.map
index 2a8423204..82bfbc36e 100644
--- a/@types/lib/metadataTypes/Asset.d.ts.map
+++ b/@types/lib/metadataTypes/Asset.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../lib/metadataTypes/Asset.js"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../lib/metadataTypes/Asset.js"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/@types/lib/metadataTypes/Folder.d.ts.map b/@types/lib/metadataTypes/Folder.d.ts.map
index f6c3b600d..c40254667 100644
--- a/@types/lib/metadataTypes/Folder.d.ts.map
+++ b/@types/lib/metadataTypes/Folder.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"Folder.d.ts","sourceRoot":"","sources":["../../../lib/metadataTypes/Folder.js"],"names":[],"mappings":";uBASa,OAAO,wBAAwB,EAAE,QAAQ;0BACzC,OAAO,wBAAwB,EAAE,WAAW;8BAC5C,OAAO,wBAAwB,EAAE,eAAe;+BAChD,OAAO,wBAAwB,EAAE,gBAAgB;mCACjD,OAAO,wBAAwB,EAAE,oBAAoB;kCACrD,OAAO,wBAAwB,EAAE,mBAAmB;8BACpD,OAAO,wBAAwB,EAAE,eAAe;iCAChD,OAAO,wBAAwB,EAAE,kBAAkB;gCACnD,OAAO,wBAAwB,EAAE,iBAAiB;0BAClD,OAAO,wBAAwB,EAAE,WAAW;uBAE5C,OAAO,wBAAwB,EAAE,QAAQ;sBACzC,OAAO,wBAAwB,EAAE,OAAO;wBACxC,OAAO,wBAAwB,EAAE,SAAS;AAdvD;;;;;;;;;;;;;;;GAeG;AAEH;;;;GAIG;AACH;IACI;;;;;;;;OAQG;IACH,6BANW,MAAM,qBACN,MAAM,EAAE,eACR,MAAM,EAAE,QACR,MAAM,GACJ,OAAO,CAAE;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CA0IvD;IAED;;;;;;OAMG;IACH,4BAJW,IAAI,GAAG,MAAM,EAAE,eACf,MAAM,EAAE,GACN,OAAO,CAAE;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAIvD;IAED;;;;;;;OAOG;IACH,wBAHW,OAAO,GACL,OAAO,CAAE,OAAO,CAAC,CA4J7B;IAED;;;;;OAKG;IACH,6BAHW,QAAQ,GACN,OAAO,CAAE,GAAG,CAAC,CAoHzB;IAED;;;;;OAKG;IACH,6BAHW,gBAAgB,GACd,OAAO,CAAE,GAAG,CAAC,CA6EzB;IAED;;;;;OAKG;IACH,gCAHW,QAAQ,GACN,OAAO,CAAE,QAAQ,CAAC,CAgD9B;IAED;;;;;;OAMG;IACH,0BAJW,MAAM,gBACN,OAAO,GACL,OAAO,CAAE,OAAO,CAAC,CAkE7B;IAED;;;;;;;OAOG;IACH,yCALW,MAAM,EAAE,qBACR,OAAO,oBACP,MAAM,EAAE,GACN,OAAO,CAAE,QAAQ,EAAE,CAAC,CA2BhC;IAED;;;;;OAKG;IACH,mCAHW,QAAQ,GACN,QAAQ,CAIpB;IAED;;;;;;OAMG;IACH,4BAJW,OAAO,eACP,MAAM,GACJ,OAAO,CAAE,OAAO,CAAC,CA4D7B;CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA1xBwB,mBAAmB"}
\ No newline at end of file
+{"version":3,"file":"Folder.d.ts","sourceRoot":"","sources":["../../../lib/metadataTypes/Folder.js"],"names":[],"mappings":";uBASa,OAAO,wBAAwB,EAAE,QAAQ;0BACzC,OAAO,wBAAwB,EAAE,WAAW;8BAC5C,OAAO,wBAAwB,EAAE,eAAe;+BAChD,OAAO,wBAAwB,EAAE,gBAAgB;mCACjD,OAAO,wBAAwB,EAAE,oBAAoB;kCACrD,OAAO,wBAAwB,EAAE,mBAAmB;8BACpD,OAAO,wBAAwB,EAAE,eAAe;iCAChD,OAAO,wBAAwB,EAAE,kBAAkB;gCACnD,OAAO,wBAAwB,EAAE,iBAAiB;0BAClD,OAAO,wBAAwB,EAAE,WAAW;uBAE5C,OAAO,wBAAwB,EAAE,QAAQ;sBACzC,OAAO,wBAAwB,EAAE,OAAO;wBACxC,OAAO,wBAAwB,EAAE,SAAS;AAdvD;;;;;;;;;;;;;;;GAeG;AAEH;;;;GAIG;AACH;IACI;;;;;;;;OAQG;IACH,6BANW,MAAM,qBACN,MAAM,EAAE,eACR,MAAM,EAAE,QACR,MAAM,GACJ,OAAO,CAAE;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAgJvD;IAED;;;;;;OAMG;IACH,4BAJW,IAAI,GAAG,MAAM,EAAE,eACf,MAAM,EAAE,GACN,OAAO,CAAE;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAIvD;IAED;;;;;;;OAOG;IACH,wBAHW,OAAO,GACL,OAAO,CAAE,OAAO,CAAC,CA+J7B;IAED;;;;;OAKG;IACH,6BAHW,QAAQ,GACN,OAAO,CAAE,GAAG,CAAC,CAoHzB;IAED;;;;;OAKG;IACH,6BAHW,gBAAgB,GACd,OAAO,CAAE,GAAG,CAAC,CA6EzB;IAED;;;;;OAKG;IACH,gCAHW,QAAQ,GACN,OAAO,CAAE,QAAQ,CAAC,CAgD9B;IAED;;;;;;OAMG;IACH,0BAJW,MAAM,gBACN,OAAO,GACL,OAAO,CAAE,OAAO,CAAC,CAsE7B;IAED;;;;;;;OAOG;IACH,yCALW,MAAM,EAAE,qBACR,OAAO,oBACP,MAAM,EAAE,GACN,OAAO,CAAE,QAAQ,EAAE,CAAC,CA2BhC;IAED;;;;;OAKG;IACH,mCAHW,QAAQ,GACN,QAAQ,CAIpB;IAED;;;;;;OAMG;IACH,4BAJW,OAAO,eACP,MAAM,GACJ,OAAO,CAAE,OAAO,CAAC,CA4D7B;CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAvyBwB,mBAAmB"}
\ No newline at end of file
diff --git a/@types/lib/util/util.d.ts b/@types/lib/util/util.d.ts
index f2c129454..b8bfcdc36 100644
--- a/@types/lib/util/util.d.ts
+++ b/@types/lib/util/util.d.ts
@@ -5,6 +5,7 @@ export namespace Util {
let defaultGitBranch: string;
let parentBuName: string;
let standardizedSplitChar: string;
+ let folderNameSlashEscapeChar: string;
let skipInteraction: SkipInteraction;
let packageJsonMcdev: any;
let OPTIONS: {};
diff --git a/@types/lib/util/util.d.ts.map b/@types/lib/util/util.d.ts.map
index 62b5f208b..d9b7b42e5 100644
--- a/@types/lib/util/util.d.ts.map
+++ b/@types/lib/util/util.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../lib/util/util.js"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../lib/util/util.js"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/Deployer.js b/lib/Deployer.js
index d59265ed2..f43b564e5 100644
--- a/lib/Deployer.js
+++ b/lib/Deployer.js
@@ -508,7 +508,8 @@ class Deployer {
}
folderMetadata[`on-the-fly-${i}`] = {
Path: folder,
- Name: folder.split('/').pop(),
+ // unescape folder name slash escape chars to get the actual SFMC folder name
+ Name: folder.split('/').pop().replaceAll(Util.folderNameSlashEscapeChar, '/'),
Description: '', // required for Create, omitted for update via definition file
ContentType: contentType,
IsActive: true, // would be auto-updated for existing folders if needed
diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js
index a74707635..cd8a55997 100644
--- a/lib/metadataTypes/Asset.js
+++ b/lib/metadataTypes/Asset.js
@@ -2584,7 +2584,14 @@ class Asset extends MetadataType {
if (json.folder) {
Util.logger.info(
- ` %%= ContentBlockByName("${json.folder.split('/').join('\\') + '\\' + json.name}") =%%`
+ ` %%= ContentBlockByName("${
+ json.folder
+ .split('/')
+ .map((s) => s.replaceAll(Util.folderNameSlashEscapeChar, '/'))
+ .join('\\') +
+ '\\' +
+ json.name
+ }") =%%`
);
if (json.folder.includes('&') || json.name.includes('&')) {
Util.logger.warn(
diff --git a/lib/metadataTypes/Folder.js b/lib/metadataTypes/Folder.js
index ed105cec7..c80694249 100644
--- a/lib/metadataTypes/Folder.js
+++ b/lib/metadataTypes/Folder.js
@@ -93,12 +93,18 @@ class Folder extends MetadataType {
if (idMap[idMap[id].ParentFolder.ID].Path) {
const parent = idMap[idMap[id].ParentFolder.ID];
// we use / here not system separator as it is important to keep metadata consistent
- idMap[id].Path = [parent.Path, idMap[id].Name].join(
- Util.standardizedSplitChar
- );
+ // replace '/' in folder names with escape char to avoid confusion with the path separator
+ idMap[id].Path = [
+ parent.Path,
+ idMap[id].Name.replaceAll('/', Util.folderNameSlashEscapeChar),
+ ].join(Util.standardizedSplitChar);
idMap[id].ParentFolder.Path = parent.Path;
} else {
- idMap[id].Path = idMap[id].Name;
+ // replace '/' in folder names with escape char to avoid confusion with the path separator
+ idMap[id].Path = idMap[id].Name.replaceAll(
+ '/',
+ Util.folderNameSlashEscapeChar
+ );
}
} else {
Util.logger.info(
@@ -224,9 +230,12 @@ class Folder extends MetadataType {
let existingId;
try {
// perform a secondary check based on path
-
+ // do not allow mapping folders from other BUs to avoid
+ // treating a same-path folder from another BU as already existing
const cachedVersion = cache.getFolderByPath(
- deployableMetadata.Path
+ deployableMetadata.Path,
+ undefined,
+ false
);
existingId = cachedVersion?.ID;
if (
@@ -643,9 +652,13 @@ class Folder extends MetadataType {
);
if (fileContent.Name === fileNameWithoutEnding) {
+ // replace '/' in folder names with escape char to match how paths are built during retrieve
fileContent.Path =
(standardSubDir ? standardSubDir + '/' : '') +
- fileNameWithoutEnding;
+ fileNameWithoutEnding.replaceAll(
+ '/',
+ Util.folderNameSlashEscapeChar
+ );
fileContent.ParentFolder = {
Path: standardSubDir,
};
diff --git a/lib/metadataTypes/definitions/Folder.definition.js b/lib/metadataTypes/definitions/Folder.definition.js
index 30a2ae9d2..8f89257e4 100644
--- a/lib/metadataTypes/definitions/Folder.definition.js
+++ b/lib/metadataTypes/definitions/Folder.definition.js
@@ -57,7 +57,7 @@ export default {
'triggered_send',
],
deployFolderTypesEmailRest: ['automations', 'journey', 'triggered_send_journeybuilder'],
- deployFolderTypesAssetRest: ['cloudpages'],
+ deployFolderTypesAssetRest: ['cloudpages', 'asset', 'asset-shared'],
deployFolderBlacklist: [
// lower-case values!
'shared data extensions',
diff --git a/lib/util/util.js b/lib/util/util.js
index e6cd16f32..1bb9849e1 100644
--- a/lib/util/util.js
+++ b/lib/util/util.js
@@ -45,6 +45,8 @@ export const Util = {
defaultGitBranch: 'main',
parentBuName: '_ParentBU_',
standardizedSplitChar: '/',
+ /** used to replace '/' in folder names to avoid confusion with the path separator */
+ folderNameSlashEscapeChar: '\u2215',
/** @type {SkipInteraction} */
skipInteraction: null,
packageJsonMcdev: readJsonSync(path.join(__dirname, '../../package.json')),
diff --git a/package-lock.json b/package-lock.json
index 8f19d8062..66217a0ba 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,7 @@
"console.table": "0.10.0",
"deep-equal": "2.2.3",
"fs-extra": "11.3.3",
- "inquirer": "13.2.5",
+ "inquirer": "13.3.0",
"json-to-table": "4.2.1",
"mustache": "4.2.0",
"p-limit": "7.3.0",
@@ -24,7 +24,7 @@
"prettier-plugin-sql": "0.19.2",
"semver": "7.7.4",
"sfmc-sdk": "3.0.0",
- "simple-git": "3.31.1",
+ "simple-git": "3.32.3",
"toposort": "2.0.2",
"update-notifier": "7.3.1",
"winston": "3.19.0",
@@ -39,23 +39,23 @@
"@types/fs-extra": "11.0.4",
"@types/inquirer": "9.0.9",
"@types/mocha": "10.0.8",
- "@types/node": "25.3.0",
+ "@types/node": "25.3.3",
"@types/yargs": "17.0.35",
"assert": "2.1.0",
"axios-mock-adapter": "2.0.0",
- "c8": "10.1.3",
+ "c8": "11.0.0",
"chai": "6.2.2",
"chai-files": "1.4.0",
- "eslint": "10.0.1",
+ "eslint": "10.0.2",
"eslint-config-ssjs": "2.0.0",
- "eslint-plugin-jsdoc": "62.7.0",
+ "eslint-plugin-jsdoc": "62.7.1",
"eslint-plugin-mocha": "11.2.0",
"eslint-plugin-prettier": "5.5.5",
"eslint-plugin-unicorn": "63.0.0",
- "fast-xml-parser": "5.3.8",
- "globals": "17.3.0",
+ "fast-xml-parser": "5.4.1",
+ "globals": "17.4.0",
"husky": "9.1.7",
- "lint-staged": "16.2.7",
+ "lint-staged": "16.3.1",
"mocha": "11.7.5",
"mock-fs": "5.3.0",
"npm-run-all": "4.1.5",
@@ -229,9 +229,9 @@
}
},
"node_modules/@eslint/config-array/node_modules/minimatch": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz",
- "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -295,9 +295,9 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -461,13 +461,13 @@
}
},
"node_modules/@inquirer/checkbox": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.0.7.tgz",
- "integrity": "sha512-OGJykc3mpe4kiNXwXlDlP4MFqZso5QOoXJaJrmTJI+Y+gq68wxTyCUIFv34qgwZTHnGGeqwUKGOi4oxptTe+ZQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.0.tgz",
+ "integrity": "sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==",
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.3",
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/figures": "^2.0.3",
"@inquirer/type": "^4.0.3"
},
@@ -484,12 +484,12 @@
}
},
"node_modules/@inquirer/confirm": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.7.tgz",
- "integrity": "sha512-lKdNloHLnGoBUUwprxKFd+SpkAnyQTBrZACFPtxDq9GiLICD2t+CaeJ1Ku4goZsGPyBIFc2YYpmDSJLEXoc16g==",
+ "version": "6.0.8",
+ "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.8.tgz",
+ "integrity": "sha512-Di6dgmiZ9xCSUxWUReWTqDtbhXCuG2MQm2xmgSAIruzQzBqNf49b8E07/vbCYY506kDe8BiwJbegXweG8M1klw==",
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/type": "^4.0.3"
},
"engines": {
@@ -505,9 +505,9 @@
}
},
"node_modules/@inquirer/core": {
- "version": "11.1.4",
- "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.4.tgz",
- "integrity": "sha512-1HvwyASF0tE/7W8geTTn0ydiWb463pq4SBIpaWcVabTrw55+CiRmytV9eZoqt3ohchsPw4Vv60jfNiI6YljVUg==",
+ "version": "11.1.5",
+ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.5.tgz",
+ "integrity": "sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==",
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.3",
@@ -531,12 +531,12 @@
}
},
"node_modules/@inquirer/editor": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.7.tgz",
- "integrity": "sha512-d36tisyvmxH7H+LICTeTofrKmJ+R1jAYV8q0VTYh96cm8mP2BdGh9TAIqbCGcciX8/dr0fJW+VJq3jAnco5xfg==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.8.tgz",
+ "integrity": "sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==",
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/external-editor": "^2.0.3",
"@inquirer/type": "^4.0.3"
},
@@ -553,12 +553,12 @@
}
},
"node_modules/@inquirer/expand": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.7.tgz",
- "integrity": "sha512-h2RRFzDdeXOXLrJOUAaHzyR1HbiZlrl/NxorOAgNrzhiSThbwEFVOf88lJzbF5WXGrQ2RwqK2h0xAE7eo8QP5w==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.8.tgz",
+ "integrity": "sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==",
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/type": "^4.0.3"
},
"engines": {
@@ -604,12 +604,12 @@
}
},
"node_modules/@inquirer/input": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.7.tgz",
- "integrity": "sha512-b+eKk/eUvKLQ6c+rDu9u4I1+twdjOfrEaw9NURDpCrWYJTWL1/JQEudZi0AeqXDGcn0tMdhlfpEfjcqr33B/qw==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.8.tgz",
+ "integrity": "sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==",
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/type": "^4.0.3"
},
"engines": {
@@ -625,12 +625,12 @@
}
},
"node_modules/@inquirer/number": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.7.tgz",
- "integrity": "sha512-/l5KxcLFFexzOwh8DcVOI7zgVQCwcBt/9yHWtvMdYvaYLMK5J31BSR/fO3Z9WauA21qwAkDGRvYNHIG4vR6JwA==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.8.tgz",
+ "integrity": "sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==",
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/type": "^4.0.3"
},
"engines": {
@@ -646,13 +646,13 @@
}
},
"node_modules/@inquirer/password": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.7.tgz",
- "integrity": "sha512-h3Rgzb8nFMxgK6X5246MtwTX/rXs5Z58DbeuUKI6W5dQ+CZusEunNeT7rosdB+Upn79BkfZJO0AaiH8MIi9v1A==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.8.tgz",
+ "integrity": "sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==",
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.3",
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/type": "^4.0.3"
},
"engines": {
@@ -668,21 +668,21 @@
}
},
"node_modules/@inquirer/prompts": {
- "version": "8.2.1",
- "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.2.1.tgz",
- "integrity": "sha512-76knJFW2oXdI6If5YRmEoT5u7l+QroXYrMiINFcb97LsyECgsbO9m6iWlPuhBtaFgNITPHQCk3wbex38q8gsjg==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.3.0.tgz",
+ "integrity": "sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==",
"license": "MIT",
"dependencies": {
- "@inquirer/checkbox": "^5.0.5",
- "@inquirer/confirm": "^6.0.5",
- "@inquirer/editor": "^5.0.5",
- "@inquirer/expand": "^5.0.5",
- "@inquirer/input": "^5.0.5",
- "@inquirer/number": "^4.0.5",
- "@inquirer/password": "^5.0.5",
- "@inquirer/rawlist": "^5.2.1",
- "@inquirer/search": "^4.1.1",
- "@inquirer/select": "^5.0.5"
+ "@inquirer/checkbox": "^5.1.0",
+ "@inquirer/confirm": "^6.0.8",
+ "@inquirer/editor": "^5.0.8",
+ "@inquirer/expand": "^5.0.8",
+ "@inquirer/input": "^5.0.8",
+ "@inquirer/number": "^4.0.8",
+ "@inquirer/password": "^5.0.8",
+ "@inquirer/rawlist": "^5.2.4",
+ "@inquirer/search": "^4.1.4",
+ "@inquirer/select": "^5.1.0"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
@@ -697,12 +697,12 @@
}
},
"node_modules/@inquirer/rawlist": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.3.tgz",
- "integrity": "sha512-EuvV6N/T3xDmRVihAOqfnbmtHGdu26TocRKANvcX/7nLLD8QO0c22Dtlc5C15+V433d9v0E0SSyqywdNCIXfLg==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.4.tgz",
+ "integrity": "sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==",
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/type": "^4.0.3"
},
"engines": {
@@ -718,12 +718,12 @@
}
},
"node_modules/@inquirer/search": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.3.tgz",
- "integrity": "sha512-6BE8MqVMakEiLDRtrwj9fbx6AYhuj7McW3GOkOoEiQ5Qkh6v6f5HCoYNqSRE4j6nT+u+73518iUQPE+mZYlAjA==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.4.tgz",
+ "integrity": "sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==",
"license": "MIT",
"dependencies": {
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/figures": "^2.0.3",
"@inquirer/type": "^4.0.3"
},
@@ -740,13 +740,13 @@
}
},
"node_modules/@inquirer/select": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.0.7.tgz",
- "integrity": "sha512-1JUJIR+Z2PsvwP6VWty7aE0aCPaT2cy2c4Vp3LPhL2Pi3+aXewAld/AyJ/CW9XWx1JbKxmdElfvls/G/7jG7ZQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.0.tgz",
+ "integrity": "sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==",
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.3",
- "@inquirer/core": "^11.1.4",
+ "@inquirer/core": "^11.1.5",
"@inquirer/figures": "^2.0.3",
"@inquirer/type": "^4.0.3"
},
@@ -868,6 +868,7 @@
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1109,9 +1110,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "25.3.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz",
- "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==",
+ "version": "25.3.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
+ "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -1659,10 +1660,11 @@
}
},
"node_modules/c8": {
- "version": "10.1.3",
- "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz",
- "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-11.0.0.tgz",
+ "integrity": "sha512-e/uRViGHSVIJv7zsaDKM7VRn2390TgHXqUSvYwPHBQaU6L7E9L0n9JbdkwdYPvshDT0KymBmmlwSpms3yBaMNg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"@bcoe/v8-coverage": "^1.0.1",
"@istanbuljs/schema": "^0.1.3",
@@ -1671,7 +1673,7 @@
"istanbul-lib-coverage": "^3.2.0",
"istanbul-lib-report": "^3.0.1",
"istanbul-reports": "^3.1.6",
- "test-exclude": "^7.0.1",
+ "test-exclude": "^8.0.0",
"v8-to-istanbul": "^9.0.0",
"yargs": "^17.7.2",
"yargs-parser": "^21.1.1"
@@ -1680,7 +1682,7 @@
"c8": "bin/c8.js"
},
"engines": {
- "node": ">=18"
+ "node": "20 || >=22"
},
"peerDependencies": {
"monocart-coverage-reports": "^2"
@@ -2168,9 +2170,9 @@
"integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="
},
"node_modules/commander": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz",
- "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
+ "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2759,9 +2761,9 @@
}
},
"node_modules/eslint": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.1.tgz",
- "integrity": "sha512-20MV9SUdeN6Jd84xESsKhRly+/vxI+hwvpBMA93s+9dAcjdCuCojn4IqUGS3lvVaqjVYGYHSRMCpeFtF2rQYxQ==",
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.2.tgz",
+ "integrity": "sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2775,7 +2777,7 @@
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
- "ajv": "^6.12.4",
+ "ajv": "^6.14.0",
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
@@ -2847,9 +2849,9 @@
}
},
"node_modules/eslint-plugin-jsdoc": {
- "version": "62.7.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.7.0.tgz",
- "integrity": "sha512-jootujJOIGMkCLN+/WgDFKtaclCt2MEEy9cZ1RyK19Az1JvVI3awbeMXNlJ6y4h8RWIJpcXqmxsu4t9NThYbNw==",
+ "version": "62.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.7.1.tgz",
+ "integrity": "sha512-4Zvx99Q7d1uggYBUX/AIjvoyqXhluGbbKrRmG8SQTLprPFg6fa293tVJH1o1GQwNe3lUydd8ZHzn37OaSncgSQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -3090,10 +3092,11 @@
}
},
"node_modules/eslint/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -3182,12 +3185,13 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/eslint/node_modules/minimatch": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz",
- "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -3348,10 +3352,23 @@
"fast-string-width": "^3.0.2"
}
},
+ "node_modules/fast-xml-builder": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.0.0.tgz",
+ "integrity": "sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/fast-xml-parser": {
- "version": "5.3.8",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.8.tgz",
- "integrity": "sha512-53jIF4N6u/pxvaL1eb/hEZts/cFLWZ92eCfLrNyCI0k38lettCG/Bs40W9pPwoPXyHQlKu2OUbQtiEIZK/J6Vw==",
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.1.tgz",
+ "integrity": "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==",
"dev": true,
"funding": [
{
@@ -3361,6 +3378,7 @@
],
"license": "MIT",
"dependencies": {
+ "fast-xml-builder": "^1.0.0",
"strnum": "^2.1.2"
},
"bin": {
@@ -3754,9 +3772,9 @@
}
},
"node_modules/globals": {
- "version": "17.3.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz",
- "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz",
+ "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4044,14 +4062,14 @@
}
},
"node_modules/inquirer": {
- "version": "13.2.5",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.2.5.tgz",
- "integrity": "sha512-JHvVPgOIre0NrA9o8BGHUBh9rNuKkN1gS1ffbYgy3BuuJmJZhnFy9IHz3pcNbZm9zK6qTYvQ6LN5wl3Xcg4Jkw==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.3.0.tgz",
+ "integrity": "sha512-APTrZe9IhrsshL0u2PgmEMLP3CXDBjZ99xh5dR2+sryOt5R+JGL0KNuaTTT2lW54B9eNQDMutPR05UYTL7Xb1Q==",
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.3",
- "@inquirer/core": "^11.1.4",
- "@inquirer/prompts": "^8.2.1",
+ "@inquirer/core": "^11.1.5",
+ "@inquirer/prompts": "^8.3.0",
"@inquirer/type": "^4.0.3",
"mute-stream": "^3.0.0",
"run-async": "^4.0.6",
@@ -4745,19 +4763,18 @@
}
},
"node_modules/lint-staged": {
- "version": "16.2.7",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz",
- "integrity": "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==",
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.1.tgz",
+ "integrity": "sha512-bqvvquXzFBAlSbluugR4KXAe4XnO/QZcKVszpkBtqLWa2KEiVy8n6Xp38OeUbv/gOJOX4Vo9u5pFt/ADvbm42Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "commander": "^14.0.2",
+ "commander": "^14.0.3",
"listr2": "^9.0.5",
"micromatch": "^4.0.8",
- "nano-spawn": "^2.0.0",
- "pidtree": "^0.6.0",
"string-argv": "^0.3.2",
- "yaml": "^2.8.1"
+ "tinyexec": "^1.0.2",
+ "yaml": "^2.8.2"
},
"bin": {
"lint-staged": "bin/lint-staged.js"
@@ -5089,10 +5106,11 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -5109,10 +5127,11 @@
}
},
"node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
"dev": true,
+ "license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -5201,13 +5220,13 @@
}
},
"node_modules/mocha/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^2.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -5305,19 +5324,6 @@
"node": "^20.17.0 || >=22.9.0"
}
},
- "node_modules/nano-spawn": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz",
- "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=20.17"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1"
- }
- },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -5848,18 +5854,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pidtree": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
- "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
- "dev": true,
- "bin": {
- "pidtree": "bin/pidtree.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/pluralize": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
@@ -5971,10 +5965,11 @@
}
},
"node_modules/prettier-eslint/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -6712,9 +6707,9 @@
}
},
"node_modules/simple-git": {
- "version": "3.31.1",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.31.1.tgz",
- "integrity": "sha512-oiWP4Q9+kO8q9hHqkX35uuHmxiEbZNTrZ5IPxgMGrJwN76pzjm/jabkZO0ItEcqxAincqGAzL3QHSaHt4+knBg==",
+ "version": "3.32.3",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.32.3.tgz",
+ "integrity": "sha512-56a5oxFdWlsGygOXHWrG+xjj5w9ZIt2uQbzqiIGdR/6i5iococ7WQ/bNPzWxCJdEUGUCmyMH0t9zMpRJTaKxmw==",
"license": "MIT",
"dependencies": {
"@kwsites/file-exists": "^1.1.1",
@@ -7079,61 +7074,99 @@
}
},
"node_modules/test-exclude": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
- "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-8.0.0.tgz",
+ "integrity": "sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
- "glob": "^10.4.1",
- "minimatch": "^9.0.4"
+ "glob": "^13.0.6",
+ "minimatch": "^10.2.2"
},
"engines": {
- "node": ">=18"
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/test-exclude/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/test-exclude/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
+ "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
"node_modules/test-exclude/node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "version": "13.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
+ "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
+ "minimatch": "^10.2.2",
+ "minipass": "^7.1.3",
+ "path-scurry": "^2.0.2"
},
- "bin": {
- "glob": "dist/esm/bin.mjs"
+ "engines": {
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/test-exclude/node_modules/lru-cache": {
+ "version": "11.2.6",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz",
+ "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
"node_modules/test-exclude/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^5.0.2"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/test-exclude/node_modules/path-scurry": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
+ "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -7151,6 +7184,16 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "node_modules/tinyexec": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz",
+ "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -7715,9 +7758,9 @@
}
},
"node_modules/yaml": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
- "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
+ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
"dev": true,
"license": "ISC",
"bin": {
@@ -7725,6 +7768,9 @@
},
"engines": {
"node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
}
},
"node_modules/yargs": {
diff --git a/package.json b/package.json
index 1a1c58219..f8a5a9d4c 100644
--- a/package.json
+++ b/package.json
@@ -74,7 +74,7 @@
"console.table": "0.10.0",
"deep-equal": "2.2.3",
"fs-extra": "11.3.3",
- "inquirer": "13.2.5",
+ "inquirer": "13.3.0",
"json-to-table": "4.2.1",
"mustache": "4.2.0",
"p-limit": "7.3.0",
@@ -82,7 +82,7 @@
"prettier-plugin-sql": "0.19.2",
"semver": "7.7.4",
"sfmc-sdk": "3.0.0",
- "simple-git": "3.31.1",
+ "simple-git": "3.32.3",
"toposort": "2.0.2",
"update-notifier": "7.3.1",
"winston": "3.19.0",
@@ -94,23 +94,23 @@
"@types/fs-extra": "11.0.4",
"@types/inquirer": "9.0.9",
"@types/mocha": "10.0.8",
- "@types/node": "25.3.0",
+ "@types/node": "25.3.3",
"@types/yargs": "17.0.35",
"assert": "2.1.0",
"axios-mock-adapter": "2.0.0",
- "c8": "10.1.3",
+ "c8": "11.0.0",
"chai": "6.2.2",
"chai-files": "1.4.0",
- "eslint": "10.0.1",
+ "eslint": "10.0.2",
"eslint-config-ssjs": "2.0.0",
- "eslint-plugin-jsdoc": "62.7.0",
+ "eslint-plugin-jsdoc": "62.7.1",
"eslint-plugin-mocha": "11.2.0",
"eslint-plugin-prettier": "5.5.5",
"eslint-plugin-unicorn": "63.0.0",
- "fast-xml-parser": "5.3.8",
- "globals": "17.3.0",
+ "fast-xml-parser": "5.4.1",
+ "globals": "17.4.0",
"husky": "9.1.7",
- "lint-staged": "16.2.7",
+ "lint-staged": "16.3.1",
"mocha": "11.7.5",
"mock-fs": "5.3.0",
"npm-run-all": "4.1.5",
diff --git a/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.html b/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.html
new file mode 100644
index 000000000..a8e8a44e6
--- /dev/null
+++ b/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.html
@@ -0,0 +1,12 @@
+
diff --git a/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.json b/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.json
new file mode 100644
index 000000000..f7c664638
--- /dev/null
+++ b/test/mockRoot/deploy/testInstance/testBU/asset/block/test_slash.asset-block-meta.json
@@ -0,0 +1,29 @@
+{
+ "customerKey": "test_slash",
+ "assetType": {
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "test_slash"
+ },
+ "name": "test_slash",
+ "createdBy": {},
+ "modifiedBy": {},
+ "memberId": "9999999",
+ "status": {
+ "name": "Draft"
+ },
+ "design": "",
+ "meta": {
+ "wrapperStyles": {
+ "mobile": {
+ "visible": true
+ },
+ "styling": {}
+ }
+ },
+ "availableViews": [],
+ "modelVersion": 2,
+ "r__folder_Path": "Content Builder/bla∕blub"
+}
diff --git a/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.html b/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.html
new file mode 100644
index 000000000..a8e8a44e6
--- /dev/null
+++ b/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.html
@@ -0,0 +1,12 @@
+
diff --git a/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.json b/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.json
new file mode 100644
index 000000000..f7c664638
--- /dev/null
+++ b/test/resources/9999999/asset-slashfolder-deploy/block/test_slash.asset-block-meta.json
@@ -0,0 +1,29 @@
+{
+ "customerKey": "test_slash",
+ "assetType": {
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "test_slash"
+ },
+ "name": "test_slash",
+ "createdBy": {},
+ "modifiedBy": {},
+ "memberId": "9999999",
+ "status": {
+ "name": "Draft"
+ },
+ "design": "",
+ "meta": {
+ "wrapperStyles": {
+ "mobile": {
+ "visible": true
+ },
+ "styling": {}
+ }
+ },
+ "availableViews": [],
+ "modelVersion": 2,
+ "r__folder_Path": "Content Builder/bla∕blub"
+}
diff --git a/test/resources/9999999/asset/v1/content/assets/16992/get-response.json b/test/resources/9999999/asset/v1/content/assets/16992/get-response.json
new file mode 100644
index 000000000..f877af15d
--- /dev/null
+++ b/test/resources/9999999/asset/v1/content/assets/16992/get-response.json
@@ -0,0 +1,60 @@
+{
+ "id": 16992,
+ "customerKey": "test_slash",
+ "objectID": "13f34d9c-f555-4fce-b862-26ff7f9fef7a",
+ "assetType": {
+ "id": 197,
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "test_slash"
+ },
+ "name": "test_slash",
+ "owner": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "createdDate": "2026-03-06T07:47:11.04-06:00",
+ "createdBy": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "modifiedDate": "2026-03-06T07:47:11.04-06:00",
+ "modifiedBy": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "enterpriseId": 1111111,
+ "memberId": 9999999,
+ "status": {
+ "id": 1,
+ "name": "Draft"
+ },
+ "thumbnail": {
+ "thumbnailUrl": "/v1/assets/16992/thumbnail"
+ },
+ "category": {
+ "id": 38491,
+ "name": "bla/blub",
+ "parentId": 89397
+ },
+ "content": "\n",
+ "design": "",
+ "meta": {
+ "wrapperStyles": {
+ "mobile": {
+ "visible": true
+ },
+ "styling": {}
+ }
+ },
+ "availableViews": [],
+ "modelVersion": 2
+}
diff --git a/test/resources/9999999/asset/v1/content/assets/post-response-key=test_slash.json b/test/resources/9999999/asset/v1/content/assets/post-response-key=test_slash.json
new file mode 100644
index 000000000..f877af15d
--- /dev/null
+++ b/test/resources/9999999/asset/v1/content/assets/post-response-key=test_slash.json
@@ -0,0 +1,60 @@
+{
+ "id": 16992,
+ "customerKey": "test_slash",
+ "objectID": "13f34d9c-f555-4fce-b862-26ff7f9fef7a",
+ "assetType": {
+ "id": 197,
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "test_slash"
+ },
+ "name": "test_slash",
+ "owner": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "createdDate": "2026-03-06T07:47:11.04-06:00",
+ "createdBy": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "modifiedDate": "2026-03-06T07:47:11.04-06:00",
+ "modifiedBy": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "enterpriseId": 1111111,
+ "memberId": 9999999,
+ "status": {
+ "id": 1,
+ "name": "Draft"
+ },
+ "thumbnail": {
+ "thumbnailUrl": "/v1/assets/16992/thumbnail"
+ },
+ "category": {
+ "id": 38491,
+ "name": "bla/blub",
+ "parentId": 89397
+ },
+ "content": "\n",
+ "design": "",
+ "meta": {
+ "wrapperStyles": {
+ "mobile": {
+ "visible": true
+ },
+ "styling": {}
+ }
+ },
+ "availableViews": [],
+ "modelVersion": 2
+}
diff --git a/test/resources/9999999/asset/v1/content/assets/query/+post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213-slashfolder.json b/test/resources/9999999/asset/v1/content/assets/query/+post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213-slashfolder.json
new file mode 100644
index 000000000..17d4132ba
--- /dev/null
+++ b/test/resources/9999999/asset/v1/content/assets/query/+post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213-slashfolder.json
@@ -0,0 +1,198 @@
+{
+ "count": 5,
+ "page": 1,
+ "pageSize": 50,
+ "links": {},
+ "items": [
+ {
+ "id": 16992,
+ "customerKey": "test_slash",
+ "assetType": {
+ "id": 197,
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "test_slash"
+ },
+ "name": "test_slash",
+ "createdDate": "2026-03-06T07:47:11.04-06:00",
+ "createdBy": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "modifiedDate": "2026-03-06T07:47:11.04-06:00",
+ "modifiedBy": {
+ "id": 710420432,
+ "email": "",
+ "name": "IDE - joern.berkefeld app user",
+ "userId": "710420432"
+ },
+ "status": {
+ "id": 1,
+ "name": "Draft"
+ },
+ "category": {
+ "id": 38491,
+ "name": "bla/blub",
+ "parentId": 89397
+ },
+ "availableViews": [],
+ "modelVersion": 2
+ },
+ {
+ "id": 1295064,
+ "customerKey": "testExisting_asset_htmlblock",
+ "assetType": {
+ "id": 197,
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "dont strip non ssjs content"
+ },
+ "name": "dont strip non ssjs content",
+ "createdDate": "2024-01-08T08:26:58.277-06:00",
+ "createdBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "modifiedDate": "2024-01-08T08:28:01.6-06:00",
+ "modifiedBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "status": {
+ "id": 1,
+ "name": "Draft"
+ },
+ "category": {
+ "id": 89397,
+ "name": "Content Builder",
+ "parentId": 0
+ },
+ "availableViews": [],
+ "modelVersion": 2
+ },
+ {
+ "id": 1295065,
+ "customerKey": "testExisting_htmlblock1",
+ "assetType": {
+ "id": 197,
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "testExisting_htmlblock1"
+ },
+ "name": "testExisting_htmlblock1",
+ "createdDate": "2024-01-08T08:26:58.277-06:00",
+ "createdBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "modifiedDate": "2024-01-08T08:28:01.6-06:00",
+ "modifiedBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "status": {
+ "id": 1,
+ "name": "Draft"
+ },
+ "category": {
+ "id": 89397,
+ "name": "Content Builder",
+ "parentId": 0
+ },
+ "availableViews": [],
+ "modelVersion": 2
+ },
+ {
+ "id": 1295066,
+ "customerKey": "testExisting_htmlblock2",
+ "assetType": {
+ "id": 197,
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "testExisting_htmlblock2"
+ },
+ "name": "testExisting_htmlblock2",
+ "createdDate": "2024-01-08T08:26:58.277-06:00",
+ "createdBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "modifiedDate": "2024-01-08T08:28:01.6-06:00",
+ "modifiedBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "status": {
+ "id": 1,
+ "name": "Draft"
+ },
+ "category": {
+ "id": 89397,
+ "name": "Content Builder",
+ "parentId": 0
+ },
+ "availableViews": [],
+ "modelVersion": 2
+ },
+ {
+ "id": 1295067,
+ "customerKey": "testExisting_htmlblock 3 spaces",
+ "assetType": {
+ "id": 197,
+ "name": "htmlblock",
+ "displayName": "HTML Block"
+ },
+ "fileProperties": {
+ "fileName": "testExisting_htmlblock 3 spaces"
+ },
+ "name": "testExisting_htmlblock 3 spaces",
+ "createdDate": "2024-01-08T08:26:58.277-06:00",
+ "createdBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "modifiedDate": "2024-01-08T08:28:01.6-06:00",
+ "modifiedBy": {
+ "id": 700301950,
+ "email": "joern.berkefeld@accenture.com",
+ "name": "J\u00f6rn Berkefeld (ASGR)",
+ "userId": "700301950"
+ },
+ "status": {
+ "id": 1,
+ "name": "Draft"
+ },
+ "category": {
+ "id": 89397,
+ "name": "Content Builder",
+ "parentId": 0
+ },
+ "availableViews": [],
+ "modelVersion": 2
+ }
+ ]
+}
diff --git a/test/resources/9999999/asset/v1/content/categories/post-response.json b/test/resources/9999999/asset/v1/content/categories/post-response.json
new file mode 100644
index 000000000..b26107950
--- /dev/null
+++ b/test/resources/9999999/asset/v1/content/categories/post-response.json
@@ -0,0 +1,9 @@
+{
+ "id": 38491,
+ "description": "",
+ "enterpriseId": 1111111,
+ "memberId": 9999999,
+ "name": "bla/blub",
+ "parentId": 89397,
+ "categoryType": "asset"
+}
diff --git a/test/resources/9999999/dataFolder/+retrieve-ContentTypeINasset,asset-shared,cloudpages-slashfolder-response.xml b/test/resources/9999999/dataFolder/+retrieve-ContentTypeINasset,asset-shared,cloudpages-slashfolder-response.xml
new file mode 100644
index 000000000..d91fa68fb
--- /dev/null
+++ b/test/resources/9999999/dataFolder/+retrieve-ContentTypeINasset,asset-shared,cloudpages-slashfolder-response.xml
@@ -0,0 +1,136 @@
+
+
+
+ RetrieveResponse
+ urn:uuid:00106553-ac00-4e72-b387-42325fe6f93d
+ urn:uuid:a1dd2a9d-b696-480e-9a1b-265f262a8997
+ http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
+
+
+ 2024-01-08T14:30:39Z
+ 2024-01-08T14:35:39Z
+
+
+
+
+
+ OK
+ 6596087d-d12f-4c9d-9353-783fe01775a3
+
+
+ 9999999
+
+
+ 2016-07-22T11:52:35.687
+ 2016-07-22T11:52:35.687
+ 89397
+
+
+
+
+ 0
+
+
+ Content Builder
+ The root folder for assets
+ asset
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2016-07-29T12:13:07.7
+ 2021-12-16T02:56:14.68
+ 90888
+
+
+
+
+ 89397
+
+
+ Test Folder
+
+ asset
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2026-03-06T07:47:11.04
+ 2026-03-06T07:47:11.04
+ 38491
+
+
+
+
+ 89397
+
+
+ bla/blub
+
+ asset
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2024-02-16T10:12:15.9
+ 2024-02-16T10:12:15.9
+ 14914
+
+
+
+
+ 0
+
+
+ CloudPages
+ The root folder for CloudPages
+ cloudpages
+ true
+ false
+ true
+
+
+
+ 510007949
+
+
+ 2025-03-25T03:00:33.163
+ 2025-03-26T03:33:00.893
+ 27675
+
+ 958bac7c-972b-4cac-aa8a-22a2b77b0fbc
+
+
+ 14914
+
+
+ mcdev
+
+ cloudpages
+ true
+ true
+ false
+
+
+
+
diff --git a/test/resources/9999999/dataFolder/create-ContentType=asset,Name=testFolder_samePath,ParentFolderID=89397-response.xml b/test/resources/9999999/dataFolder/create-ContentType=asset,Name=testFolder_samePath,ParentFolderID=89397-response.xml
new file mode 100644
index 000000000..9eb382160
--- /dev/null
+++ b/test/resources/9999999/dataFolder/create-ContentType=asset,Name=testFolder_samePath,ParentFolderID=89397-response.xml
@@ -0,0 +1,33 @@
+
+
+
+ CreateResponse
+ urn:uuid:50c68314-30a5-45d4-93aa-6dd1191190e3
+ urn:uuid:00b40ac8-d7e8-4e55-8b88-fcf3569684a9
+ http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
+
+
+ 2024-08-08T09:56:20Z
+ 2024-08-08T10:01:20Z
+
+
+
+
+
+
+ OK
+ Folder created successfully.
+ 0
+ 88888
+ a890243b-a4e1-4010-85e4-db6d6ae84502
+
+ 6b408e0b-ecbe-4b8e-9019-6376f6eeb0e2
+ OK
+
+
+
diff --git a/test/resources/9999999/dataFolder/create-response.xml b/test/resources/9999999/dataFolder/create-response.xml
new file mode 100644
index 000000000..ebbd01616
--- /dev/null
+++ b/test/resources/9999999/dataFolder/create-response.xml
@@ -0,0 +1,33 @@
+
+
+
+ CreateResponse
+ urn:uuid:50c68314-30a5-45d4-93aa-6dd1191190e3
+ urn:uuid:00b40ac8-d7e8-4e55-8b88-fcf3569684a9
+ http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
+
+
+ 2024-08-08T09:56:20Z
+ 2024-08-08T10:01:20Z
+
+
+
+
+
+
+ OK
+ Folder created successfully.
+ 0
+ 862099
+ d890243b-a4e1-4010-85e4-db6d6ae84502
+
+ 5b408e0b-ecbe-4b8e-9019-6376f6eeb0e2
+ OK
+
+
+
diff --git a/test/resources/9999999/dataFolder/retrieve-samePathOtherBU-response.xml b/test/resources/9999999/dataFolder/retrieve-samePathOtherBU-response.xml
new file mode 100644
index 000000000..feda90112
--- /dev/null
+++ b/test/resources/9999999/dataFolder/retrieve-samePathOtherBU-response.xml
@@ -0,0 +1,564 @@
+
+
+
+ RetrieveResponse
+ urn:uuid:f36f3303-3b5a-4641-8109-b26447634d91
+ urn:uuid:33983968-28c4-4379-bb5f-f80ae32eb988
+ http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
+
+
+ 2022-04-19T20:03:41Z
+ 2022-04-19T20:08:41Z
+
+
+
+
+
+ OK
+ 02cd5ccb-8f84-4651-826f-71169eeecf05
+
+
+ 9999999
+
+
+ 2016-07-22T11:52:19.6
+ 2016-07-22T11:52:19.6
+ 2
+
+ dataextension_default
+
+
+ 0
+
+
+ Data Extensions
+
+ dataextension
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2016-07-22T11:52:20.407
+ 2016-07-22T11:52:20.407
+ 999
+
+ queryactivity_default
+
+
+ 0
+
+
+ Query
+
+ queryactivity
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2017-02-16T01:59:27.18
+ 2017-02-16T01:59:27.18
+ 412
+
+ mysubs_default
+
+
+ 0
+
+
+ my subscribers
+
+ mysubs
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2017-02-16T01:59:27.177
+ 2017-02-16T01:59:27.177
+ 404
+
+ list_default
+
+
+ 0
+
+
+ my lists
+
+ list
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2017-02-16T01:59:34.023
+ 2017-02-16T01:59:34.023
+ 424
+
+ publication_default
+
+
+ 0
+
+
+ Publication Lists
+
+ publication
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2017-02-16T01:59:32.323
+ 2017-02-16T01:59:32.323
+ 419
+
+ suppression_list_default
+
+
+ 0
+
+
+ Suppression Lists
+
+ suppression_list
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2017-02-16T01:59:32.323
+ 2017-02-16T01:59:32.323
+ 6298
+
+ journey_default
+
+
+ 0
+
+
+ my journeys
+ The root folder for Journeys
+ journey
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2019-10-25T05:35:17.337
+ 2019-10-25T05:35:17.337
+ 290937
+
+
+
+
+ 0
+
+
+ my automations
+
+ automations
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2017-02-08T10:19:37.123
+ 2017-02-08T10:19:37.123
+ 386
+
+
+
+
+ 2
+
+ dataextension_default
+
+ Einstein
+
+ dataextension
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2017-02-08T10:19:37.123
+ 2017-02-08T10:19:37.123
+ 66666
+
+
+
+
+ 2
+
+ dataextension_default
+
+ testExisting_FOLDER
+
+ dataextension
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2016-07-22T11:52:35.687
+ 2016-07-22T11:52:35.687
+ 89397
+
+
+
+
+ 0
+
+
+ Content Builder
+ The root folder for assets
+ asset
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2016-07-29T12:13:07.7
+ 2021-12-16T02:56:14.68
+ 90888
+
+
+
+
+ 89397
+
+
+ Test Folder
+
+ asset
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2016-07-22T11:52:19.28
+ 2016-07-22T11:52:19.28
+ 89348
+
+ triggered_send_default
+
+
+ 0
+
+
+ Triggered Sends
+
+ triggered_send
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2016-07-22T11:52:34.983
+ 2016-07-22T11:52:34.983
+ 89396
+
+ triggered_send_journeybuilder
+
+
+ 0
+
+
+ Journey Builder Sends
+
+ triggered_send_journeybuilder
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2016-07-29T12:13:27.28
+ 2016-07-29T12:13:27.28
+ 90889
+
+ HiddenCategory_default
+
+
+ 0
+
+
+ HiddenCategory
+ Hidden folder to store Hidden items
+ Hidden
+ true
+ false
+ true
+
+
+
+ 9999999
+
+
+ 2016-08-25T10:04:09.12
+ 2016-08-25T10:04:09.12
+ 94030
+
+
+
+
+ 89396
+
+ triggered_send_journeybuilder
+
+ Satisfaction Score Survey
+
+ triggered_send_journeybuilder
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2016-08-25T10:04:09.133
+ 2016-08-25T10:04:09.133
+ 94031
+
+
+
+
+ 94030
+
+
+ Version 1
+
+ triggered_send_journeybuilder
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2021-06-09T10:17:06.27
+ 2021-06-09T10:17:06.27
+ 664654
+
+ 6aa28490-6577-4cb2-8eac-fd5e4f983cae
+
+
+ 317169
+
+ HiddenJourneyBuilderTriggeredSends_d
+
+ 6aa28490-6577-4cb2-8eac-fd5e4f983cae_V9
+ triggered_send folder to store triggered_send items
+ triggered_send
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2022-07-31T19:55:31.657
+ 2022-07-31T19:55:31.657
+ 742869
+
+ 77211381-9967-4472-bd12-f58d4d5952a1
+
+
+ 317169
+
+ HiddenJourneyBuilderTriggeredSends_d
+
+ 77211381-9967-4472-bd12-f58d4d5952a1_V1
+ triggered_send folder to store triggered_send items
+ triggered_send
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2022-07-31T19:56:51.297
+ 2022-07-31T19:56:51.297
+ 742871
+
+ HiddenJourneyBuilderSimulationTrigge
+
+
+ 90889
+
+ HiddenCategory_default
+
+ HiddenJourneyBuilderSimulationTriggeredSends
+ triggered_send_journeybuilder folder to store triggered_send_journeybuilder items
+ triggered_send_journeybuilder
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2023-03-08T10:26:55.787
+ 2023-03-08T10:26:55.787
+ 771879
+
+ 8c24f428-4da8-4df6-97a7-beba5166c3c7
+
+
+ 317169
+
+ HiddenJourneyBuilderTriggeredSends_d
+
+ 8c24f428-4da8-4df6-97a7-beba5166c3c7_V1
+ triggered_send folder to store triggered_send items
+ triggered_send
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2023-04-10T15:46:09.947
+ 2023-04-10T15:46:09.947
+ 776623
+
+ 0a85b483-4208-4377-87fb-25794f5df244
+
+
+ 317169
+
+ HiddenJourneyBuilderTriggeredSends_d
+
+ 0a85b483-4208-4377-87fb-25794f5df244_V1
+ triggered_send folder to store triggered_send items
+ triggered_send
+ true
+ true
+ true
+
+
+
+ 9999999
+
+
+ 2020-03-06T07:57:37.633
+ 2020-03-06T07:57:37.633
+ 317169
+
+ HiddenJourneyBuilderTriggeredSends_d
+
+
+ 90889
+
+ HiddenCategory_default
+
+ HiddenJourneyBuilderTriggeredSends
+ triggered_send folder to store triggered_send items
+ triggered_send
+ true
+ true
+ true
+
+
+
+
+ 1111111
+
+
+ 2022-01-01T00:00:00.0
+ 2022-01-01T00:00:00.0
+ 77777
+
+
+
+
+ 89397
+
+
+ testFolder_samePath
+
+ asset
+ true
+ true
+ true
+
+
+
+
diff --git a/test/resources/9999999/folder-deploy-samepath/Content Builder/testFolder_samePath.folder-meta.json b/test/resources/9999999/folder-deploy-samepath/Content Builder/testFolder_samePath.folder-meta.json
new file mode 100644
index 000000000..876cd1479
--- /dev/null
+++ b/test/resources/9999999/folder-deploy-samepath/Content Builder/testFolder_samePath.folder-meta.json
@@ -0,0 +1,9 @@
+{
+ "Name": "testFolder_samePath",
+ "Description": "",
+ "ContentType": "asset",
+ "IsActive": true,
+ "IsEditable": true,
+ "AllowChildren": true,
+ "_generated": true
+}
diff --git a/test/resources/9999999/folder-deploy-slash/Content Builder/Headers%2FFolders.folder-meta.json b/test/resources/9999999/folder-deploy-slash/Content Builder/Headers%2FFolders.folder-meta.json
new file mode 100644
index 000000000..1e7d61b70
--- /dev/null
+++ b/test/resources/9999999/folder-deploy-slash/Content Builder/Headers%2FFolders.folder-meta.json
@@ -0,0 +1,9 @@
+{
+ "Name": "Headers/Folders",
+ "Description": "",
+ "ContentType": "asset",
+ "IsActive": true,
+ "IsEditable": true,
+ "AllowChildren": true,
+ "_generated": true
+}
diff --git a/test/type.folder.test.js b/test/type.folder.test.js
index 8a3a87743..92226e8bd 100644
--- a/test/type.folder.test.js
+++ b/test/type.folder.test.js
@@ -6,6 +6,7 @@ import chaiFiles from 'chai-files';
import cache from '../lib/util/cache.js';
import * as testUtils from './utils.js';
import handler from '../lib/index.js';
+import { Util } from '../lib/util/util.js';
chai.use(chaiFiles);
describe('type: folder', () => {
@@ -17,6 +18,38 @@ describe('type: folder', () => {
testUtils.mockReset();
});
+ describe('Retrieve ================', () => {
+ it('Should retrieve an asset whose folder name contains a slash and escape the slash in r__folder_Path', async () => {
+ // GIVEN the SFMC folder "bla/blub" (child of Content Builder) and an asset in that folder
+ await testUtils.copyFile(
+ 'dataFolder/+retrieve-ContentTypeINasset,asset-shared,cloudpages-slashfolder-response.xml',
+ 'dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages-response.xml'
+ );
+ await testUtils.copyFile(
+ 'asset/v1/content/assets/query/+post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213-slashfolder.json',
+ 'asset/v1/content/assets/query/post-response-assetType.idIN3,195,196,197,198,199,200,201,202,203,210,211,212,213.json'
+ );
+
+ const retrieve = await handler.retrieve('testInstance/testBU', ['asset-block']);
+ // THEN
+ assert.equal(process.exitCode, 0, 'retrieve should not have thrown an error');
+ assert.equal(
+ retrieve['testInstance/testBU'].asset
+ ? Object.keys(retrieve['testInstance/testBU'].asset).length
+ : 0,
+ 5,
+ 'five assets expected in retrieve response (4 existing + 1 new test_slash)'
+ );
+ // Verify the retrieved asset has the escape char (∕) in r__folder_Path, not a real slash
+ assert.equal(
+ retrieve['testInstance/testBU'].asset?.test_slash?.r__folder_Path,
+ 'Content Builder/bla' + Util.folderNameSlashEscapeChar + 'blub',
+ 'r__folder_Path should use ∕ (U+2215) to escape the slash in the folder name'
+ );
+ return;
+ });
+ });
+
describe('Deploy ================', () => {
it('Should create automation & dataExtension folders', async () => {
// prepare
@@ -103,5 +136,129 @@ describe('type: folder', () => {
);
return;
});
+
+ it('Should create folder when same path exists in another Business Unit', async () => {
+ // prepare
+ // Use folder deploy data with an asset folder path
+ testUtils.copyToDeploy('folder-deploy-samepath', 'folder');
+ // Use a modified retrieve response that includes 'Content Builder/testFolder_samePath'
+ // from a different BU (Client.ID=1111111). ContentType 'asset' is in folderTypesFromParent
+ // so it will be cached even though it belongs to another BU - simulating the bug scenario
+ await testUtils.copyFile(
+ 'dataFolder/retrieve-samePathOtherBU-response.xml',
+ 'dataFolder/retrieve-response.xml'
+ );
+
+ const deployed = await handler.deploy('testInstance/testBU', ['folder']);
+ // THEN
+ assert.equal(process.exitCode, 0, 'deploy should not have thrown an error');
+
+ // check what was deployed - 'Content Builder/testFolder_samePath' should be created
+ // even though it exists in another BU (1111111)
+ const deployedFolderPaths = deployed['testInstance/testBU']?.folder
+ ? Object.values(deployed['testInstance/testBU']?.folder).map((f) => f.Path)
+ : [];
+ assert.include(
+ deployedFolderPaths,
+ 'Content Builder/testFolder_samePath',
+ "'Content Builder/testFolder_samePath' should have been created in current BU, not skipped because it exists in another BU"
+ );
+
+ const createRestCallouts = testUtils.getRestCallout(
+ 'post',
+ '/asset/v1/content/categories',
+ true
+ );
+ // 'Content Builder/testFolder_samePath' must be created in current BU via REST
+ // (not skipped due to same path in other BU)
+ assert.ok(
+ createRestCallouts?.some(
+ (c) => c.name === 'testFolder_samePath' && c.parentId === 89397
+ ),
+ "'Content Builder/testFolder_samePath' folder creation callout not found - folder was incorrectly skipped"
+ );
+ return;
+ });
+
+ it('Should create a folder whose name contains a slash character (direct folder deploy)', async () => {
+ // GIVEN a folder deploy file named Headers%2FFolders.folder-meta.json with Name "Headers/Folders"
+ // (the % encoding represents the actual '/' in the SFMC folder name)
+ testUtils.copyToDeploy('folder-deploy-slash', 'folder');
+
+ const deployed = await handler.deploy('testInstance/testBU', ['folder']);
+ // THEN
+ assert.equal(process.exitCode, 0, 'deploy should not have thrown an error');
+
+ // Verify the deployed path uses the escape char (∕) not the real slash
+ const deployedFolderPaths = deployed['testInstance/testBU']?.folder
+ ? Object.values(deployed['testInstance/testBU']?.folder).map((f) => f.Path)
+ : [];
+ assert.include(
+ deployedFolderPaths,
+ 'Content Builder/Headers' + Util.folderNameSlashEscapeChar + 'Folders',
+ 'deployed folder path should use escape char for the slash in folder name'
+ );
+
+ // Verify that the REST Create callout uses the REAL slash character in the name field
+ // (not the escape character), so that SFMC creates a folder named "Headers/Folders"
+ const createRestCallouts = testUtils.getRestCallout(
+ 'post',
+ '/asset/v1/content/categories',
+ true
+ );
+ assert.ok(
+ createRestCallouts?.some(
+ (c) => c.name === 'Headers/Folders' && c.parentId === 89397
+ ),
+ "REST create for 'Headers/Folders' should use the real slash in name, not the escape char"
+ );
+ // Verify the escape char was NOT sent as the folder name
+ assert.ok(
+ !createRestCallouts?.some(
+ (c) => c.name === 'Headers' + Util.folderNameSlashEscapeChar + 'Folders'
+ ),
+ 'REST create should NOT use the escape char in the name field'
+ );
+ return;
+ });
+
+ it('Should create a folder whose name contains a slash when triggered via r__folder_Path from an asset', async () => {
+ // GIVEN an asset deploy with r__folder_Path pointing to a subfolder whose name contains a slash
+ // The escape char (∕) in r__folder_Path separates the slash-in-name from path separators
+ testUtils.copyToDeploy('asset-slashfolder-deploy', 'asset');
+
+ const deployed = await handler.deploy('testInstance/testBU', ['asset']);
+ // THEN
+ assert.equal(process.exitCode, 0, 'deploy should not have thrown an error');
+
+ // Verify the asset was deployed
+ assert.equal(
+ deployed['testInstance/testBU']?.asset
+ ? Object.keys(deployed['testInstance/testBU']?.asset).length
+ : 0,
+ 1,
+ 'one asset should have been deployed'
+ );
+
+ // Verify the auto-generated folder was created via REST with the REAL slash in the name field
+ // (not the escape char), so SFMC creates a folder named "bla/blub"
+ const createRestCallouts = testUtils.getRestCallout(
+ 'post',
+ '/asset/v1/content/categories',
+ true
+ );
+ assert.ok(
+ createRestCallouts?.some((c) => c.name === 'bla/blub' && c.parentId === 89397),
+ "REST create for 'Content Builder/bla∕blub' should send name 'bla/blub' with real slash"
+ );
+ // Verify the escape char was NOT sent as the folder name
+ assert.ok(
+ !createRestCallouts?.some(
+ (c) => c.name === 'bla' + Util.folderNameSlashEscapeChar + 'blub'
+ ),
+ 'REST create should NOT use the escape char in the name field'
+ );
+ return;
+ });
});
});