import { readFile, writeFile } from 'fs/promises'; import { rmIfExists } from './utils.js'; import GitStrategy from './remotes/git.js'; const internals = { strings: { configurationNotFound: 'Remote configuration not set, consult help for more info.' }, strategies: [ GitStrategy ] }; export default { async add(remoteConfig, remote) { await writeFile(remoteConfig, remote); }, async remove(remoteConfig) { await rmIfExists(remoteConfig); }, async syncUp(remoteConfig, blogDirectory) { await this._executeMethodOnStrategy(remoteConfig, 'syncUp', blogDirectory); }, async syncDown(remoteConfig, blogDirectory) { await this._executeMethodOnStrategy(remoteConfig, 'syncDown', blogDirectory); }, async _executeMethodOnStrategy(remoteConfig, method, blogDirectory) { const remote = await this._ensureConfiguration(remoteConfig); for (const strategy of internals.strategies) { if (strategy.canHandle(remote)) { await strategy[method](remote, blogDirectory); } } }, async _ensureConfiguration(remoteConfig) { try { const configuration = await readFile(remoteConfig, { encoding: 'utf8' }); return configuration; } catch { throw new Error(internals.strings.configurationNotFound); } } };