Skip to content

Scaffolding framework for B2C Commerce components#102

Merged
clavery merged 14 commits intomainfrom
feature/scaffolding-framework
Feb 3, 2026
Merged

Scaffolding framework for B2C Commerce components#102
clavery merged 14 commits intomainfrom
feature/scaffolding-framework

Conversation

@clavery
Copy link
Copy Markdown
Collaborator

@clavery clavery commented Feb 1, 2026

Summary

This PR introduces a comprehensive scaffolding framework for generating B2C Commerce components from templates. The framework enables rapid creation of cartridges, controllers, hooks, services, custom APIs, job steps, and Page Designer components with consistent structure and best practices.

Key Features

  • 7 built-in scaffolds: cartridge, controller, hook, service, custom-api, job-step, page-designer-component
  • Multi-source discovery: Built-in, user (~/.b2c/scaffolds/), project (.b2c/scaffolds/), and plugin scaffolds
  • Dynamic parameter sources: Auto-discover cartridges, hook points, and sites
  • Template engine: EJS-based templates with helper functions (camelCase, kebabCase, etc.)
  • File modifications: JSON merge, insert-after/before, append/prepend for existing files
  • Validation: Manifest validation, EJS syntax checking, orphaned file detection

CLI Commands

Command Description
b2c scaffold list List available scaffolds
b2c scaffold generate <id> Generate from a scaffold
b2c scaffold info <id> Show scaffold details
b2c scaffold search <query> Search scaffolds
b2c scaffold init <name> Create custom scaffold
b2c scaffold validate <path> Validate scaffold

SDK Programmatic API

The scaffold functionality is available as a programmatic API for IDE integrations, MCP servers, and custom tooling:

import {
  createScaffoldRegistry,
  generateFromScaffold,
  resolveScaffoldParameters,
  parseParameterOptions,
  resolveOutputDirectory,
  validateScaffoldDirectory,
  getParameterSchemas,
} from '@salesforce/b2c-tooling-sdk/scaffold';

Key SDK functions:

  • resolveScaffoldParameters() - Resolve and validate parameters from provided values
  • parseParameterOptions() - Parse key=value option strings
  • getParameterSchemas() - Get parameter metadata with resolved choices for building UIs
  • validateScaffoldDirectory() - Comprehensive scaffold validation
  • resolveOutputDirectory() - Resolve output directory with priority logic

Architecture

The scaffolding is split between CLI and SDK:

SDK (@salesforce/b2c-tooling-sdk/scaffold):

  • Scaffold registry and discovery
  • Template engine (EJS rendering)
  • File generation executor
  • Parameter resolution and validation
  • Source resolution (cartridges, hook-points, sites)

CLI (b2c scaffold):

  • Interactive prompts (@inquirer/prompts)
  • Display formatting
  • oclif command integration

Changes

New Files

SDK (packages/b2c-tooling-sdk):

  • src/scaffold/ - Complete scaffold module (types, registry, engine, executor, validators, sources, parameter-resolver, validation, merge)
  • data/scaffolds/ - 7 built-in scaffold templates
  • test/scaffold/ - Comprehensive test coverage

CLI (packages/b2c-cli):

  • src/commands/scaffold/ - 7 scaffold commands
  • src/lib/scaffold/ - Generate helper and source resolver

Documentation:

  • docs/guide/scaffolding.md - User guide with SDK programmatic API
  • docs/cli/scaffold.md - CLI reference
# Test validate command
./cli scaffold validate packages/b2c-tooling-sdk/data/scaffolds/service

# Test generate command
./cli scaffold generate service --dry-run --force \
  --option serviceName=Test \
  --option cartridgeName=app_test \
  --option serviceType=HTTP

# Test SDK directly
node --input-type=module -e "
import {createScaffoldRegistry, resolveScaffoldParameters} from '@salesforce/b2c-tooling-sdk/scaffold';
const registry = createScaffoldRegistry();
const scaffold = await registry.getScaffold('service');
const result = await resolveScaffoldParameters(scaffold, {
  providedVariables: {serviceName: 'Test', serviceType: 'HTTP'},
  useDefaults: true
});
console.log(result);
"

@clavery clavery requested a review from yhsieh1 February 1, 2026 07:42
yhsieh1
yhsieh1 previously approved these changes Feb 2, 2026
Copy link
Copy Markdown
Contributor

@yhsieh1 yhsieh1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks good. The custom scaffold seems very powerful.

Comment thread packages/b2c-cli/.gitignore
Comment thread packages/b2c-tooling-sdk/data/scaffolds/custom-api/scaffold.json Outdated
Use generic operation descriptions instead of specific CLI commands
to keep scaffold content tool-agnostic.
Resolve conflicts by keeping both:
- Scaffolding guide/commands from this branch
- IDE Support guide and Account Manager commands from main
Use export...from syntax for re-exports per unicorn/prefer-export-from rule.
@clavery clavery merged commit 8592727 into main Feb 3, 2026
3 checks passed
@clavery clavery deleted the feature/scaffolding-framework branch February 8, 2026 20:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants