feat: update Proxy handle and optimize core index

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
MiaoWoo 2020-02-01 03:37:56 +08:00
parent 6b4d0cc64c
commit 84d9eb8881
2 changed files with 24 additions and 25 deletions

View File

@ -1,27 +1,30 @@
let createProxy = eval(` let createProxy = eval(`
function(handle){ return new JSAdapter(handle) } function(handle){ return new JSAdapter(handle) }
`) `)
export interface ProxyHandle { export interface ProxyHandle extends ProxyHandler<object> {
get: (target: any, name: string) => any // get: (target: any, name: string) => any
set: (target: any, name: string, value: any) => void // set: (target: any, name: string, value: any) => boolean
construct: (target: any, ...args: any[]) => any // construct: (target: any, ...args: any[]) => any
has: (target: any, name: string) => boolean // has: (target: any, name: string) => boolean
ownKeys: (target: any) => string[] // ownKeys: (target: any) => string[]
values: (target: any) => any[]; values: (target: any) => any[];
call: (target: any, name: string, ...args: any[]) => any // call: (target: any, name: string, ...args: any[]) => any
delete: (target: any, name: string) => boolean // deleteProperty: (target: any, name: string) => boolean
} }
export class Proxy { export class Proxy {
static newProxy(target: any, handle: Partial<ProxyHandle>) { static newProxy(target: any, handle: Partial<ProxyHandle>): any {
return new Proxy(target, handle)
}
constructor(target: any, handle: Partial<ProxyHandle>) {
return createProxy({ return createProxy({
__get__: (name: string) => handle.get ? handle.get(target, name) : target[name], __get__: (name: string) => handle.get ? handle.get(target, name, undefined) : target[name],
__put__: (name: string, value: any) => handle.set ? handle.set(target, name, value) : target[name] = value, __put__: (name: string, value: any) => handle.set ? handle.set(target, name, value, undefined) : target[name] = value,
__call__: (name: string, ...args: any) => handle.call ? handle.call(target, name, ...args) : target[name](...args), __call__: (name: string, ...args: any) => handle.apply ? handle.apply(target[name], target, args) : target[name].apply(target, args),
__new__: (...args: any) => handle.construct ? handle.construct(target, ...args) : new target(...args), __new__: (...args: any) => handle.construct ? handle.construct(target, args, target) : new target(...args),
__getIds__: () => handle.ownKeys ? handle.ownKeys(target) : Object.keys(target), __getIds__: () => handle.ownKeys ? handle.ownKeys(target) : Object.keys(target),
__getValues__: () => handle.values ? handle.values(target) : Object.values(target), __getValues__: () => handle.values ? handle.values(target) : Object.values(target),
__has__: (name: string) => handle.has ? handle.has(target, name) : Object.getOwnPropertyDescriptor(target, name) != undefined, __has__: (name: string) => handle.has ? handle.has(target, name) : Object.getOwnPropertyDescriptor(target, name) != undefined,
__delete__: (name: string) => handle.delete ? handle.delete(target, name) : delete target[name] __delete__: (name: string) => handle.deleteProperty ? handle.deleteProperty(target, name) : delete target[name]
}) })
} }
} }

View File

@ -51,34 +51,30 @@ class MiaoScriptCore {
} }
function detectServer() { function detectServer() {
let type = 'unknow'
try { try {
Java.type("org.bukkit.Bukkit"); Java.type("org.bukkit.Bukkit");
type = 'bukkit'; return 'bukkit'
console.info(`Detect Bukkit Compatible set ServerType to ${type} ...`)
} catch (ex) { } catch (ex) {
} }
try { try {
Java.type("org.spongepowered.api.Sponge"); Java.type("org.spongepowered.api.Sponge");
type = 'sponge'; return 'sponge'
console.info(`Detect Sponge Compatible set ServerType to ${type} ...`)
} catch (ex) { } catch (ex) {
} }
try { try {
Java.type("net.md_5.bungee.api.ProxyServer"); Java.type("net.md_5.bungee.api.ProxyServer");
type = 'bungee'; return 'bungee'
console.info(`Detect Sponge Compatible set ServerType to ${type} ...`)
} catch (ex) { } catch (ex) {
} }
if (type === 'unknow') { throw Error('Unknow Server Type...') } throw Error('Unknow Server Type...')
return type;
} }
function init() { function initialize() {
let corePackageStartTime = new Date().getTime() let corePackageStartTime = new Date().getTime()
container.bind(ContainerInstance).toConstantValue(container); container.bind(ContainerInstance).toConstantValue(container);
container.bind(plugin.PluginInstance).toConstantValue(base.getInstance()); container.bind(plugin.PluginInstance).toConstantValue(base.getInstance());
let type = detectServer(); let type = detectServer();
console.info(`Detect Compatible Server set ServerType to ${type} ...`)
container.bind(server.ServerType).toConstantValue(type); container.bind(server.ServerType).toConstantValue(type);
console.log(`Initialization MiaoScript Package @ms/core @ms/${type}. Please wait...`) console.log(`Initialization MiaoScript Package @ms/core @ms/${type}. Please wait...`)
require(`@ms/${type}`).default(container); require(`@ms/${type}`).default(container);
@ -90,4 +86,4 @@ function init() {
return disable; return disable;
} }
export default init(); export default initialize();