| | 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 |
| | } |
| |
|