UNPKG

nativescript

Version:

Command-line interface for building NativeScript projects

98 lines 5.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AndroidResourcesMigrationService = void 0; const path = require("path"); const constants = require("../constants"); const os_1 = require("os"); const yok_1 = require("../common/yok"); class AndroidResourcesMigrationService { constructor($fs, $errors, $logger, $devicePlatformsConstants) { this.$fs = $fs; this.$errors = $errors; this.$logger = $logger; this.$devicePlatformsConstants = $devicePlatformsConstants; } canMigrate(platformString) { return (platformString.toLowerCase() === this.$devicePlatformsConstants.Android.toLowerCase()); } hasMigrated(appResourcesDir) { return this.$fs.exists(path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR, constants.SRC_DIR, constants.MAIN_DIR)); } async migrate(appResourcesDir, backupLocation) { const originalAppResources = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR); const appResourcesDestination = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_TEMP); const appResourcesBackup = path.join(backupLocation || appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_OLD); try { await this.tryMigrate(originalAppResources, appResourcesDestination, appResourcesBackup); this.$logger.info(`Successfully updated your project's application resources '/Android' directory structure.${os_1.EOL}The previous version of your Android application resources has been renamed to '/${AndroidResourcesMigrationService.ANDROID_DIR_OLD}'`); } catch (error) { try { this.recover(originalAppResources, appResourcesDestination, appResourcesBackup); this.$logger.info("Failed to update resources. They should be in their initial state."); } catch (err) { this.$logger.trace(err); this.$logger.info(`Failed to update resources.${os_1.EOL} Backup of original content is inside "${appResourcesBackup}".${os_1.EOL}If "${originalAppResources} is missing copy from backup folder."`); } finally { this.$errors.fail(error.message); } } } async tryMigrate(originalAppResources, appResourcesDestination, appResourcesBackup) { const appMainSourceSet = path.join(appResourcesDestination, constants.SRC_DIR, constants.MAIN_DIR); const appResourcesMainSourceSetResourcesDestination = path.join(appMainSourceSet, constants.RESOURCES_DIR); this.$fs.ensureDirectoryExists(appResourcesDestination); this.$fs.ensureDirectoryExists(appMainSourceSet); // create /java, /res and /assets in the App_Resources/Android/src/main directory this.$fs.ensureDirectoryExists(appResourcesMainSourceSetResourcesDestination); this.$fs.ensureDirectoryExists(path.join(appMainSourceSet, "java")); this.$fs.ensureDirectoryExists(path.join(appMainSourceSet, constants.ASSETS_DIR)); const isDirectory = (source) => this.$fs.getLsStats(source).isDirectory(); const getAllFiles = (source) => this.$fs.readDirectory(source).map((name) => path.join(source, name)); const getDirectories = (files) => files.filter(isDirectory); const getFiles = (files) => files.filter((file) => !isDirectory(file)); this.$fs.copyFile(path.join(originalAppResources, constants.APP_GRADLE_FILE_NAME), path.join(appResourcesDestination, constants.APP_GRADLE_FILE_NAME)); const appResourcesFiles = getAllFiles(originalAppResources); const resourceDirectories = getDirectories(appResourcesFiles); const resourceFiles = getFiles(appResourcesFiles); resourceDirectories.forEach((dir) => { if (path.basename(dir) !== "libs") { // don't copy /App_Resources/Android/libs into the src/main/res/libs directory this.$fs.copyFile(dir, appResourcesMainSourceSetResourcesDestination); } else { // copy App_Resources/Android/libs to App_ResourcesNew/Android/libs this.$fs.copyFile(dir, path.join(appResourcesDestination)); } }); resourceFiles.forEach((file) => { const fileName = path.basename(file); if (fileName !== constants.MANIFEST_FILE_NAME) { // don't copy AndroidManifest into /App_Resources/Android as it needs to be inside src/main/ this.$fs.copyFile(file, path.join(appResourcesDestination, fileName)); } }); this.$fs.copyFile(path.join(originalAppResources, constants.MANIFEST_FILE_NAME), path.join(appMainSourceSet, constants.MANIFEST_FILE_NAME)); // rename the legacy app_resources to ANDROID_DIR_OLD this.$fs.rename(originalAppResources, appResourcesBackup); // move the new, updated app_resources to App_Resources/Android, as the de facto resources this.$fs.rename(appResourcesDestination, originalAppResources); } recover(originalAppResources, appResourcesDestination, appResourcesBackup) { if (!this.$fs.exists(originalAppResources)) { this.$fs.rename(appResourcesBackup, originalAppResources); } if (this.$fs.exists(appResourcesDestination)) { this.$fs.deleteDirectory(appResourcesDestination); } } } exports.AndroidResourcesMigrationService = AndroidResourcesMigrationService; AndroidResourcesMigrationService.ANDROID_DIR = "Android"; AndroidResourcesMigrationService.ANDROID_DIR_TEMP = "Android-Updated"; AndroidResourcesMigrationService.ANDROID_DIR_OLD = "Android-Pre-v4"; yok_1.injector.register("androidResourcesMigrationService", AndroidResourcesMigrationService); //# sourceMappingURL=android-resources-migration-service.js.map