@civet/core 2.1.2 → 3.0.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.
@@ -9,20 +9,20 @@ export type RequestDetails<Query, Options> = {
9
9
  empty: boolean;
10
10
  options: Options | undefined;
11
11
  };
12
- export type ResourceBaseContext<Item, Query, Options, MetaType extends Meta> = {
12
+ export type ResourceBaseContext<GetResult, Query, Options, MetaType extends Meta> = {
13
13
  name: string;
14
14
  query: Query;
15
15
  options: Options | undefined;
16
16
  request: string;
17
17
  revision: string;
18
- data: Item[];
18
+ data: GetResult;
19
19
  meta: InferSchema<MetaType>;
20
20
  error: Error | undefined;
21
21
  isEmpty: boolean;
22
22
  isIncomplete: boolean;
23
23
  isInitial: boolean;
24
24
  };
25
- export type ResourceContextValue<DataProviderI extends GenericDataProvider, ItemI extends InferItem<DataProviderI> = InferItem<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>> = ResourceBaseContext<ItemI, QueryI, OptionsI, MetaTypeI> & {
25
+ export type ResourceContextValue<DataProviderI extends GenericDataProvider, GetResultI extends InferGetResult<DataProviderI> = InferGetResult<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>> = ResourceBaseContext<GetResultI, QueryI, OptionsI, MetaTypeI> & {
26
26
  dataProvider: DataProviderI;
27
27
  isLoading: boolean;
28
28
  isStale: boolean;
@@ -41,15 +41,19 @@ export type UIPlugin<PluginProps = unknown, PluginTypes = unknown> = React.Compo
41
41
  children: (context: ResourceContextValue<GenericDataProvider> & PluginTypes) => ReactNode;
42
42
  }>;
43
43
  export type Persistence = boolean | 'very';
44
- export type GetCallback<Item> = (error: Error | undefined, done: boolean, result: Item[]) => void;
45
- export type ContinuousGet<Item> = (callback: GetCallback<Item>,
44
+ export interface GetCallback<GetResult> {
45
+ (error: undefined, done: boolean, result: GetResult): void;
46
+ (error: Error, done: boolean, result: undefined): void;
47
+ }
48
+ export type ContinuousGet<GetResult> = (callback: GetCallback<GetResult>,
46
49
  /** @deprecated Use the `abortSignal` that is provided by `handleGet` instead. */
47
50
  abortSignal: AbortSignalProxy) => void;
48
- export default abstract class DataProvider<Item, Query, Options, MetaType extends Meta = Meta, CreateData = Item, CreateResult = void, UpdateData = Item, UpdateResult = void, PatchData = Partial<Item>, PatchResult = void, RemoveResult = void> {
51
+ export default abstract class DataProvider<Item, Query, Options, MetaType extends Meta = Meta, GetResult extends Item | Item[] = Item | Item[], CreateData = Item, CreateResult = void, UpdateData = Item, UpdateResult = void, PatchData = Partial<Item>, PatchResult = void, RemoveResult = void> {
49
52
  readonly _inferItem: Item;
50
53
  readonly _inferQuery: Query;
51
54
  readonly _inferOptions: Options;
52
55
  readonly _inferMetaType: MetaType;
56
+ readonly _inferGetResult: GetResult;
53
57
  readonly _inferCreateData: CreateData;
54
58
  readonly _inferCreateResult: CreateResult;
55
59
  readonly _inferUpdateData: UpdateData;
@@ -69,9 +73,9 @@ export default abstract class DataProvider<Item, Query, Options, MetaType extend
69
73
  releaseInstance(_: InferInstance<MetaType>): void;
70
74
  subscribe(resource: string, callback: () => void): () => void;
71
75
  notify(resource: string): void;
72
- get<ItemI extends Item = Item, QueryI extends Query = Query, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, query: QueryI, options?: OptionsI, meta?: MetaLike<MetaTypeI>, abortSignal?: AbortSignal): Promise<ItemI[]>;
73
- continuousGet<ItemI extends Item = Item, QueryI extends Query = Query, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, query: QueryI, options: OptionsI | undefined, meta: MetaLike<MetaTypeI> | undefined, callback: GetCallback<ItemI>, abortSignal?: AbortSignal): void;
74
- abstract handleGet(resource: string, query: Query, options: Options | undefined, meta: MetaType, abortSignal: AbortSignalProxy): Promise<Item[] | ContinuousGet<Item>> | Item[] | ContinuousGet<Item>;
76
+ get<GetResultI extends GetResult = GetResult, QueryI extends Query = Query, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, query: QueryI, options?: OptionsI, meta?: MetaLike<MetaTypeI>, abortSignal?: AbortSignal): Promise<GetResultI>;
77
+ continuousGet<GetResultI extends GetResult = GetResult, QueryI extends Query = Query, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, query: QueryI, options: OptionsI | undefined, meta: MetaLike<MetaTypeI> | undefined, callback: GetCallback<GetResultI>, abortSignal?: AbortSignal): void;
78
+ abstract handleGet(resource: string, query: Query, options: Options | undefined, meta: MetaType, abortSignal: AbortSignalProxy): Promise<GetResult | ContinuousGet<GetResult>> | GetResult | ContinuousGet<GetResult>;
75
79
  create<CreateResultI extends CreateResult = CreateResult, CreateDataI extends CreateData = CreateData, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, data: CreateDataI, options?: OptionsI, meta?: MetaLike<MetaTypeI>): Promise<CreateResultI>;
