yeow-api 0.2.58 → 0.2.100

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yeow-api",
3
- "version": "0.2.58",
3
+ "version": "0.2.100",
4
4
  "description": "Yeow API",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
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
- const cbId = _registerCallback((payload: CommandPayload) => {
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(data.sender, data.args, complete);
76
+ completerFn(sender, data.args, complete);
68
77
  } else {
69
- const result = completerFn(data.sender, data.args);
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) throw new Error(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