initialize components, routes, and services
This commit is contained in:
92
src/views/views-creator.ts
Normal file
92
src/views/views-creator.ts
Normal file
@ -0,0 +1,92 @@
|
||||
import {
|
||||
SystemDef,
|
||||
ViewDef
|
||||
} from '../systemGenService';
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
|
||||
const ncp = require('ncp').ncp;
|
||||
|
||||
|
||||
export function createViews(systemDef: SystemDef) {
|
||||
let viewsPromises = [];
|
||||
for (let i in systemDef.views) {
|
||||
viewsPromises.push(createComponent(systemDef.views[i], systemDef.name));
|
||||
}
|
||||
return Promise.all(viewsPromises);
|
||||
}
|
||||
|
||||
function createComponent(view: ViewDef, outDir: string) {
|
||||
let componentPromise = new Promise((componentResolve, componentReject) => {
|
||||
ncp(path.join(process.cwd(), 'frame', 'src', 'components', '{{component}}'), path.join(process.cwd(), outDir, 'src', 'components', view.component), (err: any) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
} else {
|
||||
let mapperPromise = initializeComponentFile(path.join(process.cwd(), outDir, 'src', 'components', view.component, '{{component}}Mapper.ets'), path.join(process.cwd(), outDir, 'src', 'components', view.component, `${view.component}Mapper.ts`), view.component, outDir);
|
||||
let routesPromise = initializeComponentFile(path.join(process.cwd(), outDir, 'src', 'components', view.component, '{{component}}Routes.ets'), path.join(process.cwd(), outDir, 'src', 'components', view.component, `${view.component}Routes.ts`), view.component, outDir);
|
||||
addInitializeRoutesCode(view.component, outDir);
|
||||
let serviceFileLocation: string = path.join(process.cwd(), outDir, 'src', 'components', view.component, `${view.component}Service.ts`);
|
||||
let servicePromise = initializeComponentFile(path.join(process.cwd(), outDir, 'src', 'components', view.component, '{{component}}Service.ets'), serviceFileLocation, view.component, outDir);
|
||||
addInitializeServiceCode(view.component, outDir);
|
||||
Promise.all([mapperPromise, routesPromise, servicePromise]).then(() => {
|
||||
console.log(`success creating component ${view.component}`);
|
||||
componentResolve();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
return componentPromise;
|
||||
}
|
||||
|
||||
function initializeComponentFile(sourceFile: string, destinationFile: string, component: string, outDir: string) {
|
||||
let filePromise = new Promise((resolve, reject) => {
|
||||
fs.rename(sourceFile, destinationFile, (err: any) => {
|
||||
let fileContents = fs.readFileSync(destinationFile, 'utf8');
|
||||
var uppercaseFirstLetterComponentName = uppercaseFirstLetter(component);
|
||||
var lowercaseFirstLetterComponentName = lowercaseFirstLetter(component);
|
||||
let newFileContents = fileContents.split('{{Component}}').join(uppercaseFirstLetterComponentName);
|
||||
newFileContents = newFileContents.split('{{component}}').join(lowercaseFirstLetterComponentName);
|
||||
fs.writeFileSync(destinationFile, newFileContents, 'utf8');
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
return filePromise
|
||||
}
|
||||
|
||||
function addInitializeServiceCode(component: string, outDir: string) {
|
||||
let fileLocation = path.join(process.cwd(), outDir, 'src', 'initializeServices.ts');
|
||||
let initServicesFile: string = fs.readFileSync(fileLocation, 'utf8');
|
||||
let parts = initServicesFile.split('// SYSTEM-BUILDER-initialize-import');
|
||||
parts[0] = parts[0] + `import { ${component}Service } from './components/${component}/${component}Service';
|
||||
`;
|
||||
let newServicesFile = parts.join('// SYSTEM-BUILDER-initialize-import');
|
||||
parts = newServicesFile.split('// SYSTEM-BUILDER-initialize-service');
|
||||
parts[0] = parts[0] + `${component}Service.initialize(),
|
||||
`;
|
||||
newServicesFile = parts.join(' // SYSTEM-BUILDER-initialize-service');
|
||||
fs.writeFileSync(fileLocation, newServicesFile, 'utf8');
|
||||
}
|
||||
|
||||
function addInitializeRoutesCode(component: string, outDir: string) {
|
||||
let fileLocation = path.join(process.cwd(), outDir, 'src', 'app.ts');
|
||||
let initRoutesFile: string = fs.readFileSync(fileLocation, 'utf8');
|
||||
let parts = initRoutesFile.split('// SYSTEM-BUILDER-router.require');
|
||||
parts[0] = parts[0] + `var ${component}Router = require('./components/${component}/${component}Routes');
|
||||
`;
|
||||
let newRoutesFile = parts.join('// SYSTEM-BUILDER-router.require');
|
||||
parts = newRoutesFile.split('// SYSTEM-BUILDER-app.use');
|
||||
parts[0] = parts[0] + `app.use('/api/v1/${component}', ${component}Router);
|
||||
`;
|
||||
newRoutesFile = parts.join('// SYSTEM-BUILDER-app.use');
|
||||
fs.writeFileSync(fileLocation, newRoutesFile, 'utf8');
|
||||
}
|
||||
|
||||
function uppercaseFirstLetter(input: string)
|
||||
{
|
||||
return input.charAt(0).toUpperCase() + input.slice(1);
|
||||
}
|
||||
|
||||
function lowercaseFirstLetter(input: string)
|
||||
{
|
||||
return input.charAt(0).toLowerCase() + input.slice(1);
|
||||
}
|
Reference in New Issue
Block a user