wenay-common2 1.0.22 → 1.0.24

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.
@@ -1,8 +1,9 @@
1
1
  export type Listener<T extends any[]> = (...r: T) => void;
2
- type NormalizeTuple<T> = T extends any[] ? T : [T];
2
+ export type NormalizeTuple<T> = T extends any[] ? T : [T];
3
3
  export declare function funcListenCallbackBase<T>(b: (e: Listener<NormalizeTuple<T>>) => (void | (() => void)), data?: {
4
4
  event?: (type: "add" | "remove", count: number, api: ReturnType<typeof funcListenCallbackBase<T>>) => void;
5
5
  fast?: boolean;
6
+ addListenClose?: ReturnType<typeof funcListenCallbackBase<any>>;
6
7
  }): {
7
8
  func: Listener<NormalizeTuple<T>>;
8
9
  isRun: () => boolean;
@@ -52,4 +53,3 @@ export declare function UseListen<T>(data?: Parameters<typeof funcListenCallback
52
53
  readonly getAllKeys: Listener<NormalizeTuple<T>>[];
53
54
  }];
54
55
  export declare function isListenCallback(obj: any): obj is ReturnType<typeof funcListenCallbackBase>;
55
- export {};
@@ -6,13 +6,14 @@ exports.funcListenCallback = funcListenCallback;
6
6
  exports.UseListen = UseListen;
7
7
  exports.isListenCallback = isListenCallback;
8
8
  function funcListenCallbackBase(b, data) {
9
- const { fast = true, event } = data ?? {};
9
+ const { fast = true, event, addListenClose } = data ?? {};
10
10
  const obj = new Map();
11
11
  const evClose = new Map();
12
12
  const sinh = new Map();
13
13
  let a = (...e) => { obj.forEach(z => z(...e)); };
14
14
  let close = null;
15
15
  let cached = null;
16
+ let closeUnsubscribe = null;
16
17
  const getArr = () => cached ?? (cached = Array.from(obj.values()));
17
18
  const rebuild = () => {
18
19
  cached = null;
@@ -37,7 +38,14 @@ function funcListenCallbackBase(b, data) {
37
38
  });
38
39
  };
39
40
  const func = (...e) => { a?.(...e); };
