From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- browser/components/newtab/loaders/inject-loader.js | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 browser/components/newtab/loaders/inject-loader.js (limited to 'browser/components/newtab/loaders/inject-loader.js') diff --git a/browser/components/newtab/loaders/inject-loader.js b/browser/components/newtab/loaders/inject-loader.js new file mode 100644 index 0000000000..8729baf270 --- /dev/null +++ b/browser/components/newtab/loaders/inject-loader.js @@ -0,0 +1,59 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// Note: this is based on https://github.com/plasticine/inject-loader, +// patched to make istanbul work properly + +const loaderUtils = require("loader-utils"); +const QUOTE_REGEX_STRING = "['|\"]{1}"; + +const hasOnlyExcludeFlags = query => + Object.keys(query).filter(key => query[key] === true).length === 0; +const escapePath = path => path.replace("/", "\\/"); + +function createRequireStringRegex(query) { + const regexArray = []; + + // if there is no query then replace everything + if (Object.keys(query).length === 0) { + regexArray.push("([^\\)]+)"); + } else if (hasOnlyExcludeFlags(query)) { + // if there are only negation matches in the query then replace everything + // except them + Object.keys(query).forEach(key => + regexArray.push(`(?!${QUOTE_REGEX_STRING}${escapePath(key)})`) + ); + regexArray.push("([^\\)]+)"); + } else { + regexArray.push(`(${QUOTE_REGEX_STRING}(`); + regexArray.push( + Object.keys(query) + .map(key => escapePath(key)) + .join("|") + ); + regexArray.push(`)${QUOTE_REGEX_STRING})`); + } + + // Wrap the regex to match `require()` + regexArray.unshift("require\\("); + regexArray.push("\\)"); + + return new RegExp(regexArray.join(""), "g"); +} + +module.exports = function inject(src) { + if (this.cacheable) { + this.cacheable(); + } + const regex = createRequireStringRegex( + loaderUtils.urlToRequest(this.resourcePath) || {} + ); + + return `module.exports = function inject(injections) { + var module = {exports: {}}; + var exports = module.exports; + ${src.replace(regex, "(injections[$1] || /* istanbul ignore next */ $&)")} + return module.exports; +}\n`; +}; -- cgit v1.2.3