Skip to content

Commit 7f982bb

Browse files
committed
Fix + progress: convert dist folder check code to building blocks, and solidify checks
1 parent 92b3b8c commit 7f982bb

File tree

2 files changed

+134
-14
lines changed

2 files changed

+134
-14
lines changed

bin/create-collabo-app

Lines changed: 133 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,142 @@
11
#!/usr/bin/env node
22

33
var require = require('esm')(module /*, options */);
4-
const path = require('path')
5-
const fs = require('fs');
6-
const { warning } = require('../lib/helpers');
74

8-
const dist_folder = path.join('./', 'dist');
5+
const { readdirSync, access, constants } = require('fs');
6+
const { promisify } = require('util');
7+
const { join } = require('path');
8+
const { warning, error } = require('../lib/helpers');
99

10-
function check_and_run_dist_folder() {
11-
fs.access(dist_folder, fs.constants.F_OK, (err) => {
12-
if(err){
13-
warning('ERROR: Node mongo cli requires a dist folder to function run "npm run dev" to clear this error')
14-
}else{
15-
require('../dist/src/cli').cli(process.argv);
10+
const { argv, env } = process;
11+
const fs_access = promisify(access);
12+
const dist_folder = join('./', 'dist');
1613

17-
}
18-
})
14+
const folder = {
15+
content: {
16+
/* ---------------------------------------------------
17+
Lists the files and/or folders in the targetFolder
18+
of your choice (in an array)
19+
--------------------------------------------------- */
20+
list: ({ targetFolder }) => {
21+
const folderContent = readdirSync(targetFolder, (err, filesAndFolders) => {
22+
if (err) {
23+
throw err;
24+
}
25+
return filesAndFolders;
26+
});
27+
return folderContent;
28+
},
29+
/* ---------------------------------------------------
30+
Checks the files and/or folders in the targetFolder
31+
of your choice (in an array)
32+
--------------------------------------------------- */
33+
exists: ({ searchFolder, searchFor }) => {
34+
const folderContent = folder.content.list({ targetFolder: searchFolder });
35+
return folderContent.some(folder => folder === searchFor);
36+
},
37+
},
38+
};
39+
40+
const rootFolder = './';
1941

42+
const test = async ({ success, error }) => {
43+
const devMode = folder.content.exists({ searchFolder: rootFolder, searchFor: 'dev' });
44+
const prodMode = !devMode && folder.content.exists({ searchFolder: rootFolder, searchFor: 'dist' });
45+
//--- set node environment
46+
if (devMode) env.NODE_ENV = 'development';
47+
if (prodMode) env.NODE_ENV = 'production';
48+
49+
if (env.NODE_ENV === 'development') {
50+
try {
51+
await success();
52+
} catch(err) {
53+
error({ err });
54+
}
55+
}
2056
}
2157

22-
check_and_run_dist_folder()
58+
const collabo_app = {
59+
cli: {
60+
start: () => require('../dist/src/cli').cli(argv),
61+
error: ({ message }) => {
62+
const distFolderExists = folder.content.exists({ searchFolder: rootFolder, searchFor: 'dist' });
63+
const dynamicErrorDetails = distFolderExists ? 'existing \'dist\' does not have required code to run CLI' : `No 'dist' folder detected - ${message}`;
64+
const dynamicWarningText = distFolderExists ? 'correct \'dist\' folder content' : '\'dist\' folder with required content';
65+
error(`ERROR: ${dynamicErrorDetails}`);
66+
warning(`ℹ Follow these steps to generate ${dynamicWarningText}: \n- Open up another terminal, run the "npm run dev" script command there (keep this new terminal open always)\n- Go back to running the 'collabo-be' command in the previously open terminal, the CLI should now run successfully`);
67+
},
68+
},
69+
// run: async ({ success, error }) => {
70+
// const devMode = folder.content.exists({ searchFolder: rootFolder, searchFor: 'dev' });
71+
// const prodMode = !devMode && folder.content.exists({ searchFolder: rootFolder, searchFor: 'dist' });
72+
// //--- set node environment
73+
// if (devMode) env.NODE_ENV = 'development';
74+
// if (prodMode) env.NODE_ENV = 'production';
75+
76+
// if (env.NODE_ENV === 'development') {
77+
// try {
78+
// await success();
79+
// } catch(err) {
80+
// error({ err });
81+
// }
82+
// }
83+
// },
84+
run: async () => {
85+
test({
86+
success: async () => {
87+
await fs_access(dist_folder, constants.F_OK);
88+
collabo_app.cli.start();
89+
},
90+
error: ({ err }) => {
91+
collabo_app.cli.error({ message: err.message });
92+
}
93+
});
94+
},
95+
// cli: {
96+
// start: () => require('../dist/src/cli').cli(argv),
97+
// error: ({ dynamicErrorDetails, dynamicWarningText }) => {
98+
// error(`ERROR: ${dynamicErrorDetails}`);
99+
// warning(`ℹ Follow these steps to generate ${dynamicWarningText}: \n- Open up another terminal, run the "npm run dev" script command there (keep this new terminal open always)\n- Go back to running the 'collabo-be' command in the previously open terminal, the CLI should now run successfully`);
100+
// },
101+
// },
102+
// run: async () => {
103+
// const repoContent = readdirSync('./', (err, filesAndFolders) => {
104+
// if (err) {
105+
// throw err;
106+
// }
107+
108+
// return filesAndFolders;
109+
// });
110+
// const folderExists = ({ name }) => repoContent.some(folder => folder === name);
111+
// const devMode = folderExists({ name: 'dev' });
112+
// env.NODE_ENV = devMode ? 'development' : 'production';
113+
// if (env.NODE_ENV === 'development') {
114+
// try {
115+
// await fs_access(dist_folder, constants.F_OK);
116+
// collabo_app.cli.start();
117+
// } catch(err) {
118+
// const dynamicErrorDetails = folderExists({ name: 'dist' }) ? 'existing \'dist\' does not have required code to run CLI' : `No 'dist' folder detected - ${err.message}`;
119+
// const dynamicWarningText = folderExists({ name: 'dist' }) ? 'correct \'dist\' folder content' : '\'dist\' folder with required content';
120+
// collabo_app.cli.error({
121+
// dynamicErrorDetails,
122+
// dynamicWarningText,
123+
// });
124+
// }
125+
// }
126+
// if (env.NODE_ENV === 'production') {
127+
// collabo_app.cli.start();
128+
// }
129+
// },
130+
};
131+
132+
collabo_app.run();
133+
134+
// collabo_app.run({
135+
// success: async () => {
136+
// await fs_access(dist_folder, constants.F_OK);
137+
// collabo_app.cli.start();
138+
// },
139+
// error: ({ err }) => {
140+
// collabo_app.cli.error({ message: err.message });
141+
// }
142+
// });

lib/helpers/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export const redBoldNoConsole = (message) => {
3535
}
3636

3737
export const redBrightNoConsole = (message) => {
38-
chalk.redBright(message);
38+
return chalk.redBright(message);
3939
}
4040

4141
export const greenNoConsole = (message) => {

0 commit comments

Comments
 (0)