@salesforce/plugin-metadata-enrichment 0.0.1 → 0.0.3

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.
package/README.md CHANGED
@@ -67,14 +67,14 @@ sf plugins
67
67
 
68
68
  ## `sf metadata enrich`
69
69
 
70
- Enrich metadata
70
+ Enrich metadata components in your DX project by adding AI-generated descriptions.
71
71
 
72
72
  ```
73
73
  USAGE
74
74
  $ sf metadata enrich -o <value> -m <value>... [--json] [--flags-dir <value>]
75
75
 
76
76
  FLAGS
77
- -m, --metadata=<value>... (required) (required) Metadata type and optional component name to enrich.
77
+ -m, --metadata=<value>... (required) Metadata type and optional component name to enrich.
78
78
  -o, --target-org=<value> (required) Username or alias of the target org. Not required if the `target-org`
79
79
  configuration variable is already set.
80
80
 
@@ -83,40 +83,51 @@ GLOBAL FLAGS
83
83
  --json Format output as json.
84
84
 
85
85
  DESCRIPTION
86
- Enrich metadata for a Salesforce component.
86
+ Enrich metadata components in your DX project by adding AI-generated descriptions.
87
+
88
+ Use this command to add AI-generated descriptions right in the metadata source files in your local DX project. These
89
+ enriched descriptions succinctly outline the metadata component’s purpose and capabilities, which in turn provide
90
+ context when vibe coding with an AI tool, such as Agentforce Vibes.
87
91
 
88
- You must run this command from within a project.
92
+ This command updates only the local metadata source files in your DX project; it doesn't change the components in your
93
+ org. If you want the AI-generated descriptions in your org, then you must explicitly deploy the updated metadata
94
+ components to your org by using, for example, the "project deploy start" CLI command.
89
95
 
90
- Generate and store descriptions in metadata that provide additional context to the component’s functionality and
91
- purpose.
96
+ To enrich multiple metadata components, specify multiple --metadata <name> flags. Enclose names that contain spaces in
97
+ double quotes.
92
98
 
93
- To deploy multiple metadata components, either set multiple --metadata flags or a single --metadata flag with multiple
94
- names separated by spaces. Enclose names that contain spaces in one set of double quotes. The same syntax applies to
95
- --source-dir.
99
+ Even though this command updates only local files in your DX project, you're still required to authorize and specify
100
+ an org, which is how the command accesses a large language model (LLM).
96
101
 
97
- This is not saved in the org until you deploy the project.
102
+ Currently, this command supports enriching only Lightning Web Components, represented by the LightningComponentBundle
103
+ metadata type.
98
104
 
99
- This plugin only supports enrichment for LightningComponentBundle metadata at the moment.
105
+ Your org must be eligible for metadata enrichment. Your Salesforce admin can help with that.
100
106
 
101
107
  EXAMPLES
102
- Enrich metadata for a select LightningComponentBundle in the project
103
- $ sf metadata enrich --metadata LightningComponentBundle:ComponentName
108
+ Enrich the "HelloWorld" LightningComponentBundle metadata component in the local DX project; use your default org:
109
+
110
+ $ sf metadata enrich --metadata LightningComponentBundle:HelloWorld
111
+
112
+ Enrich the "HelloWorld" LightningComponentBundle metadata component and use the org with alias "my-org":
104
113
 
105
- Enrich metadata for a select LightningComponentBundle in the project for a specified target org
106
- $ sf metadata enrich --metadata LightningComponentBundle:ComponentName --target-org OrgAlias
114
+ $ sf metadata enrich --metadata LightningComponentBundle:HelloWorld --target-org my-org
107
115
 
108
- Enrich metadata for multiple LightningComponentBundle in the project
109
- $ sf metadata enrich --metadata LightningComponentBundle:Component1 --metadata LightningComponentBundle:Component2
116
+ Enrich metadata for multiple LightningComponentBundles using your default org:
110
117
 
111
- Enrich metadata for multiple LightningComponentBundle in the project matching wildcard
112
- $ sf metadata enrich --metadata LightningComponentBundle:Component*
118
+ $ sf metadata enrich --metadata LightningComponentBundle:Component1 --metadata \
119
+ LightningComponentBundle:Component2
120
+
121
+ Enrich metadata for multiple LightningComponentBundles using a matching wildcard:
122
+
123
+ $ sf metadata enrich --metadata "LightningComponentBundle:Component\*"
113
124
 
114
125
  FLAG DESCRIPTIONS
115
- -m, --metadata=<value>... (required) Metadata type and optional component name to enrich.
126
+ -m, --metadata=<value>... Metadata type and optional component name to enrich.
116
127
 
117
- Wildcards (* ) supported as long as you use quotes, such as "LightningComponentBundle:MyClass*"
128
+ Wildcards ("_") are supported as long as you use double quotes, such as "LightningComponentBundle:MyClass_".
118
129
  ```
119
130
 
