main.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /* global DEFAULTS LIMITS PREFS */
  2. import 'core-js';
  3. import 'fast-text-encoding'; // MS Edge support
  4. import 'intl-pluralrules';
  5. import choo from 'choo';
  6. import nanotiming from 'nanotiming';
  7. import routes from './routes';
  8. import getCapabilities from './capabilities';
  9. import controller from './controller';
  10. import dragManager from './dragManager';
  11. import pasteManager from './pasteManager';
  12. import storage from './storage';
  13. import metrics from './metrics';
  14. import experiments from './experiments';
  15. import * as Sentry from '@sentry/browser';
  16. import './main.css';
  17. import User from './user';
  18. import { getTranslator } from './locale';
  19. import Archive from './archive';
  20. import { setTranslate, locale } from './utils';
  21. if (navigator.doNotTrack !== '1' && window.SENTRY_CONFIG) {
  22. Sentry.init(window.SENTRY_CONFIG);
  23. }
  24. if (process.env.NODE_ENV === 'production') {
  25. nanotiming.disabled = true;
  26. }
  27. (async function start() {
  28. const capabilities = await getCapabilities();
  29. if (
  30. !capabilities.crypto &&
  31. window.location.pathname !== '/unsupported/crypto'
  32. ) {
  33. return window.location.assign('/unsupported/crypto');
  34. }
  35. if (capabilities.serviceWorker) {
  36. try {
  37. await navigator.serviceWorker.register('/serviceWorker.js');
  38. await navigator.serviceWorker.ready;
  39. } catch (e) {
  40. // continue but disable streaming downloads
  41. capabilities.streamDownload = false;
  42. }
  43. }
  44. const translate = await getTranslator(locale());
  45. setTranslate(translate);
  46. // eslint-disable-next-line require-atomic-updates
  47. window.initialState = {
  48. LIMITS,
  49. DEFAULTS,
  50. PREFS,
  51. archive: new Archive([], DEFAULTS.EXPIRE_SECONDS),
  52. capabilities,
  53. translate,
  54. storage,
  55. sentry: Sentry,
  56. user: new User(storage, LIMITS, window.AUTH_CONFIG),
  57. transfer: null,
  58. fileInfo: null,
  59. locale: locale()
  60. };
  61. const app = routes(choo({ hash: true }));
  62. // eslint-disable-next-line require-atomic-updates
  63. window.app = app;
  64. app.use(experiments);
  65. app.use(metrics);
  66. app.use(controller);
  67. app.use(dragManager);
  68. app.use(pasteManager);
  69. app.mount('body');
  70. })();