diff --git a/bin/update-ns-webpack b/bin/update-ns-webpack index a2a97f28..57c8427b 100755 --- a/bin/update-ns-webpack +++ b/bin/update-ns-webpack @@ -1,16 +1,21 @@ #!/usr/bin/env node +const { resolve } = require("path"); -const update = require("../verify/update"); +const { getPackageJson, getProjectDir, writePackageJson } = require("../projectHelpers"); +const { forceUpdateProjectDeps } = require("../dependencyManager"); +const { editExistingProjectFiles } = require("../projectFilesManager"); -const flags = JSON.parse(process.env.npm_config_argv).original - .filter(f => f.startsWith("--")) - .map(f => f.substring(2)); +const PROJECT_DIR = getProjectDir({ nestingLvl: 2 }); +const packageJson = getPackageJson(PROJECT_DIR); -function addOption(all, current) { - all[current] = true; - return all; -} -const options = flags.reduce(addOption, {}); +console.info("Updating dev dependencies..."); -update(options); +const { deps } = forceUpdateProjectDeps(packageJson); +packageJson.devDependencies = deps; +writePackageJson(packageJson, PROJECT_DIR); + +console.info("\nUpdating configuration files..."); +editExistingProjectFiles(PROJECT_DIR); + +console.info("\nProject successfully updated! Don't forget to run `npm install`"); diff --git a/installer.js b/installer.js index d77bb747..1dc53159 100644 --- a/installer.js +++ b/installer.js @@ -32,12 +32,9 @@ function uninstall() { projectFilesManager.removeProjectFiles(PROJECT_DIR, APP_DIR); - const scripts = packageJson.scripts; - if (scripts) { - console.log("Removing npm scripts..."); - npmScriptsManager.removeDeprecatedNpmScripts(scripts); - npmScriptsManager.removeNpmScripts(scripts); - } + console.log("Removing npm scripts..."); + npmScriptsManager.removeDeprecatedNpmScripts(packageJson); + npmScriptsManager.removeNpmScripts(packageJson.scripts); helpers.writePackageJson(packageJson, PROJECT_DIR); diff --git a/npmScriptsManager.js b/npmScriptsManager.js index 7c2a97f0..84c5001f 100644 --- a/npmScriptsManager.js +++ b/npmScriptsManager.js @@ -53,16 +53,8 @@ function removePlatformScripts(scripts, nameTemplate) { }); } -function forceUpdateNpmScripts(scripts) { - removeDeprecatedNpmScripts(scripts); - removeNpmScripts(scripts); - - addNpmScripts(scripts); -} - module.exports = { addNpmScripts, removeDeprecatedNpmScripts, removeNpmScripts, - forceUpdateNpmScripts, }; diff --git a/projectFilesManager.js b/projectFilesManager.js index 2d4aa17a..6eba5170 100644 --- a/projectFilesManager.js +++ b/projectFilesManager.js @@ -59,15 +59,10 @@ function removeProjectFiles(projectDir, appDir) { }); } -function forceUpdateProjectFiles(projectDir, appDir) { - removeProjectFiles(projectDir, appDir); - addProjectFiles(projectDir, appDir); -} - function deleteFile(destinationPath) { if (fs.existsSync(destinationPath)) { console.info(`Deleting file: ${destinationPath}`); - fs.unlinkSync(destinationPath); + fs.unlink(destinationPath); } } @@ -194,7 +189,5 @@ function tsOrJs(projectDir, name) { module.exports = { addProjectFiles, removeProjectFiles, - forceUpdateProjectFiles, editExistingProjectFiles, }; - diff --git a/verify/update.js b/verify/update.js deleted file mode 100644 index 9281c552..00000000 --- a/verify/update.js +++ /dev/null @@ -1,106 +0,0 @@ -const { spawn } = require("child_process"); -const { resolve: pathResolve } = require("path"); - -const { getPackageJson, getProjectDir, writePackageJson } = require("../projectHelpers"); -const { forceUpdateProjectFiles } = require("../projectFilesManager"); -const { forceUpdateProjectDeps } = require("../dependencyManager"); -const { forceUpdateNpmScripts } = require("../npmScriptsManager"); - -const PLUGIN_NAME = "nativescript-dev-webpack"; -const PROJECT_DIR = getProjectDir({ nestingLvl: 2 }); - -function update({ - deps: shouldUpdateDeps, - scripts: shouldUpdateScripts, - configs: shouldUpdateConfigs, - projectDir = PROJECT_DIR -} = {}) { - - const commands = []; - - if (shouldUpdateDeps) { - commands.push(() => updateDeps(projectDir)); - } - - if (shouldUpdateScripts) { - commands.push(() => Promise.resolve(updateScripts(projectDir))); - } - - if (shouldUpdateConfigs) { - commands.push(() => Promise.resolve(updateConfigs(projectDir))); - } - - return commands.reduce((current, next) => current.then(next), Promise.resolve()); -} - -function updateScripts(projectDir) { - console.info("Updating npm scripts..."); - - const packageJson = getPackageJson(projectDir); - const scripts = packageJson.scripts || {}; - - forceUpdateNpmScripts(scripts); - packageJson.scripts = scripts; - writePackageJson(packageJson, projectDir); -} - -function updateDeps(projectDir) { - console.info("Updating dev dependencies..."); - - return new Promise((resolve, reject) => { - const packageJson = getPackageJson(projectDir); - const { deps } = forceUpdateProjectDeps(packageJson); - packageJson.devDependencies = deps; - writePackageJson(packageJson, projectDir); - - const command = `npm install --ignore-scripts`; - execute(command).then(resolve).catch(reject); - }); -} - -function updateConfigs(projectDir) { - console.info("Updating configuration files..."); - - const appDir = pathResolve(projectDir, "app"); - forceUpdateProjectFiles(projectDir, appDir); -} - -function execute(command) { - return new Promise((resolve, reject) => { - const args = command.split(" "); - spawnChildProcess(...args) - .then(resolve) - .catch(throwError) - }); -} - -function spawnChildProcess(command, ...args) { - return new Promise((resolve, reject) => { - const escapedArgs = args.map(a => `"${a}"`); - - const childProcess = spawn(command, escapedArgs, { - stdio: "inherit", - pwd: PROJECT_DIR, - shell: true, - }); - - childProcess.on("close", code => { - if (code === 0) { - resolve(); - } else { - reject({ - code, - message: `child process exited with code ${code}`, - }); - } - }); - }); -} - -function throwError(error) { - console.error(error.message); - process.exit(error.code || 1); -} - -module.exports = update; -