120
- _See code: [src/commands/metadata/enrich.ts](https://github.com/salesforcecli/plugin-metadata-enrichment/blob/1.1.76/src/commands/metadata/enrich.ts)_
131
+ _See code: [src/commands/metadata/enrich.ts](https://github.com/salesforcecli/plugin-metadata-enrichment/blob/0.0.3/src/commands/metadata/enrich.ts)_
121
132
 
122
133
  <!-- commandsstop -->
@@ -4,6 +4,7 @@ export default class MetadataEnrich extends SfCommand<EnrichmentMetrics> {
4
4
  static readonly summary: string;
5
5
  static readonly description: string;
6
6
  static readonly examples: string[];
7
+ static readonly state = "preview";
7
8
  static readonly flags: {
8
9
  'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
9
10
  metadata: import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
@@ -13,20 +13,19 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { MultiStageOutput } from '@oclif/multi-stage-output';
16
17
  import { Messages, SfProject } from '@salesforce/core';
17
- import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
18
+ import { Flags, SfCommand, Ux } from '@salesforce/sf-plugins-core';
18
19
  import { ComponentSetBuilder } from '@salesforce/source-deploy-retrieve';
19
- import { EnrichmentHandler, EnrichmentMetrics, EnrichmentStatus, FileProcessor } from '@salesforce/metadata-enrichment';
20
- import { ComponentProcessor } from '../../component/index.js';
21
- import { MetricsFormatter, EnrichmentRecords } from '../../utils/index.js';
20
+ import { ComponentProcessor, EnrichmentHandler, EnrichmentMetrics, EnrichmentRecords, EnrichmentStatus, FileProcessor } from '@salesforce/metadata-enrichment';
22
21
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
23
22
  const commandMessages = Messages.loadMessages('@salesforce/plugin-metadata-enrichment', 'metadata.enrich');
24
- const errorsMessages = Messages.loadMessages('@salesforce/plugin-metadata-enrichment', 'errors');
25
23
  const metricsMessages = Messages.loadMessages('@salesforce/plugin-metadata-enrichment', 'metrics');
26
24
  export default class MetadataEnrich extends SfCommand {
27
25
  static summary = commandMessages.getMessage('summary');
28
26
  static description = commandMessages.getMessage('description');
29
27
  static examples = commandMessages.getMessages('examples');
28
+ static state = 'preview';
30
29
  static flags = {
31
30
  'target-org': Flags.requiredOrg(),
32
31
  metadata: Flags.string({
@@ -42,7 +41,17 @@ export default class MetadataEnrich extends SfCommand {
42
41
  const { flags } = await this.parse(MetadataEnrich);
43
42
  const org = flags['target-org'];
44
43
  const metadataEntries = flags['metadata'];
45
- this.spinner.start(commandMessages.getMessage('spinner.setup'));
44
+ const STAGES_MSO = [
45
+ commandMessages.getMessage('stage.setup'),
46
+ commandMessages.getMessage('stage.executing'),
47
+ commandMessages.getMessage('stage.updating.files'),
48
+ ];
49
+ const mso = new MultiStageOutput({
50
+ stages: STAGES_MSO,
51
+ title: commandMessages.getMessage('summary'),
52
+ jsonEnabled: this.jsonEnabled(),
53
+ });
54
+ mso.goto(STAGES_MSO[0]);
46
55
  const projectComponentSet = await ComponentSetBuilder.build({
47
56
  metadata: {
48
57
  metadataEntries,
@@ -50,7 +59,7 @@ export default class MetadataEnrich extends SfCommand {
50
59
  },
51
60
  });
52
61
  const projectSourceComponents = projectComponentSet.getSourceComponents().toArray();
53
- const enrichmentRecords = new EnrichmentRecords(projectSourceComponents, errorsMessages);
62
+ const enrichmentRecords = new EnrichmentRecords(projectSourceComponents);
54
63
  const componentsToSkip = ComponentProcessor.getComponentsToSkip(projectSourceComponents, metadataEntries, project.getPath());
55
64
  enrichmentRecords.addSkippedComponents(componentsToSkip);
56
65
  enrichmentRecords.updateWithStatus(componentsToSkip, EnrichmentStatus.SKIPPED);
@@ -65,18 +74,52 @@ export default class MetadataEnrich extends SfCommand {
65
74
  }
66
75
  return true;
67
76
  });
68
- this.spinner.stop();
69
- this.spinner.start(commandMessages.getMessage('spinner.executing', [componentsEligibleToProcess.length]));
77
+ mso.next();
70
78
  const connection = org.getConnection();
71
79
  const enrichmentResults = await EnrichmentHandler.enrich(connection, componentsEligibleToProcess);
72
80
  enrichmentRecords.updateWithResults(enrichmentResults);
73
- this.spinner.stop();
74
- this.spinner.start(commandMessages.getMessage('spinner.updating.files'));
81
+ mso.next();
75
82
  const fileUpdatedRecords = await FileProcessor.updateMetadataFiles(componentsEligibleToProcess, enrichmentRecords.recordSet);
76
83
  enrichmentRecords.updateWithResults(Array.from(fileUpdatedRecords));
77
- this.spinner.stop();
84
+ mso.stop();
78
85
  const metrics = EnrichmentMetrics.createEnrichmentMetrics(Array.from(enrichmentRecords.recordSet));
79
- MetricsFormatter.logMetrics(this.log.bind(this), metrics, metricsMessages);
86
+ const ux = new Ux();
87
+ ux.log('');
88
+ ux.log(metricsMessages.getMessage('metrics.total.count', [metrics.total]));
89
+ const tableRows = [
90
+ ...metrics.success.components.map((c) => ({
91
+ status: 'Success',
92
+ type: c.typeName,
93
+ component: c.componentName,
94
+ message: c.message,
95
+ })),
96
+ ...metrics.skipped.components.map((c) => ({
97
+ status: 'Skipped',
98
+ type: c.typeName,
99
+ component: c.componentName,
100
+ message: c.message,
101
+ })),
102
+ ...metrics.fail.components.map((c) => ({
103
+ status: 'Failed',
104
+ type: c.typeName,
105
+ component: c.componentName,
106
+ message: c.message,
107
+ })),
108
+ ];
109
+ if (tableRows.length > 0) {
110
+ ux.log('');
111
+ ux.table({
112
+ columns: [
113
+ { key: 'status', name: 'Status' },
114
+ { key: 'type', name: 'Type' },
115
+ { key: 'component', name: 'Component' },
116
+ { key: 'message', name: 'Message' },
117
+ ],
118
+ data: tableRows,
119
+ overflow: 'wrap',
120
+ });
121
+ }
122
+ ux.log('');
80
123
  return metrics;
81
124
  }
82
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"enrich.js","sourceRoot":"","sources":["../../../src/commands/metadata/enrich.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enrich.js","sourceRoot":"","sources":["../../../src/commands/metadata/enrich.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ Even though this command updates only local files in your DX project, you're sti
14
14
 
15
15
  Currently, this command supports enriching only Lightning Web Components, represented by the LightningComponentBundle metadata type.
16
16
 
17
+ Your org must be eligible for metadata enrichment. Your Salesforce admin can help with that.
18
+
17
19
  # examples
18
20
 
19
21
  - Enrich the "HelloWorld" LightningComponentBundle metadata component in the local DX project; use your default org:
@@ -40,14 +42,14 @@ Metadata type and optional component name to enrich.
40
42
 
41
43
  Wildcards ("_") are supported as long as you use double quotes, such as "LightningComponentBundle:MyClass_".
42
44
 
43
- # spinner.setup
45
+ # stage.setup
44
46
 
45
47
  Setting up and retrieving project source components
46
48
 
47
- # spinner.executing
49
+ # stage.executing
48
50
 
49
- Executing metadata enrichment for %s eligible components
51
+ Executing metadata enrichment
50
52
 
51
- # spinner.updating.files
53
+ # stage.updating.files
52
54
 
53
55
  Updating metadata configuration with enriched results
@@ -1,19 +1,3 @@
1
1
  # metrics.total.count
2
2
 
3
3
  Total Components Processed: %s
4
-
5
- # metrics.success.count
6
-
7
- ✓ Successfully Enriched: %s
8
-
9
- # metrics.skipped.count
10
-
11
- ⊘ Skipped: %s
12
-
13
- # metrics.fail.count
14
-
15
- ✗ Failed: %s
16
-
17
- # metrics.message
18
-
19
- Message: %s
@@ -1,18 +1,20 @@
1
1
  {
2
2
  "name": "@salesforce/plugin-metadata-enrichment",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@salesforce/plugin-metadata-enrichment",
9
- "version": "0.0.1",
9
+ "version": "0.0.3",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@oclif/core": "^4",
13
+ "@oclif/multi-stage-output": "^0.8.30",
14
+ "@oclif/table": "^0.5.1",
13
15
  "@salesforce/core": "^8.24.0",
14
16
  "@salesforce/kit": "^3.2.4",
15
- "@salesforce/metadata-enrichment": "^0.0.1",
17
+ "@salesforce/metadata-enrichment": "^0.0.4",
16
18
  "@salesforce/sf-plugins-core": "^12",
17
19
  "@salesforce/source-deploy-retrieve": "^12.0.1"
18
20
  },
@@ -3561,6 +3563,91 @@
3561
3563
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3562
3564
  }
3563
3565
  },
3566
+ "node_modules/@oclif/multi-stage-output": {
3567
+ "version": "0.8.30",
3568
+ "resolved": "https://registry.npmjs.org/@oclif/multi-stage-output/-/multi-stage-output-0.8.30.tgz",
3569
+ "integrity": "sha512-WNEqTdK9GsZGc/yOgm/2drpdTXp7FGDxH3nbWSpMJBJU5CqrWmvoqNqrXZmlVRQHjKCo8qW3hI9FXse5brFVNg==",
3570
+ "license": "MIT",
3571
+ "dependencies": {
3572
+ "@oclif/core": "^4",
3573
+ "@types/react": "^18.3.12",
3574
+ "cli-spinners": "^2",
3575
+ "figures": "^6.1.0",
3576
+ "ink": "5.0.1",
3577
+ "react": "^18.3.1",
3578
+ "wrap-ansi": "^9.0.2"
3579
+ },
3580
+ "engines": {
3581
+ "node": ">=18.0.0"
3582
+ }
3583
+ },
3584
+ "node_modules/@oclif/multi-stage-output/node_modules/ansi-regex": {
3585
+ "version": "6.2.2",
3586
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
3587
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
3588
+ "license": "MIT",
3589
+ "engines": {
3590
+ "node": ">=12"
3591
+ },
3592
+ "funding": {
3593
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
3594
+ }
3595
+ },
3596
+ "node_modules/@oclif/multi-stage-output/node_modules/emoji-regex": {
3597
+ "version": "10.6.0",
3598
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
3599
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
3600
+ "license": "MIT"
3601
+ },
3602
+ "node_modules/@oclif/multi-stage-output/node_modules/string-width": {
3603
+ "version": "7.2.0",
3604
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
3605
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
3606
+ "license": "MIT",
3607
+ "dependencies": {
3608
+ "emoji-regex": "^10.3.0",
3609
+ "get-east-asian-width": "^1.0.0",
3610
+ "strip-ansi": "^7.1.0"
3611
+ },
3612
+ "engines": {
3613
+ "node": ">=18"
3614
+ },
3615
+ "funding": {
3616
+ "url": "https://github.com/sponsors/sindresorhus"
3617
+ }
3618
+ },
3619
+ "node_modules/@oclif/multi-stage-output/node_modules/strip-ansi": {
3620
+ "version": "7.1.2",
3621
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
3622
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
3623
+ "license": "MIT",
3624
+ "dependencies": {
3625
+ "ansi-regex": "^6.0.1"
3626
+ },
3627
+ "engines": {
3628
+ "node": ">=12"
3629
+ },
3630
+ "funding": {
3631
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
3632
+ }
3633
+ },
3634
+ "node_modules/@oclif/multi-stage-output/node_modules/wrap-ansi": {
3635
+ "version": "9.0.2",
3636
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
3637
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
3638
+ "license": "MIT",
3639
+ "dependencies": {
3640
+ "ansi-styles": "^6.2.1",
3641
+ "string-width": "^7.0.0",
3642
+ "strip-ansi": "^7.1.0"
3643
+ },
3644
+ "engines": {
3645
+ "node": ">=18"
3646
+ },
3647
+ "funding": {
3648
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3649
+ }
3650
+ },
3564
3651
  "node_modules/@oclif/plugin-command-snapshot": {
3565
3652
  "version": "5.3.8",
3566
3653
  "resolved": "https://registry.npmjs.org/@oclif/plugin-command-snapshot/-/plugin-command-snapshot-5.3.8.tgz",
@@ -4105,9 +4192,9 @@
4105
4192
  }
4106
4193
  },
4107
4194
  "node_modules/@salesforce/metadata-enrichment": {
4108
- "version": "0.0.1",
4109
- "resolved": "https://registry.npmjs.org/@salesforce/metadata-enrichment/-/metadata-enrichment-0.0.1.tgz",
4110
- "integrity": "sha512-8w3PKpgmXi6u0uKZCfuQ7f7YceivYml/92GSB5fHKSrIHFppBx2tVKgJPlauEnvyNj685HSxs7HPSMZ2bZWdJQ==",
4195
+ "version": "0.0.4",
4196
+ "resolved": "https://registry.npmjs.org/@salesforce/metadata-enrichment/-/metadata-enrichment-0.0.4.tgz",
4197
+ "integrity": "sha512-5NPGDd0vrzxiFvB/OfaGvYyZ+4aIDaiTa7wayTqAlQsvzTKWwf26TEtRGkLFV48uNqLt4/uGC5sDfuXRQlI+uQ==",
4111
4198
  "license": "Apache-2.0",
4112
4199
  "dependencies": {
4113
4200
  "@salesforce/core": "^8.24.0",
@@ -5511,7 +5598,6 @@
5511
5598
  "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz",
5512
5599
  "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==",
5513
5600
  "license": "MIT",
5514
- "peer": true,
5515
5601
  "dependencies": {
5516
5602
  "@types/prop-types": "*",
5517
5603
  "csstype": "^3.2.2"
@@ -9016,6 +9102,21 @@
9016
9102
  "node": ">=0.8.0"
9017
9103
  }
9018
9104
  },
9105
+ "node_modules/figures": {
9106
+ "version": "6.1.0",
9107
+ "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
9108
+ "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
9109
+ "license": "MIT",
9110
+ "dependencies": {
9111
+ "is-unicode-supported": "^2.0.0"
9112
+ },
9113
+ "engines": {
9114
+ "node": ">=18"
9115
+ },
9116
+ "funding": {
9117
+ "url": "https://github.com/sponsors/sindresorhus"
9118
+ }
9119
+ },
9019
9120
  "node_modules/file-entry-cache": {
9020
9121
  "version": "6.0.1",
9021
9122
  "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -10969,13 +11070,12 @@
10969
11070
  "license": "MIT"
10970
11071
  },
10971
11072
  "node_modules/is-unicode-supported": {
10972
- "version": "0.1.0",
10973
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
10974
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
10975
- "dev": true,
11073
+ "version": "2.1.0",
11074
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
11075
+ "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
10976
11076
  "license": "MIT",
10977
11077
  "engines": {
10978
- "node": ">=10"
11078
+ "node": ">=18"
10979
11079
  },
10980
11080
  "funding": {
10981
11081
  "url": "https://github.com/sponsors/sindresorhus"
@@ -11814,6 +11914,19 @@
11814
11914
  "url": "https://github.com/sponsors/sindresorhus"
11815
11915
  }
11816
11916
  },
11917
+ "node_modules/log-symbols/node_modules/is-unicode-supported": {
11918
+ "version": "0.1.0",
11919
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
11920
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
11921
+ "dev": true,
11922
+ "license": "MIT",
11923
+ "engines": {
11924
+ "node": ">=10"
11925
+ },
11926
+ "funding": {
11927
+ "url": "https://github.com/sponsors/sindresorhus"
11928
+ }
11929
+ },
11817
11930
  "node_modules/loose-envify": {
11818
11931
  "version": "1.4.0",
11819
11932
  "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
package/oclif.lock CHANGED
@@ -1546,6 +1546,19 @@
1546
1546
  wordwrap "^1.0.0"
1547
1547
  wrap-ansi "^7.0.0"
1548
1548
 
1549
+ "@oclif/multi-stage-output@^0.8.30":
1550
+ version "0.8.30"
1551
+ resolved "https://registry.yarnpkg.com/@oclif/multi-stage-output/-/multi-stage-output-0.8.30.tgz#c95261d669bc466ce06701e26248f49282034a12"
1552
+ integrity sha512-WNEqTdK9GsZGc/yOgm/2drpdTXp7FGDxH3nbWSpMJBJU5CqrWmvoqNqrXZmlVRQHjKCo8qW3hI9FXse5brFVNg==
1553
+ dependencies:
1554
+ "@oclif/core" "^4"
1555
+ "@types/react" "^18.3.12"
1556
+ cli-spinners "^2"
1557
+ figures "^6.1.0"
1558
+ ink "5.0.1"
1559
+ react "^18.3.1"
1560
+ wrap-ansi "^9.0.2"
1561
+
1549
1562
  "@oclif/plugin-command-snapshot@^5.3.8":
1550
1563
  version "5.3.8"
1551
1564
  resolved "https://registry.yarnpkg.com/@oclif/plugin-command-snapshot/-/plugin-command-snapshot-5.3.8.tgz#b952a270bfdfaea941f244363c4bcf781398d9b9"
@@ -1590,7 +1603,7 @@
1590
1603
  lodash "^4.17.23"
1591
1604
  registry-auth-token "^5.1.1"
1592
1605
 
1593
- "@oclif/table@^0.5.0":
1606
+ "@oclif/table@^0.5.0", "@oclif/table@^0.5.1":
1594
1607
  version "0.5.2"
1595
1608
  resolved "https://registry.yarnpkg.com/@oclif/table/-/table-0.5.2.tgz#ddedab03c61086050dd10047cb05dcea6893839c"
1596
1609
  integrity sha512-7QnG9tqVEDqRbCZGvCU1uueoLWdiSVqFmslOfEpEW++XkqLi8hKu3TX6J22yqrvgCwx9CnNeAkaOD2UZ9NoWKw==
@@ -1726,10 +1739,10 @@
1726
1739
  dependencies:
1727
1740
  "@salesforce/ts-types" "^2.0.12"
1728
1741
 
1729
- "@salesforce/metadata-enrichment@^0.0.1":
1730
- version "0.0.1"
1731
- resolved "https://registry.yarnpkg.com/@salesforce/metadata-enrichment/-/metadata-enrichment-0.0.1.tgz#e685e3bb9676dc1141b23880a10ccc098a88ecdb"
1732
- integrity sha512-8w3PKpgmXi6u0uKZCfuQ7f7YceivYml/92GSB5fHKSrIHFppBx2tVKgJPlauEnvyNj685HSxs7HPSMZ2bZWdJQ==
1742
+ "@salesforce/metadata-enrichment@^0.0.4":
1743
+ version "0.0.4"
1744
+ resolved "https://registry.yarnpkg.com/@salesforce/metadata-enrichment/-/metadata-enrichment-0.0.4.tgz#542b2d49ef844c802942c252f602f3aed232c6ad"
1745
+ integrity sha512-5NPGDd0vrzxiFvB/OfaGvYyZ+4aIDaiTa7wayTqAlQsvzTKWwf26TEtRGkLFV48uNqLt4/uGC5sDfuXRQlI+uQ==
1733
1746
  dependencies:
1734
1747
  "@salesforce/core" "^8.24.0"
1735
1748
  "@salesforce/kit" "^3.2.4"
@@ -3468,7 +3481,7 @@ cli-progress@^3.12.0:
3468
3481
  dependencies:
3469
3482
  string-width "^4.2.3"
3470
3483
 
3471
- cli-spinners@^2.9.2:
3484
+ cli-spinners@^2, cli-spinners@^2.9.2:
3472
3485
  version "2.9.2"
3473
3486
  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
3474
3487
  integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
@@ -4522,6 +4535,13 @@ fdir@^6.5.0:
4522
4535
  resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
4523
4536
  integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
4524
4537
 
4538
+ figures@^6.1.0:
4539
+ version "6.1.0"
4540
+ resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a"
4541
+ integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==
4542
+ dependencies:
4543
+ is-unicode-supported "^2.0.0"
4544
+
4525
4545
  file-entry-cache@^6.0.1:
4526
4546
  version "6.0.1"
4527
4547
  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -5584,6 +5604,11 @@ is-unicode-supported@^0.1.0:
5584
5604
  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
5585
5605
  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
5586
5606
 
5607
+ is-unicode-supported@^2.0.0:
5608
+ version "2.1.0"
5609
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a"
5610
+ integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==
5611
+
5587
5612
  is-weakmap@^2.0.2:
5588
5613
  version "2.0.2"
5589
5614
  resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
@@ -7913,7 +7938,16 @@ stop-iteration-iterator@^1.1.0:
7913
7938
  es-errors "^1.3.0"
7914
7939
  internal-slot "^1.1.0"
7915
7940
 
7916
- "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
7941
+ "string-width-cjs@npm:string-width@^4.2.0":
7942
+ version "4.2.3"
7943
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
7944
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
7945
+ dependencies:
7946
+ emoji-regex "^8.0.0"
7947
+ is-fullwidth-code-point "^3.0.0"
7948
+ strip-ansi "^6.0.1"
7949
+
7950
+ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
7917
7951
  version "4.2.3"
7918
7952
  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
7919
7953
  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -7994,7 +8028,14 @@ stringify-entities@^4.0.0:
7994
8028
  character-entities-html4 "^2.0.0"
7995
8029
  character-entities-legacy "^3.0.0"
7996
8030
 
7997
- "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1:
8031
+ "strip-ansi-cjs@npm:strip-ansi@^6.0.1":
8032
+ version "6.0.1"
8033
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
8034
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
8035
+ dependencies:
8036
+ ansi-regex "^5.0.1"
8037
+
8038
+ strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1:
7998
8039
  version "6.0.1"
7999
8040
  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
8000
8041
  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -8669,7 +8710,7 @@ workerpool@^6.5.1:
8669
8710
  resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544"
8670
8711
  integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==
8671
8712
 
8672
- "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
8713
+ "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
8673
8714
  version "7.0.0"
8674
8715
  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
8675
8716
  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -8687,6 +8728,15 @@ wrap-ansi@^6.2.0:
8687
8728
  string-width "^4.1.0"
8688
8729
  strip-ansi "^6.0.0"
8689
8730
 
8731
+ wrap-ansi@^7.0.0:
8732
+ version "7.0.0"
8733
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
8734
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
8735
+ dependencies:
8736
+ ansi-styles "^4.0.0"
8737
+ string-width "^4.1.0"
8738
+ strip-ansi "^6.0.0"
8739
+
8690
8740
  wrap-ansi@^8.1.0:
8691
8741
  version "8.1.0"
8692
8742
  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
@@ -3,7 +3,7 @@
3
3
  "metadata:enrich": {
4
4
  "aliases": [],
5
5
  "args": {},
6
- "description": "Use this command to add AI-generated descriptions right in the metadata source files in your local DX project. These enriched descriptions succinctly outline the metadata component’s purpose and capabilities, which in turn provide context when vibe coding with an AI tool, such as Agentforce Vibes.\n\nThis command updates only the local metadata source files in your DX project; it doesn't change the components in your org. If you want the AI-generated descriptions in your org, then you must explicitly deploy the updated metadata components to your org by using, for example, the \"project deploy start\" CLI command.\n\nTo enrich multiple metadata components, specify multiple --metadata <name> flags. Enclose names that contain spaces in double quotes.\n\nEven though this command updates only local files in your DX project, you're still required to authorize and specify an org, which is how the command accesses a large language model (LLM).\n\nCurrently, this command supports enriching only Lightning Web Components, represented by the LightningComponentBundle metadata type.",
6
+ "description": "Use this command to add AI-generated descriptions right in the metadata source files in your local DX project. These enriched descriptions succinctly outline the metadata component’s purpose and capabilities, which in turn provide context when vibe coding with an AI tool, such as Agentforce Vibes.\n\nThis command updates only the local metadata source files in your DX project; it doesn't change the components in your org. If you want the AI-generated descriptions in your org, then you must explicitly deploy the updated metadata components to your org by using, for example, the \"project deploy start\" CLI command.\n\nTo enrich multiple metadata components, specify multiple --metadata <name> flags. Enclose names that contain spaces in double quotes.\n\nEven though this command updates only local files in your DX project, you're still required to authorize and specify an org, which is how the command accesses a large language model (LLM).\n\nCurrently, this command supports enriching only Lightning Web Components, represented by the LightningComponentBundle metadata type.\n\nYour org must be eligible for metadata enrichment. Your Salesforce admin can help with that.",
7
7
  "examples": [
8
8
  "Enrich the \"HelloWorld\" LightningComponentBundle metadata component in the local DX project; use your default org:\n<%= config.bin %> <%= command.id %> --metadata LightningComponentBundle:HelloWorld",
9
9
  "Enrich the \"HelloWorld\" LightningComponentBundle metadata component and use the org with alias \"my-org\":\n<%= config.bin %> <%= command.id %> --metadata LightningComponentBundle:HelloWorld --target-org my-org",
@@ -53,6 +53,7 @@
53
53
  "pluginAlias": "@salesforce/plugin-metadata-enrichment",
54
54
  "pluginName": "@salesforce/plugin-metadata-enrichment",
55
55
  "pluginType": "core",
56
+ "state": "preview",
56
57
  "strict": true,
57
58
  "summary": "Enrich metadata components in your DX project by adding AI-generated descriptions.",
58
59
  "enableJsonFlag": true,
@@ -70,5 +71,5 @@
70
71
  ]
71
72
  }
72
73
  },
73
- "version": "0.0.1"
74
+ "version": "0.0.3"
74
75
  }
package/package.json CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "@salesforce/plugin-metadata-enrichment",
3
3
  "description": "A Salesforce CLI plugin to enrich metadata for Salesforce resources",
4
- "version": "0.0.1",
4
+ "version": "0.0.3",
5
5
  "author": "Salesforce",
6
6
  "bugs": "https://github.com/forcedotcom/cli/issues",
7
7
  "dependencies": {
8
8
  "@oclif/core": "^4",
9
+ "@oclif/multi-stage-output": "^0.8.30",
10
+ "@oclif/table": "^0.5.1",
9
11
  "@salesforce/core": "^8.24.0",
10
12
  "@salesforce/kit": "^3.2.4",
11
- "@salesforce/metadata-enrichment": "^0.0.1",
13
+ "@salesforce/metadata-enrichment": "^0.0.4",
12
14
  "@salesforce/sf-plugins-core": "^12",
13
15
  "@salesforce/source-deploy-retrieve": "^12.0.1"
14
16
  },
@@ -201,7 +203,7 @@
201
203
  "exports": "./lib/index.js",
202
204
  "type": "module",
203
205
  "sfdx": {
204
- "publicKeyUrl": "https://developer.salesforce.com/media/salesforce-cli/security/@salesforce/plugin-metadata-enrichment/0.0.1.crt",
205
- "signatureUrl": "https://developer.salesforce.com/media/salesforce-cli/security/@salesforce/plugin-metadata-enrichment/0.0.1.sig"
206
+ "publicKeyUrl": "https://developer.salesforce.com/media/salesforce-cli/security/@salesforce/plugin-metadata-enrichment/0.0.3.crt",
207
+ "signatureUrl": "https://developer.salesforce.com/media/salesforce-cli/security/@salesforce/plugin-metadata-enrichment/0.0.3.sig"
206
208
  }
207
209
  }
@@ -18,7 +18,10 @@
18
18
  }
19
19
  }
20
20
  },
21
- "required": ["count", "components"],
21
+ "required": [
22
+ "count",
23
+ "components"
24
+ ],
22
25
  "additionalProperties": false
23
26
  },
24
27
  "fail": {
@@ -34,7 +37,10 @@
34
37
  }
35
38
  }
