mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 00:18:12 +00:00
namespace: Prevent direct mutation of ES modules in tests.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Anders Kaseorg
parent
10892f1d60
commit
cc8a4636ba
@@ -66,24 +66,40 @@ function need_to_mock_template_error(filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function load(request, parent, isMain) {
|
function load(request, parent, isMain) {
|
||||||
|
let module;
|
||||||
|
|
||||||
const filename = Module._resolveFilename(request, parent, isMain);
|
const filename = Module._resolveFilename(request, parent, isMain);
|
||||||
if (module_mocks.has(filename)) {
|
if (module_mocks.has(filename)) {
|
||||||
used_module_mocks.add(filename);
|
used_module_mocks.add(filename);
|
||||||
const obj = module_mocks.get(filename);
|
module = module_mocks.get(filename);
|
||||||
return obj;
|
} else if (filename.endsWith(".hbs") && filename.startsWith(template_path + path.sep)) {
|
||||||
}
|
|
||||||
|
|
||||||
if (filename.endsWith(".hbs") && filename.startsWith(template_path + path.sep)) {
|
|
||||||
const actual_render = actual_load(request, parent, isMain);
|
const actual_render = actual_load(request, parent, isMain);
|
||||||
|
module = template_stub({filename, actual_render});
|
||||||
return template_stub({filename, actual_render});
|
} else if (filename === jquery_path && parent.filename !== real_jquery_path) {
|
||||||
|
module = jquery_function || $;
|
||||||
|
} else {
|
||||||
|
module = actual_load(request, parent, isMain);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename === jquery_path && parent.filename !== real_jquery_path) {
|
if (
|
||||||
return jquery_function || $;
|
(typeof module === "object" || typeof module === "function") &&
|
||||||
|
"__esModule" in module &&
|
||||||
|
"__Rewire__" in module
|
||||||
|
) {
|
||||||
|
/* istanbul ignore next */
|
||||||
|
function error_immutable() {
|
||||||
|
throw new Error(`${filename} is an immutable ES module`);
|
||||||
|
}
|
||||||
|
return new Proxy(module, {
|
||||||
|
defineProperty: error_immutable,
|
||||||
|
deleteProperty: error_immutable,
|
||||||
|
preventExtensions: error_immutable,
|
||||||
|
set: error_immutable,
|
||||||
|
setPrototypeOf: error_immutable,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return actual_load(request, parent, isMain);
|
return module;
|
||||||
}
|
}
|
||||||
|
|
||||||
function template_stub({filename, actual_render}) {
|
function template_stub({filename, actual_render}) {
|
||||||
|
|||||||
Reference in New Issue
Block a user