@salesforce/afv-skills 1.8.0 → 1.9.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 (488) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/CREDITS.md +5 -0
  3. package/skills/activating-datacloud/README.md +39 -0
  4. package/skills/activating-datacloud/SKILL.md +118 -0
  5. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
  6. package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
  7. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
  8. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
  9. package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
  10. package/skills/building-omnistudio-callable-apex/README.md +80 -0
  11. package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
  12. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
  13. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
  14. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
  15. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
  16. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
  17. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
  18. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
  19. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
  20. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
  21. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
  22. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
  23. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
  24. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
  25. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
  26. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
  27. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
  28. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
  29. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
  30. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
  31. package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
  32. package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
  33. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
  34. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
  35. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
  36. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
  37. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
  38. package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
  39. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
  40. package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
  41. package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
  42. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
  43. package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
  44. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
  45. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
  46. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
  47. package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
  48. package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
  49. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
  50. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
  51. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
  52. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
  53. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
  54. package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
  55. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
  56. package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
  57. package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
  58. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
  59. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
  60. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
  61. package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
  62. package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
  63. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
  64. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
  65. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
  66. package/skills/building-sf-integrations/CREDITS.md +5 -0
  67. package/skills/building-sf-integrations/README.md +95 -0
  68. package/skills/building-sf-integrations/SKILL.md +192 -0
  69. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
  70. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
  71. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
  72. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
  73. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
  74. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
  75. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
  76. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
  77. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
  78. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
  79. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
  80. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
  81. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
  82. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
  83. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
  84. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
  85. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
  86. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
  87. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
  88. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
  89. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
  90. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
  91. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
  92. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
  93. package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
  94. package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
  95. package/skills/building-sf-integrations/references/cli-reference.md +94 -0
  96. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
  97. package/skills/building-sf-integrations/references/event-patterns.md +838 -0
  98. package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
  99. package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
  100. package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
  101. package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
  102. package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
  103. package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
  104. package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
  105. package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
  106. package/skills/building-sf-integrations/scripts/README.md +100 -0
  107. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
  108. package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
  109. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
  110. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  111. package/skills/configuring-connected-apps/README.md +99 -0
  112. package/skills/configuring-connected-apps/SKILL.md +224 -0
  113. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  117. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  118. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  121. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  122. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  123. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  124. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  125. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  126. package/skills/connecting-datacloud/CREDITS.md +5 -0
  127. package/skills/connecting-datacloud/README.md +59 -0
  128. package/skills/connecting-datacloud/SKILL.md +155 -0
  129. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  130. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  132. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  133. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  134. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  135. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  136. package/skills/debugging-apex-logs/README.md +74 -0
  137. package/skills/debugging-apex-logs/SKILL.md +172 -0
  138. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  139. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  140. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  141. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  142. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  143. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  144. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  145. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  146. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  147. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  148. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  149. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  150. package/skills/deploying-metadata/CREDITS.md +25 -0
  151. package/skills/deploying-metadata/README.md +104 -0
  152. package/skills/deploying-metadata/SKILL.md +214 -0
  153. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  154. package/skills/deploying-metadata/assets/package.xml +121 -0
  155. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  156. package/skills/deploying-metadata/references/deploy.sh +73 -0
  157. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  158. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  159. package/skills/deploying-metadata/references/orchestration.md +183 -0
  160. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  161. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  162. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  163. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  164. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  168. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  169. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  170. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  171. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  172. package/skills/fetching-salesforce-docs/README.md +66 -0
  173. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  174. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  175. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  176. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  177. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  178. package/skills/generating-apex/CREDITS.md +1 -26
  179. package/skills/generating-apex-test/CREDITS.md +2 -27
  180. package/skills/generating-lwc-components/CREDITS.md +5 -0
  181. package/skills/generating-lwc-components/README.md +126 -0
  182. package/skills/generating-lwc-components/SKILL.md +191 -0
  183. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  184. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  185. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  186. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  187. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  188. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  189. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  190. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  191. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  192. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  193. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  194. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  195. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  196. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  197. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  198. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  199. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  200. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  201. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  202. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  203. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  204. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  205. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  206. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  207. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  208. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  209. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  210. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  211. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  212. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  213. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  214. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  215. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  216. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  217. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  218. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  219. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  220. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  221. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  222. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  223. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  224. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  225. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  226. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  227. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  228. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  229. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  230. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  231. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  232. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  233. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  234. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  235. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  236. package/skills/generating-lwc-components/references/state-management.md +642 -0
  237. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  238. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  239. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  240. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  241. package/skills/generating-mermaid-diagrams/README.md +114 -0
  242. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  243. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  244. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  245. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  246. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  247. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  248. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  249. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  250. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  251. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  252. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  253. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  254. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  255. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  256. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  257. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  258. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  259. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  260. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  261. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  262. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  263. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  264. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  265. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  266. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  267. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  268. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  269. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  270. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  271. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  272. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  273. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  274. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  275. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  276. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  277. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  278. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  279. package/skills/generating-visual-diagrams/README.md +83 -0
  280. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  281. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  282. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  283. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  284. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  285. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  286. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  287. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  288. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  289. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  290. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  291. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  292. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  293. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  294. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  295. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  296. package/skills/handling-sf-data/CREDITS.md +5 -0
  297. package/skills/handling-sf-data/README.md +112 -0
  298. package/skills/handling-sf-data/SKILL.md +235 -0
  299. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  300. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  301. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  302. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  303. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  304. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  305. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  306. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  307. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  308. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  309. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  310. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  311. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  312. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  313. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  314. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  315. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  316. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  317. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  318. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  319. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  320. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  321. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  322. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  323. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  324. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  325. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  326. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  327. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  328. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  329. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  330. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  331. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  332. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  333. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  334. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  335. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  336. package/skills/handling-sf-data/references/orchestration.md +174 -0
  337. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  338. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  339. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  340. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  341. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  342. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  343. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  344. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  345. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  346. package/skills/harmonizing-datacloud/README.md +31 -0
  347. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  348. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  349. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  350. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  351. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  352. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  353. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  354. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  355. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  356. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  357. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  358. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  359. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  360. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  361. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  362. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  363. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  364. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  365. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  366. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  367. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  368. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  369. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  370. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  401. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  402. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  403. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  404. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  405. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  406. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  407. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  408. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  409. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  410. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  411. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  412. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  413. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  414. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  415. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  416. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  417. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  418. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  419. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  420. package/skills/orchestrating-datacloud/README.md +129 -0
  421. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  422. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  423. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  424. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  425. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  426. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  427. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  428. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  429. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  430. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  431. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  432. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  433. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  434. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  435. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  436. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  437. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  438. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  439. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  440. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  441. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  442. package/skills/preparing-datacloud/CREDITS.md +7 -0
  443. package/skills/preparing-datacloud/README.md +51 -0
  444. package/skills/preparing-datacloud/SKILL.md +191 -0
  445. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  446. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  447. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  448. package/skills/querying-soql/CREDITS.md +21 -0
  449. package/skills/querying-soql/README.md +41 -0
  450. package/skills/querying-soql/SKILL.md +143 -0
  451. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  452. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  453. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  454. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  455. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  456. package/skills/querying-soql/assets/selector-class.cls +219 -0
  457. package/skills/querying-soql/references/anti-patterns.md +348 -0
  458. package/skills/querying-soql/references/cli-commands.md +358 -0
  459. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  460. package/skills/querying-soql/references/query-optimization.md +142 -0
  461. package/skills/querying-soql/references/selector-patterns.md +479 -0
  462. package/skills/querying-soql/references/soql-reference.md +227 -0
  463. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  464. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  465. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  466. package/skills/retrieving-datacloud/README.md +44 -0
  467. package/skills/retrieving-datacloud/SKILL.md +120 -0
  468. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  469. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  470. package/skills/running-apex-tests/CREDITS.md +22 -0
  471. package/skills/running-apex-tests/README.md +94 -0
  472. package/skills/running-apex-tests/SKILL.md +158 -0
  473. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  474. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  475. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  476. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  477. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  478. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  479. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  480. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  481. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  482. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  483. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  484. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  485. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  486. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  487. package/skills/segmenting-datacloud/README.md +36 -0
  488. package/skills/segmenting-datacloud/SKILL.md +115 -0
