@rustra/react 0.4.1 → 0.5.0

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/dist/index.d.ts CHANGED
@@ -27,5 +27,5 @@ export type { UseCommandOptions, UseCommandResult, CommandFn, VoidCommandFn, } f
27
27
  export { useMutation } from './useMutation.js';
28
28
  export type { UseMutationOptions, UseMutationResult } from './useMutation.js';
29
29
  export { useEvent } from './useEvent.js';
30
- export type { EventCallback, UnsubscribeFn, SubscribeFn } from './useEvent.js';
30
+ export type { EventCallback, UnsubscribeFn, SubscribeResult, SubscribeFn } from './useEvent.js';
31
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Creates a render-stable key for command inputs.
3
+ *
4
+ * JSON.stringify throws for bigint values, which are a normal generated type
5
+ * for Rust i64/u64 fields. The tagged representation also avoids conflating a
6
+ * bigint with the same decimal string.
7
+ */
8
+ export declare function inputKey(value: unknown): string;
9
+ //# sourceMappingURL=input-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-key.d.ts","sourceRoot":"","sources":["../src/input-key.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM/C"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Creates a render-stable key for command inputs.
3
+ *
4
+ * JSON.stringify throws for bigint values, which are a normal generated type
5
+ * for Rust i64/u64 fields. The tagged representation also avoids conflating a
6
+ * bigint with the same decimal string.
7
+ */
8
+ export function inputKey(value) {
9
+ return (JSON.stringify(value, (_key, item) => typeof item === 'bigint' ? { $rustraBigInt: item.toString() } : item) ?? String(value));
10
+ }
11
+ //# sourceMappingURL=input-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-key.js","sourceRoot":"","sources":["../src/input-key.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAa,EAAE,EAAE,CAC5C,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACrE,IAAI,MAAM,CAAC,KAAK,CAAC,CACnB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCommand.d.ts","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACvC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC7B,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC7C,KAAK,CAAC,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAAC,CAAC,CAAC,CAuFrB"}
1
+ {"version":3,"file":"useCommand.d.ts","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKnD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACvC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC7B,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC7C,KAAK,CAAC,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAAC,CAAC,CAAC,CAuFrB"}
@@ -1,6 +1,7 @@
1
1
  import { useState, useEffect, useCallback, useRef } from 'react';
2
2
  import { resolveCommandId } from '@rustra/types';
3
3
  import { useRustraEngine } from './context.js';
