@salesforce/webapps-features-experimental 1.94.0 → 1.95.0

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.
@@ -1,552 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Copyright (c) 2026, Salesforce, Inc.,
4
- * All rights reserved.
5
- * For full license text, see the LICENSE.txt file
6
- */
7
- import { existsSync, readFileSync } from "fs";
8
- import { dirname, join, resolve } from "path";
9
- import { fileURLToPath } from "url";
10
- import { Command, Option } from "commander";
11
- import { processFeatureOwnOperations, resolveFeatureDependencies } from "./dependency-resolver.js";
12
- import { getAllFeatures, getFeatureMetadata, getFeatureNameFromPackage, resolveFeatureName, suggestSimilarFeatures, } from "./feature-metadata.js";
13
- import { getFeatureMetadataOrThrow, searchFeatures } from "./feature-search.js";
14
- import { Logger } from "./logger.js";
15
- import { installPackage, isPackageInstalled } from "./package-manager.js";
16
- import { loadSchemaFromNodeModules } from "./schema-loader.js";
17
- import { extractWebappName } from "./utils.js";
18
- const __filename = fileURLToPath(import.meta.url);
19
- const __dirname = dirname(__filename);
20
- const { version: cliVersion } = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
21
- const program = new Command();
22
- // Configure main CLI
23
- program
24
- .name("install-feature")
25
- .description("Manage Salesforce webapp features")
26
- .version(cliVersion);
27
- // Install command
28
- program
29
- .command("install")
30
- .description("Install a Salesforce webapp feature package")
31
- .argument("<feature>", 'Feature name (e.g., "authentication", "shadcn") or npm package name')
32
- .requiredOption("--webapp-dir <path>", "Webapp directory (e.g., force-app/main/default/webapplications/mywebapp)")
33
- .option("--sfdx-root <path>", "SFDX metadata root directory (default: force-app/main/default)", "force-app/main/default")
34
- .option("-v, --verbose", "Enable verbose logging", false)
35
- .option("--dry-run", "Show what would be done without making changes", false)
36
- .option("-y, --yes", "Skip all prompts (auto-skip conflicts)", false)
37
- .addOption(new Option("--on-conflict <mode>", "Conflict handling mode: prompt, error, skip, overwrite")
38
- .choices(["prompt", "error", "skip", "overwrite"])
39
- .default("prompt"))
40
- .option("--conflict-resolution <file>", "Path to JSON file with conflict resolutions")
41
- .addHelpText("after", getInstallHelpText())
42
- .action(async (featureName, options) => {
43
- try {
44
- await install(featureName, options);
45
- }
46
- catch (error) {
47
- const logger = new Logger(options.verbose || false);
48
- if (error instanceof Error) {
49
- logger.error(error.message, error);
50
- }
51
- else {
52
- logger.error("Installation failed", error);
53
- }
54
- process.exit(1);
55
- }
56
- });
57
- // List command
58
- program
59
- .command("list")
60
- .description("List all available features")
61
- .option("-v, --verbose", "Show detailed information", false)
62
- .option("--search <query>", "Search features by keyword")
63
- .action((options) => {
64
- listFeatures(options);
65
- });
66
- // Describe command
67
- program
68
- .command("describe <feature>")
69
- .description("Show detailed information about a specific feature")
70
- .action((featureName) => {
71
- describeFeature(featureName);
72
- });
73
- program.parse();
74
- /**
75
- * Main installation function
76
- */
77
- async function install(featureName, options) {
78
- // Create logger and installation context
79
- const logger = new Logger(options.verbose || false);
80
- const context = createContext(options, logger);
81
- // Validate directories
82
- if (!existsSync(context.sfdxRoot)) {
83
- throw new Error(`SFDX root directory not found: ${context.sfdxRoot}`);
84
- }
85
- if (!existsSync(context.webappDir)) {
86
- throw new Error(`Webapp directory not found: ${context.webappDir}`);
87
- }
88
- // Log configuration
89
- logger.info(`SFDX Root: ${context.sfdxRoot}`);
90
- logger.info(`Webapp Dir: ${context.webappDir}`);
91
- logger.info(`Webapp Name: ${context.webappName}`);
92
- if (context.dryRun) {
93
- logger.info("DRY RUN MODE: No changes will be made");
94
- }
95
- if (Object.keys(context.conflictResolutions).length > 0) {
96
- logger.info(`Loaded ${Object.keys(context.conflictResolutions).length} conflict resolutions`);
97
- }
98
- // Resolve feature name to package name (throws with suggestions if not found)
99
- const feature = getFeatureMetadataOrThrow(featureName);
100
- const packageName = feature.package;
101
- const displayName = featureName;
102
- // Install the main feature package (silently — logged inside feature section later)
103
- if (!isPackageInstalled(packageName, context.webappDir)) {
104
- await installPackage(packageName, true, context.webappDir, context.dryRun, context.verbose);
105
- }
106
- else {
107
- logger.debug("Feature package already installed, skipping...");
108
- }
109
- // Mark as installed
110
- context.installedFeatures.add(packageName);
111
- if (context.dryRun) {
112
- logger.info("[DRY RUN] Would load and process feature schema");
113
- }
114
- // Load the feature schema
115
- const schema = loadSchemaFromNodeModules(packageName, context.webappDir, context.logger);
116
- if (!schema) {
117
- logger.warn("No features.json found. Refer to README for manual instructions.");
118
- logger.info(`Try: cat node_modules/${packageName}/README.md`);
119
- return;
120
- }
121
- logger.debug("Feature schema:", JSON.stringify(schema, null, 2));
122
- // Determine dependencies for summary
123
- const deps = schema.featureDependencies ?? [];
124
- // Log installation summary
125
- logger.info(`Installing feature: ${displayName}`);
126
- if (deps.length > 0) {
127
- logger.info(`Dependencies: ${deps.join(", ")}`);
128
- }
129
- // Install feature dependencies (each gets its own section)
130
- if (deps.length > 0) {
131
- await resolveFeatureDependencies(deps, context);
132
- }
133
- // Open main feature section
134
- logger.section(`Installing feature: ${displayName}`);
135
- logger.plain(`Installing package: ${packageName}`);
136
- // Process this feature's own package deps and copy operations
137
- await processFeatureOwnOperations(schema, packageName, context);
138
- logger.sectionEnd(`Feature installed: ${displayName}`);
139
- // Success message
140
- console.log();
141
- if (deps.length === 1) {
142
- logger.success(`Installed feature: ${displayName} (with dependency: ${deps[0]})`);
143
- }
144
- else if (deps.length > 1) {
145
- logger.success(`Installed feature: ${displayName} (with dependencies: ${deps.join(", ")})`);
146
- }
147
- else {
148
- logger.success(`Installed feature: ${displayName}`);
149
- }
150
- if (!context.dryRun) {
151
- // Show example files that need integration
152
- if (context.copiedExampleFiles.length > 0) {
153
- console.log();
154
- console.log("Example files copied (require manual integration):");
155
- for (const exampleFile of context.copiedExampleFiles) {
156
- const relativePath = exampleFile.file.replace(context.webappDir + "/", "");
157
- console.log(` - ${relativePath}`);
158
- if (exampleFile.integrationTarget) {
159
- console.log(` → Integrate into: ${exampleFile.integrationTarget}`);
160
- }
161
- }
162
- }
163
- console.log();
164
- console.log("Next steps:");
165
- console.log(" 1. Review copied files (including __example__ files)");
166
- if (context.copiedExampleFiles.length > 0) {
167
- console.log(" 2. Integrate patterns from __example__ files into target files");
168
- console.log(" 3. Delete __example__ files after integration");
169
- console.log(" 4. Run: npm run build && npm run dev");
170
- console.log(" 5. Test the feature");
171
- }
172
- else {
173
- console.log(" 2. Run: npm run build && npm run dev");
174
- console.log(" 3. Test the feature");
175
- }
176
- }
177
- }
178
- /**
179
- * Create installation context from CLI options
180
- */
181
- function createContext(options, loggerInstance) {
182
- // Resolve paths (webappDir is required, sfdxRoot has default)
183
- const webappDir = resolve(options.webappDir);
184
- const sfdxRoot = resolve(options.sfdxRoot || "force-app/main/default");
185
- // Extract webapp name
186
- const webappName = extractWebappName(webappDir);
187
- // Determine conflict mode
188
- let conflictMode = options.onConflict || "prompt";
189
- if (options.yes) {
190
- conflictMode = "skip";
191
- }
192
- // Load conflict resolutions if provided
193
- let conflictResolutions = {};
194
- if (options.conflictResolution) {
195
- const resolutionPath = resolve(options.conflictResolution);
196
- if (!existsSync(resolutionPath)) {
197
- throw new Error(`Conflict resolution file not found: ${resolutionPath}`);
198
- }
199
- try {
200
- const content = readFileSync(resolutionPath, "utf-8");
201
- conflictResolutions = JSON.parse(content);
202
- loggerInstance.debug(`Loaded conflict resolutions from: ${resolutionPath}`);
203
- }
204
- catch (_error) {
205
- throw new Error(`Failed to parse conflict resolution file: ${resolutionPath}`);
206
- }
207
- }
208
- return {
209
- sfdxRoot,
210
- webappDir,
211
- webappName,
212
- verbose: options.verbose || false,
213
- dryRun: options.dryRun || false,
214
- conflictMode: conflictMode,
215
- conflictResolutions,
216
- installedFeatures: new Set(),
217
- copiedExampleFiles: [],
218
- logger: loggerInstance,
219
- };
220
- }
221
- /**
222
- * List all available features
223
- */
224
- function listFeatures(options) {
225
- const allFeatures = getAllFeatures();
226
- let features = Object.entries(allFeatures);
227
- // Filter by search query if provided
228
- if (options.search) {
229
- const searchResults = searchFeatures(options.search);
230
- const searchNames = new Set(searchResults.map((f) => getFeatureNameFromPackage(f.package)).filter(Boolean));
231
- features = features.filter(([name]) => searchNames.has(name));
232
- console.log(`\nSearch results for "${options.search}":\n`);
233
- if (features.length === 0) {
234
- console.log("No features found.");
235
- return;
236
- }
237
- // For search results, maintain the order from searchFeatures (sorted by relevance)
238
- // Create a map of feature name to rank
239
- const rankMap = new Map();
240
- searchResults.forEach((f, index) => {
241
- const name = getFeatureNameFromPackage(f.package);
242
- if (name) {
243
- rankMap.set(name, index);
244
- }
245
- });
246
- // Sort by search relevance rank
247
- features.sort((a, b) => {
248
- const rankA = rankMap.get(a[0]) ?? 999;
249
- const rankB = rankMap.get(b[0]) ?? 999;
250
- return rankA - rankB;
251
- });
252
- }
253
- else {
254
- console.log("\nAvailable Features:\n");
255
- if (features.length === 0) {
256
- console.log("No features found.");
257
- return;
258
- }
259
- // Sort by name alphabetically when not searching
260
- features.sort((a, b) => a[1].name.localeCompare(b[1].name));
261
- }
262
- for (const [featureName, feature] of features) {
263
- // Only show feature ID in parens if it differs from the name (ignoring case)
264
- const displayName = feature.name.toLowerCase() === featureName.toLowerCase()
265
- ? feature.name
266
- : `${feature.name} (${featureName})`;
267
- console.log(`${displayName}`);
268
- if (options.verbose) {
269
- console.log(` ${feature.longDescription}`);
270
- console.log(` Package: ${feature.package}`);
271
- if (feature.featureDependencies && feature.featureDependencies.length > 0) {
272
- console.log(` Dependencies: ${feature.featureDependencies.join(", ")}`);
273
- }
274
- console.log();
275
- }
276
- else {
277
- console.log(` ${feature.shortDescription}`);
278
- console.log();
279
- }
280
- }
281
- console.log('Use "npx @salesforce/webapps-features-experimental describe <feature>" for detailed information');
282
- console.log('Use "npx @salesforce/webapps-features-experimental install <feature>" to install a feature\n');
283
- }
284
- /**
285
- * Describe a specific feature in detail
286
- */
287
- function describeFeature(featureName) {
288
- const resolvedName = resolveFeatureName(featureName);
289
- if (!resolvedName) {
290
- console.error(`\nFeature not found: ${featureName}\n`);
291
- const suggestions = suggestSimilarFeatures(featureName);
292
- if (suggestions.length > 0) {
293
- console.log("Did you mean?");
294
- for (const s of suggestions) {
295
- console.log(` - ${s}`);
296
- }
297
- }
298
- else {
299
- console.log("Available features:");
300
- const allFeatures = getAllFeatures();
301
- for (const [name] of Object.entries(allFeatures)) {
302
- console.log(` - ${name}`);
303
- }
304
- }
305
- console.log('\nUse "npx @salesforce/webapps-features-experimental list" to see all features\n');
306
- process.exit(1);
307
- }
308
- const feature = getFeatureMetadata(resolvedName);
309
- console.log("\n" + "=".repeat(80));
310
- console.log(`${feature.name}`);
311
- console.log("=".repeat(80));
312
- console.log();
313
- console.log("Description:");
314
- console.log(` ${feature.longDescription}`);
315
- console.log();
316
- console.log("Package:", feature.package);
317
- console.log();
318
- if (feature.keywords && feature.keywords.length > 0) {
319
- console.log("Keywords:", feature.keywords.join(", "));
320
- console.log();
321
- }
322
- if (feature.featureDependencies && feature.featureDependencies.length > 0) {
323
- console.log("Feature Dependencies:");
324
- for (const dep of feature.featureDependencies) {
325
- const depMeta = getFeatureMetadata(dep);
326
- console.log(` - ${dep}${depMeta ? ` (${depMeta.package})` : ""}`);
327
- }
328
- console.log();
329
- }
330
- if (feature.packageDependencies && Object.keys(feature.packageDependencies).length > 0) {
331
- console.log("Package Dependencies:");
332
- for (const [pkg, version] of Object.entries(feature.packageDependencies)) {
333
- console.log(` - ${pkg}@${version}`);
334
- }
335
- console.log();
336
- }
337
- if (feature.packageDevDependencies && Object.keys(feature.packageDevDependencies).length > 0) {
338
- console.log("Package Dev Dependencies:");
339
- for (const [pkg, version] of Object.entries(feature.packageDevDependencies)) {
340
- console.log(` - ${pkg}@${version}`);
341
- }
342
- console.log();
343
- }
344
- if (feature.copy && feature.copy.length > 0) {
345
- const regularCopies = feature.copy.filter((op) => !op.integrationTarget);
346
- const exampleFiles = feature.copy.filter((op) => op.integrationTarget);
347
- if (regularCopies.length > 0) {
348
- console.log("Copy Operations:");
349
- for (const op of regularCopies) {
350
- console.log(` - ${op.from} → ${op.to}`);
351
- if (op.description) {
352
- console.log(` ${op.description}`);
353
- }
354
- }
355
- console.log();
356
- }
357
- if (exampleFiles.length > 0) {
358
- console.log("Integration Examples:");
359
- console.log(" These __example__ files show how to integrate the feature:");
360
- console.log();
361
- for (const op of exampleFiles) {
362
- console.log(` - ${op.to.split("/").pop()}`);
363
- if (op.description) {
364
- console.log(` ${op.description}`);
365
- }
366
- if (op.integrationTarget) {
367
- console.log(` Review and integrate patterns into: ${op.integrationTarget}`);
368
- console.log(` Then delete the example file`);
369
- }
370
- }
371
- console.log();
372
- }
373
- }
374
- if (feature.features && feature.features.length > 0) {
375
- console.log("Features:");
376
- for (const item of feature.features) {
377
- console.log(` - ${item}`);
378
- }
379
- console.log();
380
- }
381
- if (feature.components && feature.components.length > 0) {
382
- console.log("Components:");
383
- for (const component of feature.components) {
384
- console.log(` - ${component}`);
385
- }
386
- console.log();
387
- }
388
- console.log("Installation:");
389
- console.log(` npx @salesforce/webapps-features-experimental install ${resolvedName} --webapp-dir <path>`);
390
- console.log();
391
- console.log("Example:");
392
- console.log(` npx @salesforce/webapps-features-experimental install ${resolvedName} \\`);
393
- console.log(" --webapp-dir force-app/main/default/webapplications/mywebapp");
394
- console.log();
395
- }
396
- /**
397
- * Get comprehensive help text for install command
398
- */
399
- function getInstallHelpText() {
400
- return `
401
-
402
- DESCRIPTION
403
- Install a Salesforce webapp feature package with automatic dependency resolution,
404
- file copying, and conflict management.
405
-
406
- DISCOVERING FEATURES
407
- Before installing, discover what features are available:
408
-
409
- List all features:
410
- $ npx @salesforce/webapps-features-experimental list
411
-
412
- Search for features:
413
- $ npx @salesforce/webapps-features-experimental list --search "auth"
414
-
415
- Get detailed information:
416
- $ npx @salesforce/webapps-features-experimental describe authentication
417
-
418
- This tool automates the feature installation workflow by:
419
- 1. Resolving feature names to npm packages
420
- 2. Installing npm packages as dev dependencies
421
- 3. Recursively processing feature dependencies
422
- 4. Installing package dependencies
423
- 5. Copying files from the feature package to your project
424
- 6. Handling conflicts interactively or via configuration
425
-
426
- PREREQUISITES
427
- - Run from within your webapp directory, or provide explicit paths
428
- - Ensure package.json exists in the webapp directory
429
- - Ensure feature packages include a features.json file
430
-
431
- WORKFLOW EXAMPLES
432
-
433
- Basic installation (interactive):
434
- $ npx @salesforce/webapps-features-experimental install authentication \\
435
- --webapp-dir force-app/main/default/webapplications/mywebapp
436
-
437
- The CLI will:
438
- - Install the authentication feature package
439
- - Process its dependencies (e.g., shadcn)
440
- - Prompt for any file conflicts
441
- - Copy all files including __example__ files
442
-
443
- Installation with custom SFDX root:
444
- $ npx @salesforce/webapps-features-experimental install authentication \\
445
- --webapp-dir force-app/main/default/webapplications/mywebapp \\
446
- --sfdx-root custom/sfdx/path
447
-
448
- LLM-assisted workflow (RECOMMENDED for AI assistants):
449
- 1. Run with error mode to detect conflicts:
450
- $ npx @salesforce/webapps-features-experimental install authentication \\
451
- --webapp-dir force-app/main/default/webapplications/mywebapp \\
452
- --on-conflict error
453
-
454
- 2. CLI outputs conflict list with instructions
455
-
456
- 3. Create conflict-resolution.json based on user preferences
457
-
458
- 4. Rerun with resolution file:
459
- $ npx @salesforce/webapps-features-experimental install authentication \\
460
- --webapp-dir force-app/main/default/webapplications/mywebapp \\
461
- --conflict-resolution conflict-resolution.json
462
-
463
- Dry run to preview changes:
464
- $ npx @salesforce/webapps-features-experimental install authentication \\
465
- --webapp-dir force-app/main/default/webapplications/mywebapp \\
466
- --dry-run
467
-
468
- Non-interactive installation (skip conflicts):
469
- $ npx @salesforce/webapps-features-experimental install authentication \\
470
- --webapp-dir force-app/main/default/webapplications/mywebapp \\
471
- --yes
472
-
473
- FEATURE SCHEMA
474
- Features must include a features.json file that defines:
475
-
476
- - featureDependencies: Other features to install first
477
- - packageDependencies: npm packages to add to dependencies
478
- - packageDevDependencies: npm packages to add to devDependencies
479
- - copy: Files/directories to copy from the package
480
-
481
- Example:
482
- {
483
- "featureDependencies": ["shadcn"],
484
- "packageDependencies": {
485
- "@tanstack/react-form": "^1.28.3"
486
- },
487
- "copy": [
488
- {
489
- "from": "force-app/main/default/classes",
490
- "to": "<sfdxRoot>/classes",
491
- "description": "Apex classes"
492
- },
493
- {
494
- "from": "force-app/main/default/webapplications/feature-auth/src/auth",
495
- "to": "<webappDir>/src/auth",
496
- "description": "Auth components"
497
- },
498
- {
499
- "from": "force-app/main/default/webapplications/feature-auth/src/__example__app.tsx",
500
- "to": "<webappDir>/src/__example__app.tsx",
501
- "description": "Integration example",
502
- "integrationTarget": "src/app.tsx"
503
- }
504
- ]
505
- }
506
-
507
- EXAMPLE FILES
508
- Feature packages may include __example__ files (e.g., __example__routes.tsx)
509
- that show how to integrate the feature into your existing code.
510
-
511
- After installation:
512
- 1. Review the __example__ files
513
- 2. Manually integrate patterns into your actual files
514
- 3. Delete the __example__ files once integrated
515
-
516
- PATH RESOLUTION
517
- Schema paths support these placeholders:
518
-
519
- - <sfdxRoot>/path → Resolves to --sfdx-root/path
520
- Example: <sfdxRoot>/classes → force-app/main/default/classes
521
-
522
- - <webappDir>/path → Resolves to --webapp-dir/path
523
- Example: <webappDir>/src/auth → force-app/main/default/webapplications/mywebapp/src/auth
524
-
525
- Hint placeholders (for user/LLM guidance):
526
- - Some "to" paths contain descriptive segments like <desired-page-with-search-input>
527
- that are NOT resolved by the CLI. These are hints indicating the user or LLM
528
- should choose an appropriate destination. The file will be copied with the
529
- literal placeholder name; rename or relocate it to the intended target.
530
-
531
- Legacy formats are also supported:
532
- - force-app/main/default/classes → Treated as SFDX metadata
533
- - <webapp> placeholder → Replaced with webapp name
534
-
535
- AFTER INSTALLATION
536
- 1. Review copied files, especially __example__ files
537
- 2. Integrate __example__ patterns into your code
538
- 3. Run: npm run build && npm run dev
539
- 4. Test the new feature
540
- 5. Delete __example__ files after integration
541
-
542
- TROUBLESHOOTING
543
- - "SFDX root directory not found": Check --sfdx-root path
544
- - "Webapp directory not found": Check --webapp-dir path or run from webapp dir
545
- - "No features.json found": Feature package doesn't support this tool
546
- - Conflicts in error mode: Follow instructions to create conflict-resolution.json
547
- - npm install failures: Check network and package availability
548
-
549
- For more information, see: .a4drules/webapplications.md
550
- `;
551
- }
552
- //# sourceMappingURL=install-feature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-feature.js","sourceRoot":"","sources":["../src/install-feature.ts"],"names":[],"mappings":"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"}