@@ -0,0 +1,364 @@
1
+ /**
2
+ * StubProvider Examples
3
+ *
4
+ * The Stub API enables dynamic mocking of interfaces and virtual classes.
5
+ * Use when you need conditional logic or method tracking in your mocks.
6
+ *
7
+ * See: references/mocking-patterns.md for detailed patterns and usage guidance
8
+ */
9
+
10
+ // ═══════════════════════════════════════════════════════════════════════════
11
+ // EXAMPLE 1: Simple StubProvider for Interface
12
+ // ═══════════════════════════════════════════════════════════════════════════
13
+
14
+ /**
15
+ * Interface to be stubbed
16
+ */
17
+ public interface IAccountService {
18
+ Account getAccount(Id accountId);
19
+ List<Account> getAccounts(Set<Id> accountIds);
20
+ Integer getAccountCount();
21
+ void updateAccount(Account acc);
22
+ }
23
+
24
+ /**
25
+ * Basic stub implementation with configurable responses
26
+ */
27
+ @IsTest
28
+ public class AccountServiceStub implements System.StubProvider {
29
+
30
+ // Track method calls for verification
31
+ public List<String> calledMethods = new List<String>();
32
+ public Map<String, List<Object>> methodParams = new Map<String, List<Object>>();
33
+
34
+ // Configurable responses
35
+ private Map<String, Object> responses = new Map<String, Object>();
36
+
37
+ /**
38
+ * Configure what a method should return
39
+ */
40
+ public AccountServiceStub whenCalled(String methodName, Object response) {
41
+ responses.put(methodName, response);
42
+ return this;
43
+ }
44
+
45
+ /**
46
+ * Required StubProvider method
47
+ */
48
+ public Object handleMethodCall(
49
+ Object stubbedObject,
50
+ String stubbedMethodName,
51
+ Type returnType,
52
+ List<Type> paramTypes,
53
+ List<String> paramNames,
54
+ List<Object> paramValues
55
+ ) {
56
+ // Track this call
57
+ calledMethods.add(stubbedMethodName);
58
+ methodParams.put(stubbedMethodName, paramValues);
59
+
60
+ // Return configured response if available
61
+ if (responses.containsKey(stubbedMethodName)) {
62
+ return responses.get(stubbedMethodName);
63
+ }
64
+
65
+ // Default responses based on return type
66
+ if (returnType == Account.class) {
67
+ return new Account(Id = generateFakeId(), Name = 'Default Stub Account');
68
+ }
69
+ if (returnType == List<Account>.class) {
70
+ return new List<Account>{
71
+ new Account(Id = generateFakeId(), Name = 'Stub Account 1')
72
+ };
73
+ }
74
+ if (returnType == Integer.class) {
75
+ return 0;
76
+ }
77
+
78
+ return null;
79
+ }
80
+
81
+ /**
82
+ * Verify a method was called
83
+ */
84
+ public Boolean wasCalled(String methodName) {
85
+ return calledMethods.contains(methodName);
86
+ }
87
+
88
+ /**
89
+ * Get call count for a method
90
+ */
91
+ public Integer getCallCount(String methodName) {
92
+ Integer count = 0;
93
+ for (String called : calledMethods) {
94
+ if (called == methodName) {
95
+ count++;
96
+ }
97
+ }
98
+ return count;
99
+ }
100
+
101
+ // Fake ID generator
102
+ private static Integer idCounter = 1;
103
+ private static Id generateFakeId() {
104
+ String idBody = String.valueOf(idCounter++).leftPad(12, '0');
105
+ return Id.valueOf('001' + idBody);
106
+ }
107
+ }
108
+
109
+ // ═══════════════════════════════════════════════════════════════════════════
110
+ // EXAMPLE 2: Using the Stub in Tests
111
+ // ═══════════════════════════════════════════════════════════════════════════
112
+
113
+ @IsTest
114
+ private class AccountServiceStubTest {
115
+
116
+ @IsTest
117
+ static void testWithConfiguredResponse() {
118
+ // Arrange - Configure stub responses
119
+ AccountServiceStub stub = new AccountServiceStub()
120
+ .whenCalled('getAccountCount', 42)
121
+ .whenCalled('getAccount', new Account(Name = 'Configured Account'));
122
+
123
+ // Create stubbed instance
124
+ IAccountService service = (IAccountService) Test.createStub(
125
+ IAccountService.class,
126
+ stub
127
+ );
128
+
129
+ // Act
130
+ Test.startTest();
131
+ Integer count = service.getAccountCount();
132
+ Account acc = service.getAccount(null);
133
+ Test.stopTest();
134
+
135
+ // Assert - Verify responses
136
+ Assert.areEqual(42, count, 'Should return configured count');
137
+ Assert.areEqual('Configured Account', acc.Name, 'Should return configured account');
138
+
139
+ // Assert - Verify calls were tracked
140
+ Assert.isTrue(stub.wasCalled('getAccountCount'), 'getAccountCount was called');
141
+ Assert.isTrue(stub.wasCalled('getAccount'), 'getAccount was called');
142
+ Assert.areEqual(1, stub.getCallCount('getAccountCount'), 'Called once');
143
+ }
144
+
145
+ @IsTest
146
+ static void testDefaultResponses() {
147
+ // Arrange - No configured responses
148
+ AccountServiceStub stub = new AccountServiceStub();
149
+ IAccountService service = (IAccountService) Test.createStub(
150
+ IAccountService.class,
151
+ stub
152
+ );
153
+
154
+ // Act
155
+ Test.startTest();
156
+ Account acc = service.getAccount(null);
157
+ Test.stopTest();
158
+
159
+ // Assert - Verify default response
160
+ Assert.isNotNull(acc, 'Should return default account');
161
+ Assert.areEqual('Default Stub Account', acc.Name, 'Should have default name');
162
+ }
163
+ }
164
+
165
+ // ═══════════════════════════════════════════════════════════════════════════
166
+ // EXAMPLE 3: Conditional StubProvider
167
+ // ═══════════════════════════════════════════════════════════════════════════
168
+
169
+ /**
170
+ * Stub with conditional logic based on parameters
171
+ */
172
+ @IsTest
173
+ public class ConditionalStub implements System.StubProvider {
174
+
175
+ public Object handleMethodCall(
176
+ Object stubbedObject,
177
+ String stubbedMethodName,
178
+ Type returnType,
179
+ List<Type> paramTypes,
180
+ List<String> paramNames,
181
+ List<Object> paramValues
182
+ ) {
183
+ // Conditional response based on method and params
184
+ if (stubbedMethodName == 'getAccount') {
185
+ Id requestedId = (Id) paramValues[0];
186
+
187
+ // Return different accounts based on ID pattern
188
+ String idStr = String.valueOf(requestedId);
189
+ if (idStr.startsWith('001')) {
190
+ return new Account(Id = requestedId, Name = 'Standard Account');
191
+ } else if (idStr.startsWith('0018')) {
192
+ return new Account(Id = requestedId, Name = 'Person Account');
193
+ }
194
+ }
195
+
196
+ if (stubbedMethodName == 'getAccountCount') {
197
+ // Simulate different counts for different scenarios
198
+ return 100;
199
+ }
200
+
201
+ return null;
202
+ }
203
+ }
204
+
205
+ // ═══════════════════════════════════════════════════════════════════════════
206
+ // EXAMPLE 4: Exception-Throwing Stub
207
+ // ═══════════════════════════════════════════════════════════════════════════
208
+
209
+ /**
210
+ * Stub that throws exceptions for error testing
211
+ */
212
+ @IsTest
213
+ public class ErrorStub implements System.StubProvider {
214
+
215
+ private String methodToFail;
216
+ private String errorMessage;
217
+
218
+ public ErrorStub failOn(String methodName, String message) {
219
+ this.methodToFail = methodName;
220
+ this.errorMessage = message;
221
+ return this;
222
+ }
223
+
224
+ public Object handleMethodCall(
225
+ Object stubbedObject,
226
+ String stubbedMethodName,
227
+ Type returnType,
228
+ List<Type> paramTypes,
229
+ List<String> paramNames,
230
+ List<Object> paramValues
231
+ ) {
232
+ if (stubbedMethodName == methodToFail) {
233
+ throw new AuraHandledException(errorMessage);
234
+ }
235
+ return null;
236
+ }
237
+ }
238
+
239
+ @IsTest
240
+ private class ErrorStubTest {
241
+
242
+ @IsTest
243
+ static void testErrorHandling() {
244
+ // Arrange
245
+ ErrorStub stub = new ErrorStub().failOn('getAccount', 'Account not found');
246
+ IAccountService service = (IAccountService) Test.createStub(
247
+ IAccountService.class,
248
+ stub
249
+ );
250
+
251
+ // Act/Assert
252
+ try {
253
+ service.getAccount(null);
254
+ Assert.fail('Expected AuraHandledException');
255
+ } catch (AuraHandledException e) {
256
+ Assert.areEqual('Account not found', e.getMessage());
257
+ }
258
+ }
259
+ }
260
+
261
+ // ═══════════════════════════════════════════════════════════════════════════
262
+ // EXAMPLE 5: Universal Mock (Flexible Stub)
263
+ // ═══════════════════════════════════════════════════════════════════════════
264
+
265
+ /**
266
+ * Highly flexible stub that can mock any interface
267
+ *
268
+ * Inspired by: Suraj Pillai's UniversalMock pattern
269
+ */
270
+ @IsTest
271
+ public class UniversalMock implements System.StubProvider {
272
+
273
+ // Store method -> return value mappings
274
+ private Map<String, Object> returnValues = new Map<String, Object>();
275
+
276
+ // Store method -> exception mappings
277
+ private Map<String, Exception> exceptions = new Map<String, Exception>();
278
+
279
+ // Track all calls
280
+ private List<MethodCall> calls = new List<MethodCall>();
281
+
282
+ public class MethodCall {
283
+ public String methodName;
284
+ public List<Object> arguments;
285
+ public Datetime calledAt;
286
+
287
+ public MethodCall(String methodName, List<Object> arguments) {
288
+ this.methodName = methodName;
289
+ this.arguments = arguments;
290
+ this.calledAt = Datetime.now();
291
+ }
292
+ }
293
+
294
+ /**
295
+ * Configure return value for a method
296
+ */
297
+ public UniversalMock setReturnValue(String methodName, Object value) {
298
+ returnValues.put(methodName, value);
299
+ return this;
300
+ }
301
+
302
+ /**
303
+ * Configure exception for a method
304
+ */
305
+ public UniversalMock throwException(String methodName, Exception e) {
306
+ exceptions.put(methodName, e);
307
+ return this;
308
+ }
309
+
310
+ public Object handleMethodCall(
311
+ Object stubbedObject,
312
+ String stubbedMethodName,
313
+ Type returnType,
314
+ List<Type> paramTypes,
315
+ List<String> paramNames,
316
+ List<Object> paramValues
317
+ ) {
318
+ // Track the call
319
+ calls.add(new MethodCall(stubbedMethodName, paramValues));
320
+
321
+ // Throw configured exception
322
+ if (exceptions.containsKey(stubbedMethodName)) {
323
+ throw exceptions.get(stubbedMethodName);
324
+ }
325
+
326
+ // Return configured value
327
+ if (returnValues.containsKey(stubbedMethodName)) {
328
+ return returnValues.get(stubbedMethodName);
329
+ }
330
+
331
+ // Return type-appropriate defaults
332
+ if (returnType == Boolean.class) return false;
333
+ if (returnType == Integer.class) return 0;
334
+ if (returnType == String.class) return '';
335
+ if (returnType == List<SObject>.class) return new List<SObject>();
336
+
337
+ return null;
338
+ }
339
+
340
+ /**
341
+ * Get all calls to a specific method
342
+ */
343
+ public List<MethodCall> getCalls(String methodName) {
344
+ List<MethodCall> result = new List<MethodCall>();
345
+ for (MethodCall call : calls) {
346
+ if (call.methodName == methodName) {
347
+ result.add(call);
348
+ }
349
+ }
350
+ return result;
351
+ }
352
+
353
+ /**
354
+ * Verify method was called with specific arguments
355
+ */
356
+ public Boolean wasCalledWith(String methodName, List<Object> expectedArgs) {
357
+ for (MethodCall call : getCalls(methodName)) {
358
+ if (call.arguments.equals(expectedArgs)) {
359
+ return true;
360
+ }
361
+ }
362
+ return false;
363
+ }
364
+ }
@@ -0,0 +1,328 @@
1
+ /**
2
+ * @description Test Data Factory for creating consistent test data across all test classes.
3
+ * Use this pattern to avoid hardcoded test data and ensure test isolation.
4
+ *
5
+ * USAGE:
6
+ * List<Account> accounts = TestDataFactory.createAccounts(5);
7
+ * insert accounts;
8
+ *
9
+ * // Or with auto-insert:
10
+ * List<Account> accounts = TestDataFactory.createAndInsertAccounts(5);
11
+ *
12
+ * @created {{Date}}
13
+ */
14
+ @IsTest
15
+ public class TestDataFactory {
16
+
17
+ // ═══════════════════════════════════════════════════════════════════════════
18
+ // ACCOUNT METHODS
19
+ // ═══════════════════════════════════════════════════════════════════════════
20
+
21
+ /**
22
+ * @description Creates Account records without inserting
23
+ * @param count Number of accounts to create
24
+ * @return List of Account records (not inserted)
25
+ */
26
+ public static List<Account> createAccounts(Integer count) {
27
+ List<Account> accounts = new List<Account>();
28
+ for (Integer i = 0; i < count; i++) {
29
+ accounts.add(new Account(
30
+ Name = 'Test Account ' + i,
31
+ Industry = 'Technology',
32
+ BillingStreet = '123 Test Street',
33
+ BillingCity = 'San Francisco',
34
+ BillingState = 'CA',
35
+ BillingPostalCode = '94105',
36
+ BillingCountry = 'USA',
37
+ Phone = '555-000-' + String.valueOf(i).leftPad(4, '0'),
38
+ Website = 'https://testaccount' + i + '.example.com'
39
+ ));
40
+ }
41
+ return accounts;
42
+ }
43
+
44
+ /**
45
+ * @description Creates and inserts Account records
46
+ * @param count Number of accounts to create
47
+ * @return List of inserted Account records
48
+ */
49
+ public static List<Account> createAndInsertAccounts(Integer count) {
50
+ List<Account> accounts = createAccounts(count);
51
+ insert accounts;
52
+ return accounts;
53
+ }
54
+
55
+ /**
56
+ * @description Creates Account with specific attributes
57
+ * @param name Account name
58
+ * @param industry Industry value
59
+ * @return Account record (not inserted)
60
+ */
61
+ public static Account createAccount(String name, String industry) {
62
+ return new Account(
63
+ Name = name,
64
+ Industry = industry,
65
+ BillingCity = 'San Francisco',
66
+ BillingState = 'CA',
67
+ BillingCountry = 'USA'
68
+ );
69
+ }
70
+
71
+ // ═══════════════════════════════════════════════════════════════════════════
72
+ // CONTACT METHODS
73
+ // ═══════════════════════════════════════════════════════════════════════════
74
+
75
+ /**
76
+ * @description Creates Contact records without inserting
77
+ * @param count Number of contacts to create
78
+ * @param accountId Parent account ID
79
+ * @return List of Contact records (not inserted)
80
+ */
81
+ public static List<Contact> createContacts(Integer count, Id accountId) {
82
+ List<Contact> contacts = new List<Contact>();
83
+ for (Integer i = 0; i < count; i++) {
84
+ contacts.add(new Contact(
85
+ FirstName = 'Test',
86
+ LastName = 'Contact ' + i,
87
+ AccountId = accountId,
88
+ Email = 'testcontact' + i + '@example.com',
89
+ Phone = '555-001-' + String.valueOf(i).leftPad(4, '0'),
90
+ Title = 'Test Title ' + i,
91
+ MailingStreet = '456 Test Ave',
92
+ MailingCity = 'San Francisco',
93
+ MailingState = 'CA',
94
+ MailingPostalCode = '94105',
95
+ MailingCountry = 'USA'
96
+ ));
97
+ }
98
+ return contacts;
99
+ }
100
+
101
+ /**
102
+ * @description Creates and inserts Contact records
103
+ * @param count Number of contacts to create
104
+ * @param accountId Parent account ID
105
+ * @return List of inserted Contact records
106
+ */
107
+ public static List<Contact> createAndInsertContacts(Integer count, Id accountId) {
108
+ List<Contact> contacts = createContacts(count, accountId);
109
+ insert contacts;
110
+ return contacts;
111
+ }
112
+
113
+ // ═══════════════════════════════════════════════════════════════════════════
114
+ // LEAD METHODS
115
+ // ═══════════════════════════════════════════════════════════════════════════
116
+
117
+ /**
118
+ * @description Creates Lead records without inserting
119
+ * @param count Number of leads to create
120
+ * @return List of Lead records (not inserted)
121
+ */
122
+ public static List<Lead> createLeads(Integer count) {
123
+ List<Lead> leads = new List<Lead>();
124
+ for (Integer i = 0; i < count; i++) {
125
+ leads.add(new Lead(
126
+ FirstName = 'Test',
127
+ LastName = 'Lead ' + i,
128
+ Company = 'Test Company ' + i,
129
+ Email = 'testlead' + i + '@example.com',
130
+ Phone = '555-002-' + String.valueOf(i).leftPad(4, '0'),
131
+ Status = 'Open - Not Contacted',
132
+ Industry = 'Technology',
133
+ LeadSource = 'Web'
134
+ ));
135
+ }
136
+ return leads;
137
+ }
138
+
139
+ /**
140
+ * @description Creates and inserts Lead records
141
+ * @param count Number of leads to create
142
+ * @return List of inserted Lead records
143
+ */
144
+ public static List<Lead> createAndInsertLeads(Integer count) {
145
+ List<Lead> leads = createLeads(count);
146
+ insert leads;
147
+ return leads;
148
+ }
149
+
150
+ // ═══════════════════════════════════════════════════════════════════════════
151
+ // OPPORTUNITY METHODS
152
+ // ═══════════════════════════════════════════════════════════════════════════
153
+
154
+ /**
155
+ * @description Creates Opportunity records without inserting
156
+ * @param count Number of opportunities to create
157
+ * @param accountId Parent account ID
158
+ * @return List of Opportunity records (not inserted)
159
+ */
160
+ public static List<Opportunity> createOpportunities(Integer count, Id accountId) {
161
+ List<Opportunity> opportunities = new List<Opportunity>();
162
+ for (Integer i = 0; i < count; i++) {
163
+ opportunities.add(new Opportunity(
164
+ Name = 'Test Opportunity ' + i,
165
+ AccountId = accountId,
166
+ StageName = 'Prospecting',
167
+ CloseDate = Date.today().addDays(30 + i),
168
+ Amount = 10000 * (i + 1)
169
+ ));
170
+ }
171
+ return opportunities;
172
+ }
173
+
174
+ /**
175
+ * @description Creates and inserts Opportunity records
176
+ * @param count Number of opportunities to create
177
+ * @param accountId Parent account ID
178
+ * @return List of inserted Opportunity records
179
+ */
180
+ public static List<Opportunity> createAndInsertOpportunities(Integer count, Id accountId) {
181
+ List<Opportunity> opportunities = createOpportunities(count, accountId);
182
+ insert opportunities;
183
+ return opportunities;
184
+ }
185
+
186
+ // ═══════════════════════════════════════════════════════════════════════════
187
+ // CASE METHODS
188
+ // ═══════════════════════════════════════════════════════════════════════════
189
+
190
+ /**
191
+ * @description Creates Case records without inserting
192
+ * @param count Number of cases to create
193
+ * @param accountId Parent account ID (optional)
194
+ * @param contactId Related contact ID (optional)
195
+ * @return List of Case records (not inserted)
196
+ */
197
+ public static List<Case> createCases(Integer count, Id accountId, Id contactId) {
198
+ List<Case> cases = new List<Case>();
199
+ for (Integer i = 0; i < count; i++) {
200
+ cases.add(new Case(
201
+ Subject = 'Test Case ' + i,
202
+ Description = 'Test case description ' + i,
203
+ Status = 'New',
204
+ Priority = 'Medium',
205
+ Origin = 'Web',
206
+ AccountId = accountId,
207
+ ContactId = contactId
208
+ ));
209
+ }
210
+ return cases;
211
+ }
212
+
213
+ /**
214
+ * @description Creates and inserts Case records
215
+ * @param count Number of cases to create
216
+ * @param accountId Parent account ID (optional)
217
+ * @param contactId Related contact ID (optional)
218
+ * @return List of inserted Case records
219
+ */
220
+ public static List<Case> createAndInsertCases(Integer count, Id accountId, Id contactId) {
221
+ List<Case> cases = createCases(count, accountId, contactId);
222
+ insert cases;
223
+ return cases;
224
+ }
225
+
226
+ // ═══════════════════════════════════════════════════════════════════════════
227
+ // USER METHODS (for System.runAs testing)
228
+ // ═══════════════════════════════════════════════════════════════════════════
229
+
230
+ /**
231
+ * @description Creates a test User with specified profile
232
+ * Use with System.runAs() for permission testing
233
+ * @param profileName Name of the profile to assign
234
+ * @param uniqueIdentifier Unique string to avoid duplicate usernames
235
+ * @return User record (not inserted)
236
+ */
237
+ public static User createUser(String profileName, String uniqueIdentifier) {
238
+ Profile p = [SELECT Id FROM Profile WHERE Name = :profileName LIMIT 1];
239
+
240
+ String uniqueEmail = uniqueIdentifier + '@testuser.example.com';
241
+ String uniqueUsername = uniqueIdentifier + '@testuser.example.com.test';
242
+
243
+ return new User(
244
+ FirstName = 'Test',
245
+ LastName = 'User ' + uniqueIdentifier,
246
+ Email = uniqueEmail,
247
+ Username = uniqueUsername,
248
+ Alias = uniqueIdentifier.left(8),
249
+ ProfileId = p.Id,
250
+ TimeZoneSidKey = 'America/Los_Angeles',
251
+ LocaleSidKey = 'en_US',
252
+ EmailEncodingKey = 'UTF-8',
253
+ LanguageLocaleKey = 'en_US'
254
+ );
255
+ }
256
+
257
+ /**
258
+ * @description Creates and inserts a test User
259
+ * @param profileName Name of the profile to assign
260
+ * @param uniqueIdentifier Unique string to avoid duplicate usernames
261
+ * @return Inserted User record
262
+ */
263
+ public static User createAndInsertUser(String profileName, String uniqueIdentifier) {
264
+ User u = createUser(profileName, uniqueIdentifier);
265
+ insert u;
266
+ return u;
267
+ }
268
+
269
+ // ═══════════════════════════════════════════════════════════════════════════
270
+ // CUSTOM OBJECT METHODS (Template)
271
+ // ═══════════════════════════════════════════════════════════════════════════
272
+
273
+ /**
274
+ * @description Template for custom object creation
275
+ * Copy and modify for your custom objects
276
+ * @param count Number of records to create
277
+ * @return List of custom object records (not inserted)
278
+ */
279
+ /*
280
+ public static List<Custom_Object__c> createCustomObjects(Integer count) {
281
+ List<Custom_Object__c> records = new List<Custom_Object__c>();
282
+ for (Integer i = 0; i < count; i++) {
283
+ records.add(new Custom_Object__c(
284
+ Name = 'Test Record ' + i,
285
+ Custom_Field__c = 'Value ' + i
286
+ // Add more fields as needed
287
+ ));
288
+ }
289
+ return records;
290
+ }
291
+
292
+ public static List<Custom_Object__c> createAndInsertCustomObjects(Integer count) {
293
+ List<Custom_Object__c> records = createCustomObjects(count);
294
+ insert records;
295
+ return records;
296
+ }
297
+ */
298
+
299
+ // ═══════════════════════════════════════════════════════════════════════════
300
+ // UTILITY METHODS
301
+ // ═══════════════════════════════════════════════════════════════════════════
302
+
303
+ /**
304
+ * @description Generates a unique string for test data
305
+ * Useful for avoiding unique constraint violations
306
+ * @return Unique string based on timestamp
307
+ */
308
+ public static String generateUniqueString() {
309
+ return String.valueOf(Datetime.now().getTime()) +
310
+ String.valueOf(Math.random()).substring(2, 8);
311
+ }
312
+
313
+ /**
314
+ * @description Creates a map of records by a specified field
315
+ * Useful for test assertions
316
+ * @param records List of SObjects
317
+ * @param fieldName API name of the field to use as key
318
+ * @return Map with field values as keys
319
+ */
320
+ public static Map<String, SObject> createMapByField(List<SObject> records, String fieldName) {
321
+ Map<String, SObject> recordMap = new Map<String, SObject>();
322
+ for (SObject record : records) {
323
+ String keyValue = String.valueOf(record.get(fieldName));
324
+ recordMap.put(keyValue, record);
325
+ }
326
+ return recordMap;
327
+ }
328
+ }