mcdev 7.6.3 → 7.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  2. package/.github/ISSUE_TEMPLATE/task.md +1 -1
  3. package/.github/workflows/coverage-base-update.yml +2 -2
  4. package/.github/workflows/coverage-develop-branch.yml +3 -1
  5. package/.github/workflows/coverage-main-branch.yml +3 -1
  6. package/.github/workflows/coverage.yml +5 -3
  7. package/.mcdev-validations.js +0 -0
  8. package/@types/lib/Builder.d.ts +14 -0
  9. package/@types/lib/Builder.d.ts.map +1 -1
  10. package/@types/lib/MetadataTypeDefinitions.d.ts +2 -0
  11. package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
  12. package/@types/lib/MetadataTypeInfo.d.ts +2 -0
  13. package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
  14. package/@types/lib/index.d.ts +17 -8
  15. package/@types/lib/index.d.ts.map +1 -1
  16. package/@types/lib/metadataTypes/Asset.d.ts +11 -3
  17. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
  18. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
  19. package/@types/lib/metadataTypes/DomainVerification.d.ts +180 -0
  20. package/@types/lib/metadataTypes/DomainVerification.d.ts.map +1 -0
  21. package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
  22. package/@types/lib/metadataTypes/Journey.d.ts +7 -4
  23. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  24. package/@types/lib/metadataTypes/MetadataType.d.ts +15 -7
  25. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  26. package/@types/lib/metadataTypes/MobileKeyword.d.ts +2 -10
  27. package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
  28. package/@types/lib/metadataTypes/MobileMessage.d.ts +2 -10
  29. package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
  30. package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
  31. package/@types/lib/metadataTypes/SenderProfile.d.ts +7 -0
  32. package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
  33. package/@types/lib/metadataTypes/TransactionalEmail.d.ts +2 -2
  34. package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
  35. package/@types/lib/metadataTypes/TriggeredSend.d.ts +8 -0
  36. package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
  37. package/@types/lib/metadataTypes/Verification.d.ts +0 -9
  38. package/@types/lib/metadataTypes/Verification.d.ts.map +1 -1
  39. package/@types/lib/metadataTypes/definitions/DomainVerification.definition.d.ts +100 -0
  40. package/@types/lib/metadataTypes/definitions/DomainVerification.definition.d.ts.map +1 -0
  41. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +1 -1
  42. package/@types/lib/util/devops.d.ts.map +1 -1
  43. package/@types/lib/util/replaceContentBlockReference.d.ts +2 -1
  44. package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
  45. package/@types/lib/util/util.d.ts +42 -1
  46. package/@types/lib/util/util.d.ts.map +1 -1
  47. package/@types/lib/util/validations.d.ts.map +1 -1
  48. package/@types/types/mcdev.d.d.ts +34 -0
  49. package/@types/types/mcdev.d.d.ts.map +1 -1
  50. package/boilerplate/config.json +11 -0
  51. package/boilerplate/files/eslint.config.js +98 -3
  52. package/boilerplate/forcedUpdates.json +4 -0
  53. package/boilerplate/gitignore-template +1 -1
  54. package/boilerplate/npm-dependencies.json +1 -0
  55. package/eslint.config.js +4 -3
  56. package/lib/Builder.js +114 -54
  57. package/lib/Deployer.js +2 -2
  58. package/lib/MetadataTypeDefinitions.js +2 -0
  59. package/lib/MetadataTypeInfo.js +2 -0
  60. package/lib/cli.js +127 -3
  61. package/lib/index.js +217 -164
  62. package/lib/metadataTypes/Asset.js +76 -22
  63. package/lib/metadataTypes/DataExtension.js +10 -2
  64. package/lib/metadataTypes/DomainVerification.js +246 -0
  65. package/lib/metadataTypes/Event.js +21 -9
  66. package/lib/metadataTypes/Journey.js +339 -223
  67. package/lib/metadataTypes/MetadataType.js +153 -106
  68. package/lib/metadataTypes/MobileKeyword.js +5 -2
  69. package/lib/metadataTypes/MobileMessage.js +5 -2
  70. package/lib/metadataTypes/SendClassification.js +5 -0
  71. package/lib/metadataTypes/SenderProfile.js +102 -3
  72. package/lib/metadataTypes/TransactionalEmail.js +3 -1
  73. package/lib/metadataTypes/Verification.js +3 -1
  74. package/lib/metadataTypes/definitions/DomainVerification.definition.js +71 -0
  75. package/lib/metadataTypes/definitions/Journey.definition.js +7 -1
  76. package/lib/metadataTypes/definitions/SendClassification.definition.js +2 -2
  77. package/lib/metadataTypes/definitions/SenderProfile.definition.js +1 -1
  78. package/lib/util/config.js +6 -0
  79. package/lib/util/devops.js +130 -154
  80. package/lib/util/file.js +3 -3
  81. package/lib/util/replaceContentBlockReference.js +10 -3
  82. package/lib/util/util.js +96 -14
  83. package/lib/util/validations.js +34 -14
  84. package/package.json +10 -10
  85. package/test/general.test.js +339 -96
  86. package/test/mockRoot/.mcdev-validations.js +66 -0
  87. package/test/mockRoot/.mcdevrc.json +30 -2
  88. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.html +1 -0
  89. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_htmlblock.asset-block-meta.json +39 -0
  90. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.html +4 -0
  91. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_notexisting.asset-block-meta.json +39 -0
  92. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.html +4 -0
  93. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset_withCBBK_preexisting.asset-block-meta.json +39 -0
  94. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/testNew_assetMessage.asset-message-meta.json +435 -0
  95. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_assetMessage/views.html.content.asset-message-meta.html +150 -0
  96. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/testNew_asset_templatebasedemail.asset-message-meta.json +305 -0
  97. package/test/mockRoot/deploy/testInstance/testBU/asset/message/testNew_asset_templatebasedemail/views.html.content.asset-message-meta.html +150 -0
  98. package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/content.asset-template-meta.html +150 -0
  99. package/test/mockRoot/deploy/testInstance/testBU/asset/template/testNew_asset_template/testNew_asset_template.asset-template-meta.json +116 -0
  100. package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld.New@accenture.com.domainVerification-meta.json +6 -0
  101. package/test/mockRoot/deploy/testInstance/testBU/domainVerification/joern.berkefeld@accenture.com.domainVerification-meta.json +6 -0
  102. package/test/mockRoot/deploy/testInstance/testBU/domainVerification/mcdev.accenture.com.domainVerification-meta.json +6 -0
  103. package/test/mockRoot/deploy/testInstance/testBU/journey/testNew_temail_notPublished.journey-meta.json +213 -0
  104. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testExisting_senderProfile.senderProfile-meta.json +1 -0
  105. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testNew_senderProfile.senderProfile-meta.json +1 -0
  106. package/test/resourceFactory.js +7 -24
  107. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_assetMessage.json +441 -0
  108. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_htmlblock.json +59 -0
  109. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_template.json +147 -0
  110. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_templatebasedemail.json +322 -0
  111. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_notexisting.json +59 -0
  112. package/test/resources/9999999/asset/v1/content/assets/post-response-key=testNew_asset_withCBBK_preexisting.json +59 -0
  113. package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.html +1 -0
  114. package/test/resources/9999999/asset-deploy2/block/testBlacklist_asset_htmlblock.asset-block-meta.json +39 -0
  115. package/test/resources/9999999/automation/clone-expected.json +61 -0
  116. package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testExisting_dataExtension-response.xml +52 -0
  117. package/test/resources/9999999/dataExtension-deploy/testBlacklist_dataExtension.dataExtension-meta.json +20 -0
  118. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +137 -0
  119. package/test/resources/9999999/domainVerification/create-expected.json +3 -0
  120. package/test/resources/9999999/domainVerification/get-sap-expected.json +6 -0
  121. package/test/resources/9999999/domainVerification/update-expected.json +6 -0
  122. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/put-response-paused.json +219 -0
  123. package/test/resources/9999999/interaction/v1/interactions/key_testNew_temail_notPublished/get-response.json +218 -0
  124. package/test/resources/9999999/interaction/v1/interactions/post-response.json +216 -0
  125. package/test/resources/9999999/journey/create-transactionaEmail-publish-expected.json +217 -0
  126. package/test/resources/9999999/messaging/v1/domainverification/delete/post-response.txt +1 -0
  127. package/test/resources/9999999/messaging/v1/domainverification/get-response.json +43 -0
  128. package/test/resources/9999999/messaging/v1/domainverification/post-response.txt +1 -0
  129. package/test/resources/9999999/messaging/v1/domainverification/update/post-response.txt +1 -0
  130. package/test/resources/9999999/messaging/v1/email/definitions/get-response.json +7 -0
  131. package/test/resources/9999999/messaging/v1/email/definitions/testNew_temail_notPublished/get-response.json +26 -0
  132. package/test/resources/9999999/query/clone-expected.json +8 -0
  133. package/test/resources/9999999/query/clone-expected.sql +7 -0
  134. package/test/resources/9999999/senderProfile/create-response.xml +1 -1
  135. package/test/resources/9999999/senderProfile/post-expected.json +1 -1
  136. package/test/resources/9999999/transactionalEmail/create-publish-expected.json +20 -0
  137. package/test/type.asset.test.js +216 -9
  138. package/test/type.automation.test.js +1 -1
  139. package/test/type.domainVerification.test.js +169 -0
  140. package/test/type.journey.test.js +107 -21
  141. package/test/type.script.test.js +1 -1
  142. package/test/type.sendClassification.test.js +3 -3
  143. package/test/type.senderProfile.test.js +26 -6
  144. package/test/type.transactionalEmail.test.js +5 -5
  145. package/test/type.triggeredSend.test.js +1 -1
  146. package/test/utils.js +8 -0
  147. package/types/mcdev.d.js +12 -0
