@fragno-dev/core 0.0.6 → 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.
- package/.turbo/turbo-build.log +41 -37
- package/.turbo/turbo-test.log +297 -0
- package/CHANGELOG.md +8 -0
- package/dist/api/api.d.ts +1 -1
- package/dist/api/api.js +1 -1
- package/dist/{api-CBDGZiLC.d.ts → api-CAPyac52.d.ts} +3 -3
- package/dist/api-CAPyac52.d.ts.map +1 -0
- package/dist/{api-DgHfYjq2.js → api-DuzjjCT4.js} +2 -2
- package/dist/{api-DgHfYjq2.js.map → api-DuzjjCT4.js.map} +1 -1
- package/dist/client/client.d.ts +2 -2
- package/dist/client/client.js +4 -4
- package/dist/client/client.svelte.d.ts +14 -14
- package/dist/client/client.svelte.d.ts.map +1 -1
- package/dist/client/client.svelte.js +4 -4
- package/dist/client/react.d.ts +12 -12
- package/dist/client/react.d.ts.map +1 -1
- package/dist/client/react.js +6 -8
- package/dist/client/react.js.map +1 -1
- package/dist/client/solid.d.ts +45 -0
- package/dist/client/solid.d.ts.map +1 -0
- package/dist/client/solid.js +110 -0
- package/dist/client/solid.js.map +1 -0
- package/dist/client/vanilla.d.ts +21 -21
- package/dist/client/vanilla.d.ts.map +1 -1
- package/dist/client/vanilla.js +4 -4
- package/dist/client/vue.d.ts +14 -14
- package/dist/client/vue.d.ts.map +1 -1
- package/dist/client/vue.js +4 -4
- package/dist/{client-DWjxKDnE.js → client-C_Oc8hpD.js} +7 -10
- package/dist/{client-DWjxKDnE.js.map → client-C_Oc8hpD.js.map} +1 -1
- package/dist/{client-B6s-lTFe.d.ts → client-DdpPMlXL.d.ts} +73 -50
- package/dist/client-DdpPMlXL.d.ts.map +1 -0
- package/dist/integrations/react-ssr.js +1 -1
- package/dist/mod.d.ts +2 -2
- package/dist/mod.js +16 -6
- package/dist/mod.js.map +1 -1
- package/dist/{route-Bp6eByhz.js → route-Dq62lXqB.js} +6 -6
- package/dist/route-Dq62lXqB.js.map +1 -0
- package/dist/{ssr-tJHqcNSw.js → ssr-BAhbA_3q.js} +2 -2
- package/dist/{ssr-tJHqcNSw.js.map → ssr-BAhbA_3q.js.map} +1 -1
- package/package.json +22 -5
- package/src/api/fragment.ts +31 -13
- package/src/api/request-middleware.test.ts +3 -3
- package/src/api/request-output-context.ts +3 -3
- package/src/api/route.ts +1 -8
- package/src/client/client-error.test.ts +17 -1
- package/src/client/solid.test.ts +840 -0
- package/src/client/solid.ts +261 -0
- package/tsdown.config.ts +1 -0
- package/vitest.config.ts +10 -7
- package/dist/api-CBDGZiLC.d.ts.map +0 -1
- package/dist/client-B6s-lTFe.d.ts.map +0 -1
- package/dist/route-Bp6eByhz.js.map +0 -1
package/dist/client/react.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ExtractPathParamsOrWiden,
|
|
2
|
-
import {
|
|
1
|
+
import { f as ExtractPathParamsOrWiden, h as QueryParamsHint, l as InferOr, m as MaybeExtractPathParamsOrWiden, p as HasPathParams, r as NonGetHTTPMethod } from "../api-CAPyac52.js";
|
|
2
|
+
import { d as FragnoClientMutatorData, f as FragnoStoreData, u as FragnoClientHookData, w as FragnoClientError } from "../client-DdpPMlXL.js";
|
|
3
3
|
import { ReadableAtom, Store, StoreValue } from "nanostores";
|
|
4
4
|
import { FetcherValue } from "@nanostores/query";
|
|
5
5
|
import * as react0 from "react";
|
|
@@ -8,23 +8,23 @@ import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
|
8
8
|
|
|
9
9
|
//#region src/client/react.d.ts
|
|
10
10
|
|
|
11
|
-
type FragnoReactHook<_TMethod extends "GET", TPath extends string, TOutputSchema extends StandardSchemaV1, TErrorCode extends string, TQueryParameters extends string> = (args?: {
|
|
12
|
-
path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;
|
|
13
|
-
query?: QueryParamsHint<TQueryParameters, string | ReadableAtom<string>>;
|
|
14
|
-
}) => FetcherValue<StandardSchemaV1.InferOutput<TOutputSchema>, FragnoClientError<NonNullable<TErrorCode>>>;
|
|
15
|
-
type FragnoReactMutator<_TMethod extends NonGetHTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string, TQueryParameters extends string> = () => {
|
|
11
|
+
type FragnoReactHook<_TMethod extends "GET", TPath$1 extends string, TOutputSchema$1 extends StandardSchemaV1, TErrorCode$1 extends string, TQueryParameters$1 extends string> = (args?: {
|
|
12
|
+
path?: MaybeExtractPathParamsOrWiden<TPath$1, string | ReadableAtom<string>>;
|
|
13
|
+
query?: QueryParamsHint<TQueryParameters$1, string | ReadableAtom<string>>;
|
|
14
|
+
}) => FetcherValue<StandardSchemaV1.InferOutput<TOutputSchema$1>, FragnoClientError<NonNullable<TErrorCode$1>>>;
|
|
15
|
+
type FragnoReactMutator<_TMethod extends NonGetHTTPMethod, TPath$1 extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema$1 extends StandardSchemaV1 | undefined, TErrorCode$1 extends string, TQueryParameters$1 extends string> = () => {
|
|
16
16
|
mutate: ({
|
|
17
17
|
body,
|
|
18
18
|
path,
|
|
19
19
|
query
|
|
20
20
|
}: {
|
|
21
21
|
body?: InferOr<TInputSchema, undefined>;
|
|
22
|
-
path?: HasPathParams<TPath> extends true ? ExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>> : undefined;
|
|
23
|
-
query?: QueryParamsHint<TQueryParameters, string | ReadableAtom<string>>;
|
|
24
|
-
}) => Promise<InferOr<TOutputSchema, undefined>>;
|
|
22
|
+
path?: HasPathParams<TPath$1> extends true ? ExtractPathParamsOrWiden<TPath$1, string | ReadableAtom<string>> : undefined;
|
|
23
|
+
query?: QueryParamsHint<TQueryParameters$1, string | ReadableAtom<string>>;
|
|
24
|
+
}) => Promise<InferOr<TOutputSchema$1, undefined>>;
|
|
25
25
|
loading?: boolean | undefined;
|
|
26
|
-
error?: FragnoClientError<NonNullable<TErrorCode>[number]> | undefined;
|
|
27
|
-
data?: InferOr<TOutputSchema, undefined> | undefined;
|
|
26
|
+
error?: FragnoClientError<NonNullable<TErrorCode$1>[number]> | undefined;
|
|
27
|
+
data?: InferOr<TOutputSchema$1, undefined> | undefined;
|
|
28
28
|
};
|
|
29
29
|
/**
|
|
30
30
|
* Type helper that unwraps any Store fields of the object into StoreValues
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","names":[],"sources":["../../src/client/react.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"react.d.ts","names":[],"sources":["../../src/client/react.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/client/react.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "../api-
|
|
2
|
-
import "../route-
|
|
3
|
-
import { isGetHook,
|
|
4
|
-
import { hydrateFromWindow } from "../ssr-
|
|
1
|
+
import "../api-DuzjjCT4.js";
|
|
2
|
+
import "../route-Dq62lXqB.js";
|
|
3
|
+
import { a as isGetHook, c as isReadableAtom, o as isMutatorHook, s as isStore } from "../client-C_Oc8hpD.js";
|
|
4
|
+
import { o as hydrateFromWindow } from "../ssr-BAhbA_3q.js";
|
|
5
5
|
import { listenKeys } from "nanostores";
|
|
6
6
|
import { useCallback, useMemo, useRef, useSyncExternalStore } from "react";
|
|
7
7
|
|
|
@@ -10,19 +10,17 @@ function createReactHook(hook) {
|
|
|
10
10
|
return ({ path, query } = {}) => {
|
|
11
11
|
const pathParamValues = path ? Object.values(path) : [];
|
|
12
12
|
const queryParamValues = query ? Object.values(query) : [];
|
|
13
|
-
const deps = [...pathParamValues, ...queryParamValues];
|
|
14
13
|
const store = useMemo(() => hook.store({
|
|
15
14
|
path,
|
|
16
15
|
query
|
|
17
|
-
}), [hook, ...
|
|
16
|
+
}), [hook, ...[...pathParamValues, ...queryParamValues]]);
|
|
18
17
|
if (typeof window === "undefined") return store.get();
|
|
19
18
|
return useStore(store);
|
|
20
19
|
};
|
|
21
20
|
}
|
|
22
21
|
function createReactMutator(hook) {
|
|
23
22
|
return () => {
|
|
24
|
-
|
|
25
|
-
return useStore(store);
|
|
23
|
+
return useStore(useMemo(() => hook.mutatorStore, [hook]));
|
|
26
24
|
};
|
|
27
25
|
}
|
|
28
26
|
function createReactStore(hook) {
|
package/dist/client/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","names":["result: any"],"sources":["../../src/client/react.ts"],"sourcesContent":["import type { FetcherValue } from \"@nanostores/query\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { listenKeys, type ReadableAtom, type Store, type StoreValue } from \"nanostores\";\nimport { useCallback, useMemo, useRef, useSyncExternalStore, type DependencyList } from \"react\";\nimport type { NonGetHTTPMethod } from \"../api/api\";\nimport type { FragnoClientMutatorData, FragnoClientHookData } from \"./client\";\nimport { isGetHook, isMutatorHook, isStore, type FragnoStoreData } from \"./client\";\nimport type { FragnoClientError } from \"./client-error\";\nimport { hydrateFromWindow } from \"../util/ssr\";\nimport type { InferOr } from \"../util/types-util\";\nimport type {\n ExtractPathParamsOrWiden,\n HasPathParams,\n MaybeExtractPathParamsOrWiden,\n QueryParamsHint,\n} from \"../api/internal/path\";\nimport { isReadableAtom } from \"../util/nanostores\";\n\nexport type FragnoReactHook<\n _TMethod extends \"GET\",\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = (args?: {\n path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;\n query?: QueryParamsHint<TQueryParameters, string | ReadableAtom<string>>;\n}) => FetcherValue<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n FragnoClientError<NonNullable<TErrorCode>>\n>;\n\nexport type FragnoReactMutator<\n _TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = () => {\n mutate: ({\n body,\n path,\n query,\n }: {\n body?: InferOr<TInputSchema, undefined>;\n path?: HasPathParams<TPath> extends true\n ? ExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>\n : undefined;\n query?: QueryParamsHint<TQueryParameters, string | ReadableAtom<string>>;\n }) => Promise<InferOr<TOutputSchema, undefined>>;\n loading?: boolean | undefined;\n error?: FragnoClientError<NonNullable<TErrorCode>[number]> | undefined;\n data?: InferOr<TOutputSchema, undefined> | undefined;\n};\n\n// Helper function to create a React hook from a GET hook\nfunction createReactHook<\n TMethod extends \"GET\",\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: FragnoClientHookData<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters>,\n): FragnoReactHook<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters> {\n return ({ path, query } = {}) => {\n const pathParamValues = path ? Object.values(path) : [];\n const queryParamValues = query ? Object.values(query) : [];\n\n const deps = [...pathParamValues, ...queryParamValues];\n\n const store = useMemo(() => hook.store({ path, query }), [hook, ...deps]);\n\n if (typeof window === \"undefined\") {\n // TODO(Wilco): Handle server-side rendering. In React we have to implement onShellReady\n // and onAllReady in renderToPipable stream.\n const serverSideData = store.get();\n return serverSideData;\n }\n\n return useStore(store);\n };\n}\n\n// Helper function to create a React mutator from a mutator hook\nfunction createReactMutator<\n TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInput extends StandardSchemaV1 | undefined,\n TOutput extends StandardSchemaV1 | undefined,\n TError extends string,\n TQueryParameters extends string,\n>(\n hook: FragnoClientMutatorData<TMethod, TPath, TInput, TOutput, TError, TQueryParameters>,\n): FragnoReactMutator<TMethod, TPath, TInput, TOutput, TError, TQueryParameters> {\n return () => {\n const store = useMemo(() => hook.mutatorStore, [hook]);\n return useStore(store);\n };\n}\n\n/**\n * Type helper that unwraps any Store fields of the object into StoreValues\n */\nexport type FragnoReactStore<T extends object> = () => T extends Store<infer TStore>\n ? StoreValue<TStore>\n : {\n [K in keyof T]: T[K] extends Store ? StoreValue<T[K]> : T[K];\n };\n\nfunction createReactStore<const T extends object>(hook: FragnoStoreData<T>): FragnoReactStore<T> {\n if (isReadableAtom(hook.obj)) {\n return () => useStore(hook.obj as Store);\n }\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result: any = {};\n\n for (const key in hook.obj) {\n if (!Object.prototype.hasOwnProperty.call(hook.obj, key)) {\n continue;\n }\n\n const value = hook.obj[key];\n if (isReadableAtom(value)) {\n result[key] = useStore(value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n };\n}\n\nexport function useFragno<T extends Record<string, unknown>>(\n clientObj: T,\n): {\n [K in keyof T]: T[K] extends FragnoClientHookData<\n \"GET\",\n infer TPath,\n infer TOutputSchema,\n infer TErrorCode,\n infer TQueryParameters\n >\n ? FragnoReactHook<\"GET\", TPath, TOutputSchema, TErrorCode, TQueryParameters>\n : T[K] extends FragnoClientMutatorData<\n infer TMethod,\n infer TPath,\n infer TInput,\n infer TOutput,\n infer TError,\n infer TQueryParameters\n >\n ? FragnoReactMutator<TMethod, TPath, TInput, TOutput, TError, TQueryParameters>\n : T[K] extends FragnoStoreData<infer TStoreObj>\n ? FragnoReactStore<TStoreObj>\n : T[K];\n} {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = {} as any; // We need one any cast here due to TypeScript's limitations with mapped types\n\n for (const key in clientObj) {\n if (!Object.prototype.hasOwnProperty.call(clientObj, key)) {\n continue;\n }\n\n const hook = clientObj[key];\n if (isGetHook(hook)) {\n result[key] = createReactHook(hook);\n } else if (isMutatorHook(hook)) {\n result[key] = createReactMutator(hook);\n } else if (isStore(hook)) {\n result[key] = createReactStore(hook);\n } else {\n // Pass through non-hook values unchanged\n result[key] = hook;\n }\n }\n\n return result;\n}\n\ntype StoreKeys<T> = T extends { setKey: (k: infer K, v: unknown) => unknown } ? K : never;\n\nexport interface UseStoreOptions<SomeStore> {\n /**\n * @default\n * ```ts\n * [store, options.keys]\n * ```\n */\n deps?: DependencyList;\n\n /**\n * Will re-render components only on specific key changes.\n */\n keys?: StoreKeys<SomeStore>[];\n}\n\nexport function useStore<SomeStore extends Store>(\n store: SomeStore,\n options: UseStoreOptions<SomeStore> = {},\n): StoreValue<SomeStore> {\n const snapshotRef = useRef<StoreValue<SomeStore>>(store.get());\n\n const { keys, deps = [store, keys] } = options;\n\n const subscribe = useCallback((onChange: () => void) => {\n const emitChange = (value: StoreValue<SomeStore>) => {\n if (snapshotRef.current === value) return;\n snapshotRef.current = value;\n onChange();\n };\n\n emitChange(store.value);\n if (keys?.length) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return listenKeys(store as any, keys, emitChange);\n }\n return store.listen(emitChange);\n }, deps);\n\n const get = () => snapshotRef.current as StoreValue<SomeStore>;\n\n return useSyncExternalStore(subscribe, get, () => {\n // Server-side rendering\n return get();\n });\n}\n\nexport function FragnoHydrator({ children }: { children: React.ReactNode }) {\n // Ensure initial data is transferred from window before any hooks run\n // Running in useMemo makes this happen during render, ahead of effects\n useMemo(() => {\n hydrateFromWindow();\n }, []);\n return children;\n}\n"],"mappings":";;;;;;;;AAyDA,SAAS,gBAOP,MAC8E;AAC9E,SAAQ,EAAE,MAAM,UAAU,EAAE,KAAK;EAC/B,MAAM,kBAAkB,OAAO,OAAO,OAAO,KAAK,GAAG,EAAE;EACvD,MAAM,mBAAmB,QAAQ,OAAO,OAAO,MAAM,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"react.js","names":["result: any"],"sources":["../../src/client/react.ts"],"sourcesContent":["import type { FetcherValue } from \"@nanostores/query\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { listenKeys, type ReadableAtom, type Store, type StoreValue } from \"nanostores\";\nimport { useCallback, useMemo, useRef, useSyncExternalStore, type DependencyList } from \"react\";\nimport type { NonGetHTTPMethod } from \"../api/api\";\nimport type { FragnoClientMutatorData, FragnoClientHookData } from \"./client\";\nimport { isGetHook, isMutatorHook, isStore, type FragnoStoreData } from \"./client\";\nimport type { FragnoClientError } from \"./client-error\";\nimport { hydrateFromWindow } from \"../util/ssr\";\nimport type { InferOr } from \"../util/types-util\";\nimport type {\n ExtractPathParamsOrWiden,\n HasPathParams,\n MaybeExtractPathParamsOrWiden,\n QueryParamsHint,\n} from \"../api/internal/path\";\nimport { isReadableAtom } from \"../util/nanostores\";\n\nexport type FragnoReactHook<\n _TMethod extends \"GET\",\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = (args?: {\n path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;\n query?: QueryParamsHint<TQueryParameters, string | ReadableAtom<string>>;\n}) => FetcherValue<\n StandardSchemaV1.InferOutput<TOutputSchema>,\n FragnoClientError<NonNullable<TErrorCode>>\n>;\n\nexport type FragnoReactMutator<\n _TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = () => {\n mutate: ({\n body,\n path,\n query,\n }: {\n body?: InferOr<TInputSchema, undefined>;\n path?: HasPathParams<TPath> extends true\n ? ExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>\n : undefined;\n query?: QueryParamsHint<TQueryParameters, string | ReadableAtom<string>>;\n }) => Promise<InferOr<TOutputSchema, undefined>>;\n loading?: boolean | undefined;\n error?: FragnoClientError<NonNullable<TErrorCode>[number]> | undefined;\n data?: InferOr<TOutputSchema, undefined> | undefined;\n};\n\n// Helper function to create a React hook from a GET hook\nfunction createReactHook<\n TMethod extends \"GET\",\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: FragnoClientHookData<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters>,\n): FragnoReactHook<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters> {\n return ({ path, query } = {}) => {\n const pathParamValues = path ? Object.values(path) : [];\n const queryParamValues = query ? Object.values(query) : [];\n\n const deps = [...pathParamValues, ...queryParamValues];\n\n const store = useMemo(() => hook.store({ path, query }), [hook, ...deps]);\n\n if (typeof window === \"undefined\") {\n // TODO(Wilco): Handle server-side rendering. In React we have to implement onShellReady\n // and onAllReady in renderToPipable stream.\n const serverSideData = store.get();\n return serverSideData;\n }\n\n return useStore(store);\n };\n}\n\n// Helper function to create a React mutator from a mutator hook\nfunction createReactMutator<\n TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInput extends StandardSchemaV1 | undefined,\n TOutput extends StandardSchemaV1 | undefined,\n TError extends string,\n TQueryParameters extends string,\n>(\n hook: FragnoClientMutatorData<TMethod, TPath, TInput, TOutput, TError, TQueryParameters>,\n): FragnoReactMutator<TMethod, TPath, TInput, TOutput, TError, TQueryParameters> {\n return () => {\n const store = useMemo(() => hook.mutatorStore, [hook]);\n return useStore(store);\n };\n}\n\n/**\n * Type helper that unwraps any Store fields of the object into StoreValues\n */\nexport type FragnoReactStore<T extends object> = () => T extends Store<infer TStore>\n ? StoreValue<TStore>\n : {\n [K in keyof T]: T[K] extends Store ? StoreValue<T[K]> : T[K];\n };\n\nfunction createReactStore<const T extends object>(hook: FragnoStoreData<T>): FragnoReactStore<T> {\n if (isReadableAtom(hook.obj)) {\n return () => useStore(hook.obj as Store);\n }\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result: any = {};\n\n for (const key in hook.obj) {\n if (!Object.prototype.hasOwnProperty.call(hook.obj, key)) {\n continue;\n }\n\n const value = hook.obj[key];\n if (isReadableAtom(value)) {\n result[key] = useStore(value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n };\n}\n\nexport function useFragno<T extends Record<string, unknown>>(\n clientObj: T,\n): {\n [K in keyof T]: T[K] extends FragnoClientHookData<\n \"GET\",\n infer TPath,\n infer TOutputSchema,\n infer TErrorCode,\n infer TQueryParameters\n >\n ? FragnoReactHook<\"GET\", TPath, TOutputSchema, TErrorCode, TQueryParameters>\n : T[K] extends FragnoClientMutatorData<\n infer TMethod,\n infer TPath,\n infer TInput,\n infer TOutput,\n infer TError,\n infer TQueryParameters\n >\n ? FragnoReactMutator<TMethod, TPath, TInput, TOutput, TError, TQueryParameters>\n : T[K] extends FragnoStoreData<infer TStoreObj>\n ? FragnoReactStore<TStoreObj>\n : T[K];\n} {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = {} as any; // We need one any cast here due to TypeScript's limitations with mapped types\n\n for (const key in clientObj) {\n if (!Object.prototype.hasOwnProperty.call(clientObj, key)) {\n continue;\n }\n\n const hook = clientObj[key];\n if (isGetHook(hook)) {\n result[key] = createReactHook(hook);\n } else if (isMutatorHook(hook)) {\n result[key] = createReactMutator(hook);\n } else if (isStore(hook)) {\n result[key] = createReactStore(hook);\n } else {\n // Pass through non-hook values unchanged\n result[key] = hook;\n }\n }\n\n return result;\n}\n\ntype StoreKeys<T> = T extends { setKey: (k: infer K, v: unknown) => unknown } ? K : never;\n\nexport interface UseStoreOptions<SomeStore> {\n /**\n * @default\n * ```ts\n * [store, options.keys]\n * ```\n */\n deps?: DependencyList;\n\n /**\n * Will re-render components only on specific key changes.\n */\n keys?: StoreKeys<SomeStore>[];\n}\n\nexport function useStore<SomeStore extends Store>(\n store: SomeStore,\n options: UseStoreOptions<SomeStore> = {},\n): StoreValue<SomeStore> {\n const snapshotRef = useRef<StoreValue<SomeStore>>(store.get());\n\n const { keys, deps = [store, keys] } = options;\n\n const subscribe = useCallback((onChange: () => void) => {\n const emitChange = (value: StoreValue<SomeStore>) => {\n if (snapshotRef.current === value) return;\n snapshotRef.current = value;\n onChange();\n };\n\n emitChange(store.value);\n if (keys?.length) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return listenKeys(store as any, keys, emitChange);\n }\n return store.listen(emitChange);\n }, deps);\n\n const get = () => snapshotRef.current as StoreValue<SomeStore>;\n\n return useSyncExternalStore(subscribe, get, () => {\n // Server-side rendering\n return get();\n });\n}\n\nexport function FragnoHydrator({ children }: { children: React.ReactNode }) {\n // Ensure initial data is transferred from window before any hooks run\n // Running in useMemo makes this happen during render, ahead of effects\n useMemo(() => {\n hydrateFromWindow();\n }, []);\n return children;\n}\n"],"mappings":";;;;;;;;AAyDA,SAAS,gBAOP,MAC8E;AAC9E,SAAQ,EAAE,MAAM,UAAU,EAAE,KAAK;EAC/B,MAAM,kBAAkB,OAAO,OAAO,OAAO,KAAK,GAAG,EAAE;EACvD,MAAM,mBAAmB,QAAQ,OAAO,OAAO,MAAM,GAAG,EAAE;EAI1D,MAAM,QAAQ,cAAc,KAAK,MAAM;GAAE;GAAM;GAAO,CAAC,EAAE,CAAC,MAAM,GAFnD,CAAC,GAAG,iBAAiB,GAAG,iBAAiB,CAEkB,CAAC;AAEzE,MAAI,OAAO,WAAW,YAIpB,QADuB,MAAM,KAAK;AAIpC,SAAO,SAAS,MAAM;;;AAK1B,SAAS,mBAQP,MAC+E;AAC/E,cAAa;AAEX,SAAO,SADO,cAAc,KAAK,cAAc,CAAC,KAAK,CAAC,CAChC;;;AAa1B,SAAS,iBAAyC,MAA+C;AAC/F,KAAI,eAAe,KAAK,IAAI,CAC1B,cAAa,SAAS,KAAK,IAAa;AAG1C,cAAa;EAEX,MAAMA,SAAc,EAAE;AAEtB,OAAK,MAAM,OAAO,KAAK,KAAK;AAC1B,OAAI,CAAC,OAAO,UAAU,eAAe,KAAK,KAAK,KAAK,IAAI,CACtD;GAGF,MAAM,QAAQ,KAAK,IAAI;AACvB,OAAI,eAAe,MAAM,CACvB,QAAO,OAAO,SAAS,MAAM;OAE7B,QAAO,OAAO;;AAIlB,SAAO;;;AAIX,SAAgB,UACd,WAsBA;CAEA,MAAM,SAAS,EAAE;AAEjB,MAAK,MAAM,OAAO,WAAW;AAC3B,MAAI,CAAC,OAAO,UAAU,eAAe,KAAK,WAAW,IAAI,CACvD;EAGF,MAAM,OAAO,UAAU;AACvB,MAAI,UAAU,KAAK,CACjB,QAAO,OAAO,gBAAgB,KAAK;WAC1B,cAAc,KAAK,CAC5B,QAAO,OAAO,mBAAmB,KAAK;WAC7B,QAAQ,KAAK,CACtB,QAAO,OAAO,iBAAiB,KAAK;MAGpC,QAAO,OAAO;;AAIlB,QAAO;;AAoBT,SAAgB,SACd,OACA,UAAsC,EAAE,EACjB;CACvB,MAAM,cAAc,OAA8B,MAAM,KAAK,CAAC;CAE9D,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,KAAK,KAAK;CAEvC,MAAM,YAAY,aAAa,aAAyB;EACtD,MAAM,cAAc,UAAiC;AACnD,OAAI,YAAY,YAAY,MAAO;AACnC,eAAY,UAAU;AACtB,aAAU;;AAGZ,aAAW,MAAM,MAAM;AACvB,MAAI,MAAM,OAER,QAAO,WAAW,OAAc,MAAM,WAAW;AAEnD,SAAO,MAAM,OAAO,WAAW;IAC9B,KAAK;CAER,MAAM,YAAY,YAAY;AAE9B,QAAO,qBAAqB,WAAW,WAAW;AAEhD,SAAO,KAAK;GACZ;;AAGJ,SAAgB,eAAe,EAAE,YAA2C;AAG1E,eAAc;AACZ,qBAAmB;IAClB,EAAE,CAAC;AACN,QAAO"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { h as QueryParamsHint, l as InferOr, m as MaybeExtractPathParamsOrWiden, r as NonGetHTTPMethod } from "../api-CAPyac52.js";
|
|
2
|
+
import { d as FragnoClientMutatorData, f as FragnoStoreData, u as FragnoClientHookData, w as FragnoClientError } from "../client-DdpPMlXL.js";
|
|
3
|
+
import { ReadableAtom, Store, StoreValue } from "nanostores";
|
|
4
|
+
import { Accessor } from "solid-js";
|
|
5
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
6
|
+
|
|
7
|
+
//#region src/client/solid.d.ts
|
|
8
|
+
|
|
9
|
+
type FragnoSolidHook<_TMethod extends "GET", TPath$1 extends string, TOutputSchema$1 extends StandardSchemaV1, TErrorCode$1 extends string, TQueryParameters$1 extends string> = (args?: {
|
|
10
|
+
path?: MaybeExtractPathParamsOrWiden<TPath$1, string | Accessor<string> | ReadableAtom<string>>;
|
|
11
|
+
query?: QueryParamsHint<TQueryParameters$1, string | Accessor<string> | ReadableAtom<string>>;
|
|
12
|
+
}) => {
|
|
13
|
+
data: Accessor<InferOr<TOutputSchema$1, undefined>>;
|
|
14
|
+
loading: Accessor<boolean>;
|
|
15
|
+
error: Accessor<FragnoClientError<TErrorCode$1[number]> | undefined>;
|
|
16
|
+
};
|
|
17
|
+
type FragnoSolidMutator<_TMethod extends NonGetHTTPMethod, TPath$1 extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema$1 extends StandardSchemaV1 | undefined, TErrorCode$1 extends string, TQueryParameters$1 extends string> = () => {
|
|
18
|
+
mutate: (args: {
|
|
19
|
+
body?: InferOr<TInputSchema, undefined>;
|
|
20
|
+
path?: MaybeExtractPathParamsOrWiden<TPath$1, string | Accessor<string> | ReadableAtom<string>>;
|
|
21
|
+
query?: QueryParamsHint<TQueryParameters$1, string | Accessor<string> | ReadableAtom<string>>;
|
|
22
|
+
}) => Promise<InferOr<TOutputSchema$1, undefined>>;
|
|
23
|
+
loading: Accessor<boolean | undefined>;
|
|
24
|
+
error: Accessor<FragnoClientError<TErrorCode$1[number]> | undefined>;
|
|
25
|
+
data: Accessor<InferOr<TOutputSchema$1, undefined>>;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Type guard to check if a value is a SolidJS Accessor.
|
|
29
|
+
*
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
declare function isAccessor(value: unknown): value is Accessor<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Converts a SolidJS Accessor to a NanoStore Atom.
|
|
35
|
+
*
|
|
36
|
+
* This is used to convert SolidJS accessors to atoms, so that we can use them in the store.
|
|
37
|
+
*
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
declare function accessorToAtom<T>(accessor: Accessor<T>): ReadableAtom<T>;
|
|
41
|
+
type FragnoSolidStore<T extends object> = T extends Store ? Accessor<StoreValue<T>> : () => { [K in keyof T]: T[K] extends Store ? Accessor<StoreValue<T[K]>> : T[K] };
|
|
42
|
+
declare function useFragno<T extends Record<string, unknown>>(clientObj: T): { [K in keyof T]: T[K] extends FragnoClientHookData<"GET", infer TPath, infer TOutputSchema, infer TErrorCode, infer TQueryParameters> ? FragnoSolidHook<"GET", TPath, TOutputSchema, TErrorCode, TQueryParameters> : T[K] extends FragnoClientMutatorData<infer TMethod, infer TPath, infer TInput, infer TOutput, infer TError, infer TQueryParameters> ? FragnoSolidMutator<TMethod, TPath, TInput, TOutput, TError, TQueryParameters> : T[K] extends FragnoStoreData<infer TStoreObj> ? FragnoSolidStore<TStoreObj> : T[K] };
|
|
43
|
+
//#endregion
|
|
44
|
+
export { FragnoSolidHook, FragnoSolidMutator, FragnoSolidStore, accessorToAtom, isAccessor, useFragno };
|
|
45
|
+
//# sourceMappingURL=solid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solid.d.ts","names":[],"sources":["../../src/client/solid.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import "../api-DuzjjCT4.js";
|
|
2
|
+
import "../route-Dq62lXqB.js";
|
|
3
|
+
import { a as isGetHook, c as isReadableAtom, o as isMutatorHook, s as isStore } from "../client-C_Oc8hpD.js";
|
|
4
|
+
import "../ssr-BAhbA_3q.js";
|
|
5
|
+
import { atom } from "nanostores";
|
|
6
|
+
import { useStore } from "@nanostores/solid";
|
|
7
|
+
import { createEffect } from "solid-js";
|
|
8
|
+
|
|
9
|
+
//#region src/client/solid.ts
|
|
10
|
+
/**
|
|
11
|
+
* Type guard to check if a value is a SolidJS Accessor.
|
|
12
|
+
*
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
function isAccessor(value) {
|
|
16
|
+
return typeof value === "function";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Converts a SolidJS Accessor to a NanoStore Atom.
|
|
20
|
+
*
|
|
21
|
+
* This is used to convert SolidJS accessors to atoms, so that we can use them in the store.
|
|
22
|
+
*
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
function accessorToAtom(accessor) {
|
|
26
|
+
const a = atom(accessor());
|
|
27
|
+
createEffect(() => {
|
|
28
|
+
a.set(accessor());
|
|
29
|
+
});
|
|
30
|
+
return a;
|
|
31
|
+
}
|
|
32
|
+
function createSolidHook(hook) {
|
|
33
|
+
return ({ path, query } = {}) => {
|
|
34
|
+
const pathParams = {};
|
|
35
|
+
const queryParams = {};
|
|
36
|
+
for (const [key, value] of Object.entries(path ?? {})) {
|
|
37
|
+
const v = value;
|
|
38
|
+
pathParams[key] = isAccessor(v) ? accessorToAtom(v) : v;
|
|
39
|
+
}
|
|
40
|
+
for (const [key, value] of Object.entries(query ?? {})) {
|
|
41
|
+
const v = value;
|
|
42
|
+
queryParams[key] = isAccessor(v) ? accessorToAtom(v) : v;
|
|
43
|
+
}
|
|
44
|
+
const storeValue = useStore(hook.store({
|
|
45
|
+
path: pathParams,
|
|
46
|
+
query: queryParams
|
|
47
|
+
}));
|
|
48
|
+
return {
|
|
49
|
+
data: () => storeValue().data,
|
|
50
|
+
loading: () => storeValue().loading,
|
|
51
|
+
error: () => storeValue().error
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function createSolidMutator(hook) {
|
|
56
|
+
return () => {
|
|
57
|
+
const store = useStore(hook.mutatorStore);
|
|
58
|
+
const mutate = async (args) => {
|
|
59
|
+
const { body, path, query } = args;
|
|
60
|
+
const pathParams = {};
|
|
61
|
+
const queryParams = {};
|
|
62
|
+
for (const [key, value] of Object.entries(path ?? {})) {
|
|
63
|
+
const v = value;
|
|
64
|
+
pathParams[key] = isAccessor(v) ? v() : v;
|
|
65
|
+
}
|
|
66
|
+
for (const [key, value] of Object.entries(query ?? {})) {
|
|
67
|
+
const v = value;
|
|
68
|
+
queryParams[key] = isAccessor(v) ? v() : v;
|
|
69
|
+
}
|
|
70
|
+
return hook.mutatorStore.mutate({
|
|
71
|
+
body,
|
|
72
|
+
path: pathParams,
|
|
73
|
+
query: queryParams
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
mutate,
|
|
78
|
+
data: () => store().data,
|
|
79
|
+
loading: () => store().loading,
|
|
80
|
+
error: () => store().error
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function createSolidStore(hook) {
|
|
85
|
+
if (isReadableAtom(hook.obj)) return useStore(hook.obj);
|
|
86
|
+
const result = {};
|
|
87
|
+
for (const key in hook.obj) {
|
|
88
|
+
if (!Object.prototype.hasOwnProperty.call(hook.obj, key)) continue;
|
|
89
|
+
const value = hook.obj[key];
|
|
90
|
+
if (isReadableAtom(value)) result[key] = useStore(value);
|
|
91
|
+
else result[key] = value;
|
|
92
|
+
}
|
|
93
|
+
return () => result;
|
|
94
|
+
}
|
|
95
|
+
function useFragno(clientObj) {
|
|
96
|
+
const result = {};
|
|
97
|
+
for (const key in clientObj) {
|
|
98
|
+
if (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;
|
|
99
|
+
const hook = clientObj[key];
|
|
100
|
+
if (isGetHook(hook)) result[key] = createSolidHook(hook);
|
|
101
|
+
else if (isMutatorHook(hook)) result[key] = createSolidMutator(hook);
|
|
102
|
+
else if (isStore(hook)) result[key] = createSolidStore(hook);
|
|
103
|
+
else result[key] = hook;
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
//#endregion
|
|
109
|
+
export { accessorToAtom, isAccessor, useFragno };
|
|
110
|
+
//# sourceMappingURL=solid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solid.js","names":["pathParams: Record<string, string | ReadableAtom<string>>","queryParams: Record<string, string | ReadableAtom<string>>","result: any"],"sources":["../../src/client/solid.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { atom, type ReadableAtom, type Store, type StoreValue } from \"nanostores\";\nimport { useStore } from \"@nanostores/solid\";\nimport type { Accessor } from \"solid-js\";\nimport { createEffect } from \"solid-js\";\nimport type { NonGetHTTPMethod } from \"../api/api\";\nimport {\n isGetHook,\n isMutatorHook,\n isStore,\n type FragnoClientHookData,\n type FragnoClientMutatorData,\n type FragnoStoreData,\n} from \"./client\";\nimport type { FragnoClientError } from \"./client-error\";\nimport type { InferOr } from \"../util/types-util\";\nimport type { MaybeExtractPathParamsOrWiden, QueryParamsHint } from \"../api/internal/path\";\nimport { isReadableAtom } from \"../util/nanostores\";\n\nexport type FragnoSolidHook<\n _TMethod extends \"GET\",\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = (args?: {\n path?: MaybeExtractPathParamsOrWiden<TPath, string | Accessor<string> | ReadableAtom<string>>;\n query?: QueryParamsHint<TQueryParameters, string | Accessor<string> | ReadableAtom<string>>;\n}) => {\n data: Accessor<InferOr<TOutputSchema, undefined>>;\n loading: Accessor<boolean>;\n error: Accessor<FragnoClientError<TErrorCode[number]> | undefined>;\n};\n\nexport type FragnoSolidMutator<\n _TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n> = () => {\n mutate: (args: {\n body?: InferOr<TInputSchema, undefined>;\n path?: MaybeExtractPathParamsOrWiden<TPath, string | Accessor<string> | ReadableAtom<string>>;\n query?: QueryParamsHint<TQueryParameters, string | Accessor<string> | ReadableAtom<string>>;\n }) => Promise<InferOr<TOutputSchema, undefined>>;\n loading: Accessor<boolean | undefined>;\n error: Accessor<FragnoClientError<TErrorCode[number]> | undefined>;\n data: Accessor<InferOr<TOutputSchema, undefined>>;\n};\n\n/**\n * Type guard to check if a value is a SolidJS Accessor.\n *\n * @private\n */\nexport function isAccessor(value: unknown): value is Accessor<string> {\n return typeof value === \"function\";\n}\n\n/**\n * Converts a SolidJS Accessor to a NanoStore Atom.\n *\n * This is used to convert SolidJS accessors to atoms, so that we can use them in the store.\n *\n * @private\n */\nexport function accessorToAtom<T>(accessor: Accessor<T>): ReadableAtom<T> {\n const a = atom(accessor());\n\n createEffect(() => {\n a.set(accessor());\n });\n\n return a;\n}\n\n// Helper function to create a SolidJS signal from a GET hook\n// We want 1 store per hook, so on updates to params, we need to update the store instead of creating a new one.\n// Nanostores only works with atoms (or strings), so we need to convert SolidJS accessors to atoms.\nfunction createSolidHook<\n TMethod extends \"GET\",\n TPath extends string,\n TOutputSchema extends StandardSchemaV1,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: FragnoClientHookData<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters>,\n): FragnoSolidHook<TMethod, TPath, TOutputSchema, TErrorCode, TQueryParameters> {\n return ({ path, query } = {}) => {\n const pathParams: Record<string, string | ReadableAtom<string>> = {};\n const queryParams: Record<string, string | ReadableAtom<string>> = {};\n\n for (const [key, value] of Object.entries(path ?? {})) {\n const v = value as string | Accessor<string> | ReadableAtom<string>;\n pathParams[key] = isAccessor(v) ? accessorToAtom(v) : v;\n }\n\n for (const [key, value] of Object.entries(query ?? {})) {\n const v = value as string | Accessor<string> | ReadableAtom<string>;\n queryParams[key] = isAccessor(v) ? accessorToAtom(v) : v;\n }\n\n const store = hook.store({\n path: pathParams as MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>,\n query: queryParams,\n });\n\n const storeValue = useStore(store);\n\n return {\n data: () => storeValue().data as InferOr<TOutputSchema, undefined>,\n loading: () => storeValue().loading,\n error: () => storeValue().error,\n };\n };\n}\n\n// Helper function to create a SolidJS mutator from a mutator hook\nfunction createSolidMutator<\n TMethod extends NonGetHTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string,\n TQueryParameters extends string,\n>(\n hook: FragnoClientMutatorData<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters\n >,\n): FragnoSolidMutator<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters> {\n return () => {\n const store = useStore(hook.mutatorStore);\n\n // Create a wrapped mutate function that handles SolidJS accessors\n const mutate = async (args: {\n body?: InferOr<TInputSchema, undefined>;\n path?: MaybeExtractPathParamsOrWiden<TPath, string | Accessor<string> | ReadableAtom<string>>;\n query?: QueryParamsHint<TQueryParameters, string | Accessor<string> | ReadableAtom<string>>;\n }) => {\n const { body, path, query } = args;\n\n const pathParams: Record<string, string | ReadableAtom<string>> = {};\n const queryParams: Record<string, string | ReadableAtom<string>> = {};\n\n for (const [key, value] of Object.entries(path ?? {})) {\n const v = value as string | Accessor<string> | ReadableAtom<string>;\n // For mutations, we read the current value of the accessor\n pathParams[key] = isAccessor(v) ? v() : v;\n }\n\n for (const [key, value] of Object.entries(query ?? {})) {\n const v = value as string | Accessor<string> | ReadableAtom<string>;\n // For mutations, we read the current value of the accessor\n queryParams[key] = isAccessor(v) ? v() : v;\n }\n\n // Call the store's mutate function with normalized params\n return hook.mutatorStore.mutate({\n body,\n path: pathParams as MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>,\n query: queryParams,\n });\n };\n\n return {\n mutate,\n data: () => store().data as InferOr<TOutputSchema, undefined>,\n loading: () => store().loading,\n error: () => store().error,\n };\n };\n}\n\nexport type FragnoSolidStore<T extends object> = T extends Store\n ? Accessor<StoreValue<T>>\n : () => {\n [K in keyof T]: T[K] extends Store ? Accessor<StoreValue<T[K]>> : T[K];\n };\n\nfunction createSolidStore<const T extends object>(\n hook: FragnoStoreData<T>,\n): Accessor<StoreValue<T>> | (() => Accessor<StoreValue<T>>) {\n // If the store object itself is a single atom, wrap it with useStore\n if (isReadableAtom(hook.obj)) {\n return useStore(hook.obj);\n }\n\n // For objects containing atoms, wrap each atom property with useStore\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result: any = {};\n\n for (const key in hook.obj) {\n if (!Object.prototype.hasOwnProperty.call(hook.obj, key)) {\n continue;\n }\n\n const value = hook.obj[key];\n if (isReadableAtom(value)) {\n result[key] = useStore(value);\n } else {\n result[key] = value;\n }\n }\n\n return () => result;\n}\n\nexport function useFragno<T extends Record<string, unknown>>(\n clientObj: T,\n): {\n [K in keyof T]: T[K] extends FragnoClientHookData<\n \"GET\",\n infer TPath,\n infer TOutputSchema,\n infer TErrorCode,\n infer TQueryParameters\n >\n ? FragnoSolidHook<\"GET\", TPath, TOutputSchema, TErrorCode, TQueryParameters>\n : T[K] extends FragnoClientMutatorData<\n infer TMethod,\n infer TPath,\n infer TInput,\n infer TOutput,\n infer TError,\n infer TQueryParameters\n >\n ? FragnoSolidMutator<TMethod, TPath, TInput, TOutput, TError, TQueryParameters>\n : T[K] extends FragnoStoreData<infer TStoreObj>\n ? FragnoSolidStore<TStoreObj>\n : T[K];\n} {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = {} as any;\n\n for (const key in clientObj) {\n if (!Object.prototype.hasOwnProperty.call(clientObj, key)) {\n continue;\n }\n\n const hook = clientObj[key];\n if (isGetHook(hook)) {\n result[key] = createSolidHook(hook);\n } else if (isMutatorHook(hook)) {\n result[key] = createSolidMutator(hook);\n } else if (isStore(hook)) {\n result[key] = createSolidStore(hook);\n } else {\n // Pass through non-hook values unchanged\n result[key] = hook;\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;AAyDA,SAAgB,WAAW,OAA2C;AACpE,QAAO,OAAO,UAAU;;;;;;;;;AAU1B,SAAgB,eAAkB,UAAwC;CACxE,MAAM,IAAI,KAAK,UAAU,CAAC;AAE1B,oBAAmB;AACjB,IAAE,IAAI,UAAU,CAAC;GACjB;AAEF,QAAO;;AAMT,SAAS,gBAOP,MAC8E;AAC9E,SAAQ,EAAE,MAAM,UAAU,EAAE,KAAK;EAC/B,MAAMA,aAA4D,EAAE;EACpE,MAAMC,cAA6D,EAAE;AAErE,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE,CAAC,EAAE;GACrD,MAAM,IAAI;AACV,cAAW,OAAO,WAAW,EAAE,GAAG,eAAe,EAAE,GAAG;;AAGxD,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,SAAS,EAAE,CAAC,EAAE;GACtD,MAAM,IAAI;AACV,eAAY,OAAO,WAAW,EAAE,GAAG,eAAe,EAAE,GAAG;;EAQzD,MAAM,aAAa,SALL,KAAK,MAAM;GACvB,MAAM;GACN,OAAO;GACR,CAAC,CAEgC;AAElC,SAAO;GACL,YAAY,YAAY,CAAC;GACzB,eAAe,YAAY,CAAC;GAC5B,aAAa,YAAY,CAAC;GAC3B;;;AAKL,SAAS,mBAQP,MAQ+F;AAC/F,cAAa;EACX,MAAM,QAAQ,SAAS,KAAK,aAAa;EAGzC,MAAM,SAAS,OAAO,SAIhB;GACJ,MAAM,EAAE,MAAM,MAAM,UAAU;GAE9B,MAAMD,aAA4D,EAAE;GACpE,MAAMC,cAA6D,EAAE;AAErE,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE,CAAC,EAAE;IACrD,MAAM,IAAI;AAEV,eAAW,OAAO,WAAW,EAAE,GAAG,GAAG,GAAG;;AAG1C,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,SAAS,EAAE,CAAC,EAAE;IACtD,MAAM,IAAI;AAEV,gBAAY,OAAO,WAAW,EAAE,GAAG,GAAG,GAAG;;AAI3C,UAAO,KAAK,aAAa,OAAO;IAC9B;IACA,MAAM;IACN,OAAO;IACR,CAAC;;AAGJ,SAAO;GACL;GACA,YAAY,OAAO,CAAC;GACpB,eAAe,OAAO,CAAC;GACvB,aAAa,OAAO,CAAC;GACtB;;;AAUL,SAAS,iBACP,MAC2D;AAE3D,KAAI,eAAe,KAAK,IAAI,CAC1B,QAAO,SAAS,KAAK,IAAI;CAK3B,MAAMC,SAAc,EAAE;AAEtB,MAAK,MAAM,OAAO,KAAK,KAAK;AAC1B,MAAI,CAAC,OAAO,UAAU,eAAe,KAAK,KAAK,KAAK,IAAI,CACtD;EAGF,MAAM,QAAQ,KAAK,IAAI;AACvB,MAAI,eAAe,MAAM,CACvB,QAAO,OAAO,SAAS,MAAM;MAE7B,QAAO,OAAO;;AAIlB,cAAa;;AAGf,SAAgB,UACd,WAsBA;CAEA,MAAM,SAAS,EAAE;AAEjB,MAAK,MAAM,OAAO,WAAW;AAC3B,MAAI,CAAC,OAAO,UAAU,eAAe,KAAK,WAAW,IAAI,CACvD;EAGF,MAAM,OAAO,UAAU;AACvB,MAAI,UAAU,KAAK,CACjB,QAAO,OAAO,gBAAgB,KAAK;WAC1B,cAAc,KAAK,CAC5B,QAAO,OAAO,mBAAmB,KAAK;WAC7B,QAAQ,KAAK,CACtB,QAAO,OAAO,iBAAiB,KAAK;MAGpC,QAAO,OAAO;;AAIlB,QAAO"}
|
package/dist/client/vanilla.d.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { ExtractPathParamsOrWiden,
|
|
2
|
-
import {
|
|
1
|
+
import { f as ExtractPathParamsOrWiden, l as InferOr, m as MaybeExtractPathParamsOrWiden, p as HasPathParams, r as NonGetHTTPMethod } from "../api-CAPyac52.js";
|
|
2
|
+
import { d as FragnoClientMutatorData, u as FragnoClientHookData, w as FragnoClientError } from "../client-DdpPMlXL.js";
|
|
3
3
|
import { ReadableAtom } from "nanostores";
|
|
4
4
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
5
5
|
|
|
6
6
|
//#region src/client/vanilla.d.ts
|
|
7
7
|
|
|
8
|
-
type StoreData<TOutputSchema extends StandardSchemaV1 | undefined, TErrorCodes extends string> = {
|
|
8
|
+
type StoreData<TOutputSchema$1 extends StandardSchemaV1 | undefined, TErrorCodes extends string> = {
|
|
9
9
|
loading: boolean;
|
|
10
10
|
error?: FragnoClientError<TErrorCodes>;
|
|
11
|
-
data?: InferOr<TOutputSchema, undefined>;
|
|
11
|
+
data?: InferOr<TOutputSchema$1, undefined>;
|
|
12
12
|
};
|
|
13
|
-
type FragnoVanillaListeners<_TMethod extends "GET", TPath extends string, TOutputSchema extends StandardSchemaV1, TErrorCode extends string, TQueryParameters extends string> = (args?: {
|
|
14
|
-
path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;
|
|
15
|
-
query?: Record<TQueryParameters, string | ReadableAtom<string>>;
|
|
13
|
+
type FragnoVanillaListeners<_TMethod extends "GET", TPath$1 extends string, TOutputSchema$1 extends StandardSchemaV1, TErrorCode$1 extends string, TQueryParameters$1 extends string> = (args?: {
|
|
14
|
+
path?: MaybeExtractPathParamsOrWiden<TPath$1, string | ReadableAtom<string>>;
|
|
15
|
+
query?: Record<TQueryParameters$1, string | ReadableAtom<string>>;
|
|
16
16
|
}) => {
|
|
17
17
|
/** Called for every change in the store. */
|
|
18
|
-
listen: (callback: (value: StoreData<TOutputSchema, TErrorCode[number]>) => void) => () => void;
|
|
18
|
+
listen: (callback: (value: StoreData<TOutputSchema$1, TErrorCode$1[number]>) => void) => () => void;
|
|
19
19
|
/** Called once initially, then called for every change in the store. */
|
|
20
|
-
subscribe: (callback: (value: StoreData<TOutputSchema, TErrorCode[number]>) => void) => () => void;
|
|
21
|
-
get: () => StoreData<TOutputSchema, TErrorCode[number]>;
|
|
20
|
+
subscribe: (callback: (value: StoreData<TOutputSchema$1, TErrorCode$1[number]>) => void) => () => void;
|
|
21
|
+
get: () => StoreData<TOutputSchema$1, TErrorCode$1[number]>;
|
|
22
22
|
refetch: () => void;
|
|
23
23
|
/**
|
|
24
24
|
* Produces an item for every change in the store.
|
|
@@ -32,28 +32,28 @@ type FragnoVanillaListeners<_TMethod extends "GET", TPath extends string, TOutpu
|
|
|
32
32
|
* }
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
[Symbol.asyncIterator]: () => AsyncGenerator<StoreData<TOutputSchema, TErrorCode[number]>, void, unknown>;
|
|
35
|
+
[Symbol.asyncIterator]: () => AsyncGenerator<StoreData<TOutputSchema$1, TErrorCode$1[number]>, void, unknown>;
|
|
36
36
|
};
|
|
37
|
-
type FragnoVanillaMutator<_TMethod extends NonGetHTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string, TQueryParameters extends string> = (args?: {
|
|
38
|
-
path?: MaybeExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>>;
|
|
39
|
-
query?: Record<TQueryParameters, string | ReadableAtom<string>>;
|
|
37
|
+
type FragnoVanillaMutator<_TMethod extends NonGetHTTPMethod, TPath$1 extends string, TInputSchema$1 extends StandardSchemaV1 | undefined, TOutputSchema$1 extends StandardSchemaV1 | undefined, TErrorCode$1 extends string, TQueryParameters$1 extends string> = (args?: {
|
|
38
|
+
path?: MaybeExtractPathParamsOrWiden<TPath$1, string | ReadableAtom<string>>;
|
|
39
|
+
query?: Record<TQueryParameters$1, string | ReadableAtom<string>>;
|
|
40
40
|
}) => {
|
|
41
41
|
subscribe: (callback: (value: {
|
|
42
42
|
loading: boolean;
|
|
43
|
-
error?: FragnoClientError<TErrorCode[number]>;
|
|
44
|
-
data?: InferOr<TOutputSchema, undefined>;
|
|
43
|
+
error?: FragnoClientError<TErrorCode$1[number]>;
|
|
44
|
+
data?: InferOr<TOutputSchema$1, undefined>;
|
|
45
45
|
}) => void) => () => void;
|
|
46
|
-
get: () => StoreData<TOutputSchema, TErrorCode[number]>;
|
|
46
|
+
get: () => StoreData<TOutputSchema$1, TErrorCode$1[number]>;
|
|
47
47
|
mutate: ({
|
|
48
48
|
body,
|
|
49
49
|
path,
|
|
50
50
|
query
|
|
51
51
|
}: {
|
|
52
|
-
body?: InferOr<TInputSchema, undefined>;
|
|
53
|
-
path?: HasPathParams<TPath> extends true ? ExtractPathParamsOrWiden<TPath, string | ReadableAtom<string>> : undefined;
|
|
52
|
+
body?: InferOr<TInputSchema$1, undefined>;
|
|
53
|
+
path?: HasPathParams<TPath$1> extends true ? ExtractPathParamsOrWiden<TPath$1, string | ReadableAtom<string>> : undefined;
|
|
54
54
|
query?: Record<string, string | ReadableAtom<string>>;
|
|
55
|
-
}) => Promise<InferOr<TOutputSchema, undefined>>;
|
|
56
|
-
[Symbol.asyncIterator]: () => AsyncGenerator<StoreData<TOutputSchema, TErrorCode[number]>, void, unknown>;
|
|
55
|
+
}) => Promise<InferOr<TOutputSchema$1, undefined>>;
|
|
56
|
+
[Symbol.asyncIterator]: () => AsyncGenerator<StoreData<TOutputSchema$1, TErrorCode$1[number]>, void, unknown>;
|
|
57
57
|
};
|
|
58
58
|
declare function useFragno<T extends Record<string, unknown>>(clientObj: T): { [K in keyof T]: T[K] extends FragnoClientHookData<"GET", infer TPath, infer TOutputSchema, infer TErrorCode, infer TQueryParameters> ? FragnoVanillaListeners<"GET", TPath, TOutputSchema, TErrorCode, TQueryParameters> : T[K] extends FragnoClientMutatorData<NonGetHTTPMethod, infer TPath, infer TInputSchema, infer TOutputSchema, infer TErrorCode, infer TQueryParameters> ? FragnoVanillaMutator<NonGetHTTPMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters> : T[K] };
|
|
59
59
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vanilla.d.ts","names":[],"sources":["../../src/client/vanilla.ts"],"sourcesContent":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"vanilla.d.ts","names":[],"sources":["../../src/client/vanilla.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/client/vanilla.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "../api-
|
|
2
|
-
import "../route-
|
|
3
|
-
import { isGetHook, isMutatorHook } from "../client-
|
|
4
|
-
import "../ssr-
|
|
1
|
+
import "../api-DuzjjCT4.js";
|
|
2
|
+
import "../route-Dq62lXqB.js";
|
|
3
|
+
import { a as isGetHook, o as isMutatorHook } from "../client-C_Oc8hpD.js";
|
|
4
|
+
import "../ssr-BAhbA_3q.js";
|
|
5
5
|
|
|
6
6
|
//#region src/util/async.ts
|
|
7
7
|
/**
|
package/dist/client/vue.d.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { InferOr, MaybeExtractPathParamsOrWiden, NonGetHTTPMethod
|
|
2
|
-
import {
|
|
1
|
+
import { h as QueryParamsHint, l as InferOr, m as MaybeExtractPathParamsOrWiden, r as NonGetHTTPMethod } from "../api-CAPyac52.js";
|
|
2
|
+
import { d as FragnoClientMutatorData, u as FragnoClientHookData, w as FragnoClientError } from "../client-DdpPMlXL.js";
|
|
3
3
|
import { ReadableAtom, Store, StoreValue } from "nanostores";
|
|
4
4
|
import { DeepReadonly, Ref, ShallowRef, UnwrapNestedRefs } from "vue";
|
|
5
5
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
6
6
|
|
|
7
7
|
//#region src/client/vue.d.ts
|
|
8
8
|
|
|
9
|
-
type FragnoVueHook<_TMethod extends "GET", TPath extends string, TOutputSchema extends StandardSchemaV1, TErrorCode extends string, TQueryParameters extends string> = (args?: {
|
|
10
|
-
path?: MaybeExtractPathParamsOrWiden<TPath, string | Ref<string> | ReadableAtom<string>>;
|
|
11
|
-
query?: QueryParamsHint<TQueryParameters, string | Ref<string> | ReadableAtom<string>>;
|
|
9
|
+
type FragnoVueHook<_TMethod extends "GET", TPath$1 extends string, TOutputSchema$1 extends StandardSchemaV1, TErrorCode$1 extends string, TQueryParameters$1 extends string> = (args?: {
|
|
10
|
+
path?: MaybeExtractPathParamsOrWiden<TPath$1, string | Ref<string> | ReadableAtom<string>>;
|
|
11
|
+
query?: QueryParamsHint<TQueryParameters$1, string | Ref<string> | ReadableAtom<string>>;
|
|
12
12
|
}) => {
|
|
13
|
-
data: Ref<InferOr<TOutputSchema, undefined>>;
|
|
13
|
+
data: Ref<InferOr<TOutputSchema$1, undefined>>;
|
|
14
14
|
loading: Ref<boolean>;
|
|
15
|
-
error: Ref<FragnoClientError<TErrorCode[number]> | undefined>;
|
|
15
|
+
error: Ref<FragnoClientError<TErrorCode$1[number]> | undefined>;
|
|
16
16
|
};
|
|
17
|
-
type FragnoVueMutator<_TMethod extends NonGetHTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string, TQueryParameters extends string> = () => {
|
|
17
|
+
type FragnoVueMutator<_TMethod extends NonGetHTTPMethod, TPath$1 extends string, TInputSchema$1 extends StandardSchemaV1 | undefined, TOutputSchema$1 extends StandardSchemaV1 | undefined, TErrorCode$1 extends string, TQueryParameters$1 extends string> = () => {
|
|
18
18
|
mutate: (args: {
|
|
19
|
-
body?: InferOr<TInputSchema, undefined>;
|
|
20
|
-
path?: MaybeExtractPathParamsOrWiden<TPath, string | Ref<string> | ReadableAtom<string>>;
|
|
21
|
-
query?: QueryParamsHint<TQueryParameters, string | Ref<string> | ReadableAtom<string>>;
|
|
22
|
-
}) => Promise<InferOr<TOutputSchema, undefined>>;
|
|
19
|
+
body?: InferOr<TInputSchema$1, undefined>;
|
|
20
|
+
path?: MaybeExtractPathParamsOrWiden<TPath$1, string | Ref<string> | ReadableAtom<string>>;
|
|
21
|
+
query?: QueryParamsHint<TQueryParameters$1, string | Ref<string> | ReadableAtom<string>>;
|
|
22
|
+
}) => Promise<InferOr<TOutputSchema$1, undefined>>;
|
|
23
23
|
loading: Ref<boolean | undefined>;
|
|
24
|
-
error: Ref<FragnoClientError<TErrorCode[number]> | undefined>;
|
|
25
|
-
data: Ref<InferOr<TOutputSchema, undefined>>;
|
|
24
|
+
error: Ref<FragnoClientError<TErrorCode$1[number]> | undefined>;
|
|
25
|
+
data: Ref<InferOr<TOutputSchema$1, undefined>>;
|
|
26
26
|
};
|
|
27
27
|
/**
|
|
28
28
|
* Converts a Vue Ref to a NanoStore Atom.
|
package/dist/client/vue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue.d.ts","names":[],"sources":["../../src/client/vue.ts"],"sourcesContent":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"vue.d.ts","names":[],"sources":["../../src/client/vue.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/client/vue.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "../api-
|
|
2
|
-
import "../route-
|
|
3
|
-
import { isGetHook, isMutatorHook } from "../client-
|
|
4
|
-
import "../ssr-
|
|
1
|
+
import "../api-DuzjjCT4.js";
|
|
2
|
+
import "../route-Dq62lXqB.js";
|
|
3
|
+
import { a as isGetHook, o as isMutatorHook } from "../client-C_Oc8hpD.js";
|
|
4
|
+
import "../ssr-BAhbA_3q.js";
|
|
5
5
|
import { atom } from "nanostores";
|
|
6
6
|
import { computed, getCurrentScope, isRef, onScopeDispose, ref, shallowRef, watch } from "vue";
|
|
7
7
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { a as RequestOutputContext, o as RequestInputContext, r as resolveRouteFactories, s as getMountRoute } from "./route-Dq62lXqB.js";
|
|
2
|
+
import { a as getInitialData, n as addStore, t as SSR_ENABLED } from "./ssr-BAhbA_3q.js";
|
|
3
3
|
import { task } from "nanostores";
|
|
4
4
|
import { nanoquery } from "@nanostores/query";
|
|
5
5
|
|
|
@@ -391,9 +391,7 @@ function buildUrl(config, params) {
|
|
|
391
391
|
const normalizedPathParams = unwrapObject(pathParams);
|
|
392
392
|
const normalizedQueryParams = unwrapObject(queryParams) ?? {};
|
|
393
393
|
const searchParams = new URLSearchParams(normalizedQueryParams);
|
|
394
|
-
|
|
395
|
-
const search = searchParams.toString() ? `?${searchParams.toString()}` : "";
|
|
396
|
-
return `${baseUrl}${mountRoute}${builtPath}${search}`;
|
|
394
|
+
return `${baseUrl}${mountRoute}${buildPath(path, normalizedPathParams ?? {})}${searchParams.toString() ? `?${searchParams.toString()}` : ""}`;
|
|
397
395
|
}
|
|
398
396
|
/**
|
|
399
397
|
* This method returns an array, which can be passed directly to nanostores.
|
|
@@ -691,13 +689,12 @@ function createClientBuilder(fragmentDefinition, publicConfig, routesOrFactories
|
|
|
691
689
|
routes
|
|
692
690
|
};
|
|
693
691
|
const mountRoute = publicConfig.mountRoute ?? `/${definition.name}`;
|
|
694
|
-
|
|
692
|
+
return new ClientBuilder({
|
|
695
693
|
...publicConfig,
|
|
696
694
|
mountRoute
|
|
697
|
-
};
|
|
698
|
-
return new ClientBuilder(fullPublicConfig, fragmentConfig);
|
|
695
|
+
}, fragmentConfig);
|
|
699
696
|
}
|
|
700
697
|
|
|
701
698
|
//#endregion
|
|
702
|
-
export {
|
|
703
|
-
//# sourceMappingURL=client-
|
|
699
|
+
export { isGetHook as a, isReadableAtom as c, FragnoClientFetchAbortError as d, FragnoClientFetchError as f, getCacheKey as i, FragnoClientApiError as l, FragnoClientUnknownApiError as m, buildUrl as n, isMutatorHook as o, FragnoClientFetchNetworkError as p, createClientBuilder as r, isStore as s, ClientBuilder as t, FragnoClientError as u };
|
|
700
|
+
//# sourceMappingURL=client-C_Oc8hpD.js.map
|