76
80
  abstract handleCreate(resource: string, data: CreateData, options: Options | undefined, meta: MetaType): Promise<CreateResult> | CreateResult;
77
81
  update<UpdateResultI extends UpdateResult = UpdateResult, QueryI extends Query = Query, UpdateDataI extends UpdateData = UpdateData, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, query: QueryI, data: UpdateDataI, options?: OptionsI, meta?: MetaLike<MetaTypeI>): Promise<UpdateResultI>;
@@ -81,26 +85,28 @@ export default abstract class DataProvider<Item, Query, Options, MetaType extend
81
85
  remove<RemoveResultI extends RemoveResult = RemoveResult, QueryI extends Query = Query, OptionsI extends Options = Options, MetaTypeI extends MetaType = MetaType>(resource: string, query: QueryI, options?: OptionsI, meta?: MetaLike<MetaTypeI>): Promise<RemoveResultI>;
82
86
  abstract handleRemove(resource: string, query: Query, options: Options | undefined, meta: MetaType): Promise<RemoveResult> | RemoveResult;
83
87
  compareRequests(nextRequestDetails: RequestDetails<Query, Options>, prevRequestDetails: RequestDetails<Query, Options>): boolean;
84
- shouldPersist(nextRequestDetails: RequestDetails<Query, Options>, prevRequestDetails: RequestDetails<Query, Options>, persistent: Persistence, _context: ResourceBaseContext<Item, Query, Options, MetaType>): boolean;
88
+ getEmptyResponse(_requestDetails: RequestDetails<Query, Options>): GetResult;
89
+ shouldPersist(nextRequestDetails: RequestDetails<Query, Options>, prevRequestDetails: RequestDetails<Query, Options>, persistent: Persistence, _context: ResourceBaseContext<GetResult, Query, Options, MetaType>): boolean;
85
90
  compareItemVersions(_item1: Item, _item2: Item): boolean;
86
91
  getItemIdentifier(item: Item): string | undefined;
87
- transition(nextContext: ResourceBaseContext<Item, Query, Options, MetaType>, _prevContext: ResourceBaseContext<Item, Query, Options, MetaType>): Item[];
88
- recycleItems(nextContext: ResourceBaseContext<Item, Query, Options, MetaType>, prevContext: ResourceBaseContext<Item, Query, Options, MetaType>): Item[];
92
+ transition(nextContext: ResourceBaseContext<GetResult, Query, Options, MetaType>, _prevContext: ResourceBaseContext<GetResult, Query, Options, MetaType>): GetResult;
93
+ recycleItems(nextContext: ResourceBaseContext<GetResult, Query, Options, MetaType>, prevContext: ResourceBaseContext<GetResult, Query, Options, MetaType>): GetResult;
89
94
  }
90
95
  export declare const isDataProvider: (dataProvider: unknown) => boolean;
91
96
  export type DataProviderImplementation<DataProviderI extends GenericDataProvider, ConstructorArgs extends any[]> = Constructor<ConstructorArgs, DataProviderI & {
92
- handleGet(resource: string, query: InferQuery<DataProviderI>, options: InferOptions<DataProviderI> | undefined, meta: InferMetaType<DataProviderI>, abortSignal: AbortSignalProxy): Promise<InferItem<DataProviderI>[] | ContinuousGet<InferItem<DataProviderI>>> | InferItem<DataProviderI>[] | ContinuousGet<InferItem<DataProviderI>>;
97
+ handleGet(resource: string, query: InferQuery<DataProviderI>, options: InferOptions<DataProviderI> | undefined, meta: InferMetaType<DataProviderI>, abortSignal: AbortSignalProxy): Promise<InferGetResult<DataProviderI> | ContinuousGet<InferGetResult<DataProviderI>>> | InferGetResult<DataProviderI> | ContinuousGet<InferGetResult<DataProviderI>>;
93
98
  handleCreate(resource: string, data: InferCreateData<DataProviderI>, options: InferOptions<DataProviderI> | undefined, meta: InferMetaType<DataProviderI>): Promise<InferCreateResult<DataProviderI>> | InferCreateResult<DataProviderI>;
94
99
  handleUpdate(resource: string, query: InferQuery<DataProviderI>, data: InferUpdateData<DataProviderI>, options: InferOptions<DataProviderI> | undefined, meta: InferMetaType<DataProviderI>): Promise<InferUpdateResult<DataProviderI>> | InferUpdateResult<DataProviderI>;
95
100
  handlePatch(resource: string, query: InferQuery<DataProviderI>, data: InferPatchData<DataProviderI>, options: InferOptions<DataProviderI> | undefined, meta: InferMetaType<DataProviderI>): Promise<InferPatchResult<DataProviderI>> | InferPatchResult<DataProviderI>;
96
101
  handleRemove(resource: string, query: InferQuery<DataProviderI>, options: InferOptions<DataProviderI> | undefined, meta: InferMetaType<DataProviderI>): Promise<InferRemoveResult<DataProviderI>> | InferRemoveResult<DataProviderI>;
97
102
  }>;
98
- export type GenericDataProvider = DataProvider<unknown, unknown, unknown, Meta, unknown, unknown, unknown, unknown, unknown, unknown, unknown>;
103
+ export type GenericDataProvider = DataProvider<unknown, unknown, unknown, Meta, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown>;
99
104
  export type GenericDataProviderImplementation = DataProviderImplementation<GenericDataProvider, any[]>;
100
105
  export type InferItem<DataProviderI extends GenericDataProvider> = DataProviderI['_inferItem'];
101
106
  export type InferQuery<DataProviderI extends GenericDataProvider> = DataProviderI['_inferQuery'];
102
107
  export type InferOptions<DataProviderI extends GenericDataProvider> = DataProviderI['_inferOptions'];
103
108
  export type InferMetaType<DataProviderI extends GenericDataProvider> = DataProviderI['_inferMetaType'];
109
+ export type InferGetResult<DataProviderI extends GenericDataProvider> = DataProviderI['_inferGetResult'];
104
110
  export type InferCreateData<DataProviderI extends GenericDataProvider> = DataProviderI['_inferCreateData'];
105
111
  export type InferCreateResult<DataProviderI extends GenericDataProvider> = DataProviderI['_inferCreateResult'];
106
112
  export type InferUpdateData<DataProviderI extends GenericDataProvider> = DataProviderI['_inferUpdateData'];
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { GenericDataProvider, InferItem, InferMetaType, InferOptions, InferQuery, Persistence } from './DataProvider';
2
+ import { GenericDataProvider, InferGetResult, InferMetaType, InferOptions, InferQuery, Persistence } from './DataProvider';
3
3
  /**
4
4
  * Provides data based on the given request details and DataProvider.
5
5
  * Context provider for the ResourceContext.
@@ -8,7 +8,7 @@ import { GenericDataProvider, InferItem, InferMetaType, InferOptions, InferQuery
8
8
  *
9
9
  * The provided DataProvider must not be changed.
10
10
  */
