@salesforce/b2c-dx-mcp 0.4.1 → 0.4.2

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 (28) hide show
  1. package/dist/commands/mcp.d.ts +2 -2
  2. package/dist/tools/storefrontnext/index.js +1 -1
  3. package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/index.d.ts +2 -2
  4. package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/index.js +54 -35
  5. package/oclif.manifest.json +1 -1
  6. package/package.json +2 -2
  7. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/analyzer.d.ts +0 -0
  8. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/analyzer.js +0 -0
  9. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/1-mode-selection.d.ts +0 -0
  10. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/1-mode-selection.js +0 -0
  11. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2a-auto-mode.d.ts +0 -0
  12. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2a-auto-mode.js +0 -0
  13. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-0-interactive-overview.d.ts +0 -0
  14. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-0-interactive-overview.js +0 -0
  15. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-1-interactive-analyze.d.ts +0 -0
  16. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-1-interactive-analyze.js +0 -0
  17. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-2-interactive-select-props.d.ts +0 -0
  18. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-2-interactive-select-props.js +0 -0
  19. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-3-interactive-configure-attrs.d.ts +0 -0
  20. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-3-interactive-configure-attrs.js +0 -0
  21. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-4-interactive-configure-regions.d.ts +0 -0
  22. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-4-interactive-configure-regions.js +0 -0
  23. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-5-interactive-confirm-generation.d.ts +0 -0
  24. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules/2b-5-interactive-confirm-generation.js +0 -0
  25. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules.d.ts +0 -0
  26. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/rules.js +0 -0
  27. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/templates/decorator-generator.d.ts +0 -0
  28. /package/dist/tools/{page-designer-decorator → storefrontnext/page-designer-decorator}/templates/decorator-generator.js +0 -0
@@ -51,8 +51,8 @@ export default class McpServerCommand extends BaseCommand<typeof McpServerComman
51
51
  'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
52
52
  'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
53
53
  'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
54
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
55
- environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
54
+ project: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
55
+ environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
56
56
  'cloud-origin': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
57
57
  'credentials-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
58
58
  };
@@ -23,7 +23,7 @@
23
23
  import { z } from 'zod';
24
24
  import { createToolAdapter, jsonResult } from '../adapter.js';
25
25
  import { createDeveloperGuidelinesTool } from './developer-guidelines.js';
