@fragno-dev/core 0.0.6 → 0.1.0

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 (74) hide show
  1. package/.turbo/turbo-build.log +54 -43
  2. package/.turbo/turbo-test.log +297 -0
  3. package/CHANGELOG.md +14 -0
  4. package/dist/api/api.d.ts +1 -1
  5. package/dist/api/api.js +1 -1
  6. package/dist/api/fragment-builder.d.ts +3 -0
  7. package/dist/api/fragment-builder.js +3 -0
  8. package/dist/api/fragment-instantiation.d.ts +3 -0
  9. package/dist/api/fragment-instantiation.js +5 -0
  10. package/dist/{api-CBDGZiLC.d.ts → api-Dcr4_-3g.d.ts} +3 -3
  11. package/dist/api-Dcr4_-3g.d.ts.map +1 -0
  12. package/dist/{api-DgHfYjq2.js → api-DngJDcmO.js} +2 -2
  13. package/dist/{api-DgHfYjq2.js.map → api-DngJDcmO.js.map} +1 -1
  14. package/dist/client/client.d.ts +2 -2
  15. package/dist/client/client.js +4 -4
  16. package/dist/client/client.svelte.d.ts +14 -14
  17. package/dist/client/client.svelte.d.ts.map +1 -1
  18. package/dist/client/client.svelte.js +4 -4
  19. package/dist/client/react.d.ts +12 -12
  20. package/dist/client/react.d.ts.map +1 -1
  21. package/dist/client/react.js +6 -8
  22. package/dist/client/react.js.map +1 -1
  23. package/dist/client/solid.d.ts +45 -0
  24. package/dist/client/solid.d.ts.map +1 -0
  25. package/dist/client/solid.js +110 -0
  26. package/dist/client/solid.js.map +1 -0
  27. package/dist/client/vanilla.d.ts +21 -21
  28. package/dist/client/vanilla.d.ts.map +1 -1
  29. package/dist/client/vanilla.js +4 -4
  30. package/dist/client/vue.d.ts +14 -14
  31. package/dist/client/vue.d.ts.map +1 -1
  32. package/dist/client/vue.js +4 -4
  33. package/dist/{client-DWjxKDnE.js → client-CZCasGGB.js} +7 -10
  34. package/dist/client-CZCasGGB.js.map +1 -0
  35. package/dist/fragment-builder-DOnCVBqc.js +47 -0
  36. package/dist/fragment-builder-DOnCVBqc.js.map +1 -0
  37. package/dist/fragment-builder-Dcdsms1l.d.ts +356 -0
  38. package/dist/fragment-builder-Dcdsms1l.d.ts.map +1 -0
  39. package/dist/fragment-instantiation-f4AhwQss.js +197 -0
  40. package/dist/fragment-instantiation-f4AhwQss.js.map +1 -0
  41. package/dist/integrations/react-ssr.js +1 -1
  42. package/dist/mod.d.ts +3 -3
  43. package/dist/mod.js +5 -204
  44. package/dist/{route-Bp6eByhz.js → route-B4RbOWjd.js} +6 -6
  45. package/dist/route-B4RbOWjd.js.map +1 -0
  46. package/dist/{ssr-tJHqcNSw.js → ssr-CamRrMc0.js} +2 -2
  47. package/dist/{ssr-tJHqcNSw.js.map → ssr-CamRrMc0.js.map} +1 -1
  48. package/package.json +34 -5
  49. package/src/api/fragment-builder.ts +81 -0
  50. package/src/api/{fragment.ts → fragment-instantiation.ts} +65 -67
  51. package/src/api/fragment.test.ts +44 -16
  52. package/src/api/request-middleware.test.ts +6 -5
  53. package/src/api/request-output-context.ts +3 -3
  54. package/src/api/route.ts +1 -8
  55. package/src/client/client-builder.test.ts +2 -2
  56. package/src/client/client-error.test.ts +17 -1
  57. package/src/client/client.ssr.test.ts +1 -1
  58. package/src/client/client.svelte.test.ts +1 -1
  59. package/src/client/client.test.ts +1 -1
  60. package/src/client/client.ts +5 -2
  61. package/src/client/react.test.ts +1 -1
  62. package/src/client/solid.test.ts +840 -0
  63. package/src/client/solid.ts +261 -0
  64. package/src/client/vanilla.test.ts +1 -1
  65. package/src/client/vue.test.ts +1 -1
  66. package/src/mod.ts +3 -3
  67. package/tsdown.config.ts +3 -0
  68. package/vitest.config.ts +10 -7
  69. package/dist/api-CBDGZiLC.d.ts.map +0 -1
  70. package/dist/client-B6s-lTFe.d.ts +0 -315
  71. package/dist/client-B6s-lTFe.d.ts.map +0 -1
  72. package/dist/client-DWjxKDnE.js.map +0 -1
  73. package/dist/mod.js.map +0 -1
  74. package/dist/route-Bp6eByhz.js.map +0 -1
