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