40
- const run = () => { close = (b(func) ?? (() => { })); };
41
+ const run = () => {
42
+ close = (b(func) ?? (() => { }));
43
+ if (addListenClose && !closeUnsubscribe) {
44
+ closeUnsubscribe = addListenClose.addListen(() => {
45
+ api.close();
46
+ });
47
+ }
48
+ };
41
49
  const api = {
42
50
  func,
43
51
  isRun: () => close !== null,
@@ -51,6 +59,10 @@ function funcListenCallbackBase(b, data) {
51
59
  sinh.clear();
52
60
  evClose.forEach(cb => cb());
53
61
  evClose.clear();
62
+ if (closeUnsubscribe) {
63
+ closeUnsubscribe();
64
+ closeUnsubscribe = null;
65
+ }
54
66
  },
55
67
  eventClose: (cb) => {
56
68
  evClose.set(cb, cb);
@@ -0,0 +1,15 @@
1
+ import { funcListenCallbackBase, Listener, NormalizeTuple } from "./Listen";
2
+ export declare function UseListenTransform<TSource extends any[], TTarget extends any[]>(sourceListen: ReturnType<typeof funcListenCallbackBase<TSource>>, transform: (...args: NormalizeTuple<TSource>) => TTarget | null, options?: {
3
+ addListenClose?: ReturnType<typeof funcListenCallbackBase<any>>;
4
+ }): readonly [(...a: NormalizeTuple<TTarget>) => void, {
5
+ func: Listener<NormalizeTuple<TTarget>>;
6
+ isRun: () => boolean;
7
+ run: () => void;
8
+ close: () => void;
9
+ eventClose: (cb: () => void) => () => void;
10
+ removeEventClose: (cb: () => void) => void;
11
+ addListen: (cb: Listener<NormalizeTuple<TTarget>>, cbClose?: (() => void) | undefined) => () => void;
12
+ removeListen: (cb: Listener<NormalizeTuple<TTarget>> | null) => void;
13
+ count: () => number;
14
+ readonly getAllKeys: Listener<NormalizeTuple<TTarget>>[];
15
+ }];
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UseListenTransform = UseListenTransform;
4
+ const Listen_1 = require("./Listen");
5
+ function UseListenTransform(sourceListen, transform, options) {
6
+ let unsubscribeFromSource = null;
7
+ const [emit, targetListen] = (0, Listen_1.UseListen)({
8
+ event: (type, count, api) => {
9
+ if (type === "add" && count === 1) {
10
+ const sourceCallback = (...args) => {
11
+ const result = transform(...args);
12
+ if (result !== null) {
13
+ emit(...result);
14
+ }
15
+ };
16
+ unsubscribeFromSource = sourceListen.addListen(sourceCallback);
17
+ }
18
+ if (type === "remove" && count === 0) {
19
+ if (unsubscribeFromSource) {
20
+ unsubscribeFromSource();
21
+ unsubscribeFromSource = null;
22
+ }
23
+ }
24
+ },
25
+ addListenClose: options?.addListenClose
26
+ });
27
+ return [emit, targetListen];
28
+ }
@@ -9,8 +9,9 @@ export type RpcDescriptor<T extends object> = {
9
9
  };
10
10
  export declare function rpc<T extends object>(socketKey?: string): RpcDescriptor<T>;
11
11
  export declare function createRpcClientHub<T extends Record<string, RpcDescriptor<any>>>(createSocket: (token: string | null) => RpcHubSocket, schemaBuilder: (helper: typeof rpc) => T): {
12
+ readonly promise: Promise<void>;
12
13
  facade: { [K_1 in keyof { [K in keyof T]: T[K] extends RpcDescriptor<infer U extends object> ? import("./rpc-client").RpcClientReturn<DeepSocketListenSmart<U>> : never; }]: { [K in keyof T]: T[K] extends RpcDescriptor<infer U extends object> ? import("./rpc-client").RpcClientReturn<DeepSocketListenSmart<U>> : never; }[K_1] | null; };
13
- setToken: (token: string | null) => void;
14
+ setToken: (token: string | null) => any;
14
15
  onConnect: (func?: ((count: number) => void) | null) => void;
15
16
  connectCount: () => number;
16
17
  };
@@ -15,6 +15,7 @@ function createRpcClientHub(createSocket, schemaBuilder) {
15
15
  let socket = null;
16
16
  let connectCount = 0;
17
17
  let onConnectCb = null;
18
+ let promise = Promise.resolve();
18
19
  function setToken(token) {
19
20
  socket?.disconnect?.();
20
21
  socket = createSocket(token);
@@ -26,15 +27,21 @@ function createRpcClientHub(createSocket, schemaBuilder) {
26
27
  client.initStrict();
27
28
  }
28
29
  }
29
- socket.on("connect", () => {
30
- connectCount++;
31
- onConnectCb?.(connectCount);
30
+ promise = new Promise((resolve) => {
31
+ socket?.on("connect", () => {
32
+ connectCount++;
33
+ onConnectCb?.(connectCount);
34
+ resolve();
35
+ });
32
36
  });
37
+ return result;
33
38
  }
34
- return {
39
+ const result = {
40
+ get promise() { return promise; },
35
41
  facade,
36
42
  setToken,
37
43
  onConnect: (func) => { onConnectCb = func ?? null; },
38
44
  connectCount: () => connectCount,
39
45
  };
46
+ return result;
40
47
  }
package/lib/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export * from "./Common/events/event";
16
16
  export * from "./Common/events/SocketBuffer";
17
17
  export * from "./Common/events/SocketServerHook";
18
18
  export * from "./Common/events/joinListens";
19
+ export * from "./Common/events/UseListenTransform";
19
20
  export * from "./Common/rcp/rpc-index";
20
21
  export * from "./server/fsKeyVolume";
21
22
  export * from "./Common/Color";
package/lib/index.js CHANGED
@@ -55,6 +55,7 @@ __exportStar(require("./Common/events/event"), exports);
55
55
  __exportStar(require("./Common/events/SocketBuffer"), exports);
56
56
  __exportStar(require("./Common/events/SocketServerHook"), exports);
57
57
  __exportStar(require("./Common/events/joinListens"), exports);
58
+ __exportStar(require("./Common/events/UseListenTransform"), exports);
58
59
  __exportStar(require("./Common/rcp/rpc-index"), exports);
59
60
  __exportStar(require("./server/fsKeyVolume"), exports);
60
61
  __exportStar(require("./Common/Color"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wenay-common2",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
4
4
  "description": "Common library",
5
5
  "strict": true,
6
6
  "main": "lib/index.js",