var path = require('path'); var fs = require('fs'); var erase = true; var readmeContent = null; var readmeFilePath = ''; function isFileEmpty(fileContents) { return fileContents.toString('utf8').trim() === ''; } function writeFile(file, newValue) { fs.writeFileSync(file, newValue, 'utf-8'); } function readFile(file) { return fs.readFileSync(file, 'utf8'); } function eraseContentList() { if (erase) { erase = false; var businessRegex = /(?:)([\s\S]*?)(?:)/; var contentRegex = /(?:)([\s\S]*?)(?:)/; var coreRegex = /(?:)([\s\S]*?)(?:)/; var businessRegexDirective = /(?:)([\s\S]*?)(?:)/; var contentRegexDirective = /(?:)([\s\S]*?)(?:)/; var coreRegexDirective = /(?:)([\s\S]*?)(?:)/; var servicessRegex = /(?:)([\s\S]*?)(?:)/; readmeContent = readmeContent.replace(businessRegex, ''); readmeContent = readmeContent.replace(contentRegex, ''); readmeContent = readmeContent.replace(coreRegex, ''); readmeContent = readmeContent.replace(businessRegexDirective, ''); readmeContent = readmeContent.replace(contentRegexDirective, ''); readmeContent = readmeContent.replace(coreRegexDirective, ''); readmeContent = readmeContent.replace(servicessRegex, ''); writeFile(readmeFilePath, readmeContent) } } function generateListComponent(currentFileContent, webpackInstance) { if (!isFileEmpty(currentFileContent)) { var componentReg = /(@Component)(\s?)\((\s?){(\s?)((.|[\n\r])*)}(\s?)\)/gm; var componentSection = componentReg.exec(currentFileContent); if (componentSection) { var selectorReg = /(adf)([a-zA-Z]|-)+((?!,)|(?! ))/g; var selector = selectorReg.exec(componentSection[0]); if (selector) { var rawPath = webpackInstance.resourcePath.replace(/\\/g, "/"); var removeRoot = rawPath.substr(rawPath.indexOf('/ng2-components') + 16, rawPath.length); var url = removeRoot.substr(0, removeRoot.indexOf('src')) + 'README.md'; var link = '- [' + selector[0] + '](' + url + ')'; if (webpackInstance.resourcePath.match('ng2-alfresco-core')) { readmeContent = readmeContent.replace('', '\n' + link); } else if (webpackInstance.resourcePath.match('ng2-alfresco-')) { readmeContent = readmeContent.replace('', '\n' + link); } else if (webpackInstance.resourcePath.match('ng2-activiti-')) { readmeContent = readmeContent.replace('', '\n' + link); } } } var directiveReg = /(@Directive)(\s?)\((\s?){(\s?)((.|[\r\n])*)}(\s?)\)/gm; var directiveSection = directiveReg.exec(currentFileContent); if (directiveSection) { var selectorReg = /(adf)([a-zA-Z]|-)+((?!,)|(?! ))/g; var selector = selectorReg.exec(directiveSection[0]); if (selector) { var selector = selector[0].replace("selector: '[", "").replace("']", '').replace("]", '').replace("selector: '", "").replace("'", ''); var rawPath = webpackInstance.resourcePath.replace(/\\/g, "/"); var removeRoot = rawPath.substr(rawPath.indexOf('/ng2-components') + 16, rawPath.length); var url = removeRoot.substr(0, removeRoot.indexOf('src')) + 'README.md'; var link = '- [' + selector + '](' + url + ')'; if (webpackInstance.resourcePath.match('ng2-alfresco-core')) { readmeContent = readmeContent.replace('', '\n' + link); } //else if (webpackInstance.resourcePath.match('ng2-alfresco-')) { // readmeContent = readmeContent.replace('', '\n' + link); //} //else if (webpackInstance.resourcePath.match('ng2-activiti-')) { // readmeContent = readmeContent.replace('', '\n' + link); //} } } writeFile(readmeFilePath, readmeContent); return true; } } function generateListservices(currentFileContent, webpackInstance) { if (!isFileEmpty(currentFileContent)) { var servicesReg = /(@Injectable\(\))(([a-zA-Z ]|[\r\n])*)/gm; var servicesSection = servicesReg.exec(currentFileContent); if (servicesSection) { var selectorReg = /([a-zA-Z])+Service/g; var selector = selectorReg.exec(servicesSection[0]); if (selector) { var rawPath = webpackInstance.resourcePath.replace(/\\/g, "/"); var url = rawPath.substr(rawPath.indexOf('/ng2-components') + 16, rawPath.length); var link = '- [' + selector[0] + '](' + url + ')'; readmeContent = readmeContent.replace('', '\n' + link); } } writeFile(readmeFilePath, readmeContent); return true; } } module.exports = function (input, map) { this.cacheable && this.cacheable(); var callback = this.async(); readmeFilePath = path.resolve(__dirname, '../../README.md'); if (!readmeContent) { readmeContent = readFile(readmeFilePath); } if (readmeContent) { eraseContentList(); generateListComponent(input, this); generateListservices(input, this); } callback(null, input, map); }