@assistant-ui/store 0.2.11 → 0.2.12
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/AuiIf.d.ts +19 -15
- package/dist/AuiIf.d.ts.map +1 -1
- package/dist/AuiIf.js +27 -24
- package/dist/AuiIf.js.map +1 -1
- package/dist/Derived.d.ts +15 -11
- package/dist/Derived.d.ts.map +1 -1
- package/dist/Derived.js +24 -20
- package/dist/Derived.js.map +1 -1
- package/dist/RenderChildrenWithAccessor.d.ts +13 -6
- package/dist/RenderChildrenWithAccessor.d.ts.map +1 -1
- package/dist/RenderChildrenWithAccessor.js +42 -48
- package/dist/RenderChildrenWithAccessor.js.map +1 -1
- package/dist/attachTransformScopes.d.ts +11 -10
- package/dist/attachTransformScopes.d.ts.map +1 -1
- package/dist/attachTransformScopes.js +20 -23
- package/dist/attachTransformScopes.js.map +1 -1
- package/dist/index.d.ts +15 -16
- package/dist/index.js +14 -18
- package/dist/tapClientList.d.ts +26 -23
- package/dist/tapClientList.d.ts.map +1 -1
- package/dist/tapClientList.js +66 -63
- package/dist/tapClientList.js.map +1 -1
- package/dist/tapClientLookup.d.ts +14 -11
- package/dist/tapClientLookup.d.ts.map +1 -1
- package/dist/tapClientLookup.js +31 -37
- package/dist/tapClientLookup.js.map +1 -1
- package/dist/tapClientResource.d.ts +12 -9
- package/dist/tapClientResource.d.ts.map +1 -1
- package/dist/tapClientResource.js +92 -104
- package/dist/tapClientResource.js.map +1 -1
- package/dist/types/client.d.ts +50 -42
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/client.js +0 -2
- package/dist/types/events.d.ts +23 -24
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +13 -6
- package/dist/types/events.js.map +1 -1
- package/dist/useAui.d.ts +17 -15
- package/dist/useAui.d.ts.map +1 -1
- package/dist/useAui.js +176 -191
- package/dist/useAui.js.map +1 -1
- package/dist/useAuiEvent.d.ts +6 -2
- package/dist/useAuiEvent.d.ts.map +1 -1
- package/dist/useAuiEvent.js +59 -47
- package/dist/useAuiEvent.js.map +1 -1
- package/dist/useAuiState.d.ts +6 -2
- package/dist/useAuiState.d.ts.map +1 -1
- package/dist/useAuiState.js +44 -42
- package/dist/useAuiState.js.map +1 -1
- package/dist/utils/BaseProxyHandler.d.ts +19 -16
- package/dist/utils/BaseProxyHandler.d.ts.map +1 -1
- package/dist/utils/BaseProxyHandler.js +46 -43
- package/dist/utils/BaseProxyHandler.js.map +1 -1
- package/dist/utils/NotificationManager.d.ts +13 -9
- package/dist/utils/NotificationManager.d.ts.map +1 -1
- package/dist/utils/NotificationManager.js +69 -82
- package/dist/utils/NotificationManager.js.map +1 -1
- package/dist/utils/proxied-assistant-state.d.ts +8 -4
- package/dist/utils/proxied-assistant-state.d.ts.map +1 -1
- package/dist/utils/proxied-assistant-state.js +28 -26
- package/dist/utils/proxied-assistant-state.js.map +1 -1
- package/dist/utils/react-assistant-context.d.ts +15 -10
- package/dist/utils/react-assistant-context.d.ts.map +1 -1
- package/dist/utils/react-assistant-context.js +69 -67
- package/dist/utils/react-assistant-context.js.map +1 -1
- package/dist/utils/splitClients.d.ts +12 -8
- package/dist/utils/splitClients.d.ts.map +1 -1
- package/dist/utils/splitClients.js +39 -43
- package/dist/utils/splitClients.js.map +1 -1
- package/dist/utils/tap-assistant-context.d.ts +17 -14
- package/dist/utils/tap-assistant-context.d.ts.map +1 -1
- package/dist/utils/tap-assistant-context.js +18 -15
- package/dist/utils/tap-assistant-context.js.map +1 -1
- package/dist/utils/tap-client-stack-context.d.ts +10 -6
- package/dist/utils/tap-client-stack-context.d.ts.map +1 -1
- package/dist/utils/tap-client-stack-context.js +22 -19
- package/dist/utils/tap-client-stack-context.js.map +1 -1
- package/dist/wrapperResource.d.ts +6 -2
- package/dist/wrapperResource.d.ts.map +1 -1
- package/dist/wrapperResource.js +12 -9
- package/dist/wrapperResource.js.map +1 -1
- package/package.json +7 -7
- package/src/types/client.ts +1 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types/client.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-assistant-context.d.ts","
|
|
1
|
+
{"version":3,"file":"react-assistant-context.d.ts","names":[],"sources":["../../src/utils/react-assistant-context.tsx"],"mappings":";;;;;cAsDa,sBAAA,EAAwB,eAIlC;AAJH;AAAA,cAWa,yBAAA,QAAgC,eAUzC;AAAA,cAOS,wBAAA,QAA+B,eAE3C;;AA1BE;AAOH;;;;AAUI;AAOJ;;;;AAEC;AAuBD;;;;;;;;;cAAa,WAAA;EAAe,KAAA;EAAA;AAAA;EAAA,iDAK1B,KAAA,EAAO,eAAA,EALmB;EAO1B,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA,MACd,KAAA,CAAM,YAAA"}
|
|
@@ -1,79 +1,81 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext } from "react";
|
|
3
|
-
import { createProxiedAssistantState, PROXIED_ASSISTANT_STATE_SYMBOL, } from "./proxied-assistant-state.js";
|
|
4
1
|
import { BaseProxyHandler, handleIntrospectionProp } from "./BaseProxyHandler.js";
|
|
5
|
-
|
|
2
|
+
import { PROXIED_ASSISTANT_STATE_SYMBOL, createProxiedAssistantState } from "./proxied-assistant-state.js";
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
//#region src/utils/react-assistant-context.tsx
|
|
6
|
+
const NO_OP_SUBSCRIBE = () => () => {};
|
|
6
7
|
const createErrorClientField = (message) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
const fn = (() => {
|
|
9
|
+
throw new Error(message);
|
|
10
|
+
});
|
|
11
|
+
fn.source = null;
|
|
12
|
+
fn.query = null;
|
|
13
|
+
return fn;
|
|
14
|
+
};
|
|
15
|
+
var DefaultAssistantClientProxyHandler = class extends BaseProxyHandler {
|
|
16
|
+
get(_, prop) {
|
|
17
|
+
if (prop === "subscribe") return NO_OP_SUBSCRIBE;
|
|
18
|
+
if (prop === "on") return NO_OP_SUBSCRIBE;
|
|
19
|
+
if (prop === PROXIED_ASSISTANT_STATE_SYMBOL) return DefaultAssistantClientProxiedAssistantState;
|
|
20
|
+
const introspection = handleIntrospectionProp(prop, "DefaultAssistantClient");
|
|
21
|
+
if (introspection !== false) return introspection;
|
|
22
|
+
return createErrorClientField("You are using a component or hook that requires an AuiProvider. Wrap your component in an <AuiProvider> component.");
|
|
23
|
+
}
|
|
24
|
+
ownKeys() {
|
|
25
|
+
return [
|
|
26
|
+
"subscribe",
|
|
27
|
+
"on",
|
|
28
|
+
PROXIED_ASSISTANT_STATE_SYMBOL
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
has(_, prop) {
|
|
32
|
+
return prop === "subscribe" || prop === "on" || prop === PROXIED_ASSISTANT_STATE_SYMBOL;
|
|
33
|
+
}
|
|
13
34
|
};
|
|
14
|
-
class DefaultAssistantClientProxyHandler extends BaseProxyHandler {
|
|
15
|
-
get(_, prop) {
|
|
16
|
-
if (prop === "subscribe")
|
|
17
|
-
return NO_OP_SUBSCRIBE;
|
|
18
|
-
if (prop === "on")
|
|
19
|
-
return NO_OP_SUBSCRIBE;
|
|
20
|
-
if (prop === PROXIED_ASSISTANT_STATE_SYMBOL)
|
|
21
|
-
return DefaultAssistantClientProxiedAssistantState;
|
|
22
|
-
const introspection = handleIntrospectionProp(prop, "DefaultAssistantClient");
|
|
23
|
-
if (introspection !== false)
|
|
24
|
-
return introspection;
|
|
25
|
-
return createErrorClientField("You are using a component or hook that requires an AuiProvider. Wrap your component in an <AuiProvider> component.");
|
|
26
|
-
}
|
|
27
|
-
ownKeys() {
|
|
28
|
-
return ["subscribe", "on", PROXIED_ASSISTANT_STATE_SYMBOL];
|
|
29
|
-
}
|
|
30
|
-
has(_, prop) {
|
|
31
|
-
return (prop === "subscribe" ||
|
|
32
|
-
prop === "on" ||
|
|
33
|
-
prop === PROXIED_ASSISTANT_STATE_SYMBOL);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
35
|
/** Default context value - throws "wrap in AuiProvider" error */
|
|
37
|
-
|
|
36
|
+
const DefaultAssistantClient = new Proxy({}, new DefaultAssistantClientProxyHandler());
|
|
38
37
|
const DefaultAssistantClientProxiedAssistantState = createProxiedAssistantState(DefaultAssistantClient);
|
|
39
38
|
/** Root prototype for created clients - throws "scope not defined" error */
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return createErrorClientField(`The current scope does not have a "${String(prop)}" property.`);
|
|
46
|
-
},
|
|
47
|
-
});
|
|
39
|
+
const createRootAssistantClient = () => new Proxy({}, { get(_, prop) {
|
|
40
|
+
const introspection = handleIntrospectionProp(prop, "AssistantClient");
|
|
41
|
+
if (introspection !== false) return introspection;
|
|
42
|
+
return createErrorClientField(`The current scope does not have a "${String(prop)}" property.`);
|
|
43
|
+
} });
|
|
48
44
|
/**
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
* React Context for the AssistantClient
|
|
46
|
+
*/
|
|
51
47
|
const AssistantContext = createContext(DefaultAssistantClient);
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
const useAssistantContextValue = () => {
|
|
49
|
+
return useContext(AssistantContext);
|
|
54
50
|
};
|
|
55
51
|
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
52
|
+
* Supplies an `AssistantClient` to the React tree.
|
|
53
|
+
*
|
|
54
|
+
* Place near the root of any subtree that uses {@link useAui} or the
|
|
55
|
+
* primitives built on it. Components rendered outside an `AuiProvider`
|
|
56
|
+
* receive a default client whose scope accessors throw on use, so
|
|
57
|
+
* missing-provider mistakes surface at the point of use.
|
|
58
|
+
*
|
|
59
|
+
* When mounting a runtime built with one of the runtime hooks, use
|
|
60
|
+
* {@link AssistantRuntimeProvider} — it installs an `AuiProvider`
|
|
61
|
+
* internally — rather than wiring `AuiProvider` yourself.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```tsx
|
|
65
|
+
* function ScopedAssistant({ children, scopes }) {
|
|
66
|
+
* const aui = useAui(scopes);
|
|
67
|
+
*
|
|
68
|
+
* return <AuiProvider value={aui}>{children}</AuiProvider>;
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
const AuiProvider = ({ value, children }) => {
|
|
73
|
+
return /* @__PURE__ */ jsx(AssistantContext.Provider, {
|
|
74
|
+
value,
|
|
75
|
+
children
|
|
76
|
+
});
|
|
78
77
|
};
|
|
78
|
+
//#endregion
|
|
79
|
+
export { AuiProvider, DefaultAssistantClient, createRootAssistantClient, useAssistantContextValue };
|
|
80
|
+
|
|
79
81
|
//# sourceMappingURL=react-assistant-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-assistant-context.js","
|
|
1
|
+
{"version":3,"file":"react-assistant-context.js","names":[],"sources":["../../src/utils/react-assistant-context.tsx"],"sourcesContent":["import type React from \"react\";\nimport { createContext, useContext } from \"react\";\nimport type { AssistantClient, AssistantClientAccessor } from \"../types/client\";\nimport {\n createProxiedAssistantState,\n PROXIED_ASSISTANT_STATE_SYMBOL,\n} from \"./proxied-assistant-state\";\nimport { BaseProxyHandler, handleIntrospectionProp } from \"./BaseProxyHandler\";\n\nconst NO_OP_SUBSCRIBE = () => () => {};\n\nconst createErrorClientField = (\n message: string,\n): AssistantClientAccessor<never> => {\n const fn = (() => {\n throw new Error(message);\n }) as AssistantClientAccessor<never>;\n fn.source = null;\n fn.query = null;\n return fn;\n};\n\nclass DefaultAssistantClientProxyHandler\n extends BaseProxyHandler\n implements ProxyHandler<AssistantClient>\n{\n get(_: unknown, prop: string | symbol) {\n if (prop === \"subscribe\") return NO_OP_SUBSCRIBE;\n if (prop === \"on\") return NO_OP_SUBSCRIBE;\n if (prop === PROXIED_ASSISTANT_STATE_SYMBOL)\n return DefaultAssistantClientProxiedAssistantState;\n const introspection = handleIntrospectionProp(\n prop,\n \"DefaultAssistantClient\",\n );\n if (introspection !== false) return introspection;\n return createErrorClientField(\n \"You are using a component or hook that requires an AuiProvider. Wrap your component in an <AuiProvider> component.\",\n );\n }\n\n ownKeys(): ArrayLike<string | symbol> {\n return [\"subscribe\", \"on\", PROXIED_ASSISTANT_STATE_SYMBOL];\n }\n\n has(_: unknown, prop: string | symbol): boolean {\n return (\n prop === \"subscribe\" ||\n prop === \"on\" ||\n prop === PROXIED_ASSISTANT_STATE_SYMBOL\n );\n }\n}\n/** Default context value - throws \"wrap in AuiProvider\" error */\nexport const DefaultAssistantClient: AssistantClient =\n new Proxy<AssistantClient>(\n {} as AssistantClient,\n new DefaultAssistantClientProxyHandler(),\n );\n\nconst DefaultAssistantClientProxiedAssistantState = createProxiedAssistantState(\n DefaultAssistantClient,\n);\n\n/** Root prototype for created clients - throws \"scope not defined\" error */\nexport const createRootAssistantClient = (): AssistantClient =>\n new Proxy<AssistantClient>({} as AssistantClient, {\n get(_: AssistantClient, prop: string | symbol) {\n const introspection = handleIntrospectionProp(prop, \"AssistantClient\");\n if (introspection !== false) return introspection;\n\n return createErrorClientField(\n `The current scope does not have a \"${String(prop)}\" property.`,\n );\n },\n });\n\n/**\n * React Context for the AssistantClient\n */\nconst AssistantContext = createContext<AssistantClient>(DefaultAssistantClient);\n\nexport const useAssistantContextValue = (): AssistantClient => {\n return useContext(AssistantContext);\n};\n\n/**\n * Supplies an `AssistantClient` to the React tree.\n *\n * Place near the root of any subtree that uses {@link useAui} or the\n * primitives built on it. Components rendered outside an `AuiProvider`\n * receive a default client whose scope accessors throw on use, so\n * missing-provider mistakes surface at the point of use.\n *\n * When mounting a runtime built with one of the runtime hooks, use\n * {@link AssistantRuntimeProvider} — it installs an `AuiProvider`\n * internally — rather than wiring `AuiProvider` yourself.\n *\n * @example\n * ```tsx\n * function ScopedAssistant({ children, scopes }) {\n * const aui = useAui(scopes);\n *\n * return <AuiProvider value={aui}>{children}</AuiProvider>;\n * }\n * ```\n */\nexport const AuiProvider = ({\n value,\n children,\n}: {\n /** Assistant client to expose to descendants. */\n value: AssistantClient;\n /** Subtree that may read from the client. */\n children: React.ReactNode;\n}): React.ReactElement => {\n return (\n <AssistantContext.Provider value={value}>\n {children}\n </AssistantContext.Provider>\n );\n};\n"],"mappings":";;;;;AASA,MAAM,8BAA8B,CAAC;AAErC,MAAM,0BACJ,YACmC;CACnC,MAAM,YAAY;EAChB,MAAM,IAAI,MAAM,OAAO;CACzB;CACA,GAAG,SAAS;CACZ,GAAG,QAAQ;CACX,OAAO;AACT;AAEA,IAAM,qCAAN,cACU,iBAEV;CACE,IAAI,GAAY,MAAuB;EACrC,IAAI,SAAS,aAAa,OAAO;EACjC,IAAI,SAAS,MAAM,OAAO;EAC1B,IAAI,SAAS,gCACX,OAAO;EACT,MAAM,gBAAgB,wBACpB,MACA,wBACF;EACA,IAAI,kBAAkB,OAAO,OAAO;EACpC,OAAO,uBACL,oHACF;CACF;CAEA,UAAsC;EACpC,OAAO;GAAC;GAAa;GAAM;EAA8B;CAC3D;CAEA,IAAI,GAAY,MAAgC;EAC9C,OACE,SAAS,eACT,SAAS,QACT,SAAS;CAEb;AACF;;AAEA,MAAa,yBACX,IAAI,MACF,CAAC,GACD,IAAI,mCAAmC,CACzC;AAEF,MAAM,8CAA8C,4BAClD,sBACF;;AAGA,MAAa,kCACX,IAAI,MAAuB,CAAC,GAAsB,EAChD,IAAI,GAAoB,MAAuB;CAC7C,MAAM,gBAAgB,wBAAwB,MAAM,iBAAiB;CACrE,IAAI,kBAAkB,OAAO,OAAO;CAEpC,OAAO,uBACL,sCAAsC,OAAO,IAAI,EAAE,YACrD;AACF,EACF,CAAC;;;;AAKH,MAAM,mBAAmB,cAA+B,sBAAsB;AAE9E,MAAa,iCAAkD;CAC7D,OAAO,WAAW,gBAAgB;AACpC;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,eAAe,EAC1B,OACA,eAMwB;CACxB,OACE,oBAAC,iBAAiB,UAAlB;EAAkC;EAC/B;CACwB,CAAA;AAE/B"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { AssistantClient, ClientElement, ClientNames } from "../types/client.js";
|
|
2
|
+
import { DerivedElement } from "../Derived.js";
|
|
3
|
+
import { useAui } from "../useAui.js";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/splitClients.d.ts
|
|
6
|
+
type RootClients = Partial<Record<ClientNames, ClientElement<ClientNames>>>;
|
|
7
|
+
type DerivedClients = Partial<Record<ClientNames, DerivedElement<ClientNames>>>;
|
|
8
|
+
declare const tapSplitClients: (clients: useAui.Props, baseClient: AssistantClient) => {
|
|
9
|
+
rootClients: Partial<Record<"ERROR: No clients were defined", ClientElement<"ERROR: No clients were defined">>>;
|
|
10
|
+
derivedClients: Partial<Record<"ERROR: No clients were defined", DerivedElement<"ERROR: No clients were defined">>>;
|
|
9
11
|
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { DerivedClients, RootClients, tapSplitClients };
|
|
10
14
|
//# sourceMappingURL=splitClients.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"splitClients.d.ts","
|
|
1
|
+
{"version":3,"file":"splitClients.d.ts","names":[],"sources":["../../src/utils/splitClients.ts"],"mappings":";;;;;KAUY,WAAA,GAAc,OAAA,CACxB,MAAA,CAAO,WAAA,EAAa,aAAA,CAAc,WAAA;AAAA,KAExB,cAAA,GAAiB,OAAA,CAC3B,MAAA,CAAO,WAAA,EAAa,cAAA,CAAe,WAAA;AAAA,cAyDxB,eAAA,GACX,OAAA,EAAS,MAAA,CAAO,KAAA,EAChB,UAAA,EAAY,eAAA"}
|
|
@@ -1,53 +1,49 @@
|
|
|
1
1
|
import { Derived } from "../Derived.js";
|
|
2
2
|
import { getTransformScopes } from "../attachTransformScopes.js";
|
|
3
3
|
import { tapMemo } from "@assistant-ui/tap";
|
|
4
|
+
//#region src/utils/splitClients.ts
|
|
4
5
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
* Splits a clients object into root clients and derived clients,
|
|
7
|
+
* applying transformScopes from root client elements.
|
|
8
|
+
*/
|
|
8
9
|
function splitClients(clients, baseClient) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
derivedClients[key] = clientElement;
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
rootClients[key] = clientElement;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return { rootClients, derivedClients };
|
|
10
|
+
const scopes = { ...clients };
|
|
11
|
+
const visited = /* @__PURE__ */ new Set();
|
|
12
|
+
let changed = true;
|
|
13
|
+
while (changed) {
|
|
14
|
+
changed = false;
|
|
15
|
+
for (const clientElement of Object.values(scopes)) {
|
|
16
|
+
if (clientElement.type === Derived) continue;
|
|
17
|
+
if (visited.has(clientElement.type)) continue;
|
|
18
|
+
visited.add(clientElement.type);
|
|
19
|
+
const transform = getTransformScopes(clientElement.type);
|
|
20
|
+
if (transform) {
|
|
21
|
+
transform(scopes, baseClient);
|
|
22
|
+
changed = true;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const rootClients = {};
|
|
28
|
+
const derivedClients = {};
|
|
29
|
+
for (const [key, clientElement] of Object.entries(scopes)) if (clientElement.type === Derived) derivedClients[key] = clientElement;
|
|
30
|
+
else rootClients[key] = clientElement;
|
|
31
|
+
return {
|
|
32
|
+
rootClients,
|
|
33
|
+
derivedClients
|
|
34
|
+
};
|
|
41
35
|
}
|
|
42
36
|
const tapShallowMemoObject = (object) => {
|
|
43
|
-
|
|
44
|
-
return tapMemo(() => object, [...Object.entries(object).flat()]);
|
|
37
|
+
return tapMemo(() => object, [...Object.entries(object).flat()]);
|
|
45
38
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
39
|
+
const tapSplitClients = (clients, baseClient) => {
|
|
40
|
+
const { rootClients, derivedClients } = splitClients(clients, baseClient);
|
|
41
|
+
return {
|
|
42
|
+
rootClients: tapShallowMemoObject(rootClients),
|
|
43
|
+
derivedClients: tapShallowMemoObject(derivedClients)
|
|
44
|
+
};
|
|
52
45
|
};
|
|
46
|
+
//#endregion
|
|
47
|
+
export { tapSplitClients };
|
|
48
|
+
|
|
53
49
|
//# sourceMappingURL=splitClients.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"splitClients.js","
|
|
1
|
+
{"version":3,"file":"splitClients.js","names":[],"sources":["../../src/utils/splitClients.ts"],"sourcesContent":["import { Derived, type DerivedElement } from \"../Derived\";\nimport type {\n AssistantClient,\n ClientElement,\n ClientNames,\n} from \"../types/client\";\nimport { getTransformScopes } from \"../attachTransformScopes\";\nimport type { useAui } from \"../useAui\";\nimport { tapMemo, type ResourceElement } from \"@assistant-ui/tap\";\n\nexport type RootClients = Partial<\n Record<ClientNames, ClientElement<ClientNames>>\n>;\nexport type DerivedClients = Partial<\n Record<ClientNames, DerivedElement<ClientNames>>\n>;\n\n/**\n * Splits a clients object into root clients and derived clients,\n * applying transformScopes from root client elements.\n */\nfunction splitClients(clients: useAui.Props, baseClient: AssistantClient) {\n // 1. Collect transforms from root elements and run them iteratively\n const scopes = { ...clients } as Record<\n string,\n ClientElement<ClientNames> | DerivedElement<ClientNames>\n >;\n const visited = new Set<(...args: any[]) => any>();\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const clientElement of Object.values(scopes)) {\n if (clientElement.type === (Derived as unknown)) continue;\n if (visited.has(clientElement.type)) continue;\n visited.add(clientElement.type);\n\n const transform = getTransformScopes(\n clientElement.type as (props: any) => ResourceElement<any>,\n );\n if (transform) {\n transform(scopes, baseClient);\n changed = true;\n break; // restart iteration since scopes may have new root elements\n }\n }\n }\n\n // 2. Split result into root/derived\n const rootClients: RootClients = {};\n const derivedClients: DerivedClients = {};\n\n for (const [key, clientElement] of Object.entries(scopes) as [\n ClientNames,\n ClientElement<ClientNames> | DerivedElement<ClientNames>,\n ][]) {\n if (clientElement.type === (Derived as unknown)) {\n derivedClients[key] = clientElement as DerivedElement<ClientNames>;\n } else {\n rootClients[key] = clientElement as ClientElement<ClientNames>;\n }\n }\n\n return { rootClients, derivedClients };\n}\n\nconst tapShallowMemoObject = <T extends object>(object: T) => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: shallow memo\n return tapMemo(() => object, [...Object.entries(object).flat()]);\n};\n\nexport const tapSplitClients = (\n clients: useAui.Props,\n baseClient: AssistantClient,\n) => {\n const { rootClients, derivedClients } = splitClients(clients, baseClient);\n\n return {\n rootClients: tapShallowMemoObject(rootClients),\n derivedClients: tapShallowMemoObject(derivedClients),\n };\n};\n"],"mappings":";;;;;;;;AAqBA,SAAS,aAAa,SAAuB,YAA6B;CAExE,MAAM,SAAS,EAAE,GAAG,QAAQ;CAI5B,MAAM,0BAAU,IAAI,IAA6B;CAEjD,IAAI,UAAU;CACd,OAAO,SAAS;EACd,UAAU;EACV,KAAK,MAAM,iBAAiB,OAAO,OAAO,MAAM,GAAG;GACjD,IAAI,cAAc,SAAU,SAAqB;GACjD,IAAI,QAAQ,IAAI,cAAc,IAAI,GAAG;GACrC,QAAQ,IAAI,cAAc,IAAI;GAE9B,MAAM,YAAY,mBAChB,cAAc,IAChB;GACA,IAAI,WAAW;IACb,UAAU,QAAQ,UAAU;IAC5B,UAAU;IACV;GACF;EACF;CACF;CAGA,MAAM,cAA2B,CAAC;CAClC,MAAM,iBAAiC,CAAC;CAExC,KAAK,MAAM,CAAC,KAAK,kBAAkB,OAAO,QAAQ,MAAM,GAItD,IAAI,cAAc,SAAU,SAC1B,eAAe,OAAO;MAEtB,YAAY,OAAO;CAIvB,OAAO;EAAE;EAAa;CAAe;AACvC;AAEA,MAAM,wBAA0C,WAAc;CAE5D,OAAO,cAAc,QAAQ,CAAC,GAAG,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC,CAAC;AACjE;AAEA,MAAa,mBACX,SACA,eACG;CACH,MAAM,EAAE,aAAa,mBAAmB,aAAa,SAAS,UAAU;CAExE,OAAO;EACL,aAAa,qBAAqB,WAAW;EAC7C,gBAAgB,qBAAqB,cAAc;CACrD;AACF"}
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { AssistantEventName, AssistantEventPayload } from "../types/events.js";
|
|
2
|
+
import { AssistantClient } from "../types/client.js";
|
|
3
|
+
import { ClientStack } from "./tap-client-stack-context.js";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/tap-assistant-context.d.ts
|
|
4
6
|
type EmitFn = <TEvent extends Exclude<AssistantEventName, "*">>(event: TEvent, payload: AssistantEventPayload[TEvent], clientStack: ClientStack) => void;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
parent: AssistantClient;
|
|
8
|
-
current: AssistantClient | null;
|
|
9
|
-
};
|
|
10
|
-
emit: EmitFn;
|
|
11
|
-
};
|
|
12
|
-
export declare const withAssistantTapContextProvider: <TResult>(value: AssistantTapContextValue, fn: () => TResult) => TResult;
|
|
13
|
-
export declare const tapAssistantClientRef: () => {
|
|
7
|
+
type AssistantTapContextValue = {
|
|
8
|
+
clientRef: {
|
|
14
9
|
parent: AssistantClient;
|
|
15
10
|
current: AssistantClient | null;
|
|
11
|
+
};
|
|
12
|
+
emit: EmitFn;
|
|
13
|
+
};
|
|
14
|
+
declare const withAssistantTapContextProvider: <TResult>(value: AssistantTapContextValue, fn: () => TResult) => TResult;
|
|
15
|
+
declare const tapAssistantClientRef: () => {
|
|
16
|
+
parent: AssistantClient;
|
|
17
|
+
current: AssistantClient | null;
|
|
16
18
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
declare const tapAssistantEmit: () => <TEvent extends Exclude<AssistantEventName, "*">>(event: TEvent, payload: AssistantEventPayload[TEvent]) => void;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { AssistantTapContextValue, tapAssistantClientRef, tapAssistantEmit, withAssistantTapContextProvider };
|
|
19
22
|
//# sourceMappingURL=tap-assistant-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap-assistant-context.d.ts","
|
|
1
|
+
{"version":3,"file":"tap-assistant-context.d.ts","names":[],"sources":["../../src/utils/tap-assistant-context.ts"],"mappings":";;;;;KAaK,MAAA,mBAAyB,OAAA,CAAQ,kBAAA,QACpC,KAAA,EAAO,MAAA,EACP,OAAA,EAAS,qBAAA,CAAsB,MAAA,GAC/B,WAAA,EAAa,WAAA;AAAA,KAGH,wBAAA;EACV,SAAA;IAAa,MAAA,EAAQ,eAAA;IAAiB,OAAA,EAAS,eAAA;EAAA;EAC/C,IAAA,EAAM,MAAA;AAAA;AAAA,cAMK,+BAAA,YACX,KAAA,EAAO,wBAAA,EACP,EAAA,QAAU,OAAA,KAAO,OAAA;AAAA,cAYN,qBAAA;UArBU,eAAA;WAA0B,eAAe;AAAA;AAAA,cAyBnD,gBAAA,wBAKO,OAAA,CAAQ,kBAAA,QAAwB,KAAA,EACvC,MAAA,EAAM,OAAA,EACJ,qBAAA,CAAsB,MAAA"}
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import { createResourceContext, tap, withContextProvider, tapEffectEvent, } from "@assistant-ui/tap";
|
|
2
1
|
import { tapClientStack } from "./tap-client-stack-context.js";
|
|
2
|
+
import { createResourceContext, tap, tapEffectEvent, withContextProvider } from "@assistant-ui/tap";
|
|
3
|
+
//#region src/utils/tap-assistant-context.ts
|
|
3
4
|
const AssistantTapContext = createResourceContext(null);
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
const withAssistantTapContextProvider = (value, fn) => {
|
|
6
|
+
return withContextProvider(AssistantTapContext, value, fn);
|
|
6
7
|
};
|
|
7
8
|
const tapAssistantTapContext = () => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return ctx;
|
|
9
|
+
const ctx = tap(AssistantTapContext);
|
|
10
|
+
if (!ctx) throw new Error("AssistantTapContext is not available");
|
|
11
|
+
return ctx;
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const tapAssistantClientRef = () => {
|
|
14
|
+
return tapAssistantTapContext().clientRef;
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
const tapAssistantEmit = () => {
|
|
17
|
+
const { emit } = tapAssistantTapContext();
|
|
18
|
+
const clientStack = tapClientStack();
|
|
19
|
+
return tapEffectEvent((event, payload) => {
|
|
20
|
+
emit(event, payload, clientStack);
|
|
21
|
+
});
|
|
22
22
|
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { tapAssistantClientRef, tapAssistantEmit, withAssistantTapContextProvider };
|
|
25
|
+
|
|
23
26
|
//# sourceMappingURL=tap-assistant-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap-assistant-context.js","
|
|
1
|
+
{"version":3,"file":"tap-assistant-context.js","names":[],"sources":["../../src/utils/tap-assistant-context.ts"],"sourcesContent":["import {\n createResourceContext,\n tap,\n withContextProvider,\n tapEffectEvent,\n} from \"@assistant-ui/tap\";\nimport type {\n AssistantEventName,\n AssistantEventPayload,\n} from \"../types/events\";\nimport type { AssistantClient } from \"../types/client\";\nimport { tapClientStack, type ClientStack } from \"./tap-client-stack-context\";\n\ntype EmitFn = <TEvent extends Exclude<AssistantEventName, \"*\">>(\n event: TEvent,\n payload: AssistantEventPayload[TEvent],\n clientStack: ClientStack,\n) => void;\n\nexport type AssistantTapContextValue = {\n clientRef: { parent: AssistantClient; current: AssistantClient | null };\n emit: EmitFn;\n};\n\nconst AssistantTapContext =\n createResourceContext<AssistantTapContextValue | null>(null);\n\nexport const withAssistantTapContextProvider = <TResult>(\n value: AssistantTapContextValue,\n fn: () => TResult,\n) => {\n return withContextProvider(AssistantTapContext, value, fn);\n};\n\nconst tapAssistantTapContext = () => {\n const ctx = tap(AssistantTapContext);\n if (!ctx) throw new Error(\"AssistantTapContext is not available\");\n\n return ctx;\n};\n\nexport const tapAssistantClientRef = () => {\n return tapAssistantTapContext().clientRef;\n};\n\nexport const tapAssistantEmit = () => {\n const { emit } = tapAssistantTapContext();\n const clientStack = tapClientStack();\n\n return tapEffectEvent(\n <TEvent extends Exclude<AssistantEventName, \"*\">>(\n event: TEvent,\n payload: AssistantEventPayload[TEvent],\n ) => {\n emit(event, payload, clientStack);\n },\n );\n};\n"],"mappings":";;;AAwBA,MAAM,sBACJ,sBAAuD,IAAI;AAE7D,MAAa,mCACX,OACA,OACG;CACH,OAAO,oBAAoB,qBAAqB,OAAO,EAAE;AAC3D;AAEA,MAAM,+BAA+B;CACnC,MAAM,MAAM,IAAI,mBAAmB;CACnC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,sCAAsC;CAEhE,OAAO;AACT;AAEA,MAAa,8BAA8B;CACzC,OAAO,uBAAuB,EAAE;AAClC;AAEA,MAAa,yBAAyB;CACpC,MAAM,EAAE,SAAS,uBAAuB;CACxC,MAAM,cAAc,eAAe;CAEnC,OAAO,gBAEH,OACA,YACG;EACH,KAAK,OAAO,SAAS,WAAW;CAClC,CACF;AACF"}
|
|
@@ -1,23 +1,27 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ClientMethods } from "../types/client.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/tap-client-stack-context.d.ts
|
|
2
4
|
/**
|
|
3
5
|
* Symbol used to get the client index from a ClientProxy.
|
|
4
6
|
*/
|
|
5
|
-
|
|
7
|
+
declare const SYMBOL_CLIENT_INDEX: unique symbol;
|
|
6
8
|
/**
|
|
7
9
|
* Get the index of a client (its position in the client stack when created).
|
|
8
10
|
*/
|
|
9
|
-
|
|
11
|
+
declare const getClientIndex: (client: ClientMethods) => number;
|
|
10
12
|
/**
|
|
11
13
|
* The client stack - an array of clients representing the current hierarchy.
|
|
12
14
|
*/
|
|
13
|
-
|
|
15
|
+
type ClientStack = readonly ClientMethods[];
|
|
14
16
|
/**
|
|
15
17
|
* Get the current client stack inside a tap resource.
|
|
16
18
|
*/
|
|
17
|
-
|
|
19
|
+
declare const tapClientStack: () => ClientStack;
|
|
18
20
|
/**
|
|
19
21
|
* Execute a callback with a client pushed onto the stack.
|
|
20
22
|
* The stack is duplicated, not mutated.
|
|
21
23
|
*/
|
|
22
|
-
|
|
24
|
+
declare const tapWithClientStack: <T>(client: ClientMethods, callback: () => T) => T;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { ClientStack, SYMBOL_CLIENT_INDEX, getClientIndex, tapClientStack, tapWithClientStack };
|
|
23
27
|
//# sourceMappingURL=tap-client-stack-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap-client-stack-context.d.ts","
|
|
1
|
+
{"version":3,"file":"tap-client-stack-context.d.ts","names":[],"sources":["../../src/utils/tap-client-stack-context.ts"],"mappings":";;;;;AAWA;cAAa,mBAAA;;;AAA8D;cAK9D,cAAA,GAAkB,MAAqB,EAAb,aAAa;;;;KASxC,WAAA,YAAuB,aAAa;AAAhD;;;AAAA,cAOa,cAAA,QAAqB,WAEjC;AAT+C;AAOhD;;;AAPgD,cAenC,kBAAA,MACX,MAAA,EAAQ,aAAA,EACR,QAAA,QAAgB,CAAA,KACf,CAAA"}
|
|
@@ -1,28 +1,31 @@
|
|
|
1
|
-
import { createResourceContext, tap,
|
|
1
|
+
import { createResourceContext, tap, tapMemo, withContextProvider } from "@assistant-ui/tap";
|
|
2
|
+
//#region src/utils/tap-client-stack-context.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
* Symbol used to get the client index from a ClientProxy.
|
|
5
|
+
*/
|
|
6
|
+
const SYMBOL_CLIENT_INDEX = Symbol("assistant-ui.store.clientIndex");
|
|
6
7
|
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
* Get the index of a client (its position in the client stack when created).
|
|
9
|
+
*/
|
|
10
|
+
const getClientIndex = (client) => {
|
|
11
|
+
return client[SYMBOL_CLIENT_INDEX];
|
|
11
12
|
};
|
|
12
13
|
const ClientStackContext = createResourceContext([]);
|
|
13
14
|
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
* Get the current client stack inside a tap resource.
|
|
16
|
+
*/
|
|
17
|
+
const tapClientStack = () => {
|
|
18
|
+
return tap(ClientStackContext);
|
|
18
19
|
};
|
|
19
20
|
/**
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return withContextProvider(ClientStackContext, newStack, callback);
|
|
21
|
+
* Execute a callback with a client pushed onto the stack.
|
|
22
|
+
* The stack is duplicated, not mutated.
|
|
23
|
+
*/
|
|
24
|
+
const tapWithClientStack = (client, callback) => {
|
|
25
|
+
const currentStack = tapClientStack();
|
|
26
|
+
return withContextProvider(ClientStackContext, tapMemo(() => [...currentStack, client], [currentStack, client]), callback);
|
|
27
27
|
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { SYMBOL_CLIENT_INDEX, getClientIndex, tapClientStack, tapWithClientStack };
|
|
30
|
+
|
|
28
31
|
//# sourceMappingURL=tap-client-stack-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap-client-stack-context.js","
|
|
1
|
+
{"version":3,"file":"tap-client-stack-context.js","names":[],"sources":["../../src/utils/tap-client-stack-context.ts"],"sourcesContent":["import {\n createResourceContext,\n tap,\n withContextProvider,\n tapMemo,\n} from \"@assistant-ui/tap\";\nimport type { ClientMethods } from \"../types/client\";\n\n/**\n * Symbol used to get the client index from a ClientProxy.\n */\nexport const SYMBOL_CLIENT_INDEX = Symbol(\"assistant-ui.store.clientIndex\");\n\n/**\n * Get the index of a client (its position in the client stack when created).\n */\nexport const getClientIndex = (client: ClientMethods): number => {\n return (client as unknown as { [SYMBOL_CLIENT_INDEX]: number })[\n SYMBOL_CLIENT_INDEX\n ];\n};\n\n/**\n * The client stack - an array of clients representing the current hierarchy.\n */\nexport type ClientStack = readonly ClientMethods[];\n\nconst ClientStackContext = createResourceContext<ClientStack>([]);\n\n/**\n * Get the current client stack inside a tap resource.\n */\nexport const tapClientStack = (): ClientStack => {\n return tap(ClientStackContext);\n};\n\n/**\n * Execute a callback with a client pushed onto the stack.\n * The stack is duplicated, not mutated.\n */\nexport const tapWithClientStack = <T>(\n client: ClientMethods,\n callback: () => T,\n): T => {\n const currentStack = tapClientStack();\n const newStack = tapMemo(\n () => [...currentStack, client],\n [currentStack, client],\n );\n return withContextProvider(ClientStackContext, newStack, callback);\n};\n"],"mappings":";;;;;AAWA,MAAa,sBAAsB,OAAO,gCAAgC;;;;AAK1E,MAAa,kBAAkB,WAAkC;CAC/D,OAAQ,OACN;AAEJ;AAOA,MAAM,qBAAqB,sBAAmC,CAAC,CAAC;;;;AAKhE,MAAa,uBAAoC;CAC/C,OAAO,IAAI,kBAAkB;AAC/B;;;;;AAMA,MAAa,sBACX,QACA,aACM;CACN,MAAM,eAAe,eAAe;CAKpC,OAAO,oBAAoB,oBAJV,cACT,CAAC,GAAG,cAAc,MAAM,GAC9B,CAAC,cAAc,MAAM,CAE+B,GAAG,QAAQ;AACnE"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { Resource, ResourceElement } from "@assistant-ui/tap";
|
|
2
|
+
|
|
3
|
+
//#region src/wrapperResource.d.ts
|
|
4
|
+
declare const wrapperResource: <R, P>(fn: (props: ResourceElement<P>) => R) => Resource<R, ResourceElement<P>>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { wrapperResource };
|
|
3
7
|
//# sourceMappingURL=wrapperResource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapperResource.d.ts","
|
|
1
|
+
{"version":3,"file":"wrapperResource.d.ts","names":[],"sources":["../src/wrapperResource.ts"],"mappings":";;;cAOa,eAAA,SACX,EAAA,GAAK,KAAA,EAAO,eAAA,CAAgB,CAAA,MAAO,CAAA,KAClC,QAAA,CAAS,CAAA,EAAG,eAAA,CAAgB,CAAA"}
|
package/dist/wrapperResource.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { resource, withKey
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { resource, withKey } from "@assistant-ui/tap";
|
|
2
|
+
//#region src/wrapperResource.ts
|
|
3
|
+
const wrapperResource = (fn) => {
|
|
4
|
+
const res = resource(fn);
|
|
5
|
+
return (props) => {
|
|
6
|
+
const el = res(props);
|
|
7
|
+
if (props.key === void 0) return el;
|
|
8
|
+
return withKey(props.key, el);
|
|
9
|
+
};
|
|
10
10
|
};
|
|
11
|
+
//#endregion
|
|
12
|
+
export { wrapperResource };
|
|
13
|
+
|
|
11
14
|
//# sourceMappingURL=wrapperResource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapperResource.js","
|
|
1
|
+
{"version":3,"file":"wrapperResource.js","names":[],"sources":["../src/wrapperResource.ts"],"sourcesContent":["import {\n type ResourceElement,\n type Resource,\n resource,\n withKey,\n} from \"@assistant-ui/tap\";\n\nexport const wrapperResource = <R, P>(\n fn: (props: ResourceElement<P>) => R,\n): Resource<R, ResourceElement<P>> => {\n const res = resource(fn);\n return (props: ResourceElement<P>) => {\n const el = res(props);\n if (props.key === undefined) return el;\n return withKey(props.key, el);\n };\n};\n"],"mappings":";;AAOA,MAAa,mBACX,OACoC;CACpC,MAAM,MAAM,SAAS,EAAE;CACvB,QAAQ,UAA8B;EACpC,MAAM,KAAK,IAAI,KAAK;EACpB,IAAI,MAAM,QAAQ,KAAA,GAAW,OAAO;EACpC,OAAO,QAAQ,MAAM,KAAK,EAAE;CAC9B;AACF"}
|