Skip to content

Commit

Permalink
remove and refactor q and q-io as dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
Donmclean committed Oct 22, 2017
1 parent 5e8be8d commit 493892b
Show file tree
Hide file tree
Showing 8 changed files with 221 additions and 201 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@
"extract-text-webpack-plugin": "^2.1.0",
"file-loader": "^0.11.2",
"flow-bin": "^0.42.0",
"fs-extra": "^4.0.2",
"gulp": "^3.9.1",
"gulp-debug": "^3.0.0",
"gulp-eslint": "^4.0.0",
Expand All @@ -99,9 +100,8 @@
"postcss-loader": "^1.0.0",
"pug": "^2.0.0-beta5",
"pug-loader": "^2.2.1",
"q": "^1.4.1",
"q-io": "^1.13.2",
"react-hot-loader": "^3.1.1",
"regex-replace": "^2.1.0",
"sass-loader": "^6.0.6",
"shelljs": "^0.7.8",
"snyk": "^1.41.1",
Expand Down
98 changes: 46 additions & 52 deletions src/actions/create.js
Original file line number Diff line number Diff line change
@@ -1,55 +1,49 @@
import { regexReplaceCustomBoilerplateString, readReplaceAndWriteFilesToNewDirAsync, genericLog } from '../utils/functions';
import { regexReplaceCustomBoilerplateString, genericLog } from '../utils/functions';
import { cwd } from '../utils/variables';
import Q from 'q';
import qfs from 'q-io/fs';
import fs from 'fs';

