♻️ Small refactoring to make my life easier

This commit is contained in:
Florian Metz
2019-09-23 12:45:13 +02:00
parent f02626a118
commit 02f4a730c7
3 changed files with 307 additions and 73 deletions

133
package-lock.json generated
View File

@@ -163,6 +163,21 @@
"integrity": "sha512-+YB9FtyxXGyD54p8rXwWaN1EWEyar5L58GlGWgtH2I9rGmLGBQcw63+0jw+ujqVavNuO47S1ByAjm9zdHMnskw==",
"dev": true
},
"@types/ora": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@types/ora/-/ora-3.2.0.tgz",
"integrity": "sha512-jll99xUKpiFbIFZSQcxm4numfsLaOWBzWNaRk3PvTSE7BPqTzzOCFmS0mQ7m8qkTfmYhuYbehTGsxkvRLPC++w==",
"dev": true,
"requires": {
"ora": "*"
}
},
"@types/prompts": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.0.1.tgz",
"integrity": "sha512-AhtMcmETelF8wFDV1ucbChKhLgsc+ytXZXkNz/nnTAMSDeqsjALknEFxi7ZtLgS/G8bV2rp90LhDW5SGACimIQ==",
"dev": true
},
"@types/request": {
"version": "2.48.2",
"resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.2.tgz",
@@ -1001,6 +1016,27 @@
"integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
"dev": true
},
"cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dev": true,
"requires": {
"restore-cursor": "^3.1.0"
}
},
"cli-spinners": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz",
"integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==",
"dev": true
},
"clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
"dev": true
},
"clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
@@ -1317,6 +1353,15 @@
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true
},
"defaults": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
"dev": true,
"requires": {
"clone": "^1.0.2"
}
},
"defer-to-connect": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz",
@@ -3076,6 +3121,12 @@
"is-path-inside": "^1.0.0"
}
},
"is-interactive": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
"dev": true
},
"is-npm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
@@ -3254,6 +3305,12 @@
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
},
"kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true
},
"latest-version": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
@@ -3291,6 +3348,15 @@
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
"log-symbols": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
"integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
"dev": true,
"requires": {
"chalk": "^2.4.2"
}
},
"loud-rejection": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
@@ -3714,6 +3780,38 @@
"mimic-fn": "^2.1.0"
}
},
"ora": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/ora/-/ora-4.0.1.tgz",
"integrity": "sha512-yQv2q0GO8rqP2wzdOxpu0FxUmRg4z/Lw0m6uSpukPJXoOMaQzrIpl+STKHzjryFP5ExQC56+y8+yXPar2iezaw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
"cli-cursor": "^3.1.0",
"cli-spinners": "^2.2.0",
"is-interactive": "^1.0.0",
"log-symbols": "^3.0.0",
"strip-ansi": "^5.2.0",
"wcwidth": "^1.0.1"
},
"dependencies": {
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
"ansi-regex": "^4.1.0"
}
}
}
},
"p-cancelable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
@@ -3948,6 +4046,16 @@
"through2": "~0.2.3"
}
},
"prompts": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz",
"integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==",
"dev": true,
"requires": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.3"
}
},
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -4358,6 +4466,16 @@
"lowercase-keys": "^1.0.0"
}
},
"restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"dev": true,
"requires": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
}
},
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@@ -4489,6 +4607,12 @@
"string-width": "^1.0.1"
}
},
"sisteransi": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz",
"integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==",
"dev": true
},
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -5291,6 +5415,15 @@
"extsprintf": "^1.2.0"
}
},
"wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
"dev": true,
"requires": {
"defaults": "^1.0.3"
}
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",

View File

@@ -21,6 +21,8 @@
"@types/electron-packager": "^14.0.0",
"@types/fs-extra": "^8.0.0",
"@types/ini": "^1.3.30",
"@types/ora": "^3.2.0",
"@types/prompts": "^2.0.1",
"@types/request-promise-native": "^1.0.16",
"@types/socket.io": "^2.1.2",
"chalk": "^2.4.2",
@@ -30,6 +32,8 @@
"fs-extra": "^8.1.0",
"ini": "^1.3.5",
"nodemon": "^1.19.2",
"ora": "^4.0.1",
"prompts": "^2.2.1",
"rimraf": "^3.0.0",
"source-map-support": "^0.5.13",
"typescript": "^3.6.3"

243
pkg.ts
View File

