@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,479 @@
1
+ <!-- Parent: querying-soql/SKILL.md -->
2
+ # Selector Patterns: Query Abstraction in Vanilla Apex
3
+
4
+ This guide teaches query abstraction patterns using pure Apex — no external libraries required. These patterns improve testability, maintainability, and security compliance.
5
+
6
+ ---
7
+
8
+ ## Why Use a Selector Layer?
9
+
10
+ ### The Problem
11
+
12
+ Without abstraction, SOQL queries are scattered everywhere:
13
+
14
+ ```apex
15
+ // In TriggerHandler.cls
16
+ List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :accountIds];
17
+
18
+ // In BatchJob.cls (duplicate!)
19
+ List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :ids];
20
+
21
+ // In ServiceClass.cls (slightly different fields!)
22
+ List<Account> accounts = [SELECT Id, Name, Industry FROM Account WHERE Id IN :accountIds];
23
+ ```
24
+
25
+ **Problems**:
26
+ 1. **Duplication**: Same query logic repeated
27
+ 2. **Inconsistency**: Different fields queried in different places
28
+ 3. **Fragility**: Field deletion breaks multiple classes
29
+ 4. **Testability**: Must create real records to test
30
+ 5. **Security**: FLS/sharing often forgotten
31
+
32
+ ### The Solution
33
+
34
+ Centralize queries in Selector classes:
35
+
36
+ ```apex
37
+ // Single source of truth
38
+ public class AccountSelector {
39
+ public static List<Account> byIds(Set<Id> accountIds) {
40
+ return [
41
+ SELECT Id, Name, Industry
42
+ FROM Account
43
+ WHERE Id IN :accountIds
44
+ WITH SECURITY_ENFORCED
45
+ ];
46
+ }
47
+ }
48
+
49
+ // Usage everywhere
50
+ List<Account> accounts = AccountSelector.byIds(accountIds);
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Pattern 1: Basic Selector Class
56
+
57
+ The simplest approach - a class with static query methods.
58
+
59
+ ```apex
60
+ /**
61
+ * AccountSelector - Centralized queries for Account object
62
+ */
63
+ public inherited sharing class AccountSelector {
64
+
65
+ // ═══════════════════════════════════════════════════════════════════
66
+ // FIELD SETS (centralized field lists)
67
+ // ═══════════════════════════════════════════════════════════════════
68
+
69
+ private static final List<SObjectField> STANDARD_FIELDS = new List<SObjectField>{
70
+ Account.Id,
71
+ Account.Name,
72
+ Account.Industry,
73
+ Account.AnnualRevenue,
74
+ Account.OwnerId
75
+ };
76
+
77
+ // ═══════════════════════════════════════════════════════════════════
78
+ // QUERY METHODS
79
+ // ═══════════════════════════════════════════════════════════════════
80
+
81
+ /**
82
+ * Query accounts by their IDs
83
+ */
84
+ public static List<Account> byIds(Set<Id> accountIds) {
85
+ if (accountIds == null || accountIds.isEmpty()) {
86
+ return new List<Account>();
87
+ }
88
+ return [
89
+ SELECT Id, Name, Industry, AnnualRevenue, OwnerId
90
+ FROM Account
91
+ WHERE Id IN :accountIds
92
+ WITH SECURITY_ENFORCED
93
+ ];
94
+ }
95
+
96
+ /**
97
+ * Query accounts by Owner
98
+ */
99
+ public static List<Account> byOwnerId(Id ownerId) {
100
+ return [
101
+ SELECT Id, Name, Industry, AnnualRevenue, OwnerId
102
+ FROM Account
103
+ WHERE OwnerId = :ownerId
104
+ WITH SECURITY_ENFORCED
105
+ LIMIT 1000
106
+ ];
107
+ }
108
+
109
+ /**
110
+ * Query accounts with their contacts
111
+ */
112
+ public static List<Account> withContactsByIds(Set<Id> accountIds) {
113
+ return [
114
+ SELECT Id, Name,
115
+ (SELECT Id, FirstName, LastName, Email
116
+ FROM Contacts
117
+ WHERE IsActive__c = true
118
+ LIMIT 50)
119
+ FROM Account
120
+ WHERE Id IN :accountIds
121
+ WITH SECURITY_ENFORCED
122
+ ];
123
+ }
124
+ }
125
+ ```
126
+
127
+ **Usage**:
128
+ ```apex
129
+ // Clean, readable, testable
130
+ List<Account> accounts = AccountSelector.byIds(accountIdSet);
131
+ List<Account> myAccounts = AccountSelector.byOwnerId(UserInfo.getUserId());
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Pattern 2: Selector with Sharing Modes
137
+
138
+ Control sharing rules at the selector level.
139
+
140
+ ```apex
141
+ /**
142
+ * ContactSelector with sharing mode control
143
+ */
144
+ public class ContactSelector {
145
+
146
+ // ═══════════════════════════════════════════════════════════════════
147
+ // USER MODE (respects sharing rules - default)
148
+ // ═══════════════════════════════════════════════════════════════════
149
+
150
+ public inherited sharing class UserMode {
151
+ public static List<Contact> byAccountIds(Set<Id> accountIds) {
152
+ return [
153
+ SELECT Id, FirstName, LastName, Email, AccountId
154
+ FROM Contact
155
+ WHERE AccountId IN :accountIds
156
+ WITH USER_MODE
157
+ ];
158
+ }
159
+ }
160
+
161
+ // ═══════════════════════════════════════════════════════════════════
162
+ // SYSTEM MODE (bypasses sharing - use carefully!)
163
+ // ═══════════════════════════════════════════════════════════════════
164
+
165
+ public without sharing class SystemMode {
166
+ public static List<Contact> byAccountIds(Set<Id> accountIds) {
167
+ return [
168
+ SELECT Id, FirstName, LastName, Email, AccountId
169
+ FROM Contact
170
+ WHERE AccountId IN :accountIds
171
+ WITH SYSTEM_MODE
172
+ ];
173
+ }
174
+ }
175
+ }
176
+
177
+ // Usage
178
+ List<Contact> visibleContacts = ContactSelector.UserMode.byAccountIds(ids);
179
+ List<Contact> allContacts = ContactSelector.SystemMode.byAccountIds(ids);
180
+ ```
181
+
182
+ ---
183
+
184
+ ## Pattern 3: Mockable Selector (for Unit Tests)
185
+
186
+ Enable query mocking without database calls.
187
+
188
+ ```apex
189
+ /**
190
+ * OpportunitySelector with mocking support
191
+ */
192
+ public inherited sharing class OpportunitySelector {
193
+
194
+ // Test-visible mock data
195
+ @TestVisible
196
+ private static List<Opportunity> mockData;
197
+
198
+ /**
199
+ * Query opportunities by Account IDs
200
+ * Returns mock data in tests if set
201
+ */
202
+ public static List<Opportunity> byAccountIds(Set<Id> accountIds) {
203
+ if (Test.isRunningTest() && mockData != null) {
204
+ return mockData;
205
+ }
206
+ return [
207
+ SELECT Id, Name, StageName, Amount, CloseDate, AccountId
208
+ FROM Opportunity
209
+ WHERE AccountId IN :accountIds
210
+ WITH SECURITY_ENFORCED
211
+ ];
212
+ }
213
+
214
+ /**
215
+ * Set mock data for testing
216
+ */
217
+ @TestVisible
218
+ private static void setMockData(List<Opportunity> opportunities) {
219
+ mockData = opportunities;
220
+ }
221
+ }
222
+ ```
223
+
224
+ **Test Usage**:
225
+ ```apex
226
+ @IsTest
227
+ private class OpportunitySelectorTest {
228
+ @IsTest
229
+ static void testByAccountIds_returnsMockData() {
230
+ // Arrange - no database records needed!
231
+ List<Opportunity> mockOpps = new List<Opportunity>{
232
+ new Opportunity(Name = 'Test Opp', StageName = 'Prospecting', Amount = 1000)
233
+ };
234
+ OpportunitySelector.setMockData(mockOpps);
235
+
236
+ // Act
237
+ List<Opportunity> result = OpportunitySelector.byAccountIds(new Set<Id>());
238
+
239
+ // Assert
240
+ System.assertEquals(1, result.size());
241
+ System.assertEquals('Test Opp', result[0].Name);
242
+ }
243
+ }
244
+ ```
245
+
246
+ ---
247
+
248
+ ## Pattern 4: Query Builder (Dynamic SOQL)
249
+
250
+ For complex, dynamic queries that vary at runtime.
251
+
252
+ ```apex
253
+ /**
254
+ * Dynamic query builder for flexible SOQL construction
255
+ */
256
+ public inherited sharing class QueryBuilder {
257
+
258
+ private String objectName;
259
+ private Set<String> fields = new Set<String>();
260
+ private List<String> conditions = new List<String>();
261
+ private Map<String, Object> bindings = new Map<String, Object>();
262
+ private String orderByClause;
263
+ private Integer limitCount;
264
+
265
+ /**
266
+ * Constructor
267
+ */
268
+ public QueryBuilder(String objectName) {
269
+ this.objectName = objectName;
270
+ }
271
+
272
+ /**
273
+ * Add fields to select
274
+ */
275
+ public QueryBuilder selectFields(List<String> fieldList) {
276
+ fields.addAll(fieldList);
277
+ return this;
278
+ }
279
+
280
+ /**
281
+ * Add fields using SObjectField tokens (type-safe!)
282
+ */
283
+ public QueryBuilder selectFields(List<SObjectField> fieldTokens) {
284
+ for (SObjectField token : fieldTokens) {
285
+ fields.add(String.valueOf(token));
286
+ }
287
+ return this;
288
+ }
289
+
290
+ /**
291
+ * Add WHERE condition with binding
292
+ */
293
+ public QueryBuilder whereEquals(String field, Object value) {
294
+ String bindName = 'bind' + bindings.size();
295
+ conditions.add(field + ' = :' + bindName);
296
+ bindings.put(bindName, value);
297
+ return this;
298
+ }
299
+
300
+ /**
301
+ * Add WHERE IN condition
302
+ */
303
+ public QueryBuilder whereIn(String field, Set<Id> ids) {
304
+ String bindName = 'bind' + bindings.size();
305
+ conditions.add(field + ' IN :' + bindName);
306
+ bindings.put(bindName, ids);
307
+ return this;
308
+ }
309
+
310
+ /**
311
+ * Add ORDER BY
312
+ */
313
+ public QueryBuilder orderBy(String field, Boolean ascending) {
314
+ orderByClause = field + (ascending ? ' ASC' : ' DESC');
315
+ return this;
316
+ }
317
+
318
+ /**
319
+ * Add LIMIT
320
+ */
321
+ public QueryBuilder setLimit(Integer count) {
322
+ limitCount = count;
323
+ return this;
324
+ }
325
+
326
+ /**
327
+ * Build and execute the query
328
+ */
329
+ public List<SObject> execute() {
330
+ String query = buildQuery();
331
+ return Database.queryWithBinds(query, bindings, AccessLevel.USER_MODE);
332
+ }
333
+
334
+ /**
335
+ * Build query string (for debugging)
336
+ */
337
+ public String buildQuery() {
338
+ List<String> parts = new List<String>();
339
+
340
+ // SELECT
341
+ if (fields.isEmpty()) {
342
+ fields.add('Id');
343
+ }
344
+ parts.add('SELECT ' + String.join(new List<String>(fields), ', '));
345
+
346
+ // FROM
347
+ parts.add('FROM ' + objectName);
348
+
349
+ // WHERE
350
+ if (!conditions.isEmpty()) {
351
+ parts.add('WHERE ' + String.join(conditions, ' AND '));
352
+ }
353
+
354
+ // ORDER BY
355
+ if (orderByClause != null) {
356
+ parts.add('ORDER BY ' + orderByClause);
357
+ }
358
+
359
+ // LIMIT
360
+ if (limitCount != null) {
361
+ parts.add('LIMIT ' + limitCount);
362
+ }
363
+
364
+ return String.join(parts, ' ');
365
+ }
366
+ }
367
+ ```
368
+
369
+ **Usage**:
370
+ ```apex
371
+ // Fluent API for dynamic queries
372
+ List<SObject> results = new QueryBuilder('Account')
373
+ .selectFields(new List<SObjectField>{Account.Id, Account.Name, Account.Industry})
374
+ .whereEquals('Industry', 'Technology')
375
+ .whereIn('Id', accountIds)
376
+ .orderBy('Name', true)
377
+ .setLimit(100)
378
+ .execute();
379
+
380
+ // Debug the generated query
381
+ System.debug(new QueryBuilder('Account').selectFields(...).buildQuery());
382
+ // "SELECT Id, Name, Industry FROM Account WHERE Industry = :bind0 AND Id IN :bind1 ORDER BY Name ASC LIMIT 100"
383
+ ```
384
+
385
+ ---
386
+
387
+ ## Pattern 5: Bulkified Query Pattern
388
+
389
+ The Map-based lookup pattern for bulk operations.
390
+
391
+ ```apex
392
+ /**
393
+ * BulkQueryHelper - Reusable bulk query patterns
394
+ */
395
+ public inherited sharing class BulkQueryHelper {
396
+
397
+ /**
398
+ * Get Accounts by ID as a Map (O(1) lookup)
399
+ */
400
+ public static Map<Id, Account> getAccountMapByIds(Set<Id> accountIds) {
401
+ return new Map<Id, Account>([
402
+ SELECT Id, Name, Industry
403
+ FROM Account
404
+ WHERE Id IN :accountIds
405
+ WITH SECURITY_ENFORCED
406
+ ]);
407
+ }
408
+
409
+ /**
410
+ * Get Contacts grouped by AccountId
411
+ */
412
+ public static Map<Id, List<Contact>> getContactsByAccountId(Set<Id> accountIds) {
413
+ Map<Id, List<Contact>> contactsByAccount = new Map<Id, List<Contact>>();
414
+
415
+ for (Contact c : [
416
+ SELECT Id, FirstName, LastName, Email, AccountId
417
+ FROM Contact
418
+ WHERE AccountId IN :accountIds
419
+ WITH SECURITY_ENFORCED
420
+ ]) {
421
+ if (!contactsByAccount.containsKey(c.AccountId)) {
422
+ contactsByAccount.put(c.AccountId, new List<Contact>());
423
+ }
424
+ contactsByAccount.get(c.AccountId).add(c);
425
+ }
426
+
427
+ return contactsByAccount;
428
+ }
429
+ }
430
+ ```
431
+
432
+ **Usage in Trigger**:
433
+ ```apex
434
+ // ❌ WRONG: Query per record
435
+ for (Opportunity opp : Trigger.new) {
436
+ Account a = [SELECT Name FROM Account WHERE Id = :opp.AccountId];
437
+ }
438
+
439
+ // ✅ CORRECT: Bulk query with Map lookup
440
+ Set<Id> accountIds = new Set<Id>();
441
+ for (Opportunity opp : Trigger.new) {
442
+ accountIds.add(opp.AccountId);
443
+ }
444
+
445
+ Map<Id, Account> accountMap = BulkQueryHelper.getAccountMapByIds(accountIds);
446
+
447
+ for (Opportunity opp : Trigger.new) {
448
+ Account a = accountMap.get(opp.AccountId);
449
+ if (a != null) {
450
+ // Use account data
451
+ }
452
+ }
453
+ ```
454
+
455
+ ---
456
+
457
+ ## Best Practices Summary
458
+
459
+ | Practice | Benefit |
460
+ |----------|---------|
461
+ | Centralize in Selector classes | One place to update field lists |
462
+ | Use `WITH SECURITY_ENFORCED` | Automatic FLS enforcement |
463
+ | Return empty List, not null | Prevents NullPointerException |
464
+ | Use `inherited sharing` | Respects caller's sharing context |
465
+ | Make fields list a constant | Easy to update across queries |
466
+ | Add null/empty checks | Prevent unnecessary queries |
467
+ | Support mocking in tests | Faster tests, no database dependencies |
468
+
469
+ ---
470
+
471
+ ## When to Use Each Pattern
472
+
473
+ | Scenario | Pattern |
474
+ |----------|---------|
475
+ | Simple, static queries | Pattern 1: Basic Selector |
476
+ | Need sharing mode control | Pattern 2: Sharing Modes |
477
+ | Heavy unit testing | Pattern 3: Mockable Selector |
478
+ | Dynamic filters at runtime | Pattern 4: Query Builder |
479
+ | Trigger/batch bulk operations | Pattern 5: Bulkified Query |
@@ -0,0 +1,227 @@
1
+ <!-- Parent: querying-soql/SKILL.md -->
2
+ # SOQL Quick Reference
3
+
4
+ ## Query Structure
5
+
6
+ ```sql
7
+ SELECT fields
8
+ FROM object
9
+ [WHERE conditions]
10
+ [WITH filter]
11
+ [GROUP BY fields]
12
+ [HAVING conditions]
13
+ [ORDER BY fields [ASC|DESC] [NULLS FIRST|LAST]]
14
+ [LIMIT number]
15
+ [OFFSET number]
16
+ [FOR UPDATE]
17
+ ```
18
+
19
+ ---
20
+
21
+ ## Operators
22
+
23
+ ### Comparison Operators
24
+
25
+ | Operator | Description | Example |
26
+ |----------|-------------|---------|
27
+ | `=` | Equal | `Name = 'Acme'` |
28
+ | `!=` | Not equal | `Status != 'Closed'` |
29
+ | `<` | Less than | `Amount < 1000` |
30
+ | `<=` | Less than or equal | `Amount <= 1000` |
31
+ | `>` | Greater than | `Amount > 1000` |
32
+ | `>=` | Greater than or equal | `Amount >= 1000` |
33
+ | `LIKE` | Pattern match | `Name LIKE 'Acme%'` |
34
+ | `IN` | In list | `Status IN ('New', 'Open')` |
35
+ | `NOT IN` | Not in list | `Type NOT IN ('Other')` |
36
+ | `INCLUDES` | Multi-select contains | `Skills__c INCLUDES ('Java')` |
37
+ | `EXCLUDES` | Multi-select excludes | `Skills__c EXCLUDES ('Java')` |
38
+
39
+ ### Logical Operators
40
+
41
+ | Operator | Description | Example |
42
+ |----------|-------------|---------|
43
+ | `AND` | Both conditions | `A = 1 AND B = 2` |
44
+ | `OR` | Either condition | `A = 1 OR B = 2` |
45
+ | `NOT` | Negate condition | `NOT (A = 1)` |
46
+
47
+ ### LIKE Patterns
48
+
49
+ | Pattern | Matches |
50
+ |---------|---------|
51
+ | `'Acme%'` | Starts with "Acme" |
52
+ | `'%Corp'` | Ends with "Corp" |
53
+ | `'%test%'` | Contains "test" |
54
+ | `'A_me'` | "A" + any char + "me" |
55
+
56
+ ---
57
+
58
+ ## Date Literals
59
+
60
+ ### Relative Dates
61
+
62
+ | Literal | Description |
63
+ |---------|-------------|
64
+ | `TODAY` | Current day |
65
+ | `YESTERDAY` | Previous day |
66
+ | `TOMORROW` | Next day |
67
+ | `THIS_WEEK` | Current week (Sun-Sat) |
68
+ | `LAST_WEEK` | Previous week |
69
+ | `NEXT_WEEK` | Next week |
70
+ | `THIS_MONTH` | Current month |
71
+ | `LAST_MONTH` | Previous month |
72
+ | `NEXT_MONTH` | Next month |
73
+ | `THIS_QUARTER` | Current quarter |
74
+ | `LAST_QUARTER` | Previous quarter |
75
+ | `NEXT_QUARTER` | Next quarter |
76
+ | `THIS_YEAR` | Current year |
77
+ | `LAST_YEAR` | Previous year |
78
+ | `NEXT_YEAR` | Next year |
79
+ | `THIS_FISCAL_QUARTER` | Current fiscal quarter |
80
+ | `THIS_FISCAL_YEAR` | Current fiscal year |
81
+
82
+ ### N Days/Weeks/Months/Years
83
+
84
+ | Literal | Description |
85
+ |---------|-------------|
86
+ | `LAST_N_DAYS:n` | Last n days |
87
+ | `NEXT_N_DAYS:n` | Next n days |
88
+ | `LAST_N_WEEKS:n` | Last n weeks |
89
+ | `NEXT_N_WEEKS:n` | Next n weeks |
90
+ | `LAST_N_MONTHS:n` | Last n months |
91
+ | `NEXT_N_MONTHS:n` | Next n months |
92
+ | `LAST_N_QUARTERS:n` | Last n quarters |
93
+ | `NEXT_N_QUARTERS:n` | Next n quarters |
94
+ | `LAST_N_YEARS:n` | Last n years |
95
+ | `NEXT_N_YEARS:n` | Next n years |
96
+
97
+ ### Specific Dates
98
+
99
+ ```sql
100
+ -- Date only
101
+ WHERE CloseDate = 2024-12-31
102
+
103
+ -- DateTime
104
+ WHERE CreatedDate >= 2024-01-01T00:00:00Z
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Aggregate Functions
110
+
111
+ | Function | Description | Example |
112
+ |----------|-------------|---------|
113
+ | `COUNT()` | Count all rows | `SELECT COUNT() FROM Account` |
114
+ | `COUNT(field)` | Count non-null values | `SELECT COUNT(Email) FROM Contact` |
115
+ | `COUNT_DISTINCT(field)` | Count unique values | `SELECT COUNT_DISTINCT(Industry) FROM Account` |
116
+ | `SUM(field)` | Sum of values | `SELECT SUM(Amount) FROM Opportunity` |
117
+ | `AVG(field)` | Average of values | `SELECT AVG(Amount) FROM Opportunity` |
118
+ | `MIN(field)` | Minimum value | `SELECT MIN(Amount) FROM Opportunity` |
119
+ | `MAX(field)` | Maximum value | `SELECT MAX(Amount) FROM Opportunity` |
120
+
121
+ ---
122
+
123
+ ## Date Functions
124
+
125
+ | Function | Returns | Example |
126
+ |----------|---------|---------|
127
+ | `CALENDAR_YEAR(date)` | Year (e.g., 2024) | `SELECT CALENDAR_YEAR(CloseDate) FROM Opportunity` |
128
+ | `CALENDAR_QUARTER(date)` | Quarter (1-4) | `SELECT CALENDAR_QUARTER(CloseDate) FROM Opportunity` |
129
+ | `CALENDAR_MONTH(date)` | Month (1-12) | `SELECT CALENDAR_MONTH(CloseDate) FROM Opportunity` |
130
+ | `DAY_IN_MONTH(date)` | Day (1-31) | `SELECT DAY_IN_MONTH(CreatedDate) FROM Account` |
131
+ | `DAY_IN_WEEK(date)` | Day (1=Sun, 7=Sat) | `SELECT DAY_IN_WEEK(CreatedDate) FROM Account` |
132
+ | `DAY_IN_YEAR(date)` | Day (1-366) | `SELECT DAY_IN_YEAR(CreatedDate) FROM Account` |
133
+ | `WEEK_IN_MONTH(date)` | Week (1-5) | `SELECT WEEK_IN_MONTH(CreatedDate) FROM Account` |
134
+ | `WEEK_IN_YEAR(date)` | Week (1-53) | `SELECT WEEK_IN_YEAR(CreatedDate) FROM Account` |
135
+ | `HOUR_IN_DAY(date)` | Hour (0-23) | `SELECT HOUR_IN_DAY(CreatedDate) FROM Account` |
136
+ | `FISCAL_YEAR(date)` | Fiscal year | `SELECT FISCAL_YEAR(CloseDate) FROM Opportunity` |
137
+ | `FISCAL_QUARTER(date)` | Fiscal quarter | `SELECT FISCAL_QUARTER(CloseDate) FROM Opportunity` |
138
+ | `FISCAL_MONTH(date)` | Fiscal month | `SELECT FISCAL_MONTH(CloseDate) FROM Opportunity` |
139
+
140
+ ---
141
+
142
+ ## Relationship Queries
143
+
144
+ ### Child-to-Parent (Dot Notation)
145
+
146
+ ```sql
147
+ -- Standard objects
148
+ SELECT Contact.Name, Contact.Account.Name FROM Contact
149
+
150
+ -- Custom objects (use __r)
151
+ SELECT Child__c.Name, Child__c.Parent__r.Name FROM Child__c
152
+ ```
153
+
154
+ ### Parent-to-Child (Subquery)
155
+
156
+ ```sql
157
+ -- Standard objects
158
+ SELECT Id, (SELECT Id FROM Contacts) FROM Account
159
+
160
+ -- Custom objects (use __r)
161
+ SELECT Id, (SELECT Id FROM Children__r) FROM Parent__c
162
+ ```
163
+
164
+ ---
165
+
166
+ ## WITH Clauses
167
+
168
+ | Clause | Description |
169
+ |--------|-------------|
170
+ | `WITH SECURITY_ENFORCED` | Enforce FLS (throws exception if no access) |
171
+ | `WITH USER_MODE` | Respect sharing and FLS |
172
+ | `WITH SYSTEM_MODE` | Bypass sharing rules |
173
+
174
+ ---
175
+
176
+ ## Governor Limits
177
+
178
+ | Limit | Synchronous | Asynchronous |
179
+ |-------|-------------|--------------|
180
+ | Total SOQL Queries | 100 | 200 |
181
+ | Records Retrieved | 50,000 | 50,000 |
182
+ | QueryLocator Rows | 10,000,000 | 10,000,000 |
183
+ | OFFSET Maximum | 2,000 | 2,000 |
184
+ | Subqueries | 20 | 20 |
185
+ | Relationship Depth | 5 levels | 5 levels |
186
+
187
+ ---
188
+
189
+ ## Index Usage
190
+
191
+ ### Always Indexed
192
+
193
+ - `Id`
194
+ - `Name`
195
+ - `OwnerId`
196
+ - `CreatedDate`
197
+ - `LastModifiedDate`
198
+ - `RecordTypeId`
199
+ - External ID fields
200
+ - Master-Detail fields
201
+
202
+ ### Selective Query Rules
203
+
204
+ - Query is selective if WHERE returns < 10% of first 1M records
205
+ - Or uses an indexed field with < 1M matching records
206
+ - Non-selective queries on large tables fail
207
+
208
+ ---
209
+
210
+ ## CLI Commands
211
+
212
+ ```bash
213
+ # Basic query
214
+ sf data query --query "SELECT Id, Name FROM Account LIMIT 10" --target-org my-org
215
+
216
+ # JSON output
217
+ sf data query --query "SELECT Id, Name FROM Account" --target-org my-org --json
218
+
219
+ # CSV output
220
+ sf data query --query "SELECT Id, Name FROM Account" --result-format csv --target-org my-org
221
+
222
+ # Bulk export (for large results, > 2,000 records)
223
+ sf data export bulk --query "SELECT Id, Name FROM Account" --target-org my-org --output-file accounts.csv
224
+
225
+ # Query plan (uses REST API explain endpoint)
226
+ sf api request rest "/query/?explain=SELECT+Id+FROM+Account+WHERE+Name='Test'" --target-org my-org --json
227
+ ```