forked from NativeScript/nativescript-dev-webpack
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprojectFilesManager.js
130 lines (104 loc) · 4.1 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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}`);
const content = fs.readFileSync(templateName, "utf8");
fs.writeFileSync(destinationPath, content);
}
}
function getProjectTemplates(projectDir) {
let templates = {}
if (helpers.isAngular({projectDir})) {
templates["webpack.angular.js"] = "webpack.config.js";
templates["tsconfig.aot.json"] = "tsconfig.aot.json";
} else if (helpers.isTypeScript({projectDir})) {
templates["webpack.typescript.js"] = "webpack.config.js";
} else {
templates["webpack.javascript.js"] = "webpack.config.js";
}
return getFullTemplatesPath(projectDir, templates);
}
function getAppTemplates(projectDir, appDir) {
const templates = {
"vendor-platform.android.ts": tsOrJs(projectDir, "vendor-platform.android"),
"vendor-platform.ios.ts": tsOrJs(projectDir, "vendor-platform.ios"),
};
if (helpers.isAngular({projectDir})) {
templates["vendor.angular.ts"] = tsOrJs(projectDir, "vendor");
} else {
templates["vendor.nativescript.ts"] = 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 editExistingProjectFiles(projectDir) {
const webpackConfigPath = getFullPath(projectDir, "webpack.config.js");
const webpackCommonPath = getFullPath(projectDir, "webpack.common.js");
editWebpackConfig(webpackConfigPath, replaceStyleUrlResolvePlugin);
editWebpackConfig(webpackCommonPath, replaceStyleUrlResolvePlugin);
}
function editWebpackConfig(path, fn) {
if (!fs.existsSync(path)) {
return;
}
const config = fs.readFileSync(path, "utf8");
const newConfig = fn(config);
fs.writeFileSync(path, newConfig, "utf8");
}
function replaceStyleUrlResolvePlugin(config) {
return config.replace(/StyleUrlResolvePlugin/g, "UrlResolvePlugin");
}
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,
editExistingProjectFiles,
};