@fragno-dev/chatno 0.0.5 → 0.0.7

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.
Files changed (43) hide show
  1. package/.turbo/turbo-build.log +32 -11
  2. package/CHANGELOG.md +16 -0
  3. package/dist/browser/client/react.d.ts +15 -0
  4. package/dist/browser/client/react.d.ts.map +1 -0
  5. package/dist/browser/client/react.js +75 -0
  6. package/dist/browser/client/react.js.map +1 -0
  7. package/dist/browser/client/solid.d.ts +14 -0
  8. package/dist/browser/client/solid.d.ts.map +1 -0
  9. package/dist/browser/client/solid.js +122 -0
  10. package/dist/browser/client/solid.js.map +1 -0
  11. package/dist/browser/client/svelte.d.ts +14 -0
  12. package/dist/browser/client/svelte.d.ts.map +1 -0
  13. package/dist/browser/client/svelte.js +126 -0
  14. package/dist/browser/client/svelte.js.map +1 -0
  15. package/dist/browser/client/vanilla.d.ts +15 -0
  16. package/dist/browser/client/vanilla.d.ts.map +1 -0
  17. package/dist/browser/client/vanilla.js +136 -0
  18. package/dist/browser/client/vanilla.js.map +1 -0
  19. package/dist/browser/client/vue.d.ts +15 -0
  20. package/dist/browser/client/vue.d.ts.map +1 -0
  21. package/dist/browser/client/vue.js +111 -0
  22. package/dist/browser/client/vue.js.map +1 -0
  23. package/dist/browser/index.d.ts +4 -4
  24. package/dist/browser/index.d.ts.map +1 -1
  25. package/dist/browser/index.js +2 -118
  26. package/dist/browser/src-DBY5sKUM.js +1525 -0
  27. package/dist/browser/src-DBY5sKUM.js.map +1 -0
  28. package/dist/node/index.d.ts +2 -2
  29. package/dist/node/index.d.ts.map +1 -1
  30. package/dist/node/index.js +2 -2
  31. package/dist/node/index.js.map +1 -1
  32. package/dist/tsconfig.tsbuildinfo +1 -0
  33. package/package.json +50 -5
  34. package/src/client/react.ts +7 -0
  35. package/src/client/solid.ts +7 -0
  36. package/src/client/svelte.ts +7 -0
  37. package/src/client/vanilla.ts +7 -0
  38. package/src/client/vue.ts +7 -0
  39. package/src/index.ts +2 -2
  40. package/tsdown.config.ts +9 -1
  41. package/.turbo/turbo-types$colon$check.log +0 -1
  42. package/dist/browser/index.js.map +0 -1
  43. package/src/message-service.ts +0 -18
