yeow-api 0.2.58 → 0.2.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/command.ts +13 -4
- package/src/service.ts +26 -2
package/package.json
CHANGED
package/src/command.ts
CHANGED
|
@@ -33,13 +33,21 @@ export function registerCommand(name: string, options: CommandOptions): boolean
|
|
|
33
33
|
const completer = options.completer;
|
|
34
34
|
const pluginName = __plugin?.name || 'unknown';
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
const sender = payload.sender;
|
|
36
|
+
function decorateSender(sender: CommandSender): CommandSender {
|
|
38
37
|
if (sender?.uuid && sender.isPlayer) {
|
|
39
38
|
(sender as any).sendMessage = (msg: string) => {
|
|
40
39
|
call('player.sendMessage', { uuid: sender.uuid, message: msg });
|
|
41
40
|
};
|
|
41
|
+
} else {
|
|
42
|
+
(sender as any).sendMessage = (msg: string) => {
|
|
43
|
+
$send('log', { level: 'INFO', message: msg });
|
|
44
|
+
};
|
|
42
45
|
}
|
|
46
|
+
return sender;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const cbId = _registerCallback((payload: CommandPayload) => {
|
|
50
|
+
(payload as any).sender = decorateSender(payload.sender);
|
|
43
51
|
executor(payload);
|
|
44
52
|
}, { persistent: true });
|
|
45
53
|
|
|
@@ -56,6 +64,7 @@ export function registerCommand(name: string, options: CommandOptions): boolean
|
|
|
56
64
|
|
|
57
65
|
compCbId = _registerCallback((data: any) => {
|
|
58
66
|
try {
|
|
67
|
+
const sender = decorateSender(data.sender);
|
|
59
68
|
if (manualRelease) {
|
|
60
69
|
const complete = (result: string[]) => {
|
|
61
70
|
$send('task', {
|
|
@@ -64,9 +73,9 @@ export function registerCommand(name: string, options: CommandOptions): boolean
|
|
|
64
73
|
cb: '',
|
|
65
74
|
});
|
|
66
75
|
};
|
|
67
|
-
completerFn(
|
|
76
|
+
completerFn(sender, data.args, complete);
|
|
68
77
|
} else {
|
|
69
|
-
const result = completerFn(
|
|
78
|
+
const result = completerFn(sender, data.args);
|
|
70
79
|
if (result && typeof result.then === 'function') {
|
|
71
80
|
$send('task', {
|
|
72
81
|
type: 'command.tabComplete',
|
package/src/service.ts
CHANGED
|
@@ -5,9 +5,17 @@ export interface ServiceResult {
|
|
|
5
5
|
token: string;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
export interface NativeTerminateInfo {
|
|
9
|
+
serviceId: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
exitCode?: number;
|
|
12
|
+
output?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
8
15
|
export interface NativeServiceResult {
|
|
9
16
|
serviceId: string;
|
|
10
17
|
ready: () => Promise<void>;
|
|
18
|
+
onTerminate: (handler: (info: NativeTerminateInfo) => void) => void;
|
|
11
19
|
}
|
|
12
20
|
|
|
13
21
|
// ── Register Plugin Service ──
|
|
@@ -22,7 +30,13 @@ export async function registerService(refName: string, onRequest: (path: string,
|
|
|
22
30
|
}
|
|
23
31
|
}, { persistent: true });
|
|
24
32
|
|
|
25
|
-
const r = $send('service', { t: 'register', refName, onRequest: svcCbId, public: isPublic }) as ServiceResult;
|
|
33
|
+
const r = $send('service', { t: 'register', refName, onRequest: svcCbId, public: isPublic }) as ServiceResult & { err?: string; serviceId?: string };
|
|
34
|
+
if (r?.err) {
|
|
35
|
+
_unregisterCallback(svcCbId);
|
|
36
|
+
const e: any = new Error(r.err);
|
|
37
|
+
if (r.serviceId) e.serviceId = r.serviceId;
|
|
38
|
+
throw e;
|
|
39
|
+
}
|
|
26
40
|
return r;
|
|
27
41
|
}
|
|
28
42
|
|
|
@@ -52,10 +66,20 @@ function _serviceReady(serviceId: string): Promise<void> {
|
|
|
52
66
|
|
|
53
67
|
export async function registerNativeService(refName: string, platforms: NativePlatforms, isPublic = true): Promise<NativeServiceResult> {
|
|
54
68
|
const r = $send('service', { t: 'registerNative', refName, platforms, public: isPublic }) as { serviceId: string; err?: string };
|
|
55
|
-
if (r.err)
|
|
69
|
+
if (r.err) {
|
|
70
|
+
const e: any = new Error(r.err);
|
|
71
|
+
if ((r as any).serviceId) e.serviceId = (r as any).serviceId;
|
|
72
|
+
throw e;
|
|
73
|
+
}
|
|
74
|
+
let terminateCb: string | null = null;
|
|
56
75
|
return {
|
|
57
76
|
serviceId: r.serviceId,
|
|
58
77
|
ready: () => _serviceReady(r.serviceId),
|
|
78
|
+
onTerminate(handler) {
|
|
79
|
+
if (terminateCb) _unregisterCallback(terminateCb);
|
|
80
|
+
terminateCb = _registerCallback((info: unknown) => handler(info as NativeTerminateInfo), { persistent: true });
|
|
81
|
+
$send('service', { t: 'registerNativeTerminate', serviceId: r.serviceId, cb: terminateCb });
|
|
82
|
+
},
|
|
59
83
|
};
|
|
60
84
|
}
|
|
61
85
|
|