A comprehensive Neovim plugin for Salesforce Commerce Cloud (SFCC) development, inspired by and designed to match the functionality of the SqrTT/prophet VSCode extension.
- Upload cartridges via WebDAV to SFCC sandboxes
- Auto-upload on file save with smart change detection
- Enhanced progress notifications with visual progress bars
- Support for multiple cartridge upload
- Intelligent cartridge detection using
.projectfiles - Works with existing
dw.jsonconfiguration
- File Type Detection: Auto-detection of
.isml,.ds, and SFCC JavaScript files - Code Snippets: Comprehensive snippets for ISML templates and SFCC JavaScript
- Enhanced Configuration: Robust
dw.jsonvalidation and error handling - Smart File Filtering: Only uploads relevant SFCC files
- Status Reporting:
:ProphetStatuscommand for comprehensive plugin status - Interactive Cartridge Selection: UI selector when no cartridge specified
- Better Error Messages: Clear, actionable error reporting
- Auto-formatting: Proper indentation settings for SFCC file types
- Basic debugging command structure (foundation for future SDAPI 2.0 integration)
- Debug status reporting
- Placeholder for breakpoint management (requires full SDAPI implementation)
- Neovim 0.9+
curlandzipcommandsdw.jsonin project root
{
"IFAKA/prophet.nvim",
config = function()
require("prophet").setup()
end,
}Default:
require("prophet").setup()Custom:
require("prophet").setup({
auto_upload = false,
clean_on_start = true,
notify = true,
ignore_patterns = { "node_modules", "%.git", "%.zip$" },
})dw.json Configuration:
{
"hostname": "your-sandbox.dx.commercecloud.salesforce.com",
"username": "your.email@company.com",
"password": "your-api-key",
"code-version": "version1",
"cartridge": ["app_custom_site", "int_payment"],
"cartridgePath": "app_custom_site:int_payment"
}Note: Both cartridge array and cartridgePath string formats are supported. The plugin will auto-detect and normalize the configuration.
:ProphetEnable- Enable auto-upload watching:ProphetDisable- Disable auto-upload watching:ProphetToggle- Toggle auto-upload state:ProphetClean- Clean upload all cartridges (force upload):ProphetUpload [name]- Upload specific cartridge (shows picker if no name):ProphetStatus- Show comprehensive plugin status and configuration:ProphetCheckSandbox- Test sandbox connectivity and authentication
:ProphetDebugConnect- Connect to SFCC debugger (placeholder):ProphetDebugDisconnect- Disconnect from debugger (placeholder):ProphetDebugBreakpoint- Toggle breakpoint (placeholder)
Note: Full debugging requires SDAPI 2.0 implementation - currently shows placeholders
No defaults. Example:
vim.keymap.set("n", "<leader>pe", "<cmd>ProphetEnable<cr>")
vim.keymap.set("n", "<leader>pd", "<cmd>ProphetDisable<cr>")
vim.keymap.set("n", "<leader>pc", "<cmd>ProphetClean<cr>")Manual:
:ProphetCleanAuto:
:ProphetEnable
" Edit files - auto-uploads on save
:ProphetDisableThe plugin supports multiple SFCC project structures and automatically detects cartridges:
project/
βββ dw.json
βββ cartridges/ # Any folder ending with '_cartridges'
β βββ app_custom_site/
β β βββ .project # Required for cartridge detection
β β βββ cartridge/
β βββ int_payment/
β βββ .project
β βββ cartridge/
project/
βββ dw.json
βββ kiwoko_cartridges/
βββ cartridges/ # Nested cartridge structure
βββ app_custom_kiwoko/
β βββ .project
β βββ cartridge/
βββ plugin_seo/
β βββ .project
β βββ cartridge/
βββ [75+ more cartridges...]
The plugin now uses the same logic as SqrTT/prophet:
- Recursive Search: Finds all
.projectfiles in the workspace - Validation: Checks each
.projectfile forcom.demandware.studio.core.beehiveNature - Fallback: Supports legacy
*_cartridgesdirectory pattern for backward compatibility
Available in .isml files:
isinclude- Include templatesismodule- Module inclusionisdecorate- Template decorationisif/iselseif/iselse- Conditional blocksisloop- Collection iterationisset- Variable settingisscript- Script blocksform- Forms with CSRF protectionresource- Resource message callsurl- URL generation
Available in .js files:
controller- Basic SFCC controller structurereq-dw- DW API module requiresreq-cart/req-base- Cartridge module requiresmiddleware- Server middlewareresource- Resource message callstransaction- Transaction wrappersmodel-extend/script-extend- Extension patternsdecorator- Object decoratorsfactory- Factory functions
This plugin is designed to match the functionality of the original SqrTT/prophet extension:
- β
Cartridge Detection - Uses same
.projectfile validation logic - β
Configuration - Full
dw.jsonvalidation and normalization - β Upload System - WebDAV upload with progress tracking
- β File Type Support - ISML and DWScript file recognition
- β Snippets - Comprehensive SFCC development snippets
- ποΈ Debugging - Foundation laid for SDAPI 2.0 integration (future)
- Full SDAPI 2.0 Debugging - Breakpoints, variable inspection, stepping
- Advanced Language Server - Deep ISML intellisense, goto definition
- Log Viewer - Real-time server log streaming
- SOAP WebService - API documentation generation
Both tools work together: edit and upload in Neovim, advanced debugging in VSCode.
- β
Fixed: Plugin now uses recursive
.projectfile detection like SqrTT/prophet - Run
:ProphetStatusto see detected cartridges - Ensure
.projectfiles containcom.demandware.studio.core.beehiveNature - For complex structures, the plugin now searches the entire workspace
- Check
:ProphetStatusfor configuration validation - Test credentials in
dw.json- plugin validates hostname format - Ensure
curlandzipare available:which curl zip - Check
:messagesfor detailed error information - Plugin now provides clearer error messages with actionable steps
- Run
:ProphetEnableto start file watching - Check
:ProphetStatusto see watch status - Plugin now only uploads SFCC-relevant files (
.js,.isml,.ds, etc.) - Verify file is within a cartridge directory structure
- Test basic loading:
:lua require('prophet') - Ensure Neovim 0.9+ is installed
- Check for conflicts with other plugins
- Run
:ProphetCheckSandboxto test connectivity - Check if your sandbox is started and accessible via browser
- Verify credentials in
dw.jsonare correct - Plugin will now check connectivity before uploads to avoid repeated failures
- Run
:ProphetStatusfor comprehensive diagnostic information including sandbox status - Use
:ProphetCheckSandboxfor immediate connectivity testing - Check GitHub issues for known problems
- Compare behavior with SqrTT/prophet if available
MIT
Inspired by Prophet VSCode extension