mirror of
https://github.com/github/codeql-action.git
synced 2025-12-29 18:50:25 +08:00
69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
"use strict";
|
|
|
|
var arrayProto = require("@sinonjs/commons").prototypes.array;
|
|
var Sandbox = require("./sandbox");
|
|
|
|
var forEach = arrayProto.forEach;
|
|
var push = arrayProto.push;
|
|
|
|
function prepareSandboxFromConfig(config) {
|
|
var sandbox = new Sandbox();
|
|
|
|
if (config.useFakeServer) {
|
|
if (typeof config.useFakeServer === "object") {
|
|
sandbox.serverPrototype = config.useFakeServer;
|
|
}
|
|
|
|
sandbox.useFakeServer();
|
|
}
|
|
|
|
if (config.useFakeTimers) {
|
|
if (typeof config.useFakeTimers === "object") {
|
|
sandbox.useFakeTimers(config.useFakeTimers);
|
|
} else {
|
|
sandbox.useFakeTimers();
|
|
}
|
|
}
|
|
|
|
return sandbox;
|
|
}
|
|
|
|
function exposeValue(sandbox, config, key, value) {
|
|
if (!value) {
|
|
return;
|
|
}
|
|
|
|
if (config.injectInto && !(key in config.injectInto)) {
|
|
config.injectInto[key] = value;
|
|
push(sandbox.injectedKeys, key);
|
|
} else {
|
|
push(sandbox.args, value);
|
|
}
|
|
}
|
|
|
|
function createSandbox(config) {
|
|
if (!config) {
|
|
return new Sandbox();
|
|
}
|
|
|
|
var configuredSandbox = prepareSandboxFromConfig(config);
|
|
configuredSandbox.args = configuredSandbox.args || [];
|
|
configuredSandbox.injectedKeys = [];
|
|
configuredSandbox.injectInto = config.injectInto;
|
|
var exposed = configuredSandbox.inject({});
|
|
|
|
if (config.properties) {
|
|
forEach(config.properties, function (prop) {
|
|
var value =
|
|
exposed[prop] || (prop === "sandbox" && configuredSandbox);
|
|
exposeValue(configuredSandbox, config, prop, value);
|
|
});
|
|
} else {
|
|
exposeValue(configuredSandbox, config, "sandbox");
|
|
}
|
|
|
|
return configuredSandbox;
|
|
}
|
|
|
|
module.exports = createSandbox;
|