lowlander 0.2.2 → 0.2.4

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 CHANGED
@@ -129,6 +129,24 @@ export function streamPerson(name: string) {
129
129
 
130
130
  On the client, this returns a reactive Aberdeen proxy that updates live when server data changes.
131
131
 
132
+ ```ts
133
+ // Client-side
134
+ const person = api.streamPerson('Alice');
135
+ // person.value starts as undefined while loading, and
136
+ // then becomes a live-updating reactive proxy object of Alice's data
137
+ A.dump(person);
138
+ ```
139
+
140
+ Lowlander will keep `person.value` up-to-date as long as the Aberdeen scope containing `api.streamPerson` remains active. When the scope is destroyed, the stream subscription is automatically cancelled.
141
+
142
+ It's quite common for the same RPC call to be used to get the same stream multiple times in a short period; when navigating back and forth, or when navigating to a new page that requires some of the same data as the previous page. To optimize for this, `createStreamType` accepts an optional `cache` parameter (in seconds).
143
+
144
+ ```ts
145
+ const PersonStream = createStreamType(Person, fields, { cache: 30 }); // cache for 30s after going out of scope
146
+ ```
147
+
148
+ After a stream with caching goes out of scope, the server keeps it alive for that many seconds, so that if the same stream is requested again with the same parameters, it can be reused instantly without re-sending initial data or re-subscribing to updates. Cached stream rpcs also deduplicate within that time window, so if the same stream is requested multiple times while it's still active or cached, only one stream is created on the server and shared among all requests.
149
+
132
150
  ### ServerProxy for Stateful APIs
133
151
 
134
152
  Wrap a class instance to expose per-connection stateful methods:
@@ -280,14 +298,14 @@ Set `EDINBURGH_LOG_LEVEL` similarly for Edinburgh internals.
280
298
 
281
299
  The following is auto-generated from `server/server.ts`:
282
300
 
283
- ### createStreamType · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L162)
301
+ ### createStreamType · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L165)
284
302
 
285
303
  Creates a stream type for reactive model streaming to clients with automatic updates.
286
304
 
287
305
  Specify which fields to include; when they change, updates are pushed to subscribed clients.
288
306
  Supports nested linked models and type-safe field selection.
289
307
 
290
- **Signature:** `<T, S extends FieldSelection<T>>(Model: typeof E.Model<unknown> & (new (...args: any[]) => T), selection: S & ValidateSelection<T, S>) => typeof StreamType`
308
+ **Signature:** `<T, S extends FieldSelection<T>>(Model: typeof E.Model<unknown> & (new (...args: any[]) => T), selection: S & ValidateSelection<T, S>, options?: { cache?: number; }) => typeof StreamType`
291
309
 
292
310
  **Type Parameters:**
293
311
 
@@ -298,14 +316,35 @@ Supports nested linked models and type-safe field selection.
298
316
 
299
317
  - `Model: ModelClass & (new (...args: any[]) => T)` - - The Edinburgh model class
300
318
  - `selection: S & ValidateSelection<T, S>` - - Field selection: `true` for simple fields, nested object for linked models
319
+ - `options?: { cache?: number }` - - Optional settings
301
320
 
302
321
  **Returns:** Stream type class to instantiate in API functions
303
322
 
304
323
  **Examples:**
305
324
 
306
325
  ```ts
326
+ ⁣@E.registerModel
327
+ class Person extends Model {
328
+ name = field(string);
329
+ age = field(number);
330
+ password = field(string);
331
+ friends = field(array(link(Person)));
332
+ }
307
333
 
308
- ### sendModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L262)
334
+ // Exclude password, include friends' names; cache 30s
335
+ const PersonStream = createStreamType(Person, {
336
+ name: true,
337
+ age: true,
338
+ friends: { name: true }
339
+ }, { cache: 30 });
340
+
341
+ export function streamPerson() {
342
+ const person = Person.byName.get('Alice')!;
343
+ return new PersonStream(person);
344
+ }
345
+ ```
346
+
347
+ ### sendModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L267)
309
348
 
310
349
  Sends (updated) data for `model` to `target`.
311
350
  `target` is a virtual socket with a requestId+'d' user prefix, or a channel that subscribes such virtual sockets.
@@ -320,7 +359,7 @@ Sends (updated) data for `model` to `target`.
320
359
  - `StreamType: typeof StreamTypeBase<any>`
321
360
  - `changed?: E.Change`
322
361
 
323
- ### pushModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L318)
362
+ ### pushModel · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L323)
324
363
 
325
364
  Subscribes `target` to this model, and sends initial data.
326
365
  `target` is a virtual socket with a requestId+'d' user prefix, or a channel that subscribes such virtual sockets.
@@ -335,11 +374,11 @@ Subscribes `target` to this model, and sends initial data.
335
374
  - `SubStreamType: typeof StreamTypeBase<any>`
336
375
  - `delta: number`
337
376
 
338
- ### start · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L428)
377
+ ### start · [function](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L433)
339
378
 
340
379
  Starts the Lowlander WebSocket server.
341
380
 
342
- **Signature:** `(mainApiFile: string, opts?: { bind?: string; threads?: number; injectWarpSocket?: typeof import("/var/home/frank/projects/lowlander/node_modules/warpsocket/dist/src/index", { with: { "resolution-mode": "import" } }); }) => Promise<void>`
381
+ **Signature:** `(mainApiFile: string, opts?: { bind?: string; threads?: number; injectWarpSocket?: typeof import("/var/home/frank/projects/warpsocket/dist/src/index", { with: { "resolution-mode": "import" } }); }) => Promise<void>`
343
382
 
344
383
  **Parameters:**
345
384
 
@@ -363,7 +402,7 @@ start(API_FILE, { bind: '0.0.0.0:8080' });
363
402
 
364
403
  ### warpsocket · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L13)
365
404
 
366
- **Type:** `typeof import("/var/home/frank/projects/lowlander/node_modules/warpsocket/dist/src/index", { with: { "resolution-mode": "import" } })`
405
+ **Type:** `typeof import("/var/home/frank/projects/warpsocket/dist/src/index", { with: { "resolution-mode": "import" } })`
367
406
 
368
407
  ### StreamTypeBase · [abstract class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L34)
369
408
 
@@ -381,14 +420,15 @@ start(API_FILE, { bind: '0.0.0.0:8080' });
381
420
 
382
421
  **Type:** `number`
383
422
 
384
- #### streamTypeBase.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L42)
423
+ #### StreamTypeBase.cache · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L40)
385
424
 
386
- **Signature:** `() => string`
425
+ **Type:** `number`
387
426
 
388
- **Parameters:**
427
+ #### streamTypeBase.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L43)
389
428
 
429
+ **Signature:** `() => string`
390
430
 
391
- ### ServerProxy · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L349)
431
+ ### ServerProxy · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L354)
392
432
 
393
433
  Wraps a server-side API object to create a stateful, type-safe proxy accessible from clients.
394
434
  Use for authentication, sessions, or any stateful context that persists across RPC calls.
@@ -419,14 +459,11 @@ export async function authenticate(token: string) {
419
459
  - `api`: - Server-side API object exposed to the client
420
460
  - `value`: - Value returned immediately to the client
421
461
 
422
- #### serverProxy.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L355)
462
+ #### serverProxy.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L360)
423
463
 
424
464
  **Signature:** `() => string`
425
465
 
426
- **Parameters:**
427
-
428
-
429
- ### Socket · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L379)
466
+ ### Socket · [class](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L384)
430
467
 
431
468
  Server-side socket for pushing data to a client. Server functions with `Socket<T>` parameters
432
469
  receive client callbacks on the client side.
@@ -449,7 +486,7 @@ export function streamNumbers(socket: Socket<number>) {
449
486
  api.streamNumbers(num => console.log(num));
450
487
  ```
451
488
 
452
- #### socket.send · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L388)
489
+ #### socket.send · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L393)
453
490
 
454
491
  Sends data to the client.
455
492
 
@@ -461,7 +498,7 @@ Sends data to the client.
461
498
 
462
499
  **Returns:** `true` if sent, `false` if socket is closed
463
500
 
464
- #### socket.subscribe · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L394)
501
+ #### socket.subscribe · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L399)
465
502
 
466
503
  **Signature:** `(channel: Uint8Array<ArrayBufferLike>, delta?: number) => void`
467
504
 
@@ -470,31 +507,29 @@ Sends data to the client.
470
507
  - `channel: Uint8Array`
471
508
  - `delta: any` (optional)
472
509
 
473
- #### socket.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L401)
510
+ #### socket.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L406)
474
511
 
475
512
  **Signature:** `() => string`
476
513
 
477
- **Parameters:**
478
-
479
-
480
- #### socket.[Symbol.for('nodejs.util.inspect.custom')] · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L405)
514
+ #### socket.[Symbol.for('nodejs.util.inspect.custom')] · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L410)
481
515
 
482
516
  **Signature:** `() => string`
483
517
 
484
- **Parameters:**
485
-
486
-
487
518
  ## Client API Reference
488
519
 
489
520
  The following is auto-generated from `client/client.ts`:
490
521
 
491
- ### logLevel · [variable](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L8)
522
+ ### setLogLevel · [function](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L10)
492
523
 
493
- Set to 1-3 for increasing verbosity.
524
+ Set to 0-3 for increasing verbosity.
494
525
 
495
- **Value:** `number`
526
+ **Signature:** `(level: number) => void`
496
527
 
497
- ### ClientProxyObject · [type](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L157)
528
+ **Parameters:**
529
+
530
+ - `level: number`
531
+
532
+ ### ClientProxyObject · [type](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L161)
498
533
 
499
534
  Transforms server-side API objects to client-side proxy objects with type-safe RPC methods.
500
535
 
@@ -502,7 +537,7 @@ Transforms server-side API objects to client-side proxy objects with type-safe R
502
537
  [K in keyof T]: ClientProxyFunction<T[K]>
503
538
  }`
504
539
 
505
- ### Connection · [class](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L190)
540
+ ### Connection · [class](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L194)
506
541
 
507
542
  WebSocket connection to a Lowlander server with type-safe RPC, automatic reconnection,
508
543
  and reactive updates.
@@ -538,27 +573,31 @@ $(() => {
538
573
 
539
574
  - `url`: - WebSocket URL (e.g., 'ws://localhost:8080/'), or a fake WebSocket object for testing
540
575
 
541
- #### connection.ws · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L192)
576
+ #### connection.ws · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L196)
542
577
 
543
578
  **Type:** `WebSocket`
544
579
 
545
- #### connection.activeRequests · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L193)
580
+ #### connection.activeRequests · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L197)
546
581
 
547
582
  **Type:** `Map<number, ActiveRequest>`
548
583
 
549
- #### connection.requestCounter · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L194)
584
+ #### connection.requestCounter · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L198)
550
585
 
551
586
  **Type:** `number`
552
587
 
553
- #### connection.reconnectAttempts · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L195)
588
+ #### connection.reconnectAttempts · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L199)
554
589
 
555
590
  **Type:** `number`
556
591
 
557
- #### connection.onlineProxy · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L198)
592
+ #### connection.onlineProxy · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L202)
558
593
 
559
594
  **Type:** `ValueRef<boolean>`
560
595
 
561
- #### connection.api · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L205)
596
+ #### connection.streamCache · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L203)
597
+
598
+ **Type:** `Map<string, StreamCacheEntry>`
599
+
600
+ #### connection.api · [property](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L210)
562
601
 
563
602
  Type-safe proxy to the server-side API. Methods return `PromiseProxy` objects
564
603
  that work reactively in Aberdeen scopes. `ServerProxy` returns include a
@@ -566,35 +605,42 @@ that work reactively in Aberdeen scopes. `ServerProxy` returns include a
566
605
 
567
606
  **Type:** `ClientProxyObject<T>`
568
607
 
569
- #### connection.isOnline · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L218)
608
+ #### connection.isOnline · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L223)
570
609
 
571
610
  Returns the current connection status. Reactive in Aberdeen scopes.
572
611
 
573
612
  **Signature:** `() => boolean`
574
613
 
575
- **Parameters:**
614
+ #### connection.connect · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L225)
576
615
 
616
+ **Signature:** `() => void`
577
617
 
578
- #### connection.connect · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L220)
618
+ #### connection.reconnect · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L385)
579
619
 
580
620
  **Signature:** `() => void`
581
621
 
622
+ #### connection.pruneCommitIds · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L399)
623
+
624
+ **Signature:** `(request: ActiveRequest, maxCommitId: number) => void`
625
+
582
626
  **Parameters:**
583
627
 
628
+ - `request: ActiveRequest`
629
+ - `maxCommitId: number`
584
630
 
585
- #### connection.reconnect · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L374)
631
+ #### connection.cancelRequest · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L489)
586
632
 
587
- **Signature:** `() => void`
633
+ **Signature:** `(request: ActiveRequest) => void`
588
634
 
589
635
  **Parameters:**
590
636
 
637
+ - `request: ActiveRequest`
591
638
 
592
- #### connection.pruneCommitIds · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L388)
639
+ #### connection.startLinger · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L503)
593
640
 
594
- **Signature:** `(request: ActiveRequest, maxCommitId: number) => void`
641
+ **Signature:** `(cached: StreamCacheEntry) => void`
595
642
 
596
643
  **Parameters:**
597
644
 
598
- - `request: ActiveRequest`
599
- - `maxCommitId: number`
645
+ - `cached: StreamCacheEntry`
600
646
 
@@ -1,7 +1,7 @@
1
1
  import type { Socket, ServerProxy, StreamTypeBase } from '../server/server.js';
2
2
  import type { PromiseProxy } from 'aberdeen';
3
- /** Set to 1-3 for increasing verbosity. */
4
- export declare let logLevel: number;
3
+ /** Set to 0-3 for increasing verbosity. */
4
+ export declare function setLogLevel(level: number): void;
5
5
  /**
6
6
  * Transforms server-side `Socket<T>` arguments to client-side callback functions `(data: T) => void`.
7
7
  *
@@ -126,6 +126,7 @@ export declare class Connection<T> {
126
126
  /** @internal */
127
127
  _proxyCounter: number;
128
128
  private onlineProxy;
129
+ private streamCache;
129
130
  /**
130
131
  * Type-safe proxy to the server-side API. Methods return `PromiseProxy` objects
131
132
  * that work reactively in Aberdeen scopes. `ServerProxy` returns include a
@@ -144,10 +145,8 @@ export declare class Connection<T> {
144
145
  private reconnect;
145
146
  private pruneCommitIds;
146
147
  /** @internal */
147
- _createMethodStub(methodName: string, proxyId?: number): (...params: any[]) => PromiseProxy<any> & {
148
- promise: Promise<any>;
149
- } & {
150
- serverProxy: any;
151
- };
148
+ _createMethodStub(methodName: string, proxyId?: number): (...params: any[]) => PromiseProxy<any>;
149
+ private cancelRequest;
150
+ private startLinger;
152
151
  }
153
152
  export {};
@@ -1,8 +1,11 @@
1
1
  import A from 'aberdeen';
2
2
  import DataPack from 'edinburgh/datapack';
3
3
  import { SERVER_MESSAGES, CLIENT_MESSAGES } from '../server/protocol.js';
4
- /** Set to 1-3 for increasing verbosity. */
5
- export let logLevel = 0;
4
+ let logLevel = 0;
5
+ /** Set to 0-3 for increasing verbosity. */
6
+ export function setLogLevel(level) {
7
+ logLevel = level;
8
+ }
6
9
  // Sentinel key in commitIds entries: on initial creation, only DEFAULT_COMMIT is set
7
10
  // (applies to all keys). Per-key entries are added on subsequent updates and take
8
11
  // precedence. On deletion, DEFAULT_COMMIT guards against stale re-creates.
@@ -44,6 +47,7 @@ export class Connection {
44
47
  /** @internal */
45
48
  _proxyCounter = 0;
46
49
  onlineProxy = A.proxy(false);
50
+ streamCache = new Map();
47
51
  /**
48
52
  * Type-safe proxy to the server-side API. Methods return `PromiseProxy` objects
49
53
  * that work reactively in Aberdeen scopes. `ServerProxy` returns include a
@@ -187,15 +191,21 @@ export class Connection {
187
191
  else if (type === SERVER_MESSAGES.response_model) {
188
192
  request.virtualSocketIds = pack.read(); // There must be at least one, for the model stream
189
193
  const dbKey = pack.readNumber();
194
+ const cacheMs = pack.read();
190
195
  const obj = request.database?.get(dbKey);
191
196
  if (logLevel >= 2)
192
- console.log(`[lowlander] incoming response_model requestId=${requestId} dbKey=${dbKey} obj=${obj}`);
197
+ console.log(`[lowlander] incoming response_model requestId=${requestId} dbKey=${dbKey} cacheMs=${cacheMs} obj=${obj}`);
193
198
  if (obj) {
194
199
  request.resultProxy.value = A.proxy(obj);
195
200
  }
196
201
  else {
197
202
  request.resultProxy.error = new Error('Unknown database key ' + dbKey);
198
203
  }
204
+ if (cacheMs !== undefined && request.cacheKey && !this.streamCache.has(request.cacheKey)) {
205
+ this.streamCache.set(request.cacheKey, {
206
+ request, cacheKey: request.cacheKey, cacheMs, refCount: 1,
207
+ });
208
+ }
199
209
  }
200
210
  else {
201
211
  throw new Error('Unknown message type ' + type);
@@ -249,6 +259,30 @@ export class Connection {
249
259
  /** @internal */
250
260
  _createMethodStub(methodName, proxyId) {
251
261
  return (...params) => {
262
+ // Compute cache key (only when no callback params — callbacks aren't idempotent)
263
+ const hasCallbacks = params.some(p => typeof p === 'function');
264
+ const cacheKey = hasCallbacks ? undefined : (proxyId ?? '') + ':' + methodName + ':' + JSON.stringify(params);
265
+ // Check stream cache for reuse
266
+ if (cacheKey) {
267
+ const cached = this.streamCache.get(cacheKey);
268
+ if (cached) {
269
+ if (cached.lingerTimeout) {
270
+ clearTimeout(cached.lingerTimeout);
271
+ cached.lingerTimeout = undefined;
272
+ }
273
+ cached.refCount++;
274
+ if (logLevel >= 2)
275
+ console.log(`[lowlander] reusing cached stream cacheKey=${cacheKey} refCount=${cached.refCount}`);
276
+ A.clean(() => {
277
+ cached.refCount--;
278
+ if (logLevel >= 2)
279
+ console.log(`[lowlander] clean cached consumer cacheKey=${cacheKey} refCount=${cached.refCount}`);
280
+ if (cached.refCount <= 0)
281
+ this.startLinger(cached);
282
+ });
283
+ return cached.request.resultProxy;
284
+ }
285
+ }
252
286
  const result = { busy: true };
253
287
  const resultProxy = A.proxy(result);
254
288
  const requestId = ++this.requestCounter;
@@ -267,7 +301,7 @@ export class Connection {
267
301
  }
268
302
  }
269
303
  });
270
- const request = { resultProxy, requestBuffer: pack.toUint8Array(true), requestId, connection: this, callbacks };
304
+ const request = { resultProxy, requestBuffer: pack.toUint8Array(true), requestId, connection: this, callbacks, cacheKey };
271
305
  result.serverProxy = new Proxy(request, proxyHandlers);
272
306
  result.promise = new Promise((resolve, reject) => {
273
307
  request.resolve = resolve;
@@ -280,17 +314,43 @@ export class Connection {
280
314
  this.ws.send(request.requestBuffer);
281
315
  }
282
316
  A.clean(() => {
283
- this.activeRequests.delete(requestId);
284
- if (request.virtualSocketIds?.length || request.hasServerProxy) {
317
+ const cached = cacheKey ? this.streamCache.get(cacheKey) : undefined;
318
+ if (cached && cached.request === request) {
319
+ cached.refCount--;
285
320
  if (logLevel >= 2)
286
- console.log(`[lowlander] outgoing cancel requestId=${request.requestId} virtualSocketIds=${request.virtualSocketIds} hasServerProxy=${request.hasServerProxy}`);
287
- const data = DataPack.createUint8Array(++this.requestCounter, CLIENT_MESSAGES.cancel, request.requestId, request.virtualSocketIds);
288
- this.ws?.send(data);
321
+ console.log(`[lowlander] clean stream owner cacheKey=${cacheKey} refCount=${cached.refCount}`);
322
+ if (cached.refCount <= 0)
323
+ this.startLinger(cached);
324
+ return;
289
325
  }
326
+ this.cancelRequest(request);
290
327
  });
291
328
  return resultProxy;
292
329
  };
293
330
  }
331
+ cancelRequest(request) {
332
+ this.activeRequests.delete(request.requestId);
333
+ if (request.virtualSocketIds?.length || request.hasServerProxy) {
334
+ if (logLevel >= 2)
335
+ console.log(`[lowlander] outgoing cancel requestId=${request.requestId} virtualSocketIds=${request.virtualSocketIds} hasServerProxy=${request.hasServerProxy}`);
336
+ const data = DataPack.createUint8Array(++this.requestCounter, CLIENT_MESSAGES.cancel, request.requestId, request.virtualSocketIds);
337
+ this.ws?.send(data);
338
+ }
339
+ }
340
+ startLinger(cached) {
341
+ if (cached.lingerTimeout)
342
+ clearTimeout(cached.lingerTimeout);
343
+ if (logLevel >= 2)
344
+ console.log(`[lowlander] start linger cacheKey=${cached.cacheKey} cacheMs=${cached.cacheMs}`);
345
+ cached.lingerTimeout = setTimeout(() => {
346
+ if (cached.refCount > 0)
347
+ return;
348
+ if (logLevel >= 2)
349
+ console.log(`[lowlander] linger expired cacheKey=${cached.cacheKey}`);
350
+ this.streamCache.delete(cached.cacheKey);
351
+ this.cancelRequest(cached.request);
352
+ }, cached.cacheMs);
353
+ }
294
354
  }
295
355
  const proxyHandlers = {
296
356
  get(target, prop) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../client/client.ts"],"names":[],"mappings":"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"}
@@ -30,11 +30,24 @@ export declare function streamModel(): {
30
30
  }[];
31
31
  };
32
32
  createdAt: Date;
33
+ meta: Record<string | number, number>;
34
+ };
35
+ toString(): string;
36
+ };
37
+ export declare function streamModelCached(): {
38
+ _instance: E.Model<any> & {
39
+ name: string;
40
+ owner: {
41
+ name: string;
42
+ };
33
43
  };
34
44
  toString(): string;
35
45
  };
36
46
  export declare function incrOwnerAge(delta: number): Promise<void>;
37
47
  export declare function setOwnerAge(age: number): void;
48
+ export declare function setModelName(name: string): void;
49
+ export declare function setMeta(key: string, value: number): void;
50
+ export declare function deleteMeta(key: string): void;
38
51
  export declare function streamSomething(socket: Socket<number>): void;
39
52
  export {};
40
53
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../examples/helloworld/server/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAoB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGzE,eAAO,MAAM,aAAa,wDAA2B,CAAC;AAGtD,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAGD,qBAAa,OAAO;IACG,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;IAEnC,IAAI,IAAI,IAAI,MAAM,CAIjB;IAED,MAAM;IAIN,YAAY,CAAC,UAAU,EAAE,MAAM;CAmBlC;AAGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,yCAM9C;AAID,cACM,MAAO,SAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,MAAM,CAAC,MAAM,0CAA6B;IAC1C,IAAI,SAAqB;IACzB,GAAG,SAAqB;IACxB,OAAO,WAAoC;IAC3C,QAAQ,SAAqB;CAChC;AAeD,wBAAsB,aAAa,CAAC,gBAAgB,EAAE,OAAO,iBAiB5D;AA2BD,wBAAgB,WAAW;;;;;;;;;;;;;;EAG1B;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,iBAK/C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,QAGtC;AAKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QASrD"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../examples/helloworld/server/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAoB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGzE,eAAO,MAAM,aAAa,wDAA2B,CAAC;AAGtD,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAGD,qBAAa,OAAO;IACG,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;IAEnC,IAAI,IAAI,IAAI,MAAM,CAIjB;IAED,MAAM;IAIN,YAAY,CAAC,UAAU,EAAE,MAAM;CAmBlC;AAGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,yCAM9C;AAID,cACM,MAAO,SAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,MAAM,CAAC,MAAM,0CAA6B;IAC1C,IAAI,SAAqB;IACzB,GAAG,SAAqB;IACxB,OAAO,WAAoC;IAC3C,QAAQ,SAAqB;CAChC;AAgBD,wBAAsB,aAAa,CAAC,gBAAgB,EAAE,OAAO,iBAiB5D;AAiCD,wBAAgB,WAAW;;;;;;;;;;;;;;;EAG1B;AAED,wBAAgB,iBAAiB;;;;;;;;EAGhC;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,iBAK/C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,QAGtC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,QAGxC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAGjD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,QAKrC;AAKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QASrD"}
@@ -70,6 +70,7 @@ let MyModel = class MyModel extends E.Model {
70
70
  next = E.field(E.opt(E.link(MyModel_1)));
71
71
  owner = E.field(E.link(Person));
72
72
  createdAt = E.field(E.dateTime);
73
+ meta = E.field(E.record(E.number));
73
74
  static byId = E.primary(MyModel_1, 'id');
74
75
  static byName = E.unique(MyModel_1, 'name');
75
76
  };
@@ -90,12 +91,13 @@ export async function resetTestData(deleteEverything) {
90
91
  let p3 = Person.byName.get('Bob') || new Person({ name: 'Bob', age: 65, password: 'himom', friends: [p1, p2] });
91
92
  if (p1.getState() === "created")
92
93
  p1.friends = [p2, p3];
93
- let m1 = MyModel.byName.get('Test') || new MyModel({ name: 'Test', owner: p1 });
94
- let m2 = MyModel.byName.get('Another') || new MyModel({ name: 'Another', owner: p2, next: m1 });
94
+ let m1 = MyModel.byName.get('Test') || new MyModel({ name: 'Test', owner: p1, meta: { score: 42, level: 7 } });
95
+ let m2 = MyModel.byName.get('Another') || new MyModel({ name: 'Another', owner: p2, next: m1, meta: {} });
95
96
  ids = { p1: p1.name, p2: p2.name, m1: m1.id, m2: m2.id };
96
97
  });
