@assistant-ui/store 0.1.2 → 0.1.5
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/tapClientResource.d.ts.map +1 -1
- package/dist/tapClientResource.js +25 -6
- package/dist/tapClientResource.js.map +1 -1
- package/dist/useAui.d.ts.map +1 -1
- package/dist/useAui.js +10 -7
- package/dist/useAui.js.map +1 -1
- package/dist/utils/BaseProxyHandler.d.ts +1 -1
- package/dist/utils/BaseProxyHandler.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/tapClientResource.ts +31 -7
- package/src/useAui.tsx +37 -30
- package/src/utils/BaseProxyHandler.ts +1 -1
- package/dist/utils/StoreResource.d.ts +0 -14
- package/dist/utils/StoreResource.d.ts.map +0 -1
- package/dist/utils/StoreResource.js +0 -10
- package/dist/utils/StoreResource.js.map +0 -1
- package/src/utils/StoreResource.ts +0 -34
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tapClientResource.d.ts","sourceRoot":"","sources":["../src/tapClientResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,0BAAuB;AAsBpE,eAAO,MAAM,cAAc,GAAI,QAAQ,aAAa,YASnD,CAAC;
|
|
1
|
+
{"version":3,"file":"tapClientResource.d.ts","sourceRoot":"","sources":["../src/tapClientResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,0BAAuB;AAsBpE,eAAO,MAAM,cAAc,GAAI,QAAQ,aAAa,YASnD,CAAC;AAuFF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,GACxB,MAAM,EAAE,QAAQ,SAAS,aAAa;SAGhC,MAAM,GAAG,MAAM,GAAG,SAAS;qDA2BnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,EAAE,QAAQ,SAAS,aAAa,EACtE,SAAS,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SA9BnD,MAAM,GAAG,MAAM,GAAG,SAAS;CAiCnC,CAAC"}
|
|
@@ -21,9 +21,16 @@ function getOrCreateProxyFn(prop) {
|
|
|
21
21
|
let template = fieldAccessFns.get(prop);
|
|
22
22
|
if (!template) {
|
|
23
23
|
template = function (...args) {
|
|
24
|
-
if (!this)
|
|
25
|
-
throw new Error(`
|
|
26
|
-
|
|
24
|
+
if (!this || typeof this !== "object") {
|
|
25
|
+
throw new Error(`Method "${String(prop)}" called without proper context. ` +
|
|
26
|
+
`This may indicate the function was called incorrectly.`);
|
|
27
|
+
}
|
|
28
|
+
const output = this[SYMBOL_GET_OUTPUT];
|
|
29
|
+
if (!output) {
|
|
30
|
+
throw new Error(`Method "${String(prop)}" called on invalid client proxy. ` +
|
|
31
|
+
`Ensure you are calling this method on a valid client instance.`);
|
|
32
|
+
}
|
|
33
|
+
const method = output.methods[prop];
|
|
27
34
|
if (!method)
|
|
28
35
|
throw new Error(`Method "${String(prop)}" is not implemented.`);
|
|
29
36
|
if (typeof method !== "function")
|
|
@@ -37,12 +44,14 @@ function getOrCreateProxyFn(prop) {
|
|
|
37
44
|
class ClientProxyHandler extends BaseProxyHandler {
|
|
38
45
|
outputRef;
|
|
39
46
|
index;
|
|
47
|
+
boundFns;
|
|
48
|
+
cachedReceiver;
|
|
40
49
|
constructor(outputRef, index) {
|
|
41
50
|
super();
|
|
42
51
|
this.outputRef = outputRef;
|
|
43
52
|
this.index = index;
|
|
44
53
|
}
|
|
45
|
-
get(_, prop) {
|
|
54
|
+
get(_, prop, receiver) {
|
|
46
55
|
if (prop === SYMBOL_GET_OUTPUT)
|
|
47
56
|
return this.outputRef.current;
|
|
48
57
|
if (prop === SYMBOL_CLIENT_INDEX)
|
|
@@ -51,8 +60,18 @@ class ClientProxyHandler extends BaseProxyHandler {
|
|
|
51
60
|
if (introspection !== false)
|
|
52
61
|
return introspection;
|
|
53
62
|
const value = this.outputRef.current.methods[prop];
|
|
54
|
-
if (typeof value === "function")
|
|
55
|
-
|
|
63
|
+
if (typeof value === "function") {
|
|
64
|
+
if (this.cachedReceiver !== receiver) {
|
|
65
|
+
this.boundFns = new Map();
|
|
66
|
+
this.cachedReceiver = receiver;
|
|
67
|
+
}
|
|
68
|
+
let bound = this.boundFns.get(prop);
|
|
69
|
+
if (!bound) {
|
|
70
|
+
bound = getOrCreateProxyFn(prop).bind(receiver);
|
|
71
|
+
this.boundFns.set(prop, bound);
|
|
72
|
+
}
|
|
73
|
+
return bound;
|
|
74
|
+
}
|
|
56
75
|
return value;
|
|
57
76
|
}
|
|
58
77
|
ownKeys() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tapClientResource.js","sourceRoot":"","sources":["../src/tapClientResource.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,MAAM,EAEN,WAAW,EACX,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,4CAAyC;AAC1C,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,oCAAiC;AAClC,OAAO,EAAE,eAAe,EAAE,6BAA0B;AAEpD;;;GAGG;AACH,MAAM,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAMhE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAqB,EAAE,EAAE;IACtD,MAAM,MAAM,GAAI,MAAoC,CAAC,iBAAiB,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,+CAA+C;YAC7C,oGAAoG,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,oDAAoD;AACpD,MAAM,cAAc,GAAG,IAAI,GAAG,EAG3B,CAAC;AAEJ,SAAS,kBAAkB,CAAC,IAAqB;IAC/C,IAAI,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"tapClientResource.js","sourceRoot":"","sources":["../src/tapClientResource.ts"],"names":[],"mappings":"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"}
|
package/dist/useAui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAui.d.ts","sourceRoot":"","sources":["../src/useAui.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAui.d.ts","sourceRoot":"","sources":["../src/useAui.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,eAAe,EAEf,WAAW,EACX,aAAa,EAEd,0BAAuB;AACxB,OAAO,EAAW,cAAc,EAAE,qBAAkB;AA2QpD;;GAEG;AACH,eAAO,MAAM,uBAAuB;YAKxB,eAAe;aACd,MAAM,CAAC,KAAK;;YADb,eAAe;aACd,MAAM,CAAC,KAAK;EAwDxB,CAAC;AAEF,yBAAiB,MAAM,CAAC;IACtB,KAAY,KAAK,GAAG;SACjB,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;KAC1D,CAAC;CACH;AAED,wBAAgB,MAAM,IAAI,eAAe,CAAC;AAC1C,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC;AAC/D,wBAAgB,MAAM,CACpB,OAAO,EAAE,MAAM,CAAC,KAAK,EACrB,MAAM,EAAE;IAAE,MAAM,EAAE,IAAI,GAAG,eAAe,CAAA;CAAE,GACzC,eAAe,CAAC"}
|
package/dist/useAui.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useResource } from "@assistant-ui/tap/react";
|
|
3
|
-
import { resource, tapMemo, tapResources, tapEffectEvent, tapInlineResource, tapEffect, tapRef, tapResource, withKey, } from "@assistant-ui/tap";
|
|
4
|
-
import { StoreResource } from "./utils/StoreResource.js";
|
|
3
|
+
import { resource, tapMemo, tapResources, tapEffectEvent, tapInlineResource, tapEffect, tapRef, tapResource, withKey, tapSubscribableResource, } from "@assistant-ui/tap";
|
|
5
4
|
import { useAssistantContextValue, DefaultAssistantClient, createRootAssistantClient, } from "./utils/react-assistant-context.js";
|
|
6
5
|
import { tapSplitClients, } from "./utils/splitClients.js";
|
|
7
6
|
import { normalizeEventSelector, } from "./types/events.js";
|
|
@@ -10,12 +9,16 @@ import { withAssistantTapContextProvider } from "./utils/tap-assistant-context.j
|
|
|
10
9
|
import { tapClientResource } from "./tapClientResource.js";
|
|
11
10
|
import { getClientIndex } from "./utils/tap-client-stack-context.js";
|
|
12
11
|
import { PROXIED_ASSISTANT_STATE_SYMBOL, createProxiedAssistantState, } from "./utils/proxied-assistant-state.js";
|
|
12
|
+
const tapShallowMemoArray = (array) => {
|
|
13
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: shallow memo
|
|
14
|
+
return tapMemo(() => array, array);
|
|
15
|
+
};
|
|
13
16
|
const RootClientResource = resource(({ element, emit, clientRef, }) => {
|
|
14
17
|
const { methods, state } = withAssistantTapContextProvider({ clientRef, emit }, () => tapClientResource(element));
|
|
15
18
|
return tapMemo(() => ({ state, methods }), [methods, state]);
|
|
16
19
|
});
|
|
17
20
|
const RootClientAccessorResource = resource(({ element, notifications, clientRef, name, }) => {
|
|
18
|
-
const store =
|
|
21
|
+
const store = tapSubscribableResource(RootClientResource({ element, emit: notifications.emit, clientRef }));
|
|
19
22
|
tapEffect(() => {
|
|
20
23
|
return store.subscribe(notifications.notifySubscribers);
|
|
21
24
|
}, [store, notifications]);
|
|
@@ -48,12 +51,12 @@ const NoOpRootClientsAccessorsResource = resource(() => {
|
|
|
48
51
|
const RootClientsAccessorsResource = resource(({ clients: inputClients, clientRef, }) => {
|
|
49
52
|
const notifications = tapInlineResource(NotificationManager());
|
|
50
53
|
tapEffect(() => clientRef.parent.subscribe(notifications.notifySubscribers), [clientRef, notifications]);
|
|
51
|
-
const results = tapResources(() => Object.keys(inputClients).map((key) => withKey(key, RootClientAccessorResource({
|
|
54
|
+
const results = tapShallowMemoArray(tapResources(() => Object.keys(inputClients).map((key) => withKey(key, RootClientAccessorResource({
|
|
52
55
|
element: inputClients[key],
|
|
53
56
|
notifications,
|
|
54
57
|
clientRef,
|
|
55
58
|
name: key,
|
|
56
|
-
}))), [inputClients, notifications, clientRef]);
|
|
59
|
+
}))), [inputClients, notifications, clientRef]));
|
|
57
60
|
return tapMemo(() => {
|
|
58
61
|
return {
|
|
59
62
|
clients: results,
|
|
@@ -123,11 +126,11 @@ const DerivedClientAccessorResource = resource(({ element, clientRef, name, }) =
|
|
|
123
126
|
}, [clientRef, name]);
|
|
124
127
|
});
|
|
125
128
|
const DerivedClientsAccessorsResource = resource(({ clients, clientRef, }) => {
|
|
126
|
-
return tapResources(() => Object.keys(clients).map((key) => withKey(key, DerivedClientAccessorResource({
|
|
129
|
+
return tapShallowMemoArray(tapResources(() => Object.keys(clients).map((key) => withKey(key, DerivedClientAccessorResource({
|
|
127
130
|
element: clients[key],
|
|
128
131
|
clientRef,
|
|
129
132
|
name: key,
|
|
130
|
-
}))), [clients, clientRef]);
|
|
133
|
+
}))), [clients, clientRef]));
|
|
131
134
|
});
|
|
132
135
|
/**
|
|
133
136
|
* Resource that creates an extended AssistantClient.
|
package/dist/useAui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAui.js","sourceRoot":"","sources":["../src/useAui.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,MAAM,EACN,WAAW,EACX,OAAO,
|
|
1
|
+
{"version":3,"file":"useAui.js","sourceRoot":"","sources":["../src/useAui.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const handleIntrospectionProp: (prop: string | symbol, name: string) => unknown | false;
|
|
7
7
|
export declare abstract class BaseProxyHandler implements ProxyHandler<object> {
|
|
8
|
-
abstract get(_: unknown, prop: string | symbol): unknown;
|
|
8
|
+
abstract get(_: unknown, prop: string | symbol, receiver?: unknown): unknown;
|
|
9
9
|
abstract ownKeys(): ArrayLike<string | symbol>;
|
|
10
10
|
abstract has(_: unknown, prop: string | symbol): boolean;
|
|
11
11
|
getOwnPropertyDescriptor(_: unknown, prop: string | symbol): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseProxyHandler.d.ts","sourceRoot":"","sources":["../../src/utils/BaseProxyHandler.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,MAAM,MAAM,GAAG,MAAM,EACrB,MAAM,MAAM,KACX,OAAO,GAAG,KAMZ,CAAC;AAEF,8BAAsB,gBAAiB,YAAW,YAAY,CAAC,MAAM,CAAC;IACpE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"BaseProxyHandler.d.ts","sourceRoot":"","sources":["../../src/utils/BaseProxyHandler.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,MAAM,MAAM,GAAG,MAAM,EACrB,MAAM,MAAM,KACX,OAAO,GAAG,KAMZ,CAAC;AAEF,8BAAsB,gBAAiB,YAAW,YAAY,CAAC,MAAM,CAAC;IACpE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAC5E,QAAQ,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAExD,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;;;;;;IAW1D,GAAG;IAGH,cAAc;IAGd,cAAc;IAGd,cAAc;IAGd,iBAAiB,IAAI,OAAO;CAG7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/store",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Tap-based state management for @assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"state-management",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
],
|
|
29
29
|
"sideEffects": false,
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@assistant-ui/tap": "^0.4.
|
|
31
|
+
"@assistant-ui/tap": "^0.4.4",
|
|
32
32
|
"use-effect-event": "^2.0.3"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@types/react": "^19.2.
|
|
44
|
+
"@types/react": "^19.2.10",
|
|
45
45
|
"react": "^19.2.4",
|
|
46
46
|
"@assistant-ui/x-buildutils": "0.0.1"
|
|
47
47
|
},
|
package/src/tapClientResource.ts
CHANGED
|
@@ -42,19 +42,29 @@ export const getClientState = (client: ClientMethods) => {
|
|
|
42
42
|
// Global cache for function templates by field name
|
|
43
43
|
const fieldAccessFns = new Map<
|
|
44
44
|
string | symbol,
|
|
45
|
-
(this:
|
|
45
|
+
(this: unknown, ...args: unknown[]) => unknown
|
|
46
46
|
>();
|
|
47
47
|
|
|
48
48
|
function getOrCreateProxyFn(prop: string | symbol) {
|
|
49
49
|
let template = fieldAccessFns.get(prop);
|
|
50
50
|
if (!template) {
|
|
51
|
-
template = function (this:
|
|
52
|
-
if (!this)
|
|
51
|
+
template = function (this: unknown, ...args: unknown[]) {
|
|
52
|
+
if (!this || typeof this !== "object") {
|
|
53
53
|
throw new Error(
|
|
54
|
-
`
|
|
54
|
+
`Method "${String(prop)}" called without proper context. ` +
|
|
55
|
+
`This may indicate the function was called incorrectly.`,
|
|
55
56
|
);
|
|
57
|
+
}
|
|
56
58
|
|
|
57
|
-
const
|
|
59
|
+
const output = (this as ClientInternal)[SYMBOL_GET_OUTPUT];
|
|
60
|
+
if (!output) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`Method "${String(prop)}" called on invalid client proxy. ` +
|
|
63
|
+
`Ensure you are calling this method on a valid client instance.`,
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const method = output.methods[prop];
|
|
58
68
|
if (!method)
|
|
59
69
|
throw new Error(`Method "${String(prop)}" is not implemented.`);
|
|
60
70
|
if (typeof method !== "function")
|
|
@@ -70,6 +80,9 @@ class ClientProxyHandler
|
|
|
70
80
|
extends BaseProxyHandler
|
|
71
81
|
implements ProxyHandler<object>
|
|
72
82
|
{
|
|
83
|
+
private boundFns: Map<string | symbol, Function> | undefined;
|
|
84
|
+
private cachedReceiver: unknown;
|
|
85
|
+
|
|
73
86
|
constructor(
|
|
74
87
|
private readonly outputRef: {
|
|
75
88
|
current: ClientOutputOf<unknown, ClientMethods>;
|
|
@@ -79,13 +92,24 @@ class ClientProxyHandler
|
|
|
79
92
|
super();
|
|
80
93
|
}
|
|
81
94
|
|
|
82
|
-
get(_: unknown, prop: string | symbol) {
|
|
95
|
+
get(_: unknown, prop: string | symbol, receiver: unknown) {
|
|
83
96
|
if (prop === SYMBOL_GET_OUTPUT) return this.outputRef.current;
|
|
84
97
|
if (prop === SYMBOL_CLIENT_INDEX) return this.index;
|
|
85
98
|
const introspection = handleIntrospectionProp(prop, "ClientProxy");
|
|
86
99
|
if (introspection !== false) return introspection;
|
|
87
100
|
const value = this.outputRef.current.methods[prop];
|
|
88
|
-
if (typeof value === "function")
|
|
101
|
+
if (typeof value === "function") {
|
|
102
|
+
if (this.cachedReceiver !== receiver) {
|
|
103
|
+
this.boundFns = new Map();
|
|
104
|
+
this.cachedReceiver = receiver;
|
|
105
|
+
}
|
|
106
|
+
let bound = this.boundFns!.get(prop);
|
|
107
|
+
if (!bound) {
|
|
108
|
+
bound = getOrCreateProxyFn(prop).bind(receiver);
|
|
109
|
+
this.boundFns!.set(prop, bound);
|
|
110
|
+
}
|
|
111
|
+
return bound;
|
|
112
|
+
}
|
|
89
113
|
return value;
|
|
90
114
|
}
|
|
91
115
|
|
package/src/useAui.tsx
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
tapRef,
|
|
12
12
|
tapResource,
|
|
13
13
|
withKey,
|
|
14
|
+
tapSubscribableResource,
|
|
14
15
|
} from "@assistant-ui/tap";
|
|
15
16
|
import type {
|
|
16
17
|
AssistantClient,
|
|
@@ -20,7 +21,6 @@ import type {
|
|
|
20
21
|
ClientMeta,
|
|
21
22
|
} from "./types/client";
|
|
22
23
|
import { Derived, DerivedElement } from "./Derived";
|
|
23
|
-
import { StoreResource } from "./utils/StoreResource";
|
|
24
24
|
import {
|
|
25
25
|
useAssistantContextValue,
|
|
26
26
|
DefaultAssistantClient,
|
|
@@ -46,6 +46,11 @@ import {
|
|
|
46
46
|
createProxiedAssistantState,
|
|
47
47
|
} from "./utils/proxied-assistant-state";
|
|
48
48
|
|
|
49
|
+
const tapShallowMemoArray = <T,>(array: readonly T[]) => {
|
|
50
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: shallow memo
|
|
51
|
+
return tapMemo(() => array, array);
|
|
52
|
+
};
|
|
53
|
+
|
|
49
54
|
const RootClientResource = resource(
|
|
50
55
|
<K extends ClientNames>({
|
|
51
56
|
element,
|
|
@@ -76,10 +81,8 @@ const RootClientAccessorResource = resource(
|
|
|
76
81
|
clientRef: { parent: AssistantClient; current: AssistantClient | null };
|
|
77
82
|
name: K;
|
|
78
83
|
}): AssistantClientAccessor<K> => {
|
|
79
|
-
const store =
|
|
80
|
-
|
|
81
|
-
RootClientResource({ element, emit: notifications.emit, clientRef }),
|
|
82
|
-
),
|
|
84
|
+
const store = tapSubscribableResource(
|
|
85
|
+
RootClientResource({ element, emit: notifications.emit, clientRef }),
|
|
83
86
|
);
|
|
84
87
|
|
|
85
88
|
tapEffect(() => {
|
|
@@ -133,20 +136,22 @@ const RootClientsAccessorsResource = resource(
|
|
|
133
136
|
[clientRef, notifications],
|
|
134
137
|
);
|
|
135
138
|
|
|
136
|
-
const results =
|
|
137
|
-
(
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
139
|
+
const results = tapShallowMemoArray(
|
|
140
|
+
tapResources(
|
|
141
|
+
() =>
|
|
142
|
+
Object.keys(inputClients).map((key) =>
|
|
143
|
+
withKey(
|
|
144
|
+
key,
|
|
145
|
+
RootClientAccessorResource({
|
|
146
|
+
element: inputClients[key as keyof typeof inputClients]!,
|
|
147
|
+
notifications,
|
|
148
|
+
clientRef,
|
|
149
|
+
name: key as keyof typeof inputClients,
|
|
150
|
+
}),
|
|
151
|
+
),
|
|
147
152
|
),
|
|
148
|
-
|
|
149
|
-
|
|
153
|
+
[inputClients, notifications, clientRef],
|
|
154
|
+
),
|
|
150
155
|
);
|
|
151
156
|
|
|
152
157
|
return tapMemo(() => {
|
|
@@ -263,19 +268,21 @@ const DerivedClientsAccessorsResource = resource(
|
|
|
263
268
|
clients: DerivedClients;
|
|
264
269
|
clientRef: { parent: AssistantClient; current: AssistantClient | null };
|
|
265
270
|
}) => {
|
|
266
|
-
return
|
|
267
|
-
(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
271
|
+
return tapShallowMemoArray(
|
|
272
|
+
tapResources(
|
|
273
|
+
() =>
|
|
274
|
+
Object.keys(clients).map((key) =>
|
|
275
|
+
withKey(
|
|
276
|
+
key,
|
|
277
|
+
DerivedClientAccessorResource({
|
|
278
|
+
element: clients[key as keyof typeof clients]!,
|
|
279
|
+
clientRef,
|
|
280
|
+
name: key as keyof typeof clients,
|
|
281
|
+
}),
|
|
282
|
+
),
|
|
276
283
|
),
|
|
277
|
-
|
|
278
|
-
|
|
284
|
+
[clients, clientRef],
|
|
285
|
+
),
|
|
279
286
|
);
|
|
280
287
|
},
|
|
281
288
|
);
|
|
@@ -17,7 +17,7 @@ export const handleIntrospectionProp = (
|
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
export abstract class BaseProxyHandler implements ProxyHandler<object> {
|
|
20
|
-
abstract get(_: unknown, prop: string | symbol): unknown;
|
|
20
|
+
abstract get(_: unknown, prop: string | symbol, receiver?: unknown): unknown;
|
|
21
21
|
abstract ownKeys(): ArrayLike<string | symbol>;
|
|
22
22
|
abstract has(_: unknown, prop: string | symbol): boolean;
|
|
23
23
|
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ResourceElement } from "@assistant-ui/tap";
|
|
2
|
-
import { Unsubscribe } from "../types/client.js";
|
|
3
|
-
export interface Store<TState> {
|
|
4
|
-
/**
|
|
5
|
-
* Get the current state of the store.
|
|
6
|
-
*/
|
|
7
|
-
getValue(): TState;
|
|
8
|
-
/**
|
|
9
|
-
* Subscribe to the store.
|
|
10
|
-
*/
|
|
11
|
-
subscribe(listener: () => void): Unsubscribe;
|
|
12
|
-
}
|
|
13
|
-
export declare const StoreResource: <TState>(props: ResourceElement<TState>) => ResourceElement<Store<TState>, ResourceElement<TState>>;
|
|
14
|
-
//# sourceMappingURL=StoreResource.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StoreResource.d.ts","sourceRoot":"","sources":["../../src/utils/StoreResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAIhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,2BAAwB;AAE9C,MAAM,WAAW,KAAK,CAAC,MAAM;IAC3B;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;CAC9C;AAED,eAAO,MAAM,aAAa,GACvB,MAAM,4FAWR,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { tapEffect, resource, createResource, tapState, } from "@assistant-ui/tap";
|
|
2
|
-
export const StoreResource = resource((element) => {
|
|
3
|
-
const [handle] = tapState(() => createResource(element, { mount: false }));
|
|
4
|
-
tapEffect(() => handle.unmount, [handle]);
|
|
5
|
-
tapEffect(() => {
|
|
6
|
-
handle.render(element);
|
|
7
|
-
});
|
|
8
|
-
return handle;
|
|
9
|
-
});
|
|
10
|
-
//# sourceMappingURL=StoreResource.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StoreResource.js","sourceRoot":"","sources":["../../src/utils/StoreResource.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,QAAQ,EACR,cAAc,EACd,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAe3B,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CACnC,CAAS,OAAgC,EAAiB,EAAE;IAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE3E,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CACF,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
tapEffect,
|
|
3
|
-
ResourceElement,
|
|
4
|
-
resource,
|
|
5
|
-
createResource,
|
|
6
|
-
tapState,
|
|
7
|
-
} from "@assistant-ui/tap";
|
|
8
|
-
import { Unsubscribe } from "../types/client";
|
|
9
|
-
|
|
10
|
-
export interface Store<TState> {
|
|
11
|
-
/**
|
|
12
|
-
* Get the current state of the store.
|
|
13
|
-
*/
|
|
14
|
-
getValue(): TState;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Subscribe to the store.
|
|
18
|
-
*/
|
|
19
|
-
subscribe(listener: () => void): Unsubscribe;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export const StoreResource = resource(
|
|
23
|
-
<TState>(element: ResourceElement<TState>): Store<TState> => {
|
|
24
|
-
const [handle] = tapState(() => createResource(element, { mount: false }));
|
|
25
|
-
|
|
26
|
-
tapEffect(() => handle.unmount, [handle]);
|
|
27
|
-
|
|
28
|
-
tapEffect(() => {
|
|
29
|
-
handle.render(element);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
return handle;
|
|
33
|
-
},
|
|
34
|
-
);
|