Source code

Revision control

Copy as Markdown

Other Tools

/* 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/. */
// This plugin supports finding files with particular resource:// URIs
// and translating the uri into a relative filesytem path where the file may be
// found when running within the Karma / Mocha test framework.
/* eslint-env node */
const path = require("path");
module.exports = {
MozSrcUriPlugin: class MozSrcUriPlugin {
/**
* The base directory of the repository.
*/
#baseDir;
/**
* @param {object} options
* Object passed during the instantiation of MozSrcUriPlugin
* @param {string} options.baseDir
* The base directory of the repository.
*/
constructor({ baseDir }) {
this.#baseDir = baseDir;
}
apply(compiler) {
compiler.hooks.compilation.tap(
"MozSrcUriPlugin",
(compilation, { normalModuleFactory }) => {
normalModuleFactory.hooks.resolveForScheme
.for("moz-src")
.tap("MozSrcUriPlugin", resourceData => {
const url = new URL(resourceData.resource);
// path.join() is necessary to normalize the path on Windows.
// Without it, the path may contain backslashes, resulting in
// different build output on Windows than on Unix systems.
const pathname = path.join(this.#baseDir, url.pathname);
resourceData.path = pathname;
resourceData.query = url.search;
resourceData.fragment = url.hash;
resourceData.resource = pathname + url.search + url.hash;
return true;
});
}
);
}
},
};