@device-portal/react 0.0.15 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,24 @@
1
1
  import { slicedToArray as _slicedToArray, createForOfIteratorHelper as _createForOfIteratorHelper } from '../_virtual/_rollupPluginBabelHelpers.js';
2
- import { useState, useMemo } from 'react';
2
+ import { useState, useEffect } from 'react';
3
3
  import { Responder } from '@device-portal/client';
4
4
 
5
+ /** Polyfill/helper for Promise.withResolvers */
6
+ var withResolvers = function withResolvers() {
7
+ if (Promise.withResolvers) {
8
+ return Promise.withResolvers();
9
+ }
10
+ var resolve;
11
+ var reject;
12
+ var promise = new Promise(function (res, rej) {
13
+ resolve = res;
14
+ reject = rej;
15
+ });
16
+ return {
17
+ promise: promise,
18
+ resolve: resolve,
19
+ reject: reject
20
+ };
21
+ };
5
22
  var responders = {};
6
23
  var useDevicePortalConsumer = function useDevicePortalConsumer(room) {
7
24
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -9,78 +26,81 @@ var useDevicePortalConsumer = function useDevicePortalConsumer(room) {
9
26
  _useState2 = _slicedToArray(_useState, 2),
10
27
  valueState = _useState2[0],
11
28
  setValueState = _useState2[1];
12
- var currentConsumer = useMemo(function () {
13
- if (!responders[room]) {
14
- var _Promise$withResolver, _Promise$withResolver2;
15
- var withResolvers = function withResolvers() {
16
- var resolve;
17
- var reject;
18
- var promise = new Promise(function (res, rej) {
19
- resolve = res;
20
- reject = rej;
21
- });
22
- return {
23
- promise: promise,
24
- resolve: resolve,
25
- reject: reject
29
+ // Initialize the responder synchronously if it doesn't exist
30
+ if (!responders[room]) {
31
+ var _withResolvers = withResolvers(),
32
+ firstValuePromise = _withResolvers.promise,
33
+ firstValueResolve = _withResolvers.resolve;
34
+ var sendMessageToProvider = function sendMessageToProvider(value) {
35
+ responders[room].responder.send(value);
36
+ };
37
+ var responder = new Responder(room, {
38
+ onMessage: function onMessage(value_0) {
39
+ var consumer = {
40
+ value: value_0,
41
+ sendMessageToProvider: sendMessageToProvider
26
42
  };
27
- };
28
- var _ref = (_Promise$withResolver = (_Promise$withResolver2 = Promise.withResolvers) === null || _Promise$withResolver2 === void 0 ? void 0 : _Promise$withResolver2.call(Promise)) !== null && _Promise$withResolver !== void 0 ? _Promise$withResolver : withResolvers(),
29
- firstValuePromise = _ref.promise,
30
- firstValueResolve = _ref.resolve;
31
- var sendMessageToProvider = function sendMessageToProvider(value) {
32
- responders[room].responder.send(value);
33
- };
34
- var responder = new Responder(room, {
35
- onMessage: function onMessage(value_0, peerId) {
36
- var consumer = {
37
- value: value_0,
38
- sendMessageToProvider: sendMessageToProvider
39
- };
40
- responders[room].consumer = consumer;
41
- var _iterator = _createForOfIteratorHelper(responders[room].setValueStates),
42
- _step;
43
- try {
44
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
45
- var setState = _step.value;
46
- setState({
47
- room: room,
48
- value: value_0,
49
- sendMessageToProvider: sendMessageToProvider
50
- });
51
- }
52
- } catch (err) {
53
- _iterator.e(err);
54
- } finally {
55
- _iterator.f();
43
+ responders[room].consumer = consumer;
44
+ // Resolve the suspension promise
45
+ firstValueResolve(value_0);
46
+ // Only trigger state updates for components that have already mounted
47
+ // components currently suspended will re-render when firstValuePromise resolves
48
+ var _iterator = _createForOfIteratorHelper(responders[room].setValueStates),
49
+ _step;
50
+ try {
51
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
52
+ var setState = _step.value;
53
+ setState({
54
+ room: room,
55
+ value: value_0,
56
+ sendMessageToProvider: sendMessageToProvider
57
+ });
56
58
  }
57
- firstValueResolve(value_0);
58
- },
59
- sendLastValueOnConnectAndReconnect: false,
60
- websocketSignalingServer: options.websocketSignalingServer,
61
- localDeviceOnly: options.localDeviceOnly
59
+ } catch (err) {
60
+ _iterator.e(err);
61
+ } finally {
62
+ _iterator.f();
63
+ }
64
+ },
65
+ sendLastValueOnConnectAndReconnect: false,
66
+ websocketSignalingServer: options.websocketSignalingServer,
67
+ localDeviceOnly: options.localDeviceOnly
68
+ });
69
+ responders[room] = {
70
+ responder: responder,
71
+ firstValuePromise: firstValuePromise,
72
+ consumer: null,
73
+ setValueStates: new Set()
74
+ };
75
+ }
76
+ useEffect(function () {
77
+ var roomEntry = responders[room];
78
+ roomEntry.setValueStates.add(setValueState);
79
+ // If we already have a value, sync it immediately on mount
80
+ if (roomEntry.consumer) {
81
+ var consumer_0 = roomEntry.consumer;
82
+ setValueState({
83
+ room: room,
84
+ value: consumer_0.value,
85
+ sendMessageToProvider: consumer_0.sendMessageToProvider
62
86
  });
63
- responders[room] = {
64
- responder: responder,
65
- firstValuePromise: firstValuePromise,
66
- consumer: null,
67
- setValueStates: new Set()
68
- };
69
87
  }
70
- responders[room].setValueStates.add(setValueState);
71
- return responders[room].consumer;
72
- }, [room, options.websocketSignalingServer, options.localDeviceOnly, setValueState]);
73
- // Cleanup on unmount (though this hook is currently designed for global persistence)
74
- // useEffect(() => () => { responders[room]?.setValueStates.delete(setValueState) }, [room, setValueState]);
88
+ return function () {
89
+ roomEntry.setValueStates["delete"](setValueState);
90
+ };
91
+ }, [room, setValueState]);
92
+ // 1. If we have local state, use it
75
93
  if (valueState && valueState.room === room) {
76
94
  return {
77
95
  value: valueState.value,
78
96
  sendMessageToProvider: valueState.sendMessageToProvider
79
97
  };
80
98
  }
81
- if (currentConsumer) {
82
- return currentConsumer;
99
+ // 2. If the shared responder already has a value, use it (handles re-renders after suspension)
100
+ if (responders[room].consumer) {
101
+ return responders[room].consumer;
83
102
  }
103
+ // 3. Otherwise, suspend on the first value promise
84
104
  throw responders[room].firstValuePromise;
85
105
  };
86
106
 
@@ -1 +1 @@
1
- {"version":3,"file":"useDevicePortalConsumer.js","sources":["../../src/consumer/useDevicePortalConsumer.ts"],"sourcesContent":["import { useMemo, useState, type Dispatch, type SetStateAction } from 'react'\nimport { Responder } from '@device-portal/client'\n\ntype State = {\n\troom: string\n\tvalue: string\n\tsendMessageToProvider: (value: string) => void\n}\n\nconst responders: {\n\t[room: string]: {\n\t\tresponder: Responder\n\t\tfirstValuePromise: Promise<string>\n\t\tconsumer: null | {\n\t\t\tvalue: string\n\t\t\tsendMessageToProvider: (value: string) => void\n\t\t}\n\t\tsetValueStates: Set<Dispatch<SetStateAction<State | null>>>\n\t}\n} = {}\n\nexport const useDevicePortalConsumer = (\n\troom: string,\n\toptions: {\n\t\twebsocketSignalingServer?: string\n\t\tlocalDeviceOnly?: boolean\n\t} = {},\n): Pick<State, 'value' | 'sendMessageToProvider'> => {\n\tconst [valueState, setValueState] = useState<State | null>(null)\n\n\tconst currentConsumer = useMemo(() => {\n\t\tif (!responders[room]) {\n\t\t\tconsole.log(\n\t\t\t\t`[useDevicePortalConsumer] Creating new Responder for room: ${room}`,\n\t\t\t)\n\t\t\tconst withResolvers = () => {\n\t\t\t\tlet resolve: (value: string) => void\n\t\t\t\tlet reject: (reason?: any) => void\n\t\t\t\tconst promise = new Promise<string>((res, rej) => {\n\t\t\t\t\tresolve = res\n\t\t\t\t\treject = rej\n\t\t\t\t})\n\t\t\t\treturn { promise, resolve: resolve!, reject: reject! }\n\t\t\t}\n\n\t\t\tconst { promise: firstValuePromise, resolve: firstValueResolve } =\n\t\t\t\t(Promise as any).withResolvers?.() ?? withResolvers()\n\n\t\t\tconst sendMessageToProvider = (value: string) => {\n\t\t\t\tresponders[room].responder.send(value)\n\t\t\t}\n\n\t\t\tconst responder = new Responder(room, {\n\t\t\t\tonMessage: (value, peerId) => {\n\t\t\t\t\tconst consumer = { value, sendMessageToProvider }\n\t\t\t\t\tresponders[room].consumer = consumer\n\t\t\t\t\tfor (const setState of responders[room].setValueStates) {\n\t\t\t\t\t\tsetState({ room, value, sendMessageToProvider })\n\t\t\t\t\t}\n\t\t\t\t\tfirstValueResolve(value)\n\t\t\t\t},\n\t\t\t\tsendLastValueOnConnectAndReconnect: false,\n\t\t\t\twebsocketSignalingServer: options.websocketSignalingServer,\n\t\t\t\tlocalDeviceOnly: options.localDeviceOnly,\n\t\t\t})\n\n\t\t\tresponders[room] = {\n\t\t\t\tresponder,\n\t\t\t\tfirstValuePromise,\n\t\t\t\tconsumer: null,\n\t\t\t\tsetValueStates: new Set(),\n\t\t\t}\n\t\t}\n\n\t\tresponders[room].setValueStates.add(setValueState)\n\n\t\treturn responders[room].consumer\n\t}, [\n\t\troom,\n\t\toptions.websocketSignalingServer,\n\t\toptions.localDeviceOnly,\n\t\tsetValueState,\n\t])\n\n\t// Cleanup on unmount (though this hook is currently designed for global persistence)\n\t// useEffect(() => () => { responders[room]?.setValueStates.delete(setValueState) }, [room, setValueState]);\n\n\tif (valueState && valueState.room === room) {\n\t\treturn {\n\t\t\tvalue: valueState.value,\n\t\t\tsendMessageToProvider: valueState.sendMessageToProvider,\n\t\t}\n\t}\n\n\tif (currentConsumer) {\n\t\treturn currentConsumer\n\t}\n\n\tthrow responders[room].firstValuePromise\n}\n"],"names":["responders","useDevicePortalConsumer","room","options","arguments","length","undefined","_useState","useState","_useState2","_slicedToArray","valueState","setValueState","currentConsumer","useMemo","_Promise$withResolver","_Promise$withResolver2","withResolvers","resolve","reject","promise","Promise","res","rej","_ref","call","firstValuePromise","firstValueResolve","sendMessageToProvider","value","responder","send","Responder","onMessage","peerId","consumer","_iterator","_createForOfIteratorHelper","setValueStates","_step","s","n","done","setState","err","e","f","sendLastValueOnConnectAndReconnect","websocketSignalingServer","localDeviceOnly","Set","add"],"mappings":"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"}
1
+ {"version":3,"file":"useDevicePortalConsumer.js","sources":["../../src/consumer/useDevicePortalConsumer.ts"],"sourcesContent":["import { useEffect, useState, type Dispatch, type SetStateAction } from 'react'\nimport { Responder } from '@device-portal/client'\n\ntype State = {\n\troom: string\n\tvalue: string\n\tsendMessageToProvider: (value: string) => void\n}\n\n/** Polyfill/helper for Promise.withResolvers */\nconst withResolvers = <T>() => {\n\tif ((Promise as any).withResolvers) {\n\t\treturn (Promise as any).withResolvers() as {\n\t\t\tpromise: Promise<T>\n\t\t\tresolve: (value: T) => void\n\t\t\treject: (reason?: any) => void\n\t\t}\n\t}\n\tlet resolve: (value: T) => void\n\tlet reject: (reason?: any) => void\n\tconst promise = new Promise<T>((res, rej) => {\n\t\tresolve = res\n\t\treject = rej\n\t})\n\treturn { promise, resolve: resolve!, reject: reject! }\n}\n\nconst responders: {\n\t[room: string]: {\n\t\tresponder: Responder\n\t\tfirstValuePromise: Promise<string>\n\t\tconsumer: null | {\n\t\t\tvalue: string\n\t\t\tsendMessageToProvider: (value: string) => void\n\t\t}\n\t\tsetValueStates: Set<Dispatch<SetStateAction<State | null>>>\n\t}\n} = {}\n\nexport const useDevicePortalConsumer = (\n\troom: string,\n\toptions: {\n\t\twebsocketSignalingServer?: string\n\t\tlocalDeviceOnly?: boolean\n\t} = {},\n): Pick<State, 'value' | 'sendMessageToProvider'> => {\n\tconst [valueState, setValueState] = useState<State | null>(null)\n\n\t// Initialize the responder synchronously if it doesn't exist\n\tif (!responders[room]) {\n\t\tconsole.log(\n\t\t\t`[useDevicePortalConsumer] Creating new Responder for room: ${room}`,\n\t\t)\n\n\t\tconst { promise: firstValuePromise, resolve: firstValueResolve } =\n\t\t\twithResolvers<string>()\n\n\t\tconst sendMessageToProvider = (value: string) => {\n\t\t\tresponders[room].responder.send(value)\n\t\t}\n\n\t\tconst responder = new Responder(room, {\n\t\t\tonMessage: (value) => {\n\t\t\t\tconst consumer = { value, sendMessageToProvider }\n\t\t\t\tresponders[room].consumer = consumer\n\n\t\t\t\t// Resolve the suspension promise\n\t\t\t\tfirstValueResolve(value)\n\n\t\t\t\t// Only trigger state updates for components that have already mounted\n\t\t\t\t// components currently suspended will re-render when firstValuePromise resolves\n\t\t\t\tfor (const setState of responders[room].setValueStates) {\n\t\t\t\t\tsetState({ room, value, sendMessageToProvider })\n\t\t\t\t}\n\t\t\t},\n\t\t\tsendLastValueOnConnectAndReconnect: false,\n\t\t\twebsocketSignalingServer: options.websocketSignalingServer,\n\t\t\tlocalDeviceOnly: options.localDeviceOnly,\n\t\t})\n\n\t\tresponders[room] = {\n\t\t\tresponder,\n\t\t\tfirstValuePromise,\n\t\t\tconsumer: null,\n\t\t\tsetValueStates: new Set(),\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tconst roomEntry = responders[room]\n\t\troomEntry.setValueStates.add(setValueState)\n\n\t\t// If we already have a value, sync it immediately on mount\n\t\tif (roomEntry.consumer) {\n\t\t\tconst consumer = roomEntry.consumer!\n\t\t\tsetValueState({\n\t\t\t\troom,\n\t\t\t\tvalue: consumer.value,\n\t\t\t\tsendMessageToProvider: consumer.sendMessageToProvider,\n\t\t\t})\n\t\t}\n\n\t\treturn () => {\n\t\t\troomEntry.setValueStates.delete(setValueState)\n\t\t}\n\t}, [room, setValueState])\n\n\t// 1. If we have local state, use it\n\tif (valueState && valueState.room === room) {\n\t\treturn {\n\t\t\tvalue: valueState.value,\n\t\t\tsendMessageToProvider: valueState.sendMessageToProvider,\n\t\t}\n\t}\n\n\t// 2. If the shared responder already has a value, use it (handles re-renders after suspension)\n\tif (responders[room].consumer) {\n\t\treturn responders[room].consumer!\n\t}\n\n\t// 3. Otherwise, suspend on the first value promise\n\tthrow responders[room].firstValuePromise\n}\n"],"names":["withResolvers","Promise","resolve","reject","promise","res","rej","responders","useDevicePortalConsumer","room","options","arguments","length","undefined","_useState","useState","_useState2","_slicedToArray","valueState","setValueState","_withResolvers","firstValuePromise","firstValueResolve","sendMessageToProvider","value","responder","send","Responder","onMessage","consumer","_iterator","_createForOfIteratorHelper","setValueStates","_step","s","n","done","setState","err","e","f","sendLastValueOnConnectAndReconnect","websocketSignalingServer","localDeviceOnly","Set","useEffect","roomEntry","add"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,4 +3,4 @@ export * from './provider/useDevicePortalProvider';
3
3
  export * from './provider/useDevicePortalPeer';
4
4
  export * from './consumer/DevicePortalConsumer';
5
5
  export * from './consumer/useDevicePortalConsumer';
6
- export { type PeerId } from '@device-portal/client';
6
+ export { type PeerId, type Initiator } from '@device-portal/client';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@device-portal/react",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "description": "Simple WebRTC data channel for React.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,14 +39,14 @@
39
39
  "react": "18 || 19"
40
40
  },
41
41
  "dependencies": {
42
- "@device-portal/client": "^0.0.15",
43
- "@device-portal/constants": "*"
42
+ "@device-portal/client": "^0.0.17"
44
43
  },
45
44
  "devDependencies": {
46
45
  "@babel/core": "^7.24.0",
47
46
  "@babel/preset-env": "^7.24.0",
48
47
  "@babel/preset-react": "^7.24.0",
49
48
  "@babel/preset-typescript": "^7.24.0",
49
+ "@device-portal/constants": "*",
50
50
  "@rollup/plugin-babel": "^6.0.4",
51
51
  "@rollup/plugin-commonjs": "^25.0.7",
52
52
  "@rollup/plugin-node-resolve": "^15.2.3",