track-dev-time
Version:
CLI tool to track your coding sessions with start, pause and stop commands. Outputs session data to a JSON file.
96 lines (80 loc) • 2.71 kB
JavaScript
// setup.js
//@ts-nocheck
import fs from "fs";
import path from "path";
import {
ensureConfigFile,
ensureSessionStorage,
} from "../utils/file-storage.js";
import readline from "readline";
import { exec } from "child_process";
import {
installConcurrently,
isConcurrentlyInstalled,
} from "../utils/concurrently.js";
import { CONFIG_PATH, SESSIONS_PATH } from "../utils/constants.js";
export const setupPackage = async ({
sessionsPath = SESSIONS_PATH,
configPath = CONFIG_PATH,
packageJsonPath = path.resolve("package.json"),
gitignorePath = path.resolve(".gitignore"),
} = {}) => {
console.log("Setting up track-dev-time...");
ensureSessionStorage(sessionsPath);
ensureConfigFile(configPath);
if (!isConcurrentlyInstalled(packageJsonPath)) {
await installConcurrently();
} else {
console.log("ℹ️ 'concurrently' is already installed");
}
updatePackageJsonScripts(packageJsonPath);
updateGitignore(gitignorePath);
console.log("✅ Setup completed!");
};
const updatePackageJsonScripts = (packageJsonPath) => {
if (!fs.existsSync(packageJsonPath)) {
console.error("❌ No package.json found.");
return;
}
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
if (!packageJson.scripts || !packageJson.scripts.dev) {
console.error("❌ No 'dev' script found in package.json.");
return;
}
const initialScriptDev = packageJson.scripts.dev;
if (
initialScriptDev.includes("track-dev-time start") &&
initialScriptDev.includes("concurrently")
) {
console.log(
"ℹ️ The 'dev' script already uses concurrently with 'track-dev-time start'"
);
return;
}
if (!packageJson.trackDevTimeBackupDevScript) {
packageJson.trackDevTimeBackupDevScript = initialScriptDev;
}
const newScriptDev = `concurrently -n server,track -c ,green "${initialScriptDev}" "track-dev-time start"`;
packageJson.scripts.dev = newScriptDev;
fs.writeFileSync(
packageJsonPath,
JSON.stringify(packageJson, null, 2),
"utf-8"
);
console.log("✅ 'dev' script modified to use concurrently in package.json");
};
const updateGitignore = (gitignorePath) => {
const ignoreLine = ".track-dev-time/";
if (fs.existsSync(gitignorePath)) {
const current = fs.readFileSync(gitignorePath, "utf-8");
if (!current.includes(ignoreLine)) {
fs.appendFileSync(gitignorePath, `\n${ignoreLine}`);
console.log(`✅ ${ignoreLine} added to .gitignore`);
} else {
console.log(`ℹ️ ${ignoreLine} already in .gitignore`);
}
} else {
fs.writeFileSync(gitignorePath, `${ignoreLine}\n`);
console.log(`✅ .gitignore file created with ${ignoreLine}`);
}
};