diff --git a/devui-cli/shared/utils.js b/devui-cli/shared/utils.js index cf8dc24061f265d654ef242f34e55008db290c2c..16acce59e28bb548e26ca60c07e382ff8783ab30 100644 --- a/devui-cli/shared/utils.js +++ b/devui-cli/shared/utils.js @@ -64,7 +64,7 @@ exports.parseExportByFileInfo = (fileInfo, ignoreParseError) => { .split(',') .forEach((p) => parts.push(p)) - searchContent = indexContent.slice(partEndIndex) + searchContent = indexContent.slice(reStartIndex + partContent.length) } exportModule.default = fileInfo.name + 'Install' @@ -81,12 +81,16 @@ exports.parseComponentInfo = (name) => { const defaultRe = /export default/ if (!defaultRe.test(indexContent)) { - logger.warning(`${fileInfo.path} must have "export default" and component info.`) + logger.warning(`${this.bigCamelCase(name)} must have "export default" and component info.`) } else { const reStartIndex = indexContent.indexOf('export default {') - componentInfo.title = this.extractStr(indexContent, 'title:', ',', reStartIndex).replace(/['"]/g, '') - componentInfo.category = this.extractStr(indexContent, 'category:', ',', reStartIndex).replace(/['"]/g, '') - componentInfo.status = this.extractStr(indexContent, 'status:', ',', reStartIndex).replace(/['"]/g, '') + const extraRe = /((^['"])|(['"]$))/g + + componentInfo.title = this.extractStr(indexContent, 'title:', ',', reStartIndex).trim().replace(extraRe, '') + componentInfo.category = this.extractStr(indexContent, 'category:', ',', reStartIndex).trim().replace(extraRe, '') + componentInfo.status = this.transformNullishStr( + this.extractStr(indexContent, 'status:', ',', reStartIndex).trim().replace(extraRe, '') + ) } componentInfo.name = this.bigCamelCase(name) @@ -94,11 +98,23 @@ exports.parseComponentInfo = (name) => { return componentInfo } +exports.transformNullishStr = (str) => { + console.log(str) + switch (str) { + case 'null': + return null + case 'undefined': + return undefined + default: + return str + } +} + exports.extractStr = (content = '', startKeywords = '', endKeywords = '', startIndex = 0) => { const keywordsStartIndex = content.indexOf(startKeywords, startIndex) + startKeywords.length const keywordsEndIndex = content.indexOf(endKeywords, keywordsStartIndex) if ([keywordsStartIndex - startIndex, keywordsEndIndex].some((index) => index < 0)) return '' - return content.slice(keywordsStartIndex, keywordsEndIndex).trim() + return content.slice(keywordsStartIndex, keywordsEndIndex) }