@kevisual/router 0.0.59 → 0.0.61

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.
@@ -99,20 +99,412 @@ function pick$1(obj, keys) {
99
99
  return result;
100
100
  }
101
101
 
102
- const listenProcess = async ({ app, emitter, params, timeout = 10 * 60 * 60 * 1000 }) => {
103
- const process = emitter || globalThis.process;
102
+ function getDefaultExportFromCjs (x) {
103
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
104
+ }
105
+
106
+ var eventemitter3 = {exports: {}};
107
+
108
+ var hasRequiredEventemitter3;
109
+
110
+ function requireEventemitter3 () {
111
+ if (hasRequiredEventemitter3) return eventemitter3.exports;
112
+ hasRequiredEventemitter3 = 1;
113
+ (function (module) {
114
+
115
+ var has = Object.prototype.hasOwnProperty
116
+ , prefix = '~';
117
+
118
+ /**
119
+ * Constructor to create a storage for our `EE` objects.
120
+ * An `Events` instance is a plain object whose properties are event names.
121
+ *
122
+ * @constructor
123
+ * @private
124
+ */
125
+ function Events() {}
126
+
127
+ //
128
+ // We try to not inherit from `Object.prototype`. In some engines creating an
129
+ // instance in this way is faster than calling `Object.create(null)` directly.
130
+ // If `Object.create(null)` is not supported we prefix the event names with a
131
+ // character to make sure that the built-in object properties are not
132
+ // overridden or used as an attack vector.
133
+ //
134
+ if (Object.create) {
135
+ Events.prototype = Object.create(null);
136
+
137
+ //
138
+ // This hack is needed because the `__proto__` property is still inherited in
139
+ // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
140
+ //
141
+ if (!new Events().__proto__) prefix = false;
142
+ }
143
+
144
+ /**
145
+ * Representation of a single event listener.
146
+ *
147
+ * @param {Function} fn The listener function.
148
+ * @param {*} context The context to invoke the listener with.
149
+ * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
150
+ * @constructor
151
+ * @private
152
+ */
153
+ function EE(fn, context, once) {
154
+ this.fn = fn;
155
+ this.context = context;
156
+ this.once = once || false;
157
+ }
158
+
159
+ /**
160
+ * Add a listener for a given event.
161
+ *
162
+ * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
163
+ * @param {(String|Symbol)} event The event name.
164
+ * @param {Function} fn The listener function.
165
+ * @param {*} context The context to invoke the listener with.
166
+ * @param {Boolean} once Specify if the listener is a one-time listener.
167
+ * @returns {EventEmitter}
168
+ * @private
169
+ */
170
+ function addListener(emitter, event, fn, context, once) {
171
+ if (typeof fn !== 'function') {
172
+ throw new TypeError('The listener must be a function');
173
+ }
174
+
175
+ var listener = new EE(fn, context || emitter, once)
176
+ , evt = prefix ? prefix + event : event;
177
+
178
+ if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
179
+ else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
180
+ else emitter._events[evt] = [emitter._events[evt], listener];
181
+
182
+ return emitter;
183
+ }
184
+
185
+ /**
186
+ * Clear event by name.
187
+ *
188
+ * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
189
+ * @param {(String|Symbol)} evt The Event name.
190
+ * @private
191
+ */
192
+ function clearEvent(emitter, evt) {
193
+ if (--emitter._eventsCount === 0) emitter._events = new Events();
194
+ else delete emitter._events[evt];
195
+ }
196
+
197
+ /**
198
+ * Minimal `EventEmitter` interface that is molded against the Node.js
199
+ * `EventEmitter` interface.
200
+ *
201
+ * @constructor
202
+ * @public
203
+ */
204
+ function EventEmitter() {
205
+ this._events = new Events();
206
+ this._eventsCount = 0;
207
+ }
208
+
209
+ /**
210
+ * Return an array listing the events for which the emitter has registered
211
+ * listeners.
212
+ *
213
+ * @returns {Array}
214
+ * @public
215
+ */
216
+ EventEmitter.prototype.eventNames = function eventNames() {
217
+ var names = []
218
+ , events
219
+ , name;
220
+
221
+ if (this._eventsCount === 0) return names;
222
+
223
+ for (name in (events = this._events)) {
224
+ if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
225
+ }
226
+
227
+ if (Object.getOwnPropertySymbols) {
228
+ return names.concat(Object.getOwnPropertySymbols(events));
229
+ }
230
+
231
+ return names;
232
+ };
233
+
234
+ /**
235
+ * Return the listeners registered for a given event.
236
+ *
237
+ * @param {(String|Symbol)} event The event name.
238
+ * @returns {Array} The registered listeners.
239
+ * @public
240
+ */
241
+ EventEmitter.prototype.listeners = function listeners(event) {
242
+ var evt = prefix ? prefix + event : event
243
+ , handlers = this._events[evt];
244
+
245
+ if (!handlers) return [];
246
+ if (handlers.fn) return [handlers.fn];
247
+
248
+ for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
249
+ ee[i] = handlers[i].fn;
250
+ }
251
+
252
+ return ee;
253
+ };
254
+
255
+ /**
256
+ * Return the number of listeners listening to a given event.
257
+ *
258
+ * @param {(String|Symbol)} event The event name.
259
+ * @returns {Number} The number of listeners.
260
+ * @public
261
+ */
262
+ EventEmitter.prototype.listenerCount = function listenerCount(event) {
263
+ var evt = prefix ? prefix + event : event
264
+ , listeners = this._events[evt];
265
+
266
+ if (!listeners) return 0;
267
+ if (listeners.fn) return 1;
268
+ return listeners.length;
269
+ };
270
+
271
+ /**
272
+ * Calls each of the listeners registered for a given event.
273
+ *
274
+ * @param {(String|Symbol)} event The event name.
275
+ * @returns {Boolean} `true` if the event had listeners, else `false`.
276
+ * @public
277
+ */
278
+ EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
279
+ var evt = prefix ? prefix + event : event;
280
+
281
+ if (!this._events[evt]) return false;
282
+
283
+ var listeners = this._events[evt]
284
+ , len = arguments.length
285
+ , args
286
+ , i;
287
+
288
+ if (listeners.fn) {
289
+ if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
290
+
291
+ switch (len) {
292
+ case 1: return listeners.fn.call(listeners.context), true;
293
+ case 2: return listeners.fn.call(listeners.context, a1), true;
294
+ case 3: return listeners.fn.call(listeners.context, a1, a2), true;
295
+ case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
296
+ case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
297
+ case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
298
+ }
299
+
300
+ for (i = 1, args = new Array(len -1); i < len; i++) {
301
+ args[i - 1] = arguments[i];
302
+ }
303
+
304
+ listeners.fn.apply(listeners.context, args);
305
+ } else {
306
+ var length = listeners.length
307
+ , j;
308
+
309
+ for (i = 0; i < length; i++) {
310
+ if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
311
+
312
+ switch (len) {
313
+ case 1: listeners[i].fn.call(listeners[i].context); break;
314
+ case 2: listeners[i].fn.call(listeners[i].context, a1); break;
315
+ case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
316
+ case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
317
+ default:
318
+ if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
319
+ args[j - 1] = arguments[j];
320
+ }
321
+
322
+ listeners[i].fn.apply(listeners[i].context, args);
323
+ }
324
+ }
325
+ }
326
+
327
+ return true;
328
+ };
329
+
330
+ /**
331
+ * Add a listener for a given event.
332
+ *
333
+ * @param {(String|Symbol)} event The event name.
334
+ * @param {Function} fn The listener function.
335
+ * @param {*} [context=this] The context to invoke the listener with.
336
+ * @returns {EventEmitter} `this`.
337
+ * @public
338
+ */
339
+ EventEmitter.prototype.on = function on(event, fn, context) {
340
+ return addListener(this, event, fn, context, false);
341
+ };
342
+
343
+ /**
344
+ * Add a one-time listener for a given event.
345
+ *
346
+ * @param {(String|Symbol)} event The event name.
347
+ * @param {Function} fn The listener function.
348
+ * @param {*} [context=this] The context to invoke the listener with.
349
+ * @returns {EventEmitter} `this`.
350
+ * @public
351
+ */
352
+ EventEmitter.prototype.once = function once(event, fn, context) {
353
+ return addListener(this, event, fn, context, true);
354
+ };
355
+
356
+ /**
357
+ * Remove the listeners of a given event.
358
+ *
359
+ * @param {(String|Symbol)} event The event name.
360
+ * @param {Function} fn Only remove the listeners that match this function.
361
+ * @param {*} context Only remove the listeners that have this context.
362
+ * @param {Boolean} once Only remove one-time listeners.
363
+ * @returns {EventEmitter} `this`.
364
+ * @public
365
+ */
366
+ EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
367
+ var evt = prefix ? prefix + event : event;
368
+
369
+ if (!this._events[evt]) return this;
370
+ if (!fn) {
371
+ clearEvent(this, evt);
372
+ return this;
373
+ }
374
+
375
+ var listeners = this._events[evt];
376
+
377
+ if (listeners.fn) {
378
+ if (
379
+ listeners.fn === fn &&
380
+ (!once || listeners.once) &&
381
+ (!context || listeners.context === context)
382
+ ) {
383
+ clearEvent(this, evt);
384
+ }
385
+ } else {
386
+ for (var i = 0, events = [], length = listeners.length; i < length; i++) {
387
+ if (
388
+ listeners[i].fn !== fn ||
389
+ (once && !listeners[i].once) ||
390
+ (context && listeners[i].context !== context)
391
+ ) {
392
+ events.push(listeners[i]);
393
+ }
394
+ }
395
+
396
+ //
397
+ // Reset the array, or remove it completely if we have no more listeners.
398
+ //
399
+ if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
400
+ else clearEvent(this, evt);
401
+ }
402
+
403
+ return this;
404
+ };
405
+
406
+ /**
407
+ * Remove all listeners, or those of the specified event.
408
+ *
409
+ * @param {(String|Symbol)} [event] The event name.
410
+ * @returns {EventEmitter} `this`.
411
+ * @public
412
+ */
413
+ EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
414
+ var evt;
415
+
416
+ if (event) {
417
+ evt = prefix ? prefix + event : event;
418
+ if (this._events[evt]) clearEvent(this, evt);
419
+ } else {
420
+ this._events = new Events();
421
+ this._eventsCount = 0;
422
+ }
423
+
424
+ return this;
425
+ };
426
+
427
+ //
428
+ // Alias methods names because people roll like that.
429
+ //
430
+ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
431
+ EventEmitter.prototype.addListener = EventEmitter.prototype.on;
432
+
433
+ //
434
+ // Expose the prefix.
435
+ //
436
+ EventEmitter.prefixed = prefix;
437
+
438
+ //
439
+ // Allow `EventEmitter` to be imported as module namespace.
440
+ //
441
+ EventEmitter.EventEmitter = EventEmitter;
442
+
443
+ //
444
+ // Expose the module.
445
+ //
446
+ {
447
+ module.exports = EventEmitter;
448
+ }
449
+ } (eventemitter3));
450
+ return eventemitter3.exports;
451
+ }
452
+
453
+ var eventemitter3Exports = requireEventemitter3();
454
+ var EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);
455
+
456
+ class MockProcess {
457
+ emitter;
458
+ process;
459
+ constructor(opts) {
460
+ this.emitter = opts?.emitter || new EventEmitter();
461
+ const isNode = opts?.isNode ?? true;
462
+ if (isNode) {
463
+ this.process = globalThis?.process;
464
+ }
465
+ }
466
+ send(data, callback) {
467
+ if (this.process) {
468
+ this.process?.send?.(data, (err) => {
469
+ callback(err);
470
+ });
471
+ }
472
+ this.emitter.emit('send', data);
473
+ }
474
+ exit(flag = 0) {
475
+ if (this.process) {
476
+ this.process?.exit?.(flag);
477
+ }
478
+ this.emitter.emit('exit', flag);
479
+ }
480
+ on(fn) {
481
+ if (this.process) {
482
+ this.process.on('message', fn);
483
+ }
484
+ this.emitter.on('message', fn);
485
+ }
486
+ desctroy() {
487
+ if (this.emitter) {
488
+ this.emitter = undefined;
489
+ }
490
+ this.process = undefined;
491
+ }
492
+ }
493
+ const listenProcess = async ({ app, mockProcess, params, timeout = 10 * 60 * 60 * 1000 }) => {
494
+ const process = mockProcess || new MockProcess();
104
495
  let isEnd = false;
105
496
  const timer = setTimeout(() => {
106
497
  if (isEnd)
107
498
  return;
108
499
  isEnd = true;
109
- process.send?.({ success: false, error: 'Timeout' });
110
- process.exit?.(1);
500
+ process.send?.({ success: false, error: 'Timeout' }, () => {
501
+ process.exit?.(1);
502
+ });
111
503
  }, timeout);
112
504
  // 监听来自主进程的消息
113
505
  const getParams = async () => {
114
506
  return new Promise((resolve) => {
115
- process.on('message', (msg) => {
507
+ process.on((msg) => {
116
508
  if (isEnd)
117
509
  return;
118
510
  isEnd = true;
@@ -122,16 +514,19 @@ const listenProcess = async ({ app, emitter, params, timeout = 10 * 60 * 60 * 10
122
514
  });
123
515
  };
124
516
  try {
125
- const { path = 'main', ...rest } = await getParams();
517
+ /**
518
+ * 如果不提供path,默认是main
519
+ */
520
+ const { path = 'main', payload = {}, ...rest } = await getParams();
126
521
  // 执行主要逻辑
127
- const result = await app.queryRoute({ path, ...rest, ...params });
522
+ const result = await app.run({ path, ...params, ...rest, payload: { ...params?.payload, ...payload } });
128
523
  // 发送结果回主进程
129
524
  const response = {
130
525
  success: true,
131
526
  data: result,
132
527
  timestamp: new Date().toISOString()
133
528
  };
134
- process.send?.(response, (error) => {
529
+ process.send?.(response, () => {
135
530
  process.exit?.(0);
136
531
  });
137
532
  }
@@ -139,8 +534,9 @@ const listenProcess = async ({ app, emitter, params, timeout = 10 * 60 * 60 * 10
139
534
  process.send?.({
140
535
  success: false,
141
536
  error: error.message
537
+ }, () => {
538
+ process.exit?.(1);
142
539
  });
143
- process.exit?.(1);
144
540
  }
145
541
  };
146
542
 
@@ -15024,6 +15420,7 @@ class QueryRouter {
15024
15420
  }
15025
15421
  /**
15026
15422
  * 等待程序运行, 获取到message的数据,就执行
15423
+ * params 是预设参数,默认path为main
15027
15424
  *
15028
15425
  * emitter = process
15029
15426
  * -- .exit
@@ -15288,4 +15685,4 @@ class QueryUtil {
15288
15685
 
15289
15686
  const App = QueryRouterServer;
15290
15687
 
15291
- export { App, CustomError, Mini, QueryRouter, QueryRouterServer, QueryUtil, Route, createSchema, createSkill, define, tool, util };
15688
+ export { App, CustomError, Mini, MockProcess, QueryRouter, QueryRouterServer, QueryUtil, Route, createSchema, createSkill, define, tool, util };
package/dist/router.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import { RouteOpts as RouteOpts$1, QueryRouterServer as QueryRouterServer$1, RouteMiddleware as RouteMiddleware$1, Run as Run$1 } from '@kevisual/router';
3
3
  import { Query, DataOpts, Result } from '@kevisual/query/query';
4
+ import { EventEmitter } from 'eventemitter3';
4
5
  import * as http from 'node:http';
5
6
  import http__default, { IncomingMessage, ServerResponse } from 'node:http';
6
7
  import https from 'node:https';
7
8
  import http2 from 'node:http2';
8
- import { EventEmitter } from 'eventemitter3';
9
9
  import { WebSocketServer } from 'ws';
10
10
  import { IncomingMessage as IncomingMessage$1, ServerResponse as ServerResponse$1 } from 'http';
11
11
 
@@ -85,7 +85,7 @@ type RouteContext<T = {
85
85
  needSerialize?: boolean;
86
86
  } & T;
87
87
  type SimpleObject$1 = Record<string, any>;
88
- type Run<T extends SimpleObject$1 = {}> = (ctx: RouteContext<T>) => Promise<typeof ctx | null | void>;
88
+ type Run<T extends SimpleObject$1 = {}> = (ctx: Required<RouteContext<T>>) => Promise<typeof ctx | null | void>;
89
89
  type NextRoute = Pick<Route, 'id' | 'path' | 'key'>;
90
90
  type RouteMiddleware = {
91
91
  path: string;
@@ -314,6 +314,7 @@ declare class QueryRouter {
314
314
  createRouteList(force?: boolean, filter?: (route: Route) => boolean): void;
315
315
  /**
316
316
  * 等待程序运行, 获取到message的数据,就执行
317
+ * params 是预设参数,默认path为main
317
318
  *
318
319
  * emitter = process
319
320
  * -- .exit
@@ -517,6 +518,19 @@ declare class QueryUtil<T extends RouteObject = RouteObject> {
517
518
  get routeObject(): T;
518
519
  }
519
520
 
521
+ declare class MockProcess {
522
+ emitter?: EventEmitter;
523
+ process?: NodeJS.Process;
524
+ constructor(opts?: {
525
+ emitter?: EventEmitter;
526
+ isNode?: boolean;
527
+ });
528
+ send(data?: any, callback?: (err?: Error) => void): void;
529
+ exit(flag?: number): void;
530
+ on(fn: (msg?: any) => any): void;
531
+ desctroy(): void;
532
+ }
533
+
520
534
  type Cors$2 = {
521
535
  /**
522
536
  * @default '*''
@@ -926,5 +940,5 @@ type GlobOptions = {
926
940
  };
927
941
  declare const loadTS: (match?: string, { cwd, load }?: GlobOptions) => Promise<any[]>;
928
942
 
929
- export { App, CustomError, Mini, QueryRouter, QueryRouterServer, QueryUtil, Route, ServerNode, createSchema, createSkill, define, handleServer, loadTS, tool, util };
943
+ export { App, CustomError, Mini, MockProcess, QueryRouter, QueryRouterServer, QueryUtil, Route, ServerNode, createSchema, createSkill, define, handleServer, loadTS, tool, util };
930
944
  export type { HttpListenerFun, Listener, OnListener, OnWebSocketFn, RouteArray, RouteContext, RouteMiddleware, RouteObject, RouteOpts, RouterReq, RouterRes, Rule, Run, Schema, Skill, WS, WebSocketListenerFun, WebSocketReq, WebSocketRes };