@@ -0,0 +1,261 @@
1
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ import { atom, type ReadableAtom, type Store, type StoreValue } from "nanostores";
3
+ import { useStore } from "@nanostores/solid";
4
+ import type { Accessor } from "solid-js";
5
+ import { createEffect } from "solid-js";
6
+ import type { NonGetHTTPMethod } from "../api/api";
7
+ import {
8
+ isGetHook,
9
+ isMutatorHook,
10
+ isStore,
11
+ type FragnoClientHookData,
12
+ type FragnoClientMutatorData,
13
+ type FragnoStoreData,
14
+ } from "./client";
15
+ import type { FragnoClientError } from "./client-error";
16
+ import type { InferOr } from "../util/types-util";
17
+ import type { MaybeExtractPathParamsOrWiden, QueryParamsHint } from "../api/internal/path";
18
+ import { isReadableAtom } from "../util/nanostores";
19
+
20
+ export type FragnoSolidHook<
21
+ _TMethod extends "GET",
22
+ TPath extends string,
23
+ TOutputSchema extends StandardSchemaV1,
24
+ TErrorCode extends string,
25
+ TQueryParameters extends string,
26
+ > = (args?: {
27
+ path?: MaybeExtractPathParamsOrWiden<TPath, string | Accessor<string> | ReadableAtom<string>>;
28
+ query?: QueryParamsHint<TQueryParameters, string | Accessor<string> | ReadableAtom<string>>;
29
+ }) => {
30
+ data: Accessor<InferOr<TOutputSchema, undefined>>;
31
+ loading: Accessor<boolean>;
32
+ error: Accessor<FragnoClientError<TErrorCode[number]> | undefined>;
33
+ };
34
+
35
+ export type FragnoSolidMutator<
36
+ _TMethod extends NonGetHTTPMethod,
37
+ TPath extends string,
38
+ TInputSchema extends StandardSchemaV1 | undefined,
39
+ TOutputSchema extends StandardSchemaV1 | undefined,
40
+ TErrorCode extends string,
41
+ TQueryParameters extends string,
42
+ > = () => {
43
+ mutate: (args: {
44
+ body?: InferOr<TInputSchema, undefined>;
45
+ path?: MaybeExtractPathParamsOrWiden<TPath, string | Accessor<string> | ReadableAtom<string>>;
46
+ query?: QueryParamsHint<TQueryParameters, string | Accessor<string> | ReadableAtom<string>>;
47
+ }) => Promise<InferOr<TOutputSchema, undefined>>;
48
+ loading: Accessor<boolean | undefined>;
49
+ error: Accessor<FragnoClientError<TErrorCode[number]> | undefined>;
50
+ data: Accessor<InferOr<TOutputSchema, undefined>>;
51
+ };
52
+
53
+ /**
54
+ * Type guard to check if a value is a SolidJS Accessor.
55
+ *
56
+ * @private
57
+ */
58
+ export function isAccessor(value: unknown): value is Accessor<string> {
59
+ return typeof value === "function";
60
+ }
61
+
62
+ /**
63
+ * Converts a SolidJS Accessor to a NanoStore Atom.
64
+ *
65
+ * This is used to convert SolidJS accessors to atoms, so that we can use them in the store.
66
+ *
67
+ * @private
68
+ */
69
+ export function accessorToAtom<T>(accessor: Accessor<T>): ReadableAtom<T> {
70
+ const a = atom(accessor());
71
+
72
+ createEffect(() => {
73
+ a.set(accessor());
74
+ });
75
+
76
+ return a;
77
+ }
78
+
79
+ // Helper function to create a SolidJS signal from a GET hook
80
+ // We want 1 store per hook, so on updates to params, we need to update the store instead of creating a new one.
81
+ // Nanostores only works with atoms (or strings), so we need to convert SolidJS accessors to atoms.
82
+ function createSolidHook<
83
+ TMethod extends "GET",
84
+ TPath extends string,
85
+ TOutputSchema extends StandardSchemaV1,
86
+ TErrorCode extends string,
87
+ TQueryParameters extends string,
88
+ >(
89
+ hook: FragnoClientHookData<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters>,
90
+ ): FragnoSolidHook<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters> {
91
+ return ({ path, query } = {}) => {
92
+ const pathParams: Record<string, string | ReadableAtom<string>> = {};
93
+ const queryParams: Record<string, string | ReadableAtom<string>> = {};
94
+
95
+ for (const [key, value] of Object.entries(path ?? {})) {
96
+ const v = value as string | Accessor<string> | ReadableAtom<string>;
97
+ pathParams[key] = isAccessor(v) ? accessorToAtom(v) : v;
98
+ }
99
+
100
+ for (const [key, value] of Object.entries(query ?? {})) {
101
+ const v = value as string | Accessor<string> | ReadableAtom<string>;
102
+ queryParams[key] = isAccessor(v) ? accessorToAtom(v) : v;
103
+ }
104
+
105
+ const store = hook.store({
106
+ path: pathParams as MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>,
107
+ query: queryParams,
108
+ });
109
+
110
+ const storeValue = useStore(store);
111
+
112
+ return {
113
+ data: () => storeValue().data as InferOr<TOutputSchema, undefined>,
114
+ loading: () => storeValue().loading,
115
+ error: () => storeValue().error,
116
+ };
117
+ };
118
+ }
119
+
120
+ // Helper function to create a SolidJS mutator from a mutator hook
121
+ function createSolidMutator<
122
+ TMethod extends NonGetHTTPMethod,
123
+ TPath extends string,
124
+ TInputSchema extends StandardSchemaV1 | undefined,
125
+ TOutputSchema extends StandardSchemaV1 | undefined,
126
+ TErrorCode extends string,
127
+ TQueryParameters extends string,
128
+ >(
129
+ hook: FragnoClientMutatorData<
130
+ TMethod,
131
+ TPath,
132
+ TInputSchema,
133
+ TOutputSchema,
134
+ TErrorCode,
135
+ TQueryParameters
136
+ >,
137
+ ): FragnoSolidMutator<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters> {
138
+ return () => {
139
+ const store = useStore(hook.mutatorStore);
140
+
141
+ // Create a wrapped mutate function that handles SolidJS accessors
142
+ const mutate = async (args: {
143
+ body?: InferOr<TInputSchema, undefined>;
144
+ path?: MaybeExtractPathParamsOrWiden<TPath, string | Accessor<string> | ReadableAtom<string>>;
145
+ query?: QueryParamsHint<TQueryParameters, string | Accessor<string> | ReadableAtom<string>>;
146
+ }) => {
147
+ const { body, path, query } = args;
148
+
149
+ const pathParams: Record<string, string | ReadableAtom<string>> = {};
150
+ const queryParams: Record<string, string | ReadableAtom<string>> = {};
151
+
152
+ for (const [key, value] of Object.entries(path ?? {})) {
153
+ const v = value as string | Accessor<string> | ReadableAtom<string>;
154
+ // For mutations, we read the current value of the accessor
155
+ pathParams[key] = isAccessor(v) ? v() : v;
156
+ }
157
+
158
+ for (const [key, value] of Object.entries(query ?? {})) {
159
+ const v = value as string | Accessor<string> | ReadableAtom<string>;
160
+ // For mutations, we read the current value of the accessor
161
+ queryParams[key] = isAccessor(v) ? v() : v;
162
+ }
163
+
164
+ // Call the store's mutate function with normalized params
165
+ return hook.mutatorStore.mutate({
166
+ body,
167
+ path: pathParams as MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>,
168
+ query: queryParams,
169
+ });
170
+ };
171
+
172
+ return {
173
+ mutate,
174
+ data: () => store().data as InferOr<TOutputSchema, undefined>,
175
+ loading: () => store().loading,
176
+ error: () => store().error,
177
+ };
178
+ };
179
+ }
180
+
181
+ export type FragnoSolidStore<T extends object> = T extends Store
182
+ ? Accessor<StoreValue<T>>
183
+ : () => {
184
+ [K in keyof T]: T[K] extends Store ? Accessor<StoreValue<T[K]>> : T[K];
185
+ };
186
+
187
+ function createSolidStore<const T extends object>(
188
+ hook: FragnoStoreData<T>,
189
+ ): Accessor<StoreValue<T>> | (() => Accessor<StoreValue<T>>) {
190
+ // If the store object itself is a single atom, wrap it with useStore
191
+ if (isReadableAtom(hook.obj)) {
192
+ return useStore(hook.obj);
193
+ }
194
+
195
+ // For objects containing atoms, wrap each atom property with useStore
196
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
197
+ const result: any = {};
198
+
199
+ for (const key in hook.obj) {
200
+ if (!Object.prototype.hasOwnProperty.call(hook.obj, key)) {
201
+ continue;
202
+ }
203
+
204
+ const value = hook.obj[key];
205
+ if (isReadableAtom(value)) {
206
+ result[key] = useStore(value);
207
+ } else {
208
+ result[key] = value;
209
+ }
210
+ }
211
+
212
+ return () => result;
213
+ }
214
+
215
+ export function useFragno<T extends Record<string, unknown>>(
216
+ clientObj: T,
217
+ ): {
218
+ [K in keyof T]: T[K] extends FragnoClientHookData<
219
+ "GET",
220
+ infer TPath,
221
+ infer TOutputSchema,
222
+ infer TErrorCode,
223
+ infer TQueryParameters
224
+ >
225
+ ? FragnoSolidHook<"GET", TPath, TOutputSchema, TErrorCode, TQueryParameters>
226
+ : T[K] extends FragnoClientMutatorData<
227
+ infer TMethod,
228
+ infer TPath,
229
+ infer TInput,
230
+ infer TOutput,
231
+ infer TError,
232
+ infer TQueryParameters
233
+ >
234
+ ? FragnoSolidMutator<TMethod, TPath, TInput, TOutput, TError, TQueryParameters>
235
+ : T[K] extends FragnoStoreData<infer TStoreObj>
236
+ ? FragnoSolidStore<TStoreObj>
237
+ : T[K];
238
+ } {
239
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
240
+ const result = {} as any;
241
+
242
+ for (const key in clientObj) {
243
+ if (!Object.prototype.hasOwnProperty.call(clientObj, key)) {
244
+ continue;
245
+ }
246
+
247
+ const hook = clientObj[key];
248
+ if (isGetHook(hook)) {
249
+ result[key] = createSolidHook(hook);
250
+ } else if (isMutatorHook(hook)) {
251
+ result[key] = createSolidMutator(hook);
252
+ } else if (isStore(hook)) {
253
+ result[key] = createSolidStore(hook);
254
+ } else {
255
+ // Pass through non-hook values unchanged
256
+ result[key] = hook;
257
+ }
258
+ }
259
+
260
+ return result;
261
+ }
@@ -4,7 +4,7 @@ import { z } from "zod";
4
4
  import { createClientBuilder } from "./client";
