sfcc-dev-mcp 1.0.15 → 1.0.19
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.
- package/.github/ISSUE_TEMPLATE/bug_report.yml +3 -1
- package/.github/ISSUE_TEMPLATE/documentation.yml +2 -2
- package/.github/ISSUE_TEMPLATE/question.yml +1 -1
- package/.github/PULL_REQUEST_TEMPLATE/documentation.md +1 -1
- package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +1 -1
- package/.github/agents/official-docs-researcher.agent.md +56 -0
- package/.github/instructions/mcp-node-tests.instructions.md +12 -916
- package/.github/instructions/mcp-yml-tests.instructions.md +14 -742
- package/.github/pull_request_template.md +1 -1
- package/.github/skills/agent-authoring/SKILL.md +66 -0
- package/.github/skills/mcp-log-debugging/SKILL.md +69 -0
- package/.github/skills/mcp-programmatic-testing/SKILL.md +142 -0
- package/.github/skills/mcp-yaml-testing/SKILL.md +136 -0
- package/.github/skills/salesforce-developer-site-scraper/SKILL.md +102 -0
- package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +205 -0
- package/.github/skills/salesforce-help-site-scraper/SKILL.md +84 -0
- package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +212 -0
- package/.github/skills/skill-authoring/SKILL.md +228 -0
- package/.github/skills/skill-authoring/references/PATTERNS.md +384 -0
- package/.github/workflows/ci.yml +3 -3
- package/.github/workflows/deploy-pages.yml +9 -19
- package/.github/workflows/publish.yml +5 -2
- package/.github/workflows/update-docs.yml +1 -1
- package/AGENTS.md +140 -286
- package/CONTRIBUTING.md +10 -22
- package/README.md +48 -16
- package/ai-instructions/{github-copilot/copilot-instructions.md → AGENTS.md} +99 -127
- package/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
- package/{dist/docs/best-practices/cartridge_creation.md → ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
- package/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
- package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
- package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
- package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
- package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
- package/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
- package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
- package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
- package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
- package/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
- package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
- package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
- package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
- package/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
- package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
- package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
- package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
- package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
- package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
- package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
- package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
- package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
- package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
- package/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
- package/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
- package/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
- package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
- package/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
- package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
- package/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
- package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
- package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
- package/{dist/docs/best-practices/performance.md → ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
- package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
- package/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
- package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
- package/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
- package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
- package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
- package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
- package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
- package/{dist/docs/best-practices/sfra_controllers.md → ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
- package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
- package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
- package/{dist/docs/best-practices/sfra_scss.md → ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
- package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
- package/dist/ai-instructions/AGENTS.md +628 -0
- package/dist/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
- package/{docs/best-practices/cartridge_creation.md → dist/ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
- package/dist/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
- package/dist/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
- package/dist/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
- package/dist/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
- package/dist/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
- package/dist/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
- package/dist/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
- package/dist/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
- package/dist/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
- package/dist/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
- package/dist/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
- package/dist/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
- package/dist/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
- package/dist/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
- package/dist/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
- package/dist/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
- package/dist/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
- package/dist/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
- package/{docs/best-practices/performance.md → dist/ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
- package/dist/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
- package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
- package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
- package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
- package/dist/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
- package/dist/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
- package/dist/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
- package/dist/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
- package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
- package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
- package/{docs/best-practices/sfra_controllers.md → dist/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
- package/dist/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
- package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
- package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
- package/dist/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
- package/{docs/best-practices/sfra_scss.md → dist/ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
- package/dist/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
- package/dist/clients/agent-instructions-client.d.ts +66 -0
- package/dist/clients/agent-instructions-client.d.ts.map +1 -0
- package/dist/clients/agent-instructions-client.js +277 -0
- package/dist/clients/agent-instructions-client.js.map +1 -0
- package/dist/clients/base/abstract-documentation-client.d.ts +146 -0
- package/dist/clients/base/abstract-documentation-client.d.ts.map +1 -0
- package/dist/clients/base/abstract-documentation-client.js +265 -0
- package/dist/clients/base/abstract-documentation-client.js.map +1 -0
- package/dist/clients/base/oauth-token.d.ts +18 -0
- package/dist/clients/base/oauth-token.d.ts.map +1 -1
- package/dist/clients/base/oauth-token.js +45 -2
- package/dist/clients/base/oauth-token.js.map +1 -1
- package/dist/clients/cartridge/cartridge-generation-client.d.ts +59 -0
- package/dist/clients/cartridge/cartridge-generation-client.d.ts.map +1 -0
- package/dist/clients/cartridge/cartridge-generation-client.js +224 -0
- package/dist/clients/cartridge/cartridge-generation-client.js.map +1 -0
- package/dist/clients/cartridge/cartridge-structure.d.ts +17 -0
- package/dist/clients/cartridge/cartridge-structure.d.ts.map +1 -0
- package/dist/clients/cartridge/cartridge-structure.js +33 -0
- package/dist/clients/cartridge/cartridge-structure.js.map +1 -0
- package/dist/clients/cartridge/cartridge-templates.d.ts +22 -0
- package/dist/clients/cartridge/cartridge-templates.d.ts.map +1 -0
- package/dist/clients/cartridge/cartridge-templates.js +225 -0
- package/dist/clients/cartridge/cartridge-templates.js.map +1 -0
- package/dist/clients/cartridge/index.d.ts +7 -0
- package/dist/clients/cartridge/index.d.ts.map +1 -0
- package/dist/clients/cartridge/index.js +7 -0
- package/dist/clients/cartridge/index.js.map +1 -0
- package/dist/clients/docs/documentation-scanner.d.ts +5 -2
- package/dist/clients/docs/documentation-scanner.d.ts.map +1 -1
- package/dist/clients/docs/documentation-scanner.js +38 -23
- package/dist/clients/docs/documentation-scanner.js.map +1 -1
- package/dist/clients/docs-client.d.ts +13 -4
- package/dist/clients/docs-client.d.ts.map +1 -1
- package/dist/clients/docs-client.js +44 -11
- package/dist/clients/docs-client.js.map +1 -1
- package/dist/clients/isml-client.d.ts +71 -0
- package/dist/clients/isml-client.d.ts.map +1 -0
- package/dist/clients/isml-client.js +252 -0
- package/dist/clients/isml-client.js.map +1 -0
- package/dist/clients/ocapi/code-versions-client.d.ts.map +1 -1
- package/dist/clients/ocapi/code-versions-client.js +6 -1
- package/dist/clients/ocapi/code-versions-client.js.map +1 -1
- package/dist/clients/ocapi-client.d.ts +9 -101
- package/dist/clients/ocapi-client.d.ts.map +1 -1
- package/dist/clients/ocapi-client.js +11 -93
- package/dist/clients/ocapi-client.js.map +1 -1
- package/dist/clients/script-debugger/index.d.ts +5 -0
- package/dist/clients/script-debugger/index.d.ts.map +1 -0
- package/dist/clients/script-debugger/index.js +5 -0
- package/dist/clients/script-debugger/index.js.map +1 -0
- package/dist/clients/script-debugger/script-debugger-client.d.ts +147 -0
- package/dist/clients/script-debugger/script-debugger-client.d.ts.map +1 -0
- package/dist/clients/script-debugger/script-debugger-client.js +591 -0
- package/dist/clients/script-debugger/script-debugger-client.js.map +1 -0
- package/dist/clients/sfra-client.d.ts +13 -62
- package/dist/clients/sfra-client.d.ts.map +1 -1
- package/dist/clients/sfra-client.js +105 -326
- package/dist/clients/sfra-client.js.map +1 -1
- package/dist/config/configuration-factory.d.ts +1 -1
- package/dist/config/configuration-factory.d.ts.map +1 -1
- package/dist/config/configuration-factory.js +5 -1
- package/dist/config/configuration-factory.js.map +1 -1
- package/dist/config/dw-json-loader.d.ts +7 -0
- package/dist/config/dw-json-loader.d.ts.map +1 -1
- package/dist/config/dw-json-loader.js +92 -15
- package/dist/config/dw-json-loader.js.map +1 -1
- package/dist/config/workspace-roots.d.ts +143 -0
- package/dist/config/workspace-roots.d.ts.map +1 -0
- package/dist/config/workspace-roots.js +448 -0
- package/dist/config/workspace-roots.js.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/core/handlers/abstract-client-handler.d.ts +52 -0
- package/dist/core/handlers/abstract-client-handler.d.ts.map +1 -0
- package/dist/core/handlers/abstract-client-handler.js +51 -0
- package/dist/core/handlers/abstract-client-handler.js.map +1 -0
- package/dist/core/handlers/agent-instructions-handler.d.ts +17 -0
- package/dist/core/handlers/agent-instructions-handler.d.ts.map +1 -0
- package/dist/core/handlers/agent-instructions-handler.js +38 -0
- package/dist/core/handlers/agent-instructions-handler.js.map +1 -0
- package/dist/core/handlers/base-handler.d.ts +3 -68
- package/dist/core/handlers/base-handler.d.ts.map +1 -1
- package/dist/core/handlers/base-handler.js +11 -84
- package/dist/core/handlers/base-handler.js.map +1 -1
- package/dist/core/handlers/cartridge-handler.d.ts +10 -11
- package/dist/core/handlers/cartridge-handler.d.ts.map +1 -1
- package/dist/core/handlers/cartridge-handler.js +10 -28
- package/dist/core/handlers/cartridge-handler.js.map +1 -1
- package/dist/core/handlers/client-factory.d.ts +12 -2
- package/dist/core/handlers/client-factory.d.ts.map +1 -1
- package/dist/core/handlers/client-factory.js +28 -1
- package/dist/core/handlers/client-factory.js.map +1 -1
- package/dist/core/handlers/code-version-handler.d.ts +11 -11
- package/dist/core/handlers/code-version-handler.d.ts.map +1 -1
- package/dist/core/handlers/code-version-handler.js +13 -27
- package/dist/core/handlers/code-version-handler.js.map +1 -1
- package/dist/core/handlers/docs-handler.d.ts +6 -12
- package/dist/core/handlers/docs-handler.d.ts.map +1 -1
- package/dist/core/handlers/docs-handler.js +11 -36
- package/dist/core/handlers/docs-handler.js.map +1 -1
- package/dist/core/handlers/isml-handler.d.ts +11 -0
- package/dist/core/handlers/isml-handler.d.ts.map +1 -0
- package/dist/core/handlers/isml-handler.js +18 -0
- package/dist/core/handlers/isml-handler.js.map +1 -0
- package/dist/core/handlers/job-log-handler.d.ts +8 -7
- package/dist/core/handlers/job-log-handler.d.ts.map +1 -1
- package/dist/core/handlers/job-log-handler.js +14 -5
- package/dist/core/handlers/job-log-handler.js.map +1 -1
- package/dist/core/handlers/log-handler.d.ts +8 -7
- package/dist/core/handlers/log-handler.d.ts.map +1 -1
- package/dist/core/handlers/log-handler.js +14 -5
- package/dist/core/handlers/log-handler.js.map +1 -1
- package/dist/core/handlers/script-debugger-handler.d.ts +18 -0
- package/dist/core/handlers/script-debugger-handler.d.ts.map +1 -0
- package/dist/core/handlers/script-debugger-handler.js +31 -0
- package/dist/core/handlers/script-debugger-handler.js.map +1 -0
- package/dist/core/handlers/sfra-handler.d.ts +6 -12
- package/dist/core/handlers/sfra-handler.d.ts.map +1 -1
- package/dist/core/handlers/sfra-handler.js +11 -36
- package/dist/core/handlers/sfra-handler.js.map +1 -1
- package/dist/core/handlers/simple-client-handler.d.ts +41 -0
- package/dist/core/handlers/simple-client-handler.d.ts.map +1 -0
- package/dist/core/handlers/simple-client-handler.js +49 -0
- package/dist/core/handlers/simple-client-handler.js.map +1 -0
- package/dist/core/handlers/system-object-handler.d.ts +11 -11
- package/dist/core/handlers/system-object-handler.d.ts.map +1 -1
- package/dist/core/handlers/system-object-handler.js +13 -27
- package/dist/core/handlers/system-object-handler.js.map +1 -1
- package/dist/core/handlers/validation-helpers.d.ts +22 -24
- package/dist/core/handlers/validation-helpers.d.ts.map +1 -1
- package/dist/core/handlers/validation-helpers.js +89 -39
- package/dist/core/handlers/validation-helpers.js.map +1 -1
- package/dist/core/instruction-advisor.d.ts +28 -0
- package/dist/core/instruction-advisor.d.ts.map +1 -0
- package/dist/core/instruction-advisor.js +114 -0
- package/dist/core/instruction-advisor.js.map +1 -0
- package/dist/core/server.d.ts +25 -0
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +151 -11
- package/dist/core/server.js.map +1 -1
- package/dist/core/tool-definitions.d.ts +6 -854
- package/dist/core/tool-definitions.d.ts.map +1 -1
- package/dist/core/tool-definitions.js +8 -1064
- package/dist/core/tool-definitions.js.map +1 -1
- package/dist/core/tool-schemas/agent-instruction-tools.d.ts +77 -0
- package/dist/core/tool-schemas/agent-instruction-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/agent-instruction-tools.js +72 -0
- package/dist/core/tool-schemas/agent-instruction-tools.js.map +1 -0
- package/dist/core/tool-schemas/cartridge-tools.d.ts +27 -0
- package/dist/core/tool-schemas/cartridge-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/cartridge-tools.js +29 -0
- package/dist/core/tool-schemas/cartridge-tools.js.map +1 -0
- package/dist/core/tool-schemas/code-version-tools.d.ts +28 -0
- package/dist/core/tool-schemas/code-version-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/code-version-tools.js +28 -0
- package/dist/core/tool-schemas/code-version-tools.js.map +1 -0
- package/dist/core/tool-schemas/documentation-tools.d.ts +139 -0
- package/dist/core/tool-schemas/documentation-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/documentation-tools.js +104 -0
- package/dist/core/tool-schemas/documentation-tools.js.map +1 -0
- package/dist/core/tool-schemas/index.d.ts +17 -0
- package/dist/core/tool-schemas/index.d.ts.map +1 -0
- package/dist/core/tool-schemas/index.js +19 -0
- package/dist/core/tool-schemas/index.js.map +1 -0
- package/dist/core/tool-schemas/isml-tools.d.ts +98 -0
- package/dist/core/tool-schemas/isml-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/isml-tools.js +89 -0
- package/dist/core/tool-schemas/isml-tools.js.map +1 -0
- package/dist/core/tool-schemas/log-tools.d.ts +221 -0
- package/dist/core/tool-schemas/log-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/log-tools.js +180 -0
- package/dist/core/tool-schemas/log-tools.js.map +1 -0
- package/dist/core/tool-schemas/script-debugger-tools.d.ts +44 -0
- package/dist/core/tool-schemas/script-debugger-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/script-debugger-tools.js +83 -0
- package/dist/core/tool-schemas/script-debugger-tools.js.map +1 -0
- package/dist/core/tool-schemas/sfra-tools.d.ts +63 -0
- package/dist/core/tool-schemas/sfra-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/sfra-tools.js +65 -0
- package/dist/core/tool-schemas/sfra-tools.js.map +1 -0
- package/dist/core/tool-schemas/shared-schemas.d.ts +350 -0
- package/dist/core/tool-schemas/shared-schemas.d.ts.map +1 -0
- package/dist/core/tool-schemas/shared-schemas.js +153 -0
- package/dist/core/tool-schemas/shared-schemas.js.map +1 -0
- package/dist/core/tool-schemas/system-object-tools.d.ts +511 -0
- package/dist/core/tool-schemas/system-object-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/system-object-tools.js +126 -0
- package/dist/core/tool-schemas/system-object-tools.js.map +1 -0
- package/dist/docs/dw_net/HTTPClient.md +46 -2
- package/dist/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
- package/dist/docs/dw_order/Basket.md +7 -7
- package/dist/docs/dw_order/BasketMgr.md +22 -6
- package/dist/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
- package/dist/docs/dw_svc/ServiceCallback.md +2 -2
- package/dist/docs/isml/isactivedatacontext.md +382 -0
- package/dist/docs/isml/isactivedatahead.md +566 -0
- package/dist/docs/isml/isanalyticsoff.md +537 -0
- package/dist/docs/isml/isapplepay.md +667 -0
- package/dist/docs/isml/isbreak.md +687 -0
- package/dist/docs/isml/isbuynow.md +682 -0
- package/dist/docs/isml/iscache.md +802 -0
- package/dist/docs/isml/iscomment.md +794 -0
- package/dist/docs/isml/iscomponent.md +797 -0
- package/dist/docs/isml/iscontent.md +594 -0
- package/dist/docs/isml/iscontinue.md +563 -0
- package/dist/docs/isml/iscookie.md +798 -0
- package/dist/docs/isml/isdecorate.md +818 -0
- package/dist/docs/isml/isif.md +737 -0
- package/dist/docs/isml/isinclude.md +874 -0
- package/dist/docs/isml/isloop.md +377 -0
- package/dist/docs/isml/ismodule.md +844 -0
- package/dist/docs/isml/isnext.md +672 -0
- package/dist/docs/isml/isobject.md +760 -0
- package/dist/docs/isml/ispayment.md +577 -0
- package/dist/docs/isml/ispaymentmessages.md +664 -0
- package/dist/docs/isml/isprint.md +875 -0
- package/dist/docs/isml/isredirect.md +716 -0
- package/dist/docs/isml/isremove.md +725 -0
- package/dist/docs/isml/isreplace.md +783 -0
- package/dist/docs/isml/isscript.md +859 -0
- package/dist/docs/isml/isselect.md +908 -0
- package/dist/docs/isml/isset.md +585 -0
- package/dist/docs/isml/isslot.md +824 -0
- package/dist/docs/isml/isstatus.md +711 -0
- package/dist/main.d.ts +16 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +60 -28
- package/dist/main.js.map +1 -1
- package/dist/services/index.d.ts +4 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/tool-configs/agent-instructions-tool-config.d.ts +6 -0
- package/dist/tool-configs/agent-instructions-tool-config.d.ts.map +1 -0
- package/dist/tool-configs/agent-instructions-tool-config.js +74 -0
- package/dist/tool-configs/agent-instructions-tool-config.js.map +1 -0
- package/dist/tool-configs/code-version-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/code-version-tool-config.js +0 -5
- package/dist/tool-configs/code-version-tool-config.js.map +1 -1
- package/dist/tool-configs/docs-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/docs-tool-config.js +0 -7
- package/dist/tool-configs/docs-tool-config.js.map +1 -1
- package/dist/tool-configs/isml-tool-config.d.ts +11 -0
- package/dist/tool-configs/isml-tool-config.d.ts.map +1 -0
- package/dist/tool-configs/isml-tool-config.js +77 -0
- package/dist/tool-configs/isml-tool-config.js.map +1 -0
- package/dist/tool-configs/job-log-tool-config.d.ts +1 -2
- package/dist/tool-configs/job-log-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/job-log-tool-config.js +11 -15
- package/dist/tool-configs/job-log-tool-config.js.map +1 -1
- package/dist/tool-configs/log-tool-config.d.ts +1 -2
- package/dist/tool-configs/log-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/log-tool-config.js +35 -51
- package/dist/tool-configs/log-tool-config.js.map +1 -1
- package/dist/tool-configs/script-debugger-tool-config.d.ts +11 -0
- package/dist/tool-configs/script-debugger-tool-config.d.ts.map +1 -0
- package/dist/tool-configs/script-debugger-tool-config.js +35 -0
- package/dist/tool-configs/script-debugger-tool-config.js.map +1 -0
- package/dist/tool-configs/sfra-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/sfra-tool-config.js +0 -11
- package/dist/tool-configs/sfra-tool-config.js.map +1 -1
- package/dist/tool-configs/system-object-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/system-object-tool-config.js +0 -5
- package/dist/tool-configs/system-object-tool-config.js.map +1 -1
- package/dist/types/types.d.ts +2 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/cache.d.ts +12 -10
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +47 -47
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/category-utils.d.ts +31 -0
- package/dist/utils/category-utils.d.ts.map +1 -0
- package/dist/utils/category-utils.js +45 -0
- package/dist/utils/category-utils.js.map +1 -0
- package/dist/utils/log-tool-constants.d.ts +16 -13
- package/dist/utils/log-tool-constants.d.ts.map +1 -1
- package/dist/utils/log-tool-constants.js +10 -11
- package/dist/utils/log-tool-constants.js.map +1 -1
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +35 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markdown-utils.d.ts +60 -0
- package/dist/utils/markdown-utils.d.ts.map +1 -0
- package/dist/utils/markdown-utils.js +206 -0
- package/dist/utils/markdown-utils.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +12 -4
- package/dist/utils/path-resolver.d.ts.map +1 -1
- package/dist/utils/path-resolver.js +22 -8
- package/dist/utils/path-resolver.js.map +1 -1
- package/dist/utils/path-validation.d.ts +40 -0
- package/dist/utils/path-validation.d.ts.map +1 -0
- package/dist/utils/path-validation.js +84 -0
- package/dist/utils/path-validation.js.map +1 -0
- package/docs/dw_net/HTTPClient.md +46 -2
- package/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
- package/docs/dw_order/Basket.md +7 -7
- package/docs/dw_order/BasketMgr.md +22 -6
- package/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
- package/docs/dw_svc/ServiceCallback.md +2 -2
- package/docs/isml/isactivedatacontext.md +382 -0
- package/docs/isml/isactivedatahead.md +566 -0
- package/docs/isml/isanalyticsoff.md +537 -0
- package/docs/isml/isapplepay.md +667 -0
- package/docs/isml/isbreak.md +687 -0
- package/docs/isml/isbuynow.md +682 -0
- package/docs/isml/iscache.md +802 -0
- package/docs/isml/iscomment.md +794 -0
- package/docs/isml/iscomponent.md +797 -0
- package/docs/isml/iscontent.md +594 -0
- package/docs/isml/iscontinue.md +563 -0
- package/docs/isml/iscookie.md +798 -0
- package/docs/isml/isdecorate.md +818 -0
- package/docs/isml/isif.md +737 -0
- package/docs/isml/isinclude.md +874 -0
- package/docs/isml/isloop.md +377 -0
- package/docs/isml/ismodule.md +844 -0
- package/docs/isml/isnext.md +672 -0
- package/docs/isml/isobject.md +760 -0
- package/docs/isml/ispayment.md +577 -0
- package/docs/isml/ispaymentmessages.md +664 -0
- package/docs/isml/isprint.md +875 -0
- package/docs/isml/isredirect.md +716 -0
- package/docs/isml/isremove.md +725 -0
- package/docs/isml/isreplace.md +783 -0
- package/docs/isml/isscript.md +859 -0
- package/docs/isml/isselect.md +908 -0
- package/docs/isml/isset.md +585 -0
- package/docs/isml/isslot.md +824 -0
- package/docs/isml/isstatus.md +711 -0
- package/docs-site-v2/.vitepress/config.mts +190 -0
- package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +96 -0
- package/docs-site-v2/.vitepress/theme/components/Callout.vue +10 -0
- package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +14 -0
- package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +82 -0
- package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +552 -0
- package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +87 -0
- package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +70 -0
- package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +14 -0
- package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +20 -0
- package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +20 -0
- package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +48 -0
- package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +85 -0
- package/docs-site-v2/.vitepress/theme/custom.css +1373 -0
- package/docs-site-v2/.vitepress/theme/index.ts +39 -0
- package/docs-site-v2/data/skills.ts +147 -0
- package/docs-site-v2/data/tools.ts +490 -0
- package/docs-site-v2/development/index.md +151 -0
- package/docs-site-v2/examples/index.md +333 -0
- package/docs-site-v2/features/index.md +144 -0
- package/docs-site-v2/guide/ai-interfaces.md +58 -0
- package/docs-site-v2/guide/configuration.md +208 -0
- package/docs-site-v2/guide/index.md +50 -0
- package/docs-site-v2/index.md +32 -0
- package/docs-site-v2/package-lock.json +2511 -0
- package/docs-site-v2/package.json +15 -0
- package/docs-site-v2/public/android-chrome-192x192.png +0 -0
- package/docs-site-v2/public/android-chrome-512x512.png +0 -0
- package/docs-site-v2/public/apple-touch-icon.png +0 -0
- package/docs-site-v2/public/favicon-16x16.png +0 -0
- package/docs-site-v2/public/favicon-32x32.png +0 -0
- package/docs-site-v2/public/favicon.ico +0 -0
- package/docs-site-v2/public/index.css +4174 -0
- package/docs-site-v2/public/llms.txt +44 -0
- package/docs-site-v2/public/logo-dark.svg +8 -0
- package/docs-site-v2/public/logo.svg +8 -0
- package/{docs-site → docs-site-v2}/public/robots.txt +1 -6
- package/{docs-site → docs-site-v2}/public/site.webmanifest +1 -1
- package/{docs-site → docs-site-v2}/public/sitemap.xml +33 -12
- package/docs-site-v2/script-debugger/index.md +105 -0
- package/docs-site-v2/scripts/generate-llms.js +71 -0
- package/docs-site-v2/scripts/generate-sitemap.js +97 -0
- package/docs-site-v2/security/index.md +115 -0
- package/docs-site-v2/skills/index.md +40 -0
- package/docs-site-v2/tools/index.md +36 -0
- package/docs-site-v2/troubleshooting/index.md +204 -0
- package/eslint.config.js +3 -1
- package/memories/repo/docs-site-v2-build.json +11 -0
- package/package.json +18 -14
- package/scripts/validate-server-json.js +68 -0
- package/server.json +4 -6
- package/src/clients/agent-instructions-client.ts +370 -0
- package/src/clients/base/abstract-documentation-client.ts +405 -0
- package/src/clients/base/oauth-token.ts +52 -2
- package/src/clients/cartridge/cartridge-generation-client.ts +302 -0
- package/src/clients/cartridge/cartridge-structure.ts +37 -0
- package/src/clients/cartridge/cartridge-templates.ts +246 -0
- package/src/clients/cartridge/index.ts +6 -0
- package/src/clients/docs/documentation-scanner.ts +44 -28
- package/src/clients/docs-client.ts +54 -14
- package/src/clients/isml-client.ts +353 -0
- package/src/clients/ocapi/code-versions-client.ts +7 -1
- package/src/clients/ocapi-client.ts +11 -166
- package/src/clients/script-debugger/index.ts +5 -0
- package/src/clients/script-debugger/script-debugger-client.ts +754 -0
- package/src/clients/sfra-client.ts +134 -397
- package/src/config/configuration-factory.ts +6 -1
- package/src/config/dw-json-loader.ts +96 -15
- package/src/config/workspace-roots.ts +540 -0
- package/src/constants/index.ts +1 -0
- package/src/core/handlers/abstract-client-handler.ts +85 -0
- package/src/core/handlers/agent-instructions-handler.ts +48 -0
- package/src/core/handlers/base-handler.ts +17 -127
- package/src/core/handlers/cartridge-handler.ts +13 -33
- package/src/core/handlers/client-factory.ts +32 -2
- package/src/core/handlers/code-version-handler.ts +17 -32
- package/src/core/handlers/docs-handler.ts +12 -44
- package/src/core/handlers/isml-handler.ts +19 -0
- package/src/core/handlers/job-log-handler.ts +19 -8
- package/src/core/handlers/log-handler.ts +19 -8
- package/src/core/handlers/script-debugger-handler.ts +46 -0
- package/src/core/handlers/sfra-handler.ts +12 -44
- package/src/core/handlers/simple-client-handler.ts +78 -0
- package/src/core/handlers/system-object-handler.ts +17 -32
- package/src/core/handlers/validation-helpers.ts +87 -47
- package/src/core/instruction-advisor.ts +122 -0
- package/src/core/server.ts +178 -13
- package/src/core/tool-definitions.ts +25 -1071
- package/src/core/tool-schemas/agent-instruction-tools.ts +72 -0
- package/src/core/tool-schemas/cartridge-tools.ts +29 -0
- package/src/core/tool-schemas/code-version-tools.ts +28 -0
- package/src/core/tool-schemas/documentation-tools.ts +104 -0
- package/src/core/tool-schemas/index.ts +27 -0
- package/src/core/tool-schemas/isml-tools.ts +89 -0
- package/src/core/tool-schemas/log-tools.ts +196 -0
- package/src/core/tool-schemas/script-debugger-tools.ts +83 -0
- package/src/core/tool-schemas/sfra-tools.ts +65 -0
- package/src/core/tool-schemas/shared-schemas.ts +158 -0
- package/src/core/tool-schemas/system-object-tools.ts +127 -0
- package/src/main.ts +63 -30
- package/src/services/index.ts +4 -10
- package/src/tool-configs/agent-instructions-tool-config.ts +83 -0
- package/src/tool-configs/cartridge-tool-config.ts +1 -1
- package/src/tool-configs/code-version-tool-config.ts +0 -5
- package/src/tool-configs/docs-tool-config.ts +0 -7
- package/src/tool-configs/isml-tool-config.ts +87 -0
- package/src/tool-configs/job-log-tool-config.ts +18 -17
- package/src/tool-configs/log-tool-config.ts +49 -64
- package/src/tool-configs/script-debugger-tool-config.ts +69 -0
- package/src/tool-configs/sfra-tool-config.ts +0 -11
- package/src/tool-configs/system-object-tool-config.ts +0 -5
- package/src/types/types.ts +2 -0
- package/src/utils/cache.ts +49 -54
- package/src/utils/category-utils.ts +70 -0
- package/src/utils/log-tool-constants.ts +25 -17
- package/src/utils/logger.ts +38 -1
- package/src/utils/markdown-utils.ts +280 -0
- package/src/utils/path-resolver.ts +25 -9
- package/src/utils/path-validation.ts +113 -0
- package/tests/base-handler.test.ts +1 -1
- package/tests/cache.test.ts +2 -2
- package/tests/cartridge-handler.test.ts +4 -4
- package/tests/client-factory.test.ts +1 -1
- package/tests/code-version-handler.test.ts +3 -3
- package/tests/docs-handler.test.ts +2 -2
- package/tests/documentation-scanner.test.ts +4 -4
- package/tests/isml-client.test.ts +463 -0
- package/tests/isml-handler.test.ts +375 -0
- package/tests/job-log-handler.test.ts +1 -1
- package/tests/log-handler.test.ts +8 -8
- package/tests/log-validation.test.ts +149 -0
- package/tests/mcp/README.md +22 -18
- package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +30 -12
- package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +387 -0
- package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +14 -8
- package/tests/mcp/node/get-isml-categories.programmatic.test.js +278 -0
- package/tests/mcp/node/get-isml-element.programmatic.test.js +278 -0
- package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +363 -0
- package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +24 -24
- package/tests/mcp/node/get-sfra-document.programmatic.test.js +4 -2
- package/tests/mcp/node/list-isml-elements.programmatic.test.js +311 -0
- package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +2 -33
- package/tests/mcp/node/search-isml-elements.programmatic.test.js +325 -0
- package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +5 -9
- package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +7 -9
- package/tests/mcp/node/tools.docs-only.programmatic.test.js +42 -65
- package/tests/mcp/node/tools.full-mode.programmatic.test.js +7 -8
- package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +2 -2
- package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +281 -0
- package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +330 -0
- package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +294 -0
- package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +334 -0
- package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +2 -2
- package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +13 -13
- package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +13 -13
- package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +1 -16
- package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +212 -0
- package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +312 -0
- package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +1 -1
- package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +1 -1
- package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +1 -1
- package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +3 -57
- package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +3 -3
- package/tests/oauth-token.test.ts +107 -12
- package/tests/ocapi-client.test.ts +53 -106
- package/tests/script-debugger-client.test.ts +430 -0
- package/tests/servers/sfcc-mock-server/src/app.js +15 -0
- package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +258 -0
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +396 -0
- package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +5 -0
- package/tests/servers/sfcc-mock-server/src/routes/storefront.js +86 -0
- package/tests/servers/sfcc-mock-server/src/routes/webdav.js +6 -4
- package/tests/validation-helpers.test.ts +0 -31
- package/tests/workspace-roots.test.ts +227 -0
- package/ai-instructions/claude-desktop/claude_custom_instructions.md +0 -321
- package/ai-instructions/cursor/.cursor/rules/debugging-workflows.mdc +0 -171
- package/ai-instructions/cursor/.cursor/rules/hooks-development.mdc +0 -168
- package/ai-instructions/cursor/.cursor/rules/isml-templates.mdc +0 -209
- package/ai-instructions/cursor/.cursor/rules/job-framework.mdc +0 -379
- package/ai-instructions/cursor/.cursor/rules/performance-optimization.mdc +0 -215
- package/ai-instructions/cursor/.cursor/rules/scapi-endpoints.mdc +0 -98
- package/ai-instructions/cursor/.cursor/rules/security-patterns.mdc +0 -375
- package/ai-instructions/cursor/.cursor/rules/sfcc-development.mdc +0 -144
- package/ai-instructions/cursor/.cursor/rules/sfra-controllers.mdc +0 -376
- package/ai-instructions/cursor/.cursor/rules/sfra-models.mdc +0 -412
- package/ai-instructions/cursor/.cursor/rules/system-objects.mdc +0 -383
- package/ai-instructions/cursor/.cursor/rules/testing-patterns.mdc +0 -418
- package/dist/clients/best-practices-client.d.ts +0 -57
- package/dist/clients/best-practices-client.d.ts.map +0 -1
- package/dist/clients/best-practices-client.js +0 -288
- package/dist/clients/best-practices-client.js.map +0 -1
- package/dist/clients/cartridge-generation-client.d.ts +0 -57
- package/dist/clients/cartridge-generation-client.d.ts.map +0 -1
- package/dist/clients/cartridge-generation-client.js +0 -384
- package/dist/clients/cartridge-generation-client.js.map +0 -1
- package/dist/clients/logs/index.d.ts +0 -13
- package/dist/clients/logs/index.d.ts.map +0 -1
- package/dist/clients/logs/index.js +0 -15
- package/dist/clients/logs/index.js.map +0 -1
- package/dist/clients/logs/log-analyzer.d.ts +0 -55
- package/dist/clients/logs/log-analyzer.d.ts.map +0 -1
- package/dist/clients/logs/log-analyzer.js +0 -228
- package/dist/clients/logs/log-analyzer.js.map +0 -1
- package/dist/clients/logs/log-client.d.ts +0 -87
- package/dist/clients/logs/log-client.d.ts.map +0 -1
- package/dist/clients/logs/log-client.js +0 -418
- package/dist/clients/logs/log-client.js.map +0 -1
- package/dist/clients/logs/log-constants.d.ts +0 -37
- package/dist/clients/logs/log-constants.d.ts.map +0 -1
- package/dist/clients/logs/log-constants.js +0 -37
- package/dist/clients/logs/log-constants.js.map +0 -1
- package/dist/clients/logs/log-file-discovery.d.ts +0 -62
- package/dist/clients/logs/log-file-discovery.d.ts.map +0 -1
- package/dist/clients/logs/log-file-discovery.js +0 -238
- package/dist/clients/logs/log-file-discovery.js.map +0 -1
- package/dist/clients/logs/log-file-reader.d.ts +0 -53
- package/dist/clients/logs/log-file-reader.d.ts.map +0 -1
- package/dist/clients/logs/log-file-reader.js +0 -194
- package/dist/clients/logs/log-file-reader.js.map +0 -1
- package/dist/clients/logs/log-formatter.d.ts +0 -90
- package/dist/clients/logs/log-formatter.d.ts.map +0 -1
- package/dist/clients/logs/log-formatter.js +0 -189
- package/dist/clients/logs/log-formatter.js.map +0 -1
- package/dist/clients/logs/log-processor.d.ts +0 -91
- package/dist/clients/logs/log-processor.d.ts.map +0 -1
- package/dist/clients/logs/log-processor.js +0 -328
- package/dist/clients/logs/log-processor.js.map +0 -1
- package/dist/clients/logs/log-types.d.ts +0 -69
- package/dist/clients/logs/log-types.d.ts.map +0 -1
- package/dist/clients/logs/log-types.js +0 -5
- package/dist/clients/logs/log-types.js.map +0 -1
- package/dist/clients/logs/webdav-client-manager.d.ts +0 -28
- package/dist/clients/logs/webdav-client-manager.d.ts.map +0 -1
- package/dist/clients/logs/webdav-client-manager.js +0 -77
- package/dist/clients/logs/webdav-client-manager.js.map +0 -1
- package/dist/core/handlers/abstract-log-tool-handler.d.ts +0 -35
- package/dist/core/handlers/abstract-log-tool-handler.d.ts.map +0 -1
- package/dist/core/handlers/abstract-log-tool-handler.js +0 -46
- package/dist/core/handlers/abstract-log-tool-handler.js.map +0 -1
- package/dist/core/handlers/best-practices-handler.d.ts +0 -17
- package/dist/core/handlers/best-practices-handler.d.ts.map +0 -1
- package/dist/core/handlers/best-practices-handler.js +0 -43
- package/dist/core/handlers/best-practices-handler.js.map +0 -1
- package/dist/core/handlers/job-log-tool-config.d.ts +0 -8
- package/dist/core/handlers/job-log-tool-config.d.ts.map +0 -1
- package/dist/core/handlers/job-log-tool-config.js +0 -76
- package/dist/core/handlers/job-log-tool-config.js.map +0 -1
- package/dist/core/handlers/log-tool-config.d.ts +0 -8
- package/dist/core/handlers/log-tool-config.d.ts.map +0 -1
- package/dist/core/handlers/log-tool-config.js +0 -73
- package/dist/core/handlers/log-tool-config.js.map +0 -1
- package/dist/docs/best-practices/isml_templates.md +0 -1933
- package/dist/docs/best-practices/job_framework.md +0 -1173
- package/dist/docs/best-practices/scapi_custom_endpoint.md +0 -963
- package/dist/docs/best-practices/sfra_client_side_js.md +0 -736
- package/dist/docs/best-practices/sfra_models.md +0 -1142
- package/dist/tool-configs/best-practices-tool-config.d.ts +0 -11
- package/dist/tool-configs/best-practices-tool-config.d.ts.map +0 -1
- package/dist/tool-configs/best-practices-tool-config.js +0 -59
- package/dist/tool-configs/best-practices-tool-config.js.map +0 -1
- package/dist/utils/job-log-tool-config.d.ts +0 -8
- package/dist/utils/job-log-tool-config.d.ts.map +0 -1
- package/dist/utils/job-log-tool-config.js +0 -76
- package/dist/utils/job-log-tool-config.js.map +0 -1
- package/dist/utils/job-log-utils.d.ts +0 -34
- package/dist/utils/job-log-utils.d.ts.map +0 -1
- package/dist/utils/job-log-utils.js +0 -60
- package/dist/utils/job-log-utils.js.map +0 -1
- package/dist/utils/log-cache.d.ts +0 -53
- package/dist/utils/log-cache.d.ts.map +0 -1
- package/dist/utils/log-cache.js +0 -114
- package/dist/utils/log-cache.js.map +0 -1
- package/dist/utils/log-tool-config.d.ts +0 -8
- package/dist/utils/log-tool-config.d.ts.map +0 -1
- package/dist/utils/log-tool-config.js +0 -73
- package/dist/utils/log-tool-config.js.map +0 -1
- package/dist/utils/log-tool-utils.d.ts +0 -39
- package/dist/utils/log-tool-utils.d.ts.map +0 -1
- package/dist/utils/log-tool-utils.js +0 -94
- package/dist/utils/log-tool-utils.js.map +0 -1
- package/docs/best-practices/isml_templates.md +0 -1933
- package/docs/best-practices/job_framework.md +0 -1173
- package/docs/best-practices/scapi_custom_endpoint.md +0 -963
- package/docs/best-practices/sfra_client_side_js.md +0 -736
- package/docs/best-practices/sfra_models.md +0 -1142
- package/docs-site/App.tsx +0 -103
- package/docs-site/README.md +0 -113
- package/docs-site/components/Badge.tsx +0 -38
- package/docs-site/components/BreadcrumbSchema.tsx +0 -34
- package/docs-site/components/CodeBlock.tsx +0 -132
- package/docs-site/components/Collapsible.tsx +0 -40
- package/docs-site/components/ConfigBuilder.tsx +0 -118
- package/docs-site/components/ConfigHero.tsx +0 -19
- package/docs-site/components/ConfigModeTabs.tsx +0 -42
- package/docs-site/components/Layout.tsx +0 -174
- package/docs-site/components/LightCodeContainer.tsx +0 -44
- package/docs-site/components/NewcomerCTA.tsx +0 -57
- package/docs-site/components/NextStepsStrip.tsx +0 -23
- package/docs-site/components/OnThisPage.tsx +0 -91
- package/docs-site/components/SEO.tsx +0 -79
- package/docs-site/components/Search.tsx +0 -207
- package/docs-site/components/Sidebar.tsx +0 -96
- package/docs-site/components/StructuredData.tsx +0 -72
- package/docs-site/components/ToolCard.tsx +0 -84
- package/docs-site/components/ToolFilters.tsx +0 -39
- package/docs-site/components/Typography.tsx +0 -30
- package/docs-site/components/VersionBadge.tsx +0 -18
- package/docs-site/components/icons.tsx +0 -37
- package/docs-site/constants.tsx +0 -34
- package/docs-site/index.html +0 -62
- package/docs-site/main.tsx +0 -16
- package/docs-site/metadata.json +0 -5
- package/docs-site/package-lock.json +0 -3966
- package/docs-site/package.json +0 -35
- package/docs-site/pages/AIInterfacesPage.tsx +0 -610
- package/docs-site/pages/ConfigurationPage.tsx +0 -315
- package/docs-site/pages/DevelopmentPage.tsx +0 -607
- package/docs-site/pages/ExamplesPage.tsx +0 -558
- package/docs-site/pages/FeaturesPage.tsx +0 -353
- package/docs-site/pages/HomePage.tsx +0 -1046
- package/docs-site/pages/SecurityPage.tsx +0 -372
- package/docs-site/pages/ToolsPage.tsx +0 -205
- package/docs-site/pages/TroubleshootingPage.tsx +0 -590
- package/docs-site/postcss.config.js +0 -6
- package/docs-site/public/.well-known/security.txt +0 -6
- package/docs-site/public/android-chrome-192x192.png +0 -0
- package/docs-site/public/android-chrome-512x512.png +0 -0
- package/docs-site/public/apple-touch-icon.png +0 -0
- package/docs-site/public/favicon-16x16.png +0 -0
- package/docs-site/public/favicon-32x32.png +0 -0
- package/docs-site/public/favicon.ico +0 -0
- package/docs-site/public/llms.txt +0 -47
- package/docs-site/scripts/generate-search-index.js +0 -323
- package/docs-site/scripts/generate-sitemap.js +0 -156
- package/docs-site/scripts/search-dev.js +0 -112
- package/docs-site/src/styles/input.css +0 -248
- package/docs-site/src/styles/prism-theme.css +0 -124
- package/docs-site/tailwind.config.js +0 -70
- package/docs-site/tsconfig.json +0 -29
- package/docs-site/types.ts +0 -16
- package/docs-site/utils/search.ts +0 -132
- package/docs-site/utils/toolsData.ts +0 -116
- package/docs-site/vite.config.ts +0 -63
- package/src/clients/best-practices-client.ts +0 -332
- package/src/clients/cartridge-generation-client.ts +0 -507
- package/src/clients/logs/index.ts +0 -18
- package/src/clients/logs/log-analyzer.ts +0 -289
- package/src/clients/logs/log-client.ts +0 -540
- package/src/clients/logs/log-constants.ts +0 -53
- package/src/clients/logs/log-file-discovery.ts +0 -299
- package/src/clients/logs/log-file-reader.ts +0 -227
- package/src/clients/logs/log-formatter.ts +0 -258
- package/src/clients/logs/log-processor.ts +0 -402
- package/src/clients/logs/log-types.ts +0 -80
- package/src/clients/logs/webdav-client-manager.ts +0 -93
- package/src/core/handlers/abstract-log-tool-handler.ts +0 -64
- package/src/core/handlers/best-practices-handler.ts +0 -55
- package/src/core/handlers/job-log-tool-config.ts +0 -89
- package/src/core/handlers/log-tool-config.ts +0 -98
- package/src/tool-configs/best-practices-tool-config.ts +0 -68
- package/src/utils/job-log-tool-config.ts +0 -89
- package/src/utils/job-log-utils.ts +0 -78
- package/src/utils/log-cache.ts +0 -134
- package/src/utils/log-tool-config.ts +0 -98
- package/src/utils/log-tool-utils.ts +0 -122
- package/tests/best-practices-handler.test.ts +0 -236
- package/tests/job-log-utils.test.ts +0 -182
- package/tests/mcp/node/get-available-best-practice-guides.docs-only.programmatic.test.js +0 -516
- package/tests/mcp/node/get-best-practice-guide.docs-only.programmatic.test.js +0 -733
- package/tests/mcp/node/get-hook-reference.docs-only.programmatic.test.js +0 -185
- package/tests/mcp/node/search-best-practices.docs-only.programmatic.test.js +0 -836
- package/tests/mcp/yaml/get-available-best-practice-guides.docs-only.test.mcp.yml +0 -885
- package/tests/mcp/yaml/get-available-best-practice-guides.full-mode.test.mcp.yml +0 -885
- package/tests/mcp/yaml/get-best-practice-guide.docs-only.test.mcp.yml +0 -462
- package/tests/mcp/yaml/get-best-practice-guide.full-mode.test.mcp.yml +0 -462
- package/tests/mcp/yaml/get-hook-reference.docs-only.test.mcp.yml +0 -321
- package/tests/mcp/yaml/get-hook-reference.full-mode.test.mcp.yml +0 -321
- package/tests/mcp/yaml/search-best-practices.docs-only.test.mcp.yml +0 -655
- package/tests/mcp/yaml/search-best-practices.full-mode.test.mcp.yml +0 -655
- /package/{docs-site → docs-site-v2}/public/404.html +0 -0
- /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods-no-mcp.png +0 -0
- /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods.png +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sfcc-fraud-prevention
|
|
3
|
+
description: Layered fraud prevention playbook for Salesforce B2C Commerce developers. Use this when adding fraud signals, designing a risk scoring approach, integrating third-party tools, or hardening checkout/login against bot-driven abuse.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SFCC Fraud Prevention (Developer Playbook)
|
|
7
|
+
|
|
8
|
+
Fraud prevention in SFCC is a *system*, not a single feature. This skill focuses on practical developer responsibilities:
|
|
9
|
+
- Detectable signals you can implement
|
|
10
|
+
- Where to enforce checks
|
|
11
|
+
- How to store state safely
|
|
12
|
+
- How to avoid performance and quota pitfalls
|
|
13
|
+
|
|
14
|
+
## Quick Checklist
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
[ ] Start at the edge: eCDN rules (block obvious bad traffic)
|
|
18
|
+
[ ] Enforce payment checks (AVS/CVV/3DS where available)
|
|
19
|
+
[ ] Add server-side validation (never trust the client)
|
|
20
|
+
[ ] Add velocity + behavior checks using minimal state
|
|
21
|
+
[ ] Ensure retention + purge jobs for any temporary state objects
|
|
22
|
+
[ ] Log decisions carefully (no PII leakage)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Threat Taxonomy (Why It Matters to Code)
|
|
26
|
+
|
|
27
|
+
Common families you’ll see in data:
|
|
28
|
+
- Card-not-present fraud
|
|
29
|
+
- Account takeover (credential stuffing)
|
|
30
|
+
- “Friendly fraud” / chargebacks
|
|
31
|
+
- Bot-driven attacks (card testing, inventory hoarding)
|
|
32
|
+
|
|
33
|
+
Your job is to translate these into **signals** you can observe and validate.
|
|
34
|
+
|
|
35
|
+
## Actionable Signals (Implementation-Friendly)
|
|
36
|
+
|
|
37
|
+
| Signal type | Examples |
|
|
38
|
+
|---|---|
|
|
39
|
+
| Data mismatches | IP geolocation vs billing/shipping country; name/address anomalies |
|
|
40
|
+
| Velocity patterns | many attempts from same IP/email/device; repeated failures then success |
|
|
41
|
+
| Order characteristics | unusually large order; high-risk SKUs; rush shipping |
|
|
42
|
+
| Identity indicators | disposable email; gibberish names; repeated address reuse |
|
|
43
|
+
|
|
44
|
+
## Layered Defense Architecture
|
|
45
|
+
|
|
46
|
+
### 1) Edge controls (before app servers)
|
|
47
|
+
- Use **eCDN custom rules** to block/limit known abusive traffic patterns.
|
|
48
|
+
- Rate-limit endpoints that are common bot targets (login, add-to-cart, checkout).
|
|
49
|
+
|
|
50
|
+
### 2) Platform + processor basics
|
|
51
|
+
- Enable/enforce payment gateway features like **AVS** and **CVV** checks.
|
|
52
|
+
- Prefer adding friction only when risk is elevated.
|
|
53
|
+
|
|
54
|
+
### 3) Server-side rules and scoring
|
|
55
|
+
Where to implement depends on architecture:
|
|
56
|
+
- **SFRA**: controller middleware + fraud detection script points
|
|
57
|
+
- **Headless**: keep hook logic minimal; consider custom endpoints for heavier checks
|
|
58
|
+
|
|
59
|
+
A practical approach:
|
|
60
|
+
- Compute a numeric risk score from signals (0–100)
|
|
61
|
+
- Block above a threshold; challenge (CAPTCHA/step-up) in mid-range; allow below threshold
|
|
62
|
+
|
|
63
|
+
## State Storage (Don’t Create a Quota Time Bomb)
|
|
64
|
+
|
|
65
|
+
If you store historical signals:
|
|
66
|
+
- Use a minimal schema (counts + timestamps), not raw event logs
|
|
67
|
+
- Define retention policy and a purge job from day one
|
|
68
|
+
|
|
69
|
+
If you must store per-session state:
|
|
70
|
+
- Prefer session privacy storage for small values
|
|
71
|
+
|
|
72
|
+
## Logging & Observability
|
|
73
|
+
|
|
74
|
+
- Log risk decisions with correlation IDs and *redacted* values
|
|
75
|
+
- Avoid writing PII into shared logs
|
|
76
|
+
|
|
77
|
+
See also: `sfcc-logging` and `sfcc-security`.
|
|
78
|
+
|
|
79
|
+
## When to Buy Instead of Build
|
|
80
|
+
|
|
81
|
+
Third-party fraud tools can be the correct choice when:
|
|
82
|
+
- You need global intelligence across merchants
|
|
83
|
+
- You need chargeback guarantees
|
|
84
|
+
- You are being hit by sophisticated bot abuse
|
|
85
|
+
|
|
86
|
+
Build custom logic when:
|
|
87
|
+
- You need business-specific heuristics
|
|
88
|
+
- You have clear signals + small scope
|
|
89
|
+
- You can commit to continuous tuning (false positives are costly)
|
|
90
|
+
|
|
91
|
+
## References
|
|
92
|
+
- Rhino Inquisitor: A Developer’s Guide to Combating Fraud on SFCC
|
|
93
|
+
- https://www.rhino-inquisitor.com/a-dev-guide-to-combating-fraud-on-sfcc/
|
|
94
|
+
- Salesforce: Bot management guidance (high-level responsibility model)
|
|
95
|
+
- https://developer.salesforce.com/docs/commerce/commerce-solutions/guide/bot-management.html
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sfcc-hooks-registration
|
|
3
|
+
description: 'Register SFCC hooks via cartridge package.json and hooks.json. Use when adding hooks or troubleshooting hook registration.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SFCC Hooks Registration
|
|
7
|
+
|
|
8
|
+
## When to Use
|
|
9
|
+
- Adding new script hooks for a cartridge
|
|
10
|
+
- Fixing missing hook execution
|
|
11
|
+
- Verifying hook registration structure
|
|
12
|
+
|
|
13
|
+
## Procedure
|
|
14
|
+
1. Add a package.json at the top level of the cartridge (cartridges/<cartridge-name>/package.json).
|
|
15
|
+
2. Define the hooks path relative to that package.json:
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"hooks": "./cartridge/scripts/hooks.json"
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
3. In hooks.json, map hook names to script files relative to hooks.json:
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"hooks": [
|
|
25
|
+
{
|
|
26
|
+
"name": "dw.order.calculate",
|
|
27
|
+
"script": "./hooks/cart/calculate.js"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
4. Export hook functions as CommonJS exports with the unqualified hook name (for example, `dw.order.calculate` uses `exports.calculate`).
|
|
33
|
+
5. Enable the **Salesforce Commerce Cloud API hook execution** feature switch in Business Manager for OCAPI/SCAPI hooks.
|
|
34
|
+
6. Ensure the cartridge is in the site cartridge path and upload the cartridge.
|
|
35
|
+
|
|
36
|
+
## Notes
|
|
37
|
+
- The hooks path is relative to the package.json location.
|
|
38
|
+
- The script path in hooks.json is relative to hooks.json itself.
|
|
39
|
+
- For Shopper API hooks, returning a value can skip the system implementation; return nothing when you want the default implementation to run.
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sfcc-isml-development
|
|
3
|
+
description: SFRA-first guide for developing ISML templates in Salesforce B2C Commerce (Bootstrap 4 conventions). Use this when creating, modifying, or troubleshooting SFRA templates, decorators, components, forms, includes, and caching.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ISML Development (SFRA + Bootstrap 4)
|
|
7
|
+
|
|
8
|
+
This skill is **SFRA-only**. It intentionally avoids SiteGenesis patterns.
|
|
9
|
+
|
|
10
|
+
SFRA storefront markup is built around **Bootstrap 4** (grid, forms, alerts, utilities). Keep your ISML consistent with existing SFRA markup and CSS conventions.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- You’re editing `templates/default/**` in an SFRA cartridge.
|
|
15
|
+
- You need to apply/extend SFRA layout (`common/layout/page` / `common/layout/checkout`).
|
|
16
|
+
- You’re building reusable components via `<isinclude>` and Bootstrap 4 markup.
|
|
17
|
+
- You’re debugging output encoding, caching, or remote include behaviour.
|
|
18
|
+
|
|
19
|
+
## When NOT to Use
|
|
20
|
+
|
|
21
|
+
- For business logic, data fetching, persistence, or complex transformations (belongs in controllers/models/scripts).
|
|
22
|
+
- For redesigning UI with a different framework (SFRA baseline expects Bootstrap 4).
|
|
23
|
+
|
|
24
|
+
## Quick Checklist
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
[ ] No business logic in ISML (no data fetches, no persistence)
|
|
28
|
+
[ ] <isscript> used only for SFRA asset registration (CSS/JS)
|
|
29
|
+
[ ] Output encoding is NOT disabled unless justified and safe
|
|
30
|
+
[ ] <iscontent>/<isredirect>/<iscache> placement constraints respected
|
|
31
|
+
[ ] Remote includes used sparingly with security middleware
|
|
32
|
+
[ ] Template receives all data via pdict (controller owns data)
|
|
33
|
+
[ ] Markup uses Bootstrap 4 classes (grid, forms, alerts)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Where Templates Live (SFRA)
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
/my-cartridge/cartridge/templates/
|
|
40
|
+
/default # Default templates (SFRA)
|
|
41
|
+
/product/detail.isml
|
|
42
|
+
/util/modules.isml # Optional: <ismodule> tag definitions
|
|
43
|
+
/fr_FR # Locale overrides (use sparingly)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## SFRA Golden Rule: Templates Are Presentation-Only
|
|
47
|
+
|
|
48
|
+
**NEVER use `<isscript>` for business logic.** The only exception is asset management:
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<!-- ✅ Only acceptable use of isscript -->
|
|
52
|
+
<isscript>
|
|
53
|
+
var assets = require('*/cartridge/scripts/assets.js');
|
|
54
|
+
assets.addCss('/css/product.css');
|
|
55
|
+
assets.addJs('/js/product.js');
|
|
56
|
+
</isscript>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
All data comes from controllers via `pdict`:
|
|
60
|
+
|
|
61
|
+
```html
|
|
62
|
+
<!-- ✅ Correct: Data from controller -->
|
|
63
|
+
<div class="price h5 mb-0">${pdict.product.price.sales.formatted}</div>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Bootstrap 4 Conventions (SFRA UI Baseline)
|
|
67
|
+
|
|
68
|
+
Use these classes/patterns by default:
|
|
69
|
+
|
|
70
|
+
| Goal | Bootstrap 4 pattern |
|
|
71
|
+
|------|----------------------|
|
|
72
|
+
| Layout | `container` → `row` → `col-*` |
|
|
73
|
+
| Spacing | `mt-*`, `mb-*`, `py-*`, `px-*` |
|
|
74
|
+
| Buttons | `btn btn-primary`, `btn btn-outline-primary` |
|
|
75
|
+
| Alerts | `alert alert-danger`, `alert alert-success` |
|
|
76
|
+
| Forms | `form-group`, `form-control`, `is-invalid`, `invalid-feedback` |
|
|
77
|
+
| Responsive show/hide | `d-none d-md-block`, `d-md-none` |
|
|
78
|
+
|
|
79
|
+
Avoid mixing Bootstrap 5-only classes (e.g. `g-*`, `row-cols-*`, `btn-close`, `badge bg-*`) into SFRA baseline templates.
|
|
80
|
+
|
|
81
|
+
## Essential Tags
|
|
82
|
+
|
|
83
|
+
### Conditional Logic
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<isif condition="${pdict.product.available}">
|
|
87
|
+
<span class="badge badge-success">${Resource.msg('label.instock','product',null)}</span>
|
|
88
|
+
<iselseif condition="${pdict.product.preorderable}">
|
|
89
|
+
<span class="badge badge-info">${Resource.msg('label.preorder','product',null)}</span>
|
|
90
|
+
<iselse>
|
|
91
|
+
<span class="badge badge-secondary">${Resource.msg('label.outofstock','product',null)}</span>
|
|
92
|
+
</isif>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Loops
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<isloop items="${products}" var="product" status="loopstate">
|
|
99
|
+
<div class="col-6 col-sm-4 col-lg-3 mb-3">
|
|
100
|
+
<div class="card h-100">
|
|
101
|
+
<div class="card-body">
|
|
102
|
+
<div class="small text-muted">#${loopstate.count}</div>
|
|
103
|
+
<div class="font-weight-bold">${product.name}</div>
|
|
104
|
+
</div>
|
|
105
|
+
<isif condition="${loopstate.first}">
|
|
106
|
+
<div class="card-footer bg-transparent">
|
|
107
|
+
<span class="badge badge-warning">${Resource.msg('label.featured','common',null)}</span>
|
|
108
|
+
</div>
|
|
109
|
+
</isif>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</isloop>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Loop status: `count` (1-based), `index` (0-based), `first`, `last`, `odd`, `even`
|
|
116
|
+
|
|
117
|
+
### Variables
|
|
118
|
+
|
|
119
|
+
```html
|
|
120
|
+
<isset name="productName" value="${product.name}" scope="page"/>
|
|
121
|
+
<span>${productName}</span>
|
|
122
|
+
<isremove name="productName" scope="page"/>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Scopes (required): `page`, `request`, `session`, `pdict`
|
|
126
|
+
|
|
127
|
+
### Output
|
|
128
|
+
|
|
129
|
+
```html
|
|
130
|
+
<!-- HTML encoded (default) -->
|
|
131
|
+
<isprint value="${product.name}"/>
|
|
132
|
+
|
|
133
|
+
<!-- Unencoded (use carefully) -->
|
|
134
|
+
<isprint value="${htmlContent}" encoding="off"/>
|
|
135
|
+
|
|
136
|
+
<!-- Formatted -->
|
|
137
|
+
<isprint value="${price}" style="CURRENCY"/>
|
|
138
|
+
<isprint value="${order.creationDate}" style="DATE_SHORT"/>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Includes
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
<!-- Local include (shared pdict) -->
|
|
145
|
+
<isinclude template="product/components/price"/>
|
|
146
|
+
|
|
147
|
+
<!-- Remote include (isolated, own cache) -->
|
|
148
|
+
<isinclude url="${URLUtils.url('Product-GetPrice', 'pid', product.ID)}"/>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Prefer local includes for components. Only use remote includes when you need an **independent cache policy** or **request isolation**; see the remote include reference.
|
|
152
|
+
|
|
153
|
+
## Decorator Pattern
|
|
154
|
+
|
|
155
|
+
**Decorator template** (`common/layout/page.isml`):
|
|
156
|
+
```html
|
|
157
|
+
<!DOCTYPE html>
|
|
158
|
+
<html>
|
|
159
|
+
<head><title>${pdict.pageTitle}</title></head>
|
|
160
|
+
<body>
|
|
161
|
+
<isinclude template="components/header"/>
|
|
162
|
+
<main>
|
|
163
|
+
<isreplace/> <!-- Content inserted here -->
|
|
164
|
+
</main>
|
|
165
|
+
<isinclude template="components/footer"/>
|
|
166
|
+
</body>
|
|
167
|
+
</html>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Using decorator:**
|
|
171
|
+
```html
|
|
172
|
+
<isdecorate template="common/layout/page">
|
|
173
|
+
<div class="content">
|
|
174
|
+
<h1>${pdict.welcomeMessage}</h1>
|
|
175
|
+
</div>
|
|
176
|
+
</isdecorate>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
SFRA provides two primary decorators:
|
|
180
|
+
- `common/layout/page` - Standard storefront pages
|
|
181
|
+
- `common/layout/checkout` - Checkout process pages
|
|
182
|
+
|
|
183
|
+
Use `<isdecorate>` on almost all storefront templates; keep full `<html>/<head>/<body>` only in layout templates.
|
|
184
|
+
|
|
185
|
+
## Tag Location Constraints
|
|
186
|
+
|
|
187
|
+
| Tag | Constraint |
|
|
188
|
+
|-----|------------|
|
|
189
|
+
| `<iscontent>` | Must be before DOCTYPE |
|
|
190
|
+
| `<isredirect>` | Must be before DOCTYPE |
|
|
191
|
+
| `<iscache>` | Place at beginning |
|
|
192
|
+
| `<isreplace/>` | Only inside decorator templates |
|
|
193
|
+
| `<isbreak>/<iscontinue>/<isnext>` | Only inside `<isloop>` |
|
|
194
|
+
|
|
195
|
+
## Caching
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<!-- Cache for 24 hours -->
|
|
199
|
+
<iscache type="relative" hour="24"/>
|
|
200
|
+
|
|
201
|
+
<!-- Daily cache (expires at midnight) -->
|
|
202
|
+
<iscache type="daily" hour="0" minute="0"/>
|
|
203
|
+
|
|
204
|
+
<!-- Vary by price/promotion -->
|
|
205
|
+
<iscache type="relative" hour="1" varyby="price_promotion"/>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Place `<iscache>` at the beginning of the template.
|
|
209
|
+
|
|
210
|
+
Prefer **controller caching middleware** (SFRA `*/cartridge/scripts/middleware/cache`) for page-level caching decisions; use `<iscache>` selectively for fragments.
|
|
211
|
+
|
|
212
|
+
## Content Type
|
|
213
|
+
|
|
214
|
+
```html
|
|
215
|
+
<!-- Must be first in template -->
|
|
216
|
+
<iscontent type="text/html" charset="UTF-8"/>
|
|
217
|
+
|
|
218
|
+
<!-- For JSON -->
|
|
219
|
+
<iscontent type="application/json" charset="UTF-8"/>
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Custom Modules
|
|
223
|
+
|
|
224
|
+
**Define in `util/modules.isml`:**
|
|
225
|
+
```html
|
|
226
|
+
<ismodule template="components/productcard"
|
|
227
|
+
name="productcard"
|
|
228
|
+
attribute="product"
|
|
229
|
+
attribute="showPrice"/>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Use anywhere:**
|
|
233
|
+
```html
|
|
234
|
+
<isinclude template="util/modules"/>
|
|
235
|
+
<isproductcard product="${product}" showPrice="${true}"/>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
In SFRA, most reuse is done via `<isinclude template="...">`. Use `<ismodule>` custom tags only when it measurably improves readability/consistency.
|
|
239
|
+
|
|
240
|
+
## Security: XSS Prevention
|
|
241
|
+
|
|
242
|
+
**Always rely on default encoding.** `<isprint>` automatically HTML-encodes:
|
|
243
|
+
|
|
244
|
+
```html
|
|
245
|
+
<!-- ✅ Secure (default) -->
|
|
246
|
+
<isprint value="${pdict.searchPhrase}" />
|
|
247
|
+
|
|
248
|
+
<!-- ❌ Vulnerable -->
|
|
249
|
+
<isprint value="${pdict.searchPhrase}" encoding="off" />
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
For JavaScript context, use `SecureEncoder`:
|
|
253
|
+
|
|
254
|
+
```html
|
|
255
|
+
<script>
|
|
256
|
+
var term = "${require('dw/util/SecureEncoder').forJavaScript(pdict.searchPhrase)}";
|
|
257
|
+
</script>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
For HTML attributes, prefer `SecureEncoder.forHTMLAttribute(...)`. Avoid `encoding="off"` unless the value is fully controlled and intentionally contains HTML.
|
|
261
|
+
|
|
262
|
+
## Built-in Utilities
|
|
263
|
+
|
|
264
|
+
Pre-imported, use directly:
|
|
265
|
+
|
|
266
|
+
```html
|
|
267
|
+
<!-- URLUtils -->
|
|
268
|
+
<a href="${URLUtils.url('Product-Show', 'pid', product.ID)}">View</a>
|
|
269
|
+
<img src="${URLUtils.staticURL('/images/logo.png')}" alt="Logo"/>
|
|
270
|
+
|
|
271
|
+
<!-- Resource (localization) -->
|
|
272
|
+
${Resource.msg('button.addtocart', 'product', null)}
|
|
273
|
+
${Resource.msgf('cart.items', 'cart', null, cartCount)}
|
|
274
|
+
|
|
275
|
+
<!-- StringUtils -->
|
|
276
|
+
${StringUtils.truncate(description, 100, '...')}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Expressions
|
|
280
|
+
|
|
281
|
+
```html
|
|
282
|
+
<!-- Property access -->
|
|
283
|
+
${pdict.product.name}
|
|
284
|
+
${pdict.product.price.sales.value}
|
|
285
|
+
|
|
286
|
+
<!-- Method calls -->
|
|
287
|
+
${product.getAvailabilityModel().isInStock()}
|
|
288
|
+
|
|
289
|
+
<!-- Operators -->
|
|
290
|
+
${price > 100 ? 'expensive' : 'affordable'}
|
|
291
|
+
${firstName + ' ' + lastName}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Comments
|
|
295
|
+
|
|
296
|
+
```html
|
|
297
|
+
<!-- HTML comment (visible in source) -->
|
|
298
|
+
|
|
299
|
+
<iscomment>
|
|
300
|
+
ISML comment - stripped from output.
|
|
301
|
+
Use for sensitive documentation.
|
|
302
|
+
</iscomment>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Best Practices
|
|
306
|
+
|
|
307
|
+
1. Use Bootstrap 4 components/utilities for UI consistency
|
|
308
|
+
2. Use `<isdecorate>` with SFRA layouts (`common/layout/page`, `common/layout/checkout`)
|
|
309
|
+
3. Keep templates “dumb”: controllers/models prepare view models; templates render
|
|
310
|
+
4. Use `<isinclude template>` for component composition; keep components small
|
|
311
|
+
5. Default encoding prevents XSS; use `SecureEncoder` for JS/attribute contexts
|
|
312
|
+
6. Minimize remote includes; when used, require `server.middleware.include` + explicit security + cache policy
|
|
313
|
+
7. Prefer controller caching middleware; use `<iscache>` thoughtfully
|
|
314
|
+
|
|
315
|
+
## Common SFRA Form Pattern (Bootstrap 4)
|
|
316
|
+
|
|
317
|
+
```html
|
|
318
|
+
<form action="${URLUtils.url('Account-Login')}" method="post" class="login">
|
|
319
|
+
<input type="hidden" name="${pdict.csrf.tokenName}" value="${pdict.csrf.token}"/>
|
|
320
|
+
|
|
321
|
+
<div class="form-group">
|
|
322
|
+
<label class="form-control-label" for="login-email">
|
|
323
|
+
${Resource.msg('label.login.email','login',null)}
|
|
324
|
+
</label>
|
|
325
|
+
<input
|
|
326
|
+
id="login-email"
|
|
327
|
+
type="email"
|
|
328
|
+
class="form-control <isif condition="${pdict.loginForm.username.invalid}">is-invalid</isif>"
|
|
329
|
+
name="${pdict.loginForm.username.htmlName}"
|
|
330
|
+
value="${pdict.loginForm.username.value}"
|
|
331
|
+
autocomplete="email"
|
|
332
|
+
required>
|
|
333
|
+
<isif condition="${pdict.loginForm.username.invalid}">
|
|
334
|
+
<div class="invalid-feedback">
|
|
335
|
+
<isprint value="${pdict.loginForm.username.error}"/>
|
|
336
|
+
</div>
|
|
337
|
+
</isif>
|
|
338
|
+
</div>
|
|
339
|
+
|
|
340
|
+
<button type="submit" class="btn btn-primary btn-block">
|
|
341
|
+
${Resource.msg('button.login','login',null)}
|
|
342
|
+
</button>
|
|
343
|
+
</form>
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## MCP ISML Tools
|
|
347
|
+
|
|
348
|
+
```javascript
|
|
349
|
+
search_isml_elements("loop") // Find by intent
|
|
350
|
+
get_isml_element("isprint") // Full documentation
|
|
351
|
+
list_isml_elements() // All elements by category
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Related Skills
|
|
355
|
+
|
|
356
|
+
- **[sfcc-localization](../sfcc-localization/SKILL.md)** - Essential companion skill for localizing template text. Covers resource bundles, `Resource.msg()`, parameterized messages, locale fallback, and internationalization best practices. **Always use resource bundles instead of hardcoded text in templates.**
|
|
357
|
+
|
|
358
|
+
## Detailed References
|
|
359
|
+
|
|
360
|
+
- [Remote Includes](references/REMOTE-INCLUDES.md) - Local vs remote, caching, security
|
|
361
|
+
- [Utilities & Expressions](references/UTILITIES-EXPRESSIONS.md) - Built-in objects, expression syntax
|
|
362
|
+
- [SFRA Base Templates (Index)](references/sfra-base-templates-architecture.md) - Jumping-off point
|
|
363
|
+
- [SFRA Layouts](references/SFRA-LAYOUTS.md) - Decorators, hooks, `<isreplace/>`
|
|
364
|
+
- [SFRA Structure & Components](references/SFRA-STRUCTURE-COMPONENTS.md) - Where templates live, composition patterns
|
|
365
|
+
- [SFRA Pages: Catalog/Search](references/SFRA-PAGES-CATALOG.md) - Homepage/PDP/search/category patterns
|
|
366
|
+
- [SFRA Pages: Cart/Account/Auth](references/SFRA-PAGES-CART-ACCOUNT-AUTH.md) - Cart/account/login patterns
|
|
367
|
+
|
|
368
|
+
## External Reference
|
|
369
|
+
|
|
370
|
+
- Legacy long-form doc (for deeper examples): https://raw.githubusercontent.com/taurgis/sfcc-dev-mcp/refs/heads/main/docs/best-practices/isml_templates.md
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# ISML Remote Includes Reference
|
|
2
|
+
|
|
3
|
+
Comprehensive guide for local vs remote includes, caching strategies, and security.
|
|
4
|
+
|
|
5
|
+
## Local vs Remote Includes
|
|
6
|
+
|
|
7
|
+
| Attribute | Local Include | Remote Include |
|
|
8
|
+
|-----------|---------------|----------------|
|
|
9
|
+
| Syntax | `<isinclude template="...">` | `<isinclude url="...">` |
|
|
10
|
+
| Processing | Single request on Application Server | Parent + secondary request via Web Adapter |
|
|
11
|
+
| Data Scope | Full access to parent `pdict` & variables | Isolated – only URL query params available |
|
|
12
|
+
| Cache Policy | Inherits parent (lowest TTL wins) | Independent TTL per fragment |
|
|
13
|
+
| Typical Use | Reusable markup, partials | Mini-cart, personalized slots, dynamic widgets |
|
|
14
|
+
| Overhead | Minimal | Extra HTTP round trip |
|
|
15
|
+
| Security | Inherits parent auth state | New unauthenticated request |
|
|
16
|
+
| Failure Mode | Template error breaks page | Fragment timeout can delay assembly |
|
|
17
|
+
|
|
18
|
+
## When to Use Remote Includes
|
|
19
|
+
|
|
20
|
+
Use a **local include** unless ALL are true:
|
|
21
|
+
1. Fragment volatility differs meaningfully from page shell
|
|
22
|
+
2. Output can be parameterized via simple query params
|
|
23
|
+
3. Performance gain from separate caching outweighs added request
|
|
24
|
+
4. Security implications are understood and mitigated
|
|
25
|
+
|
|
26
|
+
## Implementing Remote Includes
|
|
27
|
+
|
|
28
|
+
### Template Example
|
|
29
|
+
|
|
30
|
+
Mini-cart header icon (uncached) while page shell cached for hours:
|
|
31
|
+
|
|
32
|
+
```html
|
|
33
|
+
<div class="header-cart" data-component="mini-cart">
|
|
34
|
+
<isinclude url="${URLUtils.url('Cart-MiniCart')}" />
|
|
35
|
+
</div>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Controller Pattern
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
var server = require('server');
|
|
42
|
+
var cache = require('*/cartridge/scripts/middleware/cache');
|
|
43
|
+
|
|
44
|
+
server.get('MiniCart',
|
|
45
|
+
server.middleware.include, // Gatekeeper: only valid inside remote include
|
|
46
|
+
cache.applyShortPromotionSensitiveCache, // Or cache.disableCaching()
|
|
47
|
+
function (req, res, next) {
|
|
48
|
+
// Build isolated model – no parent pdict access
|
|
49
|
+
res.render('components/header/miniCart');
|
|
50
|
+
next();
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
module.exports = server.exports();
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Passing Data
|
|
58
|
+
|
|
59
|
+
All context must be URL params:
|
|
60
|
+
|
|
61
|
+
```html
|
|
62
|
+
<isinclude url="${URLUtils.url('Page-Include', 'cid', 'footer-content-asset')}" />
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Warning:** Each unique full URL becomes a distinct cache entry (cache fragmentation risk).
|
|
66
|
+
|
|
67
|
+
## Caching Strategy Patterns
|
|
68
|
+
|
|
69
|
+
| Scenario | Page Shell TTL | Remote Include TTL | Rationale |
|
|
70
|
+
|----------|----------------|--------------------|-----------|
|
|
71
|
+
| Marketing landing + live inventory | 12h | 5m | Keep inventory fresh |
|
|
72
|
+
| Category grid + personalized banner | 4h | 15m | Personalized offers rotate |
|
|
73
|
+
| PDP + mini-cart | 2h | 0 (uncached) | Basket state = current session |
|
|
74
|
+
|
|
75
|
+
Keep total remote includes per page conservative (<20 recommended).
|
|
76
|
+
|
|
77
|
+
## Performance Anti-Patterns
|
|
78
|
+
|
|
79
|
+
| Anti-Pattern | Why Harmful | Better Alternative |
|
|
80
|
+
|--------------|-------------|-------------------|
|
|
81
|
+
| Remote include per product tile | N extra HTTP requests | Single parent with local includes |
|
|
82
|
+
| Position/index params that vary | Creates unique cache keys | Omit non-functional params |
|
|
83
|
+
| Deep nesting (include chain) | Compounding latency | Flatten architecture |
|
|
84
|
+
|
|
85
|
+
## Security Requirements
|
|
86
|
+
|
|
87
|
+
Remote include endpoints are effectively **public** unless you add authentication middleware.
|
|
88
|
+
|
|
89
|
+
**NEVER** expose PII or account state in an unprotected include.
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
server.get('SensitiveFragment',
|
|
93
|
+
server.middleware.include,
|
|
94
|
+
userLoggedIn.validateLoggedIn, // if user-specific
|
|
95
|
+
function (req, res, next) { ... }
|
|
96
|
+
);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Checklist
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
[ ] Justified different cache TTL
|
|
103
|
+
[ ] URL params minimal & non-sensitive
|
|
104
|
+
[ ] server.middleware.include first
|
|
105
|
+
[ ] Additional auth middleware if user data
|
|
106
|
+
[ ] Explicit cache middleware (or disabled)
|
|
107
|
+
[ ] Fragment count on page < 20
|
|
108
|
+
[ ] No nested chains beyond depth 2
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## When NOT to Use Remote Includes
|
|
112
|
+
|
|
113
|
+
- Pure presentational partials (icons, button groups)
|
|
114
|
+
- Iterative children of a paginated list
|
|
115
|
+
- Form bodies requiring parent validation context
|
|
116
|
+
- Anything requiring parent `pdict` without trivial serialization
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# SFRA Layout Templates (Decorators)
|
|
2
|
+
|
|
3
|
+
SFRA storefront pages typically render content via:
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<isdecorate template="common/layout/page">
|
|
7
|
+
<!-- page content -->
|
|
8
|
+
</isdecorate>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Keep full `<html>/<head>/<body>` markup in layout templates only.
|
|
12
|
+
|
|
13
|
+
## Core Layouts
|
|
14
|
+
|
|
15
|
+
SFRA commonly uses these base layout templates:
|
|
16
|
+
|
|
17
|
+
- `common/layout/page.isml` — primary layout for most storefront pages
|
|
18
|
+
- `common/layout/checkout.isml` — checkout layout (reduced header/navigation)
|
|
19
|
+
- `common/layout/pdStorePage.isml` — Page Designer store pages (campaign banner support)
|
|
20
|
+
|
|
21
|
+
These layouts typically:
|
|
22
|
+
|
|
23
|
+
- Include shared head markup via `common/htmlHead`
|
|
24
|
+
- Register shared scripts via `common/scripts`
|
|
25
|
+
- Include header/footer components
|
|
26
|
+
- Provide a single `<isreplace/>` insertion point inside `<main>`
|
|
27
|
+
- Call template hooks:
|
|
28
|
+
- `dw.system.HookMgr.callHook('app.template.beforeHeader', 'beforeHeader', pdict)`
|
|
29
|
+
- `dw.system.HookMgr.callHook('app.template.afterFooter', 'afterFooter', pdict)`
|
|
30
|
+
|
|
31
|
+
## `<isreplace/>` Rules
|
|
32
|
+
|
|
33
|
+
- Layout templates contain `<isreplace/>`.
|
|
34
|
+
- Decorated templates contain markup that will be injected at `<isreplace/>`.
|
|
35
|
+
- Prefer **one** `<isreplace/>` per layout.
|
|
36
|
+
|
|
37
|
+
## Bootstrap 4 Notes
|
|
38
|
+
|
|
39
|
+
SFRA baseline markup uses **Bootstrap 4**:
|
|
40
|
+
|
|
41
|
+
- Grid: `container` → `row` → `col-*`
|
|
42
|
+
- Forms: `form-group`, `form-control`, `is-invalid`, `invalid-feedback`
|
|
43
|
+
- Alerts: `alert alert-*`
|
|
44
|
+
- Utilities: `d-none d-md-block`, spacing utilities `mt-*` etc.
|
|
45
|
+
|
|
46
|
+
Avoid Bootstrap 5-only classes unless your project has explicitly upgraded.
|
|
47
|
+
|
|
48
|
+
## Caching Reminder
|
|
49
|
+
|
|
50
|
+
Prefer controller-based caching middleware for page caching; use `<iscache>` selectively for fragments.
|