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

Function extractTriggerConfigFields

scripts/generate-docs.ts:3459–3520  ·  view source on GitHub ↗

* Extract user-facing configuration fields from a TriggerConfig subBlocks definition. * Handles both inline arrays (`subBlocks: [...]`) and builder function calls * (`subBlocks: buildXSubBlocks({...})`), resolving them from the trigger file and utils.ts.

(
  segment: string,
  primaryContent?: string,
  utilsContent?: string
)

Source from the content-addressed store, hash-verified

3457 * (`subBlocks: buildXSubBlocks({...})`), resolving them from the trigger file and utils.ts.
3458 */
3459function extractTriggerConfigFields(
3460 segment: string,
3461 primaryContent?: string,
3462 utilsContent?: string
3463): TriggerConfigField[] {
3464 const UI_ONLY_IDS = new Set(['webhookUrlDisplay', 'triggerInstructions', 'selectedTriggerId'])
3465 const allContent = utilsContent || primaryContent || ''
3466
3467 // Case 1: Inline subBlocks: [...]
3468 const subBlocksMatch = /\bsubBlocks\s*:\s*\[/.exec(segment)
3469 if (subBlocksMatch) {
3470 const arrayStart = subBlocksMatch.index + subBlocksMatch[0].length - 1
3471 const arrayEnd = findMatchingClose(segment, arrayStart, '[', ']')
3472 if (arrayEnd === -1) return []
3473 return parseSubBlockArrayContent(
3474 segment.substring(arrayStart + 1, arrayEnd - 1),
3475 UI_ONLY_IDS,
3476 allContent
3477 )
3478 }
3479
3480 // Case 2: Builder function call — subBlocks: buildXFunc(...)
3481 if (!allContent) return []
3482 const builderCallMatch = /\bsubBlocks\s*:\s*(\w+)\s*\(/.exec(segment)
3483 if (!builderCallMatch) return []
3484
3485 const funcName = builderCallMatch[1]
3486
3487 // Special case: buildTriggerSubBlocks — user config lives in the `extraFields` parameter
3488 if (funcName === 'buildTriggerSubBlocks') {
3489 const openParen = builderCallMatch.index + builderCallMatch[0].length - 1
3490 const closeParen = findMatchingClose(segment, openParen, '(', ')')
3491 if (closeParen === -1) return []
3492
3493 const argsBody = segment.substring(openParen + 1, closeParen - 1)
3494 const extraFieldsMatch = /\bextraFields\s*:\s*/.exec(argsBody)
3495 if (!extraFieldsMatch) return []
3496
3497 // Find first non-whitespace char after "extraFields:"
3498 let valuePos = extraFieldsMatch.index + extraFieldsMatch[0].length
3499 while (valuePos < argsBody.length && /\s/.test(argsBody[valuePos])) valuePos++
3500
3501 if (argsBody[valuePos] === '[') {
3502 // extraFields: [...] — inline array, may contain function calls
3503 const arrayEnd = findMatchingClose(argsBody, valuePos, '[', ']')
3504 if (arrayEnd === -1) return []
3505 return parseSubBlockArrayContent(
3506 argsBody.substring(valuePos + 1, arrayEnd - 1),
3507 UI_ONLY_IDS,
3508 allContent
3509 )
3510 }
3511
3512 // extraFields: buildXFunc(args) — resolve the builder function
3513 const extraFuncMatch = /^(\w+)\s*\(/.exec(argsBody.substring(valuePos))
3514 if (!extraFuncMatch) return []
3515 return resolveSubBlockBuilderFunction(extraFuncMatch[1], allContent)
3516 }

Callers 1

buildFullTriggerRegistryFunction · 0.85

Calls 4

findMatchingCloseFunction · 0.85
testMethod · 0.80

Tested by

no test coverage detected