///
///
///
/**
* @description 安全沙箱对象,用于管理一个独立的运行空间
*
* 所有的代码都运行在自己的沙箱中,全局的 require 会调用当前沙箱加载模块,沙箱会通过 require 传递给加载的沙箱。下面的示例创建一个沙箱,限制只允许访问全局基础模块中的 assert 模块,并添加 a 和 b 两个定制模块:
* ```JavaScript
* var vm = require('vm');
* var sbox = new vm.SandBox({
* a: 100,
* b: 200,
* assert: require('assert')
* });
*
* var mod_in_sbox = sbox.require('./path/to/mod');
* ```
*
*/
declare class Class_SandBox extends Class_object {
/**
* @description 构造一个新的安全沙箱对象,并初始化基础模块
* @param mods 指定要添加的模块对象字典
*
*/
constructor(mods: FIBJS.GeneralObject);
/**
* @description 构造一个新的安全沙箱对象,并初始化基础模块
* @param mods 指定要添加的模块对象字典
* @param require 自定义 require 函数,当模块不存在时,先调用自定义函数,无返回再从文件中加载
*
*/
constructor(mods: FIBJS.GeneralObject, require: (...args: any[])=>any);
/**
* @description 构造一个独立 Global 新的安全沙箱对象,并初始化基础模块
* @param mods 指定要添加的模块对象字典
* @param global 指定初始化的 Global 属性
*
*/
constructor(mods: FIBJS.GeneralObject, global: FIBJS.GeneralObject);
/**
* @description 构造一个独立 Global 新的安全沙箱对象,并初始化基础模块
* @param mods 指定要添加的模块对象字典
* @param require 自定义 require 函数,当模块不存在时,先调用自定义函数,无返回再从文件中加载
* @param global 指定初始化的 Global 属性
*
*/
constructor(mods: FIBJS.GeneralObject, require: (...args: any[])=>any, global: FIBJS.GeneralObject);
/**
* @description 向沙箱中添加一个基础模块
* @param id 指定要添加的模块名称,此路径与当前运行脚本无关,必须为绝对路径或者模块名
* @param mod 指定要添加的模块对象
*
*/
add(id: string, mod: any): void;
/**
* @description 向沙箱中添加一组基础模块
* @param mods 指定要添加的模块对象字典,添加的 javascript 模块将会生成一份复制,以避免沙箱修改对象产生互相干扰
*
*/
add(mods: FIBJS.GeneralObject): void;
/**
* @description 向沙箱中添加一个脚本模块
* @param srcname 指定要添加的脚本名称,srcname 必须包含扩展名,比如 json 或者 js, jsc
* @param script 指定要添加的二进制代码
* @return 返回加载的模块对象
*
*/
addScript(srcname: string, script: Class_Buffer): any;
/**
* @description 从沙箱中删除指定的基础模块
* @param id 指定要删除的模块名称,此路径与当前运行脚本无关,必须为绝对路径或者模块名
*
*/
remove(id: string): void;
/**
* @description 从沙箱中检测基础模块是否存在
* @param id 指定要检测的模块名称,此路径与当前运行脚本无关,必须为绝对路径或者模块名
* @return 是否存在
*
*/
has(id: string): boolean;
/**
* @description 复制当前沙箱,新沙箱包含当前沙箱的模块,以及相同的名称和 require 函数
* @return 复制的新沙箱
*
*/
clone(): Class_SandBox;
/**
* @description 冻结当前沙箱,冻结后的沙箱,对 global 所做的修改将被忽略
*/
freeze(): void;
/**
* @description 重新加载沙箱内的模块,此操作只会重新初始化模块,复位模块内的变量,不更新模块代码
*/
refresh(): void;
/**
* @description 运行一个脚本
* @param fname 指定要运行的脚本路径,此路径与当前运行脚本无关,必须为绝对路径
* @param argv 指定要运行的参数,此参数可在脚本内使用 argv 获取
*
*/
run(fname: string, argv?: any[]): void;
/**
* @description 查询一个模块并返回模块完整文件名
* @param id 指定要加载的模块名称
* @param base 指定查找路径
* @return 返回加载的模块完整文件名
*
*/
resolve(id: string, base: string): string;
/**
* @description 加载一个模块并返回模块对象
* @param id 指定要加载的模块名称
* @param base 指定查找路径
* @return 返回加载的模块对象
*
*/
require(id: string, base: string): any;
/**
* @description 对指定的 extname 添加 compiler, extname 不可为系统内置扩展名 (包括 {'.js', '.json', '.jsc', '.wasm'}), compiler 需返回有效的 javascript 脚本.
*
* ```JavaScript
* var vm = require('vm');
* var sbox = new vm.SandBox({
* });
*
* // 编译 typescript 脚本为 js 并加载
* sbox.setModuleCompiler('.ts', tsCompiler);
* var mod_ts = sbox.require('./a.ts');
*
* // 编译 coffee 脚本为 js 并加载
* sbox.setModuleCompiler('.coffee', cafeCompiler);
* var mod_coffee = sbox.require('./a.coffee');
*
* // 编译 jsx 脚本为 js 并加载
* sbox.setModuleCompiler('.jsx', reactCompiler);
* var mod_react = sbox.require('./a.jsx');
*
* // 编译 yml 脚本为自定义的内容(如 API 集合) 并加载
* sbox.setModuleCompiler('.yml', yaml2Rest)
* sbox.setModuleCompiler('.yaml', yaml2Rest)
*
* // 编译 markdown 为自定义的内容(如 html 字符串或 XmlDocument 对象) 并加载
* sbox.setModuleCompiler('.md', mdCompiler)
* sbox.setModuleCompiler('.markdown', mdCompiler)
* ```
*
* @param extname 指定的 extname, 必须以 '.' 开头, 且为非系统内置扩展名
* @param compiler 编译回调函数, 所有带 extname 的文件仅会 require 一次. 该回调函数格式为 `compiler(buf, requireInfo)`, buf 为读取到的文件 Buffer, requireInfo 结构为 `{filename: string}`.
*
*/
setModuleCompiler(extname: string, compiler: (...args: any[])=>any): void;
/**
* @description 查询沙箱的 global 对象
*/
readonly global: FIBJS.GeneralObject;
/**
* @description 查询沙箱中现存的所有模块的字典对象
*
*/
readonly modules: FIBJS.GeneralObject;
}