Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2185b1a2f8 | |||
| c14e20e269 | |||
| 45a1c43dd8 | |||
| 9226e1ab4f | |||
| 287585d8f5 | |||
| b323d16123 | |||
| 85240608a1 | |||
| 6f9b458e6a | |||
| 64159b621f | |||
| 393ae6ce25 | |||
| b9b80ecb83 | |||
| 57e2845ad9 | |||
| e03a4f9b34 | |||
| 72015ec132 | |||
| 3e329233ce | |||
| b53d9e8a4e | |||
| 331357f1a2 | |||
| ec809fb013 | |||
| e38e772b17 | |||
| 2b56b1e573 | |||
| 2df09b2472 | |||
| f9303b0e11 | |||
| d43f52a2a4 |
10
.gitpod.Dockerfile
vendored
Normal file
10
.gitpod.Dockerfile
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
FROM gitpod/workspace-full
|
||||
|
||||
USER gitpod
|
||||
|
||||
# Install custom tools, runtime, etc. using apt-get
|
||||
# For example, the command below would install "bastet" - a command line tetris clone:
|
||||
#
|
||||
# RUN sudo apt-get -q update && # sudo apt-get install -yq bastet && # sudo rm -rf /var/lib/apt/lists/*
|
||||
#
|
||||
# More information: https://www.gitpod.io/docs/config-docker/
|
||||
5
.gitpod.yml
Normal file
5
.gitpod.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
tasks:
|
||||
- init: yarn && yarn bs && yarn build
|
||||
command: yarn watch
|
||||
# image:
|
||||
# file: .gitpod.Dockerfile
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"useWorkspaces": true,
|
||||
"npmClient": "yarn",
|
||||
"packages": [
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
"watch": "lerna run watch --parallel",
|
||||
"build": "lerna run build --scope=\"@ccms/!(plugins)\"",
|
||||
"build:plugins": "lerna run build --scope=\"@ccms/plugins\"",
|
||||
"publish": "yarn lerna exec \"npm publish --access=public\" --scope=\"@ccms/!(plugins|client|types)\"",
|
||||
"ug": "yarn upgrade-interactive --latest",
|
||||
"lp": "lerna publish"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/api",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript api package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -20,7 +20,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/container": "^0.6.0",
|
||||
"@ccms/ployfill": "^0.6.1",
|
||||
"@ccms/ployfill": "^0.6.5",
|
||||
"base64-js": "^1.3.1",
|
||||
"source-map-builder": "^0.0.7"
|
||||
},
|
||||
|
||||
@@ -136,6 +136,7 @@ export class MiaoScriptConsole implements Console {
|
||||
stack = Arrays.asList(stack)
|
||||
}
|
||||
stack.forEach(trace => {
|
||||
if (!trace.fileName || trace.fileName.startsWith('jar:file:')) { return }
|
||||
if (trace.className.startsWith('<')) {
|
||||
let { fileName, lineNumber } = this.readSourceMap(trace.fileName, trace.lineNumber)
|
||||
if (fileName.startsWith(root)) { fileName = fileName.split(root)[1] }
|
||||
|
||||
@@ -21,6 +21,9 @@ export namespace event {
|
||||
|
||||
@injectable()
|
||||
export abstract class Event {
|
||||
// export EventPriority to blockly
|
||||
public EventPriority = EventPriority;
|
||||
|
||||
private mapEvent = [];
|
||||
private listenerMap = [];
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/bukkit",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript bukkit package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,8 +24,8 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/api": "^0.6.1",
|
||||
"@ccms/common": "^0.6.1",
|
||||
"@ccms/api": "^0.6.5",
|
||||
"@ccms/common": "^0.6.4",
|
||||
"@ccms/container": "^0.6.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/bungee",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript bungee package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,8 +24,8 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/api": "^0.6.1",
|
||||
"@ccms/common": "^0.6.1",
|
||||
"@ccms/api": "^0.6.5",
|
||||
"@ccms/common": "^0.6.4",
|
||||
"@ccms/container": "^0.6.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "@ccms/client",
|
||||
"version": "0.6.0",
|
||||
"version": "0.6.3",
|
||||
"description": "MiaoScript client package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
|
||||
@@ -6,7 +6,9 @@ import { attachEvents } from './event'
|
||||
|
||||
let username = process.argv[2] || 'Mr_jtb'
|
||||
let version = process.argv[3] || '1.12.2'
|
||||
let client = createConnection('192.168.2.5', 25577, username)
|
||||
let address = process.argv[4] || '192.168.2.5:25577'
|
||||
let realAddress = address.split(":");
|
||||
let client = createConnection(realAddress[0], parseInt(realAddress[1] || "25565"), username)
|
||||
|
||||
function createConnection(host: string, port: number, username: string) {
|
||||
let client = createClient({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/common",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.4",
|
||||
"description": "MiaoScript api package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,7 +24,7 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/nashorn": "^0.6.1"
|
||||
"@ccms/nashorn": "^0.6.4"
|
||||
},
|
||||
"gitHead": "562e2d00175c9d3a99c8b672aa07e6d92706a027"
|
||||
}
|
||||
|
||||
@@ -23,9 +23,7 @@ export function concat(...args: string[]) {
|
||||
* @returns {*}
|
||||
*/
|
||||
export function file(...opts: any[]): any {
|
||||
if (!opts[0]) {
|
||||
console.warn("文件名称不得为 undefined 或者 null !");
|
||||
}
|
||||
if (!opts[0]) { throw new Error("文件名称不得为 undefined 或者 null !") }
|
||||
switch (opts.length) {
|
||||
case 1:
|
||||
var f = opts[0];
|
||||
@@ -143,7 +141,7 @@ export function del(file) {
|
||||
return;
|
||||
}
|
||||
if (file.isDirectory()) {
|
||||
Files.list(file.toPath()).collect(Collector.toList()).forEach(function(f) {
|
||||
Files.list(file.toPath()).collect(Collector.toList()).forEach(function (f) {
|
||||
del(f);
|
||||
})
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ function request(config: RequestConfig) {
|
||||
for (const header in config.headers) {
|
||||
xhr.setRequestHeader(header, config.headers[header]);
|
||||
}
|
||||
xhr.send(config.data);
|
||||
xhr.send(typeof config.data === "string" ? config.data : JSON.stringify(config.data));
|
||||
if ((xhr.getResponseHeader("Content-Type") + '').indexOf('application/json') != -1) {
|
||||
xhr.responseType = "json"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/core",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript api package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,7 +24,7 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/api": "^0.6.1",
|
||||
"@ccms/api": "^0.6.5",
|
||||
"@ccms/container": "^0.6.0"
|
||||
},
|
||||
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
||||
|
||||
@@ -1,52 +1,57 @@
|
||||
let containerStartTime = Date.now();
|
||||
console.i18n("ms.core.ioc.initialize", { scope: global.scope });
|
||||
let containerStartTime = Date.now()
|
||||
console.i18n("ms.core.ioc.initialize", { scope: global.scope })
|
||||
import { plugin, server, task, constants } from '@ccms/api'
|
||||
import { DefaultContainer as container, inject, provideSingleton, ContainerInstance, buildProviderModule } from '@ccms/container'
|
||||
console.i18n("ms.core.ioc.completed", { scope: global.scope, time: (Date.now() - containerStartTime) / 1000 })
|
||||
import http from '@ccms/common/dist/http'
|
||||
|
||||
@provideSingleton(MiaoScriptCore)
|
||||
class MiaoScriptCore {
|
||||
@inject(server.Console)
|
||||
private Console: Console;
|
||||
private Console: Console
|
||||
@inject(task.TaskManager)
|
||||
private taskManager: task.TaskManager;
|
||||
private taskManager: task.TaskManager
|
||||
@inject(plugin.PluginFolder)
|
||||
private pluginFolder: string;
|
||||
private pluginFolder: string
|
||||
@inject(plugin.PluginManager)
|
||||
private pluginManager: plugin.PluginManager;
|
||||
private pluginManager: plugin.PluginManager
|
||||
|
||||
enable() {
|
||||
this.loadServerConsole();
|
||||
this.loadTaskFunction();
|
||||
this.loadServerConsole()
|
||||
this.loadTaskFunction()
|
||||
global.level = "TRACE"
|
||||
this.loadPlugins();
|
||||
return () => this.disable();
|
||||
this.loadPlugins()
|
||||
return () => this.disable()
|
||||
}
|
||||
|
||||
loadServerConsole() {
|
||||
//@ts-ignore
|
||||
global.setGlobal('console', new this.Console())
|
||||
global.setGlobal('console', new this.Console(), { writable: false, configurable: false })
|
||||
}
|
||||
|
||||
loadTaskFunction() {
|
||||
global.setGlobal('setTimeout', (func: Function, tick: number, async: boolean = false) => this.taskManager.create(func).later(tick).async(async).submit())
|
||||
global.setGlobal('setInterval', (func: Function, tick: number, async: boolean = false) => this.taskManager.create(func).timer(tick).async(async).submit())
|
||||
global.setGlobal('setTimeout', (func: Function, tick: number, async: boolean = false) => {
|
||||
this.taskManager.create(func).later(tick).async(async).submit()
|
||||
}, { writable: false, configurable: false })
|
||||
global.setGlobal('setInterval', (func: Function, tick: number, async: boolean = false) => {
|
||||
this.taskManager.create(func).timer(tick).async(async).submit()
|
||||
}, { writable: false, configurable: false })
|
||||
}
|
||||
|
||||
loadPlugins() {
|
||||
let loadPluginStartTime = new Date().getTime()
|
||||
console.i18n("ms.core.plugin.initialize")
|
||||
this.pluginManager.scan(this.pluginFolder);
|
||||
this.pluginManager.build();
|
||||
this.pluginManager.load();
|
||||
this.pluginManager.enable();
|
||||
this.pluginManager.scan(this.pluginFolder)
|
||||
this.pluginManager.build()
|
||||
this.pluginManager.load(this.pluginManager.getPlugins())
|
||||
this.pluginManager.enable(this.pluginManager.getPlugins())
|
||||
console.i18n("ms.core.plugin.completed", { time: (new Date().getTime() - loadPluginStartTime) / 1000 })
|
||||
}
|
||||
|
||||
disable() {
|
||||
console.i18n("ms.core.engine.disable")
|
||||
this.pluginManager.disable();
|
||||
this.taskManager.disable();
|
||||
this.pluginManager.disable(this.pluginManager.getPlugins())
|
||||
this.taskManager.disable()
|
||||
//@ts-ignore
|
||||
require.disable()
|
||||
}
|
||||
@@ -54,22 +59,22 @@ class MiaoScriptCore {
|
||||
|
||||
function detectServer(): constants.ServerType {
|
||||
try {
|
||||
Java.type("org.bukkit.Bukkit");
|
||||
Java.type("org.bukkit.Bukkit")
|
||||
return constants.ServerType.Bukkit
|
||||
} catch (ex) {
|
||||
}
|
||||
try {
|
||||
Java.type("org.spongepowered.api.Sponge");
|
||||
Java.type("org.spongepowered.api.Sponge")
|
||||
return constants.ServerType.Sponge
|
||||
} catch (ex) {
|
||||
}
|
||||
try {
|
||||
Java.type("cn.nukkit.Nukkit");
|
||||
Java.type("cn.nukkit.Nukkit")
|
||||
return constants.ServerType.Nukkit
|
||||
} catch (ex) {
|
||||
}
|
||||
try {
|
||||
Java.type("net.md_5.bungee.api.ProxyServer");
|
||||
Java.type("net.md_5.bungee.api.ProxyServer")
|
||||
return constants.ServerType.Bungee
|
||||
} catch (ex) {
|
||||
}
|
||||
@@ -77,27 +82,29 @@ function detectServer(): constants.ServerType {
|
||||
}
|
||||
|
||||
function initialize() {
|
||||
// @ts-ignore
|
||||
try { engineLoad({ script: http.get("http://ms.yumc.pw/api/plugin/download/name/initialize"), name: 'core/initialize.js' }) } catch (error) { console.debug(error) }
|
||||
try {
|
||||
let corePackageStartTime = new Date().getTime()
|
||||
container.bind(ContainerInstance).toConstantValue(container);
|
||||
container.bind(plugin.PluginInstance).toConstantValue(base.getInstance());
|
||||
container.bind(plugin.PluginFolder).toConstantValue('plugins');
|
||||
let type = detectServer();
|
||||
console.i18n("ms.core.initialize.detect", { scope: global.scope, type });
|
||||
container.bind(server.ServerType).toConstantValue(type);
|
||||
console.i18n("ms.core.package.initialize", { scope: global.scope, type });
|
||||
require(`${global.scope}/${type}`).default(container);
|
||||
container.bind(ContainerInstance).toConstantValue(container)
|
||||
container.bind(plugin.PluginInstance).toConstantValue(base.getInstance())
|
||||
container.bind(plugin.PluginFolder).toConstantValue('plugins')
|
||||
let type = detectServer()
|
||||
console.i18n("ms.core.initialize.detect", { scope: global.scope, type })
|
||||
container.bind(server.ServerType).toConstantValue(type)
|
||||
console.i18n("ms.core.package.initialize", { scope: global.scope, type })
|
||||
require(`${global.scope}/${type}`).default(container)
|
||||
require(`${global.scope}/plugin`)
|
||||
container.load(buildProviderModule());
|
||||
console.i18n("ms.core.package.completed", { scope: global.scope, type, time: (Date.now() - corePackageStartTime) / 1000 });
|
||||
container.load(buildProviderModule())
|
||||
console.i18n("ms.core.package.completed", { scope: global.scope, type, time: (Date.now() - corePackageStartTime) / 1000 })
|
||||
let disable = container.get<MiaoScriptCore>(MiaoScriptCore).enable()
|
||||
console.i18n("ms.core.engine.completed", { time: (Date.now() - global.NashornEngineStartTime) / 1000 });
|
||||
return disable;
|
||||
console.i18n("ms.core.engine.completed", { time: (Date.now() - global.NashornEngineStartTime) / 1000 })
|
||||
return disable
|
||||
} catch (error) {
|
||||
console.i18n("ms.core.initialize.error", { error });
|
||||
console.i18n("ms.core.initialize.error", { error })
|
||||
console.ex(error)
|
||||
return () => console.i18n('ms.core.engine.disable.abnormal')
|
||||
}
|
||||
}
|
||||
|
||||
export default initialize();
|
||||
export default initialize()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
ms.i18n.completed: "Internationalization component initialization completed. Current Language: English"
|
||||
ms.ployfill.initialize: "Initialization Java Nashorn ployfill. Please wait..."
|
||||
ms.ployfill.completed: "Java Nashorn ployfill loading completed... Cost ({time}s)!"
|
||||
|
||||
@@ -38,6 +39,7 @@ ms.plugin.manager.stage.exec.error: "§6Plugin §b{plugin} §6exec §d{executor}
|
||||
ms.plugin.manager.stage.load: "Loading"
|
||||
ms.plugin.manager.stage.enable: "Enabling"
|
||||
ms.plugin.manager.stage.disable: "Disabling"
|
||||
ms.plugin.manager.build.error: "§6Load Plugin From §b{file} §6failed. §4Error: §c{error}"
|
||||
ms.plugin.manager.build.update: "Auto Update Plugin {name} ..."
|
||||
ms.plugin.manager.build.not.extends: "§4Found error plugin §b{source} §4it's not extends interfaces.Plugin, the plugin will be ignore!"
|
||||
ms.plugin.manager.build.exists: "§4Found duplicate plugin §b{exists} §4and §b{source}§4. the first plugin will be ignore!"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
ms.i18n.completed: "国际化组件 初始化完成 当前语言: 简体中文"
|
||||
ms.ployfill.initialize: "加载 Java Nashorn 补丁. 请稍候..."
|
||||
ms.ployfill.completed: "Java Nashorn 补丁 加载完成... 耗时 ({time}s)!"
|
||||
|
||||
@@ -38,6 +39,7 @@ ms.plugin.manager.stage.exec.error: "§6插件 §b{plugin} §6执行 §d{executo
|
||||
ms.plugin.manager.stage.load: "加载"
|
||||
ms.plugin.manager.stage.enable: "启用"
|
||||
ms.plugin.manager.stage.disable: "关闭"
|
||||
ms.plugin.manager.build.error: "§6从文件 §b{file} §6加载插件失败 §4错误: §c{error}"
|
||||
ms.plugin.manager.build.update: "自动更新插件 {name} ..."
|
||||
ms.plugin.manager.build.not.extends: "§4发现错误的插件 §b{source} §4未继承接口 interfaces.Plugin, 将不会被载入到服务器!"
|
||||
ms.plugin.manager.build.duplicate: "§4发现已存在插件 §b{exists} §4和 §b{source}§4 存在冲突. 已存在插件将会被替换!"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/i18n",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.4",
|
||||
"description": "MiaoScript i18n package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -25,7 +25,7 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/nashorn": "^0.6.1",
|
||||
"@ccms/nashorn": "^0.6.4",
|
||||
"js-yaml": "^3.13.1"
|
||||
},
|
||||
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
||||
|
||||
@@ -45,6 +45,7 @@ export class Translate {
|
||||
console.i18n = (name: string, param?: TranslateParam) => {
|
||||
console.log(this.translate(name, param))
|
||||
}
|
||||
console.i18n('ms.i18n.completed')
|
||||
}
|
||||
|
||||
readYamlFile(dir: string, name: string) {
|
||||
|
||||
22
packages/nashorn/.npmignore
Normal file
22
packages/nashorn/.npmignore
Normal file
@@ -0,0 +1,22 @@
|
||||
test
|
||||
typings
|
||||
bundled
|
||||
build
|
||||
coverage
|
||||
docs
|
||||
wiki
|
||||
gulpfile.js
|
||||
bower.json
|
||||
karma.conf.js
|
||||
tsconfig.json
|
||||
typings.json
|
||||
CONTRIBUTING.md
|
||||
ISSUE_TEMPLATE.md
|
||||
PULL_REQUEST_TEMPLATE.md
|
||||
tslint.json
|
||||
wallaby.js
|
||||
.travis.yml
|
||||
.gitignore
|
||||
.vscode
|
||||
.theia
|
||||
type_definitions
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/nashorn",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.4",
|
||||
"description": "MiaoScript api package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
|
||||
@@ -46,7 +46,7 @@ declare global {
|
||||
debug: boolean;
|
||||
level: string;
|
||||
NashornEngineStartTime: number;
|
||||
setGlobal: (key: string, value: any) => void;
|
||||
setGlobal: (key: string, value: any, config?: PropertyDescriptor & ThisType<any>) => void;
|
||||
noop: () => void;
|
||||
console: Console;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/nodejs",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.4",
|
||||
"description": "MiaoScript nodejs package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,7 +24,7 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/nashorn": "^0.6.1"
|
||||
"@ccms/nashorn": "^0.6.4"
|
||||
},
|
||||
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/nukkit",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript nukkit package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,8 +24,8 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/api": "^0.6.1",
|
||||
"@ccms/common": "^0.6.1",
|
||||
"@ccms/api": "^0.6.5",
|
||||
"@ccms/common": "^0.6.4",
|
||||
"@ccms/container": "^0.6.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/ployfill",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript ployfill package",
|
||||
"author": "MiaoWoo <admin@yumc.pw>",
|
||||
"homepage": "https://github.com/circlecloud/ms.git",
|
||||
@@ -14,8 +14,8 @@
|
||||
"test": "echo \"Error: run tests from root\" && exit 1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/i18n": "^0.6.1",
|
||||
"@ccms/nashorn": "^0.6.1",
|
||||
"@ccms/i18n": "^0.6.4",
|
||||
"@ccms/nashorn": "^0.6.4",
|
||||
"core-js": "^3.6.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -6,6 +6,7 @@ i18n.initialize();
|
||||
console.i18n("ms.ployfill.initialize");
|
||||
require('./es5-ext');
|
||||
require('core-js');
|
||||
require('./node-shim');
|
||||
global.setGlobal('Proxy', require('./proxy').Proxy)
|
||||
global.setGlobal('XMLHttpRequest', require('./xml-http-request').XMLHttpRequest)
|
||||
global.setGlobal('Blob', require('blob-polyfill').Blob)
|
||||
|
||||
8
packages/ployfill/src/node-shim.ts
Normal file
8
packages/ployfill/src/node-shim.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
global.setGlobal('process', {
|
||||
env: {
|
||||
__noSuchProperty__: (prop) => {
|
||||
return Packages.java.lang.System.getenv(prop)
|
||||
}
|
||||
},
|
||||
platform: Packages.java.lang.System.getProperty("os.name")
|
||||
}, {})
|
||||
@@ -82,10 +82,12 @@ export class XMLHttpRequest {
|
||||
private _url: string;
|
||||
private _async: boolean;
|
||||
private _mimeType: string;
|
||||
private _requestHeaders: HttpHeader = {};
|
||||
|
||||
private _status: number = 0;
|
||||
private _statusText: string = null;
|
||||
private _response: any;
|
||||
private _responseText: any;
|
||||
private _responseURL: string;
|
||||
private _responseHeaders: HttpHeader = {};
|
||||
|
||||
@@ -114,10 +116,10 @@ export class XMLHttpRequest {
|
||||
return this._statusText;
|
||||
}
|
||||
get response() {
|
||||
return this._response ? JSON.parse(this._response) : this._response;
|
||||
return this._response || this.get();
|
||||
}
|
||||
get responseText() {
|
||||
return this._response;
|
||||
return this._responseText;
|
||||
}
|
||||
get responseXML() {
|
||||
return this._response;
|
||||
@@ -126,17 +128,17 @@ export class XMLHttpRequest {
|
||||
return this._responseURL;
|
||||
}
|
||||
|
||||
onload() { }
|
||||
onerror(ex: Error) { }
|
||||
onabort() { }
|
||||
onprogress() { }
|
||||
ontimeout(ex: Error) { }
|
||||
onloadend() { }
|
||||
onloadstart() { }
|
||||
onreadystatechange() { }
|
||||
public onload: () => void;
|
||||
public onerror: (ex: Error) => void;
|
||||
public onabort: () => void;
|
||||
public onprogress: () => void;
|
||||
public ontimeout: (ex: Error) => void;
|
||||
public onloadend: () => void;
|
||||
public onloadstart: () => void;
|
||||
public onreadystatechange: () => void;
|
||||
|
||||
setRequestHeader(key: string, val: string) {
|
||||
this._connection.setRequestProperty(key, val);
|
||||
this._requestHeaders[key] = val;
|
||||
}
|
||||
getResponseHeader(key: string): string {
|
||||
return this._responseHeaders[key];
|
||||
@@ -151,6 +153,8 @@ export class XMLHttpRequest {
|
||||
this._mimeType = mimeType;
|
||||
}
|
||||
open(method: RequestMethod, url: string, async: boolean = true, user?: string, password?: string) {
|
||||
if (this._readyState !== ReadyState.UNSENT) { throw new Error(`Error Status ${this._readyState}!`) }
|
||||
|
||||
this._method = method;
|
||||
this._url = url;
|
||||
this._async = async;
|
||||
@@ -169,33 +173,39 @@ export class XMLHttpRequest {
|
||||
this.setReadyState(ReadyState.OPENED);
|
||||
}
|
||||
send(body?: string | object): Future<string> {
|
||||
for (const header in this._requestHeaders) {
|
||||
this._connection.setRequestProperty(header, this._requestHeaders[header]);
|
||||
}
|
||||
if (this._readyState !== ReadyState.OPENED) { throw new Error(`Error Status ${this._readyState}!`) }
|
||||
let future = executor.submit(new Callable({ call: () => this._send(body) }));
|
||||
if (!this._async) { future.get() }
|
||||
return future;
|
||||
}
|
||||
get() {
|
||||
switch (this._responseType) {
|
||||
case "json":
|
||||
return this.response;
|
||||
case "text":
|
||||
return this.responseText;
|
||||
default:
|
||||
throw Error(`Unsupport ResponseType: ${this._responseType} !`)
|
||||
if (this._response === undefined) {
|
||||
switch (this._responseType) {
|
||||
case "json":
|
||||
return this._response = JSON.parse(this._responseText);
|
||||
case "text":
|
||||
return this._response = this._responseText;
|
||||
default:
|
||||
throw Error(`Unsupport ResponseType: ${this._responseType} !`)
|
||||
}
|
||||
}
|
||||
return this._response;
|
||||
}
|
||||
abort() {
|
||||
this._connection.disconnect();
|
||||
this.onabort();
|
||||
this.onabort && this.onabort();
|
||||
}
|
||||
|
||||
private _send(body?: string | object) {
|
||||
try {
|
||||
this._connection.connect();
|
||||
this.onloadstart();
|
||||
this.onloadstart && this.onloadstart();
|
||||
if (body) {
|
||||
let bodyType = Object.prototype.toString.call(body);
|
||||
if (bodyType !== '[object String]') { throw new Error(`body(${bodyType}) must be string!`) }
|
||||
if (typeof body !== "string") { throw new Error(`body(${bodyType}) must be string!`) }
|
||||
var out = this._connection.getOutputStream();
|
||||
out.write(new JavaString(body).getBytes(UTF_8));
|
||||
out.flush();
|
||||
@@ -204,15 +214,15 @@ export class XMLHttpRequest {
|
||||
this.setReadyState(ReadyState.LOADING);
|
||||
this._status = this._connection.getResponseCode();
|
||||
this._statusText = this._connection.getResponseMessage();
|
||||
this.setResponseHeaders(this._connection.getHeaderFields());
|
||||
if (this._status >= 0 && this._status < 300) {
|
||||
this._response = this.readOutput(this._connection.getInputStream());
|
||||
this._responseText = this.readOutput(this._connection.getInputStream());
|
||||
} else if (this._status >= 300 && this._status < 400) {
|
||||
this._responseURL = this.getResponseHeader('Location');
|
||||
} else {
|
||||
this._response = this.readOutput(this._connection.getErrorStream());
|
||||
this._responseText = this.readOutput(this._connection.getErrorStream());
|
||||
}
|
||||
this.onloadend();
|
||||
this.setResponseHeaders(this._connection.getHeaderFields());
|
||||
this.onloadend && this.onloadend();
|
||||
} catch (ex) {
|
||||
if (ex instanceof SocketTimeoutException && this.ontimeout) {
|
||||
return this.ontimeout(ex)
|
||||
@@ -227,7 +237,6 @@ export class XMLHttpRequest {
|
||||
}
|
||||
|
||||
private setResponseHeaders(header: any) {
|
||||
this._responseHeaders = {};
|
||||
header.forEach((key: string | number, value: string | any[]) => {
|
||||
this._responseHeaders[key] = value[value.length - 1]
|
||||
});
|
||||
@@ -235,7 +244,7 @@ export class XMLHttpRequest {
|
||||
|
||||
private setReadyState(state: ReadyState) {
|
||||
this._readyState = state;
|
||||
this.onreadystatechange();
|
||||
this.onreadystatechange && this.onreadystatechange();
|
||||
}
|
||||
|
||||
private readOutput(input: any) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/plugin",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript api package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -25,10 +25,10 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/api": "^0.6.1",
|
||||
"@ccms/common": "^0.6.1",
|
||||
"@ccms/api": "^0.6.5",
|
||||
"@ccms/common": "^0.6.4",
|
||||
"@ccms/container": "^0.6.0",
|
||||
"@ccms/i18n": "^0.6.1",
|
||||
"@ccms/i18n": "^0.6.4",
|
||||
"js-yaml": "^3.13.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,14 +10,14 @@ import { getPluginMetadatas, getPluginCommandMetadata, getPluginListenerMetadata
|
||||
export function plugin(metadata: interfaces.PluginMetadata) {
|
||||
return function (target: any) {
|
||||
metadata.target = target;
|
||||
metadata.source = metadata.source + '';
|
||||
metadata.type = "ioc";
|
||||
decorate(injectable(), target);
|
||||
Reflect.defineMetadata(METADATA_KEY.plugin, metadata, target);
|
||||
const previousMetadata: Map<string, interfaces.PluginMetadata> = getPluginMetadatas();
|
||||
previousMetadata.set(metadata.name, metadata);
|
||||
Reflect.defineMetadata(METADATA_KEY.plugin, previousMetadata, Reflect);
|
||||
const previousSources: Map<string, interfaces.PluginMetadata> = getPluginSources();
|
||||
previousSources.set(metadata.source, metadata);
|
||||
previousSources.set(metadata.source.toString(), metadata);
|
||||
Reflect.defineMetadata(METADATA_KEY.souece, previousSources, Reflect);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { server, MiaoScriptConsole, event } from "@ccms/api";
|
||||
import { injectable, inject } from "@ccms/container";
|
||||
import { injectable, inject, postConstruct } from "@ccms/container";
|
||||
import { getPluginMetadata } from "./utils";
|
||||
|
||||
export namespace interfaces {
|
||||
@@ -7,11 +7,17 @@ export namespace interfaces {
|
||||
export abstract class Plugin {
|
||||
public description: PluginMetadata;
|
||||
public logger: Console;
|
||||
@inject(server.Console)
|
||||
private Console: MiaoScriptConsole;
|
||||
|
||||
constructor(@inject(server.Console) Console: MiaoScriptConsole) {
|
||||
constructor() {
|
||||
this.description = getPluginMetadata(this)
|
||||
}
|
||||
|
||||
@postConstruct()
|
||||
private initialize() {
|
||||
// @ts-ignore
|
||||
this.logger = new Console(this.description.prefix || this.description.name)
|
||||
this.logger = new this.Console(this.description.prefix || this.description.name)
|
||||
}
|
||||
|
||||
public load() { }
|
||||
@@ -49,6 +55,10 @@ export namespace interfaces {
|
||||
* 插件源文件 必须指定为 __filename
|
||||
*/
|
||||
source: string;
|
||||
/**
|
||||
* 插件类型 默认为 ioc 执行 MiaoScript 加载逻辑
|
||||
*/
|
||||
type?: string;
|
||||
/**
|
||||
* 插件本体
|
||||
*/
|
||||
|
||||
@@ -25,17 +25,19 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
private EventManager: event.Event
|
||||
|
||||
private initialized: boolean = false
|
||||
private pluginMap: Map<string, interfaces.Plugin>
|
||||
private plugnMappings: Map<string, interfaces.PluginMetadata>
|
||||
private pluginRequireMap: Map<string, any>
|
||||
private pluginInstanceMap: Map<string, interfaces.Plugin>
|
||||
private pluginMetadataMap: Map<string, interfaces.PluginMetadata>
|
||||
|
||||
initialize() {
|
||||
if (this.pluginInstance !== null && this.initialized !== true) {
|
||||
// 如果plugin不等于null 则代表是正式环境
|
||||
console.i18n('ms.plugin.initialize', { plugin: this.pluginInstance, loader: Thread.currentThread().contextClassLoader })
|
||||
this.pluginMap = new Map()
|
||||
console.i18n('ms.plugin.event.map', { count: this.EventManager.mapEventName().toFixed(0), type: this.serverType });
|
||||
this.pluginRequireMap = new Map()
|
||||
this.pluginInstanceMap = new Map()
|
||||
this.pluginMetadataMap = getPluginSources();
|
||||
this.initialized = true;
|
||||
this.plugnMappings = getPluginSources()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,9 +64,13 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
this.execPluginStage(plugin, stage)
|
||||
}
|
||||
|
||||
/**
|
||||
* 从文件加载插件
|
||||
* @param file java.io.File
|
||||
*/
|
||||
loadFromFile(file: string): interfaces.Plugin {
|
||||
this.loadPlugin(file)
|
||||
let plugin = this.buildPlugin(this.plugnMappings.get(file))
|
||||
let metadata = this.loadPlugin(file);
|
||||
let plugin = this.buildPlugin(metadata && metadata.description ? metadata.description : this.pluginMetadataMap.get(file.toString()))
|
||||
this.load(plugin)
|
||||
this.enable(plugin)
|
||||
return plugin;
|
||||
@@ -104,7 +110,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
}
|
||||
|
||||
getPlugins() {
|
||||
return this.pluginMap
|
||||
return this.pluginInstanceMap
|
||||
}
|
||||
|
||||
private runCatch(pl: any, func: string) {
|
||||
@@ -116,10 +122,11 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
}
|
||||
}
|
||||
|
||||
private checkAndGet(name: string | interfaces.Plugin | undefined): Map<string, interfaces.Plugin> | interfaces.Plugin[] {
|
||||
if (name == undefined) { return this.pluginMap }
|
||||
if (typeof name == 'string' && this.pluginMap.has(name)) { return [this.pluginMap.get(name)] }
|
||||
private checkAndGet(name: string | interfaces.Plugin | undefined | any): Map<string, interfaces.Plugin> | interfaces.Plugin[] {
|
||||
if (name == this.pluginInstanceMap) { return this.pluginInstanceMap }
|
||||
if (typeof name == 'string' && this.pluginInstanceMap.has(name)) { return [this.pluginInstanceMap.get(name)] }
|
||||
if (name instanceof interfaces.Plugin) { return [name as interfaces.Plugin] }
|
||||
if (name.description || name.description.name) { return [name as interfaces.Plugin] }
|
||||
throw new Error(`Plugin ${JSON.stringify(name)} not exist!`)
|
||||
}
|
||||
|
||||
@@ -151,17 +158,19 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
* JS类型插件预加载
|
||||
*/
|
||||
private loadJsPlugins(files: any[]) {
|
||||
files.filter(file => file.name.endsWith(".js")).forEach(file => this.loadPlugin(file))
|
||||
files.filter(file => file.name.endsWith(".js")).forEach(file => {
|
||||
try {
|
||||
this.loadPlugin(file)
|
||||
} catch (ex) {
|
||||
console.i18n("ms.plugin.manager.initialize.error", { name: file.name, ex })
|
||||
console.ex(ex)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private loadPlugin(file: any) {
|
||||
try {
|
||||
this.updatePlugin(file)
|
||||
this.createPlugin(file)
|
||||
} catch (ex) {
|
||||
console.i18n("ms.plugin.manager.initialize.error", { name: file.name, ex })
|
||||
console.ex(ex)
|
||||
}
|
||||
this.updatePlugin(file)
|
||||
return this.createPlugin(file.toString())
|
||||
}
|
||||
|
||||
private updatePlugin(file: any) {
|
||||
@@ -187,31 +196,46 @@ export class PluginManagerImpl implements plugin.PluginManager {
|
||||
|
||||
private createPlugin(file: string) {
|
||||
//@ts-ignore
|
||||
require(file + '', { cache: false })
|
||||
let instance = require(file, { cache: false })
|
||||
this.pluginRequireMap.set(file, instance);
|
||||
return instance;
|
||||
}
|
||||
|
||||
private buildPlugins() {
|
||||
let metadatas = [];
|
||||
let pluginMetadatas = getPluginMetadatas()
|
||||
for (const [_, metadata] of pluginMetadatas) {
|
||||
for (const [_, metadata] of pluginMetadatas) { metadatas.push(metadata); }
|
||||
for (const [_, instance] of this.pluginRequireMap) { if (instance.description) { this.buildPlugin(instance.description) } }
|
||||
for (const metadata of metadatas) {
|
||||
if (!this.allowProcess(metadata.servers)) { continue }
|
||||
this.buildPlugin(metadata)
|
||||
}
|
||||
}
|
||||
|
||||
private buildPlugin(metadata: interfaces.PluginMetadata) {
|
||||
try {
|
||||
this.bindPlugin(metadata)
|
||||
let pluginInstance = this.container.getNamed<interfaces.Plugin>(plugin.Plugin, metadata.name)
|
||||
if (!(pluginInstance instanceof interfaces.Plugin)) {
|
||||
console.i18n('ms.plugin.manager.build.not.extends', { source: metadata.source })
|
||||
return
|
||||
}
|
||||
this.pluginMap.set(metadata.name, pluginInstance)
|
||||
return pluginInstance;
|
||||
} catch (ex) {
|
||||
console.i18n("ms.plugin.manager.initialize.error", { name: metadata.name, ex })
|
||||
console.ex(ex)
|
||||
let pluginInstance: interfaces.Plugin;
|
||||
switch (metadata.type) {
|
||||
case "ioc":
|
||||
try {
|
||||
this.bindPlugin(metadata)
|
||||
pluginInstance = this.container.getNamed<interfaces.Plugin>(plugin.Plugin, metadata.name)
|
||||
if (!(pluginInstance instanceof interfaces.Plugin)) {
|
||||
console.i18n('ms.plugin.manager.build.not.extends', { source: metadata.source })
|
||||
return
|
||||
}
|
||||
} catch (ex) {
|
||||
console.i18n("ms.plugin.manager.initialize.error", { name: metadata.name, ex })
|
||||
console.ex(ex)
|
||||
}
|
||||
break;
|
||||
case "basic":
|
||||
pluginInstance = this.pluginRequireMap.get(metadata.source.toString())
|
||||
break;
|
||||
default:
|
||||
throw new Error('§4不支持的插件类型 请检查加载器是否正常启用!')
|
||||
}
|
||||
this.pluginInstanceMap.set(metadata.name, pluginInstance)
|
||||
return pluginInstance;
|
||||
}
|
||||
|
||||
private bindPlugin(metadata: interfaces.PluginMetadata) {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { interfaces } from './interfaces'
|
||||
import { METADATA_KEY } from './constants'
|
||||
|
||||
const pluginSourceCache = new Map<string, interfaces.PluginMetadata>();
|
||||
|
||||
function getPlugins() {
|
||||
return [...getPluginMetadatas().values()].map((target) => target.target);
|
||||
}
|
||||
@@ -13,7 +15,7 @@ function getPluginSources() {
|
||||
let pluginSources: Map<string, interfaces.PluginMetadata> = Reflect.getMetadata(
|
||||
METADATA_KEY.souece,
|
||||
Reflect
|
||||
) || new Map<string, interfaces.PluginMetadata>();
|
||||
) || pluginSourceCache;
|
||||
return pluginSources;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "@ccms/plugins",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript plugins package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -25,8 +25,8 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/api": "^0.6.1",
|
||||
"@ccms/api": "^0.6.5",
|
||||
"@ccms/container": "^0.6.0",
|
||||
"@ccms/plugin": "^0.6.1"
|
||||
"@ccms/plugin": "^0.6.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<!-- UC应用模式 -->
|
||||
<meta name="browsermode" content="application">
|
||||
<!-- QQ应用模式 -->
|
||||
<meta name="x5-page-mode" content="app">
|
||||
<title>MiaoConsole 调试工具</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/avalon2@2.2.10/dist/avalon.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/js/bootstrap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/js-yaml@3.13.0/dist/js-yaml.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/messenger-hubspot@1.5.0/build/js/messenger.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/messenger-hubspot@1.5.0/build/js/messenger-theme-future.js"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/xterm@3.12.2/dist/xterm.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/xterm@3.12.2/dist/addons/fit/fit.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/xterm@3.12.2/dist/addons/attach/attach.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/xterm@3.12.2/dist/addons/fullscreen/fullscreen.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@3.12.2/dist/xterm.css" />
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@3.12.2/dist/addons/fullscreen/fullscreen.css">
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/monaco-editor@0.18.1/min/vs/loader.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/monaco-editor@0.18.1/min/vs/editor/editor.main.css">
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/github-markdown-css@3.0.1/github-markdown.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/messenger-hubspot@1.5.0/build/css/messenger.min.css">
|
||||
<link rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/messenger-hubspot@1.5.0/build/css/messenger-theme-future.min.css">
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js"></script>
|
||||
|
||||
<!-- <script src="https://raw.githubusercontent.com/imaya/zlib.js/develop/bin/gzip.min.js"></script>
|
||||
<script src="https://raw.githubusercontent.com/imaya/zlib.js/develop/bin/gunzip.min.js"></script> -->
|
||||
|
||||
<script src="js/message.js"></script>
|
||||
<script src="js/term.js"></script>
|
||||
<script src="js/websocket.js"></script>
|
||||
<script src="js/main.js"></script>
|
||||
<script src="js/editor.js"></script>
|
||||
</head>
|
||||
|
||||
<body noscroll="true">
|
||||
<div class="container-fluid bs-docs-container" :controller="main">
|
||||
<h3>欢迎使用 MiaoConsole 调试控制台</h3>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">服务器地址</span>
|
||||
<input id="address" class="form-control" :duplex="@server" :keydown="@connect" style="width: 100%"></input>
|
||||
<a class="input-group-addon btn" :click="@connect">连接</a>
|
||||
</div>
|
||||
<div class="panel panel-success" style="margin-top: 10px; height: 332px;">
|
||||
<div class="panel-heading">服务器日志 当前服务器类型: {{@type}}</div>
|
||||
<div id="terminal" style="height: 300px; width:100%;"></div>
|
||||
</div>
|
||||
<div class="progress progress-striped active" :visible='@classes.total != @classes.loaded'>
|
||||
<div class="progress-bar progress-bar-primary" role="progressbar" aria-valuenow="60" aria-valuemin="0"
|
||||
aria-valuemax="100" :css="{width: (@classes.loaded/@classes.total*100) +'%', 'min-width': '20em'}">
|
||||
<span>正在加载 {{@type}} 类型定义 {{@classes.loaded}}/{{@classes.total}}({{~~(@classes.loaded/@classes.total*100)|percent}}%) </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-info" :visible='@classes.total == @classes.loaded && @classes.total != 0'>
|
||||
<div class="panel-heading">代码编辑器</div>
|
||||
<label class="col-sm-1 control-label">代码页</label>
|
||||
<label :for="el in @codes" class="radio-inline">
|
||||
<input type="radio" :duplex="@code" :attr="{value:el}"> {{el}}
|
||||
</label>
|
||||
<div id="editor" style="height: 450px; width:100%;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,69 +0,0 @@
|
||||
let editor
|
||||
let monaco_path = 'https://cdn.jsdelivr.net/npm/monaco-editor@0.18.1/min'
|
||||
require.config({ paths: { 'vs': monaco_path + '/vs' } });
|
||||
window.MonacoEnvironment = { getWorkerUrl: () => proxy };
|
||||
let proxy = URL.createObjectURL(new Blob([`self.MonacoEnvironment = {baseUrl: '${monaco_path}/'};
|
||||
importScripts('${monaco_path}/vs/base/worker/workerMain.js');`], { type: 'text/javascript' }));
|
||||
|
||||
function loadExtraLibs(ts_d_src, filter) {
|
||||
let count = 0;
|
||||
axios.get(`${ts_d_src}/index.d.ts`).then(async result => {
|
||||
monaco.languages.typescript.javascriptDefaults.addExtraLib(result.data, 'file:///src/typings/index.d.ts')
|
||||
let classes = result.data.split('\n').map(line => line.match(/.*\.\/(.*)".*/)).filter(line => line).map(dts => dts[1])
|
||||
if (filter) {
|
||||
classes = classes.filter(line => filter(line))
|
||||
}
|
||||
main.classes.total += classes.length
|
||||
for (let fname of classes) {
|
||||
if (count++ % 50 == 0) { await axios.get(`${ts_d_src}/${fname}`) }
|
||||
loadExtraLib(`${ts_d_src}/${fname}`, `file:///src/typings/${fname}`)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function loadExtraLib(url, file) {
|
||||
axios.get(url).then(result => monaco.languages.typescript.javascriptDefaults.addExtraLib(result.data, file)).finally(() => main.classes.loaded++)
|
||||
}
|
||||
|
||||
require(["vs/editor/editor.main"], async function() {
|
||||
main.classes.total = 0
|
||||
main.classes.loaded = 0
|
||||
editor = monaco.editor.create(document.getElementById('editor'), {
|
||||
value: '',
|
||||
language: 'javascript',
|
||||
automaticLayout: true,
|
||||
scrollBeyondLastLine: false,
|
||||
theme: 'vs-dark'
|
||||
});
|
||||
main.load(editor)
|
||||
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_S, function() {
|
||||
main.save(editor)
|
||||
})
|
||||
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_R, function() {
|
||||
main.send('execCode', getSelectContent(editor) || editor.getValue())
|
||||
})
|
||||
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_E, function() {
|
||||
main.send('execCommand', getSelectContent(editor))
|
||||
})
|
||||
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_Q, function() {
|
||||
main.switch(editor)
|
||||
})
|
||||
loadExtraLibs(`https://cdn.jsdelivr.net/gh/circlecloud/ms@master/packages/types/dist/typings/jdk`, (line) => line.startsWith('java.lang'))
|
||||
if (main.type !== 'unknow') {
|
||||
loadExtraLibs(`https://cdn.jsdelivr.net/gh/circlecloud/ms@master/packages/types/dist/typings/${main.type}`)
|
||||
}
|
||||
});
|
||||
function getSelectContent(editor) {
|
||||
let selInfo = editor.getSelection();
|
||||
if (selInfo.startLineNumber === selInfo.endLineNumber) {
|
||||
return editor.getModel().getLineContent(selInfo.startLineNumber).substr(selInfo.startColumn - 1, selInfo.endColumn - selInfo.startColumn);
|
||||
} else {
|
||||
let first = editor.getModel().getLineContent(selInfo.startLineNumber).substr(selInfo.startColumn - 1)
|
||||
let content = '\n'
|
||||
for (let i = selInfo.startLineNumber + 1; i < selInfo.endLineNumber; i++) {
|
||||
content += editor.getModel().getLineContent(i) + '\n'
|
||||
}
|
||||
let last = editor.getModel().getLineContent(selInfo.endLineNumber).substr(0, selInfo.endColumn - 1)
|
||||
return first + content + last
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
var SPLIT_LINE = '\\M\\W\\S|T|S|S/L/T/'
|
||||
let serverKey = 'MiaoScript:server'
|
||||
let codeStorageKey = "MiaoScript:code:"
|
||||
var main = avalon.define({
|
||||
$id: 'main',
|
||||
server: window.localStorage.getItem(serverKey) || location.host,
|
||||
type: 'unknow',
|
||||
logs: '',
|
||||
codes: ["default", "bukkit", "sponge", "bungee", "common", "test", "dev", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
|
||||
code: 'default',
|
||||
classes: {
|
||||
total: 0,
|
||||
loaded: 0,
|
||||
},
|
||||
precent: () => {
|
||||
return classes.total
|
||||
},
|
||||
log: (info) => {
|
||||
info.split("\n").forEach((line) => { term.writeln(mcColor2ANSI(line + '§r')) })
|
||||
},
|
||||
send: (type, content) => {
|
||||
if (!ws || ws.readyState != 1) { term.writeln('Please Connect to Server first!'); return; }
|
||||
ws.send(`${type}${SPLIT_LINE}${content}`);
|
||||
},
|
||||
connect: (event = { key: 'Enter' }) => {
|
||||
if (event.key !== "Enter") {
|
||||
return;
|
||||
}
|
||||
connectWebSocket()
|
||||
},
|
||||
init: () => {
|
||||
if (main.server) {
|
||||
main.connect()
|
||||
}
|
||||
},
|
||||
load: (editor) => {
|
||||
editor.setValue(window.localStorage.getItem(codeStorageKey + main.code) || '')
|
||||
},
|
||||
save: (editor) => {
|
||||
window.localStorage.setItem(codeStorageKey + main.code, editor.getValue())
|
||||
showMessenger('代码页 ' + main.code + ' 保存成功!')
|
||||
},
|
||||
switch: (editor) => {
|
||||
let index = main.codes.indexOf(main.code) + 1
|
||||
main.code = main.codes[index == main.codes.length ? 0 : index]
|
||||
}
|
||||
});
|
||||
|
||||
main.$watch('code', (now, old, name) => {
|
||||
window.localStorage.setItem(codeStorageKey + old, editor.getValue())
|
||||
showMessenger('代码页 ' + old + ' 保存成功!')
|
||||
editor.setValue(window.localStorage.getItem(codeStorageKey + now) || '// empty code page ' + now)
|
||||
})
|
||||
|
||||
main.init()
|
||||
@@ -1,10 +0,0 @@
|
||||
$._messengerDefaults = {
|
||||
extraClasses: 'messenger-fixed messenger-theme-future messenger-on-top messenger-on-right'
|
||||
};
|
||||
var showMessenger = function(message, type) {
|
||||
return Messenger().post({
|
||||
message: message,
|
||||
type: type || 'info',
|
||||
showClo6seButton: true
|
||||
});
|
||||
};
|
||||
@@ -1,54 +0,0 @@
|
||||
Terminal.applyAddon(fit);
|
||||
var term = new Terminal();
|
||||
avalon.ready(() => {
|
||||
term.open(document.getElementById('terminal'));
|
||||
window.onresize = () => {
|
||||
term.fit();
|
||||
}
|
||||
window.onresize()
|
||||
})
|
||||
term.on('data', (data) => {
|
||||
if (data == '\r') {
|
||||
term.writeln(data)
|
||||
}
|
||||
});
|
||||
term.attachCustomKeyEventHandler(e => {
|
||||
if (e.ctrlKey && e.key == 'c' && term.hasSelection()) {
|
||||
showMessenger('内容已复制到粘贴板')
|
||||
return false;
|
||||
}
|
||||
if (e.ctrlKey && e.key == 'v') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})
|
||||
var colorMap = []
|
||||
colorMap['0'] = '38;5;0'
|
||||
colorMap['1'] = '38;5;4'
|
||||
colorMap['2'] = '38;5;2'
|
||||
colorMap['3'] = '38;5;6'
|
||||
colorMap['4'] = '38;5;1'
|
||||
colorMap['5'] = '38;5;5'
|
||||
colorMap['6'] = '38;5;3'
|
||||
colorMap['7'] = '38;5;7'
|
||||
colorMap['8'] = '38;5;8'
|
||||
colorMap['9'] = '38;5;12'
|
||||
colorMap['a'] = '38;5;10'
|
||||
colorMap['b'] = '38;5;14'
|
||||
colorMap['c'] = '38;5;9'
|
||||
colorMap['d'] = '38;5;13'
|
||||
colorMap['e'] = '38;5;11'
|
||||
colorMap['f'] = '38;5;15'
|
||||
colorMap['r'] = '0'
|
||||
colorMap['l'] = '1'
|
||||
colorMap['n'] = '4'
|
||||
var regexMap = []
|
||||
for (const c in colorMap) {
|
||||
regexMap[colorMap[c]] = new RegExp(`§${c}`, "g")
|
||||
}
|
||||
function mcColor2ANSI(str) {
|
||||
for (const regex in regexMap) {
|
||||
str = str.replace(regexMap[regex], `\u001b[${regex}m`)
|
||||
}
|
||||
return str;
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
var ws;
|
||||
function connectWebSocket() {
|
||||
if (ws && ws.readyState == 1) {
|
||||
ws.close()
|
||||
}
|
||||
window.localStorage.setItem(serverKey, main.server)
|
||||
ws = new WebSocket(`${location.protocol == 'http:' ? 'ws' : 'wss'}://${main.server}/ws`)
|
||||
ws.onmessage = (event) => {
|
||||
const [type, obj] = event.data.split(SPLIT_LINE)
|
||||
switch (type) {
|
||||
case "log":
|
||||
main.log(obj)
|
||||
break;
|
||||
case "type":
|
||||
main.type = obj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ws.onopen = () => {
|
||||
main.send("execDetect", "type");
|
||||
}
|
||||
ws.onclose = (ev) => {
|
||||
main.log(`Remote Server Close Connection... ${ev.code}`)
|
||||
if (ev.code == 1006) {
|
||||
setTimeout(() => {
|
||||
main.connect()
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import { plugin as pluginApi, server, task } from '@ccms/api'
|
||||
import { plugin, interfaces, cmd } from '@ccms/plugin'
|
||||
import { inject, ContainerInstance, Container } from '@ccms/container'
|
||||
import io, { Server as SocketIOServer, Socket as SocketIOSocket } from '@ccms/websocket'
|
||||
import * as fs from '@ccms/common/dist/fs'
|
||||
|
||||
const suffixMap = {
|
||||
ts: 'typescript',
|
||||
@@ -25,6 +26,8 @@ export class MiaoConsole extends interfaces.Plugin {
|
||||
private task: task.TaskManager
|
||||
@inject(pluginApi.PluginManager)
|
||||
private pluginManager: pluginApi.PluginManager
|
||||
@inject(pluginApi.PluginFolder)
|
||||
private pluginFolder: string;
|
||||
|
||||
private pipeline: any;
|
||||
private socketIOServer: SocketIOServer;
|
||||
@@ -92,6 +95,24 @@ export class MiaoConsole extends interfaces.Plugin {
|
||||
client.on('edit', (file: string, fn) => {
|
||||
fn && fn(base.read(file), suffixMap[file.split('.', 2)[1]])
|
||||
})
|
||||
client.on('save', (name: string, content: string, fn) => {
|
||||
this.logger.console(`§6客户端 §b${client.id} §6请求更新插件 §a${name} §6...`)
|
||||
let file = fs.concat(root, this.pluginFolder, name + '.js')
|
||||
if (!fs.exists(file)) { return fn('§6插件 §a' + name + ' §6尚未安装 §c请先创建空文件 或安装插件!') }
|
||||
try {
|
||||
base.save(file, content)
|
||||
this.pluginManager.reload(name);
|
||||
fn('§6插件 §a' + name + ' §6更新成功!')
|
||||
} catch (error) {
|
||||
this.logger.error(error)
|
||||
fn('§6插件 §a' + name + ' §4更新异常 错误: ' + error)
|
||||
|
||||
}
|
||||
})
|
||||
client.on('error', (error) => {
|
||||
this.logger.console(`§6客户端 §b${client.id} §c触发异常: ${error}`)
|
||||
this.logger.error(error)
|
||||
})
|
||||
client.on('disconnect', () => {
|
||||
this.logger.console(`§6客户端 §b${client.id} §c断开连接...`)
|
||||
})
|
||||
|
||||
@@ -9,21 +9,25 @@ import http from '@ccms/common/dist/http'
|
||||
|
||||
let help = [
|
||||
'§6========= §6[§aMiaoScriptPackageManager§6] 帮助 §aBy §bMiaoWoo §6=========',
|
||||
'§6/mpm §ainstall §e<插件名称> §6- §3安装插件',
|
||||
'§6/mpm §auninstall §e<插件名称> §6- §3卸载插件',
|
||||
'§6/mpm §alist [install]§6- §3列出仓库插件[已安装的插件]',
|
||||
'§6/mpm §aupdate §e<插件名称> §6- §3更新插件(无插件名称则更新源)',
|
||||
'§6/mpm §aupgrade §e<插件名称> §6- §3及时更新插件(update需要重启生效)',
|
||||
'§6/mpm §areload §e<插件名称> §6- §3重载插件(无插件名称则重载自身)',
|
||||
'§6/mpm §arun §e<JS代码> §6- §3运行JS代码',
|
||||
'§6/mpm §adeploy §e<插件名称> §6- §3发布插件',
|
||||
'§6/mpm §crestart §6- §4重启MiaoScript脚本引擎'
|
||||
'§6/mpm §ainstall §e<插件名称> §6- §3安装仓库插件',
|
||||
'§6/mpm §aload §e<插件名称> §6- §3安装本地插件',
|
||||
'§6/mpm §aunload §e<插件名称> §6- §3卸载已安装插件',
|
||||
'§6/mpm §areload §e<插件名称> §6- §3重载已安装插件(无名称则重载自身)',
|
||||
'§6/mpm §alist [i] §6- §3列出仓库插件[已安装的插件]',
|
||||
'§6/mpm §aupdate §e[插件名称] §6- §3更新插件(无名称则更新源)',
|
||||
'§6/mpm §aupgrade §e[插件名称] §6- §3升级插件/框架(§4无名称则升级框架§3)',
|
||||
'§6/mpm §arun §e<JS代码> §6- §3运行JS代码',
|
||||
'§6/mpm §adeploy §e<插件名称> §6- §3发布插件',
|
||||
'§6/mpm §crestart §6- §4重启MiaoScript脚本引擎'
|
||||
];
|
||||
|
||||
let langMap = {
|
||||
'list.header.install': '§6当前 §bMiaoScript §6已安装下列插件:',
|
||||
'main.command.not.exists': '§4未知的子命令: §c{command}',
|
||||
'main.command.help.tip': '§6请执行 §b/{command} §ahelp §6查看帮助!',
|
||||
'list.install.header': '§6当前 §bMiaoScript §6已安装下列插件:',
|
||||
'list.install.body': '§6插件名称: §b{name} §6版本: §a{version} §6作者: §3{author}',
|
||||
'list.header': '§6当前 §bMiaoScriptPackageCenter §6中存在下列插件:',
|
||||
'list.body': '§6插件名称: §b{name} §6版本: §a{version} §6作者: §3{author}',
|
||||
'list.body': '§6插件名称: §b{name} §6版本: §a{version} §6作者: §3{author} §6更新时间: §9{updated_at}',
|
||||
'plugin.not.exists': '§6插件 §b{name} §c不存在!',
|
||||
'plugin.unload.finish': '§6插件 §b{name} §a已卸载!',
|
||||
'plugin.reload.finish': '§6插件 §b{name} §a重载完成!',
|
||||
@@ -34,6 +38,13 @@ let langMap = {
|
||||
'download.url': '§6插件下载地址: §b{url}',
|
||||
'download.finish': '§6插件 §b{name} §a下载完毕 开始加载 ...',
|
||||
'install.finish': '§6插件 §b{name} §a安装成功!',
|
||||
'update.finish': '§6插件 §b{name} §a更新成功!',
|
||||
'deploy.token.not.exists': '§4请先配置发布Token!',
|
||||
'deploy.success': '§6插件 §b{name} §a发布成功! §6服务器返回: §a{msg}',
|
||||
'deploy.fail': '§6插件 §b{name} §c发布失败! §6服务器返回: §c{msg}',
|
||||
'run.script': '§b运行脚本:§r {script}',
|
||||
'run.result': '§a返回结果:§r {result}',
|
||||
'run.noresult': '§4没有返回结果!',
|
||||
}
|
||||
|
||||
let fallbackMap = langMap
|
||||
@@ -75,19 +86,33 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||
|
||||
main(sender: any, command: string, args: string[]) {
|
||||
let cmdKey = 'cmd' + args[0]
|
||||
if (!this[cmdKey] || args[0] === 'help') {
|
||||
this.logger.sender(sender, help);
|
||||
if (!this[cmdKey]) {
|
||||
this.i18n(sender, 'main.command.not.exists', { command: args[0] })
|
||||
this.i18n(sender, 'main.command.help.tip', { command })
|
||||
return;
|
||||
}
|
||||
args.shift()
|
||||
this[cmdKey](sender, ...args);
|
||||
}
|
||||
|
||||
cmdhelp(sender: any) {
|
||||
this.logger.sender(sender, help);
|
||||
}
|
||||
|
||||
cmdload(sender: any, name: string) {
|
||||
let pluginFile = fs.concat(__dirname + '', name);
|
||||
if (!fs.exists(pluginFile)) {
|
||||
this.i18n(sender, 'plugin.not.exists', { name: `${name}(${pluginFile})` })
|
||||
return;
|
||||
}
|
||||
this.pluginManager.loadFromFile(fs.file(pluginFile));
|
||||
}
|
||||
|
||||
cmdlist(sender: any, type: string = 'cloud') {
|
||||
if (type == "install") {
|
||||
this.i18n(sender, 'list.header.install')
|
||||
this.i18n(sender, 'list.install.header')
|
||||
this.pluginManager.getPlugins().forEach((plugin) => {
|
||||
this.i18n(sender, 'list.body', plugin.description);
|
||||
this.i18n(sender, 'list.install.body', plugin.description);
|
||||
})
|
||||
} else {
|
||||
this.i18n(sender, 'list.header')
|
||||
@@ -110,6 +135,20 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||
}
|
||||
}
|
||||
|
||||
cmdupgrade(sender: any, name: string) {
|
||||
if (name == "system") {
|
||||
let enginePath = fs.path(fs.file(fs.concat(root, 'node_modules', '@ccms')))
|
||||
if (enginePath.startsWith(root)) {
|
||||
base.delete(enginePath);
|
||||
this.cmdrestart(sender);
|
||||
}
|
||||
}
|
||||
if (this.checkPlugin(sender, name)) {
|
||||
this.update(sender, name);
|
||||
this.pluginManager.reload(name);
|
||||
}
|
||||
}
|
||||
|
||||
cmdunload(sender: any, name: string) {
|
||||
if (this.checkPlugin(sender, name)) {
|
||||
this.pluginManager.disable(name)
|
||||
@@ -118,6 +157,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||
}
|
||||
|
||||
cmdreload(sender: any, name: string) {
|
||||
name = name || this.description.name
|
||||
if (this.checkPlugin(sender, name)) {
|
||||
this.pluginManager.reload(name);
|
||||
this.i18n(sender, 'plugin.reload.finish', { name })
|
||||
@@ -144,6 +184,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||
try {
|
||||
this.logger.sender(sender, '§6Reloading §3MiaoScript Engine...');
|
||||
ScriptEngineContextHolder.disableEngine();
|
||||
Packages.java.lang.System.gc();
|
||||
ScriptEngineContextHolder.enableEngine();
|
||||
this.logger.sender(sender, '§3MiaoScript Engine §6Reload §aSuccessful...');
|
||||
} catch (ex) {
|
||||
@@ -155,37 +196,38 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||
cmdrun(sender: any, ...args: any[]) {
|
||||
try {
|
||||
var script = args.join(' ');
|
||||
this.logger.sender(sender, '§b运行脚本:§r', script);
|
||||
this.logger.sender(sender, '§a返回结果:§r', eval(script) || '§4没有返回结果!');
|
||||
this.i18n(sender, 'run.script', { script })
|
||||
this.i18n(sender, 'run.result', { result: eval(script) || this.translate.translate('run.noresult') })
|
||||
} catch (ex) {
|
||||
this.logger.sender(sender, this.logger.stack(ex));
|
||||
}
|
||||
}
|
||||
|
||||
cmddeploy(sender: any, name: any) {
|
||||
if (!process.env.AccessToken) { return this.i18n(sender, 'deploy.token.not.exists') }
|
||||
this.taskManager.create(() => {
|
||||
if (this.checkPlugin(sender, name)) {
|
||||
let plugin: interfaces.Plugin = this.pluginManager.getPlugins().get(name);
|
||||
let result = http.post("http://ms.yumc.pw/api/plugin/deploy", {
|
||||
let result = http.post("http://ms.yumc.pw/api/plugin/deploy?access_token=" + process.env.AccessToken, {
|
||||
name,
|
||||
author: plugin.description.author,
|
||||
version: plugin.description.version,
|
||||
source: base.read(plugin.description.source + '')
|
||||
source: base.read(plugin.description.source.toString())
|
||||
})
|
||||
this.logger.sender(sender, result);
|
||||
this.i18n(sender, result.code == 200 ? 'deploy.success' : 'deploy.fail', { name, msg: result.msg })
|
||||
}
|
||||
}).async().submit()
|
||||
}
|
||||
|
||||
update(sender: any, name: string) {
|
||||
if (this.checkCloudPlugin(sender, name)) {
|
||||
|
||||
this.download(sender, name, true);
|
||||
}
|
||||
}
|
||||
|
||||
@tab()
|
||||
tabmpm(sender: any, command: any, args: string | any[]) {
|
||||
if (args.length === 1) return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'help', 'create'];
|
||||
if (args.length === 1) { return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'help', 'create', 'deploy'] }
|
||||
if (args.length > 1) {
|
||||
switch (args[0]) {
|
||||
case "list":
|
||||
@@ -197,6 +239,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||
case "load":
|
||||
case "unload":
|
||||
case "reload":
|
||||
case "deploy":
|
||||
return [...this.pluginManager.getPlugins().keys()];
|
||||
}
|
||||
}
|
||||
@@ -211,15 +254,15 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
|
||||
}).async().submit();
|
||||
}
|
||||
|
||||
download(sender: any, name: string) {
|
||||
download(sender: any, name: string, update: boolean = false) {
|
||||
this.taskManager.create(() => {
|
||||
this.i18n(sender, 'download.start', { name })
|
||||
this.i18n(sender, 'download.url', { url: this.packageCache[name].url })
|
||||
let pluginFile = fs.concat(this.pluginFolder, name + '.js')
|
||||
let pluginFile = update ? fs.concat(this.pluginFolder, 'update', name + '.js') : fs.concat(this.pluginFolder, name + '.js')
|
||||
http.download(this.packageCache[name].url, pluginFile)
|
||||
this.i18n(sender, 'download.finish', { name })
|
||||
this.pluginManager.loadFromFile(pluginFile)
|
||||
this.i18n(sender, 'install.finish', { name })
|
||||
this.i18n(sender, update ? 'update.finish' : 'install.finish', { name })
|
||||
}).async().submit()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/sponge",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.5",
|
||||
"description": "MiaoScript api package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,8 +24,8 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/api": "^0.6.1",
|
||||
"@ccms/common": "^0.6.1",
|
||||
"@ccms/api": "^0.6.5",
|
||||
"@ccms/common": "^0.6.4",
|
||||
"@ccms/container": "^0.6.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ccms/websocket",
|
||||
"version": "0.6.1",
|
||||
"version": "0.6.4",
|
||||
"description": "MiaoScript websocket package",
|
||||
"keywords": [
|
||||
"miaoscript",
|
||||
@@ -24,6 +24,6 @@
|
||||
"typescript": "^3.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ccms/nashorn": "^0.6.1"
|
||||
"@ccms/nashorn": "^0.6.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"incremental": true,
|
||||
"baseUrl": "src",
|
||||
"outDir": "dist",
|
||||
"target": "es5",
|
||||
|
||||
Reference in New Issue
Block a user