diff --git a/.eslintrc.js b/.eslintrc.js index cea73e8f158..c97048ff0e1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,11 +20,12 @@ module.exports = { } }, { - // JS files served only to Firefox browsers. + // JS files where we support native modern JS. files: [ 'media/js/firefox/welcome/**/*.js', 'media/js/firefox/whatsnew/**/*.js', 'media/js/firefox/firstrun/**/*.js', + 'tests/unit/**/*.js' ], env: { 'es2017': true diff --git a/package.json b/package.json index ab9c2a1db63..07ab123580a 100644 --- a/package.json +++ b/package.json @@ -36,14 +36,14 @@ "browser-sync-webpack-plugin": "^2.2.2", "concurrently": "^6.0.1", "eslint-plugin-json": "^2.1.1", - "jasmine-core": "3.4.0", + "jasmine-core": "3.9.0", "karma": "^6.3.2", "karma-chrome-launcher": "3.1.0", - "karma-firefox-launcher": "1.2.0", - "karma-jasmine": "2.0.1", + "karma-firefox-launcher": "2.1.1", + "karma-jasmine": "4.0.1", "karma-sourcemap-loader": "^0.3.8", "karma-webpack": "^5.0.0", - "sinon": "7.4.1", + "sinon": "11.1.2", "svgo": "^1.2.2", "tinypng-cli": "^0.0.7" }, diff --git a/tests/unit/spec/base/core-datalayer-page-id.js b/tests/unit/spec/base/core-datalayer-page-id.js index d64d66d500c..b775a64d50d 100644 --- a/tests/unit/spec/base/core-datalayer-page-id.js +++ b/tests/unit/spec/base/core-datalayer-page-id.js @@ -16,51 +16,50 @@ describe('core-datalayer-page-id.js', function() { window.Mozilla.Cookies.removeItem = sinon.stub(); }); - describe('getPageId', function(){ - var html = document.documentElement; + describe('getPageId', function() { + const html = document.documentElement; afterEach(function() { html.removeAttribute('data-gtm-page-id'); }); - it('will grab data-gtm-page-id value if present on element', function(){ + it('will grab data-gtm-page-id value if present on element', function() { html.setAttribute('data-gtm-page-id', 'test'); - expect(Mozilla.Analytics.getPageId('/en-US/firefox/new/')).toBe('test'); }); - it('will grab the pathname minus the first directory if no data-gtm-page-id value is present on element', function(){ + it('will grab the pathname minus the first directory if no data-gtm-page-id value is present on element', function() { expect(Mozilla.Analytics.getPageId('/en-US/firefox/new/')).toBe('/firefox/new/'); }); - it('will return the full page path when no data-gtm-page-id value is present and no locale is in page path', function(){ + it('will return the full page path when no data-gtm-page-id value is present and no locale is in page path', function() { expect(Mozilla.Analytics.getPageId('/firefox/new/')).toBe('/firefox/new/'); }); }); - describe('getTrafficCopReferrer', function(){ - it('should return null if the referrer does not exist', function(){ + describe('getTrafficCopReferrer', function() { + it('should return null if the referrer does not exist', function() { spyOn(Mozilla.Cookies, 'hasItem').and.returnValue(false); expect(Mozilla.Analytics.getTrafficCopReferrer()).toBe(undefined); }); - it('should return the referrer if one exists', function(){ + it('should return the referrer if one exists', function() { spyOn(Mozilla.Cookies, 'hasItem').and.returnValue(true); spyOn(Mozilla.Cookies, 'getItem').and.returnValue('direct'); expect(Mozilla.Analytics.getTrafficCopReferrer()).toBe('direct'); }); }); - describe('buildDataObject', function(){ - it('should contain customReferrer if found in cookie', function(){ + describe('buildDataObject', function() { + it('should contain customReferrer if found in cookie', function() { spyOn(Mozilla.Analytics, 'getTrafficCopReferrer').and.returnValue('http://www.google.com'); - var obj = Mozilla.Analytics.buildDataObject(); + const obj = Mozilla.Analytics.buildDataObject(); expect(obj.customReferrer).toBeDefined(); }); - it('should not contain customReferrer if not found in cookie', function(){ + it('should not contain customReferrer if not found in cookie', function() { spyOn(Mozilla.Analytics, 'getTrafficCopReferrer').and.returnValue(undefined); - var obj = Mozilla.Analytics.buildDataObject(); + const obj = Mozilla.Analytics.buildDataObject(); expect(obj.customReferrer).not.toBeDefined(); }); }); diff --git a/tests/unit/spec/base/core-datalayer.js b/tests/unit/spec/base/core-datalayer.js index 25ded1732de..754b61f3e39 100644 --- a/tests/unit/spec/base/core-datalayer.js +++ b/tests/unit/spec/base/core-datalayer.js @@ -11,7 +11,7 @@ describe('core-datalayer.js', function() { describe('pageHasDownload', function() { it('will return "true" when download button is present on page.', function() { - var downloadMarkup = ''; + const downloadMarkup = ''; document.body.insertAdjacentHTML('beforeend', downloadMarkup); expect(Mozilla.Analytics.pageHasDownload()).toBe('true'); @@ -28,22 +28,22 @@ describe('core-datalayer.js', function() { describe('pageHasVideo', function() { it('will return "true" when HTML5 video is present on page.', function() { - var videoMarkup = ''; + const videoMarkup = ''; document.body.insertAdjacentHTML('beforeend', videoMarkup); expect(Mozilla.Analytics.pageHasVideo()).toBe('true'); - var content = document.getElementById('video-content'); + const content = document.getElementById('video-content'); content.parentNode.removeChild(content); }); it('will return "true" when YouTube iframe video is present on page.', function() { - var videoMarkup = ''; + const videoMarkup = ''; document.body.insertAdjacentHTML('beforeend', videoMarkup); expect(Mozilla.Analytics.pageHasVideo()).toBe('true'); - var content = document.getElementById('video-content'); + const content = document.getElementById('video-content'); content.parentNode.removeChild(content); }); @@ -76,7 +76,6 @@ describe('core-datalayer.js', function() { it('will return the Firefox version from the data-latest-firefox attribute from the html element if present', function() { document.getElementsByTagName('html')[0].setAttribute('data-latest-firefox', '48.0'); - expect(Mozilla.Analytics.getLatestFxVersion()).toBe('48.0'); }); @@ -87,8 +86,8 @@ describe('core-datalayer.js', function() { describe('isWin10S', function() { - var edgeUA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931'; - var chromeUA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'; + const edgeUA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931'; + const chromeUA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'; beforeEach(function () { window.external = sinon.stub(); @@ -97,32 +96,32 @@ describe('core-datalayer.js', function() { it('should return true if Windows 10 has S mode enabled', function() { spyOn(window.external, 'getHostEnvironmentValue').and.returnValue('{"os-mode": "2"}'); - var result = Mozilla.Analytics.isWin10S(edgeUA); + const result = Mozilla.Analytics.isWin10S(edgeUA); expect(window.external.getHostEnvironmentValue).toHaveBeenCalledWith('os-mode'); expect(result).toBeTruthy(); }); it('should return false if Windows 10 is unlocked', function() { spyOn(window.external, 'getHostEnvironmentValue').and.returnValue('{"os-mode": "0"}'); - var result = Mozilla.Analytics.isWin10S(edgeUA); + const result = Mozilla.Analytics.isWin10S(edgeUA); expect(result).toBeFalsy(); }); it('should return false if API is not supported in Edge', function() { spyOn(window.external, 'getHostEnvironmentValue').and.returnValue(new TypeError('window.external.getHostEnvironmentValue is not a function')); - var result = Mozilla.Analytics.isWin10S(edgeUA); + const result = Mozilla.Analytics.isWin10S(edgeUA); expect(result).toBeFalsy(); }); it('should return false for other browsers', function() { - var result = Mozilla.Analytics.isWin10S(chromeUA); + const result = Mozilla.Analytics.isWin10S(chromeUA); expect(result).toBeFalsy(); }); }); describe('getAMOExperiment', function() { it('should return true when experiment and variation params are well formatted', function() { - var params = { + const params = { 'experiment': '20210708_amo_experiment_name', 'variation': 'variation_1_name' }; @@ -130,7 +129,7 @@ describe('core-datalayer.js', function() { }); it('should return falsy when experiment and variation params are not specific to amo', function() { - var params = { + const params = { 'experiment': 'some_other_experiment', 'variation': 'variation_1_name' }; @@ -138,13 +137,13 @@ describe('core-datalayer.js', function() { }); it('should return falsy when experiment and variation params contain dangerous characters', function() { - var params = { + const params = { 'experiment': '20210708_amo_">

hello

', 'variation': '' }; expect(Mozilla.Analytics.getAMOExperiment(params)).toBeFalsy(); - var params2 = { + const params2 = { 'experiment': '20210708_amo_%22%3E%3Ch1%3Ehello%3C%2Fh1%3E', 'variation': '%3Cscript%3Ealert%28%22test%22%29%3B%3C%2Fscript%3E' }; @@ -152,13 +151,13 @@ describe('core-datalayer.js', function() { }); it('should return falsy if parameters values are more than 50 chars', function() { - var params = { + const params = { 'experiment': '20210708_amo_experiment_name', 'variation': 'a_very_very_very_very_very_long_experiment_variation_name_much_much_much_more_than_50_chars' }; expect(Mozilla.Analytics.getAMOExperiment(params)).toBeFalsy(); - var params2 = { + const params2 = { 'experiment': '20210708_amo_a_very_very_very_long_experiment_name_much_much_much_much_more_than_50_chars', 'variation': 'variation_1_name' }; @@ -172,7 +171,7 @@ describe('core-datalayer.js', function() { it('will correctly format FxA data returned from UITour', function() { // Current Firefox Desktop, not logged in - var input1 = { + const input1 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -187,13 +186,13 @@ describe('core-datalayer.js', function() { } }; - var output1 = { + const output1 = { FxALogin: false, FxASegment: 'Not logged in', }; // Current Firefox Desktop, logged in, 1 desktop configured - var input2 = { + const input2 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -208,7 +207,7 @@ describe('core-datalayer.js', function() { } }; - var output2 = { + const output2 = { FxALogin: true, FxAMultiDesktopSync: false, FxAMobileSync: false, @@ -216,7 +215,7 @@ describe('core-datalayer.js', function() { }; // Current Firefox Desktop, logged in, 2 desktops configured - var input3 = { + const input3 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -231,7 +230,7 @@ describe('core-datalayer.js', function() { } }; - var output3 = { + const output3 = { FxALogin: true, FxAMultiDesktopSync: true, FxAMobileSync: false, @@ -239,7 +238,7 @@ describe('core-datalayer.js', function() { }; // Current Firefox Desktop, logged in, 1 desktops 1 mobile configured - var input4 = { + const input4 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -254,7 +253,7 @@ describe('core-datalayer.js', function() { } }; - var output4 = { + const output4 = { FxALogin: true, FxAMultiDesktopSync: false, FxAMobileSync: true, @@ -262,7 +261,7 @@ describe('core-datalayer.js', function() { }; // Current Firefox Desktop, logged in, 2 desktops 1 mobile configured - var input5 = { + const input5 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -277,7 +276,7 @@ describe('core-datalayer.js', function() { } }; - var output5 = { + const output5 = { FxALogin: true, FxAMultiDesktopSync: true, FxAMobileSync: true, @@ -285,7 +284,7 @@ describe('core-datalayer.js', function() { }; // Firefox Desktop < 50, logged in to FxA - var input6 = { + const input6 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -300,7 +299,7 @@ describe('core-datalayer.js', function() { } }; - var output6 = { + const output6 = { FxALogin: true, FxAMobileSync: 'unknown', FxAMultiDesktopSync: 'unknown', @@ -308,7 +307,7 @@ describe('core-datalayer.js', function() { }; // Firefox Desktop < 50, logged out - var input7 = { + const input7 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -323,13 +322,13 @@ describe('core-datalayer.js', function() { } }; - var output7 = { + const output7 = { FxALogin: false, FxASegment: 'Not logged in' }; // Firefox Desktop < FxALastSupported, logged in - var input8 = { + const input8 = { 'firefox': true, 'legacy': true, 'mobile': false, @@ -344,7 +343,7 @@ describe('core-datalayer.js', function() { } }; - var output8 = { + const output8 = { FxALogin: true, FxAMobileSync: 'unknown', FxAMultiDesktopSync: 'unknown', @@ -352,7 +351,7 @@ describe('core-datalayer.js', function() { }; // Firefox Desktop < FxALastSupported, logged out - var input9 = { + const input9 = { 'firefox': true, 'legacy': true, 'mobile': false, @@ -367,13 +366,13 @@ describe('core-datalayer.js', function() { } }; - var output9 = { + const output9 = { FxALogin: 'unknown', FxASegment: 'Legacy Firefox', }; // Firefox Desktop < 29 - var input10 = { + const input10 = { 'firefox': true, 'legacy': true, 'mobile': false, @@ -388,13 +387,13 @@ describe('core-datalayer.js', function() { } }; - var output10 = { + const output10 = { FxALogin: 'unknown', FxASegment: 'Legacy Firefox' }; // Firefox Android - var input11 = { + const input11 = { 'firefox': true, 'legacy': false, 'mobile': 'android', @@ -409,12 +408,12 @@ describe('core-datalayer.js', function() { } }; - var output11 = { + const output11 = { FxASegment: 'Firefox Mobile' }; // Firefox iOS - var input12 = { + const input12 = { 'firefox': true, 'legacy': false, 'mobile': 'ios', @@ -429,12 +428,12 @@ describe('core-datalayer.js', function() { } }; - var output12 = { + const output12 = { FxASegment: 'Firefox Mobile' }; // Not Firefox - var input13 = { + const input13 = { 'firefox': false, 'legacy': false, 'mobile': false, @@ -449,12 +448,12 @@ describe('core-datalayer.js', function() { } }; - var output13 = { + const output13 = { FxASegment: 'Not Firefox' }; // browserServices.sync is unexpectedly undefined (issue 10118). - var input14 = { + const input14 = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -464,7 +463,7 @@ describe('core-datalayer.js', function() { } }; - var output14 = { + const output14 = { FxALogin: true, FxAMultiDesktopSync: 'unknown', FxAMobileSync: 'unknown', @@ -492,14 +491,14 @@ describe('core-datalayer.js', function() { describe('updateDataLayerPush', function() { beforeEach(function() { - var link = '
'; + const link = ''; document.body.insertAdjacentHTML('beforeend', link); window.dataLayer = []; }); afterEach(function() { - var content = document.getElementById('link'); + const content = document.getElementById('link'); content.parentNode.removeChild(content); delete window.dataLayer; }); @@ -538,7 +537,7 @@ describe('core-datalayer.js', function() { }); it('will remove host and locale in newClickHref when clicked link\'s href value matches the page\'s', function() { - var link = document.getElementById('link'); + const link = document.getElementById('link'); Mozilla.Analytics.updateDataLayerPush('www.mozilla.org'); // Bug 1278426 @@ -553,7 +552,7 @@ describe('core-datalayer.js', function() { }); it('will remove host and non-en-US locale', function() { - var link = document.getElementById('link'); + const link = document.getElementById('link'); Mozilla.Analytics.updateDataLayerPush('www.mozilla.org'); link.href = 'https://www.mozilla.org:443/de/firefox/new/'; @@ -567,7 +566,7 @@ describe('core-datalayer.js', function() { }); it('will not remove locale if absent from the URL', function() { - var link = document.getElementById('link'); + const link = document.getElementById('link'); Mozilla.Analytics.updateDataLayerPush('www.mozilla.org'); link.href = 'https://www.mozilla.org/firefox/new/'; diff --git a/tests/unit/spec/base/dnt-helper.js b/tests/unit/spec/base/dnt-helper.js index c449acb42ae..6be58b53062 100644 --- a/tests/unit/spec/base/dnt-helper.js +++ b/tests/unit/spec/base/dnt-helper.js @@ -10,75 +10,75 @@ describe('dnt-helper.js', function() { describe('Mozilla.dntEnabled', function () { it('should return true for Fx41 on Mac with DNT set to true', function () { - var dnt = 1; - var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko/20100101 Firefox/41.0'; + const dnt = 1; + const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko/20100101 Firefox/41.0'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(true); }); it('should return false for Fx41 on Win7 with DNT set to false', function () { - var dnt = 0; - var ua = 'Mozilla/5.0 (Windows NT 6.1; rv:41.0) Gecko/20100101 Firefox/41.0'; + const dnt = 0; + const ua = 'Mozilla/5.0 (Windows NT 6.1; rv:41.0) Gecko/20100101 Firefox/41.0'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); // this test is required because of bug 887703 it('should return false for Fx28 on Mac with DNT set to true', function () { - var dnt = 1; - var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:28.0) Gecko/20100101 Firefox/28.0'; + const dnt = 1; + const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:28.0) Gecko/20100101 Firefox/28.0'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); it('should return false for Fx 41 with DNT set to false', function () { - var dnt = 0; - var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko/20100101 Firefox/41.0'; + const dnt = 0; + const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko/20100101 Firefox/41.0'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); it('should return false for IE on Win8 with DNT set to true', function () { - var dnt = 1; - var ua = 'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)'; + const dnt = 1; + const ua = 'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); it('should return true for Edge on Win10 with DNT set to true', function () { - var dnt = 1; - var ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240'; + const dnt = 1; + const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(true); }); it('should return false for Edge on Win10 with DNT set to false', function () { - var dnt = 0; - var ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240'; + const dnt = 0; + const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); it('should return false for IE11 on Win10 with DNT set to false', function () { - var dnt = 0; - var ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'; + const dnt = 0; + const ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); it('should return true for IE11 on Win10 with DNT set to true', function () { - var dnt = 1; - var ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'; + const dnt = 1; + const ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(true); }); it('should return false for IE11 on Win8.1 with DNT set to true', function () { - var dnt = 1; - var ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; + const dnt = 1; + const ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); it('should return false for IE7 on Windows Vista with DNT set to undefined', function () { - var dnt; - var ua = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)'; + const dnt = undefined; + const ua = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); it('should return false for Chrome on Mac with DNT set to false', function () { - var dnt = 0; - var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36'; + const dnt = 0; + const ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36'; expect(Mozilla.dntEnabled(dnt, ua)).toBe(false); }); diff --git a/tests/unit/spec/base/fxa-utm-referral.js b/tests/unit/spec/base/fxa-utm-referral.js index b60994bccce..932e519cb7f 100644 --- a/tests/unit/spec/base/fxa-utm-referral.js +++ b/tests/unit/spec/base/fxa-utm-referral.js @@ -12,9 +12,9 @@ describe('fxa-utm-referral.js', function() { describe('getHostName', function() { it('should return a hostname as expected', function() { - var url1 = 'https://monitor.firefox.com/oauth/init?form_type=button&entrypoint=mozilla.org-firefox-accounts'; - var url2 = 'https://accounts.firefox.com/?utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; - var url3 = 'https://getpocket.com/ff_signup?s=ffwelcome2&form_type=button&entrypoint=mozilla.org-firefox-welcome-2&utm_source=source-one&utm_campaign=campaign-one'; + const url1 = 'https://monitor.firefox.com/oauth/init?form_type=button&entrypoint=mozilla.org-firefox-accounts'; + const url2 = 'https://accounts.firefox.com/?utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; + const url3 = 'https://getpocket.com/ff_signup?s=ffwelcome2&form_type=button&entrypoint=mozilla.org-firefox-welcome-2&utm_source=source-one&utm_campaign=campaign-one'; expect(Mozilla.UtmUrl.getHostName(url1)).toEqual('https://monitor.firefox.com/'); expect(Mozilla.UtmUrl.getHostName(url2)).toEqual('https://accounts.firefox.com/'); @@ -22,14 +22,14 @@ describe('fxa-utm-referral.js', function() { }); it('should return null if no match is found', function() { - var url = 'thedude'; + const url = 'thedude'; expect(Mozilla.UtmUrl.getHostName(url)).toBeNull(); }); }); describe('hasUtmParams', function() { it('should return true when utm params are present', function() { - var data = { + const data = { 'utm_source': 'vpn-client', 'utm_content': 'download-first-experiment', 'utm_medium': 'referral', @@ -41,7 +41,7 @@ describe('fxa-utm-referral.js', function() { }); it('should return false when utm params are not present', function() { - var data = { + const data = { 'entrypoint_experiment': 'test-id', 'entrypoint_variation': 'test-variation' }; @@ -50,11 +50,11 @@ describe('fxa-utm-referral.js', function() { }); it('should return false when data is not a valid object', function() { - var data1 = undefined; + const data1 = undefined; expect(Mozilla.UtmUrl.hasUtmParams(data1)).toBeFalsy(); - var data2 = null; + const data2 = null; expect(Mozilla.UtmUrl.hasUtmParams(data2)).toBeFalsy(); - var data3 = {}; + const data3 = {}; expect(Mozilla.UtmUrl.hasUtmParams(data3)).toBeFalsy(); }); }); @@ -62,7 +62,7 @@ describe('fxa-utm-referral.js', function() { describe('getAttributionData', function () { it('should return a valid object unchanged', function () { - var validObj = { + const validObj = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -70,7 +70,7 @@ describe('fxa-utm-referral.js', function() { 'utm_campaign': 'F100_4242_otherstuff_in_here' }; - var validData = { + const validData = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -82,7 +82,7 @@ describe('fxa-utm-referral.js', function() { }); it('should return a additional entrypoint params if present', function () { - var validObj = { + const validObj = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -92,7 +92,7 @@ describe('fxa-utm-referral.js', function() { 'entrypoint_variation': 'test-variation' }; - var validData = { + const validData = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -106,12 +106,12 @@ describe('fxa-utm-referral.js', function() { }); it('should return entrypoint params if not utms are present', function () { - var validObj = { + const validObj = { 'entrypoint_experiment': 'test-id', 'entrypoint_variation': 'test-variation' }; - var validData = { + const validData = { 'entrypoint_experiment': 'test-id', 'entrypoint_variation': 'test-variation' }; @@ -120,7 +120,7 @@ describe('fxa-utm-referral.js', function() { }); it('should return FxA flow params if present together with experiment entrypoint params', function() { - var validObj = { + const validObj = { 'utm_source': 'vpn-client', 'utm_content': 'download-first-experiment', 'utm_medium': 'referral', @@ -133,7 +133,7 @@ describe('fxa-utm-referral.js', function() { 'flow_begin_time': 1234567899 }; - var validData = { + const validData = { 'utm_source': 'vpn-client', 'utm_content': 'download-first-experiment', 'utm_medium': 'referral', @@ -150,7 +150,7 @@ describe('fxa-utm-referral.js', function() { }); it('should not return FxA flow params if experiment entrypoint params are also not present', function() { - var validObj = { + const validObj = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -161,7 +161,7 @@ describe('fxa-utm-referral.js', function() { 'flow_begin_time': 1234567899 }; - var validData = { + const validData = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -173,11 +173,11 @@ describe('fxa-utm-referral.js', function() { }); it('should return entrypoint and utm params if supported source attribute is present', function() { - var validObj1 = { + const validObj1 = { 'source': 'whatsnew88' }; - var validData1 = { + const validData1 = { 'entrypoint': 'www.mozilla.org-whatsnew', 'utm_source': 'www.mozilla.org-whatsnew', 'utm_campaign': 'whatsnew88' @@ -185,11 +185,11 @@ describe('fxa-utm-referral.js', function() { expect(Mozilla.UtmUrl.getAttributionData(validObj1)).toEqual(validData1); - var validObj2 = { + const validObj2 = { 'source': 'welcome9' }; - var validData2 = { + const validData2 = { 'entrypoint': 'www.mozilla.org-welcome', 'utm_source': 'www.mozilla.org-welcome', 'utm_campaign': 'welcome9' @@ -199,7 +199,7 @@ describe('fxa-utm-referral.js', function() { }); it('should return null if source attribute is non-specific', function() { - var validObj = { + const validObj = { 'source': 'the-dude' }; @@ -207,13 +207,13 @@ describe('fxa-utm-referral.js', function() { }); it('should return an object without any danagerous params', function () { - var dangerousSource = { + const dangerousSource = { 'utm_source': 'www.mozilla.org', 'utm_campaign': 'rel-esr', 'utm_content': '', }; - var safeSource = { + const safeSource = { 'utm_source': 'www.mozilla.org', 'utm_campaign': 'rel-esr' }; @@ -222,7 +222,7 @@ describe('fxa-utm-referral.js', function() { }); it('should not return an object if all params are unsafe', function () { - var dangerousData = { + const dangerousData = { 'utm_source': '%5C', 'utm_content': '%3C', 'utm_medium': '%24', @@ -234,7 +234,7 @@ describe('fxa-utm-referral.js', function() { }); it('should not return an object if utm_source is missing', function () { - var data = { + const data = { 'utm_content': 'rel-esr', 'utm_medium': 'referral', 'utm_term': 4242, @@ -245,7 +245,7 @@ describe('fxa-utm-referral.js', function() { }); it('should not return an object if utm_campaign is missing', function () { - var data = { + const data = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -256,14 +256,14 @@ describe('fxa-utm-referral.js', function() { }); it('should not strip allowed special characters', function () { - var specialData = { + const specialData = { 'utm_source': 'blog.mozilla.org', 'utm_campaign': 'my-experiment', 'utm_medium': '%25', 'utm_term': '%2F' }; - var specialSource = { + const specialSource = { 'utm_source': 'blog.mozilla.org', 'utm_campaign': 'my-experiment', 'utm_medium': '%', @@ -274,12 +274,12 @@ describe('fxa-utm-referral.js', function() { }); it('should decode URL components', function () { - var encodedData = { + const encodedData = { 'utm_source': '%25', 'utm_campaign': '%2F' }; - var encodedSource = { + const encodedSource = { 'utm_source': '%', 'utm_campaign': '/' }; @@ -292,7 +292,7 @@ describe('fxa-utm-referral.js', function() { describe('appendToDownloadURL', function () { it('should append a new query string if there isn\'t one', function () { - var data = { + const data = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -300,23 +300,23 @@ describe('fxa-utm-referral.js', function() { 'utm_campaign': 'F100_4242_otherstuff_in_here' }; - var url = 'https://accounts.firefox.com/'; + const url = 'https://accounts.firefox.com/'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com/?utm_source=desktop-snippet&utm_content=rel-esr&utm_medium=referral&utm_term=4242&utm_campaign=F100_4242_otherstuff_in_here'); }); it('should add UTM params without overwriting other query string params', function () { - var data = { + const data = { 'utm_source': 'test-source' }; - var url = 'https://accounts.firefox.com/?spice=pumpkin'; + const url = 'https://accounts.firefox.com/?spice=pumpkin'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com/?spice=pumpkin&utm_source=test-source'); }); it('should over-write existing UTM params', function () { - var data = { + const data = { 'utm_source': 'source-two', 'utm_content': 'content-two', 'utm_medium': 'medium-two', @@ -324,13 +324,13 @@ describe('fxa-utm-referral.js', function() { 'utm_campaign': 'campaign-two' }; - var url = 'https://accounts.firefox.com/?utm_medium=medium-one&utm_term=term-one&utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; + const url = 'https://accounts.firefox.com/?utm_medium=medium-one&utm_term=term-one&utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com/?utm_source=source-two&utm_content=content-two&utm_medium=medium-two&utm_term=term-two&utm_campaign=campaign-two'); }); it('should not leave out new params if there are existing params to over write', function () { - var data = { + const data = { 'utm_source': 'source-two', 'utm_content': 'content-two', 'utm_medium': 'medium-two', @@ -338,34 +338,34 @@ describe('fxa-utm-referral.js', function() { 'utm_campaign': 'campaign-two' }; - var url = 'https://accounts.firefox.com/?utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; + const url = 'https://accounts.firefox.com/?utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com/?utm_source=source-two&utm_content=content-two&utm_medium=medium-two&utm_term=term-two&utm_campaign=campaign-two'); }); it('should remove UTM params that are no longer present in the new referral data', function() { - var data = { + const data = { 'utm_source': 'source-two', 'utm_campaign': 'campaign-two' }; - var url = 'https://accounts.firefox.com/?utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; + const url = 'https://accounts.firefox.com/?utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com/?utm_source=source-two&utm_campaign=campaign-two'); }); it('should not override port, path, or file name', function () { - var data = { + const data = { 'utm_source': 'test-source' }; - var url = 'https://accounts.firefox.com:8000/grande/nofat.html?spice=pumpkin'; + const url = 'https://accounts.firefox.com:8000/grande/nofat.html?spice=pumpkin'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com:8000/grande/nofat.html?spice=pumpkin&utm_source=test-source'); }); it('should add additional entrypoint parameters if present', function() { - var data = { + const data = { 'utm_source': 'desktop-snippet', 'utm_content': 'rel-esr', 'utm_medium': 'referral', @@ -375,18 +375,18 @@ describe('fxa-utm-referral.js', function() { 'entrypoint_variation': 'test-variation' }; - var url = 'https://accounts.firefox.com/'; + const url = 'https://accounts.firefox.com/'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com/?utm_source=desktop-snippet&utm_content=rel-esr&utm_medium=referral&utm_term=4242&utm_campaign=F100_4242_otherstuff_in_here&entrypoint_experiment=test-id&entrypoint_variation=test-variation'); }); it('should not wipe out existing utms if only enytrpoint params are present', function() { - var data = { + const data = { 'entrypoint_experiment': 'test-id', 'entrypoint_variation': 'test-variation' }; - var url = 'https://accounts.firefox.com/?utm_medium=medium-one&utm_term=term-one&utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; + const url = 'https://accounts.firefox.com/?utm_medium=medium-one&utm_term=term-one&utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one'; expect(Mozilla.UtmUrl.appendToDownloadURL(url, data)).toEqual('https://accounts.firefox.com/?utm_medium=medium-one&utm_term=term-one&utm_campaign=campaign-one&utm_source=source-one&utm_content=content-one&entrypoint_experiment=test-id&entrypoint_variation=test-variation'); }); @@ -454,13 +454,13 @@ describe('fxa-utm-referral.js', function() { spyOn(Mozilla, 'dntEnabled').and.returnValue(false); // link to change - var links = - ''; + const links = + ``; document.body.insertAdjacentHTML('beforeend', links); }); @@ -471,7 +471,7 @@ describe('fxa-utm-referral.js', function() { }); it('should update the href of links with class js-fxa-cta-link', function () { - var data = { + const data = { 'utm_source': 'source-two', 'utm_content': 'content-two', 'utm_medium': 'medium-two', @@ -481,12 +481,12 @@ describe('fxa-utm-referral.js', function() { Mozilla.UtmUrl.init(data); - var expected = document.getElementById('test-expected'); - var expectedHref = expected.getAttribute('href'); - var secondExpected = document.getElementById('test-second-expected'); - var secondExpectedHref = secondExpected.getAttribute('href'); - var thirdExpected = document.getElementById('test-third-expected'); - var thirdExpectedHref = thirdExpected.getAttribute('href'); + const expected = document.getElementById('test-expected'); + const expectedHref = expected.getAttribute('href'); + const secondExpected = document.getElementById('test-second-expected'); + const secondExpectedHref = secondExpected.getAttribute('href'); + const thirdExpected = document.getElementById('test-third-expected'); + const thirdExpectedHref = thirdExpected.getAttribute('href'); expect(expectedHref).toEqual('https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=mozilla.org-accounts_page&utm_source=source-two&utm_campaign=campaign-two&utm_content=content-two&utm_term=term-two&utm_medium=medium-two'); expect(secondExpectedHref).toEqual('https://monitor.firefox.com/oauth/init?form_type=button&entrypoint=mozilla.org-firefox-accounts&utm_source=source-two&utm_campaign=campaign-two&utm_content=content-two&utm_term=term-two&utm_medium=medium-two'); @@ -494,7 +494,7 @@ describe('fxa-utm-referral.js', function() { }); it('should update the data-mozilla-online attribute of links with class js-fxa-cta-link', function () { - var data = { + const data = { 'utm_source': 'source-two', 'utm_content': 'content-two', 'utm_medium': 'medium-two', @@ -504,27 +504,27 @@ describe('fxa-utm-referral.js', function() { Mozilla.UtmUrl.init(data); - var expected = document.getElementById('test-expected'); - var expectedOnline = expected.getAttribute('data-mozillaonline-link'); + const expected = document.getElementById('test-expected'); + const expectedOnline = expected.getAttribute('data-mozillaonline-link'); expect(expectedOnline).toEqual('https://accounts.firefox.com.cn/?service=sync&action=email&context=fx_desktop_v3&entrypoint=mozilla.org-accounts_page&utm_source=source-two&utm_campaign=campaign-two&utm_content=content-two&utm_term=term-two&utm_medium=medium-two'); }); it('should not make changes if there are no UTM params', function () { - var data = {}; + const data = {}; Mozilla.UtmUrl.init(data); - var expected = document.getElementById('test-expected'); - var expectedHref = expected.getAttribute('href'); - var expectedOnline = expected.getAttribute('data-mozillaonline-link'); + const expected = document.getElementById('test-expected'); + const expectedHref = expected.getAttribute('href'); + const expectedOnline = expected.getAttribute('data-mozillaonline-link'); expect(expectedHref).toEqual('https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=mozilla.org-accounts_page&utm_content=accounts-page-top-cta&utm_source=accounts-page&utm_medium=referral&utm_campaign=fxa-benefits-page'); expect(expectedOnline).toEqual('https://accounts.firefox.com.cn/?service=sync&action=email&context=fx_desktop_v3&entrypoint=mozilla.org-accounts_page&utm_content=accounts-page-top-cta&utm_source=accounts-page&utm_medium=referral&utm_campaign=fxa-benefits-page'); }); it('should not make changes if the link is not in the FxA referral allowedList', function () { - var data = { + const data = { 'utm_source': 'source-two', 'utm_content': 'content-two', 'utm_medium': 'medium-two', @@ -534,61 +534,61 @@ describe('fxa-utm-referral.js', function() { Mozilla.UtmUrl.init(data); - var unexpected = document.getElementById('test-not-accounts'); - var unexpectedHref = unexpected.getAttribute('href'); - var unexpectedOnline = unexpected.getAttribute('data-mozillaonline-link'); + const unexpected = document.getElementById('test-not-accounts'); + const unexpectedHref = unexpected.getAttribute('href'); + const unexpectedOnline = unexpected.getAttribute('data-mozillaonline-link'); expect(unexpectedHref).toEqual('https://www.mozilla.org/?service=sync&action=email&context=fx_desktop_v3&entrypoint=mozilla.org-accounts_page&utm_content=accounts-page-top-cta&utm_source=accounts-page&utm_medium=referral&utm_campaign=fxa-benefits-page'); expect(unexpectedOnline).toEqual('https://accounts.firefox.com.cn/?service=sync&action=email&context=fx_desktop_v3&entrypoint=mozilla.org-accounts_page&utm_content=accounts-page-top-cta&utm_source=accounts-page&utm_medium=referral&utm_campaign=fxa-benefits-page'); }); it('should get referral cookie data if there are no UTM params', function() { - var data = {}; + const data = {}; spyOn(Mozilla.Cookies, 'getItem').and.returnValue('navigation'); spyOn(Mozilla.UtmUrl, 'hasFxALinkReferralCookie').and.returnValue(true); Mozilla.UtmUrl.init(data); - var expected = document.getElementById('test-expected'); - var expectedHref = expected.getAttribute('href'); - var expectedOnline = expected.getAttribute('data-mozillaonline-link'); + const expected = document.getElementById('test-expected'); + const expectedHref = expected.getAttribute('href'); + const expectedOnline = expected.getAttribute('data-mozillaonline-link'); expect(expectedHref).toEqual('https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org&utm_source=www.mozilla.org&utm_medium=referral&utm_campaign=navigation'); expect(expectedOnline).toEqual('https://accounts.firefox.com.cn/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org&utm_source=www.mozilla.org&utm_medium=referral&utm_campaign=navigation'); }); it('should set expected values for in-product /whatsnew page referrals', function() { - var data = {}; + const data = {}; spyOn(Mozilla.Cookies, 'getItem').and.returnValue('whatsnew92'); spyOn(Mozilla.UtmUrl, 'hasFxALinkReferralCookie').and.returnValue(true); Mozilla.UtmUrl.init(data); - var expected = document.getElementById('test-expected'); - var expectedHref = expected.getAttribute('href'); - var expectedOnline = expected.getAttribute('data-mozillaonline-link'); + const expected = document.getElementById('test-expected'); + const expectedHref = expected.getAttribute('href'); + const expectedOnline = expected.getAttribute('data-mozillaonline-link'); expect(expectedHref).toEqual('https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org-whatsnew&utm_source=www.mozilla.org-whatsnew&utm_medium=referral&utm_campaign=whatsnew92'); expect(expectedOnline).toEqual('https://accounts.firefox.com.cn/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org-whatsnew&utm_source=www.mozilla.org-whatsnew&utm_medium=referral&utm_campaign=whatsnew92'); }); it('should set expected values for in-product /welcome page referrals', function() { - var data = {}; + const data = {}; spyOn(Mozilla.Cookies, 'getItem').and.returnValue('welcome12'); spyOn(Mozilla.UtmUrl, 'hasFxALinkReferralCookie').and.returnValue(true); Mozilla.UtmUrl.init(data); - var expected = document.getElementById('test-expected'); - var expectedHref = expected.getAttribute('href'); - var expectedOnline = expected.getAttribute('data-mozillaonline-link'); + const expected = document.getElementById('test-expected'); + const expectedHref = expected.getAttribute('href'); + const expectedOnline = expected.getAttribute('data-mozillaonline-link'); expect(expectedHref).toEqual('https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org-welcome&utm_source=www.mozilla.org-welcome&utm_medium=referral&utm_campaign=welcome12'); expect(expectedOnline).toEqual('https://accounts.firefox.com.cn/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org-welcome&utm_source=www.mozilla.org-welcome&utm_medium=referral&utm_campaign=welcome12'); }); it('should not overwrite other allowed non-UTM params when cookie referral data exists', function() { - var data = { + const data = { 'entrypoint_experiment': 'test-experiment', 'entrypoint_variation': 'test-variation' }; @@ -597,9 +597,9 @@ describe('fxa-utm-referral.js', function() { Mozilla.UtmUrl.init(data); - var expected = document.getElementById('test-expected'); - var expectedHref = expected.getAttribute('href'); - var expectedOnline = expected.getAttribute('data-mozillaonline-link'); + const expected = document.getElementById('test-expected'); + const expectedHref = expected.getAttribute('href'); + const expectedOnline = expected.getAttribute('data-mozillaonline-link'); expect(expectedHref).toEqual('https://accounts.firefox.com/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org&entrypoint_experiment=test-experiment&entrypoint_variation=test-variation&utm_source=www.mozilla.org&utm_medium=referral&utm_campaign=navigation'); expect(expectedOnline).toEqual('https://accounts.firefox.com.cn/?service=sync&action=email&context=fx_desktop_v3&entrypoint=www.mozilla.org&entrypoint_experiment=test-experiment&entrypoint_variation=test-variation&utm_source=www.mozilla.org&utm_medium=referral&utm_campaign=navigation'); diff --git a/tests/unit/spec/base/mozilla-banner.js b/tests/unit/spec/base/mozilla-banner.js index 96c1853def7..a86819f1e8a 100644 --- a/tests/unit/spec/base/mozilla-banner.js +++ b/tests/unit/spec/base/mozilla-banner.js @@ -23,18 +23,19 @@ describe('mozilla-banner.js', function() { describe('init', function() { - var bannerId = 'test-banner'; + const bannerId = 'test-banner'; beforeEach(function() { - var content = '
' + - '

Some title

' + - '' + - '
'; + const content = + `
+

Some title

+ +
`; document.body.insertAdjacentHTML('beforeend', content); }); afterEach(function() { - var content = document.getElementById('outer-wrapper'); + const content = document.getElementById('outer-wrapper'); content.parentNode.removeChild(content); Mozilla.Banner.id = null; @@ -58,18 +59,19 @@ describe('mozilla-banner.js', function() { }); describe('close', function() { - var bannerId = 'test-banner'; + const bannerId = 'test-banner'; beforeEach(function() { - var content = '
' + - '

Some title

' + - '' + - '
'; + const content = + `
+

Some title

+ +
`; document.body.insertAdjacentHTML('beforeend', content); }); afterEach(function() { - var content = document.getElementById('outer-wrapper'); + const content = document.getElementById('outer-wrapper'); content.parentNode.removeChild(content); Mozilla.Banner.id = null; @@ -80,9 +82,9 @@ describe('mozilla-banner.js', function() { spyOn(window.Mozilla.Banner, 'setCookie'); spyOn(window.Mozilla.Banner, 'close').and.callThrough(); Mozilla.Banner.init(bannerId); - var banner = document.getElementById(bannerId); + const banner = document.getElementById(bannerId); expect(banner.classList.contains('c-banner-is-visible')).toBeTruthy(); - var close = document.querySelector('.c-banner-close'); + const close = document.querySelector('.c-banner-close'); close.click(); expect(Mozilla.Banner.close).toHaveBeenCalled(); expect(Mozilla.Banner.setCookie).toHaveBeenCalledWith(bannerId); diff --git a/tests/unit/spec/base/mozilla-client.js b/tests/unit/spec/base/mozilla-client.js index 5ac15e2796e..804ce0fb473 100644 --- a/tests/unit/spec/base/mozilla-client.js +++ b/tests/unit/spec/base/mozilla-client.js @@ -8,7 +8,7 @@ describe('mozilla-client.js', function() { 'use strict'; // User-agent strings for the most of the following tests - var uas = { + const uas = { // Firefox family 'firefox': { 'windows': 'Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0', @@ -42,7 +42,7 @@ describe('mozilla-client.js', function() { describe('_isFirefox', function() { - var test = function(ua) { + const test = (ua) => { return expect(window.Mozilla.Client._isFirefox(ua)); }; @@ -89,7 +89,7 @@ describe('mozilla-client.js', function() { describe('_isFirefoxDesktop', function () { - var test = function(ua) { + const test = (ua) => { return expect(window.Mozilla.Client._isFirefoxDesktop(ua)); }; @@ -136,7 +136,7 @@ describe('mozilla-client.js', function() { describe('_isFirefoxAndroid', function () { - var test = function(ua) { + const test = (ua) => { return expect(window.Mozilla.Client._isFirefoxAndroid(ua)); }; @@ -183,7 +183,7 @@ describe('mozilla-client.js', function() { describe('_isFirefoxiOS', function () { - var test = function(ua) { + const test = (ua) => { return expect(window.Mozilla.Client._isFirefoxiOS(ua)); }; @@ -230,7 +230,7 @@ describe('mozilla-client.js', function() { describe('_isFirefoxFxOS', function () { - var test = function(ua, pf) { + const test = (ua, pf) => { return expect(window.Mozilla.Client._isFirefoxFxOS(ua, pf)); }; @@ -277,7 +277,7 @@ describe('mozilla-client.js', function() { describe('_isLikeFirefox', function() { - var test = function(ua) { + const test = (ua) => { return expect(window.Mozilla.Client._isLikeFirefox(ua)); }; @@ -324,7 +324,7 @@ describe('mozilla-client.js', function() { describe('_getFirefoxVersion', function () { - var test = function(ua) { + const test = (ua) => { return expect(window.Mozilla.Client._getFirefoxVersion(ua)); }; @@ -371,7 +371,7 @@ describe('mozilla-client.js', function() { describe('_getFirefoxMajorVersion', function () { - var test = function(ua) { + const test = (ua) => { return expect(window.Mozilla.Client._getFirefoxMajorVersion(ua)); }; @@ -418,9 +418,9 @@ describe('mozilla-client.js', function() { describe('_isFirefoxUpToDate', function () { - var h = document.documentElement; + const h = document.documentElement; - var test = function(strict, isESR, userVer) { + var test = (strict, isESR, userVer) => { return expect(window.Mozilla.Client._isFirefoxUpToDate(strict, isESR, userVer)); }; @@ -472,7 +472,7 @@ describe('mozilla-client.js', function() { describe('getFirefoxDetails', function () { - var h = document.documentElement; + const h = document.documentElement; beforeEach(function () { h.setAttribute('data-latest-firefox', '46.0.2'); @@ -488,9 +488,9 @@ describe('mozilla-client.js', function() { }); it('should fire the callback function with a Firefox details object', function() { - var callback1 = jasmine.createSpy('callback1'); - var callback2 = jasmine.createSpy('callback2'); - var result = { + const callback1 = jasmine.createSpy('callback1'); + const callback2 = jasmine.createSpy('callback2'); + const result = { 'accurate': false, // Because the mozUITour API doesn't get called in tests, this won't be true 'version': '46.0.2', 'channel': 'release', @@ -525,7 +525,7 @@ describe('mozilla-client.js', function() { }); it('should fire the callback function with a FxA details object', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); window.Mozilla.Client.getFxaDetails(callback1); jasmine.clock().tick(500); @@ -540,7 +540,7 @@ describe('mozilla-client.js', function() { }); it('should identify Firefox for desktop as expected', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); spyOn(Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); window.Mozilla.Client.getFxaDetails(callback1); @@ -550,7 +550,7 @@ describe('mozilla-client.js', function() { }); it('should identify Firefox for Android as expected', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); spyOn(Mozilla.Client, '_isFirefoxAndroid').and.returnValue(true); window.Mozilla.Client.getFxaDetails(callback1); @@ -561,7 +561,7 @@ describe('mozilla-client.js', function() { }); it('should identify Firefox for iOS as expected', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); spyOn(Mozilla.Client, '_isFirefoxiOS').and.returnValue(true); window.Mozilla.Client.getFxaDetails(callback1); @@ -572,7 +572,7 @@ describe('mozilla-client.js', function() { }); it('should identify legacy Firefox browsers as expected', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); spyOn(Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); spyOn(Mozilla.Client, '_getFirefoxVersion').and.returnValue(Mozilla.Client.FxALastSupported - 1); @@ -597,7 +597,7 @@ describe('mozilla-client.js', function() { }); it('should fire the callback function with a FxaConnections details object', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); window.Mozilla.Client.getFxaConnections(callback1); jasmine.clock().tick(2100); @@ -611,7 +611,7 @@ describe('mozilla-client.js', function() { }); it('should identify legacy Firefox browsers as expected', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); spyOn(Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); spyOn(Mozilla.Client, '_getFirefoxVersion').and.returnValue(72); @@ -623,7 +623,7 @@ describe('mozilla-client.js', function() { }); it('should identify non Firefox browsers as expected', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); spyOn(Mozilla.Client, '_isFirefoxDesktop').and.returnValue(false); window.Mozilla.Client.getFxaConnections(callback1); @@ -638,30 +638,30 @@ describe('mozilla-client.js', function() { describe('isFirefoxOutOfDate', function () { it('should return true if client version is equal to or less than the major version considered out of date', function () { - var result = Mozilla.Client.isFirefoxOutOfDate('50.0', 2, '56.0.1'); + const result = Mozilla.Client.isFirefoxOutOfDate('50.0', 2, '56.0.1'); expect(result).toBeTruthy(); - var result2 = Mozilla.Client.isFirefoxOutOfDate('54.0', 2, '56.0'); + const result2 = Mozilla.Client.isFirefoxOutOfDate('54.0', 2, '56.0'); expect(result2).toBeTruthy(); - var result3 = Mozilla.Client.isFirefoxOutOfDate('54.0a1', 2, '56.0.1a1'); + const result3 = Mozilla.Client.isFirefoxOutOfDate('54.0a1', 2, '56.0.1a1'); expect(result3).toBeTruthy(); - var result4 = Mozilla.Client.isFirefoxOutOfDate('55.0.1', 1, '56.0'); + const result4 = Mozilla.Client.isFirefoxOutOfDate('55.0.1', 1, '56.0'); expect(result4).toBeTruthy(); }); it('should return false if client version is greater than the major version considered out of date', function () { - var result = Mozilla.Client.isFirefoxOutOfDate('56.0', 2, '56.0.1'); + const result = Mozilla.Client.isFirefoxOutOfDate('56.0', 2, '56.0.1'); expect(result).toBeFalsy(); - var result2 = Mozilla.Client.isFirefoxOutOfDate('58.0a2', 2, '56.0.1'); + const result2 = Mozilla.Client.isFirefoxOutOfDate('58.0a2', 2, '56.0.1'); expect(result2).toBeFalsy(); - var result3 = Mozilla.Client.isFirefoxOutOfDate('55.0', 2, '56.0.1'); + const result3 = Mozilla.Client.isFirefoxOutOfDate('55.0', 2, '56.0.1'); expect(result3).toBeFalsy(); - var result4 = Mozilla.Client.isFirefoxOutOfDate('56.0', 1, '56.0.1'); + const result4 = Mozilla.Client.isFirefoxOutOfDate('56.0', 1, '56.0.1'); expect(result4).toBeFalsy(); }); @@ -670,44 +670,44 @@ describe('mozilla-client.js', function() { describe('isFirefoxURLOutOfDate', function () { it('should return true if URL version is equal to or less than the major version considered out of date', function () { - var result = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/54.0/', '56.0'); + const result = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/54.0/', '56.0'); expect(result).toBeTruthy(); - var result2 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/54.0a1/', '56.0'); + const result2 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/54.0a1/', '56.0'); expect(result2).toBeTruthy(); - var result3 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/54.0a2/', '56.0'); + const result3 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/54.0a2/', '56.0'); expect(result3).toBeTruthy(); - var result4 = Mozilla.Client.isFirefoxURLOutOfDate(1, '/firefox/55.0.1/', '56.0'); + const result4 = Mozilla.Client.isFirefoxURLOutOfDate(1, '/firefox/55.0.1/', '56.0'); expect(result4).toBeTruthy(); - var result5 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/53.0/', '56.0'); + const result5 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/53.0/', '56.0'); expect(result5).toBeTruthy(); }); it('should return false if URL version is greater than the major version considered out of date', function () { - var result = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/55.0/', '56.0'); + const result = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/55.0/', '56.0'); expect(result).toBeFalsy(); - var result2 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/55.0a1/', '56.0'); + const result2 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/55.0a1/', '56.0'); expect(result2).toBeFalsy(); - var result3 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/55.0a2/', '56.0'); + const result3 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/55.0a2/', '56.0'); expect(result3).toBeFalsy(); - var result4 = Mozilla.Client.isFirefoxURLOutOfDate(1, '/firefox/56.0/', '56.0.1'); + const result4 = Mozilla.Client.isFirefoxURLOutOfDate(1, '/firefox/56.0/', '56.0.1'); expect(result4).toBeFalsy(); - var result5 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/58.0/', '56.0'); + const result5 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/58.0/', '56.0'); expect(result5).toBeFalsy(); }); it('should return false if the URL version is invalid', function() { - var result = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/foo/', '56.0'); + const result = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/foo/', '56.0'); expect(result).toBeFalsy(); - var result2 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/10/', '56.0'); + const result2 = Mozilla.Client.isFirefoxURLOutOfDate(2, '/firefox/10/', '56.0'); expect(result2).toBeFalsy(); }); diff --git a/tests/unit/spec/base/mozilla-convert.js b/tests/unit/spec/base/mozilla-convert.js index 319ff63379e..a12e2985c42 100644 --- a/tests/unit/spec/base/mozilla-convert.js +++ b/tests/unit/spec/base/mozilla-convert.js @@ -9,7 +9,7 @@ describe('mozilla-convert.js', function() { describe('getCurrentExperiment', function() { it('should return the current experiment name and variation', function() { - var data = { + const data = { 'data': { 'experiments': { '10033458': { @@ -29,13 +29,13 @@ describe('mozilla-convert.js', function() { } }; - var result = Mozilla.Convert.getCurrentExperiment(data); + const result = Mozilla.Convert.getCurrentExperiment(data); expect(result.experimentName).toEqual('10033458'); expect(result.experimentVariation).toEqual('100361887'); }); it('should be falsy if no experiment is running', function() { - var data = { + const data = { 'data': { 'experiments': { '10033458': { @@ -51,7 +51,7 @@ describe('mozilla-convert.js', function() { } }; - var result = Mozilla.Convert.getCurrentExperiment(data); + const result = Mozilla.Convert.getCurrentExperiment(data); expect(result).toBeFalsy(); }); }); diff --git a/tests/unit/spec/base/mozilla-fxa-form.js b/tests/unit/spec/base/mozilla-fxa-form.js index 75c3be5fe13..b918873a2e4 100644 --- a/tests/unit/spec/base/mozilla-fxa-form.js +++ b/tests/unit/spec/base/mozilla-fxa-form.js @@ -11,28 +11,29 @@ describe('mozilla-fxa-form.js', function() { describe('init', function() { beforeEach(function() { - var form = '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
'; - - var data = { + const form = + `
+ + + + + + + + + + + + +
`; + + const data = { 'deviceId': '848377ff6e3e4fc982307a316f4ca3d6', 'flowBeginTime': '1573052386673', 'flowId': '75f9a48a0f66c2f5919a0989605d5fa5dd04625ea5a2ee59b2d5d54637c566d1' }; - var mockResponse = new window.Response(JSON.stringify(data), { + const mockResponse = new window.Response(JSON.stringify(data), { status: 200, headers: { 'Content-type': 'application/json' @@ -45,7 +46,7 @@ describe('mozilla-fxa-form.js', function() { }); afterEach(function() { - document.querySelectorAll('.fxa-email-form').forEach(function(e) { + document.querySelectorAll('.fxa-email-form').forEach((e) => { e.parentNode.removeChild(e); }); }); @@ -53,15 +54,15 @@ describe('mozilla-fxa-form.js', function() { it('should configure the form for Firefox desktop < 71', function() { spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); spyOn(window.Mozilla.Client, '_getFirefoxVersion').and.returnValue('70.0'); - spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake((callback) => { callback({ 'accurate': true, 'distribution': undefined, }); }); - return Mozilla.FxaForm.init().then(function() { - var form = document.getElementById('fxa-email-form'); + return Mozilla.FxaForm.init().then(() => { + const form = document.getElementById('fxa-email-form'); expect(form.getAttribute('action')).toEqual('https://accounts.firefox.com/'); expect(form.querySelector('[name="context"]').value).toEqual('fx_desktop_v3'); expect(form.querySelector('[name="service"]').value).toEqual('sync'); @@ -74,15 +75,15 @@ describe('mozilla-fxa-form.js', function() { it('should configure the form for Firefox desktop >= 71', function() { spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); spyOn(window.Mozilla.Client, '_getFirefoxVersion').and.returnValue('71.0'); - spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake((callback) => { callback({ 'accurate': true, 'distribution': undefined, }); }); - return Mozilla.FxaForm.init().then(function() { - var form = document.getElementById('fxa-email-form'); + return Mozilla.FxaForm.init().then(() => { + const form = document.getElementById('fxa-email-form'); expect(form.getAttribute('action')).toEqual('https://accounts.firefox.com/'); expect(form.querySelector('[name="context"]').value).toEqual('fx_desktop_v3'); expect(form.querySelector('[name="service"]')).toBeNull(); @@ -95,7 +96,7 @@ describe('mozilla-fxa-form.js', function() { it('should configure the form for non-Firefox browsers', function() { spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(false); - return Mozilla.FxaForm.init().then(function() { + return Mozilla.FxaForm.init().then(() => { var form = document.getElementById('fxa-email-form'); expect(form.getAttribute('action')).toEqual('https://accounts.firefox.com/'); expect(form.querySelector('[name="context"]')).toBeNull(); diff --git a/tests/unit/spec/base/mozilla-fxa-link.js b/tests/unit/spec/base/mozilla-fxa-link.js index 82942e81d4b..66025d04a58 100644 --- a/tests/unit/spec/base/mozilla-fxa-link.js +++ b/tests/unit/spec/base/mozilla-fxa-link.js @@ -11,7 +11,7 @@ describe('mozilla-fxa-link.js', function() { describe('init', function() { beforeEach(function() { - var link = 'Sign In'; + const link = 'Sign In'; document.body.insertAdjacentHTML('beforeend', link); }); @@ -25,8 +25,8 @@ describe('mozilla-fxa-link.js', function() { spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); spyOn(window.Mozilla.Client, '_getFirefoxVersion').and.returnValue('70.0'); Mozilla.FxaLink.init(); - var link = document.querySelector('.js-fxa-cta-link'); - var mozillaOnlineLink = link.getAttribute('data-mozillaonline-link'); + const link = document.querySelector('.js-fxa-cta-link'); + const mozillaOnlineLink = link.getAttribute('data-mozillaonline-link'); expect(link.href).toEqual('https://accounts.firefox.com/signin?form_type=button&entrypoint=mozilla.org-firefoxnav&utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in&context=fx_desktop_v3&service=sync'); expect(mozillaOnlineLink).toEqual('https://accounts.firefox.com.cn/signin?form_type=button&entrypoint=mozilla.org-firefoxnav&utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in&context=fx_desktop_v3&service=sync'); }); @@ -35,8 +35,8 @@ describe('mozilla-fxa-link.js', function() { spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); spyOn(window.Mozilla.Client, '_getFirefoxVersion').and.returnValue('71.0'); Mozilla.FxaLink.init(); - var link = document.querySelector('.js-fxa-cta-link'); - var mozillaOnlineLink = link.getAttribute('data-mozillaonline-link'); + const link = document.querySelector('.js-fxa-cta-link'); + const mozillaOnlineLink = link.getAttribute('data-mozillaonline-link'); expect(link.href).toEqual('https://accounts.firefox.com/signin?form_type=button&entrypoint=mozilla.org-firefoxnav&utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in&context=fx_desktop_v3'); expect(mozillaOnlineLink).toEqual('https://accounts.firefox.com.cn/signin?form_type=button&entrypoint=mozilla.org-firefoxnav&utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in&context=fx_desktop_v3'); }); @@ -44,8 +44,8 @@ describe('mozilla-fxa-link.js', function() { it('should not add context or service params for other user agents', function() { spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(false); Mozilla.FxaLink.init(); - var link = document.querySelector('.js-fxa-cta-link'); - var mozillaOnlineLink = link.getAttribute('data-mozillaonline-link'); + const link = document.querySelector('.js-fxa-cta-link'); + const mozillaOnlineLink = link.getAttribute('data-mozillaonline-link'); expect(link.href).toEqual('https://accounts.firefox.com/signin?form_type=button&entrypoint=mozilla.org-firefoxnav&utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in'); expect(mozillaOnlineLink).toEqual('https://accounts.firefox.com.cn/signin?form_type=button&entrypoint=mozilla.org-firefoxnav&utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in'); }); @@ -57,8 +57,8 @@ describe('mozilla-fxa-link.js', function() { window.Mozilla.UITour.ping = sinon.stub().callsArg(0); spyOn(window.Mozilla.UITour, 'showFirefoxAccounts'); spyOn(window.Mozilla.Client, '_getFirefoxVersion').and.returnValue('80.0'); - return Mozilla.FxaLink.init(function() { - var link = document.querySelector('.js-fxa-cta-link'); + return Mozilla.FxaLink.init(() => { + const link = document.querySelector('.js-fxa-cta-link'); expect(link.getAttribute('role')).toEqual('button'); link.click(); expect(window.Mozilla.UITour.showFirefoxAccounts).toHaveBeenCalledWith({ @@ -73,7 +73,7 @@ describe('mozilla-fxa-link.js', function() { }); it('does NOT use the UITour for non-FxA domains in Fx >= 80', function() { - var link = document.querySelectorAll('.js-fxa-cta-link')[0]; + const link = document.querySelectorAll('.js-fxa-cta-link')[0]; link.href = 'https://monitor.firefox.com'; spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); window.Mozilla.UITour = sinon.stub(); @@ -81,24 +81,24 @@ describe('mozilla-fxa-link.js', function() { window.Mozilla.UITour.ping = sinon.stub().callsArg(0); spyOn(window.Mozilla.UITour, 'showFirefoxAccounts'); spyOn(window.Mozilla.Client, '_getFirefoxVersion').and.returnValue('80.0'); - return Mozilla.FxaLink.init(function() { + return Mozilla.FxaLink.init(() => { expect(link.getAttribute('role')).toEqual(null); }); }); it('handles flow and entrypoint parameters on the link in Fx >= 80', function() { - var link = document.querySelectorAll('.js-fxa-cta-link')[0]; + const link = document.querySelectorAll('.js-fxa-cta-link')[0]; link.href = 'https://accounts.firefox.com/signin?form_type=button&entrypoint=mozilla.org-firefoxnav&' + - 'utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in&' + - 'flow_id=flow&flow_begin_time=100&device_id=dev&entrypoint_experiment=exp&entrypoint_variation=var'; + 'utm_source=mozilla.org-firefoxnav&utm_medium=referral&utm_campaign=nav&utm_content=join-sign-in&' + + 'flow_id=flow&flow_begin_time=100&device_id=dev&entrypoint_experiment=exp&entrypoint_variation=var'; spyOn(window.Mozilla.Client, '_isFirefoxDesktop').and.returnValue(true); window.Mozilla.UITour = sinon.stub(); window.Mozilla.UITour.showFirefoxAccounts = sinon.stub().returns(true); window.Mozilla.UITour.ping = sinon.stub().callsArg(0); spyOn(window.Mozilla.UITour, 'showFirefoxAccounts'); spyOn(window.Mozilla.Client, '_getFirefoxVersion').and.returnValue('80.0'); - return Mozilla.FxaLink.init(function() { - var link = document.querySelector('.js-fxa-cta-link'); + return Mozilla.FxaLink.init(() => { + const link = document.querySelector('.js-fxa-cta-link'); expect(link.getAttribute('role')).toEqual('button'); link.click(); expect(window.Mozilla.UITour.showFirefoxAccounts).toHaveBeenCalledWith({ diff --git a/tests/unit/spec/base/mozilla-fxa-product-button.js b/tests/unit/spec/base/mozilla-fxa-product-button.js index ae3cb2d8a01..3b6d5554d47 100644 --- a/tests/unit/spec/base/mozilla-fxa-product-button.js +++ b/tests/unit/spec/base/mozilla-fxa-product-button.js @@ -8,18 +8,19 @@ describe('mozilla-fxa-product-button.js', function() { 'use strict'; beforeEach(function() { - var button = 'Sign Up to Monitor' + - 'Activate Pocket' + - 'Learn more' + - 'Get Mozilla VPN'; + const button = + `Sign Up to Monitor + Activate Pocket + Learn more + Get Mozilla VPN`; - var data = { + const data = { 'deviceId': '848377ff6e3e4fc982307a316f4ca3d6', 'flowBeginTime': '1573052386673', 'flowId': '75f9a48a0f66c2f5919a0989605d5fa5dd04625ea5a2ee59b2d5d54637c566d1' }; - var mockResponse = new window.Response(JSON.stringify(data), { + const mockResponse = new window.Response(JSON.stringify(data), { status: 200, headers: { 'Content-type': 'application/json' @@ -32,78 +33,78 @@ describe('mozilla-fxa-product-button.js', function() { }); afterEach(function() { - document.querySelectorAll('.js-fxa-product-button').forEach(function(e) { + document.querySelectorAll('.js-fxa-product-button').forEach((e) => { e.parentNode.removeChild(e); }); }); it('should make a single metrics flow request', function() { - spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake((callback) => { callback({ 'accurate': true, 'distribution': undefined, }); }); - return Mozilla.FxaProductButton.init().then(function() { + return Mozilla.FxaProductButton.init().then(() => { expect(window.fetch).toHaveBeenCalledTimes(1); expect(window.fetch).toHaveBeenCalledWith('https://accounts.firefox.com/metrics-flow?form_type=button&entrypoint=mozilla.org-whatsnew60&utm_source=mozilla.org-whatsnew60&utm_campaign=whatsnew60&utm_medium=referral'); }); }); it('should attach flow parameters to button hrefs in the metrics response', function() { - spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake((callback) => { callback({ 'accurate': true, 'distribution': undefined, }); }); - return Mozilla.FxaProductButton.init().then(function() { - var buttons = document.querySelectorAll('.js-fxa-product-button'); + return Mozilla.FxaProductButton.init().then(() => { + const buttons = document.querySelectorAll('.js-fxa-product-button'); expect(buttons[0].href).toEqual('https://accounts.firefox.com/signup?form_type=button&entrypoint=mozilla.org-whatsnew60&utm_source=mozilla.org-whatsnew60&utm_medium=referral&utm_campaign=whatsnew60&context=fx_desktop_v3&device_id=848377ff6e3e4fc982307a316f4ca3d6&flow_begin_time=1573052386673&flow_id=75f9a48a0f66c2f5919a0989605d5fa5dd04625ea5a2ee59b2d5d54637c566d1'); expect(buttons[1].href).toEqual('https://getpocket.com/ff_signup?s=ffwelcome2&form_type=button&entrypoint=mozilla.org-firefox-welcome-2&utm_source=mozilla.org-firefox-welcome-2&utm_campaign=welcome-2-pocket&utm_medium=referral&device_id=848377ff6e3e4fc982307a316f4ca3d6&flow_begin_time=1573052386673&flow_id=75f9a48a0f66c2f5919a0989605d5fa5dd04625ea5a2ee59b2d5d54637c566d1'); }); }); it('should not attach flow parameters to button hrefs in the domain is invalid', function() { - spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake((callback) => { callback({ 'accurate': true, 'distribution': undefined, }); }); - return Mozilla.FxaProductButton.init().then(function() { - var buttons = document.querySelectorAll('.js-fxa-product-button'); + return Mozilla.FxaProductButton.init().then(() => { + const buttons = document.querySelectorAll('.js-fxa-product-button'); expect(buttons[2].href).toEqual('https://www.mozilla.org/en-US/firefox/accounts/'); }); }); it('should not attach flow parameters if already present', function() { - spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake((callback) => { callback({ 'accurate': true, 'distribution': undefined, }); }); - return Mozilla.FxaProductButton.init().then(function() { - var buttons = document.querySelectorAll('.js-fxa-product-button'); + return Mozilla.FxaProductButton.init().then(() => { + const buttons = document.querySelectorAll('.js-fxa-product-button'); expect(buttons[3].href).toEqual('https://accounts.firefox.com/subscriptions/products/prod_FiJ42WCzZNRSbS?plan=plan_FvPMH5lVx1vhV0&device_id=123456789&flow_begin_time=123456789&flow_id=123456789'); }); }); it('should switch to mozillaonline distribution when needed', function() { - spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFirefoxDetails').and.callFake((callback) => { callback({ 'accurate': true, 'distribution': 'mozillaonline', }); }); - return Mozilla.FxaProductButton.init().then(function() { - var buttons = document.querySelectorAll('.js-fxa-product-button'); + return Mozilla.FxaProductButton.init().then(() => { + const buttons = document.querySelectorAll('.js-fxa-product-button'); expect(window.fetch).toHaveBeenCalledWith('https://accounts.firefox.com.cn/metrics-flow?form_type=button&entrypoint=mozilla.org-whatsnew60&utm_source=mozilla.org-whatsnew60&utm_campaign=whatsnew60&utm_medium=referral'); expect(buttons[0].href).toEqual('https://accounts.firefox.com.cn/signup?form_type=button&entrypoint=mozilla.org-whatsnew60&utm_source=mozilla.org-whatsnew60&utm_medium=referral&utm_campaign=whatsnew60&context=fx_desktop_v3&device_id=848377ff6e3e4fc982307a316f4ca3d6&flow_begin_time=1573052386673&flow_id=75f9a48a0f66c2f5919a0989605d5fa5dd04625ea5a2ee59b2d5d54637c566d1'); expect(buttons[1].href).toEqual('https://getpocket.com/ff_signup?s=ffwelcome2&form_type=button&entrypoint=mozilla.org-firefox-welcome-2&utm_source=mozilla.org-firefox-welcome-2&utm_campaign=welcome-2-pocket&utm_medium=referral'); @@ -111,7 +112,7 @@ describe('mozilla-fxa-product-button.js', function() { }); it('should return false if no buttons are present in the DOM', function() { - document.querySelectorAll('.js-fxa-product-button').forEach(function(e) { + document.querySelectorAll('.js-fxa-product-button').forEach((e) => { e.parentNode.removeChild(e); }); diff --git a/tests/unit/spec/base/mozilla-fxa.js b/tests/unit/spec/base/mozilla-fxa.js index 4467795968f..d209d779f34 100644 --- a/tests/unit/spec/base/mozilla-fxa.js +++ b/tests/unit/spec/base/mozilla-fxa.js @@ -30,10 +30,10 @@ describe('mozilla-fxa.js', function() { describe('FxaState.getStateClassAndDo', function() { it('should fire the callback function with a stateClass', function() { - var callback1 = jasmine.createSpy('callback1'); + const callback1 = jasmine.createSpy('callback1'); // mock details, isFirefoxiOS, and getFxaDetails - var details = { + const details = { 'firefox': false, 'legacy': false, 'mobile': false, @@ -42,7 +42,7 @@ describe('mozilla-fxa.js', function() { 'mobileDevices': false }; - spyOn(Mozilla.Client, 'getFxaDetails').and.callFake(function(callback) { + spyOn(Mozilla.Client, 'getFxaDetails').and.callFake((callback) => { callback(details); }); @@ -63,7 +63,7 @@ describe('mozilla-fxa.js', function() { // not Firefox it('should set the appropriate body class when not firefox', function() { - var details = { + const details = { 'firefox': false, 'legacy': false, 'mobile': false, @@ -78,7 +78,7 @@ describe('mozilla-fxa.js', function() { // Firefox Android it('should set the appropriate body class when Firefox Android', function() { - var details = { + const details = { 'firefox': true, 'legacy': false, 'mobile': 'android', @@ -93,7 +93,7 @@ describe('mozilla-fxa.js', function() { // Firefox iOS it('should set the appropriate body class when Firefox iOS', function() { - var details = { + const details = { 'firefox': true, 'legacy': false, 'mobile': 'ios', @@ -108,7 +108,7 @@ describe('mozilla-fxa.js', function() { // Firefox < 29 it('should set the appropriate body class when pre UITour Firefox', function() { - var details = { + const details = { 'firefox': true, 'legacy': true, 'mobile': false, @@ -123,7 +123,7 @@ describe('mozilla-fxa.js', function() { // Firefox < FxALastSupported, logged out it('should set the appropriate body class when Legacy Firefox', function() { - var details = { + const details = { 'firefox': true, 'legacy': true, 'mobile': false, @@ -138,7 +138,7 @@ describe('mozilla-fxa.js', function() { // Firefox < FxALastSupported, logged out it('should set the appropriate body class when Legacy Firefox logged out', function() { - var details = { + const details = { 'firefox': true, 'legacy': true, 'mobile': false, @@ -153,7 +153,7 @@ describe('mozilla-fxa.js', function() { // Firefox Desktop < FxALastSupported, logged in it('should set the appropriate body class when Legacy Firefox logged in', function() { - var details = { + const details = { 'firefox': true, 'legacy': true, 'mobile': false, @@ -168,7 +168,7 @@ describe('mozilla-fxa.js', function() { // Firefox Desktop < 50, logged out it('should set the appropriate body class when Firefox pre device count logged out', function() { - var details = { + const details = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -183,7 +183,7 @@ describe('mozilla-fxa.js', function() { // Firefox Desktop < 50, logged in it('should set the appropriate body class when Firefox pre device count logged in', function() { - var details = { + const details = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -198,7 +198,7 @@ describe('mozilla-fxa.js', function() { // Firefox Desktop Current, logged out it('should set the appropriate body class when Current Firefox Desktop logged out', function() { - var details = { + const details = { 'firefox': true, 'legacy': false, 'mobile': false, @@ -213,7 +213,7 @@ describe('mozilla-fxa.js', function() { // Firefox Desktop Current, logged in it('should set the appropriate body class when Current Firefox Desktop logged in', function() { - var details = { + const details = { 'firefox': true, 'legacy': false, 'mobile': false, diff --git a/tests/unit/spec/base/mozilla-lazy-load.js b/tests/unit/spec/base/mozilla-lazy-load.js index b0f33384927..2ef3e68a8ba 100644 --- a/tests/unit/spec/base/mozilla-lazy-load.js +++ b/tests/unit/spec/base/mozilla-lazy-load.js @@ -15,7 +15,7 @@ describe('mozilla-lazy-load.js', function() { describe('Mozilla.LazyLoad.init', function() { - var selector = '.lazy-image-container img'; + const selector = '.lazy-image-container img'; afterEach(function(){ Mozilla.LazyLoad.supportsInsersectionObserver = typeof IntersectionObserver !== 'undefined'; @@ -44,7 +44,7 @@ describe('mozilla-lazy-load.js', function() { }); it('should throw an error if passed an invalid custom selector', function() { - expect(function() { + expect(() => { Mozilla.LazyLoad.init({foo: 'bar'}); }).toThrowError(); }); @@ -53,7 +53,7 @@ describe('mozilla-lazy-load.js', function() { describe('Mozilla.LazyLoad.registerObserver', function() { it('should register an IntersectionObserver correctly', function() { - var observer = Mozilla.LazyLoad.registerObserver(); + const observer = Mozilla.LazyLoad.registerObserver(); expect(observer instanceof window.IntersectionObserver).toBeTruthy(); }); }); @@ -61,15 +61,16 @@ describe('mozilla-lazy-load.js', function() { describe('Mozilla.LazyLoad.observe', function() { beforeEach(function() { - var tpl = '
' + - '' + - '' + - '
'; + const tpl = + `
+ + +
`; document.body.insertAdjacentHTML('beforeend', tpl); }); afterEach(function() { - var content = document.querySelector('.lazy-image-container'); + const content = document.querySelector('.lazy-image-container'); content.parentNode.removeChild(content); }); @@ -77,14 +78,14 @@ describe('mozilla-lazy-load.js', function() { spyOn(Mozilla.LazyLoad, 'registerObserver').and.returnValue({ observe: sinon.spy() }); - var observer = Mozilla.LazyLoad.observe('.lazy-image-container img'); + const observer = Mozilla.LazyLoad.observe('.lazy-image-container img'); expect(observer.observe.calledTwice).toBeTruthy(); }); }); describe('Mozilla.LazyLoad.observerCallback', function() { - var changes = [ + const changes = [ { intersectionRatio: 0, target: { @@ -142,18 +143,18 @@ describe('mozilla-lazy-load.js', function() { describe('Mozilla.LazyLoad.onImageLoad', function() { beforeEach(function () { - var img = ''; + const img = ''; document.body.insertAdjacentHTML('beforeend', img); }); afterEach(function(){ - var content = document.querySelector('.test-image'); + const content = document.querySelector('.test-image'); content.parentNode.removeChild(content); }); it('should remove the data-src attribute', function() { - var img = document.querySelector('.test-image'); - var event = { + const img = document.querySelector('.test-image'); + const event = { target: img }; Mozilla.LazyLoad.onImageLoad(event); @@ -165,21 +166,22 @@ describe('mozilla-lazy-load.js', function() { describe('Mozilla.LazyLoad.loadAllFallback', function() { beforeEach(function () { - var tpl = '
' + - '' + - '' + - '
'; + const tpl = + `
+ + +
`; document.body.insertAdjacentHTML('beforeend', tpl); }); afterEach(function(){ - var content = document.querySelector('.observer-list-test'); + const content = document.querySelector('.observer-list-test'); content.parentNode.removeChild(content); }); it('should register an IntersectionObserver correctly', function() { - var image1 = document.querySelector('.observer-list-test .image1'); - var image2 = document.querySelector('.observer-list-test .image2'); + const image1 = document.querySelector('.observer-list-test .image1'); + const image2 = document.querySelector('.observer-list-test .image2'); Mozilla.LazyLoad.loadAllFallback('.observer-list-test img'); diff --git a/tests/unit/spec/base/mozilla-pixel.js b/tests/unit/spec/base/mozilla-pixel.js index d9282e8b072..0ed6c2e783c 100644 --- a/tests/unit/spec/base/mozilla-pixel.js +++ b/tests/unit/spec/base/mozilla-pixel.js @@ -10,7 +10,7 @@ describe('mozilla-pixel.js', function() { 'use strict'; afterEach(function() { - document.querySelectorAll('.moz-px').forEach(function(e) { + document.querySelectorAll('.moz-px').forEach((e) => { e.parentNode.removeChild(e); }); }); @@ -25,7 +25,7 @@ describe('mozilla-pixel.js', function() { }); it('should add multiple pixels to document body', function() { - var pixels = '/img/foo.png::/img/foo.png?v=1::/img/foo.png?v=2'; + const pixels = '/img/foo.png::/img/foo.png?v=1::/img/foo.png?v=2'; spyOn(Mozilla, 'dntEnabled').and.returnValue(false); spyOn(Mozilla.Pixel, 'getPixelData').and.returnValue(pixels); Mozilla.Pixel.init(); @@ -55,7 +55,7 @@ describe('mozilla-pixel.js', function() { it('should cache bust doubleclick request', function() { // this is a bit of a hack to avoid making real requests to ad.doubleclick.net in test runs. - var pixels = '/img/foo.png?ad.doubleclick.net/src=6417015'; + const pixels = '/img/foo.png?ad.doubleclick.net/src=6417015'; Math.random = sinon.stub().returns(0.853456456); spyOn(Mozilla, 'dntEnabled').and.returnValue(false); spyOn(Mozilla.Pixel, 'getPixelData').and.returnValue(pixels); diff --git a/tests/unit/spec/base/mozilla-run.js b/tests/unit/spec/base/mozilla-run.js index e9730758df4..e734f716b49 100644 --- a/tests/unit/spec/base/mozilla-run.js +++ b/tests/unit/spec/base/mozilla-run.js @@ -24,7 +24,7 @@ describe('mozilla-run.js', function() { }); it('should not execute callback for legacy browsers', function() { - var obj = { + const obj = { callback: function() {} // eslint-disable-line no-empty-function }; window.site.isModernBrowser = false; diff --git a/tests/unit/spec/base/mozilla-traffic-cop-funnelcake-geo.js b/tests/unit/spec/base/mozilla-traffic-cop-funnelcake-geo.js index 29ab68fcece..1af12660e2b 100644 --- a/tests/unit/spec/base/mozilla-traffic-cop-funnelcake-geo.js +++ b/tests/unit/spec/base/mozilla-traffic-cop-funnelcake-geo.js @@ -80,15 +80,15 @@ describe('mozilla-traffic-cop-funnelcake-geo.js', function() { }); describe('geoLookup', function() { - var xhr; - var xhrRequests = []; + let xhr; + let xhrRequests = []; beforeEach(function() { spyOn(Mozilla.TCFCGeoExp, 'runExperiment').and.returnValue(true); spyOn(Mozilla.Cookies, 'setItem').and.returnValue(true); xhr = sinon.useFakeXMLHttpRequest(); - xhr.onCreate = function(req) { + xhr.onCreate = (req) => { xhrRequests.push(req); }; }); @@ -108,7 +108,7 @@ describe('mozilla-traffic-cop-funnelcake-geo.js', function() { }); it('should set a cookie if country does not match', function() { - var someConfig = {experimentId: 'weapon-x'}; + const someConfig = {experimentId: 'weapon-x'}; Mozilla.TCFCGeoExp.geoLookup('de', 'someCookie', someConfig); @@ -118,7 +118,7 @@ describe('mozilla-traffic-cop-funnelcake-geo.js', function() { }); it('should call runExperiment if country matches', function() { - var someConfig = {}; + const someConfig = {}; Mozilla.TCFCGeoExp.geoLookup('de', 'someCookie', someConfig); diff --git a/tests/unit/spec/base/mozilla-utils.js b/tests/unit/spec/base/mozilla-utils.js index bc5ba749f3f..cff95445e30 100755 --- a/tests/unit/spec/base/mozilla-utils.js +++ b/tests/unit/spec/base/mozilla-utils.js @@ -7,24 +7,25 @@ describe('mozilla-utils.js', function() { 'use strict'; describe('trans', function () { - var stringDiv; + let stringDiv; beforeEach(function () { - stringDiv = '
' + - '
'; + stringDiv = + `
+
`; document.body.insertAdjacentHTML('beforeend', stringDiv); }); afterEach(function() { - var strings = document.getElementById('strings'); + const strings = document.getElementById('strings'); strings.parentNode.removeChild(strings); }); it('should correctly return translation value', function () { - var translation = Mozilla.Utils.trans('global-next'); + const translation = Mozilla.Utils.trans('global-next'); expect(translation === 'Next'); }); }); @@ -32,14 +33,14 @@ describe('mozilla-utils.js', function() { describe('initMobileDownloadLinks', function () { beforeEach(function() { - var link = 'Download Firefox'; + const link = 'Download Firefox'; document.body.insertAdjacentHTML('beforeend', link); }); afterEach(function(){ window.site.platform = 'other'; - document.querySelectorAll('.download-link').forEach(function(e) { + document.querySelectorAll('.download-link').forEach((e) => { e.parentNode.removeChild(e); }); }); @@ -47,23 +48,23 @@ describe('mozilla-utils.js', function() { it('should set a URL with the market scheme on Android', function () { window.site.platform = 'android'; Mozilla.Utils.initMobileDownloadLinks(); - var link = document.querySelector('.download-link'); + const link = document.querySelector('.download-link'); expect(link.href).toEqual('market://details?id=org.mozilla.firefox'); }); }); describe('maybeSwitchToChinaRepackImages', function() { - var defaultSrc = '/img/placeholder.png'; - var partnerASrc = '/img/foo.png'; + const defaultSrc = '/img/placeholder.png'; + const partnerASrc = '/img/foo.png'; beforeEach(function () { - var img = ''; + const img = ``; document.body.insertAdjacentHTML('beforeend', img); }); afterEach(function() { - document.querySelectorAll('.test-image').forEach(function(e) { + document.querySelectorAll('.test-image').forEach((e) => { e.parentNode.removeChild(e); }); }); @@ -72,7 +73,7 @@ describe('mozilla-utils.js', function() { Mozilla.Utils.maybeSwitchToChinaRepackImages({ distribution: 'mozillaonline' }); - var img = document.querySelector('.test-image'); + const img = document.querySelector('.test-image'); expect(img.src).toContain(partnerASrc); }); @@ -80,7 +81,7 @@ describe('mozilla-utils.js', function() { Mozilla.Utils.maybeSwitchToChinaRepackImages({ distribution: 'regata os' }); - var img = document.querySelector('.test-image'); + const img = document.querySelector('.test-image'); expect(img.src).toContain(defaultSrc); }); }); @@ -88,10 +89,10 @@ describe('mozilla-utils.js', function() { describe('getDownloadAttributionValues', function() { it('should return expected values for Windows', function () { - var site = { + const site = { platform: 'windows' }; - var result = Mozilla.Utils.getDownloadAttributionValues(site); + const result = Mozilla.Utils.getDownloadAttributionValues(site); expect(result).toEqual({ os: 'Desktop', name: 'Windows 32-bit', @@ -100,10 +101,10 @@ describe('mozilla-utils.js', function() { }); it('should return expected values for macOS', function () { - var site = { + const site = { platform: 'osx' }; - var result = Mozilla.Utils.getDownloadAttributionValues(site); + const result = Mozilla.Utils.getDownloadAttributionValues(site); expect(result).toEqual({ os: 'Desktop', name: 'macOS', @@ -112,11 +113,11 @@ describe('mozilla-utils.js', function() { }); it('should return expected values for Linux', function () { - var site = { + const site = { platform: 'linux', archSize: 32 }; - var result = Mozilla.Utils.getDownloadAttributionValues(site); + const result = Mozilla.Utils.getDownloadAttributionValues(site); expect(result).toEqual({ os: 'Desktop', name: 'Linux 32-bit', @@ -125,11 +126,11 @@ describe('mozilla-utils.js', function() { }); it('should return expected values for Linux 64-Bit builds', function () { - var site = { + const site = { platform: 'linux', archSize: 64 }; - var result = Mozilla.Utils.getDownloadAttributionValues(site); + const result = Mozilla.Utils.getDownloadAttributionValues(site); expect(result).toEqual({ os: 'Desktop', name: 'Linux 64-bit', @@ -138,10 +139,10 @@ describe('mozilla-utils.js', function() { }); it('should return expected values for iOS', function () { - var site = { + const site = { platform: 'ios' }; - var result = Mozilla.Utils.getDownloadAttributionValues(site); + const result = Mozilla.Utils.getDownloadAttributionValues(site); expect(result).toEqual({ os: 'iOS', name: 'iOS', @@ -150,10 +151,10 @@ describe('mozilla-utils.js', function() { }); it('should return expected values for Android', function () { - var site = { + const site = { platform: 'android' }; - var result = Mozilla.Utils.getDownloadAttributionValues(site); + const result = Mozilla.Utils.getDownloadAttributionValues(site); expect(result).toEqual({ os: 'Android', name: 'Android', @@ -162,10 +163,10 @@ describe('mozilla-utils.js', function() { }); it('should return expected values for unsupported / unknown platforms', function () { - var site = { + const site = { platform: 'other' }; - var result = Mozilla.Utils.getDownloadAttributionValues(site); + const result = Mozilla.Utils.getDownloadAttributionValues(site); expect(result).toEqual({ os: 'Unsupported', name: 'Unsupported', diff --git a/tests/unit/spec/base/search-params.js b/tests/unit/spec/base/search-params.js index 8b5e17eb245..ea5f2b41f50 100755 --- a/tests/unit/spec/base/search-params.js +++ b/tests/unit/spec/base/search-params.js @@ -12,14 +12,14 @@ describe('search-params.js', function() { describe('_SearchParams', function () { it('should return a proper value', function () { - var params = new _SearchParams('scene=2&source=getfirefox'); + const params = new _SearchParams('scene=2&source=getfirefox'); expect(params.get('scene')).toEqual(2); expect(params.get('source')).toEqual('getfirefox'); expect(params.get('utm_campaign')).toBeUndefined(); }); it('should set a proper value', function () { - var params = new _SearchParams('scene=2&source=getfirefox'); + const params = new _SearchParams('scene=2&source=getfirefox'); params.set('scene', '3'); params.set('utm_medium', 'referral'); expect(params.get('scene')).toEqual(3); @@ -27,44 +27,44 @@ describe('search-params.js', function() { }); it('should detect if the key exists', function () { - var params = new _SearchParams('scene=2&source=getfirefox'); + const params = new _SearchParams('scene=2&source=getfirefox'); expect(params.has('scene')).toBeTruthy(); expect(params.has('source')).toBeTruthy(); expect(params.has('utm_source')).toBeFalsy(); }); it('should remove a value', function () { - var params = new _SearchParams('scene=2&source=getfirefox'); + const params = new _SearchParams('scene=2&source=getfirefox'); params.remove('utm_medium'); expect(params.has('utm_medium')).toBeFalsy(); expect(params.get('utm_medium')).toBeUndefined(); }); it('should return a param string', function () { - var params = new _SearchParams('scene=2&source=getfirefox'); + const params = new _SearchParams('scene=2&source=getfirefox'); expect(params.toString()).toEqual('scene=2&source=getfirefox'); }); it('should return an object of utm_ values', function () { - var sp = new _SearchParams('utm_dude=lebowski&utm_sport=bowling&source=getfirefox'); - var utms = sp.utmParams(); - var keys = Object.keys(utms); + const sp = new _SearchParams('utm_dude=lebowski&utm_sport=bowling&source=getfirefox'); + const utms = sp.utmParams(); + const keys = Object.keys(utms); expect(keys).toEqual(['utm_dude', 'utm_sport']); expect(utms.utm_dude).toEqual('lebowski'); expect(utms.utm_sport).toEqual('bowling'); }); it('should return an object of utm_ values with defaults for FxA', function () { - var sp = new _SearchParams('utm_dude=lebowski&utm_sport=bowling&source=getfirefox'); - var utms = sp.utmParamsFxA('/es-ES/firefox/sync/'); + const sp = new _SearchParams('utm_dude=lebowski&utm_sport=bowling&source=getfirefox'); + const utms = sp.utmParamsFxA('/es-ES/firefox/sync/'); expect(utms.utm_dude).toEqual('lebowski'); expect(utms.utm_campaign).toEqual('page referral - not part of a campaign'); expect(utms.utm_content).toEqual('/firefox/sync/'); }); it('should return an object of string utm_ values for FxA', function () { - var sp = new _SearchParams('utm_dude=lebowski&utm_strikes=10&source=getfirefox'); - var utms = sp.utmParamsFxA('/es-ES/firefox/sync/'); + const sp = new _SearchParams('utm_dude=lebowski&utm_strikes=10&source=getfirefox'); + const utms = sp.utmParamsFxA('/es-ES/firefox/sync/'); expect(utms.utm_dude).toEqual('lebowski'); expect(utms.utm_strikes).not.toEqual(10); expect(utms.utm_strikes).toEqual('10'); @@ -72,8 +72,8 @@ describe('search-params.js', function() { }); it('should not override utm_campaign when set in URL', function () { - var sp = new _SearchParams('utm_dude=lebowski&utm_campaign=bowling&source=getfirefox'); - var utms = sp.utmParamsFxA(); + const sp = new _SearchParams('utm_dude=lebowski&utm_campaign=bowling&source=getfirefox'); + const utms = sp.utmParamsFxA(); expect(utms.utm_campaign).toEqual('bowling'); }); diff --git a/tests/unit/spec/base/send-to-device.js b/tests/unit/spec/base/send-to-device.js index 0371236ff2a..c3da490904f 100644 --- a/tests/unit/spec/base/send-to-device.js +++ b/tests/unit/spec/base/send-to-device.js @@ -11,29 +11,28 @@ describe('send-to-device.js', function() { 'use strict'; - var form; + let form; beforeEach(function () { - var formMarkup = [ - '
' + - '
' + - '
' + - '' + - '
' + - '' + - '' + - '
' + - '' + - '' + - '
' + - '
' + - '' + - '
' + - '
' + - '
' + - '
' - ].join(); + const formMarkup = + `
+
+
+ +
+ + +
+ + +
+
+ +
+
+
+
`; document.body.insertAdjacentHTML('beforeend', formMarkup); @@ -50,7 +49,7 @@ describe('send-to-device.js', function() { afterEach(function () { form.unbindEvents(); - var content = document.getElementById('send-to-device'); + const content = document.getElementById('send-to-device'); content.parentNode.removeChild(content); }); @@ -83,12 +82,12 @@ describe('send-to-device.js', function() { describe('onFormSubmit', function() { - var xhr; - var xhrRequests = []; + let xhr; + let xhrRequests = []; beforeEach(function() { xhr = sinon.useFakeXMLHttpRequest(); - xhr.onCreate = function(req) { + xhr.onCreate = (req) => { xhrRequests.push(req); }; }); diff --git a/tests/unit/spec/base/stub-attribution.js b/tests/unit/spec/base/stub-attribution.js index 98507cf398a..cdeb968bf2b 100644 --- a/tests/unit/spec/base/stub-attribution.js +++ b/tests/unit/spec/base/stub-attribution.js @@ -10,7 +10,7 @@ describe('stub-attribution.js', function() { 'use strict'; - var GA_VISIT_ID = '1456954538.1610960957'; + const GA_VISIT_ID = '1456954538.1610960957'; beforeEach(function() { // stub out Mozilla.Cookie lib @@ -26,7 +26,7 @@ describe('stub-attribution.js', function() { describe('init', function() { - var data = {}; + let data = {}; beforeEach(function() { /* eslint-disable camelcase */ @@ -46,7 +46,7 @@ describe('stub-attribution.js', function() { it('should update download links if session cookie exists', function() { /* eslint-disable camelcase */ - var cookieData = { + const cookieData = { attribution_code: 'foo', attribution_sig: 'bar' }; @@ -153,7 +153,7 @@ describe('stub-attribution.js', function() { describe('hasValidData', function() { it('should return true for valid attribution data', function() { /* eslint-disable camelcase */ - var data = { + const data = { utm_source: 'desktop-snippet', utm_medium: 'referral', utm_campaign: 'F100_4242_otherstuff_in_here', @@ -169,7 +169,7 @@ describe('stub-attribution.js', function() { it('should return true for valid RTAMO data', function() { /* eslint-disable camelcase */ - var data = { + const data = { utm_source: 'addons.mozilla.org', utm_medium: 'referral', utm_campaign: 'non-fx-button', @@ -185,7 +185,7 @@ describe('stub-attribution.js', function() { it('should return false for RTAMO data that does not have AMO as the referrer', function() { /* eslint-disable camelcase */ - var data = { + const data = { utm_source: 'addons.mozilla.org', utm_medium: 'referral', utm_campaign: 'non-fx-button', @@ -201,7 +201,7 @@ describe('stub-attribution.js', function() { it('should return false for RTAMO data if referrer is not set', function() { /* eslint-disable camelcase */ - var data = { + const data = { utm_source: 'addons.mozilla.org', utm_medium: 'referral', utm_campaign: 'non-fx-button', @@ -219,24 +219,24 @@ describe('stub-attribution.js', function() { describe('isFirefoxNewScene2', function() { it('should return true if the page is scene 2 of /firefox/new/', function() { - var url = 'https://www.mozilla.org/en-US/firefox/download/thanks/'; + const url = 'https://www.mozilla.org/en-US/firefox/download/thanks/'; expect(Mozilla.StubAttribution.isFirefoxNewScene2(url)).toBeTruthy(); - var url2 = 'https://www.mozilla.org/en-US/firefox/download/thanks/?foo=bar'; + const url2 = 'https://www.mozilla.org/en-US/firefox/download/thanks/?foo=bar'; expect(Mozilla.StubAttribution.isFirefoxNewScene2(url2)).toBeTruthy(); }); }); describe('getUserAgent', function() { - var ie8 = 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)'; - var ie9 = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)'; - var ie10 = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)'; - var ie11 = 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'; - var ff = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:72.0) Gecko/20100101 Firefox/72.0'; - var chrome = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'; - var edgeium = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.74 Safari/537.36 Edg/79.0.309.43'; - var edge = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931'; + const ie8 = 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)'; + const ie9 = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)'; + const ie10 = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)'; + const ie11 = 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'; + const ff = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:72.0) Gecko/20100101 Firefox/72.0'; + const chrome = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'; + const edgeium = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.74 Safari/537.36 Edg/79.0.309.43'; + const edge = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931'; it('should identify Internet Explorer', function() { expect(Mozilla.StubAttribution.getUserAgent(ie8)).toEqual('ie'); @@ -262,7 +262,7 @@ describe('stub-attribution.js', function() { describe('waitForGoogleAnalytics', function() { it('should fire a callback with the GA visit ID', function() { - var callback = jasmine.createSpy('callback'); + const callback = jasmine.createSpy('callback'); Mozilla.StubAttribution.waitForGoogleAnalytics(callback); expect(callback).toHaveBeenCalledWith(true); @@ -272,10 +272,10 @@ describe('stub-attribution.js', function() { describe('getAttributionData', function() { it('should return attribution data if utm params are present', function() { - var referrer = ''; + const referrer = ''; /* eslint-disable camelcase */ - var utms = { + const utms = { utm_source: 'desktop-snippet', utm_medium: 'referral', utm_campaign: 'F100_4242_otherstuff_in_here', @@ -284,7 +284,7 @@ describe('stub-attribution.js', function() { /* eslint-enable camelcase */ /* eslint-disable camelcase */ - var data = { + const data = { utm_source: 'desktop-snippet', utm_medium: 'referral', utm_campaign: 'F100_4242_otherstuff_in_here', @@ -297,15 +297,15 @@ describe('stub-attribution.js', function() { spyOn(window._SearchParams.prototype, 'utmParams').and.returnValue(utms); spyOn(Mozilla.StubAttribution, 'getUserAgent').and.returnValue('chrome'); - var result = Mozilla.StubAttribution.getAttributionData(referrer); + const result = Mozilla.StubAttribution.getAttributionData(referrer); expect(result).toEqual(data); }); it('should return attribution data if referrer is present', function() { - var referrer = 'https://www.mozilla.org/en-US/'; + const referrer = 'https://www.mozilla.org/en-US/'; /* eslint-disable camelcase */ - var utms = { + const utms = { utm_source: undefined, utm_medium: undefined, utm_campaign: undefined, @@ -314,7 +314,7 @@ describe('stub-attribution.js', function() { /* eslint-enable camelcase */ /* eslint-disable camelcase */ - var data = { + const data = { referrer: 'https://www.mozilla.org/en-US/', ua: 'chrome', visit_id: GA_VISIT_ID @@ -323,15 +323,15 @@ describe('stub-attribution.js', function() { spyOn(window._SearchParams.prototype, 'utmParams').and.returnValue(utms); spyOn(Mozilla.StubAttribution, 'getUserAgent').and.returnValue('chrome'); - var result = Mozilla.StubAttribution.getAttributionData(referrer); + const result = Mozilla.StubAttribution.getAttributionData(referrer); expect(result).toEqual(data); }); it('should return only UA and GA data if neither utm params and referrer are present', function() { - var referrer = ''; + const referrer = ''; /* eslint-disable camelcase */ - var utms = { + const utms = { utm_source: undefined, utm_medium: undefined, utm_campaign: undefined, @@ -340,7 +340,7 @@ describe('stub-attribution.js', function() { /* eslint-enable camelcase */ /* eslint-disable camelcase */ - var data = { + const data = { referrer: '', ua: 'chrome', visit_id: GA_VISIT_ID @@ -349,15 +349,15 @@ describe('stub-attribution.js', function() { spyOn(window._SearchParams.prototype, 'utmParams').and.returnValue(utms); spyOn(Mozilla.StubAttribution, 'getUserAgent').and.returnValue('chrome'); - var result = Mozilla.StubAttribution.getAttributionData(referrer); + const result = Mozilla.StubAttribution.getAttributionData(referrer); expect(result).toEqual(data); }); it('should return optional experimental parameters if present', function() { - var referrer = ''; + const referrer = ''; /* eslint-disable camelcase */ - var utms = { + const utms = { utm_source: undefined, utm_medium: undefined, utm_campaign: undefined, @@ -366,7 +366,7 @@ describe('stub-attribution.js', function() { /* eslint-enable camelcase */ /* eslint-disable camelcase */ - var data = { + const data = { referrer: '', ua: 'chrome', experiment: 'firefox-new', @@ -380,19 +380,19 @@ describe('stub-attribution.js', function() { return key === 'experiment' ? 'firefox-new' : 1; }); spyOn(Mozilla.StubAttribution, 'getUserAgent').and.returnValue('chrome'); - var result = Mozilla.StubAttribution.getAttributionData(referrer); + const result = Mozilla.StubAttribution.getAttributionData(referrer); expect(result).toEqual(data); }); }); describe('requestAuthentication', function() { - var xhr; - var xhrRequests = []; + let xhr; + let xhrRequests = []; beforeEach(function() { xhr = sinon.useFakeXMLHttpRequest(); - xhr.onCreate = function(req) { + xhr.onCreate = (req) => { xhrRequests.push(req); }; jasmine.clock().install(); @@ -408,13 +408,13 @@ describe('stub-attribution.js', function() { it('should handle a request successfully', function() { /* eslint-disable camelcase */ - var data = { + const data = { attribution_code: 'foo', attribution_sig: 'bar' }; /* eslint-enable camelcase */ - var callback = function() {}; // eslint-disable-line no-empty-function + const callback = function() {}; // eslint-disable-line no-empty-function Mozilla.StubAttribution.successCallback = callback; spyOn(Mozilla.StubAttribution, 'onRequestSuccess').and.callThrough(); @@ -431,7 +431,7 @@ describe('stub-attribution.js', function() { }); it('should handle a timeout as expected', function() { - var callback = function() {}; // eslint-disable-line no-empty-function + const callback = function() {}; // eslint-disable-line no-empty-function Mozilla.StubAttribution.timeoutCallback = callback; spyOn(Mozilla.StubAttribution, 'onRequestTimeout').and.callThrough(); spyOn(Mozilla.StubAttribution, 'timeoutCallback'); @@ -455,7 +455,7 @@ describe('stub-attribution.js', function() { it('should handle the data as expected', function() { /* eslint-disable camelcase */ - var data = { + const data = { attribution_code: 'foo', attribution_sig: 'bar' }; @@ -471,7 +471,7 @@ describe('stub-attribution.js', function() { it('should only handle the request once', function() { /* eslint-disable camelcase */ - var data = { + const data = { attribution_code: 'foo', attribution_sig: 'bar' }; @@ -489,28 +489,29 @@ describe('stub-attribution.js', function() { describe('updateBouncerLinks', function() { /* eslint-disable camelcase */ - var data = { + const data = { attribution_code: 'test-code', attribution_sig: 'test-sig' }; /* eslint-enable camelcase */ - var winUrl = 'https://download.mozilla.org/?product=firefox-stub&os=win&lang=en-US'; - var win64Url = 'https://download.mozilla.org/?product=firefox-50.0b11-SSL&os=win64&lang=en-US'; - var transitionalUrl = 'https://www.mozilla.org/firefox/download/thanks/'; + const winUrl = 'https://download.mozilla.org/?product=firefox-stub&os=win&lang=en-US'; + const win64Url = 'https://download.mozilla.org/?product=firefox-50.0b11-SSL&os=win64&lang=en-US'; + const transitionalUrl = 'https://www.mozilla.org/firefox/download/thanks/'; beforeEach(function() { - var downloadMarkup = ''; + const downloadMarkup = + ``; document.body.insertAdjacentHTML('beforeend', downloadMarkup); }); afterEach(function() { - var content = document.querySelector('.download-list'); + const content = document.querySelector('.download-list'); content.parentNode.removeChild(content); }); @@ -540,9 +541,9 @@ describe('stub-attribution.js', function() { describe('appendToDownloadURL', function() { - var params = {}; - var originalUrl = ''; - var expectedUrl = ''; + let params = {}; + let originalUrl = ''; + let expectedUrl = ''; beforeEach(function() { /* eslint-disable camelcase */ @@ -574,7 +575,7 @@ describe('stub-attribution.js', function() { describe('getCookie', function() { it('should return an object as expected', function() { - spyOn(Mozilla.Cookies, 'getItem').and.callFake(function(id) { + spyOn(Mozilla.Cookies, 'getItem').and.callFake((id) => { return id === Mozilla.StubAttribution.COOKIE_CODE_ID ? 'foo' : 'bar'; }); /* eslint-disable camelcase */ @@ -595,7 +596,7 @@ describe('stub-attribution.js', function() { it('should set session cookies as expected', function() { /* eslint-disable camelcase */ - var data = { + const data = { attribution_code: 'foo', attribution_sig: 'bar' }; @@ -617,7 +618,7 @@ describe('stub-attribution.js', function() { it('should return true if both session cookies exists', function() { spyOn(Mozilla.Cookies, 'hasItem').and.returnValue(true); - var result = Mozilla.StubAttribution.hasCookie(); + const result = Mozilla.StubAttribution.hasCookie(); expect(Mozilla.Cookies.hasItem.calls.count()).toEqual(2); expect(Mozilla.Cookies.hasItem).toHaveBeenCalledWith(Mozilla.StubAttribution.COOKIE_CODE_ID); expect(Mozilla.Cookies.hasItem).toHaveBeenCalledWith(Mozilla.StubAttribution.COOKIE_SIGNATURE_ID); @@ -625,10 +626,10 @@ describe('stub-attribution.js', function() { }); it('should return false if one or more session cookies do not exist', function() { - spyOn(Mozilla.Cookies, 'hasItem').and.callFake(function(id) { + spyOn(Mozilla.Cookies, 'hasItem').and.callFake((id) => { return id === Mozilla.StubAttribution.COOKIE_CODE_ID ? true : false; }); - var result = Mozilla.StubAttribution.hasCookie(); + const result = Mozilla.StubAttribution.hasCookie(); expect(Mozilla.Cookies.hasItem.calls.count()).toEqual(2); expect(result).toBeFalsy(); }); @@ -636,8 +637,8 @@ describe('stub-attribution.js', function() { describe('getAttributionRate', function() { - var html = document.documentElement; - var attr = 'data-stub-attribution-rate'; + const html = document.documentElement; + const attr = 'data-stub-attribution-rate'; afterEach(function() { html.removeAttribute(attr); diff --git a/tests/unit/spec/firefox/all/all-downloads-unified.js b/tests/unit/spec/firefox/all/all-downloads-unified.js index 64e10f50b5d..97b0084353e 100644 --- a/tests/unit/spec/firefox/all/all-downloads-unified.js +++ b/tests/unit/spec/firefox/all/all-downloads-unified.js @@ -11,12 +11,11 @@ describe('all-downloads-unified.js', function() { 'use strict'; describe('getSelectOption', function() { - var select = [ - '' - ].join(); + const select = + ``; beforeEach(function () { document.body.insertAdjacentHTML('beforeend', select); @@ -27,30 +26,29 @@ describe('all-downloads-unified.js', function() { }); it('should return the selection option', function() { - var el = document.getElementById('select-product'); - var result = Mozilla.FirefoxDownloader.getSelectOption(el); + const el = document.getElementById('select-product'); + const result = Mozilla.FirefoxDownloader.getSelectOption(el); expect(result.id).toEqual('desktop_nightly'); expect(result.label).toEqual('Firefox Nightly'); }); }); describe('setAllSelectOptions', function() { - var select = [ - '' + - '' - ].join(); + const select = + ` + `; beforeEach(function () { document.body.insertAdjacentHTML('beforeend', select); @@ -62,12 +60,12 @@ describe('all-downloads-unified.js', function() { }); it('should set all the options correctly', function() { - var el = document.querySelectorAll('.c-selection-input'); + const el = document.querySelectorAll('.c-selection-input'); Mozilla.FirefoxDownloader.setAllSelectOptions('linux', el); - var result = Mozilla.FirefoxDownloader.getSelectOption(el[0]); + const result = Mozilla.FirefoxDownloader.getSelectOption(el[0]); expect(result.id).toEqual('linux'); expect(result.label).toEqual('Linux 32-bit'); - var result2 = Mozilla.FirefoxDownloader.getSelectOption(el[1]); + const result2 = Mozilla.FirefoxDownloader.getSelectOption(el[1]); expect(result2.id).toEqual('linux'); expect(result2.label).toEqual('Linux 32-bit'); }); @@ -92,17 +90,16 @@ describe('all-downloads-unified.js', function() { }); describe('getDownloadLink', function() { - var downloadList = [ - '
    ' + - '
  1. ' + - '' + - '
  2. ' + - '
' - ].join(); + const downloadList = + `
    +
  1. + +
  2. +
`; beforeEach(function () { document.body.insertAdjacentHTML('beforeend', downloadList); @@ -113,23 +110,23 @@ describe('all-downloads-unified.js', function() { }); it('should return a download link as expected', function() { - var result = Mozilla.FirefoxDownloader.getDownloadLink('desktop_release', 'win64', 'ach'); + const result = Mozilla.FirefoxDownloader.getDownloadLink('desktop_release', 'win64', 'ach'); expect(result).toEqual('https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ach'); }); it('should return an error if a download link is not found', function() { - var product = 'desktop_release'; - var platform = 'win64'; - var language = 'de'; + const product = 'desktop_release'; + const platform = 'win64'; + const language = 'de'; spyOn(Mozilla.FirefoxDownloader, 'onError'); - var error = new Error('A download link was not found for: ' + product + ', platform: ' + platform + ', language: ' + language); + const error = new Error(`A download link was not found for: ${product}, platform: ${platform}, language: ${language}`); Mozilla.FirefoxDownloader.getDownloadLink(product, platform, language); expect(Mozilla.FirefoxDownloader.onError).toHaveBeenCalledWith(error); }); }); describe('setDownloadLink', function() { - var downloadLink = 'Download Now'; + const downloadLink = 'Download Now'; beforeEach(function () { document.body.insertAdjacentHTML('beforeend', downloadLink); @@ -140,20 +137,20 @@ describe('all-downloads-unified.js', function() { }); it('should set desktop download links as expected', function() { - var el = document.getElementById('download-button-primary'); - var url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ach'; + const el = document.getElementById('download-button-primary'); + const url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ach'; - var product = { + const product = { id: 'desktop_beta', label: 'Firefox Beta' }; - var platform = { + const platform = { id: 'win64', label: 'Windows 64-bit' }; - var language = { + const language = { id: 'ach', label: 'Acholi' }; @@ -178,13 +175,13 @@ describe('all-downloads-unified.js', function() { }); it('should return a well formatted attribution link if data exists', function() { - var url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=win&lang=en-US'; + const url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=win&lang=en-US'; spyOn(Mozilla.StubAttribution, 'hasCookie').and.returnValue(true); expect(Mozilla.FirefoxDownloader.setAttributionURL(url)).toEqual('https://download.mozilla.org/?product=firefox-latest-ssl&os=win&lang=en-US&attribution_code=some-attribution-code&attribution_sig=some-attribution-signature'); }); it('should return the original link if data does not exist', function() { - var url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=win&lang=en-US'; + const url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=win&lang=en-US'; spyOn(Mozilla.StubAttribution, 'hasCookie').and.returnValue(false); expect(Mozilla.FirefoxDownloader.setAttributionURL(url)).toEqual(url); }); @@ -192,17 +189,17 @@ describe('all-downloads-unified.js', function() { describe('isValidURL', function() { it('should return true for bouncer prod links', function() { - var url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=osx&lang=en-US'; + const url = 'https://download.mozilla.org/?product=firefox-latest-ssl&os=osx&lang=en-US'; expect(Mozilla.FirefoxDownloader.isValidURL(url)).toBeTruthy(); }); it('should return true for bouncer stage links', function() { - var url = 'https://bouncer-bouncer.stage.mozaws.net/?product=firefox-latest-ssl&os=osx&lang=en-US'; + const url = 'https://bouncer-bouncer.stage.mozaws.net/?product=firefox-latest-ssl&os=osx&lang=en-US'; expect(Mozilla.FirefoxDownloader.isValidURL(url)).toBeTruthy(); }); it('should return false for everything else', function() { - var url = 'https://some.other.domain/?product=firefox-latest-ssl&os=osx&lang=en-US'; + const url = 'https://some.other.domain/?product=firefox-latest-ssl&os=osx&lang=en-US'; expect(Mozilla.FirefoxDownloader.isValidURL(url)).toBeFalsy(); expect(Mozilla.FirefoxDownloader.isValidURL(null)).toBeFalsy(); expect(Mozilla.FirefoxDownloader.isValidURL({})).toBeFalsy(); @@ -210,52 +207,51 @@ describe('all-downloads-unified.js', function() { }); describe('setDownloadButtonDesktop', function() { - var product = { + const product = { id: 'desktop_beta', label: 'Firefox Beta' }; - var platform = { + const platform = { id: 'win64', label: 'Windows 64-bit' }; - var language = { + const language = { id: 'ach', label: 'Acholi' }; - var options = [ - '
' + - '

' + - '' + - '' + - '

' + - '

' + - '' + - '' + - '

' + - '

' + - '' + - '' + - '

' + - '
' + - '
    ' + - '
  1. ' + - '' + - '
  2. ' + - '
' - ].join(); + const options = + `
+

+ + +

+

+ + +

+

+ + +

+
+
    +
  1. + +
  2. +
`; beforeEach(function () { document.body.insertAdjacentHTML('beforeend', options); @@ -278,73 +274,72 @@ describe('all-downloads-unified.js', function() { }); it('should throw an error if a download link is not valid', function() { - var badURL = 'https://download.mozilla.org.somebadactor.com/download.exe'; + const badURL = 'https://download.mozilla.org.somebadactor.com/download.exe'; spyOn(Mozilla.FirefoxDownloader, 'getProductSelection').and.returnValue(product); spyOn(Mozilla.FirefoxDownloader, 'setDownloadInfo'); spyOn(Mozilla.FirefoxDownloader, 'getDownloadLink').and.returnValue(badURL); spyOn(Mozilla.FirefoxDownloader, 'isValidURL').and.returnValue(false); spyOn(Mozilla.FirefoxDownloader, 'onError'); Mozilla.FirefoxDownloader.setDownloadButton(); - var error = new Error('An unrecognised download link was found: ' + badURL); + const error = new Error(`An unrecognised download link was found: ${badURL}`); expect(Mozilla.FirefoxDownloader.onError).toHaveBeenCalledWith(error); }); }); describe('setDownloadButtonAndroid', function() { - var product = { + const product = { id: 'android_release', label: 'Firefox Android' }; - var platform = { + const platform = { id: 'android', label: 'Android' }; - var language = { + const language = { id: 'all', label: 'Multiple languages' }; - var options = [ - '
' + - '' + - '

' + - '' + - '' + - 'Get help' + - '' + - '' + - '

' + - '

' + - '' + - '' + - '

' + - '
' + - '
    ' + - '
  1. ' + - '

    Multiple languages

    ' + - '' + - '
  2. ' + - '
' - ].join(); + const options = + `
+ +

+ + + Get help + + +

+

+ + +

+
+
    +
  1. +

    Multiple languages

    + +
  2. +
`; beforeEach(function () { document.body.insertAdjacentHTML('beforeend', options); @@ -370,7 +365,7 @@ describe('all-downloads-unified.js', function() { describe('getProductSelection', function() { it('should return the selected product', function() { - var product = { + const product = { id: 'desktop_esr', label: 'Firefox Extended Support Release' }; @@ -381,15 +376,15 @@ describe('all-downloads-unified.js', function() { }); it('should return the correct ESR product', function() { - var next = 'desktop_esr_next'; - var product = { + const next = 'desktop_esr_next'; + const product = { id: 'desktop_esr', label: 'Firefox Extended Support Release' }; spyOn(Mozilla.FirefoxDownloader, 'getSelectOption').and.returnValue(product); spyOn(Mozilla.FirefoxDownloader, 'getFormSelection').and.returnValue(next); - var result = Mozilla.FirefoxDownloader.getProductSelection(); + const result = Mozilla.FirefoxDownloader.getProductSelection(); expect(result.id).toEqual(next); expect(result.label).toEqual(product.label); }); @@ -397,7 +392,7 @@ describe('all-downloads-unified.js', function() { describe('onVersionChange', function() { it('should update the form fields and generate a download URL', function() { - var e = { + const e = { target: { value: 'desktop_release' } @@ -414,7 +409,7 @@ describe('all-downloads-unified.js', function() { }); it('should update the product selection for ESR', function() { - var e = { + const e = { target: { value: 'desktop_esr_next' } @@ -455,7 +450,7 @@ describe('all-downloads-unified.js', function() { describe('onHashChange', function() { it('should update the product selection if a valid hash identifier exists', function() { - var id = 'firefox_beta'; + const id = 'firefox_beta'; spyOn(Mozilla.FirefoxDownloader, 'getHash').and.returnValue(id); spyOn(Mozilla.FirefoxDownloader, 'setProductSelection'); spyOn(Mozilla.FirefoxDownloader, 'setDownloadButton'); @@ -477,9 +472,9 @@ describe('all-downloads-unified.js', function() { }); describe('init', function() { - var platform = 'windows'; - var language = 'de'; - var product = { + const platform = 'windows'; + const language = 'de'; + const product = { 'id': 'desktop_beta', 'label': 'Firefox Beta' }; diff --git a/tests/unit/spec/firefox/new/common/thanks.js b/tests/unit/spec/firefox/new/common/thanks.js index 5980de53f5a..e26a1778dbf 100644 --- a/tests/unit/spec/firefox/new/common/thanks.js +++ b/tests/unit/spec/firefox/new/common/thanks.js @@ -24,87 +24,88 @@ describe('thanks.js', function() { describe('getDownloadURL', function() { beforeEach(function() { - var button = ''; + const button = + ``; document.body.insertAdjacentHTML('beforeend', button); }); afterEach(function() { - document.querySelectorAll('.download-list').forEach(function(e) { + document.querySelectorAll('.download-list').forEach((e) => { e.parentNode.removeChild(e); }); }); it('should return the correct download for Windows', function() { - var site = { + const site = { platform: 'windows' }; - var result = Mozilla.DownloadThanks.getDownloadURL(site); + const result = Mozilla.DownloadThanks.getDownloadURL(site); expect(result).toEqual('https://download.mozilla.org/?product=firefox-stub&os=win&lang=en-US'); }); it('should return the correct download for macOS', function() { - var site = { + const site = { platform: 'osx', }; - var result = Mozilla.DownloadThanks.getDownloadURL(site); + const result = Mozilla.DownloadThanks.getDownloadURL(site); expect(result).toEqual('https://download.mozilla.org/?product=firefox-latest-ssl&os=osx&lang=en-US'); }); it('should return the correct download for Linux 32bit', function() { - var site = { + const site = { platform: 'linux', isARM: false, archSize: 32 }; - var result = Mozilla.DownloadThanks.getDownloadURL(site); + const result = Mozilla.DownloadThanks.getDownloadURL(site); expect(result).toEqual('https://download.mozilla.org/?product=firefox-latest-ssl&os=linux&lang=en-US'); }); it('should return the correct download for Linux 64bit', function() { - var site = { + const site = { platform: 'linux', isARM: false, archSize: 64 }; - var result = Mozilla.DownloadThanks.getDownloadURL(site); + const result = Mozilla.DownloadThanks.getDownloadURL(site); expect(result).toEqual('https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=en-US'); }); it('should not return a download for Linux ARM', function() { - var site = { + const site = { platform: 'linux', isARM: true, archSize: 64 }; - var result = Mozilla.DownloadThanks.getDownloadURL(site); + const result = Mozilla.DownloadThanks.getDownloadURL(site); expect(result).toBeFalsy(); }); it('should return the correct download for Android', function() { - var site = { + const site = { platform: 'android', }; - var result = Mozilla.DownloadThanks.getDownloadURL(site); + const result = Mozilla.DownloadThanks.getDownloadURL(site); expect(result).toEqual('https://play.google.com/store/apps/details?id=org.mozilla.firefox'); }); it('should return the correct download for iOS', function() { - var site = { + const site = { platform: 'ios', }; - var result = Mozilla.DownloadThanks.getDownloadURL(site); + const result = Mozilla.DownloadThanks.getDownloadURL(site); expect(result).toEqual('https://itunes.apple.com/us/app/firefox-private-safe-browser/id989804926'); }); }); diff --git a/tests/unit/spec/firefox/new/yandex/show-yandex.js b/tests/unit/spec/firefox/new/yandex/show-yandex.js index 89d2235049c..90654c49e18 100644 --- a/tests/unit/spec/firefox/new/yandex/show-yandex.js +++ b/tests/unit/spec/firefox/new/yandex/show-yandex.js @@ -25,14 +25,14 @@ describe('show-yandex.js', function() { describe('getLocation', function() { - var xhr; - var xhrRequests = []; + let xhr; + let xhrRequests = []; beforeEach(function() { spyOn(Mozilla.Yandex, 'onRequestComplete'); xhr = sinon.useFakeXMLHttpRequest(); - xhr.onCreate = function(req) { + xhr.onCreate = (req) => { xhrRequests.push(req); }; }); @@ -43,11 +43,11 @@ describe('show-yandex.js', function() { }); it('should pass country to onRequestComplete if server makes a response', function() { - var country = 'ru'; + const country = 'ru'; Mozilla.Yandex.getLocation(); - xhrRequests[0].respond(200, {'Content-Type': 'application/json'}, '{"country_code": "' + country + '"}'); + xhrRequests[0].respond(200, {'Content-Type': 'application/json'}, `{"country_code": "${country}"}`); expect(Mozilla.Yandex.onRequestComplete).toHaveBeenCalledWith(country); }); @@ -85,7 +85,7 @@ describe('show-yandex.js', function() { describe('onRequestComplete', function() { - var country = 'ru'; + const country = 'ru'; beforeEach(function() { spyOn(Mozilla.Yandex, 'updatePageContent'); @@ -142,8 +142,8 @@ describe('show-yandex.js', function() { describe('cookieExpiresDate', function() { it('should return a cookie expiry date 3 days in the future by default', function() { - var expiry = Mozilla.Yandex.cookieExpiresDate(new Date(2018, 8, 1, 10, 15)); - var date = new Date(expiry); + const expiry = Mozilla.Yandex.cookieExpiresDate(new Date(2018, 8, 1, 10, 15)); + const date = new Date(expiry); expect(date.getFullYear()).toBe(2018); expect(date.getMonth()).toBe(8); expect(date.getDate()).toBe(4); @@ -153,7 +153,7 @@ describe('show-yandex.js', function() { describe('setCookie', function() { it('should set session cookies as expected', function() { - var country = 'ru'; + const country = 'ru'; spyOn(Mozilla.Cookies, 'setItem'); Mozilla.Yandex.setCookie(country); @@ -174,20 +174,20 @@ describe('show-yandex.js', function() { it('should return true if session cookie exists', function() { spyOn(Mozilla.Cookies, 'hasItem').and.returnValue(true); - var result = Mozilla.Yandex.hasCookie(); + const result = Mozilla.Yandex.hasCookie(); expect(Mozilla.Cookies.hasItem).toHaveBeenCalledWith(Mozilla.Yandex.COOKIE_ID); expect(result).toBeTruthy(); }); it('should return false if session cookie does not exist', function() { spyOn(Mozilla.Cookies, 'hasItem').and.returnValue(false); - var result = Mozilla.Yandex.hasCookie(); + const result = Mozilla.Yandex.hasCookie(); expect(result).toBeFalsy(); }); }); describe('init', function() { - var isDesktop; + let isDesktop; beforeEach(function() { isDesktop = Mozilla.Client.isDesktop; @@ -198,7 +198,7 @@ describe('show-yandex.js', function() { }); it('should display Yandex content if override URL is set to Russia', function() { - var country = 'ru'; + const country = 'ru'; Mozilla.Client.isDesktop = true; spyOn(Mozilla.Cookies, 'enabled').and.returnValue(true); spyOn(Mozilla.Yandex, 'hasGeoOverride').and.returnValue(country); @@ -212,7 +212,7 @@ describe('show-yandex.js', function() { }); it('should display Regular content if override URL is set to any other value', function() { - var country = 'us'; + const country = 'us'; Mozilla.Client.isDesktop = true; spyOn(Mozilla.Cookies, 'enabled').and.returnValue(true); spyOn(Mozilla.Yandex, 'hasGeoOverride').and.returnValue(country); diff --git a/tests/unit/spec/vpn/geo.js b/tests/unit/spec/vpn/geo.js index d0d95d45922..80f3dd29ac8 100644 --- a/tests/unit/spec/vpn/geo.js +++ b/tests/unit/spec/vpn/geo.js @@ -17,14 +17,14 @@ describe('geo.js', function() { describe('getLocation', function() { - var xhr; - var xhrRequests = []; + let xhr; + let xhrRequests = []; beforeEach(function() { spyOn(Mozilla.VPN, 'onRequestComplete'); xhr = sinon.useFakeXMLHttpRequest(); - xhr.onCreate = function(req) { + xhr.onCreate = (req) => { xhrRequests.push(req); }; }); @@ -35,11 +35,11 @@ describe('geo.js', function() { }); it('should pass country to onRequestComplete if server makes a response', function() { - var country = 'ru'; + const country = 'ru'; Mozilla.VPN.getLocation(); - xhrRequests[0].respond(200, {'Content-Type': 'application/json'}, '{"country_code": "' + country + '"}'); + xhrRequests[0].respond(200, {'Content-Type': 'application/json'}, `{"country_code": "${country}"}`); expect(Mozilla.VPN.onRequestComplete).toHaveBeenCalledWith(country); }); @@ -70,7 +70,7 @@ describe('geo.js', function() { describe('onRequestComplete', function() { - var country = 'de'; + const country = 'de'; beforeEach(function() { spyOn(Mozilla.VPN, 'getAvailability').and.returnValue('variable-price'); @@ -88,7 +88,7 @@ describe('geo.js', function() { describe('getAvailability', function() { - var availableCountries = '|ca|my|nz|sg|gb|gg|im|io|je|uk|vg|as|mp|pr|um|us|vi|at|be|ch|de|es|fr|it|'; + const availableCountries = '|ca|my|nz|sg|gb|gg|im|io|je|uk|vg|as|mp|pr|um|us|vi|at|be|ch|de|es|fr|it|'; it('should return `available` if matching country code is found', function() { expect(Mozilla.VPN.getAvailability('us', availableCountries)).toEqual('available'); @@ -145,17 +145,17 @@ describe('geo.js', function() { describe('updateSubscriptionURL', function() { it('should update the subscription plan ID as expected', function() { - var result = Mozilla.VPN.updateSubscriptionURL('price_1IgnlcJNcmPzuWtRjrNa39W4', 'https://accounts.firefox.com/subscriptions/products/prod_FiJ42WCzZNRSbS?plan=price_1IgwblJNcmPzuWtRynC7dqQa&entrypoint=www.mozilla.org-vpn-product-page'); + const result = Mozilla.VPN.updateSubscriptionURL('price_1IgnlcJNcmPzuWtRjrNa39W4', 'https://accounts.firefox.com/subscriptions/products/prod_FiJ42WCzZNRSbS?plan=price_1IgwblJNcmPzuWtRynC7dqQa&entrypoint=www.mozilla.org-vpn-product-page'); expect(result).toEqual('https://accounts.firefox.com/subscriptions/products/prod_FiJ42WCzZNRSbS?plan=price_1IgnlcJNcmPzuWtRjrNa39W4&entrypoint=www.mozilla.org-vpn-product-page'); }); it('should not change the URL if there is no plan ID', function() { - var result = Mozilla.VPN.updateSubscriptionURL(null, 'https://accounts.firefox.com/subscriptions/products/prod_FiJ42WCzZNRSbS?plan=price_1IgwblJNcmPzuWtRynC7dqQa&entrypoint=www.mozilla.org-vpn-product-page'); + const result = Mozilla.VPN.updateSubscriptionURL(null, 'https://accounts.firefox.com/subscriptions/products/prod_FiJ42WCzZNRSbS?plan=price_1IgwblJNcmPzuWtRynC7dqQa&entrypoint=www.mozilla.org-vpn-product-page'); expect(result).toEqual('https://accounts.firefox.com/subscriptions/products/prod_FiJ42WCzZNRSbS?plan=price_1IgwblJNcmPzuWtRynC7dqQa&entrypoint=www.mozilla.org-vpn-product-page'); }); it('should not change the URL if there is no plan query parameter', function() { - var result = Mozilla.VPN.updateSubscriptionURL('price_1IgwblJNcmPzuWtRynC7dqQa', 'https://accounts.firefox.com/subscriptions/products?entrypoint=www.mozilla.org-vpn-product-page'); + const result = Mozilla.VPN.updateSubscriptionURL('price_1IgwblJNcmPzuWtRynC7dqQa', 'https://accounts.firefox.com/subscriptions/products?entrypoint=www.mozilla.org-vpn-product-page'); expect(result).toEqual('https://accounts.firefox.com/subscriptions/products?entrypoint=www.mozilla.org-vpn-product-page'); }); }); @@ -210,7 +210,7 @@ describe('geo.js', function() { }); it('should override geo-location call if param exists', function() { - var country = 'de'; + const country = 'de'; spyOn(Mozilla.VPN, 'hasGeoOverride').and.returnValue(country); Mozilla.VPN.init(); diff --git a/yarn.lock b/yarn.lock index 86e6aa1581a..c3de07a9617 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,28 +21,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== -"@babel/core@>=7.9.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8" - integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.0" - "@babel/helper-module-transforms" "^7.15.0" - "@babel/helpers" "^7.14.8" - "@babel/parser" "^7.15.0" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/core@^7.15.5": +"@babel/core@>=7.9.0", "@babel/core@^7.15.5": version "7.15.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9" integrity sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg== @@ -63,15 +42,6 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" - integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== - dependencies: - "@babel/types" "^7.15.0" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/generator@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" @@ -106,16 +76,6 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818" - integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A== - dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" @@ -157,16 +117,7 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-function-name@^7.15.4": +"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== @@ -175,13 +126,6 @@ "@babel/template" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-get-function-arity@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" @@ -189,13 +133,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-hoist-variables@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" @@ -203,13 +140,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-member-expression-to-functions@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b" - integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg== - dependencies: - "@babel/types" "^7.15.0" - "@babel/helper-member-expression-to-functions@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" @@ -217,54 +147,26 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.15.4": +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== dependencies: "@babel/types" "^7.15.4" -"@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c" - integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw== + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz#7da80c8cbc1f02655d83f8b79d25866afe50d226" + integrity sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw== dependencies: "@babel/helper-module-imports" "^7.15.4" "@babel/helper-replace-supers" "^7.15.4" "@babel/helper-simple-access" "^7.15.4" "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-validator-identifier" "^7.15.7" "@babel/template" "^7.15.4" "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-module-transforms@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" - integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.0" - "@babel/helper-simple-access" "^7.14.8" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.9" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.0" - -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.6" "@babel/helper-optimise-call-expression@^7.15.4": version "7.15.4" @@ -297,23 +199,6 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-replace-supers@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4" - integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.15.0" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.0" - -"@babel/helper-simple-access@^7.14.8": - version "7.14.8" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" - integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== - dependencies: - "@babel/types" "^7.14.8" - "@babel/helper-simple-access@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" @@ -328,13 +213,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-split-export-declaration@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" @@ -342,10 +220,10 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== "@babel/helper-validator-option@^7.14.5": version "7.14.5" @@ -362,15 +240,6 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helpers@^7.14.8": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" - integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.15.0" - "@babel/types" "^7.15.0" - "@babel/helpers@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" @@ -389,15 +258,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.14.5", "@babel/parser@^7.15.0": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" - integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== - "@babel/parser@^7.15.4", "@babel/parser@^7.15.5": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549" - integrity sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q== + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae" + integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g== "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": version "7.15.4" @@ -979,15 +843,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/template@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" @@ -1012,29 +867,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" - integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.0" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.15.0" - "@babel/types" "^7.15.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" - integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== - dependencies: - "@babel/helper-validator-identifier" "^7.14.9" - to-fast-properties "^2.0.0" - "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.4.4": version "7.15.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" @@ -1044,9 +876,9 @@ to-fast-properties "^2.0.0" "@discoveryjs/json-ext@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" - integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== + version "0.5.5" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3" + integrity sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA== "@eslint/eslintrc@^0.4.3": version "0.4.3" @@ -1104,80 +936,79 @@ fastq "^1.6.0" "@sentry/browser@^6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.12.0.tgz#970cd68fa117a1e1336fdb373e3b1fa76cd63e2d" - integrity sha512-wsJi1NLOmfwtPNYxEC50dpDcVY7sdYckzwfqz1/zHrede1mtxpqSw+7iP4bHADOJXuF+ObYYTHND0v38GSXznQ== + version "6.13.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.13.2.tgz#8b731ecf8c3cdd92a4b6893a26f975fd5844056d" + integrity sha512-bkFXK4vAp2UX/4rQY0pj2Iky55Gnwr79CtveoeeMshoLy5iDgZ8gvnLNAz7om4B9OQk1u7NzLEa4IXAmHTUyag== dependencies: - "@sentry/core" "6.12.0" - "@sentry/types" "6.12.0" - "@sentry/utils" "6.12.0" + "@sentry/core" "6.13.2" + "@sentry/types" "6.13.2" + "@sentry/utils" "6.13.2" tslib "^1.9.3" -"@sentry/core@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.12.0.tgz#bc7c5f0785b6a392d9ad47bd9b1fae3f5389996c" - integrity sha512-mU/zdjlzFHzdXDZCPZm8OeCw7c9xsbL49Mq0TrY0KJjLt4CJBkiq5SDTGfRsenBLgTedYhe5Z/J8Z+xVVq+MfQ== +"@sentry/core@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.13.2.tgz#2ce164f81667aa89cd116f807d772b4718434583" + integrity sha512-snXNNFLwlS7yYxKTX4DBXebvJK+6ikBWN6noQ1CHowvM3ReFBlrdrs0Z0SsSFEzXm2S4q7f6HHbm66GSQZ/8FQ== dependencies: - "@sentry/hub" "6.12.0" - "@sentry/minimal" "6.12.0" - "@sentry/types" "6.12.0" - "@sentry/utils" "6.12.0" + "@sentry/hub" "6.13.2" + "@sentry/minimal" "6.13.2" + "@sentry/types" "6.13.2" + "@sentry/utils" "6.13.2" tslib "^1.9.3" -"@sentry/hub@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.12.0.tgz#29e323ab6a95e178fb14fffb684aa0e09707197f" - integrity sha512-yR/UQVU+ukr42bSYpeqvb989SowIXlKBanU0cqLFDmv5LPCnaQB8PGeXwJAwWhQgx44PARhmB82S6Xor8gYNxg== +"@sentry/hub@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.13.2.tgz#ebc66fd55c96c7686a53ffd3521b6a63f883bb79" + integrity sha512-sppSuJdNMiMC/vFm/dQowCBh11uTrmvks00fc190YWgxHshodJwXMdpc+pN61VSOmy2QA4MbQ5aMAgHzPzel3A== dependencies: - "@sentry/types" "6.12.0" - "@sentry/utils" "6.12.0" + "@sentry/types" "6.13.2" + "@sentry/utils" "6.13.2" tslib "^1.9.3" -"@sentry/minimal@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.12.0.tgz#cbe20e95056cedb9709d7d5b2119ef95206a9f8c" - integrity sha512-r3C54Q1KN+xIqUvcgX9DlcoWE7ezWvFk2pSu1Ojx9De81hVqR9u5T3sdSAP2Xma+um0zr6coOtDJG4WtYlOtsw== +"@sentry/minimal@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.13.2.tgz#de3ecc62b9463bf56ccdbcf4c75f7ea1aeeebc11" + integrity sha512-6iJfEvHzzpGBHDfLxSHcGObh73XU1OSQKWjuhDOe7UQDyI4BQmTfcXAC+Fr8sm8C/tIsmpVi/XJhs8cubFdSMw== dependencies: - "@sentry/hub" "6.12.0" - "@sentry/types" "6.12.0" + "@sentry/hub" "6.13.2" + "@sentry/types" "6.13.2" tslib "^1.9.3" -"@sentry/types@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.12.0.tgz#b7395688a79403c6df8d8bb8d81deb8222519853" - integrity sha512-urtgLzE4EDMAYQHYdkgC0Ei9QvLajodK1ntg71bGn0Pm84QUpaqpPDfHRU+i6jLeteyC7kWwa5O5W1m/jrjGXA== +"@sentry/types@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.13.2.tgz#8388d5b92ea8608936e7aae842801dc90e0184e6" + integrity sha512-6WjGj/VjjN8LZDtqJH5ikeB1o39rO1gYS6anBxiS3d0sXNBb3Ux0pNNDFoBxQpOhmdDHXYS57MEptX9EV82gmg== -"@sentry/utils@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.12.0.tgz#3de261e8d11bdfdc7add64a3065d43517802e975" - integrity sha512-oRHQ7TH5TSsJqoP9Gqq25Jvn9LKexXfAh/OoKwjMhYCGKGhqpDNUIZVgl9DWsGw5A5N5xnQyLOxDfyRV5RshdA== +"@sentry/utils@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.13.2.tgz#fb8010e7b67cc8c084d8067d64ef25289269cda5" + integrity sha512-foF4PbxqPMWNbuqdXkdoOmKm3quu3PP7Q7j/0pXkri4DtCuvF/lKY92mbY0V9rHS/phCoj+3/Se5JvM2ymh2/w== dependencies: - "@sentry/types" "6.12.0" + "@sentry/types" "6.13.2" tslib "^1.9.3" -"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": +"@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.3": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" -"@sinonjs/formatio@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" - integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== +"@sinonjs/fake-timers@^7.0.4", "@sinonjs/fake-timers@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== dependencies: - "@sinonjs/commons" "^1" - "@sinonjs/samsam" "^3.1.0" + "@sinonjs/commons" "^1.7.0" -"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.2": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" - integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== +"@sinonjs/samsam@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-6.0.2.tgz#a0117d823260f282c04bff5f8704bdc2ac6910bb" + integrity sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ== dependencies: - "@sinonjs/commons" "^1.3.0" - array-from "^2.1.1" - lodash "^4.17.15" + "@sinonjs/commons" "^1.6.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" "@sinonjs/text-encoding@^0.7.1": version "0.7.1" @@ -1199,10 +1030,10 @@ remark "^13.0.0" unist-util-find-all-after "^3.0.2" -"@trysound/sax@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" - integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/component-emitter@^1.2.10": version "1.2.10" @@ -1271,9 +1102,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*", "@types/node@>=10.0.0": - version "16.7.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.1.tgz#c6b9198178da504dfca1fd0be9b2e1002f1586f0" - integrity sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A== + version "16.9.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.6.tgz#040a64d7faf9e5d9e940357125f0963012e66f04" + integrity sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1322,9 +1153,9 @@ source-map "^0.7.3" "@types/webpack@^4.4.31": - version "4.41.30" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" - integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== + version "4.41.31" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.31.tgz#c35f252a3559ddf9c85c0d8b0b42019025e581aa" + integrity sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -1510,9 +1341,9 @@ acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== after@0.8.2: version "0.8.2" @@ -1535,9 +1366,9 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.1: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + version "8.6.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764" + integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1575,9 +1406,9 @@ ansi-regex@^4.1.0: integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^2.2.1: version "2.2.1" @@ -1612,9 +1443,9 @@ aproba@^1.0.3: integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -1626,11 +1457,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -array-from@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" - integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -1718,12 +1544,12 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== +axios@0.21.4: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.0" babel-loader@^8.2.2: version "8.2.2" @@ -1752,12 +1578,12 @@ babel-plugin-polyfill-corejs2@^0.2.2: semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" - integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== + version "0.2.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" + integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw== dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" + core-js-compat "^3.16.2" babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" @@ -1924,27 +1750,16 @@ browser-sync@^2.26.13: ua-parser-js "^0.7.28" yargs "^15.4.1" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.6: - version "4.16.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.8.tgz#cb868b0b554f137ba6e33de0ecff2eda403c4fb0" - integrity sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ== - dependencies: - caniuse-lite "^1.0.30001251" - colorette "^1.3.0" - electron-to-chromium "^1.3.811" - escalade "^3.1.1" - node-releases "^1.1.75" - -browserslist@^4.17.0: - version "4.17.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.0.tgz#1fcd81ec75b41d6d4994fb0831b92ac18c01649c" - integrity sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.6, browserslist@^4.17.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.1.tgz#a98d104f54af441290b7d592626dd541fa642eb9" + integrity sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ== dependencies: - caniuse-lite "^1.0.30001254" - colorette "^1.3.0" - electron-to-chromium "^1.3.830" + caniuse-lite "^1.0.30001259" + electron-to-chromium "^1.3.846" escalade "^3.1.1" - node-releases "^1.1.75" + nanocolors "^0.1.5" + node-releases "^1.1.76" bs-recipes@1.3.4: version "1.3.4" @@ -2003,15 +1818,12 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001251: - version "1.0.30001251" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" - integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== - -caniuse-lite@^1.0.30001254: - version "1.0.30001258" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001258.tgz#b604eed80cc54a578e4bf5a02ae3ed49f869d252" - integrity sha512-RBByOG6xWXUp0CR2/WU2amXz3stjKpSl5J1xU49F1n2OxD//uBZO4wCKUiG+QMGf7CHGfDDcqoKriomoGVxTeA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001259: + version "1.0.30001260" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001260.tgz#e3be3f34ddad735ca4a2736fa9e768ef34316270" + integrity sha512-Fhjc/k8725ItmrvW5QomzxLeojewxvqiYCKeFcfFEhut28IVLdpHU19dneOmltZQIE5HNbawj1HYD+1f2bM1Dg== + dependencies: + nanocolors "^0.1.0" caseless@~0.12.0: version "0.12.0" @@ -2180,10 +1992,10 @@ colord@^2.0.1, colord@^2.6: resolved "https://registry.yarnpkg.com/colord/-/colord-2.7.0.tgz#706ea36fe0cd651b585eb142fe64b6480185270e" integrity sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q== -colorette@^1.2.1, colorette@^1.2.2, colorette@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" - integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== +colorette@^1.2.1, colorette@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== colors@^1.4.0: version "1.4.0" @@ -2202,7 +2014,7 @@ commander@^2.2.0, commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^7.0.0, commander@^7.1.0: +commander@^7.0.0, commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== @@ -2312,19 +2124,24 @@ copy-webpack-plugin@9.0.1: schema-utils "^3.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.14.0, core-js-compat@^3.16.0: - version "3.17.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.17.3.tgz#b39c8e4dec71ecdc735c653ce5233466e561324e" - integrity sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA== +core-js-compat@^3.16.0, core-js-compat@^3.16.2: + version "3.18.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.0.tgz#fb360652201e8ac8da812718c008cd0482ed9b42" + integrity sha512-tRVjOJu4PxdXjRMEgbP7lqWy1TWJu9a01oBkn8d+dNrhgmBwdTkzhHZpVJnEmhISLdoJI1lX08rcBcHi3TZIWg== dependencies: browserslist "^4.17.0" semver "7.0.0" -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@~2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -2359,9 +2176,9 @@ css-color-names@^1.0.1: integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== css-declaration-sorter@^6.0.3: - version "6.1.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz#77b32b644ba374bc562c0fc6f4fdaba4dfb0b749" - integrity sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q== + version "6.1.3" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.3.tgz#e9852e4cf940ba79f509d9425b137d1f94438dc2" + integrity sha512-SvjQjNRZgh4ULK1LDJ2AduPKUKxIqmtU7ZAyi47BTV+M90Qvxr9AB6lKlLbDUfXqI9IQeYA8LbAsCZPpJEV3aA== dependencies: timsort "^0.3.0" @@ -2426,7 +2243,7 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-tree@^1.1.2: +css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -2519,9 +2336,9 @@ dashdash@^1.12.0: assert-plus "^1.0.0" date-fns@^2.16.1: - version "2.23.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.23.0.tgz#4e886c941659af0cf7b30fafdd1eaa37e88788a9" - integrity sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA== + version "2.24.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.24.0.tgz#7d86dc0d93c87b76b63d213b4413337cfd1c105d" + integrity sha512-6ujwvwgPID6zbI0o7UbURi2vlLDR9uP26+tW6Lg+Ji3w7dd0i3DOcjcClLjLPranT60SSEFBwdSyYwn/ZkPIuw== date-format@^2.1.0: version "2.1.0" @@ -2540,14 +2357,7 @@ debug@2.6.9, debug@^2.2.0: dependencies: ms "2.0.0" -debug@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1: +debug@4.3.2, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -2582,9 +2392,9 @@ decamelize@^1.1.0, decamelize@^1.2.0: integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== define-properties@^1.1.3: version "1.1.3" @@ -2636,10 +2446,10 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= -diff@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== dir-glob@^3.0.1: version "3.0.1" @@ -2705,9 +2515,9 @@ domhandler@^2.3.0: domelementtype "1" domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + version "4.2.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" + integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== dependencies: domelementtype "^2.2.0" @@ -2720,9 +2530,9 @@ domutils@^1.5.1, domutils@^1.7.0: domelementtype "1" domutils@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" - integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" @@ -2755,15 +2565,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.811: - version "1.3.816" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.816.tgz#ab6488b126de92670a6459fe3e746050e0c6276f" - integrity sha512-/AvJPIJldO0NkwkfpUD7u1e4YEGRFBQpFuvl9oGCcVgWOObsZB1loxVGeVUJB9kmvfsBUUChPYdgRzx6+AKNyg== - -electron-to-chromium@^1.3.830: - version "1.3.842" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.842.tgz#641e414012dded277468892c0156cb01984f4f6f" - integrity sha512-P/nDMPIYdb2PyqCQwhTXNi5JFjX1AsDVR0y6FrHw752izJIAJ+Pn5lugqyBq4tXeRSZBMBb2ZGvRGB1djtELEQ== +electron-to-chromium@^1.3.846: + version "1.3.848" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.848.tgz#94cc196e496f33c0d71cd98561448f10018584cc" + integrity sha512-wchRyBcdcmibioggdO7CbMT5QQ4lXlN/g7Mkpf1K2zINidnqij6EVu94UIZ+h5nB2S9XD4bykqFv9LonAWLFyw== emoji-regex@^7.0.1: version "7.0.3" @@ -2814,9 +2619,9 @@ engine.io-parser@~2.2.0: has-binary2 "~1.0.2" engine.io-parser@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" - integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.3.tgz#83d3a17acfd4226f19e721bb22a1ee8f7662d2f6" + integrity sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA== dependencies: base64-arraybuffer "0.1.4" @@ -2846,9 +2651,9 @@ engine.io@~4.1.0: ws "~7.4.2" enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== + version "5.8.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0" + integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -2893,21 +2698,22 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.2, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" - integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== + version "1.18.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" + integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" has-symbols "^1.0.2" internal-slot "^1.0.3" - is-callable "^1.2.3" + is-callable "^1.2.4" is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" + is-regex "^1.1.4" + is-string "^1.0.7" object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" @@ -3155,9 +2961,9 @@ fastest-levenshtein@^1.0.12: integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== fastq@^1.6.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.12.0.tgz#ed7b6ab5d62393fb2cc591c853652a5c318bf794" - integrity sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg== + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" @@ -3243,10 +3049,10 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== -follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.2.tgz#cecb825047c00f5e66b142f90fed4f515dec789b" - integrity sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA== +follow-redirects@^1.0.0, follow-redirects@^1.14.0: + version "1.14.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" + integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== forever-agent@~0.6.1: version "0.6.1" @@ -3367,6 +3173,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3393,7 +3207,19 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.1.1: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -3792,7 +3618,7 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.2.3: +is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== @@ -3915,7 +3741,7 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.1.3: +is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -3938,7 +3764,7 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.6: +is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== @@ -3967,7 +3793,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.0: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -4009,20 +3835,15 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -jasmine-core@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.4.0.tgz#2a74618e966026530c3518f03e9f845d26473ce3" - integrity sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg== - -jasmine-core@^3.3: +jasmine-core@3.9.0, jasmine-core@^3.6.0: version "3.9.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.9.0.tgz#09a3c8169fe98ec69440476d04a0e4cb4d59e452" integrity sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ== -jest-worker@^27.0.2: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" - integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== +jest-worker@^27.0.2, jest-worker@^27.0.6: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.0.tgz#11eef39f1c88f41384ca235c2f48fe50bc229bc0" + integrity sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -4151,19 +3972,20 @@ karma-chrome-launcher@3.1.0: dependencies: which "^1.2.1" -karma-firefox-launcher@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz#64fe03dd10300f9754d48f9ebfbf31f6c94a200c" - integrity sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ== +karma-firefox-launcher@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-2.1.1.tgz#6457226f8e4f091b664cef79bb5d39bf1e008765" + integrity sha512-VzDMgPseXak9DtfyE1O5bB2BwsMy1zzO1kUxVW1rP0yhC4tDNJ0p3JoFdzvrK4QqVzdqUMa9Rx9YzkdFp8hz3Q== dependencies: - is-wsl "^2.1.0" + is-wsl "^2.2.0" + which "^2.0.1" -karma-jasmine@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-2.0.1.tgz#26e3e31f2faf272dd80ebb0e1898914cc3a19763" - integrity sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA== +karma-jasmine@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-4.0.1.tgz#b99e073b6d99a5196fc4bffc121b89313b0abd82" + integrity sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw== dependencies: - jasmine-core "^3.3" + jasmine-core "^3.6.0" karma-sourcemap-loader@^0.3.8: version "0.3.8" @@ -4263,14 +4085,14 @@ loader-utils@^1.4.0: json5 "^1.0.1" localtunnel@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-2.0.1.tgz#8f7c593f3005647f7675e6e69af9bf746571a631" - integrity sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-2.0.2.tgz#528d50087151c4790f89c2db374fe7b0a48501f0" + integrity sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug== dependencies: - axios "0.21.1" - debug "4.3.1" + axios "0.21.4" + debug "4.3.2" openurl "1.1.1" - yargs "16.2.0" + yargs "17.1.1" locate-path@^3.0.0: version "3.0.0" @@ -4297,6 +4119,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.isfinite@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" @@ -4346,18 +4173,6 @@ log4js@^6.3.0: rfdc "^1.1.4" streamroller "^2.2.4" -lolex@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" - integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== - -lolex@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - longest-streak@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" @@ -4383,9 +4198,9 @@ map-obj@^1.0.0: integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" - integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== mathml-tag-names@^2.1.3: version "2.1.3" @@ -4540,9 +4355,9 @@ minimist@^1.2.0, minimist@^1.2.5: integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minipass@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + version "3.1.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" + integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== dependencies: yallist "^4.0.0" @@ -4591,7 +4406,12 @@ nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== -nanoid@^3.1.23: +nanocolors@^0.1.0, nanocolors@^0.1.5: + version "0.1.12" + resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.1.12.tgz#8577482c58cbd7b5bb1681db4cf48f11a87fd5f6" + integrity sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ== + +nanoid@^3.1.25: version "3.1.25" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== @@ -4611,15 +4431,15 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nise@^1.5.1: - version "1.5.3" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" - integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== +nise@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.0.tgz#713ef3ed138252daef20ec035ab62b7a28be645c" + integrity sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ== dependencies: - "@sinonjs/formatio" "^3.2.1" + "@sinonjs/commons" "^1.7.0" + "@sinonjs/fake-timers" "^7.0.4" "@sinonjs/text-encoding" "^0.7.1" just-extend "^4.0.2" - lolex "^5.0.1" path-to-regexp "^1.7.0" node-gyp@^7.1.0: @@ -4638,10 +4458,10 @@ node-gyp@^7.1.0: tar "^6.0.2" which "^2.0.2" -node-releases@^1.1.75: - version "1.1.75" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" - integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== +node-releases@^1.1.76: + version "1.1.76" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.76.tgz#df245b062b0cafbd5282ab6792f7dccc2d97f36e" + integrity sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA== node-sass@6.0.1: version "6.0.1" @@ -4736,9 +4556,9 @@ nth-check@^1.0.2: boolbase "~1.0.0" nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: boolbase "^1.0.0" @@ -5326,12 +5146,12 @@ postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0. supports-color "^6.1.0" postcss@^8.2.15, postcss@^8.3.5: - version "8.3.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" - integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== + version "8.3.7" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.7.tgz#ec88563588c8da8e58e7226f7633b51ae221eeda" + integrity sha512-9SaY7nnyQ63/WittqZYAvkkYPyKxchMKH71UDzeTmWuLSvxTRpeEeABZAzlCi55cuGcoFyoV/amX2BdsafQidQ== dependencies: - colorette "^1.2.2" - nanoid "^3.1.23" + nanocolors "^0.1.5" + nanoid "^3.1.25" source-map-js "^0.6.2" prelude-ls@^1.2.1: @@ -5751,7 +5571,7 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0: +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -5888,22 +5708,21 @@ side-channel@^1.0.4: object-inspect "^1.9.0" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.4.tgz#366a4684d175b9cab2081e3681fda3747b6c51d7" + integrity sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q== -sinon@7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.4.1.tgz#bcd0c63953893e87fa0cc502f52489c32a83d4d9" - integrity sha512-7s9buHGHN/jqoy/v4bJgmt0m1XEkCEd/tqdHXumpBp0JSujaT4Ng84JU5wDdK4E85ZMq78NuDe0I3NAqXY8TFg== +sinon@11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-11.1.2.tgz#9e78850c747241d5c59d1614d8f9cbe8840e8674" + integrity sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw== dependencies: - "@sinonjs/commons" "^1.4.0" - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.2" - diff "^3.5.0" - lolex "^4.2.0" - nise "^1.5.1" - supports-color "^5.5.0" + "@sinonjs/commons" "^1.8.3" + "@sinonjs/fake-timers" "^7.1.2" + "@sinonjs/samsam" "^6.0.2" + diff "^5.0.0" + nise "^5.1.0" + supports-color "^7.2.0" slash@^3.0.0: version "3.0.0" @@ -6005,10 +5824,10 @@ source-map-js@^0.6.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== -source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +source-map-support@~0.5.20: + version "0.5.20" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -6329,7 +6148,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -6343,7 +6162,7 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -6382,15 +6201,15 @@ svgo@^1.2.2: util.promisify "~1.0.0" svgo@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.4.0.tgz#0c42653101fd668692c0f69b55b8d7b182ef422b" - integrity sha512-W25S1UUm9Lm9VnE0TvCzL7aso/NCzDEaXLaElCUO/KaVitw0+IBicSVfM1L1c0YHK5TOFh73yQ2naCpVHEQ/OQ== + version "2.6.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.6.1.tgz#60b613937e0081028cffc2369090e366b08f1f0e" + integrity sha512-SDo274ymyG1jJ3HtCr3hkfwS8NqWdF0fMr6xPlrJ5y2QMofsQxIEFWgR1epwb197teKGgnZbzozxvJyIeJpE2Q== dependencies: - "@trysound/sax" "0.1.1" - colorette "^1.2.2" - commander "^7.1.0" + "@trysound/sax" "0.2.0" + colorette "^1.4.0" + commander "^7.2.0" css-select "^4.1.3" - css-tree "^1.1.2" + css-tree "^1.1.3" csso "^4.2.0" stable "^0.1.8" @@ -6412,14 +6231,14 @@ table@^6.0.9, table@^6.6.0: strip-ansi "^6.0.0" tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" - integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar@^6.0.2: - version "6.1.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.10.tgz#8a320a74475fba54398fa136cd9883aa8ad11175" - integrity sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA== + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -6429,25 +6248,25 @@ tar@^6.0.2: yallist "^4.0.0" terser-webpack-plugin@^5.1.3: - version "5.1.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz#c369cf8a47aa9922bd0d8a94fe3d3da11a7678a1" - integrity sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA== + version "5.2.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz#ad1be7639b1cbe3ea49fab995cbe7224b31747a1" + integrity sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA== dependencies: - jest-worker "^27.0.2" + jest-worker "^27.0.6" p-limit "^3.1.0" - schema-utils "^3.0.0" + schema-utils "^3.1.1" serialize-javascript "^6.0.0" source-map "^0.6.1" - terser "^5.7.0" + terser "^5.7.2" -terser@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" - integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== +terser@^5.7.2: + version "5.9.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" + integrity sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ== dependencies: commander "^2.20.0" source-map "~0.7.2" - source-map-support "~0.5.19" + source-map-support "~0.5.20" text-table@^0.2.0: version "0.2.0" @@ -6563,7 +6382,7 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -6853,9 +6672,9 @@ webpack-merge@^5.7.3: wildcard "^2.0.0" webpack-sources@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.0.tgz#b16973bcf844ebcdb3afde32eda1c04d0b90f89d" - integrity sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw== + version "3.2.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.1.tgz#251a7d9720d75ada1469ca07dbb62f3641a05b6d" + integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA== webpack@5.51.1: version "5.51.1" @@ -7027,10 +6846,10 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@16.2.0, yargs@^16.1.1, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@17.1.1: + version "17.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.1.tgz#c2a8091564bdb196f7c0a67c1d12e5b85b8067ba" + integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== dependencies: cliui "^7.0.2" escalade "^3.1.1" @@ -7073,6 +6892,19 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.1.1, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"