Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@contember/bindx-react

Package Overview
Dependencies
Maintainers
4
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@contember/bindx-react - npm Package Compare versions

Comparing version
0.1.5
to
0.1.10
+25
-30
dist/hooks/ContemberBindxProvider.d.ts
import { type ReactNode } from 'react';
import { GraphQlClient } from '@contember/graphql-client';
import { type SchemaNames } from '@contember/client-content';
import { SnapshotStore, UndoManager, type SchemaDefinition, type UndoManagerConfig, type UpdateMode } from '@contember/bindx';
/**
* Runtime schema names format (from Contember API / generated code).
* Used by ContemberBindxProvider for backwards compatibility.
*/
export interface SchemaNames {
readonly entities: {
readonly [entityName: string]: {
readonly name: string;
readonly scalars: readonly string[];
readonly fields: {
readonly [fieldName: string]: {
readonly type: 'column';
readonly enumName?: string;
readonly columnType?: string;
} | {
readonly type: 'many' | 'one';
readonly entity: string;
};
};
};
};
readonly enums?: {
readonly [enumName: string]: readonly string[];
};
}
/**
* Converts SchemaNames (Contember format) to SchemaDefinition (bindx format)

@@ -36,33 +60,4 @@ * so that a SchemaRegistry can be created for standalone hooks.

* Provider component that combines Contember authentication with bindx data binding.
*
* @example
* ```tsx
* import { ContemberBindxProvider, useUndo } from '@contember/bindx-react'
* import { schema } from './generated/schema'
*
* function App() {
* return (
* <ContemberBindxProvider
* client={graphQlClient}
* schema={schema}
* undoManager={true}
* >
* <ArticleEditor id="123" />
* </ContemberBindxProvider>
* )
* }
*
* // Access undo/redo in child components
* function UndoControls() {
* const { canUndo, canRedo, undo, redo } = useUndo()
* return (
* <div>
* <button onClick={undo} disabled={!canUndo}>Undo</button>
* <button onClick={redo} disabled={!canRedo}>Redo</button>
* </div>
* )
* }
* ```
*/
export declare const ContemberBindxProvider: import("react").NamedExoticComponent<ContemberBindxProviderProps>;
//# sourceMappingURL=ContemberBindxProvider.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"ContemberBindxProvider.d.ts","sourceRoot":"","sources":["../../src/hooks/ContemberBindxProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAsC,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAoB,aAAa,EAAuF,WAAW,EAAkB,KAAK,gBAAgB,EAAiB,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAInQ;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwBnG;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAA;IACnB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,eAAe;IACf,QAAQ,EAAE,SAAS,CAAA;IAEnB,MAAM,EAAE,aAAa,CAAA;IAErB,gHAAgH;IAChH,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;IACnC,sFAAsF;IACtF,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAA;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,sBAAsB,mEA6DjC,CAAA"}
{"version":3,"file":"ContemberBindxProvider.d.ts","sourceRoot":"","sources":["../../src/hooks/ContemberBindxProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAoB,aAAa,EAAuF,WAAW,EAAkB,KAAK,gBAAgB,EAAiB,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAInQ;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,QAAQ,EAAE;QAClB,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG;YAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;YACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;YACnC,QAAQ,CAAC,MAAM,EAAE;gBAChB,QAAQ,EAAE,SAAS,EAAE,MAAM,GACxB;oBAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;oBAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;oBAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;iBAAE,GACrF;oBAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;oBAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;iBAAE,CAAA;aAC7D,CAAA;SACD,CAAA;KACD,CAAA;IACD,QAAQ,CAAC,KAAK,CAAC,EAAE;QAChB,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;KAC9C,CAAA;CACD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwBnG;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAA;IACnB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,eAAe;IACf,QAAQ,EAAE,SAAS,CAAA;IAEnB,MAAM,EAAE,aAAa,CAAA;IAErB,gHAAgH;IAChH,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;IACnC,sFAAsF;IACtF,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAA;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,mEA+DjC,CAAA"}
export { BindxProvider, useBackendAdapter, useSnapshotStore, useDispatcher, useBatchPersister, useBindxContext, useSchemaRegistry, type BindxProviderProps, type BindxContextValue, } from './BackendAdapterContext.js';
export { usePersist, usePersistEntity, type PersistApi, type EntityPersistApi, type AnyRefWithMeta, } from './usePersist.js';
export { useEntity, type UseEntityOptions, type LoadingEntityAccessor, type ErrorEntityAccessor, type NotFoundEntityAccessor, type ReadyEntityAccessor, type EntityAccessorResult, } from './useEntity.js';
export { useEntityList, type UseEntityListOptions, type LoadingEntityListAccessor, type ErrorEntityListAccessor, type ReadyEntityListAccessor, type EntityListAccessorResult, } from './useEntityList.js';
export { useEntity, type UseEntityOptions, type LoadingEntityResult, type ErrorEntityResult, type NotFoundEntityResult, type ReadyEntityResult, type UseEntityResult, } from './useEntity.js';
export { useEntityList, type UseEntityListOptions, type LoadingEntityListResult, type ErrorEntityListResult, type ReadyEntityListResult, type UseEntityListResult, } from './useEntityList.js';
export { ContemberBindxProvider, schemaNamesToDef, } from './ContemberBindxProvider.js';

@@ -6,0 +6,0 @@ export { useUndo, type UndoHookResult } from './useUndo.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACtB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACnB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACN,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GACzB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC7B,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACN,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,EACN,eAAe,EACf,KAAK,iBAAiB,GACtB,MAAM,gBAAgB,CAAA"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACtB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACnB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACN,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACpB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACxB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACN,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,EACN,eAAe,EACf,KAAK,iBAAiB,GACtB,MAAM,gBAAgB,CAAA"}

@@ -1,2 +0,2 @@

import type { EntityDef, EntityUniqueWhere, SelectionInput, SelectionMeta, FieldError, SelectedEntityFields, CommonEntity, EntityForRoles, RoleNames } from '@contember/bindx';
import type { EntityDef, EntityUniqueWhere, SelectionInput, SelectionMeta, FieldError, CommonEntity, EntityForRoles, RoleNames, EntityAccessor } from '@contember/bindx';
/**

@@ -20,88 +20,56 @@ * Options for useEntity hook

/**
* Loading state for entity accessor
* Common properties on every UseEntityResult state.
* All prefixed with $ to avoid collision with entity field names.
*/
export interface LoadingEntityAccessor {
readonly status: 'loading';
readonly isLoading: true;
readonly isError: false;
readonly isNotFound: false;
readonly isPersisting: false;
readonly isDirty: false;
readonly id: string;
readonly fields: never;
readonly data: never;
persist(): Promise<void>;
reset(): void;
interface UseEntityResultBase {
$persist(): Promise<void>;
$reset(): void;
}
/**
* Error state for entity accessor
*/
export interface ErrorEntityAccessor {
readonly status: 'error';
readonly isLoading: false;
readonly isError: true;
readonly isNotFound: false;
readonly error: FieldError;
readonly isPersisting: false;
readonly isDirty: false;
export type LoadingEntityResult = UseEntityResultBase & {
readonly $status: 'loading';
readonly $isLoading: true;
readonly $isError: false;
readonly $isNotFound: false;
readonly $error: null;
readonly id: string;
readonly fields: never;
readonly data: never;
persist(): Promise<void>;
reset(): void;
}
/**
* Not found state for entity accessor
*/
export interface NotFoundEntityAccessor {
readonly status: 'not_found';
readonly isLoading: false;
readonly isError: false;
readonly isNotFound: true;
readonly isPersisting: false;
readonly isDirty: false;
};
export type ErrorEntityResult = UseEntityResultBase & {
readonly $status: 'error';
readonly $isLoading: false;
readonly $isError: true;
readonly $isNotFound: false;
readonly $error: FieldError;
readonly id: string;
readonly fields: never;
readonly data: never;
persist(): Promise<void>;
reset(): void;
}
/**
* Ready state base interface for entity accessor
*/
export interface ReadyEntityAccessorBase<TEntity extends object, TSelected extends object = TEntity> {
readonly status: 'ready';
readonly isLoading: false;
readonly isError: false;
readonly isNotFound: false;
readonly isPersisting: boolean;
readonly isDirty: boolean;
};
export type NotFoundEntityResult = UseEntityResultBase & {
readonly $status: 'not_found';
readonly $isLoading: false;
readonly $isError: false;
readonly $isNotFound: true;
readonly $error: null;
readonly id: string;
readonly fields: SelectedEntityFields<TEntity, TSelected>;
readonly data: TSelected;
persist(): Promise<void>;
reset(): void;
}
};
/**
* Ready state for entity accessor with direct field access via Proxy.
* Ready state — full EntityAccessor with status metadata.
*/
export type ReadyEntityAccessor<TEntity extends object, TSelected extends object = TEntity> = ReadyEntityAccessorBase<TEntity, TSelected> & SelectedEntityFields<TEntity, TSelected>;
export type ReadyEntityResult<TEntity extends object, TSelected extends object = TEntity> = UseEntityResultBase & EntityAccessor<TEntity, TSelected> & {
readonly $status: 'ready';
readonly $isLoading: false;
readonly $isError: false;
readonly $isNotFound: false;
readonly $error: null;
};
/**
* Union of all entity accessor states
* Union of all useEntity return states.
* Discriminated on $status.
*/
export type EntityAccessorResult<TEntity extends object, TSelected extends object = TEntity> = LoadingEntityAccessor | ErrorEntityAccessor | NotFoundEntityAccessor | ReadyEntityAccessor<TEntity, TSelected>;
export type UseEntityResult<TEntity extends object, TSelected extends object = TEntity> = LoadingEntityResult | ErrorEntityResult | NotFoundEntityResult | ReadyEntityResult<TEntity, TSelected>;
/**
* Hook to fetch and manage a single entity with role-expanded type inference.
*
* @example
* ```tsx
* const article = useEntity(schema.Article, { by: { id }, roles: ['admin'] }, e => e.title().internalNotes())
* ```
*/
export declare function useEntity<TRoleMap extends Record<string, object>, TRoles extends RoleNames<TRoleMap>, TResult extends object>(entity: EntityDef<TRoleMap>, options: UseEntityOptions & {
roles: readonly TRoles[];
}, definer: SelectionInput<EntityForRoles<TRoleMap, TRoles>, TResult>): EntityAccessorResult<EntityForRoles<TRoleMap, TRoles>, TResult>;
}, definer: SelectionInput<EntityForRoles<TRoleMap, TRoles>, TResult>): UseEntityResult<EntityForRoles<TRoleMap, TRoles>, TResult>;
/**
* Hook to fetch and manage a single entity with full type inference.
* Uses the common (narrowest) entity type when no roles are specified.
*

@@ -111,10 +79,9 @@ * @example

* const article = useEntity(schema.Article, { by: { id } }, e => e.title().content())
* if (article.status !== 'ready') return <Loading />
* if (article.$status !== 'ready') return <Loading />
* return <input value={article.title.value} onChange={...} />
* ```
*/
export declare function useEntity<TRoleMap extends Record<string, object>, TResult extends object>(entity: EntityDef<TRoleMap>, options: UseEntityOptions, definer: SelectionInput<CommonEntity<TRoleMap>, TResult>): EntityAccessorResult<CommonEntity<TRoleMap>, TResult>;
export declare function useEntity<TRoleMap extends Record<string, object>, TResult extends object>(entity: EntityDef<TRoleMap>, options: UseEntityOptions, definer: SelectionInput<CommonEntity<TRoleMap>, TResult>): UseEntityResult<CommonEntity<TRoleMap>, TResult>;
/**
* Hook to fetch and manage a single entity with pre-resolved selection.
*
* Used internally by Entity component that collects selection from JSX.

@@ -124,3 +91,4 @@ */

selection: SelectionMeta;
}): EntityAccessorResult<object, object>;
}): UseEntityResult<object, object>;
export {};
//# sourceMappingURL=useEntity.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"useEntity.d.ts","sourceRoot":"","sources":["../../src/hooks/useEntity.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"useEntity.d.ts","sourceRoot":"","sources":["../../src/hooks/useEntity.ts"],"names":[],"mappings":"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"}

@@ -23,50 +23,30 @@ import type { EntityDef, EntityAccessor, SelectionInput, SelectionMeta, FieldError, CommonEntity, EntityForRoles, RoleNames } from '@contember/bindx';

}
/**
* Loading state for entity list accessor
*/
export interface LoadingEntityListAccessor {
readonly status: 'loading';
readonly isLoading: true;
readonly isError: false;
readonly isDirty: false;
readonly items: never;
readonly length: 0;
add(data?: unknown): string;
remove(key: string): void;
move(fromIndex: number, toIndex: number): void;
interface EntityListResultBase {
$add(data?: unknown): string;
$remove(key: string): void;
$move(fromIndex: number, toIndex: number): void;
}
/**
* Error state for entity list accessor
*/
export interface ErrorEntityListAccessor {
readonly status: 'error';
readonly isLoading: false;
readonly isError: true;
readonly error: FieldError;
readonly isDirty: false;
readonly items: never;
readonly length: 0;
add(data?: unknown): string;
remove(key: string): void;
move(fromIndex: number, toIndex: number): void;
}
/**
* Ready state for entity list accessor
*/
export interface ReadyEntityListAccessor<T extends object> {
readonly status: 'ready';
readonly isLoading: false;
readonly isError: false;
readonly isDirty: boolean;
export type LoadingEntityListResult = EntityListResultBase & {
readonly $status: 'loading';
readonly $isLoading: true;
readonly $isError: false;
readonly $error: null;
};
export type ErrorEntityListResult = EntityListResultBase & {
readonly $status: 'error';
readonly $isLoading: false;
readonly $isError: true;
readonly $error: FieldError;
};
export type ReadyEntityListResult<T extends object> = EntityListResultBase & {
readonly $status: 'ready';
readonly $isLoading: false;
readonly $isError: false;
readonly $error: null;
readonly $isDirty: boolean;
readonly items: Array<EntityAccessor<T>>;
readonly length: number;
add(data?: Partial<T>): string;
remove(key: string): void;
move(fromIndex: number, toIndex: number): void;
}
};
export type UseEntityListResult<T extends object> = LoadingEntityListResult | ErrorEntityListResult | ReadyEntityListResult<T>;
/**
* Union of all entity list accessor states
*/
export type EntityListAccessorResult<T extends object> = LoadingEntityListAccessor | ErrorEntityListAccessor | ReadyEntityListAccessor<T>;
/**
* Hook to fetch and manage a list of entities with role-expanded type inference.

@@ -81,3 +61,3 @@ *

roles: readonly TRoles[];
}, definer: SelectionInput<EntityForRoles<TRoleMap, TRoles>, TResult>): EntityListAccessorResult<TResult>;
}, definer: SelectionInput<EntityForRoles<TRoleMap, TRoles>, TResult>): UseEntityListResult<TResult>;
/**

@@ -94,3 +74,3 @@ * Hook to fetch and manage a list of entities with full type inference.

*/
export declare function useEntityList<TRoleMap extends Record<string, object>, TResult extends object>(entity: EntityDef<TRoleMap>, options: UseEntityListOptions, definer: SelectionInput<CommonEntity<TRoleMap>, TResult>): EntityListAccessorResult<TResult>;
export declare function useEntityList<TRoleMap extends Record<string, object>, TResult extends object>(entity: EntityDef<TRoleMap>, options: UseEntityListOptions, definer: SelectionInput<CommonEntity<TRoleMap>, TResult>): UseEntityListResult<TResult>;
/**

@@ -104,3 +84,4 @@ * Hook to fetch and manage a list of entities with pre-resolved selection.

selection: SelectionMeta;
}): EntityListAccessorResult<object>;
}): UseEntityListResult<object>;
export {};
//# sourceMappingURL=useEntityList.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"useEntityList.d.ts","sourceRoot":"","sources":["../../src/hooks/useEntityList.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"useEntityList.d.ts","sourceRoot":"","sources":["../../src/hooks/useEntityList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAkB,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AASrK;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,wBAAwB;IACxB,OAAO,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC5C,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAMD,UAAU,oBAAoB;IAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/C;AAED,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG;IAC5D,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,GAAG;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,MAAM,IAAI,oBAAoB,GAAG;IAC5E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAC7C,uBAAuB,GACvB,qBAAqB,GACrB,qBAAqB,CAAC,CAAC,CAAC,CAAA;AAkC3B;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,MAAM,SAAS,SAAS,CAAC,QAAQ,CAAC,EAClC,OAAO,SAAS,MAAM,EAEtB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,oBAAoB,GAAG;IAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAC5D,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,GAChE,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAE/B;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,SAAS,MAAM,EAC5F,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC3B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,GACtD,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAE/B;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,oBAAoB,GAAG;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAC1D,mBAAmB,CAAC,MAAM,CAAC,CAAA"}

@@ -8,3 +8,3 @@ /**

export { scalar, hasOne, hasMany, defineSchema, entityDef, roleEntityDef, DEFAULT_ROLE, SchemaRegistry, createFragment, buildQueryFromSelection, EntityHandle, HasOneHandle, HasManyListHandle, FieldHandle, FIELD_REF_META, MockAdapter, ContemberAdapter, createEntityLoader, resolveSelectionMeta, buildQuery, SnapshotStore, ActionDispatcher, isTempId, isPlaceholderId, isPersistedId, generatePlaceholderId, BatchPersister, ChangeRegistry, UndoManager, EventEmitter, __internal, } from '@contember/bindx';
export type { BindxProviderProps, BindxContextValue, UseEntityOptions, UseEntityListOptions, LoadingEntityAccessor, ErrorEntityAccessor, NotFoundEntityAccessor, ReadyEntityAccessor, EntityAccessorResult, LoadingEntityListAccessor, ErrorEntityListAccessor, ReadyEntityListAccessor, EntityListAccessorResult, PersistApi, EntityPersistApi, AnyRefWithMeta, } from './hooks/index.js';
export type { BindxProviderProps, BindxContextValue, UseEntityOptions, UseEntityListOptions, LoadingEntityResult, ErrorEntityResult, NotFoundEntityResult, ReadyEntityResult, UseEntityResult, LoadingEntityListResult, ErrorEntityListResult, ReadyEntityListResult, UseEntityListResult, PersistApi, EntityPersistApi, AnyRefWithMeta, } from './hooks/index.js';
export type { DirtyEntity, PersistScope, AllScope, EntityScope as EntityPersistScope, FieldsScope, RelationScope, CustomScope, EntityPersistResult, PersistenceResult, BatchPersistOptions, } from '@contember/bindx';

@@ -11,0 +11,0 @@ export type { EntityAccessor, FieldRefBase, FieldProps, HasManyProps, HasOneProps, IfProps, EntityComponentProps, HasManyComponentOptions, ShowProps, SelectionPropMeta, SelectionProvider, EntityPropKeys, EntityFromProp, SelectionFromProp, ImplicitFragmentProperties, BindxComponentBase, BindxComponent, ComponentBuilder, ComponentBuilderState, CreateComponentOptions, InterfaceEntityPropConfig, ImplicitInterfaceEntityConfig, ExplicitInterfaceEntityConfig, AddInterfaces, InterfaceSelectorsMap, AnyEntityPropConfig, EntityPropConfig, ImplicitEntityConfig, ExplicitEntityConfig, AddImplicitEntity, AddExplicitEntity, AddImplicitInterfaceEntity, AddExplicitInterfaceEntity, SetScalarProps, BuildEntityProps, BuildProps, BuildFragmentProps, InitialBuilderState, } from './jsx/index.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"collectorProxy.d.ts","sourceRoot":"","sources":["../../src/jsx/collectorProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAEN,KAAK,cAAc,EAOnB,MAAM,YAAY,CAAA;AAQnB;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACrC,KAAK,EAAE,cAAc,EACrB,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,cAAc,GAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAW,GAClE,cAAc,CAAC,CAAC,CAAC,CA0CnB"}
{"version":3,"file":"collectorProxy.d.ts","sourceRoot":"","sources":["../../src/jsx/collectorProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAyB,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAEN,KAAK,cAAc,EAOnB,MAAM,YAAY,CAAA;AAQnB;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACrC,KAAK,EAAE,cAAc,EACrB,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,cAAc,GAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAW,GAClE,cAAc,CAAC,CAAC,CAAC,CA2CnB"}

@@ -1,1 +0,1 @@

{"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../../src/jsx/components/Entity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAIrH,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAiB,KAAK,UAAU,EAAgF,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAI1M;;;GAGG;AACH,UAAU,eAAe,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAChE,kCAAkC;IAClC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3B,+EAA+E;IAC/E,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAC7E,qBAAqB;IACrB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,KAAK,CAAC,SAAS,CAAA;CAC9C;AAED;;GAEG;AACH,UAAU,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAE,SAAQ,eAAe,CAAC,QAAQ,CAAC;IACjG,sFAAsF;IACtF,EAAE,EAAE,iBAAiB,CAAA;IACrB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,uBAAuB;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;GAEG;AACH,UAAU,iBAAiB,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAE,SAAQ,eAAe,CAAC,QAAQ,CAAC;IACrG,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,8DAA8D;IAC9D,MAAM,EAAE,IAAI,CAAA;IACZ,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,OAAO,CAAC,EAAE,KAAK,CAAA;IACf,QAAQ,CAAC,EAAE,KAAK,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IACrF,aAAa,CAAC,QAAQ,CAAC,GACvB,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAuO9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,iBAAS,UAAU,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1D,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC1B,YAAY,GAAG,IAAI,CA0BrB;AAGD,eAAO,MAAM,MAAM,EAAkC,OAAO,UAAU,CAAA"}
{"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../../src/jsx/components/Entity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAIrH,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAiB,KAAK,UAAU,EAAgF,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAI1M;;;GAGG;AACH,UAAU,eAAe,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAChE,kCAAkC;IAClC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3B,+EAA+E;IAC/E,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAC7E,qBAAqB;IACrB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,KAAK,CAAC,SAAS,CAAA;CAC9C;AAED;;GAEG;AACH,UAAU,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAE,SAAQ,eAAe,CAAC,QAAQ,CAAC;IACjG,sFAAsF;IACtF,EAAE,EAAE,iBAAiB,CAAA;IACrB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,uBAAuB;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;GAEG;AACH,UAAU,iBAAiB,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAE,SAAQ,eAAe,CAAC,QAAQ,CAAC;IACrG,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,8DAA8D;IAC9D,MAAM,EAAE,IAAI,CAAA;IACZ,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,OAAO,CAAC,EAAE,KAAK,CAAA;IACf,QAAQ,CAAC,EAAE,KAAK,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IACrF,aAAa,CAAC,QAAQ,CAAC,GACvB,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AA6O9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,iBAAS,UAAU,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1D,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC1B,YAAY,GAAG,IAAI,CA0BrB;AAGD,eAAO,MAAM,MAAM,EAAkC,OAAO,UAAU,CAAA"}
{
"name": "@contember/bindx-react",
"version": "0.1.5",
"version": "0.1.10",
"description": "Type-safe React data binding framework",

@@ -18,5 +18,5 @@ "type": "module",

"dependencies": {
"@contember/bindx": "0.1.5",
"@contember/client-content": "^2.1.0-alpha.30",
"@contember/graphql-client": "^2.1.0-alpha.30",
"@contember/bindx": "0.1.10",
"@contember/bindx-client": "0.1.10",
"@contember/graphql-client": "^2.1.0-beta.1",
"@radix-ui/primitive": "^1.1.3",

@@ -23,0 +23,0 @@ "@radix-ui/react-slot": "^1.2.4"

import { memo, useMemo, type ReactNode } from 'react'
import { GraphQlClient } from '@contember/graphql-client'
import { ContentClient, ContentQueryBuilder, type SchemaNames } from '@contember/client-content'
import { ContentClient } from '@contember/bindx-client'
import { ContemberAdapter, SnapshotStore, ActionDispatcher, BatchPersister, MutationCollector, ContemberSchemaMutationAdapter, UndoManager, SchemaRegistry, type SchemaDefinition, type FieldDef, type UndoManagerConfig, type UpdateMode } from '@contember/bindx'

@@ -9,2 +9,23 @@ import { BindxContext, type BindxContextValue } from './BackendAdapterContext.js'

/**
* Runtime schema names format (from Contember API / generated code).
* Used by ContemberBindxProvider for backwards compatibility.
*/
export interface SchemaNames {
readonly entities: {
readonly [entityName: string]: {
readonly name: string
readonly scalars: readonly string[]
readonly fields: {
readonly [fieldName: string]:
| { readonly type: 'column'; readonly enumName?: string; readonly columnType?: string }
| { readonly type: 'many' | 'one'; readonly entity: string }
}
}
}
readonly enums?: {
readonly [enumName: string]: readonly string[]
}
}
/**
* Converts SchemaNames (Contember format) to SchemaDefinition (bindx format)

@@ -14,3 +35,3 @@ * so that a SchemaRegistry can be created for standalone hooks.

export function schemaNamesToDef(schemaNames: SchemaNames): SchemaDefinition<Record<string, object>> {
const enumsMap = (schemaNames as { enums?: Record<string, readonly string[]> }).enums ?? {}
const enumsMap = schemaNames.enums ?? {}
const entities: Record<string, { fields: Record<string, FieldDef> }> = {}

@@ -21,4 +42,4 @@ for (const [entityName, entity] of Object.entries(schemaNames.entities)) {

if (fieldDef.type === 'column') {
const enumName = (fieldDef as { enumName?: string }).enumName
const columnType = (fieldDef as { columnType?: string }).columnType
const enumName = fieldDef.enumName
const columnType = fieldDef.columnType
const enumValues = enumName ? enumsMap[enumName] : undefined

@@ -70,31 +91,2 @@ if (enumName && enumValues) {

* Provider component that combines Contember authentication with bindx data binding.
*
* @example
* ```tsx
* import { ContemberBindxProvider, useUndo } from '@contember/bindx-react'
* import { schema } from './generated/schema'
*
* function App() {
* return (
* <ContemberBindxProvider
* client={graphQlClient}
* schema={schema}
* undoManager={true}
* >
* <ArticleEditor id="123" />
* </ContemberBindxProvider>
* )
* }
*
* // Access undo/redo in child components
* function UndoControls() {
* const { canUndo, canRedo, undo, redo } = useUndo()
* return (
* <div>
* <button onClick={undo} disabled={!canUndo}>Undo</button>
* <button onClick={redo} disabled={!canRedo}>Redo</button>
* </div>
* )
* }
* ```
*/

@@ -115,3 +107,8 @@ export const ContemberBindxProvider = memo(function ContemberBindxProvider({

const adapter = new ContemberAdapter(new ContentClient(graphQlClient), new ContentQueryBuilder(schema))
// Create schema registry from SchemaNames for standalone hooks
const schemaRegistry = new SchemaRegistry(schemaNamesToDef(schema))
// Create adapter using new bindx-client ContentClient
const contentClient = new ContentClient(graphQlClient)
const adapter = new ContemberAdapter(contentClient, schemaRegistry)
const batcher = new QueryBatcher(adapter)

@@ -132,5 +129,2 @@

// Create schema registry from SchemaNames for standalone hooks
const schemaRegistry = new SchemaRegistry(schemaNamesToDef(schema))
// Create mutation collector for proper nested operations

@@ -137,0 +131,0 @@ // Use ContemberSchemaMutationAdapter to wrap SchemaNames

@@ -24,7 +24,7 @@ export {

type UseEntityOptions,
type LoadingEntityAccessor,
type ErrorEntityAccessor,
type NotFoundEntityAccessor,
type ReadyEntityAccessor,
type EntityAccessorResult,
type LoadingEntityResult,
type ErrorEntityResult,
type NotFoundEntityResult,
type ReadyEntityResult,
type UseEntityResult,
} from './useEntity.js'

@@ -35,6 +35,6 @@

type UseEntityListOptions,
type LoadingEntityListAccessor,
type ErrorEntityListAccessor,
type ReadyEntityListAccessor,
type EntityListAccessorResult,
type LoadingEntityListResult,
type ErrorEntityListResult,
type ReadyEntityListResult,
type UseEntityListResult,
} from './useEntityList.js'

@@ -41,0 +41,0 @@

@@ -15,2 +15,3 @@ import { useRef, useEffect, useMemo, useCallback } from 'react'

RoleNames,
EntityAccessor,
} from '@contember/bindx'

@@ -55,163 +56,60 @@ import {

/**
* Loading state for entity accessor
* Common properties on every UseEntityResult state.
* All prefixed with $ to avoid collision with entity field names.
*/
export interface LoadingEntityAccessor {
readonly status: 'loading'
readonly isLoading: true
readonly isError: false
readonly isNotFound: false
readonly isPersisting: false
readonly isDirty: false
readonly id: string
readonly fields: never
readonly data: never
persist(): Promise<void>
reset(): void
interface UseEntityResultBase {
$persist(): Promise<void>
$reset(): void
}
/**
* Error state for entity accessor
*/
export interface ErrorEntityAccessor {
readonly status: 'error'
readonly isLoading: false
readonly isError: true
readonly isNotFound: false
readonly error: FieldError
readonly isPersisting: false
readonly isDirty: false
export type LoadingEntityResult = UseEntityResultBase & {
readonly $status: 'loading'
readonly $isLoading: true
readonly $isError: false
readonly $isNotFound: false
readonly $error: null
readonly id: string
readonly fields: never
readonly data: never
persist(): Promise<void>
reset(): void
}
/**
* Not found state for entity accessor
*/
export interface NotFoundEntityAccessor {
readonly status: 'not_found'
readonly isLoading: false
readonly isError: false
readonly isNotFound: true
readonly isPersisting: false
readonly isDirty: false
export type ErrorEntityResult = UseEntityResultBase & {
readonly $status: 'error'
readonly $isLoading: false
readonly $isError: true
readonly $isNotFound: false
readonly $error: FieldError
readonly id: string
readonly fields: never
readonly data: never
persist(): Promise<void>
reset(): void
}
/**
* Ready state base interface for entity accessor
*/
export interface ReadyEntityAccessorBase<TEntity extends object, TSelected extends object = TEntity> {
readonly status: 'ready'
readonly isLoading: false
readonly isError: false
readonly isNotFound: false
readonly isPersisting: boolean
readonly isDirty: boolean
export type NotFoundEntityResult = UseEntityResultBase & {
readonly $status: 'not_found'
readonly $isLoading: false
readonly $isError: false
readonly $isNotFound: true
readonly $error: null
readonly id: string
readonly fields: SelectedEntityFields<TEntity, TSelected>
readonly data: TSelected
persist(): Promise<void>
reset(): void
}
/**
* Ready state for entity accessor with direct field access via Proxy.
* Ready state — full EntityAccessor with status metadata.
*/
export type ReadyEntityAccessor<TEntity extends object, TSelected extends object = TEntity> =
ReadyEntityAccessorBase<TEntity, TSelected> & SelectedEntityFields<TEntity, TSelected>
export type ReadyEntityResult<TEntity extends object, TSelected extends object = TEntity> =
UseEntityResultBase & EntityAccessor<TEntity, TSelected> & {
readonly $status: 'ready'
readonly $isLoading: false
readonly $isError: false
readonly $isNotFound: false
readonly $error: null
}
/**
* Union of all entity accessor states
* Union of all useEntity return states.
* Discriminated on $status.
*/
export type EntityAccessorResult<TEntity extends object, TSelected extends object = TEntity> =
| LoadingEntityAccessor
| ErrorEntityAccessor
| NotFoundEntityAccessor
| ReadyEntityAccessor<TEntity, TSelected>
export type UseEntityResult<TEntity extends object, TSelected extends object = TEntity> =
| LoadingEntityResult
| ErrorEntityResult
| NotFoundEntityResult
| ReadyEntityResult<TEntity, TSelected>
// ============================================================================
// Internal helpers
// ============================================================================
function createLoadingAccessor(id: string): LoadingEntityAccessor {
return {
status: 'loading',
isLoading: true,
isError: false,
isNotFound: false,
isPersisting: false,
isDirty: false,
id,
get fields(): never {
throw new Error('Cannot access fields while loading')
},
get data(): never {
throw new Error('Cannot access data while loading')
},
async persist() {
// No-op while loading
},
reset() {
// No-op while loading
},
}
}
function createErrorAccessor(id: string, error: FieldError): ErrorEntityAccessor {
return {
status: 'error',
isLoading: false,
isError: true,
isNotFound: false,
error,
isPersisting: false,
isDirty: false,
id,
get fields(): never {
throw new Error('Cannot access fields after error')
},
get data(): never {
throw new Error('Cannot access data after error')
},
async persist() {
// No-op after error
},
reset() {
// No-op after error
},
}
}
function createNotFoundAccessor(id: string): NotFoundEntityAccessor {
return {
status: 'not_found',
isLoading: false,
isError: false,
isNotFound: true,
isPersisting: false,
isDirty: false,
id,
get fields(): never {
throw new Error('Cannot access fields — entity not found')
},
get data(): never {
throw new Error('Cannot access data — entity not found')
},
async persist() {
// No-op for not found
},
reset() {
// No-op for not found
},
}
}
// ============================================================================
// Hook overloads

@@ -222,7 +120,2 @@ // ============================================================================

* Hook to fetch and manage a single entity with role-expanded type inference.
*
* @example
* ```tsx
* const article = useEntity(schema.Article, { by: { id }, roles: ['admin'] }, e => e.title().internalNotes())
* ```
*/

@@ -237,7 +130,6 @@ export function useEntity<

definer: SelectionInput<EntityForRoles<TRoleMap, TRoles>, TResult>,
): EntityAccessorResult<EntityForRoles<TRoleMap, TRoles>, TResult>
): UseEntityResult<EntityForRoles<TRoleMap, TRoles>, TResult>
/**
* Hook to fetch and manage a single entity with full type inference.
* Uses the common (narrowest) entity type when no roles are specified.
*

@@ -247,3 +139,3 @@ * @example

* const article = useEntity(schema.Article, { by: { id } }, e => e.title().content())
* if (article.status !== 'ready') return <Loading />
* if (article.$status !== 'ready') return <Loading />
* return <input value={article.title.value} onChange={...} />

@@ -256,7 +148,6 @@ * ```

definer: SelectionInput<CommonEntity<TRoleMap>, TResult>,
): EntityAccessorResult<CommonEntity<TRoleMap>, TResult>
): UseEntityResult<CommonEntity<TRoleMap>, TResult>
/**
* Hook to fetch and manage a single entity with pre-resolved selection.
*
* Used internally by Entity component that collects selection from JSX.

@@ -267,3 +158,3 @@ */

options: UseEntityOptions & { selection: SelectionMeta },
): EntityAccessorResult<object, object>
): UseEntityResult<object, object>

@@ -274,11 +165,7 @@ // ============================================================================

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function useEntity(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
entity: EntityDef<any>,
options: UseEntityOptions,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
definer?: SelectionInput<any, any>,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
): EntityAccessorResult<any, any> {
): UseEntityResult<any, any> {
const schemaRegistry = useSchemaRegistry()

@@ -420,79 +307,81 @@ const entityType = entity.$name

// --- EntityHandle ---
// Include snapshot in deps so handle reference changes when entity data changes.
// This ensures memo-wrapped children that receive individual field handles re-render.
const handle = useMemo(
() => EntityHandle.create(id, entityType, store, dispatcher, schemaRegistry as SchemaRegistry<Record<string, object>>),
const rawHandle = useMemo(
() => EntityHandle.createRaw(id, entityType, store, dispatcher, schemaRegistry as SchemaRegistry<Record<string, object>>),
[id, entityType, store, dispatcher, schemaRegistry, snapshot],
)
const handle = useMemo(
() => EntityHandle.wrapProxy(rawHandle),
[rawHandle],
)
useEffect(() => {
return () => {
handle.dispose()
rawHandle.dispose()
}
}, [handle])
}, [rawHandle])
// --- Build accessor ---
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const accessor = useMemo((): EntityAccessorResult<any, any> => {
if (!loadState || loadState.status === 'loading') {
return createLoadingAccessor(id)
// --- Persist & reset callbacks ---
const persist = useCallback(async () => {
await batchPersister.persist(entityType, id)
}, [batchPersister, entityType, id])
const reset = useCallback(() => {
rawHandle.reset()
}, [rawHandle])
// --- Build result ---
const result = useMemo((): UseEntityResult<any, any> => {
if (!loadState || loadState.status === 'loading' || (!snapshot && loadState.status === 'success')) {
return { $status: 'loading', $isLoading: true, $isError: false, $isNotFound: false, $error: null, id, $persist: persist, $reset: reset }
}
if (loadState.status === 'error') {
return createErrorAccessor(id, loadState.error!)
return { $status: 'error', $isLoading: false, $isError: true, $isNotFound: false, $error: loadState.error!, id, $persist: persist, $reset: reset }
}
if (loadState.status === 'not_found') {
return createNotFoundAccessor(id)
return { $status: 'not_found', $isLoading: false, $isError: false, $isNotFound: true, $error: null, id, $persist: persist, $reset: reset }
}
if (!snapshot) {
return createLoadingAccessor(id)
}
// Ready — layer status metadata on top of EntityHandle proxy
return createReadyResult(handle, persist, reset)
}, [snapshot, loadState, isPersisting, id, handle, persist, reset])
// Ready state
const realId = (snapshot.data as Record<string, unknown>)?.['id'] as string | undefined ?? id
return result
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const baseAccessor: ReadyEntityAccessorBase<any, any> = {
status: 'ready',
isLoading: false,
isError: false,
isNotFound: false,
isPersisting,
get isDirty() {
return handle.$isDirty
},
id: realId,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
fields: handle.$fields as any,
data: snapshot.data,
async persist() {
await batchPersister.persist(entityType, realId)
},
reset() {
handle.reset()
},
}
// ============================================================================
// Result factories
// ============================================================================
// Wrap in Proxy for direct field access
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return new Proxy(baseAccessor as any, {
get(target: Record<string, unknown>, prop: string | symbol, receiver: unknown) {
if (prop in target) {
return Reflect.get(target, prop, receiver)
}
if (typeof prop === 'string') {
const fields = target['fields'] as Record<string, unknown>
const fieldValue = fields[prop]
if (fieldValue !== undefined) {
return fieldValue
}
}
return undefined
},
})
}, [snapshot, loadState, isPersisting, id, handle, batchPersister, entityType])
function createReadyResult(
handle: EntityAccessor<object, object>,
persist: () => Promise<void>,
reset: () => void,
): ReadyEntityResult<any, any> {
const meta = {
$status: 'ready' as const,
$isLoading: false as const,
$isError: false as const,
$isNotFound: false as const,
$error: null,
$persist: persist,
$reset: reset,
}
return accessor
return new Proxy(handle as any, {
get(target, prop, receiver) {
if (typeof prop === 'string' && prop in meta) {
return (meta as any)[prop]
}
return Reflect.get(target, prop, receiver)
},
has(target, prop) {
if (typeof prop === 'string' && prop in meta) {
return true
}
return Reflect.has(target, prop)
},
}) as any
}

@@ -37,55 +37,36 @@ import { useRef, useEffect, useMemo, useCallback } from 'react'

/**
* Loading state for entity list accessor
*/
export interface LoadingEntityListAccessor {
readonly status: 'loading'
readonly isLoading: true
readonly isError: false
readonly isDirty: false
readonly items: never
readonly length: 0
add(data?: unknown): string
remove(key: string): void
move(fromIndex: number, toIndex: number): void
interface EntityListResultBase {
$add(data?: unknown): string
$remove(key: string): void
$move(fromIndex: number, toIndex: number): void
}
/**
* Error state for entity list accessor
*/
export interface ErrorEntityListAccessor {
readonly status: 'error'
readonly isLoading: false
readonly isError: true
readonly error: FieldError
readonly isDirty: false
readonly items: never
readonly length: 0
add(data?: unknown): string
remove(key: string): void
move(fromIndex: number, toIndex: number): void
export type LoadingEntityListResult = EntityListResultBase & {
readonly $status: 'loading'
readonly $isLoading: true
readonly $isError: false
readonly $error: null
}
/**
* Ready state for entity list accessor
*/
export interface ReadyEntityListAccessor<T extends object> {
readonly status: 'ready'
readonly isLoading: false
readonly isError: false
readonly isDirty: boolean
export type ErrorEntityListResult = EntityListResultBase & {
readonly $status: 'error'
readonly $isLoading: false
readonly $isError: true
readonly $error: FieldError
}
export type ReadyEntityListResult<T extends object> = EntityListResultBase & {
readonly $status: 'ready'
readonly $isLoading: false
readonly $isError: false
readonly $error: null
readonly $isDirty: boolean
readonly items: Array<EntityAccessor<T>>
readonly length: number
add(data?: Partial<T>): string
remove(key: string): void
move(fromIndex: number, toIndex: number): void
}
/**
* Union of all entity list accessor states
*/
export type EntityListAccessorResult<T extends object> =
| LoadingEntityListAccessor
| ErrorEntityListAccessor
| ReadyEntityListAccessor<T>
export type UseEntityListResult<T extends object> =
| LoadingEntityListResult
| ErrorEntityListResult
| ReadyEntityListResult<T>

@@ -96,44 +77,23 @@ // ============================================================================

function createLoadingListAccessor(): LoadingEntityListAccessor {
function createLoadingListResult(): LoadingEntityListResult {
return {
status: 'loading',
isLoading: true,
isError: false,
isDirty: false,
get items(): never {
throw new Error('Cannot access items while loading')
},
length: 0,
add() {
throw new Error('Cannot add items while loading')
},
remove() {
throw new Error('Cannot remove items while loading')
},
move() {
throw new Error('Cannot move items while loading')
},
$status: 'loading',
$isLoading: true,
$isError: false,
$error: null,
$add() { throw new Error('Cannot add items while loading') },
$remove() { throw new Error('Cannot remove items while loading') },
$move() { throw new Error('Cannot move items while loading') },
}
}
function createErrorListAccessor(error: FieldError): ErrorEntityListAccessor {
function createErrorListResult(error: FieldError): ErrorEntityListResult {
return {
status: 'error',
isLoading: false,
isError: true,
error,
isDirty: false,
get items(): never {
throw new Error('Cannot access items after error')
},
length: 0,
add() {
throw new Error('Cannot add items after error')
},
remove() {
throw new Error('Cannot remove items after error')
},
move() {
throw new Error('Cannot move items after error')
},
$status: 'error',
$isLoading: false,
$isError: true,
$error: error,
$add() { throw new Error('Cannot add items after error') },
$remove() { throw new Error('Cannot remove items after error') },
$move() { throw new Error('Cannot move items after error') },
}

@@ -162,3 +122,3 @@ }

definer: SelectionInput<EntityForRoles<TRoleMap, TRoles>, TResult>,
): EntityListAccessorResult<TResult>
): UseEntityListResult<TResult>

@@ -180,3 +140,3 @@ /**

definer: SelectionInput<CommonEntity<TRoleMap>, TResult>,
): EntityListAccessorResult<TResult>
): UseEntityListResult<TResult>

@@ -192,3 +152,3 @@ /**

options: UseEntityListOptions & { selection: SelectionMeta },
): EntityListAccessorResult<object>
): UseEntityListResult<object>

@@ -205,3 +165,3 @@ // ============================================================================

definer?: SelectionInput<any, any>,
): EntityListAccessorResult<any> {
): UseEntityListResult<any> {
const schemaRegistry = useSchemaRegistry()

@@ -259,3 +219,3 @@ const entityType = entity.$name

status: string
result: EntityListAccessorResult<object>
result: UseEntityListResult<any>
} | null>(null)

@@ -320,3 +280,3 @@

// --- Snapshot ---
const getSnapshot = useCallback((): EntityListAccessorResult<object> => {
const getSnapshot = useCallback((): UseEntityListResult<any> => {
const state = listStateRef.current

@@ -331,8 +291,8 @@ const version = versionRef.current

let result: EntityListAccessorResult<object>
let result: UseEntityListResult<any>
if (state.status === 'loading') {
result = createLoadingListAccessor()
result = createLoadingListResult()
} else if (state.status === 'error') {
result = createErrorListAccessor(state.error!)
result = createErrorListResult(state.error!)
} else {

@@ -346,15 +306,16 @@ const items = state.items.map((item) => {

schemaRegistry as SchemaRegistry<Record<string, object>>,
) as unknown as EntityAccessor<object>
) as unknown as EntityAccessor<any>
})
result = {
status: 'ready',
isLoading: false,
isError: false,
isDirty: false,
$status: 'ready',
$isLoading: false,
$isError: false,
$error: null,
$isDirty: false,
items,
length: items.length,
add: addItem,
remove: removeItem,
move: moveItem,
$add: addItem,
$remove: removeItem,
$move: moveItem,
}

@@ -374,3 +335,3 @@ }

const isEqual = useCallback(
(a: EntityListAccessorResult<object>, b: EntityListAccessorResult<object>): boolean => {
(a: UseEntityListResult<any>, b: UseEntityListResult<any>): boolean => {
return a === b

@@ -377,0 +338,0 @@ },

@@ -189,11 +189,11 @@ /**

UseEntityListOptions,
LoadingEntityAccessor,
ErrorEntityAccessor,
NotFoundEntityAccessor,
ReadyEntityAccessor,
EntityAccessorResult,
LoadingEntityListAccessor,
ErrorEntityListAccessor,
ReadyEntityListAccessor,
EntityListAccessorResult,
LoadingEntityResult,
ErrorEntityResult,
NotFoundEntityResult,
ReadyEntityResult,
UseEntityResult,
LoadingEntityListResult,
ErrorEntityListResult,
ReadyEntityListResult,
UseEntityListResult,
// Persistence hook types

@@ -200,0 +200,0 @@ PersistApi,

@@ -50,2 +50,3 @@ import type { SchemaRegistry } from '@contember/bindx'

$isDirty: false,
$isPersisting: false,
$persistedId: null,

@@ -230,2 +231,3 @@ $isNew: true,

$data: null,
$isPersisting: false,
$isNew: false,

@@ -232,0 +234,0 @@ $persistedId: null,

@@ -109,14 +109,15 @@ import React, { memo, useCallback, useEffect, useMemo, useRef, useSyncExternalStore, type ReactElement } from 'react'

// Render based on status
if (result.status === 'loading') {
if (result.$status === 'loading') {
return <>{loading ?? <DefaultLoading />}</>
}
if (result.status === 'error') {
if (result.$status === 'error') {
const error: FieldError = result.$error ?? { source: 'load', message: 'Unknown error', category: 'unknown', retryable: false }
if (errorFallback) {
return <>{errorFallback(result.error)}</>
return <>{errorFallback(error)}</>
}
return <DefaultError error={result.error} />
return <DefaultError error={error} />
}
if (result.status === 'not_found') {
if (result.$status === 'not_found') {
return <>{notFound ?? <DefaultNotFound entityType={entityType} by={by} />}</>

@@ -275,10 +276,15 @@ }

const handle = useMemo(
() => EntityHandle.create(entityId, entityType, store, dispatcher, schemaRegistry, undefined, selection),
const rawHandle = useMemo(
() => EntityHandle.createRaw(entityId, entityType, store, dispatcher, schemaRegistry, undefined, selection),
[entityId, entityType, store, dispatcher, schemaRegistry, selection, version],
)
useEffect(() => () => { handle.dispose() }, [handle])
const handle = useMemo(
() => EntityHandle.wrapProxy(rawHandle),
[rawHandle],
)
return <>{children(handle as unknown as EntityAccessor<unknown>)}</>
useEffect(() => () => { rawHandle.dispose() }, [rawHandle])
return <>{children(handle as EntityAccessor<unknown>)}</>
}

@@ -285,0 +291,0 @@

@@ -89,11 +89,11 @@ import React, { memo, type ReactElement } from 'react'

// Render based on status
if (result.status === 'loading') {
if (result.$status === 'loading') {
return <>{loading ?? <DefaultLoading />}</>
}
if (result.status === 'error') {
if (result.$status === 'error') {
if (errorFallback) {
return <>{errorFallback(result.error)}</>
return <>{errorFallback(result.$error)}</>
}
return <DefaultError error={result.error} />
return <DefaultError error={result.$error} />
}

@@ -107,3 +107,3 @@

// Phase 3: Runtime render — items are already EntityAccessors from the hook
const items = result.items.map((item, index) => {
const items = result.items.map((item: (typeof result.items)[number], index: number) => {
return (

@@ -110,0 +110,0 @@ <React.Fragment key={item.id}>