@assistant-ui/store 0.1.6 → 0.2.1
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.md +9 -10
- package/dist/AuiIf.d.ts.map +1 -1
- package/dist/AuiIf.js.map +1 -1
- package/dist/attachTransformScopes.d.ts +11 -0
- package/dist/attachTransformScopes.d.ts.map +1 -0
- package/dist/attachTransformScopes.js +12 -0
- package/dist/attachTransformScopes.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/tapClientList.d.ts +9 -5
- package/dist/tapClientList.d.ts.map +1 -1
- package/dist/tapClientList.js.map +1 -1
- package/dist/tapClientLookup.d.ts +7 -3
- package/dist/tapClientLookup.d.ts.map +1 -1
- package/dist/tapClientLookup.js +2 -2
- package/dist/tapClientLookup.js.map +1 -1
- package/dist/tapClientResource.d.ts +9 -24
- package/dist/tapClientResource.d.ts.map +1 -1
- package/dist/tapClientResource.js +11 -19
- package/dist/tapClientResource.js.map +1 -1
- package/dist/types/client.d.ts +23 -27
- package/dist/types/client.d.ts.map +1 -1
- package/dist/useAui.d.ts.map +1 -1
- package/dist/useAui.js +4 -4
- package/dist/useAui.js.map +1 -1
- package/dist/useAuiState.d.ts +1 -1
- package/dist/useAuiState.d.ts.map +1 -1
- package/dist/useAuiState.js +1 -1
- package/dist/useAuiState.js.map +1 -1
- package/dist/utils/proxied-assistant-state.d.ts.map +1 -1
- package/dist/utils/proxied-assistant-state.js.map +1 -1
- package/dist/utils/splitClients.d.ts.map +1 -1
- package/dist/utils/splitClients.js +25 -55
- package/dist/utils/splitClients.js.map +1 -1
- package/package.json +11 -4
- package/src/__tests__/hooks.test.tsx +126 -0
- package/src/attachTransformScopes.ts +38 -0
- package/src/index.ts +18 -9
- package/src/tapClientList.ts +13 -10
- package/src/tapClientLookup.ts +17 -14
- package/src/tapClientResource.ts +36 -31
- package/src/types/client.ts +41 -47
- package/src/{useAui.tsx → useAui.ts} +5 -6
- package/src/{useAuiState.tsx → useAuiState.ts} +2 -2
- package/src/utils/splitClients.ts +32 -82
- package/dist/attachDefaultPeers.d.ts +0 -56
- package/dist/attachDefaultPeers.d.ts.map +0 -1
- package/dist/attachDefaultPeers.js +0 -51
- package/dist/attachDefaultPeers.js.map +0 -1
- package/src/attachDefaultPeers.ts +0 -78
- /package/src/{AuiIf.tsx → AuiIf.ts} +0 -0
- /package/src/utils/{proxied-assistant-state.tsx → proxied-assistant-state.ts} +0 -0
package/README.md
CHANGED
|
@@ -10,15 +10,15 @@ import { useAui, useAuiState, AuiProvider, type ClientOutput } from "@assistant-
|
|
|
10
10
|
|
|
11
11
|
// 1. Define client type
|
|
12
12
|
declare module "@assistant-ui/store" {
|
|
13
|
-
interface
|
|
14
|
-
counter: {
|
|
13
|
+
interface ScopeRegistry {
|
|
14
|
+
counter: { methods: { getState: () => { count: number }; increment: () => void } };
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
// 2. Create resource
|
|
19
19
|
const CounterClient = resource((): ClientOutput<"counter"> => {
|
|
20
20
|
const [state, setState] = tapState({ count: 0 });
|
|
21
|
-
return { state,
|
|
21
|
+
return { getState: () => state, increment: () => setState({ count: state.count + 1 }) };
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
// 3. Use in React
|
|
@@ -28,7 +28,7 @@ function App() {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function Counter() {
|
|
31
|
-
const count = useAuiState((
|
|
31
|
+
const count = useAuiState((s) => s.counter.count);
|
|
32
32
|
const aui = useAui();
|
|
33
33
|
return <button onClick={() => aui.counter().increment()}>{count}</button>;
|
|
34
34
|
}
|
|
@@ -39,10 +39,9 @@ function Counter() {
|
|
|
39
39
|
**Clients**: Named state containers registered via module augmentation.
|
|
40
40
|
```typescript
|
|
41
41
|
declare module "@assistant-ui/store" {
|
|
42
|
-
interface
|
|
42
|
+
interface ScopeRegistry {
|
|
43
43
|
myClient: {
|
|
44
|
-
|
|
45
|
-
methods: MyMethods;
|
|
44
|
+
methods: MyMethods; // must include getState(): MyState
|
|
46
45
|
meta?: { source: "parent"; query: { id: string } };
|
|
47
46
|
events?: { "myClient.updated": { id: string } };
|
|
48
47
|
};
|
|
@@ -83,10 +82,10 @@ useAuiEvent("myClient.updated", (p) => console.log(p.id));
|
|
|
83
82
|
| `tapClientResource(element)` | Wrap resource for event scoping (1:1 mappings) |
|
|
84
83
|
| `tapClientLookup(map, fn, deps)` | Lookup by `{index}` or `{key}` |
|
|
85
84
|
| `tapClientList(config)` | Dynamic list with add/remove |
|
|
86
|
-
| `
|
|
85
|
+
| `attachTransformScopes(resource, fn)` | Attach scope transform |
|
|
87
86
|
|
|
88
87
|
| Type | Description |
|
|
89
88
|
|------|-------------|
|
|
90
|
-
| `ClientOutput<K>` | Resource return type
|
|
91
|
-
| `
|
|
89
|
+
| `ClientOutput<K>` | Resource return type (methods object) |
|
|
90
|
+
| `ScopeRegistry` | Module augmentation interface |
|
|
92
91
|
| `AssistantClient` | Full client type |
|
package/dist/AuiIf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuiIf.d.ts","sourceRoot":"","sources":["../src/AuiIf.
|
|
1
|
+
{"version":3,"file":"AuiIf.d.ts","sourceRoot":"","sources":["../src/AuiIf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,0BAAuB;AAErD,yBAAiB,KAAK,CAAC;IACrB,KAAY,KAAK,GAAG,iBAAiB,CAAC;QAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;IACtE,KAAY,SAAS,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;CAC5D;AAED,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAGjC,CAAC"}
|
package/dist/AuiIf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuiIf.js","sourceRoot":"","sources":["../src/AuiIf.
|
|
1
|
+
{"version":3,"file":"AuiIf.js","sourceRoot":"","sources":["../src/AuiIf.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAQ5C,MAAM,CAAC,MAAM,KAAK,GAAoB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC,CAAC;AAEF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ResourceElement } from "@assistant-ui/tap";
|
|
2
|
+
import type { AssistantClient, ClientElement, ClientNames } from "./types/client.js";
|
|
3
|
+
import type { DerivedElement } from "./Derived.js";
|
|
4
|
+
export type ScopesConfig = {
|
|
5
|
+
[K in ClientNames]?: ClientElement<K> | DerivedElement<K>;
|
|
6
|
+
};
|
|
7
|
+
type TransformScopesFn = (scopes: ScopesConfig, parent: AssistantClient) => ScopesConfig;
|
|
8
|
+
export declare function attachTransformScopes<T extends (...args: any[]) => ResourceElement<any>>(resource: T, transform: TransformScopesFn): void;
|
|
9
|
+
export declare function getTransformScopes<T extends (...args: any[]) => ResourceElement<any>>(resource: T): TransformScopesFn | undefined;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=attachTransformScopes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachTransformScopes.d.ts","sourceRoot":"","sources":["../src/attachTransformScopes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACZ,0BAAuB;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAkB;AAIhD,MAAM,MAAM,YAAY,GAAG;KACxB,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,KAAK,iBAAiB,GAAG,CACvB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,eAAe,KACpB,YAAY,CAAC;AAMlB,wBAAgB,qBAAqB,CACnC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,eAAe,CAAC,GAAG,CAAC,EAClD,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAMjD;AAED,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,eAAe,CAAC,GAAG,CAAC,EAClD,QAAQ,EAAE,CAAC,GAAG,iBAAiB,GAAG,SAAS,CAE5C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const TRANSFORM_SCOPES = Symbol("assistant-ui.transform-scopes");
|
|
2
|
+
export function attachTransformScopes(resource, transform) {
|
|
3
|
+
const r = resource;
|
|
4
|
+
if (r[TRANSFORM_SCOPES]) {
|
|
5
|
+
throw new Error("transformScopes is already attached to this resource");
|
|
6
|
+
}
|
|
7
|
+
r[TRANSFORM_SCOPES] = transform;
|
|
8
|
+
}
|
|
9
|
+
export function getTransformScopes(resource) {
|
|
10
|
+
return resource[TRANSFORM_SCOPES];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=attachTransformScopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachTransformScopes.js","sourceRoot":"","sources":["../src/attachTransformScopes.ts"],"names":[],"mappings":"AAQA,MAAM,gBAAgB,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAejE,MAAM,UAAU,qBAAqB,CAEnC,QAAW,EAAE,SAA4B;IACzC,MAAM,CAAC,GAAG,QAA2C,CAAC;IACtD,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,CAAC,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAEhC,QAAW;IACX,OAAQ,QAA4C,CAAC,gBAAgB,CAAC,CAAC;AACzE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,12 +4,12 @@ export { useAuiEvent } from "./useAuiEvent.js";
|
|
|
4
4
|
export { AuiIf } from "./AuiIf.js";
|
|
5
5
|
export { AuiProvider } from "./utils/react-assistant-context.js";
|
|
6
6
|
export { Derived } from "./Derived.js";
|
|
7
|
-
export {
|
|
7
|
+
export { attachTransformScopes } from "./attachTransformScopes.js";
|
|
8
|
+
export type { ScopesConfig } from "./attachTransformScopes.js";
|
|
8
9
|
export { tapAssistantClientRef, tapAssistantEmit, } from "./utils/tap-assistant-context.js";
|
|
9
10
|
export { tapClientResource } from "./tapClientResource.js";
|
|
10
11
|
export { tapClientLookup } from "./tapClientLookup.js";
|
|
11
12
|
export { tapClientList } from "./tapClientList.js";
|
|
12
|
-
export type {
|
|
13
|
-
export type
|
|
14
|
-
export type { DefaultPeers } from "./attachDefaultPeers.js";
|
|
13
|
+
export type { ScopeRegistry, ClientOutput, ClientMethods, ClientSchema, ClientNames, ClientEvents, ClientMeta, ClientElement, Unsubscribe, AssistantClientAccessor, AssistantClient, AssistantState, } from "./types/client.js";
|
|
14
|
+
export { normalizeEventSelector, type AssistantEventName, type AssistantEventCallback, type AssistantEventPayload, type AssistantEventSelector, type AssistantEventScope, } from "./types/events.js";
|
|
15
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,oBAAiB;AAClC,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAG5C,OAAO,EAAE,KAAK,EAAE,mBAAgB;AAChC,OAAO,EAAE,WAAW,EAAE,2CAAwC;AAG9D,OAAO,EAAE,OAAO,EAAE,qBAAkB;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,oBAAiB;AAClC,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAG5C,OAAO,EAAE,KAAK,EAAE,mBAAgB;AAChC,OAAO,EAAE,WAAW,EAAE,2CAAwC;AAG9D,OAAO,EAAE,OAAO,EAAE,qBAAkB;AACpC,OAAO,EAAE,qBAAqB,EAAE,mCAAgC;AAChE,YAAY,EAAE,YAAY,EAAE,mCAAgC;AAG5D,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,yCAAsC;AACvC,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AACxD,OAAO,EAAE,eAAe,EAAE,6BAA0B;AACpD,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAGhD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,WAAW,EACX,uBAAuB,EACvB,eAAe,EACf,cAAc,GACf,0BAAuB;AACxB,OAAO,EACL,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,0BAAuB"}
|
package/dist/index.js
CHANGED
|
@@ -7,10 +7,11 @@ export { AuiIf } from "./AuiIf.js";
|
|
|
7
7
|
export { AuiProvider } from "./utils/react-assistant-context.js";
|
|
8
8
|
// resources
|
|
9
9
|
export { Derived } from "./Derived.js";
|
|
10
|
-
export {
|
|
10
|
+
export { attachTransformScopes } from "./attachTransformScopes.js";
|
|
11
11
|
// tap hooks
|
|
12
12
|
export { tapAssistantClientRef, tapAssistantEmit, } from "./utils/tap-assistant-context.js";
|
|
13
13
|
export { tapClientResource } from "./tapClientResource.js";
|
|
14
14
|
export { tapClientLookup } from "./tapClientLookup.js";
|
|
15
15
|
export { tapClientList } from "./tapClientList.js";
|
|
16
|
+
export { normalizeEventSelector, } from "./types/events.js";
|
|
16
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,OAAO,EAAE,MAAM,EAAE,oBAAiB;AAClC,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAE5C,aAAa;AACb,OAAO,EAAE,KAAK,EAAE,mBAAgB;AAChC,OAAO,EAAE,WAAW,EAAE,2CAAwC;AAE9D,YAAY;AACZ,OAAO,EAAE,OAAO,EAAE,qBAAkB;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,OAAO,EAAE,MAAM,EAAE,oBAAiB;AAClC,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAE5C,aAAa;AACb,OAAO,EAAE,KAAK,EAAE,mBAAgB;AAChC,OAAO,EAAE,WAAW,EAAE,2CAAwC;AAE9D,YAAY;AACZ,OAAO,EAAE,OAAO,EAAE,qBAAkB;AACpC,OAAO,EAAE,qBAAqB,EAAE,mCAAgC;AAGhE,YAAY;AACZ,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,yCAAsC;AACvC,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AACxD,OAAO,EAAE,eAAe,EAAE,6BAA0B;AACpD,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAiBhD,OAAO,EACL,sBAAsB,GAMvB,0BAAuB"}
|
package/dist/tapClientList.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ContravariantResource } from "@assistant-ui/tap";
|
|
2
|
-
import type { ClientMethods
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import type { ClientMethods } from "./types/client.js";
|
|
3
|
+
type InferClientState<TMethods> = TMethods extends {
|
|
4
|
+
getState: () => infer S;
|
|
5
|
+
} ? S : unknown;
|
|
6
|
+
export declare const tapClientList: <TData, TMethods extends ClientMethods>(props: tapClientList.Props<TData, TMethods>) => {
|
|
7
|
+
state: InferClientState<TMethods>[];
|
|
5
8
|
get: (lookup: {
|
|
6
9
|
index: number;
|
|
7
10
|
} | {
|
|
@@ -15,10 +18,11 @@ export declare namespace tapClientList {
|
|
|
15
18
|
getInitialData: () => TData;
|
|
16
19
|
remove: () => void;
|
|
17
20
|
};
|
|
18
|
-
type Props<TData,
|
|
21
|
+
type Props<TData, TMethods extends ClientMethods> = {
|
|
19
22
|
initialValues: TData[];
|
|
20
23
|
getKey: (data: TData) => string;
|
|
21
|
-
resource: ContravariantResource<
|
|
24
|
+
resource: ContravariantResource<TMethods, ResourceProps<TData>>;
|
|
22
25
|
};
|
|
23
26
|
}
|
|
27
|
+
export {};
|
|
24
28
|
//# sourceMappingURL=tapClientList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tapClientList.d.ts","sourceRoot":"","sources":["../src/tapClientList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"tapClientList.d.ts","sourceRoot":"","sources":["../src/tapClientList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,0BAAuB;AAEpD,KAAK,gBAAgB,CAAC,QAAQ,IAAI,QAAQ,SAAS;IACjD,QAAQ,EAAE,MAAM,MAAM,CAAC,CAAC;CACzB,GACG,CAAC,GACD,OAAO,CAAC;AAuBZ,eAAO,MAAM,aAAa,GAAI,KAAK,EAAE,QAAQ,SAAS,aAAa,EACjE,OAAO,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAC1C;IACD,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpC,GAAG,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,QAAQ,CAAC;IAC/D,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC;CAqEnC,CAAC;AAEF,yBAAiB,aAAa,CAAC;IAC7B,KAAY,aAAa,CAAC,KAAK,IAAI;QACjC,GAAG,EAAE,MAAM,CAAC;QACZ,cAAc,EAAE,MAAM,KAAK,CAAC;QAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;KACpB,CAAC;IAEF,KAAY,KAAK,CAAC,KAAK,EAAE,QAAQ,SAAS,aAAa,IAAI;QACzD,aAAa,EAAE,KAAK,EAAE,CAAC;QACvB,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC;QAChC,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACjE,CAAC;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tapClientList.js","sourceRoot":"","sources":["../src/tapClientList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,6BAA0B;
|
|
1
|
+
{"version":3,"file":"tapClientList.js","sourceRoot":"","sources":["../src/tapClientList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,6BAA0B;AAWpD,MAAM,WAAW,GAAG,CAClB,GAAW,EACX,IAAuB,EACvB,MAAkB,EACkB,EAAE;IACtC,OAAO;QACL,GAAG;QACH,cAAc,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,IAAK,CAAC;QACpB,CAAC;QACD,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAA2C,EAK3C,EAAE;IACF,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAI5D,MAAM,kBAAkB,GAAwB,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAwB,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG;gBACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;oBAC5B,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;wBACjB,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;wBAC9B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;wBACrB,OAAO,QAAQ,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;aACH,CAAC,CAAC;YACH,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,eAAe,CAC5B,GAAG,EAAE,CACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAC1E,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;QACxB,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,CAAC,IAAW,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,sBAAsB,CAC1D,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACvC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhC,OAAO;gBACL,GAAG,KAAK;gBACR,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;oBACnC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;wBACjB,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;wBAC9B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;wBACrB,OAAO,QAAQ,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;aACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG;KACJ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { type ResourceElement } from "@assistant-ui/tap";
|
|
2
|
-
import type { ClientMethods
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import type { ClientMethods } from "./types/client.js";
|
|
3
|
+
type InferClientState<TMethods> = TMethods extends {
|
|
4
|
+
getState: () => infer S;
|
|
5
|
+
} ? S : unknown;
|
|
6
|
+
export declare function tapClientLookup<TMethods extends ClientMethods>(getElements: () => readonly ResourceElement<TMethods>[], getElementsDeps: readonly unknown[]): {
|
|
7
|
+
state: InferClientState<TMethods>[];
|
|
5
8
|
get: (lookup: {
|
|
6
9
|
index: number;
|
|
7
10
|
} | {
|
|
8
11
|
key: string;
|
|
9
12
|
}) => TMethods;
|
|
10
13
|
};
|
|
14
|
+
export {};
|
|
11
15
|
//# sourceMappingURL=tapClientLookup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tapClientLookup.d.ts","sourceRoot":"","sources":["../src/tapClientLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"tapClientLookup.d.ts","sourceRoot":"","sources":["../src/tapClientLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,0BAAuB;AAIpD,KAAK,gBAAgB,CAAC,QAAQ,IAAI,QAAQ,SAAS;IACjD,QAAQ,EAAE,MAAM,MAAM,CAAC,CAAC;CACzB,GACG,CAAC,GACD,OAAO,CAAC;AAeZ,wBAAgB,eAAe,CAAC,QAAQ,SAAS,aAAa,EAC5D,WAAW,EAAE,MAAM,SAAS,eAAe,CAAC,QAAQ,CAAC,EAAE,EACvD,eAAe,EAAE,SAAS,OAAO,EAAE,GAClC;IACD,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpC,GAAG,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,QAAQ,CAAC;CAChE,CA2CA"}
|
package/dist/tapClientLookup.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { tapMemo, tapResource, tapResources, } from "@assistant-ui/tap";
|
|
2
2
|
import { ClientResource } from "./tapClientResource.js";
|
|
3
3
|
import { wrapperResource } from "./wrapperResource.js";
|
|
4
4
|
const ClientResourceWithKey = wrapperResource((el) => {
|
|
5
5
|
if (el.key === undefined) {
|
|
6
6
|
throw new Error("tapClientResource: Element has no key");
|
|
7
7
|
}
|
|
8
|
-
return
|
|
8
|
+
return tapResource(ClientResource(el));
|
|
9
9
|
});
|
|
10
10
|
export function tapClientLookup(getElements, getElementsDeps) {
|
|
11
11
|
const resources = tapResources(() => getElements().map((el) => ClientResourceWithKey(el)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tapClientLookup.js","sourceRoot":"","sources":["../src/tapClientLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"tapClientLookup.js","sourceRoot":"","sources":["../src/tapClientLookup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,GAEb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAE,+BAA4B;AACrD,OAAO,EAAE,eAAe,EAAE,6BAA0B;AAQpD,MAAM,qBAAqB,GAAG,eAAe,CAC3C,CAAiC,EAA6B,EAAE,EAAE;IAChE,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAIpC,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,UAAU,eAAe,CAC7B,WAAuD,EACvD,eAAmC;IAKnC,MAAM,SAAS,GAAG,YAAY,CAC5B,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1D,yGAAyG;IACzG,eAAe,CAChB,CAAC;IAEF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhE,iDAAiD;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,OAAO,SAAS,CAAC,MAAM,CACrB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;YACvB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA4B,CAC7B,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO;QACL,KAAK;QACL,GAAG,EAAE,CAAC,MAA2C,EAAE,EAAE;YACnD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,CAAC,KAAK,2BAA2B,IAAI,CAAC,MAAM,GAAG,CAChF,CAAC;gBACJ,CAAC;gBACD,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC;YAC1C,CAAC;YAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,SAAS,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,28 +1,13 @@
|
|
|
1
1
|
import { type ResourceElement } from "@assistant-ui/tap";
|
|
2
|
-
import type { ClientMethods
|
|
3
|
-
export declare const getClientState: (client: ClientMethods) =>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
* Use this for 1:1 client mappings where you want event scoping to work correctly.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* const MessageResource = resource(({ messageId }: { messageId: string }) => {
|
|
16
|
-
* return tapInlineResource(
|
|
17
|
-
* tapClientResource(InnerMessageResource({ messageId }))
|
|
18
|
-
* );
|
|
19
|
-
* });
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
export declare const ClientResource: <TState, TMethods extends ClientMethods>(props: ResourceElement<ClientOutputOf<TState, TMethods>>) => ResourceElement<ClientOutputOf<TState, TMethods> & {
|
|
23
|
-
key: string | number | undefined;
|
|
24
|
-
}, ResourceElement<ClientOutputOf<TState, TMethods>>>;
|
|
25
|
-
export declare const tapClientResource: <TState, TMethods extends ClientMethods>(element: ResourceElement<ClientOutputOf<TState, TMethods>>) => ClientOutputOf<TState, TMethods> & {
|
|
2
|
+
import type { ClientMethods } from "./types/client.js";
|
|
3
|
+
export declare const getClientState: (client: ClientMethods) => any;
|
|
4
|
+
type InferClientState<TMethods> = TMethods extends {
|
|
5
|
+
getState: () => infer S;
|
|
6
|
+
} ? S : undefined;
|
|
7
|
+
export declare const tapClientResource: <TMethods extends ClientMethods>(element: ResourceElement<TMethods>) => {
|
|
8
|
+
state: InferClientState<TMethods>;
|
|
9
|
+
methods: TMethods;
|
|
26
10
|
key: string | number | undefined;
|
|
27
11
|
};
|
|
12
|
+
export {};
|
|
28
13
|
//# sourceMappingURL=tapClientResource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tapClientResource.d.ts","sourceRoot":"","sources":["../src/tapClientResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"tapClientResource.d.ts","sourceRoot":"","sources":["../src/tapClientResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,0BAAuB;AAsBpD,eAAO,MAAM,cAAc,GAAI,QAAQ,aAAa,QASnD,CAAC;AAkIF,KAAK,gBAAgB,CAAC,QAAQ,IAAI,QAAQ,SAAS;IACjD,QAAQ,EAAE,MAAM,MAAM,CAAC,CAAC;CACzB,GACG,CAAC,GACD,SAAS,CAAC;AAEd,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,aAAa,EAC9D,SAAS,eAAe,CAAC,QAAQ,CAAC,KACjC;IACD,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,EAAE,QAAQ,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAOlC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { tapEffect, tapMemo, tapRef, tapResource,
|
|
1
|
+
import { tapEffect, tapMemo, tapRef, tapResource, } from "@assistant-ui/tap";
|
|
2
2
|
import { tapClientStack, tapWithClientStack, SYMBOL_CLIENT_INDEX, } from "./utils/tap-client-stack-context.js";
|
|
3
3
|
import { BaseProxyHandler, handleIntrospectionProp, } from "./utils/BaseProxyHandler.js";
|
|
4
4
|
import { wrapperResource } from "./wrapperResource.js";
|
|
@@ -13,7 +13,7 @@ export const getClientState = (client) => {
|
|
|
13
13
|
throw new Error("Client scope contains a non-client resource. " +
|
|
14
14
|
"Ensure your Derived get() returns a client created with tapClientResource(), not a plain resource.");
|
|
15
15
|
}
|
|
16
|
-
return output.
|
|
16
|
+
return output.getState?.();
|
|
17
17
|
};
|
|
18
18
|
// Global cache for function templates by field name
|
|
19
19
|
const fieldAccessFns = new Map();
|
|
@@ -30,7 +30,7 @@ function getOrCreateProxyFn(prop) {
|
|
|
30
30
|
throw new Error(`Method "${String(prop)}" called on invalid client proxy. ` +
|
|
31
31
|
`Ensure you are calling this method on a valid client instance.`);
|
|
32
32
|
}
|
|
33
|
-
const method = output
|
|
33
|
+
const method = output[prop];
|
|
34
34
|
if (!method)
|
|
35
35
|
throw new Error(`Method "${String(prop)}" is not implemented.`);
|
|
36
36
|
if (typeof method !== "function")
|
|
@@ -59,7 +59,7 @@ class ClientProxyHandler extends BaseProxyHandler {
|
|
|
59
59
|
const introspection = handleIntrospectionProp(prop, "ClientProxy");
|
|
60
60
|
if (introspection !== false)
|
|
61
61
|
return introspection;
|
|
62
|
-
const value = this.outputRef.current
|
|
62
|
+
const value = this.outputRef.current[prop];
|
|
63
63
|
if (typeof value === "function") {
|
|
64
64
|
if (this.cachedReceiver !== receiver) {
|
|
65
65
|
this.boundFns = new Map();
|
|
@@ -75,33 +75,24 @@ class ClientProxyHandler extends BaseProxyHandler {
|
|
|
75
75
|
return value;
|
|
76
76
|
}
|
|
77
77
|
ownKeys() {
|
|
78
|
-
return Object.keys(this.outputRef.current
|
|
78
|
+
return Object.keys(this.outputRef.current);
|
|
79
79
|
}
|
|
80
80
|
has(_, prop) {
|
|
81
81
|
if (prop === SYMBOL_GET_OUTPUT)
|
|
82
82
|
return true;
|
|
83
83
|
if (prop === SYMBOL_CLIENT_INDEX)
|
|
84
84
|
return true;
|
|
85
|
-
return prop in this.outputRef.current
|
|
85
|
+
return prop in this.outputRef.current;
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* Resource that wraps a plain resource element to create a stable client proxy.
|
|
90
90
|
*
|
|
91
|
-
* Takes a ResourceElement that returns
|
|
91
|
+
* Takes a ResourceElement that returns methods (with optional getState()) and
|
|
92
92
|
* wraps it to produce a stable client proxy. This adds the client to the
|
|
93
93
|
* client stack, enabling event scoping.
|
|
94
94
|
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* @example
|
|
98
|
-
* ```typescript
|
|
99
|
-
* const MessageResource = resource(({ messageId }: { messageId: string }) => {
|
|
100
|
-
* return tapInlineResource(
|
|
101
|
-
* tapClientResource(InnerMessageResource({ messageId }))
|
|
102
|
-
* );
|
|
103
|
-
* });
|
|
104
|
-
* ```
|
|
95
|
+
* @internal
|
|
105
96
|
*/
|
|
106
97
|
export const ClientResource = wrapperResource((element) => {
|
|
107
98
|
const valueRef = tapRef(null);
|
|
@@ -114,9 +105,10 @@ export const ClientResource = wrapperResource((element) => {
|
|
|
114
105
|
tapEffect(() => {
|
|
115
106
|
valueRef.current = value;
|
|
116
107
|
});
|
|
117
|
-
|
|
108
|
+
const state = value.getState?.();
|
|
109
|
+
return { methods, state, key: element.key };
|
|
118
110
|
});
|
|
119
111
|
export const tapClientResource = (element) => {
|
|
120
|
-
return
|
|
112
|
+
return tapResource(ClientResource(element));
|
|
121
113
|
};
|
|
122
114
|
//# sourceMappingURL=tapClientResource.js.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"tapClientResource.js","sourceRoot":"","sources":["../src/tapClientResource.ts"],"names":[],"mappings":"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"}
|
package/dist/types/client.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { AssistantEventName, AssistantEventCallback, AssistantEventSelector
|
|
|
4
4
|
* Base type for methods that can be called on a client.
|
|
5
5
|
*/
|
|
6
6
|
export interface ClientMethods {
|
|
7
|
-
[key: string | symbol]: (
|
|
7
|
+
[key: string | symbol]: (...args: any[]) => any;
|
|
8
8
|
}
|
|
9
9
|
type ClientMetaType = {
|
|
10
10
|
source: ClientNames;
|
|
@@ -16,16 +16,20 @@ type ClientMetaType = {
|
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
18
|
* declare module "@assistant-ui/store" {
|
|
19
|
-
* interface
|
|
19
|
+
* interface ScopeRegistry {
|
|
20
20
|
* // Simple client (meta and events are optional)
|
|
21
21
|
* foo: {
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* methods: {
|
|
23
|
+
* getState: () => { bar: string };
|
|
24
|
+
* updateBar: (bar: string) => void;
|
|
25
|
+
* };
|
|
24
26
|
* };
|
|
25
27
|
* // Full client with meta and events
|
|
26
28
|
* bar: {
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
+
* methods: {
|
|
30
|
+
* getState: () => { id: string };
|
|
31
|
+
* update: () => void;
|
|
32
|
+
* };
|
|
29
33
|
* meta: { source: "fooList"; query: { index: number } };
|
|
30
34
|
* events: {
|
|
31
35
|
* "bar.updated": { id: string };
|
|
@@ -35,11 +39,10 @@ type ClientMetaType = {
|
|
|
35
39
|
* }
|
|
36
40
|
* ```
|
|
37
41
|
*/
|
|
38
|
-
export interface
|
|
42
|
+
export interface ScopeRegistry {
|
|
39
43
|
}
|
|
40
44
|
type ClientEventsType<K extends ClientNames> = Record<`${K}.${string}`, unknown>;
|
|
41
45
|
type ClientError<E extends string> = {
|
|
42
|
-
state: E;
|
|
43
46
|
methods: Record<E, () => E>;
|
|
44
47
|
meta: {
|
|
45
48
|
source: ClientNames;
|
|
@@ -47,38 +50,29 @@ type ClientError<E extends string> = {
|
|
|
47
50
|
};
|
|
48
51
|
events: Record<`${E}.`, E>;
|
|
49
52
|
};
|
|
50
|
-
type ValidateClient<K extends keyof
|
|
53
|
+
type ValidateClient<K extends keyof ScopeRegistry> = ScopeRegistry[K] extends {
|
|
51
54
|
methods: ClientMethods;
|
|
52
|
-
} ? "meta" extends keyof
|
|
53
|
-
type ClientSchemas = keyof
|
|
55
|
+
} ? "meta" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["meta"] extends ClientMetaType ? "events" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["events"] extends ClientEventsType<K> ? ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid events type`> : ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid meta type`> : "events" extends keyof ScopeRegistry[K] ? ScopeRegistry[K]["events"] extends ClientEventsType<K> ? ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid events type`> : ScopeRegistry[K] : ClientError<`ERROR: ${K & string} has invalid methods type`>;
|
|
56
|
+
type ClientSchemas = keyof ScopeRegistry extends never ? {
|
|
54
57
|
"ERROR: No clients were defined": ClientError<"ERROR: No clients were defined">;
|
|
55
58
|
} : {
|
|
56
|
-
[K in keyof
|
|
59
|
+
[K in keyof ScopeRegistry]: ValidateClient<K>;
|
|
57
60
|
};
|
|
58
61
|
/**
|
|
59
|
-
* Output type that client resources return
|
|
62
|
+
* Output type that client resources return (just methods).
|
|
60
63
|
*
|
|
61
64
|
* @example
|
|
62
65
|
* ```typescript
|
|
63
66
|
* const FooResource = resource((): ClientResourceOutput<"foo"> => {
|
|
64
67
|
* const [state, setState] = tapState({ bar: "hello" });
|
|
65
68
|
* return {
|
|
66
|
-
* state,
|
|
67
|
-
*
|
|
68
|
-
* updateBar: (b) => setState({ bar: b })
|
|
69
|
-
* }
|
|
69
|
+
* getState: () => state,
|
|
70
|
+
* updateBar: (b) => setState({ bar: b }),
|
|
70
71
|
* };
|
|
71
72
|
* });
|
|
72
73
|
* ```
|
|
73
74
|
*/
|
|
74
|
-
export type ClientOutput<K extends ClientNames> =
|
|
75
|
-
/**
|
|
76
|
-
* Generic version of ClientResourceOutput for library code.
|
|
77
|
-
*/
|
|
78
|
-
export type ClientOutputOf<TState, TMethods extends ClientMethods> = {
|
|
79
|
-
state: TState;
|
|
80
|
-
methods: TMethods;
|
|
81
|
-
};
|
|
75
|
+
export type ClientOutput<K extends ClientNames> = ClientSchemas[K]["methods"] & ClientMethods;
|
|
82
76
|
export type ClientNames = keyof ClientSchemas extends infer U ? U : never;
|
|
83
77
|
export type ClientEvents<K extends ClientNames> = "events" extends keyof ClientSchemas[K] ? ClientSchemas[K]["events"] extends ClientEventsType<K> ? ClientSchemas[K]["events"] : never : never;
|
|
84
78
|
export type ClientMeta<K extends ClientNames> = "meta" extends keyof ClientSchemas[K] ? Pick<ClientSchemas[K]["meta"] extends ClientMetaType ? ClientSchemas[K]["meta"] : never, "source" | "query"> : never;
|
|
@@ -88,10 +82,12 @@ export type ClientElement<K extends ClientNames> = ResourceElement<ClientOutput<
|
|
|
88
82
|
*/
|
|
89
83
|
export type Unsubscribe = () => void;
|
|
90
84
|
/**
|
|
91
|
-
* State type extracted from all clients.
|
|
85
|
+
* State type extracted from all clients via their getState() methods.
|
|
92
86
|
*/
|
|
93
87
|
export type AssistantState = {
|
|
94
|
-
[K in ClientNames]: ClientSchemas[K]["
|
|
88
|
+
[K in ClientNames]: ClientSchemas[K]["methods"] extends {
|
|
89
|
+
getState: () => infer S;
|
|
90
|
+
} ? S : never;
|
|
95
91
|
};
|
|
96
92
|
/**
|
|
97
93
|
* Type for a client accessor - a function that returns the methods,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/types/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACvB,oBAAiB;AAElB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/types/client.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.
|
|
1
|
+
{"version":3,"file":"useAui.d.ts","sourceRoot":"","sources":["../src/useAui.ts"],"names":[],"mappings":"AAcA,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,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useResource } from "@assistant-ui/tap/react";
|
|
3
|
-
import { resource, tapMemo, tapResources, tapEffectEvent,
|
|
3
|
+
import { resource, tapMemo, tapResources, tapEffectEvent, tapEffect, tapRef, tapResource, withKey, tapResourceRoot, } from "@assistant-ui/tap";
|
|
4
4
|
import { useAssistantContextValue, DefaultAssistantClient, createRootAssistantClient, } from "./utils/react-assistant-context.js";
|
|
5
5
|
import { tapSplitClients, } from "./utils/splitClients.js";
|
|
6
6
|
import { normalizeEventSelector, } from "./types/events.js";
|
|
@@ -18,7 +18,7 @@ const RootClientResource = resource(({ element, emit, clientRef, }) => {
|
|
|
18
18
|
return tapMemo(() => ({ state, methods }), [methods, state]);
|
|
19
19
|
});
|
|
20
20
|
const RootClientAccessorResource = resource(({ element, notifications, clientRef, name, }) => {
|
|
21
|
-
const store =
|
|
21
|
+
const store = tapResourceRoot(RootClientResource({ element, emit: notifications.emit, clientRef }));
|
|
22
22
|
tapEffect(() => {
|
|
23
23
|
return store.subscribe(notifications.notifySubscribers);
|
|
24
24
|
}, [store, notifications]);
|
|
@@ -49,7 +49,7 @@ const NoOpRootClientsAccessorsResource = resource(() => {
|
|
|
49
49
|
}), []);
|
|
50
50
|
});
|
|
51
51
|
const RootClientsAccessorsResource = resource(({ clients: inputClients, clientRef, }) => {
|
|
52
|
-
const notifications =
|
|
52
|
+
const notifications = tapResource(NotificationManager());
|
|
53
53
|
tapEffect(() => clientRef.parent.subscribe(notifications.notifySubscribers), [clientRef, notifications]);
|
|
54
54
|
const results = tapShallowMemoArray(tapResources(() => Object.keys(inputClients).map((key) => withKey(key, RootClientAccessorResource({
|
|
55
55
|
element: inputClients[key],
|
|
@@ -149,7 +149,7 @@ export const AssistantClientResource = resource(({ parent, clients, }) => {
|
|
|
149
149
|
const rootFields = tapResource(Object.keys(rootClients).length > 0
|
|
150
150
|
? RootClientsAccessorsResource({ clients: rootClients, clientRef })
|
|
151
151
|
: NoOpRootClientsAccessorsResource());
|
|
152
|
-
const derivedFields =
|
|
152
|
+
const derivedFields = tapResource(DerivedClientsAccessorsResource({ clients: derivedClients, clientRef }));
|
|
153
153
|
const client = tapMemo(() => {
|
|
154
154
|
// Swap DefaultAssistantClient -> createRootAssistantClient at root to change error message
|
|
155
155
|
const proto = parent === DefaultAssistantClient
|