initScript.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const html = require('choo/html');
  2. const raw = require('choo/html/raw');
  3. const config = require('./config');
  4. const clientConstants = require('./clientConstants');
  5. let sentry = '';
  6. if (config.sentry_id) {
  7. //eslint-disable-next-line node/no-missing-require
  8. const version = require('../dist/version.json');
  9. sentry = `
  10. var SENTRY_CONFIG = {
  11. dsn: '${config.sentry_id}',
  12. release: '${version.version}',
  13. beforeSend: function (data) {
  14. var hash = window.location.hash;
  15. if (hash) {
  16. return JSON.parse(JSON.stringify(data).replace(new RegExp(hash.slice(1), 'g'), ''));
  17. }
  18. return data;
  19. }
  20. }
  21. `;
  22. }
  23. module.exports = function(state) {
  24. const authConfig = state.authConfig
  25. ? `var AUTH_CONFIG = ${JSON.stringify(state.authConfig)};`
  26. : '';
  27. /* eslint-disable no-useless-escape */
  28. const jsconfig = `
  29. var isIE = /trident\\\/7\.|msie/i.test(navigator.userAgent);
  30. var isUnsupportedPage = /\\\/unsupported/.test(location.pathname);
  31. if (isIE && !isUnsupportedPage) {
  32. window.location.assign('/unsupported/ie');
  33. }
  34. if (
  35. // Firefox < 50
  36. /firefox/i.test(navigator.userAgent) &&
  37. parseInt(navigator.userAgent.match(/firefox\\/*([^\\n\\r]*)\./i)[1], 10) < 50
  38. ) {
  39. window.location.assign('/unsupported/outdated');
  40. }
  41. var LIMITS = ${JSON.stringify(clientConstants.LIMITS)};
  42. var WEB_UI = ${JSON.stringify(clientConstants.WEB_UI)};
  43. var DEFAULTS = ${JSON.stringify(clientConstants.DEFAULTS)};
  44. var PREFS = ${JSON.stringify(state.prefs)};
  45. var downloadMetadata = ${
  46. state.downloadMetadata ? raw(JSON.stringify(state.downloadMetadata)) : '{}'
  47. };
  48. ${authConfig};
  49. ${sentry}
  50. `;
  51. return state.cspNonce
  52. ? html`
  53. <script nonce="${state.cspNonce}">
  54. ${raw(jsconfig)};
  55. </script>
  56. `
  57. : '';
  58. };