Created
May 17, 2019 06:37
-
-
Save Komock/cbf6cc464a52a4b9340081388e5d47ec to your computer and use it in GitHub Desktop.
Node script to convert existing component to module
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const path = require('path'); | |
const fs = require('fs'); | |
const APP_MODULES_DIR = 'projects/evo-ui-kit/src/lib/modules'; | |
const APP_COMPONENTS_DIR = 'projects/evo-ui-kit/src/lib/components'; | |
const pascalize = (str) => { | |
return str | |
.replace(/\s(.)/g, (s) => s.toUpperCase() ) | |
.replace(/-(.)/g, (s) => s.toUpperCase() ) | |
.replace(/\s/g, '') | |
.replace(/-/g, '') | |
.replace(/^(.)/, (s) => s.toUpperCase() ); | |
}; | |
const moduleTemplate = (moduleClassName, compClassName, compFileNameWoExt) => ` | |
import { NgModule } from '@angular/core'; | |
import { CommonModule } from '@angular/common'; | |
import { ${compClassName} } from './components/${compFileNameWoExt}'; | |
@NgModule({ | |
imports: [ | |
CommonModule | |
], | |
declarations: [ ${compClassName} ], | |
exports: [ ${compClassName} ], | |
}) | |
export class ${moduleClassName} {} | |
`; | |
const convertComponentToModule = (dirName) => { | |
const compDir = path.join(__dirname, APP_COMPONENTS_DIR, dirName); | |
const compDirFiles = fs.readdirSync(compDir); | |
if (compDirFiles) { | |
const compFileName = compDirFiles.find(fileName => fileName.match(/\.component\.ts$/ )); // my-component.component.ts | |
const compFileNameBase = compFileName.replace(/\.component\.ts$/, ''); // my-component | |
const compClassName = pascalize(compFileNameBase) + 'Component'; // MyComponentComponent | |
const moduleClassName = pascalize(compFileNameBase) + 'Module'; // MyComponentModule | |
const moduleContent = moduleTemplate(moduleClassName, compClassName, compFileName.replace('.ts', '')); | |
// Create Module Dir | |
const moduleDir = path.join(__dirname, APP_MODULES_DIR, dirName) | |
if (!fs.existsSync(moduleDir)) { | |
fs.mkdirSync(moduleDir); | |
} | |
// Write module file | |
fs.writeFileSync(path.join(moduleDir, compFileNameBase + '.module.ts'), moduleContent); | |
// Create Module components Dir | |
const moduleCompDir = path.join(moduleDir, 'components'); | |
if (!fs.existsSync(moduleCompDir)) { | |
fs.mkdirSync(moduleCompDir); | |
} | |
// Copy all component files | |
compDirFiles.forEach(fileName => { | |
fs.copyFileSync(path.join(compDir, fileName), path.join(moduleDir, 'components', fileName)); | |
}); | |
} | |
}; | |
convertComponentToModule('evo-alert'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment