@@ -2,19 +2,20 @@ import type { Entity } from '@graphprotocol/hypergraph';
22import type * as Schema from 'effect/Schema' ;
33import { useHypergraphApp } from '../HypergraphAppContext.js' ;
44import { useEntitiesPrivate } from '../internal/use-entities-private.js' ;
5- import { useEntitiesPublic } from '../internal/use-entities-public.js' ;
5+ import { type UseEntitiesPublicResult , useEntitiesPublic } from '../internal/use-entities-public.js' ;
66import { useHypergraphSpaceInternal } from '../internal/use-hypergraph-space-internal.js' ;
77
88type SpaceSelectionInputOptionInContext = {
99 space ?: never ;
1010 spaces ?: never ;
1111} ;
1212
13- type UseEntitiesParams < S extends Schema . Schema . AnyNoContext > = (
14- | Entity . SpaceSelectionInput
15- | SpaceSelectionInputOptionInContext
16- ) & {
17- mode : 'public' | 'private' ;
13+ type UseEntitiesParams <
14+ S extends Schema . Schema . AnyNoContext ,
15+ IncludeSpaceIds extends boolean | undefined = boolean | undefined ,
16+ Mode extends 'public' | 'private' = 'public' | 'private' ,
17+ > = ( Entity . SpaceSelectionInput | SpaceSelectionInputOptionInContext ) & {
18+ mode : Mode ;
1819 filter ?: Entity . EntityFilter < Schema . Schema . Type < S > > | undefined ;
1920 // TODO: restrict multi-level nesting to the actual relation keys
2021 include ?: Entity . EntityInclude < S > | undefined ;
@@ -27,11 +28,34 @@ type UseEntitiesParams<S extends Schema.Schema.AnyNoContext> = (
2728 }
2829 | undefined ;
2930 backlinksTotalCountsTypeId1 ?: string | undefined ;
30- includeSpaceIds ?: boolean | undefined ;
31+ includeSpaceIds ?: IncludeSpaceIds ;
3132 logInvalidResults ?: boolean ;
3233} ;
3334
34- export function useEntities < const S extends Schema . Schema . AnyNoContext > ( type : S , params : UseEntitiesParams < S > ) {
35+ type UseEntitiesPublicReturn <
36+ S extends Schema . Schema . AnyNoContext ,
37+ IncludeSpaceIds extends boolean | undefined ,
38+ > = UseEntitiesPublicResult < S , IncludeSpaceIds > & { deleted : [ ] } ;
39+
40+ type UseEntitiesPrivateResult < S extends Schema . Schema . AnyNoContext > = Omit <
41+ UseEntitiesPublicResult < S , false > ,
42+ 'data'
43+ > & {
44+ data : ( Entity . Entity < S > & { backlinksTotalCountsTypeId1 ?: number } ) [ ] ;
45+ deleted : Entity . Entity < S > [ ] ;
46+ } ;
47+
48+ type UseEntitiesResult <
49+ S extends Schema . Schema . AnyNoContext ,
50+ IncludeSpaceIds extends boolean | undefined ,
51+ Mode extends 'public' | 'private' ,
52+ > = Mode extends 'public' ? UseEntitiesPublicReturn < S , IncludeSpaceIds > : UseEntitiesPrivateResult < S > ;
53+
54+ export function useEntities <
55+ const S extends Schema . Schema . AnyNoContext ,
56+ IncludeSpaceIds extends boolean | undefined = false ,
57+ Mode extends 'public' | 'private' = 'public' ,
58+ > ( type : S , params : UseEntitiesParams < S , IncludeSpaceIds , Mode > ) : UseEntitiesResult < S , IncludeSpaceIds , Mode > {
3559 const {
3660 mode,
3761 filter,
@@ -50,15 +74,15 @@ export function useEntities<const S extends Schema.Schema.AnyNoContext>(type: S,
5074 const logInvalidResults = logInvalidResultsParam ?? contextLogInvalidResults ?? true ;
5175 const resolvedSpace = space ?? spaceFromContext ;
5276 const publicSpaceParams = spaces ? { spaces } : { space : resolvedSpace } ;
53- const publicResult = useEntitiesPublic ( type , {
77+ const publicResult = useEntitiesPublic < S , IncludeSpaceIds > ( type , {
5478 enabled : mode === 'public' ,
5579 filter,
5680 include,
5781 first,
5882 offset,
5983 orderBy,
6084 backlinksTotalCountsTypeId1,
61- includeSpaceIds,
85+ ... ( includeSpaceIds !== undefined ? { includeSpaceIds } : { } ) ,
6286 ...publicSpaceParams ,
6387 logInvalidResults,
6488 } ) ;
@@ -68,12 +92,12 @@ export function useEntities<const S extends Schema.Schema.AnyNoContext>(type: S,
6892 return {
6993 ...publicResult ,
7094 deleted : [ ] ,
71- } ;
95+ } as UseEntitiesResult < S , IncludeSpaceIds , Mode > ;
7296 }
7397
7498 return {
7599 ...publicResult ,
76100 data : localResult . entities as ( Entity . Entity < S > & { backlinksTotalCountsTypeId1 ?: number } ) [ ] ,
77101 deleted : localResult . deletedEntities ,
78- } ;
102+ } as UseEntitiesResult < S , IncludeSpaceIds , Mode > ;
79103}
0 commit comments