4
+ import { inputKey } from './input-key.js';
4
5
  export function useCommand(commandFn, input, options) {
5
6
  const engine = useRustraEngine();
6
7
  const [data, setData] = useState(undefined);
@@ -23,12 +24,12 @@ export function useCommand(commandFn, input, options) {
23
24
  // react-doctor/no-ref-current-in-render). useState 의 "이전 값과 같으면
24
25
  // 같은 참조 반환" 관례로 안정화한다: 키가 직전과 같으면 직전 state 를
25
26
  // 그대로 돌려받고, 다르면 setState 로 커밋 시점에 갱신한다.
26
- const inputKey = input === undefined ? undefined : JSON.stringify(input);
27
- const [stableInputBox, setStableInputBox] = useState(() => ({ key: inputKey, value: input }));
28
- if (stableInputBox.key !== inputKey) {
29
- setStableInputBox({ key: inputKey, value: input });
27
+ const serializedInput = input === undefined ? undefined : inputKey(input);
28
+ const [stableInputBox, setStableInputBox] = useState(() => ({ key: serializedInput, value: input }));
29
+ if (stableInputBox.key !== serializedInput) {
30
+ setStableInputBox({ key: serializedInput, value: input });
30
31
  }
31
- const stableInput = stableInputBox.key === inputKey ? stableInputBox.value : input;
32
+ const stableInput = stableInputBox.key === serializedInput ? stableInputBox.value : input;
32
33
  const execute = useCallback(async () => {
33
34
  if (abortControllerRef.current) {
34
35
  abortControllerRef.current.abort();
@@ -1 +1 @@
1
- {"version":3,"file":"useCommand.js","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useCommand.js","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAiB1C,MAAM,UAAU,UAAU,CACxB,SAA6C,EAC7C,KAAS,EACT,OAA2B;IAE3B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAC;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAChE,0DAA0D;IAC1D,gDAAgD;IAChD,sDAAsD;IACtD,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,0DAA0D;IAC1D,iCAAiC;IACjC,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAEhD,+CAA+C;IAC/C,uDAAuD;IACvD,iDAAiD;IACjD,yCAAyC;IACzC,EAAE;IACF,sDAAsD;IACtD,gEAAgE;IAChE,6CAA6C;IAC7C,wCAAwC;IACxC,MAAM,eAAe,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAGjD,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,KAAU,EAAE,CAAC,CAAC,CAAC;IACxD,IAAI,cAAc,CAAC,GAAG,KAAK,eAAe,EAAE,CAAC;QAC3C,iBAAiB,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,KAAU,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,KAAK,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAE1F,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAA4B,EAAE;QAC7D,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,kBAAkB,CAAC,OAAO,GAAG,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC;QAC3C,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,KAAK,UAAU,CAAC;QAE7D,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAI,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACpF,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxE,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,0EAA0E;YAC1E,2EAA2E;YAC3E,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YAC/B,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,OAAO,EAAE,CAAC;QAEV,OAAO,GAAG,EAAE;YACV,qDAAqD;YACrD,aAAa,CAAC,OAAO,IAAI,CAAC,CAAC;YAC3B,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhC,OAAO;QACL,IAAI;QACJ,OAAO;QACP,KAAK;QACL,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export type EventCallback<T = unknown> = (payload: T) => void;
2
2
  export type UnsubscribeFn = () => void;
3
- export type SubscribeFn<T = unknown> = (eventName: string, callback: EventCallback<T>) => UnsubscribeFn;
3
+ export type SubscribeResult = UnsubscribeFn | Promise<UnsubscribeFn>;
4
+ export type SubscribeFn<T = unknown> = (eventName: string, callback: EventCallback<T>) => SubscribeResult;
4
5
  /**
5
6
  * Subscribes to a Rustra event stream and automatically unregisters on unmount.
6
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"useEvent.d.ts","sourceRoot":"","sources":["../src/useEvent.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AACvC,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,KACvB,aAAa,CAAC;AAEnB;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GACzB,IAAI,CAgBN"}
1
+ {"version":3,"file":"useEvent.d.ts","sourceRoot":"","sources":["../src/useEvent.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AACvC,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AACrE,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,KACvB,eAAe,CAAC;AAErB;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GACzB,IAAI,CAsCN"}
package/dist/useEvent.js CHANGED
@@ -14,10 +14,32 @@ export function useEvent(eventName, callback, subscribe) {
14
14
  useEffect(() => {
15
15
  if (!subscribe)
16
16
  return;
17
- const unsubscribe = subscribe(eventName, (payload) => {
18
- callbackRef.current(payload);
17
+ let active = true;
18
+ let unsubscribe;
19
+ let result;
20
+ try {
21
+ result = subscribe(eventName, (payload) => {
22
+ callbackRef.current(payload);
23
+ });
24
+ }
25
+ catch (error) {
26
+ console.error(`Rustra: event subscription for "${eventName}" failed:`, error);
27
+ return () => {
28
+ active = false;
29
+ };
30
+ }
31
+ Promise.resolve(result).then((cleanup) => {
32
+ if (active)
33
+ unsubscribe = cleanup;
34
+ else
35
+ cleanup();
36
+ }, (error) => {
37
+ if (active) {
38
+ console.error(`Rustra: event subscription for "${eventName}" failed:`, error);
39
+ }
19
40
  });
20
41
  return () => {
42
+ active = false;
21
43
  unsubscribe?.();
22
44
  };
23
45
  }, [eventName, subscribe]);
@@ -1 +1 @@
1
- {"version":3,"file":"useEvent.js","sourceRoot":"","sources":["../src/useEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAS1C;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAiB,EACjB,QAA0B,EAC1B,SAA0B;IAE1B,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YACnD,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"useEvent.js","sourceRoot":"","sources":["../src/useEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAU1C;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAiB,EACjB,QAA0B,EAC1B,SAA0B;IAE1B,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,WAAsC,CAAC;QAC3C,IAAI,MAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,WAAW,EAAE,KAAK,CAAC,CAAC;YAC9E,OAAO,GAAG,EAAE;gBACV,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAC1B,CAAC,OAAO,EAAE,EAAE;YACV,IAAI,MAAM;gBAAE,WAAW,GAAG,OAAO,CAAC;;gBAC7B,OAAO,EAAE,CAAC;QACjB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,mCAAmC,SAAS,WAAW,EAAE,KAAK,CAAC,CAAC;YAChF,CAAC;QACH,CAAC,CACF,CAAC;QACF,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;YACf,WAAW,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rustra/react",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "React and React Native bindings and hooks for rustra-bridge",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -18,26 +18,7 @@
18
18
  },
19
19
  "files": [
20
20
  "LICENSE",
21
- "dist/context.d.ts",
22
- "dist/context.d.ts.map",
23
- "dist/context.js",
24
- "dist/context.js.map",
25
- "dist/index.d.ts",
26
- "dist/index.d.ts.map",
27
- "dist/index.js",
28
- "dist/index.js.map",
29
- "dist/useCommand.d.ts",
30
- "dist/useCommand.d.ts.map",
31
- "dist/useCommand.js",
32
- "dist/useCommand.js.map",
33
- "dist/useEvent.d.ts",
34
- "dist/useEvent.d.ts.map",
35
- "dist/useEvent.js",
36
- "dist/useEvent.js.map",
37
- "dist/useMutation.d.ts",
38
- "dist/useMutation.d.ts.map",
39
- "dist/useMutation.js",
40
- "dist/useMutation.js.map"
21
+ "dist"
41
22
  ],
42
23
  "scripts": {
43
24
  "build": "tsc",
@@ -49,7 +30,7 @@
49
30
  "react": ">=18.0.0"
50
31
  },
51
32
  "dependencies": {
52
- "@rustra/types": "^0.5.0"
33
+ "@rustra/types": "^0.6.0"
53
34
  },
54
35
  "devDependencies": {
55
36
  "@types/react": "^19.0.0",