5
5
  import { useFragno } from "./vanilla";
6
6
  import { defineRoute } from "../api/route";
7
- import { defineFragment } from "../api/fragment";
7
+ import { defineFragment } from "../api/fragment-builder";
8
8
  import type { FragnoPublicClientConfig } from "../mod";
9
9
  import { FragnoClientFetchNetworkError } from "./client-error";
10
10
  import { waitForAsyncIterator } from "../util/async";
@@ -2,7 +2,7 @@ import { test, expect, describe, vi, beforeEach, afterEach, assert } from "vites
2
2
  import { type FragnoPublicClientConfig } from "../mod";
3
3
  import { createClientBuilder } from "./client";
4
4
  import { defineRoute } from "../api/route";
5
- import { defineFragment } from "../api/fragment";
5
+ import { defineFragment } from "../api/fragment-builder";
6
6
  import { z } from "zod";
7
7
  import { refToAtom, useFragno } from "./vue";
8
8
  import { waitFor } from "@testing-library/vue";
package/src/mod.ts CHANGED
@@ -1,12 +1,12 @@
1
+ export { defineFragment, FragmentBuilder, type FragmentDefinition } from "./api/fragment-builder";
2
+
1
3
  export {
2
- defineFragment,
3
4
  createFragment,
4
- FragmentBuilder,
5
5
  type FragnoFragmentSharedConfig,
6
6
  type FragnoPublicConfig,
7
7
  type FragnoPublicClientConfig,
8
8
  type FragnoInstantiatedFragment,
9
- } from "./api/fragment";
9
+ } from "./api/fragment-instantiation";
10
10
 
