lemon-model 1.1.1 → 1.2.1
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/README.md +79 -0
- package/dist/esm/cores/index.js +11 -0
- package/dist/esm/cores/index.js.map +1 -0
- package/dist/esm/cores/transformer.js +91 -0
- package/dist/esm/cores/transformer.js.map +1 -0
- package/dist/esm/genai/dump-test.js +196 -0
- package/dist/esm/genai/dump-test.js.map +1 -0
- package/dist/esm/genai/index.js +15 -0
- package/dist/esm/genai/index.js.map +1 -0
- package/dist/esm/genai/mocks.js +121 -0
- package/dist/esm/genai/mocks.js.map +1 -0
- package/dist/esm/genai/proxy.js +161 -0
- package/dist/esm/genai/proxy.js.map +1 -0
- package/dist/esm/genai/testing.js +12 -0
- package/dist/esm/genai/testing.js.map +1 -0
- package/dist/esm/genai/transport.js +131 -0
- package/dist/esm/genai/transport.js.map +1 -0
- package/dist/esm/genai/types.js +9 -0
- package/dist/esm/genai/types.js.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/socket/index.js +13 -0
- package/dist/esm/socket/index.js.map +1 -0
- package/dist/esm/socket/socket.js +833 -0
- package/dist/esm/socket/socket.js.map +1 -0
- package/dist/esm/socket/testing.js +12 -0
- package/dist/esm/socket/testing.js.map +1 -0
- package/dist/esm/socket/transport.js +603 -0
- package/dist/esm/socket/transport.js.map +1 -0
- package/dist/esm/socket/types.js +8 -0
- package/dist/esm/socket/types.js.map +1 -0
- package/dist/esm/socket/websocket.js +267 -0
- package/dist/esm/socket/websocket.js.map +1 -0
- package/dist/esm/types/core-storage.js +30 -0
- package/dist/esm/types/core-storage.js.map +1 -0
- package/dist/esm/types/core-types.js +17 -0
- package/dist/esm/types/core-types.js.map +1 -0
- package/dist/esm/types/index.js +13 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/genai/dump-test.d.ts +82 -0
- package/dist/genai/dump-test.js +200 -0
- package/dist/genai/dump-test.js.map +1 -0
- package/dist/genai/index.d.ts +11 -0
- package/dist/genai/index.js +31 -0
- package/dist/genai/index.js.map +1 -0
- package/dist/genai/mocks.d.ts +44 -0
- package/dist/genai/mocks.js +127 -0
- package/dist/genai/mocks.js.map +1 -0
- package/dist/genai/proxy.d.ts +65 -0
- package/dist/genai/proxy.js +165 -0
- package/dist/genai/proxy.js.map +1 -0
- package/dist/genai/testing.d.ts +11 -0
- package/dist/genai/testing.js +28 -0
- package/dist/genai/testing.js.map +1 -0
- package/dist/genai/transport.d.ts +37 -0
- package/dist/genai/transport.js +136 -0
- package/dist/genai/transport.js.map +1 -0
- package/dist/genai/types.d.ts +71 -0
- package/dist/genai/types.js +10 -0
- package/dist/genai/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/proxy/index.d.ts +12 -0
- package/dist/proxy/index.js +29 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/proxy.d.ts +75 -0
- package/dist/proxy/proxy.js +198 -0
- package/dist/proxy/proxy.js.map +1 -0
- package/dist/proxy/transport.d.ts +123 -0
- package/dist/proxy/transport.js +401 -0
- package/dist/proxy/transport.js.map +1 -0
- package/dist/proxy/types.d.ts +89 -0
- package/dist/proxy/types.js +12 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/socket/index.d.ts +9 -0
- package/dist/socket/index.js +29 -0
- package/dist/socket/index.js.map +1 -0
- package/dist/socket/socket.d.ts +191 -0
- package/dist/socket/socket.js +844 -0
- package/dist/socket/socket.js.map +1 -0
- package/dist/socket/testing.d.ts +11 -0
- package/dist/socket/testing.js +28 -0
- package/dist/socket/testing.js.map +1 -0
- package/dist/socket/transport.d.ts +200 -0
- package/dist/socket/transport.js +612 -0
- package/dist/socket/transport.js.map +1 -0
- package/dist/socket/types.d.ts +177 -0
- package/dist/socket/types.js +9 -0
- package/dist/socket/types.js.map +1 -0
- package/dist/socket/websocket.d.ts +89 -0
- package/dist/socket/websocket.js +273 -0
- package/dist/socket/websocket.js.map +1 -0
- package/package.json +26 -2
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
/**
|
|
18
|
+
* `socket/index.ts`
|
|
19
|
+
* - shared socket(network) + json-transport core for F/B usage.
|
|
20
|
+
*
|
|
21
|
+
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
22
|
+
*/
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
24
|
+
__exportStar(require("./transport"), exports);
|
|
25
|
+
__exportStar(require("./websocket"), exports);
|
|
26
|
+
//! NOTE: the in-memory peer simulator (`./socket`) is intentionally NOT re-exported here.
|
|
27
|
+
//! It is a test/dev utility — import it via the isolated `lemon-model/socket/testing` entry
|
|
28
|
+
//! so production (esp. frontend) bundles do not pull in the simulator runtime.
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAE5B,0FAA0F;AAC1F,4FAA4F;AAC5F,+EAA+E"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `socket/socket.ts`
|
|
3
|
+
* - in-memory peer WebSocket simulator.
|
|
4
|
+
*
|
|
5
|
+
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
6
|
+
*/
|
|
7
|
+
import { NetworkMessageHandler, NetworkSupportable, PeerMessageHandler, PeerSupportable, PeerTargetOptions, SocketErrorHandler, SocketLogger, SocketNetworkOptions, SocketMessage, SocketReadyState, SocketUnsubscribe } from './types';
|
|
8
|
+
import { JSONTransportOptions } from './transport';
|
|
9
|
+
/** options for simulated peers */
|
|
10
|
+
export interface PeerOptions extends SocketNetworkOptions {
|
|
11
|
+
/** peer id */
|
|
12
|
+
id?: string;
|
|
13
|
+
/** id generator used by peers, peer links, and auto message ids */
|
|
14
|
+
identityProvider?: PeerIdentityProvider;
|
|
15
|
+
/** network factory used by peer connect/reconnect */
|
|
16
|
+
networkFactory?: PeerNetworkFactory;
|
|
17
|
+
/** structured logger for peer lifecycle and delivery events */
|
|
18
|
+
logger?: SocketLogger;
|
|
19
|
+
/** enable JSON transport chunking for peer message envelopes sent by this peer */
|
|
20
|
+
jsonTransport?: boolean | JSONTransportOptions;
|
|
21
|
+
}
|
|
22
|
+
/** network creation context independent from peer instances. */
|
|
23
|
+
export interface PeerNetworkFactoryContext {
|
|
24
|
+
/** generated network id */
|
|
25
|
+
id: string;
|
|
26
|
+
/** sending peer id */
|
|
27
|
+
fromPeerId: string;
|
|
28
|
+
/** receiving peer id */
|
|
29
|
+
toPeerId: string;
|
|
30
|
+
/** resolved network behavior options */
|
|
31
|
+
options: Required<SocketNetworkOptions>;
|
|
32
|
+
/** logger propagated from the creating peer */
|
|
33
|
+
logger?: SocketLogger;
|
|
34
|
+
}
|
|
35
|
+
/** factory for creating peer link networks. */
|
|
36
|
+
export interface PeerNetworkFactory {
|
|
37
|
+
(context: PeerNetworkFactoryContext): NetworkSupportable;
|
|
38
|
+
}
|
|
39
|
+
/** id generator for deterministic peer tests and custom runtimes. */
|
|
40
|
+
export interface PeerIdentityProvider {
|
|
41
|
+
/** generate peer id */
|
|
42
|
+
nextPeerId(): string;
|
|
43
|
+
/** generate client id assigned by the accepting peer */
|
|
44
|
+
nextClientId(): string;
|
|
45
|
+
/** generate message id for peer.send() */
|
|
46
|
+
nextMessageId(): string;
|
|
47
|
+
/** generate network id; peer ids are provided for link networks */
|
|
48
|
+
nextNetworkId(fromPeerId?: string, toPeerId?: string): string;
|
|
49
|
+
}
|
|
50
|
+
/** options for socket factory */
|
|
51
|
+
export interface SocketFactoryOptions extends PeerOptions {
|
|
52
|
+
/** prefix used when auto-generating peer ids */
|
|
53
|
+
idPrefix?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare const defaultPeerIdentityProvider: PeerIdentityProvider;
|
|
56
|
+
export declare const nextMessageId: () => string;
|
|
57
|
+
export declare const defaultPeerNetworkFactory: PeerNetworkFactory;
|
|
58
|
+
export declare const noopSocketLogger: SocketLogger;
|
|
59
|
+
export interface NetworkOptions extends SocketNetworkOptions {
|
|
60
|
+
id?: string;
|
|
61
|
+
fromPeerId?: string;
|
|
62
|
+
toPeerId?: string;
|
|
63
|
+
logger?: SocketLogger;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* one-shot in-memory network transport.
|
|
67
|
+
* - public transport surface is intentionally limited to send(string) and close().
|
|
68
|
+
*/
|
|
69
|
+
export declare class Network implements NetworkSupportable {
|
|
70
|
+
readonly id: string;
|
|
71
|
+
private state;
|
|
72
|
+
private readonly messageListeners;
|
|
73
|
+
private used;
|
|
74
|
+
private options;
|
|
75
|
+
private deliveryNo;
|
|
76
|
+
private readonly errorListeners;
|
|
77
|
+
private readonly fromPeerId?;
|
|
78
|
+
private readonly toPeerId?;
|
|
79
|
+
private readonly logger;
|
|
80
|
+
constructor(options?: NetworkOptions);
|
|
81
|
+
/** network state */
|
|
82
|
+
get readyState(): SocketReadyState;
|
|
83
|
+
/** wait until this in-memory network is ready */
|
|
84
|
+
ready(): Promise<void>;
|
|
85
|
+
/** attach this network to exactly one receiver */
|
|
86
|
+
attach(receiver: NetworkMessageHandler): void;
|
|
87
|
+
/** send raw string data over the network */
|
|
88
|
+
send(data: string): void;
|
|
89
|
+
/** subscribe to raw string data delivered from the network */
|
|
90
|
+
onMessage(handler: NetworkMessageHandler): SocketUnsubscribe;
|
|
91
|
+
/** update network conditions */
|
|
92
|
+
configure(options: SocketNetworkOptions): void;
|
|
93
|
+
/** observe asynchronous network delivery errors */
|
|
94
|
+
onError(handler: SocketErrorHandler): SocketUnsubscribe;
|
|
95
|
+
/** close this network forever */
|
|
96
|
+
close(): void;
|
|
97
|
+
private ensureOpen;
|
|
98
|
+
private nextDeliveryDelayMs;
|
|
99
|
+
private emitError;
|
|
100
|
+
private log;
|
|
101
|
+
}
|
|
102
|
+
/** create a one-shot network */
|
|
103
|
+
export declare const createNetwork: (options?: NetworkOptions) => Network;
|
|
104
|
+
/**
|
|
105
|
+
* in-memory peer that can act as a server, a client, or both.
|
|
106
|
+
*/
|
|
107
|
+
export declare class Peer<SendData = any, MessageData = any> implements PeerSupportable<SendData, MessageData> {
|
|
108
|
+
readonly id: string;
|
|
109
|
+
private assignedClientId?;
|
|
110
|
+
private state;
|
|
111
|
+
private server?;
|
|
112
|
+
private readonly clients;
|
|
113
|
+
private readonly listeners;
|
|
114
|
+
private readonly errorListeners;
|
|
115
|
+
private readonly pending;
|
|
116
|
+
private networkOptions;
|
|
117
|
+
private identityProvider;
|
|
118
|
+
private networkFactory;
|
|
119
|
+
private logger;
|
|
120
|
+
private jsonTransportOptions?;
|
|
121
|
+
constructor(options?: PeerOptions);
|
|
122
|
+
/** assigned client id when this peer is connected to another peer */
|
|
123
|
+
get clientId(): string | undefined;
|
|
124
|
+
/** endpoint state */
|
|
125
|
+
get readyState(): SocketReadyState;
|
|
126
|
+
/** upstream network when this peer is connected as a client */
|
|
127
|
+
get network(): NetworkSupportable | undefined;
|
|
128
|
+
/** wait until this peer's upstream network is ready */
|
|
129
|
+
ready(): Promise<void>;
|
|
130
|
+
/** update network conditions for this peer and connected networks */
|
|
131
|
+
configureNetwork(options: SocketNetworkOptions): void;
|
|
132
|
+
/** connect this peer as a client to a server peer */
|
|
133
|
+
connect(peer: PeerSupportable<MessageData, SendData>): string;
|
|
134
|
+
/** replace connected network instances while keeping the peer relationship */
|
|
135
|
+
reconnect(options?: PeerTargetOptions): string;
|
|
136
|
+
/** find a client peer connected to this peer by client id */
|
|
137
|
+
findPeer<T extends PeerSupportable<any, any> = PeerSupportable<any, any>>(clientId: string): T | undefined;
|
|
138
|
+
/** post a typed message without waiting for a result */
|
|
139
|
+
post(message: SocketMessage<SendData>, options?: PeerTargetOptions): void;
|
|
140
|
+
/** send a typed message and wait for a result message with the same mid */
|
|
141
|
+
send<R = any>(message: Omit<SocketMessage<SendData>, 'mid'> & {
|
|
142
|
+
mid?: string;
|
|
143
|
+
}, options?: PeerTargetOptions): Promise<R>;
|
|
144
|
+
/** subscribe to incoming messages */
|
|
145
|
+
onMessage<T = MessageData, R = any>(handler: PeerMessageHandler<T, R>): SocketUnsubscribe;
|
|
146
|
+
/** observe fire-and-forget transport errors */
|
|
147
|
+
onError(handler: SocketErrorHandler): SocketUnsubscribe;
|
|
148
|
+
/** close this peer */
|
|
149
|
+
close(): void;
|
|
150
|
+
private accept;
|
|
151
|
+
private attachClientReceiverTransport;
|
|
152
|
+
private detachClient;
|
|
153
|
+
private closeLink;
|
|
154
|
+
private static reconnectPair;
|
|
155
|
+
private static attachReceiver;
|
|
156
|
+
private createPeerNetwork;
|
|
157
|
+
private static createNetworkPair;
|
|
158
|
+
private publish;
|
|
159
|
+
private resolveTarget;
|
|
160
|
+
private receiveNetworkData;
|
|
161
|
+
private dispatch;
|
|
162
|
+
private reply;
|
|
163
|
+
private sendToLink;
|
|
164
|
+
private findLinkTo;
|
|
165
|
+
private rejectPending;
|
|
166
|
+
private emitError;
|
|
167
|
+
private ensureOpen;
|
|
168
|
+
private log;
|
|
169
|
+
}
|
|
170
|
+
/** create a peer */
|
|
171
|
+
export declare const createPeer: <SendData = any, MessageData = any>(options?: PeerOptions) => Peer<SendData, MessageData>;
|
|
172
|
+
/**
|
|
173
|
+
* factory for creating peers and keeping a small registry for tests.
|
|
174
|
+
*/
|
|
175
|
+
export declare class SocketFactory {
|
|
176
|
+
private readonly options?;
|
|
177
|
+
private no;
|
|
178
|
+
private readonly peers;
|
|
179
|
+
constructor(options?: SocketFactoryOptions);
|
|
180
|
+
/** create and register a peer */
|
|
181
|
+
peer<SendData = any, MessageData = any>(options?: PeerOptions): Peer<SendData, MessageData>;
|
|
182
|
+
/** find a registered peer by peer id */
|
|
183
|
+
find<T extends PeerSupportable<any, any> = PeerSupportable<any, any>>(id: string): T | undefined;
|
|
184
|
+
/** connect client to server and return the assigned client id */
|
|
185
|
+
connect(client: PeerSupportable<any, any>, server: PeerSupportable<any, any>): string;
|
|
186
|
+
/** find a client peer connected to a server peer by client id */
|
|
187
|
+
findPeer<T extends PeerSupportable<any, any> = PeerSupportable<any, any>>(server: PeerSupportable<any, any>, clientId: string): T | undefined;
|
|
188
|
+
private nextFactoryPeerId;
|
|
189
|
+
}
|
|
190
|
+
/** create a socket factory */
|
|
191
|
+
export declare const createSocketFactory: (options?: SocketFactoryOptions) => SocketFactory;
|