
* refactor: add dev server and fix `update-beta.json` bug
* chore: add renovate config
* feat: release plugin to GitHub release via action
* chore: update vsc settings
* Cancel release by action
* docs: update readme
* Update README.md
* Update README.md
fix format
* Update README.md
* Update README.md
fix hint
* tweak
* Merge #81
* Fix indent
* Merge ade49628ff
* Revent delete env
* tweak
* feat: release via GitHub action
* docs: update readme
* Update README.md
* style: fix prettier
* add: stdout log to file
* Update README.md
fix typo
* Update release.yml
fix typo
* write Zotero log to `logs/zotero.log`
* do not provide update-beta.json default
* fix prettier in readme
* tweak
* fix wrong link in readme
* Move 3rd package config to package.json
---------
Co-authored-by: windingwind <33902321+windingwind@users.noreply.github.com>
130 lines
2.8 KiB
JavaScript
130 lines
2.8 KiB
JavaScript
import { exec } from "child_process";
|
|
import {
|
|
existsSync,
|
|
lstatSync,
|
|
mkdirSync,
|
|
readFileSync,
|
|
readdirSync,
|
|
rmSync,
|
|
writeFileSync,
|
|
} from "fs";
|
|
import path from "path";
|
|
|
|
export function copyFileSync(source, target) {
|
|
var targetFile = target;
|
|
|
|
// If target is a directory, a new file with the same name will be created
|
|
if (existsSync(target)) {
|
|
if (lstatSync(target).isDirectory()) {
|
|
targetFile = path.join(target, path.basename(source));
|
|
}
|
|
}
|
|
|
|
writeFileSync(targetFile, readFileSync(source));
|
|
}
|
|
|
|
export function copyFolderRecursiveSync(source, target) {
|
|
var files = [];
|
|
|
|
// Check if folder needs to be created or integrated
|
|
var targetFolder = path.join(target, path.basename(source));
|
|
if (!existsSync(targetFolder)) {
|
|
mkdirSync(targetFolder);
|
|
}
|
|
|
|
// Copy
|
|
if (lstatSync(source).isDirectory()) {
|
|
files = readdirSync(source);
|
|
files.forEach(function (file) {
|
|
var curSource = path.join(source, file);
|
|
if (lstatSync(curSource).isDirectory()) {
|
|
copyFolderRecursiveSync(curSource, targetFolder);
|
|
} else {
|
|
copyFileSync(curSource, targetFolder);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
export function clearFolder(target) {
|
|
if (existsSync(target)) {
|
|
rmSync(target, { recursive: true, force: true });
|
|
}
|
|
|
|
mkdirSync(target, { recursive: true });
|
|
}
|
|
|
|
export function dateFormat(fmt, date) {
|
|
let ret;
|
|
const opt = {
|
|
"Y+": date.getFullYear().toString(),
|
|
"m+": (date.getMonth() + 1).toString(),
|
|
"d+": date.getDate().toString(),
|
|
"H+": date.getHours().toString(),
|
|
"M+": date.getMinutes().toString(),
|
|
"S+": date.getSeconds().toString(),
|
|
};
|
|
for (let k in opt) {
|
|
ret = new RegExp("(" + k + ")").exec(fmt);
|
|
if (ret) {
|
|
fmt = fmt.replace(
|
|
ret[1],
|
|
ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"),
|
|
);
|
|
}
|
|
}
|
|
return fmt;
|
|
}
|
|
|
|
export class Logger {
|
|
static log(...args) {
|
|
console.log(...args);
|
|
}
|
|
|
|
// red
|
|
static error(...args) {
|
|
console.error("\u001b[31m [ERROR]", ...args, "\u001b[0m");
|
|
}
|
|
|
|
// yellow
|
|
static warn(...args) {
|
|
console.warn("\u001b[33m [WARN]", ...args, "\u001b[0m");
|
|
}
|
|
|
|
// blue
|
|
static debug(...args) {
|
|
console.log("\u001b[34m [DEBUG]\u001b[0m", ...args);
|
|
}
|
|
|
|
// green
|
|
static info(...args) {
|
|
console.log("\u001b[32m [INFO]", ...args, "\u001b[0m");
|
|
}
|
|
|
|
// cyan
|
|
static trace(...args) {
|
|
console.log("\u001b[36m [TRACE]\u001b[0m", ...args);
|
|
}
|
|
}
|
|
|
|
export function isRunning(query, cb) {
|
|
let platform = process.platform;
|
|
let cmd = "";
|
|
switch (platform) {
|
|
case "win32":
|
|
cmd = `tasklist`;
|
|
break;
|
|
case "darwin":
|
|
cmd = `ps -ax | grep ${query}`;
|
|
break;
|
|
case "linux":
|
|
cmd = `ps -A`;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
exec(cmd, (err, stdout, stderr) => {
|
|
cb(stdout.toLowerCase().indexOf(query.toLowerCase()) > -1);
|
|
});
|
|
}
|