@@ -145,16 +145,16 @@ module.exports = class Server {
145145 extractConfigFiles : preset . useConfigFiles
146146 } )
147147
148+ await run ( `rm -rf ./node_modules` )
149+ await run ( `rm -f ./package.json` )
150+ await run ( `rm -f ./package-lock.json` )
151+
148152 // commit initial state
149153 if ( hasGit ( ) ) {
150154 await run ( 'git add -A' )
151155 await run ( `git commit -m init` )
152156 }
153157
154- await run ( `rm -rf ./node_modules` )
155- await run ( `rm -f ./package.json` )
156- await run ( `rm -f ./package-lock.json` )
157-
158158 // log instructions
159159 stopSpinner ( )
160160 log ( )
@@ -164,12 +164,82 @@ module.exports = class Server {
164164 generator . printExitLogs ( )
165165 }
166166
167+ async syncModels ( defaultConnection , serverConfig ) {
168+ const run = ( command , args ) => {
169+ if ( ! args ) { [ command , ...args ] = command . split ( / \s + / ) }
170+ return execa ( command , args , { cwd : context } )
171+ }
172+
173+ let config = serverConfig
174+ if ( ! config ) {
175+ const { serverName } = await Database . requestServerName ( )
176+ const { moduleName, packageAddress } = await Database . requestModuleAndPackage ( serverName )
177+ config = { serverName, moduleName, packageAddress }
178+ }
179+ const { availableTables } = await Database . requestConnection ( this . serverSetup , defaultConnection )
180+ const { syncTables } = await Database . requestSync ( availableTables , this . serverSetup )
181+ await Database . confirm ( )
182+
183+ this . serverSetup . serverName = config . serverName
184+ this . serverSetup . moduleName = config . moduleName
185+ this . serverSetup . packageAddress = config . packageAddress
186+
187+ const { context, createCompleteCbs } = this
188+
189+ const preset = {
190+ plugins : {
191+ '@simpli/cli-server' : {
192+ serverSetup : this . serverSetup ,
193+ sync : true
194+ }
195+ }
196+ }
197+
198+ // get latest CLI version
199+ const { latest } = await getVersions ( )
200+ // generate package.json with plugin dependencies
201+ const pkg = {
202+ name : 'sync-server' ,
203+ version : '0.1.0' ,
204+ private : true ,
205+ devDependencies : { }
206+ }
207+ const deps = Object . keys ( preset . plugins )
208+ deps . forEach ( dep => {
209+ pkg . devDependencies [ dep ] = preset . plugins [ dep ] . version ||
210+ ( / ^ @ s i m p l i / . test ( dep ) ? `${ latest } ` : `latest` )
211+ } )
212+ // write package.json
213+ await writeFileTree ( context , {
214+ 'package.json' : JSON . stringify ( pkg , null , 2 )
215+ } )
216+
217+ log ( )
218+ log ( `⚙️ Synchronizing tables...` )
219+ const plugins = this . resolvePlugins ( preset . plugins )
220+ const generator = new Generator ( context , {
221+ pkg : { _ignore : true } ,
222+ plugins,
223+ completeCbs : createCompleteCbs
224+ } )
225+ await generator . generate ( )
226+
227+ await run ( `rm -rf ./node_modules` )
228+ await run ( `rm -f ./package.json` )
229+ await run ( `rm -f ./package-lock.json` )
230+
231+ log ( )
232+ log ( `🎉 Successfully synchronized tables ${ chalk . yellow ( syncTables . map ( ( tables ) => tables . name ) . join ( ', ' ) ) } .` )
233+ log ( `👉 Run ${ chalk . cyan ( 'git status' ) } to see which files has changed.` )
234+ log ( `👉 Run ${ chalk . cyan ( 'git add . && git stash' ) } to revert the changes safely.\n\n` )
235+ }
236+
167237 resolvePlugins ( rawPlugins ) {
168238 // ensure cli-service is invoked first
169239 rawPlugins = sortObject ( rawPlugins , [ '@simpli/cli-server' ] )
170240 return Object . keys ( rawPlugins ) . map ( id => {
171- const module = resolve . sync ( `${ id } /generator` , { basedir : this . context } )
172- // const module = resolve.sync('../../../cli-server/generator')
241+ // const module = resolve.sync(`${id}/generator`, { basedir: this.context })
242+ const module = resolve . sync ( '../../../cli-server/generator' )
173243 return {
174244 id,
175245 apply : require ( module ) ,
0 commit comments