| import { VarType } from '../../types' |
| import type { OutputVar } from './types' |
| import { CodeLanguage } from './types' |
|
|
| export const extractFunctionParams = (code: string, language: CodeLanguage) => { |
| if (language === CodeLanguage.json) |
| return [] |
|
|
| const patterns: Record<Exclude<CodeLanguage, CodeLanguage.json>, RegExp> = { |
| [CodeLanguage.python3]: /def\s+main\s*\((.*?)\)/, |
| [CodeLanguage.javascript]: /function\s+main\s*\((.*?)\)/, |
| } |
| const match = code.match(patterns[language]) |
| const params: string[] = [] |
|
|
| if (match?.[1]) { |
| params.push(...match[1].split(',') |
| .map(p => p.trim()) |
| .filter(Boolean) |
| .map(p => p.split(':')[0].trim()), |
| ) |
| } |
|
|
| return params |
| } |
| export const extractReturnType = (code: string, language: CodeLanguage): OutputVar => { |
| const codeWithoutComments = code.replace(/\/\*\*[\s\S]*?\*\//, '') |
| console.log(codeWithoutComments) |
|
|
| const returnIndex = codeWithoutComments.indexOf('return') |
| if (returnIndex === -1) |
| return {} |
|
|
| |
| const codeAfterReturn = codeWithoutComments.slice(returnIndex) |
|
|
| let bracketCount = 0 |
| let startIndex = codeAfterReturn.indexOf('{') |
|
|
| if (language === CodeLanguage.javascript && startIndex === -1) { |
| const parenStart = codeAfterReturn.indexOf('(') |
| if (parenStart !== -1) |
| startIndex = codeAfterReturn.indexOf('{', parenStart) |
| } |
|
|
| if (startIndex === -1) |
| return {} |
|
|
| let endIndex = -1 |
|
|
| for (let i = startIndex; i < codeAfterReturn.length; i++) { |
| if (codeAfterReturn[i] === '{') |
| bracketCount++ |
| if (codeAfterReturn[i] === '}') { |
| bracketCount-- |
| if (bracketCount === 0) { |
| endIndex = i + 1 |
| break |
| } |
| } |
| } |
|
|
| if (endIndex === -1) |
| return {} |
|
|
| const returnContent = codeAfterReturn.slice(startIndex + 1, endIndex - 1) |
| console.log(returnContent) |
|
|
| const result: OutputVar = {} |
|
|
| const keyRegex = /['"]?(\w+)['"]?\s*:(?![^{]*})/g |
| const matches = returnContent.matchAll(keyRegex) |
|
|
| for (const match of matches) { |
| console.log(`Found key: "${match[1]}" from match: "${match[0]}"`) |
| const key = match[1] |
| result[key] = { |
| type: VarType.string, |
| children: null, |
| } |
| } |
|
|
| console.log(result) |
|
|
| return result |
| } |
|
|