36
39
  },
37
- "required": ["count", "components"],
40
+ "required": [
41
+ "count",
42
+ "components"
43
+ ],
38
44
  "additionalProperties": false
39
45
  },
40
46
  "skipped": {
@@ -50,15 +56,24 @@
50
56
  }
51
57
  }
52
58
  },
53
- "required": ["count", "components"],
59
+ "required": [
60
+ "count",
61
+ "components"
62
+ ],
54
63
  "additionalProperties": false
55
64
  },
56
65
  "total": {
57
66
  "type": "number"
58
67
  }
59
68
  },
60
- "required": ["success", "fail", "skipped", "total"],
61
- "additionalProperties": false
69
+ "required": [
70
+ "success",
71
+ "fail",
72
+ "skipped",
73
+ "total"
74
+ ],
75
+ "additionalProperties": false,
76
+ "description": "A metrics data object for storing the final enrichment results. This includes components that were successfully enriched, failed, or skipped. This metrics object can be used to generate the final console or json output."
62
77
  },
63
78
  "ComponentEnrichmentStatus": {
64
79
  "type": "object",
@@ -74,7 +89,11 @@
74
89
  "type": "string"
75
90
  }
76
91
  },
77
- "required": ["componentName", "message", "typeName"]
92
+ "required": [
93
+ "componentName",
94
+ "message",
95
+ "typeName"
96
+ ]
78
97
  }