11
11
  export { type FragnoRouteConfig } from "./api/api";
12
12
 
package/tsdown.config.ts CHANGED
@@ -4,11 +4,14 @@ export default defineConfig({
4
4
  entry: [
5
5
  "./src/mod.ts",
6
6
  "./src/api/api.ts",
7
+ "./src/api/fragment-builder.ts",
8
+ "./src/api/fragment-instantiation.ts",
7
9
  "./src/client/client.ts",
8
10
  "./src/client/vanilla.ts",
9
11
  "./src/client/client.svelte.ts",
10
12
  "./src/client/react.ts",
11
13
  "./src/client/vue.ts",
14
+ "./src/client/solid.ts",
12
15
  "./src/integrations/astro.ts",
13
16
  "./src/integrations/next-js.ts",
14
17
  "./src/integrations/react-ssr.ts",
package/vitest.config.ts CHANGED
@@ -1,10 +1,13 @@
1
- import { defineConfig } from "vitest/config";
1
+ import { defineConfig, mergeConfig } from "vitest/config";
2
+ import { baseConfig } from "@fragno-private/vitest-config";
2
3
  import { svelte } from "@sveltejs/vite-plugin-svelte";
3
4
  import { svelteTesting } from "@testing-library/svelte/vite";
4
5
 
5
- export default defineConfig({
6
- plugins: [svelte(), svelteTesting()],
7
- test: {
8
- environment: "happy-dom",
9
- },
10
- });
6
+ export default defineConfig(
7
+ mergeConfig(baseConfig, {
8
+ plugins: [svelte(), svelteTesting()],
9
+ test: {
10
+ environment: "happy-dom",
11
+ },
12
+ }),
13
+ );
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-CBDGZiLC.d.ts","names":[],"sources":["../src/api/internal/path.ts","../src/api/request-input-context.ts","../src/http/http-status.ts","../src/api/internal/response-stream.ts","../src/util/types-util.ts","../src/api/request-output-context.ts","../src/api/error.ts","../src/api/api.ts"],"sourcesContent":[],"mappings":"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MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EOkCrB,iBPlCqB,COmC1B,OPnC0B,EOoC1B,SPpC0B,COoChB,KPpCgB,CAAA,EAAA,SAAA,EOsC1B,aPtC0B,EOuC1B,UPvC0B,EOwC1B,gBPxC0B,CAAA,GAAA;EAAA,WAAA,CAAA,EAAA,SAAA;IO0C3B,iBP1C2D,CO0CzC,OP1CyC,EO0ChC,KP1CgC,EAAA,SAAA,EO0Cd,aP1Cc,EO0CC,UP1CD,EO0Ca,gBP1Cb,CAAA;AAI1D,iBOyCY,QPzCZ,CAAA,gBO0Cc,UP1Cd,EAAA,cAAA,MAAA,EAAA,qBO4CmB,gBP5CnB,EAAA,sBO6CoB,gBP7CpB,GAAA,SAAA,EAAA,mBAAA,MAAA,GAAA,MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EOiDK,iBPjDL,COkDA,OPlDA,EOmDA,SPnDA,COmDU,KPnDV,CAAA,EOoDA,YPpDA,EOqDA,aPrDA,EOsDA,UPtDA,EOuDA,gBPvDA,CAAA,GAAA;aACE,EOwDW,YPxDX;IO0DH,iBPzDkB,COyDA,OPzDA,EOyDS,KPzDT,EOyDgB,YPzDhB,EOyD8B,aPzD9B,EOyD6C,UPzD7C,EOyDyD,gBPzDzD,CAAA"}