sf-browserforce 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +266 -0
  3. package/bin/run +9 -0
  4. package/bin/run.cmd +3 -0
  5. package/lib/browserforce-command.d.ts +27 -0
  6. package/lib/browserforce-command.js +162 -0
  7. package/lib/browserforce-command.js.map +1 -0
  8. package/lib/browserforce.d.ts +27 -0
  9. package/lib/browserforce.js +163 -0
  10. package/lib/browserforce.js.map +1 -0
  11. package/lib/commands/browserforce/apply.d.ts +10 -0
  12. package/lib/commands/browserforce/apply.js +83 -0
  13. package/lib/commands/browserforce/apply.js.map +1 -0
  14. package/lib/commands/browserforce/playwright.d.ts +9 -0
  15. package/lib/commands/browserforce/playwright.js +53 -0
  16. package/lib/commands/browserforce/playwright.js.map +1 -0
  17. package/lib/config-parser.d.ts +16 -0
  18. package/lib/config-parser.js +24 -0
  19. package/lib/config-parser.js.map +1 -0
  20. package/lib/index.d.ts +1 -0
  21. package/lib/index.js +2 -0
  22. package/lib/index.js.map +1 -0
  23. package/lib/jsforce-utils.d.ts +5 -0
  24. package/lib/jsforce-utils.js +14 -0
  25. package/lib/jsforce-utils.js.map +1 -0
  26. package/lib/pages/login.d.ts +7 -0
  27. package/lib/pages/login.js +17 -0
  28. package/lib/pages/login.js.map +1 -0
  29. package/lib/plugin.d.ts +15 -0
  30. package/lib/plugin.js +28 -0
  31. package/lib/plugin.js.map +1 -0
  32. package/lib/plugins/activity-settings/index.d.ts +9 -0
  33. package/lib/plugins/activity-settings/index.e2e-spec.d.ts +1 -0
  34. package/lib/plugins/activity-settings/index.e2e-spec.js +36 -0
  35. package/lib/plugins/activity-settings/index.e2e-spec.js.map +1 -0
  36. package/lib/plugins/activity-settings/index.js +102 -0
  37. package/lib/plugins/activity-settings/index.js.map +1 -0
  38. package/lib/plugins/auth-providers/index.d.ts +13 -0
  39. package/lib/plugins/auth-providers/index.e2e-spec.d.ts +1 -0
  40. package/lib/plugins/auth-providers/index.e2e-spec.js +78 -0
  41. package/lib/plugins/auth-providers/index.e2e-spec.js.map +1 -0
  42. package/lib/plugins/auth-providers/index.js +135 -0
  43. package/lib/plugins/auth-providers/index.js.map +1 -0
  44. package/lib/plugins/company-information/index.d.ts +8 -0
  45. package/lib/plugins/company-information/index.e2e-spec.d.ts +1 -0
  46. package/lib/plugins/company-information/index.e2e-spec.js +37 -0
  47. package/lib/plugins/company-information/index.e2e-spec.js.map +1 -0
  48. package/lib/plugins/company-information/index.js +114 -0
  49. package/lib/plugins/company-information/index.js.map +1 -0
  50. package/lib/plugins/customer-portal/available-custom-objects/index.d.ts +14 -0
  51. package/lib/plugins/customer-portal/available-custom-objects/index.js +203 -0
  52. package/lib/plugins/customer-portal/available-custom-objects/index.js.map +1 -0
  53. package/lib/plugins/customer-portal/available-custom-objects/index.test.d.ts +1 -0
  54. package/lib/plugins/customer-portal/available-custom-objects/index.test.js +39 -0
  55. package/lib/plugins/customer-portal/available-custom-objects/index.test.js.map +1 -0
  56. package/lib/plugins/customer-portal/enabled/index.d.ts +6 -0
  57. package/lib/plugins/customer-portal/enabled/index.js +89 -0
  58. package/lib/plugins/customer-portal/enabled/index.js.map +1 -0
  59. package/lib/plugins/customer-portal/enabled/index.test.d.ts +1 -0
  60. package/lib/plugins/customer-portal/enabled/index.test.js +34 -0
  61. package/lib/plugins/customer-portal/enabled/index.test.js.map +1 -0
  62. package/lib/plugins/customer-portal/index.d.ts +15 -0
  63. package/lib/plugins/customer-portal/index.e2e-spec.d.ts +1 -0
  64. package/lib/plugins/customer-portal/index.e2e-spec.js +188 -0
  65. package/lib/plugins/customer-portal/index.e2e-spec.js.map +1 -0
  66. package/lib/plugins/customer-portal/index.js +58 -0
  67. package/lib/plugins/customer-portal/index.js.map +1 -0
  68. package/lib/plugins/customer-portal/index.test.d.ts +1 -0
  69. package/lib/plugins/customer-portal/index.test.js +84 -0
  70. package/lib/plugins/customer-portal/index.test.js.map +1 -0
  71. package/lib/plugins/customer-portal/portals/index.d.ts +25 -0
  72. package/lib/plugins/customer-portal/portals/index.js +254 -0
  73. package/lib/plugins/customer-portal/portals/index.js.map +1 -0
  74. package/lib/plugins/customer-portal/portals/index.test.d.ts +1 -0
  75. package/lib/plugins/customer-portal/portals/index.test.js +140 -0
  76. package/lib/plugins/customer-portal/portals/index.test.js.map +1 -0
  77. package/lib/plugins/density-settings/index.d.ts +10 -0
  78. package/lib/plugins/density-settings/index.e2e-spec.d.ts +1 -0
  79. package/lib/plugins/density-settings/index.e2e-spec.js +39 -0
  80. package/lib/plugins/density-settings/index.e2e-spec.js.map +1 -0
  81. package/lib/plugins/density-settings/index.js +101 -0
  82. package/lib/plugins/density-settings/index.js.map +1 -0
  83. package/lib/plugins/deprecated.d.ts +4 -0
  84. package/lib/plugins/deprecated.js +28 -0
  85. package/lib/plugins/deprecated.js.map +1 -0
  86. package/lib/plugins/email-deliverability/index.d.ts +9 -0
  87. package/lib/plugins/email-deliverability/index.e2e-spec.d.ts +1 -0
  88. package/lib/plugins/email-deliverability/index.e2e-spec.js +55 -0
  89. package/lib/plugins/email-deliverability/index.e2e-spec.js.map +1 -0
  90. package/lib/plugins/email-deliverability/index.js +109 -0
  91. package/lib/plugins/email-deliverability/index.js.map +1 -0
  92. package/lib/plugins/high-velocity-sales-settings/index.d.ts +10 -0
  93. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.d.ts +1 -0
  94. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js +29 -0
  95. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js.map +1 -0
  96. package/lib/plugins/high-velocity-sales-settings/index.js +105 -0
  97. package/lib/plugins/high-velocity-sales-settings/index.js.map +1 -0
  98. package/lib/plugins/high-velocity-sales-settings/page.d.ts +8 -0
  99. package/lib/plugins/high-velocity-sales-settings/page.js +27 -0
  100. package/lib/plugins/high-velocity-sales-settings/page.js.map +1 -0
  101. package/lib/plugins/history-tracking/index.d.ts +19 -0
  102. package/lib/plugins/history-tracking/index.e2e-spec.d.ts +1 -0
  103. package/lib/plugins/history-tracking/index.e2e-spec.js +128 -0
  104. package/lib/plugins/history-tracking/index.e2e-spec.js.map +1 -0
  105. package/lib/plugins/history-tracking/index.js +272 -0
  106. package/lib/plugins/history-tracking/index.js.map +1 -0
  107. package/lib/plugins/home-page-layouts/index.d.ts +14 -0
  108. package/lib/plugins/home-page-layouts/index.e2e-spec.d.ts +1 -0
  109. package/lib/plugins/home-page-layouts/index.e2e-spec.js +47 -0
  110. package/lib/plugins/home-page-layouts/index.e2e-spec.js.map +1 -0
  111. package/lib/plugins/home-page-layouts/index.js +145 -0
  112. package/lib/plugins/home-page-layouts/index.js.map +1 -0
  113. package/lib/plugins/home-page-layouts/index.test.d.ts +1 -0
  114. package/lib/plugins/home-page-layouts/index.test.js +104 -0
  115. package/lib/plugins/home-page-layouts/index.test.js.map +1 -0
  116. package/lib/plugins/index.d.ts +28 -0
  117. package/lib/plugins/index.js +29 -0
  118. package/lib/plugins/index.js.map +1 -0
  119. package/lib/plugins/lightning-experience-settings/index.d.ts +17 -0
  120. package/lib/plugins/lightning-experience-settings/index.e2e-spec.d.ts +1 -0
  121. package/lib/plugins/lightning-experience-settings/index.e2e-spec.js +48 -0
  122. package/lib/plugins/lightning-experience-settings/index.e2e-spec.js.map +1 -0
  123. package/lib/plugins/lightning-experience-settings/index.js +149 -0
  124. package/lib/plugins/lightning-experience-settings/index.js.map +1 -0
  125. package/lib/plugins/linkedin-sales-navigator-settings/index.d.ts +8 -0
  126. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.d.ts +1 -0
  127. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js +29 -0
  128. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js.map +1 -0
  129. package/lib/plugins/linkedin-sales-navigator-settings/index.js +93 -0
  130. package/lib/plugins/linkedin-sales-navigator-settings/index.js.map +1 -0
  131. package/lib/plugins/linkedin-sales-navigator-settings/page.d.ts +9 -0
  132. package/lib/plugins/linkedin-sales-navigator-settings/page.js +35 -0
  133. package/lib/plugins/linkedin-sales-navigator-settings/page.js.map +1 -0
  134. package/lib/plugins/login-as-user/index.d.ts +9 -0
  135. package/lib/plugins/login-as-user/index.js +104 -0
  136. package/lib/plugins/login-as-user/index.js.map +1 -0
  137. package/lib/plugins/logout-login-as-user/index.d.ts +6 -0
  138. package/lib/plugins/logout-login-as-user/index.js +76 -0
  139. package/lib/plugins/logout-login-as-user/index.js.map +1 -0
  140. package/lib/plugins/omni-channel-settings/index.d.ts +9 -0
  141. package/lib/plugins/omni-channel-settings/index.e2e-spec.d.ts +1 -0
  142. package/lib/plugins/omni-channel-settings/index.e2e-spec.js +30 -0
  143. package/lib/plugins/omni-channel-settings/index.e2e-spec.js.map +1 -0
  144. package/lib/plugins/omni-channel-settings/index.js +97 -0
  145. package/lib/plugins/omni-channel-settings/index.js.map +1 -0
  146. package/lib/plugins/opportunity-splits/index.d.ts +9 -0
  147. package/lib/plugins/opportunity-splits/index.e2e-spec.d.ts +1 -0
  148. package/lib/plugins/opportunity-splits/index.e2e-spec.js +46 -0
  149. package/lib/plugins/opportunity-splits/index.e2e-spec.js.map +1 -0
  150. package/lib/plugins/opportunity-splits/index.js +117 -0
  151. package/lib/plugins/opportunity-splits/index.js.map +1 -0
  152. package/lib/plugins/opportunity-splits/pages/layout-selection.d.ts +8 -0
  153. package/lib/plugins/opportunity-splits/pages/layout-selection.js +15 -0
  154. package/lib/plugins/opportunity-splits/pages/layout-selection.js.map +1 -0
  155. package/lib/plugins/opportunity-splits/pages/overview.d.ts +11 -0
  156. package/lib/plugins/opportunity-splits/pages/overview.js +32 -0
  157. package/lib/plugins/opportunity-splits/pages/overview.js.map +1 -0
  158. package/lib/plugins/opportunity-splits/pages/setup.d.ts +9 -0
  159. package/lib/plugins/opportunity-splits/pages/setup.js +17 -0
  160. package/lib/plugins/opportunity-splits/pages/setup.js.map +1 -0
  161. package/lib/plugins/permission-sets/index.d.ts +10 -0
  162. package/lib/plugins/permission-sets/index.e2e-spec.d.ts +1 -0
  163. package/lib/plugins/permission-sets/index.e2e-spec.js +47 -0
  164. package/lib/plugins/permission-sets/index.e2e-spec.js.map +1 -0
  165. package/lib/plugins/permission-sets/index.js +22 -0
  166. package/lib/plugins/permission-sets/index.js.map +1 -0
  167. package/lib/plugins/permission-sets/service-presence-status/index.d.ts +10 -0
  168. package/lib/plugins/permission-sets/service-presence-status/index.js +124 -0
  169. package/lib/plugins/permission-sets/service-presence-status/index.js.map +1 -0
  170. package/lib/plugins/picklists/field-dependencies/index.d.ts +11 -0
  171. package/lib/plugins/picklists/field-dependencies/index.js +133 -0
  172. package/lib/plugins/picklists/field-dependencies/index.js.map +1 -0
  173. package/lib/plugins/picklists/field-dependencies/index.test.d.ts +1 -0
  174. package/lib/plugins/picklists/field-dependencies/index.test.js +64 -0
  175. package/lib/plugins/picklists/field-dependencies/index.test.js.map +1 -0
  176. package/lib/plugins/picklists/field-dependencies/pages.d.ts +15 -0
  177. package/lib/plugins/picklists/field-dependencies/pages.js +50 -0
  178. package/lib/plugins/picklists/field-dependencies/pages.js.map +1 -0
  179. package/lib/plugins/picklists/index.d.ts +23 -0
  180. package/lib/plugins/picklists/index.e2e-spec.d.ts +1 -0
  181. package/lib/plugins/picklists/index.e2e-spec.js +128 -0
  182. package/lib/plugins/picklists/index.e2e-spec.js.map +1 -0
  183. package/lib/plugins/picklists/index.js +229 -0
  184. package/lib/plugins/picklists/index.js.map +1 -0
  185. package/lib/plugins/picklists/pages.d.ts +45 -0
  186. package/lib/plugins/picklists/pages.js +185 -0
  187. package/lib/plugins/picklists/pages.js.map +1 -0
  188. package/lib/plugins/picklists/standard-value-set.d.ts +1 -0
  189. package/lib/plugins/picklists/standard-value-set.js +80 -0
  190. package/lib/plugins/picklists/standard-value-set.js.map +1 -0
  191. package/lib/plugins/record-types/index.d.ts +14 -0
  192. package/lib/plugins/record-types/index.e2e-spec.d.ts +1 -0
  193. package/lib/plugins/record-types/index.e2e-spec.js +76 -0
  194. package/lib/plugins/record-types/index.e2e-spec.js.map +1 -0
  195. package/lib/plugins/record-types/index.js +133 -0
  196. package/lib/plugins/record-types/index.js.map +1 -0
  197. package/lib/plugins/record-types/pages.d.ts +14 -0
  198. package/lib/plugins/record-types/pages.js +50 -0
  199. package/lib/plugins/record-types/pages.js.map +1 -0
  200. package/lib/plugins/relate-contact-to-multiple-accounts/index.d.ts +11 -0
  201. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.d.ts +1 -0
  202. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js +30 -0
  203. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js.map +1 -0
  204. package/lib/plugins/relate-contact-to-multiple-accounts/index.js +120 -0
  205. package/lib/plugins/relate-contact-to-multiple-accounts/index.js.map +1 -0
  206. package/lib/plugins/reports-and-dashboards/folder-sharing/index.d.ts +8 -0
  207. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.d.ts +1 -0
  208. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js +3 -0
  209. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js.map +1 -0
  210. package/lib/plugins/reports-and-dashboards/folder-sharing/index.js +116 -0
  211. package/lib/plugins/reports-and-dashboards/folder-sharing/index.js.map +1 -0
  212. package/lib/plugins/reports-and-dashboards/index.d.ts +11 -0
  213. package/lib/plugins/reports-and-dashboards/index.e2e-spec.d.ts +1 -0
  214. package/lib/plugins/reports-and-dashboards/index.e2e-spec.js +3 -0
  215. package/lib/plugins/reports-and-dashboards/index.e2e-spec.js.map +1 -0
  216. package/lib/plugins/reports-and-dashboards/index.js +29 -0
  217. package/lib/plugins/reports-and-dashboards/index.js.map +1 -0
  218. package/lib/plugins/salesforce-cpq-config/formConfig.d.ts +17 -0
  219. package/lib/plugins/salesforce-cpq-config/formConfig.js +649 -0
  220. package/lib/plugins/salesforce-cpq-config/formConfig.js.map +1 -0
  221. package/lib/plugins/salesforce-cpq-config/index.d.ts +7 -0
  222. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.d.ts +1 -0
  223. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js +37 -0
  224. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js.map +1 -0
  225. package/lib/plugins/salesforce-cpq-config/index.js +261 -0
  226. package/lib/plugins/salesforce-cpq-config/index.js.map +1 -0
  227. package/lib/plugins/salesforce-to-salesforce/index.d.ts +9 -0
  228. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.d.ts +1 -0
  229. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js +34 -0
  230. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js.map +1 -0
  231. package/lib/plugins/salesforce-to-salesforce/index.js +107 -0
  232. package/lib/plugins/salesforce-to-salesforce/index.js.map +1 -0
  233. package/lib/plugins/scheduled-batches/index.d.ts +10 -0
  234. package/lib/plugins/scheduled-batches/index.js +145 -0
  235. package/lib/plugins/scheduled-batches/index.js.map +1 -0
  236. package/lib/plugins/scheduled-batches/page.d.ts +19 -0
  237. package/lib/plugins/scheduled-batches/page.js +39 -0
  238. package/lib/plugins/scheduled-batches/page.js.map +1 -0
  239. package/lib/plugins/security/authentication-configuration/index.d.ts +15 -0
  240. package/lib/plugins/security/authentication-configuration/index.e2e-spec.d.ts +1 -0
  241. package/lib/plugins/security/authentication-configuration/index.e2e-spec.js +129 -0
  242. package/lib/plugins/security/authentication-configuration/index.e2e-spec.js.map +1 -0
  243. package/lib/plugins/security/authentication-configuration/index.js +200 -0
  244. package/lib/plugins/security/authentication-configuration/index.js.map +1 -0
  245. package/lib/plugins/security/certificate-and-key-management/index.d.ts +23 -0
  246. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.d.ts +1 -0
  247. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js +59 -0
  248. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js.map +1 -0
  249. package/lib/plugins/security/certificate-and-key-management/index.js +233 -0
  250. package/lib/plugins/security/certificate-and-key-management/index.js.map +1 -0
  251. package/lib/plugins/security/certificate-and-key-management/index.test.d.ts +1 -0
  252. package/lib/plugins/security/certificate-and-key-management/index.test.js +61 -0
  253. package/lib/plugins/security/certificate-and-key-management/index.test.js.map +1 -0
  254. package/lib/plugins/security/index.d.ts +13 -0
  255. package/lib/plugins/security/index.js +41 -0
  256. package/lib/plugins/security/index.js.map +1 -0
  257. package/lib/plugins/service-channels/capacity/index.d.ts +18 -0
  258. package/lib/plugins/service-channels/capacity/index.js +194 -0
  259. package/lib/plugins/service-channels/capacity/index.js.map +1 -0
  260. package/lib/plugins/service-channels/index.d.ts +12 -0
  261. package/lib/plugins/service-channels/index.e2e-spec.d.ts +1 -0
  262. package/lib/plugins/service-channels/index.e2e-spec.js +67 -0
  263. package/lib/plugins/service-channels/index.e2e-spec.js.map +1 -0
  264. package/lib/plugins/service-channels/index.js +37 -0
  265. package/lib/plugins/service-channels/index.js.map +1 -0
  266. package/lib/plugins/slack/index.d.ts +9 -0
  267. package/lib/plugins/slack/index.e2e-spec.d.ts +1 -0
  268. package/lib/plugins/slack/index.e2e-spec.js +47 -0
  269. package/lib/plugins/slack/index.e2e-spec.js.map +1 -0
  270. package/lib/plugins/slack/index.js +111 -0
  271. package/lib/plugins/slack/index.js.map +1 -0
  272. package/lib/plugins/user-access-policies/index.d.ts +19 -0
  273. package/lib/plugins/user-access-policies/index.e2e-spec.d.ts +1 -0
  274. package/lib/plugins/user-access-policies/index.e2e-spec.js +61 -0
  275. package/lib/plugins/user-access-policies/index.e2e-spec.js.map +1 -0
  276. package/lib/plugins/user-access-policies/index.js +176 -0
  277. package/lib/plugins/user-access-policies/index.js.map +1 -0
  278. package/lib/plugins/user-access-policies/page.d.ts +30 -0
  279. package/lib/plugins/user-access-policies/page.js +114 -0
  280. package/lib/plugins/user-access-policies/page.js.map +1 -0
  281. package/lib/plugins/utils.d.ts +13 -0
  282. package/lib/plugins/utils.js +159 -0
  283. package/lib/plugins/utils.js.map +1 -0
  284. package/oclif.manifest.json +177 -0
  285. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/plugins/opportunity-splits/pages/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,GAAG,+BAA+B,CAAC;AACpD,MAAM,oBAAoB,GAAG,mEAAmE,CAAC;AAEjG,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC,IAAI,GAAsB,oEAAoE,CAAC;IAC9F,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QACtD,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,wCAAwC,CAAC,CAAC;QAC/F,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ type PermissionSet = {
3
+ permissionSetName: string;
4
+ servicePresenceStatuses: string[];
5
+ };
6
+ export declare class PermissionSets extends BrowserforcePlugin {
7
+ retrieve(definition?: PermissionSet[]): Promise<PermissionSet[]>;
8
+ apply(plan: PermissionSet[]): Promise<void>;
9
+ }
10
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ import assert from 'assert';
2
+ import * as child from 'child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import * as path from 'path';
5
+ import { PermissionSets } from './index.js';
6
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
7
+ describe(PermissionSets.name, function () {
8
+ this.timeout('10m');
9
+ let plugin;
10
+ before(() => {
11
+ plugin = new PermissionSets(global.browserforce);
12
+ });
13
+ const addConfigurePermissionSet = [
14
+ {
15
+ permissionSetName: 'ServicePresenceTest',
16
+ servicePresenceStatuses: ['TestStatus', 'TestStatus3'],
17
+ },
18
+ ];
19
+ const removeConfigurePermissionSet = [
20
+ {
21
+ permissionSetName: 'ServicePresenceTest',
22
+ servicePresenceStatuses: [],
23
+ },
24
+ ];
25
+ it('should create permission set and service presence status as a prerequisite', () => {
26
+ const sourceDeployCmd = child.spawnSync('sf', [
27
+ 'project',
28
+ 'deploy',
29
+ 'start',
30
+ '-d',
31
+ path.join(__dirname, 'sfdx-source'),
32
+ '--json',
33
+ ]);
34
+ assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
35
+ });
36
+ it('should add permission set presence status', async () => {
37
+ await plugin.run(addConfigurePermissionSet);
38
+ const res = await plugin.retrieve(addConfigurePermissionSet);
39
+ assert.deepStrictEqual(res, addConfigurePermissionSet);
40
+ });
41
+ it('should remove permission set presence status', async () => {
42
+ await plugin.run(removeConfigurePermissionSet);
43
+ const res = await plugin.retrieve(removeConfigurePermissionSet);
44
+ assert.deepStrictEqual(res, removeConfigurePermissionSet);
45
+ });
46
+ });
47
+ //# sourceMappingURL=index.e2e-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/permission-sets/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAAsB,CAAC;IAC3B,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG;QAChC;YACE,iBAAiB,EAAE,qBAAqB;YACxC,uBAAuB,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;SACvD;KACF,CAAC;IAEF,MAAM,4BAA4B,GAAG;QACnC;YACE,iBAAiB,EAAE,qBAAqB;YACxC,uBAAuB,EAAE,EAAE;SAC5B;KACF,CAAC;IAEF,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YAC5C,SAAS;YACT,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;YACnC,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QAChE,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ import { ServicePresenceStatus } from './service-presence-status/index.js';
3
+ export class PermissionSets extends BrowserforcePlugin {
4
+ async retrieve(definition) {
5
+ const pluginServicePresenceStatus = new ServicePresenceStatus(this.browserforce);
6
+ const permissionSets = [];
7
+ for (const permissionSet of definition) {
8
+ permissionSets.push({
9
+ permissionSetName: permissionSet.permissionSetName,
10
+ servicePresenceStatuses: await pluginServicePresenceStatus.retrieve(permissionSet),
11
+ });
12
+ }
13
+ return permissionSets;
14
+ }
15
+ async apply(plan) {
16
+ const pluginServicePresenceStatus = new ServicePresenceStatus(this.browserforce);
17
+ for (const permissionSet of plan) {
18
+ await pluginServicePresenceStatus.apply(permissionSet);
19
+ }
20
+ }
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/permission-sets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAO3E,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IAC7C,KAAK,CAAC,QAAQ,CAAC,UAA4B;QAChD,MAAM,2BAA2B,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEjF,MAAM,cAAc,GAAoB,EAAE,CAAC;QAE3C,KAAK,MAAM,aAAa,IAAI,UAAU,EAAE,CAAC;YACvC,cAAc,CAAC,IAAI,CAAC;gBAClB,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;gBAClD,uBAAuB,EAAE,MAAM,2BAA2B,CAAC,QAAQ,CAAC,aAAa,CAAC;aACnF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAqB;QACtC,MAAM,2BAA2B,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEjF,KAAK,MAAM,aAAa,IAAI,IAAI,EAAE,CAAC;YACjC,MAAM,2BAA2B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { BrowserforcePlugin } from '../../../plugin.js';
2
+ type PermissionSet = {
3
+ permissionSetName: string;
4
+ servicePresenceStatuses: string[];
5
+ };
6
+ export declare class ServicePresenceStatus extends BrowserforcePlugin {
7
+ retrieve(definition: PermissionSet): Promise<string[]>;
8
+ apply(config: PermissionSet): Promise<void>;
9
+ }
10
+ export {};
@@ -0,0 +1,124 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ import { waitForPageErrors } from '../../../browserforce.js';
54
+ import { BrowserforcePlugin } from '../../../plugin.js';
55
+ const ADD_BUTTON_SELECTOR = 'a[id$=":duelingListBox:backingList_add"]';
56
+ const REMOVE_BUTTON_SELECTOR = 'a[id$=":duelingListBox:backingList_remove"]';
57
+ const SAVE_BUTTON_SELECTOR = 'input[id$=":button_pc_save"]';
58
+ const VALUES_AVAILABLE_SELECTOR = 'select[id$=":duelingListBox:backingList_a"]';
59
+ const VALUES_ENABLED_SELECTOR = 'select[id$=":duelingListBox:backingList_s"]';
60
+ export class ServicePresenceStatus extends BrowserforcePlugin {
61
+ async retrieve(definition) {
62
+ const env_1 = { stack: [], error: void 0, hasError: false };
63
+ try {
64
+ // Query for the permission set
65
+ const permissionSetName = definition.permissionSetName;
66
+ const permissionSet = await this.browserforce.connection.singleRecordQuery(`SELECT Id FROM PermissionSet WHERE Name='${permissionSetName}'`);
67
+ // Open the permission set setup page
68
+ const page = __addDisposableResource(env_1, await this.browserforce.openPage(`/${permissionSet.Id}/e?s=ServicePresenceStatusAccess`), true);
69
+ const enabledOptions = await page.locator(`${VALUES_ENABLED_SELECTOR} > option:not(:disabled)`).all();
70
+ const enabledServicePresenceStatuses = await Promise.all(enabledOptions.map((option) => option.getAttribute('title')));
71
+ return enabledServicePresenceStatuses;
72
+ }
73
+ catch (e_1) {
74
+ env_1.error = e_1;
75
+ env_1.hasError = true;
76
+ }
77
+ finally {
78
+ const result_1 = __disposeResources(env_1);
79
+ if (result_1)
80
+ await result_1;
81
+ }
82
+ }
83
+ async apply(config) {
84
+ const env_2 = { stack: [], error: void 0, hasError: false };
85
+ try {
86
+ // Query for the permission set
87
+ const permissionSetName = config.permissionSetName;
88
+ const permissionSet = await this.browserforce.connection.singleRecordQuery(`SELECT Id FROM PermissionSet WHERE Name='${permissionSetName}'`);
89
+ const page = __addDisposableResource(env_2, await this.browserforce.openPage(`/${permissionSet.Id}/e?s=ServicePresenceStatusAccess`), true);
90
+ if (config?.servicePresenceStatuses) {
91
+ const availableOptionLocators = await page.locator(`${VALUES_AVAILABLE_SELECTOR} > option:not(:disabled)`).all();
92
+ const availableOptions = await Promise.all(availableOptionLocators.map((option) => option.getAttribute('title')));
93
+ const enabledOptionLocators = await page.locator(`${VALUES_ENABLED_SELECTOR} > option:not(:disabled)`).all();
94
+ const enabledOptions = await Promise.all(enabledOptionLocators.map((option) => option.getAttribute('title')));
95
+ for (const optionTitle of availableOptions) {
96
+ if (config.servicePresenceStatuses.includes(optionTitle)) {
97
+ await page.getByRole('option', { name: optionTitle, exact: true }).click();
98
+ await page.locator(ADD_BUTTON_SELECTOR).click();
99
+ }
100
+ }
101
+ // Find first option that needs to be removed
102
+ for (const optionTitle of enabledOptions) {
103
+ if (!config.servicePresenceStatuses.includes(optionTitle)) {
104
+ await page.getByRole('option', { name: optionTitle, exact: true }).click();
105
+ await page.locator(REMOVE_BUTTON_SELECTOR).click();
106
+ }
107
+ }
108
+ }
109
+ // Save the settings and wait for page refresh
110
+ await page.locator(SAVE_BUTTON_SELECTOR).click();
111
+ await Promise.race([page.waitForURL((url) => !url.pathname.endsWith('/e')), waitForPageErrors(page)]);
112
+ }
113
+ catch (e_2) {
114
+ env_2.error = e_2;
115
+ env_2.hasError = true;
116
+ }
117
+ finally {
118
+ const result_2 = __disposeResources(env_2);
119
+ if (result_2)
120
+ await result_2;
121
+ }
122
+ }
123
+ }
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/permission-sets/service-presence-status/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { BrowserforcePlugin } from '../../../plugin.js';
2
+ export type FieldDependencyConfig = {
3
+ object: string;
4
+ dependentField: string;
5
+ controllingField: string | null;
6
+ };
7
+ export type Config = FieldDependencyConfig[];
8
+ export declare class FieldDependencies extends BrowserforcePlugin {
9
+ retrieve(definition: Config): Promise<Config>;
10
+ apply(plan: Config): Promise<void>;
11
+ }
@@ -0,0 +1,133 @@
1
+ var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
+ env.stack.push({ value: value, dispose: dispose, async: async });
17
+ }
18
+ else if (async) {
19
+ env.stack.push({ async: true });
20
+ }
21
+ return value;
22
+ };
23
+ var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
+ return function (env) {
25
+ function fail(e) {
26
+ env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
+ env.hasError = true;
28
+ }
29
+ var r, s = 0;
30
+ function next() {
31
+ while (r = env.stack.pop()) {
32
+ try {
33
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
+ if (r.dispose) {
35
+ var result = r.dispose.call(r.value);
36
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
+ }
38
+ else s |= 1;
39
+ }
40
+ catch (e) {
41
+ fail(e);
42
+ }
43
+ }
44
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
+ if (env.hasError) throw env.error;
46
+ }
47
+ return next();
48
+ };
49
+ })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
+ var e = new Error(message);
51
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
+ });
53
+ import { ensureArray } from '../../../jsforce-utils.js';
54
+ import { BrowserforcePlugin } from '../../../plugin.js';
55
+ import { FieldDependencyPage, NewFieldDependencyPage } from './pages.js';
56
+ export class FieldDependencies extends BrowserforcePlugin {
57
+ async retrieve(definition) {
58
+ const dependentFieldNames = definition.map((f) => `${f.object}.${f.dependentField}`);
59
+ const result = await this.browserforce.connection.metadata.read('CustomField', dependentFieldNames);
60
+ const metadata = ensureArray(result);
61
+ const state = definition.map((f) => {
62
+ const fieldState = { ...f };
63
+ const field = metadata.find((m) => m.fullName === `${f.object}.${f.dependentField}`);
64
+ // for diffing: to unset a field dependency, set it to null
65
+ fieldState.controllingField = field?.valueSet?.controllingField ?? null;
66
+ return fieldState;
67
+ });
68
+ return state;
69
+ }
70
+ async apply(plan) {
71
+ const listMetadataResult = await this.browserforce.connection.metadata.list([
72
+ {
73
+ type: 'CustomObject',
74
+ },
75
+ { type: 'CustomField' },
76
+ ]);
77
+ const fileProperties = ensureArray(listMetadataResult);
78
+ for (const dep of plan) {
79
+ await this.browserforce.retry(async () => {
80
+ const customObject = fileProperties.find((x) => x.type === 'CustomObject' && x.fullName === dep.object);
81
+ if (!customObject) {
82
+ throw new Error(`Could not find CustomObject "${dep.object}"`);
83
+ }
84
+ const dependentField = fileProperties.find((x) => x.type === 'CustomField' && x.fullName === `${dep.object}.${dep.dependentField}`);
85
+ if (!dependentField) {
86
+ throw new Error(`Could not find dependent field "${dep.object}.${dep.dependentField}"`);
87
+ }
88
+ // always try deleting an existing dependency first
89
+ {
90
+ const env_1 = { stack: [], error: void 0, hasError: false };
91
+ try {
92
+ const page = __addDisposableResource(env_1, await this.browserforce.openPage(FieldDependencyPage.getUrl(customObject.id)), true);
93
+ const fieldDependenciesPage = new FieldDependencyPage(page);
94
+ await fieldDependenciesPage.clickDeleteDependencyActionForField(dependentField.id);
95
+ }
96
+ catch (e_1) {
97
+ env_1.error = e_1;
98
+ env_1.hasError = true;
99
+ }
100
+ finally {
101
+ const result_1 = __disposeResources(env_1);
102
+ if (result_1)
103
+ await result_1;
104
+ }
105
+ }
106
+ if (dep.controllingField) {
107
+ const controllingField = fileProperties.find((x) => x.type === 'CustomField' && x.fullName === `${dep.object}.${dep.controllingField}`);
108
+ if (!controllingField) {
109
+ throw new Error(`Could not find controlling field "${dep.object}.${dep.controllingField}"`);
110
+ }
111
+ {
112
+ const env_2 = { stack: [], error: void 0, hasError: false };
113
+ try {
114
+ const page = __addDisposableResource(env_2, await this.browserforce.openPage(NewFieldDependencyPage.getUrl(customObject.id, dependentField.id, controllingField.id)), true);
115
+ const newFieldDependencyPage = new NewFieldDependencyPage(page);
116
+ await newFieldDependencyPage.save();
117
+ }
118
+ catch (e_2) {
119
+ env_2.error = e_2;
120
+ env_2.hasError = true;
121
+ }
122
+ finally {
123
+ const result_2 = __disposeResources(env_2);
124
+ if (result_2)
125
+ await result_2;
126
+ }
127
+ }
128
+ }
129
+ });
130
+ }
131
+ }
132
+ }
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/picklists/field-dependencies/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAUzE,MAAM,OAAO,iBAAkB,SAAQ,kBAAkB;IAChD,KAAK,CAAC,QAAQ,CAAC,UAAkB;QACtC,MAAM,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QACpG,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACjC,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YACrF,2DAA2D;YAC3D,UAAU,CAAC,gBAAgB,GAAG,KAAK,EAAE,QAAQ,EAAE,gBAAgB,IAAI,IAAI,CAAC;YACxE,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAY;QAC7B,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1E;gBACE,IAAI,EAAE,cAAc;aACrB;YACD,EAAE,IAAI,EAAE,aAAa,EAAE;SACxB,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;gBACvC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxG,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;gBACjE,CAAC;gBACD,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,cAAc,EAAE,CACxF,CAAC;gBACF,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;gBAC1F,CAAC;gBACD,mDAAmD;gBACnD,CAAC;;;wBACC,MAAY,IAAI,kCAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAA,CAAC;wBACjG,MAAM,qBAAqB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;wBAC5D,MAAM,qBAAqB,CAAC,mCAAmC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;;;;;;;;;;;iBACpF;gBACD,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;oBACzB,MAAM,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAC1F,CAAC;oBACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACtB,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC;oBAC9F,CAAC;oBACD,CAAC;;;4BACC,MAAY,IAAI,kCAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CACjD,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC,CACvF,OAAA,CAAC;4BACF,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;4BAChE,MAAM,sBAAsB,CAAC,IAAI,EAAE,CAAC;;;;;;;;;;;qBACrC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,64 @@
1
+ import assert from 'assert';
2
+ import { deepDiff } from '../../utils.js';
3
+ const tests = [
4
+ {
5
+ description: 'should return no change',
6
+ source: [
7
+ {
8
+ object: 'Vehicle__c',
9
+ dependentField: 'Gears__c',
10
+ controllingField: null,
11
+ },
12
+ ],
13
+ target: [
14
+ {
15
+ object: 'Vehicle__c',
16
+ dependentField: 'Gears__c',
17
+ controllingField: null,
18
+ },
19
+ ],
20
+ expected: undefined,
21
+ },
22
+ {
23
+ description: 'should unset controlling field',
24
+ source: [
25
+ {
26
+ object: 'Vehicle__c',
27
+ dependentField: 'Gears__c',
28
+ controllingField: 'Foo__c',
29
+ },
30
+ ],
31
+ target: [
32
+ {
33
+ object: 'Vehicle__c',
34
+ dependentField: 'Gears__c',
35
+ controllingField: null,
36
+ },
37
+ ],
38
+ expected: [
39
+ {
40
+ object: 'Vehicle__c',
41
+ dependentField: 'Gears__c',
42
+ controllingField: null,
43
+ },
44
+ ],
45
+ },
46
+ ];
47
+ describe('FieldDependencies', () => {
48
+ describe('diff()', () => {
49
+ // const p = new FieldDependencies(global.browserforce);
50
+ // for (const t of tests) {
51
+ // it(t.description, () => {
52
+ // const actual = p.diff(t.source, t.target);
53
+ // assert.deepStrictEqual(actual, t.expected);
54
+ // });
55
+ // }
56
+ for (const t of tests) {
57
+ it(t.description, () => {
58
+ const actual = deepDiff(t.source, t.target);
59
+ assert.deepStrictEqual(actual, t.expected);
60
+ });
61
+ }
62
+ });
63
+ });
64
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/plugins/picklists/field-dependencies/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ1C,MAAM,KAAK,GAAQ;IACjB;QACE,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,YAAY;gBACpB,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,IAAI;aACvB;SACF;QACD,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,YAAY;gBACpB,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,IAAI;aACvB;SACF;QACD,QAAQ,EAAE,SAAS;KACpB;IACD;QACE,WAAW,EAAE,gCAAgC;QAC7C,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,YAAY;gBACpB,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,QAAQ;aAC3B;SACF;QACD,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,YAAY;gBACpB,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,IAAI;aACvB;SACF;QACD,QAAQ,EAAE;YACR;gBACE,MAAM,EAAE,YAAY;gBACpB,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,IAAI;aACvB;SACF;KACF;CACF,CAAC;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,wDAAwD;QACxD,2BAA2B;QAC3B,8BAA8B;QAC9B,iDAAiD;QACjD,kDAAkD;QAClD,QAAQ;QACR,IAAI;QACJ,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE;gBACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5C,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Page } from 'playwright';
2
+ import { type SalesforceUrlPath } from '../../../browserforce.js';
3
+ export declare class FieldDependencyPage {
4
+ private page;
5
+ constructor(page: Page);
6
+ static getUrl(customObjectId: string): SalesforceUrlPath;
7
+ clickDeleteDependencyActionForField(customFieldId: string): Promise<FieldDependencyPage>;
8
+ }
9
+ export declare class NewFieldDependencyPage {
10
+ protected page: Page;
11
+ protected saveButton: string;
12
+ constructor(page: Page);
13
+ static getUrl(customObjectId: string, dependentFieldId: string, controllingFieldId: string): SalesforceUrlPath;
14
+ save(): Promise<void>;
15
+ }
@@ -0,0 +1,50 @@
1
+ import { waitForPageErrors } from '../../../browserforce.js';
2
+ export class FieldDependencyPage {
3
+ page;
4
+ constructor(page) {
5
+ this.page = page;
6
+ }
7
+ static getUrl(customObjectId) {
8
+ return `/setup/ui/dependencyList.jsp?tableEnumOrId=${customObjectId.substring(0, 15)}&setupid=CustomObjects`;
9
+ }
10
+ async clickDeleteDependencyActionForField(customFieldId) {
11
+ // wait for "new" button in field dependencies releated list header
12
+ await this.page.locator('div.listRelatedObject div.pbHeader input[name="new"]').waitFor();
13
+ const xpath = `//a[contains(@href, "/p/dependency/NewDependencyUI/e") and contains(@href, "delID=${customFieldId.substring(0, 15)}")]`;
14
+ const actionLinks = await this.page.locator(`xpath=${xpath}`).all();
15
+ if (actionLinks.length > 0) {
16
+ this.page.on('dialog', async (dialog) => {
17
+ await dialog.accept();
18
+ });
19
+ await Promise.all([
20
+ Promise.race([this.page.waitForResponse(/setup\/ui\/dependencyList.jsp/), waitForPageErrors(this.page)]),
21
+ actionLinks[0].click(),
22
+ ]);
23
+ }
24
+ return new FieldDependencyPage(this.page);
25
+ }
26
+ }
27
+ export class NewFieldDependencyPage {
28
+ page;
29
+ saveButton = 'input[name="save"]';
30
+ constructor(page) {
31
+ this.page = page;
32
+ }
33
+ static getUrl(customObjectId, dependentFieldId, controllingFieldId) {
34
+ return `/p/dependency/NewDependencyUI/e?tableEnumOrId=${customObjectId.substring(0, 15)}&setupid=CustomObjects&controller=${controllingFieldId.substring(0, 15)}&dependent=${dependentFieldId.substring(0, 15)}&retURL=/${customObjectId.substring(0, 15)}`;
35
+ }
36
+ async save() {
37
+ await this.page.locator(this.saveButton).first().click();
38
+ await Promise.race([
39
+ this.page.waitForURL((url) => url.pathname === '/p/dependency/EditDependencyUI/e'),
40
+ waitForPageErrors(this.page),
41
+ ]);
42
+ // second step in wizard
43
+ this.page.on('dialog', async (dialog) => {
44
+ await dialog.accept();
45
+ });
46
+ await this.page.locator(this.saveButton).first().click();
47
+ await Promise.race([this.page.waitForURL((url) => /\/01I\w{12}/.test(url.pathname)), waitForPageErrors(this.page)]);
48
+ }
49
+ }
50
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../../src/plugins/picklists/field-dependencies/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ import { Config as FieldDependenciesConfig } from './field-dependencies/index.js';
3
+ export type Config = {
4
+ picklistValues?: PicklistValuesConfig[];
5
+ fieldDependencies?: FieldDependenciesConfig;
6
+ };
7
+ type PicklistValuesConfig = {
8
+ metadataType: string;
9
+ metadataFullName: string;
10
+ value?: string;
11
+ newValue?: string;
12
+ statusCategory?: string;
13
+ replaceAllBlankValues?: boolean;
14
+ active?: boolean;
15
+ absent?: boolean;
16
+ _newValueId?: string;
17
+ };
18
+ export declare class Picklists extends BrowserforcePlugin {
19
+ retrieve(definition: Config): Promise<Config>;
20
+ diff(state: Config, definition: Config): Config | undefined;
21
+ apply(config: Config): Promise<void>;
22
+ }
23
+ export {};
@@ -0,0 +1 @@
1
+ export {};