1+ #!/usr/bin/env node
2+ 
13import  chalk  from  'chalk' ; 
24import  commandExists  from  'command-exists' ; 
35import  execa  from  'execa' ; 
46import  fsExtra  from  'fs-extra' ; 
5- import  minimist  from  'minimist' ; 
67import  path  from  'path' ; 
78
89const  {  copyFileSync,  ensureFileSync,  existsSync,  removeSync }  =  fsExtra ; 
910
1011const  docsPath  =  '../ember-api-docs-data' ; 
1112
12- const  argv  =  minimist ( process . argv . slice ( 2 ) ) ; 
13- 
14- const  {  project,  version,  install }  =  argv ; 
13+ import  {  program ,  Option ,  InvalidArgumentError  }  from  'commander' ; 
1514
16- const   exit   =   function  exit ( )  { 
15+ function  exit ( )  { 
1716  console . log ( ...arguments ) ; 
1817  process . exit ( 1 ) ; 
19- } ; 
18+ } 
19+ 
20+ function  semverVersion ( value )  { 
21+   if  ( ! / ^ \d + \. \d + \. \d + $ / . test ( value ) )  { 
22+     throw  new  InvalidArgumentError ( 'Not a correctly defined semver version i.e. major.minor.patch' ) ; 
23+   } 
24+   return  value ; 
25+ } 
26+ 
27+ program 
28+   . addOption ( 
29+     new  Option ( '-p, --project <project>' ,  'the project that you want to run this for' ) 
30+       . choices ( [ 'ember' ,  'ember-data' ] ) 
31+       . makeOptionMandatory ( ) , 
32+   ) 
33+   . requiredOption ( '-v, --version <version>' ,  'project version' ,  semverVersion ) ; 
34+ 
35+ program . parse ( ) ; 
36+ 
37+ const  options  =  program . opts ( ) ; 
38+ 
39+ const  {  project,  version }  =  options ; 
2040
2141async  function  runCmd ( cmd ,  path ,  args  =  [ ] )  { 
2242  console . log ( chalk . underline ( `Running '${ chalk . green ( cmd ) }  ' in ${ path }  ` ) ) ; 
@@ -31,80 +51,55 @@ async function runCmd(cmd, path, args = []) {
3151  console . log ( executedCmd . stdout  +  '\n' ) ; 
3252} 
3353
34- ( async  ( )  =>  { 
35-   if  ( ! project  ||  ! version )  { 
36-     exit ( 
37-       chalk . red ( 'Both project and version args are required.\n' ) , 
38-       chalk . yellow ( ' e.g., yarn gen --project ember --version 3.10.1' ) , 
39-     ) ; 
40-   } 
54+ try  { 
55+   await  commandExists ( 'yarn' ) ; 
56+ }  catch  ( e )  { 
57+   exit ( chalk . red ( 'We need yarn installed globally for this script to work' ) ) ; 
58+ } 
59+ 
60+ let  emberProjectPath  =  path . join ( '../' ,  'ember.js' ) ; 
61+ let  emberDataProjectPath  =  path . join ( '../' ,  'data' ) ; 
4162
42-   if  ( ! [ 'ember' ,  'ember-data' ] . includes ( project ) )  { 
43-     exit ( chalk . red ( `Project has to be either 'ember' or 'ember-data'. (was given ${ project }  )\n` ) ) ; 
63+ let  checkIfProjectDirExists  =  dirPath  =>  { 
64+   if  ( ! existsSync ( dirPath ) )  { 
65+     exit ( chalk . yellow ( `Please checkout the ${ project }   project at ${ dirPath }  ` ) ) ; 
4466  } 
67+ } ; 
68+ 
69+ let  buildDocs  =  async  projDirPath  =>  { 
70+   checkIfProjectDirExists ( projDirPath ) ; 
4571
46-   try  { 
47-     await  commandExists ( ' yarn') ; 
48-   }  catch   ( e )  { 
49-     exit ( chalk . red ( 'We need yarn installed globally for this script to work' ) ) ; 
72+   if   ( project   ===   'ember' )  { 
73+     await  runCmd ( 'volta' ,   projDirPath ,   [ 'run' ,   ' yarn'] ) ; 
74+   }  else  { 
75+     await   runCmd ( 'corepack' ,   projDirPath ,   [ 'pnpm' ,   'install' ] ) ; 
5076  } 
5177
52-   let  emberProjectPath  =  path . join ( '../' ,  'ember.js' ) ; 
53-   let  emberDataProjectPath  =  path . join ( '../' ,  'data' ) ; 
54- 
55-   let  checkIfProjectDirExists  =  dirPath  =>  { 
56-     if  ( ! existsSync ( dirPath ) )  { 
57-       exit ( chalk . yellow ( `Please checkout the ${ project }   project at ${ dirPath }  ` ) ) ; 
58-     } 
59-   } ; 
60- 
61-   let  buildDocs  =  async  projDirPath  =>  { 
62-     checkIfProjectDirExists ( projDirPath ) ; 
63- 
64-     if  ( project  ===  'ember' )  { 
65-       await  runCmd ( 'volta' ,  projDirPath ,  [ 'run' ,  'yarn' ] ) ; 
66-     }  else  { 
67-       await  runCmd ( 'corepack' ,  projDirPath ,  [ 'pnpm' ,  'install' ] ) ; 
68-     } 
69- 
70-     if  ( install )  { 
71-       await  runCmd ( project  ===  'ember'  ? 'yarn'  : 'pnpm install' ,  projDirPath ) ; 
72-       console . log ( '\n\n' ) ; 
73-     } 
74- 
75-     await  runCmd ( 
76-       project  ===  'ember'  ? 'volta run yarn docs'  : 'corepack pnpm run build:docs' , 
77-       projDirPath , 
78-     ) ; 
79- 
80-     let  destination  =  `${ docsPath }  /s3-docs/v${ version }  /${ project }  -docs.json` ; 
81-     ensureFileSync ( destination ) ; 
82-     const  projYuiDocFile  =  destination ; 
83-     removeSync ( projYuiDocFile ) ; 
84-     removeSync ( `${ docsPath }  /json-docs/${ project }  /${ version }  ` ) ; 
85- 
86-     const  yuiDocFile  =  path . join ( 
87-       projDirPath , 
88-       project  ===  'ember'  ? 'docs/data.json'  : 'packages/-ember-data/dist/docs/data.json' , 
89-     ) ; 
90-     copyFileSync ( yuiDocFile ,  projYuiDocFile ) ; 
91-   } ; 
92- 
93-   let  dirMap  =  { 
94-     ember : emberProjectPath , 
95-     'ember-data' : emberDataProjectPath , 
96-   } ; 
97- 
98-   await  buildDocs ( dirMap [ project ] ) ; 
99- 
100-   await  execa ( 'volta' ,  [ 
101-     'run' , 
102-     'yarn' , 
103-     'start' , 
104-     '--project' , 
105-     project , 
106-     '--version' , 
107-     version , 
108-     '--no-sync' , 
109-   ] ) . stdout . pipe ( process . stdout ) ; 
110- } ) ( ) ; 
78+   await  runCmd ( 
79+     project  ===  'ember'  ? 'volta run yarn docs'  : 'corepack pnpm run build:docs' , 
80+     projDirPath , 
81+   ) ; 
82+ 
83+   let  destination  =  `${ docsPath }  /s3-docs/v${ version }  /${ project }  -docs.json` ; 
84+   ensureFileSync ( destination ) ; 
85+   const  projYuiDocFile  =  destination ; 
86+   removeSync ( projYuiDocFile ) ; 
87+   removeSync ( `${ docsPath }  /json-docs/${ project }  /${ version }  ` ) ; 
88+ 
89+   const  yuiDocFile  =  path . join ( 
90+     projDirPath , 
91+     project  ===  'ember'  ? 'docs/data.json'  : 'packages/-ember-data/dist/docs/data.json' , 
92+   ) ; 
93+   copyFileSync ( yuiDocFile ,  projYuiDocFile ) ; 
94+ } ; 
95+ 
96+ let  dirMap  =  { 
97+   ember : emberProjectPath , 
98+   'ember-data' : emberDataProjectPath , 
99+ } ; 
100+ 
101+ await  buildDocs ( dirMap [ project ] ) ; 
102+ 
103+ await  execa ( 'volta' ,  [ 'run' ,  'yarn' ,  'start' ,  '--projects' ,  project ,  '--version' ,  version ] ,  { 
104+   stdio : 'inherit' , 
105+ } ) ; 
0 commit comments