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.
Files changed (865) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +3 -1
  2. package/.github/ISSUE_TEMPLATE/documentation.yml +2 -2
  3. package/.github/ISSUE_TEMPLATE/question.yml +1 -1
  4. package/.github/PULL_REQUEST_TEMPLATE/documentation.md +1 -1
  5. package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +1 -1
  6. package/.github/agents/official-docs-researcher.agent.md +56 -0
  7. package/.github/instructions/mcp-node-tests.instructions.md +12 -916
  8. package/.github/instructions/mcp-yml-tests.instructions.md +14 -742
  9. package/.github/pull_request_template.md +1 -1
  10. package/.github/skills/agent-authoring/SKILL.md +66 -0
  11. package/.github/skills/mcp-log-debugging/SKILL.md +69 -0
  12. package/.github/skills/mcp-programmatic-testing/SKILL.md +142 -0
  13. package/.github/skills/mcp-yaml-testing/SKILL.md +136 -0
  14. package/.github/skills/salesforce-developer-site-scraper/SKILL.md +102 -0
  15. package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +205 -0
  16. package/.github/skills/salesforce-help-site-scraper/SKILL.md +84 -0
  17. package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +212 -0
  18. package/.github/skills/skill-authoring/SKILL.md +228 -0
  19. package/.github/skills/skill-authoring/references/PATTERNS.md +384 -0
  20. package/.github/workflows/ci.yml +3 -3
  21. package/.github/workflows/deploy-pages.yml +9 -19
  22. package/.github/workflows/publish.yml +5 -2
  23. package/.github/workflows/update-docs.yml +1 -1
  24. package/AGENTS.md +140 -286
  25. package/CONTRIBUTING.md +10 -22
  26. package/README.md +48 -16
  27. package/ai-instructions/{github-copilot/copilot-instructions.md → AGENTS.md} +99 -127
  28. package/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
  29. package/{dist/docs/best-practices/cartridge_creation.md → ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
  30. package/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
  31. package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
  32. package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
  33. package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
  34. package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
  35. package/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
  36. package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
  37. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
  38. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
  39. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
  40. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
  41. package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
  42. package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
  43. package/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
  44. package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
  45. package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
  46. package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
  47. package/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
  48. package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
  49. package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
  50. package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
  51. package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
  52. package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
  53. package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
  54. package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
  55. package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
  56. package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
  57. package/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
  58. package/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
  59. package/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
  60. package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
  61. package/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
  62. package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
  63. package/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
  64. package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
  65. package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
  66. package/{dist/docs/best-practices/performance.md → ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
  67. package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
  68. package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
  69. package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
  70. package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
  71. package/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
  72. package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
  73. package/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
  74. package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
  75. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
  76. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
  77. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
  78. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
  79. package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
  80. package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
  81. package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
  82. package/{dist/docs/best-practices/sfra_controllers.md → ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
  83. package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
  84. package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
  85. package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
  86. package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
  87. package/{dist/docs/best-practices/sfra_scss.md → ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
  88. package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
  89. package/dist/ai-instructions/AGENTS.md +628 -0
  90. package/dist/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
  91. package/{docs/best-practices/cartridge_creation.md → dist/ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
  92. package/dist/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
  93. package/dist/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
  94. package/dist/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
  95. package/dist/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
  96. package/dist/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
  97. package/dist/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
  98. package/dist/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
  99. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
  100. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
  101. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
  102. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
  103. package/dist/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
  104. package/dist/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
  105. package/dist/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
  106. package/dist/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
  107. package/dist/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
  108. package/dist/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
  109. package/dist/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
  110. package/dist/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
  111. package/dist/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
  112. package/dist/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
  113. package/dist/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
  114. package/dist/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
  115. package/dist/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
  116. package/dist/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
  117. package/dist/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
  118. package/dist/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
  119. package/dist/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
  120. package/dist/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
  121. package/dist/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
  122. package/dist/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
  123. package/dist/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
  124. package/dist/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
  125. package/dist/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
  126. package/dist/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
  127. package/dist/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
  128. package/{docs/best-practices/performance.md → dist/ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
  129. package/dist/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
  130. package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
  131. package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
  132. package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
  133. package/dist/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
  134. package/dist/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
  135. package/dist/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
  136. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
  137. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
  138. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
  139. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
  140. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
  141. package/dist/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
  142. package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
  143. package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
  144. package/{docs/best-practices/sfra_controllers.md → dist/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
  145. package/dist/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
  146. package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
  147. package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
  148. package/dist/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
  149. package/{docs/best-practices/sfra_scss.md → dist/ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
  150. package/dist/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
  151. package/dist/clients/agent-instructions-client.d.ts +66 -0
  152. package/dist/clients/agent-instructions-client.d.ts.map +1 -0
  153. package/dist/clients/agent-instructions-client.js +277 -0
  154. package/dist/clients/agent-instructions-client.js.map +1 -0
  155. package/dist/clients/base/abstract-documentation-client.d.ts +146 -0
  156. package/dist/clients/base/abstract-documentation-client.d.ts.map +1 -0
  157. package/dist/clients/base/abstract-documentation-client.js +265 -0
  158. package/dist/clients/base/abstract-documentation-client.js.map +1 -0
  159. package/dist/clients/base/oauth-token.d.ts +18 -0
  160. package/dist/clients/base/oauth-token.d.ts.map +1 -1
  161. package/dist/clients/base/oauth-token.js +45 -2
  162. package/dist/clients/base/oauth-token.js.map +1 -1
  163. package/dist/clients/cartridge/cartridge-generation-client.d.ts +59 -0
  164. package/dist/clients/cartridge/cartridge-generation-client.d.ts.map +1 -0
  165. package/dist/clients/cartridge/cartridge-generation-client.js +224 -0
  166. package/dist/clients/cartridge/cartridge-generation-client.js.map +1 -0
  167. package/dist/clients/cartridge/cartridge-structure.d.ts +17 -0
  168. package/dist/clients/cartridge/cartridge-structure.d.ts.map +1 -0
  169. package/dist/clients/cartridge/cartridge-structure.js +33 -0
  170. package/dist/clients/cartridge/cartridge-structure.js.map +1 -0
  171. package/dist/clients/cartridge/cartridge-templates.d.ts +22 -0
  172. package/dist/clients/cartridge/cartridge-templates.d.ts.map +1 -0
  173. package/dist/clients/cartridge/cartridge-templates.js +225 -0
  174. package/dist/clients/cartridge/cartridge-templates.js.map +1 -0
  175. package/dist/clients/cartridge/index.d.ts +7 -0
  176. package/dist/clients/cartridge/index.d.ts.map +1 -0
  177. package/dist/clients/cartridge/index.js +7 -0
  178. package/dist/clients/cartridge/index.js.map +1 -0
  179. package/dist/clients/docs/documentation-scanner.d.ts +5 -2
  180. package/dist/clients/docs/documentation-scanner.d.ts.map +1 -1
  181. package/dist/clients/docs/documentation-scanner.js +38 -23
  182. package/dist/clients/docs/documentation-scanner.js.map +1 -1
  183. package/dist/clients/docs-client.d.ts +13 -4
  184. package/dist/clients/docs-client.d.ts.map +1 -1
  185. package/dist/clients/docs-client.js +44 -11
  186. package/dist/clients/docs-client.js.map +1 -1
  187. package/dist/clients/isml-client.d.ts +71 -0
  188. package/dist/clients/isml-client.d.ts.map +1 -0
  189. package/dist/clients/isml-client.js +252 -0
  190. package/dist/clients/isml-client.js.map +1 -0
  191. package/dist/clients/ocapi/code-versions-client.d.ts.map +1 -1
  192. package/dist/clients/ocapi/code-versions-client.js +6 -1
  193. package/dist/clients/ocapi/code-versions-client.js.map +1 -1
  194. package/dist/clients/ocapi-client.d.ts +9 -101
  195. package/dist/clients/ocapi-client.d.ts.map +1 -1
  196. package/dist/clients/ocapi-client.js +11 -93
  197. package/dist/clients/ocapi-client.js.map +1 -1
  198. package/dist/clients/script-debugger/index.d.ts +5 -0
  199. package/dist/clients/script-debugger/index.d.ts.map +1 -0
  200. package/dist/clients/script-debugger/index.js +5 -0
  201. package/dist/clients/script-debugger/index.js.map +1 -0
  202. package/dist/clients/script-debugger/script-debugger-client.d.ts +147 -0
  203. package/dist/clients/script-debugger/script-debugger-client.d.ts.map +1 -0
  204. package/dist/clients/script-debugger/script-debugger-client.js +591 -0
  205. package/dist/clients/script-debugger/script-debugger-client.js.map +1 -0
  206. package/dist/clients/sfra-client.d.ts +13 -62
  207. package/dist/clients/sfra-client.d.ts.map +1 -1
  208. package/dist/clients/sfra-client.js +105 -326
  209. package/dist/clients/sfra-client.js.map +1 -1
  210. package/dist/config/configuration-factory.d.ts +1 -1
  211. package/dist/config/configuration-factory.d.ts.map +1 -1
  212. package/dist/config/configuration-factory.js +5 -1
  213. package/dist/config/configuration-factory.js.map +1 -1
  214. package/dist/config/dw-json-loader.d.ts +7 -0
  215. package/dist/config/dw-json-loader.d.ts.map +1 -1
  216. package/dist/config/dw-json-loader.js +92 -15
  217. package/dist/config/dw-json-loader.js.map +1 -1
  218. package/dist/config/workspace-roots.d.ts +143 -0
  219. package/dist/config/workspace-roots.d.ts.map +1 -0
  220. package/dist/config/workspace-roots.js +448 -0
  221. package/dist/config/workspace-roots.js.map +1 -0
  222. package/dist/constants/index.d.ts +1 -0
  223. package/dist/constants/index.d.ts.map +1 -0
  224. package/dist/constants/index.js +3 -0
  225. package/dist/constants/index.js.map +1 -0
  226. package/dist/core/handlers/abstract-client-handler.d.ts +52 -0
  227. package/dist/core/handlers/abstract-client-handler.d.ts.map +1 -0
  228. package/dist/core/handlers/abstract-client-handler.js +51 -0
  229. package/dist/core/handlers/abstract-client-handler.js.map +1 -0
  230. package/dist/core/handlers/agent-instructions-handler.d.ts +17 -0
  231. package/dist/core/handlers/agent-instructions-handler.d.ts.map +1 -0
  232. package/dist/core/handlers/agent-instructions-handler.js +38 -0
  233. package/dist/core/handlers/agent-instructions-handler.js.map +1 -0
  234. package/dist/core/handlers/base-handler.d.ts +3 -68
  235. package/dist/core/handlers/base-handler.d.ts.map +1 -1
  236. package/dist/core/handlers/base-handler.js +11 -84
  237. package/dist/core/handlers/base-handler.js.map +1 -1
  238. package/dist/core/handlers/cartridge-handler.d.ts +10 -11
  239. package/dist/core/handlers/cartridge-handler.d.ts.map +1 -1
  240. package/dist/core/handlers/cartridge-handler.js +10 -28
  241. package/dist/core/handlers/cartridge-handler.js.map +1 -1
  242. package/dist/core/handlers/client-factory.d.ts +12 -2
  243. package/dist/core/handlers/client-factory.d.ts.map +1 -1
  244. package/dist/core/handlers/client-factory.js +28 -1
  245. package/dist/core/handlers/client-factory.js.map +1 -1
  246. package/dist/core/handlers/code-version-handler.d.ts +11 -11
  247. package/dist/core/handlers/code-version-handler.d.ts.map +1 -1
  248. package/dist/core/handlers/code-version-handler.js +13 -27
  249. package/dist/core/handlers/code-version-handler.js.map +1 -1
  250. package/dist/core/handlers/docs-handler.d.ts +6 -12
  251. package/dist/core/handlers/docs-handler.d.ts.map +1 -1
  252. package/dist/core/handlers/docs-handler.js +11 -36
  253. package/dist/core/handlers/docs-handler.js.map +1 -1
  254. package/dist/core/handlers/isml-handler.d.ts +11 -0
  255. package/dist/core/handlers/isml-handler.d.ts.map +1 -0
  256. package/dist/core/handlers/isml-handler.js +18 -0
  257. package/dist/core/handlers/isml-handler.js.map +1 -0
  258. package/dist/core/handlers/job-log-handler.d.ts +8 -7
  259. package/dist/core/handlers/job-log-handler.d.ts.map +1 -1
  260. package/dist/core/handlers/job-log-handler.js +14 -5
  261. package/dist/core/handlers/job-log-handler.js.map +1 -1
  262. package/dist/core/handlers/log-handler.d.ts +8 -7
  263. package/dist/core/handlers/log-handler.d.ts.map +1 -1
  264. package/dist/core/handlers/log-handler.js +14 -5
  265. package/dist/core/handlers/log-handler.js.map +1 -1
  266. package/dist/core/handlers/script-debugger-handler.d.ts +18 -0
  267. package/dist/core/handlers/script-debugger-handler.d.ts.map +1 -0
  268. package/dist/core/handlers/script-debugger-handler.js +31 -0
  269. package/dist/core/handlers/script-debugger-handler.js.map +1 -0
  270. package/dist/core/handlers/sfra-handler.d.ts +6 -12
  271. package/dist/core/handlers/sfra-handler.d.ts.map +1 -1
  272. package/dist/core/handlers/sfra-handler.js +11 -36
  273. package/dist/core/handlers/sfra-handler.js.map +1 -1
  274. package/dist/core/handlers/simple-client-handler.d.ts +41 -0
  275. package/dist/core/handlers/simple-client-handler.d.ts.map +1 -0
  276. package/dist/core/handlers/simple-client-handler.js +49 -0
  277. package/dist/core/handlers/simple-client-handler.js.map +1 -0
  278. package/dist/core/handlers/system-object-handler.d.ts +11 -11
  279. package/dist/core/handlers/system-object-handler.d.ts.map +1 -1
  280. package/dist/core/handlers/system-object-handler.js +13 -27
  281. package/dist/core/handlers/system-object-handler.js.map +1 -1
  282. package/dist/core/handlers/validation-helpers.d.ts +22 -24
  283. package/dist/core/handlers/validation-helpers.d.ts.map +1 -1
  284. package/dist/core/handlers/validation-helpers.js +89 -39
  285. package/dist/core/handlers/validation-helpers.js.map +1 -1
  286. package/dist/core/instruction-advisor.d.ts +28 -0
  287. package/dist/core/instruction-advisor.d.ts.map +1 -0
  288. package/dist/core/instruction-advisor.js +114 -0
  289. package/dist/core/instruction-advisor.js.map +1 -0
  290. package/dist/core/server.d.ts +25 -0
  291. package/dist/core/server.d.ts.map +1 -1
  292. package/dist/core/server.js +151 -11
  293. package/dist/core/server.js.map +1 -1
  294. package/dist/core/tool-definitions.d.ts +6 -854
  295. package/dist/core/tool-definitions.d.ts.map +1 -1
  296. package/dist/core/tool-definitions.js +8 -1064
  297. package/dist/core/tool-definitions.js.map +1 -1
  298. package/dist/core/tool-schemas/agent-instruction-tools.d.ts +77 -0
  299. package/dist/core/tool-schemas/agent-instruction-tools.d.ts.map +1 -0
  300. package/dist/core/tool-schemas/agent-instruction-tools.js +72 -0
  301. package/dist/core/tool-schemas/agent-instruction-tools.js.map +1 -0
  302. package/dist/core/tool-schemas/cartridge-tools.d.ts +27 -0
  303. package/dist/core/tool-schemas/cartridge-tools.d.ts.map +1 -0
  304. package/dist/core/tool-schemas/cartridge-tools.js +29 -0
  305. package/dist/core/tool-schemas/cartridge-tools.js.map +1 -0
  306. package/dist/core/tool-schemas/code-version-tools.d.ts +28 -0
  307. package/dist/core/tool-schemas/code-version-tools.d.ts.map +1 -0
  308. package/dist/core/tool-schemas/code-version-tools.js +28 -0
  309. package/dist/core/tool-schemas/code-version-tools.js.map +1 -0
  310. package/dist/core/tool-schemas/documentation-tools.d.ts +139 -0
  311. package/dist/core/tool-schemas/documentation-tools.d.ts.map +1 -0
  312. package/dist/core/tool-schemas/documentation-tools.js +104 -0
  313. package/dist/core/tool-schemas/documentation-tools.js.map +1 -0
  314. package/dist/core/tool-schemas/index.d.ts +17 -0
  315. package/dist/core/tool-schemas/index.d.ts.map +1 -0
  316. package/dist/core/tool-schemas/index.js +19 -0
  317. package/dist/core/tool-schemas/index.js.map +1 -0
  318. package/dist/core/tool-schemas/isml-tools.d.ts +98 -0
  319. package/dist/core/tool-schemas/isml-tools.d.ts.map +1 -0
  320. package/dist/core/tool-schemas/isml-tools.js +89 -0
  321. package/dist/core/tool-schemas/isml-tools.js.map +1 -0
  322. package/dist/core/tool-schemas/log-tools.d.ts +221 -0
  323. package/dist/core/tool-schemas/log-tools.d.ts.map +1 -0
  324. package/dist/core/tool-schemas/log-tools.js +180 -0
  325. package/dist/core/tool-schemas/log-tools.js.map +1 -0
  326. package/dist/core/tool-schemas/script-debugger-tools.d.ts +44 -0
  327. package/dist/core/tool-schemas/script-debugger-tools.d.ts.map +1 -0
  328. package/dist/core/tool-schemas/script-debugger-tools.js +83 -0
  329. package/dist/core/tool-schemas/script-debugger-tools.js.map +1 -0
  330. package/dist/core/tool-schemas/sfra-tools.d.ts +63 -0
  331. package/dist/core/tool-schemas/sfra-tools.d.ts.map +1 -0
  332. package/dist/core/tool-schemas/sfra-tools.js +65 -0
  333. package/dist/core/tool-schemas/sfra-tools.js.map +1 -0
  334. package/dist/core/tool-schemas/shared-schemas.d.ts +350 -0
  335. package/dist/core/tool-schemas/shared-schemas.d.ts.map +1 -0
  336. package/dist/core/tool-schemas/shared-schemas.js +153 -0
  337. package/dist/core/tool-schemas/shared-schemas.js.map +1 -0
  338. package/dist/core/tool-schemas/system-object-tools.d.ts +511 -0
  339. package/dist/core/tool-schemas/system-object-tools.d.ts.map +1 -0
  340. package/dist/core/tool-schemas/system-object-tools.js +126 -0
  341. package/dist/core/tool-schemas/system-object-tools.js.map +1 -0
  342. package/dist/docs/dw_net/HTTPClient.md +46 -2
  343. package/dist/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
  344. package/dist/docs/dw_order/Basket.md +7 -7
  345. package/dist/docs/dw_order/BasketMgr.md +22 -6
  346. package/dist/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
  347. package/dist/docs/dw_svc/ServiceCallback.md +2 -2
  348. package/dist/docs/isml/isactivedatacontext.md +382 -0
  349. package/dist/docs/isml/isactivedatahead.md +566 -0
  350. package/dist/docs/isml/isanalyticsoff.md +537 -0
  351. package/dist/docs/isml/isapplepay.md +667 -0
  352. package/dist/docs/isml/isbreak.md +687 -0
  353. package/dist/docs/isml/isbuynow.md +682 -0
  354. package/dist/docs/isml/iscache.md +802 -0
  355. package/dist/docs/isml/iscomment.md +794 -0
  356. package/dist/docs/isml/iscomponent.md +797 -0
  357. package/dist/docs/isml/iscontent.md +594 -0
  358. package/dist/docs/isml/iscontinue.md +563 -0
  359. package/dist/docs/isml/iscookie.md +798 -0
  360. package/dist/docs/isml/isdecorate.md +818 -0
  361. package/dist/docs/isml/isif.md +737 -0
  362. package/dist/docs/isml/isinclude.md +874 -0
  363. package/dist/docs/isml/isloop.md +377 -0
  364. package/dist/docs/isml/ismodule.md +844 -0
  365. package/dist/docs/isml/isnext.md +672 -0
  366. package/dist/docs/isml/isobject.md +760 -0
  367. package/dist/docs/isml/ispayment.md +577 -0
  368. package/dist/docs/isml/ispaymentmessages.md +664 -0
  369. package/dist/docs/isml/isprint.md +875 -0
  370. package/dist/docs/isml/isredirect.md +716 -0
  371. package/dist/docs/isml/isremove.md +725 -0
  372. package/dist/docs/isml/isreplace.md +783 -0
  373. package/dist/docs/isml/isscript.md +859 -0
  374. package/dist/docs/isml/isselect.md +908 -0
  375. package/dist/docs/isml/isset.md +585 -0
  376. package/dist/docs/isml/isslot.md +824 -0
  377. package/dist/docs/isml/isstatus.md +711 -0
  378. package/dist/main.d.ts +16 -0
  379. package/dist/main.d.ts.map +1 -1
  380. package/dist/main.js +60 -28
  381. package/dist/main.js.map +1 -1
  382. package/dist/services/index.d.ts +4 -2
  383. package/dist/services/index.d.ts.map +1 -1
  384. package/dist/services/index.js +2 -2
  385. package/dist/services/index.js.map +1 -1
  386. package/dist/tool-configs/agent-instructions-tool-config.d.ts +6 -0
  387. package/dist/tool-configs/agent-instructions-tool-config.d.ts.map +1 -0
  388. package/dist/tool-configs/agent-instructions-tool-config.js +74 -0
  389. package/dist/tool-configs/agent-instructions-tool-config.js.map +1 -0
  390. package/dist/tool-configs/code-version-tool-config.d.ts.map +1 -1
  391. package/dist/tool-configs/code-version-tool-config.js +0 -5
  392. package/dist/tool-configs/code-version-tool-config.js.map +1 -1
  393. package/dist/tool-configs/docs-tool-config.d.ts.map +1 -1
  394. package/dist/tool-configs/docs-tool-config.js +0 -7
  395. package/dist/tool-configs/docs-tool-config.js.map +1 -1
  396. package/dist/tool-configs/isml-tool-config.d.ts +11 -0
  397. package/dist/tool-configs/isml-tool-config.d.ts.map +1 -0
  398. package/dist/tool-configs/isml-tool-config.js +77 -0
  399. package/dist/tool-configs/isml-tool-config.js.map +1 -0
  400. package/dist/tool-configs/job-log-tool-config.d.ts +1 -2
  401. package/dist/tool-configs/job-log-tool-config.d.ts.map +1 -1
  402. package/dist/tool-configs/job-log-tool-config.js +11 -15
  403. package/dist/tool-configs/job-log-tool-config.js.map +1 -1
  404. package/dist/tool-configs/log-tool-config.d.ts +1 -2
  405. package/dist/tool-configs/log-tool-config.d.ts.map +1 -1
  406. package/dist/tool-configs/log-tool-config.js +35 -51
  407. package/dist/tool-configs/log-tool-config.js.map +1 -1
  408. package/dist/tool-configs/script-debugger-tool-config.d.ts +11 -0
  409. package/dist/tool-configs/script-debugger-tool-config.d.ts.map +1 -0
  410. package/dist/tool-configs/script-debugger-tool-config.js +35 -0
  411. package/dist/tool-configs/script-debugger-tool-config.js.map +1 -0
  412. package/dist/tool-configs/sfra-tool-config.d.ts.map +1 -1
  413. package/dist/tool-configs/sfra-tool-config.js +0 -11
  414. package/dist/tool-configs/sfra-tool-config.js.map +1 -1
  415. package/dist/tool-configs/system-object-tool-config.d.ts.map +1 -1
  416. package/dist/tool-configs/system-object-tool-config.js +0 -5
  417. package/dist/tool-configs/system-object-tool-config.js.map +1 -1
  418. package/dist/types/types.d.ts +2 -0
  419. package/dist/types/types.d.ts.map +1 -1
  420. package/dist/utils/cache.d.ts +12 -10
  421. package/dist/utils/cache.d.ts.map +1 -1
  422. package/dist/utils/cache.js +47 -47
  423. package/dist/utils/cache.js.map +1 -1
  424. package/dist/utils/category-utils.d.ts +31 -0
  425. package/dist/utils/category-utils.d.ts.map +1 -0
  426. package/dist/utils/category-utils.js +45 -0
  427. package/dist/utils/category-utils.js.map +1 -0
  428. package/dist/utils/log-tool-constants.d.ts +16 -13
  429. package/dist/utils/log-tool-constants.d.ts.map +1 -1
  430. package/dist/utils/log-tool-constants.js +10 -11
  431. package/dist/utils/log-tool-constants.js.map +1 -1
  432. package/dist/utils/logger.d.ts +11 -0
  433. package/dist/utils/logger.d.ts.map +1 -1
  434. package/dist/utils/logger.js +35 -1
  435. package/dist/utils/logger.js.map +1 -1
  436. package/dist/utils/markdown-utils.d.ts +60 -0
  437. package/dist/utils/markdown-utils.d.ts.map +1 -0
  438. package/dist/utils/markdown-utils.js +206 -0
  439. package/dist/utils/markdown-utils.js.map +1 -0
  440. package/dist/utils/path-resolver.d.ts +12 -4
  441. package/dist/utils/path-resolver.d.ts.map +1 -1
  442. package/dist/utils/path-resolver.js +22 -8
  443. package/dist/utils/path-resolver.js.map +1 -1
  444. package/dist/utils/path-validation.d.ts +40 -0
  445. package/dist/utils/path-validation.d.ts.map +1 -0
  446. package/dist/utils/path-validation.js +84 -0
  447. package/dist/utils/path-validation.js.map +1 -0
  448. package/docs/dw_net/HTTPClient.md +46 -2
  449. package/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
  450. package/docs/dw_order/Basket.md +7 -7
  451. package/docs/dw_order/BasketMgr.md +22 -6
  452. package/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
  453. package/docs/dw_svc/ServiceCallback.md +2 -2
  454. package/docs/isml/isactivedatacontext.md +382 -0
  455. package/docs/isml/isactivedatahead.md +566 -0
  456. package/docs/isml/isanalyticsoff.md +537 -0
  457. package/docs/isml/isapplepay.md +667 -0
  458. package/docs/isml/isbreak.md +687 -0
  459. package/docs/isml/isbuynow.md +682 -0
  460. package/docs/isml/iscache.md +802 -0
  461. package/docs/isml/iscomment.md +794 -0
  462. package/docs/isml/iscomponent.md +797 -0
  463. package/docs/isml/iscontent.md +594 -0
  464. package/docs/isml/iscontinue.md +563 -0
  465. package/docs/isml/iscookie.md +798 -0
  466. package/docs/isml/isdecorate.md +818 -0
  467. package/docs/isml/isif.md +737 -0
  468. package/docs/isml/isinclude.md +874 -0
  469. package/docs/isml/isloop.md +377 -0
  470. package/docs/isml/ismodule.md +844 -0
  471. package/docs/isml/isnext.md +672 -0
  472. package/docs/isml/isobject.md +760 -0
  473. package/docs/isml/ispayment.md +577 -0
  474. package/docs/isml/ispaymentmessages.md +664 -0
  475. package/docs/isml/isprint.md +875 -0
  476. package/docs/isml/isredirect.md +716 -0
  477. package/docs/isml/isremove.md +725 -0
  478. package/docs/isml/isreplace.md +783 -0
  479. package/docs/isml/isscript.md +859 -0
  480. package/docs/isml/isselect.md +908 -0
  481. package/docs/isml/isset.md +585 -0
  482. package/docs/isml/isslot.md +824 -0
  483. package/docs/isml/isstatus.md +711 -0
  484. package/docs-site-v2/.vitepress/config.mts +190 -0
  485. package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +96 -0
  486. package/docs-site-v2/.vitepress/theme/components/Callout.vue +10 -0
  487. package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +14 -0
  488. package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +82 -0
  489. package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +552 -0
  490. package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +87 -0
  491. package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +70 -0
  492. package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +14 -0
  493. package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +20 -0
  494. package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +20 -0
  495. package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +48 -0
  496. package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +85 -0
  497. package/docs-site-v2/.vitepress/theme/custom.css +1373 -0
  498. package/docs-site-v2/.vitepress/theme/index.ts +39 -0
  499. package/docs-site-v2/data/skills.ts +147 -0
  500. package/docs-site-v2/data/tools.ts +490 -0
  501. package/docs-site-v2/development/index.md +151 -0
  502. package/docs-site-v2/examples/index.md +333 -0
  503. package/docs-site-v2/features/index.md +144 -0
  504. package/docs-site-v2/guide/ai-interfaces.md +58 -0
  505. package/docs-site-v2/guide/configuration.md +208 -0
  506. package/docs-site-v2/guide/index.md +50 -0
  507. package/docs-site-v2/index.md +32 -0
  508. package/docs-site-v2/package-lock.json +2511 -0
  509. package/docs-site-v2/package.json +15 -0
  510. package/docs-site-v2/public/android-chrome-192x192.png +0 -0
  511. package/docs-site-v2/public/android-chrome-512x512.png +0 -0
  512. package/docs-site-v2/public/apple-touch-icon.png +0 -0
  513. package/docs-site-v2/public/favicon-16x16.png +0 -0
  514. package/docs-site-v2/public/favicon-32x32.png +0 -0
  515. package/docs-site-v2/public/favicon.ico +0 -0
  516. package/docs-site-v2/public/index.css +4174 -0
  517. package/docs-site-v2/public/llms.txt +44 -0
  518. package/docs-site-v2/public/logo-dark.svg +8 -0
  519. package/docs-site-v2/public/logo.svg +8 -0
  520. package/{docs-site → docs-site-v2}/public/robots.txt +1 -6
  521. package/{docs-site → docs-site-v2}/public/site.webmanifest +1 -1
  522. package/{docs-site → docs-site-v2}/public/sitemap.xml +33 -12
  523. package/docs-site-v2/script-debugger/index.md +105 -0
  524. package/docs-site-v2/scripts/generate-llms.js +71 -0
  525. package/docs-site-v2/scripts/generate-sitemap.js +97 -0
  526. package/docs-site-v2/security/index.md +115 -0
  527. package/docs-site-v2/skills/index.md +40 -0
  528. package/docs-site-v2/tools/index.md +36 -0
  529. package/docs-site-v2/troubleshooting/index.md +204 -0
  530. package/eslint.config.js +3 -1
  531. package/memories/repo/docs-site-v2-build.json +11 -0
  532. package/package.json +18 -14
  533. package/scripts/validate-server-json.js +68 -0
  534. package/server.json +4 -6
  535. package/src/clients/agent-instructions-client.ts +370 -0
  536. package/src/clients/base/abstract-documentation-client.ts +405 -0
  537. package/src/clients/base/oauth-token.ts +52 -2
  538. package/src/clients/cartridge/cartridge-generation-client.ts +302 -0
  539. package/src/clients/cartridge/cartridge-structure.ts +37 -0
  540. package/src/clients/cartridge/cartridge-templates.ts +246 -0
  541. package/src/clients/cartridge/index.ts +6 -0
  542. package/src/clients/docs/documentation-scanner.ts +44 -28
  543. package/src/clients/docs-client.ts +54 -14
  544. package/src/clients/isml-client.ts +353 -0
  545. package/src/clients/ocapi/code-versions-client.ts +7 -1
  546. package/src/clients/ocapi-client.ts +11 -166
  547. package/src/clients/script-debugger/index.ts +5 -0
  548. package/src/clients/script-debugger/script-debugger-client.ts +754 -0
  549. package/src/clients/sfra-client.ts +134 -397
  550. package/src/config/configuration-factory.ts +6 -1
  551. package/src/config/dw-json-loader.ts +96 -15
  552. package/src/config/workspace-roots.ts +540 -0
  553. package/src/constants/index.ts +1 -0
  554. package/src/core/handlers/abstract-client-handler.ts +85 -0
  555. package/src/core/handlers/agent-instructions-handler.ts +48 -0
  556. package/src/core/handlers/base-handler.ts +17 -127
  557. package/src/core/handlers/cartridge-handler.ts +13 -33
  558. package/src/core/handlers/client-factory.ts +32 -2
  559. package/src/core/handlers/code-version-handler.ts +17 -32
  560. package/src/core/handlers/docs-handler.ts +12 -44
  561. package/src/core/handlers/isml-handler.ts +19 -0
  562. package/src/core/handlers/job-log-handler.ts +19 -8
  563. package/src/core/handlers/log-handler.ts +19 -8
  564. package/src/core/handlers/script-debugger-handler.ts +46 -0
  565. package/src/core/handlers/sfra-handler.ts +12 -44
  566. package/src/core/handlers/simple-client-handler.ts +78 -0
  567. package/src/core/handlers/system-object-handler.ts +17 -32
  568. package/src/core/handlers/validation-helpers.ts +87 -47
  569. package/src/core/instruction-advisor.ts +122 -0
  570. package/src/core/server.ts +178 -13
  571. package/src/core/tool-definitions.ts +25 -1071
  572. package/src/core/tool-schemas/agent-instruction-tools.ts +72 -0
  573. package/src/core/tool-schemas/cartridge-tools.ts +29 -0
  574. package/src/core/tool-schemas/code-version-tools.ts +28 -0
  575. package/src/core/tool-schemas/documentation-tools.ts +104 -0
  576. package/src/core/tool-schemas/index.ts +27 -0
  577. package/src/core/tool-schemas/isml-tools.ts +89 -0
  578. package/src/core/tool-schemas/log-tools.ts +196 -0
  579. package/src/core/tool-schemas/script-debugger-tools.ts +83 -0
  580. package/src/core/tool-schemas/sfra-tools.ts +65 -0
  581. package/src/core/tool-schemas/shared-schemas.ts +158 -0
  582. package/src/core/tool-schemas/system-object-tools.ts +127 -0
  583. package/src/main.ts +63 -30
  584. package/src/services/index.ts +4 -10
  585. package/src/tool-configs/agent-instructions-tool-config.ts +83 -0
  586. package/src/tool-configs/cartridge-tool-config.ts +1 -1
  587. package/src/tool-configs/code-version-tool-config.ts +0 -5
  588. package/src/tool-configs/docs-tool-config.ts +0 -7
  589. package/src/tool-configs/isml-tool-config.ts +87 -0
  590. package/src/tool-configs/job-log-tool-config.ts +18 -17
  591. package/src/tool-configs/log-tool-config.ts +49 -64
  592. package/src/tool-configs/script-debugger-tool-config.ts +69 -0
  593. package/src/tool-configs/sfra-tool-config.ts +0 -11
  594. package/src/tool-configs/system-object-tool-config.ts +0 -5
  595. package/src/types/types.ts +2 -0
  596. package/src/utils/cache.ts +49 -54
  597. package/src/utils/category-utils.ts +70 -0
  598. package/src/utils/log-tool-constants.ts +25 -17
  599. package/src/utils/logger.ts +38 -1
  600. package/src/utils/markdown-utils.ts +280 -0
  601. package/src/utils/path-resolver.ts +25 -9
  602. package/src/utils/path-validation.ts +113 -0
  603. package/tests/base-handler.test.ts +1 -1
  604. package/tests/cache.test.ts +2 -2
  605. package/tests/cartridge-handler.test.ts +4 -4
  606. package/tests/client-factory.test.ts +1 -1
  607. package/tests/code-version-handler.test.ts +3 -3
  608. package/tests/docs-handler.test.ts +2 -2
  609. package/tests/documentation-scanner.test.ts +4 -4
  610. package/tests/isml-client.test.ts +463 -0
  611. package/tests/isml-handler.test.ts +375 -0
  612. package/tests/job-log-handler.test.ts +1 -1
  613. package/tests/log-handler.test.ts +8 -8
  614. package/tests/log-validation.test.ts +149 -0
  615. package/tests/mcp/README.md +22 -18
  616. package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +30 -12
  617. package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +387 -0
  618. package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +14 -8
  619. package/tests/mcp/node/get-isml-categories.programmatic.test.js +278 -0
  620. package/tests/mcp/node/get-isml-element.programmatic.test.js +278 -0
  621. package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +363 -0
  622. package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +24 -24
  623. package/tests/mcp/node/get-sfra-document.programmatic.test.js +4 -2
  624. package/tests/mcp/node/list-isml-elements.programmatic.test.js +311 -0
  625. package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +2 -33
  626. package/tests/mcp/node/search-isml-elements.programmatic.test.js +325 -0
  627. package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +5 -9
  628. package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +7 -9
  629. package/tests/mcp/node/tools.docs-only.programmatic.test.js +42 -65
  630. package/tests/mcp/node/tools.full-mode.programmatic.test.js +7 -8
  631. package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +2 -2
  632. package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +281 -0
  633. package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +330 -0
  634. package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +294 -0
  635. package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +334 -0
  636. package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +2 -2
  637. package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +13 -13
  638. package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +13 -13
  639. package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +1 -16
  640. package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +212 -0
  641. package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +312 -0
  642. package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +1 -1
  643. package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +1 -1
  644. package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +1 -1
  645. package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +3 -57
  646. package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +3 -3
  647. package/tests/oauth-token.test.ts +107 -12
  648. package/tests/ocapi-client.test.ts +53 -106
  649. package/tests/script-debugger-client.test.ts +430 -0
  650. package/tests/servers/sfcc-mock-server/src/app.js +15 -0
  651. package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +258 -0
  652. package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +396 -0
  653. package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +5 -0
  654. package/tests/servers/sfcc-mock-server/src/routes/storefront.js +86 -0
  655. package/tests/servers/sfcc-mock-server/src/routes/webdav.js +6 -4
  656. package/tests/validation-helpers.test.ts +0 -31
  657. package/tests/workspace-roots.test.ts +227 -0
  658. package/ai-instructions/claude-desktop/claude_custom_instructions.md +0 -321
  659. package/ai-instructions/cursor/.cursor/rules/debugging-workflows.mdc +0 -171
  660. package/ai-instructions/cursor/.cursor/rules/hooks-development.mdc +0 -168
  661. package/ai-instructions/cursor/.cursor/rules/isml-templates.mdc +0 -209
  662. package/ai-instructions/cursor/.cursor/rules/job-framework.mdc +0 -379
  663. package/ai-instructions/cursor/.cursor/rules/performance-optimization.mdc +0 -215
  664. package/ai-instructions/cursor/.cursor/rules/scapi-endpoints.mdc +0 -98
  665. package/ai-instructions/cursor/.cursor/rules/security-patterns.mdc +0 -375
  666. package/ai-instructions/cursor/.cursor/rules/sfcc-development.mdc +0 -144
  667. package/ai-instructions/cursor/.cursor/rules/sfra-controllers.mdc +0 -376
  668. package/ai-instructions/cursor/.cursor/rules/sfra-models.mdc +0 -412
  669. package/ai-instructions/cursor/.cursor/rules/system-objects.mdc +0 -383
  670. package/ai-instructions/cursor/.cursor/rules/testing-patterns.mdc +0 -418
  671. package/dist/clients/best-practices-client.d.ts +0 -57
  672. package/dist/clients/best-practices-client.d.ts.map +0 -1
  673. package/dist/clients/best-practices-client.js +0 -288
  674. package/dist/clients/best-practices-client.js.map +0 -1
  675. package/dist/clients/cartridge-generation-client.d.ts +0 -57
  676. package/dist/clients/cartridge-generation-client.d.ts.map +0 -1
  677. package/dist/clients/cartridge-generation-client.js +0 -384
  678. package/dist/clients/cartridge-generation-client.js.map +0 -1
  679. package/dist/clients/logs/index.d.ts +0 -13
  680. package/dist/clients/logs/index.d.ts.map +0 -1
  681. package/dist/clients/logs/index.js +0 -15
  682. package/dist/clients/logs/index.js.map +0 -1
  683. package/dist/clients/logs/log-analyzer.d.ts +0 -55
  684. package/dist/clients/logs/log-analyzer.d.ts.map +0 -1
  685. package/dist/clients/logs/log-analyzer.js +0 -228
  686. package/dist/clients/logs/log-analyzer.js.map +0 -1
  687. package/dist/clients/logs/log-client.d.ts +0 -87
  688. package/dist/clients/logs/log-client.d.ts.map +0 -1
  689. package/dist/clients/logs/log-client.js +0 -418
  690. package/dist/clients/logs/log-client.js.map +0 -1
  691. package/dist/clients/logs/log-constants.d.ts +0 -37
  692. package/dist/clients/logs/log-constants.d.ts.map +0 -1
  693. package/dist/clients/logs/log-constants.js +0 -37
  694. package/dist/clients/logs/log-constants.js.map +0 -1
  695. package/dist/clients/logs/log-file-discovery.d.ts +0 -62
  696. package/dist/clients/logs/log-file-discovery.d.ts.map +0 -1
  697. package/dist/clients/logs/log-file-discovery.js +0 -238
  698. package/dist/clients/logs/log-file-discovery.js.map +0 -1
  699. package/dist/clients/logs/log-file-reader.d.ts +0 -53
  700. package/dist/clients/logs/log-file-reader.d.ts.map +0 -1
  701. package/dist/clients/logs/log-file-reader.js +0 -194
  702. package/dist/clients/logs/log-file-reader.js.map +0 -1
  703. package/dist/clients/logs/log-formatter.d.ts +0 -90
  704. package/dist/clients/logs/log-formatter.d.ts.map +0 -1
  705. package/dist/clients/logs/log-formatter.js +0 -189
  706. package/dist/clients/logs/log-formatter.js.map +0 -1
  707. package/dist/clients/logs/log-processor.d.ts +0 -91
  708. package/dist/clients/logs/log-processor.d.ts.map +0 -1
  709. package/dist/clients/logs/log-processor.js +0 -328
  710. package/dist/clients/logs/log-processor.js.map +0 -1
  711. package/dist/clients/logs/log-types.d.ts +0 -69
  712. package/dist/clients/logs/log-types.d.ts.map +0 -1
  713. package/dist/clients/logs/log-types.js +0 -5
  714. package/dist/clients/logs/log-types.js.map +0 -1
  715. package/dist/clients/logs/webdav-client-manager.d.ts +0 -28
  716. package/dist/clients/logs/webdav-client-manager.d.ts.map +0 -1
  717. package/dist/clients/logs/webdav-client-manager.js +0 -77
  718. package/dist/clients/logs/webdav-client-manager.js.map +0 -1
  719. package/dist/core/handlers/abstract-log-tool-handler.d.ts +0 -35
  720. package/dist/core/handlers/abstract-log-tool-handler.d.ts.map +0 -1
  721. package/dist/core/handlers/abstract-log-tool-handler.js +0 -46
  722. package/dist/core/handlers/abstract-log-tool-handler.js.map +0 -1
  723. package/dist/core/handlers/best-practices-handler.d.ts +0 -17
  724. package/dist/core/handlers/best-practices-handler.d.ts.map +0 -1
  725. package/dist/core/handlers/best-practices-handler.js +0 -43
  726. package/dist/core/handlers/best-practices-handler.js.map +0 -1
  727. package/dist/core/handlers/job-log-tool-config.d.ts +0 -8
  728. package/dist/core/handlers/job-log-tool-config.d.ts.map +0 -1
  729. package/dist/core/handlers/job-log-tool-config.js +0 -76
  730. package/dist/core/handlers/job-log-tool-config.js.map +0 -1
  731. package/dist/core/handlers/log-tool-config.d.ts +0 -8
  732. package/dist/core/handlers/log-tool-config.d.ts.map +0 -1
  733. package/dist/core/handlers/log-tool-config.js +0 -73
  734. package/dist/core/handlers/log-tool-config.js.map +0 -1
  735. package/dist/docs/best-practices/isml_templates.md +0 -1933
  736. package/dist/docs/best-practices/job_framework.md +0 -1173
  737. package/dist/docs/best-practices/scapi_custom_endpoint.md +0 -963
  738. package/dist/docs/best-practices/sfra_client_side_js.md +0 -736
  739. package/dist/docs/best-practices/sfra_models.md +0 -1142
  740. package/dist/tool-configs/best-practices-tool-config.d.ts +0 -11
  741. package/dist/tool-configs/best-practices-tool-config.d.ts.map +0 -1
  742. package/dist/tool-configs/best-practices-tool-config.js +0 -59
  743. package/dist/tool-configs/best-practices-tool-config.js.map +0 -1
  744. package/dist/utils/job-log-tool-config.d.ts +0 -8
  745. package/dist/utils/job-log-tool-config.d.ts.map +0 -1
  746. package/dist/utils/job-log-tool-config.js +0 -76
  747. package/dist/utils/job-log-tool-config.js.map +0 -1
  748. package/dist/utils/job-log-utils.d.ts +0 -34
  749. package/dist/utils/job-log-utils.d.ts.map +0 -1
  750. package/dist/utils/job-log-utils.js +0 -60
  751. package/dist/utils/job-log-utils.js.map +0 -1
  752. package/dist/utils/log-cache.d.ts +0 -53
  753. package/dist/utils/log-cache.d.ts.map +0 -1
  754. package/dist/utils/log-cache.js +0 -114
  755. package/dist/utils/log-cache.js.map +0 -1
  756. package/dist/utils/log-tool-config.d.ts +0 -8
  757. package/dist/utils/log-tool-config.d.ts.map +0 -1
  758. package/dist/utils/log-tool-config.js +0 -73
  759. package/dist/utils/log-tool-config.js.map +0 -1
  760. package/dist/utils/log-tool-utils.d.ts +0 -39
  761. package/dist/utils/log-tool-utils.d.ts.map +0 -1
  762. package/dist/utils/log-tool-utils.js +0 -94
  763. package/dist/utils/log-tool-utils.js.map +0 -1
  764. package/docs/best-practices/isml_templates.md +0 -1933
  765. package/docs/best-practices/job_framework.md +0 -1173
  766. package/docs/best-practices/scapi_custom_endpoint.md +0 -963
  767. package/docs/best-practices/sfra_client_side_js.md +0 -736
  768. package/docs/best-practices/sfra_models.md +0 -1142
  769. package/docs-site/App.tsx +0 -103
  770. package/docs-site/README.md +0 -113
  771. package/docs-site/components/Badge.tsx +0 -38
  772. package/docs-site/components/BreadcrumbSchema.tsx +0 -34
  773. package/docs-site/components/CodeBlock.tsx +0 -132
  774. package/docs-site/components/Collapsible.tsx +0 -40
  775. package/docs-site/components/ConfigBuilder.tsx +0 -118
  776. package/docs-site/components/ConfigHero.tsx +0 -19
  777. package/docs-site/components/ConfigModeTabs.tsx +0 -42
  778. package/docs-site/components/Layout.tsx +0 -174
  779. package/docs-site/components/LightCodeContainer.tsx +0 -44
  780. package/docs-site/components/NewcomerCTA.tsx +0 -57
  781. package/docs-site/components/NextStepsStrip.tsx +0 -23
  782. package/docs-site/components/OnThisPage.tsx +0 -91
  783. package/docs-site/components/SEO.tsx +0 -79
  784. package/docs-site/components/Search.tsx +0 -207
  785. package/docs-site/components/Sidebar.tsx +0 -96
  786. package/docs-site/components/StructuredData.tsx +0 -72
  787. package/docs-site/components/ToolCard.tsx +0 -84
  788. package/docs-site/components/ToolFilters.tsx +0 -39
  789. package/docs-site/components/Typography.tsx +0 -30
  790. package/docs-site/components/VersionBadge.tsx +0 -18
  791. package/docs-site/components/icons.tsx +0 -37
  792. package/docs-site/constants.tsx +0 -34
  793. package/docs-site/index.html +0 -62
  794. package/docs-site/main.tsx +0 -16
  795. package/docs-site/metadata.json +0 -5
  796. package/docs-site/package-lock.json +0 -3966
  797. package/docs-site/package.json +0 -35
  798. package/docs-site/pages/AIInterfacesPage.tsx +0 -610
  799. package/docs-site/pages/ConfigurationPage.tsx +0 -315
  800. package/docs-site/pages/DevelopmentPage.tsx +0 -607
  801. package/docs-site/pages/ExamplesPage.tsx +0 -558
  802. package/docs-site/pages/FeaturesPage.tsx +0 -353
  803. package/docs-site/pages/HomePage.tsx +0 -1046
  804. package/docs-site/pages/SecurityPage.tsx +0 -372
  805. package/docs-site/pages/ToolsPage.tsx +0 -205
  806. package/docs-site/pages/TroubleshootingPage.tsx +0 -590
  807. package/docs-site/postcss.config.js +0 -6
  808. package/docs-site/public/.well-known/security.txt +0 -6
  809. package/docs-site/public/android-chrome-192x192.png +0 -0
  810. package/docs-site/public/android-chrome-512x512.png +0 -0
  811. package/docs-site/public/apple-touch-icon.png +0 -0
  812. package/docs-site/public/favicon-16x16.png +0 -0
  813. package/docs-site/public/favicon-32x32.png +0 -0
  814. package/docs-site/public/favicon.ico +0 -0
  815. package/docs-site/public/llms.txt +0 -47
  816. package/docs-site/scripts/generate-search-index.js +0 -323
  817. package/docs-site/scripts/generate-sitemap.js +0 -156
  818. package/docs-site/scripts/search-dev.js +0 -112
  819. package/docs-site/src/styles/input.css +0 -248
  820. package/docs-site/src/styles/prism-theme.css +0 -124
  821. package/docs-site/tailwind.config.js +0 -70
  822. package/docs-site/tsconfig.json +0 -29
  823. package/docs-site/types.ts +0 -16
  824. package/docs-site/utils/search.ts +0 -132
  825. package/docs-site/utils/toolsData.ts +0 -116
  826. package/docs-site/vite.config.ts +0 -63
  827. package/src/clients/best-practices-client.ts +0 -332
  828. package/src/clients/cartridge-generation-client.ts +0 -507
  829. package/src/clients/logs/index.ts +0 -18
  830. package/src/clients/logs/log-analyzer.ts +0 -289
  831. package/src/clients/logs/log-client.ts +0 -540
  832. package/src/clients/logs/log-constants.ts +0 -53
  833. package/src/clients/logs/log-file-discovery.ts +0 -299
  834. package/src/clients/logs/log-file-reader.ts +0 -227
  835. package/src/clients/logs/log-formatter.ts +0 -258
  836. package/src/clients/logs/log-processor.ts +0 -402
  837. package/src/clients/logs/log-types.ts +0 -80
  838. package/src/clients/logs/webdav-client-manager.ts +0 -93
  839. package/src/core/handlers/abstract-log-tool-handler.ts +0 -64
  840. package/src/core/handlers/best-practices-handler.ts +0 -55
  841. package/src/core/handlers/job-log-tool-config.ts +0 -89
  842. package/src/core/handlers/log-tool-config.ts +0 -98
  843. package/src/tool-configs/best-practices-tool-config.ts +0 -68
  844. package/src/utils/job-log-tool-config.ts +0 -89
  845. package/src/utils/job-log-utils.ts +0 -78
  846. package/src/utils/log-cache.ts +0 -134
  847. package/src/utils/log-tool-config.ts +0 -98
  848. package/src/utils/log-tool-utils.ts +0 -122
  849. package/tests/best-practices-handler.test.ts +0 -236
  850. package/tests/job-log-utils.test.ts +0 -182
  851. package/tests/mcp/node/get-available-best-practice-guides.docs-only.programmatic.test.js +0 -516
  852. package/tests/mcp/node/get-best-practice-guide.docs-only.programmatic.test.js +0 -733
  853. package/tests/mcp/node/get-hook-reference.docs-only.programmatic.test.js +0 -185
  854. package/tests/mcp/node/search-best-practices.docs-only.programmatic.test.js +0 -836
  855. package/tests/mcp/yaml/get-available-best-practice-guides.docs-only.test.mcp.yml +0 -885
  856. package/tests/mcp/yaml/get-available-best-practice-guides.full-mode.test.mcp.yml +0 -885
  857. package/tests/mcp/yaml/get-best-practice-guide.docs-only.test.mcp.yml +0 -462
  858. package/tests/mcp/yaml/get-best-practice-guide.full-mode.test.mcp.yml +0 -462
  859. package/tests/mcp/yaml/get-hook-reference.docs-only.test.mcp.yml +0 -321
  860. package/tests/mcp/yaml/get-hook-reference.full-mode.test.mcp.yml +0 -321
  861. package/tests/mcp/yaml/search-best-practices.docs-only.test.mcp.yml +0 -655
  862. package/tests/mcp/yaml/search-best-practices.full-mode.test.mcp.yml +0 -655
  863. /package/{docs-site → docs-site-v2}/public/404.html +0 -0
  864. /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods-no-mcp.png +0 -0
  865. /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods.png +0 -0
@@ -0,0 +1,875 @@
1
+ # ISML isprint Element
2
+
3
+ ## Overview
4
+
5
+ The `<isprint>` element is used to format and encode data for output in ISML templates. It provides comprehensive control over how expression results are displayed, including formatting for money, dates, numbers, and quantities, as well as automatic encoding to prevent cross-site scripting (XSS) attacks.
6
+
7
+ **Key Features:** Automatic HTML encoding, flexible formatting options, locale-aware output, context-specific encoding for security, and timezone control for date values.
8
+
9
+ ## Syntax
10
+
11
+ ```isml
12
+ <isprint
13
+ value = output // required
14
+ (style = style_ID) | (formatter = format) // one required, but not both
15
+ timezone = "SITE" | "INSTANCE" | "utc" // optional
16
+ padding = padding_constant // optional
17
+ encoding = "on" | "off" | context // optional (default: "on")
18
+ />
19
+ ```
20
+
21
+ ## Required Attributes
22
+
23
+ ### value
24
+
25
+ **Type:** Expression (NOT String literal)
26
+ **Required:** Yes
27
+ **Allowed Data Type:** Expression only. String literals are not allowed.
28
+
29
+ Specifies an expression that resolves to the text or data you want to output. The expression can evaluate to various data types including Money, Date, Number, Quantity, or String.
30
+
31
+ **Examples:**
32
+ ```isml
33
+ <!-- Money value -->
34
+ <isprint value="${pdict.product.price}" style="MONEY_LONG"/>
35
+
36
+ <!-- Date value -->
37
+ <isprint value="${pdict.order.creationDate}" style="DATE_LONG"/>
38
+
39
+ <!-- Number value -->
40
+ <isprint value="${pdict.productCount}" style="INTEGER"/>
41
+
42
+ <!-- String value (with automatic encoding) -->
43
+ <isprint value="${pdict.product.name}" encoding="on"/>
44
+
45
+ <!-- Complex expression -->
46
+ <isprint value="${pdict.basket.totalGrossPrice.subtract(pdict.basket.totalTax)}" style="MONEY_SHORT"/>
47
+ ```
48
+
49
+ **Important Notes:**
50
+ - Must be an expression (using `${}` syntax)
51
+ - String literals without expression syntax are **not allowed**
52
+ - Encoding is always done **after** formatting
53
+
54
+ ### style OR formatter (Mutually Exclusive)
55
+
56
+ **You must include either `style` OR `formatter`, but not both.**
57
+
58
+ #### style
59
+
60
+ **Type:** String
61
+ **Required:** Yes (if `formatter` is not specified)
62
+
63
+ Specifies a predefined style identifier from standard formatter classes. Styles are locale-aware and automatically adjust formatting based on regional settings.
64
+
65
+ **Available Styles by Data Type:**
66
+
67
+ **Money Formatting:**
68
+ - `MONEY_SHORT` - Two decimal digits, no currency symbol (e.g., "3,333.00")
69
+ - `MONEY_LONG` - Two decimal digits with currency symbol (e.g., "$3,333.00")
70
+
71
+ **Number Formatting:**
72
+ - `INTEGER` - No decimal digits, no decimal separator (e.g., "2,200")
73
+ - `DECIMAL` - Exactly two decimal digits (e.g., "2,200.12")
74
+
75
+ **Quantity Formatting:**
76
+ - `QUANTITY_SHORT` - 0-3 decimal digits, no unit symbol (e.g., "3,333.123")
77
+ - `QUANTITY_LONG` - 0-3 decimal digits with unit symbol (e.g., "3,333.123 kg")
78
+
79
+ **Date Formatting:**
80
+ - `DATE_SHORT` - Short date format, no time (e.g., "9/25/99")
81
+ - `DATE_LONG` - Long date format, no time (e.g., "SEP 25, 1999")
82
+ - `DATE_TIME` - Clock time only (e.g., "7:55:55 PM")
83
+
84
+ **Examples:**
85
+ ```isml
86
+ <!-- Money with currency symbol -->
87
+ <isprint value="${pdict.product.price}" style="MONEY_LONG"/>
88
+ <!-- Output: "$49.99" -->
89
+
90
+ <!-- Integer without decimals -->
91
+ <isprint value="${pdict.itemCount}" style="INTEGER"/>
92
+ <!-- Output: "125" -->
93
+
94
+ <!-- Short date format -->
95
+ <isprint value="${pdict.order.creationDate}" style="DATE_SHORT"/>
96
+ <!-- Output: "9/25/99" -->
97
+ ```
98
+
99
+ #### formatter
100
+
101
+ **Type:** String or Expression
102
+ **Required:** Yes (if `style` is not specified)
103
+
104
+ Defines a custom formatting string to control how expression results are output. This allows you to create specialized formats beyond the predefined styles.
105
+
106
+ **Formatter Placeholders:**
107
+
108
+ | Placeholder | Action | Usage |
109
+ |-------------|--------|-------|
110
+ | `"0"` | Required digit placeholder | Forces digit display |
111
+ | `"#"` | Optional digit placeholder | Shows digit only if present |
112
+ | `"*"` | Required symbol placeholder | Currency or unit symbol |
113
+
114
+ **Examples:**
115
+ ```isml
116
+ <!-- Custom money format: "$ 03.00" -->
117
+ <isprint value="${pdict.amount}" formatter="* #,#00.0#"/>
118
+
119
+ <!-- Custom quantity format with unit -->
120
+ <isprint value="${pdict.weight}" formatter="#,#00.0# *;(-#,#00.0# *)"/>
121
+
122
+ <!-- Custom date format: "Wed, July 10, '96" -->
123
+ <isprint value="${pdict.date}" formatter="EEE, MMM d, 'yy"/>
124
+
125
+ <!-- Time format: "12:08 PM" -->
126
+ <isprint value="${pdict.date}" formatter="h a"/>
127
+
128
+ <!-- Page number with optional digit -->
129
+ <isprint value="${pdict.pagingmodel.start+1}" formatter="#"/>
130
+ ```
131
+
132
+ **Date Formatter Patterns:**
133
+
134
+ | Pattern | Description | Example |
135
+ |---------|-------------|---------|
136
+ | `EEE` | Day of week (short) | "Wed" |
137
+ | `EEEE` | Day of week (full) | "Wednesday" |
138
+ | `MMM` | Month (short) | "Jul" |
139
+ | `MMMM` | Month (full) | "July" |
140
+ | `d` | Day of month | "10" |
141
+ | `yy` | Year (2 digits) | "96" |
142
+ | `yyyy` | Year (4 digits) | "1996" |
143
+ | `h` | Hour (12-hour) | "12" |
144
+ | `H` | Hour (24-hour) | "23" |
145
+ | `a` | AM/PM marker | "PM" |
146
+ | `z` | Time zone | "PST" |
147
+
148
+ ## Optional Attributes
149
+
150
+ ### timezone
151
+
152
+ **Type:** String
153
+ **Allowed Values:** `"SITE"`, `"INSTANCE"`, `"utc"`
154
+ **Default:** `"SITE"`
155
+ **Optional:** Yes
156
+
157
+ Specifies the time zone used for printing date values. This attribute enables you to control whether dates are displayed using the instance time zone, site time zone, or without time zone conversion.
158
+
159
+ **Important:** Time zone identifiers are case-insensitive.
160
+
161
+ **Values:**
162
+
163
+ #### SITE (default)
164
+
165
+ Prints time zones as specified for your site. Defined through Business Manager via **Site Preferences > Time Zone**.
166
+
167
+ ```isml
168
+ <isprint value="${new Date()}" style="DATE_LONG" timezone="SITE"/>
169
+ ```
170
+
171
+ #### INSTANCE
172
+
173
+ Prints time zones as specified for your instance. Defined through Business Manager via **Global Preferences > Instance Time Zone**.
174
+
175
+ ```isml
176
+ <isprint value="${new Date()}" style="DATE_LONG" timezone="INSTANCE"/>
177
+ ```
178
+
179
+ #### utc
180
+
181
+ Prints date values without time zone conversion. Particularly important for date-only attributes like `customer.birthday` that have no time component.
182
+
183
+ **Use Case:** For date attributes that should have no time component (like birthdays), use `"utc"` to ensure no time zone conversion occurs. User input for date attributes is always interpreted as UTC time in Business Manager.
184
+
185
+ ```isml
186
+ <!-- Customer birthday (no time component) -->
187
+ <isprint value="${pdict.customer.birthday}" style="DATE_SHORT" timezone="utc"/>
188
+ ```
189
+
190
+ **Examples:**
191
+ ```isml
192
+ <!-- Site time zone -->
193
+ <isprint value="${new Date()}" style="DATE_LONG" timezone="SITE"/>
194
+ <!-- Output: "SEP 25, 1999" (site timezone) -->
195
+
196
+ <!-- Instance time zone -->
197
+ <isprint value="${new Date()}" style="DATE_LONG" timezone="INSTANCE"/>
198
+ <!-- Output: "SEP 25, 1999" (instance timezone) -->
199
+
200
+ <!-- UTC (no conversion) -->
201
+ <isprint value="${pdict.customer.birthday}" style="DATE_SHORT" timezone="utc"/>
202
+ <!-- Output: "9/25/99" (no timezone conversion) -->
203
+ ```
204
+
205
+ ### padding
206
+
207
+ **Type:** String or Expression
208
+ **Optional:** Yes
209
+ **Use Case:** Mail templates (plain text, not HTML)
210
+
211
+ Defines field width and spacing for plain text output, particularly in mail templates. This attribute controls text alignment and truncation.
212
+
213
+ **Value Rules:**
214
+ - Can be any positive or negative number
215
+ - **Absolute value** defines the field width
216
+ - **Positive value** produces **left-aligned** output
217
+ - **Negative value** produces **right-aligned** output
218
+ - If output string exceeds field width, it's **truncated at the right end**
219
+
220
+ **Examples:**
221
+ ```isml
222
+ <!-- Right-aligned in 10-character field -->
223
+ <isprint value="${pdict.product.price}" padding="-10"/>
224
+ <!-- Output: " 5.00 USD" (padded left with spaces) -->
225
+
226
+ <!-- Left-aligned in 10-character field -->
227
+ <isprint value="${pdict.product.price}" padding="+10"/>
228
+ <!-- Output: "5.00 USD " (padded right with spaces) -->
229
+
230
+ <!-- Truncation when exceeds field width -->
231
+ <isprint value="#'foolish'#" padding="+3"/>
232
+ <!-- Output: "foo" (truncated from "foolish") -->
233
+ ```
234
+
235
+ **Typical Use Case - Product List in Email:**
236
+ ```isml
237
+ <!-- Mail template (plain text) -->
238
+ Product Name Price Qty
239
+ -----------------------------------------------
240
+ <isloop items="${pdict.lineItems}" var="item">
241
+ <isprint value="${item.productName}" padding="+25"/> <isprint value="${item.price}" padding="-10"/> <isprint value="${item.quantity}" padding="-5"/>
242
+ </isloop>
243
+ ```
244
+
245
+ ### encoding
246
+
247
+ **Type:** String
248
+ **Allowed Values:** `"on"`, `"off"`, or context identifier
249
+ **Default:** `"on"`
250
+ **Optional:** Yes
251
+
252
+ Controls automatic encoding of output to prevent cross-site scripting (XSS) attacks. With this attribute, you can explicitly switch encoding on/off or specify context-specific encoding.
253
+
254
+ **Important:** Salesforce B2C Commerce supports encoding in HTML, XML, and WML. Even if encoding is turned off, you can use the `StringUtils` API to encode individual strings.
255
+
256
+ **Values:**
257
+
258
+ #### "on" (default)
259
+
260
+ Automatically encodes HTML entities to prevent XSS attacks.
261
+
262
+ ```isml
263
+ <isprint value="${pdict.userInput}" encoding="on"/>
264
+ <!-- Input: <script>alert('xss')</script> -->
265
+ <!-- Output: &lt;script&gt;alert('xss')&lt;/script&gt; -->
266
+ ```
267
+
268
+ #### "off"
269
+
270
+ Disables automatic encoding. **Use with extreme caution** - only when output is already safe or intentionally contains HTML.
271
+
272
+ ```isml
273
+ <isprint value="${pdict.richTextContent}" encoding="off"/>
274
+ <!-- Output: raw HTML (as-is) -->
275
+ ```
276
+
277
+ #### Context-Specific Encoding
278
+
279
+ Each context value maps to a method in the `SecureEncoder` class and provides specialized encoding for different usage scenarios:
280
+
281
+ **HTML Contexts:**
282
+ - `htmlcontent` - General HTML content context
283
+ - `htmlsinglequote` - HTML attribute guarded by single quote
284
+ - `htmldoublequote` - HTML attribute guarded by double quote
285
+ - `htmlunquote` - Unguarded HTML attribute (no quotes)
286
+
287
+ **JavaScript Contexts:**
288
+ - `jshtml` - JavaScript inside HTML context
289
+ - `jsattribute` - JavaScript inside HTML attribute
290
+ - `jsblock` - JavaScript inside HTML block
291
+ - `jssource` - JavaScript inside JavaScript source file
292
+
293
+ **JSON Context:**
294
+ - `jsonvalue` - JSON object value (prevents escaping into trusted context)
295
+
296
+ **URI Contexts:**
297
+ - `uricomponent` - URI component encoding
298
+ - `uristrict` - Strict URI component encoding
299
+
300
+ **XML Contexts:**
301
+ - `xmlcontent` - General XML content
302
+ - `xmlsinglequote` - XML attribute with single quote
303
+ - `xmldoublequote` - XML attribute with double quote
304
+ - `xmlcomment` - XML comment context
305
+
306
+ **Examples:**
307
+ ```isml
308
+ <!-- HTML attribute with double quotes -->
309
+ <div id="<isprint value="${unsafeData}" encoding="htmldoublequote"/>">
310
+ </div>
311
+
312
+ <!-- JavaScript block -->
313
+ <script type="text/javascript">
314
+ var data = "<isprint value="${unsafeData}" encoding="jsblock"/>";
315
+ </script>
316
+
317
+ <!-- JSON value -->
318
+ <script>
319
+ var json = {"trusted_data": <isprint value="${unsafeData}" encoding="jsonvalue"/>};
320
+ return JSON.stringify(json);
321
+ </script>
322
+
323
+ <!-- URI component -->
324
+ <a href="?param=<isprint value="${searchTerm}" encoding="uricomponent"/>">Search</a>
325
+
326
+ <!-- XML attribute -->
327
+ <item name="<isprint value="${productName}" encoding="xmldoublequote"/>"/>
328
+ ```
329
+
330
+ ## Purpose
331
+
332
+ The `<isprint>` element serves to:
333
+
334
+ 1. **Output Expression Results:** Display the result of expressions and template variables
335
+ 2. **Format Data:** Apply locale-aware formatting to Money, Date, Number, and Quantity values
336
+ 3. **Encode Output:** Automatically encode HTML entities to prevent XSS attacks
337
+ 4. **Control Display:** Manage timezone, padding, and custom formatting for precise output control
338
+ 5. **Template Optimization:** Contribute to optimizing template code with explicit output control
339
+
340
+ **Note:** Even though it's possible to output expression results without `<isprint>` (using `${expression}` directly), you should always use `<isprint>` because it contributes to optimizing your template code and provides explicit control over formatting and encoding.
341
+
342
+ ## Default Formatting Styles
343
+
344
+ When no style or formatter is explicitly specified, the following default styles are used:
345
+
346
+ | Data Type | Default Style | Example Output |
347
+ |-----------|---------------|----------------|
348
+ | Money | `MONEY_LONG` | "$3,333.00" |
349
+ | Number | `DECIMAL` | "2,200.12" |
350
+ | Quantity | `QUANTITY_SHORT` | "3,333.123" |
351
+ | Date | `DATE_SHORT` | "9/25/99" |
352
+
353
+ ## Automatic Encoding Behavior
354
+
355
+ ### When Encoding is Applied
356
+
357
+ Expression output is **automatically encoded** in the following cases:
358
+
359
+ 1. **Direct Template Embedding:** Expression embedded directly in template
360
+ ```isml
361
+ ${pdict.product.name} <!-- Automatically encoded -->
362
+ ```
363
+
364
+ 2. **HTML Attributes:** Expression used for HTML attribute values
365
+ ```isml
366
+ <div class="${pdict.className}"> <!-- Automatically encoded -->
367
+ ```
368
+
369
+ ### When Encoding is NOT Applied
370
+
371
+ Expression output is **not automatically encoded** when:
372
+
373
+ 1. **ISML Tag Attributes:** Expression used in ISML tag attributes
374
+ ```isml
375
+ <isif condition="${expression}"> <!-- No encoding -->
376
+ ```
377
+
378
+ **Recommendation:** Use `<isprint>` for granular control of expression output, especially when the result contains special characters.
379
+
380
+ ### Encoding Example
381
+
382
+ ```isml
383
+ <!-- Template variable with special character -->
384
+ <!-- Assume: pdict.product.name = 'Nokia 447X Pro 17" Monitor' -->
385
+
386
+ <!-- ISML code -->
387
+ <isprint value="${pdict.product.name}"/>
388
+
389
+ <!-- Generated HTML -->
390
+ Nokia 447X Pro 17&quot; Monitor
391
+
392
+ <!-- Displayed in browser -->
393
+ Nokia 447X Pro 17" Monitor
394
+ ```
395
+
396
+ ## Common Use Cases
397
+
398
+ ### Basic Data Output
399
+
400
+ ```isml
401
+ <!-- Product price with currency -->
402
+ <isprint value="${pdict.product.price}" style="MONEY_LONG"/>
403
+ <!-- Output: "$49.99" -->
404
+
405
+ <!-- Product name (encoded) -->
406
+ <isprint value="${pdict.product.name}" encoding="on"/>
407
+ <!-- Output: "Nokia 447X Pro 17&quot; Monitor" -->
408
+
409
+ <!-- Item count as integer -->
410
+ <isprint value="${pdict.basket.productLineItems.size()}" style="INTEGER"/>
411
+ <!-- Output: "5" -->
412
+ ```
413
+
414
+ ### Money Formatting
415
+
416
+ ```isml
417
+ <!-- Default money formatting (MONEY_LONG) -->
418
+ <isprint value="${pdict.basket.totalGrossPrice}"/>
419
+ <!-- Output: "$125.50" -->
420
+
421
+ <!-- Short format (no currency symbol) -->
422
+ <isprint value="${pdict.basket.totalGrossPrice}" style="MONEY_SHORT"/>
423
+ <!-- Output: "125.50" -->
424
+
425
+ <!-- Custom money format -->
426
+ <isprint value="${pdict.basket.totalGrossPrice}" formatter="* #00.0#"/>
427
+ <!-- Output: "$ 125.50" -->
428
+
429
+ <!-- Price comparison -->
430
+ <div class="pricing">
431
+ <span class="original-price">
432
+ <isprint value="${pdict.product.price.list}" style="MONEY_LONG"/>
433
+ </span>
434
+ <span class="sale-price">
435
+ <isprint value="${pdict.product.price.sales}" style="MONEY_LONG"/>
436
+ </span>
437
+ </div>
438
+ ```
439
+
440
+ ### Date and Time Formatting
441
+
442
+ ```isml
443
+ <!-- Short date format -->
444
+ <isprint value="${pdict.order.creationDate}" style="DATE_SHORT"/>
445
+ <!-- Output: "9/25/99" -->
446
+
447
+ <!-- Long date format -->
448
+ <isprint value="${pdict.order.creationDate}" style="DATE_LONG"/>
449
+ <!-- Output: "SEP 25, 1999" -->
450
+
451
+ <!-- Time only -->
452
+ <isprint value="${pdict.order.creationDate}" style="DATE_TIME"/>
453
+ <!-- Output: "7:55:55 PM" -->
454
+
455
+ <!-- Custom date format -->
456
+ <isprint value="${pdict.order.creationDate}" formatter="EEE, MMM d, 'yy"/>
457
+ <!-- Output: "Wed, Sep 25, '99" -->
458
+
459
+ <!-- Birthday (no timezone conversion) -->
460
+ <isprint value="${pdict.customer.birthday}" style="DATE_SHORT" timezone="utc"/>
461
+ <!-- Output: "3/15/85" -->
462
+
463
+ <!-- Instance timezone -->
464
+ <isprint value="${new Date()}" style="DATE_LONG" timezone="INSTANCE"/>
465
+ <!-- Output: "JAN 15, 2024" (instance timezone) -->
466
+ ```
467
+
468
+ ### Number and Quantity Formatting
469
+
470
+ ```isml
471
+ <!-- Integer (no decimals) -->
472
+ <isprint value="${pdict.searchResults.count}" style="INTEGER"/>
473
+ <!-- Output: "1,234" -->
474
+
475
+ <!-- Decimal (two decimal places) -->
476
+ <isprint value="${pdict.product.rating}" style="DECIMAL"/>
477
+ <!-- Output: "4.75" -->
478
+
479
+ <!-- Quantity with unit -->
480
+ <isprint value="${pdict.product.weight}" style="QUANTITY_LONG"/>
481
+ <!-- Output: "3.5 kg" -->
482
+
483
+ <!-- Custom quantity format -->
484
+ <isprint value="${pdict.product.weight}" formatter="#,#00.0# *"/>
485
+ <!-- Output: "3.50 kg" -->
486
+ ```
487
+
488
+ ### Security and Encoding
489
+
490
+ ```isml
491
+ <!-- Safe HTML output (encoded) -->
492
+ <div class="product-description">
493
+ <isprint value="${pdict.product.description}" encoding="on"/>
494
+ </div>
495
+
496
+ <!-- HTML attribute encoding -->
497
+ <div id="<isprint value="${pdict.elementId}" encoding="htmldoublequote"/>"
498
+ class="product-tile">
499
+ </div>
500
+
501
+ <!-- JavaScript context -->
502
+ <script>
503
+ var productName = "<isprint value="${pdict.product.name}" encoding="jsblock"/>";
504
+ console.log(productName);
505
+ </script>
506
+
507
+ <!-- JSON context -->
508
+ <script>
509
+ var productData = {
510
+ "name": <isprint value="${pdict.product.name}" encoding="jsonvalue"/>,
511
+ "price": ${pdict.product.price.value}
512
+ };
513
+ </script>
514
+
515
+ <!-- URL parameter -->
516
+ <a href="?search=<isprint value="${pdict.searchTerm}" encoding="uricomponent"/>">
517
+ Search Results
518
+ </a>
519
+
520
+ <!-- Rich text content (intentionally unencoded) -->
521
+ <div class="rich-content">
522
+ <isprint value="${pdict.content.richText}" encoding="off"/>
523
+ </div>
524
+ ```
525
+
526
+ ### Mail Templates with Padding
527
+
528
+ ```isml
529
+ <!-- Plain text email receipt -->
530
+ PRODUCT PRICE QTY TOTAL
531
+ ----------------------------------------------------------
532
+ <isloop items="${pdict.lineItems}" var="item">
533
+ <isprint value="${item.productName}" padding="+30"/><isprint value="${item.price}" padding="-10" style="MONEY_SHORT"/><isprint value="${item.quantity}" padding="-7" style="INTEGER"/><isprint value="${item.total}" padding="-10" style="MONEY_SHORT"/>
534
+ </isloop>
535
+ ----------------------------------------------------------
536
+ TOTAL:<isprint value="${pdict.orderTotal}" padding="-52" style="MONEY_LONG"/>
537
+ ```
538
+
539
+ ### Pagination
540
+
541
+ ```isml
542
+ <!-- Page numbering -->
543
+ <div class="pagination">
544
+ Showing
545
+ <isprint value="${pdict.pagingmodel.start + 1}" formatter="#"/>
546
+ -
547
+ <isprint value="${pdict.pagingmodel.end}" formatter="#"/>
548
+ of
549
+ <isprint value="${pdict.pagingmodel.total}" formatter="#"/>
550
+ results
551
+ </div>
552
+ <!-- Output: "Showing 1-20 of 145 results" -->
553
+ ```
554
+
555
+ ### Complex Expressions
556
+
557
+ ```isml
558
+ <!-- Calculated discount percentage -->
559
+ <isprint value="${((pdict.product.price.list.value - pdict.product.price.sales.value) / pdict.product.price.list.value * 100)}" formatter="#0"/>% OFF
560
+
561
+ <!-- Net price (excluding tax) -->
562
+ <isprint value="${pdict.basket.totalGrossPrice.subtract(pdict.basket.totalTax)}" style="MONEY_LONG"/>
563
+
564
+ <!-- Average rating -->
565
+ <isprint value="${pdict.product.ratingsTotal / pdict.product.ratingsCount}" formatter="#.0"/>
566
+ ```
567
+
568
+ ## Best Practices
569
+
570
+ ### 1. Always Use isprint for Output
571
+
572
+ **Recommended:** Use `<isprint>` for all expression output for consistency, control, and optimization.
573
+
574
+ ```isml
575
+ <!-- Good: Explicit control -->
576
+ <isprint value="${pdict.product.name}" encoding="on"/>
577
+
578
+ <!-- Acceptable but less control -->
579
+ ${pdict.product.name}
580
+
581
+ <!-- Avoid: No encoding control in attributes -->
582
+ <div data-product="${pdict.product.id}"> <!-- Better with isprint -->
583
+ ```
584
+
585
+ ### 2. Choose Appropriate Encoding Context
586
+
587
+ Match the encoding context to where the output will be used:
588
+
589
+ ```isml
590
+ <!-- HTML content -->
591
+ <div><isprint value="${content}" encoding="htmlcontent"/></div>
592
+
593
+ <!-- HTML attribute with double quotes -->
594
+ <div id="<isprint value="${id}" encoding="htmldoublequote"/>"></div>
595
+
596
+ <!-- JavaScript block -->
597
+ <script>var data = "<isprint value="${data}" encoding="jsblock"/>";</script>
598
+
599
+ <!-- JSON value -->
600
+ <script>var json = {"value": <isprint value="${data}" encoding="jsonvalue"/>};</script>
601
+
602
+ <!-- URL component -->
603
+ <a href="?q=<isprint value="${query}" encoding="uricomponent"/>">Link</a>
604
+ ```
605
+
606
+ ### 3. Use Styles for Standard Formatting
607
+
608
+ Prefer predefined styles over custom formatters when possible:
609
+
610
+ ```isml
611
+ <!-- Good: Standard style -->
612
+ <isprint value="${pdict.product.price}" style="MONEY_LONG"/>
613
+
614
+ <!-- Only when needed: Custom formatter -->
615
+ <isprint value="${pdict.product.price}" formatter="* #,##0.00"/>
616
+ ```
617
+
618
+ ### 4. Specify Timezone for Date Values
619
+
620
+ Be explicit about timezone handling for dates:
621
+
622
+ ```isml
623
+ <!-- Date with time component: use SITE or INSTANCE -->
624
+ <isprint value="${pdict.order.creationDate}" style="DATE_LONG" timezone="SITE"/>
625
+
626
+ <!-- Date without time (birthday, anniversary): use utc -->
627
+ <isprint value="${pdict.customer.birthday}" style="DATE_SHORT" timezone="utc"/>
628
+ ```
629
+
630
+ ### 5. Never Disable Encoding for User Input
631
+
632
+ **CRITICAL:** Never use `encoding="off"` for user-provided content:
633
+
634
+ ```isml
635
+ <!-- DANGEROUS: XSS vulnerability -->
636
+ <isprint value="${pdict.userComment}" encoding="off"/> <!-- DON'T DO THIS -->
637
+
638
+ <!-- SAFE: Encoded output -->
639
+ <isprint value="${pdict.userComment}" encoding="on"/>
640
+
641
+ <!-- SAFE: Context-specific encoding -->
642
+ <isprint value="${pdict.userComment}" encoding="htmlcontent"/>
643
+ ```
644
+
645
+ ### 6. Use Formatters for Consistent Display
646
+
647
+ Create consistent number displays with custom formatters:
648
+
649
+ ```isml
650
+ <!-- Consistent decimal places for ratings -->
651
+ <isprint value="${pdict.product.rating}" formatter="#.0"/>
652
+ <!-- Always shows one decimal: "4.5", "3.0", "5.0" -->
653
+
654
+ <!-- Consistent quantity display -->
655
+ <isprint value="${pdict.product.quantity}" formatter="#,##0"/>
656
+ <!-- Always shows thousands separator: "1,000", "10,000" -->
657
+ ```
658
+
659
+ ## Formatting Reference Tables
660
+
661
+ ### Money Formatting Styles
662
+
663
+ | Style | Description | Input | Output |
664
+ |-------|-------------|-------|--------|
665
+ | `MONEY_SHORT` | Two decimals, no currency | 3333 | "3,333.00" |
666
+ | `MONEY_LONG` | Two decimals, with currency | 3333 | "$3,333.00" |
667
+
668
+ **Note:** Currency symbols are based on the Default Currency set per site in **Administration > Sites > Manage Sites > [Site] > General**.
669
+
670
+ ### Number Formatting Styles
671
+
672
+ | Style | Description | Input | Output |
673
+ |-------|-------------|-------|--------|
674
+ | `INTEGER` | No decimals, no separator | 2200.1234 | "2,200" |
675
+ | `DECIMAL` | Exactly two decimals | 2200.1234 | "2,200.12" |
676
+
677
+ ### Quantity Formatting Styles
678
+
679
+ | Style | Description | Examples |
680
+ |-------|-------------|----------|
681
+ | `QUANTITY_SHORT` | 0-3 decimals, no unit | 3333 kg → "3,333"<br>3333.1 kg → "3,333.1"<br>3333.1234 kg → "3,333.123" |
682
+ | `QUANTITY_LONG` | 0-3 decimals, with unit | 3333 kg → "3,333 kg"<br>3333.1 kg → "3,333.1 kg"<br>3333.1234 kg → "3,333.123 kg" |
683
+
684
+ ### Date Formatting Styles
685
+
686
+ | Style | Description | Example |
687
+ |-------|-------------|---------|
688
+ | `DATE_SHORT` | Short date, no time | "9/25/99" |
689
+ | `DATE_LONG` | Long date, no time | "SEP 25, 1999" |
690
+ | `DATE_TIME` | Time only | "7:55:55 PM" |
691
+
692
+ ### Custom Formatter Examples
693
+
694
+ | Type | Formatter | Input | Output |
695
+ |------|-----------|-------|--------|
696
+ | Money | `"* #,#00.0#"` | 3 | "$ 03.00" |
697
+ | Money | `"* #,#00.0#"` | 3333.123 | "$ 3,333.12" |
698
+ | Quantity | `"#,#00.0# *"` | 3 kg | "03.0 kg" |
699
+ | Quantity | `"#,#00.0# *"` | 3333.333 kg | "3,333.33 kg" |
700
+ | Date | `"EEE, MMM d, 'yy"` | Date | "Wed, July 10, '96" |
701
+ | Date | `"h a"` | Date | "12:08 PM" |
702
+ | Date | `"K a, z"` | Date | "0:00 PM, PST" |
703
+ | Date | `"yyyyy.MMMMM.dd GGG hh aaa"` | Date | "1996.July.10 AD 12:08 PM" |
704
+
705
+ ## Common Errors and Troubleshooting
706
+
707
+ ### Formatting Not Applied
708
+
709
+ **Symptom:** Output appears without proper formatting.
710
+
711
+ **Causes:**
712
+ 1. Missing `style` or `formatter` attribute
713
+ 2. Wrong data type for the specified style
714
+ 3. Expression returns null or undefined
715
+
716
+ **Solutions:**
717
+ ```isml
718
+ <!-- Bad: No formatting specified -->
719
+ <isprint value="${pdict.product.price}"/> <!-- Uses default -->
720
+
721
+ <!-- Good: Explicit style -->
722
+ <isprint value="${pdict.product.price}" style="MONEY_LONG"/>
723
+
724
+ <!-- Check for null values -->
725
+ <isif condition="${pdict.product.price}">
726
+ <isprint value="${pdict.product.price}" style="MONEY_LONG"/>
727
+ <iselse>
728
+ <span>Price not available</span>
729
+ </isif>
730
+ ```
731
+
732
+ ### Encoding Issues
733
+
734
+ **Symptom:** Special characters display as HTML entities or cause XSS vulnerabilities.
735
+
736
+ **Causes:**
737
+ 1. Incorrect encoding setting
738
+ 2. Wrong context for encoding
739
+ 3. Double encoding
740
+
741
+ **Solutions:**
742
+ ```isml
743
+ <!-- For user input: always encode -->
744
+ <isprint value="${pdict.userInput}" encoding="on"/>
745
+
746
+ <!-- For trusted HTML content: disable encoding -->
747
+ <isprint value="${pdict.richContent}" encoding="off"/>
748
+
749
+ <!-- Use correct context -->
750
+ <div id="<isprint value="${id}" encoding="htmldoublequote"/>"> <!-- Not "on" -->
751
+ ```
752
+
753
+ ### Timezone Confusion
754
+
755
+ **Symptom:** Dates display in wrong timezone or dates shift unexpectedly.
756
+
757
+ **Solutions:**
758
+ ```isml
759
+ <!-- For dates with time component: use SITE or INSTANCE -->
760
+ <isprint value="${pdict.order.creationDate}" style="DATE_LONG" timezone="SITE"/>
761
+
762
+ <!-- For dates without time (birthdays): use utc -->
763
+ <isprint value="${pdict.customer.birthday}" style="DATE_SHORT" timezone="utc"/>
764
+ ```
765
+
766
+ ### String Literals Not Allowed
767
+
768
+ **Symptom:** Error when using string literals with `value` attribute.
769
+
770
+ **Cause:** The `value` attribute requires expressions, not string literals.
771
+
772
+ **Solution:**
773
+ ```isml
774
+ <!-- Bad: String literal -->
775
+ <isprint value="Hello World"/> <!-- ERROR -->
776
+
777
+ <!-- Good: Expression -->
778
+ <isprint value="${'Hello World'}"/>
779
+
780
+ <!-- Better: Template variable -->
781
+ <isprint value="${pdict.greeting}"/>
782
+ ```
783
+
784
+ ## Performance Considerations
785
+
786
+ ### 1. Use Styles Over Custom Formatters When Possible
787
+
788
+ Predefined styles are optimized and cached:
789
+
790
+ ```isml
791
+ <!-- Faster: Predefined style -->
792
+ <isprint value="${price}" style="MONEY_LONG"/>
793
+
794
+ <!-- Slower: Custom formatter (only when needed) -->
795
+ <isprint value="${price}" formatter="* #,##0.00"/>
796
+ ```
797
+
798
+ ### 2. Avoid Complex Expressions
799
+
800
+ Pre-calculate complex expressions in controllers:
801
+
802
+ ```isml
803
+ <!-- Less efficient: Complex calculation in template -->
804
+ <isprint value="${(price.list.value - price.sales.value) / price.list.value * 100}" formatter="#0"/>
805
+
806
+ <!-- More efficient: Calculate in controller -->
807
+ <isprint value="${pdict.discountPercentage}" formatter="#0"/>
808
+ ```
809
+
810
+ ### 3. Cache Formatted Output When Appropriate
811
+
812
+ For repeated values, consider caching:
813
+
814
+ ```isml
815
+ <isset name="formattedPrice" value="${pdict.product.price}" scope="page"/>
816
+ <isloop items="${variants}" var="variant">
817
+ <isprint value="${formattedPrice}" style="MONEY_LONG"/>
818
+ </isloop>
819
+ ```
820
+
821
+ ## Security Considerations
822
+
823
+ ### Cross-Site Scripting (XSS) Prevention
824
+
825
+ **CRITICAL:** Always use appropriate encoding for user-generated content:
826
+
827
+ ```isml
828
+ <!-- User input: ALWAYS encode -->
829
+ <isprint value="${pdict.userComment}" encoding="on"/>
830
+
831
+ <!-- Context-specific encoding -->
832
+ <div data-comment="<isprint value="${pdict.userComment}" encoding="htmldoublequote"/>"></div>
833
+
834
+ <script>
835
+ var comment = "<isprint value="${pdict.userComment}" encoding="jsblock"/>";
836
+ </script>
837
+ ```
838
+
839
+ ### Trusted Content vs User Input
840
+
841
+ Distinguish between trusted content and user input:
842
+
843
+ ```isml
844
+ <!-- Trusted: CMS content (can disable encoding) -->
845
+ <isprint value="${pdict.contentAsset.body}" encoding="off"/>
846
+
847
+ <!-- User input: MUST encode -->
848
+ <isprint value="${pdict.searchQuery}" encoding="on"/>
849
+
850
+ <!-- User input in URL: Use uricomponent -->
851
+ <a href="?q=<isprint value="${pdict.searchQuery}" encoding="uricomponent"/>">
852
+ ```
853
+
854
+ ## Related Elements
855
+
856
+ - **`<isset>`** - Set variables that can be used with `<isprint>`
857
+ - **`<isif>`** - Conditionally print values
858
+ - **`<isloop>`** - Print values in loops
859
+ - **`<isscript>`** - Calculate expressions to be printed
860
+
861
+ ## Related APIs
862
+
863
+ - **`dw.util.StringUtils`** - String utility methods including encoding
864
+ - **`dw.web.URLUtils`** - URL generation and encoding
865
+ - **`dw.util.SecureEncoder`** - Context-specific encoding methods
866
+ - **`dw.value.Money`** - Money value type
867
+ - **`dw.util.Calendar`** - Date and time handling
868
+
869
+ ## See Also
870
+
871
+ - [ISML Expression Syntax](./expressions.md)
872
+ - [StringUtils Class](../dw_util/StringUtils.md)
873
+ - [SecureEncoder Class](../dw_util/SecureEncoder.md)
874
+ - [Money Class](../dw_value/Money.md)
875
+ - [Security Skill](../../ai-instructions/skills/sfcc-security/SKILL.md)