11#!/usr/bin/env node
22
33var 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+ // });
0 commit comments