26
- import { createPageDesignerDecoratorTool } from '../page-designer-decorator/index.js';
26
+ import { createPageDesignerDecoratorTool } from './page-designer-decorator/index.js';
27
27
  /**
28
28
  * Creates a placeholder tool for Storefront Next development.
29
29
  *
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
- import type { McpTool } from '../../utils/index.js';
3
- import type { Services } from '../../services.js';
2
+ import type { McpTool } from '../../../utils/index.js';
3
+ import type { Services } from '../../../services.js';
4
4
  export declare const pageDesignerDecoratorSchema: z.ZodObject<{
5
5
  component: z.ZodString;
6
6
  searchPaths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
@@ -303,8 +303,49 @@ function handleConfigureRegionsStep(args, workspaceRoot) {
303
303
  ],
304
304
  };
305
305
  }
306
+ function hasNonEmptyConfig(config) {
307
+ return config !== null && config !== undefined && Object.keys(config).length > 0;
308
+ }
309
+ function buildAttributesFromProps(selectedProps, props, attributeConfig) {
310
+ return selectedProps.flatMap((propName) => {
311
+ const prop = props.find((p) => p.name === propName);
312
+ if (!prop)
313
+ return [];
314
+ const config = attributeConfig[propName];
315
+ return [
316
+ {
317
+ name: propName,
318
+ tsType: prop.type,
319
+ optional: prop.optional,
320
+ hasConfig: hasNonEmptyConfig(config),
321
+ config,
322
+ },
323
+ ];
324
+ });
325
+ }
326
+ function buildAttributesFromNewAttrs(newAttributes, attributeConfig) {
327
+ return newAttributes.map((attr) => {
328
+ const config = attributeConfig[attr.name];
329
+ return {
330
+ name: attr.name,
331
+ tsType: 'string',
332
+ optional: !attr.required,
333
+ hasConfig: hasNonEmptyConfig(config),
334
+ config,
335
+ };
336
+ });
337
+ }
338
+ function resolveRegions(conversationContext) {
339
+ const regionConfig = conversationContext?.regionConfig;
340
+ const enabled = Boolean(regionConfig?.enabled && regionConfig.regions?.length);
341
+ return {
342
+ hasRegions: enabled,
343
+ regions: enabled ? regionConfig.regions : [],
344
+ regionCount: enabled ? regionConfig.regions.length : 0,
345
+ };
346
+ }
306
347
  function handleConfirmGenerationStep(args, workspaceRoot) {
307
- const { componentMetadata, selectedProps = [], newAttributes = [], attributeConfig = {}, } = args.conversationContext || {};
348
+ const { componentMetadata, selectedProps = [], newAttributes = [], attributeConfig = {}, } = args.conversationContext ?? {};
308
349
  if (!componentMetadata) {
309
350
  return {
310
351
  content: [
@@ -318,45 +359,23 @@ function handleConfirmGenerationStep(args, workspaceRoot) {
318
359
  }
319
360
  const fullPath = resolveComponent(args.component, workspaceRoot, args.searchPaths);
320
361
  const componentInfo = componentAnalyzer.analyzeComponent(fullPath);
321
- const attributes = [];
322
- for (const propName of selectedProps) {
323
- const prop = componentInfo.props.find((p) => p.name === propName);
324
- if (!prop)
325
- continue;
326
- const config = attributeConfig[propName];
327
- const hasConfig = config && Object.keys(config).length > 0;
328
- attributes.push({
329
- name: propName,
330
- tsType: prop.type,
331
- optional: prop.optional,
332
- hasConfig,
333
- config,
334
- });
335
- }
336
- for (const attr of newAttributes) {
337
- const config = attributeConfig[attr.name];
338
- const hasConfig = config && Object.keys(config).length > 0;
339
- attributes.push({
340
- name: attr.name,
341
- tsType: 'string',
342
- optional: !attr.required,
343
- hasConfig,
344
- config,
345
- });
346
- }
347
- const regionConfig = args.conversationContext?.regionConfig;
348
- const hasRegions = regionConfig?.enabled && regionConfig.regions && regionConfig.regions.length > 0;
362
+ const attributes = [
363
+ ...buildAttributesFromProps(selectedProps, componentInfo.props, attributeConfig),
364
+ ...buildAttributesFromNewAttrs(newAttributes, attributeConfig),
365
+ ];
366
+ const { hasRegions, regions, regionCount } = resolveRegions(args.conversationContext);
367
+ const componentGroup = componentMetadata.group ?? 'odyssey_base';
349
368
  const context = {
350
369
  needsImports: true,
351
370
  componentId: componentMetadata.id,
352
371
  componentName: componentMetadata.name,
353
372
  componentDescription: componentMetadata.description,
354
- componentGroup: componentMetadata.group || 'odyssey_base',
373
+ componentGroup,
355
374
  metadataClassName: `${componentInfo.componentName}Metadata`,
356
375
  hasAttributes: attributes.length > 0,
357
- hasRegions: hasRegions || false,
376
+ hasRegions,
358
377
  hasLoader: false,
359
- regions: hasRegions ? regionConfig.regions || [] : [],
378
+ regions,
360
379
  attributes,
361
380
  };
362
381
  const decoratorCode = generateDecoratorCode(context);
@@ -364,11 +383,11 @@ function handleConfirmGenerationStep(args, workspaceRoot) {
364
383
  decoratorCode,
365
384
  componentName: componentInfo.componentName,
366
385
  componentId: componentMetadata.id,
367
- componentGroup: componentMetadata.group || 'odyssey_base',
386
+ componentGroup,
368
387
  file: args.component,
369
388
  attributeCount: attributes.length,
370
- hasRegions: hasRegions || false,
371
- regionCount: hasRegions && regionConfig.regions ? regionConfig.regions.length : 0,
389
+ hasRegions,
390
+ regionCount,
372
391
  });
373
392
  return {
374
393
  content: [
@@ -387,5 +387,5 @@
387
387
  "enableJsonFlag": false
388
388
  }
389
389
  },
390
- "version": "0.4.1"
390
+ "version": "0.4.2"
391
391
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/b2c-dx-mcp",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "MCP server for B2C Commerce Cloud developer experience tools",
5
5
  "author": "Salesforce",
6
6
  "license": "MIT",
@@ -79,7 +79,7 @@
79
79
  "ts-morph": "^27.0.0",
80
80
  "yaml": "2.8.1",
81
81
  "zod": "3.25.76",
82
- "@salesforce/b2c-tooling-sdk": "0.5.1"
82
+ "@salesforce/b2c-tooling-sdk": "0.5.2"
83
83
  },
84
84
  "devDependencies": {
85
85
  "@eslint/compat": "^1",