-const { readFile, writeFile } = require('fs/promises');
-const { rmIfExists } = require('./utils');
-
-const internals = {
- strings: {
- configurationNotFound: 'Remote configuration not set, consult help for more info.'
- },
- strategies: [
- require('./remotes/git')
- ]
-};
-
-module.exports = {
- 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);
- }
- }
-}