package/lib/cli.js CHANGED
@@ -207,6 +207,10 @@ yargs(hideBin(process.argv))
207
207
  group: 'Options for deploy:',
208
208
  describe:
209
209
  'relevant for Salesforce triggered journeys and events; allows ignoring errors on missing Salesforce fields in case the API returns other info than the GUI. CAUTION!',
210
+ })
211
+ .option('fix', {
212
+ group: 'Options for deploy:',
213
+ describe: 'auto-fix validation issues if the rule is able to do it',
210
214
  }),
211
215
 
212
216
  (argv) => {
@@ -379,6 +383,65 @@ yargs(hideBin(process.argv))
379
383
  [],
380
384
  isDeprecated
381
385
  )
386
+ .command(
387
+ ['clone'],
388
+ 'clones items across BUs. Alias for: mcdev build --mf __clone__ --mt __clone__',
389
+ (yargs) =>
390
+ yargs
391
+ .option('metadata', {
392
+ type: 'string',
393
+ array: true,
394
+ alias: 'm',
395
+ group: 'Required parameters for clone:',
396
+ describe: 'type:key combos to clone',
397
+ demandOption: true,
398
+ })
399
+ .option('buFrom', {
400
+ type: 'string',
401
+ alias: 'bf',
402
+ group: 'Required parameters for clone:',
403
+ describe:
404
+ 'the business unit to create the templates from (in format "credential name/BU name")',
405
+ demandOption: true,
406
+ })
407
+ .option('buTo', {
408
+ type: 'string',
409
+ alias: 'bt',
410
+ group: 'Required parameters for clone:',
411
+ describe: 'the business unit to deploy to; required unless --bulk is set',
412
+ })
413
+ .option('dependencies', {
414
+ type: 'boolean',
415
+ alias: 'D',
416
+ group: 'Options for clone:',
417
+ describe: 'create templates for all dependencies of the metadata component',
418
+ })
419
+ .option('retrieve', {
420
+ type: 'boolean',
421
+ alias: 'r',
422
+ group: 'Options for clone:',
423
+ describe:
424
+ 're-retrieves potentially relevant metadata before running buildTemplate (all if --dependencies is used)',
425
+ })
426
+ .option('skipValidation', {
427
+ alias: 'sv',
428
+ group: 'Options for clone:',
429
+ describe:
430
+ 'allows reducing validation rules from error to warn to handle edge cases',
431
+ })
432
+ .option('purge', {
433
+ group: 'Options for clone:',
434
+ describe:
435
+ 'deletes the relevant deploy folder before building the definition. Add "--no-purge" to skip the question and not delete anything',
436
+ }),
437
+ (argv) => {
438
+ Mcdev.setOptions(argv);
439
+ const typeKeyCombo = Mcdev.metadataToTypeKey(argv.metadata);
440
+ if ('undefined' !== typeof typeKeyCombo) {
441
+ Mcdev.clone(argv.buFrom, argv.buTo, typeKeyCombo);
442
+ }
443
+ }
444
+ )
382
445
  .command(
383
446
  ['build'],
384
447
  'runs buildTemplate followed by buildDefinition',
@@ -446,6 +509,15 @@ yargs(hideBin(process.argv))
446
509
  group: 'Options for build:',
447
510
  describe:
448
511
  'allows reducing validation rules from error to warn to handle edge cases',
512
+ })
513
+ .option('purge', {
514
+ group: 'Options for build:',
515
+ describe:
516
+ 'deletes the relevant deploy folder before building the definition. Add "--no-purge" to skip the question and not delete anything',
517
+ })
518
+ .option('fix', {
519
+ group: 'Options for build:',
520
+ describe: 'auto-fix validation issues if the rule is able to do it',
449
521
  }),
