wallchpaper
Version:
Change wallpaper after an adjustable time
45 lines (36 loc) • 1.2 kB
text/typescript
import vm from 'vm'
import { notify } from '../notify'
import { Configs, ConfigFile, ConfigModule } from './config.types'
import { configFile } from './paths'
import mergeConfigs from 'lodash.merge'
function validateSyntax(code: string) {
try {
return new vm.Script(code, { filename: configFile, displayErrors: true })
} catch (error) {
notify(error)
}
}
function extract(script?: vm.Script): ConfigFile {
const module: ConfigModule = {}
const context = vm.createContext({ module })
script.runInNewContext && script.runInContext(context)
if (!module.exports) {
throw new Error('Error reading Wallchpaper configuration: `module.exports` not set')
}
return module.exports
}
export function extractDefault(configCode: string): ConfigFile {
return extract(validateSyntax(configCode))
}
export function init(configs: Configs) {
const script = validateSyntax(configs.userConfig)
if (script) {
const userConfigFile = extract(script)
if (!userConfigFile.config) {
return configs.defaultConfig
}
// Replace default config keys with user config
return mergeConfigs(configs.defaultConfig, userConfigFile)
}
return configs.defaultConfig
}