@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,860 @@
1
+ <!-- Parent: generating-lwc-components/SKILL.md -->
2
+ # Lightning Message Service (LMS) Guide
3
+
4
+ Complete guide to cross-DOM component communication using Lightning Message Service.
5
+
6
+ ---
7
+
8
+ ## Table of Contents
9
+
10
+ 1. [Overview](#overview)
11
+ 2. [When to Use LMS](#when-to-use-lms)
12
+ 3. [Message Channel Setup](#message-channel-setup)
13
+ 4. [Publishing Messages](#publishing-messages)
14
+ 5. [Subscribing to Messages](#subscribing-to-messages)
15
+ 6. [Scopes](#scopes)
16
+ 7. [Advanced Patterns](#advanced-patterns)
17
+ 8. [Best Practices](#best-practices)
18
+ 9. [Troubleshooting](#troubleshooting)
19
+
20
+ ---
21
+
22
+ ## Overview
23
+
24
+ Lightning Message Service (LMS) enables communication between components across different DOM contexts:
25
+ - Lightning Web Components (LWC)
26
+ - Aura Components
27
+ - Visualforce pages (in Lightning Experience)
28
+
29
+ **Key Benefits**:
30
+ - Cross-DOM communication (Shadow DOM boundaries)
31
+ - Loosely coupled components
32
+ - Publish-subscribe pattern
33
+ - Type-safe messaging with message channels
34
+
35
+ ---
36
+
37
+ ## When to Use LMS
38
+
39
+ | Use Case | Recommended Pattern |
40
+ |----------|---------------------|
41
+ | Parent → Child | `@api` properties (simple, direct) |
42
+ | Child → Parent | Custom Events (simple, direct) |
43
+ | Sibling → Sibling (same hierarchy) | Parent mediator + Custom Events |
44
+ | **Cross-DOM communication** | **Lightning Message Service** |
45
+ | **App Builder page components** | **Lightning Message Service** |
46
+ | **Aura ↔ LWC communication** | **Lightning Message Service** |
47
+ | **Visualforce ↔ LWC (in LEX)** | **Lightning Message Service** |
48
+
49
+ **Rule of Thumb**: Use LMS when components cannot directly reference each other or cross DOM boundaries.
50
+
51
+ ---
52
+
53
+ ## Message Channel Setup
54
+
55
+ ### 1. Create Message Channel Metadata
56
+
57
+ Lightning Message Channels are metadata files that define the message schema.
58
+
59
+ **File**: `force-app/main/default/messageChannels/AccountSelected__c.messageChannel-meta.xml`
60
+
61
+ ```xml
62
+ <?xml version="1.0" encoding="UTF-8"?>
63
+ <LightningMessageChannel xmlns="http://soap.sforce.com/2006/04/metadata">
64
+ <description>Message channel for account selection events</description>
65
+ <isExposed>true</isExposed>
66
+ <lightningMessageFields>
67
+ <description>Account ID</description>
68
+ <fieldName>accountId</fieldName>
69
+ </lightningMessageFields>
70
+ <lightningMessageFields>
71
+ <description>Account Name</description>
72
+ <fieldName>accountName</fieldName>
73
+ </lightningMessageFields>
74
+ <lightningMessageFields>
75
+ <description>Source component identifier</description>
76
+ <fieldName>source</fieldName>
77
+ </lightningMessageFields>
78
+ <masterLabel>Account Selected</masterLabel>
79
+ </LightningMessageChannel>
80
+ ```
81
+
82
+ ### 2. Deploy Message Channel
83
+
84
+ ```bash
85
+ sf project deploy start -m LightningMessageChannel:AccountSelected__c
86
+ ```
87
+
88
+ ### 3. Import Message Channel in Component
89
+
90
+ ```javascript
91
+ import ACCOUNT_SELECTED_CHANNEL from '@salesforce/messageChannel/AccountSelected__c';
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Publishing Messages
97
+
98
+ ### Basic Publisher Pattern
99
+
100
+ ```javascript
101
+ // accountPublisher.js
102
+ import { LightningElement, wire } from 'lwc';
103
+ import { publish, MessageContext } from 'lightning/messageService';
104
+ import ACCOUNT_SELECTED_CHANNEL from '@salesforce/messageChannel/AccountSelected__c';
105
+
106
+ export default class AccountPublisher extends LightningElement {
107
+ @wire(MessageContext)
108
+ messageContext;
109
+
110
+ handleAccountClick(event) {
111
+ const accountId = event.target.dataset.id;
112
+ const accountName = event.target.dataset.name;
113
+
114
+ // Create payload
115
+ const payload = {
116
+ accountId: accountId,
117
+ accountName: accountName,
118
+ source: 'accountPublisher'
119
+ };
120
+
121
+ // Publish message
122
+ publish(this.messageContext, ACCOUNT_SELECTED_CHANNEL, payload);
123
+ }
124
+ }
125
+ ```
126
+
127
+ ```html
128
+ <!-- accountPublisher.html -->
129
+ <template>
130
+ <div class="slds-card">
131
+ <div class="slds-card__header">
132
+ <h2 class="slds-text-heading_medium">Account List</h2>
133
+ </div>
134
+ <div class="slds-card__body">
135
+ <template for:each={accounts} for:item="account">
136
+ <div key={account.Id}
137
+ class="slds-box slds-m-around_small"
138
+ data-id={account.Id}
139
+ data-name={account.Name}
140
+ onclick={handleAccountClick}>
141
+ {account.Name}
142
+ </div>
143
+ </template>
144
+ </div>
145
+ </div>
146
+ </template>
147
+ ```
148
+
149
+ ### Publisher with Conditional Logic
150
+
151
+ ```javascript
152
+ handlePublish(accountData) {
153
+ // Validate before publishing
154
+ if (!this.messageContext) {
155
+ console.error('MessageContext not initialized');
156
+ return;
157
+ }
158
+
159
+ if (!accountData || !accountData.Id) {
160
+ console.error('Invalid account data');
161
+ return;
162
+ }
163
+
164
+ const payload = {
165
+ accountId: accountData.Id,
166
+ accountName: accountData.Name,
167
+ source: this.componentName,
168
+ timestamp: Date.now()
169
+ };
170
+
171
+ publish(this.messageContext, ACCOUNT_SELECTED_CHANNEL, payload);
172
+
173
+ // Optional: Show toast confirmation
174
+ this.dispatchEvent(new ShowToastEvent({
175
+ title: 'Selection Published',
176
+ message: `Account "${accountData.Name}" selected`,
177
+ variant: 'success'
178
+ }));
179
+ }
180
+ ```
181
+
182
+ ---
183
+
184
+ ## Subscribing to Messages
185
+
186
+ ### Basic Subscriber Pattern
187
+
188
+ ```javascript
189
+ // accountSubscriber.js
190
+ import { LightningElement, wire } from 'lwc';
191
+ import { subscribe, unsubscribe, MessageContext, APPLICATION_SCOPE } from 'lightning/messageService';
192
+ import ACCOUNT_SELECTED_CHANNEL from '@salesforce/messageChannel/AccountSelected__c';
193
+
194
+ export default class AccountSubscriber extends LightningElement {
195
+ subscription = null;
196
+ selectedAccountId;
197
+ selectedAccountName;
198
+
199
+ @wire(MessageContext)
200
+ messageContext;
201
+
202
+ connectedCallback() {
203
+ this.subscribeToChannel();
204
+ }
205
+
206
+ disconnectedCallback() {
207
+ this.unsubscribeFromChannel();
208
+ }
209
+
210
+ subscribeToChannel() {
211
+ if (!this.subscription) {
212
+ this.subscription = subscribe(
213
+ this.messageContext,
214
+ ACCOUNT_SELECTED_CHANNEL,
215
+ (message) => this.handleMessage(message),
216
+ { scope: APPLICATION_SCOPE }
217
+ );
218
+ }
219
+ }
220
+
221
+ unsubscribeFromChannel() {
222
+ unsubscribe(this.subscription);
223
+ this.subscription = null;
224
+ }
225
+
226
+ handleMessage(message) {
227
+ this.selectedAccountId = message.accountId;
228
+ this.selectedAccountName = message.accountName;
229
+
230
+ console.log('Message received from:', message.source);
231
+ console.log('Account ID:', message.accountId);
232
+ }
233
+ }
234
+ ```
235
+
236
+ ```html
237
+ <!-- accountSubscriber.html -->
238
+ <template>
239
+ <div class="slds-card">
240
+ <div class="slds-card__header">
241
+ <h2 class="slds-text-heading_medium">Selected Account</h2>
242
+ </div>
243
+ <div class="slds-card__body">
244
+ <template lwc:if={selectedAccountId}>
245
+ <dl class="slds-dl_horizontal">
246
+ <dt class="slds-dl_horizontal__label">Account ID:</dt>
247
+ <dd class="slds-dl_horizontal__detail">{selectedAccountId}</dd>
248
+ <dt class="slds-dl_horizontal__label">Account Name:</dt>
249
+ <dd class="slds-dl_horizontal__detail">{selectedAccountName}</dd>
250
+ </dl>
251
+ </template>
252
+ <template lwc:else>
253
+ <p class="slds-text-color_weak">No account selected</p>
254
+ </template>
255
+ </div>
256
+ </div>
257
+ </template>
258
+ ```
259
+
260
+ ### Subscriber with Filtering
261
+
262
+ ```javascript
263
+ handleMessage(message) {
264
+ // Ignore messages from this component (avoid self-updates)
265
+ if (message.source === this.componentName) {
266
+ return;
267
+ }
268
+
269
+ // Filter by specific conditions
270
+ if (message.accountId && message.accountId.startsWith('001')) {
271
+ this.selectedAccountId = message.accountId;
272
+ this.selectedAccountName = message.accountName;
273
+
274
+ // Fetch additional data if needed
275
+ this.loadAccountDetails(message.accountId);
276
+ }
277
+ }
278
+
279
+ async loadAccountDetails(accountId) {
280
+ try {
281
+ const data = await getAccountDetails({ accountId });
282
+ this.accountDetails = data;
283
+ } catch (error) {
284
+ this.handleError(error);
285
+ }
286
+ }
287
+ ```
288
+
289
+ ---
290
+
291
+ ## Scopes
292
+
293
+ LMS supports two subscription scopes:
294
+
295
+ | Scope | Behavior | Use Case |
296
+ |-------|----------|----------|
297
+ | `APPLICATION_SCOPE` | Receive messages from entire app | Cross-page communication, global state |
298
+ | `undefined` (default) | Receive messages only within active tab | Tab-specific communication |
299
+
300
+ ### Application Scope Example
301
+
302
+ ```javascript
303
+ import { APPLICATION_SCOPE } from 'lightning/messageService';
304
+
305
+ subscribe(
306
+ this.messageContext,
307
+ ACCOUNT_SELECTED_CHANNEL,
308
+ (message) => this.handleMessage(message),
309
+ { scope: APPLICATION_SCOPE }
310
+ );
311
+ ```
312
+
313
+ ### Tab Scope Example
314
+
315
+ ```javascript
316
+ // No scope specified = tab scope only
317
+ subscribe(
318
+ this.messageContext,
319
+ ACCOUNT_SELECTED_CHANNEL,
320
+ (message) => this.handleMessage(message)
321
+ );
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Advanced Patterns
327
+
328
+ ### 1. Multiple Subscriptions
329
+
330
+ ```javascript
331
+ export default class MultiSubscriber extends LightningElement {
332
+ accountSubscription = null;
333
+ contactSubscription = null;
334
+
335
+ @wire(MessageContext) messageContext;
336
+
337
+ connectedCallback() {
338
+ // Subscribe to account channel
339
+ this.accountSubscription = subscribe(
340
+ this.messageContext,
341
+ ACCOUNT_SELECTED_CHANNEL,
342
+ (message) => this.handleAccountMessage(message),
343
+ { scope: APPLICATION_SCOPE }
344
+ );
345
+
346
+ // Subscribe to contact channel
347
+ this.contactSubscription = subscribe(
348
+ this.messageContext,
349
+ CONTACT_SELECTED_CHANNEL,
350
+ (message) => this.handleContactMessage(message),
351
+ { scope: APPLICATION_SCOPE }
352
+ );
353
+ }
354
+
355
+ disconnectedCallback() {
356
+ unsubscribe(this.accountSubscription);
357
+ unsubscribe(this.contactSubscription);
358
+ this.accountSubscription = null;
359
+ this.contactSubscription = null;
360
+ }
361
+
362
+ handleAccountMessage(message) {
363
+ // Handle account-specific logic
364
+ }
365
+
366
+ handleContactMessage(message) {
367
+ // Handle contact-specific logic
368
+ }
369
+ }
370
+ ```
371
+
372
+ ### 2. Publish-Subscribe in Same Component
373
+
374
+ ```javascript
375
+ export default class PublisherSubscriber extends LightningElement {
376
+ subscription = null;
377
+ @wire(MessageContext) messageContext;
378
+
379
+ connectedCallback() {
380
+ // Subscribe to messages from OTHER components
381
+ this.subscription = subscribe(
382
+ this.messageContext,
383
+ ACCOUNT_SELECTED_CHANNEL,
384
+ (message) => this.handleMessage(message),
385
+ { scope: APPLICATION_SCOPE }
386
+ );
387
+ }
388
+
389
+ disconnectedCallback() {
390
+ unsubscribe(this.subscription);
391
+ }
392
+
393
+ handleMessage(message) {
394
+ // Filter out own messages
395
+ if (message.source === 'myComponent') {
396
+ return;
397
+ }
398
+ // Process external messages
399
+ this.selectedAccountId = message.accountId;
400
+ }
401
+
402
+ handleLocalSelection(event) {
403
+ const accountId = event.detail.id;
404
+
405
+ // Publish for other components
406
+ publish(this.messageContext, ACCOUNT_SELECTED_CHANNEL, {
407
+ accountId,
408
+ source: 'myComponent'
409
+ });
410
+
411
+ // Update own state directly (don't rely on subscription)
412
+ this.selectedAccountId = accountId;
413
+ }
414
+ }
415
+ ```
416
+
417
+ ### 3. Conditional Subscription
418
+
419
+ ```javascript
420
+ export default class ConditionalSubscriber extends LightningElement {
421
+ @api enableLiveUpdates = false;
422
+ subscription = null;
423
+ @wire(MessageContext) messageContext;
424
+
425
+ connectedCallback() {
426
+ if (this.enableLiveUpdates) {
427
+ this.subscribeToChannel();
428
+ }
429
+ }
430
+
431
+ @api
432
+ toggleLiveUpdates(enabled) {
433
+ this.enableLiveUpdates = enabled;
434
+ if (enabled) {
435
+ this.subscribeToChannel();
436
+ } else {
437
+ this.unsubscribeFromChannel();
438
+ }
439
+ }
440
+
441
+ subscribeToChannel() {
442
+ if (!this.subscription) {
443
+ this.subscription = subscribe(
444
+ this.messageContext,
445
+ ACCOUNT_SELECTED_CHANNEL,
446
+ (message) => this.handleMessage(message),
447
+ { scope: APPLICATION_SCOPE }
448
+ );
449
+ }
450
+ }
451
+
452
+ unsubscribeFromChannel() {
453
+ if (this.subscription) {
454
+ unsubscribe(this.subscription);
455
+ this.subscription = null;
456
+ }
457
+ }
458
+ }
459
+ ```
460
+
461
+ ### 4. Message Buffering
462
+
463
+ ```javascript
464
+ export default class MessageBuffer extends LightningElement {
465
+ messageQueue = [];
466
+ isProcessing = false;
467
+
468
+ handleMessage(message) {
469
+ this.messageQueue.push(message);
470
+ this.processQueue();
471
+ }
472
+
473
+ async processQueue() {
474
+ if (this.isProcessing || this.messageQueue.length === 0) {
475
+ return;
476
+ }
477
+
478
+ this.isProcessing = true;
479
+
480
+ while (this.messageQueue.length > 0) {
481
+ const message = this.messageQueue.shift();
482
+ await this.processMessage(message);
483
+ }
484
+
485
+ this.isProcessing = false;
486
+ }
487
+
488
+ async processMessage(message) {
489
+ // Simulate async processing
490
+ return new Promise(resolve => {
491
+ setTimeout(() => {
492
+ this.selectedAccountId = message.accountId;
493
+ resolve();
494
+ }, 100);
495
+ });
496
+ }
497
+ }
498
+ ```
499
+
500
+ ---
501
+
502
+ ## Best Practices
503
+
504
+ ### 1. Always Unsubscribe
505
+
506
+ ```javascript
507
+ disconnectedCallback() {
508
+ // CRITICAL: Prevent memory leaks
509
+ if (this.subscription) {
510
+ unsubscribe(this.subscription);
511
+ this.subscription = null;
512
+ }
513
+ }
514
+ ```
515
+
516
+ ### 2. Validate MessageContext
517
+
518
+ ```javascript
519
+ handlePublish(data) {
520
+ if (!this.messageContext) {
521
+ console.warn('MessageContext not available');
522
+ return;
523
+ }
524
+ publish(this.messageContext, CHANNEL, data);
525
+ }
526
+ ```
527
+
528
+ ### 3. Use Descriptive Payloads
529
+
530
+ ```javascript
531
+ // BAD - Unclear payload
532
+ publish(this.messageContext, CHANNEL, { id: '001xxx' });
533
+
534
+ // GOOD - Clear, descriptive payload
535
+ publish(this.messageContext, CHANNEL, {
536
+ accountId: '001xxx000003DGQ',
537
+ accountName: 'Acme Corp',
538
+ source: 'accountList',
539
+ timestamp: Date.now(),
540
+ metadata: {
541
+ action: 'selected',
542
+ view: 'list'
543
+ }
544
+ });
545
+ ```
546
+
547
+ ### 4. Document Message Channels
548
+
549
+ ```javascript
550
+ /**
551
+ * Publishes account selection event to AccountSelected__c channel
552
+ * @param {Object} payload
553
+ * @param {String} payload.accountId - Salesforce Account ID
554
+ * @param {String} payload.accountName - Account Name
555
+ * @param {String} payload.source - Component identifier
556
+ */
557
+ publishAccountSelection(payload) {
558
+ publish(this.messageContext, ACCOUNT_SELECTED_CHANNEL, payload);
559
+ }
560
+ ```
561
+
562
+ ### 5. Error Handling
563
+
564
+ ```javascript
565
+ handleMessage(message) {
566
+ try {
567
+ if (!message || !message.accountId) {
568
+ throw new Error('Invalid message payload');
569
+ }
570
+
571
+ this.selectedAccountId = message.accountId;
572
+ this.loadAccountDetails(message.accountId);
573
+ } catch (error) {
574
+ console.error('Error processing message:', error);
575
+ this.dispatchEvent(new ShowToastEvent({
576
+ title: 'Error',
577
+ message: 'Failed to process message',
578
+ variant: 'error'
579
+ }));
580
+ }
581
+ }
582
+ ```
583
+
584
+ ---
585
+
586
+ ## Troubleshooting
587
+
588
+ ### Issue: Messages Not Received
589
+
590
+ **Checklist**:
591
+ 1. Is `MessageContext` wired correctly?
592
+ ```javascript
593
+ @wire(MessageContext) messageContext;
594
+ ```
595
+
596
+ 2. Is subscription active?
597
+ ```javascript
598
+ console.log('Subscription:', this.subscription); // Should not be null
599
+ ```
600
+
601
+ 3. Is the message channel deployed?
602
+ ```bash
603
+ sf project deploy start -m LightningMessageChannel
604
+ ```
605
+
606
+ 4. Are publisher and subscriber using the same channel?
607
+ ```javascript
608
+ // Both should import the same channel
609
+ import CHANNEL from '@salesforce/messageChannel/AccountSelected__c';
610
+ ```
611
+
612
+ 5. Is the scope correct?
613
+ ```javascript
614
+ // For cross-page: APPLICATION_SCOPE
615
+ // For same page: no scope (default)
616
+ ```
617
+
618
+ ### Issue: Memory Leaks
619
+
620
+ **Cause**: Not unsubscribing in `disconnectedCallback()`
621
+
622
+ **Fix**:
623
+ ```javascript
624
+ disconnectedCallback() {
625
+ unsubscribe(this.subscription);
626
+ this.subscription = null;
627
+ }
628
+ ```
629
+
630
+ ### Issue: Self-Updates
631
+
632
+ **Cause**: Component receives its own published messages
633
+
634
+ **Fix**: Filter by source
635
+ ```javascript
636
+ handleMessage(message) {
637
+ if (message.source === this.componentName) {
638
+ return; // Ignore own messages
639
+ }
640
+ // Process message
641
+ }
642
+ ```
643
+
644
+ ---
645
+
646
+ ## Testing LMS Components
647
+
648
+ ### Mock MessageContext
649
+
650
+ ```javascript
651
+ // testUtils.js
652
+ export const createMessageContextMock = () => {
653
+ return jest.fn();
654
+ };
655
+
656
+ export const mockPublish = jest.fn();
657
+ export const mockSubscribe = jest.fn();
658
+ export const mockUnsubscribe = jest.fn();
659
+
660
+ jest.mock('lightning/messageService', () => ({
661
+ publish: mockPublish,
662
+ subscribe: mockSubscribe,
663
+ unsubscribe: mockUnsubscribe,
664
+ MessageContext: Symbol('MessageContext'),
665
+ APPLICATION_SCOPE: Symbol('APPLICATION_SCOPE')
666
+ }), { virtual: true });
667
+ ```
668
+
669
+ ### Test Publisher
670
+
671
+ ```javascript
672
+ import { createElement } from 'lwc';
673
+ import AccountPublisher from 'c/accountPublisher';
674
+ import { publish } from 'lightning/messageService';
675
+ import ACCOUNT_SELECTED_CHANNEL from '@salesforce/messageChannel/AccountSelected__c';
676
+
677
+ jest.mock('lightning/messageService');
678
+
679
+ describe('c-account-publisher', () => {
680
+ afterEach(() => {
681
+ jest.clearAllMocks();
682
+ });
683
+
684
+ it('publishes account selection', () => {
685
+ const element = createElement('c-account-publisher', {
686
+ is: AccountPublisher
687
+ });
688
+ document.body.appendChild(element);
689
+
690
+ // Trigger selection
691
+ const accountCard = element.shadowRoot.querySelector('[data-id="001xxx"]');
692
+ accountCard.click();
693
+
694
+ // Assert publish was called
695
+ expect(publish).toHaveBeenCalledWith(
696
+ expect.anything(),
697
+ ACCOUNT_SELECTED_CHANNEL,
698
+ expect.objectContaining({
699
+ accountId: '001xxx'
700
+ })
701
+ );
702
+ });
703
+ });
704
+ ```
705
+
706
+ ### Test Subscriber
707
+
708
+ ```javascript
709
+ import { createElement } from 'lwc';
710
+ import AccountSubscriber from 'c/accountSubscriber';
711
+ import { subscribe } from 'lightning/messageService';
712
+
713
+ jest.mock('lightning/messageService');
714
+
715
+ describe('c-account-subscriber', () => {
716
+ let messageHandler;
717
+
718
+ beforeEach(() => {
719
+ subscribe.mockImplementation((context, channel, handler, options) => {
720
+ messageHandler = handler;
721
+ return { subscription: 'mock-subscription' };
722
+ });
723
+ });
724
+
725
+ it('subscribes on connected', () => {
726
+ const element = createElement('c-account-subscriber', {
727
+ is: AccountSubscriber
728
+ });
729
+ document.body.appendChild(element);
730
+
731
+ expect(subscribe).toHaveBeenCalled();
732
+ });
733
+
734
+ it('handles incoming message', async () => {
735
+ const element = createElement('c-account-subscriber', {
736
+ is: AccountSubscriber
737
+ });
738
+ document.body.appendChild(element);
739
+
740
+ // Simulate message
741
+ messageHandler({
742
+ accountId: '001xxx',
743
+ accountName: 'Acme Corp'
744
+ });
745
+
746
+ await Promise.resolve();
747
+
748
+ const accountName = element.shadowRoot.querySelector('.account-name');
749
+ expect(accountName.textContent).toBe('Acme Corp');
750
+ });
751
+ });
752
+ ```
753
+
754
+ ---
755
+
756
+ ## Complete Example: Account-Contact Sync
757
+
758
+ ### Message Channel
759
+
760
+ ```xml
761
+ <!-- ContactSelected__c.messageChannel-meta.xml -->
762
+ <?xml version="1.0" encoding="UTF-8"?>
763
+ <LightningMessageChannel xmlns="http://soap.sforce.com/2006/04/metadata">
764
+ <description>Contact selection messaging</description>
765
+ <isExposed>true</isExposed>
766
+ <lightningMessageFields>
767
+ <fieldName>contactId</fieldName>
768
+ </lightningMessageFields>
769
+ <lightningMessageFields>
770
+ <fieldName>contactName</fieldName>
771
+ </lightningMessageFields>
772
+ <lightningMessageFields>
773
+ <fieldName>accountId</fieldName>
774
+ </lightningMessageFields>
775
+ <masterLabel>Contact Selected</masterLabel>
776
+ </LightningMessageChannel>
777
+ ```
778
+
779
+ ### Publisher Component
780
+
781
+ ```javascript
782
+ // contactList.js
783
+ import { LightningElement, api, wire } from 'lwc';
784
+ import { publish, MessageContext } from 'lightning/messageService';
785
+ import CONTACT_SELECTED from '@salesforce/messageChannel/ContactSelected__c';
786
+ import getContacts from '@salesforce/apex/ContactController.getContacts';
787
+
788
+ export default class ContactList extends LightningElement {
789
+ @api accountId;
790
+ contacts;
791
+ @wire(MessageContext) messageContext;
792
+
793
+ @wire(getContacts, { accountId: '$accountId' })
794
+ wiredContacts({ data, error }) {
795
+ if (data) {
796
+ this.contacts = data;
797
+ }
798
+ }
799
+
800
+ handleContactSelect(event) {
801
+ const contactId = event.currentTarget.dataset.id;
802
+ const contact = this.contacts.find(c => c.Id === contactId);
803
+
804
+ publish(this.messageContext, CONTACT_SELECTED, {
805
+ contactId: contact.Id,
806
+ contactName: contact.Name,
807
+ accountId: this.accountId
808
+ });
809
+ }
810
+ }
811
+ ```
812
+
813
+ ### Subscriber Component
814
+
815
+ ```javascript
816
+ // contactDetails.js
817
+ import { LightningElement, wire } from 'lwc';
818
+ import { subscribe, MessageContext, APPLICATION_SCOPE } from 'lightning/messageService';
819
+ import CONTACT_SELECTED from '@salesforce/messageChannel/ContactSelected__c';
820
+ import getContactDetails from '@salesforce/apex/ContactController.getContactDetails';
821
+
822
+ export default class ContactDetails extends LightningElement {
823
+ subscription = null;
824
+ contactId;
825
+ contactDetails;
826
+ @wire(MessageContext) messageContext;
827
+
828
+ connectedCallback() {
829
+ this.subscription = subscribe(
830
+ this.messageContext,
831
+ CONTACT_SELECTED,
832
+ (message) => this.handleContactSelected(message),
833
+ { scope: APPLICATION_SCOPE }
834
+ );
835
+ }
836
+
837
+ disconnectedCallback() {
838
+ unsubscribe(this.subscription);
839
+ }
840
+
841
+ async handleContactSelected(message) {
842
+ this.contactId = message.contactId;
843
+ try {
844
+ this.contactDetails = await getContactDetails({
845
+ contactId: message.contactId
846
+ });
847
+ } catch (error) {
848
+ console.error('Error loading contact details:', error);
849
+ }
850
+ }
851
+ }
852
+ ```
853
+
854
+ ---
855
+
856
+ ## Related Resources
857
+
858
+ - [component-patterns.md](component-patterns.md) - Parent-child communication
859
+ - [jest-testing.md](jest-testing.md) - Testing LMS components
860
+ - [Official LMS Documentation](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.use_message_channel)