UNPKG

@sebastienrousseau/dotfiles

Version:

Dotfiles - A set of macOS / Linux and Windows configuration files - Simply designed to fit your shell life.

2 lines (1 loc) 1.76 kB
import backup from"./backup.js";import copy from"./copy.js";import download from"./download.js";import transfer from"./transfer.js";import unpack from"./unpack.js";import{aliases,copies}from"./constants.js";import fs from"fs/promises";import os from"os";import path from"path";import{createLogger,transports,format}from"winston";const dir=path.resolve(__dirname,os.homedir());const logger=createLogger({level:"error",format:format.combine(format.timestamp(),format.json()),transports:[new transports.Console(),new transports.File({filename:"error.log"})]});const sleep=(waitTimeInMs)=>new Promise((resolve)=>setTimeout(resolve,waitTimeInMs));const validateAndSanitizeInput=(input)=>{return input.replace(/[^\w]/g,"");};const backupAndCopy=async()=>{try{for(let i=0;i<Math.min(aliases.length,copies.length);i++){const alias=validateAndSanitizeInput(aliases[i]);const copyName=validateAndSanitizeInput(copies[i]);await backup(alias,alias);await copy(copyName,alias);}}catch(error){logger.error(`Error in backupAndCopy:${error.message}`);}};const downloadAndUnpack=async()=>{try{download();await sleep(2500);unpack();await sleep(2500);}catch(error){logger.error(`Error in downloadAndUnpack:${error.message}`);}};const createDirIfNeeded=async()=>{try{await fs.access(dir);}catch(error){if(error.code==="ENOENT"){try{await fs.mkdir(dir);await sleep(2500);}catch(error){logger.error(`Error creating directory:${error.message}`);}}}};const transferFiles=async()=>{try{await transfer(dir);}catch(error){logger.error(`Error in transferFiles:${error.message}`);}};const main=async()=>{try{await backupAndCopy();await downloadAndUnpack();await createDirIfNeeded();await transferFiles();}catch(error){logger.error(`Error in main:${error.message}`);}};export default main;