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 +92 -46
- package/build/client/client.d.ts +6 -7
- package/build/client/client.js +69 -9
- package/build/client/client.js.map +1 -1
- package/build/examples/helloworld/server/api.d.ts +13 -0
- package/build/examples/helloworld/server/api.d.ts.map +1 -1
- package/build/examples/helloworld/server/api.js +27 -2
- package/build/examples/helloworld/server/api.js.map +1 -1
- package/build/server/protocol.js +1 -1
- package/build/server/protocol.js.map +1 -1
- package/build/server/server.d.ts +10 -4
- package/build/server/server.d.ts.map +1 -1
- package/build/server/server.js +8 -4
- package/build/server/server.js.map +1 -1
- package/build/server/wshandler.d.ts.map +1 -1
- package/build/server/wshandler.js +2 -1
- package/build/server/wshandler.js.map +1 -1
- package/build/tsconfig.client.tsbuildinfo +1 -1
- package/build/tsconfig.server.tsbuildinfo +1 -1
- package/client/client.ts +84 -16
- package/package.json +5 -4
- package/server/protocol.ts +1 -1
- package/server/server.ts +9 -4
- package/server/wshandler.ts +2 -1
- package/skill/Connection.md +35 -0
- package/skill/Connection_pruneCommitIds.md +8 -0
- package/skill/SKILL.md +53 -186
- package/skill/ServerProxy.md +30 -0
- package/skill/Socket.md +22 -0
- package/skill/Socket_send.md +11 -0
- package/skill/Socket_subscribe.md +8 -0
- package/skill/createStreamType.md +45 -0
- package/skill/pushModel.md +14 -0
- package/skill/sendModel.md +14 -0
- package/skill/start.md +21 -0
- package/skill/warpsocket.md +3 -0
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#
|
|
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
|
|
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
|
-
|
|
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#
|
|
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#
|
|
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/
|
|
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/
|
|
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
|
-
####
|
|
423
|
+
#### StreamTypeBase.cache · [static property](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L40)
|
|
385
424
|
|
|
386
|
-
**
|
|
425
|
+
**Type:** `number`
|
|
387
426
|
|
|
388
|
-
|
|
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#
|
|
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#
|
|
462
|
+
#### serverProxy.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L360)
|
|
423
463
|
|
|
424
464
|
**Signature:** `() => string`
|
|
425
465
|
|
|
426
|
-
|
|
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#
|
|
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#
|
|
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#
|
|
510
|
+
#### socket.toString · [method](https://github.com/vanviegen/lowlander/blob/main/server/server.ts#L406)
|
|
474
511
|
|
|
475
512
|
**Signature:** `() => string`
|
|
476
513
|
|
|
477
|
-
|
|
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
|
-
###
|
|
522
|
+
### setLogLevel · [function](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L10)
|
|
492
523
|
|
|
493
|
-
Set to
|
|
524
|
+
Set to 0-3 for increasing verbosity.
|
|
494
525
|
|
|
495
|
-
**
|
|
526
|
+
**Signature:** `(level: number) => void`
|
|
496
527
|
|
|
497
|
-
|
|
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#
|
|
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#
|
|
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#
|
|
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#
|
|
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#
|
|
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#
|
|
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.
|
|
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#
|
|
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
|
-
|
|
614
|
+
#### connection.connect · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L225)
|
|
576
615
|
|
|
616
|
+
**Signature:** `() => void`
|
|
577
617
|
|
|
578
|
-
#### connection.
|
|
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.
|
|
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.
|
|
639
|
+
#### connection.startLinger · [method](https://github.com/vanviegen/lowlander/blob/main/client/client.ts#L503)
|
|
593
640
|
|
|
594
|
-
**Signature:** `(
|
|
641
|
+
**Signature:** `(cached: StreamCacheEntry) => void`
|
|
595
642
|
|
|
596
643
|
**Parameters:**
|
|
597
644
|
|
|
598
|
-
- `
|
|
599
|
-
- `maxCommitId: number`
|
|
645
|
+
- `cached: StreamCacheEntry`
|
|
600
646
|
|
package/build/client/client.d.ts
CHANGED
|
@@ -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
|
|
4
|
-
export declare
|
|
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
|
-
|
|
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 {};
|
package/build/client/client.js
CHANGED
|
@@ -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
|
-
|
|
5
|
-
|
|
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.
|
|
284
|
-
if (request
|
|
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]
|
|
287
|
-
|
|
288
|
-
|
|
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;
|
|
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) {
|