1 | const vm = require('vm');
|
2 | const util = require('util');
|
3 | const common = require('@screeps/common');
|
4 | const config = common.configManager.config;
|
5 |
|
6 | Object.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 |
|
29 | function 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 |
|
59 | exports.create = create; |
\ | No newline at end of file |