11
- export default function Resource<DataProviderI extends GenericDataProvider, ItemI extends InferItem<DataProviderI> = InferItem<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ dataProvider, name, query, empty, options, persistent, children, ...rest }: {
11
+ export default function Resource<DataProviderI extends GenericDataProvider, GetResultI extends InferGetResult<DataProviderI> = InferGetResult<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ dataProvider, name, query, empty, options, persistent, children, ...rest }: {
12
12
  /** DataProvider to be used for requests - must not be changed */
13
13
  dataProvider?: DataProviderI;
14
14
  /** Resource name */
@@ -1,5 +1,5 @@
1
1
  import { PropsWithChildren, ReactNode } from 'react';
2
- import { GenericDataProvider, InferItem, InferMetaType, InferOptions, InferQuery, ResourceContextValue } from './DataProvider';
3
- export default function ResourceProvider<DataProviderI extends GenericDataProvider, ItemI extends InferItem<DataProviderI> = InferItem<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ resource, children, }: PropsWithChildren<{
4
- resource: ResourceContextValue<DataProviderI, ItemI, QueryI, OptionsI, MetaTypeI>;
2
+ import { GenericDataProvider, InferGetResult, InferMetaType, InferOptions, InferQuery, ResourceContextValue } from './DataProvider';
3
+ export default function ResourceProvider<DataProviderI extends GenericDataProvider, GetResultI extends InferGetResult<DataProviderI> = InferGetResult<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>({ resource, children, }: PropsWithChildren<{
4
+ resource: ResourceContextValue<DataProviderI, GetResultI, QueryI, OptionsI, MetaTypeI>;
5
5
  }>): ReactNode;
package/dist/context.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ConsumerProps, ExoticComponent, ReactNode } from 'react';
2
- import { GenericDataProvider, InferItem, InferMetaType, InferOptions, InferQuery, ResourceContextValue } from './DataProvider';
2
+ import { GenericDataProvider, InferGetResult, InferMetaType, InferOptions, InferQuery, ResourceContextValue } from './DataProvider';
3
3
  export type ConfigContextValue<DataProviderI extends GenericDataProvider> = {
4
4
  dataProvider?: DataProviderI;
5
5
  };
@@ -10,6 +10,6 @@ export declare const ConfigConsumer: ExoticComponent<GenericDataProvider> & {
10
10
  export declare const useConfigContext: <DataProviderI extends GenericDataProvider>() => ConfigContextValue<DataProviderI>;
11
11
  export declare const ResourceContext: import('react').Context<ResourceContextValue<GenericDataProvider>>;
12
12
  export declare const ResourceConsumer: ExoticComponent<GenericDataProvider> & {
13
- <DataProviderI extends GenericDataProvider, ItemI extends InferItem<DataProviderI> = InferItem<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>(props: ConsumerProps<ResourceContextValue<DataProviderI, ItemI, QueryI, OptionsI, MetaTypeI>>): ReactNode;
13
+ <DataProviderI extends GenericDataProvider, GetResultI extends InferGetResult<DataProviderI> = InferGetResult<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>(props: ConsumerProps<ResourceContextValue<DataProviderI, GetResultI, QueryI, OptionsI, MetaTypeI>>): ReactNode;
14
14
  };
15
- export declare const useResourceContext: <DataProviderI extends GenericDataProvider, ItemI extends InferItem<DataProviderI> = InferItem<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>() => ResourceContextValue<DataProviderI, ItemI, QueryI, OptionsI, MetaTypeI>;
15
+ export declare const useResourceContext: <DataProviderI extends GenericDataProvider, GetResultI extends InferGetResult<DataProviderI> = InferGetResult<DataProviderI>, QueryI extends InferQuery<DataProviderI> = InferQuery<DataProviderI>, OptionsI extends InferOptions<DataProviderI> = InferOptions<DataProviderI>, MetaTypeI extends InferMetaType<DataProviderI> = InferMetaType<DataProviderI>>() => ResourceContextValue<DataProviderI, GetResultI, QueryI, OptionsI, MetaTypeI>;
package/dist/main.d.ts CHANGED
@@ -8,7 +8,7 @@ export type { ConfigContextValue } from './context';
8
8
  export { default as createPlugin } from './createPlugin';
9
9
  export type { DataProviderImplementationWithPlugin, DataProviderPlugin, } from './createPlugin';
10
10
  export { default as DataProvider, isDataProvider } from './DataProvider';
11
- export type { ContextPlugin, ContinuousGet, DataProviderImplementation, GenericDataProvider, GenericDataProviderImplementation, GetCallback, InferCreateData, InferCreateResult, InferItem, InferMetaType, InferOptions, InferPatchData, InferPatchResult, InferQuery, InferRemoveResult, InferUpdateData, InferUpdateResult, Persistence, RequestDetails, ResourceBaseContext, ResourceContextValue, UIPlugin, } from './DataProvider';
11
+ export type { ContextPlugin, ContinuousGet, DataProviderImplementation, GenericDataProvider, GenericDataProviderImplementation, GetCallback, InferCreateData, InferCreateResult, InferGetResult, InferItem, InferMetaType, InferOptions, InferPatchData, InferPatchResult, InferQuery, InferRemoveResult, InferUpdateData, InferUpdateResult, Persistence, RequestDetails, ResourceBaseContext, ResourceContextValue, UIPlugin, } from './DataProvider';
12
12
  export { default as Meta } from './Meta';
13
13
  export type { InferInstance, InferSchema, MetaLike } from './Meta';
14
14
  export { default as Notifier } from './Notifier';