@vaadin/hilla-react-signals 24.5.0-alpha7 → 24.5.0-alpha9
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/EventChannel.d.ts.map +1 -1
- package/EventChannel.js +2 -1
- package/EventChannel.js.map +2 -2
- package/Signals.d.ts.map +1 -1
- package/Signals.js +2 -1
- package/Signals.js.map +2 -2
- package/package.json +3 -2
package/EventChannel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventChannel.d.ts","sourceRoot":"","sources":["src/EventChannel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"EventChannel.d.ts","sourceRoot":"","sources":["src/EventChannel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAoB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,YAAY,CAAC;AAY7D;;;;;;;;;;;GAWG;AACH,uBAAe,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC;;gBAO1C,2BAA2B,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa;IA8BvE,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlD;;OAEG;IACH,IAAI,MAAM,IAAI,CAAC,CAEd;IAED;;OAEG;IACH,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;CACrG;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC;IACjE,oBAAoB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY;CAGrH"}
|
package/EventChannel.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { nanoid } from "nanoid";
|
|
1
2
|
import { NumberSignal, setInternalValue } from "./Signals.js";
|
|
2
3
|
import SignalsHandler from "./SignalsHandler";
|
|
3
4
|
import { StateEventType } from "./types.js";
|
|
@@ -7,7 +8,7 @@ class SignalChannel {
|
|
|
7
8
|
#id;
|
|
8
9
|
#internalSignal;
|
|
9
10
|
constructor(signalProviderServiceMethod, connectClient) {
|
|
10
|
-
this.#id =
|
|
11
|
+
this.#id = nanoid();
|
|
11
12
|
this.#signalsHandler = new SignalsHandler(connectClient);
|
|
12
13
|
this.#channelDescriptor = {
|
|
13
14
|
signalProviderEndpointMethod: signalProviderServiceMethod,
|
package/EventChannel.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/EventChannel.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ConnectClient, Subscription } from '@vaadin/hilla-frontend';\nimport { NumberSignal, setInternalValue, type ValueSignal } from './Signals.js';\nimport SignalsHandler from './SignalsHandler';\nimport { type StateEvent, StateEventType } from './types.js';\n\n/**\n * The type that describes the needed information to\n * subscribe and publish to a server-side signal instance.\n */\ntype SignalChannelDescriptor<T> = Readonly<{\n signalProviderEndpointMethod: string;\n subscribe(signalProviderEndpointMethod: string, clientSignalId: string): Subscription<T>;\n publish(clientSignalId: string, event: T): Promise<void>;\n}>;\n\n/**\n * A generic class that represents a signal channel\n * that can be used to communicate with a server-side\n * signal instance.\n *\n * The signal channel is responsible for subscribing to\n * the server-side signal and updating the local signal\n * based on the received events.\n *\n * @typeParam T - The type of the signal value.\n * @typeParam S - The type of the signal instance.\n */\nabstract class SignalChannel<T, S extends ValueSignal<T>> {\n readonly #channelDescriptor: SignalChannelDescriptor<StateEvent>;\n readonly #signalsHandler: SignalsHandler;\n readonly #id: string;\n\n readonly #internalSignal: S;\n\n constructor(signalProviderServiceMethod: string, connectClient: ConnectClient) {\n this.#id =
|
|
5
|
-
"mappings": "AACA,SAAS,cAAc,wBAA0C;AACjE,OAAO,oBAAoB;AAC3B,SAA0B,sBAAsB;AAwBhD,MAAe,cAA2C;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAET,YAAY,6BAAqC,eAA8B;AAC7E,SAAK,MAAM,OAAO
|
|
4
|
+
"sourcesContent": ["import type { ConnectClient, Subscription } from '@vaadin/hilla-frontend';\nimport { nanoid } from 'nanoid';\nimport { NumberSignal, setInternalValue, type ValueSignal } from './Signals.js';\nimport SignalsHandler from './SignalsHandler';\nimport { type StateEvent, StateEventType } from './types.js';\n\n/**\n * The type that describes the needed information to\n * subscribe and publish to a server-side signal instance.\n */\ntype SignalChannelDescriptor<T> = Readonly<{\n signalProviderEndpointMethod: string;\n subscribe(signalProviderEndpointMethod: string, clientSignalId: string): Subscription<T>;\n publish(clientSignalId: string, event: T): Promise<void>;\n}>;\n\n/**\n * A generic class that represents a signal channel\n * that can be used to communicate with a server-side\n * signal instance.\n *\n * The signal channel is responsible for subscribing to\n * the server-side signal and updating the local signal\n * based on the received events.\n *\n * @typeParam T - The type of the signal value.\n * @typeParam S - The type of the signal instance.\n */\nabstract class SignalChannel<T, S extends ValueSignal<T>> {\n readonly #channelDescriptor: SignalChannelDescriptor<StateEvent>;\n readonly #signalsHandler: SignalsHandler;\n readonly #id: string;\n\n readonly #internalSignal: S;\n\n constructor(signalProviderServiceMethod: string, connectClient: ConnectClient) {\n this.#id = nanoid();\n this.#signalsHandler = new SignalsHandler(connectClient);\n this.#channelDescriptor = {\n signalProviderEndpointMethod: signalProviderServiceMethod,\n subscribe: (signalProviderEndpointMethod: string, signalId: string) =>\n this.#signalsHandler.subscribe(signalProviderEndpointMethod, signalId),\n publish: async (signalId: string, event: StateEvent) => this.#signalsHandler.update(signalId, event),\n };\n\n this.#internalSignal = this.createInternalSignal(async (event: StateEvent) => this.publish(event));\n\n this.#connect();\n }\n\n #connect() {\n this.#channelDescriptor\n .subscribe(this.#channelDescriptor.signalProviderEndpointMethod, this.#id)\n .onNext((stateEvent) => {\n // Update signals based on the new value from the event:\n this.#updateSignals(stateEvent);\n });\n }\n\n #updateSignals(stateEvent: StateEvent): void {\n if (stateEvent.type === StateEventType.SNAPSHOT) {\n setInternalValue(this.#internalSignal, stateEvent.value);\n }\n }\n\n async publish(event: StateEvent): Promise<boolean> {\n await this.#channelDescriptor.publish(this.#id, event);\n return true;\n }\n\n /**\n * Returns the signal instance to be used in components.\n */\n get signal(): S {\n return this.#internalSignal;\n }\n\n /**\n * Returns the id of the signal channel.\n */\n get id(): string {\n return this.#id;\n }\n\n abstract createInternalSignal(publish: (event: StateEvent) => Promise<boolean>, initialValue?: T): S;\n}\n\n/**\n * A signal channel that is used to communicate with a\n * server-side signal instance that holds a number value.\n */\nexport class NumberSignalChannel extends SignalChannel<number, NumberSignal> {\n override createInternalSignal(publish: (event: StateEvent) => Promise<boolean>, initialValue?: number): NumberSignal {\n return new NumberSignal(publish, initialValue);\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,cAAc;AACvB,SAAS,cAAc,wBAA0C;AACjE,OAAO,oBAAoB;AAC3B,SAA0B,sBAAsB;AAwBhD,MAAe,cAA2C;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAET,YAAY,6BAAqC,eAA8B;AAC7E,SAAK,MAAM,OAAO;AAClB,SAAK,kBAAkB,IAAI,eAAe,aAAa;AACvD,SAAK,qBAAqB;AAAA,MACxB,8BAA8B;AAAA,MAC9B,WAAW,CAAC,8BAAsC,aAChD,KAAK,gBAAgB,UAAU,8BAA8B,QAAQ;AAAA,MACvE,SAAS,OAAO,UAAkB,UAAsB,KAAK,gBAAgB,OAAO,UAAU,KAAK;AAAA,IACrG;AAEA,SAAK,kBAAkB,KAAK,qBAAqB,OAAO,UAAsB,KAAK,QAAQ,KAAK,CAAC;AAEjG,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW;AACT,SAAK,mBACF,UAAU,KAAK,mBAAmB,8BAA8B,KAAK,GAAG,EACxE,OAAO,CAAC,eAAe;AAEtB,WAAK,eAAe,UAAU;AAAA,IAChC,CAAC;AAAA,EACL;AAAA,EAEA,eAAe,YAA8B;AAC3C,QAAI,WAAW,SAAS,eAAe,UAAU;AAC/C,uBAAiB,KAAK,iBAAiB,WAAW,KAAK;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,OAAqC;AACjD,UAAM,KAAK,mBAAmB,QAAQ,KAAK,KAAK,KAAK;AACrD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAa;AACf,WAAO,KAAK;AAAA,EACd;AAGF;AAMO,MAAM,4BAA4B,cAAoC;AAAA,EAClE,qBAAqB,SAAkD,cAAqC;AACnH,WAAO,IAAI,aAAa,SAAS,YAAY;AAAA,EAC/C;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/Signals.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Signals.d.ts","sourceRoot":"","sources":["src/Signals.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Signals.d.ts","sourceRoot":"","sources":["src/Signals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,SAAS,CAAC;AAG1D,eAAO,IAAI,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAE3E;;;;;;GAMG;AACH,8BAAsB,WAAW,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;;IAOpD;;;;;;OAMG;gBACS,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAKvE;;OAEG;IACH,IAAa,KAAK,IAAI,CAAC,CAEtB;IAED;;;;;;;OAOG;IACH,IAAa,KAAK,CAAC,KAAK,EAAE,CAAC,EAQ1B;CAUF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,YAAa,SAAQ,WAAW,CAAC,MAAM,CAAC;CAAG"}
|
package/Signals.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { nanoid } from "nanoid";
|
|
1
2
|
import { Signal } from "./core.js";
|
|
2
3
|
import { StateEventType } from "./types";
|
|
3
4
|
let setInternalValue;
|
|
@@ -32,7 +33,7 @@ class ValueSignal extends Signal {
|
|
|
32
33
|
* to be published to the server.
|
|
33
34
|
*/
|
|
34
35
|
set value(value) {
|
|
35
|
-
const id =
|
|
36
|
+
const id = nanoid();
|
|
36
37
|
this.#setInternalValue(value);
|
|
37
38
|
this.#publish({ id, type: StateEventType.SET, value }).catch((error) => {
|
|
38
39
|
throw error;
|
package/Signals.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/Signals.ts"],
|
|
4
|
-
"sourcesContent": ["import { Signal } from './core.js';\nimport { type StateEvent, StateEventType } from './types';\n\n// eslint-disable-next-line import/no-mutable-exports\nexport let setInternalValue: <T>(signal: ValueSignal<T>, value: T) => void;\n\n/**\n * A signal that holds a value. The underlying\n * value of this signal is stored and updated as a\n * shared value on the server.\n *\n * @internal\n */\nexport abstract class ValueSignal<T> extends Signal<T> {\n static {\n setInternalValue = (signal: ValueSignal<unknown>, value: unknown): void => signal.#setInternalValue(value);\n }\n\n readonly #publish: (event: StateEvent) => Promise<boolean>;\n\n /**\n * Creates a new ValueSignal instance.\n * @param publish - The function that publishes the\n * value of the signal to the server.\n * @param value - The initial value of the signal\n * @defaultValue undefined\n */\n constructor(publish: (event: StateEvent) => Promise<boolean>, value?: T) {\n super(value);\n this.#publish = publish;\n }\n\n /**\n * Returns the value of the signal.\n */\n override get value(): T {\n return super.value;\n }\n\n /**\n * Publishes the new value to the server.\n * Note that this method is not setting\n * the signal's value.\n *\n * @param value - The new value of the signal\n * to be published to the server.\n */\n override set value(value: T) {\n const id =
|
|
5
|
-
"mappings": "AAAA,SAAS,cAAc;AACvB,SAA0B,sBAAsB;AAGzC,IAAI;AASJ,MAAe,oBAAuB,OAAU;AAAA,EACrD,OAAO;AACL,uBAAmB,CAAC,QAA8B,UAAyB,OAAO,kBAAkB,KAAK;AAAA,EAC3G;AAAA,EAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST,YAAY,SAAkD,OAAW;AACvE,UAAM,KAAK;AACX,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAa,QAAW;AACtB,WAAO,MAAM;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAa,MAAM,OAAU;AAC3B,UAAM,KAAK,OAAO
|
|
4
|
+
"sourcesContent": ["import { nanoid } from 'nanoid';\nimport { Signal } from './core.js';\nimport { type StateEvent, StateEventType } from './types';\n\n// eslint-disable-next-line import/no-mutable-exports\nexport let setInternalValue: <T>(signal: ValueSignal<T>, value: T) => void;\n\n/**\n * A signal that holds a value. The underlying\n * value of this signal is stored and updated as a\n * shared value on the server.\n *\n * @internal\n */\nexport abstract class ValueSignal<T> extends Signal<T> {\n static {\n setInternalValue = (signal: ValueSignal<unknown>, value: unknown): void => signal.#setInternalValue(value);\n }\n\n readonly #publish: (event: StateEvent) => Promise<boolean>;\n\n /**\n * Creates a new ValueSignal instance.\n * @param publish - The function that publishes the\n * value of the signal to the server.\n * @param value - The initial value of the signal\n * @defaultValue undefined\n */\n constructor(publish: (event: StateEvent) => Promise<boolean>, value?: T) {\n super(value);\n this.#publish = publish;\n }\n\n /**\n * Returns the value of the signal.\n */\n override get value(): T {\n return super.value;\n }\n\n /**\n * Publishes the new value to the server.\n * Note that this method is not setting\n * the signal's value.\n *\n * @param value - The new value of the signal\n * to be published to the server.\n */\n override set value(value: T) {\n const id = nanoid();\n // set the local value to be used for latency compensation and offline support:\n this.#setInternalValue(value);\n // publish the update to the server:\n this.#publish({ id, type: StateEventType.SET, value }).catch((error) => {\n throw error;\n });\n }\n\n /**\n * Sets the value of the signal.\n * @param value - The new value of the signal.\n * @internal\n */\n #setInternalValue(value: T): void {\n super.value = value;\n }\n}\n\n/**\n * A signal that holds a number value. The underlying\n * value of this signal is stored and updated as a\n * shared value on the server.\n *\n * After obtaining the NumberSignal instance from\n * a server-side service that returns one, the value\n * can be updated using the `value` property,\n * and it can be read with or without the\n * `value` property (similar to a normal signal):\n *\n * @example\n * ```tsx\n * const counter = CounterService.counter();\n *\n * return (\n * <Button onClick={() => counter++)}>\n * Click count: { counter }\n * </Button>\n * <Button onClick={() => counter.value = 0}>Reset</Button>\n * );\n * ```\n */\nexport class NumberSignal extends ValueSignal<number> {}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAA0B,sBAAsB;AAGzC,IAAI;AASJ,MAAe,oBAAuB,OAAU;AAAA,EACrD,OAAO;AACL,uBAAmB,CAAC,QAA8B,UAAyB,OAAO,kBAAkB,KAAK;AAAA,EAC3G;AAAA,EAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST,YAAY,SAAkD,OAAW;AACvE,UAAM,KAAK;AACX,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAa,QAAW;AACtB,WAAO,MAAM;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAa,MAAM,OAAU;AAC3B,UAAM,KAAK,OAAO;AAElB,SAAK,kBAAkB,KAAK;AAE5B,SAAK,SAAS,EAAE,IAAI,MAAM,eAAe,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU;AACtE,YAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,OAAgB;AAChC,UAAM,QAAQ;AAAA,EAChB;AACF;AAyBO,MAAM,qBAAqB,YAAoB;AAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/hilla-react-signals",
|
|
3
|
-
"version": "24.5.0-
|
|
3
|
+
"version": "24.5.0-alpha9",
|
|
4
4
|
"description": "Signals for Hilla React",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "index.js",
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@preact/signals-react": "^2.0.0",
|
|
50
|
-
"@vaadin/hilla-frontend": "24.5.0-
|
|
50
|
+
"@vaadin/hilla-frontend": "24.5.0-alpha9",
|
|
51
|
+
"nanoid": "^5.0.7"
|
|
51
52
|
},
|
|
52
53
|
"peerDependencies": {
|
|
53
54
|
"react": "^18",
|