PersistorFactory.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. const Logger = require('@overleaf/logger')
  2. const { SettingsError } = require('./Errors')
  3. const GcsPersistor = require('./GcsPersistor')
  4. const S3Persistor = require('./S3Persistor')
  5. const FSPersistor = require('./FSPersistor')
  6. const MigrationPersistor = require('./MigrationPersistor')
  7. function getPersistor(backend, settings) {
  8. switch (backend) {
  9. case 'aws-sdk':
  10. case 's3':
  11. return new S3Persistor(settings.s3)
  12. case 'fs':
  13. return new FSPersistor({
  14. useSubdirectories: settings.useSubdirectories,
  15. paths: settings.paths,
  16. })
  17. case 'gcs':
  18. return new GcsPersistor(settings.gcs)
  19. default:
  20. throw new SettingsError('unknown backend', { backend })
  21. }
  22. }
  23. module.exports = function create(settings) {
  24. Logger.info(
  25. {
  26. backend: settings.backend,
  27. fallback: settings.fallback && settings.fallback.backend,
  28. },
  29. 'Loading backend'
  30. )
  31. if (!settings.backend) {
  32. throw new SettingsError('no backend specified - config incomplete')
  33. }
  34. let persistor = getPersistor(settings.backend, settings)
  35. if (settings.fallback && settings.fallback.backend) {
  36. const primary = persistor
  37. const fallback = getPersistor(settings.fallback.backend, settings)
  38. persistor = new MigrationPersistor(primary, fallback, settings.fallback)
  39. }
  40. return persistor
  41. }