{"tag":"synchronisation","articles":{"projects\/avris-sync":{"key":"projects\/avris-sync","type":"article","published":true,"meta":{"createdAt":"2019-01-01T18:55:16+01:00","publishedAt":"2019-01-01T18:53:00+01:00","group":null,"links":[{"icon":"globe-europe","colour":"primary","url":"https:\/\/www.npmjs.com\/package\/avris-sync","displayUrl":"npm: avris-sync"},{"icon":"brands gitlab","colour":"secondary","url":"https:\/\/gitlab.com\/Avris\/Sync","displayUrl":null}],"category":"projects","subcategory":null,"slug":"avris-sync"},"content":{"en":{"slug":"avris-sync","title":"avris-sync","intro":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-sync_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022320\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAYCAYAAACSuF9OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHmklEQVRIiX2X2a9lRRXGf2uo2me459yh+17oZmgmUUDtQDSSEAOSMMWgQeOAJkQf9EHjg3+C7775YDQ+65PxBTHRaAQSSBSNAyB2BGmmhtB9+w7nTmfvquXDPt0YNVb2lOyqXV99X621vi3XXndbRKkIQdQKUTF3aikEgYrgapgqyZ35\/IhaK0RABAKICELfRAQRAYJLLSIWZ718JyoioCKYOyZC0wzxCCEiKLUgAQKUUhD6D6tqD1QUaiWp0i0mQGTRj8v9RQAEVXlvcrn0LEQtiBoR740zhKSG1oJfGiAoQSUCNATRfjJCUHVA6ErFEBQhRDHVBRv9QpD+3eJYXAx3Yz5vEYGIfoEiii7GmipuRlLFQxRqWRDcM0IEEoKq4aaYCCaKmyJRqbVSa+k\/4N6vvlZU7bJUKkLUShAsr6ywtXkRqBCCOEQtqAoEmCnJjOSXAAmgAnXBloCILmQwFMXMyJYYNQ1Ex\/7BAY07TXKyJ2qtlNLRlQJCv19qBeDEFRsc7c6A2pMWgWpegFJMe4mzKS6aiGiRMJCKXt6kgpr11FpCRVExVJxxM2Z1uMzF2TYaSpSg8YR6hiiECF3X9gwJnLr2Wt5+9TVEAgkwFYQAEiKxkExJprimTBcsIsYuxQqo9uyoYWpkd7IlFEMk0eTE9etL7O3POGpbrrhyg\/nBPrOdXUyE7EqNyl33383LL77ENDcE0UcWoNqLogoikEzJbnhoQtJCLoQaYKKoGiqKm+NqZM+4CMmcJImkDWtry3zmK59jbXWF3\/70F7x+9nWsWSJ5H02T5SXuuvduXnjyGVYGQ6AQET0YFVTATDDtWXMXnNwgnVNrLPQFUEQNNUfEcHNUE262OBP3PPRxHv3mFzjz3N94\/Hs\/IVG4+cRJolZ292Z4Nr78nW\/z3M+e4OrplHlpqdERUXrpdBFdqd9DOSmm4DIYU9uC1NrnoQDEEHHUEskcVSOZM0iZkTtf\/cZneeCRe5hd3OWJHzxO1iGrowE33nSSve3zbO8fcu+3vkRSoZ59gw+c2GB2sM9hN6fUjlJb0Epyw0xwV5ILKRkuoyky76BUAvo9giKSUDHEE1mdQUqMUuLRx+7jgUfuAeAvTz9PomGyNGFp1LC7ecCpj3yY+x++Cx80PPvdH7FxfBmNlu2doOsSJXpAIRXVIGXHXUhJ8Sy4DCeQOyggoRCKoCAOmjB1kjk5JU6fvp5Pff4Tl0vCzjszjl2xzlWnNjh12zVcc8cNjI9PiQhe\/+VTjIeZUpcYNB25qSCVGi1dNydqixqoBuZGbhxPgjNZhq4QIT2Y6KPLcFwTiiOLBPjY1x+6nJkBHvzaffxniwjefOoPzN89z\/p1xzjazrR7W0y1RawiFtTaUrsjhA41wVxJOeNNg+tkQir0dQbFQ0kYWZwcRlYjo9xx+lquumrtvwD8e6ul8PKvfs\/umZcZjJXB8oj1W66m2x6zc05QmSO0IJkoCZHaR1hyLGesGeKTlQmlAAuGDMHDGYgxQBlgNFW482M3\/V8ws3e3efHnzzC\/8C7DBlBoD\/bZv9DiMme03FDb0uceA5WELORSdywP0GaIX7k2pOuCWqCGoqEoRgohYQxCaYpw8w3H\/yeQg519\/v7087z5x5fI0jIc1L50VIgW6pFBo+ShEkkxiYVMCTXFUkZzg6QG8hD\/4EbD\/mHL\/Kgw7yqlVEqtSAgSFSuCiXB8dXQZxN7sgLNn3uTVP7\/Cmy\/8kyZaRl6IVHAqWSuhARYw72ulpCB54CaYCZoSkgeQDHKG3IAP8IdX32LvsDKbtezsVWZdsHsE+3M4bGHeCaWDH37\/xxzsHbB1foe9zR1yKSQKicpAK0PrGKdgOqjMRxUmQQphYL3NkNKiHlg2rAZtaxgT2iNDB4ntiyNaBsg9tx2P6SBxeNhbJbdMiFNxQhIFp2qmqxCioI6I4tpn7WOrKxztH5BNaBTGGSYZ1sfBidXCxnFjPBZeO7fF7OCAkltWTl7Fk7\/+Ha+eO2I6qGxsTDhqg2df3EOWVtZCU0bUsJTwZoCo4bnBU8ZSg6qRmwHmiZPr69x+6028fX6X8XDI+soqm5s7HF+eorXS7e1x46mTHG1uErubTFPL6hiSdiTrWBl33Hx6xNa5Ge+e22EyBJeO9TvvY\/+vv8Fv+fQXaZamdBUG4wmeGlQdMSd5QsQQ+rojIVyzNqUTuPqEsb2zx7xJjIdrXNg95LoTa0gpbJWCjtaRMmSPjpyMQapUqxw2ldZWWHs\/bM1eIQ2Fxju6i\/ss3foAXjBm+wdgifnuLiJ7gPZeKHoD3nshkFI5\/9brSK3Uw0OohWyGlEAiOHMm8BC0FkYpM0nOxJ3lJjFKgmthlGF22PLRD01546JSNzumQ5hsvcX7Hrwdv3j2H8zbFvVMLRVvhvDePwQCeEqoKhJB1ECjB6C1Il132eDX9ggXY+ud1xjkAS7C8tKUY9MVPCr7+zusTif86SXn7bND3tk+5NULhwxz0OicT3ZvIMdvvCVqKXTzObU9Io0nSAhlfoimpi8HtcPzAKD33IDWQBEkLnno3otrBELFRHAVXECpZDNUg65rEQobE2d5YGwe9Da3cbjzFPwLLIk8ktJRts4AAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/avris-sync_small.png\u0022 alt=\u0022\u0022 class=\u0022border-bottom\u0022 width=\u0022480\u0022 height=\u0022320\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA simple file synchronisation tool using \u003Ccode\u003Eavris-fs\u003C\/code\u003E.\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EWarning!\u003C\/strong\u003E It\u2019s a \u003Cem\u003Every\u003C\/em\u003E early version! Conflict handling is not implemented,\nso only use it when you can safely assume often synchronisations\/rare conflicts\/versioning on the remote, etc.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cfigure\u003E\n                \u003Cnoscript\u003E\n                    \u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-sync_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022900\u0022 height=\u0022600\u0022\u003E                \n                \u003C\/noscript\u003E\n                \u003Cspan class=\u0022hide-noscript\u0022\u003E\u003Cimg src=\u0022data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAYCAYAAACSuF9OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHmklEQVRIiX2X2a9lRRXGf2uo2me459yh+17oZmgmUUDtQDSSEAOSMMWgQeOAJkQf9EHjg3+C7775YDQ+65PxBTHRaAQSSBSNAyB2BGmmhtB9+w7nTmfvquXDPt0YNVb2lOyqXV99X621vi3XXndbRKkIQdQKUTF3aikEgYrgapgqyZ35\/IhaK0RABAKICELfRAQRAYJLLSIWZ718JyoioCKYOyZC0wzxCCEiKLUgAQKUUhD6D6tqD1QUaiWp0i0mQGTRj8v9RQAEVXlvcrn0LEQtiBoR740zhKSG1oJfGiAoQSUCNATRfjJCUHVA6ErFEBQhRDHVBRv9QpD+3eJYXAx3Yz5vEYGIfoEiii7GmipuRlLFQxRqWRDcM0IEEoKq4aaYCCaKmyJRqbVSa+k\/4N6vvlZU7bJUKkLUShAsr6ywtXkRqBCCOEQtqAoEmCnJjOSXAAmgAnXBloCILmQwFMXMyJYYNQ1Ex\/7BAY07TXKyJ2qtlNLRlQJCv19qBeDEFRsc7c6A2pMWgWpegFJMe4mzKS6aiGiRMJCKXt6kgpr11FpCRVExVJxxM2Z1uMzF2TYaSpSg8YR6hiiECF3X9gwJnLr2Wt5+9TVEAgkwFYQAEiKxkExJprimTBcsIsYuxQqo9uyoYWpkd7IlFEMk0eTE9etL7O3POGpbrrhyg\/nBPrOdXUyE7EqNyl33383LL77ENDcE0UcWoNqLogoikEzJbnhoQtJCLoQaYKKoGiqKm+NqZM+4CMmcJImkDWtry3zmK59jbXWF3\/70F7x+9nWsWSJ5H02T5SXuuvduXnjyGVYGQ6AQET0YFVTATDDtWXMXnNwgnVNrLPQFUEQNNUfEcHNUE262OBP3PPRxHv3mFzjz3N94\/Hs\/IVG4+cRJolZ292Z4Nr78nW\/z3M+e4OrplHlpqdERUXrpdBFdqd9DOSmm4DIYU9uC1NrnoQDEEHHUEskcVSOZM0iZkTtf\/cZneeCRe5hd3OWJHzxO1iGrowE33nSSve3zbO8fcu+3vkRSoZ59gw+c2GB2sM9hN6fUjlJb0Epyw0xwV5ILKRkuoyky76BUAvo9giKSUDHEE1mdQUqMUuLRx+7jgUfuAeAvTz9PomGyNGFp1LC7ecCpj3yY+x++Cx80PPvdH7FxfBmNlu2doOsSJXpAIRXVIGXHXUhJ8Sy4DCeQOyggoRCKoCAOmjB1kjk5JU6fvp5Pff4Tl0vCzjszjl2xzlWnNjh12zVcc8cNjI9PiQhe\/+VTjIeZUpcYNB25qSCVGi1dNydqixqoBuZGbhxPgjNZhq4QIT2Y6KPLcFwTiiOLBPjY1x+6nJkBHvzaffxniwjefOoPzN89z\/p1xzjazrR7W0y1RawiFtTaUrsjhA41wVxJOeNNg+tkQir0dQbFQ0kYWZwcRlYjo9xx+lquumrtvwD8e6ul8PKvfs\/umZcZjJXB8oj1W66m2x6zc05QmSO0IJkoCZHaR1hyLGesGeKTlQmlAAuGDMHDGYgxQBlgNFW482M3\/V8ws3e3efHnzzC\/8C7DBlBoD\/bZv9DiMme03FDb0uceA5WELORSdywP0GaIX7k2pOuCWqCGoqEoRgohYQxCaYpw8w3H\/yeQg519\/v7087z5x5fI0jIc1L50VIgW6pFBo+ShEkkxiYVMCTXFUkZzg6QG8hD\/4EbD\/mHL\/Kgw7yqlVEqtSAgSFSuCiXB8dXQZxN7sgLNn3uTVP7\/Cmy\/8kyZaRl6IVHAqWSuhARYw72ulpCB54CaYCZoSkgeQDHKG3IAP8IdX32LvsDKbtezsVWZdsHsE+3M4bGHeCaWDH37\/xxzsHbB1foe9zR1yKSQKicpAK0PrGKdgOqjMRxUmQQphYL3NkNKiHlg2rAZtaxgT2iNDB4ntiyNaBsg9tx2P6SBxeNhbJbdMiFNxQhIFp2qmqxCioI6I4tpn7WOrKxztH5BNaBTGGSYZ1sfBidXCxnFjPBZeO7fF7OCAkltWTl7Fk7\/+Ha+eO2I6qGxsTDhqg2df3EOWVtZCU0bUsJTwZoCo4bnBU8ZSg6qRmwHmiZPr69x+6028fX6X8XDI+soqm5s7HF+eorXS7e1x46mTHG1uErubTFPL6hiSdiTrWBl33Hx6xNa5Ge+e22EyBJeO9TvvY\/+vv8Fv+fQXaZamdBUG4wmeGlQdMSd5QsQQ+rojIVyzNqUTuPqEsb2zx7xJjIdrXNg95LoTa0gpbJWCjtaRMmSPjpyMQapUqxw2ldZWWHs\/bM1eIQ2Fxju6i\/ss3foAXjBm+wdgifnuLiJ7gPZeKHoD3nshkFI5\/9brSK3Uw0OohWyGlEAiOHMm8BC0FkYpM0nOxJ3lJjFKgmthlGF22PLRD01546JSNzumQ5hsvcX7Hrwdv3j2H8zbFvVMLRVvhvDePwQCeEqoKhJB1ECjB6C1Il132eDX9ggXY+ud1xjkAS7C8tKUY9MVPCr7+zusTif86SXn7bND3tk+5NULhwxz0OicT3ZvIMdvvCVqKXTzObU9Io0nSAhlfoimpi8HtcPzAKD33IDWQBEkLnno3otrBELFRHAVXECpZDNUg65rEQobE2d5YGwe9Da3cbjzFPwLLIk8ktJRts4AAAAASUVORK5CYII=\u0022 data-src=\u0022https:\/\/avris.it\/image\/avris-sync_big.png\u0022 alt=\u0022\u0022 class=\u0022border\u0022 width=\u0022900\u0022 height=\u0022600\u0022\u003E\u003C\/span\u003E\n                \n            \u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA simple file synchronisation tool using \u003Ccode\u003Eavris-fs\u003C\/code\u003E.\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EWarning!\u003C\/strong\u003E It\u2019s a \u003Cem\u003Every\u003C\/em\u003E early version! Conflict handling is not implemented,\nso only use it when you can safely assume often synchronisations\/rare conflicts\/versioning on the remote, etc.\u003C\/p\u003E\n\u003Ch3\u003EExample\u003C\/h3\u003E\n\u003Cpre\u003E\u003Ccode class=\u0022hljs javascript border\u0022\u003E\u003Cspan class=\u0022hljs-keyword\u0022\u003Eimport\u003C\/span\u003E {AvrisSync} \u003Cspan class=\u0022hljs-keyword\u0022\u003Efrom\u003C\/span\u003E \u003Cspan class=\u0022hljs-string\u0022\u003E\u0022avris-sync\u0022\u003C\/span\u003E;\n\u003Cspan class=\u0022hljs-keyword\u0022\u003Eimport\u003C\/span\u003E {AvrisFilesystem} \u003Cspan class=\u0022hljs-keyword\u0022\u003Efrom\u003C\/span\u003E \u003Cspan class=\u0022hljs-string\u0022\u003E\u0022avris-fs\/dist\/AvrisFilesystem\u0022\u003C\/span\u003E;\n\u003Cspan class=\u0022hljs-keyword\u0022\u003Eimport\u003C\/span\u003E {LocalAdapter} \u003Cspan class=\u0022hljs-keyword\u0022\u003Efrom\u003C\/span\u003E \u003Cspan class=\u0022hljs-string\u0022\u003E\u0022avris-fs\/dist\/adapter\/LocalAdapter\u0022\u003C\/span\u003E;\n\u003Cspan class=\u0022hljs-keyword\u0022\u003Eimport\u003C\/span\u003E {S3Adapter} \u003Cspan class=\u0022hljs-keyword\u0022\u003Efrom\u003C\/span\u003E \u003Cspan class=\u0022hljs-string\u0022\u003E\u0022avris-fs\/dist\/adapter\/S3Adapter\u0022\u003C\/span\u003E;\n\u003Cspan class=\u0022hljs-keyword\u0022\u003Eimport\u003C\/span\u003E {dump} \u003Cspan class=\u0022hljs-keyword\u0022\u003Efrom\u003C\/span\u003E \u003Cspan class=\u0022hljs-string\u0022\u003E\u0022avris-sync\/dist\/helpers\u0022\u003C\/span\u003E;\n\u003Cspan class=\u0022hljs-keyword\u0022\u003Eimport\u003C\/span\u003E {config \u003Cspan class=\u0022hljs-keyword\u0022\u003Eas\u003C\/span\u003E dotenv} \u003Cspan class=\u0022hljs-keyword\u0022\u003Efrom\u003C\/span\u003E \u003Cspan class=\u0022hljs-string\u0022\u003E\u0027dotenv\u0027\u003C\/span\u003E;\n\ndotenv();\n\n\u003Cspan class=\u0022hljs-keyword\u0022\u003Econst\u003C\/span\u003E \u003Cspan class=\u0022hljs-keyword\u0022\u003Eas\u003C\/span\u003E = \u003Cspan class=\u0022hljs-keyword\u0022\u003Enew\u003C\/span\u003E AvrisSync(\n    \u003Cspan class=\u0022hljs-keyword\u0022\u003Enew\u003C\/span\u003E AvrisFilesystem(\n        \u003Cspan class=\u0022hljs-keyword\u0022\u003Enew\u003C\/span\u003E LocalAdapter(__dirname + \u003Cspan class=\u0022hljs-string\u0022\u003E\u0027\/data\/\u0027\u003C\/span\u003E),\n    ),\n    \u003Cspan class=\u0022hljs-keyword\u0022\u003Enew\u003C\/span\u003E AvrisFilesystem(\n        \u003Cspan class=\u0022hljs-keyword\u0022\u003Enew\u003C\/span\u003E S3Adapter(\n            process.env.AWS_BUCKET,\n            process.env.AWS_KEY,\n            process.env.AWS_SECRET\n        ),\n    ),\n);\n\n\u003Cspan class=\u0022hljs-keyword\u0022\u003Eas\u003C\/span\u003E.sync().then(\u003Cspan class=\u0022hljs-function\u0022\u003E(\u003Cspan class=\u0022hljs-params\u0022\u003Eres\u003C\/span\u003E) =\u0026gt;\u003C\/span\u003E {\n    dump(res);\n});\n\u003C\/code\u003E\u003C\/pre\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["javascript","sync","synchronisation","typescript"],"hasMore":true,"image":"https:\/\/avris.it\/image\/avris-sync_small.png","introLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/avris-sync_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-sync_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022160\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA simple file synchronisation tool using \u003Ccode\u003Eavris-fs\u003C\/code\u003E.\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EWarning!\u003C\/strong\u003E It\u2019s a \u003Cem\u003Every\u003C\/em\u003E early version! Conflict handling is not implemented,\nso only use it when you can safely assume often synchronisations\/rare conflicts\/versioning on the remote, etc.\u003C\/p\u003E","contentLite":"\u003Cfigure\u003E\u003Ca href=\u0022https:\/\/avris.it\/image\/avris-sync_big.png\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Cimg src=\u0022https:\/\/avris.it\/image\/avris-sync_mini.png\u0022 alt=\u0022\u0022 width=\u0022240\u0022 height=\u0022160\u0022 loading=\u0022lazy\u0022\u003E\u003C\/a\u003E\u003C\/figure\u003E\u003C\/p\u003E\n\u003Cp\u003EA simple file synchronisation tool using \u003Ccode\u003Eavris-fs\u003C\/code\u003E.\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EWarning!\u003C\/strong\u003E It\u2019s a \u003Cem\u003Every\u003C\/em\u003E early version! Conflict handling is not implemented,\nso only use it when you can safely assume often synchronisations\/rare conflicts\/versioning on the remote, etc.\u003C\/p\u003E\n\u003Ch3\u003EExample\u003C\/h3\u003E\n\u003Cpre\u003E\u003Ccode class=\u0022language-js\u0022\u003Eimport {AvrisSync} from \u0022avris-sync\u0022;\nimport {AvrisFilesystem} from \u0022avris-fs\/dist\/AvrisFilesystem\u0022;\nimport {LocalAdapter} from \u0022avris-fs\/dist\/adapter\/LocalAdapter\u0022;\nimport {S3Adapter} from \u0022avris-fs\/dist\/adapter\/S3Adapter\u0022;\nimport {dump} from \u0022avris-sync\/dist\/helpers\u0022;\nimport {config as dotenv} from \u0027dotenv\u0027;\n\ndotenv();\n\nconst as = new AvrisSync(\n    new AvrisFilesystem(\n        new LocalAdapter(__dirname + \u0027\/data\/\u0027),\n    ),\n    new AvrisFilesystem(\n        new S3Adapter(\n            process.env.AWS_BUCKET,\n            process.env.AWS_KEY,\n            process.env.AWS_SECRET\n        ),\n    ),\n);\n\nas.sync().then((res) =\u0026gt; {\n    dump(res);\n});\u003C\/code\u003E\u003C\/pre\u003E","words":113,"readTime":null,"lang":"en"}}}}}