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,128 @@
1
+ import assert from 'assert';
2
+ import * as child from 'child_process';
3
+ import { readFileSync } from 'node:fs';
4
+ import { fileURLToPath } from 'node:url';
5
+ import * as path from 'path';
6
+ import { FieldDependencies } from './field-dependencies/index.js';
7
+ import { Picklists } from './index.js';
8
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
9
+ const readJsonFile = function (u) {
10
+ return JSON.parse(readFileSync(new URL(u, import.meta.url), 'utf8'));
11
+ };
12
+ describe(Picklists.name, function () {
13
+ this.timeout('10m');
14
+ let plugin;
15
+ before(() => {
16
+ plugin = new Picklists(global.browserforce);
17
+ });
18
+ after(() => {
19
+ it('should remove the CustomObject', async () => {
20
+ await global.browserforce.connection.metadata.delete('CustomObject', ['Vehicle__c']);
21
+ await global.browserforce.connection.metadata.delete('GlobalValueSet', ['VehicleGears', 'VehicleTransmission']);
22
+ });
23
+ });
24
+ const configNew = readJsonFile('./new.json').settings.picklists;
25
+ const configReplace = readJsonFile('./replace.json').settings.picklists;
26
+ const configReplaceAndDelete = readJsonFile('./replace-and-delete.json').settings.picklists;
27
+ const configDeactivate = readJsonFile('./deactivate.json').settings.picklists;
28
+ const configActivate = readJsonFile('./activate.json').settings.picklists;
29
+ const configDeactivateWithDep = {
30
+ picklistValues: [
31
+ {
32
+ metadataType: 'CustomField',
33
+ metadataFullName: 'Vehicle__c.Type__c',
34
+ value: 'A',
35
+ active: false,
36
+ },
37
+ ],
38
+ };
39
+ const configActivateWithDep = {
40
+ picklistValues: [
41
+ {
42
+ metadataType: 'CustomField',
43
+ metadataFullName: 'Vehicle__c.Type__c',
44
+ value: 'A',
45
+ active: true,
46
+ },
47
+ ],
48
+ };
49
+ const configReplaceAndDeactivate = readJsonFile('./replace-and-deactivate.json').settings.picklists;
50
+ it('should deploy a CustomObject for testing', () => {
51
+ const sourceDeployCmd = child.spawnSync('sf', [
52
+ 'project',
53
+ 'deploy',
54
+ 'start',
55
+ '-d',
56
+ path.join(__dirname, 'sfdx-source'),
57
+ '--json',
58
+ ]);
59
+ assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
60
+ });
61
+ it('should add a new picklist value when it does not exist', async () => {
62
+ await plugin.run(configNew);
63
+ });
64
+ it('should not do anything when picklist value already exists', async () => {
65
+ const res = await plugin.run(configNew);
66
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
67
+ });
68
+ it('should replace picklist values', async () => {
69
+ await plugin.run(configReplace);
70
+ });
71
+ it('should replace and delete picklist values', async () => {
72
+ await plugin.run(configReplaceAndDelete);
73
+ });
74
+ it('should not do anything when the picklist values do not exist', async () => {
75
+ const res = await plugin.run(configReplaceAndDelete);
76
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
77
+ });
78
+ it('should deactivate picklist value', async () => {
79
+ await plugin.run(configDeactivate);
80
+ });
81
+ it('should activate picklist value', async () => {
82
+ await plugin.run(configActivate);
83
+ });
84
+ it('should deactivate picklist value having a dependency', async () => {
85
+ await plugin.run(configDeactivateWithDep);
86
+ });
87
+ it('should activate picklist value having a dependency', async () => {
88
+ await plugin.run(configActivateWithDep);
89
+ });
90
+ it('should not do anything when the picklist values already exist', async () => {
91
+ const res = await plugin.run(configActivate);
92
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
93
+ });
94
+ it('should replace and deactivate a picklist value', async () => {
95
+ await plugin.run(configReplaceAndDeactivate);
96
+ });
97
+ describe(FieldDependencies.name, function () {
98
+ this.timeout('10m');
99
+ let plugin;
100
+ before(() => {
101
+ plugin = new FieldDependencies(global.browserforce);
102
+ });
103
+ const configSet = readJsonFile('./field-dependencies/set.json').settings.picklists.fieldDependencies;
104
+ const configUnset = readJsonFile('./field-dependencies/unset.json').settings.picklists.fieldDependencies;
105
+ const configChange = readJsonFile('./field-dependencies/change.json').settings.picklists.fieldDependencies;
106
+ it('should not do anything when the dependency is already set', async () => {
107
+ const res = await plugin.run(configSet);
108
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
109
+ });
110
+ it('should unset a field dependency', async () => {
111
+ await plugin.run(configUnset);
112
+ });
113
+ it('should not do anything when the dependency is already unset', async () => {
114
+ const res = await plugin.run(configUnset);
115
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
116
+ });
117
+ it('should set a field dependency', async () => {
118
+ await plugin.run(configSet);
119
+ });
120
+ it('should change a field dependency', async () => {
121
+ await plugin.run(configChange);
122
+ });
123
+ it('should change back a field dependency', async () => {
124
+ await plugin.run(configSet);
125
+ });
126
+ });
127
+ });
128
+ //# sourceMappingURL=index.e2e-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/picklists/index.e2e-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
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 { FieldDependencies } from './field-dependencies/index.js';
56
+ import { DefaultPicklistAddPage, PicklistPage, StatusPicklistAddPage } from './pages.js';
57
+ import { determineStandardValueSetEditUrl } from './standard-value-set.js';
58
+ export class Picklists extends BrowserforcePlugin {
59
+ async retrieve(definition) {
60
+ const result = { picklistValues: [], fieldDependencies: [] };
61
+ if (definition.picklistValues) {
62
+ const fileProperties = await listMetadata(this.browserforce.connection, definition.picklistValues.map((x) => x.metadataType));
63
+ for (const action of definition.picklistValues) {
64
+ const env_1 = { stack: [], error: void 0, hasError: false };
65
+ try {
66
+ // check if given picklist values exist
67
+ const picklistUrl = getPicklistUrl(action.metadataType, action.metadataFullName, fileProperties);
68
+ const page = __addDisposableResource(env_1, await this.browserforce.openPage(picklistUrl), true);
69
+ const picklistPage = new PicklistPage(page);
70
+ const values = await picklistPage.getPicklistValues();
71
+ const state = { ...action };
72
+ const valueMatch = action.value !== undefined ? values.find((x) => x.value === action.value) : undefined;
73
+ state.absent = !valueMatch;
74
+ state.active = valueMatch?.active;
75
+ state._newValueId = values.find((x) => x.value === action.newValue)?.id;
76
+ result.picklistValues.push(state);
77
+ }
78
+ catch (e_1) {
79
+ env_1.error = e_1;
80
+ env_1.hasError = true;
81
+ }
82
+ finally {
83
+ const result_1 = __disposeResources(env_1);
84
+ if (result_1)
85
+ await result_1;
86
+ }
87
+ }
88
+ }
89
+ if (definition.fieldDependencies) {
90
+ const deps = await new FieldDependencies(this.browserforce).retrieve(definition.fieldDependencies);
91
+ result.fieldDependencies.push(...deps);
92
+ }
93
+ return result;
94
+ }
95
+ diff(state, definition) {
96
+ const changes = {};
97
+ if (definition.picklistValues) {
98
+ const picklistValues = definition.picklistValues.filter((target, i) => {
99
+ const source = state.picklistValues?.[i];
100
+ if (target.absent) {
101
+ return target.absent !== source?.absent;
102
+ }
103
+ if (target.active !== undefined) {
104
+ return target.active !== source?.active;
105
+ }
106
+ // replacing a picklist value is not idempotent
107
+ if (source?._newValueId && (target.value !== undefined || target.replaceAllBlankValues)) {
108
+ return true;
109
+ }
110
+ if (target.newValue && !source?._newValueId) {
111
+ // New value doesn't exist in org yet
112
+ return true;
113
+ }
114
+ return false;
115
+ });
116
+ if (picklistValues.length) {
117
+ changes.picklistValues = picklistValues;
118
+ }
119
+ }
120
+ if (definition.fieldDependencies) {
121
+ const fieldDependencies = new FieldDependencies(this.browserforce).diff(state.fieldDependencies, definition.fieldDependencies);
122
+ if (fieldDependencies !== undefined) {
123
+ changes.fieldDependencies = fieldDependencies;
124
+ }
125
+ }
126
+ return Object.keys(changes).length ? changes : undefined;
127
+ }
128
+ async apply(config) {
129
+ if (config.picklistValues) {
130
+ const fileProperties = await listMetadata(this.browserforce.connection, config.picklistValues.map((x) => x.metadataType));
131
+ for (const action of config.picklistValues) {
132
+ // Error: There's another picklist operation in progress for this object. Try your change again later.
133
+ // Error: Someone else is editing this picklist or its values. Try again later."
134
+ await this.browserforce.retry(async () => {
135
+ const env_2 = { stack: [], error: void 0, hasError: false };
136
+ try {
137
+ const picklistUrl = getPicklistUrl(action.metadataType, action.metadataFullName, fileProperties);
138
+ const page = __addDisposableResource(env_2, await this.browserforce.openPage(picklistUrl), true);
139
+ const picklistPage = new PicklistPage(page);
140
+ if (action.active !== undefined && action.value !== undefined) {
141
+ // activate/deactivate
142
+ await picklistPage.clickActivateDeactivateActionForValue(action.value, action.active);
143
+ }
144
+ else if (action.absent && action.value !== undefined) {
145
+ // delete
146
+ const values = await picklistPage.getPicklistValues();
147
+ const newValueId = values.find((picklist) => picklist.value === action.newValue)?.id;
148
+ const replacePage = await picklistPage.clickDeleteActionForValue(action.value);
149
+ await replacePage.replaceAndDelete(newValueId);
150
+ await replacePage.save();
151
+ }
152
+ else if (action.value === undefined &&
153
+ action.newValue !== undefined &&
154
+ action.replaceAllBlankValues === undefined) {
155
+ // create
156
+ await picklistPage.clickNewActionButton();
157
+ if (action.statusCategory) {
158
+ await new StatusPicklistAddPage(page).add(action.newValue, action.statusCategory);
159
+ }
160
+ else {
161
+ await new DefaultPicklistAddPage(page).add(action.newValue);
162
+ }
163
+ }
164
+ else if (action.value !== undefined && action.newValue !== undefined) {
165
+ // replace
166
+ const values = await picklistPage.getPicklistValues();
167
+ const newValue = values.find((picklist) => picklist.value === action.newValue);
168
+ let newValueLabel;
169
+ if (newValue?.label) {
170
+ newValueLabel = newValue.label;
171
+ }
172
+ if (newValue?.statusCategory !== undefined) {
173
+ newValueLabel += ` (${newValue.statusCategory})`;
174
+ }
175
+ const replacePage = await picklistPage.clickReplaceActionButton();
176
+ await replacePage.replace(action.value, newValueLabel, action.replaceAllBlankValues);
177
+ }
178
+ else {
179
+ throw new Error(`Could not determine action for input: ${JSON.stringify(action)}`);
180
+ }
181
+ }
182
+ catch (e_2) {
183
+ env_2.error = e_2;
184
+ env_2.hasError = true;
185
+ }
186
+ finally {
187
+ const result_2 = __disposeResources(env_2);
188
+ if (result_2)
189
+ await result_2;
190
+ }
191
+ });
192
+ }
193
+ }
194
+ if (config.fieldDependencies) {
195
+ await new FieldDependencies(this.browserforce).apply(config.fieldDependencies);
196
+ }
197
+ }
198
+ }
199
+ function getPicklistUrl(type, fullName, fileProperties) {
200
+ let picklistUrl;
201
+ if (type === 'StandardValueSet') {
202
+ picklistUrl = determineStandardValueSetEditUrl(fullName);
203
+ }
204
+ else {
205
+ const fileProperty = fileProperties?.find((x) => x.type === type && x.fullName === fullName);
206
+ if (fileProperty) {
207
+ picklistUrl = `/${fileProperty.id}`;
208
+ }
209
+ }
210
+ return picklistUrl;
211
+ }
212
+ async function listMetadata(connection, sobjectTypes) {
213
+ let uniqueSobjectTypes = [...new Set(sobjectTypes)];
214
+ // don't list StandardValueSet as the FileProperties are broken
215
+ uniqueSobjectTypes = uniqueSobjectTypes.filter((x) => x !== 'StandardValueSet');
216
+ const queries = uniqueSobjectTypes.map((type) => {
217
+ return {
218
+ type,
219
+ };
220
+ });
221
+ if (queries.length) {
222
+ const fileProperties = await connection.metadata.list(queries);
223
+ return ensureArray(fileProperties);
224
+ }
225
+ else {
226
+ return [];
227
+ }
228
+ }
229
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/picklists/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Page } from 'playwright';
2
+ type PicklistValue = {
3
+ value: string;
4
+ label?: string;
5
+ active: boolean;
6
+ id?: string;
7
+ statusCategory?: string;
8
+ };
9
+ export declare class PicklistPage {
10
+ private page;
11
+ constructor(page: Page);
12
+ getPicklistValues(): Promise<PicklistValue[]>;
13
+ clickNewActionButton(): Promise<void>;
14
+ clickReplaceActionButton(): Promise<PicklistReplacePage>;
15
+ getPicklistIdForApiName(picklistValueApiName: string): Promise<string>;
16
+ clickDeleteActionForValue(picklistValueApiName: string): Promise<PicklistReplaceAndDeletePage>;
17
+ clickActivateDeactivateActionForValue(picklistValueApiName: string, active: boolean): Promise<PicklistPage>;
18
+ }
19
+ export declare class DefaultPicklistAddPage {
20
+ protected page: Page;
21
+ protected saveButton: string;
22
+ constructor(page: Page);
23
+ add(newValue: string): Promise<void>;
24
+ save(): Promise<void>;
25
+ }
26
+ export declare class StatusPicklistAddPage {
27
+ protected page: Page;
28
+ protected saveButton: string;
29
+ constructor(page: Page);
30
+ add(newValue: string, statusCategory: string): Promise<void>;
31
+ save(): Promise<void>;
32
+ }
33
+ export declare class PicklistReplacePage {
34
+ protected page: Page;
35
+ protected saveButton: string;
36
+ constructor(page: Page);
37
+ replace(value: string, newValueLabel: string, replaceAllBlankValues?: boolean): Promise<void>;
38
+ save(): Promise<void>;
39
+ }
40
+ export declare class PicklistReplaceAndDeletePage extends PicklistReplacePage {
41
+ constructor(page: Page);
42
+ replaceAndDelete(newValueId?: string): Promise<void>;
43
+ save(): Promise<void>;
44
+ }
45
+ export {};
@@ -0,0 +1,185 @@
1
+ import { waitForPageErrors } from '../../browserforce.js';
2
+ export class PicklistPage {
3
+ page;
4
+ constructor(page) {
5
+ this.page = page;
6
+ }
7
+ async getPicklistValues() {
8
+ // wait for New button for picklist values specifically
9
+ await this.page.locator('input[name="new"][onclick*="picklist_masteredit"]').waitFor();
10
+ // The sections unfortunately don't all have ids
11
+ // - Field Dependencies
12
+ // - Validation Rules #ValidationFormulaList
13
+ // - Values <-- rows with a href matching picklist
14
+ // - Inactive Values <-- rows a href matching picklist
15
+ const rows = await this.page.locator('div.bRelatedList tr:has(td.actionColumn):has(a[href*="picklist"])').all();
16
+ const picklists = await Promise.all(rows.map((row) => (async () => {
17
+ const urlPath = await row
18
+ .locator('xpath=//td[1]//a[contains(@href, "/setup/ui/")]')
19
+ .first()
20
+ .getAttribute('href');
21
+ const url = new URL(`http://localhost${urlPath}`);
22
+ const picklistId = url.searchParams.get('id');
23
+ const statusCategory = await row.locator('td').nth(2).textContent();
24
+ return {
25
+ id: picklistId,
26
+ value: await row.locator('td').nth(1).textContent(),
27
+ label: await row.locator('th').first().textContent(),
28
+ active: (await row.locator('xpath=//td[1]//a[contains(@href, "/setup/ui/picklist_masteredit")]').count()) === 1,
29
+ ...(statusCategory?.length ? { statusCategory } : {}),
30
+ };
31
+ })()));
32
+ return picklists;
33
+ }
34
+ async clickNewActionButton() {
35
+ await this.page
36
+ .locator('xpath=//tr[td[2]]//input[contains(@onclick, "/setup/ui/picklist_masteredit")][@value=" New "]')
37
+ .first()
38
+ .click();
39
+ await Promise.race([
40
+ this.page.waitForURL((url) => url.pathname === '/setup/ui/picklist_masteredit.jsp'),
41
+ waitForPageErrors(this.page),
42
+ ]);
43
+ }
44
+ async clickReplaceActionButton() {
45
+ await this.page.locator('input[name="replace"][type="button"]').click();
46
+ await Promise.race([
47
+ this.page.waitForURL((url) => url.pathname === '/setup/ui/replacePickList.jsp'),
48
+ waitForPageErrors(this.page),
49
+ ]);
50
+ return new PicklistReplacePage(this.page);
51
+ }
52
+ async getPicklistIdForApiName(picklistValueApiName) {
53
+ const link = this.page.locator(`//tr[td[2][text() = "${picklistValueApiName}"]]//td[1]//a[contains(@href, "/setup/ui/picklist_masteredit.jsp")]`);
54
+ const urlPath = await link.getAttribute('href');
55
+ const url = new URL(`http://localhost${urlPath}`);
56
+ const picklistId = url.searchParams.get('id');
57
+ return picklistId;
58
+ }
59
+ async clickDeleteActionForValue(picklistValueApiName) {
60
+ // deactivate: deleteType=1
61
+ // delete: deleteType=0 or no deleteType=1
62
+ const xpath = `//tr[td[2][text() = "${picklistValueApiName}"]]//td[1]//a[contains(@href, "/setup/ui/picklist_masterdelete.jsp") and not(contains(@href, "deleteType=1"))]`;
63
+ this.page.on('dialog', async (dialog) => {
64
+ await dialog.accept();
65
+ });
66
+ await this.page.locator(`xpath=${xpath}`).first().click();
67
+ await Promise.race([
68
+ this.page.waitForURL((url) => url.pathname === '/setup/ui/picklist_masterdelete.jsp'),
69
+ waitForPageErrors(this.page),
70
+ ]);
71
+ return new PicklistReplaceAndDeletePage(this.page);
72
+ }
73
+ async clickActivateDeactivateActionForValue(picklistValueApiName, active) {
74
+ let xpath;
75
+ if (active) {
76
+ xpath = `//tr[td[2][text() = "${picklistValueApiName}"]]//td[1]//a[contains(@href, "/setup/ui/picklist_masteractivate.jsp")]`;
77
+ }
78
+ else {
79
+ // deactivate: deleteType=1
80
+ // delete: deleteType=0 or no deleteType=1
81
+ xpath = `//tr[td[2][text() = "${picklistValueApiName}"]]//td[1]//a[contains(@href, "/setup/ui/picklist_masterdelete.jsp") and contains(@href, "deleteType=1")]`;
82
+ }
83
+ this.page.on('dialog', async (dialog) => {
84
+ await dialog.accept();
85
+ });
86
+ await this.page.locator(`xpath=${xpath}`).first().click();
87
+ await Promise.race([
88
+ this.page.waitForURL((url) => /\/00N.*/.test(url.pathname)), // Salesforce record id
89
+ waitForPageErrors(this.page),
90
+ ]);
91
+ return new PicklistPage(this.page);
92
+ }
93
+ }
94
+ export class DefaultPicklistAddPage {
95
+ page;
96
+ saveButton = 'input.btn[name="save"]';
97
+ constructor(page) {
98
+ this.page = page;
99
+ }
100
+ async add(newValue) {
101
+ if (newValue !== undefined && newValue !== null) {
102
+ await this.page.locator('textarea').fill(newValue);
103
+ }
104
+ await this.save();
105
+ }
106
+ async save() {
107
+ await this.page.locator(this.saveButton).click();
108
+ await Promise.race([
109
+ this.page.waitForURL((url) => url.pathname.startsWith('/00N') || // CustomField Definition
110
+ url.pathname.startsWith('/0Nt') || // SharedPicklistDefinition
111
+ url.pathname.startsWith('/_ui/common/config/field/StandardFieldAttributes')),
112
+ waitForPageErrors(this.page),
113
+ ]);
114
+ }
115
+ }
116
+ export class StatusPicklistAddPage {
117
+ page;
118
+ saveButton = 'input.btn[name="save"]';
119
+ constructor(page) {
120
+ this.page = page;
121
+ }
122
+ async add(newValue, statusCategory) {
123
+ if (newValue !== undefined && newValue !== null) {
124
+ await this.page.locator('input#p1').describe('label').fill(newValue);
125
+ await this.page.locator('input#p3').describe('api name').fill(newValue);
126
+ await this.page.locator('select#p5').selectOption({ label: statusCategory });
127
+ }
128
+ await this.save();
129
+ }
130
+ async save() {
131
+ await this.page.locator(this.saveButton).click();
132
+ await Promise.race([
133
+ this.page.waitForURL((url) => url.pathname === '/_ui/common/config/field/StandardFieldAttributes/d'),
134
+ waitForPageErrors(this.page),
135
+ ]);
136
+ }
137
+ }
138
+ export class PicklistReplacePage {
139
+ page;
140
+ saveButton = 'input[name="save"]';
141
+ constructor(page) {
142
+ this.page = page;
143
+ }
144
+ async replace(value, newValueLabel, replaceAllBlankValues) {
145
+ if (value !== undefined && value !== null) {
146
+ await this.page.locator('input#nf').describe('old value').fill(value);
147
+ }
148
+ if (newValueLabel !== undefined && newValueLabel !== null) {
149
+ await this.page.locator('select#nv').describe('new value').selectOption({ label: newValueLabel });
150
+ }
151
+ if (replaceAllBlankValues) {
152
+ await this.page.locator('input#fnv').describe('replace all blank values').check();
153
+ }
154
+ await this.save();
155
+ }
156
+ async save() {
157
+ await this.page.locator(this.saveButton).click();
158
+ await Promise.race([this.page.waitForURL((url) => url.searchParams.has('msg')), waitForPageErrors(this.page)]);
159
+ }
160
+ }
161
+ export class PicklistReplaceAndDeletePage extends PicklistReplacePage {
162
+ constructor(page) {
163
+ super(page);
164
+ this.saveButton = 'input[name="delID"][type="submit"]';
165
+ }
166
+ async replaceAndDelete(newValueId) {
167
+ if (newValueId !== undefined && newValueId !== null) {
168
+ await this.page.locator('select#p13').describe('new value').selectOption(newValueId);
169
+ }
170
+ else {
171
+ await this.page.locator('input#ReplaceValueWithNullValue').check();
172
+ }
173
+ }
174
+ async save() {
175
+ // NOTE: This sometimes takes really long
176
+ await this.page.locator(this.saveButton).click({ timeout: 300_000 });
177
+ await Promise.race([
178
+ this.page.waitForURL((url) => url.pathname.startsWith('/00N') || // CustomField Definition
179
+ url.pathname.startsWith('/0Nt') || // SharedPicklistDefinition
180
+ url.pathname.startsWith('/_ui/common/config/field/StandardFieldAttributes')),
181
+ waitForPageErrors(this.page, 120_000), // 2 minutes
182
+ ]);
183
+ }
184
+ }
185
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../src/plugins/picklists/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function determineStandardValueSetEditUrl(standardValueSet: string): string;