@rustra/react 0.8.1 → 0.8.3
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.ko.md +5 -0
- package/README.md +6 -0
- package/dist/input-key.d.ts +9 -0
- package/dist/input-key.d.ts.map +1 -1
- package/dist/input-key.js +63 -10
- package/dist/input-key.js.map +1 -1
- package/dist/suspense-cache.d.ts.map +1 -1
- package/dist/suspense-cache.js +21 -5
- package/dist/suspense-cache.js.map +1 -1
- package/package.json +5 -5
package/README.ko.md
CHANGED
|
@@ -82,5 +82,10 @@ TypeError로 거부한다. 엔진에는 원래 입력을 전달한다.
|
|
|
82
82
|
완료하더라도 해당 호출에 귀속되어 실행한다. 중첩 호출은 현재 범위의 모든 호출이
|
|
83
83
|
끝날 때까지 `loading`을 유지하고, 마지막 호출만 data/error를 갱신한다.
|
|
84
84
|
|
|
85
|
+
**엔진 정체성.** 엔진은 값이 아니라 객체 정체성(`WeakMap`)으로 구분한다. `RustraProvider` 에는
|
|
86
|
+
모듈 상수나 `useMemo` 결과처럼 안정적인 엔진을 전달한다. 렌더링마다 새 객체가 만들어지는
|
|
87
|
+
불안정한 `engine` prop 은 엔진 교체로 관측되어 매 렌더링 `useMutation` 상태를 초기화한다.
|
|
88
|
+
의도한 교체에서 상태가 초기화되는 것은 설계된 동작이다.
|
|
89
|
+
|
|
85
90
|
`useEvent`는 동기·비동기 구독 해제 등록을 지원한다. 이벤트·구독자 교체 또는 언마운트 시
|
|
86
91
|
이전 구독의 전달을 즉시 차단하며, 늦게 도착한 정리 함수는 한 번 실행한다.
|
package/README.md
CHANGED
|
@@ -91,6 +91,12 @@ are captured at invocation time and still belong to that invocation, including
|
|
|
91
91
|
when it settles after a reset or scope change. Overlapping calls keep `loading`
|
|
92
92
|
true until all current-scope calls settle; only the latest call updates data/error.
|
|
93
93
|
|
|
94
|
+
**Engine identity.** Engines are keyed by object identity (a `WeakMap`), not by
|
|
95
|
+
value. Pass a stable engine to `RustraProvider` — a module-level constant or a
|
|
96
|
+
`useMemo` result; an unstable `engine` prop (a new object every render) is
|
|
97
|
+
observed as an engine swap and resets `useMutation` state on every render.
|
|
98
|
+
Intentional swaps resetting state are by design.
|
|
99
|
+
|
|
94
100
|
`useEvent` accepts synchronous or asynchronous unsubscribe registration. Replacing
|
|
95
101
|
an event/subscriber or unmounting immediately disables delivery from the old
|
|
96
102
|
subscription. A cleanup function that arrives afterward is invoked once.
|
package/dist/input-key.d.ts
CHANGED
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
* user objects, so a record cannot impersonate a bigint, Set, or binary value.
|
|
4
4
|
* Object keys are canonicalized; Map/Set iteration order and binary view type
|
|
5
5
|
* are preserved because the original input is passed unchanged to the engine.
|
|
6
|
+
*
|
|
7
|
+
* Values without a structural serialization never throw: class instances,
|
|
8
|
+
* functions, and other exotic objects are keyed by a stable per-instance id from
|
|
9
|
+
* a module-level WeakMap (same instance → same key on every render, different
|
|
10
|
+
* instances → different keys; the WeakMap never retains a dead instance), and
|
|
11
|
+
* symbols are keyed by `String(symbol)`, which includes the description —
|
|
12
|
+
* description-less symbols therefore share a single key bucket. Only cycles
|
|
13
|
+
* remain a TypeError. Identity-keyed inputs are not stable serialization
|
|
14
|
+
* targets, so a dev-only console.warn is emitted once per derived key.
|
|
6
15
|
*/
|
|
7
16
|
export declare function inputKey(value: unknown): string;
|
|
8
17
|
//# sourceMappingURL=input-key.d.ts.map
|
package/dist/input-key.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-key.d.ts","sourceRoot":"","sources":["../src/input-key.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"input-key.d.ts","sourceRoot":"","sources":["../src/input-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA4BH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA8E/C"}
|
package/dist/input-key.js
CHANGED
|
@@ -3,9 +3,42 @@
|
|
|
3
3
|
* user objects, so a record cannot impersonate a bigint, Set, or binary value.
|
|
4
4
|
* Object keys are canonicalized; Map/Set iteration order and binary view type
|
|
5
5
|
* are preserved because the original input is passed unchanged to the engine.
|
|
6
|
+
*
|
|
7
|
+
* Values without a structural serialization never throw: class instances,
|
|
8
|
+
* functions, and other exotic objects are keyed by a stable per-instance id from
|
|
9
|
+
* a module-level WeakMap (same instance → same key on every render, different
|
|
10
|
+
* instances → different keys; the WeakMap never retains a dead instance), and
|
|
11
|
+
* symbols are keyed by `String(symbol)`, which includes the description —
|
|
12
|
+
* description-less symbols therefore share a single key bucket. Only cycles
|
|
13
|
+
* remain a TypeError. Identity-keyed inputs are not stable serialization
|
|
14
|
+
* targets, so a dev-only console.warn is emitted once per derived key.
|
|
6
15
|
*/
|
|
16
|
+
const instanceIds = new WeakMap();
|
|
17
|
+
let nextInstanceId = 0;
|
|
18
|
+
const warnedKeys = new Set();
|
|
19
|
+
const warnedKeyLimit = 100;
|
|
20
|
+
function instanceId(item) {
|
|
21
|
+
let id = instanceIds.get(item);
|
|
22
|
+
if (id === undefined) {
|
|
23
|
+
id = String(nextInstanceId++);
|
|
24
|
+
instanceIds.set(item, id);
|
|
25
|
+
}
|
|
26
|
+
return id;
|
|
27
|
+
}
|
|
28
|
+
function warnUnstableIdentityKey(key) {
|
|
29
|
+
const env = globalThis.process?.env;
|
|
30
|
+
if (env?.NODE_ENV === 'production')
|
|
31
|
+
return;
|
|
32
|
+
// Warn once per key so re-renders do not spam; the set is capped so apps that
|
|
33
|
+
// mint throwaway instances on every render cannot grow it without bound.
|
|
34
|
+
if (warnedKeys.has(key) || warnedKeys.size >= warnedKeyLimit)
|
|
35
|
+
return;
|
|
36
|
+
warnedKeys.add(key);
|
|
37
|
+
console.warn('[rustra] command input contains a class instance, function, or symbol; it is keyed by identity and is not a stable serialization target');
|
|
38
|
+
}
|
|
7
39
|
export function inputKey(value) {
|
|
8
40
|
const ancestors = new Set();
|
|
41
|
+
let usesIdentityKey = false;
|
|
9
42
|
function encode(item) {
|
|
10
43
|
if (item === null)
|
|
11
44
|
return ['null'];
|
|
@@ -20,9 +53,13 @@ export function inputKey(value) {
|
|
|
20
53
|
return ['bigint', item.toString()];
|
|
21
54
|
case 'number':
|
|
22
55
|
return ['number', Object.is(item, -0) ? '-0' : String(item)];
|
|
23
|
-
case 'function':
|
|
24
56
|
case 'symbol':
|
|
25
|
-
|
|
57
|
+
// Includes the description; description-less symbols share a bucket.
|
|
58
|
+
usesIdentityKey = true;
|
|
59
|
+
return ['symbol', String(item)];
|
|
60
|
+
case 'function':
|
|
61
|
+
usesIdentityKey = true;
|
|
62
|
+
return ['ref', instanceId(item)];
|
|
26
63
|
}
|
|
27
64
|
if (ancestors.has(item))
|
|
28
65
|
throw new TypeError('Rustra command inputs cannot contain cycles');
|
|
@@ -48,22 +85,38 @@ export function inputKey(value) {
|
|
|
48
85
|
}
|
|
49
86
|
const prototype = Object.getPrototypeOf(item);
|
|
50
87
|
if (prototype !== Object.prototype && prototype !== null) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
throw new TypeError('Rustra command inputs cannot contain symbol keys');
|
|
88
|
+
// Class instances and host/exotic objects: identity-keyed, non-throwing.
|
|
89
|
+
usesIdentityKey = true;
|
|
90
|
+
return ['ref', instanceId(item)];
|
|
55
91
|
}
|
|
92
|
+
const entries = Object.keys(item)
|
|
93
|
+
.sort()
|
|
94
|
+
.map((key) => [key, encode(item[key])]);
|
|
95
|
+
const symbolKeys = Object.getOwnPropertySymbols(item);
|
|
96
|
+
if (symbolKeys.length === 0)
|
|
97
|
+
return ['object', entries];
|
|
98
|
+
// Symbol-keyed properties join the key via String(symbol) instead of
|
|
99
|
+
// throwing; they share the description-less bucket caveat of symbols.
|
|
100
|
+
usesIdentityKey = true;
|
|
56
101
|
return [
|
|
57
102
|
'object',
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
.map((
|
|
103
|
+
[
|
|
104
|
+
...entries,
|
|
105
|
+
...symbolKeys.map((symbol) => [
|
|
106
|
+
'symbol',
|
|
107
|
+
String(symbol),
|
|
108
|
+
encode(item[symbol]),
|
|
109
|
+
]),
|
|
110
|
+
],
|
|
61
111
|
];
|
|
62
112
|
}
|
|
63
113
|
finally {
|
|
64
114
|
ancestors.delete(item);
|
|
65
115
|
}
|
|
66
116
|
}
|
|
67
|
-
|
|
117
|
+
const key = JSON.stringify(encode(value));
|
|
118
|
+
if (usesIdentityKey)
|
|
119
|
+
warnUnstableIdentityKey(key);
|
|
120
|
+
return key;
|
|
68
121
|
}
|
|
69
122
|
//# sourceMappingURL=input-key.js.map
|
package/dist/input-key.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-key.js","sourceRoot":"","sources":["../src/input-key.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"input-key.js","sourceRoot":"","sources":["../src/input-key.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suspense-cache.d.ts","sourceRoot":"","sources":["../src/suspense-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7C,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsCD,mFAAmF;AACnF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,eAAqB,GAC1B,IAAI,CAgBN;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAWpF;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACvB,MAAM,GAAE,YAAiC,GACxC,aAAa,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"suspense-cache.d.ts","sourceRoot":"","sources":["../src/suspense-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7C,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsCD,mFAAmF;AACnF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,eAAqB,GAC1B,IAAI,CAgBN;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAWpF;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACvB,MAAM,GAAE,YAAiC,GACxC,aAAa,CAAC,CAAC,CAAC,CAqElB"}
|
package/dist/suspense-cache.js
CHANGED
|
@@ -98,20 +98,36 @@ export function resolveSuspenseEntry(key, commandName, start, engine = getDefaul
|
|
|
98
98
|
// Invalidated requests still settle for their callers but never reinsert.
|
|
99
99
|
if (cache.entries.get(key) !== record)
|
|
100
100
|
return;
|
|
101
|
+
if (record.expiry)
|
|
102
|
+
clearTimeout(record.expiry);
|
|
101
103
|
record.expiresAt = Date.now() + cache.policy.ttlMs;
|
|
102
104
|
record.expiry = setTimeout(() => remove(cache, key), cache.policy.ttlMs);
|
|
103
105
|
// Node SSR must not remain alive solely for cache retention.
|
|
104
106
|
record.expiry.unref?.();
|
|
105
107
|
}
|
|
106
|
-
|
|
107
|
-
entry.status = 'fulfilled';
|
|
108
|
-
entry.value = value;
|
|
109
|
-
settled();
|
|
110
|
-
}, (error) => {
|
|
108
|
+
function recordFailure(error) {
|
|
111
109
|
entry.status = 'rejected';
|
|
112
110
|
entry.error = error instanceof Error ? error : new Error(String(error));
|
|
113
111
|
settled();
|
|
112
|
+
}
|
|
113
|
+
// The pending timeout is only a UI-state signal, not an abandonment: the
|
|
114
|
+
// Suspense caller still observes the timeout rejection, but the entry keeps
|
|
115
|
+
// following the original in-flight invocation so its eventual result or
|
|
116
|
+
// rejection still lands in the cache — the next render then sees the real
|
|
117
|
+
// outcome without a duplicate re-invoke.
|
|
118
|
+
deadline.catch((error) => {
|
|
119
|
+
if (entry.status !== 'pending')
|
|
120
|
+
return; // the real outcome already landed
|
|
121
|
+
recordFailure(error);
|
|
114
122
|
});
|
|
123
|
+
// Callers may never attach to the raced promise; swallow its mirrored
|
|
124
|
+
// rejection here — outcomes are recorded from the source promises below.
|
|
125
|
+
promise.catch(() => { });
|
|
126
|
+
invocation.then((value) => {
|
|
127
|
+
entry.status = 'fulfilled';
|
|
128
|
+
entry.value = value;
|
|
129
|
+
settled();
|
|
130
|
+
}, recordFailure);
|
|
115
131
|
return entry;
|
|
116
132
|
}
|
|
117
133
|
//# sourceMappingURL=suspense-cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suspense-cache.js","sourceRoot":"","sources":["../src/suspense-cache.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"suspense-cache.js","sourceRoot":"","sources":["../src/suspense-cache.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rustra/react",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "React and React Native bindings and hooks for rustra-bridge",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
"react": ">=18.0.0"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@rustra/types": "^0.
|
|
33
|
+
"@rustra/types": "^0.12.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/react": "^19.0.0",
|
|
37
|
-
"react": "19.
|
|
37
|
+
"react": "19.3.0",
|
|
38
38
|
"typescript": "^5.9.0",
|
|
39
|
-
"react-dom": "19.
|
|
39
|
+
"react-dom": "19.3.0",
|
|
40
40
|
"@types/react-dom": "^19.0.0",
|
|
41
|
-
"react-test-renderer": "19.
|
|
41
|
+
"react-test-renderer": "19.3.0",
|
|
42
42
|
"@types/react-test-renderer": "^19.0.0"
|
|
43
43
|
},
|
|
44
44
|
"keywords": [
|