@@ -6,35 +6,34 @@ const {
66} = require ( './utils.js' ) ;
77const { consola } = require ( 'consola' ) ;
88const fs = require ( 'fs-extra' ) ;
9- const path = require ( 'path ' ) ;
9+ const ProjectFilesManager = require ( './project-files-manager.js ' ) ;
1010
11- const initGit = async ( projectName ) => {
11+ /**
12+ * @type {ProjectFilesManager }
13+ */
14+ let projectFilesManager ;
15+
16+ const initializeProjectRepository = async ( projectName ) => {
1217 await execShellCommand ( `cd ${ projectName } && git init && cd ..` ) ;
1318} ;
1419
15- const installDeps = async ( projectName ) => {
20+ const installDependencies = async ( projectName ) => {
1621 await runCommand ( `cd ${ projectName } && pnpm install` , {
1722 loading : 'Installing project dependencies' ,
1823 success : 'Dependencies installed' ,
1924 error : 'Failed to install dependencies, Make sure you have pnpm installed' ,
2025 } ) ;
2126} ;
2227
23- // remove unnecessary files and directories
24- const removeFiles = ( projectName ) => {
25- const FILES_TO_REMOVE = [ '.git' , 'README.md' , 'docs' , 'cli' , 'LICENSE' ] ;
26-
27- FILES_TO_REMOVE . forEach ( ( file ) => {
28- fs . removeSync ( path . join ( process . cwd ( ) , `${ projectName } /${ file } ` ) ) ;
29- } ) ;
28+ const removeUnrelatedFiles = ( ) => {
29+ projectFilesManager . removeFiles ( [ '.git' , 'README.md' , 'docs' , 'cli' , 'LICENSE' ] ) ;
3030} ;
3131
3232// Update package.json infos, name and set version to 0.0.1 + add initial version to osMetadata
33- const updatePackageInfos = async ( projectName ) => {
34- const packageJsonPath = path . join (
35- process . cwd ( ) ,
36- `${ projectName } /package.json`
37- ) ;
33+ const updatePackageJson = async ( projectName ) => {
34+ const packageJsonPath =
35+ projectFilesManager . getAbsoluteFilePath ( 'package.json' ) ;
36+
3837 const packageJson = fs . readJsonSync ( packageJsonPath ) ;
3938 packageJson . osMetadata = { initVersion : packageJson . version } ;
4039 packageJson . version = '0.0.1' ;
@@ -53,20 +52,30 @@ const updatePackageInfos = async (projectName) => {
5352} ;
5453
5554const updateProjectConfig = async ( projectName ) => {
56- const configPath = path . join ( process . cwd ( ) , `${ projectName } /env.js` ) ;
57- const contents = fs . readFileSync ( configPath , {
58- encoding : 'utf-8' ,
59- } ) ;
60- const replaced = contents
61- . replace ( / R o o t s t r a p A p p / gi, projectName )
62- . replace ( / c o m .r o o t s t r a p / gi, `com.${ projectName . toLowerCase ( ) } ` )
63- . replace ( / r o o t s t r a p / gi, 'expo-owner' ) ;
64-
65- fs . writeFileSync ( configPath , replaced , { spaces : 2 } ) ;
55+ projectFilesManager . replaceFilesContent ( [
56+ {
57+ fileName : 'env.js' ,
58+ replacements : [
59+ {
60+ searchValue : / R o o t s t r a p A p p / gi,
61+ replaceValue : projectName ,
62+ } ,
63+ {
64+ searchValue : / c o m .r o o t s t r a p / gi,
65+ replaceValue : `com.${ projectName . toLowerCase ( ) } ` ,
66+ } ,
67+ {
68+ searchValue : / r s d e v s / gi,
69+ replaceValue : 'expo-owner' ,
70+ } ,
71+ ] ,
72+ } ,
73+ ] ) ;
6674} ;
6775
6876const updateGitHubWorkflows = ( projectName ) => {
69- const WORKFLOW_FILES = [
77+ // Update useful workflows
78+ projectFilesManager . replaceFilesContent ( [
7079 {
7180 fileName : '.github/workflows/upstream-to-pr.yml' ,
7281 replacements : [
@@ -92,59 +101,43 @@ const updateGitHubWorkflows = (projectName) => {
92101 replaceValue : 'Run App release' ,
93102 } ,
94103 {
95- searchValue : / ^ \s * e n v i r o n m e n t : \s * \n \s * n a m e : \s * t e m p l a t e \s * \n \s * u r l : \s * .+ \s * \n / m,
104+ searchValue :
105+ / ^ \s * e n v i r o n m e n t : \s * \n \s * n a m e : \s * t e m p l a t e \s * \n \s * u r l : \s * .+ \s * \n / m,
96106 replaceValue : '' ,
97107 } ,
98108 ] ,
99109 } ,
100- ] ;
110+ ] ) ;
101111
102- WORKFLOW_FILES . forEach ( ( { fileName, replacements } ) => {
103- const workflowPath = path . join ( process . cwd ( ) , `${ projectName } /${ fileName } ` ) ;
104-
105- const contents = fs . readFileSync ( workflowPath , {
106- encoding : 'utf-8' ,
107- } ) ;
108-
109- let replaced = contents ;
110-
111- replacements . forEach ( ( { searchValue, replaceValue } ) => {
112- replaced = replaced . replace ( searchValue , replaceValue ) ;
113- } ) ;
114-
115- fs . writeFileSync ( workflowPath , replaced , { spaces : 2 } ) ;
116- } ) ;
112+ projectFilesManager . renameFiles ( [
113+ {
114+ oldFileName : '.github/workflows/new-template-version.yml' ,
115+ newFileName : '.github/workflows/new-app-version.yml' ,
116+ } ,
117+ ] ) ;
117118} ;
118119
119- const renameFiles = ( projectName ) => {
120- const FILES_TO_RENAME = [
120+ const updateProjectReadme = ( ) => {
121+ projectFilesManager . renameFiles ( [
121122 {
122123 oldFileName : 'README-project.md' ,
123124 newFileName : 'README.md' ,
124125 } ,
125- {
126- oldFileName : '.github/workflows/new-template-version.yml' ,
127- newFileName : '.github/workflows/new-app-version.yml' ,
128- } ,
129- ] ;
130-
131- FILES_TO_RENAME . forEach ( ( { oldFileName, newFileName } ) => {
132- fs . renameSync (
133- path . join ( process . cwd ( ) , `${ projectName } /${ oldFileName } ` ) ,
134- path . join ( process . cwd ( ) , `${ projectName } /${ newFileName } ` )
135- ) ;
136- } ) ;
126+ ] ) ;
137127} ;
138128
139129const setupProject = async ( projectName ) => {
140130 consola . start ( `Clean up and setup your project 🧹` ) ;
131+
132+ projectFilesManager = ProjectFilesManager . withProjectName ( projectName ) ;
133+
141134 try {
142- removeFiles ( projectName ) ;
143- await initGit ( projectName ) ;
144- updatePackageInfos ( projectName ) ;
135+ removeUnrelatedFiles ( ) ;
136+ await initializeProjectRepository ( projectName ) ;
137+ updatePackageJson ( projectName ) ;
145138 updateProjectConfig ( projectName ) ;
146139 updateGitHubWorkflows ( projectName ) ;
147- renameFiles ( projectName ) ;
140+ updateProjectReadme ( ) ;
148141 consola . success ( `Clean up and setup your project 🧹` ) ;
149142 } catch ( error ) {
150143 consola . error ( `Failed to clean up project folder` , error ) ;
@@ -154,5 +147,5 @@ const setupProject = async (projectName) => {
154147
155148module . exports = {
156149 setupProject,
157- installDeps ,
150+ installDependencies ,
158151} ;
0 commit comments