@@ -1,97 +1,194 @@
import electronPackager = require("electron-packager");
import * as electronPackager from "electron-packager";
import { platform } from "os";
import { existsSync, readFileSync, writeFileSync } from "fs";
import { resolve } from "path";
import { exec } from "child_process";
import { removeSync, ensureDirSync } from "fs-extra";
import { parse, stringify } from "ini";
import * as prompts from "prompts";
import * as ora from "ora";
var icon: string;
(async () => {
let response = await prompts([
{
type: "select",
name: "arch",
message: "What architecture?",
choices: [
{
title: "current",
value: "current"
},
{
title: "all",
value: "all"
},
{
title: "arm64",
value: "arm64"
},
{
title: "armv7l",
value: "armv7l"
},
{
title: "ia32",
value: "ia32"
},
{
title: "mips64el",
value: "mips64el"
},
{
title: "x64",
value: "x64"
}
]
},
{
type: "select",
name: "os",
message: "What operating system?",
choices: [
{
title: "current",
value: "current"
},
{
title: "all",
value: "all"
},
{
title: "darwin",
value: "darwin"
},
{
title: "linux",
value: "linux"
},
{
title: "mas",
value: "mas"
},
{
title: "win32",
value: "win32"
}
]
},
{
type: "confirm",
name: "installer",
message: "With installer?"
}
]);
if (platform() == "darwin") icon = "./installer_assets/appIcon.icns";
if (platform() == "win32") icon = "./installer_assets/appIcon.ico";
if (!response.os) return;
if (existsSync("./dist/app/update.ini")) removeSync("./dist/app/update.ini");
if (existsSync("./dist/app/updater.app")) removeSync("./dist/app/updater.app");
if (existsSync("./dist/app/updater.exe")) removeSync("./dist/app/updater.exe");
let icon: string;
console.log("Packaging app...");
if (response.os == "darwin") icon = "./installer_assets/appIcon.icns";
if (["ia32", "x64"].includes(response.os))
icon = "./installer_assets/appIcon.ico";
electronPackager({
dir: "./dist/app",
out: "./dist",
darwinDarkModeSupport: true,
icon: icon,
overwrite: true,
quiet: true,
appBundleId: "eu.Timeraa.PreMiD",
appCategoryType: "Utilities",
appCopyright: "Timeraa 2018-2019",
prune: true
}).then(() => {
console.log("Successfully packaged app.");
if (existsSync("./dist/app/update.ini")) removeSync("./dist/app/update.ini");
if (existsSync("./dist/app/updater.app"))
removeSync("./dist/app/updater.app");
if (existsSync("./dist/app/updater.exe"))
removeSync("./dist/app/updater.exe");
if (process.argv.length < 2 || process.argv[2] !== "dist") process.exit();
let spinner = ora("Packaging app").start(),
packagingOptions = {
dir: "./dist/app",
out: "./dist",
darwinDarkModeSupport: true,
icon: icon,
overwrite: true,
quiet: true,
appBundleId: "eu.Timeraa.PreMiD",
appCategoryType: "Utilities",
appCopyright: `Timeraa 2018-${new Date().getFullYear()}`,
prune: true,
arch: response.arch,
platform: response.os
};
var versionId = "0" + require("./package.json").version.replace(/[.]/g, ""),
updateIni = parse(readFileSync("./installer_assets/update.ini", "utf-8"));
if (response.arch === "current") delete packagingOptions.arch;
if (response.os === "current") delete packagingOptions.platform;
updateIni.Update.version_id = versionId;
ensureDirSync("./tmp");
writeFileSync("./tmp/update.ini", stringify(updateIni));
var bitRockBuilder = "",
bitRockUpdater = "";
if (platform() === "win32") {
bitRockBuilder = resolve(
"C:/Program Files (x86)/BitRock InstallBuilder Enterprise 19.8.0/bin/builder-cli.exe"
);
bitRockUpdater = resolve(
"C:/Program Files (x86)/BitRock InstallBuilder Enterprise 19.8.0/autoupdate/bin/customize.exe"
);
}
if (platform() === "darwin") {
bitRockBuilder = resolve(
"/Applications/Installbuilder/bin/Builder.app/Contents/MacOS/installbuilder.sh"
);
bitRockUpdater = resolve(
"/Applications/Installbuilder/autoupdate/bin/customize.sh"
);
}
if (!existsSync(bitRockBuilder) || !existsSync(bitRockUpdater)) {
console.log("BitRock installation not found");
process.exit(404);
}
console.log("Building updater...");
var updater = exec(
`"${bitRockUpdater}" build installer_assets/updater.xml ${
platform() === "win32" ? "windows" : "osx"
}`
);
updater.once("exit", (code, signal) => {
if (![0, 1].includes(code)) {
console.error(`Updater failed with code ${code}: ${signal}`);
electronPackager(packagingOptions).then(() => {
if (!response.installer) {
spinner.text = "Done!";
spinner.succeed();
return;
}
console.log("Creating installer...");
var builder = exec(
`"${bitRockBuilder}" build installer_assets/PreMiD_x64.xml ${
let versionId = "0" + require("./package.json").version.replace(/[.]/g, ""),
updateIni = parse(readFileSync("./installer_assets/update.ini", "utf-8"));
updateIni.Update.version_id = versionId;
ensureDirSync("./tmp");
writeFileSync("./tmp/update.ini", stringify(updateIni));
let bitRockBuilder = "",
bitRockUpdater = "";
if (platform() === "win32") {
bitRockBuilder = resolve(
"C:/Program Files (x86)/BitRock InstallBuilder Enterprise 19.8.0/bin/builder-cli.exe"
);
bitRockUpdater = resolve(
"C:/Program Files (x86)/BitRock InstallBuilder Enterprise 19.8.0/autoupdate/bin/customize.exe"
);
}
if (platform() === "darwin") {
bitRockBuilder = resolve(
"/Applications/Installbuilder/bin/Builder.app/Contents/MacOS/installbuilder.sh"
);
bitRockUpdater = resolve(
"/Applications/Installbuilder/autoupdate/bin/customize.sh"
);
}
if (!existsSync(bitRockBuilder) || !existsSync(bitRockUpdater)) {
spinner.fail("Bitrock installation not found.");
return;
}
spinner.text = "Building updater";
let updater = exec(
`"${bitRockUpdater}" build installer_assets/updater.xml ${
platform() === "win32" ? "windows" : "osx"
}`
);
builder.once("exit", code => {
removeSync("./tmp");
updater.once("exit", (code, signal) => {
if (![0, 1].includes(code)) {
spinner.fail(`Updater failed with code ${code}: ${signal}`);
return;
}
if (code !== 0) return;
console.log("Done!");
spinner.text = "Building installer";
let builder = exec(
`"${bitRockBuilder}" build installer_assets/PreMiD_x64.xml ${
platform() === "win32" ? "windows" : "osx"
}`
);
builder.once("exit", code => {
removeSync("./tmp");
if (code !== 0) {
spinner.fail(`Error code: ${code}`);
return;
}
spinner.text = "Done!";
spinner.succeed();
});
});
});
});
})();