Skip to content

Instantly share code, notes, and snippets.

@Komock
Created May 17, 2019 06:37
Show Gist options
  • Save Komock/cbf6cc464a52a4b9340081388e5d47ec to your computer and use it in GitHub Desktop.
Save Komock/cbf6cc464a52a4b9340081388e5d47ec to your computer and use it in GitHub Desktop.
Node script to convert existing component to module
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