97
98
  }
98
99
  resetTestData(false);
100
+ ``;
99
101
  await E.transact(() => {
100
102
  E.dump();
101
103
  for (const p of Person.findAll()) {
@@ -107,6 +109,7 @@ await E.transact(() => {
107
109
  const MyStream = createStreamType(MyModel, {
108
110
  name: true,
109
111
  createdAt: true,
112
+ meta: true,
110
113
  owner: {
111
114
  name: true,
112
115
  age: true,
@@ -116,11 +119,19 @@ const MyStream = createStreamType(MyModel, {
116
119
  }
117
120
  }
118
121
  });
122
+ const CachedStream = createStreamType(MyModel, {
123
+ name: true,
124
+ owner: { name: true },
125
+ }, { cache: 60 });
119
126
  // Example of model streaming - returns a reactive proxy that auto-updates on changes
120
127
  export function streamModel() {
121
128
  const m1 = MyModel.byId.get(ids.m1);
122
129
  return new MyStream(m1);
123
130
  }
131
+ export function streamModelCached() {
132
+ const m1 = MyModel.byId.get(ids.m1);
133
+ return new CachedStream(m1);
134
+ }
124
135
  export async function incrOwnerAge(delta) {
125
136
  const m1 = MyModel.byId.get(ids.m1);
126
137
  const current = m1.owner.age;
@@ -131,6 +142,20 @@ export function setOwnerAge(age) {
131
142
  const m1 = MyModel.byId.get(ids.m1);
132
143
  m1.owner.age = age;
133
144
  }
145
+ export function setModelName(name) {
146
+ const m1 = MyModel.byId.get(ids.m1);
147
+ m1.name = name;
148
+ }
149
+ export function setMeta(key, value) {
150
+ const m1 = MyModel.byId.get(ids.m1);
151
+ m1.meta = { ...m1.meta, [key]: value };
152
+ }
153
+ export function deleteMeta(key) {
154
+ const m1 = MyModel.byId.get(ids.m1);
155
+ const copy = { ...m1.meta };
156
+ delete copy[key];
157
+ m1.meta = copy;
158
+ }
134
159
  // Example of server-push streaming via Socket callback
135
160
  // Client provides a callback; server pushes data by calling socket.send()
136
161
  export function streamSomething(socket) {