/** * Parse comment # to /** */ export function parseComments(data: string) { return data .replace(/\n\n/g, '\n') .replace(/ /g, ' ') .replace(/(?:“|”|’)/g, `'`) .replace( /#\s*\n((?:\s*#[^\n]*\n)+)(\s*)#/g, (match, p1, space2) => `/**\n${p1.replace(/#\s/g, ' * ')}${space2} */`, ) } /** * Parse line by line * instrument: InstrumentName, required => instrument: */ export function parseTypes(data: string, moduleName?: string) { const result = data.replace( /(\S*)\s*:\s*\(([\S\s]*?)(,\srequired)?(,\sdeprecated)?(,\sdefault=\S+)?\),?/gm, (match, p1, p2, required, deprecated, defaultValue) => { return `${p1}${required ? '' : '?'}: ${convertType(p2, moduleName)}${ defaultValue ? ` /* ${defaultValue.replace(', default=', '')} */` : '' }\n` }, ) return result } export function convertType(type: string, moduleName?: string) { // check Array[...] if (type.startsWith('Array[')) { return type.replace( /Array\[([\s\S]*?)\]/, (match, p1) => `${convertSingleType(p1, moduleName)}[]`, ) } if (type.startsWith('List of')) { return type.replace( /List of ([\s\S]*?)(\s*\(csv\))/, (match, p1, p2) => `${convertSingleType(p1, moduleName)}[]`, ) } return convertSingleType(type, moduleName) } function convertSingleType(type: string, moduleName?: string) { // convert DecimalNumber => primitives.DecimalNumber if (type.startsWith('