@marsson/ciutils 0.1.0 → 0.2.1

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,8 +1,12 @@
1
1
  /* eslint-disable */
2
- //Needed as I do not know the fucking structure of deployment warnings...
3
- import { spawn } from 'node:child_process';
4
2
  import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
3
+ import { ux } from '@oclif/core';
5
4
  import { Messages } from '@salesforce/core';
5
+ import { promises as fsPromises, statSync } from 'fs';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ //import JSZip from 'jszip';
9
+ import { MetadataResolver, ComponentSet } from '@salesforce/source-deploy-retrieve';
6
10
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
7
11
  const messages = Messages.loadMessages('@marsson/ciutils', 'validate.repository.metadata');
8
12
  export default class ValidateRepositoryMetadata extends SfCommand {
@@ -23,51 +27,76 @@ export default class ValidateRepositoryMetadata extends SfCommand {
23
27
  required: true,
24
28
  exists: true,
25
29
  }),
30
+ debug: Flags.boolean({
31
+ summary: 'Show debug logs',
32
+ char: 'd',
33
+ required: false,
34
+ default: false,
35
+ }),
26
36
  };
27
- static executeSfCommand(org, folder) {
28
- return new Promise((resolve, reject) => {
29
- const child = spawn('sf', [
30
- 'project',
31
- 'deploy',
32
- 'start',
33
- '--source-dir',
34
- folder,
35
- '--dry-run',
36
- '-l',
37
- 'NoTestRun',
38
- '-o',
39
- org,
40
- '--json',
41
- ], {
42
- shell: true, // Runs command in a shell
43
- stdio: ['ignore', 'pipe', 'pipe'], // Capture stdout and stderr
44
- });
45
- let output = '';
46
- let errorOutput = '';
47
- // Capture stdout (command output)
48
- child.stdout.on('data', (data) => {
49
- output += data.toString();
50
- });
51
- // Capture stderr (error messages)
52
- child.stderr.on('data', (data) => {
53
- errorOutput += data.toString();
54
- });
55
- child.on('close', (code) => {
56
- if (code === 0) {
57
- resolve(output.trim()); // Return the raw JSON string
58
- }
59
- else {
60
- //reject(new Error(`Process exited with code ${code ?? 1}: ${errorOutput.trim()}`));
61
- resolve(output.trim()); // Return the raw JSON string
62
- console.log;
37
+ connection;
38
+ debugMode = false;
39
+ // Helper method for conditional debug logging
40
+ debugLog(message) {
41
+ if (this.debugMode) {
42
+ this.log(`[DEBUG] ${message}`);
43
+ }
44
+ }
45
+ // Helper method for standardized error handling
46
+ handleError(context, error, throwError = true) {
47
+ const errorMessage = `Error in ${context}: ${error.message}`;
48
+ this.debugLog(errorMessage);
49
+ this.debugLog(`Error stack: ${error.stack}`);
50
+ const formattedError = new Error(errorMessage);
51
+ if (throwError) {
52
+ throw formattedError;
53
+ }
54
+ return formattedError;
55
+ }
56
+ getMetadataTypesFromFolder(directory) {
57
+ this.debugLog(`Starting getMetadataTypesFromDirectory for directory: ${directory}`);
58
+ const metadataTypes = {};
59
+ try {
60
+ const resolver = new MetadataResolver();
61
+ const components = resolver.getComponentsFromPath(directory);
62
+ if (components.length > 0) {
63
+ this.debugLog(`Processing ${components.length} components`);
64
+ for (const component of components) {
65
+ const allComponents = [component, ...component.getChildren()];
66
+ for (const subComponent of allComponents) {
67
+ const typeName = subComponent.type.name;
68
+ const fullName = subComponent.fullName;
69
+ const contentPath = subComponent.content ?? subComponent.xml;
70
+ const absolutePath = contentPath ? path.resolve(contentPath) : null;
71
+ const metadataItem = {
72
+ metadataName: fullName,
73
+ path: absolutePath,
74
+ };
75
+ if (!metadataTypes[typeName]) {
76
+ metadataTypes[typeName] = {};
77
+ }
78
+ if (!metadataTypes[typeName][fullName]) {
79
+ metadataTypes[typeName][fullName] = metadataItem;
80
+ }
81
+ else {
82
+ this.debugLog(`[DUPLICATE] Skipping duplicate: ${typeName} - ${fullName}`);
83
+ }
84
+ }
63
85
  }
64
- });
65
- child.on('error', (error) => {
66
- reject(error);
67
- });
68
- });
86
+ }
87
+ else {
88
+ this.debugLog(`No metadata components found in: ${directory}`);
89
+ }
90
+ this.debugLog(`Completed scan. Found ${Object.keys(metadataTypes).length} metadata types.`);
91
+ return metadataTypes;
92
+ }
93
+ catch (error) {
94
+ this.handleError('getMetadataTypesFromDirectory', error);
95
+ return metadataTypes;
96
+ }
69
97
  }
70
- static generateResultFromJSON(ajson) {
98
+ // Compare retrieved metadata with local files
99
+ async compareMetadata(downloadedMetadataTypes, metadataTypes) {
71
100
  const result = {
72
101
  status: 0,
73
102
  unchanged: [],
@@ -75,45 +104,226 @@ export default class ValidateRepositoryMetadata extends SfCommand {
75
104
  deleted: [],
76
105
  error: []
77
106
  };
78
- ajson.result.details.componentSuccesses.forEach((component) => {
79
- if (component.fullName === 'package.xml') {
80
- return;
81
- }
82
- if (component.created) {
83
- result.deleted.push(component);
84
- result.status = 1;
85
- return;
107
+ this.debugLog(`Starting metadata comparison between local and retrieved metadata`);
108
+ for (const metadataType in metadataTypes) {
109
+ this.debugLog(`Processing metadata type: ${metadataType}`);
110
+ const localComponents = metadataTypes[metadataType];
111
+ if (!downloadedMetadataTypes[metadataType]) {
112
+ this.debugLog(`Metadata type ${metadataType} not found in retrieved metadata - all components deleted`);
113
+ for (const componentName in localComponents) {
114
+ const component = localComponents[componentName];
115
+ result.deleted.push({
116
+ changed: false,
117
+ componentType: metadataType,
118
+ created: false,
119
+ createdDate: new Date().toISOString(),
120
+ deleted: true,
121
+ fileName: component.path || '',
122
+ fullName: component.metadataName,
123
+ success: true,
124
+ metadataTypeOrigin: metadataType
125
+ });
126
+ }
127
+ continue;
86
128
  }
87
- if (component.changed) {
88
- result.changed.push(component);
89
- result.status = 1;
90
- return;
129
+ const retrievedComponents = downloadedMetadataTypes[metadataType];
130
+ for (const componentName in localComponents) {
131
+ const localComponent = localComponents[componentName];
132
+ const retrievedComponent = retrievedComponents[componentName];
133
+ this.debugLog(`🔍 Comparing ${metadataType}.${componentName}`);
134
+ if (!retrievedComponent) {
135
+ this.debugLog(`Component ${componentName} of type ${metadataType} not found in retrieved metadata - deleted`);
136
+ result.deleted.push({
137
+ changed: false,
138
+ componentType: metadataType,
139
+ created: false,
140
+ createdDate: new Date().toISOString(),
141
+ deleted: true,
142
+ fileName: localComponent.path || '',
143
+ fullName: localComponent.metadataName,
144
+ success: true,
145
+ metadataTypeOrigin: metadataType
146
+ });
147
+ continue;
148
+ }
149
+ const areEqual = this.areComponentsEqual(localComponent, retrievedComponent);
150
+ if (localComponent.path &&
151
+ retrievedComponent.path &&
152
+ areEqual === true) {
153
+ this.debugLog(`✅ Component ${componentName} of type ${metadataType} is unchanged`);
154
+ }
155
+ else if (areEqual === false) {
156
+ this.debugLog(`⚠️ Component ${componentName} of type ${metadataType} has changed`);
157
+ result.changed.push({
158
+ changed: true,
159
+ componentType: metadataType,
160
+ created: false,
161
+ createdDate: new Date().toISOString(),
162
+ deleted: false,
163
+ fileName: localComponent.path || '',
164
+ fullName: localComponent.metadataName,
165
+ success: true,
166
+ metadataTypeOrigin: metadataType
167
+ });
168
+ }
169
+ else {
170
+ this.debugLog(`⏭️ Skipping ${componentName} of type ${metadataType} — possibly a directory or unreadable file.`);
171
+ // Optional: add to result.error if needed
172
+ }
91
173
  }
92
- result.unchanged.push(component);
93
- });
94
- ajson.result.details.componentFailures.forEach((component) => {
95
- result.error.push(component);
174
+ }
175
+ if (result.error.length > 0) {
96
176
  result.status = 3;
97
- });
177
+ }
178
+ else if (result.changed.length > 0 || result.deleted.length > 0) {
179
+ result.status = 1;
180
+ }
181
+ else {
182
+ result.status = 0;
183
+ }
184
+ this.debugLog(`Metadata comparison completed with status: ${result.status}`);
185
+ this.debugLog(`Unchanged: ${result.unchanged.length}, Changed: ${result.changed.length}, Deleted: ${result.deleted.length}, Error: ${result.error.length}`);
98
186
  return result;
99
187
  }
188
+ // Helper method to compare two components
189
+ areComponentsEqual(localComponent, retrievedComponent) {
190
+ try {
191
+ const normalize = (content) => {
192
+ return content
193
+ .replace(/\r\n/g, '\n')
194
+ .replace(/<!--[\s\S]*?-->/g, '') // Remove XML comments
195
+ .replace(/^\s+|\s+$/gm, '') // Trim each line
196
+ .replace(/\s+/g, ' ') // Normalize whitespace
197
+ .trim();
198
+ };
199
+ if (!localComponent.path || !retrievedComponent.path) {
200
+ return false;
201
+ }
202
+ const isFile = (p) => {
203
+ try {
204
+ return statSync(p).isFile();
205
+ }
206
+ catch {
207
+ return false;
208
+ }
209
+ };
210
+ if (!isFile(localComponent.path) || !isFile(retrievedComponent.path)) {
211
+ this.debugLog(`[SKIP] One of the components is a directory. Skipping comparison for ${localComponent.metadataName}`);
212
+ return null;
213
+ }
214
+ const localContent = fs.readFileSync(localComponent.path, 'utf8');
215
+ const retrievedContent = fs.readFileSync(retrievedComponent.path, 'utf8');
216
+ const normalizedLocal = normalize(localContent);
217
+ const normalizedRetrieved = normalize(retrievedContent);
218
+ if (normalizedLocal === normalizedRetrieved) {
219
+ //this.log(`${localComponent.metadataName} EQUAL`);
220
+ return true;
221
+ }
222
+ //this.log(`${localComponent.metadataName} DIFFERENT`);
223
+ return false;
224
+ }
225
+ catch (error) {
226
+ //this.log(`${localComponent.metadataName} ERROR`);
227
+ if (error instanceof Error && 'errno' in error) {
228
+ this.debugLog(`Error comparing files: ${error.errno}`);
229
+ if (error.errno === -21) {
230
+ return null;
231
+ }
232
+ }
233
+ return false;
234
+ }
235
+ }
236
+ // Cache for MetadataResolver instances to improve performance
237
+ /*
238
+ private resolverCache = new Map<string, any[]>();
239
+ */
240
+ getComponentSetFromFolder(path) {
241
+ const resolver = new MetadataResolver();
242
+ const components = resolver.getComponentsFromPath(path);
243
+ return new ComponentSet(components);
244
+ }
245
+ async retrieveComponents(componentSet, conn) {
246
+ ux.action.start('Retrieving metadata from org'); // 👈 Starts the spinner
247
+ try {
248
+ const outputPath = path.join(process.cwd(), '.output');
249
+ await fsPromises.rm(outputPath, { recursive: true, force: true });
250
+ const retrieve = await componentSet.retrieve({
251
+ usernameOrConnection: conn,
252
+ output: outputPath,
253
+ merge: false, // Optional: if true, will merge into local project
254
+ });
255
+ // Optionally wait for the result:
256
+ const result = await retrieve.pollStatus(5000, 300000);
257
+ if (result.response.status === 'Succeeded') {
258
+ ux.action.stop('✔️ Retrieve complete'); // 👈 Spinner stops with success message
259
+ }
260
+ else {
261
+ ux.action.stop(`❌ Failed: ${result.response.status}`);
262
+ }
263
+ // ✅ Return the actual folder path
264
+ const entries = fs.readdirSync(outputPath, { withFileTypes: true });
265
+ const firstFolder = entries.find(entry => entry.isDirectory());
266
+ return firstFolder ? path.join(outputPath, firstFolder.name) : undefined;
267
+ }
268
+ catch (error) {
269
+ ux.action.stop('❌ Error during retrieve');
270
+ throw error;
271
+ }
272
+ }
100
273
  async run() {
101
274
  const { flags } = await this.parse(ValidateRepositoryMetadata);
275
+ // Set debug mode based on flag
276
+ this.debugMode = flags.debug;
277
+ this.debugLog(`Starting ValidateRepositoryMetadata.run()`);
278
+ this.debugLog(`Parsing command flags`);
102
279
  const folder = flags.folder;
103
- const org = flags['target-org'].getUsername();
104
- let jsonString = '';
280
+ this.debugLog(`Using folder: ${folder}`);
281
+ this.debugLog(`Getting connection from target org: ${flags['target-org'].getUsername()}`);
282
+ this.connection = flags['target-org'].getConnection();
283
+ this.debugLog(`Connection established to org: ${this.connection.getUsername()}`);
105
284
  try {
106
- jsonString = await ValidateRepositoryMetadata.executeSfCommand(org, folder);
285
+ // Get metadata types from the directory
286
+ this.debugLog(`Step 1: Getting componentSet from directory: ${folder}`);
287
+ //this.log('Getting componentSet...');
288
+ const componentSet = this.getComponentSetFromFolder(folder);
289
+ // Retrieve metadata from the org
290
+ this.debugLog(`Step 2: Retrieving metadata from org`);
291
+ this.log('Retrieving metadata from org...');
292
+ const resultFolder = await this.retrieveComponents(componentSet, this.connection);
293
+ this.debugLog(`Successfully retrieved metadata from org`);
294
+ const originalMetadata = this.getMetadataTypesFromFolder(folder);
295
+ const retrievedMetadata = this.getMetadataTypesFromFolder(resultFolder);
296
+ // Compare retrieved metadata with local files
297
+ this.debugLog(`Step 3: Comparing retrieved metadata with local files`);
298
+ this.log('Comparing metadata with local files...');
299
+ const comparisonResult = await this.compareMetadata(retrievedMetadata, originalMetadata);
300
+ this.debugLog(`Comparison completed with status: ${comparisonResult.status}`);
301
+ // Display the results
302
+ this.debugLog(`Step 4: Displaying results`);
303
+ this.createTable(comparisonResult);
304
+ this.debugLog(`Results displayed to user`);
305
+ this.debugLog(`ValidateRepositoryMetadata.run() completed successfully`);
306
+ // return comparisonResult;
307
+ this.debugLog(`ValidateRepositoryMetadata.run() completed successfully`);
308
+ return comparisonResult;
107
309
  }
108
310
  catch (error) {
109
- this.error(`Error running deploy start: ${error.message}`);
311
+ // Log the error but don't throw it since we're in the main run method
312
+ const formattedError = this.handleError('ValidateRepositoryMetadata.run', error, false);
313
+ this.error(`Error: ${formattedError.message}`);
314
+ // Return a default error result
315
+ this.debugLog(`Returning default error result`);
316
+ return {
317
+ status: 3,
318
+ unchanged: [],
319
+ changed: [],
320
+ deleted: [],
321
+ error: []
322
+ };
110
323
  }
111
- const validationResult = JSON.parse(jsonString);
112
- const result = ValidateRepositoryMetadata.generateResultFromJSON(validationResult);
113
- this.createTable(result);
114
- return result;
115
324
  }
116
325
  createTable(result) {
326
+ this.debugLog(`Creating result table with status: ${result.status}`);
117
327
  switch (result.status) {
118
328
  case 0:
119
329
  this.log('\n✅ Result Status: Repo in sync');
@@ -124,33 +334,39 @@ export default class ValidateRepositoryMetadata extends SfCommand {
124
334
  case 3:
125
335
  this.log('\n❌ Result Status: Error on component validation to ORG:');
126
336
  }
337
+ // Helper function to create component data for tables
338
+ const createComponentData = (components) => {
339
+ return components.map((component) => ({
340
+ 'Component Name': component.fullName,
341
+ 'Type': component.componentType,
342
+ 'Metadata Type Origin': component.metadataTypeOrigin || 'Unknown'
343
+ }));
344
+ };
127
345
  if (result.changed.length > 0) {
128
346
  this.log('\n📌 Altered components:');
129
347
  this.table({
130
- data: result.changed.map((component) => ({
131
- 'Component Name': component.fullName, // Column Name in Table
132
- 'Type': component.componentType // Column Name in Table
133
- }))
348
+ data: createComponentData(result.changed)
134
349
  });
135
350
  }
351
+ else {
352
+ this.debugLog(`No altered components to display`);
353
+ }
136
354
  if (result.deleted.length > 0) {
137
355
  this.log('\n🧽 Removed components:');
138
356
  this.table({
139
- data: result.deleted.map((component) => ({
140
- 'Component Name': component.fullName, // Column Name in Table
141
- 'Type': component.componentType // Column Name in Table
142
- }))
357
+ data: createComponentData(result.deleted)
143
358
  });
144
359
  }
145
360
  if (result.error.length > 0) {
146
361
  this.log('\n❌ Errored out Components:');
147
362
  this.table({
148
- data: result.error.map((component) => ({
149
- 'Component Name': component.fullName, // Column Name in Table
150
- 'Type': component.componentType, // Column Name in Table
151
- }))
363
+ data: createComponentData(result.error)
152
364
  });
153
365
  }
366
+ else {
367
+ this.debugLog(`No components with errors to display`);
368
+ }
369
+ this.debugLog(`Result table creation completed`);
154
370
  }
155
371
  }
156
372
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../../src/commands/validate/repository/metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../../src/commands/validate/repository/metadata.ts"],"names":[],"mappings":"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"}