@@ -243,13 +243,14 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`;
243243
244244 try {
245245 this . $logger . info ( "Backup project configuration." ) ;
246- const backupFolders = MigrateController . folders ;
247- const embeddedPackagePath = path . join (
248- projectData . getAppDirectoryRelativePath ( ) ,
249- "package.json"
246+ this . backup (
247+ [
248+ ...MigrateController . folders ,
249+ path . join ( projectData . getAppDirectoryRelativePath ( ) , "package.json" ) ,
250+ ] ,
251+ backupDir ,
252+ projectData . projectDir
250253 ) ;
251- backupFolders . push ( embeddedPackagePath ) ;
252- this . backup ( backupFolders , backupDir , projectData . projectDir ) ;
253254 this . $logger . info ( "Backup project configuration complete." ) ;
254255 } catch ( error ) {
255256 this . $logger . error ( MigrateController . backupFailMessage ) ;
@@ -342,8 +343,8 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`;
342343 platforms,
343344 allowInvalidVersions,
344345 } : IMigrationData ) : Promise < boolean > {
346+ const isMigrate = _ . get ( this . $options , "argv._[0]" ) === "migrate" ;
345347 const projectData = this . $projectDataService . getProjectData ( projectDir ) ;
346- const isMigrate = this . $options . argv . _ [ 0 ] === "migrate" ;
347348 const projectInfo = this . $projectConfigService . detectInfo (
348349 projectData . projectDir
349350 ) ;
@@ -803,76 +804,88 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`;
803804 }
804805
805806 private async migrateConfig ( projectData : IProjectData ) {
806- const embeddedPackagePath = path . resolve (
807+ this . $logger . info (
808+ `Migrating project to use ${ constants . CONFIG_FILE_NAME_TS } ...`
809+ ) ;
810+
811+ // app/package.json or src/package.json usually
812+ const embeddedPackageJsonPath = path . resolve (
807813 projectData . projectDir ,
808814 projectData . getAppDirectoryRelativePath ( ) ,
809815 constants . PACKAGE_JSON_FILE_NAME
810816 ) ;
817+ this . $logger . debug ( `embeddedPackageJsonPath: ${ embeddedPackageJsonPath } ` ) ;
818+ // nsconfig.json
811819 const legacyNsConfigPath = path . resolve (
812820 projectData . projectDir ,
813821 constants . CONFIG_NS_FILE_NAME
814822 ) ;
823+ this . $logger . debug ( `legacyNsConfigPath: ${ legacyNsConfigPath } ` ) ;
824+ // package.json
825+ const rootPackageJsonPath : any = path . resolve (
826+ projectData . projectDir ,
827+ constants . PACKAGE_JSON_FILE_NAME
828+ ) ;
829+ this . $logger . debug ( `rootPackageJsonPath: ${ rootPackageJsonPath } ` ) ;
830+
815831 let embeddedPackageData : any = { } ;
816- if ( this . $fs . exists ( embeddedPackagePath ) ) {
817- embeddedPackageData = this . $fs . readJson ( embeddedPackagePath ) ;
832+ if ( this . $fs . exists ( embeddedPackageJsonPath ) ) {
833+ embeddedPackageData = this . $fs . readJson ( embeddedPackageJsonPath ) ;
818834 }
835+
819836 let legacyNsConfigData : any = { } ;
820837 if ( this . $fs . exists ( legacyNsConfigPath ) ) {
821838 legacyNsConfigData = this . $fs . readJson ( legacyNsConfigPath ) ;
822839 }
823- const legacyData : any = {
840+
841+ let rootPackageJsonData : any = { } ;
842+ if ( this . $fs . exists ( rootPackageJsonPath ) ) {
843+ rootPackageJsonData = this . $fs . readJson ( rootPackageJsonPath ) ;
844+ }
845+
846+ const dataToMigrate : any = {
824847 ...embeddedPackageData ,
825848 ...legacyNsConfigData ,
826849 } ;
827- const packageJsonPath : any = path . resolve (
828- projectData . projectDir ,
829- constants . PACKAGE_JSON_FILE_NAME
830- ) ;
831- const packageJsonData : any = this . $fs . readFile ( packageJsonPath ) ;
832- if ( legacyData . main ) {
833- packageJsonPath . main = legacyData . main ;
834- delete legacyData . main ;
850+
851+ // move main key into root packagejson
852+ if ( dataToMigrate . main ) {
853+ rootPackageJsonData . main = dataToMigrate . main ;
854+ delete dataToMigrate . main ;
835855 }
836- if (
837- legacyData &&
838- legacyData . android &&
839- typeof legacyData . android . codeCache === "string"
840- ) {
841- legacyData . android . codeCache = legacyData . android . codeCache === "true" ;
856+
857+ // migrate data into nativescript.config.ts
858+ const success = this . $projectConfigService . setValue ( "" , dataToMigrate ) ;
859+
860+ if ( ! success ) {
861+ this . $errors . fail (
862+ `Failed to migrate project to use ${ constants . CONFIG_FILE_NAME_TS } . One or more values could not be updated.`
863+ ) ;
842864 }
843- const flattenObjectToPaths = ( obj : any , basePath ?: string ) : any => {
844- const toPath = ( key : any ) => [ basePath , key ] . filter ( Boolean ) . join ( "." ) ;
845- return Object . keys ( obj ) . reduce ( ( all : any , key ) => {
846- if ( typeof obj [ key ] === "object" ) {
847- return [ ...all , ...flattenObjectToPaths ( obj [ key ] , toPath ( key ) ) ] ;
848- }
849- return [
850- ...all ,
851- {
852- key : toPath ( key ) ,
853- value : obj [ key ] ,
854- } ,
855- ] ;
856- } , [ ] ) ;
857- } ;
858- const dotNotationPaths = flattenObjectToPaths ( legacyData ) ;
859- dotNotationPaths . forEach ( ( p : any ) => {
860- // this.$logger.info(p.key, p.value);
861- this . $projectConfigService . setValue ( p . key , p . value ) ;
862- } ) ;
865+
866+ // move app id into nativescript.config.ts
863867 if (
864- packageJsonData &&
865- packageJsonData . nativescript &&
866- packageJsonData . nativescript . id
868+ rootPackageJsonData &&
869+ rootPackageJsonData . nativescript &&
870+ rootPackageJsonData . nativescript . id
867871 ) {
868872 this . $projectConfigService . setValue (
869873 "id" ,
870- packageJsonData . nativescript . id
874+ rootPackageJsonData . nativescript . id
871875 ) ;
872- delete packageJsonData . nativescript ;
876+ delete rootPackageJsonData . nativescript ;
873877 }
874- this . $fs . writeJson ( packageJsonPath , packageJsonData ) ;
875- this . $logger . info ( `Migrated to ${ constants . CONFIG_FILE_NAME_TS } ` ) ;
878+
879+ // save root package.json
880+ this . $fs . writeJson ( rootPackageJsonPath , rootPackageJsonData ) ;
881+
882+ // delete migrated files
883+ this . $fs . deleteFile ( embeddedPackageJsonPath ) ;
884+ this . $fs . deleteFile ( legacyNsConfigPath ) ;
885+
886+ this . $logger . info (
887+ `Migrated project to use ${ constants . CONFIG_FILE_NAME_TS } `
888+ ) ;
876889 }
877890
878891 private async migrateUnitTestRunner (
0 commit comments