hackages
Version:
CLI tool for learning software development concepts through test-driven development
77 lines (76 loc) • 2.11 kB
JavaScript
import fs from "fs";
import path from "path";
import { printInfo } from "../utils/console.js";
const ONBOARDING_FILE = "onboarding.json";
/**
* Get the path to the .hackages directory
*/
function getHackagesDir() {
const homeDir = process.env.HOME || process.env.USERPROFILE || "";
const hackagesDir = path.join(homeDir, ".hackages");
if (!fs.existsSync(hackagesDir)) {
fs.mkdirSync(hackagesDir, { recursive: true });
}
return hackagesDir;
}
/**
* Get the path to the onboarding status file
*/
function getOnboardingFilePath() {
return path.join(getHackagesDir(), ONBOARDING_FILE);
}
/**
* Check if user has completed onboarding
*/
export function hasCompletedOnboarding() {
const onboardingPath = getOnboardingFilePath();
if (!fs.existsSync(onboardingPath)) {
return false;
}
try {
const onboardingData = JSON.parse(fs.readFileSync(onboardingPath, "utf8"));
return onboardingData.completed === true;
}
catch (error) {
// If file is corrupted, treat as not completed
return false;
}
}
/**
* Mark onboarding as completed
*/
export function markOnboardingCompleted(selectedTopic) {
const onboardingPath = getOnboardingFilePath();
const onboardingData = {
completed: true,
completedAt: new Date().toISOString(),
selectedTopic,
version: "1.0.0"
};
fs.writeFileSync(onboardingPath, JSON.stringify(onboardingData, null, 2));
printInfo("✅ Onboarding completed and saved!");
}
/**
* Get onboarding data
*/
export function getOnboardingData() {
const onboardingPath = getOnboardingFilePath();
if (!fs.existsSync(onboardingPath)) {
return null;
}
try {
return JSON.parse(fs.readFileSync(onboardingPath, "utf8"));
}
catch (error) {
return null;
}
}
/**
* Reset onboarding status (for testing or if user wants to start over)
*/
export function resetOnboarding() {
const onboardingPath = getOnboardingFilePath();
if (fs.existsSync(onboardingPath)) {
fs.unlinkSync(onboardingPath);
}
}