meet-simen
Version:
Get to know Simen via `npx meet-simen`
79 lines (78 loc) • 2.85 kB
JavaScript
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import ora from 'ora';
// Get the directory name of the current module
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// Function to load local JSON data
export async function loadLocalData(filename) {
try {
// Try to load from the correct dist/data directory
const dataPath = resolve(__dirname, '../../dist/data', filename);
try {
const data = JSON.parse(readFileSync(dataPath, 'utf8'));
return data;
}
catch (error) {
// If that fails, try to load from current directory's data folder
const fallbackPath = resolve(__dirname, '../data', filename);
try {
const data = JSON.parse(readFileSync(fallbackPath, 'utf8'));
return data;
}
catch (secondError) {
// Last resort, try src/data
const srcDataPath = resolve(process.cwd(), 'src/data', filename);
const data = JSON.parse(readFileSync(srcDataPath, 'utf8'));
return data;
}
}
}
catch (error) {
console.error(`Error loading ${filename}:`, error);
throw error;
}
}
// Function to load remote JSON data
export async function loadRemoteData(config, filename) {
const spinner = ora(`Loading ${filename} data...`).start();
try {
const response = await fetch(`${config.remoteDataUrl}${filename}`);
if (!response.ok) {
throw new Error(`Failed to fetch ${filename}: ${response.statusText}`);
}
const data = await response.json();
spinner.succeed(`Loaded ${filename} data!`);
return data;
}
catch (error) {
spinner.fail(`Failed to load ${filename} data`);
throw error;
}
}
// Function to get package info
export function getPackageInfo() {
try {
const packagePath = resolve(__dirname, '../../package.json');
const packageJson = JSON.parse(readFileSync(packagePath, 'utf8'));
return packageJson;
}
catch (error) {
// Fallback to current directory
try {
const packagePath = resolve(process.cwd(), 'package.json');
const packageJson = JSON.parse(readFileSync(packagePath, 'utf8'));
return packageJson;
}
catch (secondError) {
console.error('Error loading package.json:', secondError);
return { name: 'meet-simen', version: '2.0.0', description: 'Get to know Simen via `npx meet-simen`' };
}
}
}
// Function to load config
export async function loadConfig() {
return await loadLocalData('config.json');
}