UNPKG

hackages

Version:

CLI tool for learning software development concepts through test-driven development

77 lines (76 loc) 2.11 kB
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); } }