From 9761b02c79d4ad9c8ed5c0ea7f26413b9da6066a Mon Sep 17 00:00:00 2001 From: Manish Jethani Date: Mon, 23 Aug 2021 19:12:27 +0530 Subject: [PATCH] Convert publicsuffixlist.js into an ES module (#3846) --- platform/browser/main.js | 7 +++--- platform/nodejs/index.js | 17 +++++++------- platform/npm/tests/leaks.js | 2 +- src/js/dyna-rules.js | 11 ++++----- src/js/messaging.js | 5 ++-- src/js/storage.js | 11 +++++---- src/js/uri-utils.js | 8 ++----- src/lib/publicsuffixlist/publicsuffixlist.js | 24 ++++---------------- 8 files changed, 30 insertions(+), 55 deletions(-) diff --git a/platform/browser/main.js b/platform/browser/main.js index 2937a100d..a7683a4f0 100644 --- a/platform/browser/main.js +++ b/platform/browser/main.js @@ -23,10 +23,9 @@ /******************************************************************************/ -import './lib/publicsuffixlist/publicsuffixlist.js'; +import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js'; import punycode from './lib/punycode.js'; -import globals from './js/globals.js'; import staticNetFilteringEngine from './js/static-net-filtering.js'; import { FilteringContext } from './js/filtering-context.js'; import { LineIterator } from './js/text-utils.js'; @@ -83,7 +82,7 @@ function applyList(name, raw) { function enableWASM(path) { return Promise.all([ - globals.publicSuffixList.enableWASM(`${path}/lib/publicsuffixlist`), + publicSuffixList.enableWASM(`${path}/lib/publicsuffixlist`), staticNetFilteringEngine.enableWASM(`${path}/js`), ]); } @@ -93,7 +92,7 @@ function pslInit(raw) { console.info('Unable to populate public suffix list'); return; } - globals.publicSuffixList.parse(raw, punycode.toASCII); + publicSuffixList.parse(raw, punycode.toASCII); console.info('Public suffix list populated'); } diff --git a/platform/nodejs/index.js b/platform/nodejs/index.js index 59bf36450..e7182efef 100644 --- a/platform/nodejs/index.js +++ b/platform/nodejs/index.js @@ -34,9 +34,8 @@ import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); import punycode from './lib/punycode.js'; -import './lib/publicsuffixlist/publicsuffixlist.js'; +import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js'; -import globals from './js/globals.js'; import snfe from './js/static-net-filtering.js'; import { FilteringContext } from './js/filtering-context.js'; import { LineIterator } from './js/text-utils.js'; @@ -63,7 +62,7 @@ async function enableWASM() { }; try { const results = await Promise.all([ - globals.publicSuffixList.enableWASM(wasmModuleFetcher, './lib/publicsuffixlist/wasm/'), + publicSuffixList.enableWASM(wasmModuleFetcher, './lib/publicsuffixlist/wasm/'), snfe.enableWASM(wasmModuleFetcher, './js/wasm/'), ]); return results.every(a => a === true); @@ -77,8 +76,8 @@ async function enableWASM() { function pslInit(raw) { if ( typeof raw === 'string' && raw.trim() !== '' ) { - globals.publicSuffixList.parse(raw, punycode.toASCII); - return globals.publicSuffixList; + publicSuffixList.parse(raw, punycode.toASCII); + return publicSuffixList; } // Use serialized version if available @@ -93,8 +92,8 @@ function pslInit(raw) { } } if ( serialized !== null ) { - globals.publicSuffixList.fromSelfie(serialized); - return globals.publicSuffixList; + publicSuffixList.fromSelfie(serialized); + return publicSuffixList; } raw = readFileSync( @@ -105,8 +104,8 @@ function pslInit(raw) { console.error('Unable to populate public suffix list'); return; } - globals.publicSuffixList.parse(raw, punycode.toASCII); - return globals.publicSuffixList; + publicSuffixList.parse(raw, punycode.toASCII); + return publicSuffixList; } /******************************************************************************/ diff --git a/platform/npm/tests/leaks.js b/platform/npm/tests/leaks.js index 1963c14a7..04a0c62b9 100644 --- a/platform/npm/tests/leaks.js +++ b/platform/npm/tests/leaks.js @@ -24,7 +24,7 @@ /******************************************************************************/ describe('Leaks', () => { - it('should not leak', async () => { + it('should not leak global variables', async () => { await import('../index.js'); }); }); diff --git a/src/js/dyna-rules.js b/src/js/dyna-rules.js index c6ace15cc..aea89a39e 100644 --- a/src/js/dyna-rules.js +++ b/src/js/dyna-rules.js @@ -25,17 +25,14 @@ /******************************************************************************/ -import '../lib/publicsuffixlist/publicsuffixlist.js'; +import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js'; -import globals from './globals.js'; import { hostnameFromURI } from './uri-utils.js'; import './codemirror/ubo-dynamic-filtering.js'; /******************************************************************************/ -const publicSuffixList = globals.publicSuffixList; - const hostnameToDomainMap = new Map(); const mergeView = new CodeMirror.MergeView( @@ -625,11 +622,11 @@ const editSaveHandler = function() { /******************************************************************************/ -globals.cloud.onPush = function() { +self.cloud.onPush = function() { return thePanes.orig.original.join('\n'); }; -globals.cloud.onPull = function(data, append) { +self.cloud.onPull = function(data, append) { if ( typeof data !== 'string' ) { return; } applyDiff( false, @@ -640,7 +637,7 @@ globals.cloud.onPull = function(data, append) { /******************************************************************************/ -globals.hasUnsavedData = function() { +self.hasUnsavedData = function() { return mergeView.editor().isClean(cleanEditToken) === false; }; diff --git a/src/js/messaging.js b/src/js/messaging.js index dc669b8f4..3888bab45 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -23,12 +23,11 @@ /******************************************************************************/ -import '../lib/publicsuffixlist/publicsuffixlist.js'; +import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js'; import punycode from '../lib/punycode.js'; import cacheStorage from './cachestorage.js'; import cosmeticFilteringEngine from './cosmetic-filtering.js'; -import globals from './globals.js'; import logger from './logger.js'; import lz4Codec from './lz4.js'; import io from './assets.js'; @@ -1115,7 +1114,7 @@ const getRules = function() { sessionSwitches.toArray(), sessionURLFiltering.toArray() ), - pslSelfie: globals.publicSuffixList.toSelfie(), + pslSelfie: publicSuffixList.toSelfie(), }; }; diff --git a/src/js/storage.js b/src/js/storage.js index 2beda9259..27c7a3875 100644 --- a/src/js/storage.js +++ b/src/js/storage.js @@ -19,15 +19,16 @@ Home: https://github.com/gorhill/uBlock */ +/* globals WebAssembly */ + 'use strict'; /******************************************************************************/ -import '../lib/publicsuffixlist/publicsuffixlist.js'; +import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js'; import punycode from '../lib/punycode.js'; import cosmeticFilteringEngine from './cosmetic-filtering.js'; -import globals from './globals.js'; import io from './assets.js'; import logger from './logger.js'; import lz4Codec from './lz4.js'; @@ -1203,7 +1204,7 @@ self.addEventListener('hiddenSettingsChanged', ( ) => { /******************************************************************************/ µb.loadPublicSuffixList = async function() { - const psl = globals.publicSuffixList; + const psl = publicSuffixList; // WASM is nice but not critical if ( vAPI.canWASM && this.hiddenSettings.disableWebAssembly !== true ) { @@ -1211,7 +1212,7 @@ self.addEventListener('hiddenSettingsChanged', ( ) => { return fetch( `${path}.wasm`, { mode: 'same-origin' }).then( - globals.WebAssembly.compileStreaming + WebAssembly.compileStreaming ).catch(reason => { ubolog(reason); }); @@ -1243,7 +1244,7 @@ self.addEventListener('hiddenSettingsChanged', ( ) => { }; µb.compilePublicSuffixList = function(content) { - const psl = globals.publicSuffixList; + const psl = publicSuffixList; psl.parse(content, punycode.toASCII); io.put(`compiled/${this.pslAssetKey}`, psl.toSelfie(sparseBase64)); }; diff --git a/src/js/uri-utils.js b/src/js/uri-utils.js index d7fb013ec..8a2f4e6c2 100644 --- a/src/js/uri-utils.js +++ b/src/js/uri-utils.js @@ -23,18 +23,14 @@ /******************************************************************************/ -import '../lib/publicsuffixlist/publicsuffixlist.js'; +import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js'; import punycode from '../lib/punycode.js'; -import globals from './globals.js'; - /******************************************************************************/ // Originally: // https://github.com/gorhill/uBlock/blob/8b5733a58d3acf9fb62815e14699c986bd1c2fdc/src/js/uritools.js -const psl = globals.publicSuffixList; - const reCommonHostnameFromURL = /^https?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])\//; const reAuthorityFromURI = @@ -65,7 +61,7 @@ const reHostnameVeryCoarse = /[g-z_\-]/; function domainFromHostname(hostname) { return reIPAddressNaive.test(hostname) ? hostname - : psl.getDomain(hostname); + : publicSuffixList.getDomain(hostname); } function domainFromURI(uri) { diff --git a/src/lib/publicsuffixlist/publicsuffixlist.js b/src/lib/publicsuffixlist/publicsuffixlist.js index 1ffdc35f5..3d46298f0 100644 --- a/src/lib/publicsuffixlist/publicsuffixlist.js +++ b/src/lib/publicsuffixlist/publicsuffixlist.js @@ -43,7 +43,7 @@ /******************************************************************************/ -(function(context) { +export default (function() { // >>>>>>>> start of anonymous namespace /******************************************************************************* @@ -605,32 +605,16 @@ const disableWASM = function() { /******************************************************************************/ -context.publicSuffixList = { +return ({ version: '2.0', parse, getDomain, getPublicSuffix, toSelfie, fromSelfie, disableWASM, enableWASM, -}; - -if ( typeof module !== 'undefined' ) { - module.exports = context.publicSuffixList; -} else if ( typeof exports !== 'undefined' ) { - exports = context.publicSuffixList; -} +}); /******************************************************************************/ // <<<<<<<< end of anonymous namespace -})( - (root => { - if ( root !== undefined ) { return root; } - // jshint ignore:start - if ( typeof self !== 'undefined' ) { return self; } - if ( typeof window !== 'undefined' ) { return window; } - if ( typeof global !== 'undefined' ) { return global; } - // jshint ignore:end - throw new Error('unable to locate global object'); - })(this) -); +})();