MCPcopy Index your code
hub / github.com/simstudioai/sim / createDiff

Method createDiff

apps/sim/lib/workflows/diff/diff-engine.ts:162–208  ·  view source on GitHub ↗

* Create a diff from workflow state

(jsonContent: string, diffAnalysis?: DiffAnalysis)

Source from the content-addressed store, hash-verified

160 * Create a diff from workflow state
161 */
162 async createDiff(jsonContent: string, diffAnalysis?: DiffAnalysis): Promise<DiffResult> {
163 try {
164 logger.info('WorkflowDiffEngine.createDiff called with:', {
165 jsonContentLength: jsonContent.length,
166 diffAnalysis: diffAnalysis,
167 diffAnalysisType: typeof diffAnalysis,
168 diffAnalysisUndefined: diffAnalysis === undefined,
169 diffAnalysisNull: diffAnalysis === null,
170 })
171
172 // Get current workflow state for comparison
173 const { useWorkflowStore } = await import('@/stores/workflows/workflow/store')
174 const currentWorkflowState = useWorkflowStore.getState().getWorkflowState()
175
176 logger.info('WorkflowDiffEngine current workflow state:', {
177 blockCount: Object.keys(currentWorkflowState.blocks || {}).length,
178 edgeCount: currentWorkflowState.edges?.length || 0,
179 hasLoops: Object.keys(currentWorkflowState.loops || {}).length > 0,
180 hasParallels: Object.keys(currentWorkflowState.parallels || {}).length > 0,
181 })
182
183 // Merge subblock values from subblock store to ensure manual edits are included in baseline
184 let mergedBaseline: WorkflowState = currentWorkflowState
185 try {
186 mergedBaseline = {
187 ...currentWorkflowState,
188 blocks: mergeSubblockState(currentWorkflowState.blocks),
189 }
190 logger.info('Merged subblock values into baseline for diff creation', {
191 blockCount: Object.keys(mergedBaseline.blocks || {}).length,
192 })
193 } catch (mergeError) {
194 logger.warn('Failed to merge subblock values into baseline; proceeding with raw state', {
195 error: toError(mergeError).message,
196 })
197 }
198
199 const proposedState = parseWorkflowStateJson(jsonContent)
200 return this.createDiffFromWorkflowState(proposedState, diffAnalysis, mergedBaseline)
201 } catch (error) {
202 logger.error('Failed to create diff:', error)
203 return {
204 success: false,
205 errors: [getErrorMessage(error, 'Failed to create diff')],
206 }
207 }
208 }
209
210 /**
211 * Create a diff from a WorkflowState object directly (more efficient than YAML)

Callers 1

mergeDiffMethod · 0.95

Calls 8

mergeSubblockStateFunction · 0.90
toErrorFunction · 0.90
getErrorMessageFunction · 0.90
parseWorkflowStateJsonFunction · 0.85
infoMethod · 0.80
errorMethod · 0.80
warnMethod · 0.65

Tested by

no test coverage detected