fauxbase-react 0.5.9 → 0.6.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.
- package/dist/index.cjs +27 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +27 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -260,6 +260,32 @@ function useAuth() {
|
|
|
260
260
|
error
|
|
261
261
|
};
|
|
262
262
|
}
|
|
263
|
+
function useSyncStatus() {
|
|
264
|
+
const ctx = react.useContext(FauxbaseContext);
|
|
265
|
+
const [state, setState] = react.useState({
|
|
266
|
+
isOnline: true,
|
|
267
|
+
isSyncing: false,
|
|
268
|
+
pendingCount: 0,
|
|
269
|
+
lastSynced: null
|
|
270
|
+
});
|
|
271
|
+
react.useEffect(() => {
|
|
272
|
+
const eventBus = ctx?.client?._eventBus;
|
|
273
|
+
if (!eventBus) return;
|
|
274
|
+
const handler = (event) => {
|
|
275
|
+
if (event.data?.type === "state") {
|
|
276
|
+
setState({
|
|
277
|
+
isOnline: event.data.isOnline,
|
|
278
|
+
isSyncing: event.data.isSyncing,
|
|
279
|
+
pendingCount: event.data.pendingCount,
|
|
280
|
+
lastSynced: event.data.lastSynced
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
const unsub = eventBus.on("__sync", handler);
|
|
285
|
+
return unsub;
|
|
286
|
+
}, [ctx]);
|
|
287
|
+
return state;
|
|
288
|
+
}
|
|
263
289
|
|
|
264
290
|
exports.FauxbaseContext = FauxbaseContext;
|
|
265
291
|
exports.FauxbaseProvider = FauxbaseProvider;
|
|
@@ -270,5 +296,6 @@ exports.useFauxbaseContext = useFauxbaseContext;
|
|
|
270
296
|
exports.useGet = useGet;
|
|
271
297
|
exports.useList = useList;
|
|
272
298
|
exports.useMutation = useMutation;
|
|
299
|
+
exports.useSyncStatus = useSyncStatus;
|
|
273
300
|
//# sourceMappingURL=index.cjs.map
|
|
274
301
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.ts","../src/use-fauxbase.ts","../src/use-list.ts","../src/use-get.ts","../src/use-mutation.ts","../src/use-event.ts","../src/use-auth.ts"],"names":["createContext","createElement","useContext","useState","useRef","useCallback","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext, createElement, useContext } from 'react';\nimport type { Service, EventBus } from 'fauxbase';\nimport type { FauxbaseContextValue } from './types';\n\n// --- Context ---\n\nexport const FauxbaseContext = createContext<FauxbaseContextValue | null>(null);\n\n// --- Provider ---\n\nexport function FauxbaseProvider(props: {\n client: any;\n children: React.ReactNode;\n}) {\n // Invalidation registry: Service → Set of refetch callbacks\n const registryRef = { current: new Map<Service<any>, Set<() => void>>() };\n\n const value: FauxbaseContextValue = {\n client: props.client,\n invalidate: (service: Service<any>) => {\n const subscribers = registryRef.current.get(service);\n if (subscribers) {\n for (const fn of subscribers) {\n fn();\n }\n }\n },\n subscribe: (service: Service<any>, refetchFn: () => void) => {\n if (!registryRef.current.has(service)) {\n registryRef.current.set(service, new Set());\n }\n registryRef.current.get(service)!.add(refetchFn);\n return () => {\n registryRef.current.get(service)?.delete(refetchFn);\n };\n },\n };\n\n // Bridge remote events → auto-invalidation\n const eventBus: EventBus | undefined = props.client._eventBus;\n if (eventBus) {\n eventBus.onAny((event) => {\n if (event.source !== 'remote') return;\n const svc = props.client[event.resource];\n if (svc) {\n value.invalidate(svc);\n }\n });\n }\n\n return createElement(FauxbaseContext.Provider, { value }, props.children);\n}\n\n// --- Hook ---\n\nexport function useFauxbaseContext(): FauxbaseContextValue {\n const ctx = useContext(FauxbaseContext);\n if (!ctx) {\n throw new Error('useFauxbaseContext must be used within a FauxbaseProvider');\n }\n return ctx;\n}\n","import { useFauxbaseContext } from './context';\n\nexport function useFauxbase() {\n const ctx = useFauxbaseContext();\n return ctx.client;\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity, QueryParams, PageMeta } from 'fauxbase';\nimport type { UseListResult, UseListOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useList<T extends Entity>(\n service: Service<T>,\n query?: QueryParams,\n options?: UseListOptions,\n): UseListResult<T> {\n const ctx = useFauxbaseContext();\n const [items, setItems] = useState<T[]>([]);\n const [meta, setMeta] = useState<PageMeta | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false;\n\n const fetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const result = await service.list(query);\n if (mountedRef.current) {\n setItems(result.items);\n setMeta(result.meta);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, JSON.stringify(query), enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and query change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n // Refetch interval\n useEffect(() => {\n if (!options?.refetchInterval || !enabled) return;\n const id = setInterval(fetch, options.refetchInterval);\n return () => clearInterval(id);\n }, [fetch, options?.refetchInterval, enabled]);\n\n return { items, meta, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseGetResult, UseGetOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useGet<T extends Entity>(\n service: Service<T>,\n id: string | null | undefined,\n options?: UseGetOptions,\n): UseGetResult<T> {\n const ctx = useFauxbaseContext();\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false && id != null;\n\n const fetch = useCallback(async () => {\n if (!enabled || !id) {\n setData(null);\n setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n try {\n const result = await service.get(id);\n if (mountedRef.current) {\n setData(result.data);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setData(null);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, id, enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and id change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n return { data, loading, error, refetch: fetch };\n}\n","import { useState, useCallback } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseMutationResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useMutation<T extends Entity>(\n service: Service<T>,\n): UseMutationResult<T> {\n const ctx = useFauxbaseContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const create = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.create(data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const update = useCallback(async (id: string, data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.update(id, data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const remove = useCallback(async (id: string): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.delete(id);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n return { create, update, remove, loading, error };\n}\n","import { useEffect } from 'react';\nimport type { Service, Entity, EventBus, EventHandler } from 'fauxbase';\nimport { useFauxbaseContext } from './context';\n\nexport function useEvent<T extends Entity>(\n serviceOrResource: Service<T> | string,\n handler: EventHandler<T>,\n): void {\n const ctx = useFauxbaseContext();\n\n useEffect(() => {\n const eventBus: EventBus | undefined = ctx.client._eventBus;\n if (!eventBus) return;\n\n const resource = typeof serviceOrResource === 'string'\n ? serviceOrResource\n : (serviceOrResource as any).resourceName;\n\n return eventBus.on(resource, handler);\n }, [serviceOrResource, handler, ctx.client]);\n}\n","import { useState, useCallback } from 'react';\nimport type { Entity } from 'fauxbase';\nimport type { UseAuthResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useAuth<T extends Entity>(): UseAuthResult<T> {\n const ctx = useFauxbaseContext();\n const authService = ctx.client.auth;\n\n if (!authService) {\n throw new Error('useAuth requires auth to be configured in createClient');\n }\n\n const [, forceUpdate] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const rerender = useCallback(() => forceUpdate(n => n + 1), []);\n\n const login = useCallback(async (credentials: { email: string; password: string }): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.login(credentials);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const register = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.register(data);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const logout = useCallback(() => {\n authService.logout();\n rerender();\n }, [authService, rerender]);\n\n const hasRole = useCallback((role: string): boolean => {\n return authService.hasRole(role);\n }, [authService]);\n\n return {\n user: authService.currentUser as T | null,\n isLoggedIn: authService.isLoggedIn,\n token: authService.token,\n login,\n register,\n logout,\n hasRole,\n loading,\n error,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/context.ts","../src/use-fauxbase.ts","../src/use-list.ts","../src/use-get.ts","../src/use-mutation.ts","../src/use-event.ts","../src/use-auth.ts","../src/use-sync-status.ts"],"names":["createContext","createElement","useContext","useState","useRef","useCallback","useEffect"],"mappings":";;;;;AAMO,IAAM,eAAA,GAAkBA,oBAA2C,IAAI;AAIvE,SAAS,iBAAiB,KAAA,EAG9B;AAED,EAAA,MAAM,WAAA,GAAc,EAAE,OAAA,kBAAS,IAAI,KAAmC,EAAE;AAExE,EAAA,MAAM,KAAA,GAA8B;AAAA,IAClC,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,UAAA,EAAY,CAAC,OAAA,KAA0B;AACrC,MAAA,MAAM,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AACnD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,UAAA,EAAA,EAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,OAAA,EAAuB,SAAA,KAA0B;AAC3D,MAAA,IAAI,CAAC,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACrC,QAAA,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,OAAA,kBAAS,IAAI,KAAK,CAAA;AAAA,MAC5C;AACA,MAAA,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAG,IAAI,SAAS,CAAA;AAC/C,MAAA,OAAO,MAAM;AACX,QAAA,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG,OAAO,SAAS,CAAA;AAAA,MACpD,CAAA;AAAA,IACF;AAAA,GACF;AAGA,EAAA,MAAM,QAAA,GAAiC,MAAM,MAAA,CAAO,SAAA;AACpD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,QAAA,CAAS,KAAA,CAAM,CAAC,KAAA,KAAU;AACxB,MAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC/B,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AACvC,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,KAAA,CAAM,WAAW,GAAG,CAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAOC,oBAAc,eAAA,CAAgB,QAAA,EAAU,EAAE,KAAA,EAAM,EAAG,MAAM,QAAQ,CAAA;AAC1E;AAIO,SAAS,kBAAA,GAA2C;AACzD,EAAA,MAAM,GAAA,GAAMC,iBAAW,eAAe,CAAA;AACtC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,GAAA;AACT;;;AC3DO,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,OAAO,GAAA,CAAI,MAAA;AACb;ACAO,SAAS,OAAA,CACd,OAAA,EACA,KAAA,EACA,OAAA,EACkB;AAClB,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,cAAA,CAAc,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAA0B,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,UAAA,GAAaC,aAAO,IAAI,CAAA;AAE9B,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,KAAY,KAAA;AAErC,EAAA,MAAM,KAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AACvC,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,OAAO,KAAK,CAAA;AACrB,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,MACrB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,GAAA,YAAe,QAAQ,GAAA,GAAM,IAAI,MAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAAA,MAC9D;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,CAAK,UAAU,KAAK,CAAA,EAAG,OAAO,CAAC,CAAA;AAG5C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,KAAK,CAAA;AAC1C,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,GAAA,EAAK,OAAA,EAAS,KAAK,CAAC,CAAA;AAGxB,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,KAAA,EAAM;AACN,IAAA,OAAO,MAAM;AAAE,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,IAAO,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS,eAAA,IAAmB,CAAC,OAAA,EAAS;AAC3C,IAAA,MAAM,EAAA,GAAK,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,eAAe,CAAA;AACrD,IAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,EAC/B,GAAG,CAAC,KAAA,EAAO,OAAA,EAAS,eAAA,EAAiB,OAAO,CAAC,CAAA;AAE7C,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAS,KAAA,EAAM;AACvD;ACxDO,SAAS,MAAA,CACd,OAAA,EACA,EAAA,EACA,OAAA,EACiB;AACjB,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIH,eAAmB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,UAAA,GAAaC,aAAO,IAAI,CAAA;AAE9B,EAAA,MAAM,OAAA,GAAU,OAAA,EAAS,OAAA,KAAY,KAAA,IAAS,EAAA,IAAM,IAAA;AAEpD,EAAA,MAAM,KAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,EAAA,EAAI;AACnB,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AACnC,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,MACrB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,QAAA,CAAS,GAAA,YAAe,QAAQ,GAAA,GAAM,IAAI,MAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAC5D,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MACd;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,EAAA,EAAI,OAAO,CAAC,CAAA;AAGzB,EAAAC,gBAAU,MAAM;AACd,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,KAAK,CAAA;AAC1C,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,GAAA,EAAK,OAAA,EAAS,KAAK,CAAC,CAAA;AAGxB,EAAAA,gBAAU,MAAM;AACd,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,KAAA,EAAM;AACN,IAAA,OAAO,MAAM;AAAE,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,IAAO,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAS,KAAA,EAAM;AAChD;ACpDO,SAAS,YACd,OAAA,EACsB;AACtB,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIH,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,MAAA,GAASE,iBAAAA,CAAY,OAAO,IAAA,KAAiC;AACjE,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AACxC,MAAA,GAAA,CAAI,WAAW,OAAO,CAAA;AACtB,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,GAAG,CAAC,CAAA;AAEjB,EAAA,MAAM,MAAA,GAASA,iBAAAA,CAAY,OAAO,EAAA,EAAY,IAAA,KAAiC;AAC7E,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,IAAI,CAAA;AAC5C,MAAA,GAAA,CAAI,WAAW,OAAO,CAAA;AACtB,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,GAAG,CAAC,CAAA;AAEjB,EAAA,MAAM,MAAA,GAASA,iBAAAA,CAAY,OAAO,EAAA,KAA2B;AAC3D,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAA;AACtC,MAAA,GAAA,CAAI,WAAW,OAAO,CAAA;AACtB,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,GAAG,CAAC,CAAA;AAEjB,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAS,KAAA,EAAM;AAClD;ACzDO,SAAS,QAAA,CACd,mBACA,OAAA,EACM;AACN,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAE/B,EAAAC,gBAAU,MAAM;AACd,IAAA,MAAM,QAAA,GAAiC,IAAI,MAAA,CAAO,SAAA;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,MAAM,QAAA,GAAW,OAAO,iBAAA,KAAsB,QAAA,GAC1C,oBACC,iBAAA,CAA0B,YAAA;AAE/B,IAAA,OAAO,QAAA,CAAS,EAAA,CAAG,QAAA,EAAU,OAAO,CAAA;AAAA,EACtC,GAAG,CAAC,iBAAA,EAAmB,OAAA,EAAS,GAAA,CAAI,MAAM,CAAC,CAAA;AAC7C;ACfO,SAAS,OAAA,GAA8C;AAC5D,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,MAAM,WAAA,GAAc,IAAI,MAAA,CAAO,IAAA;AAE/B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAM,GAAG,WAAW,CAAA,GAAIH,eAAS,CAAC,CAAA;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,QAAA,GAAWE,kBAAY,MAAM,WAAA,CAAY,OAAK,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAE9D,EAAA,MAAM,KAAA,GAAQA,iBAAAA,CAAY,OAAO,WAAA,KAAiE;AAChG,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,KAAA,CAAM,WAAW,CAAA;AAChD,MAAA,QAAA,EAAS;AACT,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,QAAQ,CAAC,CAAA;AAE1B,EAAA,MAAM,QAAA,GAAWA,iBAAAA,CAAY,OAAO,IAAA,KAAiC;AACnE,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA;AAC5C,MAAA,QAAA,EAAS;AACT,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,QAAA,CAAS,CAAC,CAAA;AACV,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,QAAQ,CAAC,CAAA;AAE1B,EAAA,MAAM,MAAA,GAASA,kBAAY,MAAM;AAC/B,IAAA,WAAA,CAAY,MAAA,EAAO;AACnB,IAAA,QAAA,EAAS;AAAA,EACX,CAAA,EAAG,CAAC,WAAA,EAAa,QAAQ,CAAC,CAAA;AAE1B,EAAA,MAAM,OAAA,GAAUA,iBAAAA,CAAY,CAAC,IAAA,KAA0B;AACrD,IAAA,OAAO,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,OAAO;AAAA,IACL,MAAM,WAAA,CAAY,WAAA;AAAA,IAClB,YAAY,WAAA,CAAY,UAAA;AAAA,IACxB,OAAO,WAAA,CAAY,KAAA;AAAA,IACnB,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AC7DO,SAAS,aAAA,GAAqC;AACnD,EAAA,MAAM,GAAA,GAAMH,iBAAW,eAAe,CAAA;AACtC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,cAAAA,CAA8B;AAAA,IACtD,QAAA,EAAU,IAAA;AAAA,IACV,SAAA,EAAW,KAAA;AAAA,IACX,YAAA,EAAc,CAAA;AAAA,IACd,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAAG,gBAAU,MAAM;AACd,IAAA,MAAM,QAAA,GAAW,KAAK,MAAA,EAAQ,SAAA;AAC9B,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAe;AAC9B,MAAA,IAAI,KAAA,CAAM,IAAA,EAAM,IAAA,KAAS,OAAA,EAAS;AAChC,QAAA,QAAA,CAAS;AAAA,UACP,QAAA,EAAU,MAAM,IAAA,CAAK,QAAA;AAAA,UACrB,SAAA,EAAW,MAAM,IAAA,CAAK,SAAA;AAAA,UACtB,YAAA,EAAc,MAAM,IAAA,CAAK,YAAA;AAAA,UACzB,UAAA,EAAY,MAAM,IAAA,CAAK;AAAA,SACxB,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAA,CAAG,QAAA,EAAU,OAAO,CAAA;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,OAAO,KAAA;AACT","file":"index.cjs","sourcesContent":["import { createContext, createElement, useContext } from 'react';\nimport type { Service, EventBus } from 'fauxbase';\nimport type { FauxbaseContextValue } from './types';\n\n// --- Context ---\n\nexport const FauxbaseContext = createContext<FauxbaseContextValue | null>(null);\n\n// --- Provider ---\n\nexport function FauxbaseProvider(props: {\n client: any;\n children: React.ReactNode;\n}) {\n // Invalidation registry: Service → Set of refetch callbacks\n const registryRef = { current: new Map<Service<any>, Set<() => void>>() };\n\n const value: FauxbaseContextValue = {\n client: props.client,\n invalidate: (service: Service<any>) => {\n const subscribers = registryRef.current.get(service);\n if (subscribers) {\n for (const fn of subscribers) {\n fn();\n }\n }\n },\n subscribe: (service: Service<any>, refetchFn: () => void) => {\n if (!registryRef.current.has(service)) {\n registryRef.current.set(service, new Set());\n }\n registryRef.current.get(service)!.add(refetchFn);\n return () => {\n registryRef.current.get(service)?.delete(refetchFn);\n };\n },\n };\n\n // Bridge remote events → auto-invalidation\n const eventBus: EventBus | undefined = props.client._eventBus;\n if (eventBus) {\n eventBus.onAny((event) => {\n if (event.source !== 'remote') return;\n const svc = props.client[event.resource];\n if (svc) {\n value.invalidate(svc);\n }\n });\n }\n\n return createElement(FauxbaseContext.Provider, { value }, props.children);\n}\n\n// --- Hook ---\n\nexport function useFauxbaseContext(): FauxbaseContextValue {\n const ctx = useContext(FauxbaseContext);\n if (!ctx) {\n throw new Error('useFauxbaseContext must be used within a FauxbaseProvider');\n }\n return ctx;\n}\n","import { useFauxbaseContext } from './context';\n\nexport function useFauxbase() {\n const ctx = useFauxbaseContext();\n return ctx.client;\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity, QueryParams, PageMeta } from 'fauxbase';\nimport type { UseListResult, UseListOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useList<T extends Entity>(\n service: Service<T>,\n query?: QueryParams,\n options?: UseListOptions,\n): UseListResult<T> {\n const ctx = useFauxbaseContext();\n const [items, setItems] = useState<T[]>([]);\n const [meta, setMeta] = useState<PageMeta | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false;\n\n const fetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const result = await service.list(query);\n if (mountedRef.current) {\n setItems(result.items);\n setMeta(result.meta);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, JSON.stringify(query), enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and query change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n // Refetch interval\n useEffect(() => {\n if (!options?.refetchInterval || !enabled) return;\n const id = setInterval(fetch, options.refetchInterval);\n return () => clearInterval(id);\n }, [fetch, options?.refetchInterval, enabled]);\n\n return { items, meta, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseGetResult, UseGetOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useGet<T extends Entity>(\n service: Service<T>,\n id: string | null | undefined,\n options?: UseGetOptions,\n): UseGetResult<T> {\n const ctx = useFauxbaseContext();\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false && id != null;\n\n const fetch = useCallback(async () => {\n if (!enabled || !id) {\n setData(null);\n setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n try {\n const result = await service.get(id);\n if (mountedRef.current) {\n setData(result.data);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setData(null);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, id, enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and id change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n return { data, loading, error, refetch: fetch };\n}\n","import { useState, useCallback } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseMutationResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useMutation<T extends Entity>(\n service: Service<T>,\n): UseMutationResult<T> {\n const ctx = useFauxbaseContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const create = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.create(data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const update = useCallback(async (id: string, data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.update(id, data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const remove = useCallback(async (id: string): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.delete(id);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n return { create, update, remove, loading, error };\n}\n","import { useEffect } from 'react';\nimport type { Service, Entity, EventBus, EventHandler } from 'fauxbase';\nimport { useFauxbaseContext } from './context';\n\nexport function useEvent<T extends Entity>(\n serviceOrResource: Service<T> | string,\n handler: EventHandler<T>,\n): void {\n const ctx = useFauxbaseContext();\n\n useEffect(() => {\n const eventBus: EventBus | undefined = ctx.client._eventBus;\n if (!eventBus) return;\n\n const resource = typeof serviceOrResource === 'string'\n ? serviceOrResource\n : (serviceOrResource as any).resourceName;\n\n return eventBus.on(resource, handler);\n }, [serviceOrResource, handler, ctx.client]);\n}\n","import { useState, useCallback } from 'react';\nimport type { Entity } from 'fauxbase';\nimport type { UseAuthResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useAuth<T extends Entity>(): UseAuthResult<T> {\n const ctx = useFauxbaseContext();\n const authService = ctx.client.auth;\n\n if (!authService) {\n throw new Error('useAuth requires auth to be configured in createClient');\n }\n\n const [, forceUpdate] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const rerender = useCallback(() => forceUpdate(n => n + 1), []);\n\n const login = useCallback(async (credentials: { email: string; password: string }): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.login(credentials);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const register = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.register(data);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const logout = useCallback(() => {\n authService.logout();\n rerender();\n }, [authService, rerender]);\n\n const hasRole = useCallback((role: string): boolean => {\n return authService.hasRole(role);\n }, [authService]);\n\n return {\n user: authService.currentUser as T | null,\n isLoggedIn: authService.isLoggedIn,\n token: authService.token,\n login,\n register,\n logout,\n hasRole,\n loading,\n error,\n };\n}\n","import { useState, useEffect, useContext } from 'react';\nimport { FauxbaseContext } from './context';\n\nexport interface UseSyncStatusResult {\n isOnline: boolean;\n isSyncing: boolean;\n pendingCount: number;\n lastSynced: number | null;\n}\n\nexport function useSyncStatus(): UseSyncStatusResult {\n const ctx = useContext(FauxbaseContext);\n const [state, setState] = useState<UseSyncStatusResult>({\n isOnline: true,\n isSyncing: false,\n pendingCount: 0,\n lastSynced: null,\n });\n\n useEffect(() => {\n const eventBus = ctx?.client?._eventBus;\n if (!eventBus) return;\n\n const handler = (event: any) => {\n if (event.data?.type === 'state') {\n setState({\n isOnline: event.data.isOnline,\n isSyncing: event.data.isSyncing,\n pendingCount: event.data.pendingCount,\n lastSynced: event.data.lastSynced,\n });\n }\n };\n\n const unsub = eventBus.on('__sync', handler);\n return unsub;\n }, [ctx]);\n\n return state;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -67,4 +67,12 @@ declare function useEvent<T extends Entity>(serviceOrResource: Service<T> | stri
|
|
|
67
67
|
|
|
68
68
|
declare function useAuth<T extends Entity>(): UseAuthResult<T>;
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
interface UseSyncStatusResult {
|
|
71
|
+
isOnline: boolean;
|
|
72
|
+
isSyncing: boolean;
|
|
73
|
+
pendingCount: number;
|
|
74
|
+
lastSynced: number | null;
|
|
75
|
+
}
|
|
76
|
+
declare function useSyncStatus(): UseSyncStatusResult;
|
|
77
|
+
|
|
78
|
+
export { FauxbaseContext, type FauxbaseContextValue, FauxbaseProvider, type UseAuthResult, type UseGetOptions, type UseGetResult, type UseListOptions, type UseListResult, type UseMutationResult, type UseSyncStatusResult, useAuth, useEvent, useFauxbase, useFauxbaseContext, useGet, useList, useMutation, useSyncStatus };
|
package/dist/index.d.ts
CHANGED
|
@@ -67,4 +67,12 @@ declare function useEvent<T extends Entity>(serviceOrResource: Service<T> | stri
|
|
|
67
67
|
|
|
68
68
|
declare function useAuth<T extends Entity>(): UseAuthResult<T>;
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
interface UseSyncStatusResult {
|
|
71
|
+
isOnline: boolean;
|
|
72
|
+
isSyncing: boolean;
|
|
73
|
+
pendingCount: number;
|
|
74
|
+
lastSynced: number | null;
|
|
75
|
+
}
|
|
76
|
+
declare function useSyncStatus(): UseSyncStatusResult;
|
|
77
|
+
|
|
78
|
+
export { FauxbaseContext, type FauxbaseContextValue, FauxbaseProvider, type UseAuthResult, type UseGetOptions, type UseGetResult, type UseListOptions, type UseListResult, type UseMutationResult, type UseSyncStatusResult, useAuth, useEvent, useFauxbase, useFauxbaseContext, useGet, useList, useMutation, useSyncStatus };
|
package/dist/index.js
CHANGED
|
@@ -258,7 +258,33 @@ function useAuth() {
|
|
|
258
258
|
error
|
|
259
259
|
};
|
|
260
260
|
}
|
|
261
|
+
function useSyncStatus() {
|
|
262
|
+
const ctx = useContext(FauxbaseContext);
|
|
263
|
+
const [state, setState] = useState({
|
|
264
|
+
isOnline: true,
|
|
265
|
+
isSyncing: false,
|
|
266
|
+
pendingCount: 0,
|
|
267
|
+
lastSynced: null
|
|
268
|
+
});
|
|
269
|
+
useEffect(() => {
|
|
270
|
+
const eventBus = ctx?.client?._eventBus;
|
|
271
|
+
if (!eventBus) return;
|
|
272
|
+
const handler = (event) => {
|
|
273
|
+
if (event.data?.type === "state") {
|
|
274
|
+
setState({
|
|
275
|
+
isOnline: event.data.isOnline,
|
|
276
|
+
isSyncing: event.data.isSyncing,
|
|
277
|
+
pendingCount: event.data.pendingCount,
|
|
278
|
+
lastSynced: event.data.lastSynced
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const unsub = eventBus.on("__sync", handler);
|
|
283
|
+
return unsub;
|
|
284
|
+
}, [ctx]);
|
|
285
|
+
return state;
|
|
286
|
+
}
|
|
261
287
|
|
|
262
|
-
export { FauxbaseContext, FauxbaseProvider, useAuth, useEvent, useFauxbase, useFauxbaseContext, useGet, useList, useMutation };
|
|
288
|
+
export { FauxbaseContext, FauxbaseProvider, useAuth, useEvent, useFauxbase, useFauxbaseContext, useGet, useList, useMutation, useSyncStatus };
|
|
263
289
|
//# sourceMappingURL=index.js.map
|
|
264
290
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.ts","../src/use-fauxbase.ts","../src/use-list.ts","../src/use-get.ts","../src/use-mutation.ts","../src/use-event.ts","../src/use-auth.ts"],"names":["useState","useRef","useCallback","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, createElement, useContext } from 'react';\nimport type { Service, EventBus } from 'fauxbase';\nimport type { FauxbaseContextValue } from './types';\n\n// --- Context ---\n\nexport const FauxbaseContext = createContext<FauxbaseContextValue | null>(null);\n\n// --- Provider ---\n\nexport function FauxbaseProvider(props: {\n client: any;\n children: React.ReactNode;\n}) {\n // Invalidation registry: Service → Set of refetch callbacks\n const registryRef = { current: new Map<Service<any>, Set<() => void>>() };\n\n const value: FauxbaseContextValue = {\n client: props.client,\n invalidate: (service: Service<any>) => {\n const subscribers = registryRef.current.get(service);\n if (subscribers) {\n for (const fn of subscribers) {\n fn();\n }\n }\n },\n subscribe: (service: Service<any>, refetchFn: () => void) => {\n if (!registryRef.current.has(service)) {\n registryRef.current.set(service, new Set());\n }\n registryRef.current.get(service)!.add(refetchFn);\n return () => {\n registryRef.current.get(service)?.delete(refetchFn);\n };\n },\n };\n\n // Bridge remote events → auto-invalidation\n const eventBus: EventBus | undefined = props.client._eventBus;\n if (eventBus) {\n eventBus.onAny((event) => {\n if (event.source !== 'remote') return;\n const svc = props.client[event.resource];\n if (svc) {\n value.invalidate(svc);\n }\n });\n }\n\n return createElement(FauxbaseContext.Provider, { value }, props.children);\n}\n\n// --- Hook ---\n\nexport function useFauxbaseContext(): FauxbaseContextValue {\n const ctx = useContext(FauxbaseContext);\n if (!ctx) {\n throw new Error('useFauxbaseContext must be used within a FauxbaseProvider');\n }\n return ctx;\n}\n","import { useFauxbaseContext } from './context';\n\nexport function useFauxbase() {\n const ctx = useFauxbaseContext();\n return ctx.client;\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity, QueryParams, PageMeta } from 'fauxbase';\nimport type { UseListResult, UseListOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useList<T extends Entity>(\n service: Service<T>,\n query?: QueryParams,\n options?: UseListOptions,\n): UseListResult<T> {\n const ctx = useFauxbaseContext();\n const [items, setItems] = useState<T[]>([]);\n const [meta, setMeta] = useState<PageMeta | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false;\n\n const fetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const result = await service.list(query);\n if (mountedRef.current) {\n setItems(result.items);\n setMeta(result.meta);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, JSON.stringify(query), enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and query change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n // Refetch interval\n useEffect(() => {\n if (!options?.refetchInterval || !enabled) return;\n const id = setInterval(fetch, options.refetchInterval);\n return () => clearInterval(id);\n }, [fetch, options?.refetchInterval, enabled]);\n\n return { items, meta, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseGetResult, UseGetOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useGet<T extends Entity>(\n service: Service<T>,\n id: string | null | undefined,\n options?: UseGetOptions,\n): UseGetResult<T> {\n const ctx = useFauxbaseContext();\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false && id != null;\n\n const fetch = useCallback(async () => {\n if (!enabled || !id) {\n setData(null);\n setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n try {\n const result = await service.get(id);\n if (mountedRef.current) {\n setData(result.data);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setData(null);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, id, enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and id change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n return { data, loading, error, refetch: fetch };\n}\n","import { useState, useCallback } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseMutationResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useMutation<T extends Entity>(\n service: Service<T>,\n): UseMutationResult<T> {\n const ctx = useFauxbaseContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const create = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.create(data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const update = useCallback(async (id: string, data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.update(id, data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const remove = useCallback(async (id: string): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.delete(id);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n return { create, update, remove, loading, error };\n}\n","import { useEffect } from 'react';\nimport type { Service, Entity, EventBus, EventHandler } from 'fauxbase';\nimport { useFauxbaseContext } from './context';\n\nexport function useEvent<T extends Entity>(\n serviceOrResource: Service<T> | string,\n handler: EventHandler<T>,\n): void {\n const ctx = useFauxbaseContext();\n\n useEffect(() => {\n const eventBus: EventBus | undefined = ctx.client._eventBus;\n if (!eventBus) return;\n\n const resource = typeof serviceOrResource === 'string'\n ? serviceOrResource\n : (serviceOrResource as any).resourceName;\n\n return eventBus.on(resource, handler);\n }, [serviceOrResource, handler, ctx.client]);\n}\n","import { useState, useCallback } from 'react';\nimport type { Entity } from 'fauxbase';\nimport type { UseAuthResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useAuth<T extends Entity>(): UseAuthResult<T> {\n const ctx = useFauxbaseContext();\n const authService = ctx.client.auth;\n\n if (!authService) {\n throw new Error('useAuth requires auth to be configured in createClient');\n }\n\n const [, forceUpdate] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const rerender = useCallback(() => forceUpdate(n => n + 1), []);\n\n const login = useCallback(async (credentials: { email: string; password: string }): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.login(credentials);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const register = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.register(data);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const logout = useCallback(() => {\n authService.logout();\n rerender();\n }, [authService, rerender]);\n\n const hasRole = useCallback((role: string): boolean => {\n return authService.hasRole(role);\n }, [authService]);\n\n return {\n user: authService.currentUser as T | null,\n isLoggedIn: authService.isLoggedIn,\n token: authService.token,\n login,\n register,\n logout,\n hasRole,\n loading,\n error,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/context.ts","../src/use-fauxbase.ts","../src/use-list.ts","../src/use-get.ts","../src/use-mutation.ts","../src/use-event.ts","../src/use-auth.ts","../src/use-sync-status.ts"],"names":["useState","useRef","useCallback","useEffect","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, createElement, useContext } from 'react';\nimport type { Service, EventBus } from 'fauxbase';\nimport type { FauxbaseContextValue } from './types';\n\n// --- Context ---\n\nexport const FauxbaseContext = createContext<FauxbaseContextValue | null>(null);\n\n// --- Provider ---\n\nexport function FauxbaseProvider(props: {\n client: any;\n children: React.ReactNode;\n}) {\n // Invalidation registry: Service → Set of refetch callbacks\n const registryRef = { current: new Map<Service<any>, Set<() => void>>() };\n\n const value: FauxbaseContextValue = {\n client: props.client,\n invalidate: (service: Service<any>) => {\n const subscribers = registryRef.current.get(service);\n if (subscribers) {\n for (const fn of subscribers) {\n fn();\n }\n }\n },\n subscribe: (service: Service<any>, refetchFn: () => void) => {\n if (!registryRef.current.has(service)) {\n registryRef.current.set(service, new Set());\n }\n registryRef.current.get(service)!.add(refetchFn);\n return () => {\n registryRef.current.get(service)?.delete(refetchFn);\n };\n },\n };\n\n // Bridge remote events → auto-invalidation\n const eventBus: EventBus | undefined = props.client._eventBus;\n if (eventBus) {\n eventBus.onAny((event) => {\n if (event.source !== 'remote') return;\n const svc = props.client[event.resource];\n if (svc) {\n value.invalidate(svc);\n }\n });\n }\n\n return createElement(FauxbaseContext.Provider, { value }, props.children);\n}\n\n// --- Hook ---\n\nexport function useFauxbaseContext(): FauxbaseContextValue {\n const ctx = useContext(FauxbaseContext);\n if (!ctx) {\n throw new Error('useFauxbaseContext must be used within a FauxbaseProvider');\n }\n return ctx;\n}\n","import { useFauxbaseContext } from './context';\n\nexport function useFauxbase() {\n const ctx = useFauxbaseContext();\n return ctx.client;\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity, QueryParams, PageMeta } from 'fauxbase';\nimport type { UseListResult, UseListOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useList<T extends Entity>(\n service: Service<T>,\n query?: QueryParams,\n options?: UseListOptions,\n): UseListResult<T> {\n const ctx = useFauxbaseContext();\n const [items, setItems] = useState<T[]>([]);\n const [meta, setMeta] = useState<PageMeta | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false;\n\n const fetch = useCallback(async () => {\n if (!enabled) return;\n setLoading(true);\n setError(null);\n try {\n const result = await service.list(query);\n if (mountedRef.current) {\n setItems(result.items);\n setMeta(result.meta);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, JSON.stringify(query), enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and query change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n // Refetch interval\n useEffect(() => {\n if (!options?.refetchInterval || !enabled) return;\n const id = setInterval(fetch, options.refetchInterval);\n return () => clearInterval(id);\n }, [fetch, options?.refetchInterval, enabled]);\n\n return { items, meta, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseGetResult, UseGetOptions } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useGet<T extends Entity>(\n service: Service<T>,\n id: string | null | undefined,\n options?: UseGetOptions,\n): UseGetResult<T> {\n const ctx = useFauxbaseContext();\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const enabled = options?.enabled !== false && id != null;\n\n const fetch = useCallback(async () => {\n if (!enabled || !id) {\n setData(null);\n setLoading(false);\n return;\n }\n setLoading(true);\n setError(null);\n try {\n const result = await service.get(id);\n if (mountedRef.current) {\n setData(result.data);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setData(null);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [service, id, enabled]);\n\n // Subscribe for invalidation\n useEffect(() => {\n const unsub = ctx.subscribe(service, fetch);\n return unsub;\n }, [ctx, service, fetch]);\n\n // Fetch on mount and id change\n useEffect(() => {\n mountedRef.current = true;\n fetch();\n return () => { mountedRef.current = false; };\n }, [fetch]);\n\n return { data, loading, error, refetch: fetch };\n}\n","import { useState, useCallback } from 'react';\nimport type { Service, Entity } from 'fauxbase';\nimport type { UseMutationResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useMutation<T extends Entity>(\n service: Service<T>,\n): UseMutationResult<T> {\n const ctx = useFauxbaseContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const create = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.create(data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const update = useCallback(async (id: string, data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.update(id, data);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n const remove = useCallback(async (id: string): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const result = await service.delete(id);\n ctx.invalidate(service);\n return result.data;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [service, ctx]);\n\n return { create, update, remove, loading, error };\n}\n","import { useEffect } from 'react';\nimport type { Service, Entity, EventBus, EventHandler } from 'fauxbase';\nimport { useFauxbaseContext } from './context';\n\nexport function useEvent<T extends Entity>(\n serviceOrResource: Service<T> | string,\n handler: EventHandler<T>,\n): void {\n const ctx = useFauxbaseContext();\n\n useEffect(() => {\n const eventBus: EventBus | undefined = ctx.client._eventBus;\n if (!eventBus) return;\n\n const resource = typeof serviceOrResource === 'string'\n ? serviceOrResource\n : (serviceOrResource as any).resourceName;\n\n return eventBus.on(resource, handler);\n }, [serviceOrResource, handler, ctx.client]);\n}\n","import { useState, useCallback } from 'react';\nimport type { Entity } from 'fauxbase';\nimport type { UseAuthResult } from './types';\nimport { useFauxbaseContext } from './context';\n\nexport function useAuth<T extends Entity>(): UseAuthResult<T> {\n const ctx = useFauxbaseContext();\n const authService = ctx.client.auth;\n\n if (!authService) {\n throw new Error('useAuth requires auth to be configured in createClient');\n }\n\n const [, forceUpdate] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const rerender = useCallback(() => forceUpdate(n => n + 1), []);\n\n const login = useCallback(async (credentials: { email: string; password: string }): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.login(credentials);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const register = useCallback(async (data: Partial<T>): Promise<T> => {\n setLoading(true);\n setError(null);\n try {\n const user = await authService.register(data);\n rerender();\n return user;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setLoading(false);\n }\n }, [authService, rerender]);\n\n const logout = useCallback(() => {\n authService.logout();\n rerender();\n }, [authService, rerender]);\n\n const hasRole = useCallback((role: string): boolean => {\n return authService.hasRole(role);\n }, [authService]);\n\n return {\n user: authService.currentUser as T | null,\n isLoggedIn: authService.isLoggedIn,\n token: authService.token,\n login,\n register,\n logout,\n hasRole,\n loading,\n error,\n };\n}\n","import { useState, useEffect, useContext } from 'react';\nimport { FauxbaseContext } from './context';\n\nexport interface UseSyncStatusResult {\n isOnline: boolean;\n isSyncing: boolean;\n pendingCount: number;\n lastSynced: number | null;\n}\n\nexport function useSyncStatus(): UseSyncStatusResult {\n const ctx = useContext(FauxbaseContext);\n const [state, setState] = useState<UseSyncStatusResult>({\n isOnline: true,\n isSyncing: false,\n pendingCount: 0,\n lastSynced: null,\n });\n\n useEffect(() => {\n const eventBus = ctx?.client?._eventBus;\n if (!eventBus) return;\n\n const handler = (event: any) => {\n if (event.data?.type === 'state') {\n setState({\n isOnline: event.data.isOnline,\n isSyncing: event.data.isSyncing,\n pendingCount: event.data.pendingCount,\n lastSynced: event.data.lastSynced,\n });\n }\n };\n\n const unsub = eventBus.on('__sync', handler);\n return unsub;\n }, [ctx]);\n\n return state;\n}\n"]}
|