/**
* 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('