450
522
  (argv) => {
451
523
  Mcdev.setOptions(argv);
@@ -578,6 +650,15 @@ yargs(hideBin(process.argv))
578
650
  describe:
579
651
  'allows reducing validation rules from error to warn to handle edge cases',
580
652
  })
653
+ .option('purge', {
654
+ group: 'Options for buildDefinition:',
655
+ describe:
656
+ 'deletes the relevant deploy folder before building the definition. Add "--no-purge" to skip the question and not delete anything',
657
+ })
658
+ .option('fix', {
659
+ group: 'Options for buildDefinition:',
660
+ describe: 'auto-fix validation issues if the rule is able to do it',
661
+ })
581
662
  .check((argv) => {
582
663
  if (!argv.MARKET && !argv.market) {
583
664
  throw new Error(
@@ -635,6 +716,15 @@ yargs(hideBin(process.argv))
635
716
  group: 'Options for buildDefinitionBulk:',
636
717
  describe:
637
718
  'allows reducing validation rules from error to warn to handle edge cases',
719
+ })
720
+ .option('purge', {
721
+ group: 'Options for buildDefinitionBulk:',
722
+ describe:
723
+ 'deletes the relevant deploy folder before building the definition. Add "--no-purge" to skip the question and not delete anything',
724
+ })
725
+ .option('fix', {
726
+ group: 'Options for buildDefinitionBulk:',
727
+ describe: 'auto-fix validation issues if the rule is able to do it',
638
728
  }),
639
729
  (argv) => {
640
730
  Mcdev.setOptions(argv);
@@ -670,14 +760,20 @@ yargs(hideBin(process.argv))
670
760
  }
671
761
  )
672
762
  .command(
673
- ['createDeltaPkg [range]', 'cdp'],
763
+ ['createDeltaPkg [commitrange]', 'cdp'],
674
764
  'Copies commit-based file delta into deploy folder',
675
765
  (yargs) =>
676
766
  yargs
677
- .positional('range', {
767
+ .positional('commitrange', {
678
768
  type: 'string',
679
769
  describe: 'Pull Request target branch or git commit range',
680
770
  })
771
+ .option('range', {
772
+ type: 'string',
773
+ alias: ['branch', 'commit', 'R'],
774
+ group: 'Options for createDeltaPkg:',
775
+ describe: 'Pull Request target branch or git commit range',
776
+ })
681
777
  .option('filter', {
682
778
  type: 'string',
683
779
  group: 'Options for createDeltaPkg:',
@@ -688,6 +784,34 @@ yargs(hideBin(process.argv))
688
784
  type: 'number',
689
785
  group: 'Options for createDeltaPkg:',
690
786
  describe: 'Number of commits to look back for changes (supersedes config)',
787
+ })
788
+ .option('dependencies', {
789
+ type: 'boolean',
790
+ alias: 'D',
791
+ group: 'Options for build (run via createDeltaPkg):',
792
+ describe: 'create templates for all dependencies of the metadata component',
793
+ })
794
+ .option('retrieve', {
795
+ type: 'boolean',
796
+ alias: 'r',
797
+ group: 'Options for build (run via createDeltaPkg):',
798
+ describe:
799
+ 're-retrieves potentially relevant metadata before running buildTemplate (all if --dependencies is used)',
800
+ })
801
+ .option('skipValidation', {
802
+ alias: 'sv',
803
+ group: 'Options for build (run via createDeltaPkg):',
804
+ describe:
805
+ 'allows reducing validation rules from error to warn to handle edge cases',
806
+ })
807
+ .option('purge', {
808
+ group: 'Options for build (run via createDeltaPkg):',
809
+ describe:
810
+ 'deletes the relevant deploy folder before building the definition. Add "--no-purge" to skip the question and not delete anything',
811
+ })
812
+ .option('fix', {
813
+ group: 'Options for build (run via createDeltaPkg)',
814
+ describe: 'auto-fix validation issues if the rule is able to do it',
691
815
  }),
692
816
  (argv) => {
693
817
  Mcdev.setOptions(argv);
@@ -1248,7 +1372,7 @@ yargs(hideBin(process.argv))
1248
1372
  .recommendCommands()
1249
1373
  .wrap(yargs(hideBin(process.argv)).terminalWidth())
1250
1374
  .epilog(
1251
- 'Copyright 2024. Accenture. Get support at https://github.com/Accenture/sfmc-devtools/issues'
1375
+ 'Copyright 2025. Accenture. Get support at https://github.com/Accenture/sfmc-devtools/issues'
1252
1376
  )
1253
1377
  .help().argv;
1254
1378