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,818 @@
|
|
|
1
|
+
# ISML isdecorate Element
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `<isdecorate>` element wraps content with a decorator template, allowing you to reuse common layout structures like headers, footers, and page wrappers. The decorator template specifies where the wrapped content should be inserted using the `<isreplace/>` tag.
|
|
6
|
+
|
|
7
|
+
**Common Use Case:** Apply consistent page layouts (header/footer) to multiple templates without duplicating markup.
|
|
8
|
+
|
|
9
|
+
## Syntax
|
|
10
|
+
|
|
11
|
+
```isml
|
|
12
|
+
<isdecorate template="template_name"> <!-- required -->
|
|
13
|
+
<!-- Content to be decorated -->
|
|
14
|
+
...
|
|
15
|
+
</isdecorate>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Required Attributes
|
|
19
|
+
|
|
20
|
+
### template
|
|
21
|
+
|
|
22
|
+
**Type:** String or Expression
|
|
23
|
+
**Required:** Yes
|
|
24
|
+
|
|
25
|
+
Specifies the name of the decorator template that wraps the enclosed content.
|
|
26
|
+
|
|
27
|
+
**Examples:**
|
|
28
|
+
```isml
|
|
29
|
+
<!-- String literal -->
|
|
30
|
+
<isdecorate template="common/layout/page">
|
|
31
|
+
<h1>Page Content</h1>
|
|
32
|
+
</isdecorate>
|
|
33
|
+
|
|
34
|
+
<!-- Expression -->
|
|
35
|
+
<isdecorate template="${pdict.layoutTemplate}">
|
|
36
|
+
<div class="content">${pdict.body}</div>
|
|
37
|
+
</isdecorate>
|
|
38
|
+
|
|
39
|
+
<!-- Relative path -->
|
|
40
|
+
<isdecorate template="decorators/standardPage">
|
|
41
|
+
<div class="main-content">...</div>
|
|
42
|
+
</isdecorate>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Purpose
|
|
46
|
+
|
|
47
|
+
The `<isdecorate>` element enables:
|
|
48
|
+
|
|
49
|
+
1. **Layout Reuse:** Apply common page structures (header/footer/navigation) across multiple templates
|
|
50
|
+
2. **Separation of Concerns:** Keep content templates focused on content, layout templates focused on structure
|
|
51
|
+
3. **Consistent Design:** Ensure uniform page structure throughout the site
|
|
52
|
+
4. **Maintenance Efficiency:** Update layout in one place, affecting all decorated pages
|
|
53
|
+
5. **Flexible Composition:** Nest decorators for complex layout hierarchies
|
|
54
|
+
|
|
55
|
+
## How Decoration Works
|
|
56
|
+
|
|
57
|
+
### The Decorator Template
|
|
58
|
+
|
|
59
|
+
The decorator template contains the layout structure and uses `<isreplace/>` tag(s) to specify where the decorated content should be inserted.
|
|
60
|
+
|
|
61
|
+
**Key Points:**
|
|
62
|
+
- Typically uses **one** `<isreplace/>` tag
|
|
63
|
+
- Can use **multiple** `<isreplace/>` tags (content repeated at each location)
|
|
64
|
+
- Can use **zero** `<isreplace/>` tags (decorated content is omitted)
|
|
65
|
+
|
|
66
|
+
### isreplace Tag Behavior
|
|
67
|
+
|
|
68
|
+
| Number of `<isreplace/>` Tags | Result |
|
|
69
|
+
|-------------------------------|--------|
|
|
70
|
+
| **1** (typical) | Decorated content inserted at that location |
|
|
71
|
+
| **Multiple** | Decorated content inserted at each `<isreplace/>` location |
|
|
72
|
+
| **Zero** | Decorated content is omitted from output |
|
|
73
|
+
|
|
74
|
+
## Basic Example
|
|
75
|
+
|
|
76
|
+
### Content Template (product.isml)
|
|
77
|
+
|
|
78
|
+
```isml
|
|
79
|
+
<isdecorate template="common/layout/page">
|
|
80
|
+
<div class="product-details">
|
|
81
|
+
<h1>${pdict.Product.name}</h1>
|
|
82
|
+
<p>${pdict.Product.shortDescription}</p>
|
|
83
|
+
<span class="price">${pdict.Product.price}</span>
|
|
84
|
+
</div>
|
|
85
|
+
</isdecorate>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Decorator Template (common/layout/page.isml)
|
|
89
|
+
|
|
90
|
+
```isml
|
|
91
|
+
<!DOCTYPE html>
|
|
92
|
+
<html>
|
|
93
|
+
<head>
|
|
94
|
+
<title>${pdict.pageTitle}</title>
|
|
95
|
+
<link rel="stylesheet" href="${URLUtils.staticURL('/css/main.css')}">
|
|
96
|
+
</head>
|
|
97
|
+
<body>
|
|
98
|
+
<!-- Header -->
|
|
99
|
+
<isinclude template="common/header"/>
|
|
100
|
+
|
|
101
|
+
<!-- Main content area - decorated content inserted here -->
|
|
102
|
+
<main class="main-content">
|
|
103
|
+
<isreplace/>
|
|
104
|
+
</main>
|
|
105
|
+
|
|
106
|
+
<!-- Footer -->
|
|
107
|
+
<isinclude template="common/footer"/>
|
|
108
|
+
</body>
|
|
109
|
+
</html>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Resulting Output
|
|
113
|
+
|
|
114
|
+
```html
|
|
115
|
+
<!DOCTYPE html>
|
|
116
|
+
<html>
|
|
117
|
+
<head>
|
|
118
|
+
<title>Product Details</title>
|
|
119
|
+
<link rel="stylesheet" href="/css/main.css">
|
|
120
|
+
</head>
|
|
121
|
+
<body>
|
|
122
|
+
<!-- Header content -->
|
|
123
|
+
|
|
124
|
+
<main class="main-content">
|
|
125
|
+
<!-- Decorated content inserted here -->
|
|
126
|
+
<div class="product-details">
|
|
127
|
+
<h1>Awesome Product</h1>
|
|
128
|
+
<p>This is a great product.</p>
|
|
129
|
+
<span class="price">$99.99</span>
|
|
130
|
+
</div>
|
|
131
|
+
</main>
|
|
132
|
+
|
|
133
|
+
<!-- Footer content -->
|
|
134
|
+
</body>
|
|
135
|
+
</html>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Common Use Cases
|
|
139
|
+
|
|
140
|
+
### Standard Page Layout
|
|
141
|
+
|
|
142
|
+
Apply consistent header, navigation, and footer to all pages:
|
|
143
|
+
|
|
144
|
+
```isml
|
|
145
|
+
<!-- templates/default/product/productDetails.isml -->
|
|
146
|
+
<isdecorate template="common/layout/page">
|
|
147
|
+
<div class="product-container">
|
|
148
|
+
<h1>${pdict.Product.name}</h1>
|
|
149
|
+
<div class="product-info">
|
|
150
|
+
<!-- Product details -->
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</isdecorate>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Decorator template:**
|
|
157
|
+
```isml
|
|
158
|
+
<!-- templates/default/common/layout/page.isml -->
|
|
159
|
+
<!DOCTYPE html>
|
|
160
|
+
<html lang="${request.locale}">
|
|
161
|
+
<head>
|
|
162
|
+
<isinclude template="common/htmlhead"/>
|
|
163
|
+
</head>
|
|
164
|
+
<body>
|
|
165
|
+
<div class="page-wrapper">
|
|
166
|
+
<isinclude template="common/header"/>
|
|
167
|
+
<nav><isinclude template="common/navigation"/></nav>
|
|
168
|
+
|
|
169
|
+
<main role="main">
|
|
170
|
+
<isreplace/>
|
|
171
|
+
</main>
|
|
172
|
+
|
|
173
|
+
<isinclude template="common/footer"/>
|
|
174
|
+
</div>
|
|
175
|
+
<isinclude template="common/scripts"/>
|
|
176
|
+
</body>
|
|
177
|
+
</html>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Two-Column Layout
|
|
181
|
+
|
|
182
|
+
Create a sidebar layout with decorator:
|
|
183
|
+
|
|
184
|
+
```isml
|
|
185
|
+
<!-- Content template -->
|
|
186
|
+
<isdecorate template="layouts/twoColumn">
|
|
187
|
+
<div class="category-products">
|
|
188
|
+
<isloop items="${pdict.products}" var="product">
|
|
189
|
+
<div class="product-tile">${product.name}</div>
|
|
190
|
+
</isloop>
|
|
191
|
+
</div>
|
|
192
|
+
</isdecorate>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Decorator template:**
|
|
196
|
+
```isml
|
|
197
|
+
<!-- layouts/twoColumn.isml -->
|
|
198
|
+
<isdecorate template="common/layout/page">
|
|
199
|
+
<div class="two-column-layout">
|
|
200
|
+
<aside class="sidebar">
|
|
201
|
+
<isinclude template="search/refinements"/>
|
|
202
|
+
</aside>
|
|
203
|
+
|
|
204
|
+
<div class="main-column">
|
|
205
|
+
<isreplace/>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
</isdecorate>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Checkout Layout
|
|
212
|
+
|
|
213
|
+
Special layout for checkout pages:
|
|
214
|
+
|
|
215
|
+
```isml
|
|
216
|
+
<!-- checkout/shipping.isml -->
|
|
217
|
+
<isdecorate template="checkout/checkoutLayout">
|
|
218
|
+
<div class="shipping-form">
|
|
219
|
+
<h2>Shipping Information</h2>
|
|
220
|
+
<form action="${URLUtils.url('CheckoutShippingServices-SubmitShipping')}" method="post">
|
|
221
|
+
<!-- Shipping form fields -->
|
|
222
|
+
</form>
|
|
223
|
+
</div>
|
|
224
|
+
</isdecorate>
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Checkout decorator:**
|
|
228
|
+
```isml
|
|
229
|
+
<!-- checkout/checkoutLayout.isml -->
|
|
230
|
+
<!DOCTYPE html>
|
|
231
|
+
<html>
|
|
232
|
+
<head>
|
|
233
|
+
<title>Checkout - ${pdict.CurrentStep.displayName}</title>
|
|
234
|
+
</head>
|
|
235
|
+
<body class="checkout-page">
|
|
236
|
+
<isinclude template="checkout/checkoutHeader"/>
|
|
237
|
+
|
|
238
|
+
<div class="checkout-container">
|
|
239
|
+
<isinclude template="checkout/progressIndicator"/>
|
|
240
|
+
|
|
241
|
+
<main class="checkout-content">
|
|
242
|
+
<isreplace/>
|
|
243
|
+
</main>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<isinclude template="checkout/checkoutFooter"/>
|
|
247
|
+
</body>
|
|
248
|
+
</html>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Email Template Layout
|
|
252
|
+
|
|
253
|
+
Decorate email content with email-specific layout:
|
|
254
|
+
|
|
255
|
+
```isml
|
|
256
|
+
<!-- email/orderConfirmation.isml -->
|
|
257
|
+
<isdecorate template="email/emailLayout">
|
|
258
|
+
<h1>Order Confirmation</h1>
|
|
259
|
+
<p>Thank you for your order ${pdict.Order.orderNo}!</p>
|
|
260
|
+
|
|
261
|
+
<h2>Order Details</h2>
|
|
262
|
+
<table>
|
|
263
|
+
<isloop items="${pdict.Order.productLineItems}" var="lineItem">
|
|
264
|
+
<tr>
|
|
265
|
+
<td>${lineItem.productName}</td>
|
|
266
|
+
<td>${lineItem.price}</td>
|
|
267
|
+
</tr>
|
|
268
|
+
</isloop>
|
|
269
|
+
</table>
|
|
270
|
+
</isdecorate>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Email decorator:**
|
|
274
|
+
```isml
|
|
275
|
+
<!-- email/emailLayout.isml -->
|
|
276
|
+
<iscontent type="text/html" charset="UTF-8"/>
|
|
277
|
+
<!DOCTYPE html>
|
|
278
|
+
<html>
|
|
279
|
+
<head>
|
|
280
|
+
<style>
|
|
281
|
+
/* Email-safe inline styles */
|
|
282
|
+
body { font-family: Arial, sans-serif; }
|
|
283
|
+
</style>
|
|
284
|
+
</head>
|
|
285
|
+
<body>
|
|
286
|
+
<table width="600" cellpadding="0" cellspacing="0">
|
|
287
|
+
<tr>
|
|
288
|
+
<td>
|
|
289
|
+
<!-- Email header -->
|
|
290
|
+
<isinclude template="email/header"/>
|
|
291
|
+
</td>
|
|
292
|
+
</tr>
|
|
293
|
+
<tr>
|
|
294
|
+
<td>
|
|
295
|
+
<!-- Email content -->
|
|
296
|
+
<isreplace/>
|
|
297
|
+
</td>
|
|
298
|
+
</tr>
|
|
299
|
+
<tr>
|
|
300
|
+
<td>
|
|
301
|
+
<!-- Email footer -->
|
|
302
|
+
<isinclude template="email/footer"/>
|
|
303
|
+
</td>
|
|
304
|
+
</tr>
|
|
305
|
+
</table>
|
|
306
|
+
</body>
|
|
307
|
+
</html>
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Modal/Dialog Layout
|
|
311
|
+
|
|
312
|
+
Decorate modal content with modal wrapper:
|
|
313
|
+
|
|
314
|
+
```isml
|
|
315
|
+
<!-- account/quickView.isml -->
|
|
316
|
+
<isdecorate template="components/modalLayout">
|
|
317
|
+
<div class="quick-view-content">
|
|
318
|
+
<h2>${pdict.Product.name}</h2>
|
|
319
|
+
<img src="${pdict.Product.images.large[0].url}" alt="${pdict.Product.name}"/>
|
|
320
|
+
<div class="product-price">${pdict.Product.price}</div>
|
|
321
|
+
</div>
|
|
322
|
+
</isdecorate>
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Modal decorator:**
|
|
326
|
+
```isml
|
|
327
|
+
<!-- components/modalLayout.isml -->
|
|
328
|
+
<div class="modal-dialog">
|
|
329
|
+
<div class="modal-header">
|
|
330
|
+
<button class="close-button" aria-label="Close">×</button>
|
|
331
|
+
</div>
|
|
332
|
+
<div class="modal-body">
|
|
333
|
+
<isreplace/>
|
|
334
|
+
</div>
|
|
335
|
+
<div class="modal-footer">
|
|
336
|
+
<button class="btn-primary">Close</button>
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Nested Decorators
|
|
342
|
+
|
|
343
|
+
Decorators can be nested to arbitrary depth, allowing complex layout compositions:
|
|
344
|
+
|
|
345
|
+
```isml
|
|
346
|
+
<isdecorate template="layouts/basePage">
|
|
347
|
+
<isdecorate template="layouts/twoColumn">
|
|
348
|
+
<isdecorate template="components/panel">
|
|
349
|
+
<h1>Nested Content</h1>
|
|
350
|
+
<p>This content is wrapped by three decorator layers.</p>
|
|
351
|
+
</isdecorate>
|
|
352
|
+
</isdecorate>
|
|
353
|
+
</isdecorate>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Nested Example: Category Page
|
|
357
|
+
|
|
358
|
+
```isml
|
|
359
|
+
<!-- search/categoryLanding.isml -->
|
|
360
|
+
<!-- Outer: Page layout with header/footer -->
|
|
361
|
+
<isdecorate template="common/layout/page">
|
|
362
|
+
|
|
363
|
+
<!-- Middle: Two-column layout with sidebar -->
|
|
364
|
+
<isdecorate template="layouts/twoColumn">
|
|
365
|
+
|
|
366
|
+
<!-- Inner: Content panel with border/padding -->
|
|
367
|
+
<isdecorate template="components/contentPanel">
|
|
368
|
+
|
|
369
|
+
<!-- Actual content -->
|
|
370
|
+
<h1>${pdict.Category.displayName}</h1>
|
|
371
|
+
<div class="category-description">
|
|
372
|
+
${pdict.Category.description}
|
|
373
|
+
</div>
|
|
374
|
+
|
|
375
|
+
<div class="product-grid">
|
|
376
|
+
<isloop items="${pdict.products}" var="product">
|
|
377
|
+
<div class="product-tile">
|
|
378
|
+
${product.name}
|
|
379
|
+
</div>
|
|
380
|
+
</isloop>
|
|
381
|
+
</div>
|
|
382
|
+
|
|
383
|
+
</isdecorate>
|
|
384
|
+
</isdecorate>
|
|
385
|
+
|
|
386
|
+
</isdecorate>
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**Output structure:**
|
|
390
|
+
```
|
|
391
|
+
basePage (html/head/body/header/footer)
|
|
392
|
+
└─ twoColumn (sidebar + main column)
|
|
393
|
+
└─ contentPanel (border/padding/shadow)
|
|
394
|
+
└─ Actual category content
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Different Decorators in Nested Scenario
|
|
398
|
+
|
|
399
|
+
```isml
|
|
400
|
+
<isdecorate template="layouts/mainLayout">
|
|
401
|
+
<div class="left-section">
|
|
402
|
+
<isdecorate template="layouts/cardLayout">
|
|
403
|
+
<h2>Card Content 1</h2>
|
|
404
|
+
</isdecorate>
|
|
405
|
+
</div>
|
|
406
|
+
|
|
407
|
+
<div class="right-section">
|
|
408
|
+
<isdecorate template="layouts/panelLayout">
|
|
409
|
+
<h2>Panel Content 2</h2>
|
|
410
|
+
</isdecorate>
|
|
411
|
+
</div>
|
|
412
|
+
</isdecorate>
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
## Multiple isreplace Tags
|
|
416
|
+
|
|
417
|
+
A decorator can have multiple `<isreplace/>` tags, causing the decorated content to be inserted at each location:
|
|
418
|
+
|
|
419
|
+
### Decorator with Multiple Replacements
|
|
420
|
+
|
|
421
|
+
```isml
|
|
422
|
+
<!-- decorators/mirrorLayout.isml -->
|
|
423
|
+
<div class="mirror-layout">
|
|
424
|
+
<div class="top-section">
|
|
425
|
+
<h3>Top Section</h3>
|
|
426
|
+
<isreplace/>
|
|
427
|
+
</div>
|
|
428
|
+
|
|
429
|
+
<div class="middle-section">
|
|
430
|
+
<h3>Middle Section</h3>
|
|
431
|
+
<isreplace/>
|
|
432
|
+
</div>
|
|
433
|
+
|
|
434
|
+
<div class="bottom-section">
|
|
435
|
+
<h3>Bottom Section</h3>
|
|
436
|
+
<isreplace/>
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Using the Multi-Replace Decorator
|
|
442
|
+
|
|
443
|
+
```isml
|
|
444
|
+
<isdecorate template="decorators/mirrorLayout">
|
|
445
|
+
<p>This content appears three times!</p>
|
|
446
|
+
</isdecorate>
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Result
|
|
450
|
+
|
|
451
|
+
```html
|
|
452
|
+
<div class="mirror-layout">
|
|
453
|
+
<div class="top-section">
|
|
454
|
+
<h3>Top Section</h3>
|
|
455
|
+
<p>This content appears three times!</p>
|
|
456
|
+
</div>
|
|
457
|
+
|
|
458
|
+
<div class="middle-section">
|
|
459
|
+
<h3>Middle Section</h3>
|
|
460
|
+
<p>This content appears three times!</p>
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
<div class="bottom-section">
|
|
464
|
+
<h3>Bottom Section</h3>
|
|
465
|
+
<p>This content appears three times!</p>
|
|
466
|
+
</div>
|
|
467
|
+
</div>
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
## Zero isreplace Tags
|
|
471
|
+
|
|
472
|
+
If the decorator template has **no** `<isreplace/>` tags, the decorated content is **omitted** from the output:
|
|
473
|
+
|
|
474
|
+
### Decorator Without isreplace
|
|
475
|
+
|
|
476
|
+
```isml
|
|
477
|
+
<!-- decorators/noContentLayout.isml -->
|
|
478
|
+
<div class="wrapper">
|
|
479
|
+
<h1>Static Header</h1>
|
|
480
|
+
<p>This decorator ignores the decorated content.</p>
|
|
481
|
+
<!-- No <isreplace/> tag -->
|
|
482
|
+
<footer>Static Footer</footer>
|
|
483
|
+
</div>
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
### Using the No-Replace Decorator
|
|
487
|
+
|
|
488
|
+
```isml
|
|
489
|
+
<isdecorate template="decorators/noContentLayout">
|
|
490
|
+
<p>This content will NOT appear in the output!</p>
|
|
491
|
+
</isdecorate>
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
### Result
|
|
495
|
+
|
|
496
|
+
```html
|
|
497
|
+
<div class="wrapper">
|
|
498
|
+
<h1>Static Header</h1>
|
|
499
|
+
<p>This decorator ignores the decorated content.</p>
|
|
500
|
+
<footer>Static Footer</footer>
|
|
501
|
+
</div>
|
|
502
|
+
<!-- The decorated content is omitted -->
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
## Dynamic Decorator Selection
|
|
506
|
+
|
|
507
|
+
Use expressions to dynamically select decorators based on conditions:
|
|
508
|
+
|
|
509
|
+
```isml
|
|
510
|
+
<!-- Select layout based on page type -->
|
|
511
|
+
<isscript>
|
|
512
|
+
var layoutTemplate;
|
|
513
|
+
if (pdict.isCheckout) {
|
|
514
|
+
layoutTemplate = 'checkout/checkoutLayout';
|
|
515
|
+
} else if (pdict.isAccount) {
|
|
516
|
+
layoutTemplate = 'account/accountLayout';
|
|
517
|
+
} else {
|
|
518
|
+
layoutTemplate = 'common/layout/page';
|
|
519
|
+
}
|
|
520
|
+
</isscript>
|
|
521
|
+
|
|
522
|
+
<isdecorate template="${layoutTemplate}">
|
|
523
|
+
<div class="page-content">
|
|
524
|
+
${pdict.content}
|
|
525
|
+
</div>
|
|
526
|
+
</isdecorate>
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
### Responsive Layout Selection
|
|
530
|
+
|
|
531
|
+
```isml
|
|
532
|
+
<isscript>
|
|
533
|
+
var isMobile = request.httpUserAgent.indexOf('Mobile') > -1;
|
|
534
|
+
var layout = isMobile ? 'layouts/mobile' : 'layouts/desktop';
|
|
535
|
+
</isscript>
|
|
536
|
+
|
|
537
|
+
<isdecorate template="${layout}">
|
|
538
|
+
<div class="content">
|
|
539
|
+
<!-- Content here -->
|
|
540
|
+
</div>
|
|
541
|
+
</isdecorate>
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### A/B Test Layout
|
|
545
|
+
|
|
546
|
+
```isml
|
|
547
|
+
<isscript>
|
|
548
|
+
var experimentGroup = session.custom.experimentGroup;
|
|
549
|
+
var layout = (experimentGroup === 'A') ? 'layouts/variantA' : 'layouts/variantB';
|
|
550
|
+
</isscript>
|
|
551
|
+
|
|
552
|
+
<isdecorate template="${layout}">
|
|
553
|
+
<div class="experiment-content">
|
|
554
|
+
<!-- A/B tested content -->
|
|
555
|
+
</div>
|
|
556
|
+
</isdecorate>
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
## Best Practices
|
|
560
|
+
|
|
561
|
+
### Keep Decorators Simple
|
|
562
|
+
|
|
563
|
+
```isml
|
|
564
|
+
<!-- Good: Simple, focused decorator -->
|
|
565
|
+
<!DOCTYPE html>
|
|
566
|
+
<html>
|
|
567
|
+
<head><isinclude template="common/head"/></head>
|
|
568
|
+
<body>
|
|
569
|
+
<isinclude template="common/header"/>
|
|
570
|
+
<main><isreplace/></main>
|
|
571
|
+
<isinclude template="common/footer"/>
|
|
572
|
+
</body>
|
|
573
|
+
</html>
|
|
574
|
+
|
|
575
|
+
<!-- Avoid: Complex logic in decorators -->
|
|
576
|
+
<!DOCTYPE html>
|
|
577
|
+
<html>
|
|
578
|
+
<head>...</head>
|
|
579
|
+
<body>
|
|
580
|
+
<isif condition="${complex.logic}">
|
|
581
|
+
<!-- Lots of conditional rendering -->
|
|
582
|
+
</isif>
|
|
583
|
+
<isreplace/>
|
|
584
|
+
<!-- More complex logic -->
|
|
585
|
+
</body>
|
|
586
|
+
</html>
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
### Use Consistent Decorator Naming
|
|
590
|
+
|
|
591
|
+
```
|
|
592
|
+
templates/
|
|
593
|
+
decorators/
|
|
594
|
+
page.isml - Base page decorator
|
|
595
|
+
twoColumn.isml - Two-column layout
|
|
596
|
+
threeColumn.isml - Three-column layout
|
|
597
|
+
checkout/
|
|
598
|
+
checkoutLayout.isml - Checkout-specific decorator
|
|
599
|
+
email/
|
|
600
|
+
emailLayout.isml - Email template decorator
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### Provide Context via pdict
|
|
604
|
+
|
|
605
|
+
Pass necessary data to decorators through `pdict`:
|
|
606
|
+
|
|
607
|
+
```isml
|
|
608
|
+
<!-- Controller -->
|
|
609
|
+
res.render('product/details', {
|
|
610
|
+
Product: product,
|
|
611
|
+
pageTitle: product.name,
|
|
612
|
+
showBreadcrumbs: true,
|
|
613
|
+
layoutClass: 'product-page'
|
|
614
|
+
});
|
|
615
|
+
|
|
616
|
+
<!-- Decorator uses pdict -->
|
|
617
|
+
<!DOCTYPE html>
|
|
618
|
+
<html>
|
|
619
|
+
<head>
|
|
620
|
+
<title>${pdict.pageTitle}</title>
|
|
621
|
+
</head>
|
|
622
|
+
<body class="${pdict.layoutClass}">
|
|
623
|
+
<isif condition="${pdict.showBreadcrumbs}">
|
|
624
|
+
<isinclude template="components/breadcrumbs"/>
|
|
625
|
+
</isif>
|
|
626
|
+
<main><isreplace/></main>
|
|
627
|
+
</body>
|
|
628
|
+
</html>
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
### Document Decorator Requirements
|
|
632
|
+
|
|
633
|
+
Add comments documenting what pdict properties the decorator expects:
|
|
634
|
+
|
|
635
|
+
```isml
|
|
636
|
+
<!-- layouts/standardPage.isml -->
|
|
637
|
+
<iscomment>
|
|
638
|
+
Required pdict properties:
|
|
639
|
+
- pageTitle: String - Page title for <title> tag
|
|
640
|
+
- metaDescription: String - Meta description
|
|
641
|
+
- layoutClass: String - CSS class for <body>
|
|
642
|
+
|
|
643
|
+
Optional pdict properties:
|
|
644
|
+
- breadcrumbs: Array - Breadcrumb data
|
|
645
|
+
- showSidebar: Boolean - Whether to show sidebar
|
|
646
|
+
</iscomment>
|
|
647
|
+
|
|
648
|
+
<!DOCTYPE html>
|
|
649
|
+
<html>
|
|
650
|
+
<!-- Decorator implementation -->
|
|
651
|
+
</html>
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
### Avoid Deep Nesting
|
|
655
|
+
|
|
656
|
+
```isml
|
|
657
|
+
<!-- Acceptable: 2-3 levels of nesting -->
|
|
658
|
+
<isdecorate template="common/page">
|
|
659
|
+
<isdecorate template="layouts/twoColumn">
|
|
660
|
+
<div>Content</div>
|
|
661
|
+
</isdecorate>
|
|
662
|
+
</isdecorate>
|
|
663
|
+
|
|
664
|
+
<!-- Avoid: Excessive nesting (harder to debug) -->
|
|
665
|
+
<isdecorate template="level1">
|
|
666
|
+
<isdecorate template="level2">
|
|
667
|
+
<isdecorate template="level3">
|
|
668
|
+
<isdecorate template="level4">
|
|
669
|
+
<isdecorate template="level5">
|
|
670
|
+
<div>Too deeply nested!</div>
|
|
671
|
+
</isdecorate>
|
|
672
|
+
</isdecorate>
|
|
673
|
+
</isdecorate>
|
|
674
|
+
</isdecorate>
|
|
675
|
+
</isdecorate>
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
### Single Responsibility
|
|
679
|
+
|
|
680
|
+
Each decorator should have a single, clear purpose:
|
|
681
|
+
|
|
682
|
+
```isml
|
|
683
|
+
<!-- Good: Focused decorators -->
|
|
684
|
+
page.isml - Overall page structure
|
|
685
|
+
twoColumn.isml - Column layout
|
|
686
|
+
card.isml - Card styling
|
|
687
|
+
|
|
688
|
+
<!-- Avoid: Decorator trying to do too much -->
|
|
689
|
+
pageWithColumnsAndCardsAndModals.isml - Too many responsibilities
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
## Performance Considerations
|
|
693
|
+
|
|
694
|
+
### Cache Compatibility
|
|
695
|
+
|
|
696
|
+
Decorators work with cached templates—the entire decorated output is cached:
|
|
697
|
+
|
|
698
|
+
```isml
|
|
699
|
+
<!-- Both decorator and content are cached together -->
|
|
700
|
+
<iscache type="relative" hour="1"/>
|
|
701
|
+
<isdecorate template="common/layout/page">
|
|
702
|
+
<div class="cached-content">
|
|
703
|
+
${pdict.Product.name}
|
|
704
|
+
</div>
|
|
705
|
+
</isdecorate>
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
### Template Organization
|
|
709
|
+
|
|
710
|
+
Organize decorators for efficient loading:
|
|
711
|
+
|
|
712
|
+
```
|
|
713
|
+
cartridges/
|
|
714
|
+
app_storefront_base/
|
|
715
|
+
templates/
|
|
716
|
+
default/
|
|
717
|
+
decorators/ - Reusable decorators
|
|
718
|
+
page.isml
|
|
719
|
+
twoColumn.isml
|
|
720
|
+
common/
|
|
721
|
+
layout/
|
|
722
|
+
page.isml - Main page decorator
|
|
723
|
+
product/
|
|
724
|
+
productDetails.isml - Uses decorator
|
|
725
|
+
```
|
|
726
|
+
|
|
727
|
+
## Troubleshooting
|
|
728
|
+
|
|
729
|
+
### Content Not Appearing
|
|
730
|
+
|
|
731
|
+
**Problem:** Decorated content doesn't appear in output.
|
|
732
|
+
|
|
733
|
+
**Solution:** Ensure the decorator template has at least one `<isreplace/>` tag:
|
|
734
|
+
|
|
735
|
+
```isml
|
|
736
|
+
<!-- Decorator must include <isreplace/> -->
|
|
737
|
+
<div class="wrapper">
|
|
738
|
+
<isreplace/> <!-- Content inserted here -->
|
|
739
|
+
</div>
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
### Content Duplicated
|
|
743
|
+
|
|
744
|
+
**Problem:** Content appears multiple times.
|
|
745
|
+
|
|
746
|
+
**Solution:** Check if decorator has multiple `<isreplace/>` tags (intentional or unintentional):
|
|
747
|
+
|
|
748
|
+
```isml
|
|
749
|
+
<!-- This decorator will duplicate content -->
|
|
750
|
+
<div class="top"><isreplace/></div>
|
|
751
|
+
<div class="bottom"><isreplace/></div> <!-- Remove if duplication is unintended -->
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
### Decorator Not Found
|
|
755
|
+
|
|
756
|
+
**Problem:** Template not found error.
|
|
757
|
+
|
|
758
|
+
**Solution:** Verify decorator template path is correct:
|
|
759
|
+
|
|
760
|
+
```isml
|
|
761
|
+
<!-- Check template path -->
|
|
762
|
+
<isdecorate template="common/layout/page"> <!-- Correct path -->
|
|
763
|
+
<isdecorate template="layout/page"> <!-- May be wrong path -->
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
### Nested Decorator Issues
|
|
767
|
+
|
|
768
|
+
**Problem:** Nested decorators not rendering correctly.
|
|
769
|
+
|
|
770
|
+
**Solution:** Ensure each decorator has proper `<isreplace/>` tags and closing `</isdecorate>` tags:
|
|
771
|
+
|
|
772
|
+
```isml
|
|
773
|
+
<!-- Verify proper nesting -->
|
|
774
|
+
<isdecorate template="outer">
|
|
775
|
+
<isdecorate template="inner">
|
|
776
|
+
Content
|
|
777
|
+
</isdecorate> <!-- Don't forget closing tags -->
|
|
778
|
+
</isdecorate>
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
## Related Elements
|
|
782
|
+
|
|
783
|
+
- **`<isreplace/>`**: Marks where decorated content is inserted in decorator template
|
|
784
|
+
- **`<isinclude>`**: Includes templates without decoration (different use case)
|
|
785
|
+
- **`<ismodule>`**: Includes reusable components with parameters
|
|
786
|
+
|
|
787
|
+
## Comparison: isdecorate vs isinclude
|
|
788
|
+
|
|
789
|
+
| Feature | `<isdecorate>` | `<isinclude>` |
|
|
790
|
+
|---------|----------------|---------------|
|
|
791
|
+
| **Purpose** | Wrap content with layout | Insert template content |
|
|
792
|
+
| **Content flow** | Content goes into decorator | Included template renders in place |
|
|
793
|
+
| **Use case** | Page layouts, wrappers | Reusable components, partials |
|
|
794
|
+
| **Requires** | `<isreplace/>` in decorator | Nothing special |
|
|
795
|
+
|
|
796
|
+
```isml
|
|
797
|
+
<!-- isdecorate: Wraps content -->
|
|
798
|
+
<isdecorate template="layouts/page">
|
|
799
|
+
<h1>This is wrapped by the layout</h1>
|
|
800
|
+
</isdecorate>
|
|
801
|
+
|
|
802
|
+
<!-- isinclude: Inserts content -->
|
|
803
|
+
<isinclude template="components/header"/>
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
## Summary
|
|
807
|
+
|
|
808
|
+
The `<isdecorate>` element is powerful for:
|
|
809
|
+
|
|
810
|
+
- ✅ Creating reusable page layouts
|
|
811
|
+
- ✅ Applying consistent structure (header/footer/navigation)
|
|
812
|
+
- ✅ Separating content from presentation
|
|
813
|
+
- ✅ Supporting nested layout hierarchies
|
|
814
|
+
- ✅ Enabling dynamic layout selection
|
|
815
|
+
- ✅ Maintaining DRY (Don't Repeat Yourself) principle
|
|
816
|
+
- ✅ Simplifying template maintenance
|
|
817
|
+
|
|
818
|
+
Use `<isdecorate>` to build maintainable, consistent page structures throughout your B2C Commerce storefront.
|