-
-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathpostinstall.js
84 lines (68 loc) · 2.39 KB
/
postinstall.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
var hook = require("nativescript-hook")(__dirname);
hook.postinstall();
var fs = require("fs");
var path = require("path");
var upgrader = require("./tsconfig-upgrader");
var projectDir = hook.findProjectDir();
if (projectDir) {
var tsconfigPath = path.join(projectDir, "tsconfig.json");
var hasModules30 = upgrader.hasModules30(projectDir);
if (fs.existsSync(tsconfigPath)) {
upgrader.migrateTsConfig(tsconfigPath, projectDir);
} else {
createTsconfig(tsconfigPath);
}
if (!hasModules30) {
createReferenceFile();
}
installTypescript({force: hasModules30});
}
function createReferenceFile() {
var referenceFilePath = path.join(projectDir, "references.d.ts"),
content = "/// <reference path=\"./node_modules/tns-core-modules/tns-core-modules.d.ts\" /> Needed for autocompletion and compilation.";
if (!fs.existsSync(referenceFilePath)) {
fs.appendFileSync(referenceFilePath, content);
}
}
function createTsconfig(tsconfigPath) {
var tsconfig = {};
tsconfig.compilerOptions = {
module: "commonjs",
target: "es5",
experimentalDecorators: true,
emitDecoratorMetadata: true,
noEmitHelpers: true,
noEmitOnError: true,
};
upgrader.migrateProject(tsconfig, tsconfigPath, projectDir);
tsconfig.exclude = ["node_modules", "platforms", "**/*.aot.ts"];
fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 4));
}
function getProjectTypeScriptVersion() {
try {
var packageJsonPath = path.join(projectDir, "package.json"),
packageJsonContent = fs.readFileSync(packageJsonPath, "utf8"),
jsonContent = JSON.parse(packageJsonContent);
return (jsonContent.dependencies && jsonContent.dependencies.typescript) ||
(jsonContent.devDependencies && jsonContent.devDependencies.typescript);
} catch (err) {
console.error(err);
return null;
}
}
function installTypescript({force = false} = {}) {
const installedTypeScriptVersion = getProjectTypeScriptVersion();
if (installedTypeScriptVersion && !force) {
console.log("Project already targets TypeScript " + installedTypeScriptVersion);
} else {
const command = force ? "npm install -D typescript" : "npm update -D typescript";
console.log("Installing TypeScript...");
require("child_process").exec(command, { cwd: projectDir }, function (err, stdout, stderr) {
if (err) {
console.warn("npm: " + err.toString());
}
process.stdout.write(stdout);
process.stderr.write(stderr);
});
}
}