export default (finalPath, actionType, fileType, fileName) => {
const fullFilePath = `${finalPath}/${fileType}`;

return qfs.isDirectory(fullFilePath).then((isDirectory) => {
if(isDirectory) {
return qfs.makeDirectory(`${cwd}/${fileName}`)
.then(() => qfs.listTree(fullFilePath))
.then((files) => {
const deferred = Q.defer();
const subDirFiles = files.slice(1, files.length);
const dirs = subDirFiles.filter((file) => fs.statSync(file).isDirectory());

Q.all(dirs.map((dir) => {
const relativeContentDir = dir.split(fullFilePath)[1];
const editedRelativeContentDir = regexReplaceCustomBoilerplateString(relativeContentDir, fileName);
return qfs.makeTree(`${cwd}/${fileName + editedRelativeContentDir}`);
}))
.then(() => deferred.resolve(files))
.catch((err) => {
genericLog(`Error making Directories: >: \n ${err}`, 'red');
deferred.reject(files);
});

return deferred.promise;
})
.then((files) => {
const subDirFiles = files.filter((file) => !fs.statSync(file).isDirectory());
return Q.all(subDirFiles.map((file) => {
const relativeContentDir = file.split(fullFilePath)[1];
return readReplaceAndWriteFilesToNewDirAsync(fileName, file, `${cwd}/${fileName + relativeContentDir}`);
}));
}).catch((err) => {
genericLog(`err: \n ${err}`, 'red');
});
} else {
return qfs.read(fullFilePath)
.then((content) => {
const editedContent = regexReplaceCustomBoilerplateString(content, fileName);
return qfs.write(`${cwd}/${fileName}`, editedContent);
})
.then(() => {
genericLog(`${fileName} created successfully`);
})
.catch((err) => {
genericLog(`err: \n ${err}`, 'red');
});
import fs from 'fs-extra';
import regexReplace from 'regex-replace';

export default async (finalPath, actionType, fileType, fileName) => {
const fullBinFilePath = `${finalPath}/${fileType}`;

const filePathStats = await fs.stat(fullBinFilePath);

//handle Directories
if(filePathStats.isDirectory()) {
try {
await fs.copy(fullBinFilePath, `${cwd}/${fileName}`);
} catch (err) {
console.error(`ERROR > error creating directory (${cwd}/${fileName})`, err);
return 1;
}

try {
await regexReplace('<:rikofilename:>', fileName, `${cwd}/${fileName}`);
} catch (err) {
console.error(`ERROR > error replacing custom filenames in (${cwd}/${fileName})`, err);
return 1;
}

genericLog(`${fileName} created successfully`);

} else { //handle files
let customizedFile;
try {
customizedFile = await fs.readFile(fullBinFilePath, 'utf8');
} catch (err) {
console.error(`ERROR > error reading file (${cwd}/${fileName})`, err);
return 1;
}

const editedContent = regexReplaceCustomBoilerplateString(customizedFile, fileName);

try {
await fs.writeFile(`${cwd}/${fileName}`, editedContent);
} catch (err) {
console.error(`ERROR > error writing to file (${cwd}/${fileName})`, err);
return 1;
}
});

genericLog(`${fileName} created successfully`);
}
};
22 changes: 14 additions & 8 deletions src/actions/run.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { processExitHandler, assignEnvironmentVariablesBasedOnRunCommand, doRunC
removeDir, genericLog, getStats, onDevBuildActions, checkForNewPackageVersion, setEntryHelper } from '../utils/functions';
import { cwd, baseDir } from '../utils/variables';
import { getElectronPackagerOptions } from '../utils/webpackConfigUtils';
import qfs from 'q-io/fs';
import fs from 'fs-extra';
import os from 'os';
import path from 'path';
import { find } from 'lodash';
Expand Down Expand Up @@ -36,11 +36,15 @@ export default async (runCommand) => {

switch (runCommand) {
case 'electron-server': {
qfs.list(customConfig.output.path).then((files) => {
let electronDistfiles;

try {
electronDistfiles = await fs.readdir(customConfig.output.path);

switch (os.platform()) {
case 'darwin': {
//handles open electron app on MAC
const macFile = find(files, (file) => file.match(/\b(darwin)\b/i));
const macFile = find(electronDistfiles, (file) => file.match(/\b(darwin)\b/i));

if(macFile) {
spawn('open', [`-a`, `${cwd}/${path.basename(customConfig.output.path)}/${macFile}/${customConfig.electronPackagerOptions.name}.app`], {stdio: 'inherit'});
Expand All @@ -50,15 +54,17 @@ export default async (runCommand) => {

break;
}
//TODO: add support for more os platforms like: Windows, Linux.
default: {
break;
}
}
})
.catch((err) => {
logElectronRunServerError();
console.error('ERROR >', err);
});

} catch (err) {
logElectronRunServerError();
console.error(`ERROR > error reading customConfig.output.path (${customConfig.output.path})`, err);
}

break;
}
case 'react-prod': {
Expand Down
137 changes: 85 additions & 52 deletions src/actions/setup.js
Original file line number Diff line number Diff line change
@@ -1,65 +1,98 @@
import { genericLog, folderAlreadyPresent, sortObjByOwnKeys } from '../utils/functions';
import { cwd, baseDir, packageJson } from '../utils/variables';
import qfs from 'q-io/fs';
import fs from 'fs-extra';
import spawn from 'cross-spawn';
import gulpLoadPlugins from 'gulp-load-plugins';

const $ = gulpLoadPlugins();
const spawnSync = spawn.sync;

export default (actionType, projectType, projectName) => {
export default async (actionType, projectType, projectName) => {
const logSuccess = () => genericLog(`${$.util.colors.blue(projectName)} was setup ${$.util.colors.green('successfully')}`);

return qfs.list(cwd)
.then(files => {
if(folderAlreadyPresent(files, projectName)) {
genericLog(`${$.util.colors.blue(projectName)} folder must not exist during setup. ${$.util.colors.red('terminating...')}`);
throw new Error(`${projectName} folder must not exist during setup.`);
} else {
switch (projectType) {
case 'electron': {
qfs.copyTree(`${baseDir}/bin/_${actionType}/react`, `${cwd}/${projectName}`)
.then(() => qfs.copyTree(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}/src`))
.then(() => qfs.read(`${cwd}/${projectName}/package.json`))
.then((customPackageJson) => {
//adds electron as devDependencies to package.json
const packageJsonObj = JSON.parse(customPackageJson);
packageJsonObj.devDependencies = Object.assign(
{},
packageJsonObj.devDependencies,
{electron: packageJson.dependencies.electron}
);
packageJsonObj.devDependencies = sortObjByOwnKeys(packageJsonObj.devDependencies);
return packageJsonObj;
})
.then((packageJsonObj) => qfs.write(`${cwd}/${projectName}/package.json`, JSON.stringify(packageJsonObj, null, "\t")))
.then(() => logSuccess())
.catch((err) => genericLog(err, 'red'));
break;
}
case 'node-server':
case 'react': {
qfs.copyTree(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}`)
.then(() => logSuccess())
.catch((err) => genericLog(err, 'red'));
break;
}
case 'react-native': {
//run react native shell script
spawnSync('sh', [`${baseDir}/bin/_${actionType}/${projectType}/react-native-install.sh`, projectName], {stdio: 'inherit'});

//copy rikoconfig.js file
qfs.makeTree(`${cwd}/${projectName}/src`)
.then(() => qfs.copy(`${baseDir}/bin/_${actionType}/${projectType}/rikoconfig.js`, `${cwd}/${projectName}/src/rikoconfig.js`))
.then(() => genericLog(`${$.util.colors.blue(`${projectName}`)} folder created ${$.util.colors.green('successfully')}`))
.catch((err) => genericLog(err, 'red'));
break;
}
default: {
break;
}
let userCWDfiles;

try {
userCWDfiles = await fs.readdir(cwd);
} catch (err) {
console.error(`ERROR > error reading cwd (${cwd})`, err);
}

if(folderAlreadyPresent(userCWDfiles, projectName)) {
genericLog(`${$.util.colors.blue(projectName)} folder must not exist during setup. ${$.util.colors.red('terminating...')}`);
throw new Error(`${projectName} folder must not exist during setup.`);
} else {
switch (projectType) {
case 'electron': {
try {
await fs.copy(`${baseDir}/bin/_${actionType}/react`, `${cwd}/${projectName}`);
await fs.copy(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}/src`);
} catch (err) {
console.error(`ERROR > error copying files to new project (${projectName})`, err);
}

let customPackageJson;
try {
customPackageJson = await fs.readJson(`${cwd}/${projectName}/package.json`);
} catch (err) {
console.error('ERROR > error reading package.json', err);
}

//adds electron as devDependencies to package.json
customPackageJson.devDependencies = Object.assign(
{},
customPackageJson.devDependencies,
{electron: packageJson.dependencies.electron}
);

customPackageJson.devDependencies = sortObjByOwnKeys(customPackageJson.devDependencies);

try {
const jsonFormattingOptions = { spaces: "\t" };
await fs.writeJson(`${cwd}/${projectName}/package.json`, customPackageJson, jsonFormattingOptions);
} catch (err) {
console.error('ERROR > error writing to package.json', err);
}

logSuccess();

break;
}
case 'node-server':
case 'react': {
try {
await fs.copy(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}`);
} catch (err) {
console.error(`ERROR > error copying files to new project (${projectName})`, err);
}

logSuccess();
break;
}
case 'react-native': {
//run react native shell script
spawnSync('sh', [`${baseDir}/bin/_${actionType}/${projectType}/react-native-install.sh`, projectName], {stdio: 'inherit'});

try {
await fs.ensureDir(`${cwd}/${projectName}/src`);
} catch (err) {
console.error(`ERROR > error creating directory (${cwd}/${projectName}/src)`, err);
}

//copy bin rikoconfig.js file to user project src directory
try {
await fs.copy(`${baseDir}/bin/_${actionType}/${projectType}/rikoconfig.js`, `${cwd}/${projectName}/src/rikoconfig.js`);
} catch (err) {
console.error(`ERROR > error copying files to new project (${projectName})`, err);
}

genericLog(`${$.util.colors.blue(`${projectName}`)} folder created ${$.util.colors.green('successfully')}`);

break;
}
default: {
break;
}
})
.catch((err) => genericLog(err, 'red'));
}
}
};
2 changes: 1 addition & 1 deletion src/riko.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ program
.alias('riko')
.usage('<cmd> [subcmds...]')
.option('-v, --version', 'output the version number', () => {
genericLog(packageJson.version);
console.log(packageJson.version);
});

//INITIALIZE
Expand Down
Loading

0 comments on commit 493892b

Please sign in to comment.