79
98
  }
80
- }
99
+ }
@@ -1,24 +0,0 @@
1
- import { type SourceComponent } from '@salesforce/source-deploy-retrieve';
2
- import type { MetadataTypeAndName } from '@salesforce/metadata-enrichment';
3
- export declare class ComponentProcessor {
4
- /**
5
- *
6
- * Determine the components to SKIP based on the source components and the metadata entries.
7
- * This includes:
8
- * - Input components that do not exist in the source project
9
- * - Non-LWC components
10
- * - LWC components that are missing their metadata configuration file
11
- *
12
- * @param sourceComponents
13
- * @param metadataEntries
14
- * @param projectDir
15
- * @returns
16
- */
17
- static getComponentsToSkip(sourceComponents: SourceComponent[], metadataEntries: string[], projectDir?: string): Set<MetadataTypeAndName>;
18
- private static filterComponents;
19
- private static diffRequestedComponents;
20
- private static parseRequestedComponents;
21
- private static getExistingSourceComponentNames;
22
- private static createSourceComponentMap;
23
- private static parseMetadataEntry;
24
- }
@@ -1,132 +0,0 @@
1
- /*
2
- * Copyright 2026, Salesforce, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { RegistryAccess } from '@salesforce/source-deploy-retrieve';
17
- export class ComponentProcessor {
18
- /**
19
- *
20
- * Determine the components to SKIP based on the source components and the metadata entries.
21
- * This includes:
22
- * - Input components that do not exist in the source project
23
- * - Non-LWC components
24
- * - LWC components that are missing their metadata configuration file
25
- *
26
- * @param sourceComponents
27
- * @param metadataEntries
28
- * @param projectDir
29
- * @returns
30
- */
31
- static getComponentsToSkip(sourceComponents, metadataEntries, projectDir) {
32
- const requestedComponents = ComponentProcessor.parseRequestedComponents(metadataEntries, projectDir);
33
- const missingComponents = ComponentProcessor.diffRequestedComponents(sourceComponents, requestedComponents);
34
- const filteredComponents = ComponentProcessor.filterComponents(sourceComponents, requestedComponents);
35
- return new Set([...missingComponents, ...filteredComponents]);
36
- }
37
- static filterComponents(sourceComponents, requestedComponents) {
38
- const sourceComponentMap = ComponentProcessor.createSourceComponentMap(sourceComponents);
39
- const filteredComponents = new Set();
40
- for (const requestedComponent of requestedComponents) {
41
- if (!requestedComponent?.componentName)
42
- continue;
43
- const sourceComponent = sourceComponentMap.get(requestedComponent.componentName);
44
- if (!sourceComponent)
45
- continue;
46
- // Filter out non-LWC components
47
- if (sourceComponent.type?.name !== 'LightningComponentBundle') {
48
- filteredComponents.add({
49
- typeName: sourceComponent.type.name,
50
- componentName: requestedComponent.componentName,
51
- });
52
- }
53
- // Filter out LWC components that are missing the metadata xml file
54
- else if (sourceComponent.type?.name === 'LightningComponentBundle' && !sourceComponent.xml) {
55
- filteredComponents.add({
56
- typeName: sourceComponent.type.name,
57
- componentName: requestedComponent.componentName,
58
- });
59
- }
60
- }
61
- return filteredComponents;
62
- }
63
- static diffRequestedComponents(sourceComponents, requestedComponents) {
64
- const existingSourceComponentNames = ComponentProcessor.getExistingSourceComponentNames(sourceComponents);
65
- const missingComponents = new Set();
66
- for (const requestedComponent of requestedComponents) {
67
- if (requestedComponent.componentName && !existingSourceComponentNames.has(requestedComponent.componentName)) {
68
- missingComponents.add(requestedComponent);
69
- }
70
- }
71
- return missingComponents;
72
- }
73
- static parseRequestedComponents(metadataEntries, projectDir) {
74
- const requestedComponents = new Set();
75
- for (const entry of metadataEntries) {
76
- const parsed = ComponentProcessor.parseMetadataEntry(entry, projectDir);
77
- if (!parsed) {
78
- continue;
79
- }
80
- // Ignore wildcarded component names
81
- if (parsed.componentName?.includes('*')) {
82
- continue;
83
- }
84
- requestedComponents.add(parsed);
85
- }
86
- return requestedComponents;
87
- }
88
- static getExistingSourceComponentNames(sourceComponents) {
89
- const existingSourceComponentNames = new Set();
90
- for (const component of sourceComponents) {
91
- const componentName = component.fullName ?? component.name;
92
- if (componentName) {
93
- existingSourceComponentNames.add(componentName);
94
- }
95
- }
96
- return existingSourceComponentNames;
97
- }
98
- static createSourceComponentMap(sourceComponents) {
99
- const componentMap = new Map();
100
- for (const component of sourceComponents) {
101
- const componentName = component.fullName ?? component.name;
102
- if (componentName) {
103
- componentMap.set(componentName, component);
104
- }
105
- }
106
- return componentMap;
107
- }
108
- static parseMetadataEntry(rawEntry, projectDir) {
109
- try {
110
- const registry = new RegistryAccess(undefined, projectDir);
111
- // Split on the first colon, and then join the rest back together to support names that include colons
112
- const [typeName, ...nameParts] = rawEntry.split(':');
113
- const type = registry.getTypeByName(typeName.trim());
114
- if (!type) {
115
- return null;
116
- }
117
- const metadataName = nameParts.length > 0 ? nameParts.join(':').trim() : '*';
118
- // Return null for wildcards since componentName is required
119
- if (metadataName === '*') {
120
- return null;
121
- }
122
- return {
123
- typeName: type.name,
124
- componentName: metadataName,
125
- };
126
- }
127
- catch {
128
- return null;
129
- }
130
- }
131
- }
132
- //# sourceMappingURL=componentProcessor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"componentProcessor.js","sourceRoot":"","sources":["../../src/component/componentProcessor.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export { ComponentProcessor } from './componentProcessor.js';
@@ -1,17 +0,0 @@
1
- /*
2
- * Copyright 2026, Salesforce, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- export { ComponentProcessor } from './componentProcessor.js';
17
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/component/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,12 +0,0 @@
1
- import type { SourceComponent } from '@salesforce/source-deploy-retrieve';
2
- import type { Messages } from '@salesforce/core';
3
- import { EnrichmentStatus, type EnrichmentRequestRecord, type MetadataTypeAndName } from '@salesforce/metadata-enrichment';
4
- export declare class EnrichmentRecords {
5
- readonly recordSet: Set<EnrichmentRequestRecord>;
6
- private readonly errorMessages;
7
- constructor(projectSourceComponents: SourceComponent[], errorMessages: Messages<string>);
8
- addSkippedComponents(componentsToSkip: Set<MetadataTypeAndName>): void;
9
- updateWithStatus(componentsToUpdate: Set<MetadataTypeAndName>, status: EnrichmentStatus): void;
10
- updateWithResults(results: EnrichmentRequestRecord[]): void;
11
- generateSkipReasons(componentsToSkip: Set<MetadataTypeAndName>, projectSourceComponents: SourceComponent[]): void;
12
- }
@@ -1,117 +0,0 @@
1
- /*
2
- * Copyright 2026, Salesforce, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { EnrichmentStatus, } from '@salesforce/metadata-enrichment';
17
- export class EnrichmentRecords {
18
- recordSet;
19
- errorMessages;
20
- constructor(projectSourceComponents, errorMessages) {
21
- this.errorMessages = errorMessages;
22
- this.recordSet = new Set();
23
- // Create initial records for all provided source components
24
- for (const component of projectSourceComponents) {
25
- const componentName = component.fullName ?? component.name;
26
- if (componentName && component.type) {
27
- this.recordSet.add({
28
- componentName,
29
- componentType: component.type,
30
- requestBody: { contentBundles: [], metadataType: 'Generic', maxTokens: 50 },
31
- response: null,
32
- message: null,
33
- status: EnrichmentStatus.NOT_PROCESSED,
34
- });
35
- }
36
- }
37
- }
38
- addSkippedComponents(componentsToSkip) {
39
- for (const component of componentsToSkip) {
40
- if (!component.componentName)
41
- continue;
42
- // Check if record already exists
43
- const existingRecord = Array.from(this.recordSet).find((r) => r.componentName === component.componentName);
44
- if (existingRecord)
45
- continue;
46
- // Create a new record for the skipped component
47
- this.recordSet.add({
48
- componentName: component.componentName,
49
- componentType: { name: component.typeName },
50
- requestBody: { contentBundles: [], metadataType: 'Generic', maxTokens: 50 },
51
- response: null,
52
- message: null,
53
- status: EnrichmentStatus.SKIPPED,
54
- });
55
- }
56
- }
57
- updateWithStatus(componentsToUpdate, status) {
58
- const componentsToUpdateMap = new Map();
59
- for (const component of componentsToUpdate) {
60
- if (component.componentName) {
61
- componentsToUpdateMap.set(component.componentName, component);
62
- }
63
- }
64
- for (const record of this.recordSet) {
65
- const componentToUpdate = componentsToUpdateMap.get(record.componentName);
66
- if (componentToUpdate) {
67
- record.status = status;
68
- }
69
- }
70
- }
71
- updateWithResults(results) {
72
- const resultsMap = new Map(results.map((r) => [r.componentName, r]));
73
- for (const record of this.recordSet) {
74
- const processedResult = resultsMap.get(record.componentName);
75
- if (processedResult) {
76
- record.requestBody = processedResult.requestBody;
77
- record.response = processedResult.response;
78
- if (record.status !== EnrichmentStatus.SKIPPED) {
79
- record.status = processedResult.response ? EnrichmentStatus.SUCCESS : EnrichmentStatus.FAIL;
80
- }
81
- record.message = processedResult.message;
82
- }
83
- }
84
- }
85
- generateSkipReasons(componentsToSkip, projectSourceComponents) {
86
- const sourceComponentMap = new Map();
87
- for (const component of projectSourceComponents) {
88
- const componentName = component.fullName ?? component.name;
89
- if (componentName) {
90
- sourceComponentMap.set(componentName, component);
91
- }
92
- }
93
- for (const skip of componentsToSkip) {
94
- if (!skip.componentName)
95
- continue;
96
- const record = Array.from(this.recordSet).find((r) => r.componentName === skip.componentName);
97
- if (!record || record.status !== EnrichmentStatus.SKIPPED || record.message)
98
- continue;
99
- const sourceComponent = sourceComponentMap.get(skip.componentName);
100
- let message;
101
- if (!sourceComponent) {
102
- message = this.errorMessages.getMessage('errors.component.not.found');
103
- }
104
- else if (sourceComponent?.type?.name !== 'LightningComponentBundle') {
105
- message = this.errorMessages.getMessage('errors.lwc.only');
106
- }
107
- else if (sourceComponent?.type?.name === 'LightningComponentBundle' && !sourceComponent.xml) {
108
- message = this.errorMessages.getMessage('errors.lwc.configuration.not.found');
109
- }
110
- else {
111
- message = this.errorMessages.getMessage('errors.unknown');
112
- }
113
- record.message = message;
114
- }
115
- }
116
- }
117
- //# sourceMappingURL=enrichmentRecords.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enrichmentRecords.js","sourceRoot":"","sources":["../../src/utils/enrichmentRecords.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { MetricsFormatter } from './metricsFormatter.js';
2
- export { EnrichmentRecords } from './enrichmentRecords.js';
@@ -1,18 +0,0 @@
1
- /*
2
- * Copyright 2026, Salesforce, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- export { MetricsFormatter } from './metricsFormatter.js';
17
- export { EnrichmentRecords } from './enrichmentRecords.js';
18
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,12 +0,0 @@
1
- import type { Messages } from '@salesforce/core';
2
- import type { EnrichmentMetrics } from '@salesforce/metadata-enrichment';
3
- export declare class MetricsFormatter {
4
- /**
5
- * Log the formatted enrichment metrics to the console
6
- *
7
- * @param log
8
- * @param metrics
9
- * @param metricsMessages
10
- */
11
- static logMetrics(log: (message: string) => void, metrics: EnrichmentMetrics, metricsMessages: Messages<string>): void;
12
- }
@@ -1,62 +0,0 @@
1
- /*
2
- * Copyright 2026, Salesforce, Inc.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- export class MetricsFormatter {
17
- /**
18
- * Log the formatted enrichment metrics to the console
19
- *
20
- * @param log
21
- * @param metrics
22
- * @param metricsMessages
23
- */
24
- static logMetrics(log, metrics, metricsMessages) {
25
- log('');
26
- log(metricsMessages.getMessage('metrics.total.count', [metrics.total]));
27
- log('');
28
- // Success section
29
- log(metricsMessages.getMessage('metrics.success.count', [metrics.success.count]));
30
- if (metrics.success.components.length > 0) {
31
- for (const component of metrics.success.components) {
32
- log(` • ${component.typeName}:${component.componentName ?? '*'}`);
33
- }
34
- }
35
- log('');
36
- // Skipped section
37
- log(metricsMessages.getMessage('metrics.skipped.count', [metrics.skipped.count]));
38
- if (metrics.skipped.components.length > 0) {
39
- for (const component of metrics.skipped.components) {
40
- log(` • ${component.typeName}:${component.componentName ?? '*'}`);
41
- if (component.message) {
42
- log(` ` + metricsMessages.getMessage(`metrics.message`, [component.message]));
43
- log('');
44
- }
45
- }
46
- }
47
- log('');
48
- // Failed section
49
- log(metricsMessages.getMessage('metrics.fail.count', [metrics.fail.count]));
50
- if (metrics.fail.components.length > 0) {
51
- for (const component of metrics.fail.components) {
52
- log(` • ${component.typeName}:${component.componentName ?? '*'}`);
53
- if (component.message) {
54
- log(` ` + metricsMessages.getMessage(`metrics.message`, [component.message]));
55
- log('');
56
- }
57
- }
58
- }
59
- log('');
60
- }
61
- }
62
- //# sourceMappingURL=metricsFormatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metricsFormatter.js","sourceRoot":"","sources":["../../src/utils/metricsFormatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,OAAO,gBAAgB;IAC3B;;;;;;OAMG;IACI,MAAM,CAAC,UAAU,CACtB,GAA8B,EAC9B,OAA0B,EAC1B,eAAiC;QAEjC,GAAG,CAAC,EAAE,CAAC,CAAC;QACR,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,GAAG,CAAC,EAAE,CAAC,CAAC;QAER,kBAAkB;QAClB,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACnD,GAAG,CAAC,OAAO,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,CAAC;QAER,kBAAkB;QAClB,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACnD,GAAG,CAAC,OAAO,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC,CAAC;gBACnE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;oBACtB,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACjF,GAAG,CAAC,EAAE,CAAC,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,CAAC;QAER,iBAAiB;QACjB,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChD,GAAG,CAAC,OAAO,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC,CAAC;gBACnE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;oBACtB,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACjF,GAAG,CAAC,EAAE,CAAC,CAAC;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;CACF"}