UNPKG

1.69 kBJavaScriptView Raw
1const vm = require('vm');
2const util = require('util');
3const common = require('@screeps/common');
4const config = common.configManager.config;
5
6Object.assign(config.cli, {
7 createSandbox(outputCallback) {
8 if(!/at Object\.create/.test(new Error().stack.split(/\n/)[2])) {
9 console.error("config.cli.createSandbox is deprecated, please use config.cli.onCliSandbox instead");
10 }
11 var sandbox = {
12 print() {
13 outputCallback(Array.prototype.slice.apply(arguments).map( i => util.inspect(i)).join(" "));
14 },
15 storage: common.storage,
16 map: require('./map'),
17 bots: require('./bots'),
18 system: require('./system')
19 };
20
21 require('./help')(sandbox);
22
23 config.cli.emit('cliSandbox',sandbox);
24
25 return sandbox;
26 }
27});
28
29function create(outputCallback) {
30
31 const context = vm.createContext(config.cli.createSandbox(outputCallback));
32
33 return function(command) {
34 try {
35 var result = vm.runInContext(command, context);
36 if(result && result.then) {
37 result.then(
38 data => {
39 if(data) {
40 outputCallback(util.inspect(data), true);
41 }
42 },
43 err => {
44 outputCallback("Error: "+(err.stack || err), true);
45 }
46 );
47 }
48 else {
49 outputCallback(""+result, true);
50 }
51
52 }
53 catch(e) {
54 outputCallback(e.toString(), true);
55 }
56 };
57}
58
59exports.create = create;
\No newline at end of file