Skip to content
This repository was archived by the owner on Aug 7, 2021. It is now read-only.

Commit e650b42

Browse files
authored
Merge branch 'master' into loaders-symlinks-false
2 parents d2bc2b6 + 323f638 commit e650b42

File tree

5 files changed

+136
-20
lines changed

5 files changed

+136
-20
lines changed

Diff for: bin/update-ns-webpack

+8-16
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
#!/usr/bin/env node
2-
const { resolve } = require("path");
32

4-
const { getPackageJson, getProjectDir, writePackageJson } = require("../projectHelpers");
5-
const { forceUpdateProjectDeps } = require("../dependencyManager");
6-
const { editExistingProjectFiles } = require("../projectFilesManager");
3+
const update = require("../verify/update");
74

8-
const PROJECT_DIR = getProjectDir({ nestingLvl: 2 });
9-
const packageJson = getPackageJson(PROJECT_DIR);
5+
const options = {
6+
pluginVersion: process.env.npm_config_plugin_version,
7+
deps: process.env.npm_config_deps,
8+
scripts: process.env.npm_config_scripts,
9+
configs: process.env.npm_config_configs,
10+
}
1011

11-
console.info("Updating dev dependencies...");
12-
13-
const { deps } = forceUpdateProjectDeps(packageJson);
14-
packageJson.devDependencies = deps;
15-
writePackageJson(packageJson, PROJECT_DIR);
16-
17-
console.info("\nUpdating configuration files...");
18-
editExistingProjectFiles(PROJECT_DIR);
19-
20-
console.info("\nProject successfully updated! Don't forget to run `npm install`");
12+
update(options);
2113

Diff for: installer.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@ function uninstall() {
3232

3333
projectFilesManager.removeProjectFiles(PROJECT_DIR, APP_DIR);
3434

35-
console.log("Removing npm scripts...");
36-
npmScriptsManager.removeDeprecatedNpmScripts(packageJson);
37-
npmScriptsManager.removeNpmScripts(packageJson.scripts);
35+
const scripts = packageJson.scripts;
36+
if (scripts) {
37+
console.log("Removing npm scripts...");
38+
npmScriptsManager.removeDeprecatedNpmScripts(scripts);
39+
npmScriptsManager.removeNpmScripts(scripts);
40+
}
3841

3942
helpers.writePackageJson(packageJson, PROJECT_DIR);
4043

Diff for: npmScriptsManager.js

+8
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,16 @@ function removePlatformScripts(scripts, nameTemplate) {
5353
});
5454
}
5555

56+
function forceUpdateNpmScripts(scripts) {
57+
removeDeprecatedNpmScripts(scripts);
58+
removeNpmScripts(scripts);
59+
60+
addNpmScripts(scripts);
61+
}
62+
5663
module.exports = {
5764
addNpmScripts,
5865
removeDeprecatedNpmScripts,
5966
removeNpmScripts,
67+
forceUpdateNpmScripts,
6068
};

Diff for: projectFilesManager.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,15 @@ function removeProjectFiles(projectDir, appDir) {
5959
});
6060
}
6161

62+
function forceUpdateProjectFiles(projectDir, appDir) {
63+
removeProjectFiles(projectDir, appDir);
64+
addProjectFiles(projectDir, appDir);
65+
}
66+
6267
function deleteFile(destinationPath) {
6368
if (fs.existsSync(destinationPath)) {
6469
console.info(`Deleting file: ${destinationPath}`);
65-
fs.unlink(destinationPath);
70+
fs.unlinkSync(destinationPath);
6671
}
6772
}
6873

@@ -189,5 +194,7 @@ function tsOrJs(projectDir, name) {
189194
module.exports = {
190195
addProjectFiles,
191196
removeProjectFiles,
197+
forceUpdateProjectFiles,
192198
editExistingProjectFiles,
193199
};
200+

Diff for: verify/update.js

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
const { spawn } = require("child_process");
2+
const { resolve: pathResolve } = require("path");
3+
4+
const { getPackageJson, getProjectDir, writePackageJson } = require("../projectHelpers");
5+
const { forceUpdateProjectFiles } = require("../projectFilesManager");
6+
const { forceUpdateProjectDeps } = require("../dependencyManager");
7+
const { forceUpdateNpmScripts } = require("../npmScriptsManager");
8+
9+
const PLUGIN_NAME = "nativescript-dev-webpack";
10+
const PROJECT_DIR = getProjectDir({ nestingLvl: 2 });
11+
12+
function update({
13+
deps: shouldUpdateDeps,
14+
scripts: shouldUpdateScripts,
15+
configs: shouldUpdateConfigs,
16+
projectDir = PROJECT_DIR
17+
} = {}) {
18+
19+
const commands = [];
20+
21+
if (shouldUpdateDeps) {
22+
commands.push(() => updateDeps(projectDir));
23+
}
24+
25+
if (shouldUpdateScripts) {
26+
commands.push(() => Promise.resolve(updateScripts(projectDir)));
27+
}
28+
29+
if (shouldUpdateConfigs) {
30+
commands.push(() => Promise.resolve(updateConfigs(projectDir)));
31+
}
32+
33+
return commands.reduce((current, next) => current.then(next), Promise.resolve());
34+
}
35+
36+
function updateScripts(projectDir) {
37+
console.info("Updating npm scripts...");
38+
39+
const packageJson = getPackageJson(projectDir);
40+
const scripts = packageJson.scripts || {};
41+
42+
forceUpdateNpmScripts(scripts);
43+
packageJson.scripts = scripts;
44+
writePackageJson(packageJson, projectDir);
45+
}
46+
47+
function updateDeps(projectDir) {
48+
console.info("Updating dev dependencies...");
49+
50+
return new Promise((resolve, reject) => {
51+
const packageJson = getPackageJson(projectDir);
52+
const { deps } = forceUpdateProjectDeps(packageJson);
53+
packageJson.devDependencies = deps;
54+
writePackageJson(packageJson, projectDir);
55+
56+
const command = `npm install --ignore-scripts`;
57+
execute(command).then(resolve).catch(reject);
58+
});
59+
}
60+
61+
function updateConfigs(projectDir) {
62+
console.info("Updating configuration files...");
63+
64+
const appDir = pathResolve(projectDir, "app");
65+
forceUpdateProjectFiles(projectDir, appDir);
66+
}
67+
68+
function execute(command) {
69+
return new Promise((resolve, reject) => {
70+
const args = command.split(" ");
71+
spawnChildProcess(...args)
72+
.then(resolve)
73+
.catch(throwError)
74+
});
75+
}
76+
77+
function spawnChildProcess(command, ...args) {
78+
return new Promise((resolve, reject) => {
79+
const escapedArgs = args.map(a => `"${a}"`);
80+
81+
const childProcess = spawn(command, escapedArgs, {
82+
stdio: "inherit",
83+
pwd: PROJECT_DIR,
84+
shell: true,
85+
});
86+
87+
childProcess.on("close", code => {
88+
if (code === 0) {
89+
resolve();
90+
} else {
91+
reject({
92+
code,
93+
message: `child process exited with code ${code}`,
94+
});
95+
}
96+
});
97+
});
98+
}
99+
100+
function throwError(error) {
101+
console.error(error.message);
102+
process.exit(error.code || 1);
103+
}
104+
105+
module.exports = update;
106+

0 commit comments

Comments
 (0)