Skip to content
This repository was archived by the owner on Aug 7, 2021. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 19a764e

Browse files
committedApr 17, 2017
refactor: split installer to multiple managers
1 parent 548d0a4 commit 19a764e

18 files changed

+443
-282
lines changed
 

‎bin/install-ns-webpack

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
#!/usr/bin/env node
2-
var installer = require("../installer");
3-
4-
installer.addProjectFiles();
5-
installer.removeDeprecatedNpmScripts();
6-
installer.addNpmScripts();
7-
installer.addProjectDependencies();
2+
const installer = require("../installer");
3+
installer.install();

‎bin/ns-verify-bundle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const path = require("path");
44
const fs = require("fs");
55

66
const PROJECT_DIR = path.resolve(__dirname, "../../../");
7-
console.log(PROJECT_DIR);
87
const APP_ID = require(path.resolve(PROJECT_DIR, "./package.json")).nativescript.id;
98
const APP_NAME = APP_ID.substring(APP_ID.lastIndexOf(".") + 1);
109
const PROJECT_PATHS = {

‎bin/ns-webpack-update

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env node
2+
const path = require("path");
3+
const fs = require("fs");
4+
5+
const helpers = require("../projectHelpers");
6+
const forceUpdateProjectDeps = require("../dependencyManager").forceUpdateProjectDeps;
7+
8+
const PROJECT_DIR = path.resolve(__dirname, "../../../");
9+
const packageJson = helpers.getPackageJson(PROJECT_DIR);
10+
11+
forceUpdateProjectDeps(packageJson);
12+
helpers.writePackageJson(packageJson, PROJECT_DIR);

‎bin/ns-webpack-update.cmd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@node %~dp0\ns-webpack-update %*

‎bin/remove-ns-webpack

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
#!/usr/bin/env node
2-
var installer = require("../installer");
3-
4-
installer.removeProjectFiles();
5-
installer.removeDeprecatedNpmScripts();
6-
installer.removeNpmScripts();
7-
installer.removeProjectDependencies();
2+
const installer = require("../installer");
3+
installer.uninstall();

‎bin/remove-ns-webpack.cmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
@node %~dp0\install-ns-webpack %*
1+
@node %~dp0\remove-ns-webpack %*

‎dependencyManager.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
const helpers = require("./projectHelpers");
2+
3+
function forceUpdateProjectDeps(packageJson) {
4+
addProjectDeps(packageJson, true);
5+
}
6+
7+
function addProjectDeps(packageJson, force = false) {
8+
const depsToAdd = getRequiredDeps(packageJson);
9+
packageJson.devDependencies = packageJson.devDependencies || {};
10+
let oldDeps = packageJson.devDependencies;
11+
12+
let alreadyAdded = false;
13+
Object.keys(depsToAdd).forEach(function(name) {
14+
const version = depsToAdd[name];
15+
alreadyAdded = addDependency(oldDeps, name, version, force) || alreadyAdded;
16+
});
17+
18+
if (alreadyAdded) {
19+
console.error("Some deps were not updated because they were already added.");
20+
console.error("If you want to force update them, please run './node_modules/.bin/ns-webpack-update'");
21+
}
22+
}
23+
24+
function addDependency(deps, name, version, force) {
25+
if (!deps[name] || force) {
26+
deps[name] = version;
27+
console.info(`Adding dev dependency: ${name}@${version}`);
28+
return false;
29+
} else {
30+
console.info(`Dev dependency: ${name} already added. Leaving version: ${deps[name]}`);
31+
return true;
32+
}
33+
}
34+
35+
function getRequiredDeps(packageJson) {
36+
var deps = {
37+
"webpack": "~2.3.3",
38+
"webpack-sources": "~0.2.3",
39+
"copy-webpack-plugin": "~4.0.1",
40+
"raw-loader": "~0.5.1",
41+
"nativescript-css-loader": "~0.26.0",
42+
"resolve-url-loader": "~2.0.2",
43+
"extract-text-webpack-plugin": "~2.1.0",
44+
};
45+
46+
if (helpers.isAngular({packageJson})) {
47+
deps["@angular/compiler-cli"] = "~4.0.2";
48+
deps["@ngtools/webpack"] = "1.3.0";
49+
deps["typescript"] = "~2.2.2";
50+
} else if (helpers.isTypeScript({packageJson})) {
51+
deps["awesome-typescript-loader"] = "~3.1.2";
52+
}
53+
return deps;
54+
}
55+
56+
module.exports = {
57+
forceUpdateProjectDeps,
58+
addProjectDeps,
59+
};

‎installer.js

Lines changed: 29 additions & 261 deletions
Original file line numberDiff line numberDiff line change
@@ -1,276 +1,44 @@
1-
var path = require("path");
2-
var fs = require("fs");
3-
var childProcess = require("child_process");
1+
const path = require("path");
2+
const fs = require("fs");
43

5-
var projectDir = path.dirname(path.dirname(__dirname));
6-
var appDir = path.join(projectDir, "app");
4+
const helpers = require("./projectHelpers");
5+
const projectFilesManager = require("./projectFilesManager");
6+
const npmScriptsManager = require("./npmScriptsManager");
7+
const dependencyManager = require("./dependencyManager");
78

8-
var packageJsonPath = path.join(projectDir, "package.json");
9-
var packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
9+
const PROJECT_DIR = path.dirname(path.dirname(__dirname));
10+
const APP_DIR = path.resolve(PROJECT_DIR, "app");
1011

11-
var isAngular = Object.keys(packageJson.dependencies).filter(function (dependency) {
12-
return /^@angular\b/.test(dependency);
13-
}).length > 0;
12+
function install() {
13+
let packageJson = helpers.getPackageJson(PROJECT_DIR);
1414

15-
var isTypeScript = fs.existsSync(path.join(projectDir, "tsconfig.json"));
16-
if (isAngular) {
17-
isTypeScript = true;
18-
}
19-
20-
function getProjectTemplates() {
21-
var templates = {
22-
"webpack.android.js.template": "webpack.android.js",
23-
"webpack.ios.js.template": "webpack.ios.js",
24-
};
25-
26-
if (isAngular) {
27-
templates["webpack.common.js.angular.template"] = "webpack.common.js";
28-
templates["tsconfig.aot.json.template"] = "tsconfig.aot.json";
29-
} else {
30-
templates["webpack.common.js.nativescript.template"] = "webpack.common.js";
31-
}
32-
return templates;
33-
}
34-
35-
function getAppTemplates() {
36-
var templates = {
37-
"vendor-platform.android.ts.template": tsOrJs("vendor-platform.android"),
38-
"vendor-platform.ios.ts.template": tsOrJs("vendor-platform.ios"),
39-
};
40-
41-
if (isAngular) {
42-
templates["vendor.ts.angular.template"] = tsOrJs("vendor");
43-
} else {
44-
templates["vendor.ts.nativescript.template"] = tsOrJs("vendor");
45-
}
46-
return templates;
47-
}
48-
49-
function addProjectFiles() {
50-
var projectTemplates = getProjectTemplates();
51-
Object.keys(projectTemplates).forEach(function(templateName) {
52-
var templateDestination = projectTemplates[templateName];
53-
copyProjectTemplate(templateName, templateDestination);
54-
});
55-
56-
var appTemplates = getAppTemplates();
57-
Object.keys(appTemplates).forEach(function(templateName) {
58-
var templateDestination = appTemplates[templateName];
59-
copyAppTemplate(templateName, templateDestination);
60-
});
61-
}
62-
exports.addProjectFiles = addProjectFiles;
63-
64-
function removeProjectFiles() {
65-
var projectTemplates = getProjectTemplates();
66-
Object.keys(projectTemplates).forEach(function(templateName) {
67-
var templateDestination = projectTemplates[templateName];
68-
deleteProjectFile(templateDestination);
69-
});
70-
71-
var appTemplates = getAppTemplates();
72-
Object.keys(appTemplates).forEach(function(templateName) {
73-
var templateDestination = appTemplates[templateName];
74-
deleteAppFile(templateDestination);
75-
});
76-
}
77-
exports.removeProjectFiles = removeProjectFiles;
78-
79-
function getScriptTemplates() {
80-
return {
81-
"ns-bundle": "ns-bundle",
82-
"start-[PLATFORM]-bundle": "npm run ns-bundle --[PLATFORM] --start-app",
83-
"build-[PLATFORM]-bundle": "npm run ns-bundle --[PLATFORM] --build-app",
84-
};
85-
}
86-
87-
function getDeprecatedScriptTemplates() {
88-
return [
89-
"clean-[PLATFORM]",
90-
"prewebpack-[PLATFORM]",
91-
"webpack-[PLATFORM]",
92-
"prestart-[PLATFORM]-bundle",
93-
"start-[PLATFORM]-bundle",
94-
"prebuild-[PLATFORM]-bundle",
95-
"build-[PLATFORM]-bundle",
96-
]
97-
}
98-
99-
function addNpmScripts() {
100-
var scriptTemplates = getScriptTemplates();
101-
Object.keys(scriptTemplates).forEach(function(templateName) {
102-
addPlatformScript(packageJson, templateName, scriptTemplates[templateName]);
103-
});
104-
}
105-
exports.addNpmScripts = addNpmScripts;
106-
107-
function removeDeprecatedNpmScripts() {
108-
removeNpmScripts(getDeprecatedScriptTemplates());
109-
}
110-
111-
exports.removeDeprecatedNpmScripts = removeDeprecatedNpmScripts;
112-
113-
function removeNpmScripts(scriptTemplates) {
114-
var scriptTemplates = scriptTemplates || Object.keys(getScriptTemplates());
115-
scriptTemplates.forEach(function(templateName) {
116-
removePlatformScripts(packageJson, templateName);
117-
});
118-
}
119-
exports.removeNpmScripts = removeNpmScripts;
120-
121-
function getProjectDependencies() {
122-
var dependencies = {
123-
"webpack": "2.2.0",
124-
"webpack-sources": "~0.1.3",
125-
"copy-webpack-plugin": "~3.0.1",
126-
"raw-loader": "~0.5.1",
127-
"nativescript-css-loader": "~0.26.0",
128-
"resolve-url-loader": "~1.6.0",
129-
"extract-text-webpack-plugin": "~2.0.0-beta.4",
130-
};
131-
132-
if (isAngular) {
133-
dependencies["@angular/compiler-cli"] = "~4.0.0";
134-
dependencies["@ngtools/webpack"] = "1.2.13";
135-
dependencies["typescript"] = "^2.1.0";
136-
} else {
137-
dependencies["awesome-typescript-loader"] = "~3.0.0-beta.9";
138-
}
139-
return dependencies;
140-
}
141-
142-
function addProjectDependencies() {
143-
configureDevDependencies(packageJson, function (add) {
144-
var dependencies = getProjectDependencies();
145-
Object.keys(dependencies).forEach(function(dependencyName) {
146-
add(dependencyName, dependencies[dependencyName]);
147-
});
148-
});
149-
}
150-
exports.addProjectDependencies = addProjectDependencies;
15+
projectFilesManager.addProjectFiles(PROJECT_DIR, APP_DIR);
15116

152-
function removeProjectDependencies() {
153-
configureDevDependencies(packageJson, function (add, remove) {
154-
var dependencies = getProjectDependencies();
155-
Object.keys(dependencies).forEach(function(dependencyName) {
156-
remove(dependencyName);
157-
});
158-
});
159-
}
160-
exports.removeProjectDependencies = removeProjectDependencies;
161-
162-
163-
function addPlatformScript(packageJson, nameTemplate, commandTemplate) {
164-
if (!packageJson.scripts) {
165-
packageJson.scripts = {};
166-
}
17+
let scripts = packageJson.scripts || {};
18+
scripts = npmScriptsManager.removeDeprecatedNpmScripts(scripts);
19+
scripts = npmScriptsManager.addNpmScripts(scripts);
20+
packageJson.scripts = scripts;
16721

168-
var scripts = packageJson.scripts;
169-
["android", "ios"].forEach(function (platform) {
170-
var name = nameTemplate.replace(/\[PLATFORM\]/g, platform);
171-
var command = commandTemplate.replace(/\[PLATFORM\]/g, platform);
172-
if (!scripts[name]) {
173-
console.log("Registering script: " + name);
174-
scripts[name] = command;
175-
}
176-
});
177-
}
17822

179-
function removePlatformScripts(packageJson, nameTemplate) {
180-
if (!packageJson.scripts) {
181-
return;
182-
}
23+
dependencyManager.addProjectDeps(packageJson);
18324

184-
var scripts = packageJson.scripts;
185-
["android", "ios"].forEach(function (platform) {
186-
var name = nameTemplate.replace(/\[PLATFORM\]/g, platform);
187-
console.log("Removing script: " + name);
188-
delete scripts[name];
189-
});
25+
helpers.writePackageJson(packageJson, PROJECT_DIR);
19026
}
19127

192-
function configureDevDependencies(packageJson, adderCallback) {
193-
var pendingNpmInstall = false;
194-
if (!packageJson.devDependencies) {
195-
packageJson.devDependencies = {};
196-
}
197-
var dependencies = packageJson.devDependencies;
198-
199-
adderCallback(function (name, version) {
200-
if (!dependencies[name]) {
201-
dependencies[name] = version;
202-
console.info("Adding dev dependency: " + name + "@" + version);
203-
pendingNpmInstall = true;
204-
} else {
205-
console.info("Dev dependency: '" + name + "' already added. Leaving version: " + dependencies[name]);
206-
}
207-
}, function(name) {
208-
console.info("Removing dev dependency: " + name);
209-
delete dependencies[name];
210-
});
28+
function uninstall() {
29+
let packageJson = helpers.getPackageJson(PROJECT_DIR);
21130

212-
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
31+
projectFilesManager.removeProjectFiles(PROJECT_DIR, APP_DIR);
32+
npmScriptsManager.removeDeprecatedNpmScripts(packageJson);
21333

214-
if (pendingNpmInstall) {
215-
console.info("Installing new dependencies...");
216-
//Run `npm install` after everything else.
217-
setTimeout(function () {
218-
var spawnArgs = [];
219-
if (/^win/.test(process.platform)) {
220-
spawnArgs = ["cmd.exe", ["/c", "npm", "install"]];
221-
} else {
222-
spawnArgs = ["npm", ["install"]];
223-
}
224-
spawnArgs.push({ cwd: projectDir, stdio: "inherit" });
225-
var npm = childProcess.spawn.apply(null, spawnArgs);
226-
npm.on("close", function (code) {
227-
process.exit(code);
228-
});
229-
}, 100);
230-
}
231-
}
34+
let scripts = packageJson.scripts;
35+
scripts = npmScriptsManager.removeNpmScripts(scripts);
36+
packageJson.scripts = scripts;
23237

233-
function tsOrJs(name) {
234-
if (isTypeScript) {
235-
return name + ".ts";
236-
} else {
237-
return name + ".js";
238-
}
38+
helpers.writePackageJson(packageJson, PROJECT_DIR);
23939
}
24040

241-
function copyProjectTemplate(templateName, projectPath) {
242-
var destinationPath = path.join(projectDir, projectPath);
243-
copyTemplate(templateName, destinationPath);
244-
}
245-
246-
function deleteProjectFile(projectPath) {
247-
var destinationPath = path.join(projectDir, projectPath);
248-
deleteFile(destinationPath);
249-
}
250-
251-
function copyAppTemplate(templateName, appPath) {
252-
var destinationPath = path.join(appDir, appPath);
253-
copyTemplate(templateName, destinationPath);
254-
}
255-
256-
function deleteAppFile(appPath) {
257-
var destinationPath = path.join(appDir, appPath);
258-
deleteFile(destinationPath);
259-
}
260-
261-
function deleteFile(destinationPath) {
262-
if (fs.existsSync(destinationPath)) {
263-
console.log("Deleting file: " + destinationPath);
264-
fs.unlink(destinationPath);
265-
}
266-
}
267-
268-
function copyTemplate(templateName, destinationPath) {
269-
var templatePath = path.join(__dirname, templateName);
270-
// Create destination file, only if not present.
271-
if (!fs.existsSync(destinationPath)) {
272-
console.log("Creating file: " + destinationPath);
273-
var content = fs.readFileSync(templatePath, "utf8");
274-
fs.writeFileSync(destinationPath, content);
275-
}
276-
}
41+
module.exports = {
42+
install,
43+
uninstall,
44+
};

‎npmScriptsManager.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
const SCRIPT_TEMPLATES = Object.freeze({
2+
"ns-bundle": "ns-bundle",
3+
"start-[PLATFORM]-bundle": "npm run ns-bundle --[PLATFORM] --start-app",
4+
"build-[PLATFORM]-bundle": "npm run ns-bundle --[PLATFORM] --build-app",
5+
});
6+
7+
const DEPRECATED_SCRIPT_TEMPLATES = Object.freeze([
8+
"clean-[PLATFORM]",
9+
"prewebpack-[PLATFORM]",
10+
"webpack-[PLATFORM]",
11+
"prestart-[PLATFORM]-bundle",
12+
"start-[PLATFORM]-bundle",
13+
"prebuild-[PLATFORM]-bundle",
14+
"build-[PLATFORM]-bundle",
15+
]);
16+
17+
const PLATFORMS = Object.freeze(["android", "ios"]);
18+
19+
function addNpmScripts(scripts) {
20+
Object.keys(SCRIPT_TEMPLATES).forEach(name => {
21+
packageJson = addPlatformScript(scripts, name, SCRIPT_TEMPLATES[name]);
22+
});
23+
24+
return scripts;
25+
}
26+
27+
function removeDeprecatedNpmScripts(scripts) {
28+
return removeNpmScripts(scripts, DEPRECATED_SCRIPT_TEMPLATES);
29+
}
30+
31+
function removeNpmScripts(scripts, scriptTemplates = Object.keys(SCRIPT_TEMPLATES)) {
32+
scriptTemplates.forEach(function(templateName) {
33+
scripts = removePlatformScripts(scripts, templateName);
34+
});
35+
36+
return scripts;
37+
}
38+
39+
function addPlatformScript(scripts, nameTemplate, commandTemplate) {
40+
PLATFORMS.forEach(function (platform) {
41+
const name = nameTemplate.replace(/\[PLATFORM\]/g, platform);
42+
const command = commandTemplate.replace(/\[PLATFORM\]/g, platform);
43+
44+
if (!scripts[name]) {
45+
console.info(`Registering script: ${name}`);
46+
scripts[name] = command;
47+
}
48+
});
49+
50+
return scripts;
51+
}
52+
53+
function removePlatformScripts(scripts, nameTemplate) {
54+
if (!scripts) {
55+
return;
56+
}
57+
58+
PLATFORMS.forEach(function (platform) {
59+
const name = nameTemplate.replace(/\[PLATFORM\]/g, platform);
60+
61+
if (scripts[name]) {
62+
console.info(`Removing script: ${name}`);
63+
delete scripts[name];
64+
}
65+
});
66+
67+
return scripts;
68+
}
69+
70+
module.exports = {
71+
addNpmScripts,
72+
removeDeprecatedNpmScripts,
73+
removeNpmScripts,
74+
};

‎package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"install-ns-webpack": "./bin/install-ns-webpack",
2121
"remove-ns-webpack": "./bin/remove-ns-webpack",
2222
"ns-bundle": "./bin/ns-bundle",
23-
"ns-verify-bundle": "./bin/ns-verify-bundle"
23+
"ns-verify-bundle": "./bin/ns-verify-bundle",
24+
"ns-webpack-update": "./bin/ns-webpack-update"
2425
},
2526
"dependencies": {},
2627
"devDependencies": {}

‎postinstall.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,2 @@
1-
var installer = require("./installer");
2-
3-
installer.addProjectFiles();
4-
installer.removeDeprecatedNpmScripts();
5-
installer.addNpmScripts();
6-
installer.addProjectDependencies();
1+
const installer = require("./installer");
2+
installer.install();

‎projectFilesManager.js

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
const path = require("path");
2+
const fs = require("fs");
3+
4+
const helpers = require("./projectHelpers");
5+
6+
function addProjectFiles(projectDir, appDir) {
7+
const projectTemplates = getProjectTemplates(projectDir);
8+
Object.keys(projectTemplates).forEach(function(templateName) {
9+
const templateDestination = projectTemplates[templateName];
10+
templateName = path.resolve(templateName)
11+
copyTemplate(templateName, templateDestination);
12+
});
13+
14+
const appTemplates = getAppTemplates(projectDir, appDir);
15+
Object.keys(appTemplates).forEach(function(templateName) {
16+
const templateDestination = appTemplates[templateName];
17+
copyTemplate(templateName, templateDestination)
18+
});
19+
}
20+
21+
function removeProjectFiles(projectDir, appDir) {
22+
const projectTemplates = getProjectTemplates(projectDir);
23+
Object.keys(projectTemplates).forEach(function(templateName) {
24+
const templateDestination = projectTemplates[templateName];
25+
deleteFile(templateDestination);
26+
});
27+
28+
const appTemplates = getAppTemplates(projectDir, appDir);
29+
Object.keys(appTemplates).forEach(function(templateName) {
30+
const templateDestination = appTemplates[templateName];
31+
deleteFile(templateDestination);
32+
});
33+
}
34+
35+
function deleteFile(destinationPath) {
36+
if (fs.existsSync(destinationPath)) {
37+
console.info(`Deleting file: ${destinationPath}`);
38+
fs.unlink(destinationPath);
39+
}
40+
}
41+
42+
function copyTemplate(templateName, destinationPath) {
43+
// Create destination file, only if not present.
44+
if (!fs.existsSync(destinationPath)) {
45+
console.info(`Creating file: ${destinationPath}`);
46+
const content = fs.readFileSync(templateName, "utf8");
47+
fs.writeFileSync(destinationPath, content);
48+
}
49+
}
50+
51+
function getProjectTemplates(projectDir) {
52+
let templates = {
53+
"webpack.android.js.template": "webpack.android.js",
54+
"webpack.ios.js.template": "webpack.ios.js",
55+
};
56+
57+
if (helpers.isAngular({projectDir})) {
58+
templates["webpack.common.js.angular.template"] = "webpack.common.js";
59+
templates["tsconfig.aot.json.template"] = "tsconfig.aot.json";
60+
} else {
61+
templates["webpack.common.js.nativescript.template"] = "webpack.common.js";
62+
}
63+
64+
return getFullTemplatesPath(projectDir, templates);
65+
}
66+
67+
function getAppTemplates(projectDir, appDir) {
68+
const templates = {
69+
"vendor-platform.android.ts.template": tsOrJs(projectDir, "vendor-platform.android"),
70+
"vendor-platform.ios.ts.template": tsOrJs(projectDir, "vendor-platform.ios"),
71+
};
72+
73+
if (helpers.isAngular({projectDir})) {
74+
templates["vendor.ts.angular.template"] = tsOrJs(projectDir, "vendor");
75+
} else {
76+
templates["vendor.ts.nativescript.template"] = tsOrJs(projectDir, "vendor");
77+
}
78+
79+
return getFullTemplatesPath(appDir, templates);
80+
}
81+
82+
function getFullTemplatesPath(projectDir, templates) {
83+
let updatedTemplates = {};
84+
85+
Object.keys(templates).forEach(key => {
86+
const updatedKey = getFullPath(__dirname, key);
87+
const updatedValue = getFullPath(projectDir, templates[key])
88+
89+
updatedTemplates[updatedKey] = updatedValue;
90+
});
91+
92+
return updatedTemplates;
93+
}
94+
95+
function getFullPath(projectDir, filePath) {
96+
return path.resolve(projectDir, filePath);
97+
}
98+
99+
function tsOrJs(projectDir, name) {
100+
const extension = helpers.isTypeScript({projectDir}) ? "ts" : "js";
101+
return `${name}.${extension}`;
102+
}
103+
104+
module.exports = {
105+
addProjectFiles,
106+
removeProjectFiles,
107+
};

‎projectHelpers.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const path = require("path");
2+
const fs = require("fs");
3+
4+
const isTypeScript = ({projectDir, packageJson} = {}) => {
5+
packageJson = packageJson || getPackageJson(projectDir);
6+
7+
return packageJson.dependencies.hasOwnProperty("typescript") ||
8+
packageJson.devDependencies.hasOwnProperty("typescript") ||
9+
isAngular({packageJson});
10+
11+
};
12+
13+
const isAngular = ({projectDir, packageJson} = {}) => {
14+
packageJson = packageJson || getPackageJson(projectDir);
15+
16+
return Object.keys(packageJson.dependencies)
17+
.some(dependency => /^@angular\b/.test(dependency));
18+
};
19+
20+
const getPackageJson = projectDir => {
21+
const packageJsonPath = getPackageJsonPath(projectDir);
22+
return JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
23+
};
24+
25+
const writePackageJson = (content, projectDir) => {
26+
const packageJsonPath = getPackageJsonPath(projectDir);
27+
fs.writeFileSync(packageJsonPath, JSON.stringify(content, null, 2))
28+
}
29+
30+
const getPackageJsonPath = projectDir => path.resolve(projectDir, "package.json");
31+
32+
module.exports = {
33+
isTypeScript,
34+
isAngular,
35+
getPackageJson,
36+
writePackageJson,
37+
};

‎should-not-be-here

Whitespace-only changes.

‎testing/dependencyManager.spec.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const path = require("path");
2+
const fs = require("fs");
3+
4+
const dependencyManager = require("../dependencyManager");
5+
const readJsonFile = jsonPath => {
6+
const fullPath = path.resolve(__dirname, jsonPath);
7+
return require(fullPath);
8+
};
9+
10+
let packageJson = readJsonFile("./package-configs/ns2ng4.json");
11+
dependencyManager.addProjectDeps(packageJson);
12+
console.log(packageJson);
13+

‎testing/package-configs/ns2ng2.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"description": "NativeScript Application",
3+
"license": "SEE LICENSE IN <your-license-filename>",
4+
"readme": "NativeScript Application",
5+
"repository": "<fill-your-repository-here>",
6+
"nativescript": {
7+
"id": "org.nativescript.webpacktest",
8+
"tns-android": {
9+
"version": "2.5.0"
10+
}
11+
},
12+
"dependencies": {
13+
"@angular/animations": "~2.4.0",
14+
"@angular/common": "~2.4.0",
15+
"@angular/compiler": "~2.4.0",
16+
"@angular/core": "~2.4.0",
17+
"@angular/forms": "~2.4.0",
18+
"@angular/http": "~2.4.0",
19+
"@angular/platform-browser": "~2.4.0",
20+
"@angular/platform-browser-dynamic": "~2.4.0",
21+
"@angular/router": "~2.4.0",
22+
"nativescript-angular": "~1.4.0",
23+
"nativescript-theme-core": "~1.0.2",
24+
"reflect-metadata": "~0.1.8",
25+
"rxjs": "~5.0.0",
26+
"tns-core-modules": "~2.5.0",
27+
"zone.js": "~0.7.2"
28+
},
29+
"devDependencies": {
30+
"lazy": "1.0.11",
31+
"nativescript-dev-android-snapshot": "^0.*.*",
32+
"nativescript-dev-typescript": "~0.3.0"
33+
}
34+
}

‎testing/package-configs/ns2ng4.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"description": "NativeScript Application",
3+
"license": "SEE LICENSE IN <your-license-filename>",
4+
"readme": "NativeScript Application",
5+
"repository": "<fill-your-repository-here>",
6+
"nativescript": {
7+
"id": "org.nativescript.webpacktest",
8+
"tns-android": {
9+
"version": "2.5.0"
10+
}
11+
},
12+
"dependencies": {
13+
"@angular/animations": "~4.0.0",
14+
"@angular/common": "~4.0.0",
15+
"@angular/compiler": "~4.0.0",
16+
"@angular/core": "~4.0.0",
17+
"@angular/forms": "~4.0.0",
18+
"@angular/http": "~4.0.0",
19+
"@angular/platform-browser": "~4.0.0",
20+
"@angular/platform-browser-dynamic": "~4.0.0",
21+
"@angular/router": "~4.0.0",
22+
"nativescript-angular": "~1.5.0",
23+
"nativescript-theme-core": "~1.0.2",
24+
"reflect-metadata": "~0.1.8",
25+
"rxjs": "~5.2.0",
26+
"tns-core-modules": "~2.5.0",
27+
"zone.js": "~0.8.2"
28+
},
29+
"devDependencies": {
30+
"lazy": "1.0.11",
31+
"nativescript-dev-android-snapshot": "^0.*.*",
32+
"nativescript-dev-typescript": "~0.3.0"
33+
}
34+
}

‎testing/package-configs/ns3ng4.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"description": "NativeScript Application",
3+
"license": "SEE LICENSE IN <your-license-filename>",
4+
"readme": "NativeScript Application",
5+
"repository": "<fill-your-repository-here>",
6+
"nativescript": {
7+
"id": "org.nativescript.webpacktest",
8+
"tns-android": {
9+
"version": "2.5.0"
10+
}
11+
},
12+
"dependencies": {
13+
"@angular/animations": "~4.0.0",
14+
"@angular/common": "~4.0.0",
15+
"@angular/compiler": "~4.0.0",
16+
"@angular/core": "~4.0.0",
17+
"@angular/forms": "~4.0.0",
18+
"@angular/http": "~4.0.0",
19+
"@angular/platform-browser": "~4.0.0",
20+
"@angular/platform-browser-dynamic": "~4.0.0",
21+
"@angular/router": "~4.0.0",
22+
"nativescript-angular": "^3.0.0 || ^2.0.0-rc.1",
23+
"nativescript-theme-core": "~1.0.2",
24+
"reflect-metadata": "~0.1.8",
25+
"rxjs": "~5.2.0",
26+
"tns-core-modules": "^3.0.0 || ^3.0.0-rc.1",
27+
"zone.js": "~0.8.2"
28+
},
29+
"devDependencies": {
30+
"lazy": "1.0.11",
31+
"nativescript-dev-android-snapshot": "^0.*.*",
32+
"nativescript-dev-typescript": "~0.3.0"
33+
}
34+
}

0 commit comments

Comments
 (0)
This repository has been archived.