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,234 @@
|
|
|
1
|
+
# SFRA Model Project Structure Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for the default SFRA model directory structure in `app_storefront_base`.
|
|
4
|
+
|
|
5
|
+
## Directory Organization
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
cartridge/models/
|
|
9
|
+
├── account.js # Customer account model
|
|
10
|
+
├── address.js # Address transformation model
|
|
11
|
+
├── billing.js # Billing information model
|
|
12
|
+
├── cart.js # Shopping cart model with totals
|
|
13
|
+
├── categories.js # Category navigation model
|
|
14
|
+
├── content.js # Content asset model
|
|
15
|
+
├── locale.js # Locale and currency model
|
|
16
|
+
├── order.js # Order model for order history
|
|
17
|
+
├── payment.js # Payment instrument model
|
|
18
|
+
├── productLineItems.js # Collection of product line items
|
|
19
|
+
├── shipping.js # Shipping address and methods
|
|
20
|
+
├── store.js # Individual store model
|
|
21
|
+
├── stores.js # Store locator collection model
|
|
22
|
+
├── totals.js # Order/cart totals calculation model
|
|
23
|
+
├── price/ # Price-related models
|
|
24
|
+
│ ├── default.js # Standard price model
|
|
25
|
+
│ ├── range.js # Price range model (min-max)
|
|
26
|
+
│ └── tiered.js # Tiered pricing model
|
|
27
|
+
├── product/ # Product-related models
|
|
28
|
+
│ ├── bonusProduct.js # Bonus/promotional product model
|
|
29
|
+
│ ├── fullProduct.js # Complete product details model
|
|
30
|
+
│ ├── productAttributes.js # Product attributes model
|
|
31
|
+
│ ├── productBundle.js # Product bundle model
|
|
32
|
+
│ ├── productImages.js # Product images model
|
|
33
|
+
│ ├── productSet.js # Product set model
|
|
34
|
+
│ ├── productTile.js # Product tile/listing model
|
|
35
|
+
│ └── decorators/ # Product decorator functions
|
|
36
|
+
│ ├── index.js # Decorator registry
|
|
37
|
+
│ ├── attributes.js # Product attributes decorator
|
|
38
|
+
│ ├── availability.js # Stock availability decorator
|
|
39
|
+
│ ├── base.js # Core product information
|
|
40
|
+
│ ├── bonusUnitPrice.js # Bonus pricing decorator
|
|
41
|
+
│ ├── bundleReadyToOrder.js # Bundle ordering readiness
|
|
42
|
+
│ ├── bundledProducts.js # Bundle component products
|
|
43
|
+
│ ├── currentUrl.js # Product URL decorator
|
|
44
|
+
│ ├── description.js # Product description decorator
|
|
45
|
+
│ ├── images.js # Product images decorator
|
|
46
|
+
│ ├── online.js # Online availability decorator
|
|
47
|
+
│ ├── options.js # Product options decorator
|
|
48
|
+
│ ├── pageMetaData.js # SEO metadata decorator
|
|
49
|
+
│ ├── price.js # Price calculation decorator
|
|
50
|
+
│ ├── promotions.js # Promotional pricing decorator
|
|
51
|
+
│ ├── quantity.js # Quantity handling decorator
|
|
52
|
+
│ ├── quantitySelector.js # Quantity selector decorator
|
|
53
|
+
│ ├── ratings.js # Product ratings decorator
|
|
54
|
+
│ ├── raw.js # Raw API object decorator
|
|
55
|
+
│ ├── readyToOrder.js # Order readiness decorator
|
|
56
|
+
│ ├── searchPrice.js # Search result pricing
|
|
57
|
+
│ ├── searchVariationAttributes.js # Search variation handling
|
|
58
|
+
│ ├── setIndividualProducts.js # Product set individuals
|
|
59
|
+
│ ├── setProductsCollection.js # Product set collection
|
|
60
|
+
│ ├── setReadyToOrder.js # Set ordering readiness
|
|
61
|
+
│ ├── sizeChart.js # Size chart decorator
|
|
62
|
+
│ ├── template.js # Template selection decorator
|
|
63
|
+
│ └── variationAttributes.js # Variation attributes decorator
|
|
64
|
+
├── productLineItem/ # Product line item models
|
|
65
|
+
│ ├── bonusOrderLineItem.js # Bonus order line item
|
|
66
|
+
│ ├── bonusProductLineItem.js # Bonus product line item
|
|
67
|
+
│ ├── bundleLineItem.js # Bundle line item model
|
|
68
|
+
│ ├── bundleOrderLineItem.js # Bundle order line item
|
|
69
|
+
│ ├── orderLineItem.js # Order line item model
|
|
70
|
+
│ ├── productLineItem.js # Cart line item model
|
|
71
|
+
│ └── decorators/ # Line item decorators
|
|
72
|
+
│ ├── index.js # Decorator registry
|
|
73
|
+
│ ├── appliedPromotions.js # Applied promotion decorator
|
|
74
|
+
│ ├── bonusProductLineItem.js # Bonus product decorator
|
|
75
|
+
│ ├── bonusProductLineItemUUID.js # Bonus UUID decorator
|
|
76
|
+
│ ├── bonusUnitPrice.js # Bonus pricing decorator
|
|
77
|
+
│ ├── bundledProductLineItems.js # Bundle items decorator
|
|
78
|
+
│ ├── discountBonusLineItems.js # Discount bonus decorator
|
|
79
|
+
│ ├── gift.js # Gift message decorator
|
|
80
|
+
│ ├── options.js # Line item options decorator
|
|
81
|
+
│ ├── orderable.js # Orderability decorator
|
|
82
|
+
│ ├── preOrderUUID.js # Pre-order UUID decorator
|
|
83
|
+
│ ├── priceTotal.js # Price total decorator
|
|
84
|
+
│ ├── quantity.js # Quantity decorator
|
|
85
|
+
│ ├── quantityOptions.js # Quantity options decorator
|
|
86
|
+
│ ├── renderedPromotions.js # Rendered promotions decorator
|
|
87
|
+
│ ├── shipment.js # Shipment decorator
|
|
88
|
+
│ └── uuid.js # UUID decorator
|
|
89
|
+
├── search/ # Search-related models
|
|
90
|
+
│ ├── contentSearch.js # Content search results model
|
|
91
|
+
│ ├── productSearch.js # Product search results model
|
|
92
|
+
│ ├── productSortOptions.js # Sort options model
|
|
93
|
+
│ ├── attributeRefinementValue/ # Search refinement models
|
|
94
|
+
│ └── suggestions/ # Search suggestion models
|
|
95
|
+
└── shipping/ # Shipping-related models
|
|
96
|
+
└── shippingMethod.js # Shipping method model
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Key Model Categories
|
|
100
|
+
|
|
101
|
+
### 1. Core Commerce Models
|
|
102
|
+
|
|
103
|
+
| Model | Purpose |
|
|
104
|
+
|-------|---------|
|
|
105
|
+
| `cart.js` | Central shopping cart with totals, line items, promotions |
|
|
106
|
+
| `order.js` | Order model for history and confirmation pages |
|
|
107
|
+
| `account.js` | Customer account information and preferences |
|
|
108
|
+
| `payment.js` | Payment instruments and billing information |
|
|
109
|
+
| `totals.js` | Cart/order total calculations |
|
|
110
|
+
|
|
111
|
+
### 2. Product Models
|
|
112
|
+
|
|
113
|
+
| Model | Purpose |
|
|
114
|
+
|-------|---------|
|
|
115
|
+
| `product/fullProduct.js` | Complete product details for PDP |
|
|
116
|
+
| `product/productTile.js` | Lightweight product info for listings |
|
|
117
|
+
| `product/productBundle.js` | Bundle product handling |
|
|
118
|
+
| `product/productSet.js` | Product set handling |
|
|
119
|
+
| `product/decorators/` | Modular product enhancement functions |
|
|
120
|
+
|
|
121
|
+
### 3. Line Item Models
|
|
122
|
+
|
|
123
|
+
| Model | Purpose |
|
|
124
|
+
|-------|---------|
|
|
125
|
+
| `productLineItem/productLineItem.js` | Cart line items |
|
|
126
|
+
| `productLineItem/orderLineItem.js` | Order line items |
|
|
127
|
+
| `productLineItem/bundleLineItem.js` | Bundle line items |
|
|
128
|
+
| `productLineItem/decorators/` | Line item enhancement functions |
|
|
129
|
+
|
|
130
|
+
### 4. Pricing Models
|
|
131
|
+
|
|
132
|
+
| Model | Purpose |
|
|
133
|
+
|-------|---------|
|
|
134
|
+
| `price/default.js` | Standard pricing model |
|
|
135
|
+
| `price/range.js` | Price range for variable pricing |
|
|
136
|
+
| `price/tiered.js` | Volume-based pricing tiers |
|
|
137
|
+
|
|
138
|
+
### 5. Location & Shipping Models
|
|
139
|
+
|
|
140
|
+
| Model | Purpose |
|
|
141
|
+
|-------|---------|
|
|
142
|
+
| `store.js` & `stores.js` | Store locator functionality |
|
|
143
|
+
| `shipping.js` | Shipping address and method selection |
|
|
144
|
+
| `shipping/shippingMethod.js` | Individual shipping method |
|
|
145
|
+
| `address.js` | Address transformation and validation |
|
|
146
|
+
|
|
147
|
+
### 6. Search Models
|
|
148
|
+
|
|
149
|
+
| Model | Purpose |
|
|
150
|
+
|-------|---------|
|
|
151
|
+
| `search/productSearch.js` | Search results and refinements |
|
|
152
|
+
| `search/contentSearch.js` | Content search functionality |
|
|
153
|
+
| `search/productSortOptions.js` | Sorting options for search |
|
|
154
|
+
|
|
155
|
+
## Model Inheritance Patterns
|
|
156
|
+
|
|
157
|
+
### Decorator Pattern (Product Models)
|
|
158
|
+
|
|
159
|
+
```javascript
|
|
160
|
+
// product/decorators/index.js - Central decorator registry
|
|
161
|
+
module.exports = {
|
|
162
|
+
base: require('*/cartridge/models/product/decorators/base'),
|
|
163
|
+
price: require('*/cartridge/models/product/decorators/price'),
|
|
164
|
+
images: require('*/cartridge/models/product/decorators/images'),
|
|
165
|
+
availability: require('*/cartridge/models/product/decorators/availability'),
|
|
166
|
+
// ... other decorators
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// Usage in fullProduct.js
|
|
170
|
+
var decorators = require('*/cartridge/models/product/decorators/index');
|
|
171
|
+
|
|
172
|
+
function fullProduct(product, apiProduct, options) {
|
|
173
|
+
decorators.base(product, apiProduct, options.productType);
|
|
174
|
+
decorators.price(product, apiProduct, options.promotions);
|
|
175
|
+
decorators.images(product, apiProduct, options);
|
|
176
|
+
return product;
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Composition Pattern (Complex Models)
|
|
181
|
+
|
|
182
|
+
```javascript
|
|
183
|
+
// cart.js - Composes multiple sub-models
|
|
184
|
+
var TotalsModel = require('*/cartridge/models/totals');
|
|
185
|
+
var ProductLineItemsModel = require('*/cartridge/models/productLineItems');
|
|
186
|
+
|
|
187
|
+
function Cart(basket) {
|
|
188
|
+
this.totals = new TotalsModel(basket);
|
|
189
|
+
this.items = new ProductLineItemsModel(basket.productLineItems);
|
|
190
|
+
this.shipments = createShipmentModels(basket.shipments);
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Factory Pattern (Conditional Models)
|
|
195
|
+
|
|
196
|
+
```javascript
|
|
197
|
+
// Different models based on product type
|
|
198
|
+
function createProductModel(apiProduct, type) {
|
|
199
|
+
switch (type) {
|
|
200
|
+
case 'full':
|
|
201
|
+
return require('*/cartridge/models/product/fullProduct');
|
|
202
|
+
case 'tile':
|
|
203
|
+
return require('*/cartridge/models/product/productTile');
|
|
204
|
+
case 'bundle':
|
|
205
|
+
return require('*/cartridge/models/product/productBundle');
|
|
206
|
+
default:
|
|
207
|
+
return require('*/cartridge/models/product/fullProduct');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Best Practices for Structure
|
|
213
|
+
|
|
214
|
+
1. **Follow the Directory Convention** - Maintain the same directory structure in custom cartridges
|
|
215
|
+
2. **Use Decorator Registries** - Create `index.js` files to register and export decorators
|
|
216
|
+
3. **Separate Concerns** - Keep pricing, images, and availability in separate decorators
|
|
217
|
+
4. **Maintain Model Hierarchy** - Extend base models rather than replacing entirely
|
|
218
|
+
5. **Consistent Naming** - Follow SFRA naming conventions for predictable imports
|
|
219
|
+
|
|
220
|
+
## Custom Cartridge Model Structure
|
|
221
|
+
|
|
222
|
+
When creating custom models, mirror the base structure:
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
app_custom/cartridge/models/
|
|
226
|
+
├── account.js # Extends base account model
|
|
227
|
+
├── product/
|
|
228
|
+
│ ├── fullProduct.js # Extends base full product
|
|
229
|
+
│ └── decorators/
|
|
230
|
+
│ ├── index.js # Re-exports base + custom decorators
|
|
231
|
+
│ └── customAttr.js # New custom decorator
|
|
232
|
+
└── custom/
|
|
233
|
+
└── myCustomModel.js # Brand new model
|
|
234
|
+
```
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
# SFRA Model Testing & Security Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for testing, performance optimization, and security considerations for SFRA models.
|
|
4
|
+
|
|
5
|
+
## Unit Testing Models
|
|
6
|
+
|
|
7
|
+
```javascript
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
var assert = require('chai').assert;
|
|
11
|
+
var AccountModel = require('../../../cartridges/app_custom/cartridge/models/account');
|
|
12
|
+
|
|
13
|
+
describe('Account Model', function() {
|
|
14
|
+
var mockCustomer;
|
|
15
|
+
var mockProfile;
|
|
16
|
+
var mockAddressBook;
|
|
17
|
+
|
|
18
|
+
beforeEach(function() {
|
|
19
|
+
mockProfile = {
|
|
20
|
+
firstName: 'John',
|
|
21
|
+
lastName: 'Doe',
|
|
22
|
+
email: 'john.doe@example.com',
|
|
23
|
+
custom: {
|
|
24
|
+
loyaltyNumber: 'LP123456',
|
|
25
|
+
loyaltyTier: 'Gold',
|
|
26
|
+
loyaltyPoints: 1500
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
mockCustomer = {
|
|
31
|
+
authenticated: true,
|
|
32
|
+
profile: mockProfile
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
mockAddressBook = {
|
|
36
|
+
addresses: []
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('Constructor', function() {
|
|
41
|
+
it('should create account with loyalty program data', function() {
|
|
42
|
+
var account = new AccountModel(mockCustomer, mockAddressBook, {});
|
|
43
|
+
|
|
44
|
+
assert.isNotNull(account.loyaltyProgram);
|
|
45
|
+
assert.equal(account.loyaltyProgram.number, 'LP123456');
|
|
46
|
+
assert.equal(account.loyaltyProgram.tier, 'Gold');
|
|
47
|
+
assert.equal(account.loyaltyProgram.points, 1500);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('should handle customer without loyalty program', function() {
|
|
51
|
+
delete mockCustomer.profile.custom;
|
|
52
|
+
var account = new AccountModel(mockCustomer, mockAddressBook, {});
|
|
53
|
+
|
|
54
|
+
assert.isNull(account.loyaltyProgram);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Testing Decorators
|
|
61
|
+
|
|
62
|
+
```javascript
|
|
63
|
+
'use strict';
|
|
64
|
+
|
|
65
|
+
var assert = require('chai').assert;
|
|
66
|
+
var socialMedia = require('../../../cartridge/models/product/decorators/socialMedia');
|
|
67
|
+
|
|
68
|
+
describe('Social Media Decorator', function() {
|
|
69
|
+
var mockProduct;
|
|
70
|
+
var mockApiProduct;
|
|
71
|
+
|
|
72
|
+
beforeEach(function() {
|
|
73
|
+
mockProduct = {};
|
|
74
|
+
mockApiProduct = {
|
|
75
|
+
ID: 'test-product',
|
|
76
|
+
name: 'Test Product',
|
|
77
|
+
shortDescription: { markup: 'Test description' },
|
|
78
|
+
brand: 'TestBrand',
|
|
79
|
+
primaryCategory: { displayName: 'Test Category' },
|
|
80
|
+
getImages: function() {
|
|
81
|
+
return [{ getURL: function() { return 'http://example.com/image.jpg'; }}];
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should add social sharing data to product', function() {
|
|
87
|
+
socialMedia(mockProduct, mockApiProduct);
|
|
88
|
+
|
|
89
|
+
assert.isDefined(mockProduct.social);
|
|
90
|
+
assert.isDefined(mockProduct.social.facebook);
|
|
91
|
+
assert.isDefined(mockProduct.social.twitter);
|
|
92
|
+
assert.isDefined(mockProduct.social.pinterest);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('should not return a new object', function() {
|
|
96
|
+
var result = socialMedia(mockProduct, mockApiProduct);
|
|
97
|
+
|
|
98
|
+
assert.isUndefined(result); // Decorators should not return
|
|
99
|
+
assert.isDefined(mockProduct.social); // Should mutate original
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Performance Best Practices
|
|
105
|
+
|
|
106
|
+
### Minimize API Calls
|
|
107
|
+
|
|
108
|
+
```javascript
|
|
109
|
+
// ❌ Bad: Multiple API calls in loop
|
|
110
|
+
function getBadProductData(productIds) {
|
|
111
|
+
var products = [];
|
|
112
|
+
for (var i = 0; i < productIds.length; i++) {
|
|
113
|
+
var product = ProductMgr.getProduct(productIds[i]); // API call per product!
|
|
114
|
+
products.push(transformProduct(product));
|
|
115
|
+
}
|
|
116
|
+
return products;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// ✅ Good: Single API call with batch processing
|
|
120
|
+
function getGoodProductData(productIds) {
|
|
121
|
+
var ProductSearchModel = require('dw/catalog/ProductSearchModel');
|
|
122
|
+
var searchModel = new ProductSearchModel();
|
|
123
|
+
searchModel.setProductIDs(productIds);
|
|
124
|
+
searchModel.search();
|
|
125
|
+
|
|
126
|
+
var products = [];
|
|
127
|
+
var productHits = searchModel.getProductSearchHits();
|
|
128
|
+
|
|
129
|
+
while (productHits.hasNext()) {
|
|
130
|
+
var productHit = productHits.next();
|
|
131
|
+
products.push(transformProduct(productHit.product));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return products;
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Efficient Data Transformation
|
|
139
|
+
|
|
140
|
+
```javascript
|
|
141
|
+
'use strict';
|
|
142
|
+
|
|
143
|
+
var collections = require('*/cartridge/scripts/util/collections');
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Transform collection efficiently using collections.map
|
|
147
|
+
*/
|
|
148
|
+
function transformProductLineItems(lineItems) {
|
|
149
|
+
return collections.map(lineItems, function(lineItem) {
|
|
150
|
+
return {
|
|
151
|
+
productID: lineItem.productID,
|
|
152
|
+
productName: lineItem.productName,
|
|
153
|
+
price: lineItem.price.value,
|
|
154
|
+
quantity: lineItem.quantity.value
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Filter and transform in single pass
|
|
161
|
+
*/
|
|
162
|
+
function getAvailableProducts(products) {
|
|
163
|
+
return collections.map(
|
|
164
|
+
collections.select(products, function(product) {
|
|
165
|
+
return product.online && product.availabilityModel.available;
|
|
166
|
+
}),
|
|
167
|
+
function(product) {
|
|
168
|
+
return transformProductTile(product);
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Caching Strategies
|
|
175
|
+
|
|
176
|
+
```javascript
|
|
177
|
+
'use strict';
|
|
178
|
+
|
|
179
|
+
var CacheMgr = require('dw/system/CacheMgr');
|
|
180
|
+
|
|
181
|
+
// Use appropriate cache for the data type
|
|
182
|
+
var shortTermCache = CacheMgr.getCache('ShortTerm'); // Minutes
|
|
183
|
+
var mediumTermCache = CacheMgr.getCache('MediumTerm'); // Hours
|
|
184
|
+
var longTermCache = CacheMgr.getCache('LongTerm'); // Days
|
|
185
|
+
|
|
186
|
+
// Cache expensive computations
|
|
187
|
+
function getCachedRecommendations(productId, maxItems) {
|
|
188
|
+
var cacheKey = 'recs_' + productId + '_' + maxItems;
|
|
189
|
+
var cached = mediumTermCache.get(cacheKey);
|
|
190
|
+
|
|
191
|
+
if (cached) {
|
|
192
|
+
return cached;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var recommendations = computeRecommendations(productId, maxItems);
|
|
196
|
+
mediumTermCache.put(cacheKey, recommendations, 3600); // 1 hour
|
|
197
|
+
|
|
198
|
+
return recommendations;
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Security Considerations
|
|
203
|
+
|
|
204
|
+
### Data Sanitization
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
'use strict';
|
|
208
|
+
|
|
209
|
+
var StringUtils = require('dw/util/StringUtils');
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Sanitize user-generated content in models
|
|
213
|
+
*/
|
|
214
|
+
function sanitizeCustomerData(customer) {
|
|
215
|
+
return {
|
|
216
|
+
firstName: StringUtils.encodeString(
|
|
217
|
+
customer.profile.firstName,
|
|
218
|
+
StringUtils.ENCODE_TYPE_HTML
|
|
219
|
+
),
|
|
220
|
+
lastName: StringUtils.encodeString(
|
|
221
|
+
customer.profile.lastName,
|
|
222
|
+
StringUtils.ENCODE_TYPE_HTML
|
|
223
|
+
),
|
|
224
|
+
email: customer.profile.email // Email validation handled elsewhere
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Remove sensitive data from model output
|
|
230
|
+
*/
|
|
231
|
+
function sanitizePaymentInstrument(paymentInstrument) {
|
|
232
|
+
return {
|
|
233
|
+
UUID: paymentInstrument.UUID,
|
|
234
|
+
maskedCreditCardNumber: paymentInstrument.maskedCreditCardNumber,
|
|
235
|
+
creditCardType: paymentInstrument.creditCardType,
|
|
236
|
+
// NEVER expose: creditCardNumber, securityCode
|
|
237
|
+
expirationMonth: paymentInstrument.expirationMonth,
|
|
238
|
+
expirationYear: paymentInstrument.expirationYear
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Access Control in Models
|
|
244
|
+
|
|
245
|
+
```javascript
|
|
246
|
+
'use strict';
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Customer Model with Privacy Controls
|
|
250
|
+
*/
|
|
251
|
+
function Customer(apiCustomer, viewingCustomer) {
|
|
252
|
+
// Public information always available
|
|
253
|
+
this.customerNumber = apiCustomer.customerNo;
|
|
254
|
+
|
|
255
|
+
// Private information only for authenticated customer
|
|
256
|
+
if (viewingCustomer && viewingCustomer.UUID === apiCustomer.UUID) {
|
|
257
|
+
this.profile = getCustomerProfile(apiCustomer);
|
|
258
|
+
this.addresses = getCustomerAddresses(apiCustomer);
|
|
259
|
+
this.orders = getCustomerOrders(apiCustomer);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Admin-only information
|
|
263
|
+
if (viewingCustomer && hasAdminPermission(viewingCustomer)) {
|
|
264
|
+
this.internalNotes = apiCustomer.custom.internalNotes;
|
|
265
|
+
this.riskScore = apiCustomer.custom.riskScore;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function hasAdminPermission(customer) {
|
|
270
|
+
// Check customer group membership
|
|
271
|
+
return customer.customerGroups.some(function(group) {
|
|
272
|
+
return group.ID === 'Administrators';
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Preventing Data Leaks
|
|
278
|
+
|
|
279
|
+
```javascript
|
|
280
|
+
// ❌ Bad: Returning entire API object
|
|
281
|
+
function getProductData(product) {
|
|
282
|
+
return {
|
|
283
|
+
product: product // Exposes all API methods and properties!
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// ✅ Good: Whitelist specific properties
|
|
288
|
+
function getProductData(product) {
|
|
289
|
+
return {
|
|
290
|
+
id: product.ID,
|
|
291
|
+
name: product.name,
|
|
292
|
+
price: product.priceModel.price.value,
|
|
293
|
+
available: product.availabilityModel.available
|
|
294
|
+
// Only expose what's needed
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## JSDoc Documentation Standards
|
|
300
|
+
|
|
301
|
+
```javascript
|
|
302
|
+
'use strict';
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Enhanced Product Model
|
|
306
|
+
*
|
|
307
|
+
* @namespace ProductModel
|
|
308
|
+
* @description Provides a comprehensive JSON representation of SFCC Product objects
|
|
309
|
+
*/
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Create enhanced product model
|
|
313
|
+
*
|
|
314
|
+
* @memberof ProductModel
|
|
315
|
+
* @param {dw.catalog.Product} apiProduct - SFCC Product API object
|
|
316
|
+
* @param {Object} options - Configuration options
|
|
317
|
+
* @param {dw.catalog.ProductVariationModel} options.variationModel - Variation model
|
|
318
|
+
* @param {number} options.quantity - Selected quantity
|
|
319
|
+
* @param {dw.util.Collection<dw.campaign.Promotion>} options.promotions - Active promotions
|
|
320
|
+
*
|
|
321
|
+
* @returns {Object} Enhanced product model with following structure:
|
|
322
|
+
* @returns {string} returns.id - Product ID
|
|
323
|
+
* @returns {string} returns.productName - Localized product name
|
|
324
|
+
* @returns {string} returns.productType - Type: 'master', 'variant', 'simple', 'bundle', 'set'
|
|
325
|
+
* @returns {Object} returns.price - Price information
|
|
326
|
+
* @returns {Array<Object>} returns.images - Product images
|
|
327
|
+
* @returns {Object} returns.availability - Availability information
|
|
328
|
+
*
|
|
329
|
+
* @throws {Error} Throws error if apiProduct is null or undefined
|
|
330
|
+
*
|
|
331
|
+
* @since 1.0.0
|
|
332
|
+
* @version 2.1.0 - Added sustainability attributes
|
|
333
|
+
*/
|
|
334
|
+
function createEnhancedProduct(apiProduct, options) {
|
|
335
|
+
if (!apiProduct) {
|
|
336
|
+
throw new Error('apiProduct is required');
|
|
337
|
+
}
|
|
338
|
+
// Implementation
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
module.exports = createEnhancedProduct;
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## Controller Integration Pattern
|
|
345
|
+
|
|
346
|
+
```javascript
|
|
347
|
+
'use strict';
|
|
348
|
+
|
|
349
|
+
var server = require('server');
|
|
350
|
+
var BasketMgr = require('dw/order/BasketMgr');
|
|
351
|
+
var CartModel = require('*/cartridge/models/cart');
|
|
352
|
+
var AccountModel = require('*/cartridge/models/account');
|
|
353
|
+
|
|
354
|
+
server.post('AddToCart', function (req, res, next) {
|
|
355
|
+
var currentBasket = BasketMgr.getCurrentBasket();
|
|
356
|
+
var customer = req.currentCustomer;
|
|
357
|
+
|
|
358
|
+
// Perform cart operations
|
|
359
|
+
var result = addProductToCart(req.form.pid, req.form.quantity);
|
|
360
|
+
|
|
361
|
+
if (result.success) {
|
|
362
|
+
// Create models for response
|
|
363
|
+
var cartModel = new CartModel(currentBasket);
|
|
364
|
+
|
|
365
|
+
// Add customer-specific data if authenticated
|
|
366
|
+
if (customer.authenticated) {
|
|
367
|
+
var accountModel = new AccountModel(customer.raw);
|
|
368
|
+
cartModel.customer = accountModel;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Return JSON response with models
|
|
372
|
+
res.json({
|
|
373
|
+
success: true,
|
|
374
|
+
cart: cartModel,
|
|
375
|
+
message: Resource.msg('cart.add.success', 'cart', null)
|
|
376
|
+
});
|
|
377
|
+
} else {
|
|
378
|
+
res.json({
|
|
379
|
+
success: false,
|
|
380
|
+
error: result.error
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
next();
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
module.exports = server.exports();
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## Test Coverage Guidelines
|
|
391
|
+
|
|
392
|
+
| Model Type | Required Tests |
|
|
393
|
+
|------------|----------------|
|
|
394
|
+
| Simple Data Models | Constructor, null handling, property mapping |
|
|
395
|
+
| Decorator Models | Mutation (not cloning), property addition, edge cases |
|
|
396
|
+
| Factory Models | Each variant, default case, invalid type handling |
|
|
397
|
+
| Composite Models | Sub-model creation, null components, integration |
|
|
398
|
+
| Cached Models | Cache hit, cache miss, expiration, key generation |
|
|
399
|
+
|
|
400
|
+
## Performance Testing
|
|
401
|
+
|
|
402
|
+
```javascript
|
|
403
|
+
describe('Model Performance', function() {
|
|
404
|
+
it('should create product model in under 50ms', function() {
|
|
405
|
+
var start = Date.now();
|
|
406
|
+
|
|
407
|
+
for (var i = 0; i < 100; i++) {
|
|
408
|
+
new ProductModel(mockApiProduct, mockOptions);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
var elapsed = Date.now() - start;
|
|
412
|
+
var avgTime = elapsed / 100;
|
|
413
|
+
|
|
414
|
+
assert.isBelow(avgTime, 50, 'Average model creation should be under 50ms');
|
|
415
|
+
});
|
|
416
|
+
});
|
|
417
|
+
```
|
package/{docs/best-practices/sfra_scss.md → dist/ai-instructions/skills/sfcc-sfra-scss/SKILL.md}
RENAMED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sfcc-sfra-scss
|
|
3
|
+
description: Best practices for styling and theming SFRA storefronts using SCSS. Use when asked to create style overrides, theming, responsive layouts, or CSS customizations in SFCC.
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
## SFRA SCSS Best Practices (AI-Agent Optimized)
|
|
2
7
|
|
|
3
8
|
Purpose: Provide a concise, implementation‑ready reference for styling and theming Salesforce B2C Commerce SFRA storefronts using SCSS. Optimized for automated reasoning, safe overrides, upgrade resilience, and performant output.
|