@@ -0,0 +1,136 @@
1
+ import { i as isMutatorHook, n as createChatnoClients, r as isGetHook } from "../src-DBY5sKUM.js";
2
+
3
+ //#region ../../packages/fragno/dist/client/vanilla.js
4
+ /**
5
+ * Creates an async iterator from a subscribe function that follows the observable pattern.
6
+ *
7
+ * @template T The type of values produced by the store.
8
+ * @param subscribe A function that subscribes to store updates. It receives a callback to be
9
+ * called on each update, and returns an unsubscribe function.
10
+ * @returns An async generator that yields store values as they are produced.
11
+ */
12
+ function createAsyncIteratorFromCallback(subscribe) {
13
+ const queue = [];
14
+ let unsubscribe = null;
15
+ let resolveNext = null;
16
+ const unsubscribeFunc = subscribe((value) => {
17
+ if (resolveNext) {
18
+ resolveNext({
19
+ value,
20
+ done: false
21
+ });
22
+ resolveNext = null;
23
+ } else queue.push(value);
24
+ });
25
+ if (typeof unsubscribeFunc === "function") unsubscribe = unsubscribeFunc;
26
+ return async function* () {
27
+ try {
28
+ while (true) if (queue.length > 0) yield queue.shift();
29
+ else yield await new Promise((resolve) => {
30
+ resolveNext = (result) => {
31
+ if (!result.done) resolve(result.value);
32
+ };
33
+ });
34
+ } finally {
35
+ if (unsubscribe) unsubscribe();
36
+ }
37
+ }();
38
+ }
39
+ function createVanillaListeners(hook) {
40
+ return ({ path, query } = {}) => {
41
+ const store = hook.store({
42
+ path,
43
+ query
44
+ });
45
+ return {
46
+ listen: (callback) => {
47
+ return store.listen(({ loading, error, data }) => callback({
48
+ loading,
49
+ error,
50
+ data
51
+ }));
52
+ },
53
+ subscribe: (callback) => {
54
+ return store.subscribe(({ loading, error, data }) => callback({
55
+ loading,
56
+ error,
57
+ data
58
+ }));
59
+ },
60
+ refetch: () => {
61
+ return store.revalidate();
62
+ },
63
+ get: () => {
64
+ return store.get();
65
+ },
66
+ [Symbol.asyncIterator]() {
67
+ return createAsyncIteratorFromCallback((callback) => store.listen(({ loading, error, data }) => callback({
68
+ loading,
69
+ error,
70
+ data
71
+ })));
72
+ }
73
+ };
74
+ };
75
+ }
76
+ function createVanillaMutator(hook) {
77
+ return () => {
78
+ const store = hook.mutatorStore;
79
+ return {
80
+ subscribe: (callback) => {
81
+ return store.subscribe((value) => {
82
+ callback({
83
+ loading: value.loading ?? false,
84
+ error: value.error,
85
+ data: value.data
86
+ });
87
+ });
88
+ },
89
+ get: () => {
90
+ const { loading, error, data } = store.get();
91
+ return {
92
+ loading: loading ?? false,
93
+ error,
94
+ data
95
+ };
96
+ },
97
+ mutate: ({ body, path, query }) => {
98
+ return store.mutate({
99
+ body,
100
+ path,
101
+ query
102
+ });
103
+ },
104
+ [Symbol.asyncIterator]() {
105
+ return createAsyncIteratorFromCallback((callback) => store.listen((value) => {
106
+ callback({
107
+ loading: value.loading ?? false,
108
+ error: value.error,
109
+ data: value.data
110
+ });
111
+ }));
112
+ }
113
+ };
114
+ };
115
+ }
116
+ function useFragno(clientObj) {
117
+ const result = {};
118
+ for (const key in clientObj) {
119
+ if (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;
120
+ const hook = clientObj[key];
121
+ if (isGetHook(hook)) result[key] = createVanillaListeners(hook);
122
+ else if (isMutatorHook(hook)) result[key] = createVanillaMutator(hook);
123
+ else result[key] = hook;
124
+ }
125
+ return result;
126
+ }
127
+
128
+ //#endregion
129
+ //#region src/client/vanilla.ts
130
+ function createChatnoClient(config = {}) {
131
+ return useFragno(createChatnoClients(config));
132
+ }
133
+
134
+ //#endregion
135
+ export { createChatnoClient };
136
+ //# sourceMappingURL=vanilla.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vanilla.js","names":["a","isGetHook","o","isMutatorHook","createAsyncIteratorFromCallback","subscribe","queue","unsubscribe","resolveNext","unsubscribeFunc","value","done","push","length","shift","Promise","resolve","result","createVanillaListeners","hook","path","query","store","listen","callback","loading","error","data","refetch","revalidate","get","Symbol","asyncIterator","createVanillaMutator","mutatorStore","mutate","body","useFragno","clientObj","key","Object","prototype","hasOwnProperty","call","useFragno","createChatnoClients","FragnoPublicClientConfig","createChatnoClient","config"],"sources":["../../../../../packages/fragno/dist/client/vanilla.js","../../../src/client/vanilla.ts"],"sourcesContent":["import \"../api-DuzjjCT4.js\";\nimport \"../route-Dq62lXqB.js\";\nimport { a as isGetHook, o as isMutatorHook } from \"../client-C_Oc8hpD.js\";\nimport \"../ssr-BAhbA_3q.js\";\n\n//#region src/util/async.ts\n/**\n* Creates an async iterator from a subscribe function that follows the observable pattern.\n*\n* @template T The type of values produced by the store.\n* @param subscribe A function that subscribes to store updates. It receives a callback to be\n* called on each update, and returns an unsubscribe function.\n* @returns An async generator that yields store values as they are produced.\n*/\nfunction createAsyncIteratorFromCallback(subscribe) {\n\tconst queue = [];\n\tlet unsubscribe = null;\n\tlet resolveNext = null;\n\tconst unsubscribeFunc = subscribe((value) => {\n\t\tif (resolveNext) {\n\t\t\tresolveNext({\n\t\t\t\tvalue,\n\t\t\t\tdone: false\n\t\t\t});\n\t\t\tresolveNext = null;\n\t\t} else queue.push(value);\n\t});\n\tif (typeof unsubscribeFunc === \"function\") unsubscribe = unsubscribeFunc;\n\treturn (async function* () {\n\t\ttry {\n\t\t\twhile (true) if (queue.length > 0) yield queue.shift();\n\t\t\telse yield await new Promise((resolve) => {\n\t\t\t\tresolveNext = (result) => {\n\t\t\t\t\tif (!result.done) resolve(result.value);\n\t\t\t\t};\n\t\t\t});\n\t\t} finally {\n\t\t\tif (unsubscribe) unsubscribe();\n\t\t}\n\t})();\n}\n\n//#endregion\n//#region src/client/vanilla.ts\nfunction createVanillaListeners(hook) {\n\treturn ({ path, query } = {}) => {\n\t\tconst store = hook.store({\n\t\t\tpath,\n\t\t\tquery\n\t\t});\n\t\treturn {\n\t\t\tlisten: (callback) => {\n\t\t\t\treturn store.listen(({ loading, error, data }) => callback({\n\t\t\t\t\tloading,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t}));\n\t\t\t},\n\t\t\tsubscribe: (callback) => {\n\t\t\t\treturn store.subscribe(({ loading, error, data }) => callback({\n\t\t\t\t\tloading,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t}));\n\t\t\t},\n\t\t\trefetch: () => {\n\t\t\t\treturn store.revalidate();\n\t\t\t},\n\t\t\tget: () => {\n\t\t\t\treturn store.get();\n\t\t\t},\n\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\treturn createAsyncIteratorFromCallback((callback) => store.listen(({ loading, error, data }) => callback({\n\t\t\t\t\tloading,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t})));\n\t\t\t}\n\t\t};\n\t};\n}\nfunction createVanillaMutator(hook) {\n\treturn () => {\n\t\tconst store = hook.mutatorStore;\n\t\treturn {\n\t\t\tsubscribe: (callback) => {\n\t\t\t\treturn store.subscribe((value) => {\n\t\t\t\t\tcallback({\n\t\t\t\t\t\tloading: value.loading ?? false,\n\t\t\t\t\t\terror: value.error,\n\t\t\t\t\t\tdata: value.data\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tget: () => {\n\t\t\t\tconst { loading, error, data } = store.get();\n\t\t\t\treturn {\n\t\t\t\t\tloading: loading ?? false,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t};\n\t\t\t},\n\t\t\tmutate: ({ body, path, query }) => {\n\t\t\t\treturn store.mutate({\n\t\t\t\t\tbody,\n\t\t\t\t\tpath,\n\t\t\t\t\tquery\n\t\t\t\t});\n\t\t\t},\n\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\treturn createAsyncIteratorFromCallback((callback) => store.listen((value) => {\n\t\t\t\t\tcallback({\n\t\t\t\t\t\tloading: value.loading ?? false,\n\t\t\t\t\t\terror: value.error,\n\t\t\t\t\t\tdata: value.data\n\t\t\t\t\t});\n\t\t\t\t}));\n\t\t\t}\n\t\t};\n\t};\n}\nfunction useFragno(clientObj) {\n\tconst result = {};\n\tfor (const key in clientObj) {\n\t\tif (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;\n\t\tconst hook = clientObj[key];\n\t\tif (isGetHook(hook)) result[key] = createVanillaListeners(hook);\n\t\telse if (isMutatorHook(hook)) result[key] = createVanillaMutator(hook);\n\t\telse result[key] = hook;\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { useFragno };\n//# sourceMappingURL=vanilla.js.map","import { useFragno } from \"@fragno-dev/core/vanilla\";\nimport { createChatnoClients } from \"..\";\nimport type { FragnoPublicClientConfig } from \"@fragno-dev/core\";\n\nexport function createChatnoClient(config: FragnoPublicClientConfig = {}) {\n return useFragno(createChatnoClients(config));\n}\n"],"mappings":";;;;;;;;;;;AAcA,SAASI,gCAAgCC,WAAW;CACnD,MAAMC,QAAQ,EAAE;CAChB,IAAIC,cAAc;CAClB,IAAIC,cAAc;CAClB,MAAMC,kBAAkBJ,WAAWK,UAAU;AAC5C,MAAIF,aAAa;AAChBA,eAAY;IACXE;IACAC,MAAM;IACN,CAAC;AACFH,iBAAc;QACRF,OAAMM,KAAKF,MAAM;GACvB;AACF,KAAI,OAAOD,oBAAoB,WAAYF,eAAcE;AACzD,QAAQ,mBAAmB;AAC1B,MAAI;AACH,UAAO,KAAM,KAAIH,MAAMO,SAAS,EAAG,OAAMP,MAAMQ,OAAO;OACjD,OAAM,MAAM,IAAIC,SAASC,YAAY;AACzCR,mBAAeS,WAAW;AACzB,SAAI,CAACA,OAAON,KAAMK,SAAQC,OAAOP,MAAM;;KAEvC;YACO;AACT,OAAIH,YAAaA,cAAa;;IAE5B;;AAKL,SAASW,uBAAuBC,MAAM;AACrC,SAAQ,EAAEC,MAAMC,UAAU,EAAE,KAAK;EAChC,MAAMC,QAAQH,KAAKG,MAAM;GACxBF;GACAC;GACA,CAAC;AACF,SAAO;GACNE,SAASC,aAAa;AACrB,WAAOF,MAAMC,QAAQ,EAAEE,SAASC,OAAOC,WAAWH,SAAS;KAC1DC;KACAC;KACAC;KACA,CAAC,CAAC;;GAEJtB,YAAYmB,aAAa;AACxB,WAAOF,MAAMjB,WAAW,EAAEoB,SAASC,OAAOC,WAAWH,SAAS;KAC7DC;KACAC;KACAC;KACA,CAAC,CAAC;;GAEJC,eAAe;AACd,WAAON,MAAMO,YAAY;;GAE1BC,WAAW;AACV,WAAOR,MAAMQ,KAAK;;GAEnB,CAACC,OAAOC,iBAAiB;AACxB,WAAO5B,iCAAiCoB,aAAaF,MAAMC,QAAQ,EAAEE,SAASC,OAAOC,WAAWH,SAAS;KACxGC;KACAC;KACAC;KACA,CAAC,CAAC,CAAC;;GAEL;;;AAGH,SAASM,qBAAqBd,MAAM;AACnC,cAAa;EACZ,MAAMG,QAAQH,KAAKe;AACnB,SAAO;GACN7B,YAAYmB,aAAa;AACxB,WAAOF,MAAMjB,WAAWK,UAAU;AACjCc,cAAS;MACRC,SAASf,MAAMe,WAAW;MAC1BC,OAAOhB,MAAMgB;MACbC,MAAMjB,MAAMiB;MACZ,CAAC;MACD;;GAEHG,WAAW;IACV,MAAM,EAAEL,SAASC,OAAOC,SAASL,MAAMQ,KAAK;AAC5C,WAAO;KACNL,SAASA,WAAW;KACpBC;KACAC;KACA;;GAEFQ,SAAS,EAAEC,MAAMhB,MAAMC,YAAY;AAClC,WAAOC,MAAMa,OAAO;KACnBC;KACAhB;KACAC;KACA,CAAC;;GAEH,CAACU,OAAOC,iBAAiB;AACxB,WAAO5B,iCAAiCoB,aAAaF,MAAMC,QAAQb,UAAU;AAC5Ec,cAAS;MACRC,SAASf,MAAMe,WAAW;MAC1BC,OAAOhB,MAAMgB;MACbC,MAAMjB,MAAMiB;MACZ,CAAC;MACD,CAAC;;GAEJ;;;AAGH,SAASU,UAAUC,WAAW;CAC7B,MAAMrB,SAAS,EAAE;AACjB,MAAK,MAAMsB,OAAOD,WAAW;AAC5B,MAAI,CAACE,OAAOC,UAAUC,eAAeC,KAAKL,WAAWC,IAAI,CAAE;EAC3D,MAAMpB,OAAOmB,UAAUC;AACvB,MAAItC,UAAUkB,KAAK,CAAEF,QAAOsB,OAAOrB,uBAAuBC,KAAK;WACtDhB,cAAcgB,KAAK,CAAEF,QAAOsB,OAAON,qBAAqBd,KAAK;MACjEF,QAAOsB,OAAOpB;;AAEpB,QAAOF;;;;;AC9HR,SAAgB8B,mBAAmBC,SAAmC,EAAE,EAAE;AACxE,QAAOJ,UAAUC,oBAAoBG,OAAO,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { FragnoPublicClientConfig } from "@fragno-dev/core";
2
+ import * as nanostores7 from "nanostores";
3
+ import * as _fragno_dev_core_client1 from "@fragno-dev/core/client";
4
+
5
+ //#region src/client/vue.d.ts
6
+ declare function createChatnoClient(config?: FragnoPublicClientConfig): {
7
+ useSendMessage: _fragno_dev_core_client1.FragnoStoreData<{
8
+ readonly response: nanostores7.ReadableAtom<string>;
9
+ readonly responseLoading: nanostores7.ReadableAtom<boolean | undefined>;
10
+ readonly sendMessage: (message: string) => void;
11
+ }>;
12
+ };
13
+ //#endregion
14
+ export { createChatnoClient };
15
+ //# sourceMappingURL=vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.d.ts","names":[],"sources":["../../../src/client/vue.ts"],"sourcesContent":[],"mappings":";;;;;iBAIgB,kBAAA,UAA2B;;uBAA6B,WAAA,CAAA;;IAAxD,SAAA,WAAkB,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAS,CAAA,CAAA;CAA6B"}
@@ -0,0 +1,111 @@
1
+ import { i as isMutatorHook, n as createChatnoClients, r as isGetHook } from "../src-DBY5sKUM.js";
2
+ import { atom } from "nanostores";
3
+ import { computed as computed$1, getCurrentScope, isRef, onScopeDispose, ref, shallowRef, watch } from "vue";
4
+
5
+ //#region ../../packages/fragno/dist/client/vue.js
6
+ /**
7
+ * Converts a Vue Ref to a NanoStore Atom.
8
+ *
9
+ * This is used to convert Vue refs to atoms, so that we can use them in the store.
10
+ *
11
+ * @private
12
+ */
13
+ function refToAtom(ref$1) {
14
+ const a = atom(ref$1.value);
15
+ watch(ref$1, (newVal) => {
16
+ a.set(newVal);
17
+ });
18
+ return a;
19
+ }
20
+ function createVueHook(hook) {
21
+ return ({ path, query } = {}) => {
22
+ const pathParams = {};
23
+ const queryParams = {};
24
+ for (const [key, value] of Object.entries(path ?? {})) {
25
+ const v = value;
26
+ pathParams[key] = isRef(v) ? refToAtom(v) : v;
27
+ }
28
+ for (const [key, value] of Object.entries(query ?? {})) {
29
+ const v = value;
30
+ queryParams[key] = isRef(v) ? refToAtom(v) : v;
31
+ }
32
+ const store = hook.store({
33
+ path: pathParams,
34
+ query: queryParams
35
+ });
36
+ const data = ref();
37
+ const loading = ref();
38
+ const error = ref();
39
+ const unsubscribe = store.subscribe((updatedStoreValue) => {
40
+ data.value = updatedStoreValue.data;
41
+ loading.value = updatedStoreValue.loading;
42
+ error.value = updatedStoreValue.error;
43
+ });
44
+ if (getCurrentScope()) onScopeDispose(() => {
45
+ unsubscribe();
46
+ });
47
+ return {
48
+ data,
49
+ loading,
50
+ error
51
+ };
52
+ };
53
+ }
54
+ function createVueMutator(hook) {
55
+ return () => {
56
+ const store = useStore(hook.mutatorStore);
57
+ const mutate = async (args) => {
58
+ const { body, path, query } = args;
59
+ const pathParams = {};
60
+ const queryParams = {};
61
+ for (const [key, value] of Object.entries(path ?? {})) {
62
+ const v = value;
63
+ pathParams[key] = isRef(v) ? v.value : v;
64
+ }
65
+ for (const [key, value] of Object.entries(query ?? {})) {
66
+ const v = value;
67
+ queryParams[key] = isRef(v) ? v.value : v;
68
+ }
69
+ return store.value.mutate({
70
+ body,
71
+ path: pathParams,
72
+ query: queryParams
73
+ });
74
+ };
75
+ return {
76
+ mutate,
77
+ loading: computed$1(() => store.value.loading),
78
+ error: computed$1(() => store.value.error),
79
+ data: computed$1(() => store.value.data)
80
+ };
81
+ };
82
+ }
83
+ function useFragno(clientObj) {
84
+ const result = {};
85
+ for (const key in clientObj) {
86
+ if (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;
87
+ const hook = clientObj[key];
88
+ if (isGetHook(hook)) result[key] = createVueHook(hook);
89
+ else if (isMutatorHook(hook)) result[key] = createVueMutator(hook);
90
+ else result[key] = hook;
91
+ }
92
+ return result;
93
+ }
94
+ function useStore(store) {
95
+ const state = shallowRef();
96
+ const unsubscribe = store.subscribe((value) => {
97
+ state.value = value;
98
+ });
99
+ if (getCurrentScope()) onScopeDispose(unsubscribe);
100
+ return state;
101
+ }
102
+
103
+ //#endregion
104
+ //#region src/client/vue.ts
105
+ function createChatnoClient(config = {}) {
106
+ return useFragno(createChatnoClients(config));
107
+ }
108
+
109
+ //#endregion
110
+ export { createChatnoClient };
111
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.js","names":["a","isGetHook","o","isMutatorHook","atom","computed","getCurrentScope","isRef","onScopeDispose","ref","shallowRef","watch","refToAtom","ref$1","value","newVal","set","createVueHook","hook","path","query","pathParams","queryParams","key","Object","entries","v","store","data","loading","error","unsubscribe","subscribe","updatedStoreValue","createVueMutator","useStore","mutatorStore","mutate","args","body","useFragno","clientObj","result","prototype","hasOwnProperty","call","state","useFragno","createChatnoClients","FragnoPublicClientConfig","createChatnoClient","config"],"sources":["../../../../../packages/fragno/dist/client/vue.js","../../../src/client/vue.ts"],"sourcesContent":["import \"../api-DuzjjCT4.js\";\nimport \"../route-Dq62lXqB.js\";\nimport { a as isGetHook, o as isMutatorHook } from \"../client-C_Oc8hpD.js\";\nimport \"../ssr-BAhbA_3q.js\";\nimport { atom } from \"nanostores\";\nimport { computed, getCurrentScope, isRef, onScopeDispose, ref, shallowRef, watch } from \"vue\";\n\n//#region src/client/vue.ts\n/**\n* Converts a Vue Ref to a NanoStore Atom.\n*\n* This is used to convert Vue refs to atoms, so that we can use them in the store.\n*\n* @private\n*/\nfunction refToAtom(ref$1) {\n\tconst a = atom(ref$1.value);\n\twatch(ref$1, (newVal) => {\n\t\ta.set(newVal);\n\t});\n\treturn a;\n}\nfunction createVueHook(hook) {\n\treturn ({ path, query } = {}) => {\n\t\tconst pathParams = {};\n\t\tconst queryParams = {};\n\t\tfor (const [key, value] of Object.entries(path ?? {})) {\n\t\t\tconst v = value;\n\t\t\tpathParams[key] = isRef(v) ? refToAtom(v) : v;\n\t\t}\n\t\tfor (const [key, value] of Object.entries(query ?? {})) {\n\t\t\tconst v = value;\n\t\t\tqueryParams[key] = isRef(v) ? refToAtom(v) : v;\n\t\t}\n\t\tconst store = hook.store({\n\t\t\tpath: pathParams,\n\t\t\tquery: queryParams\n\t\t});\n\t\tconst data = ref();\n\t\tconst loading = ref();\n\t\tconst error = ref();\n\t\tconst unsubscribe = store.subscribe((updatedStoreValue) => {\n\t\t\tdata.value = updatedStoreValue.data;\n\t\t\tloading.value = updatedStoreValue.loading;\n\t\t\terror.value = updatedStoreValue.error;\n\t\t});\n\t\tif (getCurrentScope()) onScopeDispose(() => {\n\t\t\tunsubscribe();\n\t\t});\n\t\treturn {\n\t\t\tdata,\n\t\t\tloading,\n\t\t\terror\n\t\t};\n\t};\n}\nfunction createVueMutator(hook) {\n\treturn () => {\n\t\tconst store = useStore(hook.mutatorStore);\n\t\tconst mutate = async (args) => {\n\t\t\tconst { body, path, query } = args;\n\t\t\tconst pathParams = {};\n\t\t\tconst queryParams = {};\n\t\t\tfor (const [key, value] of Object.entries(path ?? {})) {\n\t\t\t\tconst v = value;\n\t\t\t\tpathParams[key] = isRef(v) ? v.value : v;\n\t\t\t}\n\t\t\tfor (const [key, value] of Object.entries(query ?? {})) {\n\t\t\t\tconst v = value;\n\t\t\t\tqueryParams[key] = isRef(v) ? v.value : v;\n\t\t\t}\n\t\t\treturn store.value.mutate({\n\t\t\t\tbody,\n\t\t\t\tpath: pathParams,\n\t\t\t\tquery: queryParams\n\t\t\t});\n\t\t};\n\t\treturn {\n\t\t\tmutate,\n\t\t\tloading: computed(() => store.value.loading),\n\t\t\terror: computed(() => store.value.error),\n\t\t\tdata: computed(() => store.value.data)\n\t\t};\n\t};\n}\nfunction useFragno(clientObj) {\n\tconst result = {};\n\tfor (const key in clientObj) {\n\t\tif (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;\n\t\tconst hook = clientObj[key];\n\t\tif (isGetHook(hook)) result[key] = createVueHook(hook);\n\t\telse if (isMutatorHook(hook)) result[key] = createVueMutator(hook);\n\t\telse result[key] = hook;\n\t}\n\treturn result;\n}\nfunction useStore(store) {\n\tconst state = shallowRef();\n\tconst unsubscribe = store.subscribe((value) => {\n\t\tstate.value = value;\n\t});\n\tif (getCurrentScope()) onScopeDispose(unsubscribe);\n\treturn state;\n}\n\n//#endregion\nexport { refToAtom, useFragno, useStore };\n//# sourceMappingURL=vue.js.map","import { useFragno } from \"@fragno-dev/core/vue\";\nimport { createChatnoClients } from \"..\";\nimport type { FragnoPublicClientConfig } from \"@fragno-dev/core\";\n\nexport function createChatnoClient(config: FragnoPublicClientConfig = {}) {\n return useFragno(createChatnoClients(config));\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import * as _fragno_dev_core0 from "@fragno-dev/core";
2
2
  import { FragnoPublicClientConfig, FragnoPublicConfig } from "@fragno-dev/core";
3
3
  import { z } from "zod";
4
- import * as _fragno_dev_core_client0 from "@fragno-dev/core/client";
5
- import OpenAI from "openai";
6
4
  import * as nanostores0 from "nanostores";
5
+ import OpenAI from "openai";
6
+ import * as _fragno_dev_core_client0 from "@fragno-dev/core/client";
7
7
  import { FragnoRouteConfig } from "@fragno-dev/core/api";
8
8
 
9
9
  //#region src/index.d.ts
@@ -61,7 +61,7 @@ declare function createChatno(chatnoConfig: ChatnoServerConfig, fragnoConfig?: F
61
61
  }, {
62
62
  getOpenAIURL: () => string;
63
63
  }>;
64
- declare function createChatnoClient(fragnoConfig?: FragnoPublicClientConfig): {
64
+ declare function createChatnoClients(fragnoConfig: FragnoPublicClientConfig): {
65
65
  useSendMessage: _fragno_dev_core_client0.FragnoStoreData<{
66
66
  readonly response: nanostores0.ReadableAtom<string>;
67
67
  readonly responseLoading: nanostores0.ReadableAtom<boolean | undefined>;
@@ -69,5 +69,5 @@ declare function createChatnoClient(fragnoConfig?: FragnoPublicClientConfig): {
69
69
  }>;
70
70
  };
71
71
  //#endregion
72
- export { ChatnoServerConfig, type FragnoRouteConfig, createChatno, createChatnoClient };
72
+ export { ChatnoServerConfig, type FragnoRouteConfig, createChatno, createChatnoClients };
73
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAaiB,kBAAA;;;;;iBAsDD,YAAA,eACA,mCACA,uCAAuB,8CAAA,0CAAA,CAAA,CAAA;EAxDtB,QAAA,YAAA,wBAAkB,CAAA,YAAA,CAAA;IAsDnB,IAAA,cAAY,CAAA,MAAA,CAAA;IAAA,EAAA,aAAA;IACZ,IAAA,WAAA,CAAA;MACA,IAAA,EAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;OAAuB,aAAA;;;;;;;;;;;;;;;;;;;;iBAWvB,kBAAA,gBAAiC;;uBAA6B,WAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAaiB,kBAAA;;;;;iBAsDD,YAAA,eACA,mCACA,uCAAuB,8CAAA,0CAAA,CAAA,CAAA;EAxDtB,QAAA,YAAA,wBAAkB,CAAA,YAAA,CAAA;IAsDnB,IAAA,cAAY,CAAA,MAAA,CAAA;IACZ,EAAA,aAAA;IACA,IAAA,WAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;EAAuB,aAAA,aAAA;;;;;;;;;;;;;;;;;;;mBAAA,GAAA,MAAA;;iBAWvB,mBAAA,eAAkC;;uBAAwB,WAAA,CAAA"}
@@ -1,119 +1,3 @@
1
- import { createFragment, defineFragment, defineRoute, defineRoutes } from "@fragno-dev/core";
2
- import { z } from "zod";
3
- import { createClientBuilder } from "@fragno-dev/core/client";
4
- import OpenAI from "openai";
5
- import { computed } from "nanostores";
1
+ import { n as createChatnoClients, t as createChatno } from "./src-DBY5sKUM.js";
6
2
 
7
- //#region src/server/chatno-api.ts
8
- const ChatMessageSchema = z.object({
9
- type: z.literal("chat"),
10
- id: z.string(),
11
- role: z.enum(["user", "assistant"]),
12
- content: z.string()
13
- });
14
- const FunctionCallMessageSchema = z.object({
15
- type: z.literal("functionCall"),
16
- id: z.string(),
17
- functionCallId: z.string(),
18
- name: z.string(),
19
- arguments: z.string()
20
- });
21
- const FunctionCallOutputMessageSchema = z.object({
22
- type: z.literal("functionCallOutput"),
23
- id: z.string(),
24
- functionCallId: z.string(),
25
- output: z.string(),
26
- status: z.enum([
27
- "inProgress",
28
- "completed",
29
- "incomplete"
30
- ])
31
- });
32
- const InputMessageSchema = z.discriminatedUnion("type", [
33
- ChatMessageSchema,
34
- FunctionCallMessageSchema,
35
- FunctionCallOutputMessageSchema
36
- ]);
37
- const ChatStreamRequestSchema = z.object({ messages: z.array(InputMessageSchema) });
38
- const ResponseTextDeltaEventSchema = z.object({
39
- type: z.literal("response.output_text.delta"),
40
- content_index: z.number(),
41
- delta: z.string(),
42
- item_id: z.string(),
43
- output_index: z.number(),
44
- sequence_number: z.number()
45
- });
46
- const ResponseTextDoneEventSchema = z.object({
47
- type: z.literal("response.output_text.done"),
48
- content_index: z.number(),
49
- item_id: z.string(),
50
- output_index: z.number(),
51
- sequence_number: z.number(),
52
- text: z.string()
53
- });
54
- const ResponseEventSchema = z.discriminatedUnion("type", [ResponseTextDeltaEventSchema, ResponseTextDoneEventSchema]);
55
- const chatRouteFactory = defineRoutes().create(({ config, deps }) => {
56
- return [defineRoute({
57
- method: "POST",
58
- path: "/chat/stream",
59
- inputSchema: ChatStreamRequestSchema,
60
- outputSchema: z.array(ResponseEventSchema),
61
- handler: () => {}
62
- })];
63
- });
64
-
65
- //#endregion
66
- //#region src/index.ts
67
- const healthRoute = defineRoute({
68
- method: "GET",
69
- path: "/health",
70
- outputSchema: z.object({ status: z.literal("ok") }),
71
- handler: () => {}
72
- });
73
- const simpleStreamRoute = defineRoute({
74
- method: "GET",
75
- path: "/simple-stream",
76
- outputSchema: z.array(z.object({ message: z.string() })),
77
- handler: () => {}
78
- });
79
- const DEFAULT_SYSTEM_PROMPT = `You are an AI assistant integrated into a dashboard.`;
80
- const chatnoDefinition = defineFragment("chatno").withDependencies(() => {}).withServices(() => {});
81
- const routes = [
82
- chatRouteFactory,
83
- healthRoute,
84
- simpleStreamRoute
85
- ];
86
- function createChatno(chatnoConfig, fragnoConfig = {}) {
87
- const config = {
88
- model: chatnoConfig.model ?? "gpt-5-nano",
89
- systemPrompt: chatnoConfig.systemPrompt ?? DEFAULT_SYSTEM_PROMPT
90
- };
91
- return createFragment(chatnoDefinition, {
92
- ...chatnoConfig,
93
- ...config
94
- }, routes, fragnoConfig);
95
- }
96
- function createChatnoClient(fragnoConfig = {}) {
97
- const cb = createClientBuilder(chatnoDefinition, fragnoConfig, routes);
98
- const chatStream = cb.createMutator("POST", "/chat/stream");
99
- const aggregatedMessage = computed(chatStream.mutatorStore, ({ data }) => {
100
- return (data ?? []).filter((item) => item.type === "response.output_text.delta").map((item) => item.delta).join("");
101
- });
102
- function sendMessage(message) {
103
- chatStream.mutatorStore.mutate({ body: { messages: [{
104
- type: "chat",
105
- id: crypto.randomUUID(),
106
- role: "user",
107
- content: message
108
- }] } });
109
- }
110
- return { useSendMessage: cb.createStore({
111
- response: aggregatedMessage,
112
- responseLoading: computed(chatStream.mutatorStore, ({ loading }) => loading),
113
- sendMessage
114
- }) };
115
- }
116
-
117
- //#endregion
118
- export { createChatno, createChatnoClient };
119
- //# sourceMappingURL=index.js.map
3
